aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Documentation/00-INDEX24
-rw-r--r--Documentation/ABI/testing/sysfs-tty3
-rw-r--r--Documentation/RCU/00-INDEX2
-rw-r--r--Documentation/arm/00-INDEX14
-rw-r--r--Documentation/blackfin/00-INDEX6
-rw-r--r--Documentation/block/00-INDEX2
-rw-r--r--Documentation/devicetree/00-INDEX2
-rw-r--r--Documentation/devicetree/bindings/arm/keystone/keystone.txt10
-rw-r--r--Documentation/devicetree/bindings/arm/omap/dmm.txt22
-rw-r--r--Documentation/devicetree/bindings/arm/omap/omap.txt6
-rw-r--r--Documentation/devicetree/bindings/arm/samsung/pmu.txt15
-rw-r--r--Documentation/devicetree/bindings/clock/exynos4-clock.txt259
-rw-r--r--Documentation/devicetree/bindings/clock/exynos5250-clock.txt163
-rw-r--r--Documentation/devicetree/bindings/clock/exynos5420-clock.txt184
-rw-r--r--Documentation/devicetree/bindings/clock/exynos5440-clock.txt45
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/lsi,zevio-intc.txt18
-rw-r--r--Documentation/devicetree/bindings/mmc/atmel-hsmci.txt5
-rw-r--r--Documentation/devicetree/bindings/net/allwinner,sun4i-emac.txt5
-rw-r--r--Documentation/devicetree/bindings/net/allwinner,sun4i-mdio.txt5
-rw-r--r--Documentation/devicetree/bindings/power/bq2415x.txt47
-rw-r--r--Documentation/devicetree/bindings/serial/atmel-usart.txt3
-rw-r--r--Documentation/devicetree/bindings/spi/spi_atmel.txt5
-rw-r--r--Documentation/devicetree/bindings/usb/ehci-omap.txt2
-rw-r--r--Documentation/devicetree/bindings/usb/ohci-omap3.txt2
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt9
-rw-r--r--Documentation/dvb/contributors.txt2
-rw-r--r--Documentation/fb/00-INDEX6
-rw-r--r--Documentation/filesystems/00-INDEX2
-rw-r--r--Documentation/filesystems/nfs/00-INDEX4
-rw-r--r--Documentation/i2c/instantiating-devices41
-rw-r--r--Documentation/ide/00-INDEX2
-rw-r--r--Documentation/kernel-parameters.txt8
-rw-r--r--Documentation/laptops/00-INDEX6
-rw-r--r--Documentation/leds/00-INDEX8
-rw-r--r--Documentation/m68k/00-INDEX2
-rw-r--r--Documentation/networking/00-INDEX30
-rw-r--r--Documentation/phy.txt26
-rw-r--r--Documentation/power/00-INDEX6
-rw-r--r--Documentation/ptp/testptp.c11
-rw-r--r--Documentation/s390/00-INDEX8
-rw-r--r--Documentation/scheduler/00-INDEX2
-rw-r--r--Documentation/scsi/00-INDEX16
-rw-r--r--Documentation/serial/00-INDEX6
-rw-r--r--Documentation/spi/00-INDEX22
-rw-r--r--Documentation/spi/spi-summary17
-rw-r--r--Documentation/timers/00-INDEX2
-rw-r--r--Documentation/virtual/kvm/00-INDEX2
-rw-r--r--Documentation/vm/00-INDEX4
-rw-r--r--Documentation/w1/masters/00-INDEX4
-rw-r--r--Documentation/w1/slaves/00-INDEX2
-rw-r--r--Documentation/x86/00-INDEX18
-rw-r--r--Documentation/zh_CN/arm64/booting.txt65
-rw-r--r--Documentation/zh_CN/arm64/memory.txt46
-rw-r--r--Documentation/zh_CN/arm64/tagged-pointers.txt52
-rw-r--r--MAINTAINERS14
-rw-r--r--Makefile2
-rw-r--r--arch/arm/Kconfig10
-rw-r--r--arch/arm/Kconfig.debug2
-rw-r--r--arch/arm/Makefile1
-rw-r--r--arch/arm/boot/dts/Makefile85
-rw-r--r--arch/arm/boot/dts/am335x-evm.dts60
-rw-r--r--arch/arm/boot/dts/am335x-evmsk.dts54
-rw-r--r--arch/arm/boot/dts/am33xx.dtsi13
-rw-r--r--arch/arm/boot/dts/am3517-craneboard.dts174
-rw-r--r--arch/arm/boot/dts/am4372.dtsi46
-rw-r--r--arch/arm/boot/dts/am437x-gp-evm.dts127
-rw-r--r--arch/arm/boot/dts/am43x-epos-evm.dts183
-rw-r--r--arch/arm/boot/dts/at91-sama5d3_xplained.dts229
-rw-r--r--arch/arm/boot/dts/at91sam9263.dtsi2
-rw-r--r--arch/arm/boot/dts/at91sam9n12ek.dts4
-rw-r--r--arch/arm/boot/dts/bcm11351-brt.dts54
-rw-r--r--arch/arm/boot/dts/bcm11351.dtsi192
-rw-r--r--arch/arm/boot/dts/bcm28155-ap.dts5
-rw-r--r--arch/arm/boot/dts/bcm2835.dtsi92
-rw-r--r--arch/arm/boot/dts/bcm4708-netgear-r6250.dts35
-rw-r--r--arch/arm/boot/dts/bcm4708.dtsi34
-rw-r--r--arch/arm/boot/dts/bcm5301x.dtsi95
-rw-r--r--arch/arm/boot/dts/dra7.dtsi151
-rw-r--r--arch/arm/boot/dts/efm32gg-dk3750.dts2
-rw-r--r--arch/arm/boot/dts/efm32gg.dtsi4
-rw-r--r--arch/arm/boot/dts/exynos4.dtsi73
-rw-r--r--arch/arm/boot/dts/exynos4210.dtsi9
-rw-r--r--arch/arm/boot/dts/exynos4412-odroidx.dts2
-rw-r--r--arch/arm/boot/dts/exynos4412-origen.dts4
-rw-r--r--arch/arm/boot/dts/exynos4x12.dtsi34
-rw-r--r--arch/arm/boot/dts/exynos5.dtsi7
-rw-r--r--arch/arm/boot/dts/exynos5250-arndale.dts4
-rw-r--r--arch/arm/boot/dts/exynos5250-smdk5250.dts146
-rw-r--r--arch/arm/boot/dts/exynos5250-snow.dts4
-rw-r--r--arch/arm/boot/dts/exynos5250.dtsi118
-rw-r--r--arch/arm/boot/dts/exynos5420-arndale-octa.dts298
-rw-r--r--arch/arm/boot/dts/exynos5420-smdk5420.dts253
-rw-r--r--arch/arm/boot/dts/exynos5420.dtsi159
-rw-r--r--arch/arm/boot/dts/exynos5440.dtsi33
-rw-r--r--arch/arm/boot/dts/imx23-evk.dts8
-rw-r--r--arch/arm/boot/dts/imx23-olinuxino.dts5
-rw-r--r--arch/arm/boot/dts/imx23-stmp378x_devb.dts5
-rw-r--r--arch/arm/boot/dts/imx23.dtsi8
-rw-r--r--arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi73
-rw-r--r--arch/arm/boot/dts/imx25-eukrea-mbimxsd25-baseboard.dts174
-rw-r--r--arch/arm/boot/dts/imx25-pinfunc.h494
-rw-r--r--arch/arm/boot/dts/imx25.dtsi18
-rw-r--r--arch/arm/boot/dts/imx27-apf27.dts38
-rw-r--r--arch/arm/boot/dts/imx27-apf27dev.dts149
-rw-r--r--arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts77
-rw-r--r--arch/arm/boot/dts/imx27-phytec-phycard-s-som.dts44
-rw-r--r--arch/arm/boot/dts/imx27-phytec-phycard-s-som.dtsi103
-rw-r--r--arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts178
-rw-r--r--arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi (renamed from arch/arm/boot/dts/imx27-phytec-phycore-som.dts)133
-rw-r--r--arch/arm/boot/dts/imx27-pinfunc.h526
-rw-r--r--arch/arm/boot/dts/imx27.dtsi207
-rw-r--r--arch/arm/boot/dts/imx28-apf28dev.dts29
-rw-r--r--arch/arm/boot/dts/imx28-apx4devkit.dts5
-rw-r--r--arch/arm/boot/dts/imx28-cfa10036.dts2
-rw-r--r--arch/arm/boot/dts/imx28-cfa10037.dts7
-rw-r--r--arch/arm/boot/dts/imx28-cfa10049.dts31
-rw-r--r--arch/arm/boot/dts/imx28-cfa10057.dts7
-rw-r--r--arch/arm/boot/dts/imx28-cfa10058.dts7
-rw-r--r--arch/arm/boot/dts/imx28-duckbill.dts121
-rw-r--r--arch/arm/boot/dts/imx28-eukrea-mbmx283lc.dts71
-rw-r--r--arch/arm/boot/dts/imx28-eukrea-mbmx287lc.dts50
-rw-r--r--arch/arm/boot/dts/imx28-eukrea-mbmx28lc.dtsi326
-rw-r--r--arch/arm/boot/dts/imx28-evk.dts24
-rw-r--r--arch/arm/boot/dts/imx28-m28cu3.dts17
-rw-r--r--arch/arm/boot/dts/imx28-m28evk.dts20
-rw-r--r--arch/arm/boot/dts/imx28-sps1.dts7
-rw-r--r--arch/arm/boot/dts/imx28-tx28.dts24
-rw-r--r--arch/arm/boot/dts/imx28.dtsi65
-rw-r--r--arch/arm/boot/dts/imx35-eukrea-cpuimx35.dtsi81
-rw-r--r--arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard.dts143
-rw-r--r--arch/arm/boot/dts/imx35.dtsi359
-rw-r--r--arch/arm/boot/dts/imx50-evk.dts119
-rw-r--r--arch/arm/boot/dts/imx50-pinfunc.h923
-rw-r--r--arch/arm/boot/dts/imx50.dtsi478
-rw-r--r--arch/arm/boot/dts/imx51-apf51.dts40
-rw-r--r--arch/arm/boot/dts/imx51-apf51dev.dts102
-rw-r--r--arch/arm/boot/dts/imx51-babbage.dts255
-rw-r--r--arch/arm/boot/dts/imx51-eukrea-cpuimx51.dtsi93
-rw-r--r--arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard.dts175
-rw-r--r--arch/arm/boot/dts/imx51.dtsi459
-rw-r--r--arch/arm/boot/dts/imx53-ard.dts33
-rw-r--r--arch/arm/boot/dts/imx53-evk.dts126
-rw-r--r--arch/arm/boot/dts/imx53-m53evk.dts232
-rw-r--r--arch/arm/boot/dts/imx53-mba53.dts39
-rw-r--r--arch/arm/boot/dts/imx53-qsb-common.dtsi336
-rw-r--r--arch/arm/boot/dts/imx53-qsb.dts210
-rw-r--r--arch/arm/boot/dts/imx53-qsrb.dts158
-rw-r--r--arch/arm/boot/dts/imx53-smd.dts119
-rw-r--r--arch/arm/boot/dts/imx53-tqma53.dtsi175
-rw-r--r--arch/arm/boot/dts/imx53-tx53-x03x.dts315
-rw-r--r--arch/arm/boot/dts/imx53-tx53-x13x.dts243
-rw-r--r--arch/arm/boot/dts/imx53-tx53.dtsi510
-rw-r--r--arch/arm/boot/dts/imx53-voipac-bsb.dts159
-rw-r--r--arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi277
-rw-r--r--arch/arm/boot/dts/imx53.dtsi663
-rw-r--r--arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts23
-rw-r--r--arch/arm/boot/dts/imx6dl-gw51xx.dts19
-rw-r--r--arch/arm/boot/dts/imx6dl-gw52xx.dts19
-rw-r--r--arch/arm/boot/dts/imx6dl-gw53xx.dts19
-rw-r--r--arch/arm/boot/dts/imx6dl-gw54xx.dts19
-rw-r--r--arch/arm/boot/dts/imx6dl-nitrogen6x.dts21
-rw-r--r--arch/arm/boot/dts/imx6dl-pinfunc.h2
-rw-r--r--arch/arm/boot/dts/imx6dl-sabrelite.dts20
-rw-r--r--arch/arm/boot/dts/imx6dl.dtsi29
-rw-r--r--arch/arm/boot/dts/imx6q-arm2.dts140
-rw-r--r--arch/arm/boot/dts/imx6q-cm-fx6.dts107
-rw-r--r--arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts23
-rw-r--r--arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts372
-rw-r--r--arch/arm/boot/dts/imx6q-gk802.dts171
-rw-r--r--arch/arm/boot/dts/imx6q-gw51xx.dts19
-rw-r--r--arch/arm/boot/dts/imx6q-gw52xx.dts23
-rw-r--r--arch/arm/boot/dts/imx6q-gw53xx.dts23
-rw-r--r--arch/arm/boot/dts/imx6q-gw5400-a.dts546
-rw-r--r--arch/arm/boot/dts/imx6q-gw54xx.dts23
-rw-r--r--arch/arm/boot/dts/imx6q-nitrogen6x.dts25
-rw-r--r--arch/arm/boot/dts/imx6q-phytec-pbab01.dts16
-rw-r--r--arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi167
-rw-r--r--arch/arm/boot/dts/imx6q-pinfunc.h2
-rw-r--r--arch/arm/boot/dts/imx6q-sabrelite.dts178
-rw-r--r--arch/arm/boot/dts/imx6q-sbc6x.dts58
-rw-r--r--arch/arm/boot/dts/imx6q-udoo.dts54
-rw-r--r--arch/arm/boot/dts/imx6q.dtsi23
-rw-r--r--arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi199
-rw-r--r--arch/arm/boot/dts/imx6qdl-gw51xx.dtsi374
-rw-r--r--arch/arm/boot/dts/imx6qdl-gw52xx.dtsi490
-rw-r--r--arch/arm/boot/dts/imx6qdl-gw53xx.dtsi553
-rw-r--r--arch/arm/boot/dts/imx6qdl-gw54xx.dtsi580
-rw-r--r--arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi422
-rw-r--r--arch/arm/boot/dts/imx6qdl-sabreauto.dtsi378
-rw-r--r--arch/arm/boot/dts/imx6qdl-sabrelite.dtsi423
-rw-r--r--arch/arm/boot/dts/imx6qdl-sabresd.dtsi277
-rw-r--r--arch/arm/boot/dts/imx6qdl-wandboard.dtsi131
-rw-r--r--arch/arm/boot/dts/imx6qdl.dtsi938
-rw-r--r--arch/arm/boot/dts/imx6sl-evk.dts427
-rw-r--r--arch/arm/boot/dts/imx6sl.dtsi385
-rw-r--r--arch/arm/boot/dts/k2e-clocks.dtsi78
-rw-r--r--arch/arm/boot/dts/k2e-evm.dts60
-rw-r--r--arch/arm/boot/dts/k2e.dtsi80
-rw-r--r--arch/arm/boot/dts/k2hk-clocks.dtsi426
-rw-r--r--arch/arm/boot/dts/k2hk-evm.dts83
-rw-r--r--arch/arm/boot/dts/k2hk.dtsi46
-rw-r--r--arch/arm/boot/dts/k2l-clocks.dtsi267
-rw-r--r--arch/arm/boot/dts/k2l-evm.dts37
-rw-r--r--arch/arm/boot/dts/k2l.dtsi55
-rw-r--r--arch/arm/boot/dts/keystone-clocks.dtsi427
-rw-r--r--arch/arm/boot/dts/keystone.dtsi102
-rw-r--r--arch/arm/boot/dts/omap2420.dtsi2
-rw-r--r--arch/arm/boot/dts/omap2430.dtsi5
-rw-r--r--arch/arm/boot/dts/omap3-beagle-xm.dts4
-rw-r--r--arch/arm/boot/dts/omap3-beagle.dts4
-rw-r--r--arch/arm/boot/dts/omap3-cm-t3517.dts136
-rw-r--r--arch/arm/boot/dts/omap3-cm-t3530.dts12
-rw-r--r--arch/arm/boot/dts/omap3-cm-t3730.dts57
-rw-r--r--arch/arm/boot/dts/omap3-cm-t3x.dtsi110
-rw-r--r--arch/arm/boot/dts/omap3-cm-t3x30.dtsi74
-rw-r--r--arch/arm/boot/dts/omap3-devkit8000.dts16
-rw-r--r--arch/arm/boot/dts/omap3-gta04.dts51
-rw-r--r--arch/arm/boot/dts/omap3-igep.dtsi1
-rw-r--r--arch/arm/boot/dts/omap3-lilly-a83x.dtsi459
-rw-r--r--arch/arm/boot/dts/omap3-lilly-dbb056.dts170
-rw-r--r--arch/arm/boot/dts/omap3-n900.dts90
-rw-r--r--arch/arm/boot/dts/omap3-overo.dtsi4
-rw-r--r--arch/arm/boot/dts/omap3-sb-t35.dtsi29
-rw-r--r--arch/arm/boot/dts/omap3-sbc-t3517.dts43
-rw-r--r--arch/arm/boot/dts/omap3-sbc-t3530.dts36
-rw-r--r--arch/arm/boot/dts/omap3-sbc-t3730.dts23
-rw-r--r--arch/arm/boot/dts/omap3.dtsi14
-rw-r--r--arch/arm/boot/dts/omap3430-sdp.dts7
-rw-r--r--arch/arm/boot/dts/omap3430es1-clocks.dtsi10
-rw-r--r--arch/arm/boot/dts/omap36xx-omap3430es2plus-clocks.dtsi10
-rw-r--r--arch/arm/boot/dts/omap36xx.dtsi20
-rw-r--r--arch/arm/boot/dts/omap4-duovero-parlor.dts146
-rw-r--r--arch/arm/boot/dts/omap4-duovero.dtsi252
-rw-r--r--arch/arm/boot/dts/omap4-panda-common.dtsi31
-rw-r--r--arch/arm/boot/dts/omap4-sdp.dts33
-rw-r--r--arch/arm/boot/dts/omap4.dtsi49
-rw-r--r--arch/arm/boot/dts/omap443x.dtsi26
-rw-r--r--arch/arm/boot/dts/omap4460.dtsi37
-rw-r--r--arch/arm/boot/dts/omap5-uevm.dts8
-rw-r--r--arch/arm/boot/dts/omap5.dtsi28
-rw-r--r--arch/arm/boot/dts/qcom-msm8660-surf.dts59
-rw-r--r--arch/arm/boot/dts/qcom-msm8660.dtsi87
-rw-r--r--arch/arm/boot/dts/qcom-msm8960-cdp.dts66
-rw-r--r--arch/arm/boot/dts/qcom-msm8960.dtsi129
-rw-r--r--arch/arm/boot/dts/qcom-msm8974.dtsi76
-rw-r--r--arch/arm/boot/dts/r7s72100-genmai-reference.dts13
-rw-r--r--arch/arm/boot/dts/r7s72100.dtsi147
-rw-r--r--arch/arm/boot/dts/r8a7778.dtsi40
-rw-r--r--arch/arm/boot/dts/r8a7790-lager.dts153
-rw-r--r--arch/arm/boot/dts/r8a7790.dtsi169
-rw-r--r--arch/arm/boot/dts/r8a7791-koelsch-reference.dts115
-rw-r--r--arch/arm/boot/dts/r8a7791-koelsch.dts274
-rw-r--r--arch/arm/boot/dts/r8a7791.dtsi323
-rw-r--r--arch/arm/boot/dts/sama5d3.dtsi2
-rw-r--r--arch/arm/boot/dts/ste-dbx5x0.dtsi12
-rw-r--r--arch/arm/boot/dts/ste-href-ab8500.dtsi428
-rw-r--r--arch/arm/boot/dts/ste-href-ab8505.dtsi240
-rw-r--r--arch/arm/boot/dts/ste-href.dtsi1
-rw-r--r--arch/arm/boot/dts/ste-hrefprev60.dtsi1
-rw-r--r--arch/arm/boot/dts/ste-hrefv60plus.dtsi1
-rw-r--r--arch/arm/boot/dts/ste-snowball.dts1
-rw-r--r--arch/arm/boot/dts/ste-u300.dts2
-rw-r--r--arch/arm/boot/dts/sun4i-a10-a1000.dts22
-rw-r--r--arch/arm/boot/dts/sun4i-a10-hackberry.dts18
-rw-r--r--arch/arm/boot/dts/sun4i-a10-pcduino.dts48
-rw-r--r--arch/arm/boot/dts/sun4i-a10.dtsi153
-rw-r--r--arch/arm/boot/dts/sun5i-a10s.dtsi128
-rw-r--r--arch/arm/boot/dts/sun5i-a13.dtsi125
-rw-r--r--arch/arm/boot/dts/sun6i-a31.dtsi125
-rw-r--r--arch/arm/boot/dts/sun7i-a20-cubieboard2.dts27
-rw-r--r--arch/arm/boot/dts/sun7i-a20-cubietruck.dts12
-rw-r--r--arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts30
-rw-r--r--arch/arm/boot/dts/sun7i-a20.dtsi244
-rw-r--r--arch/arm/boot/dts/tps65910.dtsi5
-rw-r--r--arch/arm/boot/dts/twl4030.dtsi7
-rw-r--r--arch/arm/boot/dts/vf610-cosmic.dts29
-rw-r--r--arch/arm/boot/dts/vf610-twr.dts158
-rw-r--r--arch/arm/boot/dts/vf610.dtsi273
-rw-r--r--arch/arm/boot/dts/zynq-7000.dtsi1
-rw-r--r--arch/arm/configs/multi_v7_defconfig1
-rw-r--r--arch/arm/include/asm/timex.h6
-rw-r--r--arch/arm/mach-at91/at91rm9200.c1
-rw-r--r--arch/arm/mach-at91/at91rm9200_devices.c11
-rw-r--r--arch/arm/mach-at91/at91rm9200_time.c1
-rw-r--r--arch/arm/mach-at91/at91sam9260.c1
-rw-r--r--arch/arm/mach-at91/at91sam9260_devices.c8
-rw-r--r--arch/arm/mach-at91/at91sam9261.c1
-rw-r--r--arch/arm/mach-at91/at91sam9261_devices.c5
-rw-r--r--arch/arm/mach-at91/at91sam9263.c1
-rw-r--r--arch/arm/mach-at91/at91sam9263_devices.c5
-rw-r--r--arch/arm/mach-at91/at91sam926x_time.c1
-rw-r--r--arch/arm/mach-at91/at91sam9g45.c1
-rw-r--r--arch/arm/mach-at91/at91sam9g45_devices.c6
-rw-r--r--arch/arm/mach-at91/at91sam9rl.c1
-rw-r--r--arch/arm/mach-at91/at91sam9rl_devices.c6
-rw-r--r--arch/arm/mach-at91/at91x40.c2
-rw-r--r--arch/arm/mach-at91/at91x40_time.c1
-rw-r--r--arch/arm/mach-at91/board-gsia18s.c1
-rw-r--r--arch/arm/mach-at91/board-pcontrol-g20.c1
-rw-r--r--arch/arm/mach-at91/board-stamp9g20.c1
-rw-r--r--arch/arm/mach-at91/include/mach/at91x40.h2
-rw-r--r--arch/arm/mach-at91/include/mach/timex.h37
-rw-r--r--arch/arm/mach-at91/pm.c1
-rw-r--r--arch/arm/mach-clps711x/include/mach/timex.h2
-rw-r--r--arch/arm/mach-davinci/include/mach/timex.h22
-rw-r--r--arch/arm/mach-dove/include/mach/timex.h9
-rw-r--r--arch/arm/mach-ebsa110/include/mach/timex.h19
-rw-r--r--arch/arm/mach-efm32/include/mach/entry-macro.S4
-rw-r--r--arch/arm/mach-efm32/include/mach/timex.h3
-rw-r--r--arch/arm/mach-ep93xx/core.c2
-rw-r--r--arch/arm/mach-ep93xx/include/mach/timex.h5
-rw-r--r--arch/arm/mach-exynos/include/mach/timex.h29
-rw-r--r--arch/arm/mach-footbridge/include/mach/timex.h18
-rw-r--r--arch/arm/mach-gemini/include/mach/timex.h13
-rw-r--r--arch/arm/mach-hisi/Kconfig2
-rw-r--r--arch/arm/mach-imx/clk-imx6q.c3
-rw-r--r--arch/arm/mach-imx/clk-imx6sl.c3
-rw-r--r--arch/arm/mach-imx/pm-imx6q.c2
-rw-r--r--arch/arm/mach-integrator/include/mach/timex.h26
-rw-r--r--arch/arm/mach-iop13xx/include/mach/timex.h1
-rw-r--r--arch/arm/mach-iop32x/include/mach/timex.h6
-rw-r--r--arch/arm/mach-iop33x/include/mach/timex.h6
-rw-r--r--arch/arm/mach-ixp4xx/common.c14
-rw-r--r--arch/arm/mach-ixp4xx/include/mach/timex.h16
-rw-r--r--arch/arm/mach-keystone/keystone.c3
-rw-r--r--arch/arm/mach-kirkwood/include/mach/timex.h10
-rw-r--r--arch/arm/mach-ks8695/include/mach/timex.h21
-rw-r--r--arch/arm/mach-lpc32xx/include/mach/timex.h28
-rw-r--r--arch/arm/mach-mmp/include/mach/timex.h13
-rw-r--r--arch/arm/mach-mmp/time.c12
-rw-r--r--arch/arm/mach-moxart/Kconfig1
-rw-r--r--arch/arm/mach-msm/Kconfig54
-rw-r--r--arch/arm/mach-msm/Makefile8
-rw-r--r--arch/arm/mach-msm/common.h1
-rw-r--r--arch/arm/mach-msm/headsmp.S39
-rw-r--r--arch/arm/mach-msm/hotplug.c74
-rw-r--r--arch/arm/mach-msm/include/mach/timex.h21
-rw-r--r--arch/arm/mach-mv78xx0/include/mach/timex.h9
-rw-r--r--arch/arm/mach-mxs/mach-mxs.c33
-rw-r--r--arch/arm/mach-netx/include/mach/timex.h20
-rw-r--r--arch/arm/mach-netx/time.c11
-rw-r--r--arch/arm/mach-omap1/include/mach/timex.h5
-rw-r--r--arch/arm/mach-omap2/Kconfig2
-rw-r--r--arch/arm/mach-omap2/gpmc-nand.c31
-rw-r--r--arch/arm/mach-omap2/include/mach/timex.h5
-rw-r--r--arch/arm/mach-omap2/pdata-quirks.c93
-rw-r--r--arch/arm/mach-orion5x/include/mach/timex.h11
-rw-r--r--arch/arm/mach-pxa/am300epd.c1
-rw-r--r--arch/arm/mach-pxa/include/mach/balloon3.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/corgi.h1
-rw-r--r--arch/arm/mach-pxa/include/mach/csb726.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/gumstix.h1
-rw-r--r--arch/arm/mach-pxa/include/mach/idp.h1
-rw-r--r--arch/arm/mach-pxa/include/mach/palmld.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/palmt5.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/palmtc.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/palmtx.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/pcm027.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/pcm990_baseboard.h1
-rw-r--r--arch/arm/mach-pxa/include/mach/poodle.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/spitz.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/timex.h34
-rw-r--r--arch/arm/mach-pxa/include/mach/tosa.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/trizeps4.h2
-rw-r--r--arch/arm/mach-qcom/Kconfig33
-rw-r--r--arch/arm/mach-qcom/Makefile5
-rw-r--r--arch/arm/mach-qcom/board.c (renamed from arch/arm/mach-msm/board-dt.c)15
-rw-r--r--arch/arm/mach-qcom/platsmp.c (renamed from arch/arm/mach-msm/platsmp.c)66
-rw-r--r--arch/arm/mach-qcom/scm-boot.c (renamed from arch/arm/mach-msm/scm-boot.c)0
-rw-r--r--arch/arm/mach-qcom/scm-boot.h (renamed from arch/arm/mach-msm/scm-boot.h)0
-rw-r--r--arch/arm/mach-qcom/scm.c (renamed from arch/arm/mach-msm/scm.c)0
-rw-r--r--arch/arm/mach-qcom/scm.h (renamed from arch/arm/mach-msm/scm.h)0
-rw-r--r--arch/arm/mach-realview/include/mach/timex.h23
-rw-r--r--arch/arm/mach-rpc/include/mach/timex.h17
-rw-r--r--arch/arm/mach-rpc/time.c15
-rw-r--r--arch/arm/mach-s3c24xx/include/mach/timex.h24
-rw-r--r--arch/arm/mach-s3c64xx/include/mach/timex.h24
-rw-r--r--arch/arm/mach-s5p64x0/include/mach/timex.h27
-rw-r--r--arch/arm/mach-s5pc100/include/mach/timex.h24
-rw-r--r--arch/arm/mach-s5pv210/include/mach/timex.h29
-rw-r--r--arch/arm/mach-sa1100/include/mach/timex.h12
-rw-r--r--arch/arm/mach-sa1100/time.c8
-rw-r--r--arch/arm/mach-shmobile/Kconfig2
-rw-r--r--arch/arm/mach-shmobile/include/mach/timex.h6
-rw-r--r--arch/arm/mach-spear/include/mach/timex.h19
-rw-r--r--arch/arm/mach-ux500/Kconfig5
-rw-r--r--arch/arm/mach-ux500/Makefile1
-rw-r--r--arch/arm/mach-ux500/board-mop500-audio.c1
-rw-r--r--arch/arm/mach-ux500/board-mop500-pins.c291
-rw-r--r--arch/arm/mach-ux500/board-mop500.h73
-rw-r--r--arch/arm/mach-ux500/cpu-db8500.c17
-rw-r--r--arch/arm/mach-ux500/cpu.c10
-rw-r--r--arch/arm/mach-ux500/irqs-board-mop500.h55
-rw-r--r--arch/arm/mach-ux500/irqs-db8500.h125
-rw-r--r--arch/arm/mach-ux500/irqs.h49
-rw-r--r--arch/arm/mach-versatile/include/mach/timex.h23
-rw-r--r--arch/arm/mach-w90x900/include/mach/timex.h25
-rw-r--r--arch/arm/mach-zynq/common.c14
-rw-r--r--arch/arm/plat-omap/include/plat/timex.h33
-rw-r--r--arch/arm64/Kconfig1
-rw-r--r--arch/arm64/configs/defconfig18
-rw-r--r--arch/arm64/include/asm/atomic.h53
-rw-r--r--arch/arm64/include/asm/barrier.h2
-rw-r--r--arch/arm64/include/asm/cacheflush.h1
-rw-r--r--arch/arm64/include/asm/cmpxchg.h17
-rw-r--r--arch/arm64/include/asm/esr.h2
-rw-r--r--arch/arm64/include/asm/futex.h10
-rw-r--r--arch/arm64/include/asm/kvm_arm.h2
-rw-r--r--arch/arm64/include/asm/spinlock.h10
-rw-r--r--arch/arm64/include/asm/unistd32.h5
-rw-r--r--arch/arm64/include/uapi/asm/kvm.h9
-rw-r--r--arch/arm64/kernel/kuser32.S6
-rw-r--r--arch/arm64/kernel/vdso.c4
-rw-r--r--arch/arm64/kernel/vdso/Makefile2
-rw-r--r--arch/arm64/kernel/vdso/gettimeofday.S7
-rw-r--r--arch/arm64/lib/bitops.S3
-rw-r--r--arch/arm64/mm/dma-mapping.c1
-rw-r--r--arch/arm64/mm/mmu.c12
-rw-r--r--arch/arm64/mm/pgd.c11
-rw-r--r--arch/ia64/include/asm/unistd.h2
-rw-r--r--arch/ia64/include/uapi/asm/unistd.h2
-rw-r--r--arch/ia64/kernel/entry.S2
-rw-r--r--arch/microblaze/include/asm/delay.h2
-rw-r--r--arch/microblaze/include/asm/io.h6
-rw-r--r--arch/microblaze/kernel/head.S2
-rw-r--r--arch/mips/alchemy/devboards/db1000.c7
-rw-r--r--arch/mips/include/asm/fpu.h2
-rw-r--r--arch/mips/include/uapi/asm/unistd.h18
-rw-r--r--arch/mips/kernel/scall32-o32.S2
-rw-r--r--arch/mips/kernel/scall64-64.S2
-rw-r--r--arch/mips/kernel/scall64-n32.S2
-rw-r--r--arch/mips/kernel/scall64-o32.S2
-rw-r--r--arch/parisc/hpux/fs.c15
-rw-r--r--arch/powerpc/include/asm/dma-mapping.h1
-rw-r--r--arch/powerpc/include/asm/iommu.h1
-rw-r--r--arch/powerpc/include/asm/sections.h12
-rw-r--r--arch/powerpc/kernel/dma.c10
-rw-r--r--arch/powerpc/kernel/eeh_driver.c8
-rw-r--r--arch/powerpc/kernel/iommu.c12
-rw-r--r--arch/powerpc/kernel/irq.c5
-rw-r--r--arch/powerpc/kernel/machine_kexec.c14
-rw-r--r--arch/powerpc/kernel/machine_kexec_64.c6
-rw-r--r--arch/powerpc/kernel/reloc_64.S4
-rw-r--r--arch/powerpc/kernel/setup_32.c5
-rw-r--r--arch/powerpc/mm/hash_utils_64.c14
-rw-r--r--arch/powerpc/perf/core-book3s.c5
-rw-r--r--arch/powerpc/perf/power8-pmu.c144
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c84
-rw-r--r--arch/powerpc/platforms/powernv/pci.c10
-rw-r--r--arch/powerpc/platforms/powernv/pci.h6
-rw-r--r--arch/powerpc/platforms/powernv/powernv.h8
-rw-r--r--arch/powerpc/platforms/powernv/setup.c9
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig1
-rw-r--r--arch/powerpc/platforms/pseries/setup.c3
-rw-r--r--arch/powerpc/sysdev/mpic.c38
-rw-r--r--arch/powerpc/xmon/xmon.c24
-rw-r--r--arch/s390/appldata/appldata_base.c1
-rw-r--r--arch/s390/crypto/aes_s390.c65
-rw-r--r--arch/s390/crypto/des_s390.c95
-rw-r--r--arch/s390/kernel/head64.S7
-rw-r--r--arch/s390/mm/page-states.c10
-rw-r--r--arch/x86/Kconfig7
-rw-r--r--arch/x86/Kconfig.debug1
-rw-r--r--arch/x86/include/asm/amd_nb.h2
-rw-r--r--arch/x86/include/asm/efi.h2
-rw-r--r--arch/x86/include/asm/pgtable.h14
-rw-r--r--arch/x86/include/asm/tlbflush.h6
-rw-r--r--arch/x86/include/asm/xen/page.h5
-rw-r--r--arch/x86/kernel/amd_nb.c2
-rw-r--r--arch/x86/kernel/cpu/amd.c5
-rw-r--r--arch/x86/kernel/cpu/common.c7
-rw-r--r--arch/x86/kernel/cpu/intel.c10
-rw-r--r--arch/x86/kernel/cpu/microcode/amd_early.c43
-rw-r--r--arch/x86/kernel/cpu/mtrr/generic.c4
-rw-r--r--arch/x86/kernel/ftrace.c83
-rw-r--r--arch/x86/kernel/irq.c9
-rw-r--r--arch/x86/kernel/quirks.c37
-rw-r--r--arch/x86/kernel/tsc.c4
-rw-r--r--arch/x86/mm/fault.c14
-rw-r--r--arch/x86/mm/numa.c21
-rw-r--r--arch/x86/mm/numa_32.c2
-rw-r--r--arch/x86/mm/srat.c16
-rw-r--r--arch/x86/mm/tlb.c52
-rw-r--r--arch/x86/platform/efi/efi-bgrt.c12
-rw-r--r--arch/x86/platform/efi/efi.c5
-rw-r--r--arch/x86/platform/efi/efi_32.c6
-rw-r--r--arch/x86/platform/efi/efi_64.c9
-rw-r--r--arch/x86/xen/enlighten.c12
-rw-r--r--arch/x86/xen/mmu.c4
-rw-r--r--arch/x86/xen/p2m.c17
-rw-r--r--block/blk-core.c20
-rw-r--r--block/blk-exec.c2
-rw-r--r--block/blk-flush.c101
-rw-r--r--block/blk-lib.c8
-rw-r--r--block/blk-merge.c91
-rw-r--r--block/blk-mq-tag.c2
-rw-r--r--block/blk-mq.c143
-rw-r--r--block/blk-mq.h4
-rw-r--r--block/blk-sysfs.c2
-rw-r--r--block/blk-timeout.c2
-rw-r--r--block/blk.h2
-rw-r--r--drivers/acpi/battery.c2
-rw-r--r--drivers/acpi/container.c5
-rw-r--r--drivers/acpi/dock.c5
-rw-r--r--drivers/acpi/proc.c2
-rw-r--r--drivers/acpi/scan.c6
-rw-r--r--drivers/acpi/utils.c4
-rw-r--r--drivers/acpi/video_detect.c8
-rw-r--r--drivers/ata/sata_mv.c8
-rw-r--r--drivers/base/component.c8
-rw-r--r--drivers/block/null_blk.c97
-rw-r--r--drivers/block/nvme-core.c610
-rw-r--r--drivers/block/nvme-scsi.c147
-rw-r--r--drivers/block/virtio_blk.c7
-rw-r--r--drivers/block/xen-blkback/blkback.c81
-rw-r--r--drivers/block/xen-blkback/common.h5
-rw-r--r--drivers/block/xen-blkback/xenbus.c14
-rw-r--r--drivers/block/xen-blkfront.c11
-rw-r--r--drivers/char/Kconfig1
-rw-r--r--drivers/char/raw.c2
-rw-r--r--drivers/char/virtio_console.c9
-rw-r--r--drivers/clocksource/Kconfig3
-rw-r--r--drivers/clocksource/Makefile1
-rw-r--r--drivers/clocksource/bcm_kona_timer.c54
-rw-r--r--drivers/clocksource/qcom-timer.c (renamed from arch/arm/mach-msm/timer.c)29
-rw-r--r--drivers/clocksource/timer-marco.c13
-rw-r--r--drivers/clocksource/timer-prima2.c16
-rw-r--r--drivers/cpufreq/intel_pstate.c30
-rw-r--r--drivers/crypto/nx/nx-842.c29
-rw-r--r--drivers/dma/Kconfig1
-rw-r--r--drivers/dma/mv_xor.c24
-rw-r--r--drivers/edac/edac_mc.c13
-rw-r--r--drivers/edac/edac_mc_sysfs.c10
-rw-r--r--drivers/edac/edac_module.h2
-rw-r--r--drivers/gpio/Kconfig1
-rw-r--r--drivers/gpio/gpio-bcm-kona.c4
-rw-r--r--drivers/gpio/gpio-clps711x.c1
-rw-r--r--drivers/gpio/gpio-intel-mid.c4
-rw-r--r--drivers/gpio/gpio-xtensa.c16
-rw-r--r--drivers/gpu/drm/ast/ast_fb.c2
-rw-r--r--drivers/gpu/drm/cirrus/cirrus_fbdev.c2
-rw-r--r--drivers/gpu/drm/exynos/Kconfig4
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.c14
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_g2d.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_ipp.c3
-rw-r--r--drivers/gpu/drm/exynos/exynos_hdmi.c66
-rw-r--r--drivers/gpu/drm/i2c/tda998x_drv.c17
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h8
-rw-r--r--drivers/gpu/drm/i915/i915_gpu_error.c5
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c3
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c12
-rw-r--r--drivers/gpu/drm/i915/intel_i2c.c7
-rw-r--r--drivers/gpu/drm/i915/intel_opregion.c9
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_fb.c2
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_mode.c4
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c179
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c4
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c7
-rw-r--r--drivers/gpu/drm/msm/msm_gem.c2
-rw-r--r--drivers/gpu/drm/msm/msm_gem_submit.c9
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c3
-rw-r--r--drivers/gpu/drm/radeon/btc_dpm.c32
-rw-r--r--drivers/gpu/drm/radeon/btcd.h4
-rw-r--r--drivers/gpu/drm/radeon/kv_dpm.c2
-rw-r--r--drivers/gpu/drm/radeon/ni_dpm.c8
-rw-r--r--drivers/gpu/drm/radeon/r600.c4
-rw-r--r--drivers/gpu/drm/radeon/r600_cs.c18
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.h2
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c3
-rw-r--r--drivers/gpu/drm/radeon/reg_srcs/r6001
-rw-r--r--drivers/gpu/drm/radeon/rv770_dpm.c5
-rw-r--r--drivers/gpu/drm/radeon/si.c4
-rw-r--r--drivers/gpu/drm/radeon/si_dpm.c3
-rw-r--r--drivers/gpu/drm/radeon/sumo_dpm.c2
-rw-r--r--drivers/gpu/drm/radeon/trinity_dpm.c3
-rw-r--r--drivers/gpu/drm/radeon/uvd_v2_2.c1
-rw-r--r--drivers/gpu/drm/ttm/ttm_object.c2
-rw-r--r--drivers/gpu/drm/ttm/ttm_tt.c3
-rw-r--r--drivers/gpu/drm/vmwgfx/svga3d_reg.h24
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_context.c144
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.c7
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.h35
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c330
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c93
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_mob.c1
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_resource.c11
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_shader.c467
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_surface.c6
-rw-r--r--drivers/hv/connection.c13
-rw-r--r--drivers/hwmon/da9055-hwmon.c4
-rw-r--r--drivers/hwmon/ntc_thermistor.c6
-rw-r--r--drivers/hwmon/pmbus/pmbus_core.c68
-rw-r--r--drivers/i2c/busses/i2c-mv64xxx.c33
-rw-r--r--drivers/iio/accel/bma180.c16
-rw-r--r--drivers/iio/adc/max1363.c2
-rw-r--r--drivers/iio/imu/adis16400.h1
-rw-r--r--drivers/iio/imu/adis16400_core.c10
-rw-r--r--drivers/iio/light/tsl2563.c16
-rw-r--r--drivers/iio/magnetometer/ak8975.c16
-rw-r--r--drivers/iio/magnetometer/mag3110.c8
-rw-r--r--drivers/infiniband/hw/amso1100/c2.c4
-rw-r--r--drivers/infiniband/hw/amso1100/c2_rnic.c3
-rw-r--r--drivers/infiniband/hw/cxgb4/cm.c1
-rw-r--r--drivers/infiniband/hw/mlx4/main.c185
-rw-r--r--drivers/infiniband/hw/mlx5/Kconfig2
-rw-r--r--drivers/infiniband/hw/mlx5/main.c22
-rw-r--r--drivers/infiniband/hw/mlx5/qp.c18
-rw-r--r--drivers/infiniband/hw/mlx5/user.h7
-rw-r--r--drivers/infiniband/hw/nes/nes.c5
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_main.c2
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_verbs.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_iba7322.c5
-rw-r--r--drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c9
-rw-r--r--drivers/infiniband/ulp/iser/iser_initiator.c3
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c10
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.c1
-rw-r--r--drivers/infiniband/ulp/srpt/ib_srpt.c14
-rw-r--r--drivers/input/misc/ixp4xx-beeper.c2
-rw-r--r--drivers/irqchip/Makefile1
-rw-r--r--drivers/irqchip/irq-armada-370-xp.c4
-rw-r--r--drivers/irqchip/irq-zevio.c127
-rw-r--r--drivers/isdn/hisax/q931.c2
-rw-r--r--drivers/md/bcache/bcache.h4
-rw-r--r--drivers/md/bcache/bset.c7
-rw-r--r--drivers/md/bcache/btree.c4
-rw-r--r--drivers/md/bcache/extents.c2
-rw-r--r--drivers/md/bcache/request.c6
-rw-r--r--drivers/md/bcache/sysfs.c2
-rw-r--r--drivers/md/raid1.c13
-rw-r--r--drivers/md/raid5.c90
-rw-r--r--drivers/media/dvb-frontends/cx24117.c10
-rw-r--r--drivers/media/dvb-frontends/nxt200x.c2
-rw-r--r--drivers/media/i2c/adv7842.c2
-rw-r--r--drivers/media/i2c/s5k5baf.c30
-rw-r--r--drivers/media/pci/bt8xx/bttv-cards.c2
-rw-r--r--drivers/media/pci/bt8xx/bttv-gpio.c2
-rw-r--r--drivers/media/pci/saa7134/saa7134-cards.c2
-rw-r--r--drivers/media/platform/exynos4-is/fimc-core.c5
-rw-r--r--drivers/media/platform/exynos4-is/fimc-lite.c7
-rw-r--r--drivers/media/platform/s5p-jpeg/jpeg-core.c8
-rw-r--r--drivers/media/usb/dvb-usb-v2/af9035.c2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c4
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-demod.h2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.c2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.h2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.c2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.h2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-phy.c2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-phy.h2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-reg.h2
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c4
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.h4
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf.c6
-rw-r--r--drivers/media/usb/dvb-usb-v2/mxl111sf.h2
-rw-r--r--drivers/media/usb/hdpvr/hdpvr-core.c4
-rw-r--r--drivers/media/v4l2-core/v4l2-dv-timings.c1
-rw-r--r--drivers/media/v4l2-core/videobuf-dma-contig.c12
-rw-r--r--drivers/media/v4l2-core/videobuf-dma-sg.c10
-rw-r--r--drivers/media/v4l2-core/videobuf-vmalloc.c10
-rw-r--r--drivers/media/v4l2-core/videobuf2-core.c5
-rw-r--r--drivers/message/i2o/i2o_config.c4
-rw-r--r--drivers/mfd/ab8500-core.c27
-rw-r--r--drivers/mfd/db8500-prcmu.c34
-rw-r--r--drivers/misc/genwqe/card_dev.c1
-rw-r--r--drivers/misc/mei/client.c11
-rw-r--r--drivers/misc/mic/host/mic_virtio.c3
-rw-r--r--drivers/misc/sgi-gru/grukdump.c11
-rw-r--r--drivers/net/bonding/bond_main.c26
-rw-r--r--drivers/net/can/Kconfig2
-rw-r--r--drivers/net/can/dev.c15
-rw-r--r--drivers/net/can/flexcan.c7
-rw-r--r--drivers/net/can/janz-ican3.c20
-rw-r--r--drivers/net/can/vcan.c9
-rw-r--r--drivers/net/ethernet/3com/3c59x.c2
-rw-r--r--drivers/net/ethernet/allwinner/sun4i-emac.c3
-rw-r--r--drivers/net/ethernet/atheros/alx/main.c1
-rw-r--r--drivers/net/ethernet/broadcom/bnx2.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c12
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c6
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c17
-rw-r--r--drivers/net/ethernet/ethoc.c138
-rw-r--r--drivers/net/ethernet/intel/e100.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/Kconfig2
-rw-r--r--drivers/net/ethernet/neterion/vxge/vxge-main.c6
-rw-r--r--drivers/net/ethernet/sfc/tx.c2
-rw-r--r--drivers/net/ethernet/ti/cpsw.c14
-rw-r--r--drivers/net/irda/Kconfig7
-rw-r--r--drivers/net/irda/Makefile1
-rw-r--r--drivers/net/irda/ep7211-sir.c70
-rw-r--r--drivers/net/phy/dp83640.c19
-rw-r--r--drivers/net/phy/mdio-sun4i.c3
-rw-r--r--drivers/net/phy/phy_device.c38
-rw-r--r--drivers/net/usb/Kconfig16
-rw-r--r--drivers/net/usb/Makefile1
-rw-r--r--drivers/net/usb/hso.c32
-rw-r--r--drivers/net/usb/qmi_wwan.c2
-rw-r--r--drivers/net/usb/r8152.c17
-rw-r--r--drivers/net/usb/sr9800.c870
-rw-r--r--drivers/net/usb/sr9800.h202
-rw-r--r--drivers/net/vxlan.c3
-rw-r--r--drivers/net/wan/dlci.c5
-rw-r--r--drivers/net/wireless/ath/ar5523/ar5523.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_eeprom.c4
-rw-r--r--drivers/net/wireless/ath/ath9k/htc.h2
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_init.c8
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_main.c63
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/init.c8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-nvm-parse.c5
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/scan.c5
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/sta.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/tx.c73
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/utils.c2
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/drv.c7
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c5
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c5
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c5
-rw-r--r--drivers/net/wireless/rtl818x/rtl8180/dev.c23
-rw-r--r--drivers/net/xen-netback/common.h6
-rw-r--r--drivers/net/xen-netback/interface.c1
-rw-r--r--drivers/net/xen-netback/netback.c16
-rw-r--r--drivers/net/xen-netfront.c5
-rw-r--r--drivers/of/address.c5
-rw-r--r--drivers/of/base.c88
-rw-r--r--drivers/pci/hotplug/acpiphp_glue.c70
-rw-r--r--drivers/phy/phy-core.c62
-rw-r--r--drivers/pinctrl/core.c8
-rw-r--r--drivers/pinctrl/pinctrl-at91.c10
-rw-r--r--drivers/pinctrl/pinctrl-imx1-core.c10
-rw-r--r--drivers/pinctrl/pinctrl-tegra.c2
-rw-r--r--drivers/pinctrl/sirf/pinctrl-prima2.c2
-rw-r--r--drivers/pinctrl/vt8500/pinctrl-wmt.c15
-rw-r--r--drivers/power/ds2782_battery.c2
-rw-r--r--drivers/power/isp1704_charger.c2
-rw-r--r--drivers/power/max17040_battery.c5
-rw-r--r--drivers/regulator/ab3100.c4
-rw-r--r--drivers/regulator/core.c9
-rw-r--r--drivers/regulator/da9055-regulator.c4
-rw-r--r--drivers/regulator/max14577.c5
-rw-r--r--drivers/regulator/s2mps11.c1
-rw-r--r--drivers/rtc/rtc-at91sam9.c2
-rw-r--r--drivers/rtc/rtc-pxa.c1
-rw-r--r--drivers/s390/cio/cio.c40
-rw-r--r--drivers/s390/cio/qdio.h14
-rw-r--r--drivers/s390/cio/qdio_main.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_target.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_target.h1
-rw-r--r--drivers/spi/Kconfig4
-rw-r--r--drivers/spi/spi-nuc900.c2
-rw-r--r--drivers/spi/spi.c4
-rw-r--r--drivers/staging/android/ashmem.c45
-rw-r--r--drivers/staging/android/ion/compat_ion.c26
-rw-r--r--drivers/staging/android/ion/ion_dummy_driver.c12
-rw-r--r--drivers/staging/android/ion/ion_heap.c2
-rw-r--r--drivers/staging/android/ion/ion_priv.h1
-rw-r--r--drivers/staging/android/ion/ion_system_heap.c6
-rw-r--r--drivers/staging/android/sw_sync.h17
-rw-r--r--drivers/staging/android/sync.c14
-rw-r--r--drivers/staging/comedi/drivers.c2
-rw-r--r--drivers/staging/comedi/drivers/adv_pci1710.c17
-rw-r--r--drivers/staging/comedi/drivers/usbduxsigma.c6
-rw-r--r--drivers/staging/dgrp/dgrp_net_ops.c330
-rw-r--r--drivers/staging/gdm72xx/gdm_usb.c3
-rw-r--r--drivers/staging/iio/Documentation/iio_utils.h6
-rw-r--r--drivers/staging/iio/adc/ad799x_core.c13
-rw-r--r--drivers/staging/iio/adc/mxs-lradc.c6
-rw-r--r--drivers/staging/iio/impedance-analyzer/ad5933.c2
-rw-r--r--drivers/staging/imx-drm/imx-drm-core.c55
-rw-r--r--drivers/staging/imx-drm/imx-hdmi.c22
-rw-r--r--drivers/staging/lustre/TODO5
-rw-r--r--drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h2
-rw-r--r--drivers/staging/lustre/include/linux/libcfs/libcfs_private.h2
-rw-r--r--drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c2
-rw-r--r--drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c5
-rw-r--r--drivers/staging/lustre/lustre/include/lustre/lustre_user.h3
-rw-r--r--drivers/staging/lustre/lustre/llite/dir.c2
-rw-r--r--drivers/staging/lustre/lustre/mdc/mdc_request.c6
-rw-r--r--drivers/staging/media/go7007/go7007-loader.c4
-rw-r--r--drivers/staging/netlogic/xlr_net.c5
-rw-r--r--drivers/staging/octeon-usb/octeon-hcd.c273
-rw-r--r--drivers/staging/ozwpan/ozproto.c3
-rw-r--r--drivers/staging/rtl8188eu/core/rtw_wlan_util.c22
-rw-r--r--drivers/staging/rtl8188eu/os_dep/ioctl_linux.c12
-rw-r--r--drivers/staging/rtl8188eu/os_dep/usb_intf.c2
-rw-r--r--drivers/staging/rtl8821ae/Kconfig2
-rw-r--r--drivers/staging/rtl8821ae/wifi.h2
-rw-r--r--drivers/staging/usbip/userspace/libsrc/names.c8
-rw-r--r--drivers/staging/usbip/vhci_sysfs.c3
-rw-r--r--drivers/staging/wlags49_h2/wl_wext.c2
-rw-r--r--drivers/target/iscsi/iscsi_target_erl1.c4
-rw-r--r--drivers/target/target_core_alua.c2
-rw-r--r--drivers/target/target_core_pr.c11
-rw-r--r--drivers/target/target_core_sbc.c8
-rw-r--r--drivers/target/target_core_spc.c4
-rw-r--r--drivers/target/target_core_transport.c5
-rw-r--r--drivers/tty/hvc/hvc_opal.c8
-rw-r--r--drivers/tty/hvc/hvc_rtas.c12
-rw-r--r--drivers/tty/hvc/hvc_udbg.c9
-rw-r--r--drivers/tty/hvc/hvc_xen.c17
-rw-r--r--drivers/tty/n_gsm.c11
-rw-r--r--drivers/tty/n_tty.c14
-rw-r--r--drivers/tty/serial/8250/8250_core.c18
-rw-r--r--drivers/tty/serial/8250/8250_dw.c4
-rw-r--r--drivers/tty/serial/8250/8250_pci.c3
-rw-r--r--drivers/tty/serial/atmel_serial.c49
-rw-r--r--drivers/tty/serial/omap-serial.c11
-rw-r--r--drivers/tty/serial/sirfsoc_uart.c4
-rw-r--r--drivers/tty/tty_io.c25
-rw-r--r--drivers/tty/vt/vt.c2
-rw-r--r--drivers/usb/core/driver.c24
-rw-r--r--drivers/usb/core/hcd.c1
-rw-r--r--drivers/usb/core/hub.c7
-rw-r--r--drivers/usb/core/usb.h1
-rw-r--r--drivers/usb/dwc2/core.c2
-rw-r--r--drivers/usb/dwc2/hcd.c11
-rw-r--r--drivers/usb/dwc2/platform.c3
-rw-r--r--drivers/usb/host/xhci-dbg.c6
-rw-r--r--drivers/usb/host/xhci-mem.c14
-rw-r--r--drivers/usb/host/xhci-pci.c5
-rw-r--r--drivers/usb/host/xhci-ring.c68
-rw-r--r--drivers/usb/host/xhci.c38
-rw-r--r--drivers/usb/host/xhci.h41
-rw-r--r--drivers/usb/phy/phy.c8
-rw-r--r--drivers/usb/serial/ftdi_sio.c3
-rw-r--r--drivers/usb/serial/ftdi_sio_ids.h7
-rw-r--r--drivers/usb/serial/option.c3
-rw-r--r--drivers/usb/serial/qcserial.c3
-rw-r--r--drivers/usb/serial/usb-serial-simple.c3
-rw-r--r--drivers/usb/storage/Kconfig4
-rw-r--r--drivers/usb/storage/scsiglue.c6
-rw-r--r--drivers/usb/storage/unusual_cypress.h2
-rw-r--r--drivers/usb/storage/unusual_devs.h7
-rw-r--r--drivers/video/Kconfig2
-rw-r--r--drivers/video/exynos/Kconfig3
-rw-r--r--drivers/video/omap2/dss/dispc.c16
-rw-r--r--drivers/video/omap2/dss/dpi.c2
-rw-r--r--drivers/video/omap2/dss/sdi.c2
-rw-r--r--drivers/vme/bridges/vme_ca91cx42.c4
-rw-r--r--drivers/vme/bridges/vme_tsi148.c4
-rw-r--r--drivers/watchdog/Kconfig1
-rw-r--r--drivers/xen/Makefile1
-rw-r--r--drivers/xen/events/events_base.c2
-rw-r--r--drivers/xen/gntdev.c13
-rw-r--r--drivers/xen/grant-table.c89
-rw-r--r--drivers/xen/xencomm.c219
-rw-r--r--fs/bio-integrity.c13
-rw-r--r--fs/bio.c15
-rw-r--r--fs/btrfs/check-integrity.c4
-rw-r--r--fs/btrfs/compression.c2
-rw-r--r--fs/btrfs/disk-io.c5
-rw-r--r--fs/btrfs/extent-tree.c1
-rw-r--r--fs/btrfs/inode.c4
-rw-r--r--fs/btrfs/ioctl.c22
-rw-r--r--fs/btrfs/send.c22
-rw-r--r--fs/btrfs/super.c13
-rw-r--r--fs/btrfs/sysfs.c10
-rw-r--r--fs/buffer.c6
-rw-r--r--fs/cifs/cifsacl.c28
-rw-r--r--fs/cifs/cifsglob.h9
-rw-r--r--fs/cifs/cifsproto.h3
-rw-r--r--fs/cifs/cifssmb.c15
-rw-r--r--fs/cifs/file.c35
-rw-r--r--fs/cifs/inode.c13
-rw-r--r--fs/cifs/smb1ops.c8
-rw-r--r--fs/cifs/smb2pdu.c5
-rw-r--r--fs/cifs/smb2proto.h3
-rw-r--r--fs/cifs/xattr.c15
-rw-r--r--fs/exec.c45
-rw-r--r--fs/ext4/file.c2
-rw-r--r--fs/file.c2
-rw-r--r--fs/jfs/xattr.c14
-rw-r--r--fs/kernfs/dir.c12
-rw-r--r--fs/lockd/svclock.c8
-rw-r--r--fs/namei.c30
-rw-r--r--fs/nfs/dir.c5
-rw-r--r--fs/nfs/nfs3acl.c34
-rw-r--r--fs/nfs/nfs4client.c2
-rw-r--r--fs/nfs/nfs4proc.c8
-rw-r--r--fs/nfs/nfs4session.c25
-rw-r--r--fs/nfs/nfs4session.h2
-rw-r--r--fs/nfsd/nfs4acl.c9
-rw-r--r--fs/ntfs/file.c2
-rw-r--r--fs/ocfs2/alloc.c40
-rw-r--r--fs/ocfs2/file.c52
-rw-r--r--fs/ocfs2/localalloc.c42
-rw-r--r--fs/ocfs2/localalloc.h6
-rw-r--r--fs/ocfs2/namei.c17
-rw-r--r--fs/posix_acl.c18
-rw-r--r--fs/proc/vmcore.c26
-rw-r--r--fs/sync.c17
-rw-r--r--fs/xfs/xfs_file.c2
-rw-r--r--include/drm/drmP.h3
-rw-r--r--include/dt-bindings/pinctrl/am43xx.h1
-rw-r--r--include/linux/binfmts.h1
-rw-r--r--include/linux/bio.h12
-rw-r--r--include/linux/blk-mq.h9
-rw-r--r--include/linux/blkdev.h11
-rw-r--r--include/linux/can/skb.h38
-rw-r--r--include/linux/compiler-gcc4.h6
-rw-r--r--include/linux/fs.h9
-rw-r--r--include/linux/gpio/consumer.h4
-rw-r--r--include/linux/hyperv.h2
-rw-r--r--include/linux/interrupt.h5
-rw-r--r--include/linux/mfd/abx500/ab8500.h2
-rw-r--r--include/linux/mfd/dbx500-prcmu.h2
-rw-r--r--include/linux/mlx5/driver.h3
-rw-r--r--include/linux/nfs_xdr.h2
-rw-r--r--include/linux/nvme.h6
-rw-r--r--include/linux/of.h153
-rw-r--r--include/linux/of_device.h4
-rw-r--r--include/linux/page-flags.h4
-rw-r--r--include/linux/phy/phy.h14
-rw-r--r--include/linux/platform_data/atmel.h1
-rw-r--r--include/linux/sched.h3
-rw-r--r--include/linux/smp.h3
-rw-r--r--include/linux/spi/spi.h7
-rw-r--r--include/linux/usb.h2
-rw-r--r--include/linux/vm_event_item.h4
-rw-r--r--include/linux/vmstat.h8
-rw-r--r--include/net/datalink.h2
-rw-r--r--include/net/dn.h2
-rw-r--r--include/net/dn_route.h2
-rw-r--r--include/net/ethoc.h1
-rw-r--r--include/net/ipx.h11
-rw-r--r--include/net/net_namespace.h8
-rw-r--r--include/net/netfilter/nf_conntrack.h2
-rw-r--r--include/net/netfilter/nf_tables.h9
-rw-r--r--include/net/netfilter/nft_reject.h25
-rw-r--r--include/rdma/ib_verbs.h3
-rw-r--r--include/target/target_core_base.h1
-rw-r--r--include/trace/events/power.h7
-rw-r--r--include/uapi/linux/btrfs.h1
-rw-r--r--include/uapi/linux/in6.h23
-rw-r--r--include/uapi/linux/mic_ioctl.h2
-rw-r--r--include/uapi/linux/nvme.h11
-rw-r--r--include/uapi/xen/Kbuild2
-rw-r--r--include/uapi/xen/gntalloc.h (renamed from include/xen/gntalloc.h)0
-rw-r--r--include/uapi/xen/gntdev.h (renamed from include/xen/gntdev.h)0
-rw-r--r--include/xen/grant_table.h8
-rw-r--r--include/xen/interface/io/blkif.h34
-rw-r--r--include/xen/interface/xencomm.h41
-rw-r--r--include/xen/xencomm.h77
-rw-r--r--init/main.c2
-rw-r--r--kernel/auditsc.c2
-rw-r--r--kernel/irq/Kconfig1
-rw-r--r--kernel/irq/devres.c45
-rw-r--r--kernel/irq/irqdesc.c1
-rw-r--r--kernel/kmod.c2
-rw-r--r--kernel/time/jiffies.c6
-rw-r--r--kernel/time/tick-broadcast.c1
-rw-r--r--kernel/trace/ring_buffer.c7
-rw-r--r--lib/Kconfig.debug2
-rw-r--r--lib/Makefile1
-rw-r--r--lib/percpu_ida.c7
-rw-r--r--mm/filemap.c4
-rw-r--r--mm/memory-failure.c6
-rw-r--r--mm/page-writeback.c5
-rw-r--r--mm/slub.c38
-rw-r--r--mm/swap_state.c63
-rw-r--r--mm/swapfile.c11
-rw-r--r--mm/vmstat.c4
-rw-r--r--net/9p/client.c2
-rw-r--r--net/9p/trans_virtio.c5
-rw-r--r--net/bridge/br_device.c54
-rw-r--r--net/bridge/br_fdb.c137
-rw-r--r--net/bridge/br_if.c6
-rw-r--r--net/bridge/br_input.c4
-rw-r--r--net/bridge/br_private.h13
-rw-r--r--net/bridge/br_stp_if.c2
-rw-r--r--net/bridge/br_vlan.c27
-rw-r--r--net/caif/caif_dev.c1
-rw-r--r--net/caif/cfsrvl.c1
-rw-r--r--net/can/af_can.c3
-rw-r--r--net/can/bcm.c4
-rw-r--r--net/can/raw.c1
-rw-r--r--net/ceph/messenger.c8
-rw-r--r--net/ceph/osd_client.c84
-rw-r--r--net/core/dev.c6
-rw-r--r--net/core/fib_rules.c7
-rw-r--r--net/core/netpoll.c4
-rw-r--r--net/core/rtnetlink.c2
-rw-r--r--net/core/sock.c6
-rw-r--r--net/decnet/af_decnet.c5
-rw-r--r--net/ieee802154/6lowpan.c23
-rw-r--r--net/ipv4/devinet.c3
-rw-r--r--net/ipv4/ip_tunnel.c29
-rw-r--r--net/ipv4/netfilter/Kconfig5
-rw-r--r--net/ipv4/netfilter/Makefile1
-rw-r--r--net/ipv4/netfilter/nf_nat_h323.c5
-rw-r--r--net/ipv4/netfilter/nft_reject_ipv4.c75
-rw-r--r--net/ipv4/tcp.c2
-rw-r--r--net/ipv4/tcp_input.c18
-rw-r--r--net/ipv4/tcp_output.c15
-rw-r--r--net/ipv4/udp_offload.c17
-rw-r--r--net/ipv6/icmp.c2
-rw-r--r--net/ipv6/netfilter/Kconfig5
-rw-r--r--net/ipv6/netfilter/Makefile1
-rw-r--r--net/ipv6/netfilter/nft_reject_ipv6.c76
-rw-r--r--net/ipx/af_ipx.c22
-rw-r--r--net/ipx/ipx_route.c4
-rw-r--r--net/mac80211/cfg.c44
-rw-r--r--net/mac80211/ht.c4
-rw-r--r--net/mac80211/ibss.c5
-rw-r--r--net/mac80211/iface.c27
-rw-r--r--net/mac80211/tx.c2
-rw-r--r--net/netfilter/Kconfig6
-rw-r--r--net/netfilter/Makefile1
-rw-r--r--net/netfilter/ipvs/ip_vs_conn.c8
-rw-r--r--net/netfilter/nf_conntrack_core.c55
-rw-r--r--net/netfilter/nf_synproxy_core.c5
-rw-r--r--net/netfilter/nf_tables_api.c82
-rw-r--r--net/netfilter/nf_tables_core.c6
-rw-r--r--net/netfilter/nft_ct.c16
-rw-r--r--net/netfilter/nft_log.c5
-rw-r--r--net/netfilter/nft_lookup.c1
-rw-r--r--net/netfilter/nft_queue.c4
-rw-r--r--net/netfilter/nft_rbtree.c16
-rw-r--r--net/netfilter/nft_reject.c89
-rw-r--r--net/netfilter/nft_reject_inet.c63
-rw-r--r--net/netfilter/xt_CT.c7
-rw-r--r--net/openvswitch/datapath.c23
-rw-r--r--net/openvswitch/flow_table.c88
-rw-r--r--net/openvswitch/flow_table.h2
-rw-r--r--net/sctp/ipv6.c2
-rw-r--r--net/sunrpc/svc_xprt.c6
-rw-r--r--net/wireless/core.c17
-rw-r--r--net/wireless/core.h4
-rw-r--r--net/wireless/nl80211.c32
-rw-r--r--net/wireless/nl80211.h8
-rw-r--r--net/wireless/scan.c40
-rw-r--r--net/wireless/sme.c2
-rwxr-xr-xscripts/checkpatch.pl4
-rwxr-xr-xscripts/get_maintainer.pl2
-rw-r--r--scripts/mod/file2alias.c4
-rw-r--r--security/Kconfig2
-rw-r--r--security/selinux/nlmsgtab.c2
-rw-r--r--security/selinux/ss/services.c4
-rw-r--r--sound/pci/hda/hda_codec.c34
-rw-r--r--sound/pci/hda/hda_generic.c8
-rw-r--r--sound/pci/hda/hda_generic.h1
-rw-r--r--sound/pci/hda/hda_intel.c2
-rw-r--r--sound/pci/hda/patch_analog.c27
-rw-r--r--sound/pci/hda/patch_conexant.c3
-rw-r--r--sound/pci/hda/patch_realtek.c20
-rw-r--r--sound/pci/hda/patch_sigmatel.c27
-rw-r--r--sound/pci/hda/thinkpad_helper.c1
-rw-r--r--sound/usb/Kconfig1
-rw-r--r--tools/perf/builtin-buildid-cache.c33
-rw-r--r--tools/perf/builtin-record.c10
-rw-r--r--tools/perf/design.txt1
-rw-r--r--tools/perf/perf.h4
-rw-r--r--tools/perf/tests/vmlinux-kallsyms.c10
-rw-r--r--tools/perf/util/event.c36
-rw-r--r--tools/perf/util/event.h6
-rw-r--r--tools/perf/util/include/asm/hash.h6
-rw-r--r--tools/perf/util/machine.c42
-rw-r--r--tools/perf/util/machine.h2
-rw-r--r--tools/perf/util/map.c5
-rw-r--r--tools/perf/util/map.h1
-rw-r--r--tools/perf/util/symbol-elf.c4
-rw-r--r--tools/perf/util/symbol.c65
-rw-r--r--virt/kvm/arm/vgic.c1
-rw-r--r--virt/kvm/coalesced_mmio.c8
1068 files changed, 32683 insertions, 11045 deletions
diff --git a/.gitignore b/.gitignore
index 7e9932e55475..42fa0d5626a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -92,3 +92,6 @@ extra_certificates
92signing_key.priv 92signing_key.priv
93signing_key.x509 93signing_key.x509
94x509.genkey 94x509.genkey
95
96# Kconfig presets
97all.config
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX
index 38f8444bdd0e..07de7e19b4ce 100644
--- a/Documentation/00-INDEX
+++ b/Documentation/00-INDEX
@@ -29,6 +29,8 @@ DMA-ISA-LPC.txt
29 - How to do DMA with ISA (and LPC) devices. 29 - How to do DMA with ISA (and LPC) devices.
30DMA-attributes.txt 30DMA-attributes.txt
31 - listing of the various possible attributes a DMA region can have 31 - listing of the various possible attributes a DMA region can have
32dmatest.txt
33 - how to compile, configure and use the dmatest system.
32DocBook/ 34DocBook/
33 - directory with DocBook templates etc. for kernel documentation. 35 - directory with DocBook templates etc. for kernel documentation.
34EDID/ 36EDID/
@@ -77,6 +79,8 @@ arm/
77 - directory with info about Linux on the ARM architecture. 79 - directory with info about Linux on the ARM architecture.
78arm64/ 80arm64/
79 - directory with info about Linux on the 64 bit ARM architecture. 81 - directory with info about Linux on the 64 bit ARM architecture.
82assoc_array.txt
83 - generic associative array intro.
80atomic_ops.txt 84atomic_ops.txt
81 - semantics and behavior of atomic and bitmask operations. 85 - semantics and behavior of atomic and bitmask operations.
82auxdisplay/ 86auxdisplay/
@@ -87,6 +91,8 @@ bad_memory.txt
87 - how to use kernel parameters to exclude bad RAM regions. 91 - how to use kernel parameters to exclude bad RAM regions.
88basic_profiling.txt 92basic_profiling.txt
89 - basic instructions for those who wants to profile Linux kernel. 93 - basic instructions for those who wants to profile Linux kernel.
94bcache.txt
95 - Block-layer cache on fast SSDs to improve slow (raid) I/O performance.
90binfmt_misc.txt 96binfmt_misc.txt
91 - info on the kernel support for extra binary formats. 97 - info on the kernel support for extra binary formats.
92blackfin/ 98blackfin/
@@ -171,6 +177,8 @@ early-userspace/
171 - info about initramfs, klibc, and userspace early during boot. 177 - info about initramfs, klibc, and userspace early during boot.
172edac.txt 178edac.txt
173 - information on EDAC - Error Detection And Correction 179 - information on EDAC - Error Detection And Correction
180efi-stub.txt
181 - How to use the EFI boot stub to bypass GRUB or elilo on EFI systems.
174eisa.txt 182eisa.txt
175 - info on EISA bus support. 183 - info on EISA bus support.
176email-clients.txt 184email-clients.txt
@@ -195,8 +203,8 @@ futex-requeue-pi.txt
195 - info on requeueing of tasks from a non-PI futex to a PI futex 203 - info on requeueing of tasks from a non-PI futex to a PI futex
196gcov.txt 204gcov.txt
197 - use of GCC's coverage testing tool "gcov" with the Linux kernel 205 - use of GCC's coverage testing tool "gcov" with the Linux kernel
198gpio.txt 206gpio/
199 - overview of GPIO (General Purpose Input/Output) access conventions. 207 - gpio related documentation
200hid/ 208hid/
201 - directory with information on human interface devices 209 - directory with information on human interface devices
202highuid.txt 210highuid.txt
@@ -255,6 +263,8 @@ kernel-docs.txt
255 - listing of various WWW + books that document kernel internals. 263 - listing of various WWW + books that document kernel internals.
256kernel-parameters.txt 264kernel-parameters.txt
257 - summary listing of command line / boot prompt args for the kernel. 265 - summary listing of command line / boot prompt args for the kernel.
266kernel-per-CPU-kthreads.txt
267 - List of all per-CPU kthreads and how they introduce jitter.
258kmemcheck.txt 268kmemcheck.txt
259 - info on dynamic checker that detects uses of uninitialized memory. 269 - info on dynamic checker that detects uses of uninitialized memory.
260kmemleak.txt 270kmemleak.txt
@@ -299,8 +309,6 @@ memory-devices/
299 - directory with info on parts like the Texas Instruments EMIF driver 309 - directory with info on parts like the Texas Instruments EMIF driver
300memory-hotplug.txt 310memory-hotplug.txt
301 - Hotpluggable memory support, how to use and current status. 311 - Hotpluggable memory support, how to use and current status.
302memory.txt
303 - info on typical Linux memory problems.
304metag/ 312metag/
305 - directory with info about Linux on Meta architecture. 313 - directory with info about Linux on Meta architecture.
306mips/ 314mips/
@@ -311,6 +319,8 @@ mmc/
311 - directory with info about the MMC subsystem 319 - directory with info about the MMC subsystem
312mn10300/ 320mn10300/
313 - directory with info about the mn10300 architecture port 321 - directory with info about the mn10300 architecture port
322module-signing.txt
323 - Kernel module signing for increased security when loading modules.
314mtd/ 324mtd/
315 - directory with info about memory technology devices (flash) 325 - directory with info about memory technology devices (flash)
316mono.txt 326mono.txt
@@ -343,6 +353,8 @@ pcmcia/
343 - info on the Linux PCMCIA driver. 353 - info on the Linux PCMCIA driver.
344percpu-rw-semaphore.txt 354percpu-rw-semaphore.txt
345 - RCU based read-write semaphore optimized for locking for reading 355 - RCU based read-write semaphore optimized for locking for reading
356phy.txt
357 - Description of the generic PHY framework.
346pi-futex.txt 358pi-futex.txt
347 - documentation on lightweight priority inheritance futexes. 359 - documentation on lightweight priority inheritance futexes.
348pinctrl.txt 360pinctrl.txt
@@ -431,6 +443,8 @@ sysrq.txt
431 - info on the magic SysRq key. 443 - info on the magic SysRq key.
432target/ 444target/
433 - directory with info on generating TCM v4 fabric .ko modules 445 - directory with info on generating TCM v4 fabric .ko modules
446this_cpu_ops.txt
447 - List rationale behind and the way to use this_cpu operations.
434thermal/ 448thermal/
435 - directory with information on managing thermal issues (CPU/temp) 449 - directory with information on managing thermal issues (CPU/temp)
436trace/ 450trace/
@@ -469,6 +483,8 @@ wimax/
469 - directory with info about Intel Wireless Wimax Connections 483 - directory with info about Intel Wireless Wimax Connections
470workqueue.txt 484workqueue.txt
471 - information on the Concurrency Managed Workqueue implementation 485 - information on the Concurrency Managed Workqueue implementation
486ww-mutex-design.txt
487 - Intro to Mutex wait/would deadlock handling.s
472x86/x86_64/ 488x86/x86_64/
473 - directory with info on Linux support for AMD x86-64 (Hammer) machines. 489 - directory with info on Linux support for AMD x86-64 (Hammer) machines.
474xtensa/ 490xtensa/
diff --git a/Documentation/ABI/testing/sysfs-tty b/Documentation/ABI/testing/sysfs-tty
index ad22fb0ee765..a2ccec35ffce 100644
--- a/Documentation/ABI/testing/sysfs-tty
+++ b/Documentation/ABI/testing/sysfs-tty
@@ -3,7 +3,8 @@ Date: Nov 2010
3Contact: Kay Sievers <kay.sievers@vrfy.org> 3Contact: Kay Sievers <kay.sievers@vrfy.org>
4Description: 4Description:
5 Shows the list of currently configured 5 Shows the list of currently configured
6 console devices, like 'tty1 ttyS0'. 6 tty devices used for the console,
7 like 'tty1 ttyS0'.
7 The last entry in the file is the active 8 The last entry in the file is the active
8 device connected to /dev/console. 9 device connected to /dev/console.
9 The file supports poll() to detect virtual 10 The file supports poll() to detect virtual
diff --git a/Documentation/RCU/00-INDEX b/Documentation/RCU/00-INDEX
index 1d7a885761f5..fa57139f50bf 100644
--- a/Documentation/RCU/00-INDEX
+++ b/Documentation/RCU/00-INDEX
@@ -8,6 +8,8 @@ listRCU.txt
8 - Using RCU to Protect Read-Mostly Linked Lists 8 - Using RCU to Protect Read-Mostly Linked Lists
9lockdep.txt 9lockdep.txt
10 - RCU and lockdep checking 10 - RCU and lockdep checking
11lockdep-splat.txt
12 - RCU Lockdep splats explained.
11NMI-RCU.txt 13NMI-RCU.txt
12 - Using RCU to Protect Dynamic NMI Handlers 14 - Using RCU to Protect Dynamic NMI Handlers
13rcubarrier.txt 15rcubarrier.txt
diff --git a/Documentation/arm/00-INDEX b/Documentation/arm/00-INDEX
index 36420e116c90..a94090cc785d 100644
--- a/Documentation/arm/00-INDEX
+++ b/Documentation/arm/00-INDEX
@@ -4,6 +4,8 @@ Booting
4 - requirements for booting 4 - requirements for booting
5Interrupts 5Interrupts
6 - ARM Interrupt subsystem documentation 6 - ARM Interrupt subsystem documentation
7IXP4xx
8 - Intel IXP4xx Network processor.
7msm 9msm
8 - MSM specific documentation 10 - MSM specific documentation
9Netwinder 11Netwinder
@@ -24,8 +26,16 @@ SPEAr
24 - ST SPEAr platform Linux Overview 26 - ST SPEAr platform Linux Overview
25VFP/ 27VFP/
26 - Release notes for Linux Kernel Vector Floating Point support code 28 - Release notes for Linux Kernel Vector Floating Point support code
29cluster-pm-race-avoidance.txt
30 - Algorithm for CPU and Cluster setup/teardown
27empeg/ 31empeg/
28 - Ltd's Empeg MP3 Car Audio Player 32 - Ltd's Empeg MP3 Car Audio Player
33firmware.txt
34 - Secure firmware registration and calling.
35kernel_mode_neon.txt
36 - How to use NEON instructions in kernel mode
37kernel_user_helpers.txt
38 - Helper functions in kernel space made available for userspace.
29mem_alignment 39mem_alignment
30 - alignment abort handler documentation 40 - alignment abort handler documentation
31memory.txt 41memory.txt
@@ -34,3 +44,7 @@ nwfpe/
34 - NWFPE floating point emulator documentation 44 - NWFPE floating point emulator documentation
35swp_emulation 45swp_emulation
36 - SWP/SWPB emulation handler/logging description 46 - SWP/SWPB emulation handler/logging description
47tcm.txt
48 - ARM Tightly Coupled Memory
49vlocks.txt
50 - Voting locks, low-level mechanism relying on memory system atomic writes.
diff --git a/Documentation/blackfin/00-INDEX b/Documentation/blackfin/00-INDEX
index 2df0365f2dff..c54fcdd4ae9f 100644
--- a/Documentation/blackfin/00-INDEX
+++ b/Documentation/blackfin/00-INDEX
@@ -1,8 +1,10 @@
100-INDEX 100-INDEX
2 - This file 2 - This file
3 3Makefile
4 - Makefile for gptimers example file.
4bfin-gpio-notes.txt 5bfin-gpio-notes.txt
5 - Notes in developing/using bfin-gpio driver. 6 - Notes in developing/using bfin-gpio driver.
6
7bfin-spi-notes.txt 7bfin-spi-notes.txt
8 - Notes for using bfin spi bus driver. 8 - Notes for using bfin spi bus driver.
9gptimers-example.c
10 - gptimers example
diff --git a/Documentation/block/00-INDEX b/Documentation/block/00-INDEX
index 929d9904f74b..e840b47613f7 100644
--- a/Documentation/block/00-INDEX
+++ b/Documentation/block/00-INDEX
@@ -14,6 +14,8 @@ deadline-iosched.txt
14 - Deadline IO scheduler tunables 14 - Deadline IO scheduler tunables
15ioprio.txt 15ioprio.txt
16 - Block io priorities (in CFQ scheduler) 16 - Block io priorities (in CFQ scheduler)
17null_blk.txt
18 - Null block for block-layer benchmarking.
17queue-sysfs.txt 19queue-sysfs.txt
18 - Queue's sysfs entries 20 - Queue's sysfs entries
19request.txt 21request.txt
diff --git a/Documentation/devicetree/00-INDEX b/Documentation/devicetree/00-INDEX
index b78f691fd847..8c4102c6a5e7 100644
--- a/Documentation/devicetree/00-INDEX
+++ b/Documentation/devicetree/00-INDEX
@@ -8,3 +8,5 @@ https://lists.ozlabs.org/listinfo/devicetree-discuss
8 - this file 8 - this file
9booting-without-of.txt 9booting-without-of.txt
10 - Booting Linux without Open Firmware, describes history and format of device trees. 10 - Booting Linux without Open Firmware, describes history and format of device trees.
11usage-model.txt
12 - How Linux uses DT and what DT aims to solve. \ No newline at end of file
diff --git a/Documentation/devicetree/bindings/arm/keystone/keystone.txt b/Documentation/devicetree/bindings/arm/keystone/keystone.txt
index 63c0e6ae5cf7..ad16e7a58893 100644
--- a/Documentation/devicetree/bindings/arm/keystone/keystone.txt
+++ b/Documentation/devicetree/bindings/arm/keystone/keystone.txt
@@ -8,3 +8,13 @@ Required properties:
8 - compatible: All TI specific devices present in Keystone SOC should be in 8 - compatible: All TI specific devices present in Keystone SOC should be in
9 the form "ti,keystone-*". Generic devices like gic, arch_timers, ns16550 9 the form "ti,keystone-*". Generic devices like gic, arch_timers, ns16550
10 type UART should use the specified compatible for those devices. 10 type UART should use the specified compatible for those devices.
11
12Boards:
13- Keystone 2 Hawking/Kepler EVM
14 compatible = "ti,k2hk-evm"
15
16- Keystone 2 Lamarr EVM
17 compatible = "ti,k2l-evm"
18
19- Keystone 2 Edison EVM
20 compatible = "ti,k2e-evm"
diff --git a/Documentation/devicetree/bindings/arm/omap/dmm.txt b/Documentation/devicetree/bindings/arm/omap/dmm.txt
new file mode 100644
index 000000000000..8bd6d0a238a8
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/omap/dmm.txt
@@ -0,0 +1,22 @@
1OMAP Dynamic Memory Manager (DMM) bindings
2
3The dynamic memory manager (DMM) is a module located immediately in front of the
4SDRAM controllers (called EMIFs on OMAP). DMM manages various aspects of memory
5accesses such as priority generation amongst initiators, configuration of SDRAM
6interleaving, optimizing transfer of 2D block objects, and provide MMU-like page
7translation for initiators which need contiguous dma bus addresses.
8
9Required properties:
10- compatible: Should contain "ti,omap4-dmm" for OMAP4 family
11 Should contain "ti,omap5-dmm" for OMAP5 and DRA7x family
12- reg: Contains DMM register address range (base address and length)
13- interrupts: Should contain an interrupt-specifier for DMM_IRQ.
14- ti,hwmods: Name of the hwmod associated to DMM, which is typically "dmm"
15
16Example:
17
18dmm@4e000000 {
19 compatible = "ti,omap4-dmm";
20 reg = <0x4e000000 0x800>;
21 ti,hwmods = "dmm";
22};
diff --git a/Documentation/devicetree/bindings/arm/omap/omap.txt b/Documentation/devicetree/bindings/arm/omap/omap.txt
index 34dc40cffdfd..775ea6a644d8 100644
--- a/Documentation/devicetree/bindings/arm/omap/omap.txt
+++ b/Documentation/devicetree/bindings/arm/omap/omap.txt
@@ -99,6 +99,9 @@ Boards:
99- OMAP4 PandaBoard : Low cost community board 99- OMAP4 PandaBoard : Low cost community board
100 compatible = "ti,omap4-panda", "ti,omap4430" 100 compatible = "ti,omap4-panda", "ti,omap4430"
101 101
102- OMAP4 DuoVero with Parlor : Commercial expansion board with daughter board
103 compatible = "gumstix,omap4-duovero-parlor", "gumstix,omap4-duovero", "ti,omap4430", "ti,omap4";
104
102- OMAP3 EVM : Software Development Board for OMAP35x, AM/DM37x 105- OMAP3 EVM : Software Development Board for OMAP35x, AM/DM37x
103 compatible = "ti,omap3-evm", "ti,omap3" 106 compatible = "ti,omap3-evm", "ti,omap3"
104 107
@@ -114,5 +117,8 @@ Boards:
114- AM43x EPOS EVM 117- AM43x EPOS EVM
115 compatible = "ti,am43x-epos-evm", "ti,am4372", "ti,am43" 118 compatible = "ti,am43x-epos-evm", "ti,am4372", "ti,am43"
116 119
120- AM437x GP EVM
121 compatible = "ti,am437x-gp-evm", "ti,am4372", "ti,am43"
122
117- DRA7 EVM: Software Developement Board for DRA7XX 123- DRA7 EVM: Software Developement Board for DRA7XX
118 compatible = "ti,dra7-evm", "ti,dra7" 124 compatible = "ti,dra7-evm", "ti,dra7"
diff --git a/Documentation/devicetree/bindings/arm/samsung/pmu.txt b/Documentation/devicetree/bindings/arm/samsung/pmu.txt
new file mode 100644
index 000000000000..f1f155255f28
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/samsung/pmu.txt
@@ -0,0 +1,15 @@
1SAMSUNG Exynos SoC series PMU Registers
2
3Properties:
4 - compatible : should contain two values. First value must be one from following list:
5 - "samsung,exynos5250-pmu" - for Exynos5250 SoC,
6 - "samsung,exynos5420-pmu" - for Exynos5420 SoC.
7 second value must be always "syscon".
8
9 - reg : offset and length of the register set.
10
11Example :
12pmu_system_controller: system-controller@10040000 {
13 compatible = "samsung,exynos5250-pmu", "syscon";
14 reg = <0x10040000 0x5000>;
15};
diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
index a2ac2d9ac71a..f5a5b19ed3b2 100644
--- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
+++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
@@ -15,259 +15,12 @@ Required Properties:
15 15
16- #clock-cells: should be 1. 16- #clock-cells: should be 1.
17 17
18The following is the list of clocks generated by the controller. Each clock is 18Each clock is assigned an identifier and client nodes can use this identifier
19assigned an identifier and client nodes use this identifier to specify the 19to specify the clock which they consume.
20clock which they consume. Some of the clocks are available only on a particular
21Exynos4 SoC and this is specified where applicable.
22
23
24 [Core Clocks]
25
26 Clock ID SoC (if specific)
27 -----------------------------------------------
28
29 xxti 1
30 xusbxti 2
31 fin_pll 3
32 fout_apll 4
33 fout_mpll 5
34 fout_epll 6
35 fout_vpll 7
36 sclk_apll 8
37 sclk_mpll 9
38 sclk_epll 10
39 sclk_vpll 11
40 arm_clk 12
41 aclk200 13
42 aclk100 14
43 aclk160 15
44 aclk133 16
45 mout_mpll_user_t 17 Exynos4x12
46 mout_mpll_user_c 18 Exynos4x12
47 mout_core 19
48 mout_apll 20
49
50
51 [Clock Gate for Special Clocks]
52
53 Clock ID SoC (if specific)
54 -----------------------------------------------
55
56 sclk_fimc0 128
57 sclk_fimc1 129
58 sclk_fimc2 130
59 sclk_fimc3 131
60 sclk_cam0 132
61 sclk_cam1 133
62 sclk_csis0 134
63 sclk_csis1 135
64 sclk_hdmi 136
65 sclk_mixer 137
66 sclk_dac 138
67 sclk_pixel 139
68 sclk_fimd0 140
69 sclk_mdnie0 141 Exynos4412
70 sclk_mdnie_pwm0 12 142 Exynos4412
71 sclk_mipi0 143
72 sclk_audio0 144
73 sclk_mmc0 145
74 sclk_mmc1 146
75 sclk_mmc2 147
76 sclk_mmc3 148
77 sclk_mmc4 149
78 sclk_sata 150 Exynos4210
79 sclk_uart0 151
80 sclk_uart1 152
81 sclk_uart2 153
82 sclk_uart3 154
83 sclk_uart4 155
84 sclk_audio1 156
85 sclk_audio2 157
86 sclk_spdif 158
87 sclk_spi0 159
88 sclk_spi1 160
89 sclk_spi2 161
90 sclk_slimbus 162
91 sclk_fimd1 163 Exynos4210
92 sclk_mipi1 164 Exynos4210
93 sclk_pcm1 165
94 sclk_pcm2 166
95 sclk_i2s1 167
96 sclk_i2s2 168
97 sclk_mipihsi 169 Exynos4412
98 sclk_mfc 170
99 sclk_pcm0 171
100 sclk_g3d 172
101 sclk_pwm_isp 173 Exynos4x12
102 sclk_spi0_isp 174 Exynos4x12
103 sclk_spi1_isp 175 Exynos4x12
104 sclk_uart_isp 176 Exynos4x12
105 sclk_fimg2d 177
106
107 [Peripheral Clock Gates]
108
109 Clock ID SoC (if specific)
110 -----------------------------------------------
111
112 fimc0 256
113 fimc1 257
114 fimc2 258
115 fimc3 259
116 csis0 260
117 csis1 261
118 jpeg 262
119 smmu_fimc0 263
120 smmu_fimc1 264
121 smmu_fimc2 265
122 smmu_fimc3 266
123 smmu_jpeg 267
124 vp 268
125 mixer 269
126 tvenc 270 Exynos4210
127 hdmi 271
128 smmu_tv 272
129 mfc 273
130 smmu_mfcl 274
131 smmu_mfcr 275
132 g3d 276
133 g2d 277
134 rotator 278 Exynos4210
135 mdma 279 Exynos4210
136 smmu_g2d 280 Exynos4210
137 smmu_rotator 281 Exynos4210
138 smmu_mdma 282 Exynos4210
139 fimd0 283
140 mie0 284
141 mdnie0 285 Exynos4412
142 dsim0 286
143 smmu_fimd0 287
144 fimd1 288 Exynos4210
145 mie1 289 Exynos4210
146 dsim1 290 Exynos4210
147 smmu_fimd1 291 Exynos4210
148 pdma0 292
149 pdma1 293
150 pcie_phy 294
151 sata_phy 295 Exynos4210
152 tsi 296
153 sdmmc0 297
154 sdmmc1 298
155 sdmmc2 299
156 sdmmc3 300
157 sdmmc4 301
158 sata 302 Exynos4210
159 sromc 303
160 usb_host 304
161 usb_device 305
162 pcie 306
163 onenand 307
164 nfcon 308
165 smmu_pcie 309
166 gps 310
167 smmu_gps 311
168 uart0 312
169 uart1 313
170 uart2 314
171 uart3 315
172 uart4 316
173 i2c0 317
174 i2c1 318
175 i2c2 319
176 i2c3 320
177 i2c4 321
178 i2c5 322
179 i2c6 323
180 i2c7 324
181 i2c_hdmi 325
182 tsadc 326
183 spi0 327
184 spi1 328
185 spi2 329
186 i2s1 330
187 i2s2 331
188 pcm0 332
189 i2s0 333
190 pcm1 334
191 pcm2 335
192 pwm 336
193 slimbus 337
194 spdif 338
195 ac97 339
196 modemif 340
197 chipid 341
198 sysreg 342
199 hdmi_cec 343
200 mct 344
201 wdt 345
202 rtc 346
203 keyif 347
204 audss 348
205 mipi_hsi 349 Exynos4210
206 mdma2 350 Exynos4210
207 pixelasyncm0 351
208 pixelasyncm1 352
209 fimc_lite0 353 Exynos4x12
210 fimc_lite1 354 Exynos4x12
211 ppmuispx 355 Exynos4x12
212 ppmuispmx 356 Exynos4x12
213 fimc_isp 357 Exynos4x12
214 fimc_drc 358 Exynos4x12
215 fimc_fd 359 Exynos4x12
216 mcuisp 360 Exynos4x12
217 gicisp 361 Exynos4x12
218 smmu_isp 362 Exynos4x12
219 smmu_drc 363 Exynos4x12
220 smmu_fd 364 Exynos4x12
221 smmu_lite0 365 Exynos4x12
222 smmu_lite1 366 Exynos4x12
223 mcuctl_isp 367 Exynos4x12
224 mpwm_isp 368 Exynos4x12
225 i2c0_isp 369 Exynos4x12
226 i2c1_isp 370 Exynos4x12
227 mtcadc_isp 371 Exynos4x12
228 pwm_isp 372 Exynos4x12
229 wdt_isp 373 Exynos4x12
230 uart_isp 374 Exynos4x12
231 asyncaxim 375 Exynos4x12
232 smmu_ispcx 376 Exynos4x12
233 spi0_isp 377 Exynos4x12
234 spi1_isp 378 Exynos4x12
235 pwm_isp_sclk 379 Exynos4x12
236 spi0_isp_sclk 380 Exynos4x12
237 spi1_isp_sclk 381 Exynos4x12
238 uart_isp_sclk 382 Exynos4x12
239 tmu_apbif 383
240
241 [Mux Clocks]
242
243 Clock ID SoC (if specific)
244 -----------------------------------------------
245
246 mout_fimc0 384
247 mout_fimc1 385
248 mout_fimc2 386
249 mout_fimc3 387
250 mout_cam0 388
251 mout_cam1 389
252 mout_csis0 390
253 mout_csis1 391
254 mout_g3d0 392
255 mout_g3d1 393
256 mout_g3d 394
257 aclk400_mcuisp 395 Exynos4x12
258
259 [Div Clocks]
260
261 Clock ID SoC (if specific)
262 -----------------------------------------------
263
264 div_isp0 450 Exynos4x12
265 div_isp1 451 Exynos4x12
266 div_mcuisp0 452 Exynos4x12
267 div_mcuisp1 453 Exynos4x12
268 div_aclk200 454 Exynos4x12
269 div_aclk400_mcuisp 455 Exynos4x12
270 20
21All available clocks are defined as preprocessor macros in
22dt-bindings/clock/exynos4.h header and can be used in device
23tree sources.
271 24
272Example 1: An example of a clock controller node is listed below. 25Example 1: An example of a clock controller node is listed below.
273 26
@@ -285,6 +38,6 @@ Example 2: UART controller node that consumes the clock generated by the clock
285 compatible = "samsung,exynos4210-uart"; 38 compatible = "samsung,exynos4210-uart";
286 reg = <0x13820000 0x100>; 39 reg = <0x13820000 0x100>;
287 interrupts = <0 54 0>; 40 interrupts = <0 54 0>;
288 clocks = <&clock 314>, <&clock 153>; 41 clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
289 clock-names = "uart", "clk_uart_baud0"; 42 clock-names = "uart", "clk_uart_baud0";
290 }; 43 };
diff --git a/Documentation/devicetree/bindings/clock/exynos5250-clock.txt b/Documentation/devicetree/bindings/clock/exynos5250-clock.txt
index 72ce617dea82..536eacd1063f 100644
--- a/Documentation/devicetree/bindings/clock/exynos5250-clock.txt
+++ b/Documentation/devicetree/bindings/clock/exynos5250-clock.txt
@@ -13,163 +13,12 @@ Required Properties:
13 13
14- #clock-cells: should be 1. 14- #clock-cells: should be 1.
15 15
16The following is the list of clocks generated by the controller. Each clock is 16Each clock is assigned an identifier and client nodes can use this identifier
17assigned an identifier and client nodes use this identifier to specify the 17to specify the clock which they consume.
18clock which they consume.
19
20
21 [Core Clocks]
22
23 Clock ID
24 ----------------------------
25
26 fin_pll 1
27
28 [Clock Gate for Special Clocks]
29
30 Clock ID
31 ----------------------------
32
33 sclk_cam_bayer 128
34 sclk_cam0 129
35 sclk_cam1 130
36 sclk_gscl_wa 131
37 sclk_gscl_wb 132
38 sclk_fimd1 133
39 sclk_mipi1 134
40 sclk_dp 135
41 sclk_hdmi 136
42 sclk_pixel 137
43 sclk_audio0 138
44 sclk_mmc0 139
45 sclk_mmc1 140
46 sclk_mmc2 141
47 sclk_mmc3 142
48 sclk_sata 143
49 sclk_usb3 144
50 sclk_jpeg 145
51 sclk_uart0 146
52 sclk_uart1 147
53 sclk_uart2 148
54 sclk_uart3 149
55 sclk_pwm 150
56 sclk_audio1 151
57 sclk_audio2 152
58 sclk_spdif 153
59 sclk_spi0 154
60 sclk_spi1 155
61 sclk_spi2 156
62 div_i2s1 157
63 div_i2s2 158
64 sclk_hdmiphy 159
65 div_pcm0 160
66
67
68 [Peripheral Clock Gates]
69
70 Clock ID
71 ----------------------------
72
73 gscl0 256
74 gscl1 257
75 gscl2 258
76 gscl3 259
77 gscl_wa 260
78 gscl_wb 261
79 smmu_gscl0 262
80 smmu_gscl1 263
81 smmu_gscl2 264
82 smmu_gscl3 265
83 mfc 266
84 smmu_mfcl 267
85 smmu_mfcr 268
86 rotator 269
87 jpeg 270
88 mdma1 271
89 smmu_rotator 272
90 smmu_jpeg 273
91 smmu_mdma1 274
92 pdma0 275
93 pdma1 276
94 sata 277
95 usbotg 278
96 mipi_hsi 279
97 sdmmc0 280
98 sdmmc1 281
99 sdmmc2 282
100 sdmmc3 283
101 sromc 284
102 usb2 285
103 usb3 286
104 sata_phyctrl 287
105 sata_phyi2c 288
106 uart0 289
107 uart1 290
108 uart2 291
109 uart3 292
110 uart4 293
111 i2c0 294
112 i2c1 295
113 i2c2 296
114 i2c3 297
115 i2c4 298
116 i2c5 299
117 i2c6 300
118 i2c7 301
119 i2c_hdmi 302
120 adc 303
121 spi0 304
122 spi1 305
123 spi2 306
124 i2s1 307
125 i2s2 308
126 pcm1 309
127 pcm2 310
128 pwm 311
129 spdif 312
130 ac97 313
131 hsi2c0 314
132 hsi2c1 315
133 hs12c2 316
134 hs12c3 317
135 chipid 318
136 sysreg 319
137 pmu 320
138 cmu_top 321
139 cmu_core 322
140 cmu_mem 323
141 tzpc0 324
142 tzpc1 325
143 tzpc2 326
144 tzpc3 327
145 tzpc4 328
146 tzpc5 329
147 tzpc6 330
148 tzpc7 331
149 tzpc8 332
150 tzpc9 333
151 hdmi_cec 334
152 mct 335
153 wdt 336
154 rtc 337
155 tmu 338
156 fimd1 339
157 mie1 340
158 dsim0 341
159 dp 342
160 mixer 343
161 hdmi 344
162 g2d 345
163 mdma0 346
164 smmu_mdma0 347
165
166
167 [Clock Muxes]
168
169 Clock ID
170 ----------------------------
171 mout_hdmi 1024
172 18
19All available clocks are defined as preprocessor macros in
20dt-bindings/clock/exynos5250.h header and can be used in device
21tree sources.
173 22
174Example 1: An example of a clock controller node is listed below. 23Example 1: An example of a clock controller node is listed below.
175 24
@@ -187,6 +36,6 @@ Example 2: UART controller node that consumes the clock generated by the clock
187 compatible = "samsung,exynos4210-uart"; 36 compatible = "samsung,exynos4210-uart";
188 reg = <0x13820000 0x100>; 37 reg = <0x13820000 0x100>;
189 interrupts = <0 54 0>; 38 interrupts = <0 54 0>;
190 clocks = <&clock 314>, <&clock 153>; 39 clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
191 clock-names = "uart", "clk_uart_baud0"; 40 clock-names = "uart", "clk_uart_baud0";
192 }; 41 };
diff --git a/Documentation/devicetree/bindings/clock/exynos5420-clock.txt b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt
index 458f34789e5d..ca88c97a8562 100644
--- a/Documentation/devicetree/bindings/clock/exynos5420-clock.txt
+++ b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt
@@ -13,184 +13,12 @@ Required Properties:
13 13
14- #clock-cells: should be 1. 14- #clock-cells: should be 1.
15 15
16The following is the list of clocks generated by the controller. Each clock is 16Each clock is assigned an identifier and client nodes can use this identifier
17assigned an identifier and client nodes use this identifier to specify the 17to specify the clock which they consume.
18clock which they consume.
19 18
20 19All available clocks are defined as preprocessor macros in
21 [Core Clocks] 20dt-bindings/clock/exynos5420.h header and can be used in device
22 21tree sources.
23 Clock ID
24 ----------------------------
25
26 fin_pll 1
27
28 [Clock Gate for Special Clocks]
29
30 Clock ID
31 ----------------------------
32 sclk_uart0 128
33 sclk_uart1 129
34 sclk_uart2 130
35 sclk_uart3 131
36 sclk_mmc0 132
37 sclk_mmc1 133
38 sclk_mmc2 134
39 sclk_spi0 135
40 sclk_spi1 136
41 sclk_spi2 137
42 sclk_i2s1 138
43 sclk_i2s2 139
44 sclk_pcm1 140
45 sclk_pcm2 141
46 sclk_spdif 142
47 sclk_hdmi 143
48 sclk_pixel 144
49 sclk_dp1 145
50 sclk_mipi1 146
51 sclk_fimd1 147
52 sclk_maudio0 148
53 sclk_maupcm0 149
54 sclk_usbd300 150
55 sclk_usbd301 151
56 sclk_usbphy300 152
57 sclk_usbphy301 153
58 sclk_unipro 154
59 sclk_pwm 155
60 sclk_gscl_wa 156
61 sclk_gscl_wb 157
62 sclk_hdmiphy 158
63
64 [Peripheral Clock Gates]
65
66 Clock ID
67 ----------------------------
68
69 aclk66_peric 256
70 uart0 257
71 uart1 258
72 uart2 259
73 uart3 260
74 i2c0 261
75 i2c1 262
76 i2c2 263
77 i2c3 264
78 i2c4 265
79 i2c5 266
80 i2c6 267
81 i2c7 268
82 i2c_hdmi 269
83 tsadc 270
84 spi0 271
85 spi1 272
86 spi2 273
87 keyif 274
88 i2s1 275
89 i2s2 276
90 pcm1 277
91 pcm2 278
92 pwm 279
93 spdif 280
94 i2c8 281
95 i2c9 282
96 i2c10 283
97 aclk66_psgen 300
98 chipid 301
99 sysreg 302
100 tzpc0 303
101 tzpc1 304
102 tzpc2 305
103 tzpc3 306
104 tzpc4 307
105 tzpc5 308
106 tzpc6 309
107 tzpc7 310
108 tzpc8 311
109 tzpc9 312
110 hdmi_cec 313
111 seckey 314
112 mct 315
113 wdt 316
114 rtc 317
115 tmu 318
116 tmu_gpu 319
117 pclk66_gpio 330
118 aclk200_fsys2 350
119 mmc0 351
120 mmc1 352
121 mmc2 353
122 sromc 354
123 ufs 355
124 aclk200_fsys 360
125 tsi 361
126 pdma0 362
127 pdma1 363
128 rtic 364
129 usbh20 365
130 usbd300 366
131 usbd301 377
132 aclk400_mscl 380
133 mscl0 381
134 mscl1 382
135 mscl2 383
136 smmu_mscl0 384
137 smmu_mscl1 385
138 smmu_mscl2 386
139 aclk333 400
140 mfc 401
141 smmu_mfcl 402
142 smmu_mfcr 403
143 aclk200_disp1 410
144 dsim1 411
145 dp1 412
146 hdmi 413
147 aclk300_disp1 420
148 fimd1 421
149 smmu_fimd1 422
150 aclk166 430
151 mixer 431
152 aclk266 440
153 rotator 441
154 mdma1 442
155 smmu_rotator 443
156 smmu_mdma1 444
157 aclk300_jpeg 450
158 jpeg 451
159 jpeg2 452
160 smmu_jpeg 453
161 aclk300_gscl 460
162 smmu_gscl0 461
163 smmu_gscl1 462
164 gscl_wa 463
165 gscl_wb 464
166 gscl0 465
167 gscl1 466
168 clk_3aa 467
169 aclk266_g2d 470
170 sss 471
171 slim_sss 472
172 mdma0 473
173 aclk333_g2d 480
174 g2d 481
175 aclk333_432_gscl 490
176 smmu_3aa 491
177 smmu_fimcl0 492
178 smmu_fimcl1 493
179 smmu_fimcl3 494
180 fimc_lite3 495
181 aclk_g3d 500
182 g3d 501
183 smmu_mixer 502
184
185 Mux ID
186 ----------------------------
187
188 mout_hdmi 640
189
190 Divider ID
191 ----------------------------
192
193 dout_pixel 768
194 22
195Example 1: An example of a clock controller node is listed below. 23Example 1: An example of a clock controller node is listed below.
196 24
@@ -208,6 +36,6 @@ Example 2: UART controller node that consumes the clock generated by the clock
208 compatible = "samsung,exynos4210-uart"; 36 compatible = "samsung,exynos4210-uart";
209 reg = <0x13820000 0x100>; 37 reg = <0x13820000 0x100>;
210 interrupts = <0 54 0>; 38 interrupts = <0 54 0>;
211 clocks = <&clock 259>, <&clock 130>; 39 clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
212 clock-names = "uart", "clk_uart_baud0"; 40 clock-names = "uart", "clk_uart_baud0";
213 }; 41 };
diff --git a/Documentation/devicetree/bindings/clock/exynos5440-clock.txt b/Documentation/devicetree/bindings/clock/exynos5440-clock.txt
index 9955dc9c7d96..5f7005f73058 100644
--- a/Documentation/devicetree/bindings/clock/exynos5440-clock.txt
+++ b/Documentation/devicetree/bindings/clock/exynos5440-clock.txt
@@ -12,45 +12,12 @@ Required Properties:
12 12
13- #clock-cells: should be 1. 13- #clock-cells: should be 1.
14 14
15The following is the list of clocks generated by the controller. Each clock is 15Each clock is assigned an identifier and client nodes can use this identifier
16assigned an identifier and client nodes use this identifier to specify the 16to specify the clock which they consume.
17clock which they consume. 17
18 18All available clocks are defined as preprocessor macros in
19 19dt-bindings/clock/exynos5440.h header and can be used in device
20 [Core Clocks] 20tree sources.
21
22 Clock ID
23 ----------------------------
24
25 xtal 1
26 arm_clk 2
27
28 [Peripheral Clock Gates]
29
30 Clock ID
31 ----------------------------
32
33 spi_baud 16
34 pb0_250 17
35 pr0_250 18
36 pr1_250 19
37 b_250 20
38 b_125 21
39 b_200 22
40 sata 23
41 usb 24
42 gmac0 25
43 cs250 26
44 pb0_250_o 27
45 pr0_250_o 28
46 pr1_250_o 29
47 b_250_o 30
48 b_125_o 31
49 b_200_o 32
50 sata_o 33
51 usb_o 34
52 gmac0_o 35
53 cs250_o 36
54 21
55Example: An example of a clock controller node is listed below. 22Example: An example of a clock controller node is listed below.
56 23
diff --git a/Documentation/devicetree/bindings/interrupt-controller/lsi,zevio-intc.txt b/Documentation/devicetree/bindings/interrupt-controller/lsi,zevio-intc.txt
new file mode 100644
index 000000000000..aee38e7c13e7
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/lsi,zevio-intc.txt
@@ -0,0 +1,18 @@
1TI-NSPIRE interrupt controller
2
3Required properties:
4- compatible: Compatible property value should be "lsi,zevio-intc".
5
6- reg: Physical base address of the controller and length of memory mapped
7 region.
8
9- interrupt-controller : Identifies the node as an interrupt controller
10
11Example:
12
13interrupt-controller {
14 compatible = "lsi,zevio-intc";
15 interrupt-controller;
16 reg = <0xDC000000 0x1000>;
17 #interrupt-cells = <1>;
18};
diff --git a/Documentation/devicetree/bindings/mmc/atmel-hsmci.txt b/Documentation/devicetree/bindings/mmc/atmel-hsmci.txt
index 0a85c70cd30a..07ad02075a93 100644
--- a/Documentation/devicetree/bindings/mmc/atmel-hsmci.txt
+++ b/Documentation/devicetree/bindings/mmc/atmel-hsmci.txt
@@ -13,6 +13,9 @@ Required properties:
13- #address-cells: should be one. The cell is the slot id. 13- #address-cells: should be one. The cell is the slot id.
14- #size-cells: should be zero. 14- #size-cells: should be zero.
15- at least one slot node 15- at least one slot node
16- clock-names: tuple listing input clock names.
17 Required elements: "mci_clk"
18- clocks: phandles to input clocks.
16 19
17The node contains child nodes for each slot that the platform uses 20The node contains child nodes for each slot that the platform uses
18 21
@@ -24,6 +27,8 @@ mmc0: mmc@f0008000 {
24 interrupts = <12 4>; 27 interrupts = <12 4>;
25 #address-cells = <1>; 28 #address-cells = <1>;
26 #size-cells = <0>; 29 #size-cells = <0>;
30 clock-names = "mci_clk";
31 clocks = <&mci0_clk>;
27 32
28 [ child node definitions...] 33 [ child node definitions...]
29}; 34};
diff --git a/Documentation/devicetree/bindings/net/allwinner,sun4i-emac.txt b/Documentation/devicetree/bindings/net/allwinner,sun4i-emac.txt
index b90bfcd138ff..863d5b8155c7 100644
--- a/Documentation/devicetree/bindings/net/allwinner,sun4i-emac.txt
+++ b/Documentation/devicetree/bindings/net/allwinner,sun4i-emac.txt
@@ -1,7 +1,8 @@
1* Allwinner EMAC ethernet controller 1* Allwinner EMAC ethernet controller
2 2
3Required properties: 3Required properties:
4- compatible: should be "allwinner,sun4i-emac". 4- compatible: should be "allwinner,sun4i-a10-emac" (Deprecated:
5 "allwinner,sun4i-emac")
5- reg: address and length of the register set for the device. 6- reg: address and length of the register set for the device.
6- interrupts: interrupt for the device 7- interrupts: interrupt for the device
7- phy: A phandle to a phy node defining the PHY address (as the reg 8- phy: A phandle to a phy node defining the PHY address (as the reg
@@ -14,7 +15,7 @@ Optional properties:
14Example: 15Example:
15 16
16emac: ethernet@01c0b000 { 17emac: ethernet@01c0b000 {
17 compatible = "allwinner,sun4i-emac"; 18 compatible = "allwinner,sun4i-a10-emac";
18 reg = <0x01c0b000 0x1000>; 19 reg = <0x01c0b000 0x1000>;
19 interrupts = <55>; 20 interrupts = <55>;
20 clocks = <&ahb_gates 17>; 21 clocks = <&ahb_gates 17>;
diff --git a/Documentation/devicetree/bindings/net/allwinner,sun4i-mdio.txt b/Documentation/devicetree/bindings/net/allwinner,sun4i-mdio.txt
index 00b9f9a3ec1d..4ec56413779d 100644
--- a/Documentation/devicetree/bindings/net/allwinner,sun4i-mdio.txt
+++ b/Documentation/devicetree/bindings/net/allwinner,sun4i-mdio.txt
@@ -1,7 +1,8 @@
1* Allwinner A10 MDIO Ethernet Controller interface 1* Allwinner A10 MDIO Ethernet Controller interface
2 2
3Required properties: 3Required properties:
4- compatible: should be "allwinner,sun4i-mdio". 4- compatible: should be "allwinner,sun4i-a10-mdio"
5 (Deprecated: "allwinner,sun4i-mdio").
5- reg: address and length of the register set for the device. 6- reg: address and length of the register set for the device.
6 7
7Optional properties: 8Optional properties:
@@ -9,7 +10,7 @@ Optional properties:
9 10
10Example at the SoC level: 11Example at the SoC level:
11mdio@01c0b080 { 12mdio@01c0b080 {
12 compatible = "allwinner,sun4i-mdio"; 13 compatible = "allwinner,sun4i-a10-mdio";
13 reg = <0x01c0b080 0x14>; 14 reg = <0x01c0b080 0x14>;
14 #address-cells = <1>; 15 #address-cells = <1>;
15 #size-cells = <0>; 16 #size-cells = <0>;
diff --git a/Documentation/devicetree/bindings/power/bq2415x.txt b/Documentation/devicetree/bindings/power/bq2415x.txt
new file mode 100644
index 000000000000..d0327f0b59ad
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/bq2415x.txt
@@ -0,0 +1,47 @@
1Binding for TI bq2415x Li-Ion Charger
2
3Required properties:
4- compatible: Should contain one of the following:
5 * "ti,bq24150"
6 * "ti,bq24150"
7 * "ti,bq24150a"
8 * "ti,bq24151"
9 * "ti,bq24151a"
10 * "ti,bq24152"
11 * "ti,bq24153"
12 * "ti,bq24153a"
13 * "ti,bq24155"
14 * "ti,bq24156"
15 * "ti,bq24156a"
16 * "ti,bq24158"
17- reg: integer, i2c address of the device.
18- ti,current-limit: integer, initial maximum current charger can pull
19 from power supply in mA.
20- ti,weak-battery-voltage: integer, weak battery voltage threshold in mV.
21 The chip will use slow precharge if battery voltage
22 is below this value.
23- ti,battery-regulation-voltage: integer, maximum charging voltage in mV.
24- ti,charge-current: integer, maximum charging current in mA.
25- ti,termination-current: integer, charge will be terminated when current in
26 constant-voltage phase drops below this value (in mA).
27- ti,resistor-sense: integer, value of sensing resistor in milliohm.
28
29Optional properties:
30- ti,usb-charger-detection: phandle to usb charger detection device.
31 (required for auto mode)
32
33Example from Nokia N900:
34
35bq24150a {
36 compatible = "ti,bq24150a";
37 reg = <0x6b>;
38
39 ti,current-limit = <100>;
40 ti,weak-battery-voltage = <3400>;
41 ti,battery-regulation-voltage = <4200>;
42 ti,charge-current = <650>;
43 ti,termination-current = <100>;
44 ti,resistor-sense = <68>;
45
46 ti,usb-charger-detection = <&isp1704>;
47};
diff --git a/Documentation/devicetree/bindings/serial/atmel-usart.txt b/Documentation/devicetree/bindings/serial/atmel-usart.txt
index 9c5d19ac935c..17c1042b2df8 100644
--- a/Documentation/devicetree/bindings/serial/atmel-usart.txt
+++ b/Documentation/devicetree/bindings/serial/atmel-usart.txt
@@ -13,6 +13,8 @@ Required properties:
13Optional properties: 13Optional properties:
14- atmel,use-dma-rx: use of PDC or DMA for receiving data 14- atmel,use-dma-rx: use of PDC or DMA for receiving data
15- atmel,use-dma-tx: use of PDC or DMA for transmitting data 15- atmel,use-dma-tx: use of PDC or DMA for transmitting data
16- rts-gpios: specify a GPIO for RTS line. It will use specified PIO instead of the peripheral
17 function pin for the USART RTS feature. If unsure, don't specify this property.
16- add dma bindings for dma transfer: 18- add dma bindings for dma transfer:
17 - dmas: DMA specifier, consisting of a phandle to DMA controller node, 19 - dmas: DMA specifier, consisting of a phandle to DMA controller node,
18 memory peripheral interface and USART DMA channel ID, FIFO configuration. 20 memory peripheral interface and USART DMA channel ID, FIFO configuration.
@@ -33,6 +35,7 @@ Example:
33 clock-names = "usart"; 35 clock-names = "usart";
34 atmel,use-dma-rx; 36 atmel,use-dma-rx;
35 atmel,use-dma-tx; 37 atmel,use-dma-tx;
38 rts-gpios = <&pioD 15 0>;
36 }; 39 };
37 40
38- use DMA: 41- use DMA:
diff --git a/Documentation/devicetree/bindings/spi/spi_atmel.txt b/Documentation/devicetree/bindings/spi/spi_atmel.txt
index 07e04cdc0c9e..4f8184d069cb 100644
--- a/Documentation/devicetree/bindings/spi/spi_atmel.txt
+++ b/Documentation/devicetree/bindings/spi/spi_atmel.txt
@@ -5,6 +5,9 @@ Required properties:
5- reg: Address and length of the register set for the device 5- reg: Address and length of the register set for the device
6- interrupts: Should contain spi interrupt 6- interrupts: Should contain spi interrupt
7- cs-gpios: chipselects 7- cs-gpios: chipselects
8- clock-names: tuple listing input clock names.
9 Required elements: "spi_clk"
10- clocks: phandles to input clocks.
8 11
9Example: 12Example:
10 13
@@ -14,6 +17,8 @@ spi1: spi@fffcc000 {
14 interrupts = <13 4 5>; 17 interrupts = <13 4 5>;
15 #address-cells = <1>; 18 #address-cells = <1>;
16 #size-cells = <0>; 19 #size-cells = <0>;
20 clocks = <&spi1_clk>;
21 clock-names = "spi_clk";
17 cs-gpios = <&pioB 3 0>; 22 cs-gpios = <&pioB 3 0>;
18 status = "okay"; 23 status = "okay";
19 24
diff --git a/Documentation/devicetree/bindings/usb/ehci-omap.txt b/Documentation/devicetree/bindings/usb/ehci-omap.txt
index 485a9a1efa7a..3dc231c832b0 100644
--- a/Documentation/devicetree/bindings/usb/ehci-omap.txt
+++ b/Documentation/devicetree/bindings/usb/ehci-omap.txt
@@ -21,7 +21,7 @@ Documentation/devicetree/bindings/mfd/omap-usb-host.txt
21Example for OMAP4: 21Example for OMAP4:
22 22
23usbhsehci: ehci@4a064c00 { 23usbhsehci: ehci@4a064c00 {
24 compatible = "ti,ehci-omap", "usb-ehci"; 24 compatible = "ti,ehci-omap";
25 reg = <0x4a064c00 0x400>; 25 reg = <0x4a064c00 0x400>;
26 interrupts = <0 77 0x4>; 26 interrupts = <0 77 0x4>;
27}; 27};
diff --git a/Documentation/devicetree/bindings/usb/ohci-omap3.txt b/Documentation/devicetree/bindings/usb/ohci-omap3.txt
index 14ab42812a8e..ce8c47cff6d0 100644
--- a/Documentation/devicetree/bindings/usb/ohci-omap3.txt
+++ b/Documentation/devicetree/bindings/usb/ohci-omap3.txt
@@ -9,7 +9,7 @@ Required properties:
9Example for OMAP4: 9Example for OMAP4:
10 10
11usbhsohci: ohci@4a064800 { 11usbhsohci: ohci@4a064800 {
12 compatible = "ti,ohci-omap3", "usb-ohci"; 12 compatible = "ti,ohci-omap3";
13 reg = <0x4a064800 0x400>; 13 reg = <0x4a064800 0x400>;
14 interrupts = <0 76 0x4>; 14 interrupts = <0 76 0x4>;
15}; 15};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index c73b435f58f5..4685ec396c34 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -8,6 +8,7 @@ ad Avionic Design GmbH
8adi Analog Devices, Inc. 8adi Analog Devices, Inc.
9aeroflexgaisler Aeroflex Gaisler AB 9aeroflexgaisler Aeroflex Gaisler AB
10ak Asahi Kasei Corp. 10ak Asahi Kasei Corp.
11allwinner Allwinner Technology Co., Ltd.
11altr Altera Corp. 12altr Altera Corp.
12amcc Applied Micro Circuits Corporation (APM, formally AMCC) 13amcc Applied Micro Circuits Corporation (APM, formally AMCC)
13amstaos AMS-Taos Inc. 14amstaos AMS-Taos Inc.
@@ -28,11 +29,13 @@ cortina Cortina Systems, Inc.
28dallas Maxim Integrated Products (formerly Dallas Semiconductor) 29dallas Maxim Integrated Products (formerly Dallas Semiconductor)
29davicom DAVICOM Semiconductor, Inc. 30davicom DAVICOM Semiconductor, Inc.
30denx Denx Software Engineering 31denx Denx Software Engineering
32dmo Data Modul AG
31edt Emerging Display Technologies 33edt Emerging Display Technologies
32emmicro EM Microelectronic 34emmicro EM Microelectronic
33epfl Ecole Polytechnique Fédérale de Lausanne 35epfl Ecole Polytechnique Fédérale de Lausanne
34epson Seiko Epson Corp. 36epson Seiko Epson Corp.
35est ESTeem Wireless Modems 37est ESTeem Wireless Modems
38eukrea Eukréa Electromatique
36fsl Freescale Semiconductor 39fsl Freescale Semiconductor
37GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. 40GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
38gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. 41gef GE Fanuc Intelligent Platforms Embedded Systems, Inc.
@@ -40,6 +43,7 @@ gmt Global Mixed-mode Technology, Inc.
40gumstix Gumstix, Inc. 43gumstix Gumstix, Inc.
41haoyu Haoyu Microelectronic Co. Ltd. 44haoyu Haoyu Microelectronic Co. Ltd.
42hisilicon Hisilicon Limited. 45hisilicon Hisilicon Limited.
46honeywell Honeywell
43hp Hewlett Packard 47hp Hewlett Packard
44ibm International Business Machines (IBM) 48ibm International Business Machines (IBM)
45idt Integrated Device Technologies, Inc. 49idt Integrated Device Technologies, Inc.
@@ -55,6 +59,7 @@ maxim Maxim Integrated Products
55microchip Microchip Technology Inc. 59microchip Microchip Technology Inc.
56mosaixtech Mosaix Technologies, Inc. 60mosaixtech Mosaix Technologies, Inc.
57national National Semiconductor 61national National Semiconductor
62neonode Neonode Inc.
58nintendo Nintendo 63nintendo Nintendo
59nvidia NVIDIA 64nvidia NVIDIA
60nxp NXP Semiconductors 65nxp NXP Semiconductors
@@ -64,7 +69,7 @@ phytec PHYTEC Messtechnik GmbH
64picochip Picochip Ltd 69picochip Picochip Ltd
65powervr PowerVR (deprecated, use img) 70powervr PowerVR (deprecated, use img)
66qca Qualcomm Atheros, Inc. 71qca Qualcomm Atheros, Inc.
67qcom Qualcomm, Inc. 72qcom Qualcomm Technologies, Inc
68qnap QNAP Systems, Inc. 73qnap QNAP Systems, Inc.
69ralink Mediatek/Ralink Technology Corp. 74ralink Mediatek/Ralink Technology Corp.
70ramtron Ramtron International 75ramtron Ramtron International
@@ -81,6 +86,7 @@ simtek
81sii Seiko Instruments, Inc. 86sii Seiko Instruments, Inc.
82sirf SiRF Technology, Inc. 87sirf SiRF Technology, Inc.
83snps Synopsys, Inc. 88snps Synopsys, Inc.
89spansion Spansion Inc.
84st STMicroelectronics 90st STMicroelectronics
85ste ST-Ericsson 91ste ST-Ericsson
86stericsson ST-Ericsson 92stericsson ST-Ericsson
@@ -91,6 +97,7 @@ toshiba Toshiba Corporation
91toumaz Toumaz 97toumaz Toumaz
92v3 V3 Semiconductor 98v3 V3 Semiconductor
93via VIA Technologies, Inc. 99via VIA Technologies, Inc.
100voipac Voipac Technologies s.r.o.
94winbond Winbond Electronics corp. 101winbond Winbond Electronics corp.
95wlf Wolfson Microelectronics 102wlf Wolfson Microelectronics
96wm Wondermedia Technologies, Inc. 103wm Wondermedia Technologies, Inc.
diff --git a/Documentation/dvb/contributors.txt b/Documentation/dvb/contributors.txt
index 47c30098dab6..731a009723c7 100644
--- a/Documentation/dvb/contributors.txt
+++ b/Documentation/dvb/contributors.txt
@@ -78,7 +78,7 @@ Peter Beutner <p.beutner@gmx.net>
78Wilson Michaels <wilsonmichaels@earthlink.net> 78Wilson Michaels <wilsonmichaels@earthlink.net>
79 for the lgdt330x frontend driver, and various bugfixes 79 for the lgdt330x frontend driver, and various bugfixes
80 80
81Michael Krufky <mkrufky@m1k.net> 81Michael Krufky <mkrufky@linuxtv.org>
82 for maintaining v4l/dvb inter-tree dependencies 82 for maintaining v4l/dvb inter-tree dependencies
83 83
84Taylor Jacob <rtjacob@earthlink.net> 84Taylor Jacob <rtjacob@earthlink.net>
diff --git a/Documentation/fb/00-INDEX b/Documentation/fb/00-INDEX
index 30a70542e823..fe85e7c5907a 100644
--- a/Documentation/fb/00-INDEX
+++ b/Documentation/fb/00-INDEX
@@ -5,6 +5,8 @@ please mail me.
5 5
600-INDEX 600-INDEX
7 - this file. 7 - this file.
8api.txt
9 - The frame buffer API between applications and buffer devices.
8arkfb.txt 10arkfb.txt
9 - info on the fbdev driver for ARK Logic chips. 11 - info on the fbdev driver for ARK Logic chips.
10aty128fb.txt 12aty128fb.txt
@@ -51,12 +53,16 @@ sh7760fb.txt
51 - info on the SH7760/SH7763 integrated LCDC Framebuffer driver. 53 - info on the SH7760/SH7763 integrated LCDC Framebuffer driver.
52sisfb.txt 54sisfb.txt
53 - info on the framebuffer device driver for various SiS chips. 55 - info on the framebuffer device driver for various SiS chips.
56sm501.txt
57 - info on the framebuffer device driver for sm501 videoframebuffer.
54sstfb.txt 58sstfb.txt
55 - info on the frame buffer driver for 3dfx' Voodoo Graphics boards. 59 - info on the frame buffer driver for 3dfx' Voodoo Graphics boards.
56tgafb.txt 60tgafb.txt
57 - info on the TGA (DECChip 21030) frame buffer driver. 61 - info on the TGA (DECChip 21030) frame buffer driver.
58tridentfb.txt 62tridentfb.txt
59 info on the framebuffer driver for some Trident chip based cards. 63 info on the framebuffer driver for some Trident chip based cards.
64udlfb.txt
65 - Driver for DisplayLink USB 2.0 chips.
60uvesafb.txt 66uvesafb.txt
61 - info on the userspace VESA (VBE2+ compliant) frame buffer device. 67 - info on the userspace VESA (VBE2+ compliant) frame buffer device.
62vesafb.txt 68vesafb.txt
diff --git a/Documentation/filesystems/00-INDEX b/Documentation/filesystems/00-INDEX
index 632211cbdd56..ac28149aede4 100644
--- a/Documentation/filesystems/00-INDEX
+++ b/Documentation/filesystems/00-INDEX
@@ -2,6 +2,8 @@
2 - this file (info on some of the filesystems supported by linux). 2 - this file (info on some of the filesystems supported by linux).
3Locking 3Locking
4 - info on locking rules as they pertain to Linux VFS. 4 - info on locking rules as they pertain to Linux VFS.
5Makefile
6 - Makefile for building the filsystems-part of DocBook.
59p.txt 79p.txt
6 - 9p (v9fs) is an implementation of the Plan 9 remote fs protocol. 8 - 9p (v9fs) is an implementation of the Plan 9 remote fs protocol.
7adfs.txt 9adfs.txt
diff --git a/Documentation/filesystems/nfs/00-INDEX b/Documentation/filesystems/nfs/00-INDEX
index 66eb6c8c5334..53f3b596ac0d 100644
--- a/Documentation/filesystems/nfs/00-INDEX
+++ b/Documentation/filesystems/nfs/00-INDEX
@@ -12,6 +12,8 @@ nfs41-server.txt
12 - info on the Linux server implementation of NFSv4 minor version 1. 12 - info on the Linux server implementation of NFSv4 minor version 1.
13nfs-rdma.txt 13nfs-rdma.txt
14 - how to install and setup the Linux NFS/RDMA client and server software 14 - how to install and setup the Linux NFS/RDMA client and server software
15nfsd-admin-interfaces.txt
16 - Administrative interfaces for nfsd.
15nfsroot.txt 17nfsroot.txt
16 - short guide on setting up a diskless box with NFS root filesystem. 18 - short guide on setting up a diskless box with NFS root filesystem.
17pnfs.txt 19pnfs.txt
@@ -20,5 +22,5 @@ rpc-cache.txt
20 - introduction to the caching mechanisms in the sunrpc layer. 22 - introduction to the caching mechanisms in the sunrpc layer.
21idmapper.txt 23idmapper.txt
22 - information for configuring request-keys to be used by idmapper 24 - information for configuring request-keys to be used by idmapper
23knfsd-rpcgss.txt 25rpc-server-gss.txt
24 - Information on GSS authentication support in the NFS Server 26 - Information on GSS authentication support in the NFS Server
diff --git a/Documentation/i2c/instantiating-devices b/Documentation/i2c/instantiating-devices
index c70e7a7638d1..0d85ac1935b7 100644
--- a/Documentation/i2c/instantiating-devices
+++ b/Documentation/i2c/instantiating-devices
@@ -8,8 +8,8 @@ reason, the kernel code must instantiate I2C devices explicitly. There are
8several ways to achieve this, depending on the context and requirements. 8several ways to achieve this, depending on the context and requirements.
9 9
10 10
11Method 1: Declare the I2C devices by bus number 11Method 1a: Declare the I2C devices by bus number
12----------------------------------------------- 12------------------------------------------------
13 13
14This method is appropriate when the I2C bus is a system bus as is the case 14This method is appropriate when the I2C bus is a system bus as is the case
15for many embedded systems. On such systems, each I2C bus has a number 15for many embedded systems. On such systems, each I2C bus has a number
@@ -51,6 +51,43 @@ The devices will be automatically unbound and destroyed when the I2C bus
51they sit on goes away (if ever.) 51they sit on goes away (if ever.)
52 52
53 53
54Method 1b: Declare the I2C devices via devicetree
55-------------------------------------------------
56
57This method has the same implications as method 1a. The declaration of I2C
58devices is here done via devicetree as subnodes of the master controller.
59
60Example:
61
62 i2c1: i2c@400a0000 {
63 /* ... master properties skipped ... */
64 clock-frequency = <100000>;
65
66 flash@50 {
67 compatible = "atmel,24c256";
68 reg = <0x50>;
69 };
70
71 pca9532: gpio@60 {
72 compatible = "nxp,pca9532";
73 gpio-controller;
74 #gpio-cells = <2>;
75 reg = <0x60>;
76 };
77 };
78
79Here, two devices are attached to the bus using a speed of 100kHz. For
80additional properties which might be needed to set up the device, please refer
81to its devicetree documentation in Documentation/devicetree/bindings/.
82
83
84Method 1c: Declare the I2C devices via ACPI
85-------------------------------------------
86
87ACPI can also describe I2C devices. There is special documentation for this
88which is currently located at Documentation/acpi/enumeration.txt.
89
90
54Method 2: Instantiate the devices explicitly 91Method 2: Instantiate the devices explicitly
55-------------------------------------------- 92--------------------------------------------
56 93
diff --git a/Documentation/ide/00-INDEX b/Documentation/ide/00-INDEX
index d6b778842b75..22f98ca79539 100644
--- a/Documentation/ide/00-INDEX
+++ b/Documentation/ide/00-INDEX
@@ -10,3 +10,5 @@ ide-tape.txt
10 - info on the IDE ATAPI streaming tape driver 10 - info on the IDE ATAPI streaming tape driver
11ide.txt 11ide.txt
12 - important info for users of ATA devices (IDE/EIDE disks and CD-ROMS). 12 - important info for users of ATA devices (IDE/EIDE disks and CD-ROMS).
13warm-plug-howto.txt
14 - using sysfs to remove and add IDE devices. \ No newline at end of file
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 8f441dab0396..7116fda7077f 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1726,16 +1726,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
1726 option description. 1726 option description.
1727 1727
1728 memmap=nn[KMG]@ss[KMG] 1728 memmap=nn[KMG]@ss[KMG]
1729 [KNL] Force usage of a specific region of memory 1729 [KNL] Force usage of a specific region of memory.
1730 Region of memory to be used, from ss to ss+nn. 1730 Region of memory to be used is from ss to ss+nn.
1731 1731
1732 memmap=nn[KMG]#ss[KMG] 1732 memmap=nn[KMG]#ss[KMG]
1733 [KNL,ACPI] Mark specific memory as ACPI data. 1733 [KNL,ACPI] Mark specific memory as ACPI data.
1734 Region of memory to be used, from ss to ss+nn. 1734 Region of memory to be marked is from ss to ss+nn.
1735 1735
1736 memmap=nn[KMG]$ss[KMG] 1736 memmap=nn[KMG]$ss[KMG]
1737 [KNL,ACPI] Mark specific memory as reserved. 1737 [KNL,ACPI] Mark specific memory as reserved.
1738 Region of memory to be used, from ss to ss+nn. 1738 Region of memory to be reserved is from ss to ss+nn.
1739 Example: Exclude memory from 0x18690000-0x1869ffff 1739 Example: Exclude memory from 0x18690000-0x1869ffff
1740 memmap=64K$0x18690000 1740 memmap=64K$0x18690000
1741 or 1741 or
diff --git a/Documentation/laptops/00-INDEX b/Documentation/laptops/00-INDEX
index fa688538e757..d13b9a9a9e00 100644
--- a/Documentation/laptops/00-INDEX
+++ b/Documentation/laptops/00-INDEX
@@ -1,13 +1,15 @@
100-INDEX 100-INDEX
2 - This file 2 - This file
3acer-wmi.txt 3Makefile
4 - information on the Acer Laptop WMI Extras driver. 4 - Makefile for building dslm example program.
5asus-laptop.txt 5asus-laptop.txt
6 - information on the Asus Laptop Extras driver. 6 - information on the Asus Laptop Extras driver.
7disk-shock-protection.txt 7disk-shock-protection.txt
8 - information on hard disk shock protection. 8 - information on hard disk shock protection.
9dslm.c 9dslm.c
10 - Simple Disk Sleep Monitor program 10 - Simple Disk Sleep Monitor program
11hpfall.c
12 - (HP) laptop accelerometer program for disk protection.
11laptop-mode.txt 13laptop-mode.txt
12 - how to conserve battery power using laptop-mode. 14 - how to conserve battery power using laptop-mode.
13sony-laptop.txt 15sony-laptop.txt
diff --git a/Documentation/leds/00-INDEX b/Documentation/leds/00-INDEX
index 1ecd1596633e..b4ef1f34e25f 100644
--- a/Documentation/leds/00-INDEX
+++ b/Documentation/leds/00-INDEX
@@ -1,3 +1,7 @@
100-INDEX
2 - This file
3leds-blinkm.txt
4 - Driver for BlinkM LED-devices.
1leds-class.txt 5leds-class.txt
2 - documents LED handling under Linux. 6 - documents LED handling under Linux.
3leds-lp3944.txt 7leds-lp3944.txt
@@ -12,3 +16,7 @@ leds-lp55xx.txt
12 - description about lp55xx common driver. 16 - description about lp55xx common driver.
13leds-lm3556.txt 17leds-lm3556.txt
14 - notes on how to use the leds-lm3556 driver. 18 - notes on how to use the leds-lm3556 driver.
19ledtrig-oneshot.txt
20 - One-shot LED trigger for both sporadic and dense events.
21ledtrig-transient.txt
22 - LED Transient Trigger, one shot timer activation.
diff --git a/Documentation/m68k/00-INDEX b/Documentation/m68k/00-INDEX
index a014e9f00765..2be8c6b00e74 100644
--- a/Documentation/m68k/00-INDEX
+++ b/Documentation/m68k/00-INDEX
@@ -1,5 +1,7 @@
100-INDEX 100-INDEX
2 - this file 2 - this file
3README.buddha
4 - Amiga Buddha and Catweasel IDE Driver
3kernel-options.txt 5kernel-options.txt
4 - command line options for Linux/m68k 6 - command line options for Linux/m68k
5 7
diff --git a/Documentation/networking/00-INDEX b/Documentation/networking/00-INDEX
index f11580f8719a..557b6ef70c26 100644
--- a/Documentation/networking/00-INDEX
+++ b/Documentation/networking/00-INDEX
@@ -6,8 +6,14 @@
6 - information on the 3Com Etherlink III Series Ethernet cards. 6 - information on the 3Com Etherlink III Series Ethernet cards.
76pack.txt 76pack.txt
8 - info on the 6pack protocol, an alternative to KISS for AX.25 8 - info on the 6pack protocol, an alternative to KISS for AX.25
9DLINK.txt 9LICENSE.qla3xxx
10 - info on the D-Link DE-600/DE-620 parallel port pocket adapters 10 - GPLv2 for QLogic Linux Networking HBA Driver
11LICENSE.qlge
12 - GPLv2 for QLogic Linux qlge NIC Driver
13LICENSE.qlcnic
14 - GPLv2 for QLogic Linux qlcnic NIC Driver
15Makefile
16 - Makefile for docsrc.
11PLIP.txt 17PLIP.txt
12 - PLIP: The Parallel Line Internet Protocol device driver 18 - PLIP: The Parallel Line Internet Protocol device driver
13README.ipw2100 19README.ipw2100
@@ -17,7 +23,7 @@ README.ipw2200
17README.sb1000 23README.sb1000
18 - info on General Instrument/NextLevel SURFboard1000 cable modem. 24 - info on General Instrument/NextLevel SURFboard1000 cable modem.
19alias.txt 25alias.txt
20 - info on using alias network devices 26 - info on using alias network devices.
21arcnet-hardware.txt 27arcnet-hardware.txt
22 - tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc. 28 - tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc.
23arcnet.txt 29arcnet.txt
@@ -80,7 +86,7 @@ framerelay.txt
80 - info on using Frame Relay/Data Link Connection Identifier (DLCI). 86 - info on using Frame Relay/Data Link Connection Identifier (DLCI).
81gen_stats.txt 87gen_stats.txt
82 - Generic networking statistics for netlink users. 88 - Generic networking statistics for netlink users.
83generic_hdlc.txt 89generic-hdlc.txt
84 - The generic High Level Data Link Control (HDLC) layer. 90 - The generic High Level Data Link Control (HDLC) layer.
85generic_netlink.txt 91generic_netlink.txt
86 - info on Generic Netlink 92 - info on Generic Netlink
@@ -88,6 +94,8 @@ gianfar.txt
88 - Gianfar Ethernet Driver. 94 - Gianfar Ethernet Driver.
89i40e.txt 95i40e.txt
90 - README for the Intel Ethernet Controller XL710 Driver (i40e). 96 - README for the Intel Ethernet Controller XL710 Driver (i40e).
97i40evf.txt
98 - Short note on the Driver for the Intel(R) XL710 X710 Virtual Function
91ieee802154.txt 99ieee802154.txt
92 - Linux IEEE 802.15.4 implementation, API and drivers 100 - Linux IEEE 802.15.4 implementation, API and drivers
93igb.txt 101igb.txt
@@ -102,6 +110,8 @@ ipddp.txt
102 - AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation 110 - AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
103iphase.txt 111iphase.txt
104 - Interphase PCI ATM (i)Chip IA Linux driver info. 112 - Interphase PCI ATM (i)Chip IA Linux driver info.
113ipsec.txt
114 - Note on not compressing IPSec payload and resulting failed policy check.
105ipv6.txt 115ipv6.txt
106 - Options to the ipv6 kernel module. 116 - Options to the ipv6 kernel module.
107ipvs-sysctl.txt 117ipvs-sysctl.txt
@@ -120,6 +130,8 @@ lapb-module.txt
120 - programming information of the LAPB module. 130 - programming information of the LAPB module.
121ltpc.txt 131ltpc.txt
122 - the Apple or Farallon LocalTalk PC card driver 132 - the Apple or Farallon LocalTalk PC card driver
133mac80211-auth-assoc-deauth.txt
134 - authentication and association / deauth-disassoc with max80211
123mac80211-injection.txt 135mac80211-injection.txt
124 - HOWTO use packet injection with mac80211 136 - HOWTO use packet injection with mac80211
125multiqueue.txt 137multiqueue.txt
@@ -134,6 +146,10 @@ netdevices.txt
134 - info on network device driver functions exported to the kernel. 146 - info on network device driver functions exported to the kernel.
135netif-msg.txt 147netif-msg.txt
136 - Design of the network interface message level setting (NETIF_MSG_*). 148 - Design of the network interface message level setting (NETIF_MSG_*).
149netlink_mmap.txt
150 - memory mapped I/O with netlink
151nf_conntrack-sysctl.txt
152 - list of netfilter-sysctl knobs.
137nfc.txt 153nfc.txt
138 - The Linux Near Field Communication (NFS) subsystem. 154 - The Linux Near Field Communication (NFS) subsystem.
139openvswitch.txt 155openvswitch.txt
@@ -176,7 +192,7 @@ skfp.txt
176 - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info. 192 - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
177smc9.txt 193smc9.txt
178 - the driver for SMC's 9000 series of Ethernet cards 194 - the driver for SMC's 9000 series of Ethernet cards
179spider-net.txt 195spider_net.txt
180 - README for the Spidernet Driver (as found in PS3 / Cell BE). 196 - README for the Spidernet Driver (as found in PS3 / Cell BE).
181stmmac.txt 197stmmac.txt
182 - README for the STMicro Synopsys Ethernet driver. 198 - README for the STMicro Synopsys Ethernet driver.
@@ -188,6 +204,8 @@ tcp.txt
188 - short blurb on how TCP output takes place. 204 - short blurb on how TCP output takes place.
189tcp-thin.txt 205tcp-thin.txt
190 - kernel tuning options for low rate 'thin' TCP streams. 206 - kernel tuning options for low rate 'thin' TCP streams.
207team.txt
208 - pointer to information for ethernet teaming devices.
191tlan.txt 209tlan.txt
192 - ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info. 210 - ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info.
193tproxy.txt 211tproxy.txt
@@ -200,6 +218,8 @@ vortex.txt
200 - info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards. 218 - info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
201vxge.txt 219vxge.txt
202 - README for the Neterion X3100 PCIe Server Adapter. 220 - README for the Neterion X3100 PCIe Server Adapter.
221vxlan.txt
222 - Virtual extensible LAN overview
203x25.txt 223x25.txt
204 - general info on X.25 development. 224 - general info on X.25 development.
205x25-iface.txt 225x25-iface.txt
diff --git a/Documentation/phy.txt b/Documentation/phy.txt
index 0103e4b15b0e..ebff6ee52441 100644
--- a/Documentation/phy.txt
+++ b/Documentation/phy.txt
@@ -75,14 +75,26 @@ Before the controller can make use of the PHY, it has to get a reference to
75it. This framework provides the following APIs to get a reference to the PHY. 75it. This framework provides the following APIs to get a reference to the PHY.
76 76
77struct phy *phy_get(struct device *dev, const char *string); 77struct phy *phy_get(struct device *dev, const char *string);
78struct phy *phy_optional_get(struct device *dev, const char *string);
78struct phy *devm_phy_get(struct device *dev, const char *string); 79struct phy *devm_phy_get(struct device *dev, const char *string);
79 80struct phy *devm_phy_optional_get(struct device *dev, const char *string);
80phy_get and devm_phy_get can be used to get the PHY. In the case of dt boot, 81
81the string arguments should contain the phy name as given in the dt data and 82phy_get, phy_optional_get, devm_phy_get and devm_phy_optional_get can
82in the case of non-dt boot, it should contain the label of the PHY. 83be used to get the PHY. In the case of dt boot, the string arguments
83The only difference between the two APIs is that devm_phy_get associates the 84should contain the phy name as given in the dt data and in the case of
84device with the PHY using devres on successful PHY get. On driver detach, 85non-dt boot, it should contain the label of the PHY. The two
85release function is invoked on the the devres data and devres data is freed. 86devm_phy_get associates the device with the PHY using devres on
87successful PHY get. On driver detach, release function is invoked on
88the the devres data and devres data is freed. phy_optional_get and
89devm_phy_optional_get should be used when the phy is optional. These
90two functions will never return -ENODEV, but instead returns NULL when
91the phy cannot be found.
92
93It should be noted that NULL is a valid phy reference. All phy
94consumer calls on the NULL phy become NOPs. That is the release calls,
95the phy_init() and phy_exit() calls, and phy_power_on() and
96phy_power_off() calls are all NOP when applied to a NULL phy. The NULL
97phy is useful in devices for handling optional phy devices.
86 98
875. Releasing a reference to the PHY 995. Releasing a reference to the PHY
88 100
diff --git a/Documentation/power/00-INDEX b/Documentation/power/00-INDEX
index a4d682f54231..ad04cc8097ed 100644
--- a/Documentation/power/00-INDEX
+++ b/Documentation/power/00-INDEX
@@ -4,6 +4,8 @@ apm-acpi.txt
4 - basic info about the APM and ACPI support. 4 - basic info about the APM and ACPI support.
5basic-pm-debugging.txt 5basic-pm-debugging.txt
6 - Debugging suspend and resume 6 - Debugging suspend and resume
7charger-manager.txt
8 - Battery charger management.
7devices.txt 9devices.txt
8 - How drivers interact with system-wide power management 10 - How drivers interact with system-wide power management
9drivers-testing.txt 11drivers-testing.txt
@@ -22,6 +24,8 @@ pm_qos_interface.txt
22 - info on Linux PM Quality of Service interface 24 - info on Linux PM Quality of Service interface
23power_supply_class.txt 25power_supply_class.txt
24 - Tells userspace about battery, UPS, AC or DC power supply properties 26 - Tells userspace about battery, UPS, AC or DC power supply properties
27runtime_pm.txt
28 - Power management framework for I/O devices.
25s2ram.txt 29s2ram.txt
26 - How to get suspend to ram working (and debug it when it isn't) 30 - How to get suspend to ram working (and debug it when it isn't)
27states.txt 31states.txt
@@ -38,7 +42,5 @@ tricks.txt
38 - How to trick software suspend (to disk) into working when it isn't 42 - How to trick software suspend (to disk) into working when it isn't
39userland-swsusp.txt 43userland-swsusp.txt
40 - Experimental implementation of software suspend in userspace 44 - Experimental implementation of software suspend in userspace
41video_extension.txt
42 - ACPI video extensions
43video.txt 45video.txt
44 - Video issues during resume from suspend 46 - Video issues during resume from suspend
diff --git a/Documentation/ptp/testptp.c b/Documentation/ptp/testptp.c
index a74d0a84d329..4aba0436da65 100644
--- a/Documentation/ptp/testptp.c
+++ b/Documentation/ptp/testptp.c
@@ -117,6 +117,7 @@ static void usage(char *progname)
117 " -f val adjust the ptp clock frequency by 'val' ppb\n" 117 " -f val adjust the ptp clock frequency by 'val' ppb\n"
118 " -g get the ptp clock time\n" 118 " -g get the ptp clock time\n"
119 " -h prints this message\n" 119 " -h prints this message\n"
120 " -i val index for event/trigger\n"
120 " -k val measure the time offset between system and phc clock\n" 121 " -k val measure the time offset between system and phc clock\n"
121 " for 'val' times (Maximum 25)\n" 122 " for 'val' times (Maximum 25)\n"
122 " -p val enable output with a period of 'val' nanoseconds\n" 123 " -p val enable output with a period of 'val' nanoseconds\n"
@@ -154,6 +155,7 @@ int main(int argc, char *argv[])
154 int capabilities = 0; 155 int capabilities = 0;
155 int extts = 0; 156 int extts = 0;
156 int gettime = 0; 157 int gettime = 0;
158 int index = 0;
157 int oneshot = 0; 159 int oneshot = 0;
158 int pct_offset = 0; 160 int pct_offset = 0;
159 int n_samples = 0; 161 int n_samples = 0;
@@ -167,7 +169,7 @@ int main(int argc, char *argv[])
167 169
168 progname = strrchr(argv[0], '/'); 170 progname = strrchr(argv[0], '/');
169 progname = progname ? 1+progname : argv[0]; 171 progname = progname ? 1+progname : argv[0];
170 while (EOF != (c = getopt(argc, argv, "a:A:cd:e:f:ghk:p:P:sSt:v"))) { 172 while (EOF != (c = getopt(argc, argv, "a:A:cd:e:f:ghi:k:p:P:sSt:v"))) {
171 switch (c) { 173 switch (c) {
172 case 'a': 174 case 'a':
173 oneshot = atoi(optarg); 175 oneshot = atoi(optarg);
@@ -190,6 +192,9 @@ int main(int argc, char *argv[])
190 case 'g': 192 case 'g':
191 gettime = 1; 193 gettime = 1;
192 break; 194 break;
195 case 'i':
196 index = atoi(optarg);
197 break;
193 case 'k': 198 case 'k':
194 pct_offset = 1; 199 pct_offset = 1;
195 n_samples = atoi(optarg); 200 n_samples = atoi(optarg);
@@ -301,7 +306,7 @@ int main(int argc, char *argv[])
301 306
302 if (extts) { 307 if (extts) {
303 memset(&extts_request, 0, sizeof(extts_request)); 308 memset(&extts_request, 0, sizeof(extts_request));
304 extts_request.index = 0; 309 extts_request.index = index;
305 extts_request.flags = PTP_ENABLE_FEATURE; 310 extts_request.flags = PTP_ENABLE_FEATURE;
306 if (ioctl(fd, PTP_EXTTS_REQUEST, &extts_request)) { 311 if (ioctl(fd, PTP_EXTTS_REQUEST, &extts_request)) {
307 perror("PTP_EXTTS_REQUEST"); 312 perror("PTP_EXTTS_REQUEST");
@@ -375,7 +380,7 @@ int main(int argc, char *argv[])
375 return -1; 380 return -1;
376 } 381 }
377 memset(&perout_request, 0, sizeof(perout_request)); 382 memset(&perout_request, 0, sizeof(perout_request));
378 perout_request.index = 0; 383 perout_request.index = index;
379 perout_request.start.sec = ts.tv_sec + 2; 384 perout_request.start.sec = ts.tv_sec + 2;
380 perout_request.start.nsec = 0; 385 perout_request.start.nsec = 0;
381 perout_request.period.sec = 0; 386 perout_request.period.sec = 0;
diff --git a/Documentation/s390/00-INDEX b/Documentation/s390/00-INDEX
index 3a2b96302ecc..10c874ebdfe5 100644
--- a/Documentation/s390/00-INDEX
+++ b/Documentation/s390/00-INDEX
@@ -16,11 +16,13 @@ Debugging390.txt
16 - hints for debugging on s390 systems. 16 - hints for debugging on s390 systems.
17driver-model.txt 17driver-model.txt
18 - information on s390 devices and the driver model. 18 - information on s390 devices and the driver model.
19kvm.txt
20 - ioctl calls to /dev/kvm on s390.
19monreader.txt 21monreader.txt
20 - information on accessing the z/VM monitor stream from Linux. 22 - information on accessing the z/VM monitor stream from Linux.
23qeth.txt
24 - HiperSockets Bridge Port Support.
21s390dbf.txt 25s390dbf.txt
22 - information on using the s390 debug feature. 26 - information on using the s390 debug feature.
23TAPE 27zfcpdump.txt
24 - information on the driver for channel-attached tapes.
25zfcpdump
26 - information on the s390 SCSI dump tool. 28 - information on the s390 SCSI dump tool.
diff --git a/Documentation/scheduler/00-INDEX b/Documentation/scheduler/00-INDEX
index 46702e4f89c9..eccf7ad2e7f9 100644
--- a/Documentation/scheduler/00-INDEX
+++ b/Documentation/scheduler/00-INDEX
@@ -2,6 +2,8 @@
2 - this file. 2 - this file.
3sched-arch.txt 3sched-arch.txt
4 - CPU Scheduler implementation hints for architecture specific code. 4 - CPU Scheduler implementation hints for architecture specific code.
5sched-bwc.txt
6 - CFS bandwidth control overview.
5sched-design-CFS.txt 7sched-design-CFS.txt
6 - goals, design and implementation of the Completely Fair Scheduler. 8 - goals, design and implementation of the Completely Fair Scheduler.
7sched-domains.txt 9sched-domains.txt
diff --git a/Documentation/scsi/00-INDEX b/Documentation/scsi/00-INDEX
index 2044be565d93..c4b978a72f78 100644
--- a/Documentation/scsi/00-INDEX
+++ b/Documentation/scsi/00-INDEX
@@ -36,6 +36,8 @@ NinjaSCSI.txt
36 - info on WorkBiT NinjaSCSI-32/32Bi driver 36 - info on WorkBiT NinjaSCSI-32/32Bi driver
37aacraid.txt 37aacraid.txt
38 - Driver supporting Adaptec RAID controllers 38 - Driver supporting Adaptec RAID controllers
39advansys.txt
40 - List of Advansys Host Adapters
39aha152x.txt 41aha152x.txt
40 - info on driver for Adaptec AHA152x based adapters 42 - info on driver for Adaptec AHA152x based adapters
41aic79xx.txt 43aic79xx.txt
@@ -44,6 +46,12 @@ aic7xxx.txt
44 - info on driver for Adaptec controllers 46 - info on driver for Adaptec controllers
45arcmsr_spec.txt 47arcmsr_spec.txt
46 - ARECA FIRMWARE SPEC (for IOP331 adapter) 48 - ARECA FIRMWARE SPEC (for IOP331 adapter)
49bfa.txt
50 - Brocade FC/FCOE adapter driver.
51bnx2fc.txt
52 - FCoE hardware offload for Broadcom network interfaces.
53cxgb3i.txt
54 - Chelsio iSCSI Linux Driver
47dc395x.txt 55dc395x.txt
48 - README file for the dc395x SCSI driver 56 - README file for the dc395x SCSI driver
49dpti.txt 57dpti.txt
@@ -52,18 +60,24 @@ dtc3x80.txt
52 - info on driver for DTC 2x80 based adapters 60 - info on driver for DTC 2x80 based adapters
53g_NCR5380.txt 61g_NCR5380.txt
54 - info on driver for NCR5380 and NCR53c400 based adapters 62 - info on driver for NCR5380 and NCR53c400 based adapters
63hpsa.txt
64 - HP Smart Array Controller SCSI driver.
55hptiop.txt 65hptiop.txt
56 - HIGHPOINT ROCKETRAID 3xxx RAID DRIVER 66 - HIGHPOINT ROCKETRAID 3xxx RAID DRIVER
57in2000.txt 67in2000.txt
58 - info on in2000 driver 68 - info on in2000 driver
59libsas.txt 69libsas.txt
60 - Serial Attached SCSI management layer. 70 - Serial Attached SCSI management layer.
71link_power_management_policy.txt
72 - Link power management options.
61lpfc.txt 73lpfc.txt
62 - LPFC driver release notes 74 - LPFC driver release notes
63megaraid.txt 75megaraid.txt
64 - Common Management Module, shared code handling ioctls for LSI drivers 76 - Common Management Module, shared code handling ioctls for LSI drivers
65ncr53c8xx.txt 77ncr53c8xx.txt
66 - info on driver for NCR53c8xx based adapters 78 - info on driver for NCR53c8xx based adapters
79osd.txt
80 Object-Based Storage Device, command set introduction.
67osst.txt 81osst.txt
68 - info on driver for OnStream SC-x0 SCSI tape 82 - info on driver for OnStream SC-x0 SCSI tape
69ppa.txt 83ppa.txt
@@ -74,6 +88,8 @@ scsi-changer.txt
74 - README for the SCSI media changer driver 88 - README for the SCSI media changer driver
75scsi-generic.txt 89scsi-generic.txt
76 - info on the sg driver for generic (non-disk/CD/tape) SCSI devices. 90 - info on the sg driver for generic (non-disk/CD/tape) SCSI devices.
91scsi-parameters.txt
92 - List of SCSI-parameters to pass to the kernel at module load-time.
77scsi.txt 93scsi.txt
78 - short blurb on using SCSI support as a module. 94 - short blurb on using SCSI support as a module.
79scsi_mid_low_api.txt 95scsi_mid_low_api.txt
diff --git a/Documentation/serial/00-INDEX b/Documentation/serial/00-INDEX
index 1f1b22fbd739..f9c6b5ed03e7 100644
--- a/Documentation/serial/00-INDEX
+++ b/Documentation/serial/00-INDEX
@@ -4,10 +4,12 @@ README.cycladesZ
4 - info on Cyclades-Z firmware loading. 4 - info on Cyclades-Z firmware loading.
5digiepca.txt 5digiepca.txt
6 - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards. 6 - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
7hayes-esp.txt 7driver
8 - info on using the Hayes ESP serial driver. 8 - intro to the low level serial driver.
9moxa-smartio 9moxa-smartio
10 - file with info on installing/using Moxa multiport serial driver. 10 - file with info on installing/using Moxa multiport serial driver.
11n_gsm.txt
12 - GSM 0710 tty multiplexer howto.
11riscom8.txt 13riscom8.txt
12 - notes on using the RISCom/8 multi-port serial driver. 14 - notes on using the RISCom/8 multi-port serial driver.
13rocket.txt 15rocket.txt
diff --git a/Documentation/spi/00-INDEX b/Documentation/spi/00-INDEX
new file mode 100644
index 000000000000..a128fa835512
--- /dev/null
+++ b/Documentation/spi/00-INDEX
@@ -0,0 +1,22 @@
100-INDEX
2 - this file.
3Makefile
4 - Makefile for the example sourcefiles.
5butterfly
6 - AVR Butterfly SPI driver overview and pin configuration.
7ep93xx_spi
8 - Basic EP93xx SPI driver configuration.
9pxa2xx
10 - PXA2xx SPI master controller build by spi_message fifo wq
11spidev
12 - Intro to the userspace API for spi devices
13spidev_fdx.c
14 - spidev example file
15spi-lm70llp
16 - Connecting an LM70-LLP sensor to the kernel via the SPI subsys.
17spi-sc18is602
18 - NXP SC18IS602/603 I2C-bus to SPI bridge
19spi-summary
20 - (Linux) SPI overview. If unsure about SPI or SPI in Linux, start here.
21spidev_test.c
22 - SPI testing utility.
diff --git a/Documentation/spi/spi-summary b/Documentation/spi/spi-summary
index f72e0d1e0da8..7982bcc4d151 100644
--- a/Documentation/spi/spi-summary
+++ b/Documentation/spi/spi-summary
@@ -543,7 +543,22 @@ SPI MASTER METHODS
543 queuing transfers that arrive in the meantime. When the driver is 543 queuing transfers that arrive in the meantime. When the driver is
544 finished with this message, it must call 544 finished with this message, it must call
545 spi_finalize_current_message() so the subsystem can issue the next 545 spi_finalize_current_message() so the subsystem can issue the next
546 transfer. This may sleep. 546 message. This may sleep.
547
548 master->transfer_one(struct spi_master *master, struct spi_device *spi,
549 struct spi_transfer *transfer)
550 The subsystem calls the driver to transfer a single transfer while
551 queuing transfers that arrive in the meantime. When the driver is
552 finished with this transfer, it must call
553 spi_finalize_current_transfer() so the subsystem can issue the next
554 transfer. This may sleep. Note: transfer_one and transfer_one_message
555 are mutually exclusive; when both are set, the generic subsystem does
556 not call your transfer_one callback.
557
558 Return values:
559 negative errno: error
560 0: transfer is finished
561 1: transfer is still in progress
547 562
548 DEPRECATED METHODS 563 DEPRECATED METHODS
549 564
diff --git a/Documentation/timers/00-INDEX b/Documentation/timers/00-INDEX
index ef2ccbf77fa2..6d042dc1cce0 100644
--- a/Documentation/timers/00-INDEX
+++ b/Documentation/timers/00-INDEX
@@ -8,6 +8,8 @@ hpet_example.c
8 - sample hpet timer test program 8 - sample hpet timer test program
9hrtimers.txt 9hrtimers.txt
10 - subsystem for high-resolution kernel timers 10 - subsystem for high-resolution kernel timers
11Makefile
12 - Build and link hpet_example
11NO_HZ.txt 13NO_HZ.txt
12 - Summary of the different methods for the scheduler clock-interrupts management. 14 - Summary of the different methods for the scheduler clock-interrupts management.
13timers-howto.txt 15timers-howto.txt
diff --git a/Documentation/virtual/kvm/00-INDEX b/Documentation/virtual/kvm/00-INDEX
index 641ec9220179..fee9f2bf9c64 100644
--- a/Documentation/virtual/kvm/00-INDEX
+++ b/Documentation/virtual/kvm/00-INDEX
@@ -20,5 +20,7 @@ ppc-pv.txt
20 - the paravirtualization interface on PowerPC. 20 - the paravirtualization interface on PowerPC.
21review-checklist.txt 21review-checklist.txt
22 - review checklist for KVM patches. 22 - review checklist for KVM patches.
23s390-diag.txt
24 - Diagnose hypercall description (for IBM S/390)
23timekeeping.txt 25timekeeping.txt
24 - timekeeping virtualization for x86-based architectures. 26 - timekeeping virtualization for x86-based architectures.
diff --git a/Documentation/vm/00-INDEX b/Documentation/vm/00-INDEX
index a39d06680e1c..081c49777abb 100644
--- a/Documentation/vm/00-INDEX
+++ b/Documentation/vm/00-INDEX
@@ -16,8 +16,6 @@ hwpoison.txt
16 - explains what hwpoison is 16 - explains what hwpoison is
17ksm.txt 17ksm.txt
18 - how to use the Kernel Samepage Merging feature. 18 - how to use the Kernel Samepage Merging feature.
19locking
20 - info on how locking and synchronization is done in the Linux vm code.
21numa 19numa
22 - information about NUMA specific code in the Linux vm. 20 - information about NUMA specific code in the Linux vm.
23numa_memory_policy.txt 21numa_memory_policy.txt
@@ -32,6 +30,8 @@ slub.txt
32 - a short users guide for SLUB. 30 - a short users guide for SLUB.
33soft-dirty.txt 31soft-dirty.txt
34 - short explanation for soft-dirty PTEs 32 - short explanation for soft-dirty PTEs
33split_page_table_lock
34 - Separate per-table lock to improve scalability of the old page_table_lock.
35transhuge.txt 35transhuge.txt
36 - Transparent Hugepage Support, alternative way of using hugepages. 36 - Transparent Hugepage Support, alternative way of using hugepages.
37unevictable-lru.txt 37unevictable-lru.txt
diff --git a/Documentation/w1/masters/00-INDEX b/Documentation/w1/masters/00-INDEX
index d63fa024ac05..8330cf9325f0 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,7 +4,9 @@ ds2482
4 - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses. 4 - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
5ds2490 5ds2490
6 - The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges. 6 - The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges.
7mxc_w1 7mxc-w1
8 - W1 master controller driver found on Freescale MX2/MX3 SoCs 8 - W1 master controller driver found on Freescale MX2/MX3 SoCs
9omap-hdq
10 - HDQ/1-wire module of TI OMAP 2430/3430.
9w1-gpio 11w1-gpio
10 - GPIO 1-wire bus master driver. 12 - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/slaves/00-INDEX b/Documentation/w1/slaves/00-INDEX
index 75613c9ac4db..6e18c70c3474 100644
--- a/Documentation/w1/slaves/00-INDEX
+++ b/Documentation/w1/slaves/00-INDEX
@@ -4,3 +4,5 @@ w1_therm
4 - The Maxim/Dallas Semiconductor ds18*20 temperature sensor. 4 - The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
5w1_ds2423 5w1_ds2423
6 - The Maxim/Dallas Semiconductor ds2423 counter device. 6 - The Maxim/Dallas Semiconductor ds2423 counter device.
7w1_ds28e04
8 - The Maxim/Dallas Semiconductor ds28e04 eeprom.
diff --git a/Documentation/x86/00-INDEX b/Documentation/x86/00-INDEX
index f37b46d34861..692264456f0f 100644
--- a/Documentation/x86/00-INDEX
+++ b/Documentation/x86/00-INDEX
@@ -1,6 +1,20 @@
100-INDEX 100-INDEX
2 - this file 2 - this file
3mtrr.txt 3boot.txt
4 - how to use x86 Memory Type Range Registers to increase performance 4 - List of boot protocol versions
5early-microcode.txt
6 - How to load microcode from an initrd-CPIO archive early to fix CPU issues.
7earlyprintk.txt
8 - Using earlyprintk with a USB2 debug port key.
9entry_64.txt
10 - Describe (some of the) kernel entry points for x86.
5exception-tables.txt 11exception-tables.txt
6 - why and how Linux kernel uses exception tables on x86 12 - why and how Linux kernel uses exception tables on x86
13mtrr.txt
14 - how to use x86 Memory Type Range Registers to increase performance
15pat.txt
16 - Page Attribute Table intro and API
17usb-legacy-support.txt
18 - how to fix/avoid quirks when using emulated PS/2 mouse/keyboard.
19zero-page.txt
20 - layout of the first page of memory.
diff --git a/Documentation/zh_CN/arm64/booting.txt b/Documentation/zh_CN/arm64/booting.txt
index 28fa325b7461..6f6d956ac1c9 100644
--- a/Documentation/zh_CN/arm64/booting.txt
+++ b/Documentation/zh_CN/arm64/booting.txt
@@ -7,7 +7,7 @@ help. Contact the Chinese maintainer if this translation is outdated
7or if there is a problem with the translation. 7or if there is a problem with the translation.
8 8
9Maintainer: Will Deacon <will.deacon@arm.com> 9Maintainer: Will Deacon <will.deacon@arm.com>
10Chinese maintainer: Fu Wei <tekkamanninja@gmail.com> 10Chinese maintainer: Fu Wei <wefu@redhat.com>
11--------------------------------------------------------------------- 11---------------------------------------------------------------------
12Documentation/arm64/booting.txt 的中文翻译 12Documentation/arm64/booting.txt 的中文翻译
13 13
@@ -16,9 +16,9 @@ Documentation/arm64/booting.txt 的中文翻译
16译存在问题,请è”系中文版维护者。 16译存在问题,请è”系中文版维护者。
17 17
18英文版维护者: Will Deacon <will.deacon@arm.com> 18英文版维护者: Will Deacon <will.deacon@arm.com>
19中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 19中文版维护者: 傅炜 Fu Wei <wefu@redhat.com>
20中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 20中文版翻译者: 傅炜 Fu Wei <wefu@redhat.com>
21中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 21中文版校译者: 傅炜 Fu Wei <wefu@redhat.com>
22 22
23以下为正文 23以下为正文
24--------------------------------------------------------------------- 24---------------------------------------------------------------------
@@ -64,8 +64,8 @@ RAM,或å¯èƒ½ä½¿ç”¨å¯¹è¿™ä¸ªè®¾å¤‡å·²çŸ¥çš„ RAM ä¿¡æ¯ï¼Œè¿˜å¯èƒ½ä½¿ç”¨ä»»ä½•
64 64
65å¿…è¦æ€§: 强制 65å¿…è¦æ€§: 强制
66 66
67设备树数æ®å—(dtb)大å°å¿…é¡»ä¸å¤§äºŽ 2 MB,且ä½äºŽä»Žå†…核映åƒèµ·å§‹ç®—起第一个 67设备树数æ®å—(dtb)必须 8 字节对é½ï¼Œå¹¶ä½äºŽä»Žå†…核映åƒèµ·å§‹ç®—起第一个 512MB
68512MB 内的 2MB 边界上。这使得内核å¯ä»¥é€šè¿‡åˆå§‹é¡µè¡¨ä¸­çš„å•个节æè¿°ç¬¦æ¥ 68内,且ä¸å¾—跨越 2MB 对é½è¾¹ç•Œã€‚这使得内核å¯ä»¥é€šè¿‡åˆå§‹é¡µè¡¨ä¸­çš„å•个节æè¿°ç¬¦æ¥
69映射此数æ®å—。 69映射此数æ®å—。
70 70
71 71
@@ -84,13 +84,23 @@ AArch64 å†…æ ¸å½“å‰æ²¡æœ‰æä¾›è‡ªè§£åދ代ç ï¼Œå› æ­¤å¦‚果使用了压缩内
84 84
85å¿…è¦æ€§: 强制 85å¿…è¦æ€§: 强制
86 86
87已解压的内核映åƒåŒ…å«ä¸€ä¸ª 32 字节的头,内容如下: 87已解压的内核映åƒåŒ…å«ä¸€ä¸ª 64 字节的头,内容如下:
88 88
89 u32 magic = 0x14000008; /* 跳转到 stext, å°ç«¯ */ 89 u32 code0; /* 坿‰§è¡Œä»£ç  */
90 u32 res0 = 0; /* ä¿ç•™ */ 90 u32 code1; /* 坿‰§è¡Œä»£ç  */
91 u64 text_offset; /* 映åƒè£…è½½åç§» */ 91 u64 text_offset; /* 映åƒè£…è½½åç§» */
92 u64 res0 = 0; /* ä¿ç•™ */
92 u64 res1 = 0; /* ä¿ç•™ */ 93 u64 res1 = 0; /* ä¿ç•™ */
93 u64 res2 = 0; /* ä¿ç•™ */ 94 u64 res2 = 0; /* ä¿ç•™ */
95 u64 res3 = 0; /* ä¿ç•™ */
96 u64 res4 = 0; /* ä¿ç•™ */
97 u32 magic = 0x644d5241; /* 魔数, å°ç«¯, "ARM\x64" */
98 u32 res5 = 0; /* ä¿ç•™ */
99
100
101映åƒå¤´æ³¨é‡Šï¼š
102
103- code0/code1 负责跳转到 stext.
94 104
95映åƒå¿…é¡»ä½äºŽç³»ç»Ÿ RAM 起始处的特定åç§»ï¼ˆå½“å‰æ˜¯ 0x80000)。系统 RAM 105映åƒå¿…é¡»ä½äºŽç³»ç»Ÿ RAM 起始处的特定åç§»ï¼ˆå½“å‰æ˜¯ 0x80000)。系统 RAM
96的起始地å€å¿…须是以 2MB 对é½çš„。 106的起始地å€å¿…须是以 2MB 对é½çš„。
@@ -118,9 +128,9 @@ AArch64 å†…æ ¸å½“å‰æ²¡æœ‰æä¾›è‡ªè§£åދ代ç ï¼Œå› æ­¤å¦‚果使用了压缩内
118 外部高速缓存(如果存在)必须é…置并ç¦ç”¨ã€‚ 128 外部高速缓存(如果存在)必须é…置并ç¦ç”¨ã€‚
119 129
120- 架构计时器 130- 架构计时器
121 CNTFRQ 必须设定为计时器的频率ã 131 CNTFRQ 必须设定为计时器的频率,且 CNTVOFF å¿…é¡»è®¾å®šä¸ºå¯¹æ‰æœ‰ CPU
122 如果在 EL1 模å¼ä¸‹è¿›å…¥å†…核,则 CNTHCTL_EL2 中的 EL1PCTEN (bit 0) 132 都一致的值。如果在 EL1 模å¼ä¸‹è¿›å…¥å†…核,则 CNTHCTL_EL2 中的
123 必须置ä½ã€‚ 133 EL1PCTEN (bit 0) 必须置ä½ã€‚
124 134
125- 一致性 135- 一致性
126 通过内核å¯åŠ¨çš„æ‰€æœ‰ CPU 在内核入å£åœ°å€ä¸Šå¿…须处于相åŒçš„一致性域中。 136 通过内核å¯åŠ¨çš„æ‰€æœ‰ CPU 在内核入å£åœ°å€ä¸Šå¿…须处于相åŒçš„一致性域中。
@@ -131,23 +141,40 @@ AArch64 å†…æ ¸å½“å‰æ²¡æœ‰æä¾›è‡ªè§£åދ代ç ï¼Œå› æ­¤å¦‚果使用了压缩内
131 在进入内核映åƒçš„异常级中,所有构架中å¯å†™çš„系统寄存器必须通过软件 141 在进入内核映åƒçš„异常级中,所有构架中å¯å†™çš„系统寄存器必须通过软件
132 在一个更高的异常级别下åˆå§‹åŒ–,以防止在 未知 状æ€ä¸‹è¿è¡Œã€‚ 142 在一个更高的异常级别下åˆå§‹åŒ–,以防止在 未知 状æ€ä¸‹è¿è¡Œã€‚
133 143
144以上对于 CPU 模å¼ã€é«˜é€Ÿç¼“å­˜ã€MMUã€æž¶æž„计时器ã€ä¸€è‡´æ€§ã€ç³»ç»Ÿå¯„存器的
145å¿…è¦æ¡ä»¶æè¿°é€‚用于所有 CPU。所有 CPU 必须在åŒä¸€å¼‚常级别跳入内核。
146
134引导装载程åºå¿…须在æ¯ä¸ª CPU å¤„äºŽä»¥ä¸‹çŠ¶æ€æ—¶è·³å…¥å†…核入å£ï¼š 147引导装载程åºå¿…须在æ¯ä¸ª CPU å¤„äºŽä»¥ä¸‹çŠ¶æ€æ—¶è·³å…¥å†…核入å£ï¼š
135 148
136- 主 CPU 必须直接跳入内核映åƒçš„ç¬¬ä¸€æ¡æŒ‡ä»¤ã€‚通过此 CPU 传递的设备树 149- 主 CPU 必须直接跳入内核映åƒçš„ç¬¬ä¸€æ¡æŒ‡ä»¤ã€‚通过此 CPU 传递的设备树
137 æ•°æ®å—必须在æ¯ä¸ª CPU 节点中包å«ä»¥ä¸‹å†…容: 150 æ•°æ®å—必须在æ¯ä¸ª CPU 节点中包å«ä¸€ä¸ª ‘enable-method’ 属性,所
138 151 支æŒçš„ enable-method 请è§ä¸‹æ–‡ã€‚
139 1ã€â€˜enable-method’属性。目å‰ï¼Œæ­¤å­—段支æŒçš„值仅为字符串“spin-tableâ€ã€‚
140
141 2ã€â€˜cpu-release-addr’标识一个 64-bitã€åˆå§‹åŒ–为零的内存ä½ç½®ã€‚
142 152
143 引导装载程åºå¿…须生æˆè¿™äº›è®¾å¤‡æ ‘属性,并在跳入内核入å£ä¹‹å‰å°†å…¶æ’å…¥ 153 引导装载程åºå¿…须生æˆè¿™äº›è®¾å¤‡æ ‘属性,并在跳入内核入å£ä¹‹å‰å°†å…¶æ’å…¥
144 æ•°æ®å—。 154 æ•°æ®å—。
145 155
146- 任何辅助 CPU 必须在内存ä¿ç•™åŒºï¼ˆé€šè¿‡è®¾å¤‡æ ‘中的 /memreserve/ 域传递 156- enable-method 为 “spin-table†的 CPU 必须在它们的 CPU
157 节点中包å«ä¸€ä¸ª ‘cpu-release-addr’ 属性。这个属性标识了一个
158 64 ä½è‡ªç„¶å¯¹é½ä¸”åˆå§‹åŒ–为零的内存ä½ç½®ã€‚
159
160 这些 CPU 必须在内存ä¿ç•™åŒºï¼ˆé€šè¿‡è®¾å¤‡æ ‘中的 /memreserve/ 域传递
147 给内核)中自旋于内核之外,轮询它们的 cpu-release-addr ä½ç½®ï¼ˆå¿…é¡» 161 给内核)中自旋于内核之外,轮询它们的 cpu-release-addr ä½ç½®ï¼ˆå¿…é¡»
148 包å«åœ¨ä¿ç•™åŒºä¸­ï¼‰ã€‚å¯é€šè¿‡æ’å…¥ wfe 指令æ¥é™ä½Žå¿™å¾ªçŽ¯å¼€é”€ï¼Œè€Œä¸» CPU å°† 162 包å«åœ¨ä¿ç•™åŒºä¸­ï¼‰ã€‚å¯é€šè¿‡æ’å…¥ wfe 指令æ¥é™ä½Žå¿™å¾ªçŽ¯å¼€é”€ï¼Œè€Œä¸» CPU å°†
149 å‘出 sev 指令。当对 cpu-release-addr 所指ä½ç½®çš„è¯»å–æ“作返回éžé›¶å€¼ 163 å‘出 sev 指令。当对 cpu-release-addr 所指ä½ç½®çš„è¯»å–æ“作返回éžé›¶å€¼
150 时,CPU 必须直接跳入此值所指å‘的地å€ã€‚ 164 时,CPU 必须跳入此值所指å‘的地å€ã€‚此值为一个å•独的 64 ä½å°ç«¯å€¼ï¼Œ
165 å› æ­¤ CPU 须在跳转å‰å°†æ‰€è¯»å–的值转æ¢ä¸ºå…¶æœ¬èº«çš„端模å¼ã€‚
166
167- enable-method 为 “psci†的 CPU ä¿æŒåœ¨å†…核外(比如,在
168 memory 节点中æè¿°ä¸ºå†…核空间的内存区外,或在通过设备树 /memreserve/
169 域中æè¿°ä¸ºå†…æ ¸ä¿ç•™åŒºçš„空间中)。内核将会å‘起在 ARM 文档(编å·
170 ARM DEN 0022A:用于 ARM 上的电æºçжæ€å调接å£ç³»ç»Ÿè½¯ä»¶ï¼‰ä¸­æè¿°çš„
171 CPU_ON 调用æ¥å°† CPU 带入内核。
172
173 *译者注:到文档翻译时,此文档已更新为 ARM DEN 0022B。
174
175 设备树必须包å«ä¸€ä¸ª ‘psci’ 节点,请å‚考以下文档:
176 Documentation/devicetree/bindings/arm/psci.txt
177
151 178
152- 辅助 CPU 通用寄存器设置 179- 辅助 CPU 通用寄存器设置
153 x0 = 0 (ä¿ç•™ï¼Œå°†æ¥å¯èƒ½ä½¿ç”¨) 180 x0 = 0 (ä¿ç•™ï¼Œå°†æ¥å¯èƒ½ä½¿ç”¨)
diff --git a/Documentation/zh_CN/arm64/memory.txt b/Documentation/zh_CN/arm64/memory.txt
index a5f6283829f9..a782704c1cb5 100644
--- a/Documentation/zh_CN/arm64/memory.txt
+++ b/Documentation/zh_CN/arm64/memory.txt
@@ -7,7 +7,7 @@ help. Contact the Chinese maintainer if this translation is outdated
7or if there is a problem with the translation. 7or if there is a problem with the translation.
8 8
9Maintainer: Catalin Marinas <catalin.marinas@arm.com> 9Maintainer: Catalin Marinas <catalin.marinas@arm.com>
10Chinese maintainer: Fu Wei <tekkamanninja@gmail.com> 10Chinese maintainer: Fu Wei <wefu@redhat.com>
11--------------------------------------------------------------------- 11---------------------------------------------------------------------
12Documentation/arm64/memory.txt 的中文翻译 12Documentation/arm64/memory.txt 的中文翻译
13 13
@@ -16,9 +16,9 @@ Documentation/arm64/memory.txt 的中文翻译
16译存在问题,请è”系中文版维护者。 16译存在问题,请è”系中文版维护者。
17 17
18英文版维护者: Catalin Marinas <catalin.marinas@arm.com> 18英文版维护者: Catalin Marinas <catalin.marinas@arm.com>
19中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 19中文版维护者: 傅炜 Fu Wei <wefu@redhat.com>
20中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 20中文版翻译者: 傅炜 Fu Wei <wefu@redhat.com>
21中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 21中文版校译者: 傅炜 Fu Wei <wefu@redhat.com>
22 22
23以下为正文 23以下为正文
24--------------------------------------------------------------------- 24---------------------------------------------------------------------
@@ -41,7 +41,7 @@ AArch64 Linux 使用页大å°ä¸º 4KB çš„ 3 级转æ¢è¡¨é…置,对于用户和å
41TTBR1 中,且从ä¸å†™å…¥ TTBR0。 41TTBR1 中,且从ä¸å†™å…¥ TTBR0。
42 42
43 43
44AArch64 Linux 内存布局: 44AArch64 Linux 在页大å°ä¸º 4KB 时的内存布局:
45 45
46èµ·å§‹åœ°å€ ç»“æŸåœ°å€ å¤§å° ç”¨é€” 46èµ·å§‹åœ°å€ ç»“æŸåœ°å€ å¤§å° ç”¨é€”
47----------------------------------------------------------------------- 47-----------------------------------------------------------------------
@@ -55,15 +55,42 @@ ffffffbc00000000 ffffffbdffffffff 8GB vmemmap
55 55
56ffffffbe00000000 ffffffbffbbfffff ~8GB [防护页,未æ¥ç”¨äºŽ vmmemap] 56ffffffbe00000000 ffffffbffbbfffff ~8GB [防护页,未æ¥ç”¨äºŽ vmmemap]
57 57
58ffffffbffbc00000 ffffffbffbdfffff 2MB earlyprintk 设备
59
58ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O 空间 60ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O 空间
59 61
60ffffffbbffff0000 ffffffbcffffffff ~2MB [防护页] 62ffffffbffbe10000 ffffffbcffffffff ~2MB [防护页]
61 63
62ffffffbffc000000 ffffffbfffffffff 64MB æ¨¡å— 64ffffffbffc000000 ffffffbfffffffff 64MB 模å—
63 65
64ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射 66ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射
65 67
66 68
69AArch64 Linux 在页大å°ä¸º 64KB 时的内存布局:
70
71èµ·å§‹åœ°å€ ç»“æŸåœ°å€ å¤§å° ç”¨é€”
72-----------------------------------------------------------------------
730000000000000000 000003ffffffffff 4TB 用户空间
74
75fffffc0000000000 fffffdfbfffeffff ~2TB vmalloc
76
77fffffdfbffff0000 fffffdfbffffffff 64KB [防护页]
78
79fffffdfc00000000 fffffdfdffffffff 8GB vmemmap
80
81fffffdfe00000000 fffffdfffbbfffff ~8GB [防护页,未æ¥ç”¨äºŽ vmmemap]
82
83fffffdfffbc00000 fffffdfffbdfffff 2MB earlyprintk 设备
84
85fffffdfffbe00000 fffffdfffbe0ffff 64KB PCI I/O 空间
86
87fffffdfffbe10000 fffffdfffbffffff ~2MB [防护页]
88
89fffffdfffc000000 fffffdffffffffff 64MB 模å—
90
91fffffe0000000000 ffffffffffffffff 2TB 内核逻辑内存映射
92
93
674KB 页大å°çš„转æ¢è¡¨æŸ¥æ‰¾ï¼š 944KB 页大å°çš„转æ¢è¡¨æŸ¥æ‰¾ï¼š
68 95
69+--------+--------+--------+--------+--------+--------+--------+--------+ 96+--------+--------+--------+--------+--------+--------+--------+--------+
@@ -91,3 +118,10 @@ ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射
91 | | +--------------------------> [41:29] L2 索引 (仅使用 38:29 ) 118 | | +--------------------------> [41:29] L2 索引 (仅使用 38:29 )
92 | +-------------------------------> [47:42] L1 索引 (未使用) 119 | +-------------------------------> [47:42] L1 索引 (未使用)
93 +-------------------------------------------------> [63] TTBR0/1 120 +-------------------------------------------------> [63] TTBR0/1
121
122当使用 KVM æ—¶, 管ç†ç¨‹åºï¼ˆhypervisor)在 EL2 中通过相对内核虚拟地å€çš„
123一个固定åç§»æ¥æ˜ å°„内核页(内核虚拟地å€çš„高 24 ä½è®¾ä¸ºé›¶ï¼‰:
124
125èµ·å§‹åœ°å€ ç»“æŸåœ°å€ å¤§å° ç”¨é€”
126-----------------------------------------------------------------------
1270000004000000000 0000007fffffffff 256GB 在 HYP 中映射的内核对象
diff --git a/Documentation/zh_CN/arm64/tagged-pointers.txt b/Documentation/zh_CN/arm64/tagged-pointers.txt
new file mode 100644
index 000000000000..2664d1bd5a1c
--- /dev/null
+++ b/Documentation/zh_CN/arm64/tagged-pointers.txt
@@ -0,0 +1,52 @@
1Chinese translated version of Documentation/arm64/tagged-pointers.txt
2
3If you have any comment or update to the content, please contact the
4original document maintainer directly. However, if you have a problem
5communicating in English you can also ask the Chinese maintainer for
6help. Contact the Chinese maintainer if this translation is outdated
7or if there is a problem with the translation.
8
9Maintainer: Will Deacon <will.deacon@arm.com>
10Chinese maintainer: Fu Wei <wefu@redhat.com>
11---------------------------------------------------------------------
12Documentation/arm64/tagged-pointers.txt 的中文翻译
13
14如果想评论或更新本文的内容,请直接è”系原文档的维护者。如果你使用英文
15äº¤æµæœ‰å›°éš¾çš„è¯ï¼Œä¹Ÿå¯ä»¥å‘中文版维护者求助。如果本翻译更新ä¸åŠæ—¶æˆ–者翻
16译存在问题,请è”系中文版维护者。
17
18英文版维护者: Will Deacon <will.deacon@arm.com>
19中文版维护者: 傅炜 Fu Wei <wefu@redhat.com>
20中文版翻译者: 傅炜 Fu Wei <wefu@redhat.com>
21中文版校译者: 傅炜 Fu Wei <wefu@redhat.com>
22
23以下为正文
24---------------------------------------------------------------------
25 Linux 在 AArch64 中带标记的虚拟地å€
26 =================================
27
28作者: Will Deacon <will.deacon@arm.com>
29日期: 2013 年 06 月 12 日
30
31本文档简述了在 AArch64 地å€è½¬æ¢ç³»ç»Ÿä¸­æä¾›çš„带标记的虚拟地å€åŠå…¶åœ¨
32AArch64 Linux 中的潜在用途。
33
34内核æä¾›çš„地å€è½¬æ¢è¡¨é…置使通过 TTBR0 完æˆçš„虚拟地å€è½¬æ¢ï¼ˆå³ç”¨æˆ·ç©ºé—´
35映射),其虚拟地å€çš„æœ€é«˜ 8 ä½ï¼ˆ63:56)会被转æ¢ç¡¬ä»¶æ‰€å¿½ç•¥ã€‚è¿™ç§æœºåˆ¶
36让这些ä½å¯ä¾›åº”用程åºè‡ªç”±ä½¿ç”¨ï¼Œå…¶æ³¨æ„事项如下:
37
38 (1) å†…æ ¸è¦æ±‚所有传递到 EL1 的用户空间地å€å¸¦æœ‰ 0x00 标记。
39 è¿™æ„味ç€ä»»ä½•æºå¸¦ç”¨æˆ·ç©ºé—´è™šæ‹Ÿåœ°å€çš„系统调用(syscall)
40 傿•° *å¿…é¡»* 在陷入内核å‰ä½¿å®ƒä»¬çš„æœ€é«˜å­—节被清零。
41
42 (2) éžé›¶æ ‡è®°åœ¨ä¼ é€’ä¿¡å·æ—¶ä¸è¢«ä¿å­˜ã€‚è¿™æ„味ç€åœ¨åº”用程åºä¸­åˆ©ç”¨äº†
43 标记的信å·å¤„ç†å‡½æ•°æ— æ³•ä¾èµ– siginfo_t 的用户空间虚拟
44 åœ°å€æ‰€æºå¸¦çš„包å«å…¶å†…部域信æ¯çš„æ ‡è®°ã€‚此规则的一个例外是
45 å½“ä¿¡å·æ˜¯åœ¨è°ƒè¯•观察点的异常处ç†ç¨‹åºä¸­äº§ç”Ÿçš„,此时标记的
46 ä¿¡æ¯å°†è¢«ä¿å­˜ã€‚
47
48 (3) 当使用带标记的指针时需特别留心,因为仅对两个虚拟地å€
49 的高字节,C 编译器很å¯èƒ½æ— æ³•判断它们是ä¸åŒçš„。
50
51此构架会阻止对带标记的 PC 指针的利用,因此在异常返回时,其高字节
52将被设置æˆä¸€ä¸ªä¸º “55†的扩展符。
diff --git a/MAINTAINERS b/MAINTAINERS
index b2cf5cfb4d29..9dbf7f1898c5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1167,6 +1167,14 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1167W: http://www.arm.linux.org.uk/ 1167W: http://www.arm.linux.org.uk/
1168S: Maintained 1168S: Maintained
1169 1169
1170ARM/QUALCOMM SUPPORT
1171M: Kumar Gala <galak@codeaurora.org>
1172M: David Brown <davidb@codeaurora.org>
1173L: linux-arm-msm@vger.kernel.org
1174S: Maintained
1175F: arch/arm/mach-qcom/
1176T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom.git
1177
1170ARM/RADISYS ENP2611 MACHINE SUPPORT 1178ARM/RADISYS ENP2611 MACHINE SUPPORT
1171M: Lennert Buytenhek <kernel@wantstofly.org> 1179M: Lennert Buytenhek <kernel@wantstofly.org>
1172L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1180L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@ -2367,7 +2375,7 @@ F: include/linux/cpufreq.h
2367 2375
2368CPU FREQUENCY DRIVERS - ARM BIG LITTLE 2376CPU FREQUENCY DRIVERS - ARM BIG LITTLE
2369M: Viresh Kumar <viresh.kumar@linaro.org> 2377M: Viresh Kumar <viresh.kumar@linaro.org>
2370M: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> 2378M: Sudeep Holla <sudeep.holla@arm.com>
2371L: cpufreq@vger.kernel.org 2379L: cpufreq@vger.kernel.org
2372L: linux-pm@vger.kernel.org 2380L: linux-pm@vger.kernel.org
2373W: http://www.arm.com/products/processors/technologies/biglittleprocessing.php 2381W: http://www.arm.com/products/processors/technologies/biglittleprocessing.php
@@ -2857,7 +2865,7 @@ M: Jani Nikula <jani.nikula@linux.intel.com>
2857L: intel-gfx@lists.freedesktop.org 2865L: intel-gfx@lists.freedesktop.org
2858L: dri-devel@lists.freedesktop.org 2866L: dri-devel@lists.freedesktop.org
2859Q: http://patchwork.freedesktop.org/project/intel-gfx/ 2867Q: http://patchwork.freedesktop.org/project/intel-gfx/
2860T: git git://people.freedesktop.org/~danvet/drm-intel 2868T: git git://anongit.freedesktop.org/drm-intel
2861S: Supported 2869S: Supported
2862F: drivers/gpu/drm/i915/ 2870F: drivers/gpu/drm/i915/
2863F: include/drm/i915* 2871F: include/drm/i915*
@@ -7196,7 +7204,7 @@ S: Maintained
7196F: drivers/net/ethernet/rdc/r6040.c 7204F: drivers/net/ethernet/rdc/r6040.c
7197 7205
7198RDS - RELIABLE DATAGRAM SOCKETS 7206RDS - RELIABLE DATAGRAM SOCKETS
7199M: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com> 7207M: Chien Yen <chien.yen@oracle.com>
7200L: rds-devel@oss.oracle.com (moderated for non-subscribers) 7208L: rds-devel@oss.oracle.com (moderated for non-subscribers)
7201S: Supported 7209S: Supported
7202F: net/rds/ 7210F: net/rds/
diff --git a/Makefile b/Makefile
index 606ef7c4a544..893d6f0e875b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
1VERSION = 3 1VERSION = 3
2PATCHLEVEL = 14 2PATCHLEVEL = 14
3SUBLEVEL = 0 3SUBLEVEL = 0
4EXTRAVERSION = -rc1 4EXTRAVERSION = -rc3
5NAME = Shuffling Zombie Juror 5NAME = Shuffling Zombie Juror
6 6
7# *DOCUMENTATION* 7# *DOCUMENTATION*
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index e25419817791..224793cefa31 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -421,9 +421,6 @@ config ARCH_EFM32
421 depends on !MMU 421 depends on !MMU
422 select ARCH_REQUIRE_GPIOLIB 422 select ARCH_REQUIRE_GPIOLIB
423 select ARM_NVIC 423 select ARM_NVIC
424 # CLKSRC_MMIO is wrong here, but needed until a proper fix is merged,
425 # i.e. CLKSRC_EFM32 selecting CLKSRC_MMIO
426 select CLKSRC_MMIO
427 select CLKSRC_OF 424 select CLKSRC_OF
428 select COMMON_CLK 425 select COMMON_CLK
429 select CPU_V7M 426 select CPU_V7M
@@ -657,9 +654,8 @@ config ARCH_PXA
657 help 654 help
658 Support for Intel/Marvell's PXA2xx/PXA3xx processor line. 655 Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
659 656
660config ARCH_MSM_NODT 657config ARCH_MSM
661 bool "Qualcomm MSM" 658 bool "Qualcomm MSM (non-multiplatform)"
662 select ARCH_MSM
663 select ARCH_REQUIRE_GPIOLIB 659 select ARCH_REQUIRE_GPIOLIB
664 select COMMON_CLK 660 select COMMON_CLK
665 select GENERIC_CLOCKEVENTS 661 select GENERIC_CLOCKEVENTS
@@ -1005,6 +1001,8 @@ source "arch/arm/plat-pxa/Kconfig"
1005 1001
1006source "arch/arm/mach-mmp/Kconfig" 1002source "arch/arm/mach-mmp/Kconfig"
1007 1003
1004source "arch/arm/mach-qcom/Kconfig"
1005
1008source "arch/arm/mach-realview/Kconfig" 1006source "arch/arm/mach-realview/Kconfig"
1009 1007
1010source "arch/arm/mach-rockchip/Kconfig" 1008source "arch/arm/mach-rockchip/Kconfig"
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 0531da8e5216..4491c7b05275 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -956,7 +956,7 @@ config DEBUG_STI_UART
956 956
957config DEBUG_MSM_UART 957config DEBUG_MSM_UART
958 bool 958 bool
959 depends on ARCH_MSM 959 depends on ARCH_MSM || ARCH_QCOM
960 960
961config DEBUG_LL_INCLUDE 961config DEBUG_LL_INCLUDE
962 string 962 string
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 08a9ef58d9c3..51e5bede657f 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -180,6 +180,7 @@ machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2
180machine-$(CONFIG_ARCH_ORION5X) += orion5x 180machine-$(CONFIG_ARCH_ORION5X) += orion5x
181machine-$(CONFIG_ARCH_PICOXCELL) += picoxcell 181machine-$(CONFIG_ARCH_PICOXCELL) += picoxcell
182machine-$(CONFIG_ARCH_PXA) += pxa 182machine-$(CONFIG_ARCH_PXA) += pxa
183machine-$(CONFIG_ARCH_QCOM) += qcom
183machine-$(CONFIG_ARCH_REALVIEW) += realview 184machine-$(CONFIG_ARCH_REALVIEW) += realview
184machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip 185machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip
185machine-$(CONFIG_ARCH_RPC) += rpc 186machine-$(CONFIG_ARCH_RPC) += rpc
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index a292b3cc94a5..489959dfe6d1 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -38,6 +38,7 @@ dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb
38dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb 38dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb
39dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb 39dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb
40# sama5d3 40# sama5d3
41dtb-$(CONFIG_ARCH_AT91) += at91-sama5d3_xplained.dtb
41dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb 42dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb
42dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb 43dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb
43dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb 44dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
@@ -46,9 +47,9 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d36ek.dtb
46 47
47dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb 48dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
48dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb 49dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
49dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm11351-brt.dtb \ 50dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm28155-ap.dtb
50 bcm28155-ap.dtb
51dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb 51dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
52dtb-$(CONFIG_ARCH_BCM_5301X) += bcm4708-netgear-r6250.dtb
52dtb-$(CONFIG_ARCH_BERLIN) += \ 53dtb-$(CONFIG_ARCH_BERLIN) += \
53 berlin2-sony-nsz-gs7.dtb \ 54 berlin2-sony-nsz-gs7.dtb \
54 berlin2cd-google-chromecast.dtb 55 berlin2cd-google-chromecast.dtb
@@ -140,53 +141,55 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-b3.dtb \
140 kirkwood-ts419-6282.dtb 141 kirkwood-ts419-6282.dtb
141dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb 142dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb
142dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb 143dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb
143dtb-$(CONFIG_ARCH_MSM) += qcom-msm8660-surf.dtb \
144 qcom-msm8960-cdp.dtb \
145 qcom-apq8074-dragonboard.dtb
146dtb-$(CONFIG_MACH_ARMADA_370) += \
147 armada-370-db.dtb \
148 armada-370-mirabox.dtb \
149 armada-370-netgear-rn102.dtb \
150 armada-370-netgear-rn104.dtb \
151 armada-370-rd.dtb
152dtb-$(CONFIG_MACH_ARMADA_375) += \
153 armada-375-db.dtb
154dtb-$(CONFIG_MACH_ARMADA_38X) += \
155 armada-385-db.dtb
156dtb-$(CONFIG_MACH_ARMADA_XP) += \
157 armada-xp-axpwifiap.dtb \
158 armada-xp-db.dtb \
159 armada-xp-gp.dtb \
160 armada-xp-netgear-rn2120.dtb \
161 armada-xp-matrix.dtb \
162 armada-xp-openblocks-ax3-4.dtb
163dtb-$(CONFIG_ARCH_MXC) += \ 144dtb-$(CONFIG_ARCH_MXC) += \
145 imx25-eukrea-mbimxsd25-baseboard.dtb \
164 imx25-karo-tx25.dtb \ 146 imx25-karo-tx25.dtb \
165 imx25-pdk.dtb \ 147 imx25-pdk.dtb \
166 imx27-apf27.dtb \ 148 imx27-apf27.dtb \
167 imx27-apf27dev.dtb \ 149 imx27-apf27dev.dtb \
168 imx27-pdk.dtb \ 150 imx27-pdk.dtb \
169 imx27-phytec-phycore-som.dtb \
170 imx27-phytec-phycore-rdk.dtb \ 151 imx27-phytec-phycore-rdk.dtb \
171 imx27-phytec-phycard-s-som.dtb \
172 imx27-phytec-phycard-s-rdk.dtb \ 152 imx27-phytec-phycard-s-rdk.dtb \
173 imx31-bug.dtb \ 153 imx31-bug.dtb \
154 imx35-eukrea-mbimxsd35-baseboard.dtb \
155 imx50-evk.dtb \
174 imx51-apf51.dtb \ 156 imx51-apf51.dtb \
175 imx51-apf51dev.dtb \ 157 imx51-apf51dev.dtb \
176 imx51-babbage.dtb \ 158 imx51-babbage.dtb \
159 imx51-eukrea-mbimxsd51-baseboard.dtb \
177 imx53-ard.dtb \ 160 imx53-ard.dtb \
178 imx53-evk.dtb \
179 imx53-m53evk.dtb \ 161 imx53-m53evk.dtb \
180 imx53-mba53.dtb \ 162 imx53-mba53.dtb \
181 imx53-qsb.dtb \ 163 imx53-qsb.dtb \
164 imx53-qsrb.dtb \
182 imx53-smd.dtb \ 165 imx53-smd.dtb \
166 imx53-tx53-x03x.dtb \
167 imx53-tx53-x13x.dtb \
168 imx53-voipac-bsb.dtb \
183 imx6dl-cubox-i.dtb \ 169 imx6dl-cubox-i.dtb \
170 imx6dl-dfi-fs700-m60.dtb \
171 imx6dl-gw51xx.dtb \
172 imx6dl-gw52xx.dtb \
173 imx6dl-gw53xx.dtb \
174 imx6dl-gw54xx.dtb \
184 imx6dl-hummingboard.dtb \ 175 imx6dl-hummingboard.dtb \
176 imx6dl-nitrogen6x.dtb \
185 imx6dl-sabreauto.dtb \ 177 imx6dl-sabreauto.dtb \
178 imx6dl-sabrelite.dtb \
186 imx6dl-sabresd.dtb \ 179 imx6dl-sabresd.dtb \
187 imx6dl-wandboard.dtb \ 180 imx6dl-wandboard.dtb \
188 imx6q-arm2.dtb \ 181 imx6q-arm2.dtb \
182 imx6q-cm-fx6.dtb \
189 imx6q-cubox-i.dtb \ 183 imx6q-cubox-i.dtb \
184 imx6q-dfi-fs700-m60.dtb \
185 imx6q-dmo-edmqmx6.dtb \
186 imx6q-gk802.dtb \
187 imx6q-gw51xx.dtb \
188 imx6q-gw52xx.dtb \
189 imx6q-gw53xx.dtb \
190 imx6q-gw5400-a.dtb \
191 imx6q-gw54xx.dtb \
192 imx6q-nitrogen6x.dtb \
190 imx6q-phytec-pbab01.dtb \ 193 imx6q-phytec-pbab01.dtb \
191 imx6q-sabreauto.dtb \ 194 imx6q-sabreauto.dtb \
192 imx6q-sabrelite.dtb \ 195 imx6q-sabrelite.dtb \
@@ -210,6 +213,9 @@ dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \
210 imx28-cfa10056.dtb \ 213 imx28-cfa10056.dtb \
211 imx28-cfa10057.dtb \ 214 imx28-cfa10057.dtb \
212 imx28-cfa10058.dtb \ 215 imx28-cfa10058.dtb \
216 imx28-duckbill.dtb \
217 imx28-eukrea-mbmx283lc.dtb \
218 imx28-eukrea-mbmx287lc.dtb \
213 imx28-evk.dtb \ 219 imx28-evk.dtb \
214 imx28-m28cu3.dtb \ 220 imx28-m28cu3.dtb \
215 imx28-m28evk.dtb \ 221 imx28-m28evk.dtb \
@@ -226,6 +232,10 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
226 omap2420-n810-wimax.dtb \ 232 omap2420-n810-wimax.dtb \
227 omap3430-sdp.dtb \ 233 omap3430-sdp.dtb \
228 omap3-beagle.dtb \ 234 omap3-beagle.dtb \
235 omap3-cm-t3517.dtb \
236 omap3-sbc-t3517.dtb \
237 omap3-cm-t3530.dtb \
238 omap3-sbc-t3530.dtb \
229 omap3-cm-t3730.dtb \ 239 omap3-cm-t3730.dtb \
230 omap3-sbc-t3730.dtb \ 240 omap3-sbc-t3730.dtb \
231 omap3-devkit8000.dtb \ 241 omap3-devkit8000.dtb \
@@ -240,7 +250,9 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
240 omap3-gta04.dtb \ 250 omap3-gta04.dtb \
241 omap3-igep0020.dtb \ 251 omap3-igep0020.dtb \
242 omap3-igep0030.dtb \ 252 omap3-igep0030.dtb \
253 omap3-lilly-dbb056.dtb \
243 omap3-zoom3.dtb \ 254 omap3-zoom3.dtb \
255 omap4-duovero-parlor.dtb \
244 omap4-panda.dtb \ 256 omap4-panda.dtb \
245 omap4-panda-a4.dtb \ 257 omap4-panda-a4.dtb \
246 omap4-panda-es.dtb \ 258 omap4-panda-es.dtb \
@@ -254,12 +266,17 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
254 am335x-boneblack.dtb \ 266 am335x-boneblack.dtb \
255 am335x-nano.dtb \ 267 am335x-nano.dtb \
256 am335x-base0033.dtb \ 268 am335x-base0033.dtb \
269 am3517-craneboard.dtb \
257 am3517-evm.dtb \ 270 am3517-evm.dtb \
258 am3517_mt_ventoux.dtb \ 271 am3517_mt_ventoux.dtb \
259 am43x-epos-evm.dtb \ 272 am43x-epos-evm.dtb \
273 am437x-gp-evm.dtb \
260 dra7-evm.dtb 274 dra7-evm.dtb
261dtb-$(CONFIG_ARCH_ORION5X) += orion5x-lacie-ethernet-disk-mini-v2.dtb 275dtb-$(CONFIG_ARCH_ORION5X) += orion5x-lacie-ethernet-disk-mini-v2.dtb
262dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb 276dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb
277dtb-$(CONFIG_ARCH_QCOM) += qcom-msm8660-surf.dtb \
278 qcom-msm8960-cdp.dtb \
279 qcom-apq8074-dragonboard.dtb
263dtb-$(CONFIG_ARCH_U8500) += ste-snowball.dtb \ 280dtb-$(CONFIG_ARCH_U8500) += ste-snowball.dtb \
264 ste-hrefprev60-stuib.dtb \ 281 ste-hrefprev60-stuib.dtb \
265 ste-hrefprev60-tvk.dtb \ 282 ste-hrefprev60-tvk.dtb \
@@ -310,6 +327,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += \
310 sun4i-a10-cubieboard.dtb \ 327 sun4i-a10-cubieboard.dtb \
311 sun4i-a10-mini-xplus.dtb \ 328 sun4i-a10-mini-xplus.dtb \
312 sun4i-a10-hackberry.dtb \ 329 sun4i-a10-hackberry.dtb \
330 sun4i-a10-pcduino.dtb \
313 sun5i-a10s-olinuxino-micro.dtb \ 331 sun5i-a10s-olinuxino-micro.dtb \
314 sun5i-a13-olinuxino.dtb \ 332 sun5i-a13-olinuxino.dtb \
315 sun5i-a13-olinuxino-micro.dtb \ 333 sun5i-a13-olinuxino-micro.dtb \
@@ -348,6 +366,23 @@ dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \
348dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \ 366dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \
349 zynq-zc706.dtb \ 367 zynq-zc706.dtb \
350 zynq-zed.dtb 368 zynq-zed.dtb
369dtb-$(CONFIG_MACH_ARMADA_370) += \
370 armada-370-db.dtb \
371 armada-370-mirabox.dtb \
372 armada-370-netgear-rn102.dtb \
373 armada-370-netgear-rn104.dtb \
374 armada-370-rd.dtb
375dtb-$(CONFIG_MACH_ARMADA_375) += \
376 armada-375-db.dtb
377dtb-$(CONFIG_MACH_ARMADA_38X) += \
378 armada-385-db.dtb
379dtb-$(CONFIG_MACH_ARMADA_XP) += \
380 armada-xp-axpwifiap.dtb \
381 armada-xp-db.dtb \
382 armada-xp-gp.dtb \
383 armada-xp-netgear-rn2120.dtb \
384 armada-xp-matrix.dtb \
385 armada-xp-openblocks-ax3-4.dtb
351 386
352targets += dtbs 387targets += dtbs
353targets += $(dtb-y) 388targets += $(dtb-y)
diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
index 7e6c64ed966d..28ae040e7c3d 100644
--- a/arch/arm/boot/dts/am335x-evm.dts
+++ b/arch/arm/boot/dts/am335x-evm.dts
@@ -260,6 +260,12 @@
260 >; 260 >;
261 }; 261 };
262 262
263 mmc1_pins: pinmux_mmc1_pins {
264 pinctrl-single,pins = <
265 0x160 (PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */
266 >;
267 };
268
263 lcd_pins_s0: lcd_pins_s0 { 269 lcd_pins_s0: lcd_pins_s0 {
264 pinctrl-single,pins = < 270 pinctrl-single,pins = <
265 0x20 0x01 /* gpmc_ad8.lcd_data16, OUTPUT | MODE1 */ 271 0x20 0x01 /* gpmc_ad8.lcd_data16, OUTPUT | MODE1 */
@@ -434,9 +440,9 @@
434 ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */ 440 ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */
435 nand@0,0 { 441 nand@0,0 {
436 reg = <0 0 0>; /* CS0, offset 0 */ 442 reg = <0 0 0>; /* CS0, offset 0 */
437 nand-bus-width = <8>;
438 ti,nand-ecc-opt = "bch8"; 443 ti,nand-ecc-opt = "bch8";
439 gpmc,device-nand = "true"; 444 ti,elm-id = <&elm>;
445 nand-bus-width = <8>;
440 gpmc,device-width = <1>; 446 gpmc,device-width = <1>;
441 gpmc,sync-clk-ps = <0>; 447 gpmc,sync-clk-ps = <0>;
442 gpmc,cs-on-ns = <0>; 448 gpmc,cs-on-ns = <0>;
@@ -460,50 +466,51 @@
460 gpmc,wait-monitoring-ns = <0>; 466 gpmc,wait-monitoring-ns = <0>;
461 gpmc,wr-access-ns = <40>; 467 gpmc,wr-access-ns = <40>;
462 gpmc,wr-data-mux-bus-ns = <0>; 468 gpmc,wr-data-mux-bus-ns = <0>;
463 469 /* MTD partition table */
470 /* All SPL-* partitions are sized to minimal length
471 * which can be independently programmable. For
472 * NAND flash this is equal to size of erase-block */
464 #address-cells = <1>; 473 #address-cells = <1>;
465 #size-cells = <1>; 474 #size-cells = <1>;
466 elm_id = <&elm>;
467
468 /* MTD partition table */
469 partition@0 { 475 partition@0 {
470 label = "SPL1"; 476 label = "NAND.SPL";
471 reg = <0x00000000 0x000020000>; 477 reg = <0x00000000 0x000020000>;
472 }; 478 };
473
474 partition@1 { 479 partition@1 {
475 label = "SPL2"; 480 label = "NAND.SPL.backup1";
476 reg = <0x00020000 0x00020000>; 481 reg = <0x00020000 0x00020000>;
477 }; 482 };
478
479 partition@2 { 483 partition@2 {
480 label = "SPL3"; 484 label = "NAND.SPL.backup2";
481 reg = <0x00040000 0x00020000>; 485 reg = <0x00040000 0x00020000>;
482 }; 486 };
483
484 partition@3 { 487 partition@3 {
485 label = "SPL4"; 488 label = "NAND.SPL.backup3";
486 reg = <0x00060000 0x00020000>; 489 reg = <0x00060000 0x00020000>;
487 }; 490 };
488
489 partition@4 { 491 partition@4 {
490 label = "U-boot"; 492 label = "NAND.u-boot-spl";
491 reg = <0x00080000 0x001e0000>; 493 reg = <0x00080000 0x00040000>;
492 }; 494 };
493
494 partition@5 { 495 partition@5 {
495 label = "environment"; 496 label = "NAND.u-boot";
496 reg = <0x00260000 0x00020000>; 497 reg = <0x000C0000 0x00100000>;
497 }; 498 };
498
499 partition@6 { 499 partition@6 {
500 label = "Kernel"; 500 label = "NAND.u-boot-env";
501 reg = <0x00280000 0x00500000>; 501 reg = <0x001C0000 0x00020000>;
502 }; 502 };
503
504 partition@7 { 503 partition@7 {
505 label = "File-System"; 504 label = "NAND.u-boot-env.backup1";
506 reg = <0x00780000 0x0F880000>; 505 reg = <0x001E0000 0x00020000>;
506 };
507 partition@8 {
508 label = "NAND.kernel";
509 reg = <0x00200000 0x00800000>;
510 };
511 partition@9 {
512 label = "NAND.file-system";
513 reg = <0x00A00000 0x0F600000>;
507 }; 514 };
508 }; 515 };
509}; 516};
@@ -643,6 +650,9 @@
643 status = "okay"; 650 status = "okay";
644 vmmc-supply = <&vmmc_reg>; 651 vmmc-supply = <&vmmc_reg>;
645 bus-width = <4>; 652 bus-width = <4>;
653 pinctrl-names = "default";
654 pinctrl-0 = <&mmc1_pins>;
655 cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
646}; 656};
647 657
648&sham { 658&sham {
diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts
index 4718ec4a4dbf..b50e9efc7741 100644
--- a/arch/arm/boot/dts/am335x-evmsk.dts
+++ b/arch/arm/boot/dts/am335x-evmsk.dts
@@ -45,6 +45,18 @@
45 regulator-boot-on; 45 regulator-boot-on;
46 }; 46 };
47 47
48 wl12xx_vmmc: fixedregulator@2 {
49 pinctrl-names = "default";
50 pinctrl-0 = <&wl12xx_gpio>;
51 compatible = "regulator-fixed";
52 regulator-name = "vwl1271";
53 regulator-min-microvolt = <1800000>;
54 regulator-max-microvolt = <1800000>;
55 gpio = <&gpio1 29 0>;
56 startup-delay-us = <70000>;
57 enable-active-high;
58 };
59
48 leds { 60 leds {
49 pinctrl-names = "default"; 61 pinctrl-names = "default";
50 pinctrl-0 = <&user_leds_s0>; 62 pinctrl-0 = <&user_leds_s0>;
@@ -121,7 +133,7 @@
121 ti,model = "AM335x-EVMSK"; 133 ti,model = "AM335x-EVMSK";
122 ti,audio-codec = <&tlv320aic3106>; 134 ti,audio-codec = <&tlv320aic3106>;
123 ti,mcasp-controller = <&mcasp1>; 135 ti,mcasp-controller = <&mcasp1>;
124 ti,codec-clock-rate = <24576000>; 136 ti,codec-clock-rate = <24000000>;
125 ti,audio-routing = 137 ti,audio-routing =
126 "Headphone Jack", "HPLOUT", 138 "Headphone Jack", "HPLOUT",
127 "Headphone Jack", "HPROUT"; 139 "Headphone Jack", "HPROUT";
@@ -264,6 +276,24 @@
264 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */ 276 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */
265 >; 277 >;
266 }; 278 };
279
280 mmc2_pins: pinmux_mmc2_pins {
281 pinctrl-single,pins = <
282 0x74 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpio0_31 */
283 0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
284 0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
285 0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
286 0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
287 0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
288 0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
289 >;
290 };
291
292 wl12xx_gpio: pinmux_wl12xx_gpio {
293 pinctrl-single,pins = <
294 0x7c (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_csn0.gpio1_29 */
295 >;
296 };
267}; 297};
268 298
269&uart0 { 299&uart0 {
@@ -336,9 +366,18 @@
336 status = "okay"; 366 status = "okay";
337 }; 367 };
338 368
369 usb-phy@47401b00 {
370 status = "okay";
371 };
372
339 usb@47401000 { 373 usb@47401000 {
340 status = "okay"; 374 status = "okay";
341 }; 375 };
376
377 usb@47401800 {
378 status = "okay";
379 dr_mode = "host";
380 };
342}; 381};
343 382
344&epwmss2 { 383&epwmss2 {
@@ -434,6 +473,7 @@
434 pinctrl-names = "default", "sleep"; 473 pinctrl-names = "default", "sleep";
435 pinctrl-0 = <&cpsw_default>; 474 pinctrl-0 = <&cpsw_default>;
436 pinctrl-1 = <&cpsw_sleep>; 475 pinctrl-1 = <&cpsw_sleep>;
476 dual_emac = <1>;
437}; 477};
438 478
439&davinci_mdio { 479&davinci_mdio {
@@ -445,11 +485,13 @@
445&cpsw_emac0 { 485&cpsw_emac0 {
446 phy_id = <&davinci_mdio>, <0>; 486 phy_id = <&davinci_mdio>, <0>;
447 phy-mode = "rgmii-txid"; 487 phy-mode = "rgmii-txid";
488 dual_emac_res_vlan = <1>;
448}; 489};
449 490
450&cpsw_emac1 { 491&cpsw_emac1 {
451 phy_id = <&davinci_mdio>, <1>; 492 phy_id = <&davinci_mdio>, <1>;
452 phy-mode = "rgmii-txid"; 493 phy-mode = "rgmii-txid";
494 dual_emac_res_vlan = <2>;
453}; 495};
454 496
455&mmc1 { 497&mmc1 {
@@ -470,6 +512,16 @@
470 ti,no-reset-on-init; 512 ti,no-reset-on-init;
471}; 513};
472 514
515&mmc2 {
516 status = "okay";
517 vmmc-supply = <&wl12xx_vmmc>;
518 ti,non-removable;
519 bus-width = <4>;
520 cap-power-off-card;
521 pinctrl-names = "default";
522 pinctrl-0 = <&mmc2_pins>;
523};
524
473&mcasp1 { 525&mcasp1 {
474 pinctrl-names = "default"; 526 pinctrl-names = "default";
475 pinctrl-0 = <&mcasp1_pins>; 527 pinctrl-0 = <&mcasp1_pins>;
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index 6d95d3df33c7..707342914a6f 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -58,6 +58,10 @@
58 275000 1125000 58 275000 1125000
59 >; 59 >;
60 voltage-tolerance = <2>; /* 2 percentage */ 60 voltage-tolerance = <2>; /* 2 percentage */
61
62 clocks = <&dpll_mpu_ck>;
63 clock-names = "cpu";
64
61 clock-latency = <300000>; /* From omap-cpufreq driver */ 65 clock-latency = <300000>; /* From omap-cpufreq driver */
62 }; 66 };
63 }; 67 };
@@ -318,6 +322,7 @@
318 compatible = "ti,omap4-hwspinlock"; 322 compatible = "ti,omap4-hwspinlock";
319 reg = <0x480ca000 0x1000>; 323 reg = <0x480ca000 0x1000>;
320 ti,hwmods = "spinlock"; 324 ti,hwmods = "spinlock";
325 #hwlock-cells = <1>;
321 }; 326 };
322 327
323 wdt2: wdt@44e35000 { 328 wdt2: wdt@44e35000 {
@@ -399,7 +404,7 @@
399 ti,timer-pwm; 404 ti,timer-pwm;
400 }; 405 };
401 406
402 rtc@44e3e000 { 407 rtc: rtc@44e3e000 {
403 compatible = "ti,da830-rtc"; 408 compatible = "ti,da830-rtc";
404 reg = <0x44e3e000 0x1000>; 409 reg = <0x44e3e000 0x1000>;
405 interrupts = <75 410 interrupts = <75
@@ -582,6 +587,8 @@
582 compatible = "ti,am33xx-ecap"; 587 compatible = "ti,am33xx-ecap";
583 #pwm-cells = <3>; 588 #pwm-cells = <3>;
584 reg = <0x48300100 0x80>; 589 reg = <0x48300100 0x80>;
590 interrupts = <31>;
591 interrupt-names = "ecap0";
585 ti,hwmods = "ecap0"; 592 ti,hwmods = "ecap0";
586 status = "disabled"; 593 status = "disabled";
587 }; 594 };
@@ -610,6 +617,8 @@
610 compatible = "ti,am33xx-ecap"; 617 compatible = "ti,am33xx-ecap";
611 #pwm-cells = <3>; 618 #pwm-cells = <3>;
612 reg = <0x48302100 0x80>; 619 reg = <0x48302100 0x80>;
620 interrupts = <47>;
621 interrupt-names = "ecap1";
613 ti,hwmods = "ecap1"; 622 ti,hwmods = "ecap1";
614 status = "disabled"; 623 status = "disabled";
615 }; 624 };
@@ -638,6 +647,8 @@
638 compatible = "ti,am33xx-ecap"; 647 compatible = "ti,am33xx-ecap";
639 #pwm-cells = <3>; 648 #pwm-cells = <3>;
640 reg = <0x48304100 0x80>; 649 reg = <0x48304100 0x80>;
650 interrupts = <61>;
651 interrupt-names = "ecap2";
641 ti,hwmods = "ecap2"; 652 ti,hwmods = "ecap2";
642 status = "disabled"; 653 status = "disabled";
643 }; 654 };
diff --git a/arch/arm/boot/dts/am3517-craneboard.dts b/arch/arm/boot/dts/am3517-craneboard.dts
new file mode 100644
index 000000000000..2d40b3f241cd
--- /dev/null
+++ b/arch/arm/boot/dts/am3517-craneboard.dts
@@ -0,0 +1,174 @@
1/*
2 * See craneboard.org for more details
3 *
4 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10/dts-v1/;
11
12#include "am3517.dtsi"
13
14/ {
15 model = "TI AM3517 CraneBoard (TMDSEVM3517)";
16 compatible = "ti,am3517-craneboard", "ti,am3517", "ti,omap3";
17
18 memory {
19 device_type = "memory";
20 reg = <0x80000000 0x10000000>; /* 256 MB */
21 };
22
23 vbat: fixedregulator@0 {
24 compatible = "regulator-fixed";
25 regulator-name = "vbat";
26 regulator-min-microvolt = <5000000>;
27 regulator-max-microvolt = <5000000>;
28 regulator-boot-on;
29 };
30};
31
32&davinci_emac {
33 status = "okay";
34};
35
36&davinci_mdio {
37 status = "okay";
38};
39
40&i2c1 {
41 clock-frequency = <2600000>;
42
43 tps: tps@2d {
44 reg = <0x2d>;
45 };
46};
47
48&i2c2 {
49 clock-frequency = <400000>;
50 /* goes to expansion connector */
51 status = "disabled";
52};
53
54&i2c3 {
55 clock-frequency = <400000>;
56 /* goes to expansion connector */
57 status = "disabled";
58};
59
60&mmc1 {
61 vmmc-supply = <&vdd2_reg>;
62 bus-width = <8>;
63};
64
65&mmc2 {
66 /* goes to expansion connector */
67 status = "disabled";
68};
69
70&mmc3 {
71 /* goes to expansion connector */
72 status = "disabled";
73};
74
75#include "tps65910.dtsi"
76
77&omap3_pmx_core {
78 tps_pins: pinmux_tps_pins {
79 pinctrl-single,pins = <
80 0x1b0 (PIN_INPUT_PULLUP | MUX_MODE0) /* sys_nirq.sys_nirq */
81 >;
82 };
83};
84
85&tps {
86 pinctrl-names = "default";
87 pinctrl-0 = <&tps_pins>;
88
89 interrupts = <7>; /* SYS_NIRQ cascaded to intc */
90 interrupt-parent = <&intc>;
91
92 ti,en-ck32k-xtal;
93
94 vcc1-supply = <&vbat>;
95 vcc2-supply = <&vbat>;
96 vcc3-supply = <&vbat>;
97 vcc4-supply = <&vbat>;
98 vcc5-supply = <&vbat>;
99 vcc6-supply = <&vbat>;
100 vcc7-supply = <&vbat>;
101 vccio-supply = <&vbat>;
102
103 regulators {
104 vrtc_reg: regulator@0 {
105 regulator-always-on;
106 };
107
108 vio_reg: regulator@1 {
109 regulator-always-on;
110 };
111
112 /*
113 * Unused:
114 * VDIG1=2.7V,300mA max
115 * VDIG2=1.8V,300mA max
116 */
117
118 vpll_reg: regulator@7 {
119 /* VDDS_DPLL_1V8 */
120 regulator-min-microvolt = <1800000>;
121 regulator-max-microvolt = <1800000>;
122 regulator-always-on;
123 };
124
125 vaux1_reg: regulator@9 {
126 /* VDDS_SRAM_1V8 */
127 regulator-min-microvolt = <1800000>;
128 regulator-max-microvolt = <1800000>;
129 regulator-always-on;
130 };
131
132 vaux2_reg: regulator@10 {
133 /* VDDA1P8V_USBPHY */
134 regulator-min-microvolt = <1800000>;
135 regulator-max-microvolt = <1800000>;
136 regulator-always-on;
137 };
138
139 /* VAUX33 unused */
140
141 vdac_reg: regulator@8 {
142 /* VDDA_DAC_1V8 */
143 regulator-min-microvolt = <1800000>;
144 regulator-max-microvolt = <1800000>;
145 regulator-always-on;
146 };
147
148 vmmc_reg: regulator@12 {
149 /* VDDA3P3V_USBPHY */
150 regulator-min-microvolt = <3300000>;
151 regulator-max-microvolt = <3300000>;
152 regulator-always-on;
153 };
154
155 vdd1_reg: regulator@2 {
156 /* VDD_CORE */
157 regulator-name = "vdd_core";
158 regulator-min-microvolt = <1200000>;
159 regulator-max-microvolt = <1200000>;
160 regulator-boot-on;
161 regulator-always-on;
162 };
163
164 vdd2_reg: regulator@3 {
165 /* VDDSHV_3V3 */
166 regulator-name = "vdd_shv";
167 regulator-min-microvolt = <3300000>;
168 regulator-max-microvolt = <3300000>;
169 regulator-always-on;
170 };
171
172 /* VDD3 unused */
173 };
174};
diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi
index c6bd4d986c29..36d523a26831 100644
--- a/arch/arm/boot/dts/am4372.dtsi
+++ b/arch/arm/boot/dts/am4372.dtsi
@@ -8,6 +8,7 @@
8 * kind, whether express or implied. 8 * kind, whether express or implied.
9 */ 9 */
10 10
11#include <dt-bindings/gpio/gpio.h>
11#include <dt-bindings/interrupt-controller/arm-gic.h> 12#include <dt-bindings/interrupt-controller/arm-gic.h>
12 13
13#include "skeleton.dtsi" 14#include "skeleton.dtsi"
@@ -33,6 +34,11 @@
33 compatible = "arm,cortex-a9"; 34 compatible = "arm,cortex-a9";
34 device_type = "cpu"; 35 device_type = "cpu";
35 reg = <0>; 36 reg = <0>;
37
38 clocks = <&dpll_mpu_ck>;
39 clock-names = "cpu";
40
41 clock-latency = <300000>; /* From omap-cpufreq driver */
36 }; 42 };
37 }; 43 };
38 44
@@ -351,6 +357,13 @@
351 status = "disabled"; 357 status = "disabled";
352 }; 358 };
353 359
360 hwspinlock: spinlock@480ca000 {
361 compatible = "ti,omap4-hwspinlock";
362 reg = <0x480ca000 0x1000>;
363 ti,hwmods = "spinlock";
364 #hwlock-cells = <1>;
365 };
366
354 i2c0: i2c@44e0b000 { 367 i2c0: i2c@44e0b000 {
355 compatible = "ti,am4372-i2c","ti,omap4-i2c"; 368 compatible = "ti,am4372-i2c","ti,omap4-i2c";
356 reg = <0x44e0b000 0x1000>; 369 reg = <0x44e0b000 0x1000>;
@@ -521,6 +534,7 @@
521 534
522 ecap0: ecap@48300100 { 535 ecap0: ecap@48300100 {
523 compatible = "ti,am4372-ecap","ti,am33xx-ecap"; 536 compatible = "ti,am4372-ecap","ti,am33xx-ecap";
537 #pwm-cells = <3>;
524 reg = <0x48300100 0x80>; 538 reg = <0x48300100 0x80>;
525 ti,hwmods = "ecap0"; 539 ti,hwmods = "ecap0";
526 status = "disabled"; 540 status = "disabled";
@@ -528,6 +542,7 @@
528 542
529 ehrpwm0: ehrpwm@48300200 { 543 ehrpwm0: ehrpwm@48300200 {
530 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm"; 544 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm";
545 #pwm-cells = <3>;
531 reg = <0x48300200 0x80>; 546 reg = <0x48300200 0x80>;
532 ti,hwmods = "ehrpwm0"; 547 ti,hwmods = "ehrpwm0";
533 status = "disabled"; 548 status = "disabled";
@@ -545,6 +560,7 @@
545 560
546 ecap1: ecap@48302100 { 561 ecap1: ecap@48302100 {
547 compatible = "ti,am4372-ecap","ti,am33xx-ecap"; 562 compatible = "ti,am4372-ecap","ti,am33xx-ecap";
563 #pwm-cells = <3>;
548 reg = <0x48302100 0x80>; 564 reg = <0x48302100 0x80>;
549 ti,hwmods = "ecap1"; 565 ti,hwmods = "ecap1";
550 status = "disabled"; 566 status = "disabled";
@@ -552,6 +568,7 @@
552 568
553 ehrpwm1: ehrpwm@48302200 { 569 ehrpwm1: ehrpwm@48302200 {
554 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm"; 570 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm";
571 #pwm-cells = <3>;
555 reg = <0x48302200 0x80>; 572 reg = <0x48302200 0x80>;
556 ti,hwmods = "ehrpwm1"; 573 ti,hwmods = "ehrpwm1";
557 status = "disabled"; 574 status = "disabled";
@@ -569,6 +586,7 @@
569 586
570 ecap2: ecap@48304100 { 587 ecap2: ecap@48304100 {
571 compatible = "ti,am4372-ecap","ti,am33xx-ecap"; 588 compatible = "ti,am4372-ecap","ti,am33xx-ecap";
589 #pwm-cells = <3>;
572 reg = <0x48304100 0x80>; 590 reg = <0x48304100 0x80>;
573 ti,hwmods = "ecap2"; 591 ti,hwmods = "ecap2";
574 status = "disabled"; 592 status = "disabled";
@@ -576,6 +594,7 @@
576 594
577 ehrpwm2: ehrpwm@48304200 { 595 ehrpwm2: ehrpwm@48304200 {
578 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm"; 596 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm";
597 #pwm-cells = <3>;
579 reg = <0x48304200 0x80>; 598 reg = <0x48304200 0x80>;
580 ti,hwmods = "ehrpwm2"; 599 ti,hwmods = "ehrpwm2";
581 status = "disabled"; 600 status = "disabled";
@@ -593,6 +612,7 @@
593 612
594 ehrpwm3: ehrpwm@48306200 { 613 ehrpwm3: ehrpwm@48306200 {
595 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm"; 614 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm";
615 #pwm-cells = <3>;
596 reg = <0x48306200 0x80>; 616 reg = <0x48306200 0x80>;
597 ti,hwmods = "ehrpwm3"; 617 ti,hwmods = "ehrpwm3";
598 status = "disabled"; 618 status = "disabled";
@@ -610,6 +630,7 @@
610 630
611 ehrpwm4: ehrpwm@48308200 { 631 ehrpwm4: ehrpwm@48308200 {
612 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm"; 632 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm";
633 #pwm-cells = <3>;
613 reg = <0x48308200 0x80>; 634 reg = <0x48308200 0x80>;
614 ti,hwmods = "ehrpwm4"; 635 ti,hwmods = "ehrpwm4";
615 status = "disabled"; 636 status = "disabled";
@@ -627,6 +648,7 @@
627 648
628 ehrpwm5: ehrpwm@4830a200 { 649 ehrpwm5: ehrpwm@4830a200 {
629 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm"; 650 compatible = "ti,am4372-ehrpwm","ti,am33xx-ehrpwm";
651 #pwm-cells = <3>;
630 reg = <0x4830a200 0x80>; 652 reg = <0x4830a200 0x80>;
631 ti,hwmods = "ehrpwm5"; 653 ti,hwmods = "ehrpwm5";
632 status = "disabled"; 654 status = "disabled";
@@ -689,6 +711,30 @@
689 <&edma 11>; 711 <&edma 11>;
690 dma-names = "tx", "rx"; 712 dma-names = "tx", "rx";
691 }; 713 };
714
715 elm: elm@48080000 {
716 compatible = "ti,am3352-elm";
717 reg = <0x48080000 0x2000>;
718 interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
719 ti,hwmods = "elm";
720 clocks = <&l4ls_gclk>;
721 clock-names = "fck";
722 status = "disabled";
723 };
724
725 gpmc: gpmc@50000000 {
726 compatible = "ti,am3352-gpmc";
727 ti,hwmods = "gpmc";
728 clocks = <&l3s_gclk>;
729 clock-names = "fck";
730 reg = <0x50000000 0x2000>;
731 interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
732 gpmc,num-cs = <7>;
733 gpmc,num-waitpins = <2>;
734 #address-cells = <2>;
735 #size-cells = <1>;
736 status = "disabled";
737 };
692 }; 738 };
693}; 739};
694 740
diff --git a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boot/dts/am437x-gp-evm.dts
new file mode 100644
index 000000000000..df8798e8bd25
--- /dev/null
+++ b/arch/arm/boot/dts/am437x-gp-evm.dts
@@ -0,0 +1,127 @@
1/*
2 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9/* AM437x GP EVM */
10
11/dts-v1/;
12
13#include "am4372.dtsi"
14#include <dt-bindings/pinctrl/am43xx.h>
15#include <dt-bindings/pwm/pwm.h>
16#include <dt-bindings/gpio/gpio.h>
17
18/ {
19 model = "TI AM437x GP EVM";
20 compatible = "ti,am437x-gp-evm","ti,am4372","ti,am43";
21
22 vmmcsd_fixed: fixedregulator-sd {
23 compatible = "regulator-fixed";
24 regulator-name = "vmmcsd_fixed";
25 regulator-min-microvolt = <3300000>;
26 regulator-max-microvolt = <3300000>;
27 enable-active-high;
28 };
29
30 backlight {
31 compatible = "pwm-backlight";
32 pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
33 brightness-levels = <0 51 53 56 62 75 101 152 255>;
34 default-brightness-level = <8>;
35 };
36
37 matrix_keypad: matrix_keypad@0 {
38 compatible = "gpio-matrix-keypad";
39 debounce-delay-ms = <5>;
40 col-scan-delay-us = <2>;
41
42 row-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH /* Bank3, pin21 */
43 &gpio4 3 GPIO_ACTIVE_HIGH /* Bank4, pin3 */
44 &gpio4 2 GPIO_ACTIVE_HIGH>; /* Bank4, pin2 */
45
46 col-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH /* Bank3, pin19 */
47 &gpio3 20 GPIO_ACTIVE_HIGH>; /* Bank3, pin20 */
48
49 linux,keymap = <0x00000201 /* P1 */
50 0x00010202 /* P2 */
51 0x01000067 /* UP */
52 0x0101006a /* RIGHT */
53 0x02000069 /* LEFT */
54 0x0201006c>; /* DOWN */
55 };
56};
57
58&am43xx_pinmux {
59 i2c0_pins: i2c0_pins {
60 pinctrl-single,pins = <
61 0x188 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_sda.i2c0_sda */
62 0x18c (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_scl.i2c0_scl */
63 >;
64 };
65
66 i2c1_pins: i2c1_pins {
67 pinctrl-single,pins = <
68 0x15c (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE2) /* spi0_cs0.i2c1_scl */
69 0x158 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE2) /* spi0_d1.i2c1_sda */
70 >;
71 };
72
73 mmc1_pins: pinmux_mmc1_pins {
74 pinctrl-single,pins = <
75 0x160 (PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */
76 >;
77 };
78
79 ecap0_pins: backlight_pins {
80 pinctrl-single,pins = <
81 0x164 MUX_MODE0 /* eCAP0_in_PWM0_out.eCAP0_in_PWM0_out MODE0 */
82 >;
83 };
84};
85
86&i2c0 {
87 status = "okay";
88 pinctrl-names = "default";
89 pinctrl-0 = <&i2c0_pins>;
90};
91
92&i2c1 {
93 status = "okay";
94 pinctrl-names = "default";
95 pinctrl-0 = <&i2c1_pins>;
96};
97
98&epwmss0 {
99 status = "okay";
100};
101
102&ecap0 {
103 status = "okay";
104 pinctrl-names = "default";
105 pinctrl-0 = <&ecap0_pins>;
106};
107
108&gpio0 {
109 status = "okay";
110};
111
112&gpio3 {
113 status = "okay";
114};
115
116&gpio4 {
117 status = "okay";
118};
119
120&mmc1 {
121 status = "okay";
122 vmmc-supply = <&vmmcsd_fixed>;
123 bus-width = <4>;
124 pinctrl-names = "default";
125 pinctrl-0 = <&mmc1_pins>;
126 cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
127};
diff --git a/arch/arm/boot/dts/am43x-epos-evm.dts b/arch/arm/boot/dts/am43x-epos-evm.dts
index fbf9c4c7a94f..167dbc8494de 100644
--- a/arch/arm/boot/dts/am43x-epos-evm.dts
+++ b/arch/arm/boot/dts/am43x-epos-evm.dts
@@ -13,6 +13,7 @@
13#include "am4372.dtsi" 13#include "am4372.dtsi"
14#include <dt-bindings/pinctrl/am43xx.h> 14#include <dt-bindings/pinctrl/am43xx.h>
15#include <dt-bindings/gpio/gpio.h> 15#include <dt-bindings/gpio/gpio.h>
16#include <dt-bindings/pwm/pwm.h>
16 17
17/ { 18/ {
18 model = "TI AM43x EPOS EVM"; 19 model = "TI AM43x EPOS EVM";
@@ -79,6 +80,64 @@
79 0x18c (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_scl.i2c0_scl */ 80 0x18c (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_scl.i2c0_scl */
80 >; 81 >;
81 }; 82 };
83
84 nand_flash_x8: nand_flash_x8 {
85 pinctrl-single,pins = <
86 0x40 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a0.SELQSPIorNAND/GPIO */
87 0x0 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad0.gpmc_ad0 */
88 0x4 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad1.gpmc_ad1 */
89 0x8 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad2.gpmc_ad2 */
90 0xc (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad3.gpmc_ad3 */
91 0x10 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad4.gpmc_ad4 */
92 0x14 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad5.gpmc_ad5 */
93 0x18 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad6.gpmc_ad6 */
94 0x1c (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad7.gpmc_ad7 */
95 0x70 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_wait0.gpmc_wait0 */
96 0x74 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpmc_wpn */
97 0x7c (PIN_OUTPUT | MUX_MODE0) /* gpmc_csn0.gpmc_csn0 */
98 0x90 (PIN_OUTPUT | MUX_MODE0) /* gpmc_advn_ale.gpmc_advn_ale */
99 0x94 (PIN_OUTPUT | MUX_MODE0) /* gpmc_oen_ren.gpmc_oen_ren */
100 0x98 (PIN_OUTPUT | MUX_MODE0) /* gpmc_wen.gpmc_wen */
101 0x9c (PIN_OUTPUT | MUX_MODE0) /* gpmc_be0n_cle.gpmc_be0n_cle */
102 >;
103 };
104
105 ecap0_pins: backlight_pins {
106 pinctrl-single,pins = <
107 0x164 MUX_MODE0 /* eCAP0_in_PWM0_out.eCAP0_in_PWM0_out MODE0 */
108 >;
109 };
110
111 i2c2_pins: pinmux_i2c2_pins {
112 pinctrl-single,pins = <
113 0x1c0 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE8) /* i2c2_sda.i2c2_sda */
114 0x1c4 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE8) /* i2c2_scl.i2c2_scl */
115 >;
116 };
117
118 spi0_pins: pinmux_spi0_pins {
119 pinctrl-single,pins = <
120 0x150 (PIN_INPUT | MUX_MODE0) /* spi0_clk.spi0_clk */
121 0x154 (PIN_OUTPUT | MUX_MODE0) /* spi0_d0.spi0_d0 */
122 0x158 (PIN_INPUT | MUX_MODE0) /* spi0_d1.spi0_d1 */
123 0x15c (PIN_OUTPUT | MUX_MODE0) /* spi0_cs0.spi0_cs0 */
124 >;
125 };
126
127 spi1_pins: pinmux_spi1_pins {
128 pinctrl-single,pins = <
129 0x190 (PIN_INPUT | MUX_MODE3) /* mcasp0_aclkx.spi1_clk */
130 0x194 (PIN_OUTPUT | MUX_MODE3) /* mcasp0_fsx.spi1_d0 */
131 0x198 (PIN_INPUT | MUX_MODE3) /* mcasp0_axr0.spi1_d1 */
132 0x19c (PIN_OUTPUT | MUX_MODE3) /* mcasp0_ahclkr.spi1_cs0 */
133 >;
134 };
135
136 mmc1_pins: pinmux_mmc1_pins {
137 pinctrl-single,pins = <
138 0x160 (PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */
139 >;
140 };
82 }; 141 };
83 142
84 matrix_keypad: matrix_keypad@0 { 143 matrix_keypad: matrix_keypad@0 {
@@ -113,12 +172,22 @@
113 0x0203006c /* DOWN */ 172 0x0203006c /* DOWN */
114 0x03030069>; /* LEFT */ 173 0x03030069>; /* LEFT */
115 }; 174 };
175
176 backlight {
177 compatible = "pwm-backlight";
178 pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
179 brightness-levels = <0 51 53 56 62 75 101 152 255>;
180 default-brightness-level = <8>;
181 };
116}; 182};
117 183
118&mmc1 { 184&mmc1 {
119 status = "okay"; 185 status = "okay";
120 vmmc-supply = <&vmmcsd_fixed>; 186 vmmc-supply = <&vmmcsd_fixed>;
121 bus-width = <4>; 187 bus-width = <4>;
188 pinctrl-names = "default";
189 pinctrl-0 = <&mmc1_pins>;
190 cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
122}; 191};
123 192
124&mac { 193&mac {
@@ -169,6 +238,12 @@
169 }; 238 };
170}; 239};
171 240
241&i2c2 {
242 pinctrl-names = "default";
243 pinctrl-0 = <&i2c2_pins>;
244 status = "okay";
245};
246
172&gpio0 { 247&gpio0 {
173 status = "okay"; 248 status = "okay";
174}; 249};
@@ -184,3 +259,111 @@
184&gpio3 { 259&gpio3 {
185 status = "okay"; 260 status = "okay";
186}; 261};
262
263&elm {
264 status = "okay";
265};
266
267&gpmc {
268 status = "okay";
269 pinctrl-names = "default";
270 pinctrl-0 = <&nand_flash_x8>;
271 ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */
272 nand@0,0 {
273 reg = <0 0 0>; /* CS0, offset 0 */
274 ti,nand-ecc-opt = "bch8";
275 ti,elm-id = <&elm>;
276 nand-bus-width = <8>;
277 gpmc,device-width = <1>;
278 gpmc,sync-clk-ps = <0>;
279 gpmc,cs-on-ns = <0>;
280 gpmc,cs-rd-off-ns = <40>; /* tCEA + tCHZ + 1 */
281 gpmc,cs-wr-off-ns = <40>;
282 gpmc,adv-on-ns = <0>; /* cs-on-ns */
283 gpmc,adv-rd-off-ns = <25>; /* min( tALH + tALS + 1) */
284 gpmc,adv-wr-off-ns = <25>; /* min( tALH + tALS + 1) */
285 gpmc,we-on-ns = <0>; /* cs-on-ns */
286 gpmc,we-off-ns = <20>; /* we-on-time + tWP + 2 */
287 gpmc,oe-on-ns = <3>; /* cs-on-ns + tRR + 2 */
288 gpmc,oe-off-ns = <30>; /* oe-on-ns + tRP + 2 */
289 gpmc,access-ns = <30>; /* tCEA + 4*/
290 gpmc,rd-cycle-ns = <40>;
291 gpmc,wr-cycle-ns = <40>;
292 gpmc,wait-on-read = "true";
293 gpmc,wait-on-write = "true";
294 gpmc,bus-turnaround-ns = <0>;
295 gpmc,cycle2cycle-delay-ns = <0>;
296 gpmc,clk-activation-ns = <0>;
297 gpmc,wait-monitoring-ns = <0>;
298 gpmc,wr-access-ns = <40>;
299 gpmc,wr-data-mux-bus-ns = <0>;
300 /* MTD partition table */
301 /* All SPL-* partitions are sized to minimal length
302 * which can be independently programmable. For
303 * NAND flash this is equal to size of erase-block */
304 #address-cells = <1>;
305 #size-cells = <1>;
306 partition@0 {
307 label = "NAND.SPL";
308 reg = <0x00000000 0x00040000>;
309 };
310 partition@1 {
311 label = "NAND.SPL.backup1";
312 reg = <0x00040000 0x00040000>;
313 };
314 partition@2 {
315 label = "NAND.SPL.backup2";
316 reg = <0x00080000 0x00040000>;
317 };
318 partition@3 {
319 label = "NAND.SPL.backup3";
320 reg = <0x000C0000 0x00040000>;
321 };
322 partition@4 {
323 label = "NAND.u-boot-spl-os";
324 reg = <0x00100000 0x00080000>;
325 };
326 partition@5 {
327 label = "NAND.u-boot";
328 reg = <0x00180000 0x00100000>;
329 };
330 partition@6 {
331 label = "NAND.u-boot-env";
332 reg = <0x00280000 0x00040000>;
333 };
334 partition@7 {
335 label = "NAND.u-boot-env.backup1";
336 reg = <0x002C0000 0x00040000>;
337 };
338 partition@8 {
339 label = "NAND.kernel";
340 reg = <0x00300000 0x00700000>;
341 };
342 partition@9 {
343 label = "NAND.file-system";
344 reg = <0x00800000 0x1F600000>;
345 };
346 };
347};
348
349&epwmss0 {
350 status = "okay";
351};
352
353&ecap0 {
354 status = "okay";
355 pinctrl-names = "default";
356 pinctrl-0 = <&ecap0_pins>;
357};
358
359&spi0 {
360 pinctrl-names = "default";
361 pinctrl-0 = <&spi0_pins>;
362 status = "okay";
363};
364
365&spi1 {
366 pinctrl-names = "default";
367 pinctrl-0 = <&spi1_pins>;
368 status = "okay";
369};
diff --git a/arch/arm/boot/dts/at91-sama5d3_xplained.dts b/arch/arm/boot/dts/at91-sama5d3_xplained.dts
new file mode 100644
index 000000000000..ce1375595e5f
--- /dev/null
+++ b/arch/arm/boot/dts/at91-sama5d3_xplained.dts
@@ -0,0 +1,229 @@
1/*
2 * at91-sama5d3_xplained.dts - Device Tree file for the SAMA5D3 Xplained board
3 *
4 * Copyright (C) 2014 Atmel,
5 * 2014 Nicolas Ferre <nicolas.ferre@atmel.com>
6 *
7 * Licensed under GPLv2 or later.
8 */
9/dts-v1/;
10#include "sama5d36.dtsi"
11
12/ {
13 model = "SAMA5D3 Xplained";
14 compatible = "atmel,sama5d3-xplained", "atmel,sama5d3", "atmel,sama5";
15
16 chosen {
17 bootargs = "console=ttyS0,115200";
18 };
19
20 memory {
21 reg = <0x20000000 0x10000000>;
22 };
23
24 ahb {
25 apb {
26 mmc0: mmc@f0000000 {
27 pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7 &pinctrl_mmc0_cd>;
28 status = "okay";
29 slot@0 {
30 reg = <0>;
31 bus-width = <8>;
32 cd-gpios = <&pioE 0 GPIO_ACTIVE_LOW>;
33 };
34 };
35
36 spi0: spi@f0004000 {
37 cs-gpios = <&pioD 13 0>;
38 status = "okay";
39 };
40
41 can0: can@f000c000 {
42 status = "okay";
43 };
44
45 i2c0: i2c@f0014000 {
46 status = "okay";
47 };
48
49 i2c1: i2c@f0018000 {
50 status = "okay";
51 };
52
53 macb0: ethernet@f0028000 {
54 phy-mode = "rgmii";
55 status = "okay";
56 };
57
58 usart0: serial@f001c000 {
59 status = "okay";
60 };
61
62 usart1: serial@f0020000 {
63 pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
64 status = "okay";
65 };
66
67 uart0: serial@f0024000 {
68 status = "okay";
69 };
70
71 mmc1: mmc@f8000000 {
72 pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
73 status = "okay";
74 slot@0 {
75 reg = <0>;
76 bus-width = <4>;
77 cd-gpios = <&pioE 1 GPIO_ACTIVE_HIGH>;
78 };
79 };
80
81 spi1: spi@f8008000 {
82 cs-gpios = <&pioC 25 0>, <0>, <0>, <&pioD 16 0>;
83 status = "okay";
84 };
85
86 adc0: adc@f8018000 {
87 pinctrl-0 = <
88 &pinctrl_adc0_adtrg
89 &pinctrl_adc0_ad0
90 &pinctrl_adc0_ad1
91 &pinctrl_adc0_ad2
92 &pinctrl_adc0_ad3
93 &pinctrl_adc0_ad4
94 &pinctrl_adc0_ad5
95 &pinctrl_adc0_ad6
96 &pinctrl_adc0_ad7
97 &pinctrl_adc0_ad8
98 &pinctrl_adc0_ad9
99 >;
100 status = "okay";
101 };
102
103 i2c2: i2c@f801c000 {
104 dmas = <0>, <0>; /* Do not use DMA for i2c2 */
105 status = "okay";
106 };
107
108 macb1: ethernet@f802c000 {
109 phy-mode = "rmii";
110 status = "okay";
111 };
112
113 dbgu: serial@ffffee00 {
114 status = "okay";
115 };
116
117 pinctrl@fffff200 {
118 board {
119 pinctrl_mmc0_cd: mmc0_cd {
120 atmel,pins =
121 <AT91_PIOE 0 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
122 };
123
124 pinctrl_mmc1_cd: mmc1_cd {
125 atmel,pins =
126 <AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
127 };
128
129 pinctrl_usba_vbus: usba_vbus {
130 atmel,pins =
131 <AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */
132 };
133 };
134 };
135
136 pmc: pmc@fffffc00 {
137 main: mainck {
138 clock-frequency = <12000000>;
139 };
140 };
141 };
142
143 nand0: nand@60000000 {
144 nand-bus-width = <8>;
145 nand-ecc-mode = "hw";
146 atmel,has-pmecc;
147 atmel,pmecc-cap = <4>;
148 atmel,pmecc-sector-size = <512>;
149 nand-on-flash-bbt;
150 status = "okay";
151
152 at91bootstrap@0 {
153 label = "at91bootstrap";
154 reg = <0x0 0x40000>;
155 };
156
157 bootloader@40000 {
158 label = "bootloader";
159 reg = <0x40000 0x80000>;
160 };
161
162 bootloaderenv@c0000 {
163 label = "bootloader env";
164 reg = <0xc0000 0xc0000>;
165 };
166
167 dtb@180000 {
168 label = "device tree";
169 reg = <0x180000 0x80000>;
170 };
171
172 kernel@200000 {
173 label = "kernel";
174 reg = <0x200000 0x600000>;
175 };
176
177 rootfs@800000 {
178 label = "rootfs";
179 reg = <0x800000 0x0f800000>;
180 };
181 };
182
183 usb0: gadget@00500000 {
184 atmel,vbus-gpio = <&pioE 9 GPIO_ACTIVE_HIGH>; /* PE9, conflicts with A9 */
185 pinctrl-names = "default";
186 pinctrl-0 = <&pinctrl_usba_vbus>;
187 status = "okay";
188 };
189
190 usb1: ohci@00600000 {
191 num-ports = <3>;
192 atmel,vbus-gpio = <0
193 &pioE 3 GPIO_ACTIVE_LOW
194 &pioE 4 GPIO_ACTIVE_LOW
195 >;
196 status = "okay";
197 };
198
199 usb2: ehci@00700000 {
200 status = "okay";
201 };
202 };
203
204 gpio_keys {
205 compatible = "gpio-keys";
206
207 bp3 {
208 label = "PB_USER";
209 gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
210 linux,code = <0x104>;
211 gpio-key,wakeup;
212 };
213 };
214
215 leds {
216 compatible = "gpio-leds";
217
218 d2 {
219 label = "d2";
220 gpios = <&pioE 23 GPIO_ACTIVE_LOW>; /* PE23, conflicts with A23, CTS2 */
221 linux,default-trigger = "heartbeat";
222 };
223
224 d3 {
225 label = "d3";
226 gpios = <&pioE 24 GPIO_ACTIVE_HIGH>;
227 };
228 };
229};
diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi
index 0042f73068b0..fece8665fb63 100644
--- a/arch/arm/boot/dts/at91sam9263.dtsi
+++ b/arch/arm/boot/dts/at91sam9263.dtsi
@@ -523,7 +523,7 @@
523 }; 523 };
524 524
525 i2c0: i2c@fff88000 { 525 i2c0: i2c@fff88000 {
526 compatible = "atmel,at91sam9263-i2c"; 526 compatible = "atmel,at91sam9260-i2c";
527 reg = <0xfff88000 0x100>; 527 reg = <0xfff88000 0x100>;
528 interrupts = <13 IRQ_TYPE_LEVEL_HIGH 6>; 528 interrupts = <13 IRQ_TYPE_LEVEL_HIGH 6>;
529 #address-cells = <1>; 529 #address-cells = <1>;
diff --git a/arch/arm/boot/dts/at91sam9n12ek.dts b/arch/arm/boot/dts/at91sam9n12ek.dts
index e9487f6f0166..924a6a6ffd0f 100644
--- a/arch/arm/boot/dts/at91sam9n12ek.dts
+++ b/arch/arm/boot/dts/at91sam9n12ek.dts
@@ -124,6 +124,10 @@
124 nand-on-flash-bbt; 124 nand-on-flash-bbt;
125 status = "okay"; 125 status = "okay";
126 }; 126 };
127
128 usb0: ohci@00500000 {
129 status = "okay";
130 };
127 }; 131 };
128 132
129 leds { 133 leds {
diff --git a/arch/arm/boot/dts/bcm11351-brt.dts b/arch/arm/boot/dts/bcm11351-brt.dts
deleted file mode 100644
index 396b70459cdc..000000000000
--- a/arch/arm/boot/dts/bcm11351-brt.dts
+++ /dev/null
@@ -1,54 +0,0 @@
1/*
2 * Copyright (C) 2012 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation version 2.
7 *
8 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 * kind, whether express or implied; without even the implied warranty
10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14/dts-v1/;
15
16#include "bcm11351.dtsi"
17
18/ {
19 model = "BCM11351 BRT board";
20 compatible = "brcm,bcm11351-brt", "brcm,bcm11351";
21
22 memory {
23 reg = <0x80000000 0x40000000>; /* 1 GB */
24 };
25
26 uart@3e000000 {
27 status = "okay";
28 };
29
30 sdio1: sdio@3f180000 {
31 max-frequency = <48000000>;
32 status = "okay";
33 };
34
35 sdio2: sdio@3f190000 {
36 non-removable;
37 max-frequency = <48000000>;
38 status = "okay";
39 };
40
41 sdio4: sdio@3f1b0000 {
42 max-frequency = <48000000>;
43 cd-gpios = <&gpio 14 0>;
44 status = "okay";
45 };
46
47 usbotg: usb@3f120000 {
48 status = "okay";
49 };
50
51 usbphy: usb-phy@3f130000 {
52 status = "okay";
53 };
54};
diff --git a/arch/arm/boot/dts/bcm11351.dtsi b/arch/arm/boot/dts/bcm11351.dtsi
index e491b82f8d67..94b36f631ed8 100644
--- a/arch/arm/boot/dts/bcm11351.dtsi
+++ b/arch/arm/boot/dts/bcm11351.dtsi
@@ -14,6 +14,8 @@
14#include <dt-bindings/interrupt-controller/arm-gic.h> 14#include <dt-bindings/interrupt-controller/arm-gic.h>
15#include <dt-bindings/interrupt-controller/irq.h> 15#include <dt-bindings/interrupt-controller/irq.h>
16 16
17#include "dt-bindings/clock/bcm281xx.h"
18
17#include "skeleton.dtsi" 19#include "skeleton.dtsi"
18 20
19/ { 21/ {
@@ -43,7 +45,7 @@
43 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart"; 45 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart";
44 status = "disabled"; 46 status = "disabled";
45 reg = <0x3e000000 0x1000>; 47 reg = <0x3e000000 0x1000>;
46 clocks = <&uartb_clk>; 48 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB>;
47 interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; 49 interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
48 reg-shift = <2>; 50 reg-shift = <2>;
49 reg-io-width = <4>; 51 reg-io-width = <4>;
@@ -53,7 +55,7 @@
53 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart"; 55 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart";
54 status = "disabled"; 56 status = "disabled";
55 reg = <0x3e001000 0x1000>; 57 reg = <0x3e001000 0x1000>;
56 clocks = <&uartb2_clk>; 58 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB2>;
57 interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>; 59 interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
58 reg-shift = <2>; 60 reg-shift = <2>;
59 reg-io-width = <4>; 61 reg-io-width = <4>;
@@ -63,7 +65,7 @@
63 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart"; 65 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart";
64 status = "disabled"; 66 status = "disabled";
65 reg = <0x3e002000 0x1000>; 67 reg = <0x3e002000 0x1000>;
66 clocks = <&uartb3_clk>; 68 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB3>;
67 interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; 69 interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
68 reg-shift = <2>; 70 reg-shift = <2>;
69 reg-io-width = <4>; 71 reg-io-width = <4>;
@@ -73,7 +75,7 @@
73 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart"; 75 compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart";
74 status = "disabled"; 76 status = "disabled";
75 reg = <0x3e003000 0x1000>; 77 reg = <0x3e003000 0x1000>;
76 clocks = <&uartb4_clk>; 78 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB4>;
77 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>; 79 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
78 reg-shift = <2>; 80 reg-shift = <2>;
79 reg-io-width = <4>; 81 reg-io-width = <4>;
@@ -95,7 +97,7 @@
95 compatible = "brcm,kona-timer"; 97 compatible = "brcm,kona-timer";
96 reg = <0x35006000 0x1000>; 98 reg = <0x35006000 0x1000>;
97 interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; 99 interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
98 clocks = <&hub_timer_clk>; 100 clocks = <&aon_ccu BCM281XX_AON_CCU_HUB_TIMER>;
99 }; 101 };
100 102
101 gpio: gpio@35003000 { 103 gpio: gpio@35003000 {
@@ -118,7 +120,7 @@
118 compatible = "brcm,kona-sdhci"; 120 compatible = "brcm,kona-sdhci";
119 reg = <0x3f180000 0x10000>; 121 reg = <0x3f180000 0x10000>;
120 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; 122 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
121 clocks = <&sdio1_clk>; 123 clocks = <&master_ccu BCM281XX_MASTER_CCU_SDIO1>;
122 status = "disabled"; 124 status = "disabled";
123 }; 125 };
124 126
@@ -126,7 +128,7 @@
126 compatible = "brcm,kona-sdhci"; 128 compatible = "brcm,kona-sdhci";
127 reg = <0x3f190000 0x10000>; 129 reg = <0x3f190000 0x10000>;
128 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; 130 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
129 clocks = <&sdio2_clk>; 131 clocks = <&master_ccu BCM281XX_MASTER_CCU_SDIO2>;
130 status = "disabled"; 132 status = "disabled";
131 }; 133 };
132 134
@@ -134,7 +136,7 @@
134 compatible = "brcm,kona-sdhci"; 136 compatible = "brcm,kona-sdhci";
135 reg = <0x3f1a0000 0x10000>; 137 reg = <0x3f1a0000 0x10000>;
136 interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>; 138 interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
137 clocks = <&sdio3_clk>; 139 clocks = <&master_ccu BCM281XX_MASTER_CCU_SDIO3>;
138 status = "disabled"; 140 status = "disabled";
139 }; 141 };
140 142
@@ -142,7 +144,7 @@
142 compatible = "brcm,kona-sdhci"; 144 compatible = "brcm,kona-sdhci";
143 reg = <0x3f1b0000 0x10000>; 145 reg = <0x3f1b0000 0x10000>;
144 interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; 146 interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
145 clocks = <&sdio4_clk>; 147 clocks = <&master_ccu BCM281XX_MASTER_CCU_SDIO4>;
146 status = "disabled"; 148 status = "disabled";
147 }; 149 };
148 150
@@ -157,7 +159,7 @@
157 interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>; 159 interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
158 #address-cells = <1>; 160 #address-cells = <1>;
159 #size-cells = <0>; 161 #size-cells = <0>;
160 clocks = <&bsc1_clk>; 162 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_BSC1>;
161 status = "disabled"; 163 status = "disabled";
162 }; 164 };
163 165
@@ -167,7 +169,7 @@
167 interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; 169 interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
168 #address-cells = <1>; 170 #address-cells = <1>;
169 #size-cells = <0>; 171 #size-cells = <0>;
170 clocks = <&bsc2_clk>; 172 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_BSC2>;
171 status = "disabled"; 173 status = "disabled";
172 }; 174 };
173 175
@@ -177,7 +179,7 @@
177 interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>; 179 interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
178 #address-cells = <1>; 180 #address-cells = <1>;
179 #size-cells = <0>; 181 #size-cells = <0>;
180 clocks = <&bsc3_clk>; 182 clocks = <&slave_ccu BCM281XX_SLAVE_CCU_BSC3>;
181 status = "disabled"; 183 status = "disabled";
182 }; 184 };
183 185
@@ -187,105 +189,191 @@
187 interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>; 189 interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
188 #address-cells = <1>; 190 #address-cells = <1>;
189 #size-cells = <0>; 191 #size-cells = <0>;
190 clocks = <&pmu_bsc_clk>; 192 clocks = <&aon_ccu BCM281XX_AON_CCU_PMU_BSC>;
191 status = "disabled"; 193 status = "disabled";
192 }; 194 };
193 195
194 clocks { 196 clocks {
195 bsc1_clk: bsc1 { 197 #address-cells = <1>;
196 compatible = "fixed-clock"; 198 #size-cells = <1>;
197 clock-frequency = <13000000>; 199 ranges;
200
201 root_ccu: root_ccu {
202 compatible = "brcm,bcm11351-root-ccu";
203 reg = <0x35001000 0x0f00>;
204 #clock-cells = <1>;
205 clock-output-names = "frac_1m";
206 };
207
208 hub_ccu: hub_ccu {
209 compatible = "brcm,bcm11351-hub-ccu";
210 reg = <0x34000000 0x0f00>;
211 #clock-cells = <1>;
212 clock-output-names = "tmon_1m";
213 };
214
215 aon_ccu: aon_ccu {
216 compatible = "brcm,bcm11351-aon-ccu";
217 reg = <0x35002000 0x0f00>;
218 #clock-cells = <1>;
219 clock-output-names = "hub_timer",
220 "pmu_bsc",
221 "pmu_bsc_var";
222 };
223
224 master_ccu: master_ccu {
225 compatible = "brcm,bcm11351-master-ccu";
226 reg = <0x3f001000 0x0f00>;
227 #clock-cells = <1>;
228 clock-output-names = "sdio1",
229 "sdio2",
230 "sdio3",
231 "sdio4",
232 "usb_ic",
233 "hsic2_48m",
234 "hsic2_12m";
235 };
236
237 slave_ccu: slave_ccu {
238 compatible = "brcm,bcm11351-slave-ccu";
239 reg = <0x3e011000 0x0f00>;
240 #clock-cells = <1>;
241 clock-output-names = "uartb",
242 "uartb2",
243 "uartb3",
244 "uartb4",
245 "ssp0",
246 "ssp2",
247 "bsc1",
248 "bsc2",
249 "bsc3",
250 "pwm";
251 };
252
253 ref_1m_clk: ref_1m {
198 #clock-cells = <0>; 254 #clock-cells = <0>;
255 compatible = "fixed-clock";
256 clock-frequency = <1000000>;
199 }; 257 };
200 258
201 bsc2_clk: bsc2 { 259 ref_32k_clk: ref_32k {
260 #clock-cells = <0>;
202 compatible = "fixed-clock"; 261 compatible = "fixed-clock";
203 clock-frequency = <13000000>; 262 clock-frequency = <32768>;
263 };
264
265 bbl_32k_clk: bbl_32k {
204 #clock-cells = <0>; 266 #clock-cells = <0>;
267 compatible = "fixed-clock";
268 clock-frequency = <32768>;
205 }; 269 };
206 270
207 bsc3_clk: bsc3 { 271 ref_13m_clk: ref_13m {
272 #clock-cells = <0>;
208 compatible = "fixed-clock"; 273 compatible = "fixed-clock";
209 clock-frequency = <13000000>; 274 clock-frequency = <13000000>;
210 #clock-cells = <0>;
211 }; 275 };
212 276
213 pmu_bsc_clk: pmu_bsc { 277 var_13m_clk: var_13m {
278 #clock-cells = <0>;
214 compatible = "fixed-clock"; 279 compatible = "fixed-clock";
215 clock-frequency = <13000000>; 280 clock-frequency = <13000000>;
216 #clock-cells = <0>;
217 }; 281 };
218 282
219 hub_timer_clk: hub_timer { 283 dft_19_5m_clk: dft_19_5m {
220 compatible = "fixed-clock";
221 clock-frequency = <32768>;
222 #clock-cells = <0>; 284 #clock-cells = <0>;
285 compatible = "fixed-clock";
286 clock-frequency = <19500000>;
223 }; 287 };
224 288
225 pwm_clk: pwm { 289 ref_crystal_clk: ref_crystal {
290 #clock-cells = <0>;
226 compatible = "fixed-clock"; 291 compatible = "fixed-clock";
227 clock-frequency = <26000000>; 292 clock-frequency = <26000000>;
228 #clock-cells = <0>;
229 }; 293 };
230 294
231 sdio1_clk: sdio1 { 295 ref_cx40_clk: ref_cx40 {
232 compatible = "fixed-clock";
233 clock-frequency = <48000000>;
234 #clock-cells = <0>; 296 #clock-cells = <0>;
297 compatible = "fixed-clock";
298 clock-frequency = <40000000>;
235 }; 299 };
236 300
237 sdio2_clk: sdio2 { 301 ref_52m_clk: ref_52m {
238 compatible = "fixed-clock";
239 clock-frequency = <48000000>;
240 #clock-cells = <0>; 302 #clock-cells = <0>;
303 compatible = "fixed-clock";
304 clock-frequency = <52000000>;
241 }; 305 };
242 306
243 sdio3_clk: sdio3 { 307 var_52m_clk: var_52m {
244 compatible = "fixed-clock";
245 clock-frequency = <48000000>;
246 #clock-cells = <0>; 308 #clock-cells = <0>;
309 compatible = "fixed-clock";
310 clock-frequency = <52000000>;
247 }; 311 };
248 312
249 sdio4_clk: sdio4 { 313 usb_otg_ahb_clk: usb_otg_ahb {
250 compatible = "fixed-clock"; 314 compatible = "fixed-clock";
251 clock-frequency = <48000000>; 315 clock-frequency = <52000000>;
252 #clock-cells = <0>; 316 #clock-cells = <0>;
253 }; 317 };
254 318
255 tmon_1m_clk: tmon_1m { 319 ref_96m_clk: ref_96m {
256 compatible = "fixed-clock";
257 clock-frequency = <1000000>;
258 #clock-cells = <0>; 320 #clock-cells = <0>;
321 compatible = "fixed-clock";
322 clock-frequency = <96000000>;
259 }; 323 };
260 324
261 uartb_clk: uartb { 325 var_96m_clk: var_96m {
262 compatible = "fixed-clock";
263 clock-frequency = <13000000>;
264 #clock-cells = <0>; 326 #clock-cells = <0>;
327 compatible = "fixed-clock";
328 clock-frequency = <96000000>;
265 }; 329 };
266 330
267 uartb2_clk: uartb2 { 331 ref_104m_clk: ref_104m {
332 #clock-cells = <0>;
268 compatible = "fixed-clock"; 333 compatible = "fixed-clock";
269 clock-frequency = <13000000>; 334 clock-frequency = <104000000>;
335 };
336
337 var_104m_clk: var_104m {
270 #clock-cells = <0>; 338 #clock-cells = <0>;
339 compatible = "fixed-clock";
340 clock-frequency = <104000000>;
271 }; 341 };
272 342
273 uartb3_clk: uartb3 { 343 ref_156m_clk: ref_156m {
344 #clock-cells = <0>;
274 compatible = "fixed-clock"; 345 compatible = "fixed-clock";
275 clock-frequency = <13000000>; 346 clock-frequency = <156000000>;
347 };
348
349 var_156m_clk: var_156m {
276 #clock-cells = <0>; 350 #clock-cells = <0>;
351 compatible = "fixed-clock";
352 clock-frequency = <156000000>;
277 }; 353 };
278 354
279 uartb4_clk: uartb4 { 355 ref_208m_clk: ref_208m {
356 #clock-cells = <0>;
280 compatible = "fixed-clock"; 357 compatible = "fixed-clock";
281 clock-frequency = <13000000>; 358 clock-frequency = <208000000>;
359 };
360
361 var_208m_clk: var_208m {
282 #clock-cells = <0>; 362 #clock-cells = <0>;
363 compatible = "fixed-clock";
364 clock-frequency = <208000000>;
283 }; 365 };
284 366
285 usb_otg_ahb_clk: usb_otg_ahb { 367 ref_312m_clk: ref_312m {
368 #clock-cells = <0>;
286 compatible = "fixed-clock"; 369 compatible = "fixed-clock";
287 clock-frequency = <52000000>; 370 clock-frequency = <312000000>;
371 };
372
373 var_312m_clk: var_312m {
288 #clock-cells = <0>; 374 #clock-cells = <0>;
375 compatible = "fixed-clock";
376 clock-frequency = <312000000>;
289 }; 377 };
290 }; 378 };
291 379
diff --git a/arch/arm/boot/dts/bcm28155-ap.dts b/arch/arm/boot/dts/bcm28155-ap.dts
index 5ff2382a49e4..3604554e752c 100644
--- a/arch/arm/boot/dts/bcm28155-ap.dts
+++ b/arch/arm/boot/dts/bcm28155-ap.dts
@@ -49,11 +49,6 @@
49 clock-frequency = <400000>; 49 clock-frequency = <400000>;
50 }; 50 };
51 51
52 sdio1: sdio@3f180000 {
53 max-frequency = <48000000>;
54 status = "okay";
55 };
56
57 sdio2: sdio@3f190000 { 52 sdio2: sdio@3f190000 {
58 non-removable; 53 non-removable;
59 max-frequency = <48000000>; 54 max-frequency = <48000000>;
diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi
index b021c96d3ba1..b8473c43e888 100644
--- a/arch/arm/boot/dts/bcm2835.dtsi
+++ b/arch/arm/boot/dts/bcm2835.dtsi
@@ -15,39 +15,52 @@
15 #size-cells = <1>; 15 #size-cells = <1>;
16 ranges = <0x7e000000 0x20000000 0x02000000>; 16 ranges = <0x7e000000 0x20000000 0x02000000>;
17 17
18 timer { 18 timer@7e003000 {
19 compatible = "brcm,bcm2835-system-timer"; 19 compatible = "brcm,bcm2835-system-timer";
20 reg = <0x7e003000 0x1000>; 20 reg = <0x7e003000 0x1000>;
21 interrupts = <1 0>, <1 1>, <1 2>, <1 3>; 21 interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
22 clock-frequency = <1000000>; 22 clock-frequency = <1000000>;
23 }; 23 };
24 24
25 intc: interrupt-controller { 25 dma: dma@7e007000 {
26 compatible = "brcm,bcm2835-dma";
27 reg = <0x7e007000 0xf00>;
28 interrupts = <1 16>,
29 <1 17>,
30 <1 18>,
31 <1 19>,
32 <1 20>,
33 <1 21>,
34 <1 22>,
35 <1 23>,
36 <1 24>,
37 <1 25>,
38 <1 26>,
39 <1 27>,
40 <1 28>;
41
42 #dma-cells = <1>;
43 brcm,dma-channel-mask = <0x7f35>;
44 };
45
46 intc: interrupt-controller@7e00b200 {
26 compatible = "brcm,bcm2835-armctrl-ic"; 47 compatible = "brcm,bcm2835-armctrl-ic";
27 reg = <0x7e00b200 0x200>; 48 reg = <0x7e00b200 0x200>;
28 interrupt-controller; 49 interrupt-controller;
29 #interrupt-cells = <2>; 50 #interrupt-cells = <2>;
30 }; 51 };
31 52
32 watchdog { 53 watchdog@7e100000 {
33 compatible = "brcm,bcm2835-pm-wdt"; 54 compatible = "brcm,bcm2835-pm-wdt";
34 reg = <0x7e100000 0x28>; 55 reg = <0x7e100000 0x28>;
35 }; 56 };
36 57
37 rng { 58 rng@7e104000 {
38 compatible = "brcm,bcm2835-rng"; 59 compatible = "brcm,bcm2835-rng";
39 reg = <0x7e104000 0x10>; 60 reg = <0x7e104000 0x10>;
40 }; 61 };
41 62
42 uart@20201000 { 63 gpio: gpio@7e200000 {
43 compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
44 reg = <0x7e201000 0x1000>;
45 interrupts = <2 25>;
46 clock-frequency = <3000000>;
47 arm,primecell-periphid = <0x00241011>;
48 };
49
50 gpio: gpio {
51 compatible = "brcm,bcm2835-gpio"; 64 compatible = "brcm,bcm2835-gpio";
52 reg = <0x7e200000 0xb4>; 65 reg = <0x7e200000 0xb4>;
53 /* 66 /*
@@ -70,7 +83,25 @@
70 #interrupt-cells = <2>; 83 #interrupt-cells = <2>;
71 }; 84 };
72 85
73 spi: spi@20204000 { 86 uart@7e201000 {
87 compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
88 reg = <0x7e201000 0x1000>;
89 interrupts = <2 25>;
90 clock-frequency = <3000000>;
91 arm,primecell-periphid = <0x00241011>;
92 };
93
94 i2s: i2s@7e203000 {
95 compatible = "brcm,bcm2835-i2s";
96 reg = <0x7e203000 0x20>,
97 <0x7e101098 0x02>;
98
99 dmas = <&dma 2>,
100 <&dma 3>;
101 dma-names = "tx", "rx";
102 };
103
104 spi: spi@7e204000 {
74 compatible = "brcm,bcm2835-spi"; 105 compatible = "brcm,bcm2835-spi";
75 reg = <0x7e204000 0x1000>; 106 reg = <0x7e204000 0x1000>;
76 interrupts = <2 22>; 107 interrupts = <2 22>;
@@ -90,7 +121,15 @@
90 status = "disabled"; 121 status = "disabled";
91 }; 122 };
92 123
93 i2c1: i2c@20804000 { 124 sdhci: sdhci@7e300000 {
125 compatible = "brcm,bcm2835-sdhci";
126 reg = <0x7e300000 0x100>;
127 interrupts = <2 30>;
128 clocks = <&clk_mmc>;
129 status = "disabled";
130 };
131
132 i2c1: i2c@7e804000 {
94 compatible = "brcm,bcm2835-i2c"; 133 compatible = "brcm,bcm2835-i2c";
95 reg = <0x7e804000 0x1000>; 134 reg = <0x7e804000 0x1000>;
96 interrupts = <2 21>; 135 interrupts = <2 21>;
@@ -100,19 +139,15 @@
100 status = "disabled"; 139 status = "disabled";
101 }; 140 };
102 141
103 sdhci: sdhci { 142 usb@7e980000 {
104 compatible = "brcm,bcm2835-sdhci";
105 reg = <0x7e300000 0x100>;
106 interrupts = <2 30>;
107 clocks = <&clk_mmc>;
108 status = "disabled";
109 };
110
111 usb {
112 compatible = "brcm,bcm2835-usb"; 143 compatible = "brcm,bcm2835-usb";
113 reg = <0x7e980000 0x10000>; 144 reg = <0x7e980000 0x10000>;
114 interrupts = <1 9>; 145 interrupts = <1 9>;
115 }; 146 };
147
148 arm-pmu {
149 compatible = "arm,arm1176-pmu";
150 };
116 }; 151 };
117 152
118 clocks { 153 clocks {
@@ -120,24 +155,27 @@
120 #address-cells = <1>; 155 #address-cells = <1>;
121 #size-cells = <0>; 156 #size-cells = <0>;
122 157
123 clk_mmc: mmc { 158 clk_mmc: clock@0 {
124 compatible = "fixed-clock"; 159 compatible = "fixed-clock";
125 reg = <0>; 160 reg = <0>;
126 #clock-cells = <0>; 161 #clock-cells = <0>;
162 clock-output-names = "mmc";
127 clock-frequency = <100000000>; 163 clock-frequency = <100000000>;
128 }; 164 };
129 165
130 clk_i2c: i2c { 166 clk_i2c: clock@1 {
131 compatible = "fixed-clock"; 167 compatible = "fixed-clock";
132 reg = <1>; 168 reg = <1>;
133 #clock-cells = <0>; 169 #clock-cells = <0>;
170 clock-output-names = "i2c";
134 clock-frequency = <250000000>; 171 clock-frequency = <250000000>;
135 }; 172 };
136 173
137 clk_spi: spi { 174 clk_spi: clock@2 {
138 compatible = "fixed-clock"; 175 compatible = "fixed-clock";
139 reg = <2>; 176 reg = <2>;
140 #clock-cells = <0>; 177 #clock-cells = <0>;
178 clock-output-names = "spi";
141 clock-frequency = <250000000>; 179 clock-frequency = <250000000>;
142 }; 180 };
143 }; 181 };
diff --git a/arch/arm/boot/dts/bcm4708-netgear-r6250.dts b/arch/arm/boot/dts/bcm4708-netgear-r6250.dts
new file mode 100644
index 000000000000..3b5259de5a38
--- /dev/null
+++ b/arch/arm/boot/dts/bcm4708-netgear-r6250.dts
@@ -0,0 +1,35 @@
1/*
2 * Broadcom BCM470X / BCM5301X arm platform code.
3 * DTS for Netgear R6250 V1
4 *
5 * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de>
6 *
7 * Licensed under the GNU/GPL. See COPYING for details.
8 */
9
10/dts-v1/;
11
12#include "bcm4708.dtsi"
13
14/ {
15 compatible = "netgear,r6250v1", "brcm,bcm4708";
16 model = "Netgear R6250 V1 (BCM4708)";
17
18 chosen {
19 bootargs = "console=ttyS0,115200";
20 };
21
22 memory {
23 reg = <0x00000000 0x08000000>;
24 };
25
26 chipcommonA {
27 uart0: serial@0300 {
28 status = "okay";
29 };
30
31 uart1: serial@0400 {
32 status = "okay";
33 };
34 };
35};
diff --git a/arch/arm/boot/dts/bcm4708.dtsi b/arch/arm/boot/dts/bcm4708.dtsi
new file mode 100644
index 000000000000..31141e83fedd
--- /dev/null
+++ b/arch/arm/boot/dts/bcm4708.dtsi
@@ -0,0 +1,34 @@
1/*
2 * Broadcom BCM470X / BCM5301X ARM platform code.
3 * DTS for BCM4708 SoC.
4 *
5 * Copyright 2013-2014 Hauke Mehrtens <hauke@hauke-m.de>
6 *
7 * Licensed under the GNU/GPL. See COPYING for details.
8 */
9
10#include "bcm5301x.dtsi"
11
12/ {
13 compatible = "brcm,bcm4708";
14
15 cpus {
16 #address-cells = <1>;
17 #size-cells = <0>;
18
19 cpu@0 {
20 device_type = "cpu";
21 compatible = "arm,cortex-a9";
22 next-level-cache = <&L2>;
23 reg = <0x0>;
24 };
25
26 cpu@1 {
27 device_type = "cpu";
28 compatible = "arm,cortex-a9";
29 next-level-cache = <&L2>;
30 reg = <0x1>;
31 };
32 };
33
34};
diff --git a/arch/arm/boot/dts/bcm5301x.dtsi b/arch/arm/boot/dts/bcm5301x.dtsi
new file mode 100644
index 000000000000..53c624f766b4
--- /dev/null
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
@@ -0,0 +1,95 @@
1/*
2 * Broadcom BCM470X / BCM5301X ARM platform code.
3 * Generic DTS part for all BCM53010, BCM53011, BCM53012, BCM53014, BCM53015,
4 * BCM53016, BCM53017, BCM53018, BCM4707, BCM4708 and BCM4709 SoCs
5 *
6 * Copyright 2013-2014 Hauke Mehrtens <hauke@hauke-m.de>
7 *
8 * Licensed under the GNU/GPL. See COPYING for details.
9 */
10
11#include <dt-bindings/interrupt-controller/irq.h>
12#include <dt-bindings/interrupt-controller/arm-gic.h>
13#include "skeleton.dtsi"
14
15/ {
16 interrupt-parent = <&gic>;
17
18 chipcommonA {
19 compatible = "simple-bus";
20 ranges = <0x00000000 0x18000000 0x00001000>;
21 #address-cells = <1>;
22 #size-cells = <1>;
23
24 uart0: serial@0300 {
25 compatible = "ns16550";
26 reg = <0x0300 0x100>;
27 interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
28 clock-frequency = <100000000>;
29 status = "disabled";
30 };
31
32 uart1: serial@0400 {
33 compatible = "ns16550";
34 reg = <0x0400 0x100>;
35 interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
36 clock-frequency = <100000000>;
37 status = "disabled";
38 };
39 };
40
41 mpcore {
42 compatible = "simple-bus";
43 ranges = <0x00000000 0x19020000 0x00003000>;
44 #address-cells = <1>;
45 #size-cells = <1>;
46
47 scu@0000 {
48 compatible = "arm,cortex-a9-scu";
49 reg = <0x0000 0x100>;
50 };
51
52 timer@0200 {
53 compatible = "arm,cortex-a9-global-timer";
54 reg = <0x0200 0x100>;
55 interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
56 clocks = <&clk_periph>;
57 };
58
59 local-timer@0600 {
60 compatible = "arm,cortex-a9-twd-timer";
61 reg = <0x0600 0x100>;
62 interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
63 clocks = <&clk_periph>;
64 };
65
66 gic: interrupt-controller@1000 {
67 compatible = "arm,cortex-a9-gic";
68 #interrupt-cells = <3>;
69 #address-cells = <0>;
70 interrupt-controller;
71 reg = <0x1000 0x1000>,
72 <0x0100 0x100>;
73 };
74
75 L2: cache-controller@2000 {
76 compatible = "arm,pl310-cache";
77 reg = <0x2000 0x1000>;
78 cache-unified;
79 cache-level = <2>;
80 };
81 };
82
83 clocks {
84 #address-cells = <1>;
85 #size-cells = <0>;
86
87 /* As long as we do not have a real clock driver us this
88 * fixed clock */
89 clk_periph: periph {
90 compatible = "fixed-clock";
91 #clock-cells = <0>;
92 clock-frequency = <400000000>;
93 };
94 };
95};
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
index 1fd75aa4639d..9e3caf3d19fb 100644
--- a/arch/arm/boot/dts/dra7.dtsi
+++ b/arch/arm/boot/dts/dra7.dtsi
@@ -47,6 +47,11 @@
47 1000000 1060000 47 1000000 1060000
48 1176000 1160000 48 1176000 1160000
49 >; 49 >;
50
51 clocks = <&dpll_mpu_ck>;
52 clock-names = "cpu";
53
54 clock-latency = <300000>; /* From omap-cpufreq driver */
50 }; 55 };
51 cpu@1 { 56 cpu@1 {
52 device_type = "cpu"; 57 device_type = "cpu";
@@ -464,6 +469,20 @@
464 ti,hwmods = "wd_timer2"; 469 ti,hwmods = "wd_timer2";
465 }; 470 };
466 471
472 hwspinlock: spinlock@4a0f6000 {
473 compatible = "ti,omap4-hwspinlock";
474 reg = <0x4a0f6000 0x1000>;
475 ti,hwmods = "spinlock";
476 #hwlock-cells = <1>;
477 };
478
479 dmm@4e000000 {
480 compatible = "ti,omap5-dmm";
481 reg = <0x4e000000 0x800>;
482 interrupts = <0 113 0x4>;
483 ti,hwmods = "dmm";
484 };
485
467 i2c1: i2c@48070000 { 486 i2c1: i2c@48070000 {
468 compatible = "ti,omap4-i2c"; 487 compatible = "ti,omap4-i2c";
469 reg = <0x48070000 0x100>; 488 reg = <0x48070000 0x100>;
@@ -559,6 +578,138 @@
559 status = "disabled"; 578 status = "disabled";
560 }; 579 };
561 580
581 abb_mpu: regulator-abb-mpu {
582 compatible = "ti,abb-v3";
583 regulator-name = "abb_mpu";
584 #address-cells = <0>;
585 #size-cells = <0>;
586 clocks = <&sys_clkin1>;
587 ti,settling-time = <50>;
588 ti,clock-cycles = <16>;
589
590 reg = <0x4ae07ddc 0x4>, <0x4ae07de0 0x4>,
591 <0x4ae06014 0x4>, <0x4a003b20 0x8>,
592 <0x4ae0c158 0x4>;
593 reg-names = "setup-address", "control-address",
594 "int-address", "efuse-address",
595 "ldo-address";
596 ti,tranxdone-status-mask = <0x80>;
597 /* LDOVBBMPU_FBB_MUX_CTRL */
598 ti,ldovbb-override-mask = <0x400>;
599 /* LDOVBBMPU_FBB_VSET_OUT */
600 ti,ldovbb-vset-mask = <0x1F>;
601
602 /*
603 * NOTE: only FBB mode used but actual vset will
604 * determine final biasing
605 */
606 ti,abb_info = <
607 /*uV ABB efuse rbb_m fbb_m vset_m*/
608 1060000 0 0x0 0 0x02000000 0x01F00000
609 1160000 0 0x4 0 0x02000000 0x01F00000
610 1210000 0 0x8 0 0x02000000 0x01F00000
611 >;
612 };
613
614 abb_ivahd: regulator-abb-ivahd {
615 compatible = "ti,abb-v3";
616 regulator-name = "abb_ivahd";
617 #address-cells = <0>;
618 #size-cells = <0>;
619 clocks = <&sys_clkin1>;
620 ti,settling-time = <50>;
621 ti,clock-cycles = <16>;
622
623 reg = <0x4ae07e34 0x4>, <0x4ae07e24 0x4>,
624 <0x4ae06010 0x4>, <0x4a0025cc 0x8>,
625 <0x4a002470 0x4>;
626 reg-names = "setup-address", "control-address",
627 "int-address", "efuse-address",
628 "ldo-address";
629 ti,tranxdone-status-mask = <0x40000000>;
630 /* LDOVBBIVA_FBB_MUX_CTRL */
631 ti,ldovbb-override-mask = <0x400>;
632 /* LDOVBBIVA_FBB_VSET_OUT */
633 ti,ldovbb-vset-mask = <0x1F>;
634
635 /*
636 * NOTE: only FBB mode used but actual vset will
637 * determine final biasing
638 */
639 ti,abb_info = <
640 /*uV ABB efuse rbb_m fbb_m vset_m*/
641 1055000 0 0x0 0 0x02000000 0x01F00000
642 1150000 0 0x4 0 0x02000000 0x01F00000
643 1250000 0 0x8 0 0x02000000 0x01F00000
644 >;
645 };
646
647 abb_dspeve: regulator-abb-dspeve {
648 compatible = "ti,abb-v3";
649 regulator-name = "abb_dspeve";
650 #address-cells = <0>;
651 #size-cells = <0>;
652 clocks = <&sys_clkin1>;
653 ti,settling-time = <50>;
654 ti,clock-cycles = <16>;
655
656 reg = <0x4ae07e30 0x4>, <0x4ae07e20 0x4>,
657 <0x4ae06010 0x4>, <0x4a0025e0 0x8>,
658 <0x4a00246c 0x4>;
659 reg-names = "setup-address", "control-address",
660 "int-address", "efuse-address",
661 "ldo-address";
662 ti,tranxdone-status-mask = <0x20000000>;
663 /* LDOVBBDSPEVE_FBB_MUX_CTRL */
664 ti,ldovbb-override-mask = <0x400>;
665 /* LDOVBBDSPEVE_FBB_VSET_OUT */
666 ti,ldovbb-vset-mask = <0x1F>;
667
668 /*
669 * NOTE: only FBB mode used but actual vset will
670 * determine final biasing
671 */
672 ti,abb_info = <
673 /*uV ABB efuse rbb_m fbb_m vset_m*/
674 1055000 0 0x0 0 0x02000000 0x01F00000
675 1150000 0 0x4 0 0x02000000 0x01F00000
676 1250000 0 0x8 0 0x02000000 0x01F00000
677 >;
678 };
679
680 abb_gpu: regulator-abb-gpu {
681 compatible = "ti,abb-v3";
682 regulator-name = "abb_gpu";
683 #address-cells = <0>;
684 #size-cells = <0>;
685 clocks = <&sys_clkin1>;
686 ti,settling-time = <50>;
687 ti,clock-cycles = <16>;
688
689 reg = <0x4ae07de4 0x4>, <0x4ae07de8 0x4>,
690 <0x4ae06010 0x4>, <0x4a003b08 0x8>,
691 <0x4ae0c154 0x4>;
692 reg-names = "setup-address", "control-address",
693 "int-address", "efuse-address",
694 "ldo-address";
695 ti,tranxdone-status-mask = <0x10000000>;
696 /* LDOVBBGPU_FBB_MUX_CTRL */
697 ti,ldovbb-override-mask = <0x400>;
698 /* LDOVBBGPU_FBB_VSET_OUT */
699 ti,ldovbb-vset-mask = <0x1F>;
700
701 /*
702 * NOTE: only FBB mode used but actual vset will
703 * determine final biasing
704 */
705 ti,abb_info = <
706 /*uV ABB efuse rbb_m fbb_m vset_m*/
707 1090000 0 0x0 0 0x02000000 0x01F00000
708 1210000 0 0x4 0 0x02000000 0x01F00000
709 1280000 0 0x8 0 0x02000000 0x01F00000
710 >;
711 };
712
562 mcspi1: spi@48098000 { 713 mcspi1: spi@48098000 {
563 compatible = "ti,omap4-mcspi"; 714 compatible = "ti,omap4-mcspi";
564 reg = <0x48098000 0x200>; 715 reg = <0x48098000 0x200>;
diff --git a/arch/arm/boot/dts/efm32gg-dk3750.dts b/arch/arm/boot/dts/efm32gg-dk3750.dts
index aa5c0f6363d6..b4031fa4a567 100644
--- a/arch/arm/boot/dts/efm32gg-dk3750.dts
+++ b/arch/arm/boot/dts/efm32gg-dk3750.dts
@@ -26,7 +26,7 @@
26 }; 26 };
27 27
28 i2c@4000a000 { 28 i2c@4000a000 {
29 location = <3>; 29 efm32,location = <3>;
30 status = "ok"; 30 status = "ok";
31 31
32 temp@48 { 32 temp@48 {
diff --git a/arch/arm/boot/dts/efm32gg.dtsi b/arch/arm/boot/dts/efm32gg.dtsi
index a342ab0e6e4f..106d505c5d3d 100644
--- a/arch/arm/boot/dts/efm32gg.dtsi
+++ b/arch/arm/boot/dts/efm32gg.dtsi
@@ -84,7 +84,7 @@
84 status = "disabled"; 84 status = "disabled";
85 }; 85 };
86 86
87 spi2: spi@40x4000c800 { /* USART2 */ 87 spi2: spi@4000c800 { /* USART2 */
88 #address-cells = <1>; 88 #address-cells = <1>;
89 #size-cells = <0>; 89 #size-cells = <0>;
90 compatible = "efm32,spi"; 90 compatible = "efm32,spi";
@@ -110,7 +110,7 @@
110 status = "disabled"; 110 status = "disabled";
111 }; 111 };
112 112
113 uart2: uart@40x4000c800 { /* USART2 */ 113 uart2: uart@4000c800 { /* USART2 */
114 compatible = "efm32,uart"; 114 compatible = "efm32,uart";
115 reg = <0x4000c800 0x400>; 115 reg = <0x4000c800 0x400>;
116 interrupts = <18 19>; 116 interrupts = <18 19>;
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index 08452e183b57..28b5ec79f339 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -19,6 +19,7 @@
19 * published by the Free Software Foundation. 19 * published by the Free Software Foundation.
20 */ 20 */
21 21
22#include <dt-bindings/clock/exynos4.h>
22#include "skeleton.dtsi" 23#include "skeleton.dtsi"
23 24
24/ { 25/ {
@@ -119,7 +120,7 @@
119 compatible = "samsung,exynos4210-fimc"; 120 compatible = "samsung,exynos4210-fimc";
120 reg = <0x11800000 0x1000>; 121 reg = <0x11800000 0x1000>;
121 interrupts = <0 84 0>; 122 interrupts = <0 84 0>;
122 clocks = <&clock 256>, <&clock 128>; 123 clocks = <&clock CLK_FIMC0>, <&clock CLK_SCLK_FIMC0>;
123 clock-names = "fimc", "sclk_fimc"; 124 clock-names = "fimc", "sclk_fimc";
124 samsung,power-domain = <&pd_cam>; 125 samsung,power-domain = <&pd_cam>;
125 samsung,sysreg = <&sys_reg>; 126 samsung,sysreg = <&sys_reg>;
@@ -130,7 +131,7 @@
130 compatible = "samsung,exynos4210-fimc"; 131 compatible = "samsung,exynos4210-fimc";
131 reg = <0x11810000 0x1000>; 132 reg = <0x11810000 0x1000>;
132 interrupts = <0 85 0>; 133 interrupts = <0 85 0>;
133 clocks = <&clock 257>, <&clock 129>; 134 clocks = <&clock CLK_FIMC1>, <&clock CLK_SCLK_FIMC1>;
134 clock-names = "fimc", "sclk_fimc"; 135 clock-names = "fimc", "sclk_fimc";
135 samsung,power-domain = <&pd_cam>; 136 samsung,power-domain = <&pd_cam>;
136 samsung,sysreg = <&sys_reg>; 137 samsung,sysreg = <&sys_reg>;
@@ -141,7 +142,7 @@
141 compatible = "samsung,exynos4210-fimc"; 142 compatible = "samsung,exynos4210-fimc";
142 reg = <0x11820000 0x1000>; 143 reg = <0x11820000 0x1000>;
143 interrupts = <0 86 0>; 144 interrupts = <0 86 0>;
144 clocks = <&clock 258>, <&clock 130>; 145 clocks = <&clock CLK_FIMC2>, <&clock CLK_SCLK_FIMC2>;
145 clock-names = "fimc", "sclk_fimc"; 146 clock-names = "fimc", "sclk_fimc";
146 samsung,power-domain = <&pd_cam>; 147 samsung,power-domain = <&pd_cam>;
147 samsung,sysreg = <&sys_reg>; 148 samsung,sysreg = <&sys_reg>;
@@ -152,7 +153,7 @@
152 compatible = "samsung,exynos4210-fimc"; 153 compatible = "samsung,exynos4210-fimc";
153 reg = <0x11830000 0x1000>; 154 reg = <0x11830000 0x1000>;
154 interrupts = <0 87 0>; 155 interrupts = <0 87 0>;
155 clocks = <&clock 259>, <&clock 131>; 156 clocks = <&clock CLK_FIMC3>, <&clock CLK_SCLK_FIMC3>;
156 clock-names = "fimc", "sclk_fimc"; 157 clock-names = "fimc", "sclk_fimc";
157 samsung,power-domain = <&pd_cam>; 158 samsung,power-domain = <&pd_cam>;
158 samsung,sysreg = <&sys_reg>; 159 samsung,sysreg = <&sys_reg>;
@@ -163,7 +164,7 @@
163 compatible = "samsung,exynos4210-csis"; 164 compatible = "samsung,exynos4210-csis";
164 reg = <0x11880000 0x4000>; 165 reg = <0x11880000 0x4000>;
165 interrupts = <0 78 0>; 166 interrupts = <0 78 0>;
166 clocks = <&clock 260>, <&clock 134>; 167 clocks = <&clock CLK_CSIS0>, <&clock CLK_SCLK_CSIS0>;
167 clock-names = "csis", "sclk_csis"; 168 clock-names = "csis", "sclk_csis";
168 bus-width = <4>; 169 bus-width = <4>;
169 samsung,power-domain = <&pd_cam>; 170 samsung,power-domain = <&pd_cam>;
@@ -178,7 +179,7 @@
178 compatible = "samsung,exynos4210-csis"; 179 compatible = "samsung,exynos4210-csis";
179 reg = <0x11890000 0x4000>; 180 reg = <0x11890000 0x4000>;
180 interrupts = <0 80 0>; 181 interrupts = <0 80 0>;
181 clocks = <&clock 261>, <&clock 135>; 182 clocks = <&clock CLK_CSIS1>, <&clock CLK_SCLK_CSIS1>;
182 clock-names = "csis", "sclk_csis"; 183 clock-names = "csis", "sclk_csis";
183 bus-width = <2>; 184 bus-width = <2>;
184 samsung,power-domain = <&pd_cam>; 185 samsung,power-domain = <&pd_cam>;
@@ -194,7 +195,7 @@
194 compatible = "samsung,s3c2410-wdt"; 195 compatible = "samsung,s3c2410-wdt";
195 reg = <0x10060000 0x100>; 196 reg = <0x10060000 0x100>;
196 interrupts = <0 43 0>; 197 interrupts = <0 43 0>;
197 clocks = <&clock 345>; 198 clocks = <&clock CLK_WDT>;
198 clock-names = "watchdog"; 199 clock-names = "watchdog";
199 status = "disabled"; 200 status = "disabled";
200 }; 201 };
@@ -203,7 +204,7 @@
203 compatible = "samsung,s3c6410-rtc"; 204 compatible = "samsung,s3c6410-rtc";
204 reg = <0x10070000 0x100>; 205 reg = <0x10070000 0x100>;
205 interrupts = <0 44 0>, <0 45 0>; 206 interrupts = <0 44 0>, <0 45 0>;
206 clocks = <&clock 346>; 207 clocks = <&clock CLK_RTC>;
207 clock-names = "rtc"; 208 clock-names = "rtc";
208 status = "disabled"; 209 status = "disabled";
209 }; 210 };
@@ -212,7 +213,7 @@
212 compatible = "samsung,s5pv210-keypad"; 213 compatible = "samsung,s5pv210-keypad";
213 reg = <0x100A0000 0x100>; 214 reg = <0x100A0000 0x100>;
214 interrupts = <0 109 0>; 215 interrupts = <0 109 0>;
215 clocks = <&clock 347>; 216 clocks = <&clock CLK_KEYIF>;
216 clock-names = "keypad"; 217 clock-names = "keypad";
217 status = "disabled"; 218 status = "disabled";
218 }; 219 };
@@ -221,7 +222,7 @@
221 compatible = "samsung,exynos4210-sdhci"; 222 compatible = "samsung,exynos4210-sdhci";
222 reg = <0x12510000 0x100>; 223 reg = <0x12510000 0x100>;
223 interrupts = <0 73 0>; 224 interrupts = <0 73 0>;
224 clocks = <&clock 297>, <&clock 145>; 225 clocks = <&clock CLK_SDMMC0>, <&clock CLK_SCLK_MMC0>;
225 clock-names = "hsmmc", "mmc_busclk.2"; 226 clock-names = "hsmmc", "mmc_busclk.2";
226 status = "disabled"; 227 status = "disabled";
227 }; 228 };
@@ -230,7 +231,7 @@
230 compatible = "samsung,exynos4210-sdhci"; 231 compatible = "samsung,exynos4210-sdhci";
231 reg = <0x12520000 0x100>; 232 reg = <0x12520000 0x100>;
232 interrupts = <0 74 0>; 233 interrupts = <0 74 0>;
233 clocks = <&clock 298>, <&clock 146>; 234 clocks = <&clock CLK_SDMMC1>, <&clock CLK_SCLK_MMC1>;
234 clock-names = "hsmmc", "mmc_busclk.2"; 235 clock-names = "hsmmc", "mmc_busclk.2";
235 status = "disabled"; 236 status = "disabled";
236 }; 237 };
@@ -239,7 +240,7 @@
239 compatible = "samsung,exynos4210-sdhci"; 240 compatible = "samsung,exynos4210-sdhci";
240 reg = <0x12530000 0x100>; 241 reg = <0x12530000 0x100>;
241 interrupts = <0 75 0>; 242 interrupts = <0 75 0>;
242 clocks = <&clock 299>, <&clock 147>; 243 clocks = <&clock CLK_SDMMC2>, <&clock CLK_SCLK_MMC2>;
243 clock-names = "hsmmc", "mmc_busclk.2"; 244 clock-names = "hsmmc", "mmc_busclk.2";
244 status = "disabled"; 245 status = "disabled";
245 }; 246 };
@@ -248,7 +249,7 @@
248 compatible = "samsung,exynos4210-sdhci"; 249 compatible = "samsung,exynos4210-sdhci";
249 reg = <0x12540000 0x100>; 250 reg = <0x12540000 0x100>;
250 interrupts = <0 76 0>; 251 interrupts = <0 76 0>;
251 clocks = <&clock 300>, <&clock 148>; 252 clocks = <&clock CLK_SDMMC3>, <&clock CLK_SCLK_MMC3>;
252 clock-names = "hsmmc", "mmc_busclk.2"; 253 clock-names = "hsmmc", "mmc_busclk.2";
253 status = "disabled"; 254 status = "disabled";
254 }; 255 };
@@ -257,7 +258,7 @@
257 compatible = "samsung,exynos4210-ehci"; 258 compatible = "samsung,exynos4210-ehci";
258 reg = <0x12580000 0x100>; 259 reg = <0x12580000 0x100>;
259 interrupts = <0 70 0>; 260 interrupts = <0 70 0>;
260 clocks = <&clock 304>; 261 clocks = <&clock CLK_USB_HOST>;
261 clock-names = "usbhost"; 262 clock-names = "usbhost";
262 status = "disabled"; 263 status = "disabled";
263 }; 264 };
@@ -266,7 +267,7 @@
266 compatible = "samsung,exynos4210-ohci"; 267 compatible = "samsung,exynos4210-ohci";
267 reg = <0x12590000 0x100>; 268 reg = <0x12590000 0x100>;
268 interrupts = <0 70 0>; 269 interrupts = <0 70 0>;
269 clocks = <&clock 304>; 270 clocks = <&clock CLK_USB_HOST>;
270 clock-names = "usbhost"; 271 clock-names = "usbhost";
271 status = "disabled"; 272 status = "disabled";
272 }; 273 };
@@ -276,7 +277,7 @@
276 reg = <0x13400000 0x10000>; 277 reg = <0x13400000 0x10000>;
277 interrupts = <0 94 0>; 278 interrupts = <0 94 0>;
278 samsung,power-domain = <&pd_mfc>; 279 samsung,power-domain = <&pd_mfc>;
279 clocks = <&clock 273>; 280 clocks = <&clock CLK_MFC>;
280 clock-names = "mfc"; 281 clock-names = "mfc";
281 status = "disabled"; 282 status = "disabled";
282 }; 283 };
@@ -285,7 +286,7 @@
285 compatible = "samsung,exynos4210-uart"; 286 compatible = "samsung,exynos4210-uart";
286 reg = <0x13800000 0x100>; 287 reg = <0x13800000 0x100>;
287 interrupts = <0 52 0>; 288 interrupts = <0 52 0>;
288 clocks = <&clock 312>, <&clock 151>; 289 clocks = <&clock CLK_UART0>, <&clock CLK_SCLK_UART0>;
289 clock-names = "uart", "clk_uart_baud0"; 290 clock-names = "uart", "clk_uart_baud0";
290 status = "disabled"; 291 status = "disabled";
291 }; 292 };
@@ -294,7 +295,7 @@
294 compatible = "samsung,exynos4210-uart"; 295 compatible = "samsung,exynos4210-uart";
295 reg = <0x13810000 0x100>; 296 reg = <0x13810000 0x100>;
296 interrupts = <0 53 0>; 297 interrupts = <0 53 0>;
297 clocks = <&clock 313>, <&clock 152>; 298 clocks = <&clock CLK_UART1>, <&clock CLK_SCLK_UART1>;
298 clock-names = "uart", "clk_uart_baud0"; 299 clock-names = "uart", "clk_uart_baud0";
299 status = "disabled"; 300 status = "disabled";
300 }; 301 };
@@ -303,7 +304,7 @@
303 compatible = "samsung,exynos4210-uart"; 304 compatible = "samsung,exynos4210-uart";
304 reg = <0x13820000 0x100>; 305 reg = <0x13820000 0x100>;
305 interrupts = <0 54 0>; 306 interrupts = <0 54 0>;
306 clocks = <&clock 314>, <&clock 153>; 307 clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
307 clock-names = "uart", "clk_uart_baud0"; 308 clock-names = "uart", "clk_uart_baud0";
308 status = "disabled"; 309 status = "disabled";
309 }; 310 };
@@ -312,7 +313,7 @@
312 compatible = "samsung,exynos4210-uart"; 313 compatible = "samsung,exynos4210-uart";
313 reg = <0x13830000 0x100>; 314 reg = <0x13830000 0x100>;
314 interrupts = <0 55 0>; 315 interrupts = <0 55 0>;
315 clocks = <&clock 315>, <&clock 154>; 316 clocks = <&clock CLK_UART3>, <&clock CLK_SCLK_UART3>;
316 clock-names = "uart", "clk_uart_baud0"; 317 clock-names = "uart", "clk_uart_baud0";
317 status = "disabled"; 318 status = "disabled";
318 }; 319 };
@@ -323,7 +324,7 @@
323 compatible = "samsung,s3c2440-i2c"; 324 compatible = "samsung,s3c2440-i2c";
324 reg = <0x13860000 0x100>; 325 reg = <0x13860000 0x100>;
325 interrupts = <0 58 0>; 326 interrupts = <0 58 0>;
326 clocks = <&clock 317>; 327 clocks = <&clock CLK_I2C0>;
327 clock-names = "i2c"; 328 clock-names = "i2c";
328 pinctrl-names = "default"; 329 pinctrl-names = "default";
329 pinctrl-0 = <&i2c0_bus>; 330 pinctrl-0 = <&i2c0_bus>;
@@ -336,7 +337,7 @@
336 compatible = "samsung,s3c2440-i2c"; 337 compatible = "samsung,s3c2440-i2c";
337 reg = <0x13870000 0x100>; 338 reg = <0x13870000 0x100>;
338 interrupts = <0 59 0>; 339 interrupts = <0 59 0>;
339 clocks = <&clock 318>; 340 clocks = <&clock CLK_I2C1>;
340 clock-names = "i2c"; 341 clock-names = "i2c";
341 pinctrl-names = "default"; 342 pinctrl-names = "default";
342 pinctrl-0 = <&i2c1_bus>; 343 pinctrl-0 = <&i2c1_bus>;
@@ -349,7 +350,7 @@
349 compatible = "samsung,s3c2440-i2c"; 350 compatible = "samsung,s3c2440-i2c";
350 reg = <0x13880000 0x100>; 351 reg = <0x13880000 0x100>;
351 interrupts = <0 60 0>; 352 interrupts = <0 60 0>;
352 clocks = <&clock 319>; 353 clocks = <&clock CLK_I2C2>;
353 clock-names = "i2c"; 354 clock-names = "i2c";
354 status = "disabled"; 355 status = "disabled";
355 }; 356 };
@@ -360,7 +361,7 @@
360 compatible = "samsung,s3c2440-i2c"; 361 compatible = "samsung,s3c2440-i2c";
361 reg = <0x13890000 0x100>; 362 reg = <0x13890000 0x100>;
362 interrupts = <0 61 0>; 363 interrupts = <0 61 0>;
363 clocks = <&clock 320>; 364 clocks = <&clock CLK_I2C3>;
364 clock-names = "i2c"; 365 clock-names = "i2c";
365 status = "disabled"; 366 status = "disabled";
366 }; 367 };
@@ -371,7 +372,7 @@
371 compatible = "samsung,s3c2440-i2c"; 372 compatible = "samsung,s3c2440-i2c";
372 reg = <0x138A0000 0x100>; 373 reg = <0x138A0000 0x100>;
373 interrupts = <0 62 0>; 374 interrupts = <0 62 0>;
374 clocks = <&clock 321>; 375 clocks = <&clock CLK_I2C4>;
375 clock-names = "i2c"; 376 clock-names = "i2c";
376 status = "disabled"; 377 status = "disabled";
377 }; 378 };
@@ -382,7 +383,7 @@
382 compatible = "samsung,s3c2440-i2c"; 383 compatible = "samsung,s3c2440-i2c";
383 reg = <0x138B0000 0x100>; 384 reg = <0x138B0000 0x100>;
384 interrupts = <0 63 0>; 385 interrupts = <0 63 0>;
385 clocks = <&clock 322>; 386 clocks = <&clock CLK_I2C5>;
386 clock-names = "i2c"; 387 clock-names = "i2c";
387 status = "disabled"; 388 status = "disabled";
388 }; 389 };
@@ -393,7 +394,7 @@
393 compatible = "samsung,s3c2440-i2c"; 394 compatible = "samsung,s3c2440-i2c";
394 reg = <0x138C0000 0x100>; 395 reg = <0x138C0000 0x100>;
395 interrupts = <0 64 0>; 396 interrupts = <0 64 0>;
396 clocks = <&clock 323>; 397 clocks = <&clock CLK_I2C6>;
397 clock-names = "i2c"; 398 clock-names = "i2c";
398 status = "disabled"; 399 status = "disabled";
399 }; 400 };
@@ -404,7 +405,7 @@
404 compatible = "samsung,s3c2440-i2c"; 405 compatible = "samsung,s3c2440-i2c";
405 reg = <0x138D0000 0x100>; 406 reg = <0x138D0000 0x100>;
406 interrupts = <0 65 0>; 407 interrupts = <0 65 0>;
407 clocks = <&clock 324>; 408 clocks = <&clock CLK_I2C7>;
408 clock-names = "i2c"; 409 clock-names = "i2c";
409 status = "disabled"; 410 status = "disabled";
410 }; 411 };
@@ -417,7 +418,7 @@
417 dma-names = "tx", "rx"; 418 dma-names = "tx", "rx";
418 #address-cells = <1>; 419 #address-cells = <1>;
419 #size-cells = <0>; 420 #size-cells = <0>;
420 clocks = <&clock 327>, <&clock 159>; 421 clocks = <&clock CLK_SPI0>, <&clock CLK_SCLK_SPI0>;
421 clock-names = "spi", "spi_busclk0"; 422 clock-names = "spi", "spi_busclk0";
422 pinctrl-names = "default"; 423 pinctrl-names = "default";
423 pinctrl-0 = <&spi0_bus>; 424 pinctrl-0 = <&spi0_bus>;
@@ -432,7 +433,7 @@
432 dma-names = "tx", "rx"; 433 dma-names = "tx", "rx";
433 #address-cells = <1>; 434 #address-cells = <1>;
434 #size-cells = <0>; 435 #size-cells = <0>;
435 clocks = <&clock 328>, <&clock 160>; 436 clocks = <&clock CLK_SPI1>, <&clock CLK_SCLK_SPI1>;
436 clock-names = "spi", "spi_busclk0"; 437 clock-names = "spi", "spi_busclk0";
437 pinctrl-names = "default"; 438 pinctrl-names = "default";
438 pinctrl-0 = <&spi1_bus>; 439 pinctrl-0 = <&spi1_bus>;
@@ -447,7 +448,7 @@
447 dma-names = "tx", "rx"; 448 dma-names = "tx", "rx";
448 #address-cells = <1>; 449 #address-cells = <1>;
449 #size-cells = <0>; 450 #size-cells = <0>;
450 clocks = <&clock 329>, <&clock 161>; 451 clocks = <&clock CLK_SPI2>, <&clock CLK_SCLK_SPI2>;
451 clock-names = "spi", "spi_busclk0"; 452 clock-names = "spi", "spi_busclk0";
452 pinctrl-names = "default"; 453 pinctrl-names = "default";
453 pinctrl-0 = <&spi2_bus>; 454 pinctrl-0 = <&spi2_bus>;
@@ -458,7 +459,7 @@
458 compatible = "samsung,exynos4210-pwm"; 459 compatible = "samsung,exynos4210-pwm";
459 reg = <0x139D0000 0x1000>; 460 reg = <0x139D0000 0x1000>;
460 interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>; 461 interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>;
461 clocks = <&clock 336>; 462 clocks = <&clock CLK_PWM>;
462 clock-names = "timers"; 463 clock-names = "timers";
463 #pwm-cells = <2>; 464 #pwm-cells = <2>;
464 status = "disabled"; 465 status = "disabled";
@@ -475,7 +476,7 @@
475 compatible = "arm,pl330", "arm,primecell"; 476 compatible = "arm,pl330", "arm,primecell";
476 reg = <0x12680000 0x1000>; 477 reg = <0x12680000 0x1000>;
477 interrupts = <0 35 0>; 478 interrupts = <0 35 0>;
478 clocks = <&clock 292>; 479 clocks = <&clock CLK_PDMA0>;
479 clock-names = "apb_pclk"; 480 clock-names = "apb_pclk";
480 #dma-cells = <1>; 481 #dma-cells = <1>;
481 #dma-channels = <8>; 482 #dma-channels = <8>;
@@ -486,7 +487,7 @@
486 compatible = "arm,pl330", "arm,primecell"; 487 compatible = "arm,pl330", "arm,primecell";
487 reg = <0x12690000 0x1000>; 488 reg = <0x12690000 0x1000>;
488 interrupts = <0 36 0>; 489 interrupts = <0 36 0>;
489 clocks = <&clock 293>; 490 clocks = <&clock CLK_PDMA1>;
490 clock-names = "apb_pclk"; 491 clock-names = "apb_pclk";
491 #dma-cells = <1>; 492 #dma-cells = <1>;
492 #dma-channels = <8>; 493 #dma-channels = <8>;
@@ -497,7 +498,7 @@
497 compatible = "arm,pl330", "arm,primecell"; 498 compatible = "arm,pl330", "arm,primecell";
498 reg = <0x12850000 0x1000>; 499 reg = <0x12850000 0x1000>;
499 interrupts = <0 34 0>; 500 interrupts = <0 34 0>;
500 clocks = <&clock 279>; 501 clocks = <&clock CLK_MDMA>;
501 clock-names = "apb_pclk"; 502 clock-names = "apb_pclk";
502 #dma-cells = <1>; 503 #dma-cells = <1>;
503 #dma-channels = <8>; 504 #dma-channels = <8>;
@@ -511,7 +512,7 @@
511 reg = <0x11c00000 0x20000>; 512 reg = <0x11c00000 0x20000>;
512 interrupt-names = "fifo", "vsync", "lcd_sys"; 513 interrupt-names = "fifo", "vsync", "lcd_sys";
513 interrupts = <11 0>, <11 1>, <11 2>; 514 interrupts = <11 0>, <11 1>, <11 2>;
514 clocks = <&clock 140>, <&clock 283>; 515 clocks = <&clock CLK_SCLK_FIMD0>, <&clock CLK_FIMD0>;
515 clock-names = "sclk_fimd", "fimd"; 516 clock-names = "sclk_fimd", "fimd";
516 samsung,power-domain = <&pd_lcd0>; 517 samsung,power-domain = <&pd_lcd0>;
517 status = "disabled"; 518 status = "disabled";
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 48ecd7a755ab..cb0e768dc6d4 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -53,7 +53,7 @@
53 reg = <0x10050000 0x800>; 53 reg = <0x10050000 0x800>;
54 interrupt-parent = <&mct_map>; 54 interrupt-parent = <&mct_map>;
55 interrupts = <0>, <1>, <2>, <3>, <4>, <5>; 55 interrupts = <0>, <1>, <2>, <3>, <4>, <5>;
56 clocks = <&clock 3>, <&clock 344>; 56 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
57 clock-names = "fin_pll", "mct"; 57 clock-names = "fin_pll", "mct";
58 58
59 mct_map: mct-map { 59 mct_map: mct-map {
@@ -109,7 +109,7 @@
109 interrupt-parent = <&combiner>; 109 interrupt-parent = <&combiner>;
110 reg = <0x100C0000 0x100>; 110 reg = <0x100C0000 0x100>;
111 interrupts = <2 4>; 111 interrupts = <2 4>;
112 clocks = <&clock 383>; 112 clocks = <&clock CLK_TMU_APBIF>;
113 clock-names = "tmu_apbif"; 113 clock-names = "tmu_apbif";
114 status = "disabled"; 114 status = "disabled";
115 }; 115 };
@@ -118,13 +118,14 @@
118 compatible = "samsung,s5pv210-g2d"; 118 compatible = "samsung,s5pv210-g2d";
119 reg = <0x12800000 0x1000>; 119 reg = <0x12800000 0x1000>;
120 interrupts = <0 89 0>; 120 interrupts = <0 89 0>;
121 clocks = <&clock 177>, <&clock 277>; 121 clocks = <&clock CLK_SCLK_FIMG2D>, <&clock CLK_G2D>;
122 clock-names = "sclk_fimg2d", "fimg2d"; 122 clock-names = "sclk_fimg2d", "fimg2d";
123 status = "disabled"; 123 status = "disabled";
124 }; 124 };
125 125
126 camera { 126 camera {
127 clocks = <&clock 132>, <&clock 133>, <&clock 351>, <&clock 352>; 127 clocks = <&clock CLK_SCLK_CAM0>, <&clock CLK_SCLK_CAM1>,
128 <&clock CLK_PIXELASYNCM0>, <&clock CLK_PIXELASYNCM1>;
128 clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1"; 129 clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1";
129 130
130 fimc_0: fimc@11800000 { 131 fimc_0: fimc@11800000 {
diff --git a/arch/arm/boot/dts/exynos4412-odroidx.dts b/arch/arm/boot/dts/exynos4412-odroidx.dts
index 9804fcb71f8c..12459b01cca3 100644
--- a/arch/arm/boot/dts/exynos4412-odroidx.dts
+++ b/arch/arm/boot/dts/exynos4412-odroidx.dts
@@ -251,7 +251,7 @@
251 buck2_reg: BUCK2 { 251 buck2_reg: BUCK2 {
252 regulator-name = "vdd_arm"; 252 regulator-name = "vdd_arm";
253 regulator-min-microvolt = <900000>; 253 regulator-min-microvolt = <900000>;
254 regulator-max-microvolt = <1300000>; 254 regulator-max-microvolt = <1350000>;
255 regulator-always-on; 255 regulator-always-on;
256 regulator-boot-on; 256 regulator-boot-on;
257 }; 257 };
diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts
index 6bc053924e9e..388f03579661 100644
--- a/arch/arm/boot/dts/exynos4412-origen.dts
+++ b/arch/arm/boot/dts/exynos4412-origen.dts
@@ -459,8 +459,8 @@
459 459
460 buck2_reg: BUCK2 { 460 buck2_reg: BUCK2 {
461 regulator-name = "vdd_arm"; 461 regulator-name = "vdd_arm";
462 regulator-min-microvolt = <925000>; 462 regulator-min-microvolt = <900000>;
463 regulator-max-microvolt = <1300000>; 463 regulator-max-microvolt = <1350000>;
464 regulator-always-on; 464 regulator-always-on;
465 regulator-boot-on; 465 regulator-boot-on;
466 op_mode = <1>; /* Normal Mode */ 466 op_mode = <1>; /* Normal Mode */
diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
index 5c412aa14738..e0eb6bb64c34 100644
--- a/arch/arm/boot/dts/exynos4x12.dtsi
+++ b/arch/arm/boot/dts/exynos4x12.dtsi
@@ -47,7 +47,7 @@
47 reg = <0x10050000 0x800>; 47 reg = <0x10050000 0x800>;
48 interrupt-parent = <&mct_map>; 48 interrupt-parent = <&mct_map>;
49 interrupts = <0>, <1>, <2>, <3>, <4>; 49 interrupts = <0>, <1>, <2>, <3>, <4>;
50 clocks = <&clock 3>, <&clock 344>; 50 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
51 clock-names = "fin_pll", "mct"; 51 clock-names = "fin_pll", "mct";
52 52
53 mct_map: mct-map { 53 mct_map: mct-map {
@@ -97,13 +97,14 @@
97 compatible = "samsung,exynos4212-g2d"; 97 compatible = "samsung,exynos4212-g2d";
98 reg = <0x10800000 0x1000>; 98 reg = <0x10800000 0x1000>;
99 interrupts = <0 89 0>; 99 interrupts = <0 89 0>;
100 clocks = <&clock 177>, <&clock 277>; 100 clocks = <&clock CLK_SCLK_FIMG2D>, <&clock CLK_G2D>;
101 clock-names = "sclk_fimg2d", "fimg2d"; 101 clock-names = "sclk_fimg2d", "fimg2d";
102 status = "disabled"; 102 status = "disabled";
103 }; 103 };
104 104
105 camera { 105 camera {
106 clocks = <&clock 132>, <&clock 133>, <&clock 351>, <&clock 352>; 106 clocks = <&clock CLK_SCLK_CAM0>, <&clock CLK_SCLK_CAM1>,
107 <&clock CLK_PIXELASYNCM0>, <&clock CLK_PIXELASYNCM1>;
107 clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1"; 108 clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1";
108 109
109 fimc_0: fimc@11800000 { 110 fimc_0: fimc@11800000 {
@@ -145,7 +146,7 @@
145 reg = <0x12390000 0x1000>; 146 reg = <0x12390000 0x1000>;
146 interrupts = <0 105 0>; 147 interrupts = <0 105 0>;
147 samsung,power-domain = <&pd_isp>; 148 samsung,power-domain = <&pd_isp>;
148 clocks = <&clock 353>; 149 clocks = <&clock CLK_FIMC_LITE0>;
149 clock-names = "flite"; 150 clock-names = "flite";
150 status = "disabled"; 151 status = "disabled";
151 }; 152 };
@@ -155,7 +156,7 @@
155 reg = <0x123A0000 0x1000>; 156 reg = <0x123A0000 0x1000>;
156 interrupts = <0 106 0>; 157 interrupts = <0 106 0>;
157 samsung,power-domain = <&pd_isp>; 158 samsung,power-domain = <&pd_isp>;
158 clocks = <&clock 354>; 159 clocks = <&clock CLK_FIMC_LITE1>;
159 clock-names = "flite"; 160 clock-names = "flite";
160 status = "disabled"; 161 status = "disabled";
161 }; 162 };
@@ -165,12 +166,19 @@
165 reg = <0x12000000 0x260000>; 166 reg = <0x12000000 0x260000>;
166 interrupts = <0 90 0>, <0 95 0>; 167 interrupts = <0 90 0>, <0 95 0>;
167 samsung,power-domain = <&pd_isp>; 168 samsung,power-domain = <&pd_isp>;
168 clocks = <&clock 353>, <&clock 354>, <&clock 355>, 169 clocks = <&clock CLK_FIMC_LITE0>,
169 <&clock 356>, <&clock 17>, <&clock 357>, 170 <&clock CLK_FIMC_LITE1>, <&clock CLK_PPMUISPX>,
170 <&clock 358>, <&clock 359>, <&clock 360>, 171 <&clock CLK_PPMUISPMX>,
171 <&clock 450>,<&clock 451>, <&clock 452>, 172 <&clock CLK_MOUT_MPLL_USER_T>,
172 <&clock 453>, <&clock 176>, <&clock 13>, 173 <&clock CLK_FIMC_ISP>, <&clock CLK_FIMC_DRC>,
173 <&clock 454>, <&clock 395>, <&clock 455>; 174 <&clock CLK_FIMC_FD>, <&clock CLK_MCUISP>,
175 <&clock CLK_DIV_ISP0>,<&clock CLK_DIV_ISP1>,
176 <&clock CLK_DIV_MCUISP0>,
177 <&clock CLK_DIV_MCUISP1>,
178 <&clock CLK_SCLK_UART_ISP>,
179 <&clock CLK_ACLK200>, <&clock CLK_DIV_ACLK200>,
180 <&clock CLK_ACLK400_MCUISP>,
181 <&clock CLK_DIV_ACLK400_MCUISP>;
174 clock-names = "lite0", "lite1", "ppmuispx", 182 clock-names = "lite0", "lite1", "ppmuispx",
175 "ppmuispmx", "mpll", "isp", 183 "ppmuispmx", "mpll", "isp",
176 "drc", "fd", "mcuisp", 184 "drc", "fd", "mcuisp",
@@ -190,7 +198,7 @@
190 i2c1_isp: i2c-isp@12140000 { 198 i2c1_isp: i2c-isp@12140000 {
191 compatible = "samsung,exynos4212-i2c-isp"; 199 compatible = "samsung,exynos4212-i2c-isp";
192 reg = <0x12140000 0x100>; 200 reg = <0x12140000 0x100>;
193 clocks = <&clock 370>; 201 clocks = <&clock CLK_I2C1_ISP>;
194 clock-names = "i2c_isp"; 202 clock-names = "i2c_isp";
195 #address-cells = <1>; 203 #address-cells = <1>;
196 #size-cells = <0>; 204 #size-cells = <0>;
@@ -205,7 +213,7 @@
205 #address-cells = <1>; 213 #address-cells = <1>;
206 #size-cells = <0>; 214 #size-cells = <0>;
207 fifo-depth = <0x80>; 215 fifo-depth = <0x80>;
208 clocks = <&clock 301>, <&clock 149>; 216 clocks = <&clock CLK_SDMMC4>, <&clock CLK_SCLK_MMC4>;
209 clock-names = "biu", "ciu"; 217 clock-names = "biu", "ciu";
210 status = "disabled"; 218 status = "disabled";
211 }; 219 };
diff --git a/arch/arm/boot/dts/exynos5.dtsi b/arch/arm/boot/dts/exynos5.dtsi
index 258dca441f36..79d0608d6dcc 100644
--- a/arch/arm/boot/dts/exynos5.dtsi
+++ b/arch/arm/boot/dts/exynos5.dtsi
@@ -81,13 +81,6 @@
81 status = "disabled"; 81 status = "disabled";
82 }; 82 };
83 83
84 watchdog {
85 compatible = "samsung,s3c2410-wdt";
86 reg = <0x101D0000 0x100>;
87 interrupts = <0 42 0>;
88 status = "disabled";
89 };
90
91 fimd@14400000 { 84 fimd@14400000 {
92 compatible = "samsung,exynos5250-fimd"; 85 compatible = "samsung,exynos5250-fimd";
93 interrupt-parent = <&combiner>; 86 interrupt-parent = <&combiner>;
diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts
index b42e658876e5..56c40783c3eb 100644
--- a/arch/arm/boot/dts/exynos5250-arndale.dts
+++ b/arch/arm/boot/dts/exynos5250-arndale.dts
@@ -25,6 +25,10 @@
25 bootargs = "console=ttySAC2,115200"; 25 bootargs = "console=ttySAC2,115200";
26 }; 26 };
27 27
28 rtc@101E0000 {
29 status = "okay";
30 };
31
28 codec@11000000 { 32 codec@11000000 {
29 samsung,mfc-r = <0x43000000 0x800000>; 33 samsung,mfc-r = <0x43000000 0x800000>;
30 samsung,mfc-l = <0x51000000 0x800000>; 34 samsung,mfc-l = <0x51000000 0x800000>;
diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts
index 3e69837c435c..f76946e97e6a 100644
--- a/arch/arm/boot/dts/exynos5250-smdk5250.dts
+++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts
@@ -27,6 +27,10 @@
27 bootargs = "root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc"; 27 bootargs = "root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc";
28 }; 28 };
29 29
30 rtc@101E0000 {
31 status = "okay";
32 };
33
30 i2c@12C60000 { 34 i2c@12C60000 {
31 samsung,i2c-sda-delay = <100>; 35 samsung,i2c-sda-delay = <100>;
32 samsung,i2c-max-bus-freq = <20000>; 36 samsung,i2c-max-bus-freq = <20000>;
@@ -36,6 +40,148 @@
36 compatible = "samsung,s524ad0xd1"; 40 compatible = "samsung,s524ad0xd1";
37 reg = <0x50>; 41 reg = <0x50>;
38 }; 42 };
43
44 max77686@09 {
45 compatible = "maxim,max77686";
46 reg = <0x09>;
47
48 voltage-regulators {
49 ldo1_reg: LDO1 {
50 regulator-name = "P1.0V_LDO_OUT1";
51 regulator-min-microvolt = <1000000>;
52 regulator-max-microvolt = <1000000>;
53 regulator-always-on;
54 };
55
56 ldo2_reg: LDO2 {
57 regulator-name = "P1.2V_LDO_OUT2";
58 regulator-min-microvolt = <1200000>;
59 regulator-max-microvolt = <1200000>;
60 regulator-always-on;
61 };
62
63 ldo3_reg: LDO3 {
64 regulator-name = "P1.8V_LDO_OUT3";
65 regulator-min-microvolt = <1800000>;
66 regulator-max-microvolt = <1800000>;
67 regulator-always-on;
68 };
69
70 ldo4_reg: LDO4 {
71 regulator-name = "P2.8V_LDO_OUT4";
72 regulator-min-microvolt = <2800000>;
73 regulator-max-microvolt = <2800000>;
74 };
75
76 ldo5_reg: LDO5 {
77 regulator-name = "P1.8V_LDO_OUT5";
78 regulator-min-microvolt = <1800000>;
79 regulator-max-microvolt = <1800000>;
80 };
81
82 ldo6_reg: LDO6 {
83 regulator-name = "P1.1V_LDO_OUT6";
84 regulator-min-microvolt = <1100000>;
85 regulator-max-microvolt = <1100000>;
86 regulator-always-on;
87 };
88
89 ldo7_reg: LDO7 {
90 regulator-name = "P1.1V_LDO_OUT7";
91 regulator-min-microvolt = <1100000>;
92 regulator-max-microvolt = <1100000>;
93 regulator-always-on;
94 };
95
96 ldo8_reg: LDO8 {
97 regulator-name = "P1.0V_LDO_OUT8";
98 regulator-min-microvolt = <1000000>;
99 regulator-max-microvolt = <1000000>;
100 };
101
102 ldo10_reg: LDO10 {
103 regulator-name = "P1.8V_LDO_OUT10";
104 regulator-min-microvolt = <1800000>;
105 regulator-max-microvolt = <1800000>;
106 };
107
108 ldo11_reg: LDO11 {
109 regulator-name = "P1.8V_LDO_OUT11";
110 regulator-min-microvolt = <1800000>;
111 regulator-max-microvolt = <1800000>;
112 };
113
114 ldo12_reg: LDO12 {
115 regulator-name = "P3.0V_LDO_OUT12";
116 regulator-min-microvolt = <3000000>;
117 regulator-max-microvolt = <3000000>;
118 };
119
120 ldo13_reg: LDO13 {
121 regulator-name = "P1.8V_LDO_OUT13";
122 regulator-min-microvolt = <1800000>;
123 regulator-max-microvolt = <1800000>;
124 };
125
126 ldo14_reg: LDO14 {
127 regulator-name = "P1.8V_LDO_OUT14";
128 regulator-min-microvolt = <1800000>;
129 regulator-max-microvolt = <1800000>;
130 };
131
132 ldo15_reg: LDO15 {
133 regulator-name = "P1.0V_LDO_OUT15";
134 regulator-min-microvolt = <1000000>;
135 regulator-max-microvolt = <1000000>;
136 };
137
138 ldo16_reg: LDO16 {
139 regulator-name = "P1.8V_LDO_OUT16";
140 regulator-min-microvolt = <1800000>;
141 regulator-max-microvolt = <1800000>;
142 };
143
144 buck1_reg: BUCK1 {
145 regulator-name = "vdd_mif";
146 regulator-min-microvolt = <950000>;
147 regulator-max-microvolt = <1300000>;
148 regulator-always-on;
149 regulator-boot-on;
150 };
151
152 buck2_reg: BUCK2 {
153 regulator-name = "vdd_arm";
154 regulator-min-microvolt = <850000>;
155 regulator-max-microvolt = <1350000>;
156 regulator-always-on;
157 regulator-boot-on;
158 };
159
160 buck3_reg: BUCK3 {
161 regulator-name = "vdd_int";
162 regulator-min-microvolt = <900000>;
163 regulator-max-microvolt = <1200000>;
164 regulator-always-on;
165 regulator-boot-on;
166 };
167
168 buck4_reg: BUCK4 {
169 regulator-name = "vdd_g3d";
170 regulator-min-microvolt = <850000>;
171 regulator-max-microvolt = <1300000>;
172 regulator-always-on;
173 regulator-boot-on;
174 };
175
176 buck5_reg: BUCK5 {
177 regulator-name = "P1.8V_BUCK_OUT5";
178 regulator-min-microvolt = <1800000>;
179 regulator-max-microvolt = <1800000>;
180 regulator-always-on;
181 regulator-boot-on;
182 };
183 };
184 };
39 }; 185 };
40 186
41 vdd: fixed-regulator@0 { 187 vdd: fixed-regulator@0 {
diff --git a/arch/arm/boot/dts/exynos5250-snow.dts b/arch/arm/boot/dts/exynos5250-snow.dts
index 7e45eea2d78f..b13bf499f5e2 100644
--- a/arch/arm/boot/dts/exynos5250-snow.dts
+++ b/arch/arm/boot/dts/exynos5250-snow.dts
@@ -20,6 +20,10 @@
20 i2c104 = &i2c_104; 20 i2c104 = &i2c_104;
21 }; 21 };
22 22
23 rtc@101E0000 {
24 status = "okay";
25 };
26
23 pinctrl@11400000 { 27 pinctrl@11400000 {
24 sd3_clk: sd3-clk { 28 sd3_clk: sd3-clk {
25 samsung,pin-drv = <0>; 29 samsung,pin-drv = <0>;
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
index b7dec41e32af..987cfbe9634b 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -17,6 +17,7 @@
17 * published by the Free Software Foundation. 17 * published by the Free Software Foundation.
18*/ 18*/
19 19
20#include <dt-bindings/clock/exynos5250.h>
20#include "exynos5.dtsi" 21#include "exynos5.dtsi"
21#include "exynos5250-pinctrl.dtsi" 22#include "exynos5250-pinctrl.dtsi"
22 23
@@ -90,7 +91,8 @@
90 compatible = "samsung,exynos5250-audss-clock"; 91 compatible = "samsung,exynos5250-audss-clock";
91 reg = <0x03810000 0x0C>; 92 reg = <0x03810000 0x0C>;
92 #clock-cells = <1>; 93 #clock-cells = <1>;
93 clocks = <&clock 1>, <&clock 7>, <&clock 138>, <&clock 160>; 94 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_FOUT_EPLL>,
95 <&clock CLK_SCLK_AUDIO0>, <&clock CLK_DIV_PCM0>;
94 clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in"; 96 clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in";
95 }; 97 };
96 98
@@ -115,7 +117,7 @@
115 interrupt-parent = <&mct_map>; 117 interrupt-parent = <&mct_map>;
116 interrupts = <0 0>, <1 0>, <2 0>, <3 0>, 118 interrupts = <0 0>, <1 0>, <2 0>, <3 0>,
117 <4 0>, <5 0>; 119 <4 0>, <5 0>;
118 clocks = <&clock 1>, <&clock 335>; 120 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
119 clock-names = "fin_pll", "mct"; 121 clock-names = "fin_pll", "mct";
120 122
121 mct_map: mct-map { 123 mct_map: mct-map {
@@ -167,16 +169,25 @@
167 interrupts = <0 47 0>; 169 interrupts = <0 47 0>;
168 }; 170 };
169 171
170 watchdog { 172 pmu_system_controller: system-controller@10040000 {
171 clocks = <&clock 336>; 173 compatible = "samsung,exynos5250-pmu", "syscon";
174 reg = <0x10040000 0x5000>;
175 };
176
177 watchdog@101D0000 {
178 compatible = "samsung,exynos5250-wdt";
179 reg = <0x101D0000 0x100>;
180 interrupts = <0 42 0>;
181 clocks = <&clock CLK_WDT>;
172 clock-names = "watchdog"; 182 clock-names = "watchdog";
183 samsung,syscon-phandle = <&pmu_system_controller>;
173 }; 184 };
174 185
175 g2d@10850000 { 186 g2d@10850000 {
176 compatible = "samsung,exynos5250-g2d"; 187 compatible = "samsung,exynos5250-g2d";
177 reg = <0x10850000 0x1000>; 188 reg = <0x10850000 0x1000>;
178 interrupts = <0 91 0>; 189 interrupts = <0 91 0>;
179 clocks = <&clock 345>; 190 clocks = <&clock CLK_G2D>;
180 clock-names = "fimg2d"; 191 clock-names = "fimg2d";
181 }; 192 };
182 193
@@ -185,41 +196,41 @@
185 reg = <0x11000000 0x10000>; 196 reg = <0x11000000 0x10000>;
186 interrupts = <0 96 0>; 197 interrupts = <0 96 0>;
187 samsung,power-domain = <&pd_mfc>; 198 samsung,power-domain = <&pd_mfc>;
188 clocks = <&clock 266>; 199 clocks = <&clock CLK_MFC>;
189 clock-names = "mfc"; 200 clock-names = "mfc";
190 }; 201 };
191 202
192 rtc@101E0000 { 203 rtc@101E0000 {
193 clocks = <&clock 337>; 204 clocks = <&clock CLK_RTC>;
194 clock-names = "rtc"; 205 clock-names = "rtc";
195 status = "okay"; 206 status = "disabled";
196 }; 207 };
197 208
198 tmu@10060000 { 209 tmu@10060000 {
199 compatible = "samsung,exynos5250-tmu"; 210 compatible = "samsung,exynos5250-tmu";
200 reg = <0x10060000 0x100>; 211 reg = <0x10060000 0x100>;
201 interrupts = <0 65 0>; 212 interrupts = <0 65 0>;
202 clocks = <&clock 338>; 213 clocks = <&clock CLK_TMU>;
203 clock-names = "tmu_apbif"; 214 clock-names = "tmu_apbif";
204 }; 215 };
205 216
206 serial@12C00000 { 217 serial@12C00000 {
207 clocks = <&clock 289>, <&clock 146>; 218 clocks = <&clock CLK_UART0>, <&clock CLK_SCLK_UART0>;
208 clock-names = "uart", "clk_uart_baud0"; 219 clock-names = "uart", "clk_uart_baud0";
209 }; 220 };
210 221
211 serial@12C10000 { 222 serial@12C10000 {
212 clocks = <&clock 290>, <&clock 147>; 223 clocks = <&clock CLK_UART1>, <&clock CLK_SCLK_UART1>;
213 clock-names = "uart", "clk_uart_baud0"; 224 clock-names = "uart", "clk_uart_baud0";
214 }; 225 };
215 226
216 serial@12C20000 { 227 serial@12C20000 {
217 clocks = <&clock 291>, <&clock 148>; 228 clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
218 clock-names = "uart", "clk_uart_baud0"; 229 clock-names = "uart", "clk_uart_baud0";
219 }; 230 };
220 231
221 serial@12C30000 { 232 serial@12C30000 {
222 clocks = <&clock 292>, <&clock 149>; 233 clocks = <&clock CLK_UART3>, <&clock CLK_SCLK_UART3>;
223 clock-names = "uart", "clk_uart_baud0"; 234 clock-names = "uart", "clk_uart_baud0";
224 }; 235 };
225 236
@@ -227,7 +238,7 @@
227 compatible = "samsung,exynos5-sata-ahci"; 238 compatible = "samsung,exynos5-sata-ahci";
228 reg = <0x122F0000 0x1ff>; 239 reg = <0x122F0000 0x1ff>;
229 interrupts = <0 115 0>; 240 interrupts = <0 115 0>;
230 clocks = <&clock 277>, <&clock 143>; 241 clocks = <&clock CLK_SATA>, <&clock CLK_SCLK_SATA>;
231 clock-names = "sata", "sclk_sata"; 242 clock-names = "sata", "sclk_sata";
232 }; 243 };
233 244
@@ -242,7 +253,7 @@
242 interrupts = <0 56 0>; 253 interrupts = <0 56 0>;
243 #address-cells = <1>; 254 #address-cells = <1>;
244 #size-cells = <0>; 255 #size-cells = <0>;
245 clocks = <&clock 294>; 256 clocks = <&clock CLK_I2C0>;
246 clock-names = "i2c"; 257 clock-names = "i2c";
247 pinctrl-names = "default"; 258 pinctrl-names = "default";
248 pinctrl-0 = <&i2c0_bus>; 259 pinctrl-0 = <&i2c0_bus>;
@@ -255,7 +266,7 @@
255 interrupts = <0 57 0>; 266 interrupts = <0 57 0>;
256 #address-cells = <1>; 267 #address-cells = <1>;
257 #size-cells = <0>; 268 #size-cells = <0>;
258 clocks = <&clock 295>; 269 clocks = <&clock CLK_I2C1>;
259 clock-names = "i2c"; 270 clock-names = "i2c";
260 pinctrl-names = "default"; 271 pinctrl-names = "default";
261 pinctrl-0 = <&i2c1_bus>; 272 pinctrl-0 = <&i2c1_bus>;
@@ -268,7 +279,7 @@
268 interrupts = <0 58 0>; 279 interrupts = <0 58 0>;
269 #address-cells = <1>; 280 #address-cells = <1>;
270 #size-cells = <0>; 281 #size-cells = <0>;
271 clocks = <&clock 296>; 282 clocks = <&clock CLK_I2C2>;
272 clock-names = "i2c"; 283 clock-names = "i2c";
273 pinctrl-names = "default"; 284 pinctrl-names = "default";
274 pinctrl-0 = <&i2c2_bus>; 285 pinctrl-0 = <&i2c2_bus>;
@@ -281,7 +292,7 @@
281 interrupts = <0 59 0>; 292 interrupts = <0 59 0>;
282 #address-cells = <1>; 293 #address-cells = <1>;
283 #size-cells = <0>; 294 #size-cells = <0>;
284 clocks = <&clock 297>; 295 clocks = <&clock CLK_I2C3>;
285 clock-names = "i2c"; 296 clock-names = "i2c";
286 pinctrl-names = "default"; 297 pinctrl-names = "default";
287 pinctrl-0 = <&i2c3_bus>; 298 pinctrl-0 = <&i2c3_bus>;
@@ -294,7 +305,7 @@
294 interrupts = <0 60 0>; 305 interrupts = <0 60 0>;
295 #address-cells = <1>; 306 #address-cells = <1>;
296 #size-cells = <0>; 307 #size-cells = <0>;
297 clocks = <&clock 298>; 308 clocks = <&clock CLK_I2C4>;
298 clock-names = "i2c"; 309 clock-names = "i2c";
299 pinctrl-names = "default"; 310 pinctrl-names = "default";
300 pinctrl-0 = <&i2c4_bus>; 311 pinctrl-0 = <&i2c4_bus>;
@@ -307,7 +318,7 @@
307 interrupts = <0 61 0>; 318 interrupts = <0 61 0>;
308 #address-cells = <1>; 319 #address-cells = <1>;
309 #size-cells = <0>; 320 #size-cells = <0>;
310 clocks = <&clock 299>; 321 clocks = <&clock CLK_I2C5>;
311 clock-names = "i2c"; 322 clock-names = "i2c";
312 pinctrl-names = "default"; 323 pinctrl-names = "default";
313 pinctrl-0 = <&i2c5_bus>; 324 pinctrl-0 = <&i2c5_bus>;
@@ -320,7 +331,7 @@
320 interrupts = <0 62 0>; 331 interrupts = <0 62 0>;
321 #address-cells = <1>; 332 #address-cells = <1>;
322 #size-cells = <0>; 333 #size-cells = <0>;
323 clocks = <&clock 300>; 334 clocks = <&clock CLK_I2C6>;
324 clock-names = "i2c"; 335 clock-names = "i2c";
325 pinctrl-names = "default"; 336 pinctrl-names = "default";
326 pinctrl-0 = <&i2c6_bus>; 337 pinctrl-0 = <&i2c6_bus>;
@@ -333,7 +344,7 @@
333 interrupts = <0 63 0>; 344 interrupts = <0 63 0>;
334 #address-cells = <1>; 345 #address-cells = <1>;
335 #size-cells = <0>; 346 #size-cells = <0>;
336 clocks = <&clock 301>; 347 clocks = <&clock CLK_I2C7>;
337 clock-names = "i2c"; 348 clock-names = "i2c";
338 pinctrl-names = "default"; 349 pinctrl-names = "default";
339 pinctrl-0 = <&i2c7_bus>; 350 pinctrl-0 = <&i2c7_bus>;
@@ -346,7 +357,7 @@
346 interrupts = <0 64 0>; 357 interrupts = <0 64 0>;
347 #address-cells = <1>; 358 #address-cells = <1>;
348 #size-cells = <0>; 359 #size-cells = <0>;
349 clocks = <&clock 302>; 360 clocks = <&clock CLK_I2C_HDMI>;
350 clock-names = "i2c"; 361 clock-names = "i2c";
351 status = "disabled"; 362 status = "disabled";
352 }; 363 };
@@ -356,7 +367,7 @@
356 reg = <0x121D0000 0x100>; 367 reg = <0x121D0000 0x100>;
357 #address-cells = <1>; 368 #address-cells = <1>;
358 #size-cells = <0>; 369 #size-cells = <0>;
359 clocks = <&clock 288>; 370 clocks = <&clock CLK_SATA_PHYI2C>;
360 clock-names = "i2c"; 371 clock-names = "i2c";
361 status = "disabled"; 372 status = "disabled";
362 }; 373 };
@@ -371,7 +382,7 @@
371 dma-names = "tx", "rx"; 382 dma-names = "tx", "rx";
372 #address-cells = <1>; 383 #address-cells = <1>;
373 #size-cells = <0>; 384 #size-cells = <0>;
374 clocks = <&clock 304>, <&clock 154>; 385 clocks = <&clock CLK_SPI0>, <&clock CLK_SCLK_SPI0>;
375 clock-names = "spi", "spi_busclk0"; 386 clock-names = "spi", "spi_busclk0";
376 pinctrl-names = "default"; 387 pinctrl-names = "default";
377 pinctrl-0 = <&spi0_bus>; 388 pinctrl-0 = <&spi0_bus>;
@@ -387,7 +398,7 @@
387 dma-names = "tx", "rx"; 398 dma-names = "tx", "rx";
388 #address-cells = <1>; 399 #address-cells = <1>;
389 #size-cells = <0>; 400 #size-cells = <0>;
390 clocks = <&clock 305>, <&clock 155>; 401 clocks = <&clock CLK_SPI1>, <&clock CLK_SCLK_SPI1>;
391 clock-names = "spi", "spi_busclk0"; 402 clock-names = "spi", "spi_busclk0";
392 pinctrl-names = "default"; 403 pinctrl-names = "default";
393 pinctrl-0 = <&spi1_bus>; 404 pinctrl-0 = <&spi1_bus>;
@@ -403,7 +414,7 @@
403 dma-names = "tx", "rx"; 414 dma-names = "tx", "rx";
404 #address-cells = <1>; 415 #address-cells = <1>;
405 #size-cells = <0>; 416 #size-cells = <0>;
406 clocks = <&clock 306>, <&clock 156>; 417 clocks = <&clock CLK_SPI2>, <&clock CLK_SCLK_SPI2>;
407 clock-names = "spi", "spi_busclk0"; 418 clock-names = "spi", "spi_busclk0";
408 pinctrl-names = "default"; 419 pinctrl-names = "default";
409 pinctrl-0 = <&spi2_bus>; 420 pinctrl-0 = <&spi2_bus>;
@@ -415,7 +426,7 @@
415 #address-cells = <1>; 426 #address-cells = <1>;
416 #size-cells = <0>; 427 #size-cells = <0>;
417 reg = <0x12200000 0x1000>; 428 reg = <0x12200000 0x1000>;
418 clocks = <&clock 280>, <&clock 139>; 429 clocks = <&clock CLK_SDMMC0>, <&clock CLK_SCLK_MMC0>;
419 clock-names = "biu", "ciu"; 430 clock-names = "biu", "ciu";
420 fifo-depth = <0x80>; 431 fifo-depth = <0x80>;
421 status = "disabled"; 432 status = "disabled";
@@ -427,7 +438,7 @@
427 #address-cells = <1>; 438 #address-cells = <1>;
428 #size-cells = <0>; 439 #size-cells = <0>;
429 reg = <0x12210000 0x1000>; 440 reg = <0x12210000 0x1000>;
430 clocks = <&clock 281>, <&clock 140>; 441 clocks = <&clock CLK_SDMMC1>, <&clock CLK_SCLK_MMC1>;
431 clock-names = "biu", "ciu"; 442 clock-names = "biu", "ciu";
432 fifo-depth = <0x80>; 443 fifo-depth = <0x80>;
433 status = "disabled"; 444 status = "disabled";
@@ -439,7 +450,7 @@
439 #address-cells = <1>; 450 #address-cells = <1>;
440 #size-cells = <0>; 451 #size-cells = <0>;
441 reg = <0x12220000 0x1000>; 452 reg = <0x12220000 0x1000>;
442 clocks = <&clock 282>, <&clock 141>; 453 clocks = <&clock CLK_SDMMC2>, <&clock CLK_SCLK_MMC2>;
443 clock-names = "biu", "ciu"; 454 clock-names = "biu", "ciu";
444 fifo-depth = <0x80>; 455 fifo-depth = <0x80>;
445 status = "disabled"; 456 status = "disabled";
@@ -451,7 +462,7 @@
451 interrupts = <0 78 0>; 462 interrupts = <0 78 0>;
452 #address-cells = <1>; 463 #address-cells = <1>;
453 #size-cells = <0>; 464 #size-cells = <0>;
454 clocks = <&clock 283>, <&clock 142>; 465 clocks = <&clock CLK_SDMMC3>, <&clock CLK_SCLK_MMC3>;
455 clock-names = "biu", "ciu"; 466 clock-names = "biu", "ciu";
456 fifo-depth = <0x80>; 467 fifo-depth = <0x80>;
457 status = "disabled"; 468 status = "disabled";
@@ -481,7 +492,7 @@
481 dmas = <&pdma1 12 492 dmas = <&pdma1 12
482 &pdma1 11>; 493 &pdma1 11>;
483 dma-names = "tx", "rx"; 494 dma-names = "tx", "rx";
484 clocks = <&clock 307>, <&clock 157>; 495 clocks = <&clock CLK_I2S1>, <&clock CLK_DIV_I2S1>;
485 clock-names = "iis", "i2s_opclk0"; 496 clock-names = "iis", "i2s_opclk0";
486 pinctrl-names = "default"; 497 pinctrl-names = "default";
487 pinctrl-0 = <&i2s1_bus>; 498 pinctrl-0 = <&i2s1_bus>;
@@ -494,7 +505,7 @@
494 dmas = <&pdma0 12 505 dmas = <&pdma0 12
495 &pdma0 11>; 506 &pdma0 11>;
496 dma-names = "tx", "rx"; 507 dma-names = "tx", "rx";
497 clocks = <&clock 308>, <&clock 158>; 508 clocks = <&clock CLK_I2S2>, <&clock CLK_DIV_I2S2>;
498 clock-names = "iis", "i2s_opclk0"; 509 clock-names = "iis", "i2s_opclk0";
499 pinctrl-names = "default"; 510 pinctrl-names = "default";
500 pinctrl-0 = <&i2s2_bus>; 511 pinctrl-0 = <&i2s2_bus>;
@@ -502,7 +513,7 @@
502 513
503 usb@12000000 { 514 usb@12000000 {
504 compatible = "samsung,exynos5250-dwusb3"; 515 compatible = "samsung,exynos5250-dwusb3";
505 clocks = <&clock 286>; 516 clocks = <&clock CLK_USB3>;
506 clock-names = "usbdrd30"; 517 clock-names = "usbdrd30";
507 #address-cells = <1>; 518 #address-cells = <1>;
508 #size-cells = <1>; 519 #size-cells = <1>;
@@ -519,7 +530,7 @@
519 usb3_phy: usbphy@12100000 { 530 usb3_phy: usbphy@12100000 {
520 compatible = "samsung,exynos5250-usb3phy"; 531 compatible = "samsung,exynos5250-usb3phy";
521 reg = <0x12100000 0x100>; 532 reg = <0x12100000 0x100>;
522 clocks = <&clock 1>, <&clock 286>; 533 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_USB3>;
523 clock-names = "ext_xtal", "usbdrd30"; 534 clock-names = "ext_xtal", "usbdrd30";
524 #address-cells = <1>; 535 #address-cells = <1>;
525 #size-cells = <1>; 536 #size-cells = <1>;
@@ -535,7 +546,7 @@
535 reg = <0x12110000 0x100>; 546 reg = <0x12110000 0x100>;
536 interrupts = <0 71 0>; 547 interrupts = <0 71 0>;
537 548
538 clocks = <&clock 285>; 549 clocks = <&clock CLK_USB2>;
539 clock-names = "usbhost"; 550 clock-names = "usbhost";
540 }; 551 };
541 552
@@ -544,14 +555,14 @@
544 reg = <0x12120000 0x100>; 555 reg = <0x12120000 0x100>;
545 interrupts = <0 71 0>; 556 interrupts = <0 71 0>;
546 557
547 clocks = <&clock 285>; 558 clocks = <&clock CLK_USB2>;
548 clock-names = "usbhost"; 559 clock-names = "usbhost";
549 }; 560 };
550 561
551 usb2_phy: usbphy@12130000 { 562 usb2_phy: usbphy@12130000 {
552 compatible = "samsung,exynos5250-usb2phy"; 563 compatible = "samsung,exynos5250-usb2phy";
553 reg = <0x12130000 0x100>; 564 reg = <0x12130000 0x100>;
554 clocks = <&clock 1>, <&clock 285>; 565 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_USB2>;
555 clock-names = "ext_xtal", "usbhost"; 566 clock-names = "ext_xtal", "usbhost";
556 #address-cells = <1>; 567 #address-cells = <1>;
557 #size-cells = <1>; 568 #size-cells = <1>;
@@ -568,7 +579,7 @@
568 reg = <0x12dd0000 0x100>; 579 reg = <0x12dd0000 0x100>;
569 samsung,pwm-outputs = <0>, <1>, <2>, <3>; 580 samsung,pwm-outputs = <0>, <1>, <2>, <3>;
570 #pwm-cells = <3>; 581 #pwm-cells = <3>;
571 clocks = <&clock 311>; 582 clocks = <&clock CLK_PWM>;
572 clock-names = "timers"; 583 clock-names = "timers";
573 }; 584 };
574 585
@@ -583,7 +594,7 @@
583 compatible = "arm,pl330", "arm,primecell"; 594 compatible = "arm,pl330", "arm,primecell";
584 reg = <0x121A0000 0x1000>; 595 reg = <0x121A0000 0x1000>;
585 interrupts = <0 34 0>; 596 interrupts = <0 34 0>;
586 clocks = <&clock 275>; 597 clocks = <&clock CLK_PDMA0>;
587 clock-names = "apb_pclk"; 598 clock-names = "apb_pclk";
588 #dma-cells = <1>; 599 #dma-cells = <1>;
589 #dma-channels = <8>; 600 #dma-channels = <8>;
@@ -594,7 +605,7 @@
594 compatible = "arm,pl330", "arm,primecell"; 605 compatible = "arm,pl330", "arm,primecell";
595 reg = <0x121B0000 0x1000>; 606 reg = <0x121B0000 0x1000>;
596 interrupts = <0 35 0>; 607 interrupts = <0 35 0>;
597 clocks = <&clock 276>; 608 clocks = <&clock CLK_PDMA1>;
598 clock-names = "apb_pclk"; 609 clock-names = "apb_pclk";
599 #dma-cells = <1>; 610 #dma-cells = <1>;
600 #dma-channels = <8>; 611 #dma-channels = <8>;
@@ -605,7 +616,7 @@
605 compatible = "arm,pl330", "arm,primecell"; 616 compatible = "arm,pl330", "arm,primecell";
606 reg = <0x10800000 0x1000>; 617 reg = <0x10800000 0x1000>;
607 interrupts = <0 33 0>; 618 interrupts = <0 33 0>;
608 clocks = <&clock 346>; 619 clocks = <&clock CLK_MDMA0>;
609 clock-names = "apb_pclk"; 620 clock-names = "apb_pclk";
610 #dma-cells = <1>; 621 #dma-cells = <1>;
611 #dma-channels = <8>; 622 #dma-channels = <8>;
@@ -616,7 +627,7 @@
616 compatible = "arm,pl330", "arm,primecell"; 627 compatible = "arm,pl330", "arm,primecell";
617 reg = <0x11C10000 0x1000>; 628 reg = <0x11C10000 0x1000>;
618 interrupts = <0 124 0>; 629 interrupts = <0 124 0>;
619 clocks = <&clock 271>; 630 clocks = <&clock CLK_MDMA1>;
620 clock-names = "apb_pclk"; 631 clock-names = "apb_pclk";
621 #dma-cells = <1>; 632 #dma-cells = <1>;
622 #dma-channels = <8>; 633 #dma-channels = <8>;
@@ -629,7 +640,7 @@
629 reg = <0x13e00000 0x1000>; 640 reg = <0x13e00000 0x1000>;
630 interrupts = <0 85 0>; 641 interrupts = <0 85 0>;
631 samsung,power-domain = <&pd_gsc>; 642 samsung,power-domain = <&pd_gsc>;
632 clocks = <&clock 256>; 643 clocks = <&clock CLK_GSCL0>;
633 clock-names = "gscl"; 644 clock-names = "gscl";
634 }; 645 };
635 646
@@ -638,7 +649,7 @@
638 reg = <0x13e10000 0x1000>; 649 reg = <0x13e10000 0x1000>;
639 interrupts = <0 86 0>; 650 interrupts = <0 86 0>;
640 samsung,power-domain = <&pd_gsc>; 651 samsung,power-domain = <&pd_gsc>;
641 clocks = <&clock 257>; 652 clocks = <&clock CLK_GSCL1>;
642 clock-names = "gscl"; 653 clock-names = "gscl";
643 }; 654 };
644 655
@@ -647,7 +658,7 @@
647 reg = <0x13e20000 0x1000>; 658 reg = <0x13e20000 0x1000>;
648 interrupts = <0 87 0>; 659 interrupts = <0 87 0>;
649 samsung,power-domain = <&pd_gsc>; 660 samsung,power-domain = <&pd_gsc>;
650 clocks = <&clock 258>; 661 clocks = <&clock CLK_GSCL2>;
651 clock-names = "gscl"; 662 clock-names = "gscl";
652 }; 663 };
653 664
@@ -656,7 +667,7 @@
656 reg = <0x13e30000 0x1000>; 667 reg = <0x13e30000 0x1000>;
657 interrupts = <0 88 0>; 668 interrupts = <0 88 0>;
658 samsung,power-domain = <&pd_gsc>; 669 samsung,power-domain = <&pd_gsc>;
659 clocks = <&clock 259>; 670 clocks = <&clock CLK_GSCL3>;
660 clock-names = "gscl"; 671 clock-names = "gscl";
661 }; 672 };
662 673
@@ -664,8 +675,9 @@
664 compatible = "samsung,exynos4212-hdmi"; 675 compatible = "samsung,exynos4212-hdmi";
665 reg = <0x14530000 0x70000>; 676 reg = <0x14530000 0x70000>;
666 interrupts = <0 95 0>; 677 interrupts = <0 95 0>;
667 clocks = <&clock 344>, <&clock 136>, <&clock 137>, 678 clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
668 <&clock 159>, <&clock 1024>; 679 <&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
680 <&clock CLK_MOUT_HDMI>;
669 clock-names = "hdmi", "sclk_hdmi", "sclk_pixel", 681 clock-names = "hdmi", "sclk_hdmi", "sclk_pixel",
670 "sclk_hdmiphy", "mout_hdmi"; 682 "sclk_hdmiphy", "mout_hdmi";
671 }; 683 };
@@ -674,7 +686,7 @@
674 compatible = "samsung,exynos5250-mixer"; 686 compatible = "samsung,exynos5250-mixer";
675 reg = <0x14450000 0x10000>; 687 reg = <0x14450000 0x10000>;
676 interrupts = <0 94 0>; 688 interrupts = <0 94 0>;
677 clocks = <&clock 343>, <&clock 136>; 689 clocks = <&clock CLK_MIXER>, <&clock CLK_SCLK_HDMI>;
678 clock-names = "mixer", "sclk_hdmi"; 690 clock-names = "mixer", "sclk_hdmi";
679 }; 691 };
680 692
@@ -685,14 +697,14 @@
685 }; 697 };
686 698
687 dp-controller@145B0000 { 699 dp-controller@145B0000 {
688 clocks = <&clock 342>; 700 clocks = <&clock CLK_DP>;
689 clock-names = "dp"; 701 clock-names = "dp";
690 phys = <&dp_phy>; 702 phys = <&dp_phy>;
691 phy-names = "dp"; 703 phy-names = "dp";
692 }; 704 };
693 705
694 fimd@14400000 { 706 fimd@14400000 {
695 clocks = <&clock 133>, <&clock 339>; 707 clocks = <&clock CLK_SCLK_FIMD1>, <&clock CLK_FIMD1>;
696 clock-names = "sclk_fimd", "fimd"; 708 clock-names = "sclk_fimd", "fimd";
697 }; 709 };
698 710
@@ -700,7 +712,7 @@
700 compatible = "samsung,exynos-adc-v1"; 712 compatible = "samsung,exynos-adc-v1";
701 reg = <0x12D10000 0x100>, <0x10040718 0x4>; 713 reg = <0x12D10000 0x100>, <0x10040718 0x4>;
702 interrupts = <0 106 0>; 714 interrupts = <0 106 0>;
703 clocks = <&clock 303>; 715 clocks = <&clock CLK_ADC>;
704 clock-names = "adc"; 716 clock-names = "adc";
705 #io-channel-cells = <1>; 717 #io-channel-cells = <1>;
706 io-channel-ranges; 718 io-channel-ranges;
diff --git a/arch/arm/boot/dts/exynos5420-arndale-octa.dts b/arch/arm/boot/dts/exynos5420-arndale-octa.dts
index 7340745ff979..f509e8fc290f 100644
--- a/arch/arm/boot/dts/exynos5420-arndale-octa.dts
+++ b/arch/arm/boot/dts/exynos5420-arndale-octa.dts
@@ -11,6 +11,8 @@
11 11
12/dts-v1/; 12/dts-v1/;
13#include "exynos5420.dtsi" 13#include "exynos5420.dtsi"
14#include <dt-bindings/interrupt-controller/irq.h>
15#include <dt-bindings/input/input.h>
14 16
15/ { 17/ {
16 model = "Insignal Arndale Octa evaluation board based on EXYNOS5420"; 18 model = "Insignal Arndale Octa evaluation board based on EXYNOS5420";
@@ -31,6 +33,10 @@
31 }; 33 };
32 }; 34 };
33 35
36 rtc@101E0000 {
37 status = "okay";
38 };
39
34 mmc@12200000 { 40 mmc@12200000 {
35 status = "okay"; 41 status = "okay";
36 broken-cd; 42 broken-cd;
@@ -41,6 +47,7 @@
41 samsung,dw-mshc-ddr-timing = <0 2>; 47 samsung,dw-mshc-ddr-timing = <0 2>;
42 pinctrl-names = "default"; 48 pinctrl-names = "default";
43 pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_bus8>; 49 pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_bus8>;
50 vmmc-supply = <&ldo10_reg>;
44 51
45 slot@0 { 52 slot@0 {
46 reg = <0>; 53 reg = <0>;
@@ -57,10 +64,301 @@
57 samsung,dw-mshc-ddr-timing = <1 2>; 64 samsung,dw-mshc-ddr-timing = <1 2>;
58 pinctrl-names = "default"; 65 pinctrl-names = "default";
59 pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>; 66 pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;
67 vmmc-supply = <&ldo10_reg>;
60 68
61 slot@0 { 69 slot@0 {
62 reg = <0>; 70 reg = <0>;
63 bus-width = <4>; 71 bus-width = <4>;
64 }; 72 };
65 }; 73 };
74
75 hsi2c_4: i2c@12CA0000 {
76 status = "okay";
77
78 s2mps11_pmic@66 {
79 compatible = "samsung,s2mps11-pmic";
80 reg = <0x66>;
81 s2mps11,buck2-ramp-delay = <12>;
82 s2mps11,buck34-ramp-delay = <12>;
83 s2mps11,buck16-ramp-delay = <12>;
84 s2mps11,buck6-ramp-enable = <1>;
85 s2mps11,buck2-ramp-enable = <1>;
86 s2mps11,buck3-ramp-enable = <1>;
87 s2mps11,buck4-ramp-enable = <1>;
88
89 interrupt-parent = <&gpx3>;
90 interrupts = <2 IRQ_TYPE_LEVEL_HIGH>;
91
92 s2mps11_osc: clocks {
93 #clock-cells = <1>;
94 clock-output-names = "s2mps11_ap",
95 "s2mps11_cp", "s2mps11_bt";
96 };
97
98 regulators {
99 ldo1_reg: LDO1 {
100 regulator-name = "PVDD_ALIVE_1V0";
101 regulator-min-microvolt = <1000000>;
102 regulator-max-microvolt = <1000000>;
103 regulator-always-on;
104 };
105
106 ldo2_reg: LDO2 {
107 regulator-name = "PVDD_APIO_1V8";
108 regulator-min-microvolt = <1800000>;
109 regulator-max-microvolt = <1800000>;
110 };
111
112 ldo3_reg: LDO3 {
113 regulator-name = "PVDD_APIO_MMCON_1V8";
114 regulator-min-microvolt = <1800000>;
115 regulator-max-microvolt = <1800000>;
116 };
117
118 ldo4_reg: LDO4 {
119 regulator-name = "PVDD_ADC_1V8";
120 regulator-min-microvolt = <1800000>;
121 regulator-max-microvolt = <1800000>;
122 };
123
124 ldo5_reg: LDO5 {
125 regulator-name = "PVDD_PLL_1V8";
126 regulator-min-microvolt = <1800000>;
127 regulator-max-microvolt = <1800000>;
128 regulator-always-on;
129 };
130
131 ldo6_reg: LDO6 {
132 regulator-name = "PVDD_ANAIP_1V0";
133 regulator-min-microvolt = <1000000>;
134 regulator-max-microvolt = <1000000>;
135 };
136
137 ldo7_reg: LDO7 {
138 regulator-name = "PVDD_ANAIP_1V8";
139 regulator-min-microvolt = <1800000>;
140 regulator-max-microvolt = <1800000>;
141 };
142
143 ldo8_reg: LDO8 {
144 regulator-name = "PVDD_ABB_1V8";
145 regulator-min-microvolt = <1800000>;
146 regulator-max-microvolt = <1800000>;
147 };
148
149 ldo9_reg: LDO9 {
150 regulator-name = "PVDD_USB_3V3";
151 regulator-min-microvolt = <3000000>;
152 regulator-max-microvolt = <3000000>;
153 };
154
155 ldo10_reg: LDO10 {
156 regulator-name = "PVDD_PRE_1V8";
157 regulator-min-microvolt = <1800000>;
158 regulator-max-microvolt = <1800000>;
159 regulator-always-on;
160 };
161
162 ldo11_reg: LDO11 {
163 regulator-name = "PVDD_USB_1V0";
164 regulator-min-microvolt = <1000000>;
165 regulator-max-microvolt = <1000000>;
166 regulator-always-on;
167 };
168
169 ldo12_reg: LDO12 {
170 regulator-name = "PVDD_HSIC_1V8";
171 regulator-min-microvolt = <1800000>;
172 regulator-max-microvolt = <1800000>;
173 };
174
175 ldo13_reg: LDO13 {
176 regulator-name = "PVDD_APIO_MMCOFF_2V8";
177 regulator-min-microvolt = <2800000>;
178 regulator-max-microvolt = <2800000>;
179 };
180
181 ldo15_reg: LDO15 {
182 regulator-name = "PVDD_PERI_2V8";
183 regulator-min-microvolt = <3300000>;
184 regulator-max-microvolt = <3300000>;
185 };
186
187 ldo16_reg: LDO16 {
188 regulator-name = "PVDD_PERI_3V3";
189 regulator-min-microvolt = <2200000>;
190 regulator-max-microvolt = <2200000>;
191 };
192
193 ldo18_reg: LDO18 {
194 regulator-name = "PVDD_EMMC_1V8";
195 regulator-min-microvolt = <1800000>;
196 regulator-max-microvolt = <1800000>;
197 };
198
199 ldo19_reg: LDO19 {
200 regulator-name = "PVDD_TFLASH_2V8";
201 regulator-min-microvolt = <2800000>;
202 regulator-max-microvolt = <2800000>;
203 };
204
205 ldo20_reg: LDO20 {
206 regulator-name = "PVDD_BTWIFI_1V8";
207 regulator-min-microvolt = <1800000>;
208 regulator-max-microvolt = <1800000>;
209 };
210
211 ldo21_reg: LDO21 {
212 regulator-name = "PVDD_CAM1IO_1V8";
213 regulator-min-microvolt = <1800000>;
214 regulator-max-microvolt = <1800000>;
215 };
216
217 ldo23_reg: LDO23 {
218 regulator-name = "PVDD_MIFS_1V1";
219 regulator-min-microvolt = <1200000>;
220 regulator-max-microvolt = <1200000>;
221 };
222
223 ldo24_reg: LDO24 {
224 regulator-name = "PVDD_CAM1_AVDD_2V8";
225 regulator-min-microvolt = <2800000>;
226 regulator-max-microvolt = <2800000>;
227 };
228
229 ldo26_reg: LDO26 {
230 regulator-name = "PVDD_CAM0_AF_2V8";
231 regulator-min-microvolt = <3000000>;
232 regulator-max-microvolt = <3000000>;
233 };
234
235 ldo27_reg: LDO27 {
236 regulator-name = "PVDD_G3DS_1V0";
237 regulator-min-microvolt = <1200000>;
238 regulator-max-microvolt = <1200000>;
239 };
240
241 ldo28_reg: LDO28 {
242 regulator-name = "PVDD_TSP_3V3";
243 regulator-min-microvolt = <3300000>;
244 regulator-max-microvolt = <3300000>;
245 };
246
247 ldo29_reg: LDO29 {
248 regulator-name = "PVDD_AUDIO_1V8";
249 regulator-min-microvolt = <1800000>;
250 regulator-max-microvolt = <1800000>;
251 };
252
253 ldo31_reg: LDO31 {
254 regulator-name = "PVDD_PERI_1V8";
255 regulator-min-microvolt = <1800000>;
256 regulator-max-microvolt = <1800000>;
257 };
258
259 ldo32_reg: LDO32 {
260 regulator-name = "PVDD_LCD_1V8";
261 regulator-min-microvolt = <1800000>;
262 regulator-max-microvolt = <1800000>;
263 };
264
265 ldo33_reg: LDO33 {
266 regulator-name = "PVDD_CAM0IO_1V8";
267 regulator-min-microvolt = <1800000>;
268 regulator-max-microvolt = <1800000>;
269 };
270
271 ldo35_reg: LDO35 {
272 regulator-name = "PVDD_CAM0_DVDD_1V2";
273 regulator-min-microvolt = <1200000>;
274 regulator-max-microvolt = <1200000>;
275 };
276
277 ldo38_reg: LDO38 {
278 regulator-name = "PVDD_CAM0_AVDD_2V8";
279 regulator-min-microvolt = <2800000>;
280 regulator-max-microvolt = <2800000>;
281 };
282
283 buck1_reg: BUCK1 {
284 regulator-name = "PVDD_MIF_1V1";
285 regulator-min-microvolt = <800000>;
286 regulator-max-microvolt = <1100000>;
287 regulator-always-on;
288 };
289
290 buck2_reg: BUCK2 {
291 regulator-name = "vdd_arm";
292 regulator-min-microvolt = <800000>;
293 regulator-max-microvolt = <1000000>;
294 regulator-always-on;
295 };
296
297 buck3_reg: BUCK3 {
298 regulator-name = "PVDD_INT_1V0";
299 regulator-min-microvolt = <800000>;
300 regulator-max-microvolt = <1000000>;
301 regulator-always-on;
302 };
303
304 buck4_reg: BUCK4 {
305 regulator-name = "PVDD_G3D_1V0";
306 regulator-min-microvolt = <800000>;
307 regulator-max-microvolt = <1000000>;
308 };
309
310 buck5_reg: BUCK5 {
311 regulator-name = "PVDD_LPDDR3_1V2";
312 regulator-min-microvolt = <800000>;
313 regulator-max-microvolt = <1200000>;
314 regulator-always-on;
315 };
316
317 buck6_reg: BUCK6 {
318 regulator-name = "PVDD_KFC_1V0";
319 regulator-min-microvolt = <800000>;
320 regulator-max-microvolt = <1000000>;
321 regulator-always-on;
322 };
323
324 buck7_reg: BUCK7 {
325 regulator-name = "VIN_LLDO_1V4";
326 regulator-min-microvolt = <800000>;
327 regulator-max-microvolt = <1400000>;
328 regulator-always-on;
329 };
330
331 buck8_reg: BUCK8 {
332 regulator-name = "VIN_MLDO_2V0";
333 regulator-min-microvolt = <800000>;
334 regulator-max-microvolt = <2000000>;
335 regulator-always-on;
336 };
337
338 buck9_reg: BUCK9 {
339 regulator-name = "VIN_HLDO_3V5";
340 regulator-min-microvolt = <3000000>;
341 regulator-max-microvolt = <3500000>;
342 regulator-always-on;
343 };
344
345 buck10_reg: BUCK10 {
346 regulator-name = "PVDD_EMMCF_2V8";
347 regulator-min-microvolt = <2800000>;
348 regulator-max-microvolt = <2800000>;
349 };
350 };
351 };
352 };
353
354 gpio_keys {
355 compatible = "gpio-keys";
356
357 wakeup {
358 label = "SW-TACT1";
359 gpios = <&gpx2 7 1>;
360 linux,code = <KEY_WAKEUP>;
361 gpio-key,wakeup;
362 };
363 };
66}; 364};
diff --git a/arch/arm/boot/dts/exynos5420-smdk5420.dts b/arch/arm/boot/dts/exynos5420-smdk5420.dts
index fb5a1e25c632..ae1ee0470fca 100644
--- a/arch/arm/boot/dts/exynos5420-smdk5420.dts
+++ b/arch/arm/boot/dts/exynos5420-smdk5420.dts
@@ -31,6 +31,43 @@
31 }; 31 };
32 }; 32 };
33 33
34 regulators {
35 compatible = "simple-bus";
36 #address-cells = <1>;
37 #size-cells = <0>;
38
39 vdd: fixed-regulator@0 {
40 compatible = "regulator-fixed";
41 reg = <0>;
42 regulator-name = "vdd-supply";
43 regulator-min-microvolt = <1800000>;
44 regulator-max-microvolt = <1800000>;
45 regulator-always-on;
46 };
47
48 dbvdd: fixed-regulator@1 {
49 compatible = "regulator-fixed";
50 reg = <1>;
51 regulator-name = "dbvdd-supply";
52 regulator-min-microvolt = <3300000>;
53 regulator-max-microvolt = <3300000>;
54 regulator-always-on;
55 };
56
57 spkvdd: fixed-regulator@2 {
58 compatible = "regulator-fixed";
59 reg = <2>;
60 regulator-name = "spkvdd-supply";
61 regulator-min-microvolt = <5000000>;
62 regulator-max-microvolt = <5000000>;
63 regulator-always-on;
64 };
65 };
66
67 rtc@101E0000 {
68 status = "okay";
69 };
70
34 mmc@12200000 { 71 mmc@12200000 {
35 status = "okay"; 72 status = "okay";
36 broken-cd; 73 broken-cd;
@@ -120,4 +157,220 @@
120 reg = <0x50>; 157 reg = <0x50>;
121 }; 158 };
122 }; 159 };
160
161 hsi2c_4: i2c@12CA0000 {
162 status = "okay";
163
164 s2mps11_pmic@66 {
165 compatible = "samsung,s2mps11-pmic";
166 reg = <0x66>;
167 s2mps11,buck2-ramp-delay = <12>;
168 s2mps11,buck34-ramp-delay = <12>;
169 s2mps11,buck16-ramp-delay = <12>;
170 s2mps11,buck6-ramp-enable = <1>;
171 s2mps11,buck2-ramp-enable = <1>;
172 s2mps11,buck3-ramp-enable = <1>;
173 s2mps11,buck4-ramp-enable = <1>;
174
175 s2mps11_osc: clocks {
176 #clock-cells = <1>;
177 clock-output-names = "s2mps11_ap",
178 "s2mps11_cp", "s2mps11_bt";
179 };
180
181 regulators {
182 ldo1_reg: LDO1 {
183 regulator-name = "vdd_ldo1";
184 regulator-min-microvolt = <1000000>;
185 regulator-max-microvolt = <1000000>;
186 regulator-always-on;
187 };
188
189 ldo3_reg: LDO3 {
190 regulator-name = "vdd_ldo3";
191 regulator-min-microvolt = <1800000>;
192 regulator-max-microvolt = <1800000>;
193 regulator-always-on;
194 };
195
196 ldo5_reg: LDO5 {
197 regulator-name = "vdd_ldo5";
198 regulator-min-microvolt = <1800000>;
199 regulator-max-microvolt = <1800000>;
200 regulator-always-on;
201 };
202
203 ldo6_reg: LDO6 {
204 regulator-name = "vdd_ldo6";
205 regulator-min-microvolt = <1000000>;
206 regulator-max-microvolt = <1000000>;
207 regulator-always-on;
208 };
209
210 ldo7_reg: LDO7 {
211 regulator-name = "vdd_ldo7";
212 regulator-min-microvolt = <1800000>;
213 regulator-max-microvolt = <1800000>;
214 regulator-always-on;
215 };
216
217 ldo8_reg: LDO8 {
218 regulator-name = "vdd_ldo8";
219 regulator-min-microvolt = <1800000>;
220 regulator-max-microvolt = <1800000>;
221 regulator-always-on;
222 };
223
224 ldo9_reg: LDO9 {
225 regulator-name = "vdd_ldo9";
226 regulator-min-microvolt = <3000000>;
227 regulator-max-microvolt = <3000000>;
228 regulator-always-on;
229 };
230
231 ldo10_reg: LDO10 {
232 regulator-name = "vdd_ldo10";
233 regulator-min-microvolt = <1800000>;
234 regulator-max-microvolt = <1800000>;
235 regulator-always-on;
236 };
237
238 ldo11_reg: LDO11 {
239 regulator-name = "vdd_ldo11";
240 regulator-min-microvolt = <1000000>;
241 regulator-max-microvolt = <1000000>;
242 regulator-always-on;
243 };
244
245 ldo12_reg: LDO12 {
246 regulator-name = "vdd_ldo12";
247 regulator-min-microvolt = <1800000>;
248 regulator-max-microvolt = <1800000>;
249 regulator-always-on;
250 };
251
252 ldo13_reg: LDO13 {
253 regulator-name = "vdd_ldo13";
254 regulator-min-microvolt = <2800000>;
255 regulator-max-microvolt = <2800000>;
256 regulator-always-on;
257 };
258
259 ldo15_reg: LDO15 {
260 regulator-name = "vdd_ldo15";
261 regulator-min-microvolt = <3100000>;
262 regulator-max-microvolt = <3100000>;
263 regulator-always-on;
264 };
265
266 ldo16_reg: LDO16 {
267 regulator-name = "vdd_ldo16";
268 regulator-min-microvolt = <2200000>;
269 regulator-max-microvolt = <2200000>;
270 regulator-always-on;
271 };
272
273 ldo17_reg: LDO17 {
274 regulator-name = "tsp_avdd";
275 regulator-min-microvolt = <3300000>;
276 regulator-max-microvolt = <3300000>;
277 regulator-always-on;
278 };
279
280 ldo19_reg: LDO19 {
281 regulator-name = "vdd_sd";
282 regulator-min-microvolt = <2800000>;
283 regulator-max-microvolt = <2800000>;
284 regulator-always-on;
285 };
286
287 ldo24_reg: LDO24 {
288 regulator-name = "tsp_io";
289 regulator-min-microvolt = <2800000>;
290 regulator-max-microvolt = <2800000>;
291 regulator-always-on;
292 };
293
294 buck1_reg: BUCK1 {
295 regulator-name = "vdd_mif";
296 regulator-min-microvolt = <800000>;
297 regulator-max-microvolt = <1300000>;
298 regulator-always-on;
299 regulator-boot-on;
300 };
301
302 buck2_reg: BUCK2 {
303 regulator-name = "vdd_arm";
304 regulator-min-microvolt = <800000>;
305 regulator-max-microvolt = <1500000>;
306 regulator-always-on;
307 regulator-boot-on;
308 };
309
310 buck3_reg: BUCK3 {
311 regulator-name = "vdd_int";
312 regulator-min-microvolt = <800000>;
313 regulator-max-microvolt = <1400000>;
314 regulator-always-on;
315 regulator-boot-on;
316 };
317
318 buck4_reg: BUCK4 {
319 regulator-name = "vdd_g3d";
320 regulator-min-microvolt = <800000>;
321 regulator-max-microvolt = <1400000>;
322 regulator-always-on;
323 regulator-boot-on;
324 };
325
326 buck5_reg: BUCK5 {
327 regulator-name = "vdd_mem";
328 regulator-min-microvolt = <800000>;
329 regulator-max-microvolt = <1400000>;
330 regulator-always-on;
331 regulator-boot-on;
332 };
333
334 buck6_reg: BUCK6 {
335 regulator-name = "vdd_kfc";
336 regulator-min-microvolt = <800000>;
337 regulator-max-microvolt = <1500000>;
338 regulator-always-on;
339 regulator-boot-on;
340 };
341
342 buck7_reg: BUCK7 {
343 regulator-name = "vdd_1.0v_ldo";
344 regulator-min-microvolt = <800000>;
345 regulator-max-microvolt = <1500000>;
346 regulator-always-on;
347 regulator-boot-on;
348 };
349
350 buck8_reg: BUCK8 {
351 regulator-name = "vdd_1.8v_ldo";
352 regulator-min-microvolt = <800000>;
353 regulator-max-microvolt = <1500000>;
354 regulator-always-on;
355 regulator-boot-on;
356 };
357
358 buck9_reg: BUCK9 {
359 regulator-name = "vdd_2.8v_ldo";
360 regulator-min-microvolt = <3000000>;
361 regulator-max-microvolt = <3750000>;
362 regulator-always-on;
363 regulator-boot-on;
364 };
365
366 buck10_reg: BUCK10 {
367 regulator-name = "vdd_vmem";
368 regulator-min-microvolt = <2850000>;
369 regulator-max-microvolt = <2850000>;
370 regulator-always-on;
371 regulator-boot-on;
372 };
373 };
374 };
375 };
123}; 376};
diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi
index 8db792b26f79..e3329afbd8c4 100644
--- a/arch/arm/boot/dts/exynos5420.dtsi
+++ b/arch/arm/boot/dts/exynos5420.dtsi
@@ -13,6 +13,7 @@
13 * published by the Free Software Foundation. 13 * published by the Free Software Foundation.
14 */ 14 */
15 15
16#include <dt-bindings/clock/exynos5420.h>
16#include "exynos5.dtsi" 17#include "exynos5.dtsi"
17#include "exynos5420-pinctrl.dtsi" 18#include "exynos5420-pinctrl.dtsi"
18 19
@@ -119,7 +120,8 @@
119 compatible = "samsung,exynos5420-audss-clock"; 120 compatible = "samsung,exynos5420-audss-clock";
120 reg = <0x03810000 0x0C>; 121 reg = <0x03810000 0x0C>;
121 #clock-cells = <1>; 122 #clock-cells = <1>;
122 clocks = <&clock 1>, <&clock 5>, <&clock 148>, <&clock 149>; 123 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_FOUT_EPLL>,
124 <&clock CLK_SCLK_MAUDIO0>, <&clock CLK_SCLK_MAUPCM0>;
123 clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in"; 125 clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in";
124 }; 126 };
125 127
@@ -127,7 +129,7 @@
127 compatible = "samsung,mfc-v7"; 129 compatible = "samsung,mfc-v7";
128 reg = <0x11000000 0x10000>; 130 reg = <0x11000000 0x10000>;
129 interrupts = <0 96 0>; 131 interrupts = <0 96 0>;
130 clocks = <&clock 401>; 132 clocks = <&clock CLK_MFC>;
131 clock-names = "mfc"; 133 clock-names = "mfc";
132 }; 134 };
133 135
@@ -137,7 +139,7 @@
137 #address-cells = <1>; 139 #address-cells = <1>;
138 #size-cells = <0>; 140 #size-cells = <0>;
139 reg = <0x12200000 0x2000>; 141 reg = <0x12200000 0x2000>;
140 clocks = <&clock 351>, <&clock 132>; 142 clocks = <&clock CLK_MMC0>, <&clock CLK_SCLK_MMC0>;
141 clock-names = "biu", "ciu"; 143 clock-names = "biu", "ciu";
142 fifo-depth = <0x40>; 144 fifo-depth = <0x40>;
143 status = "disabled"; 145 status = "disabled";
@@ -149,7 +151,7 @@
149 #address-cells = <1>; 151 #address-cells = <1>;
150 #size-cells = <0>; 152 #size-cells = <0>;
151 reg = <0x12210000 0x2000>; 153 reg = <0x12210000 0x2000>;
152 clocks = <&clock 352>, <&clock 133>; 154 clocks = <&clock CLK_MMC1>, <&clock CLK_SCLK_MMC1>;
153 clock-names = "biu", "ciu"; 155 clock-names = "biu", "ciu";
154 fifo-depth = <0x40>; 156 fifo-depth = <0x40>;
155 status = "disabled"; 157 status = "disabled";
@@ -161,7 +163,7 @@
161 #address-cells = <1>; 163 #address-cells = <1>;
162 #size-cells = <0>; 164 #size-cells = <0>;
163 reg = <0x12220000 0x1000>; 165 reg = <0x12220000 0x1000>;
164 clocks = <&clock 353>, <&clock 134>; 166 clocks = <&clock CLK_MMC2>, <&clock CLK_SCLK_MMC2>;
165 clock-names = "biu", "ciu"; 167 clock-names = "biu", "ciu";
166 fifo-depth = <0x40>; 168 fifo-depth = <0x40>;
167 status = "disabled"; 169 status = "disabled";
@@ -175,7 +177,7 @@
175 interrupt-parent = <&mct_map>; 177 interrupt-parent = <&mct_map>;
176 interrupts = <0>, <1>, <2>, <3>, <4>, <5>, <6>, <7>, 178 interrupts = <0>, <1>, <2>, <3>, <4>, <5>, <6>, <7>,
177 <8>, <9>, <10>, <11>; 179 <8>, <9>, <10>, <11>;
178 clocks = <&clock 1>, <&clock 315>; 180 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
179 clock-names = "fin_pll", "mct"; 181 clock-names = "fin_pll", "mct";
180 182
181 mct_map: mct-map { 183 mct_map: mct-map {
@@ -269,9 +271,9 @@
269 }; 271 };
270 272
271 rtc@101E0000 { 273 rtc@101E0000 {
272 clocks = <&clock 317>; 274 clocks = <&clock CLK_RTC>;
273 clock-names = "rtc"; 275 clock-names = "rtc";
274 status = "okay"; 276 status = "disabled";
275 }; 277 };
276 278
277 amba { 279 amba {
@@ -281,11 +283,22 @@
281 interrupt-parent = <&gic>; 283 interrupt-parent = <&gic>;
282 ranges; 284 ranges;
283 285
286 adma: adma@03880000 {
287 compatible = "arm,pl330", "arm,primecell";
288 reg = <0x03880000 0x1000>;
289 interrupts = <0 110 0>;
290 clocks = <&clock_audss EXYNOS_ADMA>;
291 clock-names = "apb_pclk";
292 #dma-cells = <1>;
293 #dma-channels = <6>;
294 #dma-requests = <16>;
295 };
296
284 pdma0: pdma@121A0000 { 297 pdma0: pdma@121A0000 {
285 compatible = "arm,pl330", "arm,primecell"; 298 compatible = "arm,pl330", "arm,primecell";
286 reg = <0x121A0000 0x1000>; 299 reg = <0x121A0000 0x1000>;
287 interrupts = <0 34 0>; 300 interrupts = <0 34 0>;
288 clocks = <&clock 362>; 301 clocks = <&clock CLK_PDMA0>;
289 clock-names = "apb_pclk"; 302 clock-names = "apb_pclk";
290 #dma-cells = <1>; 303 #dma-cells = <1>;
291 #dma-channels = <8>; 304 #dma-channels = <8>;
@@ -296,7 +309,7 @@
296 compatible = "arm,pl330", "arm,primecell"; 309 compatible = "arm,pl330", "arm,primecell";
297 reg = <0x121B0000 0x1000>; 310 reg = <0x121B0000 0x1000>;
298 interrupts = <0 35 0>; 311 interrupts = <0 35 0>;
299 clocks = <&clock 363>; 312 clocks = <&clock CLK_PDMA1>;
300 clock-names = "apb_pclk"; 313 clock-names = "apb_pclk";
301 #dma-cells = <1>; 314 #dma-cells = <1>;
302 #dma-channels = <8>; 315 #dma-channels = <8>;
@@ -307,7 +320,7 @@
307 compatible = "arm,pl330", "arm,primecell"; 320 compatible = "arm,pl330", "arm,primecell";
308 reg = <0x10800000 0x1000>; 321 reg = <0x10800000 0x1000>;
309 interrupts = <0 33 0>; 322 interrupts = <0 33 0>;
310 clocks = <&clock 473>; 323 clocks = <&clock CLK_MDMA0>;
311 clock-names = "apb_pclk"; 324 clock-names = "apb_pclk";
312 #dma-cells = <1>; 325 #dma-cells = <1>;
313 #dma-channels = <8>; 326 #dma-channels = <8>;
@@ -318,7 +331,7 @@
318 compatible = "arm,pl330", "arm,primecell"; 331 compatible = "arm,pl330", "arm,primecell";
319 reg = <0x11C10000 0x1000>; 332 reg = <0x11C10000 0x1000>;
320 interrupts = <0 124 0>; 333 interrupts = <0 124 0>;
321 clocks = <&clock 442>; 334 clocks = <&clock CLK_MDMA1>;
322 clock-names = "apb_pclk"; 335 clock-names = "apb_pclk";
323 #dma-cells = <1>; 336 #dma-cells = <1>;
324 #dma-channels = <8>; 337 #dma-channels = <8>;
@@ -326,6 +339,49 @@
326 }; 339 };
327 }; 340 };
328 341
342 i2s0: i2s@03830000 {
343 compatible = "samsung,exynos5420-i2s";
344 reg = <0x03830000 0x100>;
345 dmas = <&adma 0
346 &adma 2
347 &adma 1>;
348 dma-names = "tx", "rx", "tx-sec";
349 clocks = <&clock_audss EXYNOS_I2S_BUS>,
350 <&clock_audss EXYNOS_I2S_BUS>,
351 <&clock_audss EXYNOS_SCLK_I2S>;
352 clock-names = "iis", "i2s_opclk0", "i2s_opclk1";
353 samsung,idma-addr = <0x03000000>;
354 pinctrl-names = "default";
355 pinctrl-0 = <&i2s0_bus>;
356 status = "disabled";
357 };
358
359 i2s1: i2s@12D60000 {
360 compatible = "samsung,exynos5420-i2s";
361 reg = <0x12D60000 0x100>;
362 dmas = <&pdma1 12
363 &pdma1 11>;
364 dma-names = "tx", "rx";
365 clocks = <&clock CLK_I2S1>, <&clock CLK_SCLK_I2S1>;
366 clock-names = "iis", "i2s_opclk0";
367 pinctrl-names = "default";
368 pinctrl-0 = <&i2s1_bus>;
369 status = "disabled";
370 };
371
372 i2s2: i2s@12D70000 {
373 compatible = "samsung,exynos5420-i2s";
374 reg = <0x12D70000 0x100>;
375 dmas = <&pdma0 12
376 &pdma0 11>;
377 dma-names = "tx", "rx";
378 clocks = <&clock CLK_I2S2>, <&clock CLK_SCLK_I2S2>;
379 clock-names = "iis", "i2s_opclk0";
380 pinctrl-names = "default";
381 pinctrl-0 = <&i2s2_bus>;
382 status = "disabled";
383 };
384
329 spi_0: spi@12d20000 { 385 spi_0: spi@12d20000 {
330 compatible = "samsung,exynos4210-spi"; 386 compatible = "samsung,exynos4210-spi";
331 reg = <0x12d20000 0x100>; 387 reg = <0x12d20000 0x100>;
@@ -337,7 +393,7 @@
337 #size-cells = <0>; 393 #size-cells = <0>;
338 pinctrl-names = "default"; 394 pinctrl-names = "default";
339 pinctrl-0 = <&spi0_bus>; 395 pinctrl-0 = <&spi0_bus>;
340 clocks = <&clock 271>, <&clock 135>; 396 clocks = <&clock CLK_SPI0>, <&clock CLK_SCLK_SPI0>;
341 clock-names = "spi", "spi_busclk0"; 397 clock-names = "spi", "spi_busclk0";
342 status = "disabled"; 398 status = "disabled";
343 }; 399 };
@@ -353,7 +409,7 @@
353 #size-cells = <0>; 409 #size-cells = <0>;
354 pinctrl-names = "default"; 410 pinctrl-names = "default";
355 pinctrl-0 = <&spi1_bus>; 411 pinctrl-0 = <&spi1_bus>;
356 clocks = <&clock 272>, <&clock 136>; 412 clocks = <&clock CLK_SPI1>, <&clock CLK_SCLK_SPI1>;
357 clock-names = "spi", "spi_busclk0"; 413 clock-names = "spi", "spi_busclk0";
358 status = "disabled"; 414 status = "disabled";
359 }; 415 };
@@ -369,28 +425,28 @@
369 #size-cells = <0>; 425 #size-cells = <0>;
370 pinctrl-names = "default"; 426 pinctrl-names = "default";
371 pinctrl-0 = <&spi2_bus>; 427 pinctrl-0 = <&spi2_bus>;
372 clocks = <&clock 273>, <&clock 137>; 428 clocks = <&clock CLK_SPI2>, <&clock CLK_SCLK_SPI2>;
373 clock-names = "spi", "spi_busclk0"; 429 clock-names = "spi", "spi_busclk0";
374 status = "disabled"; 430 status = "disabled";
375 }; 431 };
376 432
377 serial@12C00000 { 433 serial@12C00000 {
378 clocks = <&clock 257>, <&clock 128>; 434 clocks = <&clock CLK_UART0>, <&clock CLK_SCLK_UART0>;
379 clock-names = "uart", "clk_uart_baud0"; 435 clock-names = "uart", "clk_uart_baud0";
380 }; 436 };
381 437
382 serial@12C10000 { 438 serial@12C10000 {
383 clocks = <&clock 258>, <&clock 129>; 439 clocks = <&clock CLK_UART1>, <&clock CLK_SCLK_UART1>;
384 clock-names = "uart", "clk_uart_baud0"; 440 clock-names = "uart", "clk_uart_baud0";
385 }; 441 };
386 442
387 serial@12C20000 { 443 serial@12C20000 {
388 clocks = <&clock 259>, <&clock 130>; 444 clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
389 clock-names = "uart", "clk_uart_baud0"; 445 clock-names = "uart", "clk_uart_baud0";
390 }; 446 };
391 447
392 serial@12C30000 { 448 serial@12C30000 {
393 clocks = <&clock 260>, <&clock 131>; 449 clocks = <&clock CLK_UART3>, <&clock CLK_SCLK_UART3>;
394 clock-names = "uart", "clk_uart_baud0"; 450 clock-names = "uart", "clk_uart_baud0";
395 }; 451 };
396 452
@@ -399,7 +455,7 @@
399 reg = <0x12dd0000 0x100>; 455 reg = <0x12dd0000 0x100>;
400 samsung,pwm-outputs = <0>, <1>, <2>, <3>; 456 samsung,pwm-outputs = <0>, <1>, <2>, <3>;
401 #pwm-cells = <3>; 457 #pwm-cells = <3>;
402 clocks = <&clock 279>; 458 clocks = <&clock CLK_PWM>;
403 clock-names = "timers"; 459 clock-names = "timers";
404 }; 460 };
405 461
@@ -410,7 +466,7 @@
410 }; 466 };
411 467
412 dp-controller@145B0000 { 468 dp-controller@145B0000 {
413 clocks = <&clock 412>; 469 clocks = <&clock CLK_DP1>;
414 clock-names = "dp"; 470 clock-names = "dp";
415 phys = <&dp_phy>; 471 phys = <&dp_phy>;
416 phy-names = "dp"; 472 phy-names = "dp";
@@ -418,7 +474,7 @@
418 474
419 fimd@14400000 { 475 fimd@14400000 {
420 samsung,power-domain = <&disp_pd>; 476 samsung,power-domain = <&disp_pd>;
421 clocks = <&clock 147>, <&clock 421>; 477 clocks = <&clock CLK_SCLK_FIMD1>, <&clock CLK_FIMD1>;
422 clock-names = "sclk_fimd", "fimd"; 478 clock-names = "sclk_fimd", "fimd";
423 }; 479 };
424 480
@@ -426,7 +482,7 @@
426 compatible = "samsung,exynos-adc-v2"; 482 compatible = "samsung,exynos-adc-v2";
427 reg = <0x12D10000 0x100>, <0x10040720 0x4>; 483 reg = <0x12D10000 0x100>, <0x10040720 0x4>;
428 interrupts = <0 106 0>; 484 interrupts = <0 106 0>;
429 clocks = <&clock 270>; 485 clocks = <&clock CLK_TSADC>;
430 clock-names = "adc"; 486 clock-names = "adc";
431 #io-channel-cells = <1>; 487 #io-channel-cells = <1>;
432 io-channel-ranges; 488 io-channel-ranges;
@@ -439,7 +495,7 @@
439 interrupts = <0 56 0>; 495 interrupts = <0 56 0>;
440 #address-cells = <1>; 496 #address-cells = <1>;
441 #size-cells = <0>; 497 #size-cells = <0>;
442 clocks = <&clock 261>; 498 clocks = <&clock CLK_I2C0>;
443 clock-names = "i2c"; 499 clock-names = "i2c";
444 pinctrl-names = "default"; 500 pinctrl-names = "default";
445 pinctrl-0 = <&i2c0_bus>; 501 pinctrl-0 = <&i2c0_bus>;
@@ -452,7 +508,7 @@
452 interrupts = <0 57 0>; 508 interrupts = <0 57 0>;
453 #address-cells = <1>; 509 #address-cells = <1>;
454 #size-cells = <0>; 510 #size-cells = <0>;
455 clocks = <&clock 262>; 511 clocks = <&clock CLK_I2C1>;
456 clock-names = "i2c"; 512 clock-names = "i2c";
457 pinctrl-names = "default"; 513 pinctrl-names = "default";
458 pinctrl-0 = <&i2c1_bus>; 514 pinctrl-0 = <&i2c1_bus>;
@@ -465,7 +521,7 @@
465 interrupts = <0 58 0>; 521 interrupts = <0 58 0>;
466 #address-cells = <1>; 522 #address-cells = <1>;
467 #size-cells = <0>; 523 #size-cells = <0>;
468 clocks = <&clock 263>; 524 clocks = <&clock CLK_I2C2>;
469 clock-names = "i2c"; 525 clock-names = "i2c";
470 pinctrl-names = "default"; 526 pinctrl-names = "default";
471 pinctrl-0 = <&i2c2_bus>; 527 pinctrl-0 = <&i2c2_bus>;
@@ -478,7 +534,7 @@
478 interrupts = <0 59 0>; 534 interrupts = <0 59 0>;
479 #address-cells = <1>; 535 #address-cells = <1>;
480 #size-cells = <0>; 536 #size-cells = <0>;
481 clocks = <&clock 264>; 537 clocks = <&clock CLK_I2C3>;
482 clock-names = "i2c"; 538 clock-names = "i2c";
483 pinctrl-names = "default"; 539 pinctrl-names = "default";
484 pinctrl-0 = <&i2c3_bus>; 540 pinctrl-0 = <&i2c3_bus>;
@@ -493,7 +549,7 @@
493 #size-cells = <0>; 549 #size-cells = <0>;
494 pinctrl-names = "default"; 550 pinctrl-names = "default";
495 pinctrl-0 = <&i2c4_hs_bus>; 551 pinctrl-0 = <&i2c4_hs_bus>;
496 clocks = <&clock 265>; 552 clocks = <&clock CLK_I2C4>;
497 clock-names = "hsi2c"; 553 clock-names = "hsi2c";
498 status = "disabled"; 554 status = "disabled";
499 }; 555 };
@@ -506,7 +562,7 @@
506 #size-cells = <0>; 562 #size-cells = <0>;
507 pinctrl-names = "default"; 563 pinctrl-names = "default";
508 pinctrl-0 = <&i2c5_hs_bus>; 564 pinctrl-0 = <&i2c5_hs_bus>;
509 clocks = <&clock 266>; 565 clocks = <&clock CLK_I2C5>;
510 clock-names = "hsi2c"; 566 clock-names = "hsi2c";
511 status = "disabled"; 567 status = "disabled";
512 }; 568 };
@@ -519,7 +575,7 @@
519 #size-cells = <0>; 575 #size-cells = <0>;
520 pinctrl-names = "default"; 576 pinctrl-names = "default";
521 pinctrl-0 = <&i2c6_hs_bus>; 577 pinctrl-0 = <&i2c6_hs_bus>;
522 clocks = <&clock 267>; 578 clocks = <&clock CLK_I2C6>;
523 clock-names = "hsi2c"; 579 clock-names = "hsi2c";
524 status = "disabled"; 580 status = "disabled";
525 }; 581 };
@@ -532,7 +588,7 @@
532 #size-cells = <0>; 588 #size-cells = <0>;
533 pinctrl-names = "default"; 589 pinctrl-names = "default";
534 pinctrl-0 = <&i2c7_hs_bus>; 590 pinctrl-0 = <&i2c7_hs_bus>;
535 clocks = <&clock 268>; 591 clocks = <&clock CLK_I2C7>;
536 clock-names = "hsi2c"; 592 clock-names = "hsi2c";
537 status = "disabled"; 593 status = "disabled";
538 }; 594 };
@@ -545,7 +601,7 @@
545 #size-cells = <0>; 601 #size-cells = <0>;
546 pinctrl-names = "default"; 602 pinctrl-names = "default";
547 pinctrl-0 = <&i2c8_hs_bus>; 603 pinctrl-0 = <&i2c8_hs_bus>;
548 clocks = <&clock 281>; 604 clocks = <&clock CLK_I2C8>;
549 clock-names = "hsi2c"; 605 clock-names = "hsi2c";
550 status = "disabled"; 606 status = "disabled";
551 }; 607 };
@@ -558,7 +614,7 @@
558 #size-cells = <0>; 614 #size-cells = <0>;
559 pinctrl-names = "default"; 615 pinctrl-names = "default";
560 pinctrl-0 = <&i2c9_hs_bus>; 616 pinctrl-0 = <&i2c9_hs_bus>;
561 clocks = <&clock 282>; 617 clocks = <&clock CLK_I2C9>;
562 clock-names = "hsi2c"; 618 clock-names = "hsi2c";
563 status = "disabled"; 619 status = "disabled";
564 }; 620 };
@@ -571,7 +627,7 @@
571 #size-cells = <0>; 627 #size-cells = <0>;
572 pinctrl-names = "default"; 628 pinctrl-names = "default";
573 pinctrl-0 = <&i2c10_hs_bus>; 629 pinctrl-0 = <&i2c10_hs_bus>;
574 clocks = <&clock 283>; 630 clocks = <&clock CLK_I2C10>;
575 clock-names = "hsi2c"; 631 clock-names = "hsi2c";
576 status = "disabled"; 632 status = "disabled";
577 }; 633 };
@@ -580,8 +636,9 @@
580 compatible = "samsung,exynos4212-hdmi"; 636 compatible = "samsung,exynos4212-hdmi";
581 reg = <0x14530000 0x70000>; 637 reg = <0x14530000 0x70000>;
582 interrupts = <0 95 0>; 638 interrupts = <0 95 0>;
583 clocks = <&clock 413>, <&clock 143>, <&clock 768>, 639 clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
584 <&clock 158>, <&clock 640>; 640 <&clock CLK_DOUT_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
641 <&clock CLK_MOUT_HDMI>;
585 clock-names = "hdmi", "sclk_hdmi", "sclk_pixel", 642 clock-names = "hdmi", "sclk_hdmi", "sclk_pixel",
586 "sclk_hdmiphy", "mout_hdmi"; 643 "sclk_hdmiphy", "mout_hdmi";
587 status = "disabled"; 644 status = "disabled";
@@ -591,7 +648,7 @@
591 compatible = "samsung,exynos5420-mixer"; 648 compatible = "samsung,exynos5420-mixer";
592 reg = <0x14450000 0x10000>; 649 reg = <0x14450000 0x10000>;
593 interrupts = <0 94 0>; 650 interrupts = <0 94 0>;
594 clocks = <&clock 431>, <&clock 143>; 651 clocks = <&clock CLK_MIXER>, <&clock CLK_SCLK_HDMI>;
595 clock-names = "mixer", "sclk_hdmi"; 652 clock-names = "mixer", "sclk_hdmi";
596 }; 653 };
597 654
@@ -599,7 +656,7 @@
599 compatible = "samsung,exynos5-gsc"; 656 compatible = "samsung,exynos5-gsc";
600 reg = <0x13e00000 0x1000>; 657 reg = <0x13e00000 0x1000>;
601 interrupts = <0 85 0>; 658 interrupts = <0 85 0>;
602 clocks = <&clock 465>; 659 clocks = <&clock CLK_GSCL0>;
603 clock-names = "gscl"; 660 clock-names = "gscl";
604 samsung,power-domain = <&gsc_pd>; 661 samsung,power-domain = <&gsc_pd>;
605 }; 662 };
@@ -608,16 +665,21 @@
608 compatible = "samsung,exynos5-gsc"; 665 compatible = "samsung,exynos5-gsc";
609 reg = <0x13e10000 0x1000>; 666 reg = <0x13e10000 0x1000>;
610 interrupts = <0 86 0>; 667 interrupts = <0 86 0>;
611 clocks = <&clock 466>; 668 clocks = <&clock CLK_GSCL1>;
612 clock-names = "gscl"; 669 clock-names = "gscl";
613 samsung,power-domain = <&gsc_pd>; 670 samsung,power-domain = <&gsc_pd>;
614 }; 671 };
615 672
673 pmu_system_controller: system-controller@10040000 {
674 compatible = "samsung,exynos5420-pmu", "syscon";
675 reg = <0x10040000 0x5000>;
676 };
677
616 tmu_cpu0: tmu@10060000 { 678 tmu_cpu0: tmu@10060000 {
617 compatible = "samsung,exynos5420-tmu"; 679 compatible = "samsung,exynos5420-tmu";
618 reg = <0x10060000 0x100>; 680 reg = <0x10060000 0x100>;
619 interrupts = <0 65 0>; 681 interrupts = <0 65 0>;
620 clocks = <&clock 318>; 682 clocks = <&clock CLK_TMU>;
621 clock-names = "tmu_apbif"; 683 clock-names = "tmu_apbif";
622 }; 684 };
623 685
@@ -625,7 +687,7 @@
625 compatible = "samsung,exynos5420-tmu"; 687 compatible = "samsung,exynos5420-tmu";
626 reg = <0x10064000 0x100>; 688 reg = <0x10064000 0x100>;
627 interrupts = <0 183 0>; 689 interrupts = <0 183 0>;
628 clocks = <&clock 318>; 690 clocks = <&clock CLK_TMU>;
629 clock-names = "tmu_apbif"; 691 clock-names = "tmu_apbif";
630 }; 692 };
631 693
@@ -633,7 +695,7 @@
633 compatible = "samsung,exynos5420-tmu-ext-triminfo"; 695 compatible = "samsung,exynos5420-tmu-ext-triminfo";
634 reg = <0x10068000 0x100>, <0x1006c000 0x4>; 696 reg = <0x10068000 0x100>, <0x1006c000 0x4>;
635 interrupts = <0 184 0>; 697 interrupts = <0 184 0>;
636 clocks = <&clock 318>, <&clock 318>; 698 clocks = <&clock CLK_TMU>, <&clock CLK_TMU>;
637 clock-names = "tmu_apbif", "tmu_triminfo_apbif"; 699 clock-names = "tmu_apbif", "tmu_triminfo_apbif";
638 }; 700 };
639 701
@@ -641,7 +703,7 @@
641 compatible = "samsung,exynos5420-tmu-ext-triminfo"; 703 compatible = "samsung,exynos5420-tmu-ext-triminfo";
642 reg = <0x1006c000 0x100>, <0x100a0000 0x4>; 704 reg = <0x1006c000 0x100>, <0x100a0000 0x4>;
643 interrupts = <0 185 0>; 705 interrupts = <0 185 0>;
644 clocks = <&clock 318>, <&clock 319>; 706 clocks = <&clock CLK_TMU>, <&clock CLK_TMU_GPU>;
645 clock-names = "tmu_apbif", "tmu_triminfo_apbif"; 707 clock-names = "tmu_apbif", "tmu_triminfo_apbif";
646 }; 708 };
647 709
@@ -649,7 +711,16 @@
649 compatible = "samsung,exynos5420-tmu-ext-triminfo"; 711 compatible = "samsung,exynos5420-tmu-ext-triminfo";
650 reg = <0x100a0000 0x100>, <0x10068000 0x4>; 712 reg = <0x100a0000 0x100>, <0x10068000 0x4>;
651 interrupts = <0 215 0>; 713 interrupts = <0 215 0>;
652 clocks = <&clock 319>, <&clock 318>; 714 clocks = <&clock CLK_TMU_GPU>, <&clock CLK_TMU>;
653 clock-names = "tmu_apbif", "tmu_triminfo_apbif"; 715 clock-names = "tmu_apbif", "tmu_triminfo_apbif";
654 }; 716 };
717
718 watchdog@101D0000 {
719 compatible = "samsung,exynos5420-wdt";
720 reg = <0x101D0000 0x100>;
721 interrupts = <0 42 0>;
722 clocks = <&clock CLK_WDT>;
723 clock-names = "watchdog";
724 samsung,syscon-phandle = <&pmu_system_controller>;
725 };
655}; 726};
diff --git a/arch/arm/boot/dts/exynos5440.dtsi b/arch/arm/boot/dts/exynos5440.dtsi
index 02a0a1226cef..75c7b89cec2f 100644
--- a/arch/arm/boot/dts/exynos5440.dtsi
+++ b/arch/arm/boot/dts/exynos5440.dtsi
@@ -9,6 +9,7 @@
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10*/ 10*/
11 11
12#include <dt-bindings/clock/exynos5440.h>
12#include "skeleton.dtsi" 13#include "skeleton.dtsi"
13 14
14/ { 15/ {
@@ -105,7 +106,7 @@
105 compatible = "samsung,exynos4210-uart"; 106 compatible = "samsung,exynos4210-uart";
106 reg = <0xB0000 0x1000>; 107 reg = <0xB0000 0x1000>;
107 interrupts = <0 2 0>; 108 interrupts = <0 2 0>;
108 clocks = <&clock 21>, <&clock 21>; 109 clocks = <&clock CLK_B_125>, <&clock CLK_B_125>;
109 clock-names = "uart", "clk_uart_baud0"; 110 clock-names = "uart", "clk_uart_baud0";
110 }; 111 };
111 112
@@ -113,7 +114,7 @@
113 compatible = "samsung,exynos4210-uart"; 114 compatible = "samsung,exynos4210-uart";
114 reg = <0xC0000 0x1000>; 115 reg = <0xC0000 0x1000>;
115 interrupts = <0 3 0>; 116 interrupts = <0 3 0>;
116 clocks = <&clock 21>, <&clock 21>; 117 clocks = <&clock CLK_B_125>, <&clock CLK_B_125>;
117 clock-names = "uart", "clk_uart_baud0"; 118 clock-names = "uart", "clk_uart_baud0";
118 }; 119 };
119 120
@@ -125,7 +126,7 @@
125 #size-cells = <0>; 126 #size-cells = <0>;
126 samsung,spi-src-clk = <0>; 127 samsung,spi-src-clk = <0>;
127 num-cs = <1>; 128 num-cs = <1>;
128 clocks = <&clock 21>, <&clock 16>; 129 clocks = <&clock CLK_B_125>, <&clock CLK_SPI_BAUD>;
129 clock-names = "spi", "spi_busclk0"; 130 clock-names = "spi", "spi_busclk0";
130 }; 131 };
131 132
@@ -161,7 +162,7 @@
161 interrupts = <0 5 0>; 162 interrupts = <0 5 0>;
162 #address-cells = <1>; 163 #address-cells = <1>;
163 #size-cells = <0>; 164 #size-cells = <0>;
164 clocks = <&clock 21>; 165 clocks = <&clock CLK_B_125>;
165 clock-names = "i2c"; 166 clock-names = "i2c";
166 }; 167 };
167 168
@@ -171,7 +172,7 @@
171 interrupts = <0 6 0>; 172 interrupts = <0 6 0>;
172 #address-cells = <1>; 173 #address-cells = <1>;
173 #size-cells = <0>; 174 #size-cells = <0>;
174 clocks = <&clock 21>; 175 clocks = <&clock CLK_B_125>;
175 clock-names = "i2c"; 176 clock-names = "i2c";
176 }; 177 };
177 178
@@ -179,7 +180,7 @@
179 compatible = "samsung,s3c2410-wdt"; 180 compatible = "samsung,s3c2410-wdt";
180 reg = <0x110000 0x1000>; 181 reg = <0x110000 0x1000>;
181 interrupts = <0 1 0>; 182 interrupts = <0 1 0>;
182 clocks = <&clock 21>; 183 clocks = <&clock CLK_B_125>;
183 clock-names = "watchdog"; 184 clock-names = "watchdog";
184 }; 185 };
185 186
@@ -190,7 +191,7 @@
190 interrupts = <0 31 4>; 191 interrupts = <0 31 4>;
191 interrupt-names = "macirq"; 192 interrupt-names = "macirq";
192 phy-mode = "sgmii"; 193 phy-mode = "sgmii";
193 clocks = <&clock 25>; 194 clocks = <&clock CLK_GMAC0>;
194 clock-names = "stmmaceth"; 195 clock-names = "stmmaceth";
195 }; 196 };
196 197
@@ -206,7 +207,7 @@
206 compatible = "samsung,s3c6410-rtc"; 207 compatible = "samsung,s3c6410-rtc";
207 reg = <0x130000 0x1000>; 208 reg = <0x130000 0x1000>;
208 interrupts = <0 17 0>, <0 16 0>; 209 interrupts = <0 17 0>, <0 16 0>;
209 clocks = <&clock 21>; 210 clocks = <&clock CLK_B_125>;
210 clock-names = "rtc"; 211 clock-names = "rtc";
211 }; 212 };
212 213
@@ -214,7 +215,7 @@
214 compatible = "samsung,exynos5440-tmu"; 215 compatible = "samsung,exynos5440-tmu";
215 reg = <0x160118 0x230>, <0x160368 0x10>; 216 reg = <0x160118 0x230>, <0x160368 0x10>;
216 interrupts = <0 58 0>; 217 interrupts = <0 58 0>;
217 clocks = <&clock 21>; 218 clocks = <&clock CLK_B_125>;
218 clock-names = "tmu_apbif"; 219 clock-names = "tmu_apbif";
219 }; 220 };
220 221
@@ -222,7 +223,7 @@
222 compatible = "samsung,exynos5440-tmu"; 223 compatible = "samsung,exynos5440-tmu";
223 reg = <0x16011C 0x230>, <0x160368 0x10>; 224 reg = <0x16011C 0x230>, <0x160368 0x10>;
224 interrupts = <0 58 0>; 225 interrupts = <0 58 0>;
225 clocks = <&clock 21>; 226 clocks = <&clock CLK_B_125>;
226 clock-names = "tmu_apbif"; 227 clock-names = "tmu_apbif";
227 }; 228 };
228 229
@@ -230,7 +231,7 @@
230 compatible = "samsung,exynos5440-tmu"; 231 compatible = "samsung,exynos5440-tmu";
231 reg = <0x160120 0x230>, <0x160368 0x10>; 232 reg = <0x160120 0x230>, <0x160368 0x10>;
232 interrupts = <0 58 0>; 233 interrupts = <0 58 0>;
233 clocks = <&clock 21>; 234 clocks = <&clock CLK_B_125>;
234 clock-names = "tmu_apbif"; 235 clock-names = "tmu_apbif";
235 }; 236 };
236 237
@@ -238,7 +239,7 @@
238 compatible = "snps,exynos5440-ahci"; 239 compatible = "snps,exynos5440-ahci";
239 reg = <0x210000 0x10000>; 240 reg = <0x210000 0x10000>;
240 interrupts = <0 30 0>; 241 interrupts = <0 30 0>;
241 clocks = <&clock 23>; 242 clocks = <&clock CLK_SATA>;
242 clock-names = "sata"; 243 clock-names = "sata";
243 }; 244 };
244 245
@@ -246,7 +247,7 @@
246 compatible = "samsung,exynos5440-ohci"; 247 compatible = "samsung,exynos5440-ohci";
247 reg = <0x220000 0x1000>; 248 reg = <0x220000 0x1000>;
248 interrupts = <0 29 0>; 249 interrupts = <0 29 0>;
249 clocks = <&clock 24>; 250 clocks = <&clock CLK_USB>;
250 clock-names = "usbhost"; 251 clock-names = "usbhost";
251 }; 252 };
252 253
@@ -254,7 +255,7 @@
254 compatible = "samsung,exynos5440-ehci"; 255 compatible = "samsung,exynos5440-ehci";
255 reg = <0x221000 0x1000>; 256 reg = <0x221000 0x1000>;
256 interrupts = <0 29 0>; 257 interrupts = <0 29 0>;
257 clocks = <&clock 24>; 258 clocks = <&clock CLK_USB>;
258 clock-names = "usbhost"; 259 clock-names = "usbhost";
259 }; 260 };
260 261
@@ -264,7 +265,7 @@
264 0x270000 0x1000 265 0x270000 0x1000
265 0x271000 0x40>; 266 0x271000 0x40>;
266 interrupts = <0 20 0>, <0 21 0>, <0 22 0>; 267 interrupts = <0 20 0>, <0 21 0>, <0 22 0>;
267 clocks = <&clock 28>, <&clock 27>; 268 clocks = <&clock CLK_PR0_250_O>, <&clock CLK_PB0_250_O>;
268 clock-names = "pcie", "pcie_bus"; 269 clock-names = "pcie", "pcie_bus";
269 #address-cells = <3>; 270 #address-cells = <3>;
270 #size-cells = <2>; 271 #size-cells = <2>;
@@ -285,7 +286,7 @@
285 0x272000 0x1000 286 0x272000 0x1000
286 0x271040 0x40>; 287 0x271040 0x40>;
287 interrupts = <0 23 0>, <0 24 0>, <0 25 0>; 288 interrupts = <0 23 0>, <0 24 0>, <0 25 0>;
288 clocks = <&clock 29>, <&clock 27>; 289 clocks = <&clock CLK_PR1_250_O>, <&clock CLK_PB0_250_O>;
289 clock-names = "pcie", "pcie_bus"; 290 clock-names = "pcie", "pcie_bus";
290 #address-cells = <3>; 291 #address-cells = <3>;
291 #size-cells = <2>; 292 #size-cells = <2>;
diff --git a/arch/arm/boot/dts/imx23-evk.dts b/arch/arm/boot/dts/imx23-evk.dts
index 1f026adefd45..a33f66c11b73 100644
--- a/arch/arm/boot/dts/imx23-evk.dts
+++ b/arch/arm/boot/dts/imx23-evk.dts
@@ -127,17 +127,21 @@
127 127
128 regulators { 128 regulators {
129 compatible = "simple-bus"; 129 compatible = "simple-bus";
130 #address-cells = <1>;
131 #size-cells = <0>;
130 132
131 reg_vddio_sd0: vddio-sd0 { 133 reg_vddio_sd0: regulator@0 {
132 compatible = "regulator-fixed"; 134 compatible = "regulator-fixed";
135 reg = <0>;
133 regulator-name = "vddio-sd0"; 136 regulator-name = "vddio-sd0";
134 regulator-min-microvolt = <3300000>; 137 regulator-min-microvolt = <3300000>;
135 regulator-max-microvolt = <3300000>; 138 regulator-max-microvolt = <3300000>;
136 gpio = <&gpio1 29 0>; 139 gpio = <&gpio1 29 0>;
137 }; 140 };
138 141
139 reg_lcd_3v3: lcd-3v3 { 142 reg_lcd_3v3: regulator@1 {
140 compatible = "regulator-fixed"; 143 compatible = "regulator-fixed";
144 reg = <1>;
141 regulator-name = "lcd-3v3"; 145 regulator-name = "lcd-3v3";
142 regulator-min-microvolt = <3300000>; 146 regulator-min-microvolt = <3300000>;
143 regulator-max-microvolt = <3300000>; 147 regulator-max-microvolt = <3300000>;
diff --git a/arch/arm/boot/dts/imx23-olinuxino.dts b/arch/arm/boot/dts/imx23-olinuxino.dts
index 526bfdbd87f9..7e6eef2488e8 100644
--- a/arch/arm/boot/dts/imx23-olinuxino.dts
+++ b/arch/arm/boot/dts/imx23-olinuxino.dts
@@ -100,9 +100,12 @@
100 100
101 regulators { 101 regulators {
102 compatible = "simple-bus"; 102 compatible = "simple-bus";
103 #address-cells = <1>;
104 #size-cells = <0>;
103 105
104 reg_usb0_vbus: usb0_vbus { 106 reg_usb0_vbus: regulator@0 {
105 compatible = "regulator-fixed"; 107 compatible = "regulator-fixed";
108 reg = <0>;
106 regulator-name = "usb0_vbus"; 109 regulator-name = "usb0_vbus";
107 regulator-min-microvolt = <5000000>; 110 regulator-min-microvolt = <5000000>;
108 regulator-max-microvolt = <5000000>; 111 regulator-max-microvolt = <5000000>;
diff --git a/arch/arm/boot/dts/imx23-stmp378x_devb.dts b/arch/arm/boot/dts/imx23-stmp378x_devb.dts
index cb64e2b191ea..455169e99d49 100644
--- a/arch/arm/boot/dts/imx23-stmp378x_devb.dts
+++ b/arch/arm/boot/dts/imx23-stmp378x_devb.dts
@@ -66,9 +66,12 @@
66 66
67 regulators { 67 regulators {
68 compatible = "simple-bus"; 68 compatible = "simple-bus";
69 #address-cells = <1>;
70 #size-cells = <0>;
69 71
70 reg_vddio_sd0: vddio-sd0 { 72 reg_vddio_sd0: regulator@0 {
71 compatible = "regulator-fixed"; 73 compatible = "regulator-fixed";
74 reg = <0>;
72 regulator-name = "vddio-sd0"; 75 regulator-name = "vddio-sd0";
73 regulator-min-microvolt = <3300000>; 76 regulator-min-microvolt = <3300000>;
74 regulator-max-microvolt = <3300000>; 77 regulator-max-microvolt = <3300000>;
diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi
index 581b75433be6..bbcfb5a19c77 100644
--- a/arch/arm/boot/dts/imx23.dtsi
+++ b/arch/arm/boot/dts/imx23.dtsi
@@ -23,6 +23,7 @@
23 serial1 = &auart1; 23 serial1 = &auart1;
24 spi0 = &ssp0; 24 spi0 = &ssp0;
25 spi1 = &ssp1; 25 spi1 = &ssp1;
26 usbphy0 = &usbphy0;
26 }; 27 };
27 28
28 cpus { 29 cpus {
@@ -428,7 +429,7 @@
428 status = "disabled"; 429 status = "disabled";
429 }; 430 };
430 431
431 lradc@80050000 { 432 lradc: lradc@80050000 {
432 compatible = "fsl,imx23-lradc"; 433 compatible = "fsl,imx23-lradc";
433 reg = <0x80050000 0x2000>; 434 reg = <0x80050000 0x2000>;
434 interrupts = <36 37 38 39 40 41 42 43 44>; 435 interrupts = <36 37 38 39 40 41 42 43 44>;
@@ -526,4 +527,9 @@
526 status = "disabled"; 527 status = "disabled";
527 }; 528 };
528 }; 529 };
530
531 iio_hwmon {
532 compatible = "iio-hwmon";
533 io-channels = <&lradc 8>;
534 };
529}; 535};
diff --git a/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi b/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi
new file mode 100644
index 000000000000..d6f27641c0ef
--- /dev/null
+++ b/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi
@@ -0,0 +1,73 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include "imx25.dtsi"
15
16/ {
17 model = "Eukrea CPUIMX25";
18 compatible = "eukrea,cpuimx25", "fsl,imx25";
19
20 memory {
21 reg = <0x80000000 0x4000000>; /* 64M */
22 };
23};
24
25&fec {
26 phy-mode = "rmii";
27 pinctrl-names = "default";
28 pinctrl-0 = <&pinctrl_fec>;
29 status = "okay";
30};
31
32&i2c1 {
33 pinctrl-names = "default";
34 pinctrl-0 = <&pinctrl_i2c1>;
35 status = "okay";
36
37 pcf8563@51 {
38 compatible = "nxp,pcf8563";
39 reg = <0x51>;
40 };
41};
42
43&iomuxc {
44 imx25-eukrea-cpuimx25 {
45 pinctrl_fec: fecgrp {
46 fsl,pins = <
47 MX25_PAD_FEC_MDC__FEC_MDC 0x80000000
48 MX25_PAD_FEC_MDIO__FEC_MDIO 0x400001e0
49 MX25_PAD_FEC_TDATA0__FEC_TDATA0 0x80000000
50 MX25_PAD_FEC_TDATA1__FEC_TDATA1 0x80000000
51 MX25_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
52 MX25_PAD_FEC_RDATA0__FEC_RDATA0 0x80000000
53 MX25_PAD_FEC_RDATA1__FEC_RDATA1 0x80000000
54 MX25_PAD_FEC_RX_DV__FEC_RX_DV 0x80000000
55 MX25_PAD_FEC_TX_CLK__FEC_TX_CLK 0x1c0
56 >;
57 };
58
59 pinctrl_i2c1: i2c1grp {
60 fsl,pins = <
61 MX25_PAD_I2C1_CLK__I2C1_CLK 0x80000000
62 MX25_PAD_I2C1_DAT__I2C1_DAT 0x80000000
63 >;
64 };
65 };
66};
67
68&nfc {
69 nand-bus-width = <8>;
70 nand-ecc-mode = "hw";
71 nand-on-flash-bbt;
72 status = "okay";
73};
diff --git a/arch/arm/boot/dts/imx25-eukrea-mbimxsd25-baseboard.dts b/arch/arm/boot/dts/imx25-eukrea-mbimxsd25-baseboard.dts
new file mode 100644
index 000000000000..62fb3da50bdb
--- /dev/null
+++ b/arch/arm/boot/dts/imx25-eukrea-mbimxsd25-baseboard.dts
@@ -0,0 +1,174 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14/dts-v1/;
15
16#include <dt-bindings/gpio/gpio.h>
17#include <dt-bindings/input/input.h>
18#include "imx25-eukrea-cpuimx25.dtsi"
19
20/ {
21 model = "Eukrea MBIMXSD25";
22 compatible = "eukrea,mbimxsd25-baseboard", "eukrea,cpuimx25", "fsl,imx25";
23
24 gpio_keys {
25 compatible = "gpio-keys";
26 pinctrl-names = "default";
27 pinctrl-0 = <&pinctrl_gpiokeys>;
28
29 bp1 {
30 label = "BP1";
31 gpios = <&gpio3 18 GPIO_ACTIVE_LOW>;
32 linux,code = <BTN_MISC>;
33 gpio-key,wakeup;
34 };
35 };
36
37 leds {
38 compatible = "gpio-leds";
39 pinctrl-names = "default";
40 pinctrl-0 = <&pinctrl_gpioled>;
41
42 led1 {
43 label = "led1";
44 gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
45 linux,default-trigger = "heartbeat";
46 };
47 };
48
49 sound {
50 compatible = "eukrea,asoc-tlv320";
51 eukrea,model = "imx25-eukrea-tlv320aic23";
52 ssi-controller = <&ssi1>;
53 fsl,mux-int-port = <1>;
54 fsl,mux-ext-port = <5>;
55 };
56};
57
58&audmux {
59 pinctrl-names = "default";
60 pinctrl-0 = <&pinctrl_audmux>;
61 status = "okay";
62};
63
64&esdhc1 {
65 pinctrl-names = "default";
66 pinctrl-0 = <&pinctrl_esdhc1>;
67 cd-gpios = <&gpio1 20>;
68 status = "okay";
69};
70
71&i2c1 {
72 tlv320aic23: codec@1a {
73 compatible = "ti,tlv320aic23";
74 reg = <0x1a>;
75 };
76};
77
78&iomuxc {
79 imx25-eukrea-mbimxsd25-baseboard {
80 pinctrl_audmux: audmuxgrp {
81 fsl,pins = <
82 MX25_PAD_KPP_COL3__AUD5_TXFS 0xe0
83 MX25_PAD_KPP_COL2__AUD5_TXC 0xe0
84 MX25_PAD_KPP_COL1__AUD5_RXD 0xe0
85 MX25_PAD_KPP_COL0__AUD5_TXD 0xe0
86 >;
87 };
88
89 pinctrl_esdhc1: esdhc1grp {
90 fsl,pins = <
91 MX25_PAD_SD1_CMD__SD1_CMD 0x400000c0
92 MX25_PAD_SD1_CLK__SD1_CLK 0x400000c0
93 MX25_PAD_SD1_DATA0__SD1_DATA0 0x400000c0
94 MX25_PAD_SD1_DATA1__SD1_DATA1 0x400000c0
95 MX25_PAD_SD1_DATA2__SD1_DATA2 0x400000c0
96 MX25_PAD_SD1_DATA3__SD1_DATA3 0x400000c0
97 >;
98 };
99
100 pinctrl_gpiokeys: gpiokeysgrp {
101 fsl,pins = <MX25_PAD_VSTBY_ACK__GPIO_3_18 0x80000000>;
102 };
103
104 pinctrl_gpioled: gpioledgrp {
105 fsl,pins = <MX25_PAD_POWER_FAIL__GPIO_3_19 0x80000000>;
106 };
107
108 pinctrl_lcdc: lcdcgrp {
109 fsl,pins = <
110 MX25_PAD_LD0__LD0 0x1
111 MX25_PAD_LD1__LD1 0x1
112 MX25_PAD_LD2__LD2 0x1
113 MX25_PAD_LD3__LD3 0x1
114 MX25_PAD_LD4__LD4 0x1
115 MX25_PAD_LD5__LD5 0x1
116 MX25_PAD_LD6__LD6 0x1
117 MX25_PAD_LD7__LD7 0x1
118 MX25_PAD_LD8__LD8 0x1
119 MX25_PAD_LD9__LD9 0x1
120 MX25_PAD_LD10__LD10 0x1
121 MX25_PAD_LD11__LD11 0x1
122 MX25_PAD_LD12__LD12 0x1
123 MX25_PAD_LD13__LD13 0x1
124 MX25_PAD_LD14__LD14 0x1
125 MX25_PAD_LD15__LD15 0x1
126 MX25_PAD_GPIO_E__LD16 0x1
127 MX25_PAD_GPIO_F__LD17 0x1
128 MX25_PAD_HSYNC__HSYNC 0x80000000
129 MX25_PAD_VSYNC__VSYNC 0x80000000
130 MX25_PAD_LSCLK__LSCLK 0x80000000
131 MX25_PAD_OE_ACD__OE_ACD 0x80000000
132 MX25_PAD_CONTRAST__CONTRAST 0x80000000
133 >;
134 };
135
136 pinctrl_uart1: uart1grp {
137 fsl,pins = <
138 MX25_PAD_UART1_RTS__UART1_RTS 0xe0
139 MX25_PAD_UART1_CTS__UART1_CTS 0xe0
140 MX25_PAD_UART1_TXD__UART1_TXD 0x80000000
141 MX25_PAD_UART1_RXD__UART1_RXD 0xc0
142 >;
143 };
144
145 pinctrl_uart2: uart2grp {
146 fsl,pins = <
147 MX25_PAD_UART2_RXD__UART2_RXD 0x80000000
148 MX25_PAD_UART2_TXD__UART2_TXD 0x80000000
149 MX25_PAD_UART2_RTS__UART2_RTS 0x80000000
150 MX25_PAD_UART2_CTS__UART2_CTS 0x80000000
151 >;
152 };
153 };
154};
155
156&ssi1 {
157 codec-handle = <&tlv320aic23>;
158 fsl,mode = "i2s-slave";
159 status = "okay";
160};
161
162&uart1 {
163 pinctrl-names = "default";
164 pinctrl-0 = <&pinctrl_uart1>;
165 fsl,uart-has-rtscts;
166 status = "okay";
167};
168
169&uart2 {
170 pinctrl-names = "default";
171 pinctrl-0 = <&pinctrl_uart2>;
172 fsl,uart-has-rtscts;
173 status = "okay";
174};
diff --git a/arch/arm/boot/dts/imx25-pinfunc.h b/arch/arm/boot/dts/imx25-pinfunc.h
new file mode 100644
index 000000000000..9238a95d8e62
--- /dev/null
+++ b/arch/arm/boot/dts/imx25-pinfunc.h
@@ -0,0 +1,494 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 * Based on imx35-pinfunc.h in the same directory Which is:
4 * Copyright 2013 Freescale Semiconductor, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#ifndef __DTS_IMX25_PINFUNC_H
13#define __DTS_IMX25_PINFUNC_H
14
15/*
16 * The pin function ID is a tuple of
17 * <mux_reg conf_reg input_reg mux_mode input_val>
18 */
19
20#define MX25_PAD_A10__A10 0x008 0x000 0x000 0x00 0x000
21#define MX25_PAD_A10__GPIO_4_0 0x008 0x000 0x000 0x05 0x000
22
23#define MX25_PAD_A13__A13 0x00c 0x22C 0x000 0x00 0x000
24#define MX25_PAD_A13__GPIO_4_1 0x00c 0x22C 0x000 0x05 0x000
25
26#define MX25_PAD_A14__A14 0x010 0x230 0x000 0x10 0x000
27#define MX25_PAD_A14__GPIO_2_0 0x010 0x230 0x000 0x15 0x000
28
29#define MX25_PAD_A15__A15 0x014 0x234 0x000 0x10 0x000
30#define MX25_PAD_A15__GPIO_2_1 0x014 0x234 0x000 0x15 0x000
31
32#define MX25_PAD_A16__A16 0x018 0x000 0x000 0x10 0x000
33#define MX25_PAD_A16__GPIO_2_2 0x018 0x000 0x000 0x15 0x000
34
35#define MX25_PAD_A17__A17 0x01c 0x238 0x000 0x10 0x000
36#define MX25_PAD_A17__GPIO_2_3 0x01c 0x238 0x000 0x15 0x000
37
38#define MX25_PAD_A18__A18 0x020 0x23c 0x000 0x10 0x000
39#define MX25_PAD_A18__GPIO_2_4 0x020 0x23c 0x000 0x15 0x000
40#define MX25_PAD_A18__FEC_COL 0x020 0x23c 0x504 0x17 0x000
41
42#define MX25_PAD_A19__A19 0x024 0x240 0x000 0x10 0x000
43#define MX25_PAD_A19__FEC_RX_ER 0x024 0x240 0x518 0x17 0x000
44#define MX25_PAD_A19__GPIO_2_5 0x024 0x240 0x000 0x15 0x000
45
46#define MX25_PAD_A20__A20 0x028 0x244 0x000 0x10 0x000
47#define MX25_PAD_A20__GPIO_2_6 0x028 0x244 0x000 0x15 0x000
48#define MX25_PAD_A20__FEC_RDATA2 0x028 0x244 0x50c 0x17 0x000
49
50#define MX25_PAD_A21__A21 0x02c 0x248 0x000 0x10 0x000
51#define MX25_PAD_A21__GPIO_2_7 0x02c 0x248 0x000 0x15 0x000
52#define MX25_PAD_A21__FEC_RDATA3 0x02c 0x248 0x510 0x17 0x000
53
54#define MX25_PAD_A22__A22 0x030 0x000 0x000 0x10 0x000
55#define MX25_PAD_A22__GPIO_2_8 0x030 0x000 0x000 0x15 0x000
56
57#define MX25_PAD_A23__A23 0x034 0x24c 0x000 0x10 0x000
58#define MX25_PAD_A23__GPIO_2_9 0x034 0x24c 0x000 0x15 0x000
59
60#define MX25_PAD_A24__A24 0x038 0x250 0x000 0x10 0x000
61#define MX25_PAD_A24__GPIO_2_10 0x038 0x250 0x000 0x15 0x000
62#define MX25_PAD_A24__FEC_RX_CLK 0x038 0x250 0x514 0x17 0x000
63
64#define MX25_PAD_A25__A25 0x03c 0x254 0x000 0x10 0x000
65#define MX25_PAD_A25__GPIO_2_11 0x03c 0x254 0x000 0x15 0x000
66#define MX25_PAD_A25__FEC_CRS 0x03c 0x254 0x508 0x17 0x000
67
68#define MX25_PAD_EB0__EB0 0x040 0x258 0x000 0x10 0x000
69#define MX25_PAD_EB0__AUD4_TXD 0x040 0x258 0x464 0x14 0x000
70#define MX25_PAD_EB0__GPIO_2_12 0x040 0x258 0x000 0x15 0x000
71
72#define MX25_PAD_EB1__EB1 0x044 0x25c 0x000 0x10 0x000
73#define MX25_PAD_EB1__AUD4_RXD 0x044 0x25c 0x460 0x14 0x000
74#define MX25_PAD_EB1__GPIO_2_13 0x044 0x25c 0x000 0x15 0x000
75
76#define MX25_PAD_OE__OE 0x048 0x260 0x000 0x10 0x000
77#define MX25_PAD_OE__AUD4_TXC 0x048 0x260 0x000 0x14 0x000
78#define MX25_PAD_OE__GPIO_2_14 0x048 0x260 0x000 0x15 0x000
79
80#define MX25_PAD_CS0__CS0 0x04c 0x000 0x000 0x00 0x000
81#define MX25_PAD_CS0__GPIO_4_2 0x04c 0x000 0x000 0x05 0x000
82
83#define MX25_PAD_CS1__CS1 0x050 0x000 0x000 0x00 0x000
84#define MX25_PAD_CS1__NF_CE3 0x050 0x000 0x000 0x01 0x000
85#define MX25_PAD_CS1__GPIO_4_3 0x050 0x000 0x000 0x05 0x000
86
87#define MX25_PAD_CS4__CS4 0x054 0x264 0x000 0x10 0x000
88#define MX25_PAD_CS4__NF_CE1 0x054 0x264 0x000 0x01 0x000
89#define MX25_PAD_CS4__UART5_CTS 0x054 0x264 0x000 0x13 0x000
90#define MX25_PAD_CS4__GPIO_3_20 0x054 0x264 0x000 0x15 0x000
91
92#define MX25_PAD_CS5__CS5 0x058 0x268 0x000 0x10 0x000
93#define MX25_PAD_CS5__NF_CE2 0x058 0x268 0x000 0x01 0x000
94#define MX25_PAD_CS5__UART5_RTS 0x058 0x268 0x574 0x13 0x000
95#define MX25_PAD_CS5__GPIO_3_21 0x058 0x268 0x000 0x15 0x000
96
97#define MX25_PAD_NF_CE0__NF_CE0 0x05c 0x26c 0x000 0x10 0x000
98#define MX25_PAD_NF_CE0__GPIO_3_22 0x05c 0x26c 0x000 0x15 0x000
99
100#define MX25_PAD_ECB__ECB 0x060 0x270 0x000 0x10 0x000
101#define MX25_PAD_ECB__UART5_TXD_MUX 0x060 0x270 0x000 0x13 0x000
102#define MX25_PAD_ECB__GPIO_3_23 0x060 0x270 0x000 0x15 0x000
103
104#define MX25_PAD_LBA__LBA 0x064 0x274 0x000 0x10 0x000
105#define MX25_PAD_LBA__UART5_RXD_MUX 0x064 0x274 0x578 0x13 0x000
106#define MX25_PAD_LBA__GPIO_3_24 0x064 0x274 0x000 0x15 0x000
107
108#define MX25_PAD_BCLK__BCLK 0x068 0x000 0x000 0x00 0x000
109#define MX25_PAD_BCLK__GPIO_4_4 0x068 0x000 0x000 0x05 0x000
110
111#define MX25_PAD_RW__RW 0x06c 0x278 0x000 0x10 0x000
112#define MX25_PAD_RW__AUD4_TXFS 0x06c 0x278 0x474 0x14 0x000
113#define MX25_PAD_RW__GPIO_3_25 0x06c 0x278 0x000 0x15 0x000
114
115#define MX25_PAD_NFWE_B__NFWE_B 0x070 0x000 0x000 0x10 0x000
116#define MX25_PAD_NFWE_B__GPIO_3_26 0x070 0x000 0x000 0x15 0x000
117
118#define MX25_PAD_NFRE_B__NFRE_B 0x074 0x000 0x000 0x10 0x000
119#define MX25_PAD_NFRE_B__GPIO_3_27 0x074 0x000 0x000 0x15 0x000
120
121#define MX25_PAD_NFALE__NFALE 0x078 0x000 0x000 0x10 0x000
122#define MX25_PAD_NFALE__GPIO_3_28 0x078 0x000 0x000 0x15 0x000
123
124#define MX25_PAD_NFCLE__NFCLE 0x07c 0x000 0x000 0x10 0x000
125#define MX25_PAD_NFCLE__GPIO_3_29 0x07c 0x000 0x000 0x15 0x000
126
127#define MX25_PAD_NFWP_B__NFWP_B 0x080 0x000 0x000 0x10 0x000
128#define MX25_PAD_NFWP_B__GPIO_3_30 0x080 0x000 0x000 0x15 0x000
129
130#define MX25_PAD_NFRB__NFRB 0x084 0x27c 0x000 0x10 0x000
131#define MX25_PAD_NFRB__GPIO_3_31 0x084 0x27c 0x000 0x15 0x000
132
133#define MX25_PAD_D15__D15 0x088 0x280 0x000 0x00 0x000
134#define MX25_PAD_D15__LD16 0x088 0x280 0x000 0x01 0x000
135#define MX25_PAD_D15__GPIO_4_5 0x088 0x280 0x000 0x05 0x000
136
137#define MX25_PAD_D14__D14 0x08c 0x284 0x000 0x00 0x000
138#define MX25_PAD_D14__LD17 0x08c 0x284 0x000 0x01 0x000
139#define MX25_PAD_D14__GPIO_4_6 0x08c 0x284 0x000 0x05 0x000
140
141#define MX25_PAD_D13__D13 0x090 0x288 0x000 0x00 0x000
142#define MX25_PAD_D13__LD18 0x090 0x288 0x000 0x01 0x000
143#define MX25_PAD_D13__GPIO_4_7 0x090 0x288 0x000 0x05 0x000
144
145#define MX25_PAD_D12__D12 0x094 0x28c 0x000 0x00 0x000
146#define MX25_PAD_D12__GPIO_4_8 0x094 0x28c 0x000 0x05 0x000
147
148#define MX25_PAD_D11__D11 0x098 0x290 0x000 0x00 0x000
149#define MX25_PAD_D11__GPIO_4_9 0x098 0x290 0x000 0x05 0x000
150
151#define MX25_PAD_D10__D10 0x09c 0x294 0x000 0x00 0x000
152#define MX25_PAD_D10__GPIO_4_10 0x09c 0x294 0x000 0x05 0x000
153#define MX25_PAD_D10__USBOTG_OC 0x09c 0x294 0x57c 0x06 0x000
154
155#define MX25_PAD_D9__D9 0x0a0 0x298 0x000 0x00 0x000
156#define MX25_PAD_D9__GPIO_4_11 0x0a0 0x298 0x000 0x05 0x000
157#define MX25_PAD_D9__USBH2_PWR 0x0a0 0x298 0x000 0x06 0x000
158
159#define MX25_PAD_D8__D8 0x0a4 0x29c 0x000 0x00 0x000
160#define MX25_PAD_D8__GPIO_4_12 0x0a4 0x29c 0x000 0x05 0x000
161#define MX25_PAD_D8__USBH2_OC 0x0a4 0x29c 0x580 0x06 0x000
162
163#define MX25_PAD_D7__D7 0x0a8 0x2a0 0x000 0x00 0x000
164#define MX25_PAD_D7__GPIO_4_13 0x0a8 0x2a0 0x000 0x05 0x000
165
166#define MX25_PAD_D6__D6 0x0ac 0x2a4 0x000 0x00 0x000
167#define MX25_PAD_D6__GPIO_4_14 0x0ac 0x2a4 0x000 0x05 0x000
168
169#define MX25_PAD_D5__D5 0x0b0 0x2a8 0x000 0x00 0x000
170#define MX25_PAD_D5__GPIO_4_15 0x0b0 0x2a8 0x000 0x05 0x000
171
172#define MX25_PAD_D4__D4 0x0b4 0x2ac 0x000 0x00 0x000
173#define MX25_PAD_D4__GPIO_4_16 0x0b4 0x2ac 0x000 0x05 0x000
174
175#define MX25_PAD_D3__D3 0x0b8 0x2b0 0x000 0x00 0x000
176#define MX25_PAD_D3__GPIO_4_17 0x0b8 0x2b0 0x000 0x05 0x000
177
178#define MX25_PAD_D2__D2 0x0bc 0x2b4 0x000 0x00 0x000
179#define MX25_PAD_D2__GPIO_4_18 0x0bc 0x2b4 0x000 0x05 0x000
180
181#define MX25_PAD_D1__D1 0x0c0 0x2b8 0x000 0x00 0x000
182#define MX25_PAD_D1__GPIO_4_19 0x0c0 0x2b8 0x000 0x05 0x000
183
184#define MX25_PAD_D0__D0 0x0c4 0x2bc 0x000 0x00 0x000
185#define MX25_PAD_D0__GPIO_4_20 0x0c4 0x2bc 0x000 0x05 0x000
186
187#define MX25_PAD_LD0__LD0 0x0c8 0x2c0 0x000 0x10 0x000
188#define MX25_PAD_LD0__CSI_D0 0x0c8 0x2c0 0x488 0x12 0x000
189#define MX25_PAD_LD0__GPIO_2_15 0x0c8 0x2c0 0x000 0x15 0x000
190
191#define MX25_PAD_LD1__LD1 0x0cc 0x2c4 0x000 0x10 0x000
192#define MX25_PAD_LD1__CSI_D1 0x0cc 0x2c4 0x48c 0x12 0x000
193#define MX25_PAD_LD1__GPIO_2_16 0x0cc 0x2c4 0x000 0x15 0x000
194
195#define MX25_PAD_LD2__LD2 0x0d0 0x2c8 0x000 0x10 0x000
196#define MX25_PAD_LD2__GPIO_2_17 0x0d0 0x2c8 0x000 0x15 0x000
197
198#define MX25_PAD_LD3__LD3 0x0d4 0x2cc 0x000 0x10 0x000
199#define MX25_PAD_LD3__GPIO_2_18 0x0d4 0x2cc 0x000 0x15 0x000
200
201#define MX25_PAD_LD4__LD4 0x0d8 0x2d0 0x000 0x10 0x000
202#define MX25_PAD_LD4__GPIO_2_19 0x0d8 0x2d0 0x000 0x15 0x000
203
204#define MX25_PAD_LD5__LD5 0x0dc 0x2d4 0x000 0x10 0x000
205#define MX25_PAD_LD5__GPIO_1_19 0x0dc 0x2d4 0x000 0x15 0x000
206
207#define MX25_PAD_LD6__LD6 0x0e0 0x2d8 0x000 0x10 0x000
208#define MX25_PAD_LD6__GPIO_1_20 0x0e0 0x2d8 0x000 0x15 0x000
209
210#define MX25_PAD_LD7__LD7 0x0e4 0x2dc 0x000 0x10 0x000
211#define MX25_PAD_LD7__GPIO_1_21 0x0e4 0x2dc 0x000 0x15 0x000
212
213#define MX25_PAD_LD8__LD8 0x0e8 0x2e0 0x000 0x10 0x000
214#define MX25_PAD_LD8__FEC_TX_ERR 0x0e8 0x2e0 0x000 0x15 0x000
215
216#define MX25_PAD_LD9__LD9 0x0ec 0x2e4 0x000 0x10 0x000
217#define MX25_PAD_LD9__FEC_COL 0x0ec 0x2e4 0x504 0x15 0x001
218
219#define MX25_PAD_LD10__LD10 0x0f0 0x2e8 0x000 0x10 0x000
220#define MX25_PAD_LD10__FEC_RX_ER 0x0f0 0x2e8 0x518 0x15 0x001
221
222#define MX25_PAD_LD11__LD11 0x0f4 0x2ec 0x000 0x10 0x000
223#define MX25_PAD_LD11__FEC_RDATA2 0x0f4 0x2ec 0x50c 0x15 0x001
224
225#define MX25_PAD_LD12__LD12 0x0f8 0x2f0 0x000 0x10 0x000
226#define MX25_PAD_LD12__FEC_RDATA3 0x0f8 0x2f0 0x510 0x15 0x001
227
228#define MX25_PAD_LD13__LD13 0x0fc 0x2f4 0x000 0x10 0x000
229#define MX25_PAD_LD13__FEC_TDATA2 0x0fc 0x2f4 0x000 0x15 0x000
230
231#define MX25_PAD_LD14__LD14 0x100 0x2f8 0x000 0x10 0x000
232#define MX25_PAD_LD14__FEC_TDATA3 0x100 0x2f8 0x000 0x15 0x000
233
234#define MX25_PAD_LD15__LD15 0x104 0x2fc 0x000 0x10 0x000
235#define MX25_PAD_LD15__FEC_RX_CLK 0x104 0x2fc 0x514 0x15 0x001
236
237#define MX25_PAD_HSYNC__HSYNC 0x108 0x300 0x000 0x10 0x000
238#define MX25_PAD_HSYNC__GPIO_1_22 0x108 0x300 0x000 0x15 0x000
239
240#define MX25_PAD_VSYNC__VSYNC 0x10c 0x304 0x000 0x10 0x000
241#define MX25_PAD_VSYNC__GPIO_1_23 0x10c 0x304 0x000 0x15 0x000
242
243#define MX25_PAD_LSCLK__LSCLK 0x110 0x308 0x000 0x10 0x000
244#define MX25_PAD_LSCLK__GPIO_1_24 0x110 0x308 0x000 0x15 0x000
245
246#define MX25_PAD_OE_ACD__OE_ACD 0x114 0x30c 0x000 0x10 0x000
247#define MX25_PAD_OE_ACD__GPIO_1_25 0x114 0x30c 0x000 0x15 0x000
248
249#define MX25_PAD_CONTRAST__CONTRAST 0x118 0x310 0x000 0x10 0x000
250#define MX25_PAD_CONTRAST__PWM4_PWMO 0x118 0x310 0x000 0x14 0x000
251#define MX25_PAD_CONTRAST__FEC_CRS 0x118 0x310 0x508 0x15 0x001
252
253#define MX25_PAD_PWM__PWM 0x11c 0x314 0x000 0x10 0x000
254#define MX25_PAD_PWM__GPIO_1_26 0x11c 0x314 0x000 0x15 0x000
255#define MX25_PAD_PWM__USBH2_OC 0x11c 0x314 0x580 0x16 0x001
256
257#define MX25_PAD_CSI_D2__CSI_D2 0x120 0x318 0x000 0x10 0x000
258#define MX25_PAD_CSI_D2__UART5_RXD_MUX 0x120 0x318 0x578 0x11 0x001
259#define MX25_PAD_CSI_D2__GPIO_1_27 0x120 0x318 0x000 0x15 0x000
260#define MX25_PAD_CSI_D2__CSPI3_MOSI 0x120 0x318 0x000 0x17 0x000
261
262#define MX25_PAD_CSI_D3__CSI_D3 0x124 0x31c 0x000 0x10 0x000
263#define MX25_PAD_CSI_D3__GPIO_1_28 0x124 0x31c 0x000 0x15 0x000
264#define MX25_PAD_CSI_D3__CSPI3_MISO 0x124 0x31c 0x4b4 0x17 0x001
265
266#define MX25_PAD_CSI_D4__CSI_D4 0x128 0x320 0x000 0x10 0x000
267#define MX25_PAD_CSI_D4__UART5_RTS 0x128 0x320 0x574 0x11 0x001
268#define MX25_PAD_CSI_D4__GPIO_1_29 0x128 0x320 0x000 0x15 0x000
269#define MX25_PAD_CSI_D4__CSPI3_SCLK 0x128 0x320 0x000 0x17 0x000
270
271#define MX25_PAD_CSI_D5__CSI_D5 0x12c 0x324 0x000 0x10 0x000
272#define MX25_PAD_CSI_D5__GPIO_1_30 0x12c 0x324 0x000 0x15 0x000
273#define MX25_PAD_CSI_D5__CSPI3_RDY 0x12c 0x324 0x000 0x17 0x000
274
275#define MX25_PAD_CSI_D6__CSI_D6 0x130 0x328 0x000 0x10 0x000
276#define MX25_PAD_CSI_D6__GPIO_1_31 0x130 0x328 0x000 0x15 0x000
277
278#define MX25_PAD_CSI_D7__CSI_D7 0x134 0x32c 0x000 0x10 0x000
279#define MX25_PAD_CSI_D7__GPIO_1_6 0x134 0x32c 0x000 0x15 0x000
280
281#define MX25_PAD_CSI_D8__CSI_D8 0x138 0x330 0x000 0x10 0x000
282#define MX25_PAD_CSI_D8__GPIO_1_7 0x138 0x330 0x000 0x15 0x000
283
284#define MX25_PAD_CSI_D9__CSI_D9 0x13c 0x334 0x000 0x10 0x000
285#define MX25_PAD_CSI_D9__GPIO_4_21 0x13c 0x334 0x000 0x15 0x000
286
287#define MX25_PAD_CSI_MCLK__CSI_MCLK 0x140 0x338 0x000 0x10 0x000
288#define MX25_PAD_CSI_MCLK__GPIO_1_8 0x140 0x338 0x000 0x15 0x000
289
290#define MX25_PAD_CSI_VSYNC__CSI_VSYNC 0x144 0x33c 0x000 0x10 0x000
291#define MX25_PAD_CSI_VSYNC__GPIO_1_9 0x144 0x33c 0x000 0x15 0x000
292
293#define MX25_PAD_CSI_HSYNC__CSI_HSYNC 0x148 0x340 0x000 0x10 0x000
294#define MX25_PAD_CSI_HSYNC__GPIO_1_10 0x148 0x340 0x000 0x15 0x000
295
296#define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK 0x14c 0x344 0x000 0x10 0x000
297#define MX25_PAD_CSI_PIXCLK__GPIO_1_11 0x14c 0x344 0x000 0x15 0x000
298
299#define MX25_PAD_I2C1_CLK__I2C1_CLK 0x150 0x348 0x000 0x10 0x000
300#define MX25_PAD_I2C1_CLK__GPIO_1_12 0x150 0x348 0x000 0x15 0x000
301
302#define MX25_PAD_I2C1_DAT__I2C1_DAT 0x154 0x34c 0x000 0x10 0x000
303#define MX25_PAD_I2C1_DAT__GPIO_1_13 0x154 0x34c 0x000 0x15 0x000
304
305#define MX25_PAD_CSPI1_MOSI__CSPI1_MOSI 0x158 0x350 0x000 0x10 0x000
306#define MX25_PAD_CSPI1_MOSI__GPIO_1_14 0x158 0x350 0x000 0x15 0x000
307
308#define MX25_PAD_CSPI1_MISO__CSPI1_MISO 0x15c 0x354 0x000 0x10 0x000
309#define MX25_PAD_CSPI1_MISO__GPIO_1_15 0x15c 0x354 0x000 0x15 0x000
310
311#define MX25_PAD_CSPI1_SS0__CSPI1_SS0 0x160 0x358 0x000 0x10 0x000
312#define MX25_PAD_CSPI1_SS0__GPIO_1_16 0x160 0x358 0x000 0x15 0x000
313
314#define MX25_PAD_CSPI1_SS1__CSPI1_SS1 0x164 0x35c 0x000 0x10 0x000
315#define MX25_PAD_CSPI1_SS1__GPIO_1_17 0x164 0x35c 0x000 0x15 0x000
316
317#define MX25_PAD_CSPI1_SCLK__CSPI1_SCLK 0x168 0x360 0x000 0x10 0x000
318#define MX25_PAD_CSPI1_SCLK__GPIO_1_18 0x168 0x360 0x000 0x15 0x000
319
320#define MX25_PAD_CSPI1_RDY__CSPI1_RDY 0x16c 0x364 0x000 0x10 0x000
321#define MX25_PAD_CSPI1_RDY__GPIO_2_22 0x16c 0x364 0x000 0x15 0x000
322
323#define MX25_PAD_UART1_RXD__UART1_RXD 0x170 0x368 0x000 0x10 0x000
324#define MX25_PAD_UART1_RXD__GPIO_4_22 0x170 0x368 0x000 0x15 0x000
325
326#define MX25_PAD_UART1_TXD__UART1_TXD 0x174 0x36c 0x000 0x10 0x000
327#define MX25_PAD_UART1_TXD__GPIO_4_23 0x174 0x36c 0x000 0x15 0x000
328
329#define MX25_PAD_UART1_RTS__UART1_RTS 0x178 0x370 0x000 0x10 0x000
330#define MX25_PAD_UART1_RTS__CSI_D0 0x178 0x370 0x488 0x11 0x001
331#define MX25_PAD_UART1_RTS__GPIO_4_24 0x178 0x370 0x000 0x15 0x000
332
333#define MX25_PAD_UART1_CTS__UART1_CTS 0x17c 0x374 0x000 0x10 0x000
334#define MX25_PAD_UART1_CTS__CSI_D1 0x17c 0x374 0x48c 0x11 0x001
335#define MX25_PAD_UART1_CTS__GPIO_4_25 0x17c 0x374 0x000 0x15 0x000
336
337#define MX25_PAD_UART2_RXD__UART2_RXD 0x180 0x378 0x000 0x10 0x000
338#define MX25_PAD_UART2_RXD__GPIO_4_26 0x180 0x378 0x000 0x15 0x000
339
340#define MX25_PAD_UART2_TXD__UART2_TXD 0x184 0x37c 0x000 0x10 0x000
341#define MX25_PAD_UART2_TXD__GPIO_4_27 0x184 0x37c 0x000 0x15 0x000
342
343#define MX25_PAD_UART2_RTS__UART2_RTS 0x188 0x380 0x000 0x10 0x000
344#define MX25_PAD_UART2_RTS__FEC_COL 0x188 0x380 0x504 0x12 0x002
345#define MX25_PAD_UART2_RTS__GPIO_4_28 0x188 0x380 0x000 0x15 0x000
346
347#define MX25_PAD_UART2_CTS__FEC_RX_ER 0x18c 0x384 0x518 0x12 0x002
348#define MX25_PAD_UART2_CTS__UART2_CTS 0x18c 0x384 0x000 0x10 0x000
349#define MX25_PAD_UART2_CTS__GPIO_4_29 0x18c 0x384 0x000 0x15 0x000
350
351#define MX25_PAD_SD1_CMD__SD1_CMD 0x190 0x388 0x000 0x10 0x000
352#define MX25_PAD_SD1_CMD__FEC_RDATA2 0x190 0x388 0x50c 0x12 0x002
353#define MX25_PAD_SD1_CMD__GPIO_2_23 0x190 0x388 0x000 0x15 0x000
354
355#define MX25_PAD_SD1_CLK__SD1_CLK 0x194 0x38c 0x000 0x10 0x000
356#define MX25_PAD_SD1_CLK__FEC_RDATA3 0x194 0x38c 0x510 0x12 0x002
357#define MX25_PAD_SD1_CLK__GPIO_2_24 0x194 0x38c 0x000 0x15 0x000
358
359#define MX25_PAD_SD1_DATA0__SD1_DATA0 0x198 0x390 0x000 0x10 0x000
360#define MX25_PAD_SD1_DATA0__GPIO_2_25 0x198 0x390 0x000 0x15 0x000
361
362#define MX25_PAD_SD1_DATA1__SD1_DATA1 0x19c 0x394 0x000 0x10 0x000
363#define MX25_PAD_SD1_DATA1__AUD7_RXD 0x19c 0x394 0x478 0x13 0x000
364#define MX25_PAD_SD1_DATA1__GPIO_2_26 0x19c 0x394 0x000 0x15 0x000
365
366#define MX25_PAD_SD1_DATA2__SD1_DATA2 0x1a0 0x398 0x000 0x10 0x000
367#define MX25_PAD_SD1_DATA2__FEC_RX_CLK 0x1a0 0x398 0x514 0x15 0x002
368#define MX25_PAD_SD1_DATA2__GPIO_2_27 0x1a0 0x398 0x000 0x15 0x000
369
370#define MX25_PAD_SD1_DATA3__SD1_DATA3 0x1a4 0x39c 0x000 0x10 0x000
371#define MX25_PAD_SD1_DATA3__FEC_CRS 0x1a4 0x39c 0x508 0x10 0x002
372#define MX25_PAD_SD1_DATA3__GPIO_2_28 0x1a4 0x39c 0x000 0x15 0x000
373
374#define MX25_PAD_KPP_ROW0__KPP_ROW0 0x1a8 0x3a0 0x000 0x10 0x000
375#define MX25_PAD_KPP_ROW0__GPIO_2_29 0x1a8 0x3a0 0x000 0x15 0x000
376
377#define MX25_PAD_KPP_ROW1__KPP_ROW1 0x1ac 0x3a4 0x000 0x10 0x000
378#define MX25_PAD_KPP_ROW1__GPIO_2_30 0x1ac 0x3a4 0x000 0x15 0x000
379
380#define MX25_PAD_KPP_ROW2__KPP_ROW2 0x1b0 0x3a8 0x000 0x10 0x000
381#define MX25_PAD_KPP_ROW2__CSI_D0 0x1b0 0x3a8 0x488 0x13 0x002
382#define MX25_PAD_KPP_ROW2__GPIO_2_31 0x1b0 0x3a8 0x000 0x15 0x000
383
384#define MX25_PAD_KPP_ROW3__KPP_ROW3 0x1b4 0x3ac 0x000 0x10 0x000
385#define MX25_PAD_KPP_ROW3__CSI_LD1 0x1b4 0x3ac 0x48c 0x13 0x002
386#define MX25_PAD_KPP_ROW3__GPIO_3_0 0x1b4 0x3ac 0x000 0x15 0x000
387
388#define MX25_PAD_KPP_COL0__KPP_COL0 0x1b8 0x3b0 0x000 0x10 0x000
389#define MX25_PAD_KPP_COL0__UART4_RXD_MUX 0x1b8 0x3b0 0x570 0x11 0x001
390#define MX25_PAD_KPP_COL0__AUD5_TXD 0x1b8 0x3b0 0x000 0x12 0x000
391#define MX25_PAD_KPP_COL0__GPIO_3_1 0x1b8 0x3b0 0x000 0x15 0x000
392
393#define MX25_PAD_KPP_COL1__KPP_COL1 0x1bc 0x3b4 0x000 0x10 0x000
394#define MX25_PAD_KPP_COL1__UART4_TXD_MUX 0x1bc 0x3b4 0x000 0x11 0x000
395#define MX25_PAD_KPP_COL1__AUD5_RXD 0x1bc 0x3b4 0x000 0x12 0x000
396#define MX25_PAD_KPP_COL1__GPIO_3_2 0x1bc 0x3b4 0x000 0x15 0x000
397
398#define MX25_PAD_KPP_COL2__KPP_COL2 0x1c0 0x3b8 0x000 0x10 0x000
399#define MX25_PAD_KPP_COL2__UART4_RTS 0x1c0 0x3b8 0x000 0x11 0x000
400#define MX25_PAD_KPP_COL2__AUD5_TXC 0x1c0 0x3b8 0x000 0x12 0x000
401#define MX25_PAD_KPP_COL2__GPIO_3_3 0x1c0 0x3b8 0x000 0x15 0x000
402
403#define MX25_PAD_KPP_COL3__KPP_COL3 0x1c4 0x3bc 0x000 0x10 0x000
404#define MX25_PAD_KPP_COL3__UART4_CTS 0x1c4 0x3bc 0x000 0x11 0x000
405#define MX25_PAD_KPP_COL3__AUD5_TXFS 0x1c4 0x3bc 0x000 0x12 0x000
406#define MX25_PAD_KPP_COL3__GPIO_3_4 0x1c4 0x3bc 0x000 0x15 0x000
407
408#define MX25_PAD_FEC_MDC__FEC_MDC 0x1c8 0x3c0 0x000 0x10 0x000
409#define MX25_PAD_FEC_MDC__AUD4_TXD 0x1c8 0x3c0 0x464 0x12 0x001
410#define MX25_PAD_FEC_MDC__GPIO_3_5 0x1c8 0x3c0 0x000 0x15 0x000
411
412#define MX25_PAD_FEC_MDIO__FEC_MDIO 0x1cc 0x3c4 0x000 0x10 0x000
413#define MX25_PAD_FEC_MDIO__AUD4_RXD 0x1cc 0x3c4 0x460 0x12 0x001
414#define MX25_PAD_FEC_MDIO__GPIO_3_6 0x1cc 0x3c4 0x000 0x15 0x000
415
416#define MX25_PAD_FEC_TDATA0__FEC_TDATA0 0x1d0 0x3c8 0x000 0x10 0x000
417#define MX25_PAD_FEC_TDATA0__GPIO_3_7 0x1d0 0x3c8 0x000 0x15 0x000
418
419#define MX25_PAD_FEC_TDATA1__FEC_TDATA1 0x1d4 0x3cc 0x000 0x10 0x000
420#define MX25_PAD_FEC_TDATA1__AUD4_TXFS 0x1d4 0x3cc 0x474 0x12 0x001
421#define MX25_PAD_FEC_TDATA1__GPIO_3_8 0x1d4 0x3cc 0x000 0x15 0x000
422
423#define MX25_PAD_FEC_TX_EN__FEC_TX_EN 0x1d8 0x3d0 0x000 0x10 0x000
424#define MX25_PAD_FEC_TX_EN__GPIO_3_9 0x1d8 0x3d0 0x000 0x15 0x000
425
426#define MX25_PAD_FEC_RDATA0__FEC_RDATA0 0x1dc 0x3d4 0x000 0x10 0x000
427#define MX25_PAD_FEC_RDATA0__GPIO_3_10 0x1dc 0x3d4 0x000 0x15 0x000
428
429#define MX25_PAD_FEC_RDATA1__FEC_RDATA1 0x1e0 0x3d8 0x000 0x10 0x000
430#define MX25_PAD_FEC_RDATA1__GPIO_3_11 0x1e0 0x3d8 0x000 0x15 0x000
431
432#define MX25_PAD_FEC_RX_DV__FEC_RX_DV 0x1e4 0x3dc 0x000 0x10 0x000
433#define MX25_PAD_FEC_RX_DV__CAN2_RX 0x1e4 0x3dc 0x484 0x14 0x000
434#define MX25_PAD_FEC_RX_DV__GPIO_3_12 0x1e4 0x3dc 0x000 0x15 0x000
435
436#define MX25_PAD_FEC_TX_CLK__FEC_TX_CLK 0x1e8 0x3e0 0x000 0x10 0x000
437#define MX25_PAD_FEC_TX_CLK__GPIO_3_13 0x1e8 0x3e0 0x000 0x15 0x000
438
439#define MX25_PAD_RTCK__RTCK 0x1ec 0x3e4 0x000 0x10 0x000
440#define MX25_PAD_RTCK__OWIRE 0x1ec 0x3e4 0x000 0x11 0x000
441#define MX25_PAD_RTCK__GPIO_3_14 0x1ec 0x3e4 0x000 0x15 0x000
442
443#define MX25_PAD_DE_B__DE_B 0x1f0 0x3ec 0x000 0x10 0x000
444#define MX25_PAD_DE_B__GPIO_2_20 0x1f0 0x3ec 0x000 0x15 0x000
445
446#define MX25_PAD_TDO__TDO 0x000 0x3e8 0x000 0x00 0x000
447
448#define MX25_PAD_GPIO_A__GPIO_A 0x1f4 0x3f0 0x000 0x10 0x000
449#define MX25_PAD_GPIO_A__CAN1_TX 0x1f4 0x3f0 0x000 0x16 0x000
450#define MX25_PAD_GPIO_A__USBOTG_PWR 0x1f4 0x3f0 0x000 0x12 0x000
451
452#define MX25_PAD_GPIO_B__GPIO_B 0x1f8 0x3f4 0x000 0x10 0x000
453#define MX25_PAD_GPIO_B__CAN1_RX 0x1f8 0x3f4 0x480 0x16 0x001
454#define MX25_PAD_GPIO_B__USBOTG_OC 0x1f8 0x3f4 0x57c 0x12 0x001
455
456#define MX25_PAD_GPIO_C__GPIO_C 0x1fc 0x3f8 0x000 0x10 0x000
457#define MX25_PAD_GPIO_C__CAN2_TX 0x1fc 0x3f8 0x000 0x16 0x000
458
459#define MX25_PAD_GPIO_D__GPIO_D 0x200 0x3fc 0x000 0x10 0x000
460#define MX25_PAD_GPIO_E__LD16 0x204 0x400 0x000 0x02 0x000
461#define MX25_PAD_GPIO_D__CAN2_RX 0x200 0x3fc 0x484 0x16 0x001
462
463#define MX25_PAD_GPIO_E__GPIO_E 0x204 0x400 0x000 0x10 0x000
464#define MX25_PAD_GPIO_F__LD17 0x208 0x404 0x000 0x02 0x000
465#define MX25_PAD_GPIO_E__AUD7_TXD 0x204 0x400 0x000 0x14 0x000
466
467#define MX25_PAD_GPIO_F__GPIO_F 0x208 0x404 0x000 0x10 0x000
468#define MX25_PAD_GPIO_F__AUD7_TXC 0x208 0x404 0x000 0x14 0x000
469
470#define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK 0x20c 0x000 0x000 0x10 0x000
471#define MX25_PAD_EXT_ARMCLK__GPIO_3_15 0x20c 0x000 0x000 0x15 0x000
472
473#define MX25_PAD_UPLL_BYPCLK__UPLL_BYPCLK 0x210 0x000 0x000 0x10 0x000
474#define MX25_PAD_UPLL_BYPCLK__GPIO_3_16 0x210 0x000 0x000 0x15 0x000
475
476#define MX25_PAD_VSTBY_REQ__VSTBY_REQ 0x214 0x408 0x000 0x10 0x000
477#define MX25_PAD_VSTBY_REQ__AUD7_TXFS 0x214 0x408 0x000 0x14 0x000
478#define MX25_PAD_VSTBY_REQ__GPIO_3_17 0x214 0x408 0x000 0x15 0x000
479#define MX25_PAD_VSTBY_ACK__VSTBY_ACK 0x218 0x40c 0x000 0x10 0x000
480#define MX25_PAD_VSTBY_ACK__GPIO_3_18 0x218 0x40c 0x000 0x15 0x000
481
482#define MX25_PAD_POWER_FAIL__POWER_FAIL 0x21c 0x410 0x000 0x10 0x000
483#define MX25_PAD_POWER_FAIL__AUD7_RXD 0x21c 0x410 0x478 0x14 0x001
484#define MX25_PAD_POWER_FAIL__GPIO_3_19 0x21c 0x410 0x000 0x15 0x000
485
486#define MX25_PAD_CLKO__CLKO 0x220 0x414 0x000 0x10 0x000
487#define MX25_PAD_CLKO__GPIO_2_21 0x220 0x414 0x000 0x15 0x000
488
489#define MX25_PAD_BOOT_MODE0__BOOT_MODE0 0x224 0x000 0x000 0x00 0x000
490#define MX25_PAD_BOOT_MODE0__GPIO_4_30 0x224 0x000 0x000 0x05 0x000
491#define MX25_PAD_BOOT_MODE1__BOOT_MODE1 0x228 0x000 0x000 0x00 0x000
492#define MX25_PAD_BOOT_MODE1__GPIO_4_31 0x228 0x000 0x000 0x05 0x000
493
494#endif /* __DTS_IMX25_PINFUNC_H */
diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi
index 737ed5da8f71..32f760e24898 100644
--- a/arch/arm/boot/dts/imx25.dtsi
+++ b/arch/arm/boot/dts/imx25.dtsi
@@ -10,6 +10,7 @@
10 */ 10 */
11 11
12#include "skeleton.dtsi" 12#include "skeleton.dtsi"
13#include "imx25-pinfunc.h"
13 14
14/ { 15/ {
15 aliases { 16 aliases {
@@ -173,12 +174,12 @@
173 status = "disabled"; 174 status = "disabled";
174 }; 175 };
175 176
176 iomuxc@43fac000{ 177 iomuxc: iomuxc@43fac000 {
177 compatible = "fsl,imx25-iomuxc"; 178 compatible = "fsl,imx25-iomuxc";
178 reg = <0x43fac000 0x4000>; 179 reg = <0x43fac000 0x4000>;
179 }; 180 };
180 181
181 audmux@43fb0000 { 182 audmux: audmux@43fb0000 {
182 compatible = "fsl,imx25-audmux", "fsl,imx31-audmux"; 183 compatible = "fsl,imx25-audmux", "fsl,imx31-audmux";
183 reg = <0x43fb0000 0x4000>; 184 reg = <0x43fb0000 0x4000>;
184 status = "disabled"; 185 status = "disabled";
@@ -236,6 +237,11 @@
236 compatible = "fsl,imx25-ssi", "fsl,imx21-ssi"; 237 compatible = "fsl,imx25-ssi", "fsl,imx21-ssi";
237 reg = <0x50014000 0x4000>; 238 reg = <0x50014000 0x4000>;
238 interrupts = <11>; 239 interrupts = <11>;
240 clocks = <&clks 118>;
241 clock-names = "ipg";
242 dmas = <&sdma 24 1 0>,
243 <&sdma 25 1 0>;
244 dma-names = "rx", "tx";
239 status = "disabled"; 245 status = "disabled";
240 }; 246 };
241 247
@@ -266,6 +272,11 @@
266 compatible = "fsl,imx25-ssi", "fsl,imx21-ssi"; 272 compatible = "fsl,imx25-ssi", "fsl,imx21-ssi";
267 reg = <0x50034000 0x4000>; 273 reg = <0x50034000 0x4000>;
268 interrupts = <12>; 274 interrupts = <12>;
275 clocks = <&clks 117>;
276 clock-names = "ipg";
277 dmas = <&sdma 28 1 0>,
278 <&sdma 29 1 0>;
279 dma-names = "rx", "tx";
269 status = "disabled"; 280 status = "disabled";
270 }; 281 };
271 282
@@ -436,13 +447,14 @@
436 #interrupt-cells = <2>; 447 #interrupt-cells = <2>;
437 }; 448 };
438 449
439 sdma@53fd4000 { 450 sdma: sdma@53fd4000 {
440 compatible = "fsl,imx25-sdma", "fsl,imx35-sdma"; 451 compatible = "fsl,imx25-sdma", "fsl,imx35-sdma";
441 reg = <0x53fd4000 0x4000>; 452 reg = <0x53fd4000 0x4000>;
442 clocks = <&clks 112>, <&clks 68>; 453 clocks = <&clks 112>, <&clks 68>;
443 clock-names = "ipg", "ahb"; 454 clock-names = "ipg", "ahb";
444 #dma-cells = <3>; 455 #dma-cells = <3>;
445 interrupts = <34>; 456 interrupts = <34>;
457 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx25.bin";
446 }; 458 };
447 459
448 wdog@53fdc000 { 460 wdog@53fdc000 {
diff --git a/arch/arm/boot/dts/imx27-apf27.dts b/arch/arm/boot/dts/imx27-apf27.dts
index ba4c6df08ece..09f57b39e3ef 100644
--- a/arch/arm/boot/dts/imx27-apf27.dts
+++ b/arch/arm/boot/dts/imx27-apf27.dts
@@ -34,11 +34,49 @@
34 }; 34 };
35}; 35};
36 36
37&iomuxc {
38 imx27-apf27 {
39 pinctrl_fec1: fec1grp {
40 fsl,pins = <
41 MX27_PAD_SD3_CMD__FEC_TXD0 0x0
42 MX27_PAD_SD3_CLK__FEC_TXD1 0x0
43 MX27_PAD_ATA_DATA0__FEC_TXD2 0x0
44 MX27_PAD_ATA_DATA1__FEC_TXD3 0x0
45 MX27_PAD_ATA_DATA2__FEC_RX_ER 0x0
46 MX27_PAD_ATA_DATA3__FEC_RXD1 0x0
47 MX27_PAD_ATA_DATA4__FEC_RXD2 0x0
48 MX27_PAD_ATA_DATA5__FEC_RXD3 0x0
49 MX27_PAD_ATA_DATA6__FEC_MDIO 0x0
50 MX27_PAD_ATA_DATA7__FEC_MDC 0x0
51 MX27_PAD_ATA_DATA8__FEC_CRS 0x0
52 MX27_PAD_ATA_DATA9__FEC_TX_CLK 0x0
53 MX27_PAD_ATA_DATA10__FEC_RXD0 0x0
54 MX27_PAD_ATA_DATA11__FEC_RX_DV 0x0
55 MX27_PAD_ATA_DATA12__FEC_RX_CLK 0x0
56 MX27_PAD_ATA_DATA13__FEC_COL 0x0
57 MX27_PAD_ATA_DATA14__FEC_TX_ER 0x0
58 MX27_PAD_ATA_DATA15__FEC_TX_EN 0x0
59 >;
60 };
61
62 pinctrl_uart1: uart1grp {
63 fsl,pins = <
64 MX27_PAD_UART1_TXD__UART1_TXD 0x0
65 MX27_PAD_UART1_RXD__UART1_RXD 0x0
66 >;
67 };
68 };
69};
70
37&uart1 { 71&uart1 {
72 pinctrl-names = "default";
73 pinctrl-0 = <&pinctrl_uart1>;
38 status = "okay"; 74 status = "okay";
39}; 75};
40 76
41&fec { 77&fec {
78 pinctrl-names = "default";
79 pinctrl-0 = <&pinctrl_fec1>;
42 status = "okay"; 80 status = "okay";
43}; 81};
44 82
diff --git a/arch/arm/boot/dts/imx27-apf27dev.dts b/arch/arm/boot/dts/imx27-apf27dev.dts
index 47c8c26012e4..2b6d489dae69 100644
--- a/arch/arm/boot/dts/imx27-apf27dev.dts
+++ b/arch/arm/boot/dts/imx27-apf27dev.dts
@@ -22,10 +22,10 @@
22 bits-per-pixel = <16>; /* non-standard but required */ 22 bits-per-pixel = <16>; /* non-standard but required */
23 fsl,pcr = <0xfae80083>; /* non-standard but required */ 23 fsl,pcr = <0xfae80083>; /* non-standard but required */
24 display-timings { 24 display-timings {
25 timing0: 640x480 { 25 timing0: 800x480 {
26 clock-frequency = <33000033>; 26 clock-frequency = <33000033>;
27 hactive = <800>; 27 hactive = <800>;
28 vactive = <640>; 28 vactive = <480>;
29 hback-porch = <96>; 29 hback-porch = <96>;
30 hfront-porch = <96>; 30 hfront-porch = <96>;
31 vback-porch = <20>; 31 vback-porch = <20>;
@@ -38,20 +38,24 @@
38 38
39 gpio-keys { 39 gpio-keys {
40 compatible = "gpio-keys"; 40 compatible = "gpio-keys";
41 pinctrl-names = "default";
42 pinctrl-0 = <&pinctrl_gpio_keys>;
41 43
42 user-key { 44 user-key {
43 label = "user"; 45 label = "user";
44 gpios = <&gpio6 13 0>; 46 gpios = <&gpio6 13 GPIO_ACTIVE_HIGH>;
45 linux,code = <276>; /* BTN_EXTRA */ 47 linux,code = <276>; /* BTN_EXTRA */
46 }; 48 };
47 }; 49 };
48 50
49 leds { 51 leds {
50 compatible = "gpio-leds"; 52 compatible = "gpio-leds";
53 pinctrl-names = "default";
54 pinctrl-0 = <&pinctrl_gpio_leds>;
51 55
52 user { 56 user {
53 label = "Heartbeat"; 57 label = "Heartbeat";
54 gpios = <&gpio6 14 0>; 58 gpios = <&gpio6 14 GPIO_ACTIVE_HIGH>;
55 linux,default-trigger = "heartbeat"; 59 linux,default-trigger = "heartbeat";
56 }; 60 };
57 }; 61 };
@@ -59,25 +63,34 @@
59 63
60&cspi1 { 64&cspi1 {
61 fsl,spi-num-chipselects = <1>; 65 fsl,spi-num-chipselects = <1>;
62 cs-gpios = <&gpio4 28 1>; 66 cs-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
67 pinctrl-names = "default";
68 pinctrl-0 = <&pinctrl_cspi1 &pinctrl_cspi1_cs>;
63 status = "okay"; 69 status = "okay";
64}; 70};
65 71
66&cspi2 { 72&cspi2 {
67 fsl,spi-num-chipselects = <3>; 73 fsl,spi-num-chipselects = <3>;
68 cs-gpios = <&gpio4 21 1>, <&gpio4 27 1>, 74 cs-gpios = <&gpio4 21 GPIO_ACTIVE_LOW>,
69 <&gpio2 17 1>; 75 <&gpio4 27 GPIO_ACTIVE_LOW>,
76 <&gpio2 17 GPIO_ACTIVE_LOW>;
77 pinctrl-names = "default";
78 pinctrl-0 = <&pinctrl_cspi2 &pinctrl_cspi2_cs>;
70 status = "okay"; 79 status = "okay";
71}; 80};
72 81
73&fb { 82&fb {
74 display = <&display>; 83 display = <&display>;
75 fsl,dmacr = <0x00020010>; 84 fsl,dmacr = <0x00020010>;
85 pinctrl-names = "default";
86 pinctrl-0 = <&pinctrl_imxfb1>;
76 status = "okay"; 87 status = "okay";
77}; 88};
78 89
79&i2c1 { 90&i2c1 {
80 clock-frequency = <400000>; 91 clock-frequency = <400000>;
92 pinctrl-names = "default";
93 pinctrl-0 = <&pinctrl_i2c1>;
81 status = "okay"; 94 status = "okay";
82 95
83 rtc@68 { 96 rtc@68 {
@@ -87,5 +100,127 @@
87}; 100};
88 101
89&i2c2 { 102&i2c2 {
103 pinctrl-names = "default";
104 pinctrl-0 = <&pinctrl_i2c2>;
90 status = "okay"; 105 status = "okay";
91}; 106};
107
108&iomuxc {
109 imx27-apf27dev {
110 pinctrl_cspi1: cspi1grp {
111 fsl,pins = <
112 MX27_PAD_CSPI1_MISO__CSPI1_MISO 0x0
113 MX27_PAD_CSPI1_MOSI__CSPI1_MOSI 0x0
114 MX27_PAD_CSPI1_SCLK__CSPI1_SCLK 0x0
115 >;
116 };
117
118 pinctrl_cspi1_cs: cspi1csgrp {
119 fsl,pins = <MX27_PAD_CSPI1_SS0__GPIO4_28 0x0>;
120 };
121
122 pinctrl_cspi2: cspi2grp {
123 fsl,pins = <
124 MX27_PAD_CSPI2_MISO__CSPI2_MISO 0x0
125 MX27_PAD_CSPI2_MOSI__CSPI2_MOSI 0x0
126 MX27_PAD_CSPI2_SCLK__CSPI2_SCLK 0x0
127 >;
128 };
129
130 pinctrl_cspi2_cs: cspi2csgrp {
131 fsl,pins = <
132 MX27_PAD_CSI_D5__GPIO2_17 0x0
133 MX27_PAD_CSPI2_SS0__GPIO4_21 0x0
134 MX27_PAD_CSPI1_SS1__GPIO4_27 0x0
135 >;
136 };
137
138 pinctrl_gpio_leds: gpioledsgrp {
139 fsl,pins = <MX27_PAD_PC_VS1__GPIO6_14 0x0>;
140 };
141
142 pinctrl_gpio_keys: gpiokeysgrp {
143 fsl,pins = <MX27_PAD_PC_VS2__GPIO6_13 0x0>;
144 };
145
146 pinctrl_imxfb1: imxfbgrp {
147 fsl,pins = <
148 MX27_PAD_CLS__CLS 0x0
149 MX27_PAD_CONTRAST__CONTRAST 0x0
150 MX27_PAD_LD0__LD0 0x0
151 MX27_PAD_LD1__LD1 0x0
152 MX27_PAD_LD2__LD2 0x0
153 MX27_PAD_LD3__LD3 0x0
154 MX27_PAD_LD4__LD4 0x0
155 MX27_PAD_LD5__LD5 0x0
156 MX27_PAD_LD6__LD6 0x0
157 MX27_PAD_LD7__LD7 0x0
158 MX27_PAD_LD8__LD8 0x0
159 MX27_PAD_LD9__LD9 0x0
160 MX27_PAD_LD10__LD10 0x0
161 MX27_PAD_LD11__LD11 0x0
162 MX27_PAD_LD12__LD12 0x0
163 MX27_PAD_LD13__LD13 0x0
164 MX27_PAD_LD14__LD14 0x0
165 MX27_PAD_LD15__LD15 0x0
166 MX27_PAD_LD16__LD16 0x0
167 MX27_PAD_LD17__LD17 0x0
168 MX27_PAD_LSCLK__LSCLK 0x0
169 MX27_PAD_OE_ACD__OE_ACD 0x0
170 MX27_PAD_PS__PS 0x0
171 MX27_PAD_REV__REV 0x0
172 MX27_PAD_SPL_SPR__SPL_SPR 0x0
173 MX27_PAD_HSYNC__HSYNC 0x0
174 MX27_PAD_VSYNC__VSYNC 0x0
175 >;
176 };
177
178 pinctrl_i2c1: i2c1grp {
179 fsl,pins = <
180 MX27_PAD_I2C_DATA__I2C_DATA 0x0
181 MX27_PAD_I2C_CLK__I2C_CLK 0x0
182 >;
183 };
184
185 pinctrl_i2c2: i2c2grp {
186 fsl,pins = <
187 MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
188 MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
189 >;
190 };
191
192 pinctrl_pwm: pwmgrp {
193 fsl,pins = <
194 MX27_PAD_PWMO__PWMO 0x0
195 >;
196 };
197
198 pinctrl_sdhc2: sdhc2grp {
199 fsl,pins = <
200 MX27_PAD_SD2_CLK__SD2_CLK 0x0
201 MX27_PAD_SD2_CMD__SD2_CMD 0x0
202 MX27_PAD_SD2_D0__SD2_D0 0x0
203 MX27_PAD_SD2_D1__SD2_D1 0x0
204 MX27_PAD_SD2_D2__SD2_D2 0x0
205 MX27_PAD_SD2_D3__SD2_D3 0x0
206 >;
207 };
208
209 pinctrl_sdhc2_cd: sdhc2cdgrp {
210 fsl,pins = <MX27_PAD_TOUT__GPIO3_14 0x0>;
211 };
212 };
213};
214
215&sdhci2 {
216 bus-width = <4>;
217 cd-gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>;
218 pinctrl-names = "default";
219 pinctrl-0 = <&pinctrl_sdhc2 &pinctrl_sdhc2_cd>;
220 status = "okay";
221};
222
223&pwm {
224 pinctrl-names = "default";
225 pinctrl-0 = <&pinctrl_pwm>;
226};
diff --git a/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts b/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts
index 5a31c776513f..3c3964a99637 100644
--- a/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts
+++ b/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts
@@ -9,7 +9,7 @@
9 * http://www.gnu.org/copyleft/gpl.html 9 * http://www.gnu.org/copyleft/gpl.html
10 */ 10 */
11 11
12#include "imx27-phytec-phycard-s-som.dts" 12#include "imx27-phytec-phycard-s-som.dtsi"
13 13
14/ { 14/ {
15 model = "Phytec pca100 rapid development kit"; 15 model = "Phytec pca100 rapid development kit";
@@ -37,9 +37,12 @@
37 37
38 regulators { 38 regulators {
39 compatible = "simple-bus"; 39 compatible = "simple-bus";
40 #address-cells = <1>;
41 #size-cells = <0>;
40 42
41 reg_3v3: 3v3 { 43 reg_3v3: regulator@0 {
42 compatible = "regulator-fixed"; 44 compatible = "regulator-fixed";
45 reg = <0>;
43 regulator-name = "3V3"; 46 regulator-name = "3V3";
44 regulator-min-microvolt = <3300000>; 47 regulator-min-microvolt = <3300000>;
45 regulator-max-microvolt = <3300000>; 48 regulator-max-microvolt = <3300000>;
@@ -54,6 +57,8 @@
54}; 57};
55 58
56&i2c1 { 59&i2c1 {
60 pinctrl-names = "default";
61 pinctrl-0 = <&pinctrl_i2c1>;
57 status = "okay"; 62 status = "okay";
58 63
59 rtc@51 { 64 rtc@51 {
@@ -68,26 +73,92 @@
68 }; 73 };
69}; 74};
70 75
76&iomuxc {
77 imx27-phycard-s-rdk {
78 pinctrl_i2c1: i2c1grp {
79 fsl,pins = <
80 MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
81 MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
82 >;
83 };
84
85 pinctrl_owire1: owire1grp {
86 fsl,pins = <
87 MX27_PAD_RTCK__OWIRE 0x0
88 >;
89 };
90
91 pinctrl_sdhc2: sdhc2grp {
92 fsl,pins = <
93 MX27_PAD_SD2_CLK__SD2_CLK 0x0
94 MX27_PAD_SD2_CMD__SD2_CMD 0x0
95 MX27_PAD_SD2_D0__SD2_D0 0x0
96 MX27_PAD_SD2_D1__SD2_D1 0x0
97 MX27_PAD_SD2_D2__SD2_D2 0x0
98 MX27_PAD_SD2_D3__SD2_D3 0x0
99 MX27_PAD_SSI3_RXDAT__GPIO3_29 0x0 /* CD */
100 >;
101 };
102
103 pinctrl_uart1: uart1grp {
104 fsl,pins = <
105 MX27_PAD_UART1_TXD__UART1_TXD 0x0
106 MX27_PAD_UART1_RXD__UART1_RXD 0x0
107 MX27_PAD_UART1_CTS__UART1_CTS 0x0
108 MX27_PAD_UART1_RTS__UART1_RTS 0x0
109 >;
110 };
111
112 pinctrl_uart2: uart2grp {
113 fsl,pins = <
114 MX27_PAD_UART2_TXD__UART2_TXD 0x0
115 MX27_PAD_UART2_RXD__UART2_RXD 0x0
116 MX27_PAD_UART2_CTS__UART2_CTS 0x0
117 MX27_PAD_UART2_RTS__UART2_RTS 0x0
118 >;
119 };
120
121 pinctrl_uart3: uart3grp {
122 fsl,pins = <
123 MX27_PAD_UART3_TXD__UART3_TXD 0x0
124 MX27_PAD_UART3_RXD__UART3_RXD 0x0
125 MX27_PAD_UART3_CTS__UART3_CTS 0x0
126 MX27_PAD_UART3_RTS__UART3_RTS 0x0
127 >;
128 };
129 };
130};
131
71&owire { 132&owire {
133 pinctrl-names = "default";
134 pinctrl-0 = <&pinctrl_owire1>;
72 status = "okay"; 135 status = "okay";
73}; 136};
74 137
75&sdhci2 { 138&sdhci2 {
76 cd-gpios = <&gpio3 29 0>; 139 pinctrl-names = "default";
140 pinctrl-0 = <&pinctrl_sdhc2>;
141 cd-gpios = <&gpio3 29 GPIO_ACTIVE_HIGH>;
77 status = "okay"; 142 status = "okay";
78}; 143};
79 144
80&uart1 { 145&uart1 {
81 fsl,uart-has-rtscts; 146 fsl,uart-has-rtscts;
147 pinctrl-names = "default";
148 pinctrl-0 = <&pinctrl_uart1>;
82 status = "okay"; 149 status = "okay";
83}; 150};
84 151
85&uart2 { 152&uart2 {
86 fsl,uart-has-rtscts; 153 fsl,uart-has-rtscts;
154 pinctrl-names = "default";
155 pinctrl-0 = <&pinctrl_uart2>;
87 status = "okay"; 156 status = "okay";
88}; 157};
89 158
90&uart3 { 159&uart3 {
91 fsl,uart-has-rtscts; 160 fsl,uart-has-rtscts;
161 pinctrl-names = "default";
162 pinctrl-0 = <&pinctrl_uart3>;
92 status = "okay"; 163 status = "okay";
93}; 164};
diff --git a/arch/arm/boot/dts/imx27-phytec-phycard-s-som.dts b/arch/arm/boot/dts/imx27-phytec-phycard-s-som.dts
deleted file mode 100644
index c8d57d1d0743..000000000000
--- a/arch/arm/boot/dts/imx27-phytec-phycard-s-som.dts
+++ /dev/null
@@ -1,44 +0,0 @@
1/*
2 * Copyright 2012 Sascha Hauer, Uwe Kleine-König, Steffen Trumtrar
3 * and Markus Pargmann, Pengutronix
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13/dts-v1/;
14#include "imx27.dtsi"
15
16/ {
17 model = "Phytec pca100";
18 compatible = "phytec,imx27-pca100", "fsl,imx27";
19
20 memory {
21 reg = <0xa0000000 0x08000000>; /* 128MB */
22 };
23};
24
25&cspi1 {
26 fsl,spi-num-chipselects = <2>;
27 cs-gpios = <&gpio4 28 0>,
28 <&gpio4 27 0>;
29 status = "okay";
30};
31
32&fec {
33 status = "okay";
34};
35
36&i2c2 {
37 status = "okay";
38
39 at24@52 {
40 compatible = "at,24c32";
41 pagesize = <32>;
42 reg = <0x52>;
43 };
44};
diff --git a/arch/arm/boot/dts/imx27-phytec-phycard-s-som.dtsi b/arch/arm/boot/dts/imx27-phytec-phycard-s-som.dtsi
new file mode 100644
index 000000000000..1b6248079682
--- /dev/null
+++ b/arch/arm/boot/dts/imx27-phytec-phycard-s-som.dtsi
@@ -0,0 +1,103 @@
1/*
2 * Copyright 2012 Sascha Hauer, Uwe Kleine-König, Steffen Trumtrar
3 * and Markus Pargmann, Pengutronix
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13/dts-v1/;
14#include "imx27.dtsi"
15
16/ {
17 model = "Phytec pca100";
18 compatible = "phytec,imx27-pca100", "fsl,imx27";
19
20 memory {
21 reg = <0xa0000000 0x08000000>; /* 128MB */
22 };
23};
24
25&cspi1 {
26 fsl,spi-num-chipselects = <2>;
27 cs-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>,
28 <&gpio4 27 GPIO_ACTIVE_HIGH>;
29 status = "okay";
30};
31
32&fec {
33 pinctrl-names = "default";
34 pinctrl-0 = <&pinctrl_fec1>;
35 status = "okay";
36};
37
38&i2c2 {
39 pinctrl-names = "default";
40 pinctrl-0 = <&pinctrl_i2c2>;
41 status = "okay";
42
43 at24@52 {
44 compatible = "at,24c32";
45 pagesize = <32>;
46 reg = <0x52>;
47 };
48};
49
50&iomuxc {
51 imx27-phycard-s-som {
52 pinctrl_fec1: fec1grp {
53 fsl,pins = <
54 MX27_PAD_SD3_CMD__FEC_TXD0 0x0
55 MX27_PAD_SD3_CLK__FEC_TXD1 0x0
56 MX27_PAD_ATA_DATA0__FEC_TXD2 0x0
57 MX27_PAD_ATA_DATA1__FEC_TXD3 0x0
58 MX27_PAD_ATA_DATA2__FEC_RX_ER 0x0
59 MX27_PAD_ATA_DATA3__FEC_RXD1 0x0
60 MX27_PAD_ATA_DATA4__FEC_RXD2 0x0
61 MX27_PAD_ATA_DATA5__FEC_RXD3 0x0
62 MX27_PAD_ATA_DATA6__FEC_MDIO 0x0
63 MX27_PAD_ATA_DATA7__FEC_MDC 0x0
64 MX27_PAD_ATA_DATA8__FEC_CRS 0x0
65 MX27_PAD_ATA_DATA9__FEC_TX_CLK 0x0
66 MX27_PAD_ATA_DATA10__FEC_RXD0 0x0
67 MX27_PAD_ATA_DATA11__FEC_RX_DV 0x0
68 MX27_PAD_ATA_DATA12__FEC_RX_CLK 0x0
69 MX27_PAD_ATA_DATA13__FEC_COL 0x0
70 MX27_PAD_ATA_DATA14__FEC_TX_ER 0x0
71 MX27_PAD_ATA_DATA15__FEC_TX_EN 0x0
72 >;
73 };
74
75 pinctrl_i2c2: i2c2grp {
76 fsl,pins = <
77 MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
78 MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
79 >;
80 };
81
82 pinctrl_nfc: nfcgrp {
83 fsl,pins = <
84 MX27_PAD_NFRB__NFRB 0x0
85 MX27_PAD_NFCLE__NFCLE 0x0
86 MX27_PAD_NFWP_B__NFWP_B 0x0
87 MX27_PAD_NFCE_B__NFCE_B 0x0
88 MX27_PAD_NFALE__NFALE 0x0
89 MX27_PAD_NFRE_B__NFRE_B 0x0
90 MX27_PAD_NFWE_B__NFWE_B 0x0
91 >;
92 };
93 };
94};
95
96&nfc {
97 pinctrl-names = "default";
98 pinctrl-0 = <&pinctrl_nfc>;
99 nand-bus-width = <8>;
100 nand-ecc-mode = "hw";
101 nand-on-flash-bbt;
102 status = "okay";
103};
diff --git a/arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts b/arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts
index 0fc6551786c6..df3b2e731835 100644
--- a/arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts
+++ b/arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts
@@ -7,7 +7,7 @@
7 * http://www.gnu.org/copyleft/gpl.html 7 * http://www.gnu.org/copyleft/gpl.html
8 */ 8 */
9 9
10#include "imx27-phytec-phycore-som.dts" 10#include "imx27-phytec-phycore-som.dtsi"
11 11
12/ { 12/ {
13 model = "Phytec pcm970"; 13 model = "Phytec pcm970";
@@ -16,32 +16,200 @@
16 16
17&cspi1 { 17&cspi1 {
18 fsl,spi-num-chipselects = <2>; 18 fsl,spi-num-chipselects = <2>;
19 cs-gpios = <&gpio4 28 0>, <&gpio4 27 0>; 19 cs-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>,
20 <&gpio4 27 GPIO_ACTIVE_LOW>;
21};
22
23&i2c1 {
24 clock-frequency = <400000>;
25 pinctrl-names = "default";
26 pinctrl-0 = <&pinctrl_i2c1>;
27 status = "okay";
28
29 camgpio: pca9536@41 {
30 compatible = "nxp,pca9536";
31 reg = <0x41>;
32 gpio-controller;
33 #gpio-cells = <2>;
34 };
35};
36
37&iomuxc {
38 imx27_phycore_rdk {
39 pinctrl_i2c1: i2c1grp {
40 /* Add pullup to DATA line */
41 fsl,pins = <
42 MX27_PAD_I2C_DATA__I2C_DATA 0x1
43 MX27_PAD_I2C_CLK__I2C_CLK 0x0
44 >;
45 };
46
47 pinctrl_owire1: owire1grp {
48 fsl,pins = <
49 MX27_PAD_RTCK__OWIRE 0x0
50 >;
51 };
52
53 pinctrl_sdhc2: sdhc2grp {
54 fsl,pins = <
55 MX27_PAD_SD2_CLK__SD2_CLK 0x0
56 MX27_PAD_SD2_CMD__SD2_CMD 0x0
57 MX27_PAD_SD2_D0__SD2_D0 0x0
58 MX27_PAD_SD2_D1__SD2_D1 0x0
59 MX27_PAD_SD2_D2__SD2_D2 0x0
60 MX27_PAD_SD2_D3__SD2_D3 0x0
61 MX27_PAD_SSI3_FS__GPIO3_28 0x0 /* WP */
62 MX27_PAD_SSI3_RXDAT__GPIO3_29 0x0 /* CD */
63 >;
64 };
65
66 pinctrl_uart1: uart1grp {
67 fsl,pins = <
68 MX27_PAD_UART1_TXD__UART1_TXD 0x0
69 MX27_PAD_UART1_RXD__UART1_RXD 0x0
70 MX27_PAD_UART1_CTS__UART1_CTS 0x0
71 MX27_PAD_UART1_RTS__UART1_RTS 0x0
72 >;
73 };
74
75 pinctrl_uart2: uart2grp {
76 fsl,pins = <
77 MX27_PAD_UART2_TXD__UART2_TXD 0x0
78 MX27_PAD_UART2_RXD__UART2_RXD 0x0
79 MX27_PAD_UART2_CTS__UART2_CTS 0x0
80 MX27_PAD_UART2_RTS__UART2_RTS 0x0
81 >;
82 };
83
84 pinctrl_usbh2: usbh2grp {
85 fsl,pins = <
86 MX27_PAD_USBH2_CLK__USBH2_CLK 0x0
87 MX27_PAD_USBH2_DIR__USBH2_DIR 0x0
88 MX27_PAD_USBH2_NXT__USBH2_NXT 0x0
89 MX27_PAD_USBH2_STP__USBH2_STP 0x0
90 MX27_PAD_CSPI2_SCLK__USBH2_DATA0 0x0
91 MX27_PAD_CSPI2_MOSI__USBH2_DATA1 0x0
92 MX27_PAD_CSPI2_MISO__USBH2_DATA2 0x0
93 MX27_PAD_CSPI2_SS1__USBH2_DATA3 0x0
94 MX27_PAD_CSPI2_SS2__USBH2_DATA4 0x0
95 MX27_PAD_CSPI1_SS2__USBH2_DATA5 0x0
96 MX27_PAD_CSPI2_SS0__USBH2_DATA6 0x0
97 MX27_PAD_USBH2_DATA7__USBH2_DATA7 0x0
98 >;
99 };
100
101 pinctrl_weim: weimgrp {
102 fsl,pins = <
103 MX27_PAD_CS4_B__CS4_B 0x0 /* CS4 */
104 MX27_PAD_SD1_D1__GPIO5_19 0x0 /* CAN IRQ */
105 >;
106 };
107 };
108};
109
110&owire {
111 pinctrl-names = "default";
112 pinctrl-0 = <&pinctrl_owire1>;
113 status = "okay";
114};
115
116&pmicleds {
117 ledr1: led@3 {
118 reg = <3>;
119 label = "system:red1:user";
120 };
121
122 ledg1: led@4 {
123 reg = <4>;
124 label = "system:green1:user";
125 };
126
127 ledb1: led@5 {
128 reg = <5>;
129 label = "system:blue1:user";
130 };
131
132 ledr2: led@6 {
133 reg = <6>;
134 label = "system:red2:user";
135 };
136
137 ledg2: led@7 {
138 reg = <7>;
139 label = "system:green2:user";
140 };
141
142 ledb2: led@8 {
143 reg = <8>;
144 label = "system:blue2:user";
145 };
146
147 ledr3: led@9 {
148 reg = <9>;
149 label = "system:red3:nand";
150 linux,default-trigger = "nand-disk";
151 };
152
153 ledg3: led@10 {
154 reg = <10>;
155 label = "system:green3:live";
156 linux,default-trigger = "heartbeat";
157 };
158
159 ledb3: led@11 {
160 reg = <11>;
161 label = "system:blue3:cpu";
162 linux,default-trigger = "cpu0";
163 };
20}; 164};
21 165
22&sdhci2 { 166&sdhci2 {
167 pinctrl-names = "default";
168 pinctrl-0 = <&pinctrl_sdhc2>;
23 bus-width = <4>; 169 bus-width = <4>;
24 cd-gpios = <&gpio3 29 0>; 170 cd-gpios = <&gpio3 29 GPIO_ACTIVE_HIGH>;
25 wp-gpios = <&gpio3 28 0>; 171 wp-gpios = <&gpio3 28 GPIO_ACTIVE_HIGH>;
26 vmmc-supply = <&vmmc1_reg>; 172 vmmc-supply = <&vmmc1_reg>;
27 status = "okay"; 173 status = "okay";
28}; 174};
29 175
30&uart1 { 176&uart1 {
31 fsl,uart-has-rtscts; 177 fsl,uart-has-rtscts;
178 pinctrl-names = "default";
179 pinctrl-0 = <&pinctrl_uart1>;
180 status = "okay";
32}; 181};
33 182
34&uart2 { 183&uart2 {
35 fsl,uart-has-rtscts; 184 fsl,uart-has-rtscts;
185 pinctrl-names = "default";
186 pinctrl-0 = <&pinctrl_uart2>;
187 status = "okay";
188};
189
190&usbh2 {
191 pinctrl-names = "default";
192 pinctrl-0 = <&pinctrl_usbh2>;
193 dr_mode = "host";
194 phy_type = "ulpi";
195 vbus-supply = <&reg_5v0>;
196 disable-over-current;
36 status = "okay"; 197 status = "okay";
37}; 198};
38 199
200&usbphy2 {
201 vcc-supply = <&reg_5v0>;
202};
203
39&weim { 204&weim {
205 pinctrl-names = "default";
206 pinctrl-0 = <&pinctrl_weim>;
207
40 can@d4000000 { 208 can@d4000000 {
41 compatible = "nxp,sja1000"; 209 compatible = "nxp,sja1000";
42 reg = <4 0x00000000 0x00000100>; 210 reg = <4 0x00000000 0x00000100>;
43 interrupt-parent = <&gpio5>; 211 interrupt-parent = <&gpio5>;
44 interrupts = <19 0x2>; 212 interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
45 nxp,external-clock-frequency = <16000000>; 213 nxp,external-clock-frequency = <16000000>;
46 nxp,tx-output-config = <0x16>; 214 nxp,tx-output-config = <0x16>;
47 nxp,no-comparator-bypass; 215 nxp,no-comparator-bypass;
diff --git a/arch/arm/boot/dts/imx27-phytec-phycore-som.dts b/arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi
index 4ec402c38945..cefaa6994623 100644
--- a/arch/arm/boot/dts/imx27-phytec-phycore-som.dts
+++ b/arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi
@@ -19,6 +19,28 @@
19 memory { 19 memory {
20 reg = <0xa0000000 0x08000000>; 20 reg = <0xa0000000 0x08000000>;
21 }; 21 };
22
23 regulators {
24 compatible = "simple-bus";
25 #address-cells = <1>;
26 #size-cells = <0>;
27
28 reg_3v3: regulator@0 {
29 compatible = "regulator-fixed";
30 reg = <0>;
31 regulator-name = "3V3";
32 regulator-min-microvolt = <3300000>;
33 regulator-max-microvolt = <3300000>;
34 };
35
36 reg_5v0: regulator@1 {
37 compatible = "regulator-fixed";
38 reg = <1>;
39 regulator-name = "5V0";
40 regulator-min-microvolt = <5000000>;
41 regulator-max-microvolt = <5000000>;
42 };
43 };
22}; 44};
23 45
24&audmux { 46&audmux {
@@ -37,21 +59,30 @@
37}; 59};
38 60
39&cspi1 { 61&cspi1 {
62 pinctrl-names = "default";
63 pinctrl-0 = <&pinctrl_cspi1>;
40 fsl,spi-num-chipselects = <1>; 64 fsl,spi-num-chipselects = <1>;
41 cs-gpios = <&gpio4 28 0>; 65 cs-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>;
42 status = "okay"; 66 status = "okay";
43 67
44 pmic: mc13783@0 { 68 pmic: mc13783@0 {
45 #address-cells = <1>; 69 #address-cells = <1>;
46 #size-cells = <0>; 70 #size-cells = <0>;
47 compatible = "fsl,mc13783"; 71 compatible = "fsl,mc13783";
48 spi-max-frequency = <20000000>;
49 reg = <0>; 72 reg = <0>;
73 spi-cs-high;
74 spi-max-frequency = <20000000>;
50 interrupt-parent = <&gpio2>; 75 interrupt-parent = <&gpio2>;
51 interrupts = <23 0x4>; 76 interrupts = <23 IRQ_TYPE_LEVEL_HIGH>;
52 fsl,mc13xxx-uses-adc; 77 fsl,mc13xxx-uses-adc;
53 fsl,mc13xxx-uses-rtc; 78 fsl,mc13xxx-uses-rtc;
54 79
80 pmicleds: leds {
81 #address-cells = <1>;
82 #size-cells = <0>;
83 led-control = <0x001 0x000 0x000 0x000 0x000 0x000>;
84 };
85
55 regulators { 86 regulators {
56 /* SW1A and SW1B joined operation */ 87 /* SW1A and SW1B joined operation */
57 sw1_reg: sw1a { 88 sw1_reg: sw1a {
@@ -134,12 +165,18 @@
134}; 165};
135 166
136&fec { 167&fec {
137 phy-reset-gpios = <&gpio3 30 0>; 168 phy-mode = "mii";
169 phy-reset-gpios = <&gpio3 30 GPIO_ACTIVE_HIGH>;
170 phy-supply = <&reg_3v3>;
171 pinctrl-names = "default";
172 pinctrl-0 = <&pinctrl_fec1>;
138 status = "okay"; 173 status = "okay";
139}; 174};
140 175
141&i2c2 { 176&i2c2 {
142 clock-frequency = <400000>; 177 clock-frequency = <400000>;
178 pinctrl-names = "default";
179 pinctrl-0 = <&pinctrl_i2c2>;
143 status = "okay"; 180 status = "okay";
144 181
145 at24@52 { 182 at24@52 {
@@ -159,16 +196,102 @@
159 }; 196 };
160}; 197};
161 198
199&iomuxc {
200 imx27_phycore_som {
201 pinctrl_cspi1: cspi1grp {
202 fsl,pins = <
203 MX27_PAD_CSPI1_MISO__CSPI1_MISO 0x0
204 MX27_PAD_CSPI1_MOSI__CSPI1_MOSI 0x0
205 MX27_PAD_CSPI1_SCLK__CSPI1_SCLK 0x0
206 MX27_PAD_CSPI1_SS0__GPIO4_28 0x0 /* SPI1 CS0 */
207 MX27_PAD_USB_PWR__GPIO2_23 0x0 /* PMIC IRQ */
208 >;
209 };
210
211 pinctrl_fec1: fec1grp {
212 fsl,pins = <
213 MX27_PAD_SD3_CMD__FEC_TXD0 0x0
214 MX27_PAD_SD3_CLK__FEC_TXD1 0x0
215 MX27_PAD_ATA_DATA0__FEC_TXD2 0x0
216 MX27_PAD_ATA_DATA1__FEC_TXD3 0x0
217 MX27_PAD_ATA_DATA2__FEC_RX_ER 0x0
218 MX27_PAD_ATA_DATA3__FEC_RXD1 0x0
219 MX27_PAD_ATA_DATA4__FEC_RXD2 0x0
220 MX27_PAD_ATA_DATA5__FEC_RXD3 0x0
221 MX27_PAD_ATA_DATA6__FEC_MDIO 0x0
222 MX27_PAD_ATA_DATA7__FEC_MDC 0x0
223 MX27_PAD_ATA_DATA8__FEC_CRS 0x0
224 MX27_PAD_ATA_DATA9__FEC_TX_CLK 0x0
225 MX27_PAD_ATA_DATA10__FEC_RXD0 0x0
226 MX27_PAD_ATA_DATA11__FEC_RX_DV 0x0
227 MX27_PAD_ATA_DATA12__FEC_RX_CLK 0x0
228 MX27_PAD_ATA_DATA13__FEC_COL 0x0
229 MX27_PAD_ATA_DATA14__FEC_TX_ER 0x0
230 MX27_PAD_ATA_DATA15__FEC_TX_EN 0x0
231 MX27_PAD_SSI3_TXDAT__GPIO3_30 0x0 /* FEC RST */
232 >;
233 };
234
235 pinctrl_i2c2: i2c2grp {
236 fsl,pins = <
237 MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
238 MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
239 >;
240 };
241
242 pinctrl_nfc: nfcgrp {
243 fsl,pins = <
244 MX27_PAD_NFRB__NFRB 0x0
245 MX27_PAD_NFCLE__NFCLE 0x0
246 MX27_PAD_NFWP_B__NFWP_B 0x0
247 MX27_PAD_NFCE_B__NFCE_B 0x0
248 MX27_PAD_NFALE__NFALE 0x0
249 MX27_PAD_NFRE_B__NFRE_B 0x0
250 MX27_PAD_NFWE_B__NFWE_B 0x0
251 >;
252 };
253
254 pinctrl_usbotg: usbotggrp {
255 fsl,pins = <
256 MX27_PAD_USBOTG_CLK__USBOTG_CLK 0x0
257 MX27_PAD_USBOTG_DIR__USBOTG_DIR 0x0
258 MX27_PAD_USBOTG_NXT__USBOTG_NXT 0x0
259 MX27_PAD_USBOTG_STP__USBOTG_STP 0x0
260 MX27_PAD_USBOTG_DATA0__USBOTG_DATA0 0x0
261 MX27_PAD_USBOTG_DATA1__USBOTG_DATA1 0x0
262 MX27_PAD_USBOTG_DATA2__USBOTG_DATA2 0x0
263 MX27_PAD_USBOTG_DATA3__USBOTG_DATA3 0x0
264 MX27_PAD_USBOTG_DATA4__USBOTG_DATA4 0x0
265 MX27_PAD_USBOTG_DATA5__USBOTG_DATA5 0x0
266 MX27_PAD_USBOTG_DATA6__USBOTG_DATA6 0x0
267 MX27_PAD_USBOTG_DATA7__USBOTG_DATA7 0x0
268 >;
269 };
270 };
271};
272
162&nfc { 273&nfc {
274 pinctrl-names = "default";
275 pinctrl-0 = <&pinctrl_nfc>;
163 nand-bus-width = <8>; 276 nand-bus-width = <8>;
164 nand-ecc-mode = "hw"; 277 nand-ecc-mode = "hw";
278 nand-on-flash-bbt;
165 status = "okay"; 279 status = "okay";
166}; 280};
167 281
168&uart1 { 282&usbotg {
283 pinctrl-names = "default";
284 pinctrl-0 = <&pinctrl_usbotg>;
285 dr_mode = "otg";
286 phy_type = "ulpi";
287 vbus-supply = <&sw3_reg>;
169 status = "okay"; 288 status = "okay";
170}; 289};
171 290
291&usbphy0 {
292 vcc-supply = <&sw3_reg>;
293};
294
172&weim { 295&weim {
173 status = "okay"; 296 status = "okay";
174 297
diff --git a/arch/arm/boot/dts/imx27-pinfunc.h b/arch/arm/boot/dts/imx27-pinfunc.h
new file mode 100644
index 000000000000..f5387b4de577
--- /dev/null
+++ b/arch/arm/boot/dts/imx27-pinfunc.h
@@ -0,0 +1,526 @@
1/*
2 * Copyright 2013 Markus Pargmann <mpa@pengutronix.de>, Pengutronix
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12#ifndef __DTS_IMX27_PINFUNC_H
13#define __DTS_IMX27_PINFUNC_H
14
15/*
16 * The pin function ID is a tuple of
17 * <pin mux_id>
18 * mux_id consists of
19 * function + (direction << 2) + (gpio_oconf << 4) + (gpio_iconfa << 8) + (gpio_iconfb << 10)
20 *
21 * function: 0 - Primary function
22 * 1 - Alternate function
23 * 2 - GPIO
24 * direction: 0 - Input
25 * 1 - Output
26 * gpio_oconf: 0 - A_IN
27 * 1 - B_IN
28 * 2 - C_IN
29 * 3 - Data Register
30 * gpio_iconfa/b: 0 - GPIO_IN
31 * 1 - Interrupt Status Register
32 * 2 - 0
33 * 3 - 1
34 *
35 * 'pin' is an integer between 0 and 0xbf. imx27 has 6 ports with 32 configurable
36 * configurable pins each. 'pin' is PORT * 32 + PORT_PIN, PORT_PIN is the pin
37 * number on the specific port (between 0 and 31).
38 */
39
40#define MX27_PAD_USBH2_CLK__USBH2_CLK 0x00 0x000
41#define MX27_PAD_USBH2_CLK__GPIO1_0 0x00 0x032
42#define MX27_PAD_USBH2_DIR__USBH2_DIR 0x01 0x000
43#define MX27_PAD_USBH2_DIR__GPIO1_1 0x01 0x032
44#define MX27_PAD_USBH2_DATA7__USBH2_DATA7 0x02 0x004
45#define MX27_PAD_USBH2_DATA7__GPIO1_2 0x02 0x032
46#define MX27_PAD_USBH2_NXT__USBH2_NXT 0x03 0x000
47#define MX27_PAD_USBH2_NXT__GPIO1_3 0x03 0x032
48#define MX27_PAD_USBH2_STP__USBH2_STP 0x04 0x004
49#define MX27_PAD_USBH2_STP__GPIO1_4 0x04 0x032
50#define MX27_PAD_LSCLK__LSCLK 0x05 0x004
51#define MX27_PAD_LSCLK__GPIO1_5 0x05 0x032
52#define MX27_PAD_LD0__LD0 0x06 0x004
53#define MX27_PAD_LD0__GPIO1_6 0x06 0x032
54#define MX27_PAD_LD1__LD1 0x07 0x004
55#define MX27_PAD_LD1__GPIO1_7 0x07 0x032
56#define MX27_PAD_LD2__LD2 0x08 0x004
57#define MX27_PAD_LD2__GPIO1_8 0x08 0x032
58#define MX27_PAD_LD3__LD3 0x09 0x004
59#define MX27_PAD_LD3__GPIO1_9 0x09 0x032
60#define MX27_PAD_LD4__LD4 0x0a 0x004
61#define MX27_PAD_LD4__GPIO1_10 0x0a 0x032
62#define MX27_PAD_LD5__LD5 0x0b 0x004
63#define MX27_PAD_LD5__GPIO1_11 0x0b 0x032
64#define MX27_PAD_LD6__LD6 0x0c 0x004
65#define MX27_PAD_LD6__GPIO1_12 0x0c 0x032
66#define MX27_PAD_LD7__LD7 0x0d 0x004
67#define MX27_PAD_LD7__GPIO1_13 0x0d 0x032
68#define MX27_PAD_LD8__LD8 0x0e 0x004
69#define MX27_PAD_LD8__GPIO1_14 0x0e 0x032
70#define MX27_PAD_LD9__LD9 0x0f 0x004
71#define MX27_PAD_LD9__GPIO1_15 0x0f 0x032
72#define MX27_PAD_LD10__LD10 0x10 0x004
73#define MX27_PAD_LD10__GPIO1_16 0x10 0x032
74#define MX27_PAD_LD11__LD11 0x11 0x004
75#define MX27_PAD_LD11__GPIO1_17 0x11 0x032
76#define MX27_PAD_LD12__LD12 0x12 0x004
77#define MX27_PAD_LD12__GPIO1_18 0x12 0x032
78#define MX27_PAD_LD13__LD13 0x13 0x004
79#define MX27_PAD_LD13__GPIO1_19 0x13 0x032
80#define MX27_PAD_LD14__LD14 0x14 0x004
81#define MX27_PAD_LD14__GPIO1_20 0x14 0x032
82#define MX27_PAD_LD15__LD15 0x15 0x004
83#define MX27_PAD_LD15__GPIO1_21 0x15 0x032
84#define MX27_PAD_LD16__LD16 0x16 0x004
85#define MX27_PAD_LD16__GPIO1_22 0x16 0x032
86#define MX27_PAD_LD17__LD17 0x17 0x004
87#define MX27_PAD_LD17__GPIO1_23 0x17 0x032
88#define MX27_PAD_REV__REV 0x18 0x004
89#define MX27_PAD_REV__GPIO1_24 0x18 0x032
90#define MX27_PAD_CLS__CLS 0x19 0x004
91#define MX27_PAD_CLS__GPIO1_25 0x19 0x032
92#define MX27_PAD_PS__PS 0x1a 0x004
93#define MX27_PAD_PS__GPIO1_26 0x1a 0x032
94#define MX27_PAD_SPL_SPR__SPL_SPR 0x1b 0x004
95#define MX27_PAD_SPL_SPR__GPIO1_27 0x1b 0x032
96#define MX27_PAD_HSYNC__HSYNC 0x1c 0x004
97#define MX27_PAD_HSYNC__GPIO1_28 0x1c 0x032
98#define MX27_PAD_VSYNC__VSYNC 0x1d 0x004
99#define MX27_PAD_VSYNC__GPIO1_29 0x1d 0x032
100#define MX27_PAD_CONTRAST__CONTRAST 0x1e 0x004
101#define MX27_PAD_CONTRAST__GPIO1_30 0x1e 0x032
102#define MX27_PAD_OE_ACD__OE_ACD 0x1f 0x004
103#define MX27_PAD_OE_ACD__GPIO1_31 0x1f 0x032
104#define MX27_PAD_UNUSED0__UNUSED0 0x20 0x004
105#define MX27_PAD_UNUSED0__GPIO2_0 0x20 0x032
106#define MX27_PAD_UNUSED1__UNUSED1 0x21 0x004
107#define MX27_PAD_UNUSED1__GPIO2_1 0x21 0x032
108#define MX27_PAD_UNUSED2__UNUSED2 0x22 0x004
109#define MX27_PAD_UNUSED2__GPIO2_2 0x22 0x032
110#define MX27_PAD_UNUSED3__UNUSED3 0x23 0x004
111#define MX27_PAD_UNUSED3__GPIO2_3 0x23 0x032
112#define MX27_PAD_SD2_D0__SD2_D0 0x24 0x004
113#define MX27_PAD_SD2_D0__MSHC_DATA0 0x24 0x005
114#define MX27_PAD_SD2_D0__GPIO2_4 0x24 0x032
115#define MX27_PAD_SD2_D1__SD2_D1 0x25 0x004
116#define MX27_PAD_SD2_D1__MSHC_DATA1 0x25 0x005
117#define MX27_PAD_SD2_D1__GPIO2_5 0x25 0x032
118#define MX27_PAD_SD2_D2__SD2_D2 0x26 0x004
119#define MX27_PAD_SD2_D2__MSHC_DATA2 0x26 0x005
120#define MX27_PAD_SD2_D2__GPIO2_6 0x26 0x032
121#define MX27_PAD_SD2_D3__SD2_D3 0x27 0x004
122#define MX27_PAD_SD2_D3__MSHC_DATA3 0x27 0x005
123#define MX27_PAD_SD2_D3__GPIO2_7 0x27 0x032
124#define MX27_PAD_SD2_CMD__SD2_CMD 0x28 0x004
125#define MX27_PAD_SD2_CMD__MSHC_BS 0x28 0x005
126#define MX27_PAD_SD2_CMD__GPIO2_8 0x28 0x032
127#define MX27_PAD_SD2_CLK__SD2_CLK 0x29 0x004
128#define MX27_PAD_SD2_CLK__MSHC_SCLK 0x29 0x005
129#define MX27_PAD_SD2_CLK__GPIO2_9 0x29 0x032
130#define MX27_PAD_CSI_D0__CSI_D0 0x2a 0x000
131#define MX27_PAD_CSI_D0__UART6_TXD 0x2a 0x005
132#define MX27_PAD_CSI_D0__GPIO2_10 0x2a 0x032
133#define MX27_PAD_CSI_D1__CSI_D1 0x2b 0x000
134#define MX27_PAD_CSI_D1__UART6_RXD 0x2b 0x001
135#define MX27_PAD_CSI_D1__GPIO2_11 0x2b 0x032
136#define MX27_PAD_CSI_D2__CSI_D2 0x2c 0x000
137#define MX27_PAD_CSI_D2__UART6_CTS 0x2c 0x005
138#define MX27_PAD_CSI_D2__GPIO2_12 0x2c 0x032
139#define MX27_PAD_CSI_D3__CSI_D3 0x2d 0x000
140#define MX27_PAD_CSI_D3__UART6_RTS 0x2d 0x001
141#define MX27_PAD_CSI_D3__GPIO2_13 0x2d 0x032
142#define MX27_PAD_CSI_D4__CSI_D4 0x2e 0x000
143#define MX27_PAD_CSI_D4__GPIO2_14 0x2e 0x032
144#define MX27_PAD_CSI_MCLK__CSI_MCLK 0x2f 0x004
145#define MX27_PAD_CSI_MCLK__GPIO2_15 0x2f 0x032
146#define MX27_PAD_CSI_PIXCLK__CSI_PIXCLK 0x30 0x000
147#define MX27_PAD_CSI_PIXCLK__GPIO2_16 0x30 0x032
148#define MX27_PAD_CSI_D5__CSI_D5 0x31 0x000
149#define MX27_PAD_CSI_D5__GPIO2_17 0x31 0x032
150#define MX27_PAD_CSI_D6__CSI_D6 0x32 0x000
151#define MX27_PAD_CSI_D6__UART5_TXD 0x32 0x005
152#define MX27_PAD_CSI_D6__GPIO2_18 0x32 0x032
153#define MX27_PAD_CSI_D7__CSI_D7 0x33 0x000
154#define MX27_PAD_CSI_D7__UART5_RXD 0x33 0x001
155#define MX27_PAD_CSI_D7__GPIO2_19 0x33 0x032
156#define MX27_PAD_CSI_VSYNC__CSI_VSYNC 0x34 0x000
157#define MX27_PAD_CSI_VSYNC__UART5_CTS 0x34 0x005
158#define MX27_PAD_CSI_VSYNC__GPIO2_20 0x34 0x032
159#define MX27_PAD_CSI_HSYNC__CSI_HSYNC 0x35 0x000
160#define MX27_PAD_CSI_HSYNC__UART5_RTS 0x35 0x001
161#define MX27_PAD_CSI_HSYNC__GPIO2_21 0x35 0x032
162#define MX27_PAD_USBH1_SUSP__USBH1_SUSP 0x36 0x004
163#define MX27_PAD_USBH1_SUSP__GPIO2_22 0x36 0x032
164#define MX27_PAD_USB_PWR__USB_PWR 0x37 0x004
165#define MX27_PAD_USB_PWR__GPIO2_23 0x37 0x032
166#define MX27_PAD_USB_OC_B__USB_OC_B 0x38 0x000
167#define MX27_PAD_USB_OC_B__GPIO2_24 0x38 0x032
168#define MX27_PAD_USBH1_RCV__USBH1_RCV 0x39 0x004
169#define MX27_PAD_USBH1_RCV__GPIO2_25 0x39 0x032
170#define MX27_PAD_USBH1_FS__USBH1_FS 0x3a 0x004
171#define MX27_PAD_USBH1_FS__UART4_RTS 0x3a 0x001
172#define MX27_PAD_USBH1_FS__GPIO2_26 0x3a 0x032
173#define MX27_PAD_USBH1_OE_B__USBH1_OE_B 0x3b 0x004
174#define MX27_PAD_USBH1_OE_B__GPIO2_27 0x3b 0x032
175#define MX27_PAD_USBH1_TXDM__USBH1_TXDM 0x3c 0x004
176#define MX27_PAD_USBH1_TXDM__UART4_TXD 0x3c 0x005
177#define MX27_PAD_USBH1_TXDM__GPIO2_28 0x3c 0x032
178#define MX27_PAD_USBH1_TXDP__USBH1_TXDP 0x3d 0x004
179#define MX27_PAD_USBH1_TXDP__UART4_CTS 0x3d 0x005
180#define MX27_PAD_USBH1_TXDP__GPIO2_29 0x3d 0x032
181#define MX27_PAD_USBH1_RXDM__USBH1_RXDM 0x3e 0x004
182#define MX27_PAD_USBH1_RXDM__GPIO2_30 0x3e 0x032
183#define MX27_PAD_USBH1_RXDP__USBH1_RXDP 0x3f 0x004
184#define MX27_PAD_USBH1_RXDP__UART4_RXD 0x3f 0x001
185#define MX27_PAD_USBH1_RXDP__GPIO2_31 0x3f 0x032
186#define MX27_PAD_UNUSED4__UNUSED4 0x40 0x004
187#define MX27_PAD_UNUSED4__GPIO3_0 0x40 0x032
188#define MX27_PAD_UNUSED5__UNUSED5 0x41 0x004
189#define MX27_PAD_UNUSED5__GPIO3_1 0x41 0x032
190#define MX27_PAD_UNUSED6__UNUSED6 0x42 0x004
191#define MX27_PAD_UNUSED6__GPIO3_2 0x42 0x032
192#define MX27_PAD_UNUSED7__UNUSED7 0x43 0x004
193#define MX27_PAD_UNUSED7__GPIO3_3 0x43 0x032
194#define MX27_PAD_UNUSED8__UNUSED8 0x44 0x004
195#define MX27_PAD_UNUSED8__GPIO3_4 0x44 0x032
196#define MX27_PAD_I2C2_SDA__I2C2_SDA 0x45 0x004
197#define MX27_PAD_I2C2_SDA__GPIO3_5 0x45 0x032
198#define MX27_PAD_I2C2_SCL__I2C2_SCL 0x46 0x004
199#define MX27_PAD_I2C2_SCL__GPIO3_6 0x46 0x032
200#define MX27_PAD_USBOTG_DATA5__USBOTG_DATA5 0x47 0x004
201#define MX27_PAD_USBOTG_DATA5__GPIO3_7 0x47 0x032
202#define MX27_PAD_USBOTG_DATA6__USBOTG_DATA6 0x48 0x004
203#define MX27_PAD_USBOTG_DATA6__GPIO3_8 0x48 0x032
204#define MX27_PAD_USBOTG_DATA0__USBOTG_DATA0 0x49 0x004
205#define MX27_PAD_USBOTG_DATA0__GPIO3_9 0x49 0x032
206#define MX27_PAD_USBOTG_DATA2__USBOTG_DATA2 0x4a 0x004
207#define MX27_PAD_USBOTG_DATA2__GPIO3_10 0x4a 0x032
208#define MX27_PAD_USBOTG_DATA1__USBOTG_DATA1 0x4b 0x004
209#define MX27_PAD_USBOTG_DATA1__GPIO3_11 0x4b 0x032
210#define MX27_PAD_USBOTG_DATA4__USBOTG_DATA4 0x4c 0x004
211#define MX27_PAD_USBOTG_DATA4__GPIO3_12 0x4c 0x032
212#define MX27_PAD_USBOTG_DATA3__USBOTG_DATA3 0x4d 0x004
213#define MX27_PAD_USBOTG_DATA3__GPIO3_13 0x4d 0x032
214#define MX27_PAD_TOUT__TOUT 0x4e 0x004
215#define MX27_PAD_TOUT__GPIO3_14 0x4e 0x032
216#define MX27_PAD_TIN__TIN 0x4f 0x000
217#define MX27_PAD_TIN__GPIO3_15 0x4f 0x032
218#define MX27_PAD_SSI4_FS__SSI4_FS 0x50 0x004
219#define MX27_PAD_SSI4_FS__GPIO3_16 0x50 0x032
220#define MX27_PAD_SSI4_RXDAT__SSI4_RXDAT 0x51 0x004
221#define MX27_PAD_SSI4_RXDAT__GPIO3_17 0x51 0x032
222#define MX27_PAD_SSI4_TXDAT__SSI4_TXDAT 0x52 0x004
223#define MX27_PAD_SSI4_TXDAT__GPIO3_18 0x52 0x032
224#define MX27_PAD_SSI4_CLK__SSI4_CLK 0x53 0x004
225#define MX27_PAD_SSI4_CLK__GPIO3_19 0x53 0x032
226#define MX27_PAD_SSI1_FS__SSI1_FS 0x54 0x004
227#define MX27_PAD_SSI1_FS__GPIO3_20 0x54 0x032
228#define MX27_PAD_SSI1_RXDAT__SSI1_RXDAT 0x55 0x004
229#define MX27_PAD_SSI1_RXDAT__GPIO3_21 0x55 0x032
230#define MX27_PAD_SSI1_TXDAT__SSI1_TXDAT 0x56 0x004
231#define MX27_PAD_SSI1_TXDAT__GPIO3_22 0x56 0x032
232#define MX27_PAD_SSI1_CLK__SSI1_CLK 0x57 0x004
233#define MX27_PAD_SSI1_CLK__GPIO3_23 0x57 0x032
234#define MX27_PAD_SSI2_FS__SSI2_FS 0x58 0x004
235#define MX27_PAD_SSI2_FS__GPT5_TOUT 0x58 0x005
236#define MX27_PAD_SSI2_FS__GPIO3_24 0x58 0x032
237#define MX27_PAD_SSI2_RXDAT__SSI2_RXDAT 0x59 0x004
238#define MX27_PAD_SSI2_RXDAT__GPTS_TIN 0x59 0x001
239#define MX27_PAD_SSI2_RXDAT__GPIO3_25 0x59 0x032
240#define MX27_PAD_SSI2_TXDAT__SSI2_TXDAT 0x5a 0x004
241#define MX27_PAD_SSI2_TXDAT__GPT4_TOUT 0x5a 0x005
242#define MX27_PAD_SSI2_TXDAT__GPIO3_26 0x5a 0x032
243#define MX27_PAD_SSI2_CLK__SSI2_CLK 0x5b 0x004
244#define MX27_PAD_SSI2_CLK__GPT4_TIN 0x5b 0x001
245#define MX27_PAD_SSI2_CLK__GPIO3_27 0x5b 0x032
246#define MX27_PAD_SSI3_FS__SSI3_FS 0x5c 0x004
247#define MX27_PAD_SSI3_FS__SLCDC2_D0 0x5c 0x001
248#define MX27_PAD_SSI3_FS__GPIO3_28 0x5c 0x032
249#define MX27_PAD_SSI3_RXDAT__SSI3_RXDAT 0x5d 0x004
250#define MX27_PAD_SSI3_RXDAT__SLCDC2_RS 0x5d 0x001
251#define MX27_PAD_SSI3_RXDAT__GPIO3_29 0x5d 0x032
252#define MX27_PAD_SSI3_TXDAT__SSI3_TXDAT 0x5e 0x004
253#define MX27_PAD_SSI3_TXDAT__SLCDC2_CS 0x5e 0x001
254#define MX27_PAD_SSI3_TXDAT__GPIO3_30 0x5e 0x032
255#define MX27_PAD_SSI3_CLK__SSI3_CLK 0x5f 0x004
256#define MX27_PAD_SSI3_CLK__SLCDC2_CLK 0x5f 0x001
257#define MX27_PAD_SSI3_CLK__GPIO3_31 0x5f 0x032
258#define MX27_PAD_SD3_CMD__SD3_CMD 0x60 0x004
259#define MX27_PAD_SD3_CMD__FEC_TXD0 0x60 0x006
260#define MX27_PAD_SD3_CMD__GPIO4_0 0x60 0x032
261#define MX27_PAD_SD3_CLK__SD3_CLK 0x61 0x004
262#define MX27_PAD_SD3_CLK__ETMTRACEPKT15 0x61 0x005
263#define MX27_PAD_SD3_CLK__FEC_TXD1 0x61 0x006
264#define MX27_PAD_SD3_CLK__GPIO4_1 0x61 0x032
265#define MX27_PAD_ATA_DATA0__ATA_DATA0 0x62 0x004
266#define MX27_PAD_ATA_DATA0__SD3_D0 0x62 0x005
267#define MX27_PAD_ATA_DATA0__FEC_TXD2 0x62 0x006
268#define MX27_PAD_ATA_DATA0__GPIO4_2 0x62 0x032
269#define MX27_PAD_ATA_DATA1__ATA_DATA1 0x63 0x004
270#define MX27_PAD_ATA_DATA1__SD3_D1 0x63 0x005
271#define MX27_PAD_ATA_DATA1__FEC_TXD3 0x63 0x006
272#define MX27_PAD_ATA_DATA1__GPIO4_3 0x63 0x032
273#define MX27_PAD_ATA_DATA2__ATA_DATA2 0x64 0x004
274#define MX27_PAD_ATA_DATA2__SD3_D2 0x64 0x005
275#define MX27_PAD_ATA_DATA2__FEC_RX_ER 0x64 0x002
276#define MX27_PAD_ATA_DATA2__GPIO4_4 0x64 0x032
277#define MX27_PAD_ATA_DATA3__ATA_DATA3 0x65 0x004
278#define MX27_PAD_ATA_DATA3__SD3_D3 0x65 0x005
279#define MX27_PAD_ATA_DATA3__FEC_RXD1 0x65 0x002
280#define MX27_PAD_ATA_DATA3__GPIO4_5 0x65 0x032
281#define MX27_PAD_ATA_DATA4__ATA_DATA4 0x66 0x004
282#define MX27_PAD_ATA_DATA4__ETMTRACEPKT14 0x66 0x005
283#define MX27_PAD_ATA_DATA4__FEC_RXD2 0x66 0x002
284#define MX27_PAD_ATA_DATA4__GPIO4_6 0x66 0x032
285#define MX27_PAD_ATA_DATA5__ATA_DATA5 0x67 0x004
286#define MX27_PAD_ATA_DATA5__ETMTRACEPKT13 0x67 0x005
287#define MX27_PAD_ATA_DATA5__FEC_RXD3 0x67 0x002
288#define MX27_PAD_ATA_DATA5__GPIO4_7 0x67 0x032
289#define MX27_PAD_ATA_DATA6__ATA_DATA6 0x68 0x004
290#define MX27_PAD_ATA_DATA6__FEC_MDIO 0x68 0x005
291#define MX27_PAD_ATA_DATA6__GPIO4_8 0x68 0x032
292#define MX27_PAD_ATA_DATA7__ATA_DATA7 0x69 0x004
293#define MX27_PAD_ATA_DATA7__ETMTRACEPKT12 0x69 0x005
294#define MX27_PAD_ATA_DATA7__FEC_MDC 0x69 0x006
295#define MX27_PAD_ATA_DATA7__GPIO4_9 0x69 0x032
296#define MX27_PAD_ATA_DATA8__ATA_DATA8 0x6a 0x004
297#define MX27_PAD_ATA_DATA8__ETMTRACEPKT11 0x6a 0x005
298#define MX27_PAD_ATA_DATA8__FEC_CRS 0x6a 0x002
299#define MX27_PAD_ATA_DATA8__GPIO4_10 0x6a 0x032
300#define MX27_PAD_ATA_DATA9__ATA_DATA9 0x6b 0x004
301#define MX27_PAD_ATA_DATA9__ETMTRACEPKT10 0x6b 0x005
302#define MX27_PAD_ATA_DATA9__FEC_TX_CLK 0x6b 0x002
303#define MX27_PAD_ATA_DATA9__GPIO4_11 0x6b 0x032
304#define MX27_PAD_ATA_DATA10__ATA_DATA10 0x6c 0x004
305#define MX27_PAD_ATA_DATA10__ETMTRACEPKT9 0x6c 0x005
306#define MX27_PAD_ATA_DATA10__FEC_RXD0 0x6c 0x002
307#define MX27_PAD_ATA_DATA10__GPIO4_12 0x6c 0x032
308#define MX27_PAD_ATA_DATA11__ATA_DATA11 0x6d 0x004
309#define MX27_PAD_ATA_DATA11__ETMTRACEPKT8 0x6d 0x005
310#define MX27_PAD_ATA_DATA11__FEC_RX_DV 0x6d 0x002
311#define MX27_PAD_ATA_DATA11__GPIO4_13 0x6d 0x032
312#define MX27_PAD_ATA_DATA12__ATA_DATA12 0x6e 0x004
313#define MX27_PAD_ATA_DATA12__ETMTRACEPKT7 0x6e 0x005
314#define MX27_PAD_ATA_DATA12__FEC_RX_CLK 0x6e 0x002
315#define MX27_PAD_ATA_DATA12__GPIO4_14 0x6e 0x032
316#define MX27_PAD_ATA_DATA13__ATA_DATA13 0x6f 0x004
317#define MX27_PAD_ATA_DATA13__ETMTRACEPKT6 0x6f 0x005
318#define MX27_PAD_ATA_DATA13__FEC_COL 0x6f 0x002
319#define MX27_PAD_ATA_DATA13__GPIO4_15 0x6f 0x032
320#define MX27_PAD_ATA_DATA14__ATA_DATA14 0x70 0x004
321#define MX27_PAD_ATA_DATA14__ETMTRACEPKT5 0x70 0x005
322#define MX27_PAD_ATA_DATA14__FEC_TX_ER 0x70 0x006
323#define MX27_PAD_ATA_DATA14__GPIO4_16 0x70 0x032
324#define MX27_PAD_I2C_DATA__I2C_DATA 0x71 0x004
325#define MX27_PAD_I2C_DATA__GPIO4_17 0x71 0x032
326#define MX27_PAD_I2C_CLK__I2C_CLK 0x72 0x004
327#define MX27_PAD_I2C_CLK__GPIO4_18 0x72 0x032
328#define MX27_PAD_CSPI2_SS2__CSPI2_SS2 0x73 0x004
329#define MX27_PAD_CSPI2_SS2__USBH2_DATA4 0x73 0x005
330#define MX27_PAD_CSPI2_SS2__GPIO4_19 0x73 0x032
331#define MX27_PAD_CSPI2_SS1__CSPI2_SS1 0x74 0x004
332#define MX27_PAD_CSPI2_SS1__USBH2_DATA3 0x74 0x005
333#define MX27_PAD_CSPI2_SS1__GPIO4_20 0x74 0x032
334#define MX27_PAD_CSPI2_SS0__CSPI2_SS0 0x75 0x004
335#define MX27_PAD_CSPI2_SS0__USBH2_DATA6 0x75 0x005
336#define MX27_PAD_CSPI2_SS0__GPIO4_21 0x75 0x032
337#define MX27_PAD_CSPI2_SCLK__CSPI2_SCLK 0x76 0x004
338#define MX27_PAD_CSPI2_SCLK__USBH2_DATA0 0x76 0x005
339#define MX27_PAD_CSPI2_SCLK__GPIO4_22 0x76 0x032
340#define MX27_PAD_CSPI2_MISO__CSPI2_MISO 0x77 0x004
341#define MX27_PAD_CSPI2_MISO__USBH2_DATA2 0x77 0x005
342#define MX27_PAD_CSPI2_MISO__GPIO4_23 0x77 0x032
343#define MX27_PAD_CSPI2_MOSI__CSPI2_MOSI 0x78 0x004
344#define MX27_PAD_CSPI2_MOSI__USBH2_DATA1 0x78 0x005
345#define MX27_PAD_CSPI2_MOSI__GPIO4_24 0x78 0x032
346#define MX27_PAD_CSPI1_RDY__CSPI1_RDY 0x79 0x000
347#define MX27_PAD_CSPI1_RDY__GPIO4_25 0x79 0x032
348#define MX27_PAD_CSPI1_SS2__CSPI1_SS2 0x7a 0x004
349#define MX27_PAD_CSPI1_SS2__USBH2_DATA5 0x7a 0x005
350#define MX27_PAD_CSPI1_SS2__GPIO4_26 0x7a 0x032
351#define MX27_PAD_CSPI1_SS1__CSPI1_SS1 0x7b 0x004
352#define MX27_PAD_CSPI1_SS1__GPIO4_27 0x7b 0x032
353#define MX27_PAD_CSPI1_SS0__CSPI1_SS0 0x7c 0x004
354#define MX27_PAD_CSPI1_SS0__GPIO4_28 0x7c 0x032
355#define MX27_PAD_CSPI1_SCLK__CSPI1_SCLK 0x7d 0x004
356#define MX27_PAD_CSPI1_SCLK__GPIO4_29 0x7d 0x032
357#define MX27_PAD_CSPI1_MISO__CSPI1_MISO 0x7e 0x004
358#define MX27_PAD_CSPI1_MISO__GPIO4_30 0x7e 0x032
359#define MX27_PAD_CSPI1_MOSI__CSPI1_MOSI 0x7f 0x004
360#define MX27_PAD_CSPI1_MOSI__GPIO4_31 0x7f 0x032
361#define MX27_PAD_USBOTG_NXT__USBOTG_NXT 0x80 0x000
362#define MX27_PAD_USBOTG_NXT__KP_COL6A 0x80 0x005
363#define MX27_PAD_USBOTG_NXT__GPIO5_0 0x80 0x032
364#define MX27_PAD_USBOTG_STP__USBOTG_STP 0x81 0x004
365#define MX27_PAD_USBOTG_STP__KP_ROW6A 0x81 0x005
366#define MX27_PAD_USBOTG_STP__GPIO5_1 0x81 0x032
367#define MX27_PAD_USBOTG_DIR__USBOTG_DIR 0x82 0x000
368#define MX27_PAD_USBOTG_DIR__KP_ROW7A 0x82 0x005
369#define MX27_PAD_USBOTG_DIR__GPIO5_2 0x82 0x032
370#define MX27_PAD_UART2_CTS__UART2_CTS 0x83 0x004
371#define MX27_PAD_UART2_CTS__KP_COL7 0x83 0x005
372#define MX27_PAD_UART2_CTS__GPIO5_3 0x83 0x032
373#define MX27_PAD_UART2_RTS__UART2_RTS 0x84 0x000
374#define MX27_PAD_UART2_RTS__KP_ROW7 0x84 0x005
375#define MX27_PAD_UART2_RTS__GPIO5_4 0x84 0x032
376#define MX27_PAD_PWMO__PWMO 0x85 0x004
377#define MX27_PAD_PWMO__GPIO5_5 0x85 0x032
378#define MX27_PAD_UART2_TXD__UART2_TXD 0x86 0x004
379#define MX27_PAD_UART2_TXD__KP_COL6 0x86 0x005
380#define MX27_PAD_UART2_TXD__GPIO5_6 0x86 0x032
381#define MX27_PAD_UART2_RXD__UART2_RXD 0x87 0x000
382#define MX27_PAD_UART2_RXD__KP_ROW6 0x87 0x005
383#define MX27_PAD_UART2_RXD__GPIO5_7 0x87 0x032
384#define MX27_PAD_UART3_TXD__UART3_TXD 0x88 0x004
385#define MX27_PAD_UART3_TXD__GPIO5_8 0x88 0x032
386#define MX27_PAD_UART3_RXD__UART3_RXD 0x89 0x000
387#define MX27_PAD_UART3_RXD__GPIO5_9 0x89 0x032
388#define MX27_PAD_UART3_CTS__UART3_CTS 0x8a 0x004
389#define MX27_PAD_UART3_CTS__GPIO5_10 0x8a 0x032
390#define MX27_PAD_UART3_RTS__UART3_RTS 0x8b 0x000
391#define MX27_PAD_UART3_RTS__GPIO5_11 0x8b 0x032
392#define MX27_PAD_UART1_TXD__UART1_TXD 0x8c 0x004
393#define MX27_PAD_UART1_TXD__GPIO5_12 0x8c 0x032
394#define MX27_PAD_UART1_RXD__UART1_RXD 0x8d 0x000
395#define MX27_PAD_UART1_RXD__GPIO5_13 0x8d 0x032
396#define MX27_PAD_UART1_CTS__UART1_CTS 0x8e 0x004
397#define MX27_PAD_UART1_CTS__GPIO5_14 0x8e 0x032
398#define MX27_PAD_UART1_RTS__UART1_RTS 0x8f 0x000
399#define MX27_PAD_UART1_RTS__GPIO5_15 0x8f 0x032
400#define MX27_PAD_RTCK__RTCK 0x90 0x004
401#define MX27_PAD_RTCK__OWIRE 0x90 0x005
402#define MX27_PAD_RTCK__GPIO5_16 0x90 0x032
403#define MX27_PAD_RESET_OUT_B__RESET_OUT_B 0x91 0x004
404#define MX27_PAD_RESET_OUT_B__GPIO5_17 0x91 0x032
405#define MX27_PAD_SD1_D0__SD1_D0 0x92 0x004
406#define MX27_PAD_SD1_D0__CSPI3_MISO 0x92 0x001
407#define MX27_PAD_SD1_D0__GPIO5_18 0x92 0x032
408#define MX27_PAD_SD1_D1__SD1_D1 0x93 0x004
409#define MX27_PAD_SD1_D1__GPIO5_19 0x93 0x032
410#define MX27_PAD_SD1_D2__SD1_D2 0x94 0x004
411#define MX27_PAD_SD1_D2__GPIO5_20 0x94 0x032
412#define MX27_PAD_SD1_D3__SD1_D3 0x95 0x004
413#define MX27_PAD_SD1_D3__CSPI3_SS 0x95 0x005
414#define MX27_PAD_SD1_D3__GPIO5_21 0x95 0x032
415#define MX27_PAD_SD1_CMD__SD1_CMD 0x96 0x004
416#define MX27_PAD_SD1_CMD__CSPI3_MOSI 0x96 0x005
417#define MX27_PAD_SD1_CMD__GPIO5_22 0x96 0x032
418#define MX27_PAD_SD1_CLK__SD1_CLK 0x97 0x004
419#define MX27_PAD_SD1_CLK__CSPI3_SCLK 0x97 0x005
420#define MX27_PAD_SD1_CLK__GPIO5_23 0x97 0x032
421#define MX27_PAD_USBOTG_CLK__USBOTG_CLK 0x98 0x000
422#define MX27_PAD_USBOTG_CLK__GPIO5_24 0x98 0x032
423#define MX27_PAD_USBOTG_DATA7__USBOTG_DATA7 0x99 0x004
424#define MX27_PAD_USBOTG_DATA7__GPIO5_25 0x99 0x032
425#define MX27_PAD_UNUSED9__UNUSED9 0x9a 0x004
426#define MX27_PAD_UNUSED9__GPIO5_26 0x9a 0x032
427#define MX27_PAD_UNUSED10__UNUSED10 0x9b 0x004
428#define MX27_PAD_UNUSED10__GPIO5_27 0x9b 0x032
429#define MX27_PAD_UNUSED11__UNUSED11 0x9c 0x004
430#define MX27_PAD_UNUSED11__GPIO5_28 0x9c 0x032
431#define MX27_PAD_UNUSED12__UNUSED12 0x9d 0x004
432#define MX27_PAD_UNUSED12__GPIO5_29 0x9d 0x032
433#define MX27_PAD_UNUSED13__UNUSED13 0x9e 0x004
434#define MX27_PAD_UNUSED13__GPIO5_30 0x9e 0x032
435#define MX27_PAD_UNUSED14__UNUSED14 0x9f 0x004
436#define MX27_PAD_UNUSED14__GPIO5_31 0x9f 0x032
437#define MX27_PAD_NFRB__NFRB 0xa0 0x000
438#define MX27_PAD_NFRB__ETMTRACEPKT3 0xa0 0x005
439#define MX27_PAD_NFRB__GPIO6_0 0xa0 0x032
440#define MX27_PAD_NFCLE__NFCLE 0xa1 0x004
441#define MX27_PAD_NFCLE__ETMTRACEPKT0 0xa1 0x005
442#define MX27_PAD_NFCLE__GPIO6_1 0xa1 0x032
443#define MX27_PAD_NFWP_B__NFWP_B 0xa2 0x004
444#define MX27_PAD_NFWP_B__ETMTRACEPKT1 0xa2 0x005
445#define MX27_PAD_NFWP_B__GPIO6_2 0xa2 0x032
446#define MX27_PAD_NFCE_B__NFCE_B 0xa3 0x004
447#define MX27_PAD_NFCE_B__ETMTRACEPKT2 0xa3 0x005
448#define MX27_PAD_NFCE_B__GPIO6_3 0xa3 0x032
449#define MX27_PAD_NFALE__NFALE 0xa4 0x004
450#define MX27_PAD_NFALE__ETMPIPESTAT0 0xa4 0x005
451#define MX27_PAD_NFALE__GPIO6_4 0xa4 0x032
452#define MX27_PAD_NFRE_B__NFRE_B 0xa5 0x004
453#define MX27_PAD_NFRE_B__ETMPIPESTAT1 0xa5 0x005
454#define MX27_PAD_NFRE_B__GPIO6_5 0xa5 0x032
455#define MX27_PAD_NFWE_B__NFWE_B 0xa6 0x004
456#define MX27_PAD_NFWE_B__ETMPIPESTAT2 0xa6 0x005
457#define MX27_PAD_NFWE_B__GPIO6_6 0xa6 0x032
458#define MX27_PAD_PC_POE__PC_POE 0xa7 0x004
459#define MX27_PAD_PC_POE__ATA_BUFFER_EN 0xa7 0x005
460#define MX27_PAD_PC_POE__GPIO6_7 0xa7 0x032
461#define MX27_PAD_PC_RW_B__PC_RW_B 0xa8 0x004
462#define MX27_PAD_PC_RW_B__ATA_IORDY 0xa8 0x001
463#define MX27_PAD_PC_RW_B__GPIO6_8 0xa8 0x032
464#define MX27_PAD_IOIS16__IOIS16 0xa9 0x000
465#define MX27_PAD_IOIS16__ATA_INTRQ 0xa9 0x001
466#define MX27_PAD_IOIS16__GPIO6_9 0xa9 0x032
467#define MX27_PAD_PC_RST__PC_RST 0xaa 0x004
468#define MX27_PAD_PC_RST__ATA_RESET_B 0xaa 0x005
469#define MX27_PAD_PC_RST__GPIO6_10 0xaa 0x032
470#define MX27_PAD_PC_BVD2__PC_BVD2 0xab 0x000
471#define MX27_PAD_PC_BVD2__ATA_DMACK 0xab 0x005
472#define MX27_PAD_PC_BVD2__GPIO6_11 0xab 0x032
473#define MX27_PAD_PC_BVD1__PC_BVD1 0xac 0x000
474#define MX27_PAD_PC_BVD1__ATA_DMARQ 0xac 0x001
475#define MX27_PAD_PC_BVD1__GPIO6_12 0xac 0x032
476#define MX27_PAD_PC_VS2__PC_VS2 0xad 0x000
477#define MX27_PAD_PC_VS2__ATA_DA0 0xad 0x005
478#define MX27_PAD_PC_VS2__GPIO6_13 0xad 0x032
479#define MX27_PAD_PC_VS1__PC_VS1 0xae 0x000
480#define MX27_PAD_PC_VS1__ATA_DA1 0xae 0x005
481#define MX27_PAD_PC_VS1__GPIO6_14 0xae 0x032
482#define MX27_PAD_CLKO__CLKO 0xaf 0x004
483#define MX27_PAD_CLKO__GPIO6_15 0xaf 0x032
484#define MX27_PAD_PC_PWRON__PC_PWRON 0xb0 0x000
485#define MX27_PAD_PC_PWRON__ATA_DA2 0xb0 0x005
486#define MX27_PAD_PC_PWRON__GPIO6_16 0xb0 0x032
487#define MX27_PAD_PC_READY__PC_READY 0xb1 0x000
488#define MX27_PAD_PC_READY__ATA_CS0 0xb1 0x005
489#define MX27_PAD_PC_READY__GPIO6_17 0xb1 0x032
490#define MX27_PAD_PC_WAIT_B__PC_WAIT_B 0xb2 0x000
491#define MX27_PAD_PC_WAIT_B__ATA_CS1 0xb2 0x005
492#define MX27_PAD_PC_WAIT_B__GPIO6_18 0xb2 0x032
493#define MX27_PAD_PC_CD2_B__PC_CD2_B 0xb3 0x000
494#define MX27_PAD_PC_CD2_B__ATA_DIOW 0xb3 0x005
495#define MX27_PAD_PC_CD2_B__GPIO6_19 0xb3 0x032
496#define MX27_PAD_PC_CD1_B__PC_CD1_B 0xb4 0x000
497#define MX27_PAD_PC_CD1_B__ATA_DIOR 0xb4 0x005
498#define MX27_PAD_PC_CD1_B__GPIO6_20 0xb4 0x032
499#define MX27_PAD_CS4_B__CS4_B 0xb5 0x004
500#define MX27_PAD_CS4_B__ETMTRACESYNC 0xb5 0x005
501#define MX27_PAD_CS4_B__GPIO6_21 0xb5 0x032
502#define MX27_PAD_CS5_B__CS5_B 0xb6 0x004
503#define MX27_PAD_CS5_B__ETMTRACECLK 0xb6 0x005
504#define MX27_PAD_CS5_B__GPIO6_22 0xb6 0x032
505#define MX27_PAD_ATA_DATA15__ATA_DATA15 0xb7 0x004
506#define MX27_PAD_ATA_DATA15__ETMTRACEPKT4 0xb7 0x005
507#define MX27_PAD_ATA_DATA15__FEC_TX_EN 0xb7 0x006
508#define MX27_PAD_ATA_DATA15__GPIO6_23 0xb7 0x032
509#define MX27_PAD_UNUSED15__UNUSED15 0xb8 0x004
510#define MX27_PAD_UNUSED15__GPIO6_24 0xb8 0x032
511#define MX27_PAD_UNUSED16__UNUSED16 0xb9 0x004
512#define MX27_PAD_UNUSED16__GPIO6_25 0xb9 0x032
513#define MX27_PAD_UNUSED17__UNUSED17 0xba 0x004
514#define MX27_PAD_UNUSED17__GPIO6_26 0xba 0x032
515#define MX27_PAD_UNUSED18__UNUSED18 0xbb 0x004
516#define MX27_PAD_UNUSED18__GPIO6_27 0xbb 0x032
517#define MX27_PAD_UNUSED19__UNUSED19 0xbc 0x004
518#define MX27_PAD_UNUSED19__GPIO6_28 0xbc 0x032
519#define MX27_PAD_UNUSED20__UNUSED20 0xbd 0x004
520#define MX27_PAD_UNUSED20__GPIO6_29 0xbd 0x032
521#define MX27_PAD_UNUSED21__UNUSED21 0xbe 0x004
522#define MX27_PAD_UNUSED21__GPIO6_30 0xbe 0x032
523#define MX27_PAD_UNUSED22__UNUSED22 0xbf 0x004
524#define MX27_PAD_UNUSED22__GPIO6_31 0xbf 0x032
525
526#endif /* __DTS_IMX27_PINFUNC_H */
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi
index 826231eb4446..6279e0b4f768 100644
--- a/arch/arm/boot/dts/imx27.dtsi
+++ b/arch/arm/boot/dts/imx27.dtsi
@@ -10,6 +10,9 @@
10 */ 10 */
11 11
12#include "skeleton.dtsi" 12#include "skeleton.dtsi"
13#include "imx27-pinfunc.h"
14#include <dt-bindings/interrupt-controller/irq.h>
15#include <dt-bindings/gpio/gpio.h>
13 16
14/ { 17/ {
15 aliases { 18 aliases {
@@ -67,6 +70,26 @@
67 }; 70 };
68 }; 71 };
69 72
73 usbphy {
74 compatible = "simple-bus";
75 #address-cells = <1>;
76 #size-cells = <0>;
77
78 usbphy0: usbphy@0 {
79 compatible = "usb-nop-xceiv";
80 reg = <0>;
81 clocks = <&clks 75>;
82 clock-names = "main_clk";
83 };
84
85 usbphy2: usbphy@2 {
86 compatible = "usb-nop-xceiv";
87 reg = <2>;
88 clocks = <&clks 75>;
89 clock-names = "main_clk";
90 };
91 };
92
70 soc { 93 soc {
71 #address-cells = <1>; 94 #address-cells = <1>;
72 #size-cells = <1>; 95 #size-cells = <1>;
@@ -204,6 +227,30 @@
204 status = "disabled"; 227 status = "disabled";
205 }; 228 };
206 229
230 ssi1: ssi@10010000 {
231 #sound-dai-cells = <0>;
232 compatible = "fsl,imx27-ssi", "fsl,imx21-ssi";
233 reg = <0x10010000 0x1000>;
234 interrupts = <14>;
235 clocks = <&clks 26>;
236 dmas = <&dma 12>, <&dma 13>, <&dma 14>, <&dma 15>;
237 dma-names = "rx0", "tx0", "rx1", "tx1";
238 fsl,fifo-depth = <8>;
239 status = "disabled";
240 };
241
242 ssi2: ssi@10011000 {
243 #sound-dai-cells = <0>;
244 compatible = "fsl,imx27-ssi", "fsl,imx21-ssi";
245 reg = <0x10011000 0x1000>;
246 interrupts = <13>;
247 clocks = <&clks 25>;
248 dmas = <&dma 8>, <&dma 9>, <&dma 10>, <&dma 11>;
249 dma-names = "rx0", "tx0", "rx1", "tx1";
250 fsl,fifo-depth = <8>;
251 status = "disabled";
252 };
253
207 i2c1: i2c@10012000 { 254 i2c1: i2c@10012000 {
208 #address-cells = <1>; 255 #address-cells = <1>;
209 #size-cells = <0>; 256 #size-cells = <0>;
@@ -236,64 +283,72 @@
236 status = "disabled"; 283 status = "disabled";
237 }; 284 };
238 285
239 gpio1: gpio@10015000 { 286 iomuxc: iomuxc@10015000 {
240 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; 287 compatible = "fsl,imx27-iomuxc";
241 reg = <0x10015000 0x100>; 288 reg = <0x10015000 0x600>;
242 interrupts = <8>; 289 #address-cells = <1>;
243 gpio-controller; 290 #size-cells = <1>;
244 #gpio-cells = <2>; 291 ranges;
245 interrupt-controller; 292
246 #interrupt-cells = <2>; 293 gpio1: gpio@10015000 {
247 }; 294 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio";
248 295 reg = <0x10015000 0x100>;
249 gpio2: gpio@10015100 { 296 interrupts = <8>;
250 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; 297 gpio-controller;
251 reg = <0x10015100 0x100>; 298 #gpio-cells = <2>;
252 interrupts = <8>; 299 interrupt-controller;
253 gpio-controller; 300 #interrupt-cells = <2>;
254 #gpio-cells = <2>; 301 };
255 interrupt-controller; 302
256 #interrupt-cells = <2>; 303 gpio2: gpio@10015100 {
257 }; 304 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio";
258 305 reg = <0x10015100 0x100>;
259 gpio3: gpio@10015200 { 306 interrupts = <8>;
260 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; 307 gpio-controller;
261 reg = <0x10015200 0x100>; 308 #gpio-cells = <2>;
262 interrupts = <8>; 309 interrupt-controller;
263 gpio-controller; 310 #interrupt-cells = <2>;
264 #gpio-cells = <2>; 311 };
265 interrupt-controller; 312
266 #interrupt-cells = <2>; 313 gpio3: gpio@10015200 {
267 }; 314 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio";
268 315 reg = <0x10015200 0x100>;
269 gpio4: gpio@10015300 { 316 interrupts = <8>;
270 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; 317 gpio-controller;
271 reg = <0x10015300 0x100>; 318 #gpio-cells = <2>;
272 interrupts = <8>; 319 interrupt-controller;
273 gpio-controller; 320 #interrupt-cells = <2>;
274 #gpio-cells = <2>; 321 };
275 interrupt-controller; 322
276 #interrupt-cells = <2>; 323 gpio4: gpio@10015300 {
277 }; 324 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio";
278 325 reg = <0x10015300 0x100>;
279 gpio5: gpio@10015400 { 326 interrupts = <8>;
280 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; 327 gpio-controller;
281 reg = <0x10015400 0x100>; 328 #gpio-cells = <2>;
282 interrupts = <8>; 329 interrupt-controller;
283 gpio-controller; 330 #interrupt-cells = <2>;
284 #gpio-cells = <2>; 331 };
285 interrupt-controller; 332
286 #interrupt-cells = <2>; 333 gpio5: gpio@10015400 {
287 }; 334 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio";
288 335 reg = <0x10015400 0x100>;
289 gpio6: gpio@10015500 { 336 interrupts = <8>;
290 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; 337 gpio-controller;
291 reg = <0x10015500 0x100>; 338 #gpio-cells = <2>;
292 interrupts = <8>; 339 interrupt-controller;
293 gpio-controller; 340 #interrupt-cells = <2>;
294 #gpio-cells = <2>; 341 };
295 interrupt-controller; 342
296 #interrupt-cells = <2>; 343 gpio6: gpio@10015500 {
344 compatible = "fsl,imx27-gpio", "fsl,imx21-gpio";
345 reg = <0x10015500 0x100>;
346 interrupts = <8>;
347 gpio-controller;
348 #gpio-cells = <2>;
349 interrupt-controller;
350 #interrupt-cells = <2>;
351 };
297 }; 352 };
298 353
299 audmux: audmux@10016000 { 354 audmux: audmux@10016000 {
@@ -404,6 +459,42 @@
404 iram = <&iram>; 459 iram = <&iram>;
405 }; 460 };
406 461
462 usbotg: usb@10024000 {
463 compatible = "fsl,imx27-usb";
464 reg = <0x10024000 0x200>;
465 interrupts = <56>;
466 clocks = <&clks 15>;
467 fsl,usbmisc = <&usbmisc 0>;
468 fsl,usbphy = <&usbphy0>;
469 status = "disabled";
470 };
471
472 usbh1: usb@10024200 {
473 compatible = "fsl,imx27-usb";
474 reg = <0x10024200 0x200>;
475 interrupts = <54>;
476 clocks = <&clks 15>;
477 fsl,usbmisc = <&usbmisc 1>;
478 status = "disabled";
479 };
480
481 usbh2: usb@10024400 {
482 compatible = "fsl,imx27-usb";
483 reg = <0x10024400 0x200>;
484 interrupts = <55>;
485 clocks = <&clks 15>;
486 fsl,usbmisc = <&usbmisc 2>;
487 fsl,usbphy = <&usbphy2>;
488 status = "disabled";
489 };
490
491 usbmisc: usbmisc@10024600 {
492 #index-cells = <1>;
493 compatible = "fsl,imx27-usbmisc";
494 reg = <0x10024600 0x200>;
495 clocks = <&clks 62>;
496 };
497
407 sahara2: sahara@10025000 { 498 sahara2: sahara@10025000 {
408 compatible = "fsl,imx27-sahara"; 499 compatible = "fsl,imx27-sahara";
409 reg = <0x10025000 0x1000>; 500 reg = <0x10025000 0x1000>;
diff --git a/arch/arm/boot/dts/imx28-apf28dev.dts b/arch/arm/boot/dts/imx28-apf28dev.dts
index e2efd8d89c4f..221cac4fb2cd 100644
--- a/arch/arm/boot/dts/imx28-apf28dev.dts
+++ b/arch/arm/boot/dts/imx28-apf28dev.dts
@@ -48,6 +48,7 @@
48 MX28_PAD_LCD_D20__GPIO_1_20 48 MX28_PAD_LCD_D20__GPIO_1_20
49 MX28_PAD_LCD_D21__GPIO_1_21 49 MX28_PAD_LCD_D21__GPIO_1_21
50 MX28_PAD_LCD_D22__GPIO_1_22 50 MX28_PAD_LCD_D22__GPIO_1_22
51 MX28_PAD_GPMI_CE1N__GPIO_0_17
51 >; 52 >;
52 fsl,drive-strength = <MXS_DRIVE_4mA>; 53 fsl,drive-strength = <MXS_DRIVE_4mA>;
53 fsl,voltage = <MXS_VOLTAGE_HIGH>; 54 fsl,voltage = <MXS_VOLTAGE_HIGH>;
@@ -66,6 +67,16 @@
66 fsl,voltage = <MXS_VOLTAGE_HIGH>; 67 fsl,voltage = <MXS_VOLTAGE_HIGH>;
67 fsl,pull-up = <MXS_PULL_DISABLE>; 68 fsl,pull-up = <MXS_PULL_DISABLE>;
68 }; 69 };
70
71 usb0_otg_apf28dev: otg-apf28dev@0 {
72 reg = <0>;
73 fsl,pinmux-ids = <
74 MX28_PAD_LCD_D23__GPIO_1_23
75 >;
76 fsl,drive-strength = <MXS_DRIVE_4mA>;
77 fsl,voltage = <MXS_VOLTAGE_HIGH>;
78 fsl,pull-up = <MXS_PULL_DISABLE>;
79 };
69 }; 80 };
70 81
71 lcdif@80030000 { 82 lcdif@80030000 {
@@ -131,6 +142,8 @@
131 142
132 ahb@80080000 { 143 ahb@80080000 {
133 usb0: usb@80080000 { 144 usb0: usb@80080000 {
145 pinctrl-names = "default";
146 pinctrl-0 = <&usb0_otg_apf28dev>;
134 vbus-supply = <&reg_usb0_vbus>; 147 vbus-supply = <&reg_usb0_vbus>;
135 status = "okay"; 148 status = "okay";
136 }; 149 };
@@ -150,13 +163,17 @@
150 163
151 regulators { 164 regulators {
152 compatible = "simple-bus"; 165 compatible = "simple-bus";
166 #address-cells = <1>;
167 #size-cells = <0>;
153 168
154 reg_usb0_vbus: usb0_vbus { 169 reg_usb0_vbus: regulator@0 {
155 compatible = "regulator-fixed"; 170 compatible = "regulator-fixed";
171 reg = <0>;
156 regulator-name = "usb0_vbus"; 172 regulator-name = "usb0_vbus";
157 regulator-min-microvolt = <5000000>; 173 regulator-min-microvolt = <5000000>;
158 regulator-max-microvolt = <5000000>; 174 regulator-max-microvolt = <5000000>;
159 gpio = <&gpio1 23 1>; 175 gpio = <&gpio1 23 1>;
176 enable-active-high;
160 }; 177 };
161 }; 178 };
162 179
@@ -177,4 +194,14 @@
177 brightness-levels = <0 4 8 16 32 64 128 255>; 194 brightness-levels = <0 4 8 16 32 64 128 255>;
178 default-brightness-level = <6>; 195 default-brightness-level = <6>;
179 }; 196 };
197
198 gpio-keys {
199 compatible = "gpio-keys";
200
201 user-button {
202 label = "User button";
203 gpios = <&gpio0 17 0>;
204 linux,code = <0x100>;
205 };
206 };
180}; 207};
diff --git a/arch/arm/boot/dts/imx28-apx4devkit.dts b/arch/arm/boot/dts/imx28-apx4devkit.dts
index 6f254ca816cb..e1ce9179db63 100644
--- a/arch/arm/boot/dts/imx28-apx4devkit.dts
+++ b/arch/arm/boot/dts/imx28-apx4devkit.dts
@@ -193,9 +193,12 @@
193 193
194 regulators { 194 regulators {
195 compatible = "simple-bus"; 195 compatible = "simple-bus";
196 #address-cells = <1>;
197 #size-cells = <0>;
196 198
197 reg_3p3v: 3p3v { 199 reg_3p3v: regulator@0 {
198 compatible = "regulator-fixed"; 200 compatible = "regulator-fixed";
201 reg = <0>;
199 regulator-name = "3P3V"; 202 regulator-name = "3P3V";
200 regulator-min-microvolt = <3300000>; 203 regulator-min-microvolt = <3300000>;
201 regulator-max-microvolt = <3300000>; 204 regulator-max-microvolt = <3300000>;
diff --git a/arch/arm/boot/dts/imx28-cfa10036.dts b/arch/arm/boot/dts/imx28-cfa10036.dts
index cabb6171a19d..ae7c3390e65a 100644
--- a/arch/arm/boot/dts/imx28-cfa10036.dts
+++ b/arch/arm/boot/dts/imx28-cfa10036.dts
@@ -100,6 +100,8 @@
100 usb0: usb@80080000 { 100 usb0: usb@80080000 {
101 pinctrl-names = "default"; 101 pinctrl-names = "default";
102 pinctrl-0 = <&usb0_otg_cfa10036>; 102 pinctrl-0 = <&usb0_otg_cfa10036>;
103 dr_mode = "peripheral";
104 phy_type = "utmi";
103 status = "okay"; 105 status = "okay";
104 }; 106 };
105 }; 107 };
diff --git a/arch/arm/boot/dts/imx28-cfa10037.dts b/arch/arm/boot/dts/imx28-cfa10037.dts
index f93e9a700e52..e5beaa58bb40 100644
--- a/arch/arm/boot/dts/imx28-cfa10037.dts
+++ b/arch/arm/boot/dts/imx28-cfa10037.dts
@@ -54,7 +54,7 @@
54 ahb@80080000 { 54 ahb@80080000 {
55 usb1: usb@80090000 { 55 usb1: usb@80090000 {
56 vbus-supply = <&reg_usb1_vbus>; 56 vbus-supply = <&reg_usb1_vbus>;
57 pinctrl-0 = <&usbphy1_pins_a>; 57 pinctrl-0 = <&usb1_pins_a>;
58 pinctrl-names = "default"; 58 pinctrl-names = "default";
59 status = "okay"; 59 status = "okay";
60 }; 60 };
@@ -72,9 +72,12 @@
72 72
73 regulators { 73 regulators {
74 compatible = "simple-bus"; 74 compatible = "simple-bus";
75 #address-cells = <1>;
76 #size-cells = <0>;
75 77
76 reg_usb1_vbus: usb1_vbus { 78 reg_usb1_vbus: regulator@0 {
77 compatible = "regulator-fixed"; 79 compatible = "regulator-fixed";
80 reg = <0>;
78 pinctrl-names = "default"; 81 pinctrl-names = "default";
79 pinctrl-0 = <&usb_pins_cfa10037>; 82 pinctrl-0 = <&usb_pins_cfa10037>;
80 regulator-name = "usb1_vbus"; 83 regulator-name = "usb1_vbus";
diff --git a/arch/arm/boot/dts/imx28-cfa10049.dts b/arch/arm/boot/dts/imx28-cfa10049.dts
index 7087b4bf6a8f..7d51459de5e8 100644
--- a/arch/arm/boot/dts/imx28-cfa10049.dts
+++ b/arch/arm/boot/dts/imx28-cfa10049.dts
@@ -229,15 +229,39 @@
229 i2c-parent = <&i2c1>; 229 i2c-parent = <&i2c1>;
230 230
231 i2c@0 { 231 i2c@0 {
232 #address-cells = <1>;
233 #size-cells = <0>;
232 reg = <0>; 234 reg = <0>;
235
236 adc0: nau7802@2a {
237 compatible = "nuvoton,nau7802";
238 reg = <0x2a>;
239 nuvoton,vldo = <3000>;
240 };
233 }; 241 };
234 242
235 i2c@1 { 243 i2c@1 {
244 #address-cells = <1>;
245 #size-cells = <0>;
236 reg = <1>; 246 reg = <1>;
247
248 adc1: nau7802@2a {
249 compatible = "nuvoton,nau7802";
250 reg = <0x2a>;
251 nuvoton,vldo = <3000>;
252 };
237 }; 253 };
238 254
239 i2c@2 { 255 i2c@2 {
256 #address-cells = <1>;
257 #size-cells = <0>;
240 reg = <2>; 258 reg = <2>;
259
260 adc2: nau7802@2a {
261 compatible = "nuvoton,nau7802";
262 reg = <0x2a>;
263 nuvoton,vldo = <3000>;
264 };
241 }; 265 };
242 266
243 i2c@3 { 267 i2c@3 {
@@ -274,7 +298,7 @@
274 ahb@80080000 { 298 ahb@80080000 {
275 usb1: usb@80090000 { 299 usb1: usb@80090000 {
276 vbus-supply = <&reg_usb1_vbus>; 300 vbus-supply = <&reg_usb1_vbus>;
277 pinctrl-0 = <&usbphy1_pins_a>; 301 pinctrl-0 = <&usb1_pins_a>;
278 pinctrl-names = "default"; 302 pinctrl-names = "default";
279 status = "okay"; 303 status = "okay";
280 }; 304 };
@@ -282,9 +306,12 @@
282 306
283 regulators { 307 regulators {
284 compatible = "simple-bus"; 308 compatible = "simple-bus";
309 #address-cells = <1>;
310 #size-cells = <0>;
285 311
286 reg_usb1_vbus: usb1_vbus { 312 reg_usb1_vbus: regulator@0 {
287 compatible = "regulator-fixed"; 313 compatible = "regulator-fixed";
314 reg = <0>;
288 pinctrl-names = "default"; 315 pinctrl-names = "default";
289 pinctrl-0 = <&usb_pins_cfa10049>; 316 pinctrl-0 = <&usb_pins_cfa10049>;
290 regulator-name = "usb1_vbus"; 317 regulator-name = "usb1_vbus";
diff --git a/arch/arm/boot/dts/imx28-cfa10057.dts b/arch/arm/boot/dts/imx28-cfa10057.dts
index 3c1312885ae0..c4e00ce4b6da 100644
--- a/arch/arm/boot/dts/imx28-cfa10057.dts
+++ b/arch/arm/boot/dts/imx28-cfa10057.dts
@@ -134,7 +134,7 @@
134 ahb@80080000 { 134 ahb@80080000 {
135 usb1: usb@80090000 { 135 usb1: usb@80090000 {
136 vbus-supply = <&reg_usb1_vbus>; 136 vbus-supply = <&reg_usb1_vbus>;
137 pinctrl-0 = <&usbphy1_pins_a>; 137 pinctrl-0 = <&usb1_pins_a>;
138 pinctrl-names = "default"; 138 pinctrl-names = "default";
139 status = "okay"; 139 status = "okay";
140 }; 140 };
@@ -142,9 +142,12 @@
142 142
143 regulators { 143 regulators {
144 compatible = "simple-bus"; 144 compatible = "simple-bus";
145 #address-cells = <1>;
146 #size-cells = <0>;
145 147
146 reg_usb1_vbus: usb1_vbus { 148 reg_usb1_vbus: regulator@0 {
147 compatible = "regulator-fixed"; 149 compatible = "regulator-fixed";
150 reg = <0>;
148 pinctrl-names = "default"; 151 pinctrl-names = "default";
149 pinctrl-0 = <&usb_pins_cfa10057>; 152 pinctrl-0 = <&usb_pins_cfa10057>;
150 regulator-name = "usb1_vbus"; 153 regulator-name = "usb1_vbus";
diff --git a/arch/arm/boot/dts/imx28-cfa10058.dts b/arch/arm/boot/dts/imx28-cfa10058.dts
index 2469d34df0ae..7c9cc783f0d1 100644
--- a/arch/arm/boot/dts/imx28-cfa10058.dts
+++ b/arch/arm/boot/dts/imx28-cfa10058.dts
@@ -101,7 +101,7 @@
101 ahb@80080000 { 101 ahb@80080000 {
102 usb1: usb@80090000 { 102 usb1: usb@80090000 {
103 vbus-supply = <&reg_usb1_vbus>; 103 vbus-supply = <&reg_usb1_vbus>;
104 pinctrl-0 = <&usbphy1_pins_a>; 104 pinctrl-0 = <&usb1_pins_a>;
105 pinctrl-names = "default"; 105 pinctrl-names = "default";
106 status = "okay"; 106 status = "okay";
107 }; 107 };
@@ -109,11 +109,14 @@
109 109
110 regulators { 110 regulators {
111 compatible = "simple-bus"; 111 compatible = "simple-bus";
112 #address-cells = <1>;
113 #size-cells = <0>;
112 114
113 reg_usb1_vbus: usb1_vbus { 115 reg_usb1_vbus: regulator@0 {
114 pinctrl-names = "default"; 116 pinctrl-names = "default";
115 pinctrl-0 = <&usb_pins_cfa10058>; 117 pinctrl-0 = <&usb_pins_cfa10058>;
116 compatible = "regulator-fixed"; 118 compatible = "regulator-fixed";
119 reg = <0>;
117 regulator-name = "usb1_vbus"; 120 regulator-name = "usb1_vbus";
118 regulator-min-microvolt = <5000000>; 121 regulator-min-microvolt = <5000000>;
119 regulator-max-microvolt = <5000000>; 122 regulator-max-microvolt = <5000000>;
diff --git a/arch/arm/boot/dts/imx28-duckbill.dts b/arch/arm/boot/dts/imx28-duckbill.dts
new file mode 100644
index 000000000000..5f326c1c1850
--- /dev/null
+++ b/arch/arm/boot/dts/imx28-duckbill.dts
@@ -0,0 +1,121 @@
1/*
2 * Copyright (C) 2013 Michael Heimpold <mhei@heimpold.de>
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx28.dtsi"
14
15/ {
16 model = "I2SE Duckbill";
17 compatible = "i2se,duckbill", "fsl,imx28";
18
19 memory {
20 reg = <0x40000000 0x08000000>;
21 };
22
23 apb@80000000 {
24 apbh@80000000 {
25 ssp0: ssp@80010000 {
26 compatible = "fsl,imx28-mmc";
27 pinctrl-names = "default";
28 pinctrl-0 = <&mmc0_8bit_pins_a
29 &mmc0_cd_cfg &mmc0_sck_cfg>;
30 bus-width = <8>;
31 vmmc-supply = <&reg_3p3v>;
32 status = "okay";
33 };
34
35 pinctrl@80018000 {
36 pinctrl-names = "default";
37 pinctrl-0 = <&hog_pins_a>;
38
39 hog_pins_a: hog@0 {
40 reg = <0>;
41 fsl,pinmux-ids = <
42 MX28_PAD_ENET0_RX_CLK__GPIO_4_13 /* PHY Reset */
43 >;
44 fsl,drive-strength = <MXS_DRIVE_4mA>;
45 fsl,voltage = <MXS_VOLTAGE_HIGH>;
46 fsl,pull-up = <MXS_PULL_DISABLE>;
47 };
48
49 led_pins_a: led_gpio@0 {
50 reg = <0>;
51 fsl,pinmux-ids = <
52 MX28_PAD_AUART1_RX__GPIO_3_4
53 MX28_PAD_AUART1_TX__GPIO_3_5
54 >;
55 fsl,drive-strength = <MXS_DRIVE_4mA>;
56 fsl,voltage = <MXS_VOLTAGE_HIGH>;
57 fsl,pull-up = <MXS_PULL_DISABLE>;
58 };
59 };
60 };
61
62 apbx@80040000 {
63 duart: serial@80074000 {
64 pinctrl-names = "default";
65 pinctrl-0 = <&duart_pins_a>;
66 status = "okay";
67 };
68
69 usbphy0: usbphy@8007c000 {
70 status = "okay";
71 };
72 };
73 };
74
75 ahb@80080000 {
76 usb0: usb@80080000 {
77 status = "okay";
78 };
79
80 mac0: ethernet@800f0000 {
81 phy-mode = "rmii";
82 pinctrl-names = "default";
83 pinctrl-0 = <&mac0_pins_a>;
84 phy-supply = <&reg_3p3v>;
85 phy-reset-gpios = <&gpio4 13 0>;
86 phy-reset-duration = <100>;
87 status = "okay";
88 };
89 };
90
91 regulators {
92 compatible = "simple-bus";
93 #address-cells = <1>;
94 #size-cells = <0>;
95
96 reg_3p3v: regulator@0 {
97 compatible = "regulator-fixed";
98 reg = <0>;
99 regulator-name = "3P3V";
100 regulator-min-microvolt = <3300000>;
101 regulator-max-microvolt = <3300000>;
102 regulator-always-on;
103 };
104 };
105
106 leds {
107 compatible = "gpio-leds";
108 pinctrl-names = "default";
109 pinctrl-0 = <&led_pins_a>;
110
111 status {
112 label = "duckbill:green:status";
113 gpios = <&gpio3 5 0>;
114 };
115
116 failure {
117 label = "duckbill:red:status";
118 gpios = <&gpio3 4 0>;
119 };
120 };
121};
diff --git a/arch/arm/boot/dts/imx28-eukrea-mbmx283lc.dts b/arch/arm/boot/dts/imx28-eukrea-mbmx283lc.dts
new file mode 100644
index 000000000000..7c1572c5a4fb
--- /dev/null
+++ b/arch/arm/boot/dts/imx28-eukrea-mbmx283lc.dts
@@ -0,0 +1,71 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <eric@eukrea.com>
3 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15/*
16 * Module contains : i.MX282 + 64MB DDR2 + NAND + Ethernet PHY + RTC
17 */
18
19/dts-v1/;
20#include "imx28-eukrea-mbmx28lc.dtsi"
21
22/ {
23 model = "Eukrea Electromatique MBMX283LC";
24 compatible = "eukrea,mbmx283lc", "eukrea,mbmx28lc", "fsl,imx28";
25
26 memory {
27 reg = <0x40000000 0x04000000>;
28 };
29};
30
31&gpmi {
32 pinctrl-names = "default";
33 pinctrl-0 = <&gpmi_pins_a>;
34 status = "okay";
35};
36
37&i2c0 {
38 pinctrl-names = "default";
39 pinctrl-0 = <&i2c0_pins_a>;
40 status = "okay";
41
42 pcf8563: rtc@51 {
43 compatible = "nxp,pcf8563";
44 reg = <0x51>;
45 };
46};
47
48
49&mac0 {
50 phy-mode = "rmii";
51 pinctrl-names = "default";
52 pinctrl-0 = <&mac0_pins_a>;
53 phy-reset-gpios = <&gpio4 13 GPIO_ACTIVE_LOW>;
54 status = "okay";
55};
56
57&pinctrl{
58 pinctrl-names = "default";
59 pinctrl-0 = <&hog_pins_cpuimx283>;
60
61 hog_pins_cpuimx283: hog-cpuimx283@0 {
62 reg = <0>;
63 fsl,pinmux-ids = <
64 MX28_PAD_ENET0_RX_CLK__GPIO_4_13
65 MX28_PAD_ENET0_TX_CLK__GPIO_4_5
66 >;
67 fsl,drive-strength = <MXS_DRIVE_4mA>;
68 fsl,voltage = <MXS_VOLTAGE_HIGH>;
69 fsl,pull-up = <MXS_PULL_ENABLE>;
70 };
71};
diff --git a/arch/arm/boot/dts/imx28-eukrea-mbmx287lc.dts b/arch/arm/boot/dts/imx28-eukrea-mbmx287lc.dts
new file mode 100644
index 000000000000..e773144e1e03
--- /dev/null
+++ b/arch/arm/boot/dts/imx28-eukrea-mbmx287lc.dts
@@ -0,0 +1,50 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <eric@eukrea.com>
3 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15/*
16 * Module contains : i.MX287 + 128MB DDR2 + NAND + 2 x Ethernet PHY + RTC
17 */
18
19#include "imx28-eukrea-mbmx283lc.dts"
20
21/ {
22 model = "Eukrea Electromatique MBMX287LC";
23 compatible = "eukrea,mbmx287lc", "eukrea,mbmx283lc", "eukrea,mbmx28lc", "fsl,imx28";
24
25 memory {
26 reg = <0x40000000 0x08000000>;
27 };
28};
29
30&mac1 {
31 phy-mode = "rmii";
32 pinctrl-names = "default";
33 pinctrl-0 = <&mac1_pins_a>;
34 phy-reset-gpios = <&gpio3 27 GPIO_ACTIVE_HIGH>;
35 status = "okay";
36};
37
38&pinctrl {
39 pinctrl-names = "default";
40 pinctrl-0 = <&hog_pins_cpuimx283 &hog_pins_cpuimx287>;
41 hog_pins_cpuimx287: hog-cpuimx287@0 {
42 reg = <0>;
43 fsl,pinmux-ids = <
44 MX28_PAD_SPDIF__GPIO_3_27
45 >;
46 fsl,drive-strength = <MXS_DRIVE_4mA>;
47 fsl,voltage = <MXS_VOLTAGE_HIGH>;
48 fsl,pull-up = <MXS_PULL_ENABLE>;
49 };
50};
diff --git a/arch/arm/boot/dts/imx28-eukrea-mbmx28lc.dtsi b/arch/arm/boot/dts/imx28-eukrea-mbmx28lc.dtsi
new file mode 100644
index 000000000000..927b391d2058
--- /dev/null
+++ b/arch/arm/boot/dts/imx28-eukrea-mbmx28lc.dtsi
@@ -0,0 +1,326 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <eric@eukrea.com>
3 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#include <dt-bindings/input/input.h>
16#include <dt-bindings/gpio/gpio.h>
17#include "imx28.dtsi"
18
19/ {
20 model = "Eukrea Electromatique MBMX28LC";
21 compatible = "eukrea,mbmx28lc", "fsl,imx28";
22
23 backlight {
24 compatible = "pwm-backlight";
25 pwms = <&pwm 4 1000000>;
26 brightness-levels = <0 25 50 75 100 125 150 175 200 225 255>;
27 default-brightness-level = <10>;
28 };
29
30 button-sw3 {
31 compatible = "gpio-keys";
32 pinctrl-names = "default";
33 pinctrl-0 = <&gpio_button_sw3_pins_mbmx28lc>;
34
35 sw3 {
36 label = "SW3";
37 gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
38 linux,code = <BTN_MISC>;
39 gpio-key,wakeup;
40 };
41 };
42
43 button-sw4 {
44 compatible = "gpio-keys";
45 pinctrl-names = "default";
46 pinctrl-0 = <&gpio_button_sw4_pins_mbmx28lc>;
47
48 sw4 {
49 label = "SW4";
50 gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
51 linux,code = <BTN_MISC>;
52 gpio-key,wakeup;
53 };
54 };
55
56 led-d6 {
57 compatible = "gpio-leds";
58 pinctrl-names = "default";
59 pinctrl-0 = <&led_d6_pins_mbmx28lc>;
60
61 led1 {
62 label = "d6";
63 gpios = <&gpio1 23 GPIO_ACTIVE_LOW>;
64 linux,default-trigger = "heartbeat";
65 };
66 };
67
68 led-d7 {
69 compatible = "gpio-leds";
70 pinctrl-names = "default";
71 pinctrl-0 = <&led_d7_pins_mbmx28lc>;
72
73 led1 {
74 label = "d7";
75 gpios = <&gpio1 22 GPIO_ACTIVE_LOW>;
76 linux,default-trigger = "default-on";
77 };
78 };
79
80 regulators {
81 compatible = "simple-bus";
82 #address-cells = <1>;
83 #size-cells = <0>;
84
85 reg_3p3v: regulator@0 {
86 compatible = "regulator-fixed";
87 regulator-name = "3P3V";
88 regulator-min-microvolt = <3300000>;
89 regulator-max-microvolt = <3300000>;
90 regulator-always-on;
91 };
92
93 reg_lcd_3v3: regulator@1 {
94 compatible = "regulator-fixed";
95 pinctrl-names = "default";
96 pinctrl-0 = <&reg_lcd_3v3_pins_mbmx28lc>;
97 regulator-name = "lcd-3v3";
98 regulator-min-microvolt = <3300000>;
99 regulator-max-microvolt = <3300000>;
100 gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>;
101 enable-active-high;
102 };
103
104 reg_usb0_vbus: regulator@2 {
105 compatible = "regulator-fixed";
106 pinctrl-names = "default";
107 pinctrl-0 = <&reg_usb0_vbus_pins_mbmx28lc>;
108 regulator-name = "usb0_vbus";
109 regulator-min-microvolt = <5000000>;
110 regulator-max-microvolt = <5000000>;
111 gpio = <&gpio1 18 GPIO_ACTIVE_HIGH>;
112 enable-active-high;
113 };
114
115 reg_usb1_vbus: regulator@3 {
116 compatible = "regulator-fixed";
117 pinctrl-names = "default";
118 pinctrl-0 = <&reg_usb1_vbus_pins_mbmx28lc>;
119 regulator-name = "usb1_vbus";
120 regulator-min-microvolt = <5000000>;
121 regulator-max-microvolt = <5000000>;
122 gpio = <&gpio1 19 GPIO_ACTIVE_HIGH>;
123 enable-active-high;
124 };
125 };
126
127 sound {
128 compatible = "fsl,imx28-mbmx28lc-sgtl5000",
129 "fsl,mxs-audio-sgtl5000";
130 model = "imx28-mbmx28lc-sgtl5000";
131 saif-controllers = <&saif0 &saif1>;
132 audio-codec = <&sgtl5000>;
133 };
134};
135
136&duart {
137 pinctrl-names = "default";
138 pinctrl-0 = <&duart_4pins_a>;
139 status = "okay";
140};
141
142&i2c0 {
143 pinctrl-names = "default";
144 pinctrl-0 = <&i2c0_pins_a>;
145 status = "okay";
146
147 sgtl5000: codec@0a {
148 compatible = "fsl,sgtl5000";
149 reg = <0x0a>;
150 VDDA-supply = <&reg_3p3v>;
151 VDDIO-supply = <&reg_3p3v>;
152 clocks = <&saif0>;
153 };
154};
155
156&lcdif {
157 pinctrl-names = "default";
158 pinctrl-0 = <&lcdif_18bit_pins_a &lcdif_pins_mbmx28lc>;
159 lcd-supply = <&reg_lcd_3v3>;
160 display = <&display0>;
161 status = "okay";
162
163 display0: display0 {
164 model = "43WVF1G-0";
165 bits-per-pixel = <16>;
166 bus-width = <18>;
167
168 display-timings {
169 native-mode = <&timing0>;
170 timing0: timing0 {
171 clock-frequency = <9072000>;
172 hactive = <480>;
173 vactive = <272>;
174 hback-porch = <10>;
175 hfront-porch = <5>;
176 vback-porch = <8>;
177 vfront-porch = <8>;
178 hsync-len = <40>;
179 vsync-len = <10>;
180 hsync-active = <0>;
181 vsync-active = <0>;
182 de-active = <1>;
183 pixelclk-active = <1>;
184 };
185 };
186 };
187};
188
189&lradc {
190 fsl,lradc-touchscreen-wires = <4>;
191 status = "okay";
192};
193
194&pinctrl {
195 gpio_button_sw3_pins_mbmx28lc: gpio-button-sw3-mbmx28lc@0 {
196 reg = <0>;
197 fsl,pinmux-ids = <
198 MX28_PAD_LCD_D21__GPIO_1_21
199 >;
200 fsl,drive-strength = <MXS_DRIVE_4mA>;
201 fsl,voltage = <MXS_VOLTAGE_HIGH>;
202 fsl,pull-up = <MXS_PULL_DISABLE>;
203 };
204
205 gpio_button_sw4_pins_mbmx28lc: gpio-button-sw4-mbmx28lc@0 {
206 reg = <0>;
207 fsl,pinmux-ids = <
208 MX28_PAD_LCD_D20__GPIO_1_20
209 >;
210 fsl,drive-strength = <MXS_DRIVE_4mA>;
211 fsl,voltage = <MXS_VOLTAGE_HIGH>;
212 fsl,pull-up = <MXS_PULL_DISABLE>;
213 };
214
215 lcdif_pins_mbmx28lc: lcdif-mbmx28lc@0 {
216 reg = <0>;
217 fsl,pinmux-ids = <
218 MX28_PAD_LCD_VSYNC__LCD_VSYNC
219 MX28_PAD_LCD_HSYNC__LCD_HSYNC
220 MX28_PAD_LCD_DOTCLK__LCD_DOTCLK
221 MX28_PAD_LCD_ENABLE__LCD_ENABLE
222 >;
223 fsl,drive-strength = <MXS_DRIVE_4mA>;
224 fsl,voltage = <MXS_VOLTAGE_HIGH>;
225 fsl,pull-up = <MXS_PULL_DISABLE>;
226 };
227
228 led_d6_pins_mbmx28lc: led-d6-mbmx28lc@0 {
229 reg = <0>;
230 fsl,pinmux-ids = <
231 MX28_PAD_LCD_D23__GPIO_1_23
232 >;
233 fsl,drive-strength = <MXS_DRIVE_4mA>;
234 fsl,voltage = <MXS_VOLTAGE_HIGH>;
235 fsl,pull-up = <MXS_PULL_DISABLE>;
236 };
237
238 led_d7_pins_mbmx28lc: led-d7-mbmx28lc@0 {
239 reg = <0>;
240 fsl,pinmux-ids = <
241 MX28_PAD_LCD_D22__GPIO_1_22
242 >;
243 fsl,drive-strength = <MXS_DRIVE_4mA>;
244 fsl,voltage = <MXS_VOLTAGE_HIGH>;
245 fsl,pull-up = <MXS_PULL_DISABLE>;
246 };
247
248 reg_lcd_3v3_pins_mbmx28lc: lcd-3v3-mbmx28lc@0 {
249 reg = <0>;
250 fsl,pinmux-ids = <
251 MX28_PAD_LCD_RESET__GPIO_3_30
252 >;
253 fsl,drive-strength = <MXS_DRIVE_4mA>;
254 fsl,voltage = <MXS_VOLTAGE_HIGH>;
255 fsl,pull-up = <MXS_PULL_DISABLE>;
256 };
257
258 reg_usb0_vbus_pins_mbmx28lc: reg-usb0-vbus-mbmx28lc@0 {
259 reg = <0>;
260 fsl,pinmux-ids = <
261 MX28_PAD_LCD_D18__GPIO_1_18
262 >;
263 fsl,drive-strength = <MXS_DRIVE_4mA>;
264 fsl,voltage = <MXS_VOLTAGE_HIGH>;
265 fsl,pull-up = <MXS_PULL_DISABLE>;
266 };
267
268 reg_usb1_vbus_pins_mbmx28lc: reg-usb1-vbus-mbmx28lc@0 {
269 reg = <0>;
270 fsl,pinmux-ids = <
271 MX28_PAD_LCD_D19__GPIO_1_19
272 >;
273 fsl,drive-strength = <MXS_DRIVE_4mA>;
274 fsl,voltage = <MXS_VOLTAGE_HIGH>;
275 fsl,pull-up = <MXS_PULL_DISABLE>;
276 };
277};
278
279&pwm {
280 pinctrl-names = "default";
281 pinctrl-0 = <&pwm4_pins_a>;
282 status = "okay";
283};
284
285&saif0 {
286 pinctrl-names = "default";
287 pinctrl-0 = <&saif0_pins_a>;
288 status = "okay";
289};
290
291&saif1 {
292 pinctrl-names = "default";
293 pinctrl-0 = <&saif1_pins_a>;
294 fsl,saif-master = <&saif0>;
295 status = "okay";
296};
297
298&ssp0 {
299 compatible = "fsl,imx28-mmc";
300 pinctrl-names = "default";
301 pinctrl-0 = <&mmc0_4bit_pins_a &mmc0_cd_cfg &mmc0_sck_cfg>;
302 bus-width = <4>;
303 cd-inverted;
304 status = "okay";
305};
306
307&usb0 {
308 disable-over-current;
309 vbus-supply = <&reg_usb0_vbus>;
310 status = "okay";
311 pinctrl-names = "default";
312 pinctrl-0 = <&usb0_id_pins_b>;
313};
314
315&usb1 {
316 vbus-supply = <&reg_usb1_vbus>;
317 status = "okay";
318};
319
320&usbphy0 {
321 status = "okay";
322};
323
324&usbphy1 {
325 status = "okay";
326};
diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts
index 4267c2b05d60..e4cc44c98585 100644
--- a/arch/arm/boot/dts/imx28-evk.dts
+++ b/arch/arm/boot/dts/imx28-evk.dts
@@ -193,6 +193,7 @@
193 i2c0: i2c@80058000 { 193 i2c0: i2c@80058000 {
194 pinctrl-names = "default"; 194 pinctrl-names = "default";
195 pinctrl-0 = <&i2c0_pins_a>; 195 pinctrl-0 = <&i2c0_pins_a>;
196 clock-frequency = <400000>;
196 status = "okay"; 197 status = "okay";
197 198
198 sgtl5000: codec@0a { 199 sgtl5000: codec@0a {
@@ -278,33 +279,39 @@
278 279
279 regulators { 280 regulators {
280 compatible = "simple-bus"; 281 compatible = "simple-bus";
282 #address-cells = <1>;
283 #size-cells = <0>;
281 284
282 reg_3p3v: 3p3v { 285 reg_3p3v: regulator@0 {
283 compatible = "regulator-fixed"; 286 compatible = "regulator-fixed";
287 reg = <0>;
284 regulator-name = "3P3V"; 288 regulator-name = "3P3V";
285 regulator-min-microvolt = <3300000>; 289 regulator-min-microvolt = <3300000>;
286 regulator-max-microvolt = <3300000>; 290 regulator-max-microvolt = <3300000>;
287 regulator-always-on; 291 regulator-always-on;
288 }; 292 };
289 293
290 reg_vddio_sd0: vddio-sd0 { 294 reg_vddio_sd0: regulator@1 {
291 compatible = "regulator-fixed"; 295 compatible = "regulator-fixed";
296 reg = <1>;
292 regulator-name = "vddio-sd0"; 297 regulator-name = "vddio-sd0";
293 regulator-min-microvolt = <3300000>; 298 regulator-min-microvolt = <3300000>;
294 regulator-max-microvolt = <3300000>; 299 regulator-max-microvolt = <3300000>;
295 gpio = <&gpio3 28 0>; 300 gpio = <&gpio3 28 0>;
296 }; 301 };
297 302
298 reg_fec_3v3: fec-3v3 { 303 reg_fec_3v3: regulator@2 {
299 compatible = "regulator-fixed"; 304 compatible = "regulator-fixed";
305 reg = <2>;
300 regulator-name = "fec-3v3"; 306 regulator-name = "fec-3v3";
301 regulator-min-microvolt = <3300000>; 307 regulator-min-microvolt = <3300000>;
302 regulator-max-microvolt = <3300000>; 308 regulator-max-microvolt = <3300000>;
303 gpio = <&gpio2 15 0>; 309 gpio = <&gpio2 15 0>;
304 }; 310 };
305 311
306 reg_usb0_vbus: usb0_vbus { 312 reg_usb0_vbus: regulator@3 {
307 compatible = "regulator-fixed"; 313 compatible = "regulator-fixed";
314 reg = <3>;
308 regulator-name = "usb0_vbus"; 315 regulator-name = "usb0_vbus";
309 regulator-min-microvolt = <5000000>; 316 regulator-min-microvolt = <5000000>;
310 regulator-max-microvolt = <5000000>; 317 regulator-max-microvolt = <5000000>;
@@ -312,8 +319,9 @@
312 enable-active-high; 319 enable-active-high;
313 }; 320 };
314 321
315 reg_usb1_vbus: usb1_vbus { 322 reg_usb1_vbus: regulator@4 {
316 compatible = "regulator-fixed"; 323 compatible = "regulator-fixed";
324 reg = <4>;
317 regulator-name = "usb1_vbus"; 325 regulator-name = "usb1_vbus";
318 regulator-min-microvolt = <5000000>; 326 regulator-min-microvolt = <5000000>;
319 regulator-max-microvolt = <5000000>; 327 regulator-max-microvolt = <5000000>;
@@ -321,8 +329,9 @@
321 enable-active-high; 329 enable-active-high;
322 }; 330 };
323 331
324 reg_lcd_3v3: lcd-3v3 { 332 reg_lcd_3v3: regulator@5 {
325 compatible = "regulator-fixed"; 333 compatible = "regulator-fixed";
334 reg = <5>;
326 regulator-name = "lcd-3v3"; 335 regulator-name = "lcd-3v3";
327 regulator-min-microvolt = <3300000>; 336 regulator-min-microvolt = <3300000>;
328 regulator-max-microvolt = <3300000>; 337 regulator-max-microvolt = <3300000>;
@@ -330,8 +339,9 @@
330 enable-active-high; 339 enable-active-high;
331 }; 340 };
332 341
333 reg_can_3v3: can-3v3 { 342 reg_can_3v3: regulator@6 {
334 compatible = "regulator-fixed"; 343 compatible = "regulator-fixed";
344 reg = <6>;
335 regulator-name = "can-3v3"; 345 regulator-name = "can-3v3";
336 regulator-min-microvolt = <3300000>; 346 regulator-min-microvolt = <3300000>;
337 regulator-max-microvolt = <3300000>; 347 regulator-max-microvolt = <3300000>;
diff --git a/arch/arm/boot/dts/imx28-m28cu3.dts b/arch/arm/boot/dts/imx28-m28cu3.dts
index d3958da60bd7..9348ce59dda4 100644
--- a/arch/arm/boot/dts/imx28-m28cu3.dts
+++ b/arch/arm/boot/dts/imx28-m28cu3.dts
@@ -116,7 +116,6 @@
116 pinctrl-0 = <&lcdif_24bit_pins_a 116 pinctrl-0 = <&lcdif_24bit_pins_a
117 &lcdif_pins_m28>; 117 &lcdif_pins_m28>;
118 display = <&display>; 118 display = <&display>;
119 reset-active-high;
120 status = "okay"; 119 status = "okay";
121 120
122 display: display0 { 121 display: display0 {
@@ -180,7 +179,7 @@
180 usb1: usb@80090000 { 179 usb1: usb@80090000 {
181 vbus-supply = <&reg_usb1_vbus>; 180 vbus-supply = <&reg_usb1_vbus>;
182 pinctrl-names = "default"; 181 pinctrl-names = "default";
183 pinctrl-0 = <&usbphy1_pins_a>; 182 pinctrl-0 = <&usb1_pins_a>;
184 disable-over-current; 183 disable-over-current;
185 status = "okay"; 184 status = "okay";
186 }; 185 };
@@ -229,33 +228,39 @@
229 228
230 regulators { 229 regulators {
231 compatible = "simple-bus"; 230 compatible = "simple-bus";
231 #address-cells = <1>;
232 #size-cells = <0>;
232 233
233 reg_3p3v: 3p3v { 234 reg_3p3v: regulator@0 {
234 compatible = "regulator-fixed"; 235 compatible = "regulator-fixed";
236 reg = <0>;
235 regulator-name = "3P3V"; 237 regulator-name = "3P3V";
236 regulator-min-microvolt = <3300000>; 238 regulator-min-microvolt = <3300000>;
237 regulator-max-microvolt = <3300000>; 239 regulator-max-microvolt = <3300000>;
238 regulator-always-on; 240 regulator-always-on;
239 }; 241 };
240 242
241 reg_vddio_sd0: vddio-sd0 { 243 reg_vddio_sd0: regulator@1 {
242 compatible = "regulator-fixed"; 244 compatible = "regulator-fixed";
245 reg = <1>;
243 regulator-name = "vddio-sd0"; 246 regulator-name = "vddio-sd0";
244 regulator-min-microvolt = <3300000>; 247 regulator-min-microvolt = <3300000>;
245 regulator-max-microvolt = <3300000>; 248 regulator-max-microvolt = <3300000>;
246 gpio = <&gpio3 29 0>; 249 gpio = <&gpio3 29 0>;
247 }; 250 };
248 251
249 reg_vddio_sd1: vddio-sd1 { 252 reg_vddio_sd1: regulator@2 {
250 compatible = "regulator-fixed"; 253 compatible = "regulator-fixed";
254 reg = <2>;
251 regulator-name = "vddio-sd1"; 255 regulator-name = "vddio-sd1";
252 regulator-min-microvolt = <3300000>; 256 regulator-min-microvolt = <3300000>;
253 regulator-max-microvolt = <3300000>; 257 regulator-max-microvolt = <3300000>;
254 gpio = <&gpio2 19 0>; 258 gpio = <&gpio2 19 0>;
255 }; 259 };
256 260
257 reg_usb1_vbus: usb1_vbus { 261 reg_usb1_vbus: regulator@3 {
258 compatible = "regulator-fixed"; 262 compatible = "regulator-fixed";
263 reg = <3>;
259 regulator-name = "usb1_vbus"; 264 regulator-name = "usb1_vbus";
260 regulator-min-microvolt = <5000000>; 265 regulator-min-microvolt = <5000000>;
261 regulator-max-microvolt = <5000000>; 266 regulator-max-microvolt = <5000000>;
diff --git a/arch/arm/boot/dts/imx28-m28evk.dts b/arch/arm/boot/dts/imx28-m28evk.dts
index 8e2477fbe1d7..f0ad7b9b9d9a 100644
--- a/arch/arm/boot/dts/imx28-m28evk.dts
+++ b/arch/arm/boot/dts/imx28-m28evk.dts
@@ -194,7 +194,7 @@
194 }; 194 };
195 195
196 rtc: rtc@68 { 196 rtc: rtc@68 {
197 compatible = "stm,mt41t62"; 197 compatible = "stm,m41t62";
198 reg = <0x68>; 198 reg = <0x68>;
199 }; 199 };
200 }; 200 };
@@ -248,14 +248,14 @@
248 usb0: usb@80080000 { 248 usb0: usb@80080000 {
249 vbus-supply = <&reg_usb0_vbus>; 249 vbus-supply = <&reg_usb0_vbus>;
250 pinctrl-names = "default"; 250 pinctrl-names = "default";
251 pinctrl-0 = <&usbphy0_pins_a>; 251 pinctrl-0 = <&usb0_pins_a>;
252 status = "okay"; 252 status = "okay";
253 }; 253 };
254 254
255 usb1: usb@80090000 { 255 usb1: usb@80090000 {
256 vbus-supply = <&reg_usb1_vbus>; 256 vbus-supply = <&reg_usb1_vbus>;
257 pinctrl-names = "default"; 257 pinctrl-names = "default";
258 pinctrl-0 = <&usbphy1_pins_a>; 258 pinctrl-0 = <&usb1_pins_a>;
259 status = "okay"; 259 status = "okay";
260 }; 260 };
261 261
@@ -285,33 +285,39 @@
285 285
286 regulators { 286 regulators {
287 compatible = "simple-bus"; 287 compatible = "simple-bus";
288 #address-cells = <1>;
289 #size-cells = <0>;
288 290
289 reg_3p3v: 3p3v { 291 reg_3p3v: regulator@0 {
290 compatible = "regulator-fixed"; 292 compatible = "regulator-fixed";
293 reg = <0>;
291 regulator-name = "3P3V"; 294 regulator-name = "3P3V";
292 regulator-min-microvolt = <3300000>; 295 regulator-min-microvolt = <3300000>;
293 regulator-max-microvolt = <3300000>; 296 regulator-max-microvolt = <3300000>;
294 regulator-always-on; 297 regulator-always-on;
295 }; 298 };
296 299
297 reg_vddio_sd0: vddio-sd0 { 300 reg_vddio_sd0: regulator@1 {
298 compatible = "regulator-fixed"; 301 compatible = "regulator-fixed";
302 reg = <1>;
299 regulator-name = "vddio-sd0"; 303 regulator-name = "vddio-sd0";
300 regulator-min-microvolt = <3300000>; 304 regulator-min-microvolt = <3300000>;
301 regulator-max-microvolt = <3300000>; 305 regulator-max-microvolt = <3300000>;
302 gpio = <&gpio3 28 0>; 306 gpio = <&gpio3 28 0>;
303 }; 307 };
304 308
305 reg_usb0_vbus: usb0_vbus { 309 reg_usb0_vbus: regulator@2 {
306 compatible = "regulator-fixed"; 310 compatible = "regulator-fixed";
311 reg = <2>;
307 regulator-name = "usb0_vbus"; 312 regulator-name = "usb0_vbus";
308 regulator-min-microvolt = <5000000>; 313 regulator-min-microvolt = <5000000>;
309 regulator-max-microvolt = <5000000>; 314 regulator-max-microvolt = <5000000>;
310 gpio = <&gpio3 12 0>; 315 gpio = <&gpio3 12 0>;
311 }; 316 };
312 317
313 reg_usb1_vbus: usb1_vbus { 318 reg_usb1_vbus: regulator@3 {
314 compatible = "regulator-fixed"; 319 compatible = "regulator-fixed";
320 reg = <3>;
315 regulator-name = "usb1_vbus"; 321 regulator-name = "usb1_vbus";
316 regulator-min-microvolt = <5000000>; 322 regulator-min-microvolt = <5000000>;
317 regulator-max-microvolt = <5000000>; 323 regulator-max-microvolt = <5000000>;
diff --git a/arch/arm/boot/dts/imx28-sps1.dts b/arch/arm/boot/dts/imx28-sps1.dts
index 4870f07bf56a..0ce3cb8e7914 100644
--- a/arch/arm/boot/dts/imx28-sps1.dts
+++ b/arch/arm/boot/dts/imx28-sps1.dts
@@ -106,7 +106,7 @@
106 usb0: usb@80080000 { 106 usb0: usb@80080000 {
107 vbus-supply = <&reg_usb0_vbus>; 107 vbus-supply = <&reg_usb0_vbus>;
108 pinctrl-names = "default"; 108 pinctrl-names = "default";
109 pinctrl-0 = <&usbphy0_pins_b>; 109 pinctrl-0 = <&usb0_pins_b>;
110 status = "okay"; 110 status = "okay";
111 }; 111 };
112 112
@@ -127,9 +127,12 @@
127 127
128 regulators { 128 regulators {
129 compatible = "simple-bus"; 129 compatible = "simple-bus";
130 #address-cells = <1>;
131 #size-cells = <0>;
130 132
131 reg_usb0_vbus: usb0_vbus { 133 reg_usb0_vbus: regulator@0 {
132 compatible = "regulator-fixed"; 134 compatible = "regulator-fixed";
135 reg = <0>;
133 regulator-name = "usb0_vbus"; 136 regulator-name = "usb0_vbus";
134 regulator-min-microvolt = <5000000>; 137 regulator-min-microvolt = <5000000>;
135 regulator-max-microvolt = <5000000>; 138 regulator-max-microvolt = <5000000>;
diff --git a/arch/arm/boot/dts/imx28-tx28.dts b/arch/arm/boot/dts/imx28-tx28.dts
index be5a0550d58c..e14bd86f3e99 100644
--- a/arch/arm/boot/dts/imx28-tx28.dts
+++ b/arch/arm/boot/dts/imx28-tx28.dts
@@ -43,9 +43,12 @@
43 43
44 regulators { 44 regulators {
45 compatible = "simple-bus"; 45 compatible = "simple-bus";
46 #address-cells = <1>;
47 #size-cells = <0>;
46 48
47 reg_usb0_vbus: usb0_vbus { 49 reg_usb0_vbus: regulator@0 {
48 compatible = "regulator-fixed"; 50 compatible = "regulator-fixed";
51 reg = <0>;
49 regulator-name = "usb0_vbus"; 52 regulator-name = "usb0_vbus";
50 regulator-min-microvolt = <5000000>; 53 regulator-min-microvolt = <5000000>;
51 regulator-max-microvolt = <5000000>; 54 regulator-max-microvolt = <5000000>;
@@ -53,8 +56,9 @@
53 enable-active-high; 56 enable-active-high;
54 }; 57 };
55 58
56 reg_usb1_vbus: usb1_vbus { 59 reg_usb1_vbus: regulator@1 {
57 compatible = "regulator-fixed"; 60 compatible = "regulator-fixed";
61 reg = <1>;
58 regulator-name = "usb1_vbus"; 62 regulator-name = "usb1_vbus";
59 regulator-min-microvolt = <5000000>; 63 regulator-min-microvolt = <5000000>;
60 regulator-max-microvolt = <5000000>; 64 regulator-max-microvolt = <5000000>;
@@ -62,35 +66,38 @@
62 enable-active-high; 66 enable-active-high;
63 }; 67 };
64 68
65 reg_2p5v: 2p5v { 69 reg_2p5v: regulator@2 {
66 compatible = "regulator-fixed"; 70 compatible = "regulator-fixed";
71 reg = <2>;
67 regulator-name = "2P5V"; 72 regulator-name = "2P5V";
68 regulator-min-microvolt = <2500000>; 73 regulator-min-microvolt = <2500000>;
69 regulator-max-microvolt = <2500000>; 74 regulator-max-microvolt = <2500000>;
70 regulator-always-on; 75 regulator-always-on;
71 }; 76 };
72 77
73 reg_3p3v: 3p3v { 78 reg_3p3v: regulator@3 {
74 compatible = "regulator-fixed"; 79 compatible = "regulator-fixed";
80 reg = <3>;
75 regulator-name = "3P3V"; 81 regulator-name = "3P3V";
76 regulator-min-microvolt = <3300000>; 82 regulator-min-microvolt = <3300000>;
77 regulator-max-microvolt = <3300000>; 83 regulator-max-microvolt = <3300000>;
78 regulator-always-on; 84 regulator-always-on;
79 }; 85 };
80 86
81 reg_can_xcvr: can-xcvr { 87 reg_can_xcvr: regulator@4 {
82 compatible = "regulator-fixed"; 88 compatible = "regulator-fixed";
89 reg = <4>;
83 regulator-name = "CAN XCVR"; 90 regulator-name = "CAN XCVR";
84 regulator-min-microvolt = <3300000>; 91 regulator-min-microvolt = <3300000>;
85 regulator-max-microvolt = <3300000>; 92 regulator-max-microvolt = <3300000>;
86 gpio = <&gpio1 0 0>; 93 gpio = <&gpio1 0 0>;
87 enable-active-low;
88 pinctrl-names = "default"; 94 pinctrl-names = "default";
89 pinctrl-0 = <&tx28_flexcan_xcvr_pins>; 95 pinctrl-0 = <&tx28_flexcan_xcvr_pins>;
90 }; 96 };
91 97
92 reg_lcd: lcd-power { 98 reg_lcd: regulator@5 {
93 compatible = "regulator-fixed"; 99 compatible = "regulator-fixed";
100 reg = <5>;
94 regulator-name = "LCD POWER"; 101 regulator-name = "LCD POWER";
95 regulator-min-microvolt = <3300000>; 102 regulator-min-microvolt = <3300000>;
96 regulator-max-microvolt = <3300000>; 103 regulator-max-microvolt = <3300000>;
@@ -98,8 +105,9 @@
98 enable-active-high; 105 enable-active-high;
99 }; 106 };
100 107
101 reg_lcd_reset: lcd-reset { 108 reg_lcd_reset: regulator@6 {
102 compatible = "regulator-fixed"; 109 compatible = "regulator-fixed";
110 reg = <6>;
103 regulator-name = "LCD RESET"; 111 regulator-name = "LCD RESET";
104 regulator-min-microvolt = <3300000>; 112 regulator-min-microvolt = <3300000>;
105 regulator-max-microvolt = <3300000>; 113 regulator-max-microvolt = <3300000>;
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
index f8e9b20f6982..90a579532b8b 100644
--- a/arch/arm/boot/dts/imx28.dtsi
+++ b/arch/arm/boot/dts/imx28.dtsi
@@ -32,6 +32,8 @@
32 serial4 = &auart4; 32 serial4 = &auart4;
33 spi0 = &ssp1; 33 spi0 = &ssp1;
34 spi1 = &ssp2; 34 spi1 = &ssp2;
35 usbphy0 = &usbphy0;
36 usbphy1 = &usbphy1;
35 }; 37 };
36 38
37 cpus { 39 cpus {
@@ -343,6 +345,19 @@
343 fsl,pull-up = <MXS_PULL_DISABLE>; 345 fsl,pull-up = <MXS_PULL_DISABLE>;
344 }; 346 };
345 347
348 auart2_pins_a: auart2-pins@0 {
349 reg = <0>;
350 fsl,pinmux-ids = <
351 MX28_PAD_AUART2_RX__AUART2_RX
352 MX28_PAD_AUART2_TX__AUART2_TX
353 MX28_PAD_AUART2_CTS__AUART2_CTS
354 MX28_PAD_AUART2_RTS__AUART2_RTS
355 >;
356 fsl,drive-strength = <MXS_DRIVE_4mA>;
357 fsl,voltage = <MXS_VOLTAGE_HIGH>;
358 fsl,pull-up = <MXS_PULL_DISABLE>;
359 };
360
346 auart3_pins_a: auart3@0 { 361 auart3_pins_a: auart3@0 {
347 reg = <0>; 362 reg = <0>;
348 fsl,pinmux-ids = < 363 fsl,pinmux-ids = <
@@ -655,6 +670,33 @@
655 fsl,pull-up = <MXS_PULL_DISABLE>; 670 fsl,pull-up = <MXS_PULL_DISABLE>;
656 }; 671 };
657 672
673 lcdif_18bit_pins_a: lcdif-18bit@0 {
674 reg = <0>;
675 fsl,pinmux-ids = <
676 MX28_PAD_LCD_D00__LCD_D0
677 MX28_PAD_LCD_D01__LCD_D1
678 MX28_PAD_LCD_D02__LCD_D2
679 MX28_PAD_LCD_D03__LCD_D3
680 MX28_PAD_LCD_D04__LCD_D4
681 MX28_PAD_LCD_D05__LCD_D5
682 MX28_PAD_LCD_D06__LCD_D6
683 MX28_PAD_LCD_D07__LCD_D7
684 MX28_PAD_LCD_D08__LCD_D8
685 MX28_PAD_LCD_D09__LCD_D9
686 MX28_PAD_LCD_D10__LCD_D10
687 MX28_PAD_LCD_D11__LCD_D11
688 MX28_PAD_LCD_D12__LCD_D12
689 MX28_PAD_LCD_D13__LCD_D13
690 MX28_PAD_LCD_D14__LCD_D14
691 MX28_PAD_LCD_D15__LCD_D15
692 MX28_PAD_LCD_D16__LCD_D16
693 MX28_PAD_LCD_D17__LCD_D17
694 >;
695 fsl,drive-strength = <MXS_DRIVE_4mA>;
696 fsl,voltage = <MXS_VOLTAGE_HIGH>;
697 fsl,pull-up = <MXS_PULL_DISABLE>;
698 };
699
658 lcdif_16bit_pins_a: lcdif-16bit@0 { 700 lcdif_16bit_pins_a: lcdif-16bit@0 {
659 reg = <0>; 701 reg = <0>;
660 fsl,pinmux-ids = < 702 fsl,pinmux-ids = <
@@ -743,7 +785,7 @@
743 fsl,pull-up = <MXS_PULL_DISABLE>; 785 fsl,pull-up = <MXS_PULL_DISABLE>;
744 }; 786 };
745 787
746 usbphy0_pins_a: usbphy0@0 { 788 usb0_pins_a: usb0@0 {
747 reg = <0>; 789 reg = <0>;
748 fsl,pinmux-ids = < 790 fsl,pinmux-ids = <
749 MX28_PAD_SSP2_SS2__USB0_OVERCURRENT 791 MX28_PAD_SSP2_SS2__USB0_OVERCURRENT
@@ -753,7 +795,7 @@
753 fsl,pull-up = <MXS_PULL_DISABLE>; 795 fsl,pull-up = <MXS_PULL_DISABLE>;
754 }; 796 };
755 797
756 usbphy0_pins_b: usbphy0@1 { 798 usb0_pins_b: usb0@1 {
757 reg = <1>; 799 reg = <1>;
758 fsl,pinmux-ids = < 800 fsl,pinmux-ids = <
759 MX28_PAD_AUART1_CTS__USB0_OVERCURRENT 801 MX28_PAD_AUART1_CTS__USB0_OVERCURRENT
@@ -763,7 +805,7 @@
763 fsl,pull-up = <MXS_PULL_DISABLE>; 805 fsl,pull-up = <MXS_PULL_DISABLE>;
764 }; 806 };
765 807
766 usbphy1_pins_a: usbphy1@0 { 808 usb1_pins_a: usb1@0 {
767 reg = <0>; 809 reg = <0>;
768 fsl,pinmux-ids = < 810 fsl,pinmux-ids = <
769 MX28_PAD_SSP2_SS1__USB1_OVERCURRENT 811 MX28_PAD_SSP2_SS1__USB1_OVERCURRENT
@@ -782,6 +824,17 @@
782 fsl,voltage = <MXS_VOLTAGE_HIGH>; 824 fsl,voltage = <MXS_VOLTAGE_HIGH>;
783 fsl,pull-up = <MXS_PULL_ENABLE>; 825 fsl,pull-up = <MXS_PULL_ENABLE>;
784 }; 826 };
827
828 usb0_id_pins_b: usb0id1@0 {
829 reg = <0>;
830 fsl,pinmux-ids = <
831 MX28_PAD_PWM2__USB0_ID
832 >;
833 fsl,drive-strength = <MXS_DRIVE_12mA>;
834 fsl,voltage = <MXS_VOLTAGE_HIGH>;
835 fsl,pull-up = <MXS_PULL_ENABLE>;
836 };
837
785 }; 838 };
786 839
787 digctl: digctl@8001c000 { 840 digctl: digctl@8001c000 {
@@ -946,6 +999,7 @@
946 20 21 22 23 24 25>; 999 20 21 22 23 24 25>;
947 status = "disabled"; 1000 status = "disabled";
948 clocks = <&clks 41>; 1001 clocks = <&clks 41>;
1002 #io-channel-cells = <1>;
949 }; 1003 };
950 1004
951 spdif: spdif@80054000 { 1005 spdif: spdif@80054000 {
@@ -1130,4 +1184,9 @@
1130 status = "disabled"; 1184 status = "disabled";
1131 }; 1185 };
1132 }; 1186 };
1187
1188 iio_hwmon {
1189 compatible = "iio-hwmon";
1190 io-channels = <&lradc 8>;
1191 };
1133}; 1192};
diff --git a/arch/arm/boot/dts/imx35-eukrea-cpuimx35.dtsi b/arch/arm/boot/dts/imx35-eukrea-cpuimx35.dtsi
new file mode 100644
index 000000000000..906ae937b013
--- /dev/null
+++ b/arch/arm/boot/dts/imx35-eukrea-cpuimx35.dtsi
@@ -0,0 +1,81 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include "imx35.dtsi"
15
16/ {
17 model = "Eukrea CPUIMX35";
18 compatible = "eukrea,cpuimx35", "fsl,imx35";
19
20 memory {
21 reg = <0x80000000 0x8000000>; /* 128M */
22 };
23};
24
25&fec {
26 pinctrl-names = "default";
27 pinctrl-0 = <&pinctrl_fec>;
28 status = "okay";
29};
30
31&i2c1 {
32 pinctrl-names = "default";
33 pinctrl-0 = <&pinctrl_i2c1>;
34 status = "okay";
35
36 pcf8563@51 {
37 compatible = "nxp,pcf8563";
38 reg = <0x51>;
39 };
40};
41
42&iomuxc {
43 imx35-eukrea {
44 pinctrl_fec: fecgrp {
45 fsl,pins = <
46 MX35_PAD_FEC_TX_CLK__FEC_TX_CLK 0x80000000
47 MX35_PAD_FEC_RX_CLK__FEC_RX_CLK 0x80000000
48 MX35_PAD_FEC_RX_DV__FEC_RX_DV 0x80000000
49 MX35_PAD_FEC_COL__FEC_COL 0x80000000
50 MX35_PAD_FEC_RDATA0__FEC_RDATA_0 0x80000000
51 MX35_PAD_FEC_TDATA0__FEC_TDATA_0 0x80000000
52 MX35_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
53 MX35_PAD_FEC_MDC__FEC_MDC 0x80000000
54 MX35_PAD_FEC_MDIO__FEC_MDIO 0x80000000
55 MX35_PAD_FEC_TX_ERR__FEC_TX_ERR 0x80000000
56 MX35_PAD_FEC_RX_ERR__FEC_RX_ERR 0x80000000
57 MX35_PAD_FEC_CRS__FEC_CRS 0x80000000
58 MX35_PAD_FEC_RDATA1__FEC_RDATA_1 0x80000000
59 MX35_PAD_FEC_TDATA1__FEC_TDATA_1 0x80000000
60 MX35_PAD_FEC_RDATA2__FEC_RDATA_2 0x80000000
61 MX35_PAD_FEC_TDATA2__FEC_TDATA_2 0x80000000
62 MX35_PAD_FEC_RDATA3__FEC_RDATA_3 0x80000000
63 MX35_PAD_FEC_TDATA3__FEC_TDATA_3 0x80000000
64 >;
65 };
66
67 pinctrl_i2c1: i2c1grp {
68 fsl,pins = <
69 MX35_PAD_I2C1_CLK__I2C1_SCL 0x80000000
70 MX35_PAD_I2C1_DAT__I2C1_SDA 0x80000000
71 >;
72 };
73 };
74};
75
76&nfc {
77 nand-bus-width = <8>;
78 nand-ecc-mode = "hw";
79 nand-on-flash-bbt;
80 status = "okay";
81};
diff --git a/arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard.dts b/arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard.dts
new file mode 100644
index 000000000000..1bdec21f4533
--- /dev/null
+++ b/arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard.dts
@@ -0,0 +1,143 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14/dts-v1/;
15
16#include <dt-bindings/gpio/gpio.h>
17#include <dt-bindings/input/input.h>
18#include "imx35-eukrea-cpuimx35.dtsi"
19
20/ {
21 model = "Eukrea CPUIMX35";
22 compatible = "eukrea,mbimxsd35-baseboard", "eukrea,cpuimx35", "fsl,imx35";
23
24 gpio_keys {
25 compatible = "gpio-keys";
26 pinctrl-names = "default";
27 pinctrl-0 = <&pinctrl_bp1>;
28
29 bp1 {
30 label = "BP1";
31 gpios = <&gpio3 25 GPIO_ACTIVE_LOW>;
32 linux,code = <BTN_MISC>;
33 gpio-key,wakeup;
34 linux,input-type = <1>;
35 };
36 };
37
38 leds {
39 compatible = "gpio-leds";
40 pinctrl-names = "default";
41 pinctrl-0 = <&pinctrl_led1>;
42
43 led1 {
44 label = "led1";
45 gpios = <&gpio3 29 GPIO_ACTIVE_LOW>;
46 linux,default-trigger = "heartbeat";
47 };
48 };
49};
50
51&audmux {
52 pinctrl-names = "default";
53 pinctrl-0 = <&pinctrl_audmux>;
54 status = "okay";
55};
56
57&esdhc1 {
58 pinctrl-names = "default";
59 pinctrl-0 = <&pinctrl_esdhc1>;
60 cd-gpios = <&gpio3 24>;
61 status = "okay";
62};
63
64&i2c1 {
65 tlv320aic23: codec@1a {
66 compatible = "ti,tlv320aic23";
67 reg = <0x1a>;
68 };
69};
70
71&iomuxc {
72 imx35-eukrea {
73 pinctrl_audmux: audmuxgrp {
74 fsl,pins = <
75 MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS 0x80000000
76 MX35_PAD_STXD4__AUDMUX_AUD4_TXD 0x80000000
77 MX35_PAD_SRXD4__AUDMUX_AUD4_RXD 0x80000000
78 MX35_PAD_SCK4__AUDMUX_AUD4_TXC 0x80000000
79 >;
80 };
81
82 pinctrl_bp1: bp1grp {
83 fsl,pins = <MX35_PAD_LD19__GPIO3_25 0x80000000>;
84 };
85
86 pinctrl_esdhc1: esdhc1grp {
87 fsl,pins = <
88 MX35_PAD_SD1_CMD__ESDHC1_CMD 0x80000000
89 MX35_PAD_SD1_CLK__ESDHC1_CLK 0x80000000
90 MX35_PAD_SD1_DATA0__ESDHC1_DAT0 0x80000000
91 MX35_PAD_SD1_DATA1__ESDHC1_DAT1 0x80000000
92 MX35_PAD_SD1_DATA2__ESDHC1_DAT2 0x80000000
93 MX35_PAD_SD1_DATA3__ESDHC1_DAT3 0x80000000
94 MX35_PAD_LD18__GPIO3_24 0x80000000 /* CD */
95 >;
96 };
97
98 pinctrl_led1: led1grp {
99 fsl,pins = <MX35_PAD_LD23__GPIO3_29 0x80000000>;
100 };
101
102 pinctrl_reg_lcd_3v3: reg-lcd-3v3 {
103 fsl,pins = <MX35_PAD_D3_CLS__GPIO1_4 0x80000000>;
104 };
105
106 pinctrl_uart1: uart1grp {
107 fsl,pins = <
108 MX35_PAD_TXD1__UART1_TXD_MUX 0x1c5
109 MX35_PAD_RXD1__UART1_RXD_MUX 0x1c5
110 MX35_PAD_CTS1__UART1_CTS 0x1c5
111 MX35_PAD_RTS1__UART1_RTS 0x1c5
112 >;
113 };
114
115 pinctrl_uart2: uart2grp {
116 fsl,pins = <
117 MX35_PAD_RXD2__UART2_RXD_MUX 0x1c5
118 MX35_PAD_TXD2__UART2_TXD_MUX 0x1c5
119 MX35_PAD_RTS2__UART2_RTS 0x1c5
120 MX35_PAD_CTS2__UART2_CTS 0x1c5
121 >;
122 };
123 };
124};
125
126&ssi1 {
127 fsl,mode = "i2s-slave";
128 status = "okay";
129};
130
131&uart1 {
132 pinctrl-names = "default";
133 pinctrl-0 = <&pinctrl_uart1>;
134 fsl,uart-has-rtscts;
135 status = "okay";
136};
137
138&uart2 {
139 pinctrl-names = "default";
140 pinctrl-0 = <&pinctrl_uart2>;
141 fsl,uart-has-rtscts;
142 status = "okay";
143};
diff --git a/arch/arm/boot/dts/imx35.dtsi b/arch/arm/boot/dts/imx35.dtsi
new file mode 100644
index 000000000000..88b218f8f810
--- /dev/null
+++ b/arch/arm/boot/dts/imx35.dtsi
@@ -0,0 +1,359 @@
1/*
2 * Copyright 2012 Steffen Trumtrar, Pengutronix
3 *
4 * based on imx27.dtsi
5 *
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU General Public License version 2 as published by the
8 * Free Software Foundation.
9 */
10
11#include "skeleton.dtsi"
12#include "imx35-pinfunc.h"
13
14/ {
15 aliases {
16 gpio0 = &gpio1;
17 gpio1 = &gpio2;
18 gpio2 = &gpio3;
19 serial0 = &uart1;
20 serial1 = &uart2;
21 serial2 = &uart3;
22 spi0 = &spi1;
23 spi1 = &spi2;
24 };
25
26 cpus {
27 #address-cells = <0>;
28 #size-cells = <0>;
29
30 cpu {
31 compatible = "arm,arm1136";
32 device_type = "cpu";
33 };
34 };
35
36 avic: avic-interrupt-controller@68000000 {
37 compatible = "fsl,imx35-avic", "fsl,avic";
38 interrupt-controller;
39 #interrupt-cells = <1>;
40 reg = <0x68000000 0x10000000>;
41 };
42
43 soc {
44 #address-cells = <1>;
45 #size-cells = <1>;
46 compatible = "simple-bus";
47 interrupt-parent = <&avic>;
48 ranges;
49
50 L2: l2-cache@30000000 {
51 compatible = "arm,l210-cache";
52 reg = <0x30000000 0x1000>;
53 cache-unified;
54 cache-level = <2>;
55 };
56
57 aips1: aips@43f00000 {
58 compatible = "fsl,aips", "simple-bus";
59 #address-cells = <1>;
60 #size-cells = <1>;
61 reg = <0x43f00000 0x100000>;
62 ranges;
63
64 i2c1: i2c@43f80000 {
65 #address-cells = <1>;
66 #size-cells = <0>;
67 compatible = "fsl,imx35-i2c", "fsl,imx1-i2c";
68 reg = <0x43f80000 0x4000>;
69 clocks = <&clks 51>;
70 clock-names = "ipg_per";
71 interrupts = <10>;
72 status = "disabled";
73 };
74
75 i2c3: i2c@43f84000 {
76 #address-cells = <1>;
77 #size-cells = <0>;
78 compatible = "fsl,imx35-i2c", "fsl,imx1-i2c";
79 reg = <0x43f84000 0x4000>;
80 clocks = <&clks 53>;
81 clock-names = "ipg_per";
82 interrupts = <3>;
83 status = "disabled";
84 };
85
86 uart1: serial@43f90000 {
87 compatible = "fsl,imx35-uart", "fsl,imx21-uart";
88 reg = <0x43f90000 0x4000>;
89 clocks = <&clks 9>, <&clks 70>;
90 clock-names = "ipg", "per";
91 interrupts = <45>;
92 status = "disabled";
93 };
94
95 uart2: serial@43f94000 {
96 compatible = "fsl,imx35-uart", "fsl,imx21-uart";
97 reg = <0x43f94000 0x4000>;
98 clocks = <&clks 9>, <&clks 71>;
99 clock-names = "ipg", "per";
100 interrupts = <32>;
101 status = "disabled";
102 };
103
104 i2c2: i2c@43f98000 {
105 #address-cells = <1>;
106 #size-cells = <0>;
107 compatible = "fsl,imx35-i2c", "fsl,imx1-i2c";
108 reg = <0x43f98000 0x4000>;
109 clocks = <&clks 52>;
110 clock-names = "ipg_per";
111 interrupts = <4>;
112 status = "disabled";
113 };
114
115 ssi1: ssi@43fa0000 {
116 compatible = "fsl,imx35-ssi", "fsl,imx21-ssi";
117 reg = <0x43fa0000 0x4000>;
118 interrupts = <11>;
119 clocks = <&clks 68>;
120 dmas = <&sdma 28 0 0>,
121 <&sdma 29 0 0>;
122 dma-names = "rx", "tx";
123 fsl,fifo-depth = <15>;
124 status = "disabled";
125 };
126
127 spi1: cspi@43fa4000 {
128 #address-cells = <1>;
129 #size-cells = <0>;
130 compatible = "fsl,imx35-cspi";
131 reg = <0x43fa4000 0x4000>;
132 clocks = <&clks 35 &clks 35>;
133 clock-names = "ipg", "per";
134 interrupts = <14>;
135 status = "disabled";
136 };
137
138 iomuxc: iomuxc@43fac000 {
139 compatible = "fsl,imx35-iomuxc";
140 reg = <0x43fac000 0x4000>;
141 };
142 };
143
144 spba: spba-bus@50000000 {
145 compatible = "fsl,spba-bus", "simple-bus";
146 #address-cells = <1>;
147 #size-cells = <1>;
148 reg = <0x50000000 0x100000>;
149 ranges;
150
151 uart3: serial@5000c000 {
152 compatible = "fsl,imx35-uart", "fsl,imx21-uart";
153 reg = <0x5000c000 0x4000>;
154 clocks = <&clks 9>, <&clks 72>;
155 clock-names = "ipg", "per";
156 interrupts = <18>;
157 status = "disabled";
158 };
159
160 spi2: cspi@50010000 {
161 #address-cells = <1>;
162 #size-cells = <0>;
163 compatible = "fsl,imx35-cspi";
164 reg = <0x50010000 0x4000>;
165 interrupts = <13>;
166 clocks = <&clks 36 &clks 36>;
167 clock-names = "ipg", "per";
168 status = "disabled";
169 };
170
171 fec: fec@50038000 {
172 compatible = "fsl,imx35-fec", "fsl,imx27-fec";
173 reg = <0x50038000 0x4000>;
174 clocks = <&clks 46>, <&clks 8>;
175 clock-names = "ipg", "ahb";
176 interrupts = <57>;
177 status = "disabled";
178 };
179 };
180
181 aips2: aips@53f00000 {
182 compatible = "fsl,aips", "simple-bus";
183 #address-cells = <1>;
184 #size-cells = <1>;
185 reg = <0x53f00000 0x100000>;
186 ranges;
187
188 clks: ccm@53f80000 {
189 compatible = "fsl,imx35-ccm";
190 reg = <0x53f80000 0x4000>;
191 interrupts = <31>;
192 #clock-cells = <1>;
193 };
194
195 gpio3: gpio@53fa4000 {
196 compatible = "fsl,imx35-gpio", "fsl,imx31-gpio";
197 reg = <0x53fa4000 0x4000>;
198 interrupts = <56>;
199 gpio-controller;
200 #gpio-cells = <2>;
201 interrupt-controller;
202 #interrupt-cells = <2>;
203 };
204
205 esdhc1: esdhc@53fb4000 {
206 compatible = "fsl,imx35-esdhc";
207 reg = <0x53fb4000 0x4000>;
208 interrupts = <7>;
209 clocks = <&clks 9>, <&clks 8>, <&clks 43>;
210 clock-names = "ipg", "ahb", "per";
211 status = "disabled";
212 };
213
214 esdhc2: esdhc@53fb8000 {
215 compatible = "fsl,imx35-esdhc";
216 reg = <0x53fb8000 0x4000>;
217 interrupts = <8>;
218 clocks = <&clks 9>, <&clks 8>, <&clks 44>;
219 clock-names = "ipg", "ahb", "per";
220 status = "disabled";
221 };
222
223 esdhc3: esdhc@53fbc000 {
224 compatible = "fsl,imx35-esdhc";
225 reg = <0x53fbc000 0x4000>;
226 interrupts = <9>;
227 clocks = <&clks 9>, <&clks 8>, <&clks 45>;
228 clock-names = "ipg", "ahb", "per";
229 status = "disabled";
230 };
231
232 audmux: audmux@53fc4000 {
233 compatible = "fsl,imx35-audmux", "fsl,imx31-audmux";
234 reg = <0x53fc4000 0x4000>;
235 status = "disabled";
236 };
237
238 gpio1: gpio@53fcc000 {
239 compatible = "fsl,imx35-gpio", "fsl,imx31-gpio";
240 reg = <0x53fcc000 0x4000>;
241 interrupts = <52>;
242 gpio-controller;
243 #gpio-cells = <2>;
244 interrupt-controller;
245 #interrupt-cells = <2>;
246 };
247
248 gpio2: gpio@53fd0000 {
249 compatible = "fsl,imx35-gpio", "fsl,imx31-gpio";
250 reg = <0x53fd0000 0x4000>;
251 interrupts = <51>;
252 gpio-controller;
253 #gpio-cells = <2>;
254 interrupt-controller;
255 #interrupt-cells = <2>;
256 };
257
258 sdma: sdma@53fd4000 {
259 compatible = "fsl,imx35-sdma";
260 reg = <0x53fd4000 0x4000>;
261 clocks = <&clks 9>, <&clks 65>;
262 clock-names = "ipg", "ahb";
263 #dma-cells = <3>;
264 interrupts = <34>;
265 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx35.bin";
266 };
267
268 wdog: wdog@53fdc000 {
269 compatible = "fsl,imx35-wdt", "fsl,imx21-wdt";
270 reg = <0x53fdc000 0x4000>;
271 clocks = <&clks 74>;
272 clock-names = "";
273 interrupts = <55>;
274 };
275
276 can1: can@53fe4000 {
277 compatible = "fsl,imx35-flexcan", "fsl,p1010-flexcan";
278 reg = <0x53fe4000 0x1000>;
279 clocks = <&clks 33>;
280 clock-names = "ipg";
281 interrupts = <43>;
282 status = "disabled";
283 };
284
285 can2: can@53fe8000 {
286 compatible = "fsl,imx35-flexcan", "fsl,p1010-flexcan";
287 reg = <0x53fe8000 0x1000>;
288 clocks = <&clks 34>;
289 clock-names = "ipg";
290 interrupts = <44>;
291 status = "disabled";
292 };
293
294 usbotg: usb@53ff4000 {
295 compatible = "fsl,imx35-usb", "fsl,imx27-usb";
296 reg = <0x53ff4000 0x0200>;
297 interrupts = <37>;
298 clocks = <&clks 9>, <&clks 73>, <&clks 28>;
299 clock-names = "ipg", "ahb", "per";
300 fsl,usbmisc = <&usbmisc 0>;
301 status = "disabled";
302 };
303
304 usbhost1: usb@53ff4400 {
305 compatible = "fsl,imx35-usb", "fsl,imx27-usb";
306 reg = <0x53ff4400 0x0200>;
307 interrupts = <35>;
308 clocks = <&clks 9>, <&clks 73>, <&clks 28>;
309 clock-names = "ipg", "ahb", "per";
310 fsl,usbmisc = <&usbmisc 1>;
311 status = "disabled";
312 };
313
314 usbmisc: usbmisc@53ff4600 {
315 #index-cells = <1>;
316 compatible = "fsl,imx35-usbmisc";
317 clocks = <&clks 9>, <&clks 73>, <&clks 28>;
318 clock-names = "ipg", "ahb", "per";
319 reg = <0x53ff4600 0x00f>;
320 };
321 };
322
323 emi@80000000 { /* External Memory Interface */
324 compatible = "fsl,emi", "simple-bus";
325 #address-cells = <1>;
326 #size-cells = <1>;
327 reg = <0x80000000 0x40000000>;
328 ranges;
329
330 nfc: nand@bb000000 {
331 #address-cells = <1>;
332 #size-cells = <1>;
333 compatible = "fsl,imx35-nand", "fsl,imx25-nand";
334 reg = <0xbb000000 0x2000>;
335 clocks = <&clks 29>;
336 clock-names = "";
337 interrupts = <33>;
338 status = "disabled";
339 };
340
341 weim: weim@b8002000 {
342 #address-cells = <2>;
343 #size-cells = <1>;
344 clocks = <&clks 0>;
345 compatible = "fsl,imx35-weim", "fsl,imx27-weim";
346 reg = <0xb8002000 0x1000>;
347 ranges = <
348 0 0 0xa0000000 0x8000000
349 1 0 0xa8000000 0x8000000
350 2 0 0xb0000000 0x2000000
351 3 0 0xb2000000 0x2000000
352 4 0 0xb4000000 0x2000000
353 5 0 0xb6000000 0x2000000
354 >;
355 status = "disabled";
356 };
357 };
358 };
359};
diff --git a/arch/arm/boot/dts/imx50-evk.dts b/arch/arm/boot/dts/imx50-evk.dts
new file mode 100644
index 000000000000..1b22512c91bd
--- /dev/null
+++ b/arch/arm/boot/dts/imx50-evk.dts
@@ -0,0 +1,119 @@
1/*
2 * Copyright 2013 Greg Ungerer <gerg@uclinux.org>
3 * Copyright 2011 Freescale Semiconductor, Inc.
4 * Copyright 2011 Linaro Ltd.
5 *
6 * The code contained herein is licensed under the GNU General Public
7 * License. You may obtain a copy of the GNU General Public License
8 * Version 2 or later at the following locations:
9 *
10 * http://www.opensource.org/licenses/gpl-license.html
11 * http://www.gnu.org/copyleft/gpl.html
12 */
13
14/dts-v1/;
15#include "imx50.dtsi"
16
17/ {
18 model = "Freescale i.MX50 Evaluation Kit";
19 compatible = "fsl,imx50-evk", "fsl,imx50";
20
21 memory {
22 reg = <0x70000000 0x80000000>;
23 };
24};
25
26&cspi {
27 pinctrl-names = "default";
28 pinctrl-0 = <&pinctrl_cspi>;
29 fsl,spi-num-chipselects = <2>;
30 cs-gpios = <&gpio4 11 0>, <&gpio4 13 0>;
31 status = "okay";
32
33 flash: m25p32@1 {
34 #address-cells = <1>;
35 #size-cells = <1>;
36 compatible = "m25p32", "m25p80";
37 spi-max-frequency = <25000000>;
38 reg = <1>;
39
40 partition@0 {
41 label = "bootloader";
42 reg = <0x0 0x100000>;
43 read-only;
44 };
45
46 partition@100000 {
47 label = "kernel";
48 reg = <0x100000 0x300000>;
49 };
50 };
51};
52
53&fec {
54 pinctrl-names = "default";
55 pinctrl-0 = <&pinctrl_fec>;
56 phy-mode = "rmii";
57 phy-reset-gpios = <&gpio4 12 0>;
58 status = "okay";
59};
60
61&iomuxc {
62 imx50-evk {
63 pinctrl_cspi: cspigrp {
64 fsl,pins = <
65 MX50_PAD_CSPI_SCLK__CSPI_SCLK 0x00
66 MX50_PAD_CSPI_MISO__CSPI_MISO 0x00
67 MX50_PAD_CSPI_MOSI__CSPI_MOSI 0x00
68 MX50_PAD_CSPI_SS0__GPIO4_11 0xc4
69 MX50_PAD_ECSPI1_MOSI__CSPI_SS1 0xf4
70 >;
71 };
72
73 pinctrl_fec: fecgrp {
74 fsl,pins = <
75 MX50_PAD_SSI_RXFS__FEC_MDC 0x80
76 MX50_PAD_SSI_RXC__FEC_MDIO 0x80
77 MX50_PAD_DISP_D0__FEC_TX_CLK 0x80
78 MX50_PAD_DISP_D1__FEC_RX_ERR 0x80
79 MX50_PAD_DISP_D2__FEC_RX_DV 0x80
80 MX50_PAD_DISP_D3__FEC_RDATA_1 0x80
81 MX50_PAD_DISP_D4__FEC_RDATA_0 0x80
82 MX50_PAD_DISP_D5__FEC_TX_EN 0x80
83 MX50_PAD_DISP_D6__FEC_TDATA_1 0x80
84 MX50_PAD_DISP_D7__FEC_TDATA_0 0x80
85 >;
86 };
87
88 pinctrl_uart1: uart1grp {
89 fsl,pins = <
90 MX50_PAD_UART1_TXD__UART1_TXD_MUX 0x1e4
91 MX50_PAD_UART1_RXD__UART1_RXD_MUX 0x1e4
92 MX50_PAD_UART1_RTS__UART1_RTS 0x1e4
93 MX50_PAD_UART1_CTS__UART1_CTS 0x1e4
94 >;
95 };
96 };
97};
98
99&uart1 {
100 pinctrl-names = "default";
101 pinctrl-0 = <&pinctrl_uart1>;
102 status = "okay";
103};
104
105&usbh1 {
106 status = "okay";
107};
108
109&usbh2 {
110 status = "okay";
111};
112
113&usbh3 {
114 status = "okay";
115};
116
117&usbotg {
118 status = "okay";
119};
diff --git a/arch/arm/boot/dts/imx50-pinfunc.h b/arch/arm/boot/dts/imx50-pinfunc.h
new file mode 100644
index 000000000000..97e6e7f4ebdd
--- /dev/null
+++ b/arch/arm/boot/dts/imx50-pinfunc.h
@@ -0,0 +1,923 @@
1/*
2 * Copyright 2013 Greg Ungerer <gerg@uclinux.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 */
9
10#ifndef __DTS_IMX50_PINFUNC_H
11#define __DTS_IMX50_PINFUNC_H
12
13/*
14 * The pin function ID is a tuple of
15 * <mux_reg conf_reg input_reg mux_mode input_val>
16 */
17#define MX50_PAD_KEY_COL0__KPP_COL_0 0x020 0x2cc 0x000 0x0 0x0
18#define MX50_PAD_KEY_COL0__GPIO4_0 0x020 0x2cc 0x000 0x1 0x0
19#define MX50_PAD_KEY_COL0__EIM_NANDF_CLE 0x020 0x2cc 0x000 0x2 0x0
20#define MX50_PAD_KEY_COL0__CTI_TRIGIN7 0x020 0x2cc 0x000 0x6 0x0
21#define MX50_PAD_KEY_COL0__USBPHY1_TXREADY 0x020 0x2cc 0x000 0x7 0x0
22#define MX50_PAD_KEY_ROW0__KPP_ROW_0 0x024 0x2d0 0x000 0x0 0x0
23#define MX50_PAD_KEY_ROW0__GPIO4_1 0x024 0x2d0 0x000 0x1 0x0
24#define MX50_PAD_KEY_ROW0__EIM_NANDF_ALE 0x024 0x2d0 0x000 0x2 0x0
25#define MX50_PAD_KEY_ROW0__CTI_TRIGIN_ACK7 0x024 0x2d0 0x000 0x6 0x0
26#define MX50_PAD_KEY_ROW0__USBPHY1_RXVALID 0x024 0x2d0 0x000 0x7 0x0
27#define MX50_PAD_KEY_COL1__KPP_COL_1 0x028 0x2d4 0x000 0x0 0x0
28#define MX50_PAD_KEY_COL1__GPIO4_2 0x028 0x2d4 0x000 0x1 0x0
29#define MX50_PAD_KEY_COL1__EIM_NANDF_CEN_0 0x028 0x2d4 0x000 0x2 0x0
30#define MX50_PAD_KEY_COL1__CTI_TRIGOUT_ACK6 0x028 0x2d4 0x000 0x6 0x0
31#define MX50_PAD_KEY_COL1__USBPHY1_RXACTIVE 0x028 0x2d4 0x000 0x7 0x0
32#define MX50_PAD_KEY_ROW1__KPP_ROW_1 0x02c 0x2d8 0x000 0x0 0x0
33#define MX50_PAD_KEY_ROW1__GPIO4_3 0x02c 0x2d8 0x000 0x1 0x0
34#define MX50_PAD_KEY_ROW1__EIM_NANDF_CEN_1 0x02c 0x2d8 0x000 0x2 0x0
35#define MX50_PAD_KEY_ROW1__CTI_TRIGOUT_ACK7 0x02c 0x2d8 0x000 0x6 0x0
36#define MX50_PAD_KEY_ROW1__USBPHY1_RXERROR 0x02c 0x2d8 0x000 0x7 0x0
37#define MX50_PAD_KEY_COL2__KPP_COL_1 0x030 0x2dc 0x000 0x0 0x0
38#define MX50_PAD_KEY_COL2__GPIO4_4 0x030 0x2dc 0x000 0x1 0x0
39#define MX50_PAD_KEY_COL2__EIM_NANDF_CEN_2 0x030 0x2dc 0x000 0x2 0x0
40#define MX50_PAD_KEY_COL2__CTI_TRIGOUT6 0x030 0x2dc 0x000 0x6 0x0
41#define MX50_PAD_KEY_COL2__USBPHY1_SIECLOCK 0x030 0x2dc 0x000 0x7 0x0
42#define MX50_PAD_KEY_ROW2__KPP_ROW_2 0x034 0x2e0 0x000 0x0 0x0
43#define MX50_PAD_KEY_ROW2__GPIO4_5 0x034 0x2e0 0x000 0x1 0x0
44#define MX50_PAD_KEY_ROW2__EIM_NANDF_CEN_3 0x034 0x2e0 0x000 0x2 0x0
45#define MX50_PAD_KEY_ROW2__CTI_TRIGOUT7 0x034 0x2e0 0x000 0x6 0x0
46#define MX50_PAD_KEY_ROW2__USBPHY1_LINESTATE_0 0x034 0x2e0 0x000 0x7 0x0
47#define MX50_PAD_KEY_COL3__KPP_COL_2 0x038 0x2e4 0x000 0x0 0x0
48#define MX50_PAD_KEY_COL3__GPIO4_6 0x038 0x2e4 0x000 0x1 0x0
49#define MX50_PAD_KEY_COL3__EIM_NANDF_READY0 0x038 0x2e4 0x7b4 0x2 0x0
50#define MX50_PAD_KEY_COL3__SDMA_EXT_EVENT_0 0x038 0x2e4 0x7b8 0x6 0x0
51#define MX50_PAD_KEY_COL3__USBPHY1_LINESTATE_1 0x038 0x2e4 0x000 0x7 0x0
52#define MX50_PAD_KEY_ROW3__KPP_ROW_3 0x03c 0x2e8 0x000 0x0 0x0
53#define MX50_PAD_KEY_ROW3__GPIO4_7 0x03c 0x2e8 0x000 0x1 0x0
54#define MX50_PAD_KEY_ROW3__EIM_NANDF_DQS 0x03c 0x2e8 0x7b0 0x2 0x0
55#define MX50_PAD_KEY_ROW3__SDMA_EXT_EVENT_1 0x03c 0x2e8 0x7bc 0x6 0x0
56#define MX50_PAD_KEY_ROW3__USBPHY1_VBUSVALID 0x03c 0x2e8 0x000 0x7 0x0
57#define MX50_PAD_I2C1_SCL__I2C1_SCL 0x040 0x2ec 0x000 0x0 0x0
58#define MX50_PAD_I2C1_SCL__GPIO6_18 0x040 0x2ec 0x000 0x1 0x0
59#define MX50_PAD_I2C1_SCL__UART2_TXD_MUX 0x040 0x2ec 0x7cc 0x2 0x0
60#define MX50_PAD_I2C1_SDA__I2C1_SDA 0x044 0x2f0 0x000 0x0 0x0
61#define MX50_PAD_I2C1_SDA__GPIO6_19 0x044 0x2f0 0x000 0x1 0x0
62#define MX50_PAD_I2C1_SDA__UART2_RXD_MUX 0x044 0x2f0 0x7cc 0x2 0x1
63#define MX50_PAD_I2C2_SCL__I2C2_SCL 0x048 0x2f4 0x000 0x0 0x0
64#define MX50_PAD_I2C2_SCL__GPIO6_20 0x048 0x2f4 0x000 0x1 0x0
65#define MX50_PAD_I2C2_SCL__UART2_CTS 0x048 0x2f4 0x000 0x2 0x0
66#define MX50_PAD_I2C2_SDA__I2C2_SDA 0x04c 0x2f8 0x000 0x0 0x0
67#define MX50_PAD_I2C2_SDA__GPIO6_21 0x04c 0x2f8 0x000 0x1 0x0
68#define MX50_PAD_I2C2_SDA__UART2_RTS 0x04c 0x2f8 0x7c8 0x2 0x1
69#define MX50_PAD_I2C3_SCL__I2C3_SCL 0x050 0x2fc 0x000 0x0 0x0
70#define MX50_PAD_I2C3_SCL__GPIO6_22 0x050 0x2fc 0x000 0x1 0x0
71#define MX50_PAD_I2C3_SCL__FEC_MDC 0x050 0x2fc 0x000 0x2 0x0
72#define MX50_PAD_I2C3_SCL__GPC_PMIC_RDY 0x050 0x2fc 0x000 0x3 0x0
73#define MX50_PAD_I2C3_SCL__GPT_CAPIN1 0x050 0x2fc 0x000 0x5 0x0
74#define MX50_PAD_I2C3_SCL__OBSERVE_MUX_OBSRV_INT_OUT0 0x050 0x2fc 0x000 0x6 0x0
75#define MX50_PAD_I2C3_SCL__USBOH1_USBOTG_OC 0x050 0x2fc 0x7e8 0x7 0x0
76#define MX50_PAD_I2C3_SDA__I2C3_SDA 0x054 0x300 0x000 0x0 0x0
77#define MX50_PAD_I2C3_SDA__GPIO6_23 0x054 0x300 0x000 0x1 0x0
78#define MX50_PAD_I2C3_SDA__FEC_MDIO 0x054 0x300 0x774 0x2 0x0
79#define MX50_PAD_I2C3_SDA__TZIC_PWRFAIL_INT 0x054 0x300 0x000 0x3 0x0
80#define MX50_PAD_I2C3_SDA__SRTC_ALARM_DEB 0x054 0x300 0x000 0x4 0x0
81#define MX50_PAD_I2C3_SDA__GPT_CAPIN2 0x054 0x300 0x000 0x5 0x0
82#define MX50_PAD_I2C3_SDA__OBSERVE_MUX_OBSRV_INT_OUT1 0x054 0x300 0x000 0x6 0x0
83#define MX50_PAD_I2C3_SDA__USBOH1_USBOTG_PWR 0x054 0x300 0x000 0x7 0x0
84#define MX50_PAD_PWM1__PWM1_PWMO 0x058 0x304 0x000 0x0 0x0
85#define MX50_PAD_PWM1__GPIO6_24 0x058 0x304 0x000 0x1 0x0
86#define MX50_PAD_PWM1__USBOH1_USBOTG_OC 0x058 0x304 0x7e8 0x2 0x1
87#define MX50_PAD_PWM1__GPT_CMPOUT1 0x058 0x304 0x000 0x5 0x0
88#define MX50_PAD_PWM1__OBSERVE_MUX_OBSRV_INT_OUT2 0x058 0x304 0x000 0x6 0x0
89#define MX50_PAD_PWM1__SJC_FAIL 0x058 0x304 0x000 0x7 0x0
90#define MX50_PAD_PWM2__PWM2_PWMO 0x05c 0x308 0x000 0x0 0x0
91#define MX50_PAD_PWM2__GPIO6_25 0x05c 0x308 0x000 0x1 0x0
92#define MX50_PAD_PWM2__USBOH1_USBOTG_PWR 0x05c 0x308 0x000 0x2 0x0
93#define MX50_PAD_PWM2__GPT_CMPOUT2 0x05c 0x308 0x000 0x5 0x0
94#define MX50_PAD_PWM2__OBSERVE_MUX_OBSRV_INT_OUT3 0x05c 0x308 0x000 0x6 0x0
95#define MX50_PAD_PWM2__SRC_ANY_PU_RST 0x05c 0x308 0x000 0x7 0x0
96#define MX50_PAD_OWIRE__OWIRE_LINE 0x060 0x30c 0x000 0x0 0x0
97#define MX50_PAD_OWIRE__GPIO6_26 0x060 0x30c 0x000 0x1 0x0
98#define MX50_PAD_OWIRE__USBOH1_USBH1_OC 0x060 0x30c 0x000 0x2 0x0
99#define MX50_PAD_OWIRE__CCM_SSI_EXT1_CLK 0x060 0x30c 0x000 0x3 0x0
100#define MX50_PAD_OWIRE__EPDC_PWRIRQ 0x060 0x30c 0x000 0x4 0x0
101#define MX50_PAD_OWIRE__GPT_CMPOUT3 0x060 0x30c 0x000 0x5 0x0
102#define MX50_PAD_OWIRE__OBSERVE_MUX_OBSRV_INT_OUT4 0x060 0x30c 0x000 0x6 0x0
103#define MX50_PAD_OWIRE__SJC_JTAG_ACT 0x060 0x30c 0x000 0x7 0x0
104#define MX50_PAD_EPITO__EPIT1_EPITO 0x064 0x310 0x000 0x0 0x0
105#define MX50_PAD_EPITO__GPIO6_27 0x064 0x310 0x000 0x1 0x0
106#define MX50_PAD_EPITO__USBOH1_USBH1_PWR 0x064 0x310 0x000 0x2 0x0
107#define MX50_PAD_EPITO__CCM_SSI_EXT2_CLK 0x064 0x310 0x000 0x3 0x0
108#define MX50_PAD_EPITO__DPLLIP1_TOG_EN 0x064 0x310 0x000 0x4 0x0
109#define MX50_PAD_EPITO__GPT_CLK_IN 0x064 0x310 0x000 0x5 0x0
110#define MX50_PAD_EPITO__PMU_IRQ_B 0x064 0x310 0x000 0x6 0x0
111#define MX50_PAD_EPITO__SJC_DE_B 0x064 0x310 0x000 0x7 0x0
112#define MX50_PAD_WDOG__WDOG1_WDOG_B 0x068 0x314 0x000 0x0 0x0
113#define MX50_PAD_WDOG__GPIO6_28 0x068 0x314 0x000 0x1 0x0
114#define MX50_PAD_WDOG__WDOG1_WDOG_RST_B_DEB 0x068 0x314 0x000 0x2 0x0
115#define MX50_PAD_WDOG__CCM_XTAL32K 0x068 0x314 0x000 0x6 0x0
116#define MX50_PAD_WDOG__SJC_DONE 0x068 0x314 0x000 0x7 0x0
117#define MX50_PAD_SSI_TXFS__AUDMUX_AUD3_TXFS 0x06c 0x318 0x000 0x0 0x0
118#define MX50_PAD_SSI_TXFS__GPIO6_0 0x06c 0x318 0x000 0x1 0x0
119#define MX50_PAD_SSI_TXFS__SRC_BT_FUSE_RSV_1 0x06c 0x318 0x000 0x6 0x0
120#define MX50_PAD_SSI_TXFS__USBPHY1_DATAOUT_8 0x06c 0x318 0x000 0x7 0x0
121#define MX50_PAD_SSI_TXC__AUDMUX_AUD3_TXC 0x070 0x31c 0x000 0x0 0x0
122#define MX50_PAD_SSI_TXC__GPIO6_1 0x070 0x31c 0x000 0x1 0x0
123#define MX50_PAD_SSI_TXC__SRC_BT_FUSE_RSV_0 0x070 0x31c 0x000 0x6 0x0
124#define MX50_PAD_SSI_TXC__USBPHY1_DATAOUT_9 0x070 0x31c 0x000 0x7 0x0
125#define MX50_PAD_SSI_TXD__AUDMUX_AUD3_TXD 0x074 0x320 0x000 0x0 0x0
126#define MX50_PAD_SSI_TXD__GPIO6_2 0x074 0x320 0x000 0x1 0x0
127#define MX50_PAD_SSI_TXD__CSPI_RDY 0x074 0x320 0x6e8 0x4 0x0
128#define MX50_PAD_SSI_TXD__USBPHY1_DATAOUT_10 0x074 0x320 0x000 0x7 0x0
129#define MX50_PAD_SSI_RXD__AUDMUX_AUD3_RXD 0x078 0x324 0x000 0x0 0x0
130#define MX50_PAD_SSI_RXD__GPIO6_3 0x078 0x324 0x000 0x1 0x0
131#define MX50_PAD_SSI_RXD__CSPI_SS3 0x078 0x324 0x6f4 0x4 0x0
132#define MX50_PAD_SSI_RXD__USBPHY1_DATAOUT_11 0x078 0x324 0x000 0x7 0x0
133#define MX50_PAD_SSI_RXFS__AUDMUX_AUD3_RXFS 0x07c 0x328 0x000 0x0 0x0
134#define MX50_PAD_SSI_RXFS__GPIO6_4 0x07c 0x328 0x000 0x1 0x0
135#define MX50_PAD_SSI_RXFS__UART5_TXD_MUX 0x07c 0x328 0x7e4 0x2 0x0
136#define MX50_PAD_SSI_RXFS__EIM_WEIM_D_6 0x07c 0x328 0x804 0x3 0x0
137#define MX50_PAD_SSI_RXFS__CSPI_SS2 0x07c 0x328 0x6f0 0x4 0x0
138#define MX50_PAD_SSI_RXFS__FEC_COL 0x07c 0x328 0x770 0x5 0x0
139#define MX50_PAD_SSI_RXFS__FEC_MDC 0x07c 0x328 0x000 0x6 0x0
140#define MX50_PAD_SSI_RXFS__USBPHY1_DATAOUT_12 0x07c 0x328 0x000 0x7 0x0
141#define MX50_PAD_SSI_RXC__AUDMUX_AUD3_RXC 0x080 0x32c 0x000 0x0 0x0
142#define MX50_PAD_SSI_RXC__GPIO6_5 0x080 0x32c 0x000 0x1 0x0
143#define MX50_PAD_SSI_RXC__UART5_RXD_MUX 0x080 0x32c 0x7e4 0x2 0x1
144#define MX50_PAD_SSI_RXC__EIM_WEIM_D_7 0x080 0x32c 0x808 0x3 0x0
145#define MX50_PAD_SSI_RXC__CSPI_SS1 0x080 0x32c 0x6ec 0x4 0x0
146#define MX50_PAD_SSI_RXC__FEC_RX_CLK 0x080 0x32c 0x780 0x5 0x0
147#define MX50_PAD_SSI_RXC__FEC_MDIO 0x080 0x32c 0x774 0x6 0x1
148#define MX50_PAD_SSI_RXC__USBPHY1_DATAOUT_13 0x080 0x32c 0x000 0x7 0x0
149#define MX50_PAD_UART1_TXD__UART1_TXD_MUX 0x084 0x330 0x7c4 0x0 0x0
150#define MX50_PAD_UART1_TXD__GPIO6_6 0x084 0x330 0x000 0x1 0x0
151#define MX50_PAD_UART1_TXD__USBPHY1_DATAOUT_14 0x084 0x330 0x000 0x7 0x0
152#define MX50_PAD_UART1_RXD__UART1_RXD_MUX 0x088 0x334 0x7c4 0x0 0x1
153#define MX50_PAD_UART1_RXD__GPIO6_7 0x088 0x334 0x000 0x1 0x0
154#define MX50_PAD_UART1_RXD__USBPHY1_DATAOUT_15 0x088 0x334 0x000 0x7 0x0
155#define MX50_PAD_UART1_CTS__UART1_CTS 0x08c 0x338 0x000 0x0 0x0
156#define MX50_PAD_UART1_CTS__GPIO6_8 0x08c 0x338 0x000 0x1 0x0
157#define MX50_PAD_UART1_CTS__UART5_TXD_MUX 0x08c 0x338 0x7e4 0x2 0x2
158#define MX50_PAD_UART1_CTS__ESDHC4_DAT4 0x08c 0x338 0x760 0x4 0x0
159#define MX50_PAD_UART1_CTS__ESDHC4_CMD 0x08c 0x338 0x74c 0x5 0x0
160#define MX50_PAD_UART1_CTS__USBPHY2_DATAOUT_8 0x08c 0x338 0x000 0x7 0x0
161#define MX50_PAD_UART1_RTS__UART1_RTS 0x090 0x33c 0x7c0 0x0 0x3
162#define MX50_PAD_UART1_RTS__GPIO6_9 0x090 0x33c 0x000 0x1 0x0
163#define MX50_PAD_UART1_RTS__UART5_RXD_MUX 0x090 0x33c 0x7e4 0x2 0x3
164#define MX50_PAD_UART1_RTS__ESDHC4_DAT5 0x090 0x33c 0x764 0x4 0x0
165#define MX50_PAD_UART1_RTS__ESDHC4_CLK 0x090 0x33c 0x748 0x5 0x0
166#define MX50_PAD_UART1_RTS__USBPHY2_DATAOUT_9 0x090 0x33c 0x000 0x7 0x0
167#define MX50_PAD_UART2_TXD__UART2_TXD_MUX 0x094 0x340 0x7cc 0x0 0x2
168#define MX50_PAD_UART2_TXD__GPIO6_10 0x094 0x340 0x000 0x1 0x0
169#define MX50_PAD_UART2_TXD__ESDHC4_DAT6 0x094 0x340 0x768 0x4 0x0
170#define MX50_PAD_UART2_TXD__ESDHC4_DAT4 0x094 0x340 0x760 0x5 0x1
171#define MX50_PAD_UART2_TXD__USBPHY2_DATAOUT_10 0x094 0x340 0x000 0x7 0x0
172#define MX50_PAD_UART2_RXD__UART2_RXD_MUX 0x098 0x344 0x7cc 0x0 0x3
173#define MX50_PAD_UART2_RXD__GPIO6_11 0x098 0x344 0x000 0x1 0x0
174#define MX50_PAD_UART2_RXD__ESDHC4_DAT7 0x098 0x344 0x76c 0x4 0x0
175#define MX50_PAD_UART2_RXD__ESDHC4_DAT5 0x098 0x344 0x764 0x5 0x1
176#define MX50_PAD_UART2_RXD__USBPHY2_DATAOUT_11 0x098 0x344 0x000 0x7 0x0
177#define MX50_PAD_UART2_CTS__UART2_CTS 0x09c 0x348 0x000 0x0 0x0
178#define MX50_PAD_UART2_CTS__GPIO6_12 0x09c 0x348 0x000 0x1 0x0
179#define MX50_PAD_UART2_CTS__ESDHC4_CMD 0x09c 0x348 0x74c 0x4 0x1
180#define MX50_PAD_UART2_CTS__ESDHC4_DAT6 0x09c 0x348 0x768 0x5 0x1
181#define MX50_PAD_UART2_CTS__USBPHY2_DATAOUT_12 0x09c 0x348 0x000 0x7 0x0
182#define MX50_PAD_UART2_RTS__UART2_RTS 0x0a0 0x34c 0x7c8 0x0 0x2
183#define MX50_PAD_UART2_RTS__GPIO6_13 0x0a0 0x34c 0x000 0x1 0x0
184#define MX50_PAD_UART2_RTS__ESDHC4_CLK 0x0a0 0x34c 0x748 0x4 0x1
185#define MX50_PAD_UART2_RTS__ESDHC4_DAT7 0x0a0 0x34c 0x76c 0x5 0x1
186#define MX50_PAD_UART2_RTS__USBPHY2_DATAOUT_13 0x0a0 0x34c 0x000 0x7 0x0
187#define MX50_PAD_UART3_TXD__UART3_TXD_MUX 0x0a4 0x350 0x7d4 0x0 0x0
188#define MX50_PAD_UART3_TXD__GPIO6_14 0x0a4 0x350 0x000 0x1 0x0
189#define MX50_PAD_UART3_TXD__ESDHC1_DAT4 0x0a4 0x350 0x000 0x3 0x0
190#define MX50_PAD_UART3_TXD__ESDHC4_DAT0 0x0a4 0x350 0x000 0x4 0x0
191#define MX50_PAD_UART3_TXD__ESDHC2_WP 0x0a4 0x350 0x744 0x5 0x0
192#define MX50_PAD_UART3_TXD__EIM_WEIM_D_12 0x0a4 0x350 0x81c 0x6 0x0
193#define MX50_PAD_UART3_TXD__USBPHY2_DATAOUT_14 0x0a4 0x350 0x000 0x7 0x0
194#define MX50_PAD_UART3_RXD__UART3_RXD_MUX 0x0a8 0x354 0x7d4 0x0 0x1
195#define MX50_PAD_UART3_RXD__GPIO6_15 0x0a8 0x354 0x000 0x1 0x0
196#define MX50_PAD_UART3_RXD__ESDHC1_DAT5 0x0a8 0x354 0x000 0x3 0x0
197#define MX50_PAD_UART3_RXD__ESDHC4_DAT1 0x0a8 0x354 0x754 0x4 0x0
198#define MX50_PAD_UART3_RXD__ESDHC2_CD 0x0a8 0x354 0x740 0x5 0x0
199#define MX50_PAD_UART3_RXD__EIM_WEIM_D_13 0x0a8 0x354 0x820 0x6 0x0
200#define MX50_PAD_UART3_RXD__USBPHY2_DATAOUT_15 0x0a8 0x354 0x000 0x7 0x0
201#define MX50_PAD_UART4_TXD__UART4_TXD_MUX 0x0ac 0x358 0x7dc 0x0 0x0
202#define MX50_PAD_UART4_TXD__GPIO6_16 0x0ac 0x358 0x000 0x1 0x0
203#define MX50_PAD_UART4_TXD__UART3_CTS 0x0ac 0x358 0x7d0 0x2 0x0
204#define MX50_PAD_UART4_TXD__ESDHC1_DAT6 0x0ac 0x358 0x000 0x3 0x0
205#define MX50_PAD_UART4_TXD__ESDHC4_DAT2 0x0ac 0x358 0x758 0x4 0x0
206#define MX50_PAD_UART4_TXD__ESDHC2_LCTL 0x0ac 0x358 0x000 0x5 0x0
207#define MX50_PAD_UART4_TXD__EIM_WEIM_D_14 0x0ac 0x358 0x824 0x6 0x0
208#define MX50_PAD_UART4_RXD__UART4_RXD_MUX 0x0b0 0x35c 0x7dc 0x0 0x1
209#define MX50_PAD_UART4_RXD__GPIO6_17 0x0b0 0x35c 0x000 0x1 0x0
210#define MX50_PAD_UART4_RXD__UART3_RTS 0x0b0 0x35c 0x7d0 0x2 0x1
211#define MX50_PAD_UART4_RXD__ESDHC1_DAT7 0x0b0 0x35c 0x000 0x3 0x0
212#define MX50_PAD_UART4_RXD__ESDHC4_DAT3 0x0b0 0x35c 0x75c 0x4 0x0
213#define MX50_PAD_UART4_RXD__ESDHC1_LCTL 0x0b0 0x35c 0x000 0x5 0x0
214#define MX50_PAD_UART4_RXD__EIM_WEIM_D_15 0x0b0 0x35c 0x828 0x6 0x0
215#define MX50_PAD_CSPI_SCLK__CSPI_SCLK 0x0b4 0x360 0x000 0x0 0x0
216#define MX50_PAD_CSPI_SCLK__GPIO4_8 0x0b4 0x360 0x000 0x1 0x0
217#define MX50_PAD_CSPI_MOSI__CSPI_MOSI 0x0b8 0x364 0x000 0x0 0x0
218#define MX50_PAD_CSPI_MOSI__GPIO4_9 0x0b8 0x364 0x000 0x1 0x0
219#define MX50_PAD_CSPI_MISO__CSPI_MISO 0x0bc 0x368 0x000 0x0 0x0
220#define MX50_PAD_CSPI_MISO__GPIO4_10 0x0bc 0x368 0x000 0x1 0x0
221#define MX50_PAD_CSPI_SS0__CSPI_SS0 0x0c0 0x36c 0x000 0x0 0x0
222#define MX50_PAD_CSPI_SS0__GPIO4_11 0x0c0 0x36c 0x000 0x1 0x0
223#define MX50_PAD_ECSPI1_SCLK__ECSPI1_SCLK 0x0c4 0x370 0x000 0x0 0x0
224#define MX50_PAD_ECSPI1_SCLK__GPIO4_12 0x0c4 0x370 0x000 0x1 0x0
225#define MX50_PAD_ECSPI1_SCLK__CSPI_RDY 0x0c4 0x370 0x6e8 0x2 0x1
226#define MX50_PAD_ECSPI1_SCLK__ECSPI2_RDY 0x0c4 0x370 0x000 0x3 0x0
227#define MX50_PAD_ECSPI1_SCLK__UART3_RTS 0x0c4 0x370 0x7d0 0x4 0x2
228#define MX50_PAD_ECSPI1_SCLK__EPDC_SDCE_6 0x0c4 0x370 0x000 0x5 0x0
229#define MX50_PAD_ECSPI1_SCLK__EIM_WEIM_D_8 0x0c4 0x370 0x80c 0x7 0x0
230#define MX50_PAD_ECSPI1_MOSI__ECSPI1_MOSI 0x0c8 0x374 0x000 0x0 0x0
231#define MX50_PAD_ECSPI1_MOSI__GPIO4_13 0x0c8 0x374 0x000 0x1 0x0
232#define MX50_PAD_ECSPI1_MOSI__CSPI_SS1 0x0c8 0x374 0x6ec 0x2 0x1
233#define MX50_PAD_ECSPI1_MOSI__ECSPI2_SS1 0x0c8 0x374 0x000 0x3 0x0
234#define MX50_PAD_ECSPI1_MOSI__UART3_CTS 0x0c8 0x374 0x000 0x4 0x0
235#define MX50_PAD_ECSPI1_MOSI__EPDC_SDCE_7 0x0c8 0x374 0x000 0x5 0x0
236#define MX50_PAD_ECSPI1_MOSI__EIM_WEIM_D_9 0x0c8 0x374 0x810 0x7 0x0
237#define MX50_PAD_ECSPI1_MISO__ECSPI1_MISO 0x0cc 0x378 0x000 0x0 0x0
238#define MX50_PAD_ECSPI1_MISO__GPIO4_14 0x0cc 0x378 0x000 0x1 0x0
239#define MX50_PAD_ECSPI1_MISO__CSPI_SS2 0x0cc 0x378 0x6f0 0x2 0x1
240#define MX50_PAD_ECSPI1_MISO__ECSPI2_SS2 0x0cc 0x378 0x000 0x3 0x0
241#define MX50_PAD_ECSPI1_MISO__UART4_RTS 0x0cc 0x378 0x7d8 0x4 0x0
242#define MX50_PAD_ECSPI1_MISO__EPDC_SDCE_8 0x0cc 0x378 0x000 0x5 0x0
243#define MX50_PAD_ECSPI1_MISO__EIM_WEIM_D_10 0x0cc 0x378 0x814 0x7 0x0
244#define MX50_PAD_ECSPI1_SS0__ECSPI1_SS0 0x0d0 0x37c 0x000 0x0 0x0
245#define MX50_PAD_ECSPI1_SS0__GPIO4_15 0x0d0 0x37c 0x000 0x1 0x0
246#define MX50_PAD_ECSPI1_SS0__CSPI_SS3 0x0d0 0x37c 0x6f4 0x2 0x1
247#define MX50_PAD_ECSPI1_SS0__ECSPI2_SS3 0x0d0 0x37c 0x000 0x3 0x0
248#define MX50_PAD_ECSPI1_SS0__UART4_CTS 0x0d0 0x37c 0x000 0x4 0x0
249#define MX50_PAD_ECSPI1_SS0__EPDC_SDCE_9 0x0d0 0x37c 0x000 0x5 0x0
250#define MX50_PAD_ECSPI1_SS0__EIM_WEIM_D_11 0x0d0 0x37c 0x818 0x7 0x0
251#define MX50_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x0d4 0x380 0x000 0x0 0x0
252#define MX50_PAD_ECSPI2_SCLK__GPIO4_16 0x0d4 0x380 0x000 0x1 0x0
253#define MX50_PAD_ECSPI2_SCLK__ELCDIF_WR_RWN 0x0d4 0x380 0x000 0x2 0x0
254#define MX50_PAD_ECSPI2_SCLK__ECSPI1_RDY 0x0d4 0x380 0x000 0x3 0x0
255#define MX50_PAD_ECSPI2_SCLK__UART5_RTS 0x0d4 0x380 0x7e0 0x4 0x0
256#define MX50_PAD_ECSPI2_SCLK__ELCDIF_DOTCLK 0x0d4 0x380 0x000 0x5 0x0
257#define MX50_PAD_ECSPI2_SCLK__EIM_NANDF_CEN_4 0x0d4 0x380 0x000 0x6 0x0
258#define MX50_PAD_ECSPI2_SCLK__EIM_WEIM_D_8 0x0d4 0x380 0x80c 0x7 0x1
259#define MX50_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x0d8 0x384 0x000 0x0 0x0
260#define MX50_PAD_ECSPI2_MOSI__GPIO4_17 0x0d8 0x384 0x000 0x1 0x0
261#define MX50_PAD_ECSPI2_MOSI__ELCDIF_RE_E 0x0d8 0x384 0x000 0x2 0x0
262#define MX50_PAD_ECSPI2_MOSI__ECSPI1_SS1 0x0d8 0x384 0x000 0x3 0x0
263#define MX50_PAD_ECSPI2_MOSI__UART5_CTS 0x0d8 0x384 0x7e0 0x4 0x1
264#define MX50_PAD_ECSPI2_MOSI__ELCDIF_ENABLE 0x0d8 0x384 0x000 0x5 0x0
265#define MX50_PAD_ECSPI2_MOSI__EIM_NANDF_CEN_5 0x0d8 0x384 0x000 0x6 0x0
266#define MX50_PAD_ECSPI2_MOSI__EIM_WEIM_D_9 0x0d8 0x384 0x810 0x7 0x1
267#define MX50_PAD_ECSPI2_MISO__ECSPI2_MISO 0x0dc 0x388 0x000 0x0 0x0
268#define MX50_PAD_ECSPI2_MISO__GPIO4_18 0x0dc 0x388 0x000 0x1 0x0
269#define MX50_PAD_ECSPI2_MISO__ELCDIF_RS 0x0dc 0x388 0x000 0x2 0x0
270#define MX50_PAD_ECSPI2_MISO__ECSPI1_SS2 0x0dc 0x388 0x000 0x3 0x0
271#define MX50_PAD_ECSPI2_MISO__UART5_TXD_MUX 0x0dc 0x388 0x7e4 0x4 0x4
272#define MX50_PAD_ECSPI2_MISO__ELCDIF_VSYNC 0x0dc 0x388 0x73c 0x5 0x0
273#define MX50_PAD_ECSPI2_MISO__EIM_NANDF_CEN_6 0x0dc 0x388 0x000 0x6 0x0
274#define MX50_PAD_ECSPI2_MISO__EIM_WEIM_D_10 0x0dc 0x388 0x814 0x7 0x1
275#define MX50_PAD_ECSPI2_SS0__ECSPI2_SS0 0x0e0 0x38c 0x000 0x0 0x0
276#define MX50_PAD_ECSPI2_SS0__GPIO4_19 0x0e0 0x38c 0x000 0x1 0x0
277#define MX50_PAD_ECSPI2_SS0__ELCDIF_CS 0x0e0 0x38c 0x000 0x2 0x0
278#define MX50_PAD_ECSPI2_SS0__ECSPI2_SS3 0x0e0 0x38c 0x000 0x3 0x0
279#define MX50_PAD_ECSPI2_SS0__UART5_RXD_MUX 0x0e0 0x38c 0x7e4 0x4 0x5
280#define MX50_PAD_ECSPI2_SS0__ELCDIF_HSYNC 0x0e0 0x38c 0x6f8 0x5 0x0
281#define MX50_PAD_ECSPI2_SS0__EIM_NANDF_CEN_7 0x0e0 0x38c 0x000 0x6 0x0
282#define MX50_PAD_ECSPI2_SS0__EIM_WEIM_D_11 0x0e0 0x38c 0x818 0x7 0x1
283#define MX50_PAD_SD1_CLK__ESDHC1_CLK 0x0e4 0x390 0x000 0x0 0x0
284#define MX50_PAD_SD1_CLK__GPIO5_0 0x0e4 0x390 0x000 0x1 0x0
285#define MX50_PAD_SD1_CLK__CCM_CLKO 0x0e4 0x390 0x000 0x7 0x0
286#define MX50_PAD_SD1_CMD__ESDHC1_CMD 0x0e8 0x394 0x000 0x0 0x0
287#define MX50_PAD_SD1_CMD__GPIO5_1 0x0e8 0x394 0x000 0x1 0x0
288#define MX50_PAD_SD1_CMD__CCM_CLKO2 0x0e8 0x394 0x000 0x7 0x0
289#define MX50_PAD_SD1_D0__ESDHC1_DAT0 0x0ec 0x398 0x000 0x0 0x0
290#define MX50_PAD_SD1_D0__GPIO5_2 0x0ec 0x398 0x000 0x1 0x0
291#define MX50_PAD_SD1_D0__CCM_PLL1_BYP 0x0ec 0x398 0x6dc 0x7 0x0
292#define MX50_PAD_SD1_D1__ESDHC1_DAT1 0x0f0 0x39c 0x000 0x0 0x0
293#define MX50_PAD_SD1_D1__GPIO5_3 0x0f0 0x39c 0x000 0x1 0x0
294#define MX50_PAD_SD1_D1__CCM_PLL2_BYP 0x0f0 0x39c 0x000 0x7 0x0
295#define MX50_PAD_SD1_D2__ESDHC1_DAT2 0x0f4 0x3a0 0x000 0x0 0x0
296#define MX50_PAD_SD1_D2__GPIO5_4 0x0f4 0x3a0 0x000 0x1 0x0
297#define MX50_PAD_SD1_D2__CCM_PLL3_BYP 0x0f4 0x3a0 0x6e4 0x7 0x0
298#define MX50_PAD_SD1_D3__ESDHC1_DAT3 0x0f8 0x3a4 0x000 0x0 0x0
299#define MX50_PAD_SD1_D3__GPIO5_5 0x0f8 0x3a4 0x000 0x1 0x0
300#define MX50_PAD_SD2_CLK__ESDHC2_CLK 0x0fc 0x3a8 0x000 0x0 0x0
301#define MX50_PAD_SD2_CLK__GPIO5_6 0x0fc 0x3a8 0x000 0x1 0x0
302#define MX50_PAD_SD2_CLK__MSHC_SCLK 0x0fc 0x3a8 0x000 0x2 0x0
303#define MX50_PAD_SD2_CMD__ESDHC2_CMD 0x100 0x3ac 0x000 0x0 0x0
304#define MX50_PAD_SD2_CMD__GPIO5_7 0x100 0x3ac 0x000 0x1 0x0
305#define MX50_PAD_SD2_CMD__MSHC_BS 0x100 0x3ac 0x000 0x2 0x0
306#define MX50_PAD_SD2_D0__ESDHC2_DAT0 0x104 0x3b0 0x000 0x0 0x0
307#define MX50_PAD_SD2_D0__GPIO5_8 0x104 0x3b0 0x000 0x1 0x0
308#define MX50_PAD_SD2_D0__MSHC_DATA_0 0x104 0x3b0 0x000 0x2 0x0
309#define MX50_PAD_SD2_D0__KPP_COL_4 0x104 0x3b0 0x790 0x3 0x0
310#define MX50_PAD_SD2_D1__ESDHC2_DAT1 0x108 0x3b4 0x000 0x0 0x0
311#define MX50_PAD_SD2_D1__GPIO5_9 0x108 0x3b4 0x000 0x1 0x0
312#define MX50_PAD_SD2_D1__MSHC_DATA_1 0x108 0x3b4 0x000 0x2 0x0
313#define MX50_PAD_SD2_D1__KPP_ROW_4 0x108 0x3b4 0x7a0 0x3 0x0
314#define MX50_PAD_SD2_D2__ESDHC2_DAT2 0x10c 0x3b8 0x000 0x0 0x0
315#define MX50_PAD_SD2_D2__GPIO5_10 0x10c 0x3b8 0x000 0x1 0x0
316#define MX50_PAD_SD2_D2__MSHC_DATA_2 0x10c 0x3b8 0x000 0x2 0x0
317#define MX50_PAD_SD2_D2__KPP_COL_5 0x10c 0x3b8 0x794 0x3 0x0
318#define MX50_PAD_SD2_D3__ESDHC2_DAT3 0x110 0x3bc 0x000 0x0 0x0
319#define MX50_PAD_SD2_D3__GPIO5_11 0x110 0x3bc 0x000 0x1 0x0
320#define MX50_PAD_SD2_D3__MSHC_DATA_3 0x110 0x3bc 0x000 0x2 0x0
321#define MX50_PAD_SD2_D3__KPP_ROW_5 0x110 0x3bc 0x7a4 0x3 0x0
322#define MX50_PAD_SD2_D4__ESDHC2_DAT4 0x114 0x3c0 0x000 0x0 0x0
323#define MX50_PAD_SD2_D4__GPIO5_12 0x114 0x3c0 0x000 0x1 0x0
324#define MX50_PAD_SD2_D4__AUDMUX_AUD4_RXFS 0x114 0x3c0 0x6d0 0x2 0x0
325#define MX50_PAD_SD2_D4__KPP_COL_6 0x114 0x3c0 0x798 0x3 0x0
326#define MX50_PAD_SD2_D4__EIM_WEIM_D_0 0x114 0x3c0 0x7ec 0x4 0x0
327#define MX50_PAD_SD2_D4__CCM_CCM_OUT_0 0x114 0x3c0 0x000 0x7 0x0
328#define MX50_PAD_SD2_D5__ESDHC2_DAT5 0x118 0x3c4 0x000 0x0 0x0
329#define MX50_PAD_SD2_D5__GPIO5_13 0x118 0x3c4 0x000 0x1 0x0
330#define MX50_PAD_SD2_D5__AUDMUX_AUD4_RXC 0x118 0x3c4 0x6cc 0x2 0x0
331#define MX50_PAD_SD2_D5__KPP_ROW_6 0x118 0x3c4 0x7a8 0x3 0x0
332#define MX50_PAD_SD2_D5__EIM_WEIM_D_1 0x118 0x3c4 0x7f0 0x4 0x0
333#define MX50_PAD_SD2_D5__CCM_CCM_OUT_1 0x118 0x3c4 0x000 0x7 0x0
334#define MX50_PAD_SD2_D6__ESDHC2_DAT6 0x11c 0x3c8 0x000 0x0 0x0
335#define MX50_PAD_SD2_D6__GPIO5_14 0x11c 0x3c8 0x000 0x1 0x0
336#define MX50_PAD_SD2_D6__AUDMUX_AUD4_RXD 0x11c 0x3c8 0x6c4 0x2 0x0
337#define MX50_PAD_SD2_D6__KPP_COL_7 0x11c 0x3c8 0x79c 0x3 0x0
338#define MX50_PAD_SD2_D6__EIM_WEIM_D_2 0x11c 0x3c8 0x7f4 0x4 0x0
339#define MX50_PAD_SD2_D6__CCM_CCM_OUT_2 0x11c 0x3c8 0x000 0x7 0x0
340#define MX50_PAD_SD2_D7__ESDHC2_DAT7 0x120 0x3cc 0x000 0x0 0x0
341#define MX50_PAD_SD2_D7__GPIO5_15 0x120 0x3cc 0x000 0x1 0x0
342#define MX50_PAD_SD2_D7__AUDMUX_AUD4_TXFS 0x120 0x3cc 0x6d8 0x2 0x0
343#define MX50_PAD_SD2_D7__KPP_ROW_7 0x120 0x3cc 0x7ac 0x3 0x0
344#define MX50_PAD_SD2_D7__EIM_WEIM_D_3 0x120 0x3cc 0x7f8 0x4 0x0
345#define MX50_PAD_SD2_D7__CCM_STOP 0x120 0x3cc 0x000 0x7 0x0
346#define MX50_PAD_SD2_WP__ESDHC2_WP 0x124 0x3d0 0x744 0x0 0x1
347#define MX50_PAD_SD2_WP__GPIO5_16 0x124 0x3d0 0x000 0x1 0x0
348#define MX50_PAD_SD2_WP__AUDMUX_AUD4_TXD 0x124 0x3d0 0x6c8 0x2 0x0
349#define MX50_PAD_SD2_WP__EIM_WEIM_D_4 0x124 0x3d0 0x7fc 0x4 0x0
350#define MX50_PAD_SD2_WP__CCM_WAIT 0x124 0x3d0 0x000 0x7 0x0
351#define MX50_PAD_SD2_CD__ESDHC2_CD 0x128 0x3d4 0x740 0x0 0x1
352#define MX50_PAD_SD2_CD__GPIO5_17 0x128 0x3d4 0x000 0x1 0x0
353#define MX50_PAD_SD2_CD__AUDMUX_AUD4_TXC 0x128 0x3d4 0x6d4 0x2 0x0
354#define MX50_PAD_SD2_CD__EIM_WEIM_D_5 0x128 0x3d4 0x800 0x4 0x0
355#define MX50_PAD_SD2_CD__CCM_REF_EN_B 0x128 0x3d4 0x000 0x7 0x0
356#define MX50_PAD_DISP_D0__ELCDIF_DAT_0 0x12c 0x40c 0x6fc 0x0 0x0
357#define MX50_PAD_DISP_D0__GPIO2_0 0x12c 0x40c 0x000 0x1 0x0
358#define MX50_PAD_DISP_D0__FEC_TX_CLK 0x12c 0x40c 0x78c 0x2 0x0
359#define MX50_PAD_DISP_D0__EIM_WEIM_A_16 0x12c 0x40c 0x000 0x3 0x0
360#define MX50_PAD_DISP_D0__SDMA_DEBUG_PC_0 0x12c 0x40c 0x000 0x6 0x0
361#define MX50_PAD_DISP_D0__USBPHY1_VSTATUS_0 0x12c 0x40c 0x000 0x7 0x0
362#define MX50_PAD_DISP_D1__ELCDIF_DAT_1 0x130 0x410 0x700 0x0 0x0
363#define MX50_PAD_DISP_D1__GPIO2_1 0x130 0x410 0x000 0x1 0x0
364#define MX50_PAD_DISP_D1__FEC_RX_ERR 0x130 0x410 0x788 0x2 0x0
365#define MX50_PAD_DISP_D1__EIM_WEIM_A_17 0x130 0x410 0x000 0x3 0x0
366#define MX50_PAD_DISP_D1__SDMA_DEBUG_PC_1 0x130 0x410 0x000 0x6 0x0
367#define MX50_PAD_DISP_D1__USBPHY1_VSTATUS_1 0x130 0x410 0x000 0x7 0x0
368#define MX50_PAD_DISP_D2__ELCDIF_DAT_2 0x134 0x414 0x704 0x0 0x0
369#define MX50_PAD_DISP_D2__GPIO2_2 0x134 0x414 0x000 0x1 0x0
370#define MX50_PAD_DISP_D2__FEC_RX_DV 0x134 0x414 0x784 0x2 0x0
371#define MX50_PAD_DISP_D2__EIM_WEIM_A_18 0x134 0x414 0x000 0x3 0x0
372#define MX50_PAD_DISP_D2__SDMA_DEBUG_PC_2 0x134 0x414 0x000 0x6 0x0
373#define MX50_PAD_DISP_D2__USBPHY1_VSTATUS_2 0x134 0x414 0x000 0x7 0x0
374#define MX50_PAD_DISP_D3__ELCDIF_DAT_3 0x138 0x418 0x708 0x0 0x0
375#define MX50_PAD_DISP_D3__GPIO2_3 0x138 0x418 0x000 0x1 0x0
376#define MX50_PAD_DISP_D3__FEC_RDATA_1 0x138 0x418 0x77c 0x2 0x0
377#define MX50_PAD_DISP_D3__EIM_WEIM_A_19 0x138 0x418 0x000 0x3 0x0
378#define MX50_PAD_DISP_D3__FEC_COL 0x138 0x418 0x770 0x4 0x1
379#define MX50_PAD_DISP_D3__SDMA_DEBUG_PC_3 0x138 0x418 0x000 0x6 0x0
380#define MX50_PAD_DISP_D3__USBPHY1_VSTATUS_3 0x138 0x418 0x000 0x7 0x0
381#define MX50_PAD_DISP_D4__ELCDIF_DAT_4 0x13c 0x41c 0x70c 0x0 0x0
382#define MX50_PAD_DISP_D4__GPIO2_4 0x13c 0x41c 0x000 0x1 0x0
383#define MX50_PAD_DISP_D4__FEC_RDATA_0 0x13c 0x41c 0x778 0x2 0x0
384#define MX50_PAD_DISP_D4__EIM_WEIM_A_20 0x13c 0x41c 0x000 0x3 0x0
385#define MX50_PAD_DISP_D4__SDMA_DEBUG_PC_4 0x13c 0x41c 0x000 0x6 0x0
386#define MX50_PAD_DISP_D4__USBPHY1_VSTATUS_4 0x13c 0x41c 0x000 0x7 0x0
387#define MX50_PAD_DISP_D5__ELCDIF_DAT_5 0x140 0x420 0x710 0x0 0x0
388#define MX50_PAD_DISP_D5__GPIO2_5 0x140 0x420 0x000 0x1 0x0
389#define MX50_PAD_DISP_D5__FEC_TX_EN 0x140 0x420 0x000 0x2 0x0
390#define MX50_PAD_DISP_D5__EIM_WEIM_A_21 0x140 0x420 0x000 0x3 0x0
391#define MX50_PAD_DISP_D5__SDMA_DEBUG_PC_5 0x140 0x420 0x000 0x6 0x0
392#define MX50_PAD_DISP_D5__USBPHY1_VSTATUS_5 0x140 0x420 0x000 0x7 0x0
393#define MX50_PAD_DISP_D6__ELCDIF_DAT_6 0x144 0x424 0x714 0x0 0x0
394#define MX50_PAD_DISP_D6__GPIO2_6 0x144 0x424 0x000 0x1 0x0
395#define MX50_PAD_DISP_D6__FEC_TDATA_1 0x144 0x424 0x000 0x2 0x0
396#define MX50_PAD_DISP_D6__EIM_WEIM_A_22 0x144 0x424 0x000 0x3 0x0
397#define MX50_PAD_DISP_D6__FEC_RX_CLK 0x144 0x424 0x780 0x4 0x1
398#define MX50_PAD_DISP_D6__SDMA_DEBUG_PC_6 0x144 0x424 0x000 0x6 0x0
399#define MX50_PAD_DISP_D6__USBPHY1_VSTATUS_6 0x144 0x424 0x000 0x7 0x0
400#define MX50_PAD_DISP_D7__ELCDIF_DAT_7 0x148 0x428 0x718 0x0 0x0
401#define MX50_PAD_DISP_D7__GPIO2_7 0x148 0x428 0x000 0x1 0x0
402#define MX50_PAD_DISP_D7__FEC_TDATA_0 0x148 0x428 0x000 0x2 0x0
403#define MX50_PAD_DISP_D7__EIM_WEIM_A_23 0x148 0x428 0x000 0x3 0x0
404#define MX50_PAD_DISP_D7__SDMA_DEBUG_PC_7 0x148 0x428 0x000 0x6 0x0
405#define MX50_PAD_DISP_D7__USBPHY1_VSTATUS_7 0x148 0x428 0x000 0x7 0x0
406#define MX50_PAD_DISP_WR__ELCDIF_WR_RWN 0x14c 0x42c 0x000 0x0 0x0
407#define MX50_PAD_DISP_WR__GPIO2_16 0x14c 0x42c 0x000 0x1 0x0
408#define MX50_PAD_DISP_WR__ELCDIF_DOTCLK 0x14c 0x42c 0x000 0x2 0x0
409#define MX50_PAD_DISP_WR__EIM_WEIM_A_24 0x14c 0x42c 0x000 0x3 0x0
410#define MX50_PAD_DISP_WR__SDMA_DEBUG_PC_8 0x14c 0x42c 0x000 0x6 0x0
411#define MX50_PAD_DISP_WR__USBPHY1_AVALID 0x14c 0x42c 0x000 0x7 0x0
412#define MX50_PAD_DISP_RD__ELCDIF_RD_E 0x150 0x430 0x000 0x0 0x0
413#define MX50_PAD_DISP_RD__GPIO2_19 0x150 0x430 0x000 0x1 0x0
414#define MX50_PAD_DISP_RD__ELCDIF_ENABLE 0x150 0x430 0x000 0x2 0x0
415#define MX50_PAD_DISP_RD__EIM_WEIM_A_25 0x150 0x430 0x000 0x3 0x0
416#define MX50_PAD_DISP_RD__SDMA_DEBUG_PC_9 0x150 0x430 0x000 0x6 0x0
417#define MX50_PAD_DISP_RD__USBPHY1_BVALID 0x150 0x430 0x000 0x7 0x0
418#define MX50_PAD_DISP_RS__ELCDIF_RS 0x154 0x434 0x000 0x0 0x0
419#define MX50_PAD_DISP_RS__GPIO2_17 0x154 0x434 0x000 0x1 0x0
420#define MX50_PAD_DISP_RS__ELCDIF_VSYNC 0x154 0x434 0x73c 0x2 0x1
421#define MX50_PAD_DISP_RS__EIM_WEIM_A_26 0x154 0x434 0x000 0x3 0x0
422#define MX50_PAD_DISP_RS__SDMA_DEBUG_PC_10 0x154 0x434 0x000 0x6 0x0
423#define MX50_PAD_DISP_RS__USBPHY1_ENDSESSION 0x154 0x434 0x000 0x7 0x0
424#define MX50_PAD_DISP_CS__ELCDIF_CS 0x158 0x438 0x000 0x0 0x0
425#define MX50_PAD_DISP_CS__GPIO2_21 0x158 0x438 0x000 0x1 0x0
426#define MX50_PAD_DISP_CS__ELCDIF_HSYNC 0x158 0x438 0x6f8 0x2 0x1
427#define MX50_PAD_DISP_CS__EIM_WEIM_A_27 0x158 0x438 0x000 0x3 0x0
428#define MX50_PAD_DISP_CS__EIM_WEIM_CS_3 0x158 0x438 0x000 0x4 0x0
429#define MX50_PAD_DISP_CS__SDMA_DEBUG_PC_11 0x158 0x438 0x000 0x6 0x0
430#define MX50_PAD_DISP_CS__USBPHY1_IDDIG 0x158 0x438 0x000 0x7 0x0
431#define MX50_PAD_DISP_BUSY__ELCDIF_BUSY 0x15c 0x43c 0x6f8 0x0 0x2
432#define MX50_PAD_DISP_BUSY__GPIO2_18 0x15c 0x43c 0x000 0x1 0x0
433#define MX50_PAD_DISP_BUSY__EIM_WEIM_CS_3 0x15c 0x43c 0x000 0x4 0x0
434#define MX50_PAD_DISP_BUSY__SDMA_DEBUG_PC_12 0x15c 0x43c 0x000 0x6 0x0
435#define MX50_PAD_DISP_BUSY__USBPHY2_HOSTDISCONNECT 0x15c 0x43c 0x000 0x7 0x0
436#define MX50_PAD_DISP_RESET__ELCDIF_RESET 0x160 0x440 0x000 0x0 0x0
437#define MX50_PAD_DISP_RESET__GPIO2_20 0x160 0x440 0x000 0x1 0x0
438#define MX50_PAD_DISP_RESET__EIM_WEIM_CS_3 0x160 0x440 0x000 0x4 0x0
439#define MX50_PAD_DISP_RESET__SDMA_DEBUG_PC_13 0x160 0x440 0x000 0x6 0x0
440#define MX50_PAD_DISP_RESET__USBPHY2_BISTOK 0x160 0x440 0x000 0x7 0x0
441#define MX50_PAD_SD3_CMD__ESDHC3_CMD 0x164 0x444 0x000 0x0 0x0
442#define MX50_PAD_SD3_CMD__GPIO5_18 0x164 0x444 0x000 0x1 0x0
443#define MX50_PAD_SD3_CMD__EIM_NANDF_WRN 0x164 0x444 0x000 0x2 0x0
444#define MX50_PAD_SD3_CMD__SSP_CMD 0x164 0x444 0x000 0x3 0x0
445#define MX50_PAD_SD3_CLK__ESDHC3_CLK 0x168 0x448 0x000 0x0 0x0
446#define MX50_PAD_SD3_CLK__GPIO5_19 0x168 0x448 0x000 0x1 0x0
447#define MX50_PAD_SD3_CLK__EIM_NANDF_RDN 0x168 0x448 0x000 0x2 0x0
448#define MX50_PAD_SD3_CLK__SSP_CLK 0x168 0x448 0x000 0x3 0x0
449#define MX50_PAD_SD3_D0__ESDHC3_DAT0 0x16c 0x44c 0x000 0x0 0x0
450#define MX50_PAD_SD3_D0__GPIO5_20 0x16c 0x44c 0x000 0x1 0x0
451#define MX50_PAD_SD3_D0__EIM_NANDF_D_4 0x16c 0x44c 0x000 0x2 0x0
452#define MX50_PAD_SD3_D0__SSP_D0 0x16c 0x44c 0x000 0x3 0x0
453#define MX50_PAD_SD3_D0__CCM_PLL1_BYP 0x16c 0x44c 0x6dc 0x7 0x1
454#define MX50_PAD_SD3_D1__ESDHC3_DAT1 0x170 0x450 0x000 0x0 0x0
455#define MX50_PAD_SD3_D1__GPIO5_21 0x170 0x450 0x000 0x1 0x0
456#define MX50_PAD_SD3_D1__EIM_NANDF_D_5 0x170 0x450 0x000 0x2 0x0
457#define MX50_PAD_SD3_D1__SSP_D1 0x170 0x450 0x000 0x3 0x0
458#define MX50_PAD_SD3_D1__CCM_PLL2_BYP 0x170 0x450 0x000 0x7 0x0
459#define MX50_PAD_SD3_D2__ESDHC3_DAT2 0x174 0x454 0x000 0x0 0x0
460#define MX50_PAD_SD3_D2__GPIO5_22 0x174 0x454 0x000 0x1 0x0
461#define MX50_PAD_SD3_D2__EIM_NANDF_D_6 0x174 0x454 0x000 0x2 0x0
462#define MX50_PAD_SD3_D2__SSP_D2 0x174 0x454 0x000 0x3 0x0
463#define MX50_PAD_SD3_D2__CCM_PLL3_BYP 0x174 0x454 0x6e4 0x7 0x1
464#define MX50_PAD_SD3_D3__ESDHC3_DAT3 0x178 0x458 0x000 0x0 0x0
465#define MX50_PAD_SD3_D3__GPIO5_23 0x178 0x458 0x000 0x1 0x0
466#define MX50_PAD_SD3_D3__EIM_NANDF_D_7 0x178 0x458 0x000 0x2 0x0
467#define MX50_PAD_SD3_D3__SSP_D3 0x178 0x458 0x000 0x3 0x0
468#define MX50_PAD_SD3_D4__ESDHC3_DAT4 0x17c 0x45c 0x000 0x0 0x0
469#define MX50_PAD_SD3_D4__GPIO5_24 0x17c 0x45c 0x000 0x1 0x0
470#define MX50_PAD_SD3_D4__EIM_NANDF_D_0 0x17c 0x45c 0x000 0x2 0x0
471#define MX50_PAD_SD3_D4__SSP_D4 0x17c 0x45c 0x000 0x3 0x0
472#define MX50_PAD_SD3_D5__ESDHC3_DAT5 0x180 0x460 0x000 0x0 0x0
473#define MX50_PAD_SD3_D5__GPIO5_25 0x180 0x460 0x000 0x1 0x0
474#define MX50_PAD_SD3_D5__EIM_NANDF_D_1 0x180 0x460 0x000 0x2 0x0
475#define MX50_PAD_SD3_D5__SSP_D5 0x180 0x460 0x000 0x3 0x0
476#define MX50_PAD_SD3_D6__ESDHC3_DAT6 0x184 0x464 0x000 0x0 0x0
477#define MX50_PAD_SD3_D6__GPIO5_26 0x184 0x464 0x000 0x1 0x0
478#define MX50_PAD_SD3_D6__EIM_NANDF_D_2 0x184 0x464 0x000 0x2 0x0
479#define MX50_PAD_SD3_D6__SSP_D6 0x184 0x464 0x000 0x3 0x0
480#define MX50_PAD_SD3_D7__ESDHC3_DAT7 0x188 0x468 0x000 0x0 0x0
481#define MX50_PAD_SD3_D7__GPIO5_27 0x188 0x468 0x000 0x1 0x0
482#define MX50_PAD_SD3_D7__EIM_NANDF_D_3 0x188 0x468 0x000 0x2 0x0
483#define MX50_PAD_SD3_D7__SSP_D7 0x188 0x468 0x000 0x3 0x0
484#define MX50_PAD_SD3_WP__ESDHC3_WP 0x18c 0x46C 0x000 0x0 0x0
485#define MX50_PAD_SD3_WP__GPIO5_28 0x18c 0x46C 0x000 0x1 0x0
486#define MX50_PAD_SD3_WP__EIM_NANDF_RESETN 0x18c 0x46C 0x000 0x2 0x0
487#define MX50_PAD_SD3_WP__SSP_CD 0x18c 0x46C 0x000 0x3 0x0
488#define MX50_PAD_SD3_WP__ESDHC4_LCTL 0x18c 0x46C 0x000 0x4 0x0
489#define MX50_PAD_SD3_WP__EIM_WEIM_CS_3 0x18c 0x46C 0x000 0x5 0x0
490#define MX50_PAD_DISP_D8__ELCDIF_DAT_8 0x190 0x470 0x71c 0x0 0x0
491#define MX50_PAD_DISP_D8__GPIO2_8 0x190 0x470 0x000 0x1 0x0
492#define MX50_PAD_DISP_D8__EIM_NANDF_CLE 0x190 0x470 0x000 0x2 0x0
493#define MX50_PAD_DISP_D8__ESDHC1_LCTL 0x190 0x470 0x000 0x3 0x0
494#define MX50_PAD_DISP_D8__ESDHC4_CMD 0x190 0x470 0x74c 0x4 0x2
495#define MX50_PAD_DISP_D8__KPP_COL_4 0x190 0x470 0x790 0x5 0x1
496#define MX50_PAD_DISP_D8__FEC_TX_CLK 0x190 0x470 0x78c 0x6 0x1
497#define MX50_PAD_DISP_D8__USBPHY1_DATAOUT_0 0x190 0x470 0x000 0x7 0x0
498#define MX50_PAD_DISP_D9__ELCDIF_DAT_9 0x194 0x474 0x720 0x0 0x0
499#define MX50_PAD_DISP_D9__GPIO2_9 0x194 0x474 0x000 0x1 0x0
500#define MX50_PAD_DISP_D9__EIM_NANDF_ALE 0x194 0x474 0x000 0x2 0x0
501#define MX50_PAD_DISP_D9__ESDHC2_LCTL 0x194 0x474 0x000 0x3 0x0
502#define MX50_PAD_DISP_D9__ESDHC4_CLK 0x194 0x474 0x748 0x4 0x2
503#define MX50_PAD_DISP_D9__KPP_ROW_4 0x194 0x474 0x7a0 0x5 0x1
504#define MX50_PAD_DISP_D9__FEC_RX_ER 0x194 0x474 0x788 0x6 0x1
505#define MX50_PAD_DISP_D9__USBPHY1_DATAOUT_1 0x194 0x474 0x000 0x7 0x0
506#define MX50_PAD_DISP_D10__ELCDIF_DAT_10 0x198 0x478 0x724 0x0 0x0
507#define MX50_PAD_DISP_D10__GPIO2_10 0x198 0x478 0x000 0x1 0x0
508#define MX50_PAD_DISP_D10__EIM_NANDF_CEN_0 0x198 0x478 0x000 0x2 0x0
509#define MX50_PAD_DISP_D10__ESDHC3_LCTL 0x198 0x478 0x000 0x3 0x0
510#define MX50_PAD_DISP_D10__ESDHC4_DAT0 0x198 0x478 0x000 0x4 0x0
511#define MX50_PAD_DISP_D10__KPP_COL_5 0x198 0x478 0x794 0x5 0x1
512#define MX50_PAD_DISP_D10__FEC_RX_DV 0x198 0x478 0x784 0x6 0x1
513#define MX50_PAD_DISP_D10__USBPHY1_DATAOUT_2 0x198 0x478 0x000 0x7 0x0
514#define MX50_PAD_DISP_D11__ELCDIF_DAT_11 0x19c 0x47c 0x728 0x0 0x0
515#define MX50_PAD_DISP_D11__GPIO2_11 0x19c 0x47c 0x000 0x1 0x0
516#define MX50_PAD_DISP_D11__EIM_NANDF_CEN_1 0x19c 0x47c 0x000 0x2 0x0
517#define MX50_PAD_DISP_D11__ESDHC4_DAT1 0x19c 0x47c 0x754 0x4 0x1
518#define MX50_PAD_DISP_D11__KPP_ROW_5 0x19c 0x47c 0x7a4 0x5 0x1
519#define MX50_PAD_DISP_D11__FEC_RDATA_1 0x19c 0x47c 0x77c 0x6 0x1
520#define MX50_PAD_DISP_D11__USBPHY1_DATAOUT_3 0x19c 0x47c 0x000 0x7 0x0
521#define MX50_PAD_DISP_D12__ELCDIF_DAT_12 0x1a0 0x480 0x72c 0x0 0x0
522#define MX50_PAD_DISP_D12__GPIO2_12 0x1a0 0x480 0x000 0x1 0x0
523#define MX50_PAD_DISP_D12__EIM_NANDF_CEN_2 0x1a0 0x480 0x000 0x2 0x0
524#define MX50_PAD_DISP_D12__ESDHC1_CD 0x1a0 0x480 0x000 0x3 0x0
525#define MX50_PAD_DISP_D12__ESDHC4_DAT2 0x1a0 0x480 0x758 0x4 0x1
526#define MX50_PAD_DISP_D12__KPP_COL_6 0x1a0 0x480 0x798 0x5 0x1
527#define MX50_PAD_DISP_D12__FEC_RDATA_0 0x1a0 0x480 0x778 0x6 0x1
528#define MX50_PAD_DISP_D12__USBPHY1_DATAOUT_4 0x1a0 0x480 0x000 0x7 0x0
529#define MX50_PAD_DISP_D13__ELCDIF_DAT_13 0x1a4 0x484 0x730 0x0 0x0
530#define MX50_PAD_DISP_D13__GPIO2_13 0x1a4 0x484 0x000 0x1 0x0
531#define MX50_PAD_DISP_D13__EIM_NANDF_CEN_3 0x1a4 0x484 0x000 0x2 0x0
532#define MX50_PAD_DISP_D13__ESDHC3_CD 0x1a4 0x484 0x000 0x3 0x0
533#define MX50_PAD_DISP_D13__ESDHC4_DAT3 0x1a4 0x484 0x75c 0x4 0x1
534#define MX50_PAD_DISP_D13__KPP_ROW_6 0x1a4 0x484 0x7a8 0x5 0x1
535#define MX50_PAD_DISP_D13__FEC_TX_EN 0x1a4 0x484 0x000 0x6 0x0
536#define MX50_PAD_DISP_D13__USBPHY1_DATAOUT_5 0x1a4 0x484 0x000 0x7 0x0
537#define MX50_PAD_DISP_D14__ELCDIF_DAT_14 0x1a8 0x488 0x734 0x0 0x0
538#define MX50_PAD_DISP_D14__GPIO2_14 0x1a8 0x488 0x000 0x1 0x0
539#define MX50_PAD_DISP_D14__EIM_NANDF_READY0 0x1a8 0x488 0x7b4 0x2 0x1
540#define MX50_PAD_DISP_D14__ESDHC1_WP 0x1a8 0x488 0x000 0x3 0x0
541#define MX50_PAD_DISP_D14__ESDHC4_WP 0x1a8 0x488 0x000 0x4 0x0
542#define MX50_PAD_DISP_D14__KPP_COL_7 0x1a8 0x488 0x79c 0x5 0x1
543#define MX50_PAD_DISP_D14__FEC_TDATA_1 0x1a8 0x488 0x000 0x6 0x0
544#define MX50_PAD_DISP_D14__USBPHY1_DATAOUT_6 0x1a8 0x488 0x000 0x7 0x0
545#define MX50_PAD_DISP_D15__ELCDIF_DAT_15 0x1ac 0x48c 0x738 0x0 0x0
546#define MX50_PAD_DISP_D15__GPIO2_15 0x1ac 0x48c 0x000 0x1 0x0
547#define MX50_PAD_DISP_D15__EIM_NANDF_DQS 0x1ac 0x48c 0x7b0 0x2 0x1
548#define MX50_PAD_DISP_D15__ESDHC3_RST 0x1ac 0x48c 0x000 0x3 0x0
549#define MX50_PAD_DISP_D15__ESDHC4_CD 0x1ac 0x48c 0x000 0x4 0x0
550#define MX50_PAD_DISP_D15__KPP_ROW_7 0x1ac 0x48c 0x7ac 0x5 0x1
551#define MX50_PAD_DISP_D15__FEC_TDATA_0 0x1ac 0x48c 0x000 0x6 0x0
552#define MX50_PAD_DISP_D15__USBPHY1_DATAOUT_7 0x1ac 0x48c 0x000 0x7 0x0
553#define MX50_PAD_EPDC_D0__EPDC_SDDO_0 0x1b0 0x54c 0x000 0x0 0x0
554#define MX50_PAD_EPDC_D0__GPIO3_0 0x1b0 0x54c 0x000 0x1 0x0
555#define MX50_PAD_EPDC_D0__EIM_WEIM_D_0 0x1b0 0x54c 0x7ec 0x2 0x1
556#define MX50_PAD_EPDC_D0__ELCDIF_RS 0x1b0 0x54c 0x000 0x3 0x0
557#define MX50_PAD_EPDC_D0__ELCDIF_DOTCLK 0x1b0 0x54c 0x000 0x4 0x0
558#define MX50_PAD_EPDC_D0__SDMA_DEBUG_EVT_CHN_LINES_0 0x1b0 0x54c 0x000 0x6 0x0
559#define MX50_PAD_EPDC_D0__USBPHY2_DATAOUT_0 0x1b0 0x54c 0x000 0x7 0x0
560#define MX50_PAD_EPDC_D1__EPDC_SDDO_1 0x1b4 0x550 0x000 0x0 0x0
561#define MX50_PAD_EPDC_D1__GPIO3_1 0x1b4 0x550 0x000 0x1 0x0
562#define MX50_PAD_EPDC_D1__EIM_WEIM_D_1 0x1b4 0x550 0x7f0 0x2 0x1
563#define MX50_PAD_EPDC_D1__ELCDIF_CS 0x1b4 0x550 0x000 0x3 0x0
564#define MX50_PAD_EPDC_D1__ELCDIF_ENABLE 0x1b4 0x550 0x000 0x4 0x0
565#define MX50_PAD_EPDC_D1__SDMA_DEBUG_EVT_CHN_LINES_1 0x1b4 0x550 0x000 0x6 0x0
566#define MX50_PAD_EPDC_D1__USBPHY2_DATAOUT_1 0x1b4 0x550 0x000 0x7 0x0
567#define MX50_PAD_EPDC_D2__EPDC_SDDO_2 0x1b8 0x554 0x000 0x0 0x0
568#define MX50_PAD_EPDC_D2__GPIO3_2 0x1b8 0x554 0x000 0x1 0x0
569#define MX50_PAD_EPDC_D2__EIM_WEIM_D_2 0x1b8 0x554 0x7f4 0x2 0x1
570#define MX50_PAD_EPDC_D2__ELCDIF_WR_RWN 0x1b8 0x554 0x000 0x3 0x0
571#define MX50_PAD_EPDC_D2__ELCDIF_VSYNC 0x1b8 0x554 0x73c 0x4 0x2
572#define MX50_PAD_EPDC_D2__SDMA_DEBUG_EVT_CHN_LINES_2 0x1b8 0x554 0x000 0x6 0x0
573#define MX50_PAD_EPDC_D2__USBPHY2_DATAOUT_2 0x1b8 0x554 0x000 0x7 0x0
574#define MX50_PAD_EPDC_D3__EPDC_SDDO_3 0x1bc 0x558 0x000 0x0 0x0
575#define MX50_PAD_EPDC_D3__GPIO3_3 0x1bc 0x558 0x000 0x1 0x0
576#define MX50_PAD_EPDC_D3__EIM_WEIM_D_3 0x1bc 0x558 0x7f8 0x2 0x1
577#define MX50_PAD_EPDC_D3__ELCDIF_RD_E 0x1bc 0x558 0x000 0x3 0x0
578#define MX50_PAD_EPDC_D3__ELCDIF_HSYNC 0x1bc 0x558 0x6f8 0x4 0x3
579#define MX50_PAD_EPDC_D3__SDMA_DEBUG_EVT_CHN_LINES_3 0x1bc 0x558 0x000 0x6 0x0
580#define MX50_PAD_EPDC_D3__USBPHY2_DATAOUT_3 0x1bc 0x558 0x000 0x7 0x0
581#define MX50_PAD_EPDC_D4__EPDC_SDDO_4 0x1c0 0x55c 0x000 0x0 0x0
582#define MX50_PAD_EPDC_D4__GPIO3_4 0x1c0 0x55c 0x000 0x1 0x0
583#define MX50_PAD_EPDC_D4__EIM_WEIM_D_4 0x1c0 0x55c 0x7fc 0x2 0x1
584#define MX50_PAD_EPDC_D4__SDMA_DEBUG_EVT_CHN_LINES_4 0x1c0 0x55c 0x000 0x6 0x0
585#define MX50_PAD_EPDC_D4__USBPHY2_DATAOUT_4 0x1c0 0x55c 0x000 0x7 0x0
586#define MX50_PAD_EPDC_D5__EPDC_SDDO_5 0x1c4 0x560 0x000 0x0 0x0
587#define MX50_PAD_EPDC_D5__GPIO3_5 0x1c4 0x560 0x000 0x1 0x0
588#define MX50_PAD_EPDC_D5__EIM_WEIM_D_5 0x1c4 0x560 0x800 0x2 0x1
589#define MX50_PAD_EPDC_D5__SDMA_DEBUG_EVT_CHN_LINES_5 0x1c4 0x560 0x000 0x6 0x0
590#define MX50_PAD_EPDC_D5__USBPHY2_DATAOUT_5 0x1c4 0x560 0x000 0x7 0x0
591#define MX50_PAD_EPDC_D6__EPDC_SDDO_6 0x1c8 0x564 0x000 0x0 0x0
592#define MX50_PAD_EPDC_D6__GPIO3_6 0x1c8 0x564 0x000 0x1 0x0
593#define MX50_PAD_EPDC_D6__EIM_WEIM_D_6 0x1c8 0x564 0x804 0x2 0x1
594#define MX50_PAD_EPDC_D6__SDMA_DEBUG_EVT_CHN_LINES_6 0x1c8 0x564 0x000 0x6 0x0
595#define MX50_PAD_EPDC_D6__USBPHY2_DATAOUT_6 0x1c8 0x564 0x000 0x7 0x0
596#define MX50_PAD_EPDC_D7__EPDC_SDDO_7 0x1cc 0x568 0x000 0x0 0x0
597#define MX50_PAD_EPDC_D7__GPIO3_7 0x1cc 0x568 0x000 0x1 0x0
598#define MX50_PAD_EPDC_D7__EIM_WEIM_D_7 0x1cc 0x568 0x808 0x2 0x1
599#define MX50_PAD_EPDC_D7__SDMA_DEBUG_EVT_CHN_LINES_7 0x1cc 0x568 0x000 0x6 0x0
600#define MX50_PAD_EPDC_D7__USBPHY2_DATAOUT_7 0x1cc 0x568 0x000 0x7 0x0
601#define MX50_PAD_EPDC_D8__EPDC_SDDO_8 0x1d0 0x56c 0x000 0x0 0x0
602#define MX50_PAD_EPDC_D8__GPIO3_8 0x1d0 0x56c 0x000 0x1 0x0
603#define MX50_PAD_EPDC_D8__EIM_WEIM_D_8 0x1d0 0x56c 0x80c 0x2 0x2
604#define MX50_PAD_EPDC_D8__ELCDIF_DAT_24 0x1d0 0x56c 0x000 0x3 0x0
605#define MX50_PAD_EPDC_D8__SDMA_DEBUG_MATCHED_DMBUS 0x1d0 0x56c 0x000 0x6 0x0
606#define MX50_PAD_EPDC_D8__USBPHY2_VSTATUS_0 0x1d0 0x56c 0x000 0x7 0x0
607#define MX50_PAD_EPDC_D9__EPDC_SDDO_9 0x1d4 0x570 0x000 0x0 0x0
608#define MX50_PAD_EPDC_D9__GPIO3_9 0x1d4 0x570 0x000 0x1 0x0
609#define MX50_PAD_EPDC_D9__EIM_WEIM_D_9 0x1d4 0x570 0x810 0x2 0x2
610#define MX50_PAD_EPDC_D9__ELCDIF_DAT_25 0x1d4 0x570 0x000 0x3 0x0
611#define MX50_PAD_EPDC_D9__SDMA_DEBUG_EVENT_CHANNEL_SEL 0x1d4 0x570 0x000 0x6 0x0
612#define MX50_PAD_EPDC_D9__USBPHY2_VSTATUS_1 0x1d4 0x570 0x000 0x7 0x0
613#define MX50_PAD_EPDC_D10__EPDC_SDDO_10 0x1d8 0x574 0x000 0x0 0x0
614#define MX50_PAD_EPDC_D10__GPIO3_10 0x1d8 0x574 0x000 0x1 0x0
615#define MX50_PAD_EPDC_D10__EIM_WEIM_D_10 0x1d8 0x574 0x814 0x2 0x2
616#define MX50_PAD_EPDC_D10__ELCDIF_DAT_26 0x1d8 0x574 0x000 0x3 0x0
617#define MX50_PAD_EPDC_D10__SDMA_DEBUG_EVENT_CHANNEL_0 0x1d8 0x574 0x000 0x6 0x0
618#define MX50_PAD_EPDC_D10__USBPHY2_VSTATUS_2 0x1d8 0x574 0x000 0x7 0x0
619#define MX50_PAD_EPDC_D11__EPDC_SDDO_11 0x1dc 0x578 0x000 0x0 0x0
620#define MX50_PAD_EPDC_D11__GPIO3_11 0x1dc 0x578 0x000 0x1 0x0
621#define MX50_PAD_EPDC_D11__EIM_WEIM_D_11 0x1dc 0x578 0x818 0x2 0x2
622#define MX50_PAD_EPDC_D11__ELCDIF_DAT_27 0x1dc 0x578 0x000 0x3 0x0
623#define MX50_PAD_EPDC_D11__SDMA_DEBUG_EVENT_CHANNEL_1 0x1dc 0x578 0x000 0x6 0x0
624#define MX50_PAD_EPDC_D11__USBPHY2_VSTATUS_3 0x1dc 0x578 0x000 0x7 0x0
625#define MX50_PAD_EPDC_D12__EPDC_SDDO_12 0x1e0 0x57c 0x000 0x0 0x0
626#define MX50_PAD_EPDC_D12__GPIO3_12 0x1e0 0x57c 0x000 0x1 0x0
627#define MX50_PAD_EPDC_D12__EIM_WEIM_D_12 0x1e0 0x57c 0x81c 0x2 0x1
628#define MX50_PAD_EPDC_D12__ELCDIF_DAT_28 0x1e0 0x57c 0x000 0x3 0x0
629#define MX50_PAD_EPDC_D12__SDMA_DEBUG_EVENT_CHANNEL_2 0x1e0 0x57c 0x000 0x6 0x0
630#define MX50_PAD_EPDC_D12__USBPHY2_VSTATUS_4 0x1e0 0x57c 0x000 0x7 0x0
631#define MX50_PAD_EPDC_D13__EPDC_SDDO_13 0x1e4 0x580 0x000 0x0 0x0
632#define MX50_PAD_EPDC_D13__GPIO3_13 0x1e4 0x580 0x000 0x1 0x0
633#define MX50_PAD_EPDC_D13__EIM_WEIM_D_13 0x1e4 0x580 0x820 0x2 0x1
634#define MX50_PAD_EPDC_D13__ELCDIF_DAT_29 0x1e4 0x580 0x000 0x3 0x0
635#define MX50_PAD_EPDC_D13__SDMA_DEBUG_EVENT_CHANNEL_3 0x1e4 0x580 0x000 0x6 0x0
636#define MX50_PAD_EPDC_D13__USBPHY2_VSTATUS_5 0x1e4 0x580 0x000 0x7 0x0
637#define MX50_PAD_EPDC_D14__EPDC_SDDO_14 0x1e8 0x584 0x000 0x0 0x0
638#define MX50_PAD_EPDC_D14__GPIO3_14 0x1e8 0x584 0x000 0x1 0x0
639#define MX50_PAD_EPDC_D14__EIM_WEIM_D_14 0x1e8 0x584 0x824 0x2 0x1
640#define MX50_PAD_EPDC_D14__ELCDIF_DAT_30 0x1e8 0x584 0x000 0x3 0x0
641#define MX50_PAD_EPDC_D14__AUDMUX_AUD6_TXD 0x1e8 0x584 0x000 0x4 0x0
642#define MX50_PAD_EPDC_D14__SDMA_DEBUG_EVENT_CHANNEL_4 0x1e8 0x584 0x000 0x6 0x0
643#define MX50_PAD_EPDC_D14__USBPHY2_VSTATUS_6 0x1e8 0x584 0x000 0x7 0x0
644#define MX50_PAD_EPDC_D15__EPDC_SDDO_15 0x1ec 0x588 0x000 0x0 0x0
645#define MX50_PAD_EPDC_D15__GPIO3_15 0x1ec 0x588 0x000 0x1 0x0
646#define MX50_PAD_EPDC_D15__EIM_WEIM_D_15 0x1ec 0x588 0x828 0x2 0x1
647#define MX50_PAD_EPDC_D15__ELCDIF_DAT_31 0x1ec 0x588 0x000 0x3 0x0
648#define MX50_PAD_EPDC_D15__AUDMUX_AUD6_TXC 0x1ec 0x588 0x000 0x4 0x0
649#define MX50_PAD_EPDC_D15__SDMA_DEBUG_EVENT_CHANNEL_5 0x1ec 0x588 0x000 0x6 0x0
650#define MX50_PAD_EPDC_D15__USBPHY2_VSTATUS_7 0x1ec 0x588 0x000 0x7 0x0
651#define MX50_PAD_EPDC_GDCLK__EPDC_GDCLK 0x1f0 0x58c 0x000 0x0 0x0
652#define MX50_PAD_EPDC_GDCLK__GPIO3_16 0x1f0 0x58c 0x000 0x1 0x0
653#define MX50_PAD_EPDC_GDCLK__EIM_WEIM_D_16 0x1f0 0x58c 0x000 0x2 0x0
654#define MX50_PAD_EPDC_GDCLK__ELCDIF_DAT_16 0x1f0 0x58c 0x000 0x3 0x0
655#define MX50_PAD_EPDC_GDCLK__AUDMUX_AUD6_TXFS 0x1f0 0x58c 0x000 0x4 0x0
656#define MX50_PAD_EPDC_GDCLK__SDMA_DEBUG_CORE_STATE_0 0x1f0 0x58c 0x000 0x6 0x0
657#define MX50_PAD_EPDC_GDCLK__USBPHY2_BISTOK 0x1f0 0x58c 0x000 0x7 0x0
658#define MX50_PAD_EPDC_GDSP__EPCD_GDSP 0x1f4 0x590 0x000 0x0 0x0
659#define MX50_PAD_EPDC_GDSP__GPIO3_17 0x1f4 0x590 0x000 0x1 0x0
660#define MX50_PAD_EPDC_GDSP__EIM_WEIM_D_17 0x1f4 0x590 0x000 0x2 0x0
661#define MX50_PAD_EPDC_GDSP__ELCDIF_DAT_17 0x1f4 0x590 0x000 0x3 0x0
662#define MX50_PAD_EPDC_GDSP__AUDMUX_AUD6_RXD 0x1f4 0x590 0x000 0x4 0x0
663#define MX50_PAD_EPDC_GDSP__SDMA_DEBUG_CORE_STATE_1 0x1f4 0x590 0x000 0x6 0x0
664#define MX50_PAD_EPDC_GDSP__USBPHY2_BVALID 0x1f4 0x590 0x000 0x7 0x0
665#define MX50_PAD_EPDC_GDOE__EPCD_GDOE 0x1f8 0x594 0x000 0x0 0x0
666#define MX50_PAD_EPDC_GDOE__GPIO3_18 0x1f8 0x594 0x000 0x1 0x0
667#define MX50_PAD_EPDC_GDOE__EIM_WEIM_D_18 0x1f8 0x594 0x000 0x2 0x0
668#define MX50_PAD_EPDC_GDOE__ELCDIF_DAT_18 0x1f8 0x594 0x000 0x3 0x0
669#define MX50_PAD_EPDC_GDOE__AUDMUX_AUD6_RXC 0x1f8 0x594 0x000 0x4 0x0
670#define MX50_PAD_EPDC_GDOE__SDMA_DEBUG_CORE_STATE_2 0x1f8 0x594 0x000 0x6 0x0
671#define MX50_PAD_EPDC_GDOE__USBPHY2_ENDSESSION 0x1f8 0x594 0x000 0x7 0x0
672#define MX50_PAD_EPDC_GDRL__EPCD_GDRL 0x1fc 0x598 0x000 0x0 0x0
673#define MX50_PAD_EPDC_GDRL__GPIO3_19 0x1fc 0x598 0x000 0x1 0x0
674#define MX50_PAD_EPDC_GDRL__EIM_WEIM_D_19 0x1f8 0x598 0x000 0x2 0x0
675#define MX50_PAD_EPDC_GDRL__ELCDIF_DAT_19 0x1fc 0x598 0x000 0x3 0x0
676#define MX50_PAD_EPDC_GDRL__AUDMUX_AUD6_RXFS 0x1fc 0x598 0x000 0x4 0x0
677#define MX50_PAD_EPDC_GDRL__SDMA_DEBUG_CORE_STATE_3 0x1fc 0x598 0x000 0x6 0x0
678#define MX50_PAD_EPDC_GDRL__USBPHY2_IDDIG 0x1fc 0x598 0x000 0x7 0x0
679#define MX50_PAD_EPDC_SDCLK__EPCD_SDCLK 0x200 0x59c 0x000 0x0 0x0
680#define MX50_PAD_EPDC_SDCLK__GPIO3_20 0x200 0x59c 0x000 0x1 0x0
681#define MX50_PAD_EPDC_SDCLK__EIM_WEIM_D_20 0x200 0x59c 0x000 0x2 0x0
682#define MX50_PAD_EPDC_SDCLK__ELCDIF_DAT_20 0x200 0x59c 0x000 0x3 0x0
683#define MX50_PAD_EPDC_SDCLK__AUDMUX_AUD5_TXD 0x200 0x59c 0x000 0x4 0x0
684#define MX50_PAD_EPDC_SDCLK__SDMA_DEBUG_BUS_DEVICE_0 0x200 0x59c 0x000 0x6 0x0
685#define MX50_PAD_EPDC_SDCLK__USBPHY2_HOSTDISCONNECT 0x200 0x59c 0x000 0x7 0x0
686#define MX50_PAD_EPDC_SDOEZ__EPCD_SDOEZ 0x204 0x5a0 0x000 0x0 0x0
687#define MX50_PAD_EPDC_SDOEZ__GPIO3_21 0x204 0x5a0 0x000 0x1 0x0
688#define MX50_PAD_EPDC_SDOEZ__EIM_WEIM_D_21 0x204 0x5a0 0x000 0x2 0x0
689#define MX50_PAD_EPDC_SDOEZ__ELCDIF_DAT_21 0x204 0x5a0 0x000 0x3 0x0
690#define MX50_PAD_EPDC_SDOEZ__AUDMUX_AUD5_TXC 0x204 0x5a0 0x000 0x4 0x0
691#define MX50_PAD_EPDC_SDOEZ__SDMA_DEBUG_BUS_DEVICE_1 0x204 0x5a0 0x000 0x6 0x0
692#define MX50_PAD_EPDC_SDOEZ__USBPHY2_TXREADY 0x204 0x5a0 0x000 0x7 0x0
693#define MX50_PAD_EPDC_SDOED__EPCD_SDOED 0x208 0x5a4 0x000 0x0 0x0
694#define MX50_PAD_EPDC_SDOED__GPIO3_22 0x208 0x5a4 0x000 0x1 0x0
695#define MX50_PAD_EPDC_SDOED__EIM_WEIM_D_22 0x208 0x5a4 0x000 0x2 0x0
696#define MX50_PAD_EPDC_SDOED__ELCDIF_DAT_22 0x208 0x5a4 0x000 0x3 0x0
697#define MX50_PAD_EPDC_SDOED__AUDMUX_AUD5_TXFS 0x208 0x5a4 0x000 0x4 0x0
698#define MX50_PAD_EPDC_SDOED__SDMA_DEBUG_BUS_DEVICE_2 0x208 0x5a4 0x000 0x6 0x0
699#define MX50_PAD_EPDC_SDOED__USBPHY2_RXVALID 0x208 0x5a4 0x000 0x7 0x0
700#define MX50_PAD_EPDC_SDOE__EPCD_SDOE 0x20c 0x5a8 0x000 0x0 0x0
701#define MX50_PAD_EPDC_SDOE__GPIO3_23 0x20c 0x5a8 0x000 0x1 0x0
702#define MX50_PAD_EPDC_SDOE__EIM_WEIM_D_23 0x20c 0x5a8 0x000 0x2 0x0
703#define MX50_PAD_EPDC_SDOE__ELCDIF_DAT_23 0x20c 0x5a8 0x000 0x3 0x0
704#define MX50_PAD_EPDC_SDOE__AUDMUX_AUD5_RXD 0x20c 0x5a8 0x000 0x4 0x0
705#define MX50_PAD_EPDC_SDOE__SDMA_DEBUG_BUS_DEVICE_3 0x20c 0x5a8 0x000 0x6 0x0
706#define MX50_PAD_EPDC_SDOE__USBPHY2_RXACTIVE 0x20c 0x5a8 0x000 0x7 0x0
707#define MX50_PAD_EPDC_SDLE__EPCD_SDLE 0x210 0x5ac 0x000 0x0 0x0
708#define MX50_PAD_EPDC_SDLE__GPIO3_24 0x210 0x5ac 0x000 0x1 0x0
709#define MX50_PAD_EPDC_SDLE__EIM_WEIM_D_24 0x210 0x5ac 0x000 0x2 0x0
710#define MX50_PAD_EPDC_SDLE__ELCDIF_DAT_8 0x210 0x5ac 0x71c 0x3 0x1
711#define MX50_PAD_EPDC_SDLE__AUDMUX_AUD5_RXC 0x210 0x5ac 0x000 0x4 0x0
712#define MX50_PAD_EPDC_SDLE__SDMA_DEBUG_BUS_DEVICE_4 0x210 0x5ac 0x000 0x6 0x0
713#define MX50_PAD_EPDC_SDLE__USBPHY2_RXERROR 0x210 0x5ac 0x000 0x7 0x0
714#define MX50_PAD_EPDC_SDCLKN__EPCD_SDCLKN 0x214 0x5b0 0x000 0x0 0x0
715#define MX50_PAD_EPDC_SDCLKN__GPIO3_25 0x214 0x5b0 0x000 0x1 0x0
716#define MX50_PAD_EPDC_SDCLKN__EIM_WEIM_D_25 0x214 0x5b0 0x000 0x2 0x0
717#define MX50_PAD_EPDC_SDCLKN__ELCDIF_DAT_9 0x214 0x5b0 0x720 0x3 0x1
718#define MX50_PAD_EPDC_SDCLKN__AUDMUX_AUD5_RXFS 0x214 0x5b0 0x000 0x4 0x0
719#define MX50_PAD_EPDC_SDCLKN__SDMA_DEBUG_BUS_ERROR 0x214 0x5b0 0x000 0x6 0x0
720#define MX50_PAD_EPDC_SDCLKN__USBPHY2_SIECLOCK 0x214 0x5b0 0x000 0x7 0x0
721#define MX50_PAD_EPDC_SDSHR__EPCD_SDSHR 0x218 0x5b4 0x000 0x0 0x0
722#define MX50_PAD_EPDC_SDSHR__GPIO3_26 0x218 0x5b4 0x000 0x1 0x0
723#define MX50_PAD_EPDC_SDSHR__EIM_WEIM_D_26 0x218 0x5b4 0x000 0x2 0x0
724#define MX50_PAD_EPDC_SDSHR__ELCDIF_DAT_10 0x218 0x5b4 0x724 0x3 0x1
725#define MX50_PAD_EPDC_SDSHR__AUDMUX_AUD4_TXD 0x218 0x5b4 0x6c8 0x4 0x1
726#define MX50_PAD_EPDC_SDSHR__SDMA_DEBUG_BUS_RWB 0x218 0x5b4 0x000 0x6 0x0
727#define MX50_PAD_EPDC_SDSHR__USBPHY2_LINESTATE_0 0x218 0x5b4 0x000 0x7 0x0
728#define MX50_PAD_EPDC_PWRCOM__EPCD_PWRCOM 0x21c 0x5b8 0x000 0x0 0x0
729#define MX50_PAD_EPDC_PWRCOM__GPIO3_27 0x21c 0x5b8 0x000 0x1 0x0
730#define MX50_PAD_EPDC_PWRCOM__EIM_WEIM_D_27 0x21c 0x5b8 0x000 0x2 0x0
731#define MX50_PAD_EPDC_PWRCOM__ELCDIF_DAT_11 0x21c 0x5b8 0x728 0x3 0x1
732#define MX50_PAD_EPDC_PWRCOM__AUDMUX_AUD4_TXC 0x21c 0x5b8 0x6d4 0x4 0x1
733#define MX50_PAD_EPDC_PWRCOM__SDMA_DEBUG_CORE_RUN 0x21c 0x5b8 0x000 0x6 0x0
734#define MX50_PAD_EPDC_PWRCOM__USBPHY2_LINESTATE_1 0x21c 0x5b8 0x000 0x7 0x0
735#define MX50_PAD_EPDC_PWRSTAT__EPCD_PWRSTAT 0x220 0x5bc 0x000 0x0 0x0
736#define MX50_PAD_EPDC_PWRSTAT__GPIO3_28 0x220 0x5bc 0x000 0x1 0x0
737#define MX50_PAD_EPDC_PWRSTAT__EIM_WEIM_D_28 0x220 0x5bc 0x000 0x2 0x0
738#define MX50_PAD_EPDC_PWRSTAT__ELCDIF_DAT_12 0x220 0x5bc 0x72c 0x3 0x1
739#define MX50_PAD_EPDC_PWRSTAT__AUDMUX_AUD4_TXFS 0x220 0x5bc 0x6d8 0x4 0x1
740#define MX50_PAD_EPDC_PWRSTAT__SDMA_DEBUG_MODE 0x220 0x5bc 0x000 0x6 0x0
741#define MX50_PAD_EPDC_PWRSTAT__USBPHY2_VBUSVALID 0x220 0x5bc 0x000 0x7 0x0
742#define MX50_PAD_EPDC_PWRCTRL0__EPCD_PWRCTRL0 0x224 0x5c0 0x000 0x0 0x0
743#define MX50_PAD_EPDC_PWRCTRL0__GPIO3_29 0x224 0x5c0 0x000 0x1 0x0
744#define MX50_PAD_EPDC_PWRCTRL0__EIM_WEIM_D_29 0x224 0x5c0 0x000 0x2 0x0
745#define MX50_PAD_EPDC_PWRCTRL0__ELCDIF_DAT_13 0x224 0x5c0 0x730 0x3 0x1
746#define MX50_PAD_EPDC_PWRCTRL0__AUDMUX_AUD4_RXD 0x224 0x5c0 0x6c4 0x4 0x1
747#define MX50_PAD_EPDC_PWRCTRL0__SDMA_DEBUG_RTBUFFER_WRITE 0x224 0x5c0 0x000 0x6 0x0
748#define MX50_PAD_EPDC_PWRCTRL0__USBPHY2_AVALID 0x224 0x5c0 0x000 0x7 0x0
749#define MX50_PAD_EPDC_PWRCTRL1__EPCD_PWRCTRL1 0x228 0x5c4 0x000 0x0 0x0
750#define MX50_PAD_EPDC_PWRCTRL1__GPIO3_30 0x228 0x5c4 0x000 0x1 0x0
751#define MX50_PAD_EPDC_PWRCTRL1__EIM_WEIM_D_30 0x228 0x5c4 0x000 0x2 0x0
752#define MX50_PAD_EPDC_PWRCTRL1__ELCDIF_DAT_14 0x228 0x5c4 0x734 0x3 0x1
753#define MX50_PAD_EPDC_PWRCTRL1__AUDMUX_AUD4_RXC 0x228 0x5c4 0x6cc 0x4 0x1
754#define MX50_PAD_EPDC_PWRCTRL1__SDMA_DEBUG_YIELD 0x228 0x5c4 0x000 0x6 0x0
755#define MX50_PAD_EPDC_PWRCTRL1__USBPHY1_ONBIST 0x228 0x5c4 0x000 0x7 0x0
756#define MX50_PAD_EPDC_PWRCTRL2__EPCD_PWRCTRL2 0x22c 0x5c8 0x000 0x0 0x0
757#define MX50_PAD_EPDC_PWRCTRL2__GPIO3_31 0x22c 0x5c8 0x000 0x1 0x0
758#define MX50_PAD_EPDC_PWRCTRL2__EIM_WEIM_D_31 0x22c 0x5c8 0x000 0x2 0x0
759#define MX50_PAD_EPDC_PWRCTRL2__ELCDIF_DAT_15 0x22c 0x5c8 0x738 0x3 0x1
760#define MX50_PAD_EPDC_PWRCTRL2__AUDMUX_AUD4_RXFS 0x22c 0x5c8 0x6d0 0x4 0x1
761#define MX50_PAD_EPDC_PWRCTRL2__SDMA_EXT_EVENT_0 0x22c 0x5c8 0x7b8 0x6 0x1
762#define MX50_PAD_EPDC_PWRCTRL2__USBPHY2_ONBIST 0x22c 0x5c8 0x000 0x7 0x0
763#define MX50_PAD_EPDC_PWRCTRL3__EPCD_PWRCTRL3 0x230 0x5cc 0x000 0x0 0x0
764#define MX50_PAD_EPDC_PWRCTRL3__GPIO4_20 0x230 0x5cc 0x000 0x1 0x0
765#define MX50_PAD_EPDC_PWRCTRL3__EIM_WEIM_EB_2 0x230 0x5cc 0x000 0x2 0x0
766#define MX50_PAD_EPDC_PWRCTRL3__SDMA_EXT_EVENT_1 0x230 0x5cc 0x7bc 0x6 0x1
767#define MX50_PAD_EPDC_PWRCTRL3__USBPHY1_BISTOK 0x230 0x5cc 0x000 0x7 0x0
768#define MX50_PAD_EPDC_VCOM0__EPCD_VCOM_0 0x234 0x5d0 0x000 0x0 0x0
769#define MX50_PAD_EPDC_VCOM0__GPIO4_21 0x234 0x5d0 0x000 0x1 0x0
770#define MX50_PAD_EPDC_VCOM0__EIM_WEIM_EB_3 0x234 0x5d0 0x000 0x2 0x0
771#define MX50_PAD_EPDC_VCOM0__USBPHY2_BISTOK 0x234 0x5d0 0x000 0x7 0x0
772#define MX50_PAD_EPDC_VCOM1__EPCD_VCOM_1 0x238 0x5d4 0x000 0x0 0x0
773#define MX50_PAD_EPDC_VCOM1__GPIO4_22 0x238 0x5d4 0x000 0x1 0x0
774#define MX50_PAD_EPDC_VCOM1__EIM_WEIM_CS_3 0x238 0x5d4 0x000 0x2 0x0
775#define MX50_PAD_EPDC_BDR0__EPCD_BDR_0 0x23c 0x5d8 0x000 0x0 0x0
776#define MX50_PAD_EPDC_BDR0__GPIO4_23 0x23c 0x5d8 0x000 0x1 0x0
777#define MX50_PAD_EPDC_BDR0__ELCDIF_DAT_7 0x23c 0x5d8 0x718 0x3 0x1
778#define MX50_PAD_EPDC_BDR1__EPCD_BDR_1 0x240 0x5dc 0x000 0x0 0x0
779#define MX50_PAD_EPDC_BDR1__GPIO4_24 0x240 0x5dc 0x000 0x1 0x0
780#define MX50_PAD_EPDC_BDR1__ELCDIF_DAT_6 0x240 0x5dc 0x714 0x3 0x1
781#define MX50_PAD_EPDC_SDCE0__EPCD_SDCE_0 0x244 0x5e0 0x000 0x0 0x0
782#define MX50_PAD_EPDC_SDCE0__GPIO4_25 0x244 0x5e0 0x000 0x1 0x0
783#define MX50_PAD_EPDC_SDCE0__ELCDIF_DAT_5 0x244 0x5e0 0x710 0x3 0x1
784#define MX50_PAD_EPDC_SDCE1__EPCD_SDCE_1 0x248 0x5e4 0x000 0x0 0x0
785#define MX50_PAD_EPDC_SDCE1__GPIO4_26 0x248 0x5e4 0x000 0x1 0x0
786#define MX50_PAD_EPDC_SDCE1__ELCDIF_DAT_4 0x248 0x5e4 0x70c 0x3 0x0
787#define MX50_PAD_EPDC_SDCE2__EPCD_SDCE_2 0x24c 0x5e8 0x000 0x0 0x0
788#define MX50_PAD_EPDC_SDCE2__GPIO4_27 0x24c 0x5e8 0x000 0x1 0x0
789#define MX50_PAD_EPDC_SDCE2__ELCDIF_DAT_3 0x24c 0x5e8 0x708 0x3 0x1
790#define MX50_PAD_EPDC_SDCE3__EPCD_SDCE_3 0x250 0x5ec 0x000 0x0 0x0
791#define MX50_PAD_EPDC_SDCE3__GPIO4_28 0x250 0x5ec 0x000 0x1 0x0
792#define MX50_PAD_EPDC_SDCE3__ELCDIF_DAT_2 0x250 0x5ec 0x704 0x3 0x1
793#define MX50_PAD_EPDC_SDCE4__EPCD_SDCE_4 0x254 0x5f0 0x000 0x0 0x0
794#define MX50_PAD_EPDC_SDCE4__GPIO4_29 0x254 0x5f0 0x000 0x1 0x0
795#define MX50_PAD_EPDC_SDCE4__ELCDIF_DAT_1 0x254 0x5f0 0x700 0x3 0x1
796#define MX50_PAD_EPDC_SDCE5__EPCD_SDCE_5 0x258 0x5f4 0x000 0x0 0x0
797#define MX50_PAD_EPDC_SDCE5__GPIO4_30 0x258 0x5f4 0x000 0x1 0x0
798#define MX50_PAD_EPDC_SDCE5__ELCDIF_DAT_0 0x258 0x5f4 0x6fc 0x3 0x1
799#define MX50_PAD_EIM_DA0__EIM_WEIM_A_0 0x25c 0x5f8 0x000 0x0 0x0
800#define MX50_PAD_EIM_DA0__GPIO1_0 0x25c 0x5f8 0x000 0x1 0x0
801#define MX50_PAD_EIM_DA0__KPP_COL_4 0x25c 0x5f8 0x790 0x3 0x2
802#define MX50_PAD_EIM_DA0__TPIU_TRACE_0 0x25c 0x5f8 0x000 0x6 0x0
803#define MX50_PAD_EIM_DA0__SRC_BT_CFG1_0 0x25c 0x5f8 0x000 0x7 0x0
804#define MX50_PAD_EIM_DA1__EIM_WEIM_A_1 0x260 0x5fc 0x000 0x0 0x0
805#define MX50_PAD_EIM_DA1__GPIO1_1 0x260 0x5fc 0x000 0x1 0x0
806#define MX50_PAD_EIM_DA1__KPP_ROW_4 0x260 0x5fc 0x7a0 0x3 0x2
807#define MX50_PAD_EIM_DA1__TPIU_TRACE_1 0x260 0x5fc 0x000 0x6 0x0
808#define MX50_PAD_EIM_DA1__SRC_BT_CFG1_1 0x260 0x5fc 0x000 0x7 0x0
809#define MX50_PAD_EIM_DA2__EIM_WEIM_A_2 0x264 0x600 0x000 0x0 0x0
810#define MX50_PAD_EIM_DA2__GPIO1_2 0x264 0x600 0x000 0x1 0x0
811#define MX50_PAD_EIM_DA2__KPP_COL_5 0x264 0x600 0x794 0x3 0x2
812#define MX50_PAD_EIM_DA2__TPIU_TRACE_2 0x264 0x600 0x000 0x6 0x0
813#define MX50_PAD_EIM_DA2__SRC_BT_CFG1_2 0x264 0x600 0x000 0x7 0x0
814#define MX50_PAD_EIM_DA3__EIM_WEIM_A_3 0x268 0x604 0x000 0x0 0x0
815#define MX50_PAD_EIM_DA3__GPIO1_3 0x268 0x604 0x000 0x1 0x0
816#define MX50_PAD_EIM_DA3__KPP_ROW_5 0x268 0x604 0x7a4 0x3 0x2
817#define MX50_PAD_EIM_DA3__TPIU_TRACE_3 0x268 0x604 0x000 0x6 0x0
818#define MX50_PAD_EIM_DA3__SRC_BT_CFG1_3 0x268 0x604 0x000 0x7 0x0
819#define MX50_PAD_EIM_DA4__EIM_WEIM_A_4 0x26c 0x608 0x000 0x0 0x0
820#define MX50_PAD_EIM_DA4__GPIO1_4 0x26c 0x608 0x000 0x1 0x0
821#define MX50_PAD_EIM_DA4__KPP_COL_6 0x26c 0x608 0x798 0x3 0x2
822#define MX50_PAD_EIM_DA4__TPIU_TRACE_4 0x26c 0x608 0x000 0x6 0x0
823#define MX50_PAD_EIM_DA4__SRC_BT_CFG1_4 0x26c 0x608 0x000 0x7 0x0
824#define MX50_PAD_EIM_DA5__EIM_WEIM_A_5 0x270 0x60c 0x000 0x0 0x0
825#define MX50_PAD_EIM_DA5__GPIO1_5 0x270 0x60c 0x000 0x1 0x0
826#define MX50_PAD_EIM_DA5__KPP_ROW_6 0x270 0x60c 0x7a8 0x3 0x2
827#define MX50_PAD_EIM_DA5__TPIU_TRACE_5 0x270 0x60c 0x000 0x6 0x0
828#define MX50_PAD_EIM_DA5__SRC_BT_CFG1_5 0x270 0x60c 0x000 0x7 0x0
829#define MX50_PAD_EIM_DA6__EIM_WEIM_A_6 0x274 0x610 0x000 0x0 0x0
830#define MX50_PAD_EIM_DA6__GPIO1_6 0x274 0x610 0x000 0x1 0x0
831#define MX50_PAD_EIM_DA6__KPP_COL_7 0x274 0x610 0x79c 0x3 0x2
832#define MX50_PAD_EIM_DA6__TPIU_TRACE_6 0x274 0x610 0x000 0x6 0x0
833#define MX50_PAD_EIM_DA6__SRC_BT_CFG1_6 0x274 0x610 0x000 0x7 0x0
834#define MX50_PAD_EIM_DA7__EIM_WEIM_A_7 0x278 0x614 0x000 0x0 0x0
835#define MX50_PAD_EIM_DA7__GPIO1_7 0x278 0x614 0x000 0x1 0x0
836#define MX50_PAD_EIM_DA7__KPP_ROW_7 0x278 0x614 0x7ac 0x3 0x2
837#define MX50_PAD_EIM_DA7__TPIU_TRACE_7 0x278 0x614 0x000 0x6 0x0
838#define MX50_PAD_EIM_DA7__SRC_BT_CFG1_7 0x278 0x614 0x000 0x7 0x0
839#define MX50_PAD_EIM_DA8__EIM_WEIM_A_8 0x27c 0x618 0x000 0x0 0x0
840#define MX50_PAD_EIM_DA8__GPIO1_8 0x27c 0x618 0x000 0x1 0x0
841#define MX50_PAD_EIM_DA8__EIM_NANDF_CLE 0x27c 0x618 0x000 0x2 0x0
842#define MX50_PAD_EIM_DA8__TPIU_TRACE_8 0x27c 0x618 0x000 0x6 0x0
843#define MX50_PAD_EIM_DA8__SRC_BT_CFG2_0 0x27c 0x618 0x000 0x7 0x0
844#define MX50_PAD_EIM_DA9__EIM_WEIM_A_9 0x280 0x61c 0x000 0x0 0x0
845#define MX50_PAD_EIM_DA9__GPIO1_9 0x280 0x61c 0x000 0x1 0x0
846#define MX50_PAD_EIM_DA9__EIM_NANDF_ALE 0x280 0x61c 0x000 0x2 0x0
847#define MX50_PAD_EIM_DA9__TPIU_TRACE_9 0x280 0x61c 0x000 0x6 0x0
848#define MX50_PAD_EIM_DA9__SRC_BT_CFG2_1 0x280 0x61c 0x000 0x7 0x0
849#define MX50_PAD_EIM_DA10__EIM_WEIM_A_10 0x284 0x620 0x000 0x0 0x0
850#define MX50_PAD_EIM_DA10__GPIO1_10 0x284 0x620 0x000 0x1 0x0
851#define MX50_PAD_EIM_DA10__EIM_NANDF_CEN_0 0x284 0x620 0x000 0x2 0x0
852#define MX50_PAD_EIM_DA10__TPIU_TRACE_10 0x284 0x620 0x000 0x6 0x0
853#define MX50_PAD_EIM_DA10__SRC_BT_CFG2_2 0x284 0x620 0x000 0x7 0x0
854#define MX50_PAD_EIM_DA11__EIM_WEIM_A_11 0x288 0x624 0x000 0x0 0x0
855#define MX50_PAD_EIM_DA11__GPIO1_11 0x288 0x624 0x000 0x1 0x0
856#define MX50_PAD_EIM_DA11__EIM_NANDF_CEN_1 0x288 0x624 0x000 0x2 0x0
857#define MX50_PAD_EIM_DA11__TPIU_TRACE_11 0x288 0x624 0x000 0x6 0x0
858#define MX50_PAD_EIM_DA11__SRC_BT_CFG2_3 0x288 0x624 0x000 0x7 0x0
859#define MX50_PAD_EIM_DA12__EIM_WEIM_A_12 0x28c 0x628 0x000 0x0 0x0
860#define MX50_PAD_EIM_DA12__GPIO1_12 0x28c 0x628 0x000 0x1 0x0
861#define MX50_PAD_EIM_DA12__EIM_NANDF_CEN_2 0x28c 0x628 0x000 0x2 0x0
862#define MX50_PAD_EIM_DA12__EPDC_SDCE_6 0x28c 0x628 0x000 0x3 0x0
863#define MX50_PAD_EIM_DA12__TPIU_TRACE_12 0x28c 0x628 0x000 0x6 0x0
864#define MX50_PAD_EIM_DA12__SRC_BT_CFG2_4 0x28c 0x628 0x000 0x7 0x0
865#define MX50_PAD_EIM_DA13__EIM_WEIM_A_13 0x290 0x62c 0x000 0x0 0x0
866#define MX50_PAD_EIM_DA13__GPIO1_13 0x290 0x62c 0x000 0x1 0x0
867#define MX50_PAD_EIM_DA13__EIM_NANDF_CEN_3 0x290 0x62c 0x000 0x2 0x0
868#define MX50_PAD_EIM_DA13__EPDC_SDCE_7 0x290 0x62c 0x000 0x3 0x0
869#define MX50_PAD_EIM_DA13__TPIU_TRACE_13 0x290 0x62c 0x000 0x6 0x0
870#define MX50_PAD_EIM_DA13__SRC_BT_CFG2_5 0x290 0x62c 0x000 0x7 0x0
871#define MX50_PAD_EIM_DA14__EIM_WEIM_A_14 0x294 0x630 0x000 0x0 0x0
872#define MX50_PAD_EIM_DA14__GPIO1_14 0x294 0x630 0x000 0x1 0x0
873#define MX50_PAD_EIM_DA14__EIM_NANDF_READY0 0x294 0x630 0x7b4 0x2 0x2
874#define MX50_PAD_EIM_DA14__EPDC_SDCE_8 0x294 0x630 0x000 0x3 0x0
875#define MX50_PAD_EIM_DA14__TPIU_TRACE_14 0x294 0x630 0x000 0x6 0x0
876#define MX50_PAD_EIM_DA14__SRC_BT_CFG2_6 0x294 0x630 0x000 0x7 0x0
877#define MX50_PAD_EIM_DA15__EIM_WEIM_A_15 0x298 0x634 0x000 0x0 0x0
878#define MX50_PAD_EIM_DA15__GPIO1_15 0x298 0x634 0x000 0x1 0x0
879#define MX50_PAD_EIM_DA15__EIM_NANDF_DQS 0x298 0x634 0x7b0 0x2 0x2
880#define MX50_PAD_EIM_DA15__EPDC_SDCE_9 0x298 0x634 0x000 0x3 0x0
881#define MX50_PAD_EIM_DA15__TPIU_TRACE_15 0x298 0x634 0x000 0x6 0x0
882#define MX50_PAD_EIM_DA15__SRC_BT_CFG2_7 0x298 0x634 0x000 0x7 0x0
883#define MX50_PAD_EIM_CS2__EIM_WEIM_CS_2 0x29c 0x638 0x000 0x0 0x0
884#define MX50_PAD_EIM_CS2__GPIO1_16 0x29c 0x638 0x000 0x1 0x0
885#define MX50_PAD_EIM_CS2__EIM_WEIM_A_27 0x29c 0x638 0x000 0x2 0x0
886#define MX50_PAD_EIM_CS2__TPIU_TRCLK 0x29c 0x638 0x000 0x6 0x0
887#define MX50_PAD_EIM_CS2__SRC_BT_CFG3_0 0x29c 0x638 0x000 0x7 0x0
888#define MX50_PAD_EIM_CS1__EIM_WEIM_CS_1 0x2a0 0x63c 0x000 0x0 0x0
889#define MX50_PAD_EIM_CS1__GPIO1_17 0x2a0 0x63c 0x000 0x1 0x0
890#define MX50_PAD_EIM_CS1__TPIU_TRCTL 0x2a0 0x63c 0x000 0x6 0x0
891#define MX50_PAD_EIM_CS1__SRC_BT_CFG3_1 0x2a0 0x63c 0x000 0x7 0x0
892#define MX50_PAD_EIM_CS0__EIM_WEIM_CS_0 0x2a4 0x640 0x000 0x0 0x0
893#define MX50_PAD_EIM_CS0__GPIO1_18 0x2a4 0x640 0x000 0x1 0x0
894#define MX50_PAD_EIM_CS0__SRC_BT_CFG3_2 0x2a4 0x640 0x000 0x7 0x0
895#define MX50_PAD_EIM_EB0__EIM_WEIM_EB_0 0x2a8 0x644 0x000 0x0 0x0
896#define MX50_PAD_EIM_EB0__GPIO1_19 0x2a8 0x644 0x000 0x1 0x0
897#define MX50_PAD_EIM_EB0__SRC_BT_CFG3_3 0x2a8 0x644 0x000 0x7 0x0
898#define MX50_PAD_EIM_EB1__EIM_WEIM_EB_1 0x2ac 0x648 0x000 0x0 0x0
899#define MX50_PAD_EIM_EB1__GPIO1_20 0x2ac 0x648 0x000 0x1 0x0
900#define MX50_PAD_EIM_EB1__SRC_BT_CFG3_4 0x2ac 0x648 0x000 0x7 0x0
901#define MX50_PAD_EIM_WAIT__EIM_WEIM_WAIT 0x2b0 0x64c 0x000 0x0 0x0
902#define MX50_PAD_EIM_WAIT__GPIO1_21 0x2b0 0x64c 0x000 0x1 0x0
903#define MX50_PAD_EIM_WAIT__EIM_WEIM_DTACK_B 0x2b0 0x64c 0x000 0x2 0x0
904#define MX50_PAD_EIM_WAIT__SRC_BT_CFG3_5 0x2b0 0x64c 0x000 0x7 0x0
905#define MX50_PAD_EIM_BCLK__EIM_WEIM_BCLK 0x2b4 0x650 0x000 0x0 0x0
906#define MX50_PAD_EIM_BCLK__GPIO1_22 0x2b4 0x650 0x000 0x1 0x0
907#define MX50_PAD_EIM_BCLK__SRC_BT_CFG3_6 0x2b4 0x650 0x000 0x7 0x0
908#define MX50_PAD_EIM_RDY__EIM_WEIM_RDY 0x2b8 0x654 0x000 0x0 0x0
909#define MX50_PAD_EIM_RDY__GPIO1_23 0x2b8 0x654 0x000 0x1 0x0
910#define MX50_PAD_EIM_RDY__SRC_BT_CFG3_7 0x2b8 0x654 0x000 0x7 0x0
911#define MX50_PAD_EIM_OE__EIM_WEIM_OE 0x2bc 0x658 0x000 0x0 0x0
912#define MX50_PAD_EIM_OE__GPIO1_24 0x2bc 0x658 0x000 0x1 0x0
913#define MX50_PAD_EIM_OE__INT_BOOT 0x2bc 0x658 0x000 0x7 0x0
914#define MX50_PAD_EIM_RW__EIM_WEIM_RW 0x2c0 0x65c 0x000 0x0 0x0
915#define MX50_PAD_EIM_RW__GPIO1_25 0x2c0 0x65c 0x000 0x1 0x0
916#define MX50_PAD_EIM_RW__SYSTEM_RST 0x2c0 0x65c 0x000 0x7 0x0
917#define MX50_PAD_EIM_LBA__EIM_WEIM_LBA 0x2c4 0x660 0x000 0x0 0x0
918#define MX50_PAD_EIM_LBA__GPIO1_26 0x2c4 0x660 0x000 0x1 0x0
919#define MX50_PAD_EIM_LBA__TESTER_ACK 0x2c4 0x660 0x000 0x7 0x0
920#define MX50_PAD_EIM_CRE__EIM_WEIM_CRE 0x2c8 0x664 0x000 0x0 0x0
921#define MX50_PAD_EIM_CRE__GPIO1_27 0x2c8 0x664 0x000 0x1 0x0
922
923#endif /* __DTS_IMX50_PINFUNC_H */
diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi
new file mode 100644
index 000000000000..0c75fe3deb35
--- /dev/null
+++ b/arch/arm/boot/dts/imx50.dtsi
@@ -0,0 +1,478 @@
1/*
2 * Copyright 2013 Greg Ungerer <gerg@uclinux.org>
3 * Copyright 2011 Freescale Semiconductor, Inc.
4 * Copyright 2011 Linaro Ltd.
5 *
6 * The code contained herein is licensed under the GNU General Public
7 * License. You may obtain a copy of the GNU General Public License
8 * Version 2 or later at the following locations:
9 *
10 * http://www.opensource.org/licenses/gpl-license.html
11 * http://www.gnu.org/copyleft/gpl.html
12 */
13
14#include "skeleton.dtsi"
15#include "imx50-pinfunc.h"
16#include <dt-bindings/clock/imx5-clock.h>
17
18/ {
19 aliases {
20 gpio0 = &gpio1;
21 gpio1 = &gpio2;
22 gpio2 = &gpio3;
23 gpio3 = &gpio4;
24 gpio4 = &gpio5;
25 gpio5 = &gpio6;
26 serial0 = &uart1;
27 serial1 = &uart2;
28 serial2 = &uart3;
29 serial3 = &uart4;
30 serial4 = &uart5;
31 };
32
33 cpus {
34 #address-cells = <1>;
35 #size-cells = <0>;
36 cpu@0 {
37 device_type = "cpu";
38 compatible = "arm,cortex-a8";
39 reg = <0x0>;
40 };
41 };
42
43 tzic: tz-interrupt-controller@0fffc000 {
44 compatible = "fsl,imx50-tzic", "fsl,imx53-tzic", "fsl,tzic";
45 interrupt-controller;
46 #interrupt-cells = <1>;
47 reg = <0x0fffc000 0x4000>;
48 };
49
50 clocks {
51 #address-cells = <1>;
52 #size-cells = <0>;
53
54 ckil {
55 compatible = "fsl,imx-ckil", "fixed-clock";
56 clock-frequency = <32768>;
57 };
58
59 ckih1 {
60 compatible = "fsl,imx-ckih1", "fixed-clock";
61 clock-frequency = <22579200>;
62 };
63
64 ckih2 {
65 compatible = "fsl,imx-ckih2", "fixed-clock";
66 clock-frequency = <0>;
67 };
68
69 osc {
70 compatible = "fsl,imx-osc", "fixed-clock";
71 clock-frequency = <24000000>;
72 };
73 };
74
75 soc {
76 #address-cells = <1>;
77 #size-cells = <1>;
78 compatible = "simple-bus";
79 interrupt-parent = <&tzic>;
80 ranges;
81
82 aips@50000000 { /* AIPS1 */
83 compatible = "fsl,aips-bus", "simple-bus";
84 #address-cells = <1>;
85 #size-cells = <1>;
86 reg = <0x50000000 0x10000000>;
87 ranges;
88
89 spba@50000000 {
90 compatible = "fsl,spba-bus", "simple-bus";
91 #address-cells = <1>;
92 #size-cells = <1>;
93 reg = <0x50000000 0x40000>;
94 ranges;
95
96 esdhc1: esdhc@50004000 {
97 compatible = "fsl,imx50-esdhc";
98 reg = <0x50004000 0x4000>;
99 interrupts = <1>;
100 clocks = <&clks IMX5_CLK_ESDHC1_IPG_GATE>,
101 <&clks IMX5_CLK_DUMMY>,
102 <&clks IMX5_CLK_ESDHC1_PER_GATE>;
103 clock-names = "ipg", "ahb", "per";
104 bus-width = <4>;
105 status = "disabled";
106 };
107
108 esdhc2: esdhc@50008000 {
109 compatible = "fsl,imx50-esdhc";
110 reg = <0x50008000 0x4000>;
111 interrupts = <2>;
112 clocks = <&clks IMX5_CLK_ESDHC2_IPG_GATE>,
113 <&clks IMX5_CLK_DUMMY>,
114 <&clks IMX5_CLK_ESDHC2_PER_GATE>;
115 clock-names = "ipg", "ahb", "per";
116 bus-width = <4>;
117 status = "disabled";
118 };
119
120 uart3: serial@5000c000 {
121 compatible = "fsl,imx50-uart", "fsl,imx21-uart";
122 reg = <0x5000c000 0x4000>;
123 interrupts = <33>;
124 clocks = <&clks IMX5_CLK_UART3_IPG_GATE>,
125 <&clks IMX5_CLK_UART3_PER_GATE>;
126 clock-names = "ipg", "per";
127 status = "disabled";
128 };
129
130 ecspi1: ecspi@50010000 {
131 #address-cells = <1>;
132 #size-cells = <0>;
133 compatible = "fsl,imx50-ecspi", "fsl,imx51-ecspi";
134 reg = <0x50010000 0x4000>;
135 interrupts = <36>;
136 clocks = <&clks IMX5_CLK_ECSPI1_IPG_GATE>,
137 <&clks IMX5_CLK_ECSPI1_PER_GATE>;
138 clock-names = "ipg", "per";
139 status = "disabled";
140 };
141
142 ssi2: ssi@50014000 {
143 compatible = "fsl,imx50-ssi",
144 "fsl,imx51-ssi",
145 "fsl,imx21-ssi";
146 reg = <0x50014000 0x4000>;
147 interrupts = <30>;
148 clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>;
149 fsl,fifo-depth = <15>;
150 fsl,ssi-dma-events = <25 24 23 22>; /* TX0 RX0 TX1 RX1 */
151 status = "disabled";
152 };
153
154 esdhc3: esdhc@50020000 {
155 compatible = "fsl,imx50-esdhc";
156 reg = <0x50020000 0x4000>;
157 interrupts = <3>;
158 clocks = <&clks IMX5_CLK_ESDHC3_IPG_GATE>,
159 <&clks IMX5_CLK_DUMMY>,
160 <&clks IMX5_CLK_ESDHC3_PER_GATE>;
161 clock-names = "ipg", "ahb", "per";
162 bus-width = <4>;
163 status = "disabled";
164 };
165
166 esdhc4: esdhc@50024000 {
167 compatible = "fsl,imx50-esdhc";
168 reg = <0x50024000 0x4000>;
169 interrupts = <4>;
170 clocks = <&clks IMX5_CLK_ESDHC4_IPG_GATE>,
171 <&clks IMX5_CLK_DUMMY>,
172 <&clks IMX5_CLK_ESDHC4_PER_GATE>;
173 clock-names = "ipg", "ahb", "per";
174 bus-width = <4>;
175 status = "disabled";
176 };
177 };
178
179 usbotg: usb@53f80000 {
180 compatible = "fsl,imx50-usb", "fsl,imx27-usb";
181 reg = <0x53f80000 0x0200>;
182 interrupts = <18>;
183 clocks = <&clks IMX5_CLK_USB_PHY1_GATE>;
184 status = "disabled";
185 };
186
187 usbh1: usb@53f80200 {
188 compatible = "fsl,imx50-usb", "fsl,imx27-usb";
189 reg = <0x53f80200 0x0200>;
190 interrupts = <14>;
191 clocks = <&clks IMX5_CLK_USB_PHY2_GATE>;
192 status = "disabled";
193 };
194
195 usbh2: usb@53f80400 {
196 compatible = "fsl,imx50-usb", "fsl,imx27-usb";
197 reg = <0x53f80400 0x0200>;
198 interrupts = <16>;
199 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
200 status = "disabled";
201 };
202
203 usbh3: usb@53f80600 {
204 compatible = "fsl,imx50-usb", "fsl,imx27-usb";
205 reg = <0x53f80600 0x0200>;
206 interrupts = <17>;
207 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
208 status = "disabled";
209 };
210
211 gpio1: gpio@53f84000 {
212 compatible = "fsl,imx50-gpio", "fsl,imx35-gpio";
213 reg = <0x53f84000 0x4000>;
214 interrupts = <50 51>;
215 gpio-controller;
216 #gpio-cells = <2>;
217 interrupt-controller;
218 #interrupt-cells = <2>;
219 };
220
221 gpio2: gpio@53f88000 {
222 compatible = "fsl,imx50-gpio", "fsl,imx35-gpio";
223 reg = <0x53f88000 0x4000>;
224 interrupts = <52 53>;
225 gpio-controller;
226 #gpio-cells = <2>;
227 interrupt-controller;
228 #interrupt-cells = <2>;
229 };
230
231 gpio3: gpio@53f8c000 {
232 compatible = "fsl,imx50-gpio", "fsl,imx35-gpio";
233 reg = <0x53f8c000 0x4000>;
234 interrupts = <54 55>;
235 gpio-controller;
236 #gpio-cells = <2>;
237 interrupt-controller;
238 #interrupt-cells = <2>;
239 };
240
241 gpio4: gpio@53f90000 {
242 compatible = "fsl,imx50-gpio", "fsl,imx35-gpio";
243 reg = <0x53f90000 0x4000>;
244 interrupts = <56 57>;
245 gpio-controller;
246 #gpio-cells = <2>;
247 interrupt-controller;
248 #interrupt-cells = <2>;
249 };
250
251 wdog1: wdog@53f98000 {
252 compatible = "fsl,imx50-wdt", "fsl,imx21-wdt";
253 reg = <0x53f98000 0x4000>;
254 interrupts = <58>;
255 clocks = <&clks IMX5_CLK_DUMMY>;
256 };
257
258 gpt: timer@53fa0000 {
259 compatible = "fsl,imx50-gpt", "fsl,imx31-gpt";
260 reg = <0x53fa0000 0x4000>;
261 interrupts = <39>;
262 clocks = <&clks IMX5_CLK_GPT_IPG_GATE>,
263 <&clks IMX5_CLK_GPT_HF_GATE>;
264 clock-names = "ipg", "per";
265 };
266
267 iomuxc: iomuxc@53fa8000 {
268 compatible = "fsl,imx50-iomuxc", "fsl,imx53-iomuxc";
269 reg = <0x53fa8000 0x4000>;
270 };
271
272 gpr: iomuxc-gpr@53fa8000 {
273 compatible = "fsl,imx50-iomuxc-gpr", "syscon";
274 reg = <0x53fa8000 0xc>;
275 };
276
277 pwm1: pwm@53fb4000 {
278 #pwm-cells = <2>;
279 compatible = "fsl,imx50-pwm", "fsl,imx27-pwm";
280 reg = <0x53fb4000 0x4000>;
281 clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>,
282 <&clks IMX5_CLK_PWM1_HF_GATE>;
283 clock-names = "ipg", "per";
284 interrupts = <61>;
285 };
286
287 pwm2: pwm@53fb8000 {
288 #pwm-cells = <2>;
289 compatible = "fsl,imx50-pwm", "fsl,imx27-pwm";
290 reg = <0x53fb8000 0x4000>;
291 clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>,
292 <&clks IMX5_CLK_PWM2_HF_GATE>;
293 clock-names = "ipg", "per";
294 interrupts = <94>;
295 };
296
297 uart1: serial@53fbc000 {
298 compatible = "fsl,imx50-uart", "fsl,imx21-uart";
299 reg = <0x53fbc000 0x4000>;
300 interrupts = <31>;
301 clocks = <&clks IMX5_CLK_UART1_IPG_GATE>,
302 <&clks IMX5_CLK_UART1_PER_GATE>;
303 clock-names = "ipg", "per";
304 status = "disabled";
305 };
306
307 uart2: serial@53fc0000 {
308 compatible = "fsl,imx50-uart", "fsl,imx21-uart";
309 reg = <0x53fc0000 0x4000>;
310 interrupts = <32>;
311 clocks = <&clks IMX5_CLK_UART2_IPG_GATE>,
312 <&clks IMX5_CLK_UART2_PER_GATE>;
313 clock-names = "ipg", "per";
314 status = "disabled";
315 };
316
317 src: src@53fd0000 {
318 compatible = "fsl,imx50-src", "fsl,imx51-src";
319 reg = <0x53fd0000 0x4000>;
320 #reset-cells = <1>;
321 };
322
323 clks: ccm@53fd4000{
324 compatible = "fsl,imx50-ccm";
325 reg = <0x53fd4000 0x4000>;
326 interrupts = <0 71 0x04 0 72 0x04>;
327 #clock-cells = <1>;
328 };
329
330 gpio5: gpio@53fdc000 {
331 compatible = "fsl,imx50-gpio", "fsl,imx35-gpio";
332 reg = <0x53fdc000 0x4000>;
333 interrupts = <103 104>;
334 gpio-controller;
335 #gpio-cells = <2>;
336 interrupt-controller;
337 #interrupt-cells = <2>;
338 };
339
340 gpio6: gpio@53fe0000 {
341 compatible = "fsl,imx50-gpio", "fsl,imx35-gpio";
342 reg = <0x53fe0000 0x4000>;
343 interrupts = <105 106>;
344 gpio-controller;
345 #gpio-cells = <2>;
346 interrupt-controller;
347 #interrupt-cells = <2>;
348 };
349
350 i2c3: i2c@53fec000 {
351 #address-cells = <1>;
352 #size-cells = <0>;
353 compatible = "fsl,imx50-i2c", "fsl,imx21-i2c";
354 reg = <0x53fec000 0x4000>;
355 interrupts = <64>;
356 clocks = <&clks IMX5_CLK_I2C3_GATE>;
357 status = "disabled";
358 };
359
360 uart4: serial@53ff0000 {
361 compatible = "fsl,imx50-uart", "fsl,imx21-uart";
362 reg = <0x53ff0000 0x4000>;
363 interrupts = <13>;
364 clocks = <&clks IMX5_CLK_UART4_IPG_GATE>,
365 <&clks IMX5_CLK_UART4_PER_GATE>;
366 clock-names = "ipg", "per";
367 status = "disabled";
368 };
369 };
370
371 aips@60000000 { /* AIPS2 */
372 compatible = "fsl,aips-bus", "simple-bus";
373 #address-cells = <1>;
374 #size-cells = <1>;
375 reg = <0x60000000 0x10000000>;
376 ranges;
377
378 uart5: serial@63f90000 {
379 compatible = "fsl,imx50-uart", "fsl,imx21-uart";
380 reg = <0x63f90000 0x4000>;
381 interrupts = <86>;
382 clocks = <&clks IMX5_CLK_UART5_IPG_GATE>,
383 <&clks IMX5_CLK_UART5_PER_GATE>;
384 clock-names = "ipg", "per";
385 status = "disabled";
386 };
387
388 owire: owire@63fa4000 {
389 compatible = "fsl,imx50-owire", "fsl,imx21-owire";
390 reg = <0x63fa4000 0x4000>;
391 clocks = <&clks IMX5_CLK_OWIRE_GATE>;
392 status = "disabled";
393 };
394
395 ecspi2: ecspi@63fac000 {
396 #address-cells = <1>;
397 #size-cells = <0>;
398 compatible = "fsl,imx50-ecspi", "fsl,imx51-ecspi";
399 reg = <0x63fac000 0x4000>;
400 interrupts = <37>;
401 clocks = <&clks IMX5_CLK_ECSPI2_IPG_GATE>,
402 <&clks IMX5_CLK_ECSPI2_PER_GATE>;
403 clock-names = "ipg", "per";
404 status = "disabled";
405 };
406
407 sdma: sdma@63fb0000 {
408 compatible = "fsl,imx50-sdma", "fsl,imx35-sdma";
409 reg = <0x63fb0000 0x4000>;
410 interrupts = <6>;
411 clocks = <&clks IMX5_CLK_SDMA_GATE>,
412 <&clks IMX5_CLK_SDMA_GATE>;
413 clock-names = "ipg", "ahb";
414 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx50.bin";
415 };
416
417 cspi: cspi@63fc0000 {
418 #address-cells = <1>;
419 #size-cells = <0>;
420 compatible = "fsl,imx50-cspi", "fsl,imx35-cspi";
421 reg = <0x63fc0000 0x4000>;
422 interrupts = <38>;
423 clocks = <&clks IMX5_CLK_CSPI_IPG_GATE>,
424 <&clks IMX5_CLK_CSPI_IPG_GATE>;
425 clock-names = "ipg", "per";
426 status = "disabled";
427 };
428
429 i2c2: i2c@63fc4000 {
430 #address-cells = <1>;
431 #size-cells = <0>;
432 compatible = "fsl,imx50-i2c", "fsl,imx21-i2c";
433 reg = <0x63fc4000 0x4000>;
434 interrupts = <63>;
435 clocks = <&clks IMX5_CLK_I2C2_GATE>;
436 status = "disabled";
437 };
438
439 i2c1: i2c@63fc8000 {
440 #address-cells = <1>;
441 #size-cells = <0>;
442 compatible = "fsl,imx50-i2c", "fsl,imx21-i2c";
443 reg = <0x63fc8000 0x4000>;
444 interrupts = <62>;
445 clocks = <&clks IMX5_CLK_I2C1_GATE>;
446 status = "disabled";
447 };
448
449 ssi1: ssi@63fcc000 {
450 compatible = "fsl,imx50-ssi", "fsl,imx51-ssi",
451 "fsl,imx21-ssi";
452 reg = <0x63fcc000 0x4000>;
453 interrupts = <29>;
454 clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>;
455 fsl,fifo-depth = <15>;
456 fsl,ssi-dma-events = <29 28 27 26>; /* TX0 RX0 TX1 RX1 */
457 status = "disabled";
458 };
459
460 audmux: audmux@63fd0000 {
461 compatible = "fsl,imx50-audmux", "fsl,imx31-audmux";
462 reg = <0x63fd0000 0x4000>;
463 status = "disabled";
464 };
465
466 fec: ethernet@63fec000 {
467 compatible = "fsl,imx53-fec", "fsl,imx25-fec";
468 reg = <0x63fec000 0x4000>;
469 interrupts = <87>;
470 clocks = <&clks IMX5_CLK_FEC_GATE>,
471 <&clks IMX5_CLK_FEC_GATE>,
472 <&clks IMX5_CLK_FEC_GATE>;
473 clock-names = "ipg", "ahb", "ptp";
474 status = "disabled";
475 };
476 };
477 };
478};
diff --git a/arch/arm/boot/dts/imx51-apf51.dts b/arch/arm/boot/dts/imx51-apf51.dts
index b3606993f2e8..e88b2a6be079 100644
--- a/arch/arm/boot/dts/imx51-apf51.dts
+++ b/arch/arm/boot/dts/imx51-apf51.dts
@@ -34,13 +34,47 @@
34 34
35&fec { 35&fec {
36 pinctrl-names = "default"; 36 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_fec_2>; 37 pinctrl-0 = <&pinctrl_fec>;
38 phy-mode = "mii"; 38 phy-mode = "mii";
39 phy-reset-gpios = <&gpio3 0 0>; 39 phy-reset-gpios = <&gpio3 0 GPIO_ACTIVE_HIGH>;
40 phy-reset-duration = <1>; 40 phy-reset-duration = <1>;
41 status = "okay"; 41 status = "okay";
42}; 42};
43 43
44&iomuxc {
45 imx51-apf51 {
46 pinctrl_fec: fecgrp {
47 fsl,pins = <
48 MX51_PAD_DI_GP3__FEC_TX_ER 0x80000000
49 MX51_PAD_DI2_PIN4__FEC_CRS 0x80000000
50 MX51_PAD_DI2_PIN2__FEC_MDC 0x80000000
51 MX51_PAD_DI2_PIN3__FEC_MDIO 0x80000000
52 MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 0x80000000
53 MX51_PAD_DI_GP4__FEC_RDATA2 0x80000000
54 MX51_PAD_DISP2_DAT0__FEC_RDATA3 0x80000000
55 MX51_PAD_DISP2_DAT1__FEC_RX_ER 0x80000000
56 MX51_PAD_DISP2_DAT6__FEC_TDATA1 0x80000000
57 MX51_PAD_DISP2_DAT7__FEC_TDATA2 0x80000000
58 MX51_PAD_DISP2_DAT8__FEC_TDATA3 0x80000000
59 MX51_PAD_DISP2_DAT9__FEC_TX_EN 0x80000000
60 MX51_PAD_DISP2_DAT10__FEC_COL 0x80000000
61 MX51_PAD_DISP2_DAT11__FEC_RX_CLK 0x80000000
62 MX51_PAD_DISP2_DAT12__FEC_RX_DV 0x80000000
63 MX51_PAD_DISP2_DAT13__FEC_TX_CLK 0x80000000
64 MX51_PAD_DISP2_DAT14__FEC_RDATA0 0x80000000
65 MX51_PAD_DISP2_DAT15__FEC_TDATA0 0x80000000
66 >;
67 };
68
69 pinctrl_uart3: uart3grp {
70 fsl,pins = <
71 MX51_PAD_UART3_RXD__UART3_RXD 0x1c5
72 MX51_PAD_UART3_TXD__UART3_TXD 0x1c5
73 >;
74 };
75 };
76};
77
44&nfc { 78&nfc {
45 nand-bus-width = <8>; 79 nand-bus-width = <8>;
46 nand-ecc-mode = "hw"; 80 nand-ecc-mode = "hw";
@@ -50,6 +84,6 @@
50 84
51&uart3 { 85&uart3 {
52 pinctrl-names = "default"; 86 pinctrl-names = "default";
53 pinctrl-0 = <&pinctrl_uart3_2>; 87 pinctrl-0 = <&pinctrl_uart3>;
54 status = "okay"; 88 status = "okay";
55}; 89};
diff --git a/arch/arm/boot/dts/imx51-apf51dev.dts b/arch/arm/boot/dts/imx51-apf51dev.dts
index 5a7f552786a1..c29cfa927c98 100644
--- a/arch/arm/boot/dts/imx51-apf51dev.dts
+++ b/arch/arm/boot/dts/imx51-apf51dev.dts
@@ -21,7 +21,7 @@
21 crtcs = <&ipu 0>; 21 crtcs = <&ipu 0>;
22 interface-pix-fmt = "bgr666"; 22 interface-pix-fmt = "bgr666";
23 pinctrl-names = "default"; 23 pinctrl-names = "default";
24 pinctrl-0 = <&pinctrl_ipu_disp1_1>; 24 pinctrl-0 = <&pinctrl_ipu_disp1>;
25 25
26 display-timings { 26 display-timings {
27 lw700 { 27 lw700 {
@@ -48,7 +48,7 @@
48 48
49 user-key { 49 user-key {
50 label = "user"; 50 label = "user";
51 gpios = <&gpio1 3 0>; 51 gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
52 linux,code = <256>; /* BTN_0 */ 52 linux,code = <256>; /* BTN_0 */
53 }; 53 };
54 }; 54 };
@@ -58,7 +58,7 @@
58 58
59 user { 59 user {
60 label = "Heartbeat"; 60 label = "Heartbeat";
61 gpios = <&gpio1 2 0>; 61 gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
62 linux,default-trigger = "heartbeat"; 62 linux,default-trigger = "heartbeat";
63 }; 63 };
64 }; 64 };
@@ -66,31 +66,33 @@
66 66
67&ecspi1 { 67&ecspi1 {
68 pinctrl-names = "default"; 68 pinctrl-names = "default";
69 pinctrl-0 = <&pinctrl_ecspi1_1>; 69 pinctrl-0 = <&pinctrl_ecspi1>;
70 fsl,spi-num-chipselects = <2>; 70 fsl,spi-num-chipselects = <2>;
71 cs-gpios = <&gpio4 24 0>, <&gpio4 25 0>; 71 cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>,
72 <&gpio4 25 GPIO_ACTIVE_HIGH>;
72 status = "okay"; 73 status = "okay";
73}; 74};
74 75
75&ecspi2 { 76&ecspi2 {
76 pinctrl-names = "default"; 77 pinctrl-names = "default";
77 pinctrl-0 = <&pinctrl_ecspi2_1>; 78 pinctrl-0 = <&pinctrl_ecspi2>;
78 fsl,spi-num-chipselects = <2>; 79 fsl,spi-num-chipselects = <2>;
79 cs-gpios = <&gpio3 28 1>, <&gpio3 27 1>; 80 cs-gpios = <&gpio3 28 GPIO_ACTIVE_LOW>,
81 <&gpio3 27 GPIO_ACTIVE_LOW>;
80 status = "okay"; 82 status = "okay";
81}; 83};
82 84
83&esdhc1 { 85&esdhc1 {
84 pinctrl-names = "default"; 86 pinctrl-names = "default";
85 pinctrl-0 = <&pinctrl_esdhc1_1>; 87 pinctrl-0 = <&pinctrl_esdhc1>;
86 cd-gpios = <&gpio2 29 0>; 88 cd-gpios = <&gpio2 29 GPIO_ACTIVE_HIGH>;
87 bus-width = <4>; 89 bus-width = <4>;
88 status = "okay"; 90 status = "okay";
89}; 91};
90 92
91&esdhc2 { 93&esdhc2 {
92 pinctrl-names = "default"; 94 pinctrl-names = "default";
93 pinctrl-0 = <&pinctrl_esdhc2_1>; 95 pinctrl-0 = <&pinctrl_esdhc2>;
94 bus-width = <4>; 96 bus-width = <4>;
95 non-removable; 97 non-removable;
96 status = "okay"; 98 status = "okay";
@@ -98,7 +100,7 @@
98 100
99&i2c2 { 101&i2c2 {
100 pinctrl-names = "default"; 102 pinctrl-names = "default";
101 pinctrl-0 = <&pinctrl_i2c2_2>; 103 pinctrl-0 = <&pinctrl_i2c2>;
102 status = "okay"; 104 status = "okay";
103}; 105};
104 106
@@ -106,7 +108,7 @@
106 pinctrl-names = "default"; 108 pinctrl-names = "default";
107 pinctrl-0 = <&pinctrl_hog>; 109 pinctrl-0 = <&pinctrl_hog>;
108 110
109 hog { 111 imx51-apf51dev {
110 pinctrl_hog: hoggrp { 112 pinctrl_hog: hoggrp {
111 fsl,pins = < 113 fsl,pins = <
112 MX51_PAD_EIM_EB2__GPIO2_22 0x0C5 114 MX51_PAD_EIM_EB2__GPIO2_22 0x0C5
@@ -120,5 +122,81 @@
120 MX51_PAD_GPIO1_3__GPIO1_3 0x0C5 122 MX51_PAD_GPIO1_3__GPIO1_3 0x0C5
121 >; 123 >;
122 }; 124 };
125
126 pinctrl_ecspi1: ecspi1grp {
127 fsl,pins = <
128 MX51_PAD_CSPI1_MISO__ECSPI1_MISO 0x185
129 MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI 0x185
130 MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK 0x185
131 >;
132 };
133
134 pinctrl_ecspi2: ecspi2grp {
135 fsl,pins = <
136 MX51_PAD_NANDF_RB3__ECSPI2_MISO 0x185
137 MX51_PAD_NANDF_D15__ECSPI2_MOSI 0x185
138 MX51_PAD_NANDF_RB2__ECSPI2_SCLK 0x185
139 >;
140 };
141
142 pinctrl_esdhc1: esdhc1grp {
143 fsl,pins = <
144 MX51_PAD_SD1_CMD__SD1_CMD 0x400020d5
145 MX51_PAD_SD1_CLK__SD1_CLK 0x20d5
146 MX51_PAD_SD1_DATA0__SD1_DATA0 0x20d5
147 MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5
148 MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5
149 MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5
150 >;
151 };
152
153 pinctrl_esdhc2: esdhc2grp {
154 fsl,pins = <
155 MX51_PAD_SD2_CMD__SD2_CMD 0x400020d5
156 MX51_PAD_SD2_CLK__SD2_CLK 0x20d5
157 MX51_PAD_SD2_DATA0__SD2_DATA0 0x20d5
158 MX51_PAD_SD2_DATA1__SD2_DATA1 0x20d5
159 MX51_PAD_SD2_DATA2__SD2_DATA2 0x20d5
160 MX51_PAD_SD2_DATA3__SD2_DATA3 0x20d5
161 >;
162 };
163
164 pinctrl_i2c2: i2c2grp {
165 fsl,pins = <
166 MX51_PAD_EIM_D27__I2C2_SCL 0x400001ed
167 MX51_PAD_EIM_D24__I2C2_SDA 0x400001ed
168 >;
169 };
170
171 pinctrl_ipu_disp1: ipudisp1grp {
172 fsl,pins = <
173 MX51_PAD_DISP1_DAT0__DISP1_DAT0 0x5
174 MX51_PAD_DISP1_DAT1__DISP1_DAT1 0x5
175 MX51_PAD_DISP1_DAT2__DISP1_DAT2 0x5
176 MX51_PAD_DISP1_DAT3__DISP1_DAT3 0x5
177 MX51_PAD_DISP1_DAT4__DISP1_DAT4 0x5
178 MX51_PAD_DISP1_DAT5__DISP1_DAT5 0x5
179 MX51_PAD_DISP1_DAT6__DISP1_DAT6 0x5
180 MX51_PAD_DISP1_DAT7__DISP1_DAT7 0x5
181 MX51_PAD_DISP1_DAT8__DISP1_DAT8 0x5
182 MX51_PAD_DISP1_DAT9__DISP1_DAT9 0x5
183 MX51_PAD_DISP1_DAT10__DISP1_DAT10 0x5
184 MX51_PAD_DISP1_DAT11__DISP1_DAT11 0x5
185 MX51_PAD_DISP1_DAT12__DISP1_DAT12 0x5
186 MX51_PAD_DISP1_DAT13__DISP1_DAT13 0x5
187 MX51_PAD_DISP1_DAT14__DISP1_DAT14 0x5
188 MX51_PAD_DISP1_DAT15__DISP1_DAT15 0x5
189 MX51_PAD_DISP1_DAT16__DISP1_DAT16 0x5
190 MX51_PAD_DISP1_DAT17__DISP1_DAT17 0x5
191 MX51_PAD_DISP1_DAT18__DISP1_DAT18 0x5
192 MX51_PAD_DISP1_DAT19__DISP1_DAT19 0x5
193 MX51_PAD_DISP1_DAT20__DISP1_DAT20 0x5
194 MX51_PAD_DISP1_DAT21__DISP1_DAT21 0x5
195 MX51_PAD_DISP1_DAT22__DISP1_DAT22 0x5
196 MX51_PAD_DISP1_DAT23__DISP1_DAT23 0x5
197 MX51_PAD_DI1_PIN2__DI1_PIN2 0x5
198 MX51_PAD_DI1_PIN3__DI1_PIN3 0x5
199 >;
200 };
123 }; 201 };
124}; 202};
diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts
index be1407cf5abd..121dadd125c0 100644
--- a/arch/arm/boot/dts/imx51-babbage.dts
+++ b/arch/arm/boot/dts/imx51-babbage.dts
@@ -26,7 +26,7 @@
26 crtcs = <&ipu 0>; 26 crtcs = <&ipu 0>;
27 interface-pix-fmt = "rgb24"; 27 interface-pix-fmt = "rgb24";
28 pinctrl-names = "default"; 28 pinctrl-names = "default";
29 pinctrl-0 = <&pinctrl_ipu_disp1_1>; 29 pinctrl-0 = <&pinctrl_ipu_disp1>;
30 display-timings { 30 display-timings {
31 native-mode = <&timing0>; 31 native-mode = <&timing0>;
32 timing0: dvi { 32 timing0: dvi {
@@ -48,7 +48,7 @@
48 crtcs = <&ipu 1>; 48 crtcs = <&ipu 1>;
49 interface-pix-fmt = "rgb565"; 49 interface-pix-fmt = "rgb565";
50 pinctrl-names = "default"; 50 pinctrl-names = "default";
51 pinctrl-0 = <&pinctrl_ipu_disp2_1>; 51 pinctrl-0 = <&pinctrl_ipu_disp2>;
52 status = "disabled"; 52 status = "disabled";
53 display-timings { 53 display-timings {
54 native-mode = <&timing1>; 54 native-mode = <&timing1>;
@@ -75,12 +75,23 @@
75 75
76 power { 76 power {
77 label = "Power Button"; 77 label = "Power Button";
78 gpios = <&gpio2 21 0>; 78 gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
79 linux,code = <116>; /* KEY_POWER */ 79 linux,code = <116>; /* KEY_POWER */
80 gpio-key,wakeup; 80 gpio-key,wakeup;
81 }; 81 };
82 }; 82 };
83 83
84 leds {
85 compatible = "gpio-leds";
86 pinctrl-names = "default";
87 pinctrl-0 = <&pinctrl_gpio_leds>;
88
89 led-diagnostic {
90 label = "diagnostic";
91 gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
92 };
93 };
94
84 sound { 95 sound {
85 compatible = "fsl,imx51-babbage-sgtl5000", 96 compatible = "fsl,imx51-babbage-sgtl5000",
86 "fsl,imx-audio-sgtl5000"; 97 "fsl,imx-audio-sgtl5000";
@@ -105,14 +116,14 @@
105 reg=<0>; 116 reg=<0>;
106 #clock-cells = <0>; 117 #clock-cells = <0>;
107 clock-frequency = <26000000>; 118 clock-frequency = <26000000>;
108 gpios = <&gpio4 26 1>; 119 gpios = <&gpio4 26 GPIO_ACTIVE_LOW>;
109 }; 120 };
110 }; 121 };
111}; 122};
112 123
113&esdhc1 { 124&esdhc1 {
114 pinctrl-names = "default"; 125 pinctrl-names = "default";
115 pinctrl-0 = <&pinctrl_esdhc1_1>; 126 pinctrl-0 = <&pinctrl_esdhc1>;
116 fsl,cd-controller; 127 fsl,cd-controller;
117 fsl,wp-controller; 128 fsl,wp-controller;
118 status = "okay"; 129 status = "okay";
@@ -120,24 +131,25 @@
120 131
121&esdhc2 { 132&esdhc2 {
122 pinctrl-names = "default"; 133 pinctrl-names = "default";
123 pinctrl-0 = <&pinctrl_esdhc2_1>; 134 pinctrl-0 = <&pinctrl_esdhc2>;
124 cd-gpios = <&gpio1 6 0>; 135 cd-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
125 wp-gpios = <&gpio1 5 0>; 136 wp-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
126 status = "okay"; 137 status = "okay";
127}; 138};
128 139
129&uart3 { 140&uart3 {
130 pinctrl-names = "default"; 141 pinctrl-names = "default";
131 pinctrl-0 = <&pinctrl_uart3_1 &pinctrl_uart3_rtscts_1>; 142 pinctrl-0 = <&pinctrl_uart3>;
132 fsl,uart-has-rtscts; 143 fsl,uart-has-rtscts;
133 status = "okay"; 144 status = "okay";
134}; 145};
135 146
136&ecspi1 { 147&ecspi1 {
137 pinctrl-names = "default"; 148 pinctrl-names = "default";
138 pinctrl-0 = <&pinctrl_ecspi1_1>; 149 pinctrl-0 = <&pinctrl_ecspi1>;
139 fsl,spi-num-chipselects = <2>; 150 fsl,spi-num-chipselects = <2>;
140 cs-gpios = <&gpio4 24 0>, <&gpio4 25 0>; 151 cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>,
152 <&gpio4 25 GPIO_ACTIVE_LOW>;
141 status = "okay"; 153 status = "okay";
142 154
143 pmic: mc13892@0 { 155 pmic: mc13892@0 {
@@ -148,7 +160,7 @@
148 spi-cs-high; 160 spi-cs-high;
149 reg = <0>; 161 reg = <0>;
150 interrupt-parent = <&gpio1>; 162 interrupt-parent = <&gpio1>;
151 interrupts = <8 0x4>; 163 interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
152 164
153 regulators { 165 regulators {
154 sw1_reg: sw1 { 166 sw1_reg: sw1 {
@@ -267,7 +279,7 @@
267 pinctrl-names = "default"; 279 pinctrl-names = "default";
268 pinctrl-0 = <&pinctrl_hog>; 280 pinctrl-0 = <&pinctrl_hog>;
269 281
270 hog { 282 imx51-babbage {
271 pinctrl_hog: hoggrp { 283 pinctrl_hog: hoggrp {
272 fsl,pins = < 284 fsl,pins = <
273 MX51_PAD_GPIO1_0__SD1_CD 0x20d5 285 MX51_PAD_GPIO1_0__SD1_CD 0x20d5
@@ -280,25 +292,194 @@
280 MX51_PAD_CSPI1_RDY__GPIO4_26 0x80000000 292 MX51_PAD_CSPI1_RDY__GPIO4_26 0x80000000
281 >; 293 >;
282 }; 294 };
295
296 pinctrl_audmux: audmuxgrp {
297 fsl,pins = <
298 MX51_PAD_AUD3_BB_TXD__AUD3_TXD 0x80000000
299 MX51_PAD_AUD3_BB_RXD__AUD3_RXD 0x80000000
300 MX51_PAD_AUD3_BB_CK__AUD3_TXC 0x80000000
301 MX51_PAD_AUD3_BB_FS__AUD3_TXFS 0x80000000
302 >;
303 };
304
305 pinctrl_ecspi1: ecspi1grp {
306 fsl,pins = <
307 MX51_PAD_CSPI1_MISO__ECSPI1_MISO 0x185
308 MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI 0x185
309 MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK 0x185
310 >;
311 };
312
313 pinctrl_esdhc1: esdhc1grp {
314 fsl,pins = <
315 MX51_PAD_SD1_CMD__SD1_CMD 0x400020d5
316 MX51_PAD_SD1_CLK__SD1_CLK 0x20d5
317 MX51_PAD_SD1_DATA0__SD1_DATA0 0x20d5
318 MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5
319 MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5
320 MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5
321 >;
322 };
323
324 pinctrl_esdhc2: esdhc2grp {
325 fsl,pins = <
326 MX51_PAD_SD2_CMD__SD2_CMD 0x400020d5
327 MX51_PAD_SD2_CLK__SD2_CLK 0x20d5
328 MX51_PAD_SD2_DATA0__SD2_DATA0 0x20d5
329 MX51_PAD_SD2_DATA1__SD2_DATA1 0x20d5
330 MX51_PAD_SD2_DATA2__SD2_DATA2 0x20d5
331 MX51_PAD_SD2_DATA3__SD2_DATA3 0x20d5
332 >;
333 };
334
335 pinctrl_fec: fecgrp {
336 fsl,pins = <
337 MX51_PAD_EIM_EB2__FEC_MDIO 0x80000000
338 MX51_PAD_EIM_EB3__FEC_RDATA1 0x80000000
339 MX51_PAD_EIM_CS2__FEC_RDATA2 0x80000000
340 MX51_PAD_EIM_CS3__FEC_RDATA3 0x80000000
341 MX51_PAD_EIM_CS4__FEC_RX_ER 0x80000000
342 MX51_PAD_EIM_CS5__FEC_CRS 0x80000000
343 MX51_PAD_NANDF_RB2__FEC_COL 0x80000000
344 MX51_PAD_NANDF_RB3__FEC_RX_CLK 0x80000000
345 MX51_PAD_NANDF_D9__FEC_RDATA0 0x80000000
346 MX51_PAD_NANDF_D8__FEC_TDATA0 0x80000000
347 MX51_PAD_NANDF_CS2__FEC_TX_ER 0x80000000
348 MX51_PAD_NANDF_CS3__FEC_MDC 0x80000000
349 MX51_PAD_NANDF_CS4__FEC_TDATA1 0x80000000
350 MX51_PAD_NANDF_CS5__FEC_TDATA2 0x80000000
351 MX51_PAD_NANDF_CS6__FEC_TDATA3 0x80000000
352 MX51_PAD_NANDF_CS7__FEC_TX_EN 0x80000000
353 MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK 0x80000000
354 MX51_PAD_EIM_A20__GPIO2_14 0x85 /* Reset */
355 >;
356 };
357
358 pinctrl_gpio_leds: gpioledsgrp {
359 fsl,pins = <
360 MX51_PAD_EIM_D22__GPIO2_6 0x80000000
361 >;
362 };
363
364 pinctrl_i2c2: i2c2grp {
365 fsl,pins = <
366 MX51_PAD_KEY_COL4__I2C2_SCL 0x400001ed
367 MX51_PAD_KEY_COL5__I2C2_SDA 0x400001ed
368 >;
369 };
370
371 pinctrl_ipu_disp1: ipudisp1grp {
372 fsl,pins = <
373 MX51_PAD_DISP1_DAT0__DISP1_DAT0 0x5
374 MX51_PAD_DISP1_DAT1__DISP1_DAT1 0x5
375 MX51_PAD_DISP1_DAT2__DISP1_DAT2 0x5
376 MX51_PAD_DISP1_DAT3__DISP1_DAT3 0x5
377 MX51_PAD_DISP1_DAT4__DISP1_DAT4 0x5
378 MX51_PAD_DISP1_DAT5__DISP1_DAT5 0x5
379 MX51_PAD_DISP1_DAT6__DISP1_DAT6 0x5
380 MX51_PAD_DISP1_DAT7__DISP1_DAT7 0x5
381 MX51_PAD_DISP1_DAT8__DISP1_DAT8 0x5
382 MX51_PAD_DISP1_DAT9__DISP1_DAT9 0x5
383 MX51_PAD_DISP1_DAT10__DISP1_DAT10 0x5
384 MX51_PAD_DISP1_DAT11__DISP1_DAT11 0x5
385 MX51_PAD_DISP1_DAT12__DISP1_DAT12 0x5
386 MX51_PAD_DISP1_DAT13__DISP1_DAT13 0x5
387 MX51_PAD_DISP1_DAT14__DISP1_DAT14 0x5
388 MX51_PAD_DISP1_DAT15__DISP1_DAT15 0x5
389 MX51_PAD_DISP1_DAT16__DISP1_DAT16 0x5
390 MX51_PAD_DISP1_DAT17__DISP1_DAT17 0x5
391 MX51_PAD_DISP1_DAT18__DISP1_DAT18 0x5
392 MX51_PAD_DISP1_DAT19__DISP1_DAT19 0x5
393 MX51_PAD_DISP1_DAT20__DISP1_DAT20 0x5
394 MX51_PAD_DISP1_DAT21__DISP1_DAT21 0x5
395 MX51_PAD_DISP1_DAT22__DISP1_DAT22 0x5
396 MX51_PAD_DISP1_DAT23__DISP1_DAT23 0x5
397 MX51_PAD_DI1_PIN2__DI1_PIN2 0x5
398 MX51_PAD_DI1_PIN3__DI1_PIN3 0x5
399 >;
400 };
401
402 pinctrl_ipu_disp2: ipudisp2grp {
403 fsl,pins = <
404 MX51_PAD_DISP2_DAT0__DISP2_DAT0 0x5
405 MX51_PAD_DISP2_DAT1__DISP2_DAT1 0x5
406 MX51_PAD_DISP2_DAT2__DISP2_DAT2 0x5
407 MX51_PAD_DISP2_DAT3__DISP2_DAT3 0x5
408 MX51_PAD_DISP2_DAT4__DISP2_DAT4 0x5
409 MX51_PAD_DISP2_DAT5__DISP2_DAT5 0x5
410 MX51_PAD_DISP2_DAT6__DISP2_DAT6 0x5
411 MX51_PAD_DISP2_DAT7__DISP2_DAT7 0x5
412 MX51_PAD_DISP2_DAT8__DISP2_DAT8 0x5
413 MX51_PAD_DISP2_DAT9__DISP2_DAT9 0x5
414 MX51_PAD_DISP2_DAT10__DISP2_DAT10 0x5
415 MX51_PAD_DISP2_DAT11__DISP2_DAT11 0x5
416 MX51_PAD_DISP2_DAT12__DISP2_DAT12 0x5
417 MX51_PAD_DISP2_DAT13__DISP2_DAT13 0x5
418 MX51_PAD_DISP2_DAT14__DISP2_DAT14 0x5
419 MX51_PAD_DISP2_DAT15__DISP2_DAT15 0x5
420 MX51_PAD_DI2_PIN2__DI2_PIN2 0x5
421 MX51_PAD_DI2_PIN3__DI2_PIN3 0x5
422 MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK 0x5
423 MX51_PAD_DI_GP4__DI2_PIN15 0x5
424 >;
425 };
426
427 pinctrl_kpp: kppgrp {
428 fsl,pins = <
429 MX51_PAD_KEY_ROW0__KEY_ROW0 0xe0
430 MX51_PAD_KEY_ROW1__KEY_ROW1 0xe0
431 MX51_PAD_KEY_ROW2__KEY_ROW2 0xe0
432 MX51_PAD_KEY_ROW3__KEY_ROW3 0xe0
433 MX51_PAD_KEY_COL0__KEY_COL0 0xe8
434 MX51_PAD_KEY_COL1__KEY_COL1 0xe8
435 MX51_PAD_KEY_COL2__KEY_COL2 0xe8
436 MX51_PAD_KEY_COL3__KEY_COL3 0xe8
437 >;
438 };
439
440 pinctrl_uart1: uart1grp {
441 fsl,pins = <
442 MX51_PAD_UART1_RXD__UART1_RXD 0x1c5
443 MX51_PAD_UART1_TXD__UART1_TXD 0x1c5
444 MX51_PAD_UART1_RTS__UART1_RTS 0x1c5
445 MX51_PAD_UART1_CTS__UART1_CTS 0x1c5
446 >;
447 };
448
449 pinctrl_uart2: uart2grp {
450 fsl,pins = <
451 MX51_PAD_UART2_RXD__UART2_RXD 0x1c5
452 MX51_PAD_UART2_TXD__UART2_TXD 0x1c5
453 >;
454 };
455
456 pinctrl_uart3: uart3grp {
457 fsl,pins = <
458 MX51_PAD_EIM_D25__UART3_RXD 0x1c5
459 MX51_PAD_EIM_D26__UART3_TXD 0x1c5
460 MX51_PAD_EIM_D27__UART3_RTS 0x1c5
461 MX51_PAD_EIM_D24__UART3_CTS 0x1c5
462 >;
463 };
283 }; 464 };
284}; 465};
285 466
286&uart1 { 467&uart1 {
287 pinctrl-names = "default"; 468 pinctrl-names = "default";
288 pinctrl-0 = <&pinctrl_uart1_1 &pinctrl_uart1_rtscts_1>; 469 pinctrl-0 = <&pinctrl_uart1>;
289 fsl,uart-has-rtscts; 470 fsl,uart-has-rtscts;
290 status = "okay"; 471 status = "okay";
291}; 472};
292 473
293&uart2 { 474&uart2 {
294 pinctrl-names = "default"; 475 pinctrl-names = "default";
295 pinctrl-0 = <&pinctrl_uart2_1>; 476 pinctrl-0 = <&pinctrl_uart2>;
296 status = "okay"; 477 status = "okay";
297}; 478};
298 479
299&i2c2 { 480&i2c2 {
300 pinctrl-names = "default"; 481 pinctrl-names = "default";
301 pinctrl-0 = <&pinctrl_i2c2_1>; 482 pinctrl-0 = <&pinctrl_i2c2>;
302 status = "okay"; 483 status = "okay";
303 484
304 sgtl5000: codec@0a { 485 sgtl5000: codec@0a {
@@ -312,35 +493,39 @@
312 493
313&audmux { 494&audmux {
314 pinctrl-names = "default"; 495 pinctrl-names = "default";
315 pinctrl-0 = <&pinctrl_audmux_1>; 496 pinctrl-0 = <&pinctrl_audmux>;
316 status = "okay"; 497 status = "okay";
317}; 498};
318 499
319&fec { 500&fec {
320 pinctrl-names = "default"; 501 pinctrl-names = "default";
321 pinctrl-0 = <&pinctrl_fec_1>; 502 pinctrl-0 = <&pinctrl_fec>;
322 phy-mode = "mii"; 503 phy-mode = "mii";
504 phy-reset-gpios = <&gpio2 14 GPIO_ACTIVE_LOW>;
505 phy-reset-duration = <1>;
323 status = "okay"; 506 status = "okay";
324}; 507};
325 508
326&kpp { 509&kpp {
327 pinctrl-names = "default"; 510 pinctrl-names = "default";
328 pinctrl-0 = <&pinctrl_kpp_1>; 511 pinctrl-0 = <&pinctrl_kpp>;
329 linux,keymap = <0x00000067 /* KEY_UP */ 512 linux,keymap = <
330 0x0001006c /* KEY_DOWN */ 513 MATRIX_KEY(0, 0, KEY_UP)
331 0x00020072 /* KEY_VOLUMEDOWN */ 514 MATRIX_KEY(0, 1, KEY_DOWN)
332 0x00030066 /* KEY_HOME */ 515 MATRIX_KEY(0, 2, KEY_VOLUMEDOWN)
333 0x0100006a /* KEY_RIGHT */ 516 MATRIX_KEY(0, 3, KEY_HOME)
334 0x01010069 /* KEY_LEFT */ 517 MATRIX_KEY(1, 0, KEY_RIGHT)
335 0x0102001c /* KEY_ENTER */ 518 MATRIX_KEY(1, 1, KEY_LEFT)
336 0x01030073 /* KEY_VOLUMEUP */ 519 MATRIX_KEY(1, 2, KEY_ENTER)
337 0x02000040 /* KEY_F6 */ 520 MATRIX_KEY(1, 3, KEY_VOLUMEUP)
338 0x02010042 /* KEY_F8 */ 521 MATRIX_KEY(2, 0, KEY_F6)
339 0x02020043 /* KEY_F9 */ 522 MATRIX_KEY(2, 1, KEY_F8)
340 0x02030044 /* KEY_F10 */ 523 MATRIX_KEY(2, 2, KEY_F9)
341 0x0300003b /* KEY_F1 */ 524 MATRIX_KEY(2, 3, KEY_F10)
342 0x0301003c /* KEY_F2 */ 525 MATRIX_KEY(3, 0, KEY_F1)
343 0x0302003d /* KEY_F3 */ 526 MATRIX_KEY(3, 1, KEY_F2)
344 0x03030074>; /* KEY_POWER */ 527 MATRIX_KEY(3, 2, KEY_F3)
528 MATRIX_KEY(3, 3, KEY_POWER)
529 >;
345 status = "okay"; 530 status = "okay";
346}; 531};
diff --git a/arch/arm/boot/dts/imx51-eukrea-cpuimx51.dtsi b/arch/arm/boot/dts/imx51-eukrea-cpuimx51.dtsi
new file mode 100644
index 000000000000..9b3acf6e4282
--- /dev/null
+++ b/arch/arm/boot/dts/imx51-eukrea-cpuimx51.dtsi
@@ -0,0 +1,93 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16 * MA 02110-1301, USA.
17 */
18
19#include "imx51.dtsi"
20
21/ {
22 model = "Eukrea CPUIMX51";
23 compatible = "eukrea,cpuimx51", "fsl,imx51";
24
25 memory {
26 reg = <0x90000000 0x10000000>; /* 256M */
27 };
28};
29
30&fec {
31 pinctrl-names = "default";
32 pinctrl-0 = <&pinctrl_fec>;
33 status = "okay";
34};
35
36&i2c1 {
37 pinctrl-names = "default";
38 pinctrl-0 = <&pinctrl_i2c1>;
39 status = "okay";
40
41 pcf8563@51 {
42 compatible = "nxp,pcf8563";
43 reg = <0x51>;
44 };
45};
46
47&iomuxc {
48 imx51-eukrea {
49 pinctrl_tsc2007_1: tsc2007grp-1 {
50 fsl,pins = <
51 MX51_PAD_GPIO_NAND__GPIO_NAND 0x1f5
52 MX51_PAD_NANDF_D8__GPIO4_0 0x1f5
53 >;
54 };
55
56 pinctrl_fec: fecgrp {
57 fsl,pins = <
58 MX51_PAD_DI_GP3__FEC_TX_ER 0x80000000
59 MX51_PAD_DI2_PIN4__FEC_CRS 0x80000000
60 MX51_PAD_DI2_PIN2__FEC_MDC 0x80000000
61 MX51_PAD_DI2_PIN3__FEC_MDIO 0x80000000
62 MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 0x80000000
63 MX51_PAD_DI_GP4__FEC_RDATA2 0x80000000
64 MX51_PAD_DISP2_DAT0__FEC_RDATA3 0x80000000
65 MX51_PAD_DISP2_DAT1__FEC_RX_ER 0x80000000
66 MX51_PAD_DISP2_DAT6__FEC_TDATA1 0x80000000
67 MX51_PAD_DISP2_DAT7__FEC_TDATA2 0x80000000
68 MX51_PAD_DISP2_DAT8__FEC_TDATA3 0x80000000
69 MX51_PAD_DISP2_DAT9__FEC_TX_EN 0x80000000
70 MX51_PAD_DISP2_DAT10__FEC_COL 0x80000000
71 MX51_PAD_DISP2_DAT11__FEC_RX_CLK 0x80000000
72 MX51_PAD_DISP2_DAT12__FEC_RX_DV 0x80000000
73 MX51_PAD_DISP2_DAT13__FEC_TX_CLK 0x80000000
74 MX51_PAD_DISP2_DAT14__FEC_RDATA0 0x80000000
75 MX51_PAD_DISP2_DAT15__FEC_TDATA0 0x80000000
76 >;
77 };
78
79 pinctrl_i2c1: i2c1grp {
80 fsl,pins = <
81 MX51_PAD_SD2_CMD__I2C1_SCL 0x400001ed
82 MX51_PAD_SD2_CLK__I2C1_SDA 0x400001ed
83 >;
84 };
85 };
86};
87
88&nfc {
89 nand-bus-width = <8>;
90 nand-ecc-mode = "hw";
91 nand-on-flash-bbt;
92 status = "okay";
93};
diff --git a/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard.dts b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard.dts
new file mode 100644
index 000000000000..5cec4f322096
--- /dev/null
+++ b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard.dts
@@ -0,0 +1,175 @@
1/*
2 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16 * MA 02110-1301, USA.
17 */
18
19/dts-v1/;
20#include "imx51-eukrea-cpuimx51.dtsi"
21#include <dt-bindings/gpio/gpio.h>
22
23/ {
24 model = "Eukrea CPUIMX51";
25 compatible = "eukrea,mbimxsd51","eukrea,cpuimx51", "fsl,imx51";
26
27 gpio_keys {
28 compatible = "gpio-keys";
29 pinctrl-names = "default";
30 pinctrl-0 = <&pinctrl_gpiokeys_1>;
31
32 button-1 {
33 label = "BP1";
34 gpios = <&gpio3 31 GPIO_ACTIVE_LOW>;
35 linux,code = <256>;
36 gpio-key,wakeup;
37 linux,input-type = <1>;
38 };
39 };
40
41 leds {
42 compatible = "gpio-leds";
43 pinctrl-names = "default";
44 pinctrl-0 = <&pinctrl_gpioled>;
45
46 led1 {
47 label = "led1";
48 gpios = <&gpio3 30 GPIO_ACTIVE_LOW>;
49 linux,default-trigger = "heartbeat";
50 };
51 };
52
53 sound {
54 compatible = "eukrea,asoc-tlv320";
55 eukrea,model = "imx51-eukrea-tlv320aic23";
56 ssi-controller = <&ssi2>;
57 fsl,mux-int-port = <2>;
58 fsl,mux-ext-port = <3>;
59 };
60};
61
62&audmux {
63 pinctrl-names = "default";
64 pinctrl-0 = <&pinctrl_audmux>;
65 status = "okay";
66};
67
68&esdhc1 {
69 pinctrl-names = "default";
70 pinctrl-0 = <&pinctrl_esdhc1 &pinctrl_esdhc1_cd>;
71 fsl,cd-controller;
72 status = "okay";
73};
74
75&i2c1 {
76 tlv320aic23: codec@1a {
77 compatible = "ti,tlv320aic23";
78 reg = <0x1a>;
79 };
80};
81
82&iomuxc {
83 imx51-eukrea {
84 pinctrl_audmux: audmuxgrp {
85 fsl,pins = <
86 MX51_PAD_AUD3_BB_TXD__AUD3_TXD 0x80000000
87 MX51_PAD_AUD3_BB_RXD__AUD3_RXD 0x80000000
88 MX51_PAD_AUD3_BB_CK__AUD3_TXC 0x80000000
89 MX51_PAD_AUD3_BB_FS__AUD3_TXFS 0x80000000
90 >;
91 };
92
93 pinctrl_esdhc1: esdhc1grp {
94 fsl,pins = <
95 MX51_PAD_SD1_CMD__SD1_CMD 0x400020d5
96 MX51_PAD_SD1_CLK__SD1_CLK 0x20d5
97 MX51_PAD_SD1_DATA0__SD1_DATA0 0x20d5
98 MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5
99 MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5
100 MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5
101 >;
102 };
103
104 pinctrl_uart1: uart1grp {
105 fsl,pins = <
106 MX51_PAD_UART1_RXD__UART1_RXD 0x1c5
107 MX51_PAD_UART1_TXD__UART1_TXD 0x1c5
108 >;
109 };
110
111 pinctrl_uart3: uart3grp {
112 fsl,pins = <
113 MX51_PAD_UART3_RXD__UART3_RXD 0x1c5
114 MX51_PAD_UART3_TXD__UART3_TXD 0x1c5
115 >;
116 };
117
118 pinctrl_uart3_rtscts: uart3rtsctsgrp {
119 fsl,pins = <
120 MX51_PAD_KEY_COL4__UART3_RTS 0x1c5
121 MX51_PAD_KEY_COL5__UART3_CTS 0x1c5
122 >;
123 };
124
125 pinctrl_backlight_1: backlightgrp-1 {
126 fsl,pins = <
127 MX51_PAD_DI1_D1_CS__GPIO3_4 0x1f5
128 >;
129 };
130
131 pinctrl_esdhc1_cd: esdhc1_cd {
132 fsl,pins = <
133 MX51_PAD_GPIO1_0__SD1_CD 0x20d5
134 >;
135 };
136
137 pinctrl_gpiokeys_1: gpiokeysgrp-1 {
138 fsl,pins = <
139 MX51_PAD_NANDF_D9__GPIO3_31 0x1f5
140 >;
141 };
142
143 pinctrl_gpioled: gpioledgrp-1 {
144 fsl,pins = <
145 MX51_PAD_NANDF_D10__GPIO3_30 0x80000000
146 >;
147 };
148
149 pinctrl_reg_lcd_3v3: reg_lcd_3v3 {
150 fsl,pins = <
151 MX51_PAD_CSI1_D9__GPIO3_13 0x1f5
152 >;
153 };
154 };
155};
156
157&ssi2 {
158 codec-handle = <&tlv320aic23>;
159 fsl,mode = "i2s-slave";
160 status = "okay";
161};
162
163&uart1 {
164 pinctrl-names = "default";
165 pinctrl-0 = <&pinctrl_uart1>;
166 fsl,uart-has-rtscts;
167 status = "okay";
168};
169
170&uart3 {
171 pinctrl-names = "default";
172 pinctrl-0 = <&pinctrl_uart3 &pinctrl_uart3_rtscts>;
173 fsl,uart-has-rtscts;
174 status = "okay";
175};
diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi
index 4bcdd3ad15e5..e4b07d1a9a56 100644
--- a/arch/arm/boot/dts/imx51.dtsi
+++ b/arch/arm/boot/dts/imx51.dtsi
@@ -12,6 +12,10 @@
12 12
13#include "skeleton.dtsi" 13#include "skeleton.dtsi"
14#include "imx51-pinfunc.h" 14#include "imx51-pinfunc.h"
15#include <dt-bindings/clock/imx5-clock.h>
16#include <dt-bindings/gpio/gpio.h>
17#include <dt-bindings/input/input.h>
18#include <dt-bindings/interrupt-controller/irq.h>
15 19
16/ { 20/ {
17 aliases { 21 aliases {
@@ -21,6 +25,10 @@
21 gpio3 = &gpio4; 25 gpio3 = &gpio4;
22 i2c0 = &i2c1; 26 i2c0 = &i2c1;
23 i2c1 = &i2c2; 27 i2c1 = &i2c2;
28 mmc0 = &esdhc1;
29 mmc1 = &esdhc2;
30 mmc2 = &esdhc3;
31 mmc3 = &esdhc4;
24 serial0 = &uart1; 32 serial0 = &uart1;
25 serial1 = &uart2; 33 serial1 = &uart2;
26 serial2 = &uart3; 34 serial2 = &uart3;
@@ -64,18 +72,32 @@
64 cpus { 72 cpus {
65 #address-cells = <1>; 73 #address-cells = <1>;
66 #size-cells = <0>; 74 #size-cells = <0>;
67 cpu@0 { 75 cpu: cpu@0 {
68 device_type = "cpu"; 76 device_type = "cpu";
69 compatible = "arm,cortex-a8"; 77 compatible = "arm,cortex-a8";
70 reg = <0>; 78 reg = <0>;
71 clock-latency = <61036>; /* two CLK32 periods */ 79 clock-latency = <62500>;
72 clocks = <&clks 24>; 80 clocks = <&clks IMX5_CLK_CPU_PODF>;
73 clock-names = "cpu"; 81 clock-names = "cpu";
74 operating-points = < 82 operating-points = <
75 /* kHz uV (No regulator support) */ 83 166000 1000000
76 160000 0 84 600000 1050000
77 800000 0 85 800000 1100000
78 >; 86 >;
87 voltage-tolerance = <5>;
88 };
89 };
90
91 usbphy {
92 #address-cells = <1>;
93 #size-cells = <0>;
94 compatible = "simple-bus";
95
96 usbphy0: usbphy@0 {
97 compatible = "usb-nop-xceiv";
98 reg = <0>;
99 clocks = <&clks IMX5_CLK_USB_PHY_GATE>;
100 clock-names = "main_clk";
79 }; 101 };
80 }; 102 };
81 103
@@ -96,7 +118,9 @@
96 compatible = "fsl,imx51-ipu"; 118 compatible = "fsl,imx51-ipu";
97 reg = <0x40000000 0x20000000>; 119 reg = <0x40000000 0x20000000>;
98 interrupts = <11 10>; 120 interrupts = <11 10>;
99 clocks = <&clks 59>, <&clks 110>, <&clks 61>; 121 clocks = <&clks IMX5_CLK_IPU_GATE>,
122 <&clks IMX5_CLK_IPU_DI0_GATE>,
123 <&clks IMX5_CLK_IPU_DI1_GATE>;
100 clock-names = "bus", "di0", "di1"; 124 clock-names = "bus", "di0", "di1";
101 resets = <&src 2>; 125 resets = <&src 2>;
102 }; 126 };
@@ -119,7 +143,9 @@
119 compatible = "fsl,imx51-esdhc"; 143 compatible = "fsl,imx51-esdhc";
120 reg = <0x70004000 0x4000>; 144 reg = <0x70004000 0x4000>;
121 interrupts = <1>; 145 interrupts = <1>;
122 clocks = <&clks 44>, <&clks 0>, <&clks 71>; 146 clocks = <&clks IMX5_CLK_ESDHC1_IPG_GATE>,
147 <&clks IMX5_CLK_DUMMY>,
148 <&clks IMX5_CLK_ESDHC1_PER_GATE>;
123 clock-names = "ipg", "ahb", "per"; 149 clock-names = "ipg", "ahb", "per";
124 status = "disabled"; 150 status = "disabled";
125 }; 151 };
@@ -128,7 +154,9 @@
128 compatible = "fsl,imx51-esdhc"; 154 compatible = "fsl,imx51-esdhc";
129 reg = <0x70008000 0x4000>; 155 reg = <0x70008000 0x4000>;
130 interrupts = <2>; 156 interrupts = <2>;
131 clocks = <&clks 45>, <&clks 0>, <&clks 72>; 157 clocks = <&clks IMX5_CLK_ESDHC2_IPG_GATE>,
158 <&clks IMX5_CLK_DUMMY>,
159 <&clks IMX5_CLK_ESDHC2_PER_GATE>;
132 clock-names = "ipg", "ahb", "per"; 160 clock-names = "ipg", "ahb", "per";
133 bus-width = <4>; 161 bus-width = <4>;
134 status = "disabled"; 162 status = "disabled";
@@ -138,7 +166,8 @@
138 compatible = "fsl,imx51-uart", "fsl,imx21-uart"; 166 compatible = "fsl,imx51-uart", "fsl,imx21-uart";
139 reg = <0x7000c000 0x4000>; 167 reg = <0x7000c000 0x4000>;
140 interrupts = <33>; 168 interrupts = <33>;
141 clocks = <&clks 32>, <&clks 33>; 169 clocks = <&clks IMX5_CLK_UART3_IPG_GATE>,
170 <&clks IMX5_CLK_UART3_PER_GATE>;
142 clock-names = "ipg", "per"; 171 clock-names = "ipg", "per";
143 status = "disabled"; 172 status = "disabled";
144 }; 173 };
@@ -149,7 +178,8 @@
149 compatible = "fsl,imx51-ecspi"; 178 compatible = "fsl,imx51-ecspi";
150 reg = <0x70010000 0x4000>; 179 reg = <0x70010000 0x4000>;
151 interrupts = <36>; 180 interrupts = <36>;
152 clocks = <&clks 51>, <&clks 52>; 181 clocks = <&clks IMX5_CLK_ECSPI1_IPG_GATE>,
182 <&clks IMX5_CLK_ECSPI1_PER_GATE>;
153 clock-names = "ipg", "per"; 183 clock-names = "ipg", "per";
154 status = "disabled"; 184 status = "disabled";
155 }; 185 };
@@ -158,7 +188,7 @@
158 compatible = "fsl,imx51-ssi", "fsl,imx21-ssi"; 188 compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
159 reg = <0x70014000 0x4000>; 189 reg = <0x70014000 0x4000>;
160 interrupts = <30>; 190 interrupts = <30>;
161 clocks = <&clks 49>; 191 clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>;
162 dmas = <&sdma 24 1 0>, 192 dmas = <&sdma 24 1 0>,
163 <&sdma 25 1 0>; 193 <&sdma 25 1 0>;
164 dma-names = "rx", "tx"; 194 dma-names = "rx", "tx";
@@ -171,7 +201,9 @@
171 compatible = "fsl,imx51-esdhc"; 201 compatible = "fsl,imx51-esdhc";
172 reg = <0x70020000 0x4000>; 202 reg = <0x70020000 0x4000>;
173 interrupts = <3>; 203 interrupts = <3>;
174 clocks = <&clks 46>, <&clks 0>, <&clks 73>; 204 clocks = <&clks IMX5_CLK_ESDHC3_IPG_GATE>,
205 <&clks IMX5_CLK_DUMMY>,
206 <&clks IMX5_CLK_ESDHC3_PER_GATE>;
175 clock-names = "ipg", "ahb", "per"; 207 clock-names = "ipg", "ahb", "per";
176 bus-width = <4>; 208 bus-width = <4>;
177 status = "disabled"; 209 status = "disabled";
@@ -181,25 +213,20 @@
181 compatible = "fsl,imx51-esdhc"; 213 compatible = "fsl,imx51-esdhc";
182 reg = <0x70024000 0x4000>; 214 reg = <0x70024000 0x4000>;
183 interrupts = <4>; 215 interrupts = <4>;
184 clocks = <&clks 47>, <&clks 0>, <&clks 74>; 216 clocks = <&clks IMX5_CLK_ESDHC4_IPG_GATE>,
217 <&clks IMX5_CLK_DUMMY>,
218 <&clks IMX5_CLK_ESDHC4_PER_GATE>;
185 clock-names = "ipg", "ahb", "per"; 219 clock-names = "ipg", "ahb", "per";
186 bus-width = <4>; 220 bus-width = <4>;
187 status = "disabled"; 221 status = "disabled";
188 }; 222 };
189 }; 223 };
190 224
191 usbphy0: usbphy@0 {
192 compatible = "usb-nop-xceiv";
193 clocks = <&clks 75>;
194 clock-names = "main_clk";
195 status = "okay";
196 };
197
198 usbotg: usb@73f80000 { 225 usbotg: usb@73f80000 {
199 compatible = "fsl,imx51-usb", "fsl,imx27-usb"; 226 compatible = "fsl,imx51-usb", "fsl,imx27-usb";
200 reg = <0x73f80000 0x0200>; 227 reg = <0x73f80000 0x0200>;
201 interrupts = <18>; 228 interrupts = <18>;
202 clocks = <&clks 108>; 229 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
203 fsl,usbmisc = <&usbmisc 0>; 230 fsl,usbmisc = <&usbmisc 0>;
204 fsl,usbphy = <&usbphy0>; 231 fsl,usbphy = <&usbphy0>;
205 status = "disabled"; 232 status = "disabled";
@@ -209,7 +236,7 @@
209 compatible = "fsl,imx51-usb", "fsl,imx27-usb"; 236 compatible = "fsl,imx51-usb", "fsl,imx27-usb";
210 reg = <0x73f80200 0x0200>; 237 reg = <0x73f80200 0x0200>;
211 interrupts = <14>; 238 interrupts = <14>;
212 clocks = <&clks 108>; 239 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
213 fsl,usbmisc = <&usbmisc 1>; 240 fsl,usbmisc = <&usbmisc 1>;
214 status = "disabled"; 241 status = "disabled";
215 }; 242 };
@@ -218,7 +245,7 @@
218 compatible = "fsl,imx51-usb", "fsl,imx27-usb"; 245 compatible = "fsl,imx51-usb", "fsl,imx27-usb";
219 reg = <0x73f80400 0x0200>; 246 reg = <0x73f80400 0x0200>;
220 interrupts = <16>; 247 interrupts = <16>;
221 clocks = <&clks 108>; 248 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
222 fsl,usbmisc = <&usbmisc 2>; 249 fsl,usbmisc = <&usbmisc 2>;
223 status = "disabled"; 250 status = "disabled";
224 }; 251 };
@@ -227,7 +254,7 @@
227 compatible = "fsl,imx51-usb", "fsl,imx27-usb"; 254 compatible = "fsl,imx51-usb", "fsl,imx27-usb";
228 reg = <0x73f80600 0x0200>; 255 reg = <0x73f80600 0x0200>;
229 interrupts = <17>; 256 interrupts = <17>;
230 clocks = <&clks 108>; 257 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
231 fsl,usbmisc = <&usbmisc 3>; 258 fsl,usbmisc = <&usbmisc 3>;
232 status = "disabled"; 259 status = "disabled";
233 }; 260 };
@@ -236,7 +263,7 @@
236 #index-cells = <1>; 263 #index-cells = <1>;
237 compatible = "fsl,imx51-usbmisc"; 264 compatible = "fsl,imx51-usbmisc";
238 reg = <0x73f80800 0x200>; 265 reg = <0x73f80800 0x200>;
239 clocks = <&clks 108>; 266 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
240 }; 267 };
241 268
242 gpio1: gpio@73f84000 { 269 gpio1: gpio@73f84000 {
@@ -283,7 +310,7 @@
283 compatible = "fsl,imx51-kpp", "fsl,imx21-kpp"; 310 compatible = "fsl,imx51-kpp", "fsl,imx21-kpp";
284 reg = <0x73f94000 0x4000>; 311 reg = <0x73f94000 0x4000>;
285 interrupts = <60>; 312 interrupts = <60>;
286 clocks = <&clks 0>; 313 clocks = <&clks IMX5_CLK_DUMMY>;
287 status = "disabled"; 314 status = "disabled";
288 }; 315 };
289 316
@@ -291,14 +318,14 @@
291 compatible = "fsl,imx51-wdt", "fsl,imx21-wdt"; 318 compatible = "fsl,imx51-wdt", "fsl,imx21-wdt";
292 reg = <0x73f98000 0x4000>; 319 reg = <0x73f98000 0x4000>;
293 interrupts = <58>; 320 interrupts = <58>;
294 clocks = <&clks 0>; 321 clocks = <&clks IMX5_CLK_DUMMY>;
295 }; 322 };
296 323
297 wdog2: wdog@73f9c000 { 324 wdog2: wdog@73f9c000 {
298 compatible = "fsl,imx51-wdt", "fsl,imx21-wdt"; 325 compatible = "fsl,imx51-wdt", "fsl,imx21-wdt";
299 reg = <0x73f9c000 0x4000>; 326 reg = <0x73f9c000 0x4000>;
300 interrupts = <59>; 327 interrupts = <59>;
301 clocks = <&clks 0>; 328 clocks = <&clks IMX5_CLK_DUMMY>;
302 status = "disabled"; 329 status = "disabled";
303 }; 330 };
304 331
@@ -306,7 +333,8 @@
306 compatible = "fsl,imx51-gpt", "fsl,imx31-gpt"; 333 compatible = "fsl,imx51-gpt", "fsl,imx31-gpt";
307 reg = <0x73fa0000 0x4000>; 334 reg = <0x73fa0000 0x4000>;
308 interrupts = <39>; 335 interrupts = <39>;
309 clocks = <&clks 36>, <&clks 41>; 336 clocks = <&clks IMX5_CLK_GPT_IPG_GATE>,
337 <&clks IMX5_CLK_GPT_HF_GATE>;
310 clock-names = "ipg", "per"; 338 clock-names = "ipg", "per";
311 }; 339 };
312 340
@@ -319,7 +347,8 @@
319 #pwm-cells = <2>; 347 #pwm-cells = <2>;
320 compatible = "fsl,imx51-pwm", "fsl,imx27-pwm"; 348 compatible = "fsl,imx51-pwm", "fsl,imx27-pwm";
321 reg = <0x73fb4000 0x4000>; 349 reg = <0x73fb4000 0x4000>;
322 clocks = <&clks 37>, <&clks 38>; 350 clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>,
351 <&clks IMX5_CLK_PWM1_HF_GATE>;
323 clock-names = "ipg", "per"; 352 clock-names = "ipg", "per";
324 interrupts = <61>; 353 interrupts = <61>;
325 }; 354 };
@@ -328,7 +357,8 @@
328 #pwm-cells = <2>; 357 #pwm-cells = <2>;
329 compatible = "fsl,imx51-pwm", "fsl,imx27-pwm"; 358 compatible = "fsl,imx51-pwm", "fsl,imx27-pwm";
330 reg = <0x73fb8000 0x4000>; 359 reg = <0x73fb8000 0x4000>;
331 clocks = <&clks 39>, <&clks 40>; 360 clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>,
361 <&clks IMX5_CLK_PWM2_HF_GATE>;
332 clock-names = "ipg", "per"; 362 clock-names = "ipg", "per";
333 interrupts = <94>; 363 interrupts = <94>;
334 }; 364 };
@@ -337,7 +367,8 @@
337 compatible = "fsl,imx51-uart", "fsl,imx21-uart"; 367 compatible = "fsl,imx51-uart", "fsl,imx21-uart";
338 reg = <0x73fbc000 0x4000>; 368 reg = <0x73fbc000 0x4000>;
339 interrupts = <31>; 369 interrupts = <31>;
340 clocks = <&clks 28>, <&clks 29>; 370 clocks = <&clks IMX5_CLK_UART1_IPG_GATE>,
371 <&clks IMX5_CLK_UART1_PER_GATE>;
341 clock-names = "ipg", "per"; 372 clock-names = "ipg", "per";
342 status = "disabled"; 373 status = "disabled";
343 }; 374 };
@@ -346,7 +377,8 @@
346 compatible = "fsl,imx51-uart", "fsl,imx21-uart"; 377 compatible = "fsl,imx51-uart", "fsl,imx21-uart";
347 reg = <0x73fc0000 0x4000>; 378 reg = <0x73fc0000 0x4000>;
348 interrupts = <32>; 379 interrupts = <32>;
349 clocks = <&clks 30>, <&clks 31>; 380 clocks = <&clks IMX5_CLK_UART2_IPG_GATE>,
381 <&clks IMX5_CLK_UART2_PER_GATE>;
350 clock-names = "ipg", "per"; 382 clock-names = "ipg", "per";
351 status = "disabled"; 383 status = "disabled";
352 }; 384 };
@@ -376,14 +408,14 @@
376 compatible = "fsl,imx51-iim", "fsl,imx27-iim"; 408 compatible = "fsl,imx51-iim", "fsl,imx27-iim";
377 reg = <0x83f98000 0x4000>; 409 reg = <0x83f98000 0x4000>;
378 interrupts = <69>; 410 interrupts = <69>;
379 clocks = <&clks 107>; 411 clocks = <&clks IMX5_CLK_IIM_GATE>;
380 }; 412 };
381 413
382 owire: owire@83fa4000 { 414 owire: owire@83fa4000 {
383 compatible = "fsl,imx51-owire", "fsl,imx21-owire"; 415 compatible = "fsl,imx51-owire", "fsl,imx21-owire";
384 reg = <0x83fa4000 0x4000>; 416 reg = <0x83fa4000 0x4000>;
385 interrupts = <88>; 417 interrupts = <88>;
386 clocks = <&clks 159>; 418 clocks = <&clks IMX5_CLK_OWIRE_GATE>;
387 status = "disabled"; 419 status = "disabled";
388 }; 420 };
389 421
@@ -393,7 +425,8 @@
393 compatible = "fsl,imx51-ecspi"; 425 compatible = "fsl,imx51-ecspi";
394 reg = <0x83fac000 0x4000>; 426 reg = <0x83fac000 0x4000>;
395 interrupts = <37>; 427 interrupts = <37>;
396 clocks = <&clks 53>, <&clks 54>; 428 clocks = <&clks IMX5_CLK_ECSPI2_IPG_GATE>,
429 <&clks IMX5_CLK_ECSPI2_PER_GATE>;
397 clock-names = "ipg", "per"; 430 clock-names = "ipg", "per";
398 status = "disabled"; 431 status = "disabled";
399 }; 432 };
@@ -402,7 +435,8 @@
402 compatible = "fsl,imx51-sdma", "fsl,imx35-sdma"; 435 compatible = "fsl,imx51-sdma", "fsl,imx35-sdma";
403 reg = <0x83fb0000 0x4000>; 436 reg = <0x83fb0000 0x4000>;
404 interrupts = <6>; 437 interrupts = <6>;
405 clocks = <&clks 56>, <&clks 56>; 438 clocks = <&clks IMX5_CLK_SDMA_GATE>,
439 <&clks IMX5_CLK_SDMA_GATE>;
406 clock-names = "ipg", "ahb"; 440 clock-names = "ipg", "ahb";
407 #dma-cells = <3>; 441 #dma-cells = <3>;
408 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx51.bin"; 442 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx51.bin";
@@ -414,7 +448,8 @@
414 compatible = "fsl,imx51-cspi", "fsl,imx35-cspi"; 448 compatible = "fsl,imx51-cspi", "fsl,imx35-cspi";
415 reg = <0x83fc0000 0x4000>; 449 reg = <0x83fc0000 0x4000>;
416 interrupts = <38>; 450 interrupts = <38>;
417 clocks = <&clks 55>, <&clks 55>; 451 clocks = <&clks IMX5_CLK_CSPI_IPG_GATE>,
452 <&clks IMX5_CLK_CSPI_IPG_GATE>;
418 clock-names = "ipg", "per"; 453 clock-names = "ipg", "per";
419 status = "disabled"; 454 status = "disabled";
420 }; 455 };
@@ -425,7 +460,7 @@
425 compatible = "fsl,imx51-i2c", "fsl,imx21-i2c"; 460 compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";
426 reg = <0x83fc4000 0x4000>; 461 reg = <0x83fc4000 0x4000>;
427 interrupts = <63>; 462 interrupts = <63>;
428 clocks = <&clks 35>; 463 clocks = <&clks IMX5_CLK_I2C2_GATE>;
429 status = "disabled"; 464 status = "disabled";
430 }; 465 };
431 466
@@ -435,7 +470,7 @@
435 compatible = "fsl,imx51-i2c", "fsl,imx21-i2c"; 470 compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";
436 reg = <0x83fc8000 0x4000>; 471 reg = <0x83fc8000 0x4000>;
437 interrupts = <62>; 472 interrupts = <62>;
438 clocks = <&clks 34>; 473 clocks = <&clks IMX5_CLK_I2C1_GATE>;
439 status = "disabled"; 474 status = "disabled";
440 }; 475 };
441 476
@@ -443,7 +478,7 @@
443 compatible = "fsl,imx51-ssi", "fsl,imx21-ssi"; 478 compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
444 reg = <0x83fcc000 0x4000>; 479 reg = <0x83fcc000 0x4000>;
445 interrupts = <29>; 480 interrupts = <29>;
446 clocks = <&clks 48>; 481 clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>;
447 dmas = <&sdma 28 0 0>, 482 dmas = <&sdma 28 0 0>,
448 <&sdma 29 0 0>; 483 <&sdma 29 0 0>;
449 dma-names = "rx", "tx"; 484 dma-names = "rx", "tx";
@@ -455,6 +490,8 @@
455 audmux: audmux@83fd0000 { 490 audmux: audmux@83fd0000 {
456 compatible = "fsl,imx51-audmux", "fsl,imx31-audmux"; 491 compatible = "fsl,imx51-audmux", "fsl,imx31-audmux";
457 reg = <0x83fd0000 0x4000>; 492 reg = <0x83fd0000 0x4000>;
493 clocks = <&clks IMX5_CLK_DUMMY>;
494 clock-names = "audmux";
458 status = "disabled"; 495 status = "disabled";
459 }; 496 };
460 497
@@ -463,7 +500,7 @@
463 #size-cells = <1>; 500 #size-cells = <1>;
464 compatible = "fsl,imx51-weim"; 501 compatible = "fsl,imx51-weim";
465 reg = <0x83fda000 0x1000>; 502 reg = <0x83fda000 0x1000>;
466 clocks = <&clks 57>; 503 clocks = <&clks IMX5_CLK_EMI_SLOW_GATE>;
467 ranges = < 504 ranges = <
468 0 0 0xb0000000 0x08000000 505 0 0 0xb0000000 0x08000000
469 1 0 0xb8000000 0x08000000 506 1 0 0xb8000000 0x08000000
@@ -479,7 +516,7 @@
479 compatible = "fsl,imx51-nand"; 516 compatible = "fsl,imx51-nand";
480 reg = <0x83fdb000 0x1000 0xcfff0000 0x10000>; 517 reg = <0x83fdb000 0x1000 0xcfff0000 0x10000>;
481 interrupts = <8>; 518 interrupts = <8>;
482 clocks = <&clks 60>; 519 clocks = <&clks IMX5_CLK_NFC_GATE>;
483 status = "disabled"; 520 status = "disabled";
484 }; 521 };
485 522
@@ -487,7 +524,7 @@
487 compatible = "fsl,imx51-pata", "fsl,imx27-pata"; 524 compatible = "fsl,imx51-pata", "fsl,imx27-pata";
488 reg = <0x83fe0000 0x4000>; 525 reg = <0x83fe0000 0x4000>;
489 interrupts = <70>; 526 interrupts = <70>;
490 clocks = <&clks 172>; 527 clocks = <&clks IMX5_CLK_PATA_GATE>;
491 status = "disabled"; 528 status = "disabled";
492 }; 529 };
493 530
@@ -495,7 +532,7 @@
495 compatible = "fsl,imx51-ssi", "fsl,imx21-ssi"; 532 compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
496 reg = <0x83fe8000 0x4000>; 533 reg = <0x83fe8000 0x4000>;
497 interrupts = <96>; 534 interrupts = <96>;
498 clocks = <&clks 50>; 535 clocks = <&clks IMX5_CLK_SSI3_IPG_GATE>;
499 dmas = <&sdma 46 0 0>, 536 dmas = <&sdma 46 0 0>,
500 <&sdma 47 0 0>; 537 <&sdma 47 0 0>;
501 dma-names = "rx", "tx"; 538 dma-names = "rx", "tx";
@@ -508,336 +545,12 @@
508 compatible = "fsl,imx51-fec", "fsl,imx27-fec"; 545 compatible = "fsl,imx51-fec", "fsl,imx27-fec";
509 reg = <0x83fec000 0x4000>; 546 reg = <0x83fec000 0x4000>;
510 interrupts = <87>; 547 interrupts = <87>;
511 clocks = <&clks 42>, <&clks 42>, <&clks 42>; 548 clocks = <&clks IMX5_CLK_FEC_GATE>,
549 <&clks IMX5_CLK_FEC_GATE>,
550 <&clks IMX5_CLK_FEC_GATE>;
512 clock-names = "ipg", "ahb", "ptp"; 551 clock-names = "ipg", "ahb", "ptp";
513 status = "disabled"; 552 status = "disabled";
514 }; 553 };
515 }; 554 };
516 }; 555 };
517}; 556};
518
519&iomuxc {
520 audmux {
521 pinctrl_audmux_1: audmuxgrp-1 {
522 fsl,pins = <
523 MX51_PAD_AUD3_BB_TXD__AUD3_TXD 0x80000000
524 MX51_PAD_AUD3_BB_RXD__AUD3_RXD 0x80000000
525 MX51_PAD_AUD3_BB_CK__AUD3_TXC 0x80000000
526 MX51_PAD_AUD3_BB_FS__AUD3_TXFS 0x80000000
527 >;
528 };
529 };
530
531 fec {
532 pinctrl_fec_1: fecgrp-1 {
533 fsl,pins = <
534 MX51_PAD_EIM_EB2__FEC_MDIO 0x80000000
535 MX51_PAD_EIM_EB3__FEC_RDATA1 0x80000000
536 MX51_PAD_EIM_CS2__FEC_RDATA2 0x80000000
537 MX51_PAD_EIM_CS3__FEC_RDATA3 0x80000000
538 MX51_PAD_EIM_CS4__FEC_RX_ER 0x80000000
539 MX51_PAD_EIM_CS5__FEC_CRS 0x80000000
540 MX51_PAD_NANDF_RB2__FEC_COL 0x80000000
541 MX51_PAD_NANDF_RB3__FEC_RX_CLK 0x80000000
542 MX51_PAD_NANDF_D9__FEC_RDATA0 0x80000000
543 MX51_PAD_NANDF_D8__FEC_TDATA0 0x80000000
544 MX51_PAD_NANDF_CS2__FEC_TX_ER 0x80000000
545 MX51_PAD_NANDF_CS3__FEC_MDC 0x80000000
546 MX51_PAD_NANDF_CS4__FEC_TDATA1 0x80000000
547 MX51_PAD_NANDF_CS5__FEC_TDATA2 0x80000000
548 MX51_PAD_NANDF_CS6__FEC_TDATA3 0x80000000
549 MX51_PAD_NANDF_CS7__FEC_TX_EN 0x80000000
550 MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK 0x80000000
551 >;
552 };
553
554 pinctrl_fec_2: fecgrp-2 {
555 fsl,pins = <
556 MX51_PAD_DI_GP3__FEC_TX_ER 0x80000000
557 MX51_PAD_DI2_PIN4__FEC_CRS 0x80000000
558 MX51_PAD_DI2_PIN2__FEC_MDC 0x80000000
559 MX51_PAD_DI2_PIN3__FEC_MDIO 0x80000000
560 MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 0x80000000
561 MX51_PAD_DI_GP4__FEC_RDATA2 0x80000000
562 MX51_PAD_DISP2_DAT0__FEC_RDATA3 0x80000000
563 MX51_PAD_DISP2_DAT1__FEC_RX_ER 0x80000000
564 MX51_PAD_DISP2_DAT6__FEC_TDATA1 0x80000000
565 MX51_PAD_DISP2_DAT7__FEC_TDATA2 0x80000000
566 MX51_PAD_DISP2_DAT8__FEC_TDATA3 0x80000000
567 MX51_PAD_DISP2_DAT9__FEC_TX_EN 0x80000000
568 MX51_PAD_DISP2_DAT10__FEC_COL 0x80000000
569 MX51_PAD_DISP2_DAT11__FEC_RX_CLK 0x80000000
570 MX51_PAD_DISP2_DAT12__FEC_RX_DV 0x80000000
571 MX51_PAD_DISP2_DAT13__FEC_TX_CLK 0x80000000
572 MX51_PAD_DISP2_DAT14__FEC_RDATA0 0x80000000
573 MX51_PAD_DISP2_DAT15__FEC_TDATA0 0x80000000
574 >;
575 };
576 };
577
578 ecspi1 {
579 pinctrl_ecspi1_1: ecspi1grp-1 {
580 fsl,pins = <
581 MX51_PAD_CSPI1_MISO__ECSPI1_MISO 0x185
582 MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI 0x185
583 MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK 0x185
584 >;
585 };
586 };
587
588 ecspi2 {
589 pinctrl_ecspi2_1: ecspi2grp-1 {
590 fsl,pins = <
591 MX51_PAD_NANDF_RB3__ECSPI2_MISO 0x185
592 MX51_PAD_NANDF_D15__ECSPI2_MOSI 0x185
593 MX51_PAD_NANDF_RB2__ECSPI2_SCLK 0x185
594 >;
595 };
596 };
597
598 esdhc1 {
599 pinctrl_esdhc1_1: esdhc1grp-1 {
600 fsl,pins = <
601 MX51_PAD_SD1_CMD__SD1_CMD 0x400020d5
602 MX51_PAD_SD1_CLK__SD1_CLK 0x20d5
603 MX51_PAD_SD1_DATA0__SD1_DATA0 0x20d5
604 MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5
605 MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5
606 MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5
607 >;
608 };
609 };
610
611 esdhc2 {
612 pinctrl_esdhc2_1: esdhc2grp-1 {
613 fsl,pins = <
614 MX51_PAD_SD2_CMD__SD2_CMD 0x400020d5
615 MX51_PAD_SD2_CLK__SD2_CLK 0x20d5
616 MX51_PAD_SD2_DATA0__SD2_DATA0 0x20d5
617 MX51_PAD_SD2_DATA1__SD2_DATA1 0x20d5
618 MX51_PAD_SD2_DATA2__SD2_DATA2 0x20d5
619 MX51_PAD_SD2_DATA3__SD2_DATA3 0x20d5
620 >;
621 };
622 };
623
624 i2c2 {
625 pinctrl_i2c2_1: i2c2grp-1 {
626 fsl,pins = <
627 MX51_PAD_KEY_COL4__I2C2_SCL 0x400001ed
628 MX51_PAD_KEY_COL5__I2C2_SDA 0x400001ed
629 >;
630 };
631
632 pinctrl_i2c2_2: i2c2grp-2 {
633 fsl,pins = <
634 MX51_PAD_EIM_D27__I2C2_SCL 0x400001ed
635 MX51_PAD_EIM_D24__I2C2_SDA 0x400001ed
636 >;
637 };
638
639 pinctrl_i2c2_3: i2c2grp-3 {
640 fsl,pins = <
641 MX51_PAD_GPIO1_2__I2C2_SCL 0x400001ed
642 MX51_PAD_GPIO1_3__I2C2_SDA 0x400001ed
643 >;
644 };
645 };
646
647 ipu_disp1 {
648 pinctrl_ipu_disp1_1: ipudisp1grp-1 {
649 fsl,pins = <
650 MX51_PAD_DISP1_DAT0__DISP1_DAT0 0x5
651 MX51_PAD_DISP1_DAT1__DISP1_DAT1 0x5
652 MX51_PAD_DISP1_DAT2__DISP1_DAT2 0x5
653 MX51_PAD_DISP1_DAT3__DISP1_DAT3 0x5
654 MX51_PAD_DISP1_DAT4__DISP1_DAT4 0x5
655 MX51_PAD_DISP1_DAT5__DISP1_DAT5 0x5
656 MX51_PAD_DISP1_DAT6__DISP1_DAT6 0x5
657 MX51_PAD_DISP1_DAT7__DISP1_DAT7 0x5
658 MX51_PAD_DISP1_DAT8__DISP1_DAT8 0x5
659 MX51_PAD_DISP1_DAT9__DISP1_DAT9 0x5
660 MX51_PAD_DISP1_DAT10__DISP1_DAT10 0x5
661 MX51_PAD_DISP1_DAT11__DISP1_DAT11 0x5
662 MX51_PAD_DISP1_DAT12__DISP1_DAT12 0x5
663 MX51_PAD_DISP1_DAT13__DISP1_DAT13 0x5
664 MX51_PAD_DISP1_DAT14__DISP1_DAT14 0x5
665 MX51_PAD_DISP1_DAT15__DISP1_DAT15 0x5
666 MX51_PAD_DISP1_DAT16__DISP1_DAT16 0x5
667 MX51_PAD_DISP1_DAT17__DISP1_DAT17 0x5
668 MX51_PAD_DISP1_DAT18__DISP1_DAT18 0x5
669 MX51_PAD_DISP1_DAT19__DISP1_DAT19 0x5
670 MX51_PAD_DISP1_DAT20__DISP1_DAT20 0x5
671 MX51_PAD_DISP1_DAT21__DISP1_DAT21 0x5
672 MX51_PAD_DISP1_DAT22__DISP1_DAT22 0x5
673 MX51_PAD_DISP1_DAT23__DISP1_DAT23 0x5
674 MX51_PAD_DI1_PIN2__DI1_PIN2 0x5 /* hsync */
675 MX51_PAD_DI1_PIN3__DI1_PIN3 0x5 /* vsync */
676 >;
677 };
678 };
679
680 ipu_disp2 {
681 pinctrl_ipu_disp2_1: ipudisp2grp-1 {
682 fsl,pins = <
683 MX51_PAD_DISP2_DAT0__DISP2_DAT0 0x5
684 MX51_PAD_DISP2_DAT1__DISP2_DAT1 0x5
685 MX51_PAD_DISP2_DAT2__DISP2_DAT2 0x5
686 MX51_PAD_DISP2_DAT3__DISP2_DAT3 0x5
687 MX51_PAD_DISP2_DAT4__DISP2_DAT4 0x5
688 MX51_PAD_DISP2_DAT5__DISP2_DAT5 0x5
689 MX51_PAD_DISP2_DAT6__DISP2_DAT6 0x5
690 MX51_PAD_DISP2_DAT7__DISP2_DAT7 0x5
691 MX51_PAD_DISP2_DAT8__DISP2_DAT8 0x5
692 MX51_PAD_DISP2_DAT9__DISP2_DAT9 0x5
693 MX51_PAD_DISP2_DAT10__DISP2_DAT10 0x5
694 MX51_PAD_DISP2_DAT11__DISP2_DAT11 0x5
695 MX51_PAD_DISP2_DAT12__DISP2_DAT12 0x5
696 MX51_PAD_DISP2_DAT13__DISP2_DAT13 0x5
697 MX51_PAD_DISP2_DAT14__DISP2_DAT14 0x5
698 MX51_PAD_DISP2_DAT15__DISP2_DAT15 0x5
699 MX51_PAD_DI2_PIN2__DI2_PIN2 0x5 /* hsync */
700 MX51_PAD_DI2_PIN3__DI2_PIN3 0x5 /* vsync */
701 MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK 0x5 /* CLK */
702 MX51_PAD_DI_GP4__DI2_PIN15 0x5 /* DE */
703 >;
704 };
705 };
706
707 kpp {
708 pinctrl_kpp_1: kppgrp-1 {
709 fsl,pins = <
710 MX51_PAD_KEY_ROW0__KEY_ROW0 0xe0
711 MX51_PAD_KEY_ROW1__KEY_ROW1 0xe0
712 MX51_PAD_KEY_ROW2__KEY_ROW2 0xe0
713 MX51_PAD_KEY_ROW3__KEY_ROW3 0xe0
714 MX51_PAD_KEY_COL0__KEY_COL0 0xe8
715 MX51_PAD_KEY_COL1__KEY_COL1 0xe8
716 MX51_PAD_KEY_COL2__KEY_COL2 0xe8
717 MX51_PAD_KEY_COL3__KEY_COL3 0xe8
718 >;
719 };
720 };
721
722 pata {
723 pinctrl_pata_1: patagrp-1 {
724 fsl,pins = <
725 MX51_PAD_NANDF_WE_B__PATA_DIOW 0x2004
726 MX51_PAD_NANDF_RE_B__PATA_DIOR 0x2004
727 MX51_PAD_NANDF_ALE__PATA_BUFFER_EN 0x2004
728 MX51_PAD_NANDF_CLE__PATA_RESET_B 0x2004
729 MX51_PAD_NANDF_WP_B__PATA_DMACK 0x2004
730 MX51_PAD_NANDF_RB0__PATA_DMARQ 0x2004
731 MX51_PAD_NANDF_RB1__PATA_IORDY 0x2004
732 MX51_PAD_GPIO_NAND__PATA_INTRQ 0x2004
733 MX51_PAD_NANDF_CS2__PATA_CS_0 0x2004
734 MX51_PAD_NANDF_CS3__PATA_CS_1 0x2004
735 MX51_PAD_NANDF_CS4__PATA_DA_0 0x2004
736 MX51_PAD_NANDF_CS5__PATA_DA_1 0x2004
737 MX51_PAD_NANDF_CS6__PATA_DA_2 0x2004
738 MX51_PAD_NANDF_D15__PATA_DATA15 0x2004
739 MX51_PAD_NANDF_D14__PATA_DATA14 0x2004
740 MX51_PAD_NANDF_D13__PATA_DATA13 0x2004
741 MX51_PAD_NANDF_D12__PATA_DATA12 0x2004
742 MX51_PAD_NANDF_D11__PATA_DATA11 0x2004
743 MX51_PAD_NANDF_D10__PATA_DATA10 0x2004
744 MX51_PAD_NANDF_D9__PATA_DATA9 0x2004
745 MX51_PAD_NANDF_D8__PATA_DATA8 0x2004
746 MX51_PAD_NANDF_D7__PATA_DATA7 0x2004
747 MX51_PAD_NANDF_D6__PATA_DATA6 0x2004
748 MX51_PAD_NANDF_D5__PATA_DATA5 0x2004
749 MX51_PAD_NANDF_D4__PATA_DATA4 0x2004
750 MX51_PAD_NANDF_D3__PATA_DATA3 0x2004
751 MX51_PAD_NANDF_D2__PATA_DATA2 0x2004
752 MX51_PAD_NANDF_D1__PATA_DATA1 0x2004
753 MX51_PAD_NANDF_D0__PATA_DATA0 0x2004
754 >;
755 };
756 };
757
758 uart1 {
759 pinctrl_uart1_1: uart1grp-1 {
760 fsl,pins = <
761 MX51_PAD_UART1_RXD__UART1_RXD 0x1c5
762 MX51_PAD_UART1_TXD__UART1_TXD 0x1c5
763 >;
764 };
765
766 pinctrl_uart1_rtscts_1: uart1rtscts-1 {
767 fsl,pins = <
768 MX51_PAD_UART1_RTS__UART1_RTS 0x1c5
769 MX51_PAD_UART1_CTS__UART1_CTS 0x1c5
770 >;
771 };
772 };
773
774 uart2 {
775 pinctrl_uart2_1: uart2grp-1 {
776 fsl,pins = <
777 MX51_PAD_UART2_RXD__UART2_RXD 0x1c5
778 MX51_PAD_UART2_TXD__UART2_TXD 0x1c5
779 >;
780 };
781 };
782
783 uart3 {
784 pinctrl_uart3_1: uart3grp-1 {
785 fsl,pins = <
786 MX51_PAD_EIM_D25__UART3_RXD 0x1c5
787 MX51_PAD_EIM_D26__UART3_TXD 0x1c5
788 >;
789 };
790
791 pinctrl_uart3_rtscts_1: uart3rtscts-1 {
792 fsl,pins = <
793 MX51_PAD_EIM_D27__UART3_RTS 0x1c5
794 MX51_PAD_EIM_D24__UART3_CTS 0x1c5
795 >;
796 };
797
798 pinctrl_uart3_2: uart3grp-2 {
799 fsl,pins = <
800 MX51_PAD_UART3_RXD__UART3_RXD 0x1c5
801 MX51_PAD_UART3_TXD__UART3_TXD 0x1c5
802 >;
803 };
804 };
805
806 usbh1 {
807 pinctrl_usbh1_1: usbh1grp-1 {
808 fsl,pins = <
809 MX51_PAD_USBH1_DATA0__USBH1_DATA0 0x1e5
810 MX51_PAD_USBH1_DATA1__USBH1_DATA1 0x1e5
811 MX51_PAD_USBH1_DATA2__USBH1_DATA2 0x1e5
812 MX51_PAD_USBH1_DATA3__USBH1_DATA3 0x1e5
813 MX51_PAD_USBH1_DATA4__USBH1_DATA4 0x1e5
814 MX51_PAD_USBH1_DATA5__USBH1_DATA5 0x1e5
815 MX51_PAD_USBH1_DATA6__USBH1_DATA6 0x1e5
816 MX51_PAD_USBH1_DATA7__USBH1_DATA7 0x1e5
817 MX51_PAD_USBH1_CLK__USBH1_CLK 0x1e5
818 MX51_PAD_USBH1_DIR__USBH1_DIR 0x1e5
819 MX51_PAD_USBH1_NXT__USBH1_NXT 0x1e5
820 MX51_PAD_USBH1_STP__USBH1_STP 0x1e5
821 >;
822 };
823 };
824
825 usbh2 {
826 pinctrl_usbh2_1: usbh2grp-1 {
827 fsl,pins = <
828 MX51_PAD_EIM_D16__USBH2_DATA0 0x1e5
829 MX51_PAD_EIM_D17__USBH2_DATA1 0x1e5
830 MX51_PAD_EIM_D18__USBH2_DATA2 0x1e5
831 MX51_PAD_EIM_D19__USBH2_DATA3 0x1e5
832 MX51_PAD_EIM_D20__USBH2_DATA4 0x1e5
833 MX51_PAD_EIM_D21__USBH2_DATA5 0x1e5
834 MX51_PAD_EIM_D22__USBH2_DATA6 0x1e5
835 MX51_PAD_EIM_D23__USBH2_DATA7 0x1e5
836 MX51_PAD_EIM_A24__USBH2_CLK 0x1e5
837 MX51_PAD_EIM_A25__USBH2_DIR 0x1e5
838 MX51_PAD_EIM_A27__USBH2_NXT 0x1e5
839 MX51_PAD_EIM_A26__USBH2_STP 0x1e5
840 >;
841 };
842 };
843};
diff --git a/arch/arm/boot/dts/imx53-ard.dts b/arch/arm/boot/dts/imx53-ard.dts
index 174f86938c89..e9337ad52f59 100644
--- a/arch/arm/boot/dts/imx53-ard.dts
+++ b/arch/arm/boot/dts/imx53-ard.dts
@@ -49,9 +49,12 @@
49 49
50 regulators { 50 regulators {
51 compatible = "simple-bus"; 51 compatible = "simple-bus";
52 #address-cells = <1>;
53 #size-cells = <0>;
52 54
53 reg_3p3v: 3p3v { 55 reg_3p3v: regulator@0 {
54 compatible = "regulator-fixed"; 56 compatible = "regulator-fixed";
57 reg = <0>;
55 regulator-name = "3P3V"; 58 regulator-name = "3P3V";
56 regulator-min-microvolt = <3300000>; 59 regulator-min-microvolt = <3300000>;
57 regulator-max-microvolt = <3300000>; 60 regulator-max-microvolt = <3300000>;
@@ -99,7 +102,7 @@
99 102
100&esdhc1 { 103&esdhc1 {
101 pinctrl-names = "default"; 104 pinctrl-names = "default";
102 pinctrl-0 = <&pinctrl_esdhc1_2>; 105 pinctrl-0 = <&pinctrl_esdhc1>;
103 cd-gpios = <&gpio1 1 0>; 106 cd-gpios = <&gpio1 1 0>;
104 wp-gpios = <&gpio1 9 0>; 107 wp-gpios = <&gpio1 9 0>;
105 status = "okay"; 108 status = "okay";
@@ -109,7 +112,7 @@
109 pinctrl-names = "default"; 112 pinctrl-names = "default";
110 pinctrl-0 = <&pinctrl_hog>; 113 pinctrl-0 = <&pinctrl_hog>;
111 114
112 hog { 115 imx53-ard {
113 pinctrl_hog: hoggrp { 116 pinctrl_hog: hoggrp {
114 fsl,pins = < 117 fsl,pins = <
115 MX53_PAD_GPIO_1__GPIO1_1 0x80000000 118 MX53_PAD_GPIO_1__GPIO1_1 0x80000000
@@ -148,11 +151,33 @@
148 MX53_PAD_EIM_CS1__EMI_WEIM_CS_1 0x80000000 151 MX53_PAD_EIM_CS1__EMI_WEIM_CS_1 0x80000000
149 >; 152 >;
150 }; 153 };
154
155 pinctrl_esdhc1: esdhc1grp {
156 fsl,pins = <
157 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
158 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
159 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
160 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
161 MX53_PAD_PATA_DATA8__ESDHC1_DAT4 0x1d5
162 MX53_PAD_PATA_DATA9__ESDHC1_DAT5 0x1d5
163 MX53_PAD_PATA_DATA10__ESDHC1_DAT6 0x1d5
164 MX53_PAD_PATA_DATA11__ESDHC1_DAT7 0x1d5
165 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
166 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
167 >;
168 };
169
170 pinctrl_uart1: uart1grp {
171 fsl,pins = <
172 MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
173 MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
174 >;
175 };
151 }; 176 };
152}; 177};
153 178
154&uart1 { 179&uart1 {
155 pinctrl-names = "default"; 180 pinctrl-names = "default";
156 pinctrl-0 = <&pinctrl_uart1_2>; 181 pinctrl-0 = <&pinctrl_uart1>;
157 status = "okay"; 182 status = "okay";
158}; 183};
diff --git a/arch/arm/boot/dts/imx53-evk.dts b/arch/arm/boot/dts/imx53-evk.dts
deleted file mode 100644
index 801fda728ed6..000000000000
--- a/arch/arm/boot/dts/imx53-evk.dts
+++ /dev/null
@@ -1,126 +0,0 @@
1/*
2 * Copyright 2011 Freescale Semiconductor, Inc.
3 * Copyright 2011 Linaro Ltd.
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13/dts-v1/;
14#include "imx53.dtsi"
15
16/ {
17 model = "Freescale i.MX53 Evaluation Kit";
18 compatible = "fsl,imx53-evk", "fsl,imx53";
19
20 memory {
21 reg = <0x70000000 0x80000000>;
22 };
23
24 leds {
25 compatible = "gpio-leds";
26
27 green {
28 label = "Heartbeat";
29 gpios = <&gpio7 7 0>;
30 linux,default-trigger = "heartbeat";
31 };
32 };
33};
34
35&esdhc1 {
36 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_esdhc1_1>;
38 cd-gpios = <&gpio3 13 0>;
39 wp-gpios = <&gpio3 14 0>;
40 status = "okay";
41};
42
43&ecspi1 {
44 pinctrl-names = "default";
45 pinctrl-0 = <&pinctrl_ecspi1_1>;
46 fsl,spi-num-chipselects = <2>;
47 cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>;
48 status = "okay";
49
50 flash: at45db321d@1 {
51 #address-cells = <1>;
52 #size-cells = <1>;
53 compatible = "atmel,at45db321d", "atmel,at45", "atmel,dataflash";
54 spi-max-frequency = <25000000>;
55 reg = <1>;
56
57 partition@0 {
58 label = "U-Boot";
59 reg = <0x0 0x40000>;
60 read-only;
61 };
62
63 partition@40000 {
64 label = "Kernel";
65 reg = <0x40000 0x3c0000>;
66 };
67 };
68};
69
70&esdhc3 {
71 pinctrl-names = "default";
72 pinctrl-0 = <&pinctrl_esdhc3_1>;
73 cd-gpios = <&gpio3 11 0>;
74 wp-gpios = <&gpio3 12 0>;
75 status = "okay";
76};
77
78&iomuxc {
79 pinctrl-names = "default";
80 pinctrl-0 = <&pinctrl_hog>;
81
82 hog {
83 pinctrl_hog: hoggrp {
84 fsl,pins = <
85 MX53_PAD_EIM_EB2__GPIO2_30 0x80000000
86 MX53_PAD_EIM_D19__GPIO3_19 0x80000000
87 MX53_PAD_EIM_DA11__GPIO3_11 0x80000000
88 MX53_PAD_EIM_DA12__GPIO3_12 0x80000000
89 MX53_PAD_EIM_DA13__GPIO3_13 0x80000000
90 MX53_PAD_EIM_DA14__GPIO3_14 0x80000000
91 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000
92 MX53_PAD_PATA_DA_1__GPIO7_7 0x80000000
93 >;
94 };
95 };
96};
97
98&uart1 {
99 pinctrl-names = "default";
100 pinctrl-0 = <&pinctrl_uart1_1>;
101 status = "okay";
102};
103
104&i2c2 {
105 pinctrl-names = "default";
106 pinctrl-0 = <&pinctrl_i2c2_1>;
107 status = "okay";
108
109 pmic: mc13892@08 {
110 compatible = "fsl,mc13892", "fsl,mc13xxx";
111 reg = <0x08>;
112 };
113
114 codec: sgtl5000@0a {
115 compatible = "fsl,sgtl5000";
116 reg = <0x0a>;
117 };
118};
119
120&fec {
121 pinctrl-names = "default";
122 pinctrl-0 = <&pinctrl_fec_1>;
123 phy-mode = "rmii";
124 phy-reset-gpios = <&gpio7 6 0>;
125 status = "okay";
126};
diff --git a/arch/arm/boot/dts/imx53-m53evk.dts b/arch/arm/boot/dts/imx53-m53evk.dts
index 7d304d02ed38..e8d11e2a93cd 100644
--- a/arch/arm/boot/dts/imx53-m53evk.dts
+++ b/arch/arm/boot/dts/imx53-m53evk.dts
@@ -26,7 +26,7 @@
26 crtcs = <&ipu 1>; 26 crtcs = <&ipu 1>;
27 interface-pix-fmt = "bgr666"; 27 interface-pix-fmt = "bgr666";
28 pinctrl-names = "default"; 28 pinctrl-names = "default";
29 pinctrl-0 = <&pinctrl_ipu_disp2_1>; 29 pinctrl-0 = <&pinctrl_ipu_disp1>;
30 30
31 display-timings { 31 display-timings {
32 800x480p60 { 32 800x480p60 {
@@ -51,6 +51,7 @@
51 pwms = <&pwm1 0 3000>; 51 pwms = <&pwm1 0 3000>;
52 brightness-levels = <0 4 8 16 32 64 128 255>; 52 brightness-levels = <0 4 8 16 32 64 128 255>;
53 default-brightness-level = <6>; 53 default-brightness-level = <6>;
54 power-supply = <&reg_backlight>;
54 }; 55 };
55 56
56 leds { 57 leds {
@@ -73,14 +74,36 @@
73 74
74 regulators { 75 regulators {
75 compatible = "simple-bus"; 76 compatible = "simple-bus";
77 #address-cells = <1>;
78 #size-cells = <0>;
76 79
77 reg_3p2v: 3p2v { 80 reg_3p2v: regulator@0 {
78 compatible = "regulator-fixed"; 81 compatible = "regulator-fixed";
82 reg = <0>;
79 regulator-name = "3P2V"; 83 regulator-name = "3P2V";
80 regulator-min-microvolt = <3200000>; 84 regulator-min-microvolt = <3200000>;
81 regulator-max-microvolt = <3200000>; 85 regulator-max-microvolt = <3200000>;
82 regulator-always-on; 86 regulator-always-on;
83 }; 87 };
88
89
90 reg_backlight: regulator@1 {
91 compatible = "regulator-fixed";
92 reg = <1>;
93 regulator-name = "lcd-supply";
94 regulator-min-microvolt = <3200000>;
95 regulator-max-microvolt = <3200000>;
96 regulator-always-on;
97 };
98
99 reg_usbh1_vbus: regulator@3 {
100 compatible = "regulator-fixed";
101 reg = <3>;
102 regulator-name = "vbus";
103 regulator-min-microvolt = <5000000>;
104 regulator-max-microvolt = <5000000>;
105 gpio = <&gpio1 2 0>;
106 };
84 }; 107 };
85 108
86 sound { 109 sound {
@@ -102,25 +125,25 @@
102 125
103&audmux { 126&audmux {
104 pinctrl-names = "default"; 127 pinctrl-names = "default";
105 pinctrl-0 = <&pinctrl_audmux_2>; 128 pinctrl-0 = <&pinctrl_audmux>;
106 status = "okay"; 129 status = "okay";
107}; 130};
108 131
109&can1 { 132&can1 {
110 pinctrl-names = "default"; 133 pinctrl-names = "default";
111 pinctrl-0 = <&pinctrl_can1_3>; 134 pinctrl-0 = <&pinctrl_can1>;
112 status = "okay"; 135 status = "okay";
113}; 136};
114 137
115&can2 { 138&can2 {
116 pinctrl-names = "default"; 139 pinctrl-names = "default";
117 pinctrl-0 = <&pinctrl_can2_1>; 140 pinctrl-0 = <&pinctrl_can2>;
118 status = "okay"; 141 status = "okay";
119}; 142};
120 143
121&esdhc1 { 144&esdhc1 {
122 pinctrl-names = "default"; 145 pinctrl-names = "default";
123 pinctrl-0 = <&pinctrl_esdhc1_1>; 146 pinctrl-0 = <&pinctrl_esdhc1>;
124 cd-gpios = <&gpio1 1 0>; 147 cd-gpios = <&gpio1 1 0>;
125 wp-gpios = <&gpio1 9 0>; 148 wp-gpios = <&gpio1 9 0>;
126 status = "okay"; 149 status = "okay";
@@ -128,14 +151,14 @@
128 151
129&fec { 152&fec {
130 pinctrl-names = "default"; 153 pinctrl-names = "default";
131 pinctrl-0 = <&pinctrl_fec_1>; 154 pinctrl-0 = <&pinctrl_fec>;
132 phy-mode = "rmii"; 155 phy-mode = "rmii";
133 status = "okay"; 156 status = "okay";
134}; 157};
135 158
136&i2c1 { 159&i2c1 {
137 pinctrl-names = "default"; 160 pinctrl-names = "default";
138 pinctrl-0 = <&pinctrl_i2c1_2>; 161 pinctrl-0 = <&pinctrl_i2c1>;
139 status = "okay"; 162 status = "okay";
140 163
141 sgtl5000: codec@0a { 164 sgtl5000: codec@0a {
@@ -143,13 +166,13 @@
143 reg = <0x0a>; 166 reg = <0x0a>;
144 VDDA-supply = <&reg_3p2v>; 167 VDDA-supply = <&reg_3p2v>;
145 VDDIO-supply = <&reg_3p2v>; 168 VDDIO-supply = <&reg_3p2v>;
146 clocks = <&clks 150>; 169 clocks = <&clks IMX5_CLK_SSI_EXT1_GATE>;
147 }; 170 };
148}; 171};
149 172
150&i2c2 { 173&i2c2 {
151 pinctrl-names = "default"; 174 pinctrl-names = "default";
152 pinctrl-0 = <&pinctrl_i2c2_2>; 175 pinctrl-0 = <&pinctrl_i2c2>;
153 clock-frequency = <400000>; 176 clock-frequency = <400000>;
154 status = "okay"; 177 status = "okay";
155 178
@@ -193,7 +216,7 @@
193 216
194&i2c3 { 217&i2c3 {
195 pinctrl-names = "default"; 218 pinctrl-names = "default";
196 pinctrl-0 = <&pinctrl_i2c3_1>; 219 pinctrl-0 = <&pinctrl_i2c3>;
197 status = "okay"; 220 status = "okay";
198}; 221};
199 222
@@ -201,14 +224,14 @@
201 pinctrl-names = "default"; 224 pinctrl-names = "default";
202 pinctrl-0 = <&pinctrl_hog>; 225 pinctrl-0 = <&pinctrl_hog>;
203 226
204 hog { 227 imx53-m53evk {
205 pinctrl_hog: hoggrp { 228 pinctrl_hog: hoggrp {
206 fsl,pins = < 229 fsl,pins = <
207 MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000 230 MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000
208 MX53_PAD_EIM_EB3__GPIO2_31 0x80000000 231 MX53_PAD_EIM_EB3__GPIO2_31 0x80000000
209 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000 232 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000
210 MX53_PAD_DISP0_DAT8__PWM1_PWMO 0x5 233 MX53_PAD_GPIO_2__GPIO1_2 0x80000000
211 234 MX53_PAD_GPIO_3__USBOH3_USBH1_OC 0x80000000
212 >; 235 >;
213 }; 236 };
214 237
@@ -218,12 +241,168 @@
218 MX53_PAD_PATA_DATA9__GPIO2_9 0x80000000 241 MX53_PAD_PATA_DATA9__GPIO2_9 0x80000000
219 >; 242 >;
220 }; 243 };
244
245 pinctrl_audmux: audmuxgrp {
246 fsl,pins = <
247 MX53_PAD_SD2_DATA3__AUDMUX_AUD4_TXC 0x80000000
248 MX53_PAD_SD2_DATA2__AUDMUX_AUD4_TXD 0x80000000
249 MX53_PAD_SD2_DATA1__AUDMUX_AUD4_TXFS 0x80000000
250 MX53_PAD_SD2_DATA0__AUDMUX_AUD4_RXD 0x80000000
251 >;
252 };
253
254 pinctrl_can1: can1grp {
255 fsl,pins = <
256 MX53_PAD_GPIO_7__CAN1_TXCAN 0x80000000
257 MX53_PAD_GPIO_8__CAN1_RXCAN 0x80000000
258 >;
259 };
260
261 pinctrl_can2: can2grp {
262 fsl,pins = <
263 MX53_PAD_KEY_COL4__CAN2_TXCAN 0x80000000
264 MX53_PAD_KEY_ROW4__CAN2_RXCAN 0x80000000
265 >;
266 };
267
268 pinctrl_esdhc1: esdhc1grp {
269 fsl,pins = <
270 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
271 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
272 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
273 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
274 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
275 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
276 >;
277 };
278
279 pinctrl_fec: fecgrp {
280 fsl,pins = <
281 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
282 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
283 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
284 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
285 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
286 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
287 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
288 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
289 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
290 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
291 >;
292 };
293
294 pinctrl_i2c1: i2c1grp {
295 fsl,pins = <
296 MX53_PAD_EIM_D21__I2C1_SCL 0xc0000000
297 MX53_PAD_EIM_D28__I2C1_SDA 0xc0000000
298 >;
299 };
300
301 pinctrl_i2c2: i2c2grp {
302 fsl,pins = <
303 MX53_PAD_EIM_D16__I2C2_SDA 0xc0000000
304 MX53_PAD_EIM_EB2__I2C2_SCL 0xc0000000
305 >;
306 };
307
308 pinctrl_i2c3: i2c3grp {
309 fsl,pins = <
310 MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000
311 MX53_PAD_GPIO_5__I2C3_SCL 0xc0000000
312 >;
313 };
314
315 pinctrl_ipu_disp1: ipudisp1grp {
316 fsl,pins = <
317 MX53_PAD_EIM_DA9__IPU_DISP1_DAT_0 0x5
318 MX53_PAD_EIM_DA8__IPU_DISP1_DAT_1 0x5
319 MX53_PAD_EIM_DA7__IPU_DISP1_DAT_2 0x5
320 MX53_PAD_EIM_DA6__IPU_DISP1_DAT_3 0x5
321 MX53_PAD_EIM_DA5__IPU_DISP1_DAT_4 0x5
322 MX53_PAD_EIM_DA4__IPU_DISP1_DAT_5 0x5
323 MX53_PAD_EIM_DA3__IPU_DISP1_DAT_6 0x5
324 MX53_PAD_EIM_DA2__IPU_DISP1_DAT_7 0x5
325 MX53_PAD_EIM_DA1__IPU_DISP1_DAT_8 0x5
326 MX53_PAD_EIM_DA0__IPU_DISP1_DAT_9 0x5
327 MX53_PAD_EIM_EB1__IPU_DISP1_DAT_10 0x5
328 MX53_PAD_EIM_EB0__IPU_DISP1_DAT_11 0x5
329 MX53_PAD_EIM_A17__IPU_DISP1_DAT_12 0x5
330 MX53_PAD_EIM_A18__IPU_DISP1_DAT_13 0x5
331 MX53_PAD_EIM_A19__IPU_DISP1_DAT_14 0x5
332 MX53_PAD_EIM_A20__IPU_DISP1_DAT_15 0x5
333 MX53_PAD_EIM_A21__IPU_DISP1_DAT_16 0x5
334 MX53_PAD_EIM_A22__IPU_DISP1_DAT_17 0x5
335 MX53_PAD_EIM_A23__IPU_DISP1_DAT_18 0x5
336 MX53_PAD_EIM_A24__IPU_DISP1_DAT_19 0x5
337 MX53_PAD_EIM_D31__IPU_DISP1_DAT_20 0x5
338 MX53_PAD_EIM_D30__IPU_DISP1_DAT_21 0x5
339 MX53_PAD_EIM_D26__IPU_DISP1_DAT_22 0x5
340 MX53_PAD_EIM_D27__IPU_DISP1_DAT_23 0x5
341 MX53_PAD_EIM_A16__IPU_DI1_DISP_CLK 0x5
342 MX53_PAD_EIM_DA13__IPU_DI1_D0_CS 0x5
343 MX53_PAD_EIM_DA14__IPU_DI1_D1_CS 0x5
344 MX53_PAD_EIM_DA15__IPU_DI1_PIN1 0x5
345 MX53_PAD_EIM_DA11__IPU_DI1_PIN2 0x5
346 MX53_PAD_EIM_DA12__IPU_DI1_PIN3 0x5
347 MX53_PAD_EIM_A25__IPU_DI1_PIN12 0x5
348 MX53_PAD_EIM_DA10__IPU_DI1_PIN15 0x5
349 >;
350 };
351
352 pinctrl_nand: nandgrp {
353 fsl,pins = <
354 MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B 0x4
355 MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B 0x4
356 MX53_PAD_NANDF_CLE__EMI_NANDF_CLE 0x4
357 MX53_PAD_NANDF_ALE__EMI_NANDF_ALE 0x4
358 MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B 0xe0
359 MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0 0xe0
360 MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0 0x4
361 MX53_PAD_PATA_DATA0__EMI_NANDF_D_0 0xa4
362 MX53_PAD_PATA_DATA1__EMI_NANDF_D_1 0xa4
363 MX53_PAD_PATA_DATA2__EMI_NANDF_D_2 0xa4
364 MX53_PAD_PATA_DATA3__EMI_NANDF_D_3 0xa4
365 MX53_PAD_PATA_DATA4__EMI_NANDF_D_4 0xa4
366 MX53_PAD_PATA_DATA5__EMI_NANDF_D_5 0xa4
367 MX53_PAD_PATA_DATA6__EMI_NANDF_D_6 0xa4
368 MX53_PAD_PATA_DATA7__EMI_NANDF_D_7 0xa4
369 >;
370 };
371
372 pinctrl_pwm1: pwm1grp {
373 fsl,pins = <
374 MX53_PAD_DISP0_DAT8__PWM1_PWMO 0x5
375 >;
376 };
377
378 pinctrl_uart1: uart1grp {
379 fsl,pins = <
380 MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
381 MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
382 >;
383 };
384
385 pinctrl_uart2: uart2grp {
386 fsl,pins = <
387 MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4
388 MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4
389 >;
390 };
391
392 pinctrl_uart3: uart3grp {
393 fsl,pins = <
394 MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
395 MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
396 MX53_PAD_PATA_DA_1__UART3_CTS 0x1e4
397 MX53_PAD_PATA_DA_2__UART3_RTS 0x1e4
398 >;
399 };
221 }; 400 };
222}; 401};
223 402
224&nfc { 403&nfc {
225 pinctrl-names = "default"; 404 pinctrl-names = "default";
226 pinctrl-0 = <&pinctrl_nand_1>; 405 pinctrl-0 = <&pinctrl_nand>;
227 nand-bus-width = <8>; 406 nand-bus-width = <8>;
228 nand-ecc-mode = "hw"; 407 nand-ecc-mode = "hw";
229 status = "okay"; 408 status = "okay";
@@ -231,7 +410,11 @@
231 410
232&pwm1 { 411&pwm1 {
233 pinctrl-names = "default"; 412 pinctrl-names = "default";
234 pinctrl-0 = <&pinctrl_pwm1_1>; 413 pinctrl-0 = <&pinctrl_pwm1>;
414 status = "okay";
415};
416
417&sata {
235 status = "okay"; 418 status = "okay";
236}; 419};
237 420
@@ -242,18 +425,29 @@
242 425
243&uart1 { 426&uart1 {
244 pinctrl-names = "default"; 427 pinctrl-names = "default";
245 pinctrl-0 = <&pinctrl_uart1_2>; 428 pinctrl-0 = <&pinctrl_uart1>;
246 status = "okay"; 429 status = "okay";
247}; 430};
248 431
249&uart2 { 432&uart2 {
250 pinctrl-names = "default"; 433 pinctrl-names = "default";
251 pinctrl-0 = <&pinctrl_uart2_1>; 434 pinctrl-0 = <&pinctrl_uart2>;
252 status = "okay"; 435 status = "okay";
253}; 436};
254 437
255&uart3 { 438&uart3 {
256 pinctrl-names = "default"; 439 pinctrl-names = "default";
257 pinctrl-0 = <&pinctrl_uart3_1>; 440 pinctrl-0 = <&pinctrl_uart3>;
441 status = "okay";
442};
443
444&usbh1 {
445 vbus-supply = <&reg_usbh1_vbus>;
446 phy_type = "utmi";
447 status = "okay";
448};
449
450&usbotg {
451 dr_mode = "peripheral";
258 status = "okay"; 452 status = "okay";
259}; 453};
diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts
index a63090267941..55af11037a00 100644
--- a/arch/arm/boot/dts/imx53-mba53.dts
+++ b/arch/arm/boot/dts/imx53-mba53.dts
@@ -17,14 +17,6 @@
17 model = "TQ MBa53 starter kit"; 17 model = "TQ MBa53 starter kit";
18 compatible = "tq,mba53", "tq,tqma53", "fsl,imx53"; 18 compatible = "tq,mba53", "tq,tqma53", "fsl,imx53";
19 19
20 reg_backlight: fixed@0 {
21 compatible = "regulator-fixed";
22 regulator-name = "lcd-supply";
23 gpio = <&gpio2 5 0>;
24 startup-delay-us = <5000>;
25 enable-active-low;
26 };
27
28 backlight { 20 backlight {
29 compatible = "pwm-backlight"; 21 compatible = "pwm-backlight";
30 pwms = <&pwm2 0 50000>; 22 pwms = <&pwm2 0 50000>;
@@ -43,12 +35,27 @@
43 status = "disabled"; 35 status = "disabled";
44 }; 36 };
45 37
46 reg_3p2v: 3p2v { 38 regulators {
47 compatible = "regulator-fixed"; 39 compatible = "simple-bus";
48 regulator-name = "3P2V"; 40 #address-cells = <1>;
49 regulator-min-microvolt = <3200000>; 41 #size-cells = <0>;
50 regulator-max-microvolt = <3200000>; 42
51 regulator-always-on; 43 reg_backlight: regulator@0 {
44 compatible = "regulator-fixed";
45 reg = <0>;
46 regulator-name = "lcd-supply";
47 gpio = <&gpio2 5 0>;
48 startup-delay-us = <5000>;
49 };
50
51 reg_3p2v: regulator@1 {
52 compatible = "regulator-fixed";
53 reg = <1>;
54 regulator-name = "3P2V";
55 regulator-min-microvolt = <3200000>;
56 regulator-max-microvolt = <3200000>;
57 regulator-always-on;
58 };
52 }; 59 };
53 60
54 sound { 61 sound {
@@ -148,14 +155,14 @@
148&audmux { 155&audmux {
149 status = "okay"; 156 status = "okay";
150 pinctrl-names = "default"; 157 pinctrl-names = "default";
151 pinctrl-0 = <&pinctrl_audmux_1>; 158 pinctrl-0 = <&pinctrl_audmux>;
152}; 159};
153 160
154&i2c2 { 161&i2c2 {
155 codec: sgtl5000@a { 162 codec: sgtl5000@a {
156 compatible = "fsl,sgtl5000"; 163 compatible = "fsl,sgtl5000";
157 reg = <0x0a>; 164 reg = <0x0a>;
158 clocks = <&clks 150>; 165 clocks = <&clks IMX5_CLK_SSI_EXT1_GATE>;
159 VDDA-supply = <&reg_3p2v>; 166 VDDA-supply = <&reg_3p2v>;
160 VDDIO-supply = <&reg_3p2v>; 167 VDDIO-supply = <&reg_3p2v>;
161 }; 168 };
diff --git a/arch/arm/boot/dts/imx53-qsb-common.dtsi b/arch/arm/boot/dts/imx53-qsb-common.dtsi
new file mode 100644
index 000000000000..2dca98b79f48
--- /dev/null
+++ b/arch/arm/boot/dts/imx53-qsb-common.dtsi
@@ -0,0 +1,336 @@
1/*
2 * Copyright 2011 Freescale Semiconductor, Inc.
3 * Copyright 2011 Linaro Ltd.
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13#include "imx53.dtsi"
14
15/ {
16 memory {
17 reg = <0x70000000 0x40000000>;
18 };
19
20 display@di0 {
21 compatible = "fsl,imx-parallel-display";
22 crtcs = <&ipu 0>;
23 interface-pix-fmt = "rgb565";
24 pinctrl-names = "default";
25 pinctrl-0 = <&pinctrl_ipu_disp0>;
26 status = "disabled";
27 display-timings {
28 claawvga {
29 native-mode;
30 clock-frequency = <27000000>;
31 hactive = <800>;
32 vactive = <480>;
33 hback-porch = <40>;
34 hfront-porch = <60>;
35 vback-porch = <10>;
36 vfront-porch = <10>;
37 hsync-len = <20>;
38 vsync-len = <10>;
39 hsync-active = <0>;
40 vsync-active = <0>;
41 de-active = <1>;
42 pixelclk-active = <0>;
43 };
44 };
45 };
46
47 gpio-keys {
48 compatible = "gpio-keys";
49
50 power {
51 label = "Power Button";
52 gpios = <&gpio1 8 0>;
53 linux,code = <116>; /* KEY_POWER */
54 };
55
56 volume-up {
57 label = "Volume Up";
58 gpios = <&gpio2 14 0>;
59 linux,code = <115>; /* KEY_VOLUMEUP */
60 gpio-key,wakeup;
61 };
62
63 volume-down {
64 label = "Volume Down";
65 gpios = <&gpio2 15 0>;
66 linux,code = <114>; /* KEY_VOLUMEDOWN */
67 gpio-key,wakeup;
68 };
69 };
70
71 leds {
72 compatible = "gpio-leds";
73 pinctrl-names = "default";
74 pinctrl-0 = <&led_pin_gpio7_7>;
75
76 user {
77 label = "Heartbeat";
78 gpios = <&gpio7 7 0>;
79 linux,default-trigger = "heartbeat";
80 };
81 };
82
83 regulators {
84 compatible = "simple-bus";
85 #address-cells = <1>;
86 #size-cells = <0>;
87
88 reg_3p2v: regulator@0 {
89 compatible = "regulator-fixed";
90 reg = <0>;
91 regulator-name = "3P2V";
92 regulator-min-microvolt = <3200000>;
93 regulator-max-microvolt = <3200000>;
94 regulator-always-on;
95 };
96
97 reg_usb_vbus: regulator@1 {
98 compatible = "regulator-fixed";
99 reg = <1>;
100 regulator-name = "usb_vbus";
101 regulator-min-microvolt = <5000000>;
102 regulator-max-microvolt = <5000000>;
103 gpio = <&gpio7 8 0>;
104 enable-active-high;
105 };
106 };
107
108 sound {
109 compatible = "fsl,imx53-qsb-sgtl5000",
110 "fsl,imx-audio-sgtl5000";
111 model = "imx53-qsb-sgtl5000";
112 ssi-controller = <&ssi2>;
113 audio-codec = <&sgtl5000>;
114 audio-routing =
115 "MIC_IN", "Mic Jack",
116 "Mic Jack", "Mic Bias",
117 "Headphone Jack", "HP_OUT";
118 mux-int-port = <2>;
119 mux-ext-port = <5>;
120 };
121};
122
123&esdhc1 {
124 pinctrl-names = "default";
125 pinctrl-0 = <&pinctrl_esdhc1>;
126 status = "okay";
127};
128
129&ssi2 {
130 fsl,mode = "i2s-slave";
131 status = "okay";
132};
133
134&esdhc3 {
135 pinctrl-names = "default";
136 pinctrl-0 = <&pinctrl_esdhc3>;
137 cd-gpios = <&gpio3 11 0>;
138 wp-gpios = <&gpio3 12 0>;
139 bus-width = <8>;
140 status = "okay";
141};
142
143&iomuxc {
144 pinctrl-names = "default";
145 pinctrl-0 = <&pinctrl_hog>;
146
147 imx53-qsb {
148 pinctrl_hog: hoggrp {
149 fsl,pins = <
150 MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000
151 MX53_PAD_GPIO_8__GPIO1_8 0x80000000
152 MX53_PAD_PATA_DATA14__GPIO2_14 0x80000000
153 MX53_PAD_PATA_DATA15__GPIO2_15 0x80000000
154 MX53_PAD_EIM_DA11__GPIO3_11 0x80000000
155 MX53_PAD_EIM_DA12__GPIO3_12 0x80000000
156 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000
157 MX53_PAD_PATA_DA_2__GPIO7_8 0x80000000
158 MX53_PAD_GPIO_16__GPIO7_11 0x80000000
159 >;
160 };
161
162 led_pin_gpio7_7: led_gpio7_7@0 {
163 fsl,pins = <
164 MX53_PAD_PATA_DA_1__GPIO7_7 0x80000000
165 >;
166 };
167
168 pinctrl_audmux: audmuxgrp {
169 fsl,pins = <
170 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000
171 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000
172 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000
173 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000
174 >;
175 };
176
177 pinctrl_esdhc1: esdhc1grp {
178 fsl,pins = <
179 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
180 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
181 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
182 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
183 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
184 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
185 >;
186 };
187
188 pinctrl_esdhc3: esdhc3grp {
189 fsl,pins = <
190 MX53_PAD_PATA_DATA8__ESDHC3_DAT0 0x1d5
191 MX53_PAD_PATA_DATA9__ESDHC3_DAT1 0x1d5
192 MX53_PAD_PATA_DATA10__ESDHC3_DAT2 0x1d5
193 MX53_PAD_PATA_DATA11__ESDHC3_DAT3 0x1d5
194 MX53_PAD_PATA_DATA0__ESDHC3_DAT4 0x1d5
195 MX53_PAD_PATA_DATA1__ESDHC3_DAT5 0x1d5
196 MX53_PAD_PATA_DATA2__ESDHC3_DAT6 0x1d5
197 MX53_PAD_PATA_DATA3__ESDHC3_DAT7 0x1d5
198 MX53_PAD_PATA_RESET_B__ESDHC3_CMD 0x1d5
199 MX53_PAD_PATA_IORDY__ESDHC3_CLK 0x1d5
200 >;
201 };
202
203 pinctrl_fec: fecgrp {
204 fsl,pins = <
205 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
206 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
207 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
208 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
209 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
210 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
211 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
212 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
213 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
214 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
215 >;
216 };
217
218 pinctrl_i2c1: i2c1grp {
219 fsl,pins = <
220 MX53_PAD_CSI0_DAT8__I2C1_SDA 0xc0000000
221 MX53_PAD_CSI0_DAT9__I2C1_SCL 0xc0000000
222 >;
223 };
224
225 pinctrl_i2c2: i2c2grp {
226 fsl,pins = <
227 MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000
228 MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000
229 >;
230 };
231
232 pinctrl_ipu_disp0: ipudisp0grp {
233 fsl,pins = <
234 MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK 0x5
235 MX53_PAD_DI0_PIN15__IPU_DI0_PIN15 0x5
236 MX53_PAD_DI0_PIN2__IPU_DI0_PIN2 0x5
237 MX53_PAD_DI0_PIN3__IPU_DI0_PIN3 0x5
238 MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0 0x5
239 MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1 0x5
240 MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2 0x5
241 MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3 0x5
242 MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4 0x5
243 MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5 0x5
244 MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6 0x5
245 MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7 0x5
246 MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8 0x5
247 MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9 0x5
248 MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10 0x5
249 MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11 0x5
250 MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12 0x5
251 MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13 0x5
252 MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14 0x5
253 MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15 0x5
254 MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16 0x5
255 MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17 0x5
256 MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18 0x5
257 MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19 0x5
258 MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20 0x5
259 MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21 0x5
260 MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22 0x5
261 MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23 0x5
262 >;
263 };
264
265 pinctrl_uart1: uart1grp {
266 fsl,pins = <
267 MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1e4
268 MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1e4
269 >;
270 };
271 };
272};
273
274&uart1 {
275 pinctrl-names = "default";
276 pinctrl-0 = <&pinctrl_uart1>;
277 status = "okay";
278};
279
280&i2c2 {
281 pinctrl-names = "default";
282 pinctrl-0 = <&pinctrl_i2c2>;
283 status = "okay";
284
285 sgtl5000: codec@0a {
286 compatible = "fsl,sgtl5000";
287 reg = <0x0a>;
288 VDDA-supply = <&reg_3p2v>;
289 VDDIO-supply = <&reg_3p2v>;
290 clocks = <&clks IMX5_CLK_SSI_EXT1_GATE>;
291 };
292};
293
294&i2c1 {
295 pinctrl-names = "default";
296 pinctrl-0 = <&pinctrl_i2c1>;
297 status = "okay";
298
299 accelerometer: mma8450@1c {
300 compatible = "fsl,mma8450";
301 reg = <0x1c>;
302 };
303};
304
305&audmux {
306 pinctrl-names = "default";
307 pinctrl-0 = <&pinctrl_audmux>;
308 status = "okay";
309};
310
311&fec {
312 pinctrl-names = "default";
313 pinctrl-0 = <&pinctrl_fec>;
314 phy-mode = "rmii";
315 phy-reset-gpios = <&gpio7 6 0>;
316 status = "okay";
317};
318
319&sata {
320 status = "okay";
321};
322
323&vpu {
324 status = "okay";
325};
326
327&usbh1 {
328 vbus-supply = <&reg_usb_vbus>;
329 phy_type = "utmi";
330 status = "okay";
331};
332
333&usbotg {
334 dr_mode = "peripheral";
335 status = "okay";
336};
diff --git a/arch/arm/boot/dts/imx53-qsb.dts b/arch/arm/boot/dts/imx53-qsb.dts
index 91a5935a4aac..dec4b073ceb1 100644
--- a/arch/arm/boot/dts/imx53-qsb.dts
+++ b/arch/arm/boot/dts/imx53-qsb.dts
@@ -11,193 +11,14 @@
11 */ 11 */
12 12
13/dts-v1/; 13/dts-v1/;
14#include "imx53.dtsi" 14#include "imx53-qsb-common.dtsi"
15 15
16/ { 16/ {
17 model = "Freescale i.MX53 Quick Start Board"; 17 model = "Freescale i.MX53 Quick Start Board";
18 compatible = "fsl,imx53-qsb", "fsl,imx53"; 18 compatible = "fsl,imx53-qsb", "fsl,imx53";
19
20 memory {
21 reg = <0x70000000 0x40000000>;
22 };
23
24 display@di0 {
25 compatible = "fsl,imx-parallel-display";
26 crtcs = <&ipu 0>;
27 interface-pix-fmt = "rgb565";
28 pinctrl-names = "default";
29 pinctrl-0 = <&pinctrl_ipu_disp0_1>;
30 status = "disabled";
31 display-timings {
32 claawvga {
33 native-mode;
34 clock-frequency = <27000000>;
35 hactive = <800>;
36 vactive = <480>;
37 hback-porch = <40>;
38 hfront-porch = <60>;
39 vback-porch = <10>;
40 vfront-porch = <10>;
41 hsync-len = <20>;
42 vsync-len = <10>;
43 hsync-active = <0>;
44 vsync-active = <0>;
45 de-active = <1>;
46 pixelclk-active = <0>;
47 };
48 };
49 };
50
51 gpio-keys {
52 compatible = "gpio-keys";
53
54 power {
55 label = "Power Button";
56 gpios = <&gpio1 8 0>;
57 linux,code = <116>; /* KEY_POWER */
58 };
59
60 volume-up {
61 label = "Volume Up";
62 gpios = <&gpio2 14 0>;
63 linux,code = <115>; /* KEY_VOLUMEUP */
64 gpio-key,wakeup;
65 };
66
67 volume-down {
68 label = "Volume Down";
69 gpios = <&gpio2 15 0>;
70 linux,code = <114>; /* KEY_VOLUMEDOWN */
71 gpio-key,wakeup;
72 };
73 };
74
75 leds {
76 compatible = "gpio-leds";
77 pinctrl-names = "default";
78 pinctrl-0 = <&led_pin_gpio7_7>;
79
80 user {
81 label = "Heartbeat";
82 gpios = <&gpio7 7 0>;
83 linux,default-trigger = "heartbeat";
84 };
85 };
86
87 regulators {
88 compatible = "simple-bus";
89
90 reg_3p2v: 3p2v {
91 compatible = "regulator-fixed";
92 regulator-name = "3P2V";
93 regulator-min-microvolt = <3200000>;
94 regulator-max-microvolt = <3200000>;
95 regulator-always-on;
96 };
97
98 reg_usb_vbus: usb_vbus {
99 compatible = "regulator-fixed";
100 regulator-name = "usb_vbus";
101 regulator-min-microvolt = <5000000>;
102 regulator-max-microvolt = <5000000>;
103 gpio = <&gpio7 8 0>;
104 enable-active-high;
105 };
106 };
107
108 sound {
109 compatible = "fsl,imx53-qsb-sgtl5000",
110 "fsl,imx-audio-sgtl5000";
111 model = "imx53-qsb-sgtl5000";
112 ssi-controller = <&ssi2>;
113 audio-codec = <&sgtl5000>;
114 audio-routing =
115 "MIC_IN", "Mic Jack",
116 "Mic Jack", "Mic Bias",
117 "Headphone Jack", "HP_OUT";
118 mux-int-port = <2>;
119 mux-ext-port = <5>;
120 };
121};
122
123&esdhc1 {
124 pinctrl-names = "default";
125 pinctrl-0 = <&pinctrl_esdhc1_1>;
126 status = "okay";
127};
128
129&ssi2 {
130 fsl,mode = "i2s-slave";
131 status = "okay";
132};
133
134&esdhc3 {
135 pinctrl-names = "default";
136 pinctrl-0 = <&pinctrl_esdhc3_1>;
137 cd-gpios = <&gpio3 11 0>;
138 wp-gpios = <&gpio3 12 0>;
139 bus-width = <8>;
140 status = "okay";
141};
142
143&iomuxc {
144 pinctrl-names = "default";
145 pinctrl-0 = <&pinctrl_hog>;
146
147 hog {
148 pinctrl_hog: hoggrp {
149 fsl,pins = <
150 MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000
151 MX53_PAD_GPIO_8__GPIO1_8 0x80000000
152 MX53_PAD_PATA_DATA14__GPIO2_14 0x80000000
153 MX53_PAD_PATA_DATA15__GPIO2_15 0x80000000
154 MX53_PAD_EIM_DA11__GPIO3_11 0x80000000
155 MX53_PAD_EIM_DA12__GPIO3_12 0x80000000
156 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000
157 MX53_PAD_PATA_DA_2__GPIO7_8 0x80000000
158 MX53_PAD_GPIO_16__GPIO7_11 0x80000000
159 >;
160 };
161
162 led_pin_gpio7_7: led_gpio7_7@0 {
163 fsl,pins = <
164 MX53_PAD_PATA_DA_1__GPIO7_7 0x80000000
165 >;
166 };
167 };
168
169};
170
171&uart1 {
172 pinctrl-names = "default";
173 pinctrl-0 = <&pinctrl_uart1_1>;
174 status = "okay";
175};
176
177&i2c2 {
178 pinctrl-names = "default";
179 pinctrl-0 = <&pinctrl_i2c2_1>;
180 status = "okay";
181
182 sgtl5000: codec@0a {
183 compatible = "fsl,sgtl5000";
184 reg = <0x0a>;
185 VDDA-supply = <&reg_3p2v>;
186 VDDIO-supply = <&reg_3p2v>;
187 clocks = <&clks 150>;
188 };
189}; 19};
190 20
191&i2c1 { 21&i2c1 {
192 pinctrl-names = "default";
193 pinctrl-0 = <&pinctrl_i2c1_1>;
194 status = "okay";
195
196 accelerometer: mma8450@1c {
197 compatible = "fsl,mma8450";
198 reg = <0x1c>;
199 };
200
201 pmic: dialog@48 { 22 pmic: dialog@48 {
202 compatible = "dlg,da9053-aa", "dlg,da9052"; 23 compatible = "dlg,da9053-aa", "dlg,da9052";
203 reg = <0x48>; 24 reg = <0x48>;
@@ -292,32 +113,3 @@
292 }; 113 };
293 }; 114 };
294}; 115};
295
296&audmux {
297 pinctrl-names = "default";
298 pinctrl-0 = <&pinctrl_audmux_1>;
299 status = "okay";
300};
301
302&fec {
303 pinctrl-names = "default";
304 pinctrl-0 = <&pinctrl_fec_1>;
305 phy-mode = "rmii";
306 phy-reset-gpios = <&gpio7 6 0>;
307 status = "okay";
308};
309
310&vpu {
311 status = "okay";
312};
313
314&usbh1 {
315 vbus-supply = <&reg_usb_vbus>;
316 phy_type = "utmi";
317 status = "okay";
318};
319
320&usbotg {
321 dr_mode = "peripheral";
322 status = "okay";
323};
diff --git a/arch/arm/boot/dts/imx53-qsrb.dts b/arch/arm/boot/dts/imx53-qsrb.dts
new file mode 100644
index 000000000000..f1bbf9a32991
--- /dev/null
+++ b/arch/arm/boot/dts/imx53-qsrb.dts
@@ -0,0 +1,158 @@
1/*
2 * Copyright 2011 Freescale Semiconductor, Inc.
3 * Copyright 2011 Linaro Ltd.
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13/dts-v1/;
14
15#include "imx53-qsb-common.dtsi"
16
17/ {
18 model = "Freescale i.MX53 Quick Start-R Board";
19 compatible = "fsl,imx53-qsrb", "fsl,imx53";
20};
21
22&iomuxc {
23 i2c1 {
24 /* open drain */
25 pinctrl_i2c1_qsrb: i2c1grp-1 {
26 fsl,pins = <
27 MX53_PAD_CSI0_DAT8__I2C1_SDA 0x400001ec
28 MX53_PAD_CSI0_DAT9__I2C1_SCL 0x400001ec
29 >;
30 };
31 };
32};
33
34&i2c1 {
35 pinctrl-names = "default";
36 pinctrl-0 = <&pinctrl_i2c1_qsrb>;
37 status = "okay";
38
39 pmic: mc34708@8 {
40 compatible = "fsl,mc34708";
41 reg = <0x08>;
42 interrupt-parent = <&gpio5>;
43 interrupts = <23 0x8>;
44 regulators {
45 sw1_reg: sw1a {
46 regulator-name = "SW1";
47 regulator-min-microvolt = <650000>;
48 regulator-max-microvolt = <1437500>;
49 regulator-boot-on;
50 regulator-always-on;
51 };
52
53 sw1b_reg: sw1b {
54 regulator-name = "SW1B";
55 regulator-min-microvolt = <650000>;
56 regulator-max-microvolt = <1437500>;
57 regulator-boot-on;
58 regulator-always-on;
59 };
60
61 sw2_reg: sw2 {
62 regulator-name = "SW2";
63 regulator-min-microvolt = <650000>;
64 regulator-max-microvolt = <1437500>;
65 regulator-boot-on;
66 regulator-always-on;
67 };
68
69 sw3_reg: sw3 {
70 regulator-name = "SW3";
71 regulator-min-microvolt = <650000>;
72 regulator-max-microvolt = <1425000>;
73 regulator-boot-on;
74 };
75
76 sw4a_reg: sw4a {
77 regulator-name = "SW4A";
78 regulator-min-microvolt = <1200000>;
79 regulator-max-microvolt = <3300000>;
80 regulator-boot-on;
81 regulator-always-on;
82 };
83
84 sw4b_reg: sw4b {
85 regulator-name = "SW4B";
86 regulator-min-microvolt = <1200000>;
87 regulator-max-microvolt = <3300000>;
88 regulator-boot-on;
89 regulator-always-on;
90 };
91
92 sw5_reg: sw5 {
93 regulator-name = "SW5";
94 regulator-min-microvolt = <1200000>;
95 regulator-max-microvolt = <1975000>;
96 regulator-boot-on;
97 regulator-always-on;
98 };
99
100 swbst_reg: swbst {
101 regulator-name = "SWBST";
102 regulator-boot-on;
103 regulator-always-on;
104 };
105
106 vpll_reg: vpll {
107 regulator-name = "VPLL";
108 regulator-min-microvolt = <1200000>;
109 regulator-max-microvolt = <1800000>;
110 regulator-boot-on;
111 };
112
113 vrefddr_reg: vrefddr {
114 regulator-name = "VREFDDR";
115 regulator-boot-on;
116 regulator-always-on;
117 };
118
119 vusb_reg: vusb {
120 regulator-name = "VUSB";
121 regulator-boot-on;
122 regulator-always-on;
123 };
124
125 vusb2_reg: vusb2 {
126 regulator-name = "VUSB2";
127 regulator-min-microvolt = <2500000>;
128 regulator-max-microvolt = <3000000>;
129 regulator-boot-on;
130 regulator-always-on;
131 };
132
133 vdac_reg: vdac {
134 regulator-name = "VDAC";
135 regulator-min-microvolt = <2500000>;
136 regulator-max-microvolt = <2775000>;
137 regulator-boot-on;
138 regulator-always-on;
139 };
140
141 vgen1_reg: vgen1 {
142 regulator-name = "VGEN1";
143 regulator-min-microvolt = <1200000>;
144 regulator-max-microvolt = <1550000>;
145 regulator-boot-on;
146 regulator-always-on;
147 };
148
149 vgen2_reg: vgen2 {
150 regulator-name = "VGEN2";
151 regulator-min-microvolt = <2500000>;
152 regulator-max-microvolt = <3300000>;
153 regulator-boot-on;
154 regulator-always-on;
155 };
156 };
157 };
158};
diff --git a/arch/arm/boot/dts/imx53-smd.dts b/arch/arm/boot/dts/imx53-smd.dts
index a9b6e10de0a5..5ec1590ff7bc 100644
--- a/arch/arm/boot/dts/imx53-smd.dts
+++ b/arch/arm/boot/dts/imx53-smd.dts
@@ -40,7 +40,7 @@
40 40
41&esdhc1 { 41&esdhc1 {
42 pinctrl-names = "default"; 42 pinctrl-names = "default";
43 pinctrl-0 = <&pinctrl_esdhc1_1>; 43 pinctrl-0 = <&pinctrl_esdhc1>;
44 cd-gpios = <&gpio3 13 0>; 44 cd-gpios = <&gpio3 13 0>;
45 wp-gpios = <&gpio4 11 0>; 45 wp-gpios = <&gpio4 11 0>;
46 status = "okay"; 46 status = "okay";
@@ -48,21 +48,21 @@
48 48
49&esdhc2 { 49&esdhc2 {
50 pinctrl-names = "default"; 50 pinctrl-names = "default";
51 pinctrl-0 = <&pinctrl_esdhc2_1>; 51 pinctrl-0 = <&pinctrl_esdhc2>;
52 non-removable; 52 non-removable;
53 status = "okay"; 53 status = "okay";
54}; 54};
55 55
56&uart3 { 56&uart3 {
57 pinctrl-names = "default"; 57 pinctrl-names = "default";
58 pinctrl-0 = <&pinctrl_uart3_1>; 58 pinctrl-0 = <&pinctrl_uart3>;
59 fsl,uart-has-rtscts; 59 fsl,uart-has-rtscts;
60 status = "okay"; 60 status = "okay";
61}; 61};
62 62
63&ecspi1 { 63&ecspi1 {
64 pinctrl-names = "default"; 64 pinctrl-names = "default";
65 pinctrl-0 = <&pinctrl_ecspi1_1>; 65 pinctrl-0 = <&pinctrl_ecspi1>;
66 fsl,spi-num-chipselects = <2>; 66 fsl,spi-num-chipselects = <2>;
67 cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>; 67 cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>;
68 status = "okay"; 68 status = "okay";
@@ -95,7 +95,7 @@
95 95
96&esdhc3 { 96&esdhc3 {
97 pinctrl-names = "default"; 97 pinctrl-names = "default";
98 pinctrl-0 = <&pinctrl_esdhc3_1>; 98 pinctrl-0 = <&pinctrl_esdhc3>;
99 non-removable; 99 non-removable;
100 status = "okay"; 100 status = "okay";
101}; 101};
@@ -104,7 +104,7 @@
104 pinctrl-names = "default"; 104 pinctrl-names = "default";
105 pinctrl-0 = <&pinctrl_hog>; 105 pinctrl-0 = <&pinctrl_hog>;
106 106
107 hog { 107 imx53-smd {
108 pinctrl_hog: hoggrp { 108 pinctrl_hog: hoggrp {
109 fsl,pins = < 109 fsl,pins = <
110 MX53_PAD_PATA_DATA14__GPIO2_14 0x80000000 110 MX53_PAD_PATA_DATA14__GPIO2_14 0x80000000
@@ -116,24 +116,121 @@
116 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000 116 MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000
117 >; 117 >;
118 }; 118 };
119
120 pinctrl_ecspi1: ecspi1grp {
121 fsl,pins = <
122 MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000
123 MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000
124 MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000
125 >;
126 };
127
128 pinctrl_esdhc1: esdhc1grp {
129 fsl,pins = <
130 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
131 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
132 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
133 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
134 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
135 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
136 >;
137 };
138
139 pinctrl_esdhc2: esdhc2grp {
140 fsl,pins = <
141 MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5
142 MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5
143 MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5
144 MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5
145 MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5
146 MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5
147 >;
148 };
149
150 pinctrl_esdhc3: esdhc3grp {
151 fsl,pins = <
152 MX53_PAD_PATA_DATA8__ESDHC3_DAT0 0x1d5
153 MX53_PAD_PATA_DATA9__ESDHC3_DAT1 0x1d5
154 MX53_PAD_PATA_DATA10__ESDHC3_DAT2 0x1d5
155 MX53_PAD_PATA_DATA11__ESDHC3_DAT3 0x1d5
156 MX53_PAD_PATA_DATA0__ESDHC3_DAT4 0x1d5
157 MX53_PAD_PATA_DATA1__ESDHC3_DAT5 0x1d5
158 MX53_PAD_PATA_DATA2__ESDHC3_DAT6 0x1d5
159 MX53_PAD_PATA_DATA3__ESDHC3_DAT7 0x1d5
160 MX53_PAD_PATA_RESET_B__ESDHC3_CMD 0x1d5
161 MX53_PAD_PATA_IORDY__ESDHC3_CLK 0x1d5
162 >;
163 };
164
165 pinctrl_fec: fecgrp {
166 fsl,pins = <
167 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
168 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
169 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
170 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
171 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
172 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
173 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
174 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
175 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
176 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
177 >;
178 };
179
180 pinctrl_i2c1: i2c1grp {
181 fsl,pins = <
182 MX53_PAD_CSI0_DAT8__I2C1_SDA 0xc0000000
183 MX53_PAD_CSI0_DAT9__I2C1_SCL 0xc0000000
184 >;
185 };
186
187 pinctrl_i2c2: i2c2grp {
188 fsl,pins = <
189 MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000
190 MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000
191 >;
192 };
193
194 pinctrl_uart1: uart1grp {
195 fsl,pins = <
196 MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1e4
197 MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1e4
198 >;
199 };
200
201 pinctrl_uart2: uart2grp {
202 fsl,pins = <
203 MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4
204 MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4
205 >;
206 };
207
208 pinctrl_uart3: uart3grp {
209 fsl,pins = <
210 MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
211 MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
212 MX53_PAD_PATA_DA_1__UART3_CTS 0x1e4
213 MX53_PAD_PATA_DA_2__UART3_RTS 0x1e4
214 >;
215 };
119 }; 216 };
120}; 217};
121 218
122&uart1 { 219&uart1 {
123 pinctrl-names = "default"; 220 pinctrl-names = "default";
124 pinctrl-0 = <&pinctrl_uart1_1>; 221 pinctrl-0 = <&pinctrl_uart1>;
125 status = "okay"; 222 status = "okay";
126}; 223};
127 224
128&uart2 { 225&uart2 {
129 pinctrl-names = "default"; 226 pinctrl-names = "default";
130 pinctrl-0 = <&pinctrl_uart2_1>; 227 pinctrl-0 = <&pinctrl_uart2>;
131 status = "okay"; 228 status = "okay";
132}; 229};
133 230
134&i2c2 { 231&i2c2 {
135 pinctrl-names = "default"; 232 pinctrl-names = "default";
136 pinctrl-0 = <&pinctrl_i2c2_1>; 233 pinctrl-0 = <&pinctrl_i2c2>;
137 status = "okay"; 234 status = "okay";
138 235
139 codec: sgtl5000@0a { 236 codec: sgtl5000@0a {
@@ -154,7 +251,7 @@
154 251
155&i2c1 { 252&i2c1 {
156 pinctrl-names = "default"; 253 pinctrl-names = "default";
157 pinctrl-0 = <&pinctrl_i2c1_1>; 254 pinctrl-0 = <&pinctrl_i2c1>;
158 status = "okay"; 255 status = "okay";
159 256
160 accelerometer: mma8450@1c { 257 accelerometer: mma8450@1c {
@@ -175,7 +272,7 @@
175 272
176&fec { 273&fec {
177 pinctrl-names = "default"; 274 pinctrl-names = "default";
178 pinctrl-0 = <&pinctrl_fec_1>; 275 pinctrl-0 = <&pinctrl_fec>;
179 phy-mode = "rmii"; 276 phy-mode = "rmii";
180 phy-reset-gpios = <&gpio7 6 0>; 277 phy-reset-gpios = <&gpio7 6 0>;
181 status = "okay"; 278 status = "okay";
diff --git a/arch/arm/boot/dts/imx53-tqma53.dtsi b/arch/arm/boot/dts/imx53-tqma53.dtsi
index abd72af545bf..4f1f0e2868bf 100644
--- a/arch/arm/boot/dts/imx53-tqma53.dtsi
+++ b/arch/arm/boot/dts/imx53-tqma53.dtsi
@@ -22,9 +22,12 @@
22 22
23 regulators { 23 regulators {
24 compatible = "simple-bus"; 24 compatible = "simple-bus";
25 #address-cells = <1>;
26 #size-cells = <0>;
25 27
26 reg_3p3v: 3p3v { 28 reg_3p3v: regulator@0 {
27 compatible = "regulator-fixed"; 29 compatible = "regulator-fixed";
30 reg = <0>;
28 regulator-name = "3P3V"; 31 regulator-name = "3P3V";
29 regulator-min-microvolt = <3300000>; 32 regulator-min-microvolt = <3300000>;
30 regulator-max-microvolt = <3300000>; 33 regulator-max-microvolt = <3300000>;
@@ -35,8 +38,8 @@
35 38
36&esdhc2 { 39&esdhc2 {
37 pinctrl-names = "default"; 40 pinctrl-names = "default";
38 pinctrl-0 = <&pinctrl_esdhc2_1>, 41 pinctrl-0 = <&pinctrl_esdhc2>,
39 <&pinctrl_tqma53_esdhc2_2>; 42 <&pinctrl_esdhc2_cdwp>;
40 vmmc-supply = <&reg_3p3v>; 43 vmmc-supply = <&reg_3p3v>;
41 wp-gpios = <&gpio1 2 0>; 44 wp-gpios = <&gpio1 2 0>;
42 cd-gpios = <&gpio1 4 0>; 45 cd-gpios = <&gpio1 4 0>;
@@ -45,13 +48,13 @@
45 48
46&uart3 { 49&uart3 {
47 pinctrl-names = "default"; 50 pinctrl-names = "default";
48 pinctrl-0 = <&pinctrl_uart3_2>; 51 pinctrl-0 = <&pinctrl_uart3>;
49 status = "disabled"; 52 status = "disabled";
50}; 53};
51 54
52&ecspi1 { 55&ecspi1 {
53 pinctrl-names = "default"; 56 pinctrl-names = "default";
54 pinctrl-0 = <&pinctrl_ecspi1_1>; 57 pinctrl-0 = <&pinctrl_ecspi1>;
55 fsl,spi-num-chipselects = <4>; 58 fsl,spi-num-chipselects = <4>;
56 cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>, 59 cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>,
57 <&gpio3 24 0>, <&gpio3 25 0>; 60 <&gpio3 24 0>, <&gpio3 25 0>;
@@ -60,7 +63,7 @@
60 63
61&esdhc3 { /* EMMC */ 64&esdhc3 { /* EMMC */
62 pinctrl-names = "default"; 65 pinctrl-names = "default";
63 pinctrl-0 = <&pinctrl_esdhc3_1>; 66 pinctrl-0 = <&pinctrl_esdhc3>;
64 vmmc-supply = <&reg_3p3v>; 67 vmmc-supply = <&reg_3p3v>;
65 non-removable; 68 non-removable;
66 bus-width = <8>; 69 bus-width = <8>;
@@ -71,27 +74,7 @@
71 pinctrl-names = "default"; 74 pinctrl-names = "default";
72 pinctrl-0 = <&pinctrl_hog>; 75 pinctrl-0 = <&pinctrl_hog>;
73 76
74 esdhc2_2 { 77 imx53-tqma53 {
75 pinctrl_tqma53_esdhc2_2: esdhc2-tqma53-grp2 {
76 fsl,pins = <
77 MX53_PAD_GPIO_4__GPIO1_4 0x80000000 /* SD2_CD */
78 MX53_PAD_GPIO_2__GPIO1_2 0x80000000 /* SD2_WP */
79 >;
80 };
81 };
82
83 i2s {
84 pinctrl_i2s_1: i2s-grp1 {
85 fsl,pins = <
86 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000 /* I2S_SCLK */
87 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000 /* I2S_DOUT */
88 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000 /* I2S_LRCLK */
89 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000 /* I2S_DIN */
90 >;
91 };
92 };
93
94 hog {
95 pinctrl_hog: hoggrp { 78 pinctrl_hog: hoggrp {
96 fsl,pins = < 79 fsl,pins = <
97 MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000 /* SSI_MCLK */ 80 MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000 /* SSI_MCLK */
@@ -107,43 +90,165 @@
107 MX53_PAD_GPIO_1__PWM2_PWMO 0x80000000 /* LCD_CONTRAST */ 90 MX53_PAD_GPIO_1__PWM2_PWMO 0x80000000 /* LCD_CONTRAST */
108 >; 91 >;
109 }; 92 };
93
94 pinctrl_audmux: audmuxgrp {
95 fsl,pins = <
96 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000
97 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000
98 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000
99 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000
100 >;
101 };
102
103 pinctrl_can1: can1grp {
104 fsl,pins = <
105 MX53_PAD_KEY_COL2__CAN1_TXCAN 0x80000000
106 MX53_PAD_KEY_ROW2__CAN1_RXCAN 0x80000000
107 >;
108 };
109
110 pinctrl_can2: can2grp {
111 fsl,pins = <
112 MX53_PAD_KEY_COL4__CAN2_TXCAN 0x80000000
113 MX53_PAD_KEY_ROW4__CAN2_RXCAN 0x80000000
114 >;
115 };
116
117 pinctrl_cspi: cspigrp {
118 fsl,pins = <
119 MX53_PAD_SD1_DATA0__CSPI_MISO 0x1d5
120 MX53_PAD_SD1_CMD__CSPI_MOSI 0x1d5
121 MX53_PAD_SD1_CLK__CSPI_SCLK 0x1d5
122 >;
123 };
124
125 pinctrl_ecspi1: ecspi1grp {
126 fsl,pins = <
127 MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000
128 MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000
129 MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000
130 >;
131 };
132
133 pinctrl_esdhc2: esdhc2grp {
134 fsl,pins = <
135 MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5
136 MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5
137 MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5
138 MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5
139 MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5
140 MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5
141 >;
142 };
143
144 pinctrl_esdhc2_cdwp: esdhc2cdwp {
145 fsl,pins = <
146 MX53_PAD_GPIO_4__GPIO1_4 0x80000000 /* SD2_CD */
147 MX53_PAD_GPIO_2__GPIO1_2 0x80000000 /* SD2_WP */
148 >;
149 };
150
151 pinctrl_esdhc3: esdhc3grp {
152 fsl,pins = <
153 MX53_PAD_PATA_DATA8__ESDHC3_DAT0 0x1d5
154 MX53_PAD_PATA_DATA9__ESDHC3_DAT1 0x1d5
155 MX53_PAD_PATA_DATA10__ESDHC3_DAT2 0x1d5
156 MX53_PAD_PATA_DATA11__ESDHC3_DAT3 0x1d5
157 MX53_PAD_PATA_DATA0__ESDHC3_DAT4 0x1d5
158 MX53_PAD_PATA_DATA1__ESDHC3_DAT5 0x1d5
159 MX53_PAD_PATA_DATA2__ESDHC3_DAT6 0x1d5
160 MX53_PAD_PATA_DATA3__ESDHC3_DAT7 0x1d5
161 MX53_PAD_PATA_RESET_B__ESDHC3_CMD 0x1d5
162 MX53_PAD_PATA_IORDY__ESDHC3_CLK 0x1d5
163 >;
164 };
165
166 pinctrl_fec: fecgrp {
167 fsl,pins = <
168 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
169 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
170 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
171 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
172 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
173 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
174 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
175 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
176 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
177 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
178 >;
179 };
180
181 pinctrl_i2c2: i2c2grp {
182 fsl,pins = <
183 MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000
184 MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000
185 >;
186 };
187
188 pinctrl_i2c3: i2c3grp {
189 fsl,pins = <
190 MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000
191 MX53_PAD_GPIO_5__I2C3_SCL 0xc0000000
192 >;
193 };
194
195 pinctrl_uart1: uart1grp {
196 fsl,pins = <
197 MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
198 MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
199 >;
200 };
201
202 pinctrl_uart2: uart2grp {
203 fsl,pins = <
204 MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4
205 MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4
206 >;
207 };
208
209 pinctrl_uart3: uart3grp {
210 fsl,pins = <
211 MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
212 MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
213 >;
214 };
110 }; 215 };
111}; 216};
112 217
113&uart1 { 218&uart1 {
114 pinctrl-names = "default"; 219 pinctrl-names = "default";
115 pinctrl-0 = <&pinctrl_uart1_2>; 220 pinctrl-0 = <&pinctrl_uart1>;
116 fsl,uart-has-rtscts; 221 fsl,uart-has-rtscts;
117 status = "disabled"; 222 status = "disabled";
118}; 223};
119 224
120&uart2 { 225&uart2 {
121 pinctrl-names = "default"; 226 pinctrl-names = "default";
122 pinctrl-0 = <&pinctrl_uart2_1>; 227 pinctrl-0 = <&pinctrl_uart2>;
123 status = "disabled"; 228 status = "disabled";
124}; 229};
125 230
126&can1 { 231&can1 {
127 pinctrl-names = "default"; 232 pinctrl-names = "default";
128 pinctrl-0 = <&pinctrl_can1_2>; 233 pinctrl-0 = <&pinctrl_can1>;
129 status = "disabled"; 234 status = "disabled";
130}; 235};
131 236
132&can2 { 237&can2 {
133 pinctrl-names = "default"; 238 pinctrl-names = "default";
134 pinctrl-0 = <&pinctrl_can2_1>; 239 pinctrl-0 = <&pinctrl_can2>;
135 status = "disabled"; 240 status = "disabled";
136}; 241};
137 242
138&i2c3 { 243&i2c3 {
139 pinctrl-names = "default"; 244 pinctrl-names = "default";
140 pinctrl-0 = <&pinctrl_i2c3_1>; 245 pinctrl-0 = <&pinctrl_i2c3>;
141 status = "disabled"; 246 status = "disabled";
142}; 247};
143 248
144&cspi { 249&cspi {
145 pinctrl-names = "default"; 250 pinctrl-names = "default";
146 pinctrl-0 = <&pinctrl_cspi_1>; 251 pinctrl-0 = <&pinctrl_cspi>;
147 fsl,spi-num-chipselects = <3>; 252 fsl,spi-num-chipselects = <3>;
148 cs-gpios = <&gpio1 18 0>, <&gpio1 19 0>, 253 cs-gpios = <&gpio1 18 0>, <&gpio1 19 0>,
149 <&gpio1 21 0>; 254 <&gpio1 21 0>;
@@ -152,7 +257,7 @@
152 257
153&i2c2 { 258&i2c2 {
154 pinctrl-names = "default"; 259 pinctrl-names = "default";
155 pinctrl-0 = <&pinctrl_i2c2_1>; 260 pinctrl-0 = <&pinctrl_i2c2>;
156 status = "okay"; 261 status = "okay";
157 262
158 pmic: mc34708@8 { 263 pmic: mc34708@8 {
@@ -177,7 +282,7 @@
177 282
178&fec { 283&fec {
179 pinctrl-names = "default"; 284 pinctrl-names = "default";
180 pinctrl-0 = <&pinctrl_fec_1>; 285 pinctrl-0 = <&pinctrl_fec>;
181 phy-mode = "rmii"; 286 phy-mode = "rmii";
182 status = "disabled"; 287 status = "disabled";
183}; 288};
diff --git a/arch/arm/boot/dts/imx53-tx53-x03x.dts b/arch/arm/boot/dts/imx53-tx53-x03x.dts
new file mode 100644
index 000000000000..0217dde3b36b
--- /dev/null
+++ b/arch/arm/boot/dts/imx53-tx53-x03x.dts
@@ -0,0 +1,315 @@
1/*
2 * Copyright 2013 Lothar Waßmann <LW@KARO-electronics.de>
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx53-tx53.dtsi"
14#include <dt-bindings/input/input.h>
15#include <dt-bindings/pwm/pwm.h>
16
17/ {
18 model = "Ka-Ro electronics TX53 module (LCD)";
19 compatible = "karo,tx53", "fsl,imx53";
20
21 aliases {
22 display = &display;
23 };
24
25 soc {
26 display: display@di0 {
27 compatible = "fsl,imx-parallel-display";
28 crtcs = <&ipu 0>;
29 interface-pix-fmt = "rgb24";
30 pinctrl-names = "default";
31 pinctrl-0 = <&pinctrl_rgb24_vga1>;
32 status = "okay";
33
34 display-timings {
35 VGA {
36 clock-frequency = <25200000>;
37 hactive = <640>;
38 vactive = <480>;
39 hback-porch = <48>;
40 hsync-len = <96>;
41 hfront-porch = <16>;
42 vback-porch = <31>;
43 vsync-len = <2>;
44 vfront-porch = <12>;
45 hsync-active = <0>;
46 vsync-active = <0>;
47 de-active = <1>;
48 pixelclk-active = <0>;
49 };
50
51 ETV570 {
52 clock-frequency = <25200000>;
53 hactive = <640>;
54 vactive = <480>;
55 hback-porch = <114>;
56 hsync-len = <30>;
57 hfront-porch = <16>;
58 vback-porch = <32>;
59 vsync-len = <3>;
60 vfront-porch = <10>;
61 hsync-active = <0>;
62 vsync-active = <0>;
63 de-active = <1>;
64 pixelclk-active = <0>;
65 };
66
67 ET0350 {
68 clock-frequency = <6413760>;
69 hactive = <320>;
70 vactive = <240>;
71 hback-porch = <34>;
72 hsync-len = <34>;
73 hfront-porch = <20>;
74 vback-porch = <15>;
75 vsync-len = <3>;
76 vfront-porch = <4>;
77 hsync-active = <0>;
78 vsync-active = <0>;
79 de-active = <1>;
80 pixelclk-active = <0>;
81 };
82
83 ET0430 {
84 clock-frequency = <9009000>;
85 hactive = <480>;
86 vactive = <272>;
87 hback-porch = <2>;
88 hsync-len = <41>;
89 hfront-porch = <2>;
90 vback-porch = <2>;
91 vsync-len = <10>;
92 vfront-porch = <2>;
93 hsync-active = <0>;
94 vsync-active = <0>;
95 de-active = <1>;
96 pixelclk-active = <1>;
97 };
98
99 ET0500 {
100 clock-frequency = <33264000>;
101 hactive = <800>;
102 vactive = <480>;
103 hback-porch = <88>;
104 hsync-len = <128>;
105 hfront-porch = <40>;
106 vback-porch = <33>;
107 vsync-len = <2>;
108 vfront-porch = <10>;
109 hsync-active = <0>;
110 vsync-active = <0>;
111 de-active = <1>;
112 pixelclk-active = <0>;
113 };
114
115 ET0700 { /* same as ET0500 */
116 clock-frequency = <33264000>;
117 hactive = <800>;
118 vactive = <480>;
119 hback-porch = <88>;
120 hsync-len = <128>;
121 hfront-porch = <40>;
122 vback-porch = <33>;
123 vsync-len = <2>;
124 vfront-porch = <10>;
125 hsync-active = <0>;
126 vsync-active = <0>;
127 de-active = <1>;
128 pixelclk-active = <0>;
129 };
130
131 ETQ570 {
132 clock-frequency = <6596040>;
133 hactive = <320>;
134 vactive = <240>;
135 hback-porch = <38>;
136 hsync-len = <30>;
137 hfront-porch = <30>;
138 vback-porch = <16>;
139 vsync-len = <3>;
140 vfront-porch = <4>;
141 hsync-active = <0>;
142 vsync-active = <0>;
143 de-active = <1>;
144 pixelclk-active = <0>;
145 };
146 };
147 };
148 };
149
150 backlight: backlight {
151 compatible = "pwm-backlight";
152 pwms = <&pwm2 0 500000 PWM_POLARITY_INVERTED>;
153 power-supply = <&reg_3v3>;
154 brightness-levels = <
155 0 1 2 3 4 5 6 7 8 9
156 10 11 12 13 14 15 16 17 18 19
157 20 21 22 23 24 25 26 27 28 29
158 30 31 32 33 34 35 36 37 38 39
159 40 41 42 43 44 45 46 47 48 49
160 50 51 52 53 54 55 56 57 58 59
161 60 61 62 63 64 65 66 67 68 69
162 70 71 72 73 74 75 76 77 78 79
163 80 81 82 83 84 85 86 87 88 89
164 90 91 92 93 94 95 96 97 98 99
165 100
166 >;
167 default-brightness-level = <50>;
168 };
169
170 regulators {
171 reg_lcd_pwr: regulator@5 {
172 compatible = "regulator-fixed";
173 reg = <5>;
174 regulator-name = "LCD POWER";
175 regulator-min-microvolt = <3300000>;
176 regulator-max-microvolt = <3300000>;
177 gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>;
178 enable-active-high;
179 regulator-boot-on;
180 };
181
182 reg_lcd_reset: regulator@6 {
183 compatible = "regulator-fixed";
184 reg = <6>;
185 regulator-name = "LCD RESET";
186 regulator-min-microvolt = <3300000>;
187 regulator-max-microvolt = <3300000>;
188 gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>;
189 enable-active-high;
190 regulator-boot-on;
191 };
192 };
193};
194
195&i2c3 {
196 pinctrl-names = "default";
197 pinctrl-0 = <&pinctrl_i2c3>;
198 status = "okay";
199
200 sgtl5000: codec@0a {
201 compatible = "fsl,sgtl5000";
202 reg = <0x0a>;
203 VDDA-supply = <&reg_2v5>;
204 VDDIO-supply = <&reg_3v3>;
205 clocks = <&mclk>;
206 };
207
208 polytouch: edt-ft5x06@38 {
209 compatible = "edt,edt-ft5x06";
210 reg = <0x38>;
211 pinctrl-names = "default";
212 pinctrl-0 = <&pinctrl_edt_ft5x06_1>;
213 interrupt-parent = <&gpio6>;
214 interrupts = <15 0>;
215 reset-gpios = <&gpio2 22 GPIO_ACTIVE_LOW>;
216 wake-gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
217 };
218
219 touchscreen: tsc2007@48 {
220 compatible = "ti,tsc2007";
221 reg = <0x48>;
222 pinctrl-names = "default";
223 pinctrl-0 = <&pinctrl_tsc2007>;
224 interrupt-parent = <&gpio3>;
225 interrupts = <26 0>;
226 gpios = <&gpio3 26 GPIO_ACTIVE_LOW>;
227 ti,x-plate-ohms = <660>;
228 linux,wakeup;
229 };
230};
231
232&iomuxc {
233 imx53-tx53-x03x {
234 pinctrl_edt_ft5x06_1: edt-ft5x06grp-1 {
235 fsl,pins = <
236 MX53_PAD_NANDF_CS2__GPIO6_15 0x1f0 /* Interrupt */
237 MX53_PAD_EIM_A16__GPIO2_22 0x04 /* Reset */
238 MX53_PAD_EIM_A17__GPIO2_21 0x04 /* Wake */
239 >;
240 };
241
242 pinctrl_kpp: kppgrp {
243 fsl,pins = <
244 MX53_PAD_GPIO_9__KPP_COL_6 0x1f4
245 MX53_PAD_GPIO_4__KPP_COL_7 0x1f4
246 MX53_PAD_KEY_COL2__KPP_COL_2 0x1f4
247 MX53_PAD_KEY_COL3__KPP_COL_3 0x1f4
248 MX53_PAD_GPIO_2__KPP_ROW_6 0x1f4
249 MX53_PAD_GPIO_5__KPP_ROW_7 0x1f4
250 MX53_PAD_KEY_ROW2__KPP_ROW_2 0x1f4
251 MX53_PAD_KEY_ROW3__KPP_ROW_3 0x1f4
252 >;
253 };
254
255 pinctrl_rgb24_vga1: rgb24-vgagrp1 {
256 fsl,pins = <
257 MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK 0x5
258 MX53_PAD_DI0_PIN15__IPU_DI0_PIN15 0x5
259 MX53_PAD_DI0_PIN2__IPU_DI0_PIN2 0x5
260 MX53_PAD_DI0_PIN3__IPU_DI0_PIN3 0x5
261 MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0 0x5
262 MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1 0x5
263 MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2 0x5
264 MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3 0x5
265 MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4 0x5
266 MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5 0x5
267 MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6 0x5
268 MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7 0x5
269 MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8 0x5
270 MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9 0x5
271 MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10 0x5
272 MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11 0x5
273 MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12 0x5
274 MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13 0x5
275 MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14 0x5
276 MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15 0x5
277 MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16 0x5
278 MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17 0x5
279 MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18 0x5
280 MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19 0x5
281 MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20 0x5
282 MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21 0x5
283 MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22 0x5
284 MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23 0x5
285 >;
286 };
287
288 pinctrl_tsc2007: tsc2007grp {
289 fsl,pins = <
290 MX53_PAD_EIM_D26__GPIO3_26 0x1f0 /* Interrupt */
291 >;
292 };
293 };
294};
295
296&kpp {
297 pinctrl-names = "default";
298 pinctrl-0 = <&pinctrl_kpp>;
299 /* sample keymap */
300 /* row/col 0,1 are mapped to KPP row/col 6,7 */
301 linux,keymap = <
302 MATRIX_KEY(6, 6, KEY_POWER)
303 MATRIX_KEY(6, 7, KEY_KP0)
304 MATRIX_KEY(6, 2, KEY_KP1)
305 MATRIX_KEY(6, 3, KEY_KP2)
306 MATRIX_KEY(7, 6, KEY_KP3)
307 MATRIX_KEY(7, 7, KEY_KP4)
308 MATRIX_KEY(7, 2, KEY_KP5)
309 MATRIX_KEY(7, 3, KEY_KP6)
310 MATRIX_KEY(2, 6, KEY_KP7)
311 MATRIX_KEY(2, 7, KEY_KP8)
312 MATRIX_KEY(2, 2, KEY_KP9)
313 >;
314 status = "okay";
315};
diff --git a/arch/arm/boot/dts/imx53-tx53-x13x.dts b/arch/arm/boot/dts/imx53-tx53-x13x.dts
new file mode 100644
index 000000000000..64804719f0f4
--- /dev/null
+++ b/arch/arm/boot/dts/imx53-tx53-x13x.dts
@@ -0,0 +1,243 @@
1/*
2 * Copyright 2013 Lothar Waßmann <LW@KARO-electronics.de>
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx53-tx53.dtsi"
14#include <dt-bindings/input/input.h>
15
16/ {
17 model = "Ka-Ro electronics TX53 module (LVDS)";
18 compatible = "karo,tx53", "fsl,imx53";
19
20 aliases {
21 display = &lvds0;
22 lvds0 = &lvds0;
23 lvds1 = &lvds1;
24 };
25
26 backlight0: backlight0 {
27 compatible = "pwm-backlight";
28 pwms = <&pwm2 0 500000 0>;
29 power-supply = <&reg_3v3>;
30 brightness-levels = <
31 0 1 2 3 4 5 6 7 8 9
32 10 11 12 13 14 15 16 17 18 19
33 20 21 22 23 24 25 26 27 28 29
34 30 31 32 33 34 35 36 37 38 39
35 40 41 42 43 44 45 46 47 48 49
36 50 51 52 53 54 55 56 57 58 59
37 60 61 62 63 64 65 66 67 68 69
38 70 71 72 73 74 75 76 77 78 79
39 80 81 82 83 84 85 86 87 88 89
40 90 91 92 93 94 95 96 97 98 99
41 100
42 >;
43 default-brightness-level = <50>;
44 };
45
46 backlight1: backlight1 {
47 compatible = "pwm-backlight";
48 pwms = <&pwm1 0 500000 0>;
49 power-supply = <&reg_3v3>;
50 brightness-levels = <
51 0 1 2 3 4 5 6 7 8 9
52 10 11 12 13 14 15 16 17 18 19
53 20 21 22 23 24 25 26 27 28 29
54 30 31 32 33 34 35 36 37 38 39
55 40 41 42 43 44 45 46 47 48 49
56 50 51 52 53 54 55 56 57 58 59
57 60 61 62 63 64 65 66 67 68 69
58 70 71 72 73 74 75 76 77 78 79
59 80 81 82 83 84 85 86 87 88 89
60 90 91 92 93 94 95 96 97 98 99
61 100
62 >;
63 default-brightness-level = <50>;
64 };
65
66 regulators {
67 reg_lcd_pwr0: regulator@5 {
68 compatible = "regulator-fixed";
69 reg = <5>;
70 regulator-name = "LVDS0 POWER";
71 regulator-min-microvolt = <3300000>;
72 regulator-max-microvolt = <3300000>;
73 gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>;
74 enable-active-high;
75 regulator-boot-on;
76 };
77
78 reg_lcd_pwr1: regulator@6 {
79 compatible = "regulator-fixed";
80 reg = <6>;
81 regulator-name = "LVDS1 POWER";
82 regulator-min-microvolt = <3300000>;
83 regulator-max-microvolt = <3300000>;
84 gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>;
85 enable-active-high;
86 regulator-boot-on;
87 };
88 };
89};
90
91&i2c2 {
92 pinctrl-names = "default";
93 pinctrl-0 = <&pinctrl_i2c2>;
94 status = "okay";
95
96 touchscreen2: eeti@04 {
97 compatible = "eeti,egalax_ts";
98 reg = <0x04>;
99 pinctrl-names = "default";
100 pinctrl-0 = <&pinctrl_eeti2>;
101 interrupt-parent = <&gpio3>;
102 interrupts = <23 0>;
103 wakeup-gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
104 linux,wakeup;
105 };
106};
107
108&i2c3 {
109 pinctrl-names = "default";
110 pinctrl-0 = <&pinctrl_i2c3>;
111 status = "okay";
112
113 sgtl5000: codec@0a {
114 compatible = "fsl,sgtl5000";
115 reg = <0x0a>;
116 VDDA-supply = <&reg_2v5>;
117 VDDIO-supply = <&reg_3v3>;
118 clocks = <&mclk>;
119 };
120
121 touchscreen1: eeti@04 {
122 compatible = "eeti,egalax_ts";
123 reg = <0x04>;
124 pinctrl-names = "default";
125 pinctrl-0 = <&pinctrl_eeti1>;
126 interrupt-parent = <&gpio3>;
127 interrupts = <22 0>;
128 wakeup-gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>;
129 linux,wakeup;
130 };
131};
132
133&iomuxc {
134 imx53-tx53-x13x {
135 pinctrl_i2c2: i2c2-grp1 {
136 fsl,pins = <
137 MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000
138 MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000
139 >;
140 };
141
142 pinctrl_lvds0: lvds0grp {
143 fsl,pins = <
144 MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 0x80000000
145 MX53_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK 0x80000000
146 MX53_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2 0x80000000
147 MX53_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1 0x80000000
148 MX53_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0 0x80000000
149 >;
150 };
151
152 pinctrl_lvds1: lvds1grp {
153 fsl,pins = <
154 MX53_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3 0x80000000
155 MX53_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2 0x80000000
156 MX53_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK 0x80000000
157 MX53_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1 0x80000000
158 MX53_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0 0x80000000
159 >;
160 };
161
162 pinctrl_pwm1: pwm1grp {
163 fsl,pins = <MX53_PAD_GPIO_9__PWM1_PWMO 0x04>;
164 };
165
166 pinctrl_eeti1: eeti1grp {
167 fsl,pins = <
168 MX53_PAD_EIM_D22__GPIO3_22 0x1f0 /* Interrupt */
169 >;
170 };
171
172 pinctrl_eeti2: eeti2grp {
173 fsl,pins = <
174 MX53_PAD_EIM_D23__GPIO3_23 0x1f0 /* Interrupt */
175 >;
176 };
177 };
178};
179
180&ldb {
181 pinctrl-names = "default";
182 pinctrl-0 = <&pinctrl_lvds0 &pinctrl_lvds1>;
183 status = "okay";
184
185 lvds0: lvds-channel@0 {
186 fsl,data-mapping = "jeida";
187 fsl,data-width = <24>;
188 status = "okay";
189
190 display-timings {
191 native-mode = <&lvds_timing0>;
192 lvds_timing0: hsd100pxn1 {
193 clock-frequency = <65000000>;
194 hactive = <1024>;
195 vactive = <768>;
196 hback-porch = <220>;
197 hsync-len = <60>;
198 hfront-porch = <40>;
199 vback-porch = <21>;
200 vsync-len = <10>;
201 vfront-porch = <7>;
202 hsync-active = <0>;
203 vsync-active = <0>;
204 de-active = <1>;
205 pixelclk-active = <0>;
206 };
207 };
208 };
209
210 lvds1: lvds-channel@1 {
211 fsl,data-mapping = "jeida";
212 fsl,data-width = <24>;
213 status = "okay";
214
215 display-timings {
216 native-mode = <&lvds_timing1>;
217 lvds_timing1: hsd100pxn1 {
218 clock-frequency = <65000000>;
219 hactive = <1024>;
220 vactive = <768>;
221 hback-porch = <220>;
222 hsync-len = <60>;
223 hfront-porch = <40>;
224 vback-porch = <21>;
225 vsync-len = <10>;
226 vfront-porch = <7>;
227 hsync-active = <0>;
228 vsync-active = <0>;
229 de-active = <1>;
230 pixelclk-active = <0>;
231 };
232 };
233 };
234};
235
236&pwm1 {
237 pinctrl-names = "default";
238 pinctrl-0 = <&pinctrl_pwm1>;
239};
240
241&sata {
242 status = "okay";
243};
diff --git a/arch/arm/boot/dts/imx53-tx53.dtsi b/arch/arm/boot/dts/imx53-tx53.dtsi
index f494766700a3..e348796ba689 100644
--- a/arch/arm/boot/dts/imx53-tx53.dtsi
+++ b/arch/arm/boot/dts/imx53-tx53.dtsi
@@ -1,122 +1,550 @@
1/* 1/*
2 * Copyright 2013 Steffen Trumtrar <s.trumtrar@pengutronix.de> 2 * Copyright 2012 <LW@KARO-electronics.de>
3 * based on imx53-qsb.dts
4 * Copyright 2011 Freescale Semiconductor, Inc.
5 * Copyright 2011 Linaro Ltd.
3 * 6 *
4 * The code contained herein is licensed under the GNU General Public 7 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License 8 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations: 9 * Version 2 at the following locations:
7 * 10 *
8 * http://www.opensource.org/licenses/gpl-license.html 11 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html 12 * http://www.gnu.org/copyleft/gpl.html
10 */ 13 */
11 14
12/include/ "imx53.dtsi" 15#include "imx53.dtsi"
16#include <dt-bindings/gpio/gpio.h>
13 17
14/ { 18/ {
15 model = "Ka-Ro TX53"; 19 model = "Ka-Ro electronics TX53 module";
16 compatible = "karo,tx53", "fsl,imx53"; 20 compatible = "karo,tx53", "fsl,imx53";
17 21
18 memory { 22 aliases {
19 reg = <0x70000000 0x40000000>; /* Up to 1GiB */ 23 can0 = &can2; /* Make the can interface indices consistent with TX28/TX48 modules */
24 can1 = &can1;
25 ipu = &ipu;
26 reg_can_xcvr = &reg_can_xcvr;
27 usbh1 = &usbh1;
28 usbotg = &usbotg;
29 };
30
31 clocks {
32 ckih1 {
33 clock-frequency = <0>;
34 };
35
36 mclk: clock@0 {
37 compatible = "fixed-clock";
38 reg = <0>;
39 #clock-cells = <0>;
40 clock-frequency = <27000000>;
41 };
42 };
43
44 gpio-keys {
45 compatible = "gpio-keys";
46 pinctrl-names = "default";
47 pinctrl-0 = <&pinctrl_gpio_key>;
48
49 power {
50 label = "Power Button";
51 gpios = <&gpio5 2 GPIO_ACTIVE_HIGH>;
52 linux,code = <116>; /* KEY_POWER */
53 gpio-key,wakeup;
54 };
55 };
56
57 leds {
58 compatible = "gpio-leds";
59 pinctrl-names = "default";
60 pinctrl-0 = <&pinctrl_stk5led>;
61
62 user {
63 label = "Heartbeat";
64 gpios = <&gpio2 20 GPIO_ACTIVE_HIGH>;
65 linux,default-trigger = "heartbeat";
66 };
20 }; 67 };
21 68
22 regulators { 69 regulators {
23 compatible = "simple-bus"; 70 compatible = "simple-bus";
71 #address-cells = <1>;
72 #size-cells = <0>;
24 73
25 reg_3p3v: 3p3v { 74 reg_2v5: regulator@0 {
26 compatible = "regulator-fixed"; 75 compatible = "regulator-fixed";
27 regulator-name = "3P3V"; 76 reg = <0>;
77 regulator-name = "2V5";
78 regulator-min-microvolt = <2500000>;
79 regulator-max-microvolt = <2500000>;
80 };
81
82 reg_3v3: regulator@1 {
83 compatible = "regulator-fixed";
84 reg = <1>;
85 regulator-name = "3V3";
28 regulator-min-microvolt = <3300000>; 86 regulator-min-microvolt = <3300000>;
29 regulator-max-microvolt = <3300000>; 87 regulator-max-microvolt = <3300000>;
30 regulator-always-on;
31 }; 88 };
89
90 reg_can_xcvr: regulator@2 {
91 compatible = "regulator-fixed";
92 reg = <2>;
93 regulator-name = "CAN XCVR";
94 regulator-min-microvolt = <3300000>;
95 regulator-max-microvolt = <3300000>;
96 pinctrl-names = "default";
97 pinctrl-0 = <&pinctrl_can_xcvr>;
98 gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
99 };
100
101 reg_usbh1_vbus: regulator@3 {
102 compatible = "regulator-fixed";
103 reg = <3>;
104 regulator-name = "usbh1_vbus";
105 regulator-min-microvolt = <5000000>;
106 regulator-max-microvolt = <5000000>;
107 pinctrl-names = "default";
108 pinctrl-0 = <&pinctrl_usbh1_vbus>;
109 gpio = <&gpio3 31 GPIO_ACTIVE_HIGH>;
110 enable-active-high;
111 };
112
113 reg_usbotg_vbus: regulator@4 {
114 compatible = "regulator-fixed";
115 reg = <4>;
116 regulator-name = "usbotg_vbus";
117 regulator-min-microvolt = <5000000>;
118 regulator-max-microvolt = <5000000>;
119 pinctrl-names = "default";
120 pinctrl-0 = <&pinctrl_usbotg_vbus>;
121 gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
122 enable-active-high;
123 };
124 };
125
126 sound {
127 compatible = "karo,tx53-audio-sgtl5000", "fsl,imx-audio-sgtl5000";
128 model = "tx53-audio-sgtl5000";
129 ssi-controller = <&ssi1>;
130 audio-codec = <&sgtl5000>;
131 audio-routing =
132 "MIC_IN", "Mic Jack",
133 "Mic Jack", "Mic Bias",
134 "Headphone Jack", "HP_OUT";
135 /* '1' based port numbers according to datasheet names */
136 mux-int-port = <1>;
137 mux-ext-port = <5>;
32 }; 138 };
33}; 139};
34 140
141&audmux {
142 pinctrl-names = "default";
143 pinctrl-0 = <&pinctrl_ssi1>;
144 status = "okay";
145};
146
35&can1 { 147&can1 {
36 pinctrl-names = "default"; 148 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_can1_2>; 149 pinctrl-0 = <&pinctrl_can1>;
38 status = "disabled"; 150 xceiver-supply = <&reg_can_xcvr>;
151 status = "okay";
39}; 152};
40 153
41&can2 { 154&can2 {
42 pinctrl-names = "default"; 155 pinctrl-names = "default";
43 pinctrl-0 = <&pinctrl_can2_1>; 156 pinctrl-0 = <&pinctrl_can2>;
44 status = "disabled"; 157 xceiver-supply = <&reg_can_xcvr>;
158 status = "okay";
45}; 159};
46 160
47&ecspi1 { 161&ecspi1 {
48 pinctrl-names = "default"; 162 pinctrl-names = "default";
49 pinctrl-0 = <&pinctrl_ecspi1_2>; 163 pinctrl-0 = <&pinctrl_ecspi1>;
50 status = "disabled"; 164 fsl,spi-num-chipselects = <2>;
165 status = "okay";
166
167 cs-gpios = <
168 &gpio2 30 GPIO_ACTIVE_HIGH
169 &gpio3 19 GPIO_ACTIVE_HIGH
170 >;
171
172 spidev0: spi@0 {
173 compatible = "spidev";
174 reg = <0>;
175 spi-max-frequency = <54000000>;
176 };
177
178 spidev1: spi@1 {
179 compatible = "spidev";
180 reg = <1>;
181 spi-max-frequency = <54000000>;
182 };
51}; 183};
52 184
53&esdhc1 { 185&esdhc1 {
186 cd-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
187 fsl,wp-controller;
54 pinctrl-names = "default"; 188 pinctrl-names = "default";
55 pinctrl-0 = <&pinctrl_esdhc1_2>; 189 pinctrl-0 = <&pinctrl_esdhc1>;
56 status = "disabled"; 190 status = "okay";
57}; 191};
58 192
59&esdhc2 { 193&esdhc2 {
194 cd-gpios = <&gpio3 25 GPIO_ACTIVE_HIGH>;
195 fsl,wp-controller;
60 pinctrl-names = "default"; 196 pinctrl-names = "default";
61 pinctrl-0 = <&pinctrl_esdhc2_1>; 197 pinctrl-0 = <&pinctrl_esdhc2>;
62 status = "disabled"; 198 status = "okay";
63}; 199};
64 200
65&fec { 201&fec {
66 pinctrl-names = "default"; 202 pinctrl-names = "default";
67 pinctrl-0 = <&pinctrl_fec_1>; 203 pinctrl-0 = <&pinctrl_fec>;
68 phy-mode = "rmii"; 204 phy-mode = "rmii";
69 status = "disabled"; 205 phy-reset-gpios = <&gpio7 6 GPIO_ACTIVE_HIGH>;
206 phy-handle = <&phy0>;
207 mac-address = [000000000000]; /* placeholder; will be overwritten by bootloader */
208 status = "okay";
209
210 phy0: ethernet-phy@0 {
211 interrupt-parent = <&gpio2>;
212 interrupts = <4>;
213 device_type = "ethernet-phy";
214 };
70}; 215};
71 216
72&i2c3 { 217&i2c1 {
73 pinctrl-names = "default"; 218 pinctrl-names = "default";
74 pinctrl-0 = <&pinctrl_i2c3_2>; 219 pinctrl-0 = <&pinctrl_i2c1>;
75 status = "disabled"; 220 clock-frequency = <400000>;
221 status = "okay";
222
223 rtc1: ds1339@68 {
224 compatible = "dallas,ds1339";
225 reg = <0x68>;
226 pinctrl-names = "default";
227 pinctrl-0 = <&pinctrl_ds1339>;
228 interrupt-parent = <&gpio4>;
229 interrupts = <20 0>;
230 };
76}; 231};
77 232
78&owire { 233&iomuxc {
79 pinctrl-names = "default"; 234 pinctrl-names = "default";
80 pinctrl-0 = <&pinctrl_owire_1>; 235 pinctrl-0 = <&pinctrl_hog>;
81 status = "disabled"; 236
237 imx53-tx53 {
238 pinctrl_hog: hoggrp {
239 /* pins not in use by any device on the Starterkit board series */
240 fsl,pins = <
241 /* CMOS Sensor Interface */
242 MX53_PAD_CSI0_DAT12__GPIO5_30 0x1f4
243 MX53_PAD_CSI0_DAT13__GPIO5_31 0x1f4
244 MX53_PAD_CSI0_DAT14__GPIO6_0 0x1f4
245 MX53_PAD_CSI0_DAT15__GPIO6_1 0x1f4
246 MX53_PAD_CSI0_DAT16__GPIO6_2 0x1f4
247 MX53_PAD_CSI0_DAT17__GPIO6_3 0x1f4
248 MX53_PAD_CSI0_DAT18__GPIO6_4 0x1f4
249 MX53_PAD_CSI0_DAT19__GPIO6_5 0x1f4
250 MX53_PAD_CSI0_MCLK__GPIO5_19 0x1f4
251 MX53_PAD_CSI0_VSYNC__GPIO5_21 0x1f4
252 MX53_PAD_CSI0_PIXCLK__GPIO5_18 0x1f4
253 MX53_PAD_GPIO_0__GPIO1_0 0x1f4
254 /* Module Specific Signal */
255 /* MX53_PAD_NANDF_CS2__GPIO6_15 0x1f4 maybe used by EDT-FT5x06 */
256 /* MX53_PAD_EIM_A16__GPIO2_22 0x1f4 maybe used by EDT-FT5x06 */
257 MX53_PAD_EIM_D29__GPIO3_29 0x1f4
258 MX53_PAD_EIM_EB3__GPIO2_31 0x1f4
259 /* MX53_PAD_EIM_A17__GPIO2_21 0x1f4 maybe used by EDT-FT5x06 */
260 /* MX53_PAD_EIM_A18__GPIO2_20 0x1f4 used by LED */
261 MX53_PAD_EIM_A19__GPIO2_19 0x1f4
262 MX53_PAD_EIM_A20__GPIO2_18 0x1f4
263 MX53_PAD_EIM_A21__GPIO2_17 0x1f4
264 MX53_PAD_EIM_A22__GPIO2_16 0x1f4
265 MX53_PAD_EIM_A23__GPIO6_6 0x1f4
266 MX53_PAD_EIM_A24__GPIO5_4 0x1f4
267 MX53_PAD_CSI0_DAT8__GPIO5_26 0x1f4
268 MX53_PAD_CSI0_DAT9__GPIO5_27 0x1f4
269 MX53_PAD_CSI0_DAT10__GPIO5_28 0x1f4
270 MX53_PAD_CSI0_DAT11__GPIO5_29 0x1f4
271 /* MX53_PAD_EIM_D22__GPIO3_22 0x1f4 maybe used by EETI touchpanel driver */
272 /* MX53_PAD_EIM_D23__GPIO3_23 0x1f4 maybe used by EETI touchpanel driver */
273 MX53_PAD_GPIO_13__GPIO4_3 0x1f4
274 MX53_PAD_EIM_CS0__GPIO2_23 0x1f4
275 MX53_PAD_EIM_CS1__GPIO2_24 0x1f4
276 MX53_PAD_CSI0_DATA_EN__GPIO5_20 0x1f4
277 MX53_PAD_EIM_WAIT__GPIO5_0 0x1f4
278 MX53_PAD_EIM_EB0__GPIO2_28 0x1f4
279 MX53_PAD_EIM_EB1__GPIO2_29 0x1f4
280 MX53_PAD_EIM_OE__GPIO2_25 0x1f4
281 MX53_PAD_EIM_LBA__GPIO2_27 0x1f4
282 MX53_PAD_EIM_RW__GPIO2_26 0x1f4
283 MX53_PAD_EIM_DA8__GPIO3_8 0x1f4
284 MX53_PAD_EIM_DA9__GPIO3_9 0x1f4
285 MX53_PAD_EIM_DA10__GPIO3_10 0x1f4
286 MX53_PAD_EIM_DA11__GPIO3_11 0x1f4
287 MX53_PAD_EIM_DA12__GPIO3_12 0x1f4
288 MX53_PAD_EIM_DA13__GPIO3_13 0x1f4
289 MX53_PAD_EIM_DA14__GPIO3_14 0x1f4
290 MX53_PAD_EIM_DA15__GPIO3_15 0x1f4
291 >;
292 };
293
294 pinctrl_can1: can1grp {
295 fsl,pins = <
296 MX53_PAD_GPIO_7__CAN1_TXCAN 0x80000000
297 MX53_PAD_GPIO_8__CAN1_RXCAN 0x80000000
298 >;
299 };
300
301 pinctrl_can2: can2grp {
302 fsl,pins = <
303 MX53_PAD_KEY_COL4__CAN2_TXCAN 0x80000000
304 MX53_PAD_KEY_ROW4__CAN2_RXCAN 0x80000000
305 >;
306 };
307
308 pinctrl_can_xcvr: can-xcvrgrp {
309 fsl,pins = <MX53_PAD_DISP0_DAT0__GPIO4_21 0xe0>; /* Flexcan XCVR enable */
310 };
311
312 pinctrl_ds1339: ds1339grp {
313 fsl,pins = <MX53_PAD_DI0_PIN4__GPIO4_20 0xe0>;
314 };
315
316 pinctrl_ecspi1: ecspi1grp {
317 fsl,pins = <
318 MX53_PAD_GPIO_19__ECSPI1_RDY 0x80000000
319 MX53_PAD_EIM_EB2__ECSPI1_SS0 0x80000000
320 MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000
321 MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000
322 MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000
323 MX53_PAD_EIM_D19__ECSPI1_SS1 0x80000000
324 >;
325 };
326
327 pinctrl_esdhc1: esdhc1grp {
328 fsl,pins = <
329 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
330 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
331 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
332 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
333 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
334 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
335 MX53_PAD_EIM_D24__GPIO3_24 0x1f0
336 >;
337 };
338
339 pinctrl_esdhc2: esdhc2grp {
340 fsl,pins = <
341 MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5
342 MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5
343 MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5
344 MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5
345 MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5
346 MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5
347 MX53_PAD_EIM_D25__GPIO3_25 0x1f0
348 >;
349 };
350
351 pinctrl_fec: fecgrp {
352 fsl,pins = <
353 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
354 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
355 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
356 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
357 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
358 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
359 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
360 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
361 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
362 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
363 >;
364 };
365
366 pinctrl_gpio_key: gpio-keygrp {
367 fsl,pins = <MX53_PAD_EIM_A25__GPIO5_2 0x1f4>;
368 };
369
370 pinctrl_i2c1: i2c1grp {
371 fsl,pins = <
372 MX53_PAD_EIM_D21__I2C1_SCL 0xc0000000
373 MX53_PAD_EIM_D28__I2C1_SDA 0xc0000000
374 >;
375 };
376
377 pinctrl_i2c3: i2c3grp {
378 fsl,pins = <
379 MX53_PAD_GPIO_3__I2C3_SCL 0xc0000000
380 MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000
381 >;
382 };
383
384 pinctrl_nand: nandgrp {
385 fsl,pins = <
386 MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B 0x4
387 MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B 0x4
388 MX53_PAD_NANDF_CLE__EMI_NANDF_CLE 0x4
389 MX53_PAD_NANDF_ALE__EMI_NANDF_ALE 0x4
390 MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B 0xe0
391 MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0 0xe0
392 MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0 0x4
393 MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0 0xa4
394 MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1 0xa4
395 MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2 0xa4
396 MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3 0xa4
397 MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4 0xa4
398 MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5 0xa4
399 MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6 0xa4
400 MX53_PAD_EIM_DA7__EMI_NAND_WEIM_DA_7 0xa4
401 >;
402 };
403
404 pinctrl_pwm2: pwm2grp {
405 fsl,pins = <
406 MX53_PAD_GPIO_1__PWM2_PWMO 0x80000000
407 >;
408 };
409
410 pinctrl_ssi1: ssi1grp {
411 fsl,pins = <
412 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000
413 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000
414 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000
415 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000
416 >;
417 };
418
419 pinctrl_ssi2: ssi2grp {
420 fsl,pins = <
421 MX53_PAD_CSI0_DAT4__AUDMUX_AUD3_TXC 0x80000000
422 MX53_PAD_CSI0_DAT5__AUDMUX_AUD3_TXD 0x80000000
423 MX53_PAD_CSI0_DAT6__AUDMUX_AUD3_TXFS 0x80000000
424 MX53_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD 0x80000000
425 MX53_PAD_EIM_D27__GPIO3_27 0x1f0
426 >;
427 };
428
429 pinctrl_stk5led: stk5ledgrp {
430 fsl,pins = <MX53_PAD_EIM_A18__GPIO2_20 0xc0>;
431 };
432
433 pinctrl_uart1: uart1grp {
434 fsl,pins = <
435 MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
436 MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
437 MX53_PAD_PATA_RESET_B__UART1_CTS 0x1c5
438 MX53_PAD_PATA_IORDY__UART1_RTS 0x1c5
439 >;
440 };
441
442 pinctrl_uart2: uart2grp {
443 fsl,pins = <
444 MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1c5
445 MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1c5
446 MX53_PAD_PATA_DIOR__UART2_RTS 0x1c5
447 MX53_PAD_PATA_INTRQ__UART2_CTS 0x1c5
448 >;
449 };
450
451 pinctrl_uart3: uart3grp {
452 fsl,pins = <
453 MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
454 MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
455 MX53_PAD_PATA_DA_1__UART3_CTS 0x1e4
456 MX53_PAD_PATA_DA_2__UART3_RTS 0x1e4
457 >;
458 };
459
460 pinctrl_usbh1: usbh1grp {
461 fsl,pins = <
462 MX53_PAD_EIM_D30__GPIO3_30 0x100 /* OC */
463 >;
464 };
465
466 pinctrl_usbh1_vbus: usbh1-vbusgrp {
467 fsl,pins = <
468 MX53_PAD_EIM_D31__GPIO3_31 0xe0 /* VBUS ENABLE */
469 >;
470 };
471
472 pinctrl_usbotg_vbus: usbotg-vbusgrp {
473 fsl,pins = <
474 MX53_PAD_GPIO_7__GPIO1_7 0xe0 /* VBUS ENABLE */
475 MX53_PAD_GPIO_8__GPIO1_8 0x100 /* OC */
476 >;
477 };
478 };
479};
480
481&ipu {
482 status = "okay";
483};
484
485&nfc {
486 pinctrl-names = "default";
487 pinctrl-0 = <&pinctrl_nand>;
488 nand-bus-width = <8>;
489 nand-ecc-mode = "hw";
490 nand-on-flash-bbt;
491 status = "okay";
82}; 492};
83 493
84&pwm2 { 494&pwm2 {
85 pinctrl-names = "default"; 495 pinctrl-names = "default";
86 pinctrl-0 = <&pinctrl_pwm2_1>; 496 pinctrl-0 = <&pinctrl_pwm2>;
87 status = "disabled"; 497 #pwm-cells = <3>;
498};
499
500&sdma {
501 fsl,sdma-ram-script-name = "sdma-imx53.bin";
88}; 502};
89 503
90&ssi1 { 504&ssi1 {
91 pinctrl-names = "default"; 505 fsl,mode = "i2s-slave";
92 pinctrl-0 = <&pinctrl_audmux_1>; 506 codec-handle = <&sgtl5000>;
93 status = "disabled"; 507 status = "okay";
94}; 508};
95 509
96&ssi2 { 510&ssi2 {
97 pinctrl-names = "default";
98 pinctrl-0 = <&pinctrl_audmux_2>;
99 status = "disabled"; 511 status = "disabled";
100}; 512};
101 513
102&uart1 { 514&uart1 {
103 pinctrl-names = "default"; 515 pinctrl-names = "default";
104 pinctrl-0 = <&pinctrl_uart1_2>, 516 pinctrl-0 = <&pinctrl_uart1>;
105 <&pinctrl_uart1_3>;
106 fsl,uart-has-rtscts; 517 fsl,uart-has-rtscts;
107 status = "disabled"; 518 status = "okay";
108}; 519};
109 520
110&uart2 { 521&uart2 {
111 pinctrl-names = "default"; 522 pinctrl-names = "default";
112 pinctrl-0 = <&pinctrl_uart2_2>; 523 pinctrl-0 = <&pinctrl_uart2>;
113 fsl,uart-has-rtscts; 524 fsl,uart-has-rtscts;
114 status = "disabled"; 525 status = "okay";
115}; 526};
116 527
117&uart3 { 528&uart3 {
118 pinctrl-names = "default"; 529 pinctrl-names = "default";
119 pinctrl-0 = <&pinctrl_uart3_1>; 530 pinctrl-0 = <&pinctrl_uart3>;
120 fsl,uart-has-rtscts; 531 fsl,uart-has-rtscts;
121 status = "disabled"; 532 status = "okay";
533};
534
535&usbh1 {
536 pinctrl-names = "default";
537 pinctrl-0 = <&pinctrl_usbh1>;
538 phy_type = "utmi";
539 disable-over-current;
540 vbus-supply = <&reg_usbh1_vbus>;
541 status = "okay";
542};
543
544&usbotg {
545 phy_type = "utmi";
546 dr_mode = "peripheral";
547 disable-over-current;
548 vbus-supply = <&reg_usbotg_vbus>;
549 status = "okay";
122}; 550};
diff --git a/arch/arm/boot/dts/imx53-voipac-bsb.dts b/arch/arm/boot/dts/imx53-voipac-bsb.dts
new file mode 100644
index 000000000000..7f6711a48615
--- /dev/null
+++ b/arch/arm/boot/dts/imx53-voipac-bsb.dts
@@ -0,0 +1,159 @@
1/*
2 * Copyright 2013 Rostislav Lisovy <lisovy@gmail.com>, PiKRON s.r.o.
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx53-voipac-dmm-668.dtsi"
14
15/ {
16 sound {
17 compatible = "fsl,imx53-voipac-sgtl5000",
18 "fsl,imx-audio-sgtl5000";
19 model = "imx53-voipac-sgtl5000";
20 ssi-controller = <&ssi2>;
21 audio-codec = <&sgtl5000>;
22 audio-routing =
23 "Headphone Jack", "HP_OUT";
24 mux-int-port = <2>;
25 mux-ext-port = <5>;
26 };
27
28 leds {
29 compatible = "gpio-leds";
30 pinctrl-names = "default";
31 pinctrl-0 = <&led_pin_gpio>;
32
33 led1 {
34 label = "led-red";
35 gpios = <&gpio3 29 0>;
36 default-state = "off";
37 };
38
39 led2 {
40 label = "led-orange";
41 gpios = <&gpio2 31 0>;
42 default-state = "off";
43 };
44 };
45};
46
47&iomuxc {
48 pinctrl-names = "default";
49 pinctrl-0 = <&pinctrl_hog>;
50
51 imx53-voipac {
52 pinctrl_hog: hoggrp {
53 fsl,pins = <
54 /* SD2_CD */
55 MX53_PAD_EIM_D25__GPIO3_25 0x80000000
56 /* SD2_WP */
57 MX53_PAD_EIM_A19__GPIO2_19 0x80000000
58 >;
59 };
60
61 led_pin_gpio: led_gpio {
62 fsl,pins = <
63 MX53_PAD_EIM_D29__GPIO3_29 0x80000000
64 MX53_PAD_EIM_EB3__GPIO2_31 0x80000000
65 >;
66 };
67
68 /* Keyboard controller */
69 pinctrl_kpp_1: kppgrp-1 {
70 fsl,pins = <
71 MX53_PAD_GPIO_9__KPP_COL_6 0xe8
72 MX53_PAD_GPIO_4__KPP_COL_7 0xe8
73 MX53_PAD_KEY_COL2__KPP_COL_2 0xe8
74 MX53_PAD_KEY_COL3__KPP_COL_3 0xe8
75 MX53_PAD_KEY_COL4__KPP_COL_4 0xe8
76 MX53_PAD_GPIO_2__KPP_ROW_6 0xe0
77 MX53_PAD_GPIO_5__KPP_ROW_7 0xe0
78 MX53_PAD_KEY_ROW2__KPP_ROW_2 0xe0
79 MX53_PAD_KEY_ROW3__KPP_ROW_3 0xe0
80 MX53_PAD_KEY_ROW4__KPP_ROW_4 0xe0
81 >;
82 };
83
84 pinctrl_audmux: audmuxgrp {
85 fsl,pins = <
86 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000
87 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000
88 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000
89 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000
90 >;
91 };
92
93 pinctrl_esdhc2: esdhc2grp {
94 fsl,pins = <
95 MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5
96 MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5
97 MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5
98 MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5
99 MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5
100 MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5
101 >;
102 };
103
104 pinctrl_i2c3: i2c3grp {
105 fsl,pins = <
106 MX53_PAD_GPIO_3__I2C3_SCL 0xc0000000
107 MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000
108 >;
109 };
110 };
111};
112
113&audmux {
114 pinctrl-names = "default";
115 pinctrl-0 = <&pinctrl_audmux>; /* SSI1 */
116 status = "okay";
117};
118
119&esdhc2 {
120 pinctrl-names = "default";
121 pinctrl-0 = <&pinctrl_esdhc2>;
122 cd-gpios = <&gpio3 25 0>;
123 wp-gpios = <&gpio2 19 0>;
124 vmmc-supply = <&reg_3p3v>;
125 status = "okay";
126};
127
128&i2c3 {
129 pinctrl-names = "default";
130 pinctrl-0 = <&pinctrl_i2c3>;
131 status = "okay";
132
133 sgtl5000: codec@0a {
134 compatible = "fsl,sgtl5000";
135 reg = <0x0a>;
136 VDDA-supply = <&reg_3p3v>;
137 VDDIO-supply = <&reg_3p3v>;
138 clocks = <&clks 150>;
139 };
140};
141
142&kpp {
143 pinctrl-names = "default";
144 pinctrl-0 = <&pinctrl_kpp_1>;
145 linux,keymap = <
146 0x0203003b /* KEY_F1 */
147 0x0603003c /* KEY_F2 */
148 0x0207003d /* KEY_F3 */
149 0x0607003e /* KEY_F4 */
150 >;
151 keypad,num-rows = <8>;
152 keypad,num-columns = <1>;
153 status = "okay";
154};
155
156&ssi2 {
157 fsl,mode = "i2s-slave";
158 status = "okay";
159};
diff --git a/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi b/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi
new file mode 100644
index 000000000000..ba689fbd0e41
--- /dev/null
+++ b/arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi
@@ -0,0 +1,277 @@
1/*
2 * Copyright 2013 Rostislav Lisovy <lisovy@gmail.com>, PiKRON s.r.o.
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12#include "imx53.dtsi"
13
14/ {
15 model = "Voipac i.MX53 X53-DMM-668";
16 compatible = "voipac,imx53-dmm-668", "fsl,imx53";
17
18 memory@70000000 {
19 device_type = "memory";
20 reg = <0x70000000 0x20000000>;
21 };
22
23 memory@b0000000 {
24 device_type = "memory";
25 reg = <0xb0000000 0x20000000>;
26 };
27
28 regulators {
29 compatible = "simple-bus";
30 #address-cells = <1>;
31 #size-cells = <0>;
32
33 reg_3p3v: regulator@0 {
34 compatible = "regulator-fixed";
35 reg = <0>;
36 regulator-name = "3P3V";
37 regulator-min-microvolt = <3300000>;
38 regulator-max-microvolt = <3300000>;
39 regulator-always-on;
40 };
41
42 reg_usb_vbus: regulator@1 {
43 compatible = "regulator-fixed";
44 reg = <1>;
45 regulator-name = "usb_vbus";
46 regulator-min-microvolt = <5000000>;
47 regulator-max-microvolt = <5000000>;
48 gpio = <&gpio3 31 0>; /* PEN */
49 enable-active-high;
50 };
51 };
52};
53
54&iomuxc {
55 pinctrl-names = "default";
56 pinctrl-0 = <&pinctrl_hog>;
57
58 imx53-voipac {
59 pinctrl_hog: hoggrp {
60 fsl,pins = <
61 /* Make DA9053 regulator functional */
62 MX53_PAD_GPIO_16__GPIO7_11 0x80000000
63 /* FEC Power enable */
64 MX53_PAD_GPIO_11__GPIO4_1 0x80000000
65 /* FEC RST */
66 MX53_PAD_GPIO_12__GPIO4_2 0x80000000
67 >;
68 };
69
70 pinctrl_ecspi1: ecspi1grp {
71 fsl,pins = <
72 MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000
73 MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000
74 MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000
75 >;
76 };
77
78 pinctrl_fec: fecgrp {
79 fsl,pins = <
80 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
81 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
82 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
83 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
84 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
85 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
86 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
87 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
88 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
89 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
90 >;
91 };
92
93 pinctrl_i2c1: i2c1grp {
94 fsl,pins = <
95 MX53_PAD_EIM_D21__I2C1_SCL 0xc0000000
96 MX53_PAD_EIM_D28__I2C1_SDA 0xc0000000
97 >;
98 };
99
100 pinctrl_uart1: uart1grp {
101 fsl,pins = <
102 MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
103 MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
104 >;
105 };
106
107 pinctrl_nand: nandgrp {
108 fsl,pins = <
109 MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B 0x4
110 MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B 0x4
111 MX53_PAD_NANDF_CLE__EMI_NANDF_CLE 0x4
112 MX53_PAD_NANDF_ALE__EMI_NANDF_ALE 0x4
113 MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B 0xe0
114 MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0 0xe0
115 MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0 0x4
116 MX53_PAD_PATA_DATA0__EMI_NANDF_D_0 0xa4
117 MX53_PAD_PATA_DATA1__EMI_NANDF_D_1 0xa4
118 MX53_PAD_PATA_DATA2__EMI_NANDF_D_2 0xa4
119 MX53_PAD_PATA_DATA3__EMI_NANDF_D_3 0xa4
120 MX53_PAD_PATA_DATA4__EMI_NANDF_D_4 0xa4
121 MX53_PAD_PATA_DATA5__EMI_NANDF_D_5 0xa4
122 MX53_PAD_PATA_DATA6__EMI_NANDF_D_6 0xa4
123 MX53_PAD_PATA_DATA7__EMI_NANDF_D_7 0xa4
124 >;
125 };
126 };
127};
128
129&ecspi1 {
130 pinctrl-names = "default";
131 pinctrl-0 = <&pinctrl_ecspi1>;
132 fsl,spi-num-chipselects = <4>;
133 cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>, <&gpio2 16 0>, <&gpio2 17 0>;
134 status = "okay";
135};
136
137&fec {
138 pinctrl-names = "default";
139 pinctrl-0 = <&pinctrl_fec>;
140 phy-mode = "rmii";
141 phy-reset-gpios = <&gpio4 2 0>;
142 status = "okay";
143};
144
145&i2c1 {
146 pinctrl-names = "default";
147 pinctrl-0 = <&pinctrl_i2c1>;
148 status = "okay";
149
150 pmic: dialog@48 {
151 compatible = "dlg,da9053-aa", "dlg,da9052";
152 reg = <0x48>;
153 interrupt-parent = <&gpio7>;
154 interrupts = <11 0x8>; /* low-level active IRQ at GPIO7_11 */
155
156 regulators {
157 buck1_reg: buck1 {
158 regulator-name = "BUCKCORE";
159 regulator-min-microvolt = <1200000>;
160 regulator-max-microvolt = <1400000>;
161 regulator-always-on;
162 };
163
164 buck2_reg: buck2 {
165 regulator-name = "BUCKPRO";
166 regulator-min-microvolt = <900000>;
167 regulator-max-microvolt = <1350000>;
168 regulator-always-on;
169 };
170
171 buck3_reg: buck3 {
172 regulator-name = "BUCKMEM";
173 regulator-min-microvolt = <1420000>;
174 regulator-max-microvolt = <1580000>;
175 regulator-always-on;
176 };
177
178 buck4_reg: buck4 {
179 regulator-name = "BUCKPERI";
180 regulator-min-microvolt = <2370000>;
181 regulator-max-microvolt = <2630000>;
182 regulator-always-on;
183 };
184
185 ldo1_reg: ldo1 {
186 regulator-name = "ldo1_1v3";
187 regulator-min-microvolt = <1250000>;
188 regulator-max-microvolt = <1350000>;
189 regulator-boot-on;
190 regulator-always-on;
191 };
192
193 ldo2_reg: ldo2 {
194 regulator-name = "ldo2_1v3";
195 regulator-min-microvolt = <1250000>;
196 regulator-max-microvolt = <1350000>;
197 regulator-always-on;
198 };
199
200 ldo3_reg: ldo3 {
201 regulator-name = "ldo3_3v3";
202 regulator-min-microvolt = <3250000>;
203 regulator-max-microvolt = <3350000>;
204 regulator-always-on;
205 };
206
207 ldo4_reg: ldo4 {
208 regulator-name = "ldo4_2v775";
209 regulator-min-microvolt = <2770000>;
210 regulator-max-microvolt = <2780000>;
211 regulator-always-on;
212 };
213
214 ldo5_reg: ldo5 {
215 regulator-name = "ldo5_3v3";
216 regulator-min-microvolt = <3250000>;
217 regulator-max-microvolt = <3350000>;
218 regulator-always-on;
219 };
220
221 ldo6_reg: ldo6 {
222 regulator-name = "ldo6_1v3";
223 regulator-min-microvolt = <1250000>;
224 regulator-max-microvolt = <1350000>;
225 regulator-always-on;
226 };
227
228 ldo7_reg: ldo7 {
229 regulator-name = "ldo7_2v75";
230 regulator-min-microvolt = <2700000>;
231 regulator-max-microvolt = <2800000>;
232 regulator-always-on;
233 };
234
235 ldo8_reg: ldo8 {
236 regulator-name = "ldo8_1v8";
237 regulator-min-microvolt = <1750000>;
238 regulator-max-microvolt = <1850000>;
239 regulator-always-on;
240 };
241
242 ldo9_reg: ldo9 {
243 regulator-name = "ldo9_1v5";
244 regulator-min-microvolt = <1450000>;
245 regulator-max-microvolt = <1550000>;
246 regulator-always-on;
247 };
248
249 ldo10_reg: ldo10 {
250 regulator-name = "ldo10_1v3";
251 regulator-min-microvolt = <1250000>;
252 regulator-max-microvolt = <1350000>;
253 regulator-always-on;
254 };
255 };
256 };
257};
258
259&nfc {
260 pinctrl-names = "default";
261 pinctrl-0 = <&pinctrl_nand>;
262 nand-bus-width = <8>;
263 nand-ecc-mode = "hw";
264 status = "okay";
265};
266
267&uart1 {
268 pinctrl-names = "default";
269 pinctrl-0 = <&pinctrl_uart1>;
270 status = "okay";
271};
272
273&usbh1 {
274 vbus-supply = <&reg_usb_vbus>;
275 phy_type = "utmi";
276 status = "okay";
277};
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
index 4307e80b2d2e..80615dfa2177 100644
--- a/arch/arm/boot/dts/imx53.dtsi
+++ b/arch/arm/boot/dts/imx53.dtsi
@@ -12,6 +12,9 @@
12 12
13#include "skeleton.dtsi" 13#include "skeleton.dtsi"
14#include "imx53-pinfunc.h" 14#include "imx53-pinfunc.h"
15#include <dt-bindings/clock/imx5-clock.h>
16#include <dt-bindings/gpio/gpio.h>
17#include <dt-bindings/input/input.h>
15 18
16/ { 19/ {
17 aliases { 20 aliases {
@@ -25,6 +28,10 @@
25 i2c0 = &i2c1; 28 i2c0 = &i2c1;
26 i2c1 = &i2c2; 29 i2c1 = &i2c2;
27 i2c2 = &i2c3; 30 i2c2 = &i2c3;
31 mmc0 = &esdhc1;
32 mmc1 = &esdhc2;
33 mmc2 = &esdhc3;
34 mmc3 = &esdhc4;
28 serial0 = &uart1; 35 serial0 = &uart1;
29 serial1 = &uart2; 36 serial1 = &uart2;
30 serial2 = &uart3; 37 serial2 = &uart3;
@@ -84,12 +91,25 @@
84 interrupt-parent = <&tzic>; 91 interrupt-parent = <&tzic>;
85 ranges; 92 ranges;
86 93
94 sata: sata@10000000 {
95 compatible = "fsl,imx53-ahci";
96 reg = <0x10000000 0x1000>;
97 interrupts = <28>;
98 clocks = <&clks IMX5_CLK_SATA_GATE>,
99 <&clks IMX5_CLK_SATA_REF>,
100 <&clks IMX5_CLK_AHB>;
101 clock-names = "sata_gate", "sata_ref", "ahb";
102 status = "disabled";
103 };
104
87 ipu: ipu@18000000 { 105 ipu: ipu@18000000 {
88 #crtc-cells = <1>; 106 #crtc-cells = <1>;
89 compatible = "fsl,imx53-ipu"; 107 compatible = "fsl,imx53-ipu";
90 reg = <0x18000000 0x080000000>; 108 reg = <0x18000000 0x080000000>;
91 interrupts = <11 10>; 109 interrupts = <11 10>;
92 clocks = <&clks 59>, <&clks 110>, <&clks 61>; 110 clocks = <&clks IMX5_CLK_IPU_GATE>,
111 <&clks IMX5_CLK_IPU_DI0_GATE>,
112 <&clks IMX5_CLK_IPU_DI1_GATE>;
93 clock-names = "bus", "di0", "di1"; 113 clock-names = "bus", "di0", "di1";
94 resets = <&src 2>; 114 resets = <&src 2>;
95 }; 115 };
@@ -112,7 +132,9 @@
112 compatible = "fsl,imx53-esdhc"; 132 compatible = "fsl,imx53-esdhc";
113 reg = <0x50004000 0x4000>; 133 reg = <0x50004000 0x4000>;
114 interrupts = <1>; 134 interrupts = <1>;
115 clocks = <&clks 44>, <&clks 0>, <&clks 71>; 135 clocks = <&clks IMX5_CLK_ESDHC1_IPG_GATE>,
136 <&clks IMX5_CLK_DUMMY>,
137 <&clks IMX5_CLK_ESDHC1_PER_GATE>;
116 clock-names = "ipg", "ahb", "per"; 138 clock-names = "ipg", "ahb", "per";
117 bus-width = <4>; 139 bus-width = <4>;
118 status = "disabled"; 140 status = "disabled";
@@ -122,7 +144,9 @@
122 compatible = "fsl,imx53-esdhc"; 144 compatible = "fsl,imx53-esdhc";
123 reg = <0x50008000 0x4000>; 145 reg = <0x50008000 0x4000>;
124 interrupts = <2>; 146 interrupts = <2>;
125 clocks = <&clks 45>, <&clks 0>, <&clks 72>; 147 clocks = <&clks IMX5_CLK_ESDHC2_IPG_GATE>,
148 <&clks IMX5_CLK_DUMMY>,
149 <&clks IMX5_CLK_ESDHC2_PER_GATE>;
126 clock-names = "ipg", "ahb", "per"; 150 clock-names = "ipg", "ahb", "per";
127 bus-width = <4>; 151 bus-width = <4>;
128 status = "disabled"; 152 status = "disabled";
@@ -132,7 +156,8 @@
132 compatible = "fsl,imx53-uart", "fsl,imx21-uart"; 156 compatible = "fsl,imx53-uart", "fsl,imx21-uart";
133 reg = <0x5000c000 0x4000>; 157 reg = <0x5000c000 0x4000>;
134 interrupts = <33>; 158 interrupts = <33>;
135 clocks = <&clks 32>, <&clks 33>; 159 clocks = <&clks IMX5_CLK_UART3_IPG_GATE>,
160 <&clks IMX5_CLK_UART3_PER_GATE>;
136 clock-names = "ipg", "per"; 161 clock-names = "ipg", "per";
137 status = "disabled"; 162 status = "disabled";
138 }; 163 };
@@ -143,16 +168,19 @@
143 compatible = "fsl,imx53-ecspi", "fsl,imx51-ecspi"; 168 compatible = "fsl,imx53-ecspi", "fsl,imx51-ecspi";
144 reg = <0x50010000 0x4000>; 169 reg = <0x50010000 0x4000>;
145 interrupts = <36>; 170 interrupts = <36>;
146 clocks = <&clks 51>, <&clks 52>; 171 clocks = <&clks IMX5_CLK_ECSPI1_IPG_GATE>,
172 <&clks IMX5_CLK_ECSPI1_PER_GATE>;
147 clock-names = "ipg", "per"; 173 clock-names = "ipg", "per";
148 status = "disabled"; 174 status = "disabled";
149 }; 175 };
150 176
151 ssi2: ssi@50014000 { 177 ssi2: ssi@50014000 {
152 compatible = "fsl,imx53-ssi", "fsl,imx21-ssi"; 178 compatible = "fsl,imx53-ssi",
179 "fsl,imx51-ssi",
180 "fsl,imx21-ssi";
153 reg = <0x50014000 0x4000>; 181 reg = <0x50014000 0x4000>;
154 interrupts = <30>; 182 interrupts = <30>;
155 clocks = <&clks 49>; 183 clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>;
156 dmas = <&sdma 24 1 0>, 184 dmas = <&sdma 24 1 0>,
157 <&sdma 25 1 0>; 185 <&sdma 25 1 0>;
158 dma-names = "rx", "tx"; 186 dma-names = "rx", "tx";
@@ -165,7 +193,9 @@
165 compatible = "fsl,imx53-esdhc"; 193 compatible = "fsl,imx53-esdhc";
166 reg = <0x50020000 0x4000>; 194 reg = <0x50020000 0x4000>;
167 interrupts = <3>; 195 interrupts = <3>;
168 clocks = <&clks 46>, <&clks 0>, <&clks 73>; 196 clocks = <&clks IMX5_CLK_ESDHC3_IPG_GATE>,
197 <&clks IMX5_CLK_DUMMY>,
198 <&clks IMX5_CLK_ESDHC3_PER_GATE>;
169 clock-names = "ipg", "ahb", "per"; 199 clock-names = "ipg", "ahb", "per";
170 bus-width = <4>; 200 bus-width = <4>;
171 status = "disabled"; 201 status = "disabled";
@@ -175,7 +205,9 @@
175 compatible = "fsl,imx53-esdhc"; 205 compatible = "fsl,imx53-esdhc";
176 reg = <0x50024000 0x4000>; 206 reg = <0x50024000 0x4000>;
177 interrupts = <4>; 207 interrupts = <4>;
178 clocks = <&clks 47>, <&clks 0>, <&clks 74>; 208 clocks = <&clks IMX5_CLK_ESDHC4_IPG_GATE>,
209 <&clks IMX5_CLK_DUMMY>,
210 <&clks IMX5_CLK_ESDHC4_PER_GATE>;
179 clock-names = "ipg", "ahb", "per"; 211 clock-names = "ipg", "ahb", "per";
180 bus-width = <4>; 212 bus-width = <4>;
181 status = "disabled"; 213 status = "disabled";
@@ -184,14 +216,14 @@
184 216
185 usbphy0: usbphy@0 { 217 usbphy0: usbphy@0 {
186 compatible = "usb-nop-xceiv"; 218 compatible = "usb-nop-xceiv";
187 clocks = <&clks 124>; 219 clocks = <&clks IMX5_CLK_USB_PHY1_GATE>;
188 clock-names = "main_clk"; 220 clock-names = "main_clk";
189 status = "okay"; 221 status = "okay";
190 }; 222 };
191 223
192 usbphy1: usbphy@1 { 224 usbphy1: usbphy@1 {
193 compatible = "usb-nop-xceiv"; 225 compatible = "usb-nop-xceiv";
194 clocks = <&clks 125>; 226 clocks = <&clks IMX5_CLK_USB_PHY2_GATE>;
195 clock-names = "main_clk"; 227 clock-names = "main_clk";
196 status = "okay"; 228 status = "okay";
197 }; 229 };
@@ -200,7 +232,7 @@
200 compatible = "fsl,imx53-usb", "fsl,imx27-usb"; 232 compatible = "fsl,imx53-usb", "fsl,imx27-usb";
201 reg = <0x53f80000 0x0200>; 233 reg = <0x53f80000 0x0200>;
202 interrupts = <18>; 234 interrupts = <18>;
203 clocks = <&clks 108>; 235 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
204 fsl,usbmisc = <&usbmisc 0>; 236 fsl,usbmisc = <&usbmisc 0>;
205 fsl,usbphy = <&usbphy0>; 237 fsl,usbphy = <&usbphy0>;
206 status = "disabled"; 238 status = "disabled";
@@ -210,7 +242,7 @@
210 compatible = "fsl,imx53-usb", "fsl,imx27-usb"; 242 compatible = "fsl,imx53-usb", "fsl,imx27-usb";
211 reg = <0x53f80200 0x0200>; 243 reg = <0x53f80200 0x0200>;
212 interrupts = <14>; 244 interrupts = <14>;
213 clocks = <&clks 108>; 245 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
214 fsl,usbmisc = <&usbmisc 1>; 246 fsl,usbmisc = <&usbmisc 1>;
215 fsl,usbphy = <&usbphy1>; 247 fsl,usbphy = <&usbphy1>;
216 status = "disabled"; 248 status = "disabled";
@@ -220,7 +252,7 @@
220 compatible = "fsl,imx53-usb", "fsl,imx27-usb"; 252 compatible = "fsl,imx53-usb", "fsl,imx27-usb";
221 reg = <0x53f80400 0x0200>; 253 reg = <0x53f80400 0x0200>;
222 interrupts = <16>; 254 interrupts = <16>;
223 clocks = <&clks 108>; 255 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
224 fsl,usbmisc = <&usbmisc 2>; 256 fsl,usbmisc = <&usbmisc 2>;
225 status = "disabled"; 257 status = "disabled";
226 }; 258 };
@@ -229,7 +261,7 @@
229 compatible = "fsl,imx53-usb", "fsl,imx27-usb"; 261 compatible = "fsl,imx53-usb", "fsl,imx27-usb";
230 reg = <0x53f80600 0x0200>; 262 reg = <0x53f80600 0x0200>;
231 interrupts = <17>; 263 interrupts = <17>;
232 clocks = <&clks 108>; 264 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
233 fsl,usbmisc = <&usbmisc 3>; 265 fsl,usbmisc = <&usbmisc 3>;
234 status = "disabled"; 266 status = "disabled";
235 }; 267 };
@@ -238,7 +270,7 @@
238 #index-cells = <1>; 270 #index-cells = <1>;
239 compatible = "fsl,imx53-usbmisc"; 271 compatible = "fsl,imx53-usbmisc";
240 reg = <0x53f80800 0x200>; 272 reg = <0x53f80800 0x200>;
241 clocks = <&clks 108>; 273 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
242 }; 274 };
243 275
244 gpio1: gpio@53f84000 { 276 gpio1: gpio@53f84000 {
@@ -281,18 +313,26 @@
281 #interrupt-cells = <2>; 313 #interrupt-cells = <2>;
282 }; 314 };
283 315
316 kpp: kpp@53f94000 {
317 compatible = "fsl,imx53-kpp", "fsl,imx21-kpp";
318 reg = <0x53f94000 0x4000>;
319 interrupts = <60>;
320 clocks = <&clks IMX5_CLK_DUMMY>;
321 status = "disabled";
322 };
323
284 wdog1: wdog@53f98000 { 324 wdog1: wdog@53f98000 {
285 compatible = "fsl,imx53-wdt", "fsl,imx21-wdt"; 325 compatible = "fsl,imx53-wdt", "fsl,imx21-wdt";
286 reg = <0x53f98000 0x4000>; 326 reg = <0x53f98000 0x4000>;
287 interrupts = <58>; 327 interrupts = <58>;
288 clocks = <&clks 0>; 328 clocks = <&clks IMX5_CLK_DUMMY>;
289 }; 329 };
290 330
291 wdog2: wdog@53f9c000 { 331 wdog2: wdog@53f9c000 {
292 compatible = "fsl,imx53-wdt", "fsl,imx21-wdt"; 332 compatible = "fsl,imx53-wdt", "fsl,imx21-wdt";
293 reg = <0x53f9c000 0x4000>; 333 reg = <0x53f9c000 0x4000>;
294 interrupts = <59>; 334 interrupts = <59>;
295 clocks = <&clks 0>; 335 clocks = <&clks IMX5_CLK_DUMMY>;
296 status = "disabled"; 336 status = "disabled";
297 }; 337 };
298 338
@@ -300,521 +340,14 @@
300 compatible = "fsl,imx53-gpt", "fsl,imx31-gpt"; 340 compatible = "fsl,imx53-gpt", "fsl,imx31-gpt";
301 reg = <0x53fa0000 0x4000>; 341 reg = <0x53fa0000 0x4000>;
302 interrupts = <39>; 342 interrupts = <39>;
303 clocks = <&clks 36>, <&clks 41>; 343 clocks = <&clks IMX5_CLK_GPT_IPG_GATE>,
344 <&clks IMX5_CLK_GPT_HF_GATE>;
304 clock-names = "ipg", "per"; 345 clock-names = "ipg", "per";
305 }; 346 };
306 347
307 iomuxc: iomuxc@53fa8000 { 348 iomuxc: iomuxc@53fa8000 {
308 compatible = "fsl,imx53-iomuxc"; 349 compatible = "fsl,imx53-iomuxc";
309 reg = <0x53fa8000 0x4000>; 350 reg = <0x53fa8000 0x4000>;
310
311 audmux {
312 pinctrl_audmux_1: audmuxgrp-1 {
313 fsl,pins = <
314 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000
315 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000
316 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000
317 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000
318 >;
319 };
320
321 pinctrl_audmux_2: audmuxgrp-2 {
322 fsl,pins = <
323 MX53_PAD_SD2_DATA3__AUDMUX_AUD4_TXC 0x80000000
324 MX53_PAD_SD2_DATA2__AUDMUX_AUD4_TXD 0x80000000
325 MX53_PAD_SD2_DATA1__AUDMUX_AUD4_TXFS 0x80000000
326 MX53_PAD_SD2_DATA0__AUDMUX_AUD4_RXD 0x80000000
327 >;
328 };
329
330 pinctrl_audmux_3: audmuxgrp-3 {
331 fsl,pins = <
332 MX53_PAD_CSI0_DAT4__AUDMUX_AUD3_TXC 0x80000000
333 MX53_PAD_CSI0_DAT5__AUDMUX_AUD3_TXD 0x80000000
334 MX53_PAD_CSI0_DAT6__AUDMUX_AUD3_TXFS 0x80000000
335 MX53_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD 0x80000000
336 >;
337 };
338 };
339
340 fec {
341 pinctrl_fec_1: fecgrp-1 {
342 fsl,pins = <
343 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
344 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
345 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
346 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
347 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
348 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
349 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
350 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
351 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
352 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
353 >;
354 };
355
356 pinctrl_fec_2: fecgrp-2 {
357 fsl,pins = <
358 MX53_PAD_FEC_MDC__FEC_MDC 0x80000000
359 MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000
360 MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000
361 MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000
362 MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000
363 MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000
364 MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000
365 MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000
366 MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000
367 MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000
368 MX53_PAD_KEY_ROW1__FEC_COL 0x80000000
369 MX53_PAD_KEY_COL3__FEC_CRS 0x80000000
370 MX53_PAD_KEY_COL2__FEC_RDATA_2 0x80000000
371 MX53_PAD_KEY_COL0__FEC_RDATA_3 0x80000000
372 MX53_PAD_KEY_COL1__FEC_RX_CLK 0x80000000
373 MX53_PAD_KEY_ROW2__FEC_TDATA_2 0x80000000
374 MX53_PAD_GPIO_19__FEC_TDATA_3 0x80000000
375 MX53_PAD_KEY_ROW0__FEC_TX_ER 0x80000000
376 >;
377 };
378 };
379
380 csi {
381 pinctrl_csi_1: csigrp-1 {
382 fsl,pins = <
383 MX53_PAD_CSI0_DATA_EN__IPU_CSI0_DATA_EN 0x1d5
384 MX53_PAD_CSI0_VSYNC__IPU_CSI0_VSYNC 0x1d5
385 MX53_PAD_CSI0_MCLK__IPU_CSI0_HSYNC 0x1d5
386 MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK 0x1d5
387 MX53_PAD_CSI0_DAT19__IPU_CSI0_D_19 0x1d5
388 MX53_PAD_CSI0_DAT18__IPU_CSI0_D_18 0x1d5
389 MX53_PAD_CSI0_DAT17__IPU_CSI0_D_17 0x1d5
390 MX53_PAD_CSI0_DAT16__IPU_CSI0_D_16 0x1d5
391 MX53_PAD_CSI0_DAT15__IPU_CSI0_D_15 0x1d5
392 MX53_PAD_CSI0_DAT14__IPU_CSI0_D_14 0x1d5
393 MX53_PAD_CSI0_DAT13__IPU_CSI0_D_13 0x1d5
394 MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12 0x1d5
395 MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11 0x1d5
396 MX53_PAD_CSI0_DAT10__IPU_CSI0_D_10 0x1d5
397 MX53_PAD_CSI0_DAT9__IPU_CSI0_D_9 0x1d5
398 MX53_PAD_CSI0_DAT8__IPU_CSI0_D_8 0x1d5
399 MX53_PAD_CSI0_DAT7__IPU_CSI0_D_7 0x1d5
400 MX53_PAD_CSI0_DAT6__IPU_CSI0_D_6 0x1d5
401 MX53_PAD_CSI0_DAT5__IPU_CSI0_D_5 0x1d5
402 MX53_PAD_CSI0_DAT4__IPU_CSI0_D_4 0x1d5
403 MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK 0x1d5
404 >;
405 };
406
407 pinctrl_csi_2: csigrp-2 {
408 fsl,pins = <
409 MX53_PAD_CSI0_VSYNC__IPU_CSI0_VSYNC 0x1d5
410 MX53_PAD_CSI0_MCLK__IPU_CSI0_HSYNC 0x1d5
411 MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK 0x1d5
412 MX53_PAD_CSI0_DAT19__IPU_CSI0_D_19 0x1d5
413 MX53_PAD_CSI0_DAT18__IPU_CSI0_D_18 0x1d5
414 MX53_PAD_CSI0_DAT17__IPU_CSI0_D_17 0x1d5
415 MX53_PAD_CSI0_DAT16__IPU_CSI0_D_16 0x1d5
416 MX53_PAD_CSI0_DAT15__IPU_CSI0_D_15 0x1d5
417 MX53_PAD_CSI0_DAT14__IPU_CSI0_D_14 0x1d5
418 MX53_PAD_CSI0_DAT13__IPU_CSI0_D_13 0x1d5
419 MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12 0x1d5
420 >;
421 };
422 };
423
424 cspi {
425 pinctrl_cspi_1: cspigrp-1 {
426 fsl,pins = <
427 MX53_PAD_SD1_DATA0__CSPI_MISO 0x1d5
428 MX53_PAD_SD1_CMD__CSPI_MOSI 0x1d5
429 MX53_PAD_SD1_CLK__CSPI_SCLK 0x1d5
430 >;
431 };
432
433 pinctrl_cspi_2: cspigrp-2 {
434 fsl,pins = <
435 MX53_PAD_EIM_D22__CSPI_MISO 0x1d5
436 MX53_PAD_EIM_D28__CSPI_MOSI 0x1d5
437 MX53_PAD_EIM_D21__CSPI_SCLK 0x1d5
438 >;
439 };
440 };
441
442 ecspi1 {
443 pinctrl_ecspi1_1: ecspi1grp-1 {
444 fsl,pins = <
445 MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000
446 MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000
447 MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000
448 >;
449 };
450
451 pinctrl_ecspi1_2: ecspi1grp-2 {
452 fsl,pins = <
453 MX53_PAD_GPIO_19__ECSPI1_RDY 0x80000000
454 MX53_PAD_EIM_EB2__ECSPI1_SS0 0x80000000
455 MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000
456 MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000
457 MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000
458 MX53_PAD_EIM_D19__ECSPI1_SS1 0x80000000
459 >;
460 };
461 };
462
463 ecspi2 {
464 pinctrl_ecspi2_1: ecspi2grp-1 {
465 fsl,pins = <
466 MX53_PAD_EIM_OE__ECSPI2_MISO 0x80000000
467 MX53_PAD_EIM_CS1__ECSPI2_MOSI 0x80000000
468 MX53_PAD_EIM_CS0__ECSPI2_SCLK 0x80000000
469 >;
470 };
471 };
472
473 esdhc1 {
474 pinctrl_esdhc1_1: esdhc1grp-1 {
475 fsl,pins = <
476 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
477 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
478 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
479 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
480 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
481 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
482 >;
483 };
484
485 pinctrl_esdhc1_2: esdhc1grp-2 {
486 fsl,pins = <
487 MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5
488 MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5
489 MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5
490 MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5
491 MX53_PAD_PATA_DATA8__ESDHC1_DAT4 0x1d5
492 MX53_PAD_PATA_DATA9__ESDHC1_DAT5 0x1d5
493 MX53_PAD_PATA_DATA10__ESDHC1_DAT6 0x1d5
494 MX53_PAD_PATA_DATA11__ESDHC1_DAT7 0x1d5
495 MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5
496 MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5
497 >;
498 };
499 };
500
501 esdhc2 {
502 pinctrl_esdhc2_1: esdhc2grp-1 {
503 fsl,pins = <
504 MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5
505 MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5
506 MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5
507 MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5
508 MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5
509 MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5
510 >;
511 };
512 };
513
514 esdhc3 {
515 pinctrl_esdhc3_1: esdhc3grp-1 {
516 fsl,pins = <
517 MX53_PAD_PATA_DATA8__ESDHC3_DAT0 0x1d5
518 MX53_PAD_PATA_DATA9__ESDHC3_DAT1 0x1d5
519 MX53_PAD_PATA_DATA10__ESDHC3_DAT2 0x1d5
520 MX53_PAD_PATA_DATA11__ESDHC3_DAT3 0x1d5
521 MX53_PAD_PATA_DATA0__ESDHC3_DAT4 0x1d5
522 MX53_PAD_PATA_DATA1__ESDHC3_DAT5 0x1d5
523 MX53_PAD_PATA_DATA2__ESDHC3_DAT6 0x1d5
524 MX53_PAD_PATA_DATA3__ESDHC3_DAT7 0x1d5
525 MX53_PAD_PATA_RESET_B__ESDHC3_CMD 0x1d5
526 MX53_PAD_PATA_IORDY__ESDHC3_CLK 0x1d5
527 >;
528 };
529 };
530
531 can1 {
532 pinctrl_can1_1: can1grp-1 {
533 fsl,pins = <
534 MX53_PAD_PATA_INTRQ__CAN1_TXCAN 0x80000000
535 MX53_PAD_PATA_DIOR__CAN1_RXCAN 0x80000000
536 >;
537 };
538
539 pinctrl_can1_2: can1grp-2 {
540 fsl,pins = <
541 MX53_PAD_KEY_COL2__CAN1_TXCAN 0x80000000
542 MX53_PAD_KEY_ROW2__CAN1_RXCAN 0x80000000
543 >;
544 };
545
546 pinctrl_can1_3: can1grp-3 {
547 fsl,pins = <
548 MX53_PAD_GPIO_7__CAN1_TXCAN 0x80000000
549 MX53_PAD_GPIO_8__CAN1_RXCAN 0x80000000
550 >;
551 };
552 };
553
554 can2 {
555 pinctrl_can2_1: can2grp-1 {
556 fsl,pins = <
557 MX53_PAD_KEY_COL4__CAN2_TXCAN 0x80000000
558 MX53_PAD_KEY_ROW4__CAN2_RXCAN 0x80000000
559 >;
560 };
561 };
562
563 i2c1 {
564 pinctrl_i2c1_1: i2c1grp-1 {
565 fsl,pins = <
566 MX53_PAD_CSI0_DAT8__I2C1_SDA 0xc0000000
567 MX53_PAD_CSI0_DAT9__I2C1_SCL 0xc0000000
568 >;
569 };
570
571 pinctrl_i2c1_2: i2c1grp-2 {
572 fsl,pins = <
573 MX53_PAD_EIM_D21__I2C1_SCL 0xc0000000
574 MX53_PAD_EIM_D28__I2C1_SDA 0xc0000000
575 >;
576 };
577 };
578
579 i2c2 {
580 pinctrl_i2c2_1: i2c2grp-1 {
581 fsl,pins = <
582 MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000
583 MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000
584 >;
585 };
586
587 pinctrl_i2c2_2: i2c2grp-2 {
588 fsl,pins = <
589 MX53_PAD_EIM_D16__I2C2_SDA 0xc0000000
590 MX53_PAD_EIM_EB2__I2C2_SCL 0xc0000000
591 >;
592 };
593 };
594
595 i2c3 {
596 pinctrl_i2c3_1: i2c3grp-1 {
597 fsl,pins = <
598 MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000
599 MX53_PAD_GPIO_5__I2C3_SCL 0xc0000000
600 >;
601 };
602 };
603
604 ipu_disp0 {
605 pinctrl_ipu_disp0_1: ipudisp0grp-1 {
606 fsl,pins = <
607 MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK 0x5
608 MX53_PAD_DI0_PIN15__IPU_DI0_PIN15 0x5
609 MX53_PAD_DI0_PIN2__IPU_DI0_PIN2 0x5
610 MX53_PAD_DI0_PIN3__IPU_DI0_PIN3 0x5
611 MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0 0x5
612 MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1 0x5
613 MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2 0x5
614 MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3 0x5
615 MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4 0x5
616 MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5 0x5
617 MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6 0x5
618 MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7 0x5
619 MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8 0x5
620 MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9 0x5
621 MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10 0x5
622 MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11 0x5
623 MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12 0x5
624 MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13 0x5
625 MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14 0x5
626 MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15 0x5
627 MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16 0x5
628 MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17 0x5
629 MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18 0x5
630 MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19 0x5
631 MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20 0x5
632 MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21 0x5
633 MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22 0x5
634 MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23 0x5
635 >;
636 };
637 };
638
639 ipu_disp1 {
640 pinctrl_ipu_disp1_1: ipudisp1grp-1 {
641 fsl,pins = <
642 MX53_PAD_EIM_DA9__IPU_DISP1_DAT_0 0x5
643 MX53_PAD_EIM_DA8__IPU_DISP1_DAT_1 0x5
644 MX53_PAD_EIM_DA7__IPU_DISP1_DAT_2 0x5
645 MX53_PAD_EIM_DA6__IPU_DISP1_DAT_3 0x5
646 MX53_PAD_EIM_DA5__IPU_DISP1_DAT_4 0x5
647 MX53_PAD_EIM_DA4__IPU_DISP1_DAT_5 0x5
648 MX53_PAD_EIM_DA3__IPU_DISP1_DAT_6 0x5
649 MX53_PAD_EIM_DA2__IPU_DISP1_DAT_7 0x5
650 MX53_PAD_EIM_DA1__IPU_DISP1_DAT_8 0x5
651 MX53_PAD_EIM_DA0__IPU_DISP1_DAT_9 0x5
652 MX53_PAD_EIM_EB1__IPU_DISP1_DAT_10 0x5
653 MX53_PAD_EIM_EB0__IPU_DISP1_DAT_11 0x5
654 MX53_PAD_EIM_A17__IPU_DISP1_DAT_12 0x5
655 MX53_PAD_EIM_A18__IPU_DISP1_DAT_13 0x5
656 MX53_PAD_EIM_A19__IPU_DISP1_DAT_14 0x5
657 MX53_PAD_EIM_A20__IPU_DISP1_DAT_15 0x5
658 MX53_PAD_EIM_A21__IPU_DISP1_DAT_16 0x5
659 MX53_PAD_EIM_A22__IPU_DISP1_DAT_17 0x5
660 MX53_PAD_EIM_A23__IPU_DISP1_DAT_18 0x5
661 MX53_PAD_EIM_A24__IPU_DISP1_DAT_19 0x5
662 MX53_PAD_EIM_D31__IPU_DISP1_DAT_20 0x5
663 MX53_PAD_EIM_D30__IPU_DISP1_DAT_21 0x5
664 MX53_PAD_EIM_D26__IPU_DISP1_DAT_22 0x5
665 MX53_PAD_EIM_D27__IPU_DISP1_DAT_23 0x5
666 MX53_PAD_EIM_A16__IPU_DI1_DISP_CLK 0x5
667 MX53_PAD_EIM_DA13__IPU_DI1_D0_CS 0x5
668 MX53_PAD_EIM_DA14__IPU_DI1_D1_CS 0x5
669 MX53_PAD_EIM_DA15__IPU_DI1_PIN1 0x5
670 MX53_PAD_EIM_DA11__IPU_DI1_PIN2 0x5
671 MX53_PAD_EIM_DA12__IPU_DI1_PIN3 0x5
672 MX53_PAD_EIM_A25__IPU_DI1_PIN12 0x5
673 MX53_PAD_EIM_DA10__IPU_DI1_PIN15 0x5
674 >;
675 };
676 };
677
678 ipu_disp2 {
679 pinctrl_ipu_disp2_1: ipudisp2grp-1 {
680 fsl,pins = <
681 MX53_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0 0x80000000
682 MX53_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1 0x80000000
683 MX53_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2 0x80000000
684 MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 0x80000000
685 MX53_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK 0x80000000
686 MX53_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0 0x80000000
687 MX53_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1 0x80000000
688 MX53_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2 0x80000000
689 MX53_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3 0x80000000
690 MX53_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK 0x80000000
691 >;
692 };
693 };
694
695 nand {
696 pinctrl_nand_1: nandgrp-1 {
697 fsl,pins = <
698 MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B 0x4
699 MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B 0x4
700 MX53_PAD_NANDF_CLE__EMI_NANDF_CLE 0x4
701 MX53_PAD_NANDF_ALE__EMI_NANDF_ALE 0x4
702 MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B 0xe0
703 MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0 0xe0
704 MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0 0x4
705 MX53_PAD_PATA_DATA0__EMI_NANDF_D_0 0xa4
706 MX53_PAD_PATA_DATA1__EMI_NANDF_D_1 0xa4
707 MX53_PAD_PATA_DATA2__EMI_NANDF_D_2 0xa4
708 MX53_PAD_PATA_DATA3__EMI_NANDF_D_3 0xa4
709 MX53_PAD_PATA_DATA4__EMI_NANDF_D_4 0xa4
710 MX53_PAD_PATA_DATA5__EMI_NANDF_D_5 0xa4
711 MX53_PAD_PATA_DATA6__EMI_NANDF_D_6 0xa4
712 MX53_PAD_PATA_DATA7__EMI_NANDF_D_7 0xa4
713 >;
714 };
715 };
716
717 owire {
718 pinctrl_owire_1: owiregrp-1 {
719 fsl,pins = <
720 MX53_PAD_GPIO_18__OWIRE_LINE 0x80000000
721 >;
722 };
723 };
724
725 pwm1 {
726 pinctrl_pwm1_1: pwm1grp-1 {
727 fsl,pins = <
728 MX53_PAD_DISP0_DAT8__PWM1_PWMO 0x5
729 >;
730 };
731 };
732
733 pwm2 {
734 pinctrl_pwm2_1: pwm2grp-1 {
735 fsl,pins = <
736 MX53_PAD_GPIO_1__PWM2_PWMO 0x80000000
737 >;
738 };
739 };
740
741 uart1 {
742 pinctrl_uart1_1: uart1grp-1 {
743 fsl,pins = <
744 MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1e4
745 MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1e4
746 >;
747 };
748
749 pinctrl_uart1_2: uart1grp-2 {
750 fsl,pins = <
751 MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
752 MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
753 >;
754 };
755
756 pinctrl_uart1_3: uart1grp-3 {
757 fsl,pins = <
758 MX53_PAD_PATA_RESET_B__UART1_CTS 0x1c5
759 MX53_PAD_PATA_IORDY__UART1_RTS 0x1c5
760 >;
761 };
762 };
763
764 uart2 {
765 pinctrl_uart2_1: uart2grp-1 {
766 fsl,pins = <
767 MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4
768 MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4
769 >;
770 };
771
772 pinctrl_uart2_2: uart2grp-2 {
773 fsl,pins = <
774 MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1c5
775 MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1c5
776 MX53_PAD_PATA_DIOR__UART2_RTS 0x1c5
777 MX53_PAD_PATA_INTRQ__UART2_CTS 0x1c5
778 >;
779 };
780 };
781
782 uart3 {
783 pinctrl_uart3_1: uart3grp-1 {
784 fsl,pins = <
785 MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
786 MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
787 MX53_PAD_PATA_DA_1__UART3_CTS 0x1e4
788 MX53_PAD_PATA_DA_2__UART3_RTS 0x1e4
789 >;
790 };
791
792 pinctrl_uart3_2: uart3grp-2 {
793 fsl,pins = <
794 MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
795 MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
796 >;
797 };
798
799 };
800
801 uart4 {
802 pinctrl_uart4_1: uart4grp-1 {
803 fsl,pins = <
804 MX53_PAD_KEY_COL0__UART4_TXD_MUX 0x1e4
805 MX53_PAD_KEY_ROW0__UART4_RXD_MUX 0x1e4
806 >;
807 };
808 };
809
810 uart5 {
811 pinctrl_uart5_1: uart5grp-1 {
812 fsl,pins = <
813 MX53_PAD_KEY_COL1__UART5_TXD_MUX 0x1e4
814 MX53_PAD_KEY_ROW1__UART5_RXD_MUX 0x1e4
815 >;
816 };
817 };
818 }; 351 };
819 352
820 gpr: iomuxc-gpr@53fa8000 { 353 gpr: iomuxc-gpr@53fa8000 {
@@ -828,9 +361,12 @@
828 compatible = "fsl,imx53-ldb"; 361 compatible = "fsl,imx53-ldb";
829 reg = <0x53fa8008 0x4>; 362 reg = <0x53fa8008 0x4>;
830 gpr = <&gpr>; 363 gpr = <&gpr>;
831 clocks = <&clks 122>, <&clks 120>, 364 clocks = <&clks IMX5_CLK_LDB_DI0_SEL>,
832 <&clks 115>, <&clks 116>, 365 <&clks IMX5_CLK_LDB_DI1_SEL>,
833 <&clks 123>, <&clks 85>; 366 <&clks IMX5_CLK_IPU_DI0_SEL>,
367 <&clks IMX5_CLK_IPU_DI1_SEL>,
368 <&clks IMX5_CLK_LDB_DI0_GATE>,
369 <&clks IMX5_CLK_LDB_DI1_GATE>;
834 clock-names = "di0_pll", "di1_pll", 370 clock-names = "di0_pll", "di1_pll",
835 "di0_sel", "di1_sel", 371 "di0_sel", "di1_sel",
836 "di0", "di1"; 372 "di0", "di1";
@@ -853,7 +389,8 @@
853 #pwm-cells = <2>; 389 #pwm-cells = <2>;
854 compatible = "fsl,imx53-pwm", "fsl,imx27-pwm"; 390 compatible = "fsl,imx53-pwm", "fsl,imx27-pwm";
855 reg = <0x53fb4000 0x4000>; 391 reg = <0x53fb4000 0x4000>;
856 clocks = <&clks 37>, <&clks 38>; 392 clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>,
393 <&clks IMX5_CLK_PWM1_HF_GATE>;
857 clock-names = "ipg", "per"; 394 clock-names = "ipg", "per";
858 interrupts = <61>; 395 interrupts = <61>;
859 }; 396 };
@@ -862,7 +399,8 @@
862 #pwm-cells = <2>; 399 #pwm-cells = <2>;
863 compatible = "fsl,imx53-pwm", "fsl,imx27-pwm"; 400 compatible = "fsl,imx53-pwm", "fsl,imx27-pwm";
864 reg = <0x53fb8000 0x4000>; 401 reg = <0x53fb8000 0x4000>;
865 clocks = <&clks 39>, <&clks 40>; 402 clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>,
403 <&clks IMX5_CLK_PWM2_HF_GATE>;
866 clock-names = "ipg", "per"; 404 clock-names = "ipg", "per";
867 interrupts = <94>; 405 interrupts = <94>;
868 }; 406 };
@@ -871,7 +409,8 @@
871 compatible = "fsl,imx53-uart", "fsl,imx21-uart"; 409 compatible = "fsl,imx53-uart", "fsl,imx21-uart";
872 reg = <0x53fbc000 0x4000>; 410 reg = <0x53fbc000 0x4000>;
873 interrupts = <31>; 411 interrupts = <31>;
874 clocks = <&clks 28>, <&clks 29>; 412 clocks = <&clks IMX5_CLK_UART1_IPG_GATE>,
413 <&clks IMX5_CLK_UART1_PER_GATE>;
875 clock-names = "ipg", "per"; 414 clock-names = "ipg", "per";
876 status = "disabled"; 415 status = "disabled";
877 }; 416 };
@@ -880,7 +419,8 @@
880 compatible = "fsl,imx53-uart", "fsl,imx21-uart"; 419 compatible = "fsl,imx53-uart", "fsl,imx21-uart";
881 reg = <0x53fc0000 0x4000>; 420 reg = <0x53fc0000 0x4000>;
882 interrupts = <32>; 421 interrupts = <32>;
883 clocks = <&clks 30>, <&clks 31>; 422 clocks = <&clks IMX5_CLK_UART2_IPG_GATE>,
423 <&clks IMX5_CLK_UART2_PER_GATE>;
884 clock-names = "ipg", "per"; 424 clock-names = "ipg", "per";
885 status = "disabled"; 425 status = "disabled";
886 }; 426 };
@@ -889,7 +429,8 @@
889 compatible = "fsl,imx53-flexcan", "fsl,p1010-flexcan"; 429 compatible = "fsl,imx53-flexcan", "fsl,p1010-flexcan";
890 reg = <0x53fc8000 0x4000>; 430 reg = <0x53fc8000 0x4000>;
891 interrupts = <82>; 431 interrupts = <82>;
892 clocks = <&clks 158>, <&clks 157>; 432 clocks = <&clks IMX5_CLK_CAN1_IPG_GATE>,
433 <&clks IMX5_CLK_CAN1_SERIAL_GATE>;
893 clock-names = "ipg", "per"; 434 clock-names = "ipg", "per";
894 status = "disabled"; 435 status = "disabled";
895 }; 436 };
@@ -898,7 +439,8 @@
898 compatible = "fsl,imx53-flexcan", "fsl,p1010-flexcan"; 439 compatible = "fsl,imx53-flexcan", "fsl,p1010-flexcan";
899 reg = <0x53fcc000 0x4000>; 440 reg = <0x53fcc000 0x4000>;
900 interrupts = <83>; 441 interrupts = <83>;
901 clocks = <&clks 87>, <&clks 86>; 442 clocks = <&clks IMX5_CLK_CAN2_IPG_GATE>,
443 <&clks IMX5_CLK_CAN2_SERIAL_GATE>;
902 clock-names = "ipg", "per"; 444 clock-names = "ipg", "per";
903 status = "disabled"; 445 status = "disabled";
904 }; 446 };
@@ -952,7 +494,7 @@
952 compatible = "fsl,imx53-i2c", "fsl,imx21-i2c"; 494 compatible = "fsl,imx53-i2c", "fsl,imx21-i2c";
953 reg = <0x53fec000 0x4000>; 495 reg = <0x53fec000 0x4000>;
954 interrupts = <64>; 496 interrupts = <64>;
955 clocks = <&clks 88>; 497 clocks = <&clks IMX5_CLK_I2C3_GATE>;
956 status = "disabled"; 498 status = "disabled";
957 }; 499 };
958 500
@@ -960,7 +502,8 @@
960 compatible = "fsl,imx53-uart", "fsl,imx21-uart"; 502 compatible = "fsl,imx53-uart", "fsl,imx21-uart";
961 reg = <0x53ff0000 0x4000>; 503 reg = <0x53ff0000 0x4000>;
962 interrupts = <13>; 504 interrupts = <13>;
963 clocks = <&clks 65>, <&clks 66>; 505 clocks = <&clks IMX5_CLK_UART4_IPG_GATE>,
506 <&clks IMX5_CLK_UART4_PER_GATE>;
964 clock-names = "ipg", "per"; 507 clock-names = "ipg", "per";
965 status = "disabled"; 508 status = "disabled";
966 }; 509 };
@@ -977,14 +520,15 @@
977 compatible = "fsl,imx53-iim", "fsl,imx27-iim"; 520 compatible = "fsl,imx53-iim", "fsl,imx27-iim";
978 reg = <0x63f98000 0x4000>; 521 reg = <0x63f98000 0x4000>;
979 interrupts = <69>; 522 interrupts = <69>;
980 clocks = <&clks 107>; 523 clocks = <&clks IMX5_CLK_IIM_GATE>;
981 }; 524 };
982 525
983 uart5: serial@63f90000 { 526 uart5: serial@63f90000 {
984 compatible = "fsl,imx53-uart", "fsl,imx21-uart"; 527 compatible = "fsl,imx53-uart", "fsl,imx21-uart";
985 reg = <0x63f90000 0x4000>; 528 reg = <0x63f90000 0x4000>;
986 interrupts = <86>; 529 interrupts = <86>;
987 clocks = <&clks 67>, <&clks 68>; 530 clocks = <&clks IMX5_CLK_UART5_IPG_GATE>,
531 <&clks IMX5_CLK_UART5_PER_GATE>;
988 clock-names = "ipg", "per"; 532 clock-names = "ipg", "per";
989 status = "disabled"; 533 status = "disabled";
990 }; 534 };
@@ -992,7 +536,7 @@
992 owire: owire@63fa4000 { 536 owire: owire@63fa4000 {
993 compatible = "fsl,imx53-owire", "fsl,imx21-owire"; 537 compatible = "fsl,imx53-owire", "fsl,imx21-owire";
994 reg = <0x63fa4000 0x4000>; 538 reg = <0x63fa4000 0x4000>;
995 clocks = <&clks 159>; 539 clocks = <&clks IMX5_CLK_OWIRE_GATE>;
996 status = "disabled"; 540 status = "disabled";
997 }; 541 };
998 542
@@ -1002,7 +546,8 @@
1002 compatible = "fsl,imx53-ecspi", "fsl,imx51-ecspi"; 546 compatible = "fsl,imx53-ecspi", "fsl,imx51-ecspi";
1003 reg = <0x63fac000 0x4000>; 547 reg = <0x63fac000 0x4000>;
1004 interrupts = <37>; 548 interrupts = <37>;
1005 clocks = <&clks 53>, <&clks 54>; 549 clocks = <&clks IMX5_CLK_ECSPI2_IPG_GATE>,
550 <&clks IMX5_CLK_ECSPI2_PER_GATE>;
1006 clock-names = "ipg", "per"; 551 clock-names = "ipg", "per";
1007 status = "disabled"; 552 status = "disabled";
1008 }; 553 };
@@ -1011,7 +556,8 @@
1011 compatible = "fsl,imx53-sdma", "fsl,imx35-sdma"; 556 compatible = "fsl,imx53-sdma", "fsl,imx35-sdma";
1012 reg = <0x63fb0000 0x4000>; 557 reg = <0x63fb0000 0x4000>;
1013 interrupts = <6>; 558 interrupts = <6>;
1014 clocks = <&clks 56>, <&clks 56>; 559 clocks = <&clks IMX5_CLK_SDMA_GATE>,
560 <&clks IMX5_CLK_SDMA_GATE>;
1015 clock-names = "ipg", "ahb"; 561 clock-names = "ipg", "ahb";
1016 #dma-cells = <3>; 562 #dma-cells = <3>;
1017 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin"; 563 fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin";
@@ -1023,7 +569,8 @@
1023 compatible = "fsl,imx53-cspi", "fsl,imx35-cspi"; 569 compatible = "fsl,imx53-cspi", "fsl,imx35-cspi";
1024 reg = <0x63fc0000 0x4000>; 570 reg = <0x63fc0000 0x4000>;
1025 interrupts = <38>; 571 interrupts = <38>;
1026 clocks = <&clks 55>, <&clks 55>; 572 clocks = <&clks IMX5_CLK_CSPI_IPG_GATE>,
573 <&clks IMX5_CLK_CSPI_IPG_GATE>;
1027 clock-names = "ipg", "per"; 574 clock-names = "ipg", "per";
1028 status = "disabled"; 575 status = "disabled";
1029 }; 576 };
@@ -1034,7 +581,7 @@
1034 compatible = "fsl,imx53-i2c", "fsl,imx21-i2c"; 581 compatible = "fsl,imx53-i2c", "fsl,imx21-i2c";
1035 reg = <0x63fc4000 0x4000>; 582 reg = <0x63fc4000 0x4000>;
1036 interrupts = <63>; 583 interrupts = <63>;
1037 clocks = <&clks 35>; 584 clocks = <&clks IMX5_CLK_I2C2_GATE>;
1038 status = "disabled"; 585 status = "disabled";
1039 }; 586 };
1040 587
@@ -1044,15 +591,16 @@
1044 compatible = "fsl,imx53-i2c", "fsl,imx21-i2c"; 591 compatible = "fsl,imx53-i2c", "fsl,imx21-i2c";
1045 reg = <0x63fc8000 0x4000>; 592 reg = <0x63fc8000 0x4000>;
1046 interrupts = <62>; 593 interrupts = <62>;
1047 clocks = <&clks 34>; 594 clocks = <&clks IMX5_CLK_I2C1_GATE>;
1048 status = "disabled"; 595 status = "disabled";
1049 }; 596 };
1050 597
1051 ssi1: ssi@63fcc000 { 598 ssi1: ssi@63fcc000 {
1052 compatible = "fsl,imx53-ssi", "fsl,imx21-ssi"; 599 compatible = "fsl,imx53-ssi", "fsl,imx51-ssi",
600 "fsl,imx21-ssi";
1053 reg = <0x63fcc000 0x4000>; 601 reg = <0x63fcc000 0x4000>;
1054 interrupts = <29>; 602 interrupts = <29>;
1055 clocks = <&clks 48>; 603 clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>;
1056 dmas = <&sdma 28 0 0>, 604 dmas = <&sdma 28 0 0>,
1057 <&sdma 29 0 0>; 605 <&sdma 29 0 0>;
1058 dma-names = "rx", "tx"; 606 dma-names = "rx", "tx";
@@ -1071,15 +619,16 @@
1071 compatible = "fsl,imx53-nand"; 619 compatible = "fsl,imx53-nand";
1072 reg = <0x63fdb000 0x1000 0xf7ff0000 0x10000>; 620 reg = <0x63fdb000 0x1000 0xf7ff0000 0x10000>;
1073 interrupts = <8>; 621 interrupts = <8>;
1074 clocks = <&clks 60>; 622 clocks = <&clks IMX5_CLK_NFC_GATE>;
1075 status = "disabled"; 623 status = "disabled";
1076 }; 624 };
1077 625
1078 ssi3: ssi@63fe8000 { 626 ssi3: ssi@63fe8000 {
1079 compatible = "fsl,imx53-ssi", "fsl,imx21-ssi"; 627 compatible = "fsl,imx53-ssi", "fsl,imx51-ssi",
628 "fsl,imx21-ssi";
1080 reg = <0x63fe8000 0x4000>; 629 reg = <0x63fe8000 0x4000>;
1081 interrupts = <96>; 630 interrupts = <96>;
1082 clocks = <&clks 50>; 631 clocks = <&clks IMX5_CLK_SSI3_IPG_GATE>;
1083 dmas = <&sdma 46 0 0>, 632 dmas = <&sdma 46 0 0>,
1084 <&sdma 47 0 0>; 633 <&sdma 47 0 0>;
1085 dma-names = "rx", "tx"; 634 dma-names = "rx", "tx";
@@ -1092,7 +641,9 @@
1092 compatible = "fsl,imx53-fec", "fsl,imx25-fec"; 641 compatible = "fsl,imx53-fec", "fsl,imx25-fec";
1093 reg = <0x63fec000 0x4000>; 642 reg = <0x63fec000 0x4000>;
1094 interrupts = <87>; 643 interrupts = <87>;
1095 clocks = <&clks 42>, <&clks 42>, <&clks 42>; 644 clocks = <&clks IMX5_CLK_FEC_GATE>,
645 <&clks IMX5_CLK_FEC_GATE>,
646 <&clks IMX5_CLK_FEC_GATE>;
1096 clock-names = "ipg", "ahb", "ptp"; 647 clock-names = "ipg", "ahb", "ptp";
1097 status = "disabled"; 648 status = "disabled";
1098 }; 649 };
@@ -1101,7 +652,8 @@
1101 compatible = "fsl,imx53-tve"; 652 compatible = "fsl,imx53-tve";
1102 reg = <0x63ff0000 0x1000>; 653 reg = <0x63ff0000 0x1000>;
1103 interrupts = <92>; 654 interrupts = <92>;
1104 clocks = <&clks 69>, <&clks 116>; 655 clocks = <&clks IMX5_CLK_TVE_GATE>,
656 <&clks IMX5_CLK_IPU_DI1_SEL>;
1105 clock-names = "tve", "di_sel"; 657 clock-names = "tve", "di_sel";
1106 crtcs = <&ipu 1>; 658 crtcs = <&ipu 1>;
1107 status = "disabled"; 659 status = "disabled";
@@ -1111,7 +663,8 @@
1111 compatible = "fsl,imx53-vpu"; 663 compatible = "fsl,imx53-vpu";
1112 reg = <0x63ff4000 0x1000>; 664 reg = <0x63ff4000 0x1000>;
1113 interrupts = <9>; 665 interrupts = <9>;
1114 clocks = <&clks 63>, <&clks 63>; 666 clocks = <&clks IMX5_CLK_VPU_GATE>,
667 <&clks IMX5_CLK_VPU_GATE>;
1115 clock-names = "per", "ahb"; 668 clock-names = "per", "ahb";
1116 iram = <&ocram>; 669 iram = <&ocram>;
1117 status = "disabled"; 670 status = "disabled";
@@ -1121,7 +674,7 @@
1121 ocram: sram@f8000000 { 674 ocram: sram@f8000000 {
1122 compatible = "mmio-sram"; 675 compatible = "mmio-sram";
1123 reg = <0xf8000000 0x20000>; 676 reg = <0xf8000000 0x20000>;
1124 clocks = <&clks 186>; 677 clocks = <&clks IMX5_CLK_OCRAM>;
1125 }; 678 };
1126 }; 679 };
1127}; 680};
diff --git a/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts b/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts
new file mode 100644
index 000000000000..994f96a3fb54
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts
@@ -0,0 +1,23 @@
1/*
2 * Copyright 2013 Sascha Hauer <s.hauer@pengutronix.de>
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12#ifndef __DTS_V1__
13#define __DTS_V1__
14/dts-v1/;
15#endif
16
17#include "imx6dl.dtsi"
18#include "imx6qdl-dfi-fs700-m60.dtsi"
19
20/ {
21 model = "DFI FS700-M60-6DL i.MX6dl Q7 Board";
22 compatible = "dfi,fs700-m60-6dl", "dfi,fs700e-m60", "fsl,imx6dl";
23};
diff --git a/arch/arm/boot/dts/imx6dl-gw51xx.dts b/arch/arm/boot/dts/imx6dl-gw51xx.dts
new file mode 100644
index 000000000000..4bd055f4c930
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw51xx.dts
@@ -0,0 +1,19 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6dl.dtsi"
14#include "imx6qdl-gw51xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 DualLite GW51XX";
18 compatible = "gw,imx6dl-gw51xx", "gw,ventana", "fsl,imx6dl";
19};
diff --git a/arch/arm/boot/dts/imx6dl-gw52xx.dts b/arch/arm/boot/dts/imx6dl-gw52xx.dts
new file mode 100644
index 000000000000..c9136058f15e
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw52xx.dts
@@ -0,0 +1,19 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6dl.dtsi"
14#include "imx6qdl-gw52xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 DualLite GW52XX";
18 compatible = "gw,imx6dl-gw52xx", "gw,ventana", "fsl,imx6dl";
19};
diff --git a/arch/arm/boot/dts/imx6dl-gw53xx.dts b/arch/arm/boot/dts/imx6dl-gw53xx.dts
new file mode 100644
index 000000000000..61818a14fde6
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw53xx.dts
@@ -0,0 +1,19 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6dl.dtsi"
14#include "imx6qdl-gw53xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 DualLite GW53XX";
18 compatible = "gw,imx6dl-gw53xx", "gw,ventana", "fsl,imx6dl";
19};
diff --git a/arch/arm/boot/dts/imx6dl-gw54xx.dts b/arch/arm/boot/dts/imx6dl-gw54xx.dts
new file mode 100644
index 000000000000..ab38b6770a06
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-gw54xx.dts
@@ -0,0 +1,19 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6dl.dtsi"
14#include "imx6qdl-gw54xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 DualLite GW54XX";
18 compatible = "gw,imx6dl-gw54xx", "gw,ventana", "fsl,imx6dl";
19};
diff --git a/arch/arm/boot/dts/imx6dl-nitrogen6x.dts b/arch/arm/boot/dts/imx6dl-nitrogen6x.dts
new file mode 100644
index 000000000000..5f4d33ccc4b3
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-nitrogen6x.dts
@@ -0,0 +1,21 @@
1/*
2 * Copyright 2013 Boundary Devices, Inc.
3 * Copyright 2012 Freescale Semiconductor, Inc.
4 * Copyright 2011 Linaro Ltd.
5 *
6 * The code contained herein is licensed under the GNU General Public
7 * License. You may obtain a copy of the GNU General Public License
8 * Version 2 or later at the following locations:
9 *
10 * http://www.opensource.org/licenses/gpl-license.html
11 * http://www.gnu.org/copyleft/gpl.html
12 */
13
14/dts-v1/;
15#include "imx6dl.dtsi"
16#include "imx6qdl-nitrogen6x.dtsi"
17
18/ {
19 model = "Freescale i.MX6 DualLite Nitrogen6x Board";
20 compatible = "fsl,imx6dl-nitrogen6x", "fsl,imx6dl";
21};
diff --git a/arch/arm/boot/dts/imx6dl-pinfunc.h b/arch/arm/boot/dts/imx6dl-pinfunc.h
index b81a7a4ebab6..0ead323fdbd2 100644
--- a/arch/arm/boot/dts/imx6dl-pinfunc.h
+++ b/arch/arm/boot/dts/imx6dl-pinfunc.h
@@ -755,6 +755,7 @@
755#define MX6QDL_PAD_GPIO_5__I2C3_SCL 0x230 0x600 0x878 0x6 0x2 755#define MX6QDL_PAD_GPIO_5__I2C3_SCL 0x230 0x600 0x878 0x6 0x2
756#define MX6QDL_PAD_GPIO_5__ARM_EVENTI 0x230 0x600 0x000 0x7 0x0 756#define MX6QDL_PAD_GPIO_5__ARM_EVENTI 0x230 0x600 0x000 0x7 0x0
757#define MX6QDL_PAD_GPIO_6__ESAI_TX_CLK 0x234 0x604 0x840 0x0 0x1 757#define MX6QDL_PAD_GPIO_6__ESAI_TX_CLK 0x234 0x604 0x840 0x0 0x1
758#define MX6QDL_PAD_GPIO_6__ENET_IRQ 0x234 0x604 0x03c 0x11 0xff000609
758#define MX6QDL_PAD_GPIO_6__I2C3_SDA 0x234 0x604 0x87c 0x2 0x2 759#define MX6QDL_PAD_GPIO_6__I2C3_SDA 0x234 0x604 0x87c 0x2 0x2
759#define MX6QDL_PAD_GPIO_6__GPIO1_IO06 0x234 0x604 0x000 0x5 0x0 760#define MX6QDL_PAD_GPIO_6__GPIO1_IO06 0x234 0x604 0x000 0x5 0x0
760#define MX6QDL_PAD_GPIO_6__SD2_LCTL 0x234 0x604 0x000 0x6 0x0 761#define MX6QDL_PAD_GPIO_6__SD2_LCTL 0x234 0x604 0x000 0x6 0x0
@@ -950,6 +951,7 @@
950#define MX6QDL_PAD_RGMII_TXC__GPIO6_IO19 0x2d8 0x6c0 0x000 0x5 0x0 951#define MX6QDL_PAD_RGMII_TXC__GPIO6_IO19 0x2d8 0x6c0 0x000 0x5 0x0
951#define MX6QDL_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M 0x2d8 0x6c0 0x000 0x7 0x0 952#define MX6QDL_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M 0x2d8 0x6c0 0x000 0x7 0x0
952#define MX6QDL_PAD_SD1_CLK__SD1_CLK 0x2dc 0x6c4 0x928 0x0 0x1 953#define MX6QDL_PAD_SD1_CLK__SD1_CLK 0x2dc 0x6c4 0x928 0x0 0x1
954#define MX6QDL_PAD_SD1_CLK__OSC32K_32K_OUT 0x2dc 0x6c4 0x000 0x2 0x0
953#define MX6QDL_PAD_SD1_CLK__GPT_CLKIN 0x2dc 0x6c4 0x000 0x3 0x0 955#define MX6QDL_PAD_SD1_CLK__GPT_CLKIN 0x2dc 0x6c4 0x000 0x3 0x0
954#define MX6QDL_PAD_SD1_CLK__GPIO1_IO20 0x2dc 0x6c4 0x000 0x5 0x0 956#define MX6QDL_PAD_SD1_CLK__GPIO1_IO20 0x2dc 0x6c4 0x000 0x5 0x0
955#define MX6QDL_PAD_SD1_CMD__SD1_CMD 0x2e0 0x6c8 0x000 0x0 0x0 957#define MX6QDL_PAD_SD1_CMD__SD1_CMD 0x2e0 0x6c8 0x000 0x0 0x0
diff --git a/arch/arm/boot/dts/imx6dl-sabrelite.dts b/arch/arm/boot/dts/imx6dl-sabrelite.dts
new file mode 100644
index 000000000000..2de04479dc35
--- /dev/null
+++ b/arch/arm/boot/dts/imx6dl-sabrelite.dts
@@ -0,0 +1,20 @@
1/*
2 * Copyright 2011 Freescale Semiconductor, Inc.
3 * Copyright 2011 Linaro Ltd.
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13/dts-v1/;
14#include "imx6dl.dtsi"
15#include "imx6qdl-sabrelite.dtsi"
16
17/ {
18 model = "Freescale i.MX6 DualLite SABRE Lite Board";
19 compatible = "fsl,imx6dl-sabrelite", "fsl,imx6dl";
20};
diff --git a/arch/arm/boot/dts/imx6dl.dtsi b/arch/arm/boot/dts/imx6dl.dtsi
index 9e8ae118fdd4..9c4942f2817a 100644
--- a/arch/arm/boot/dts/imx6dl.dtsi
+++ b/arch/arm/boot/dts/imx6dl.dtsi
@@ -8,6 +8,7 @@
8 * 8 *
9 */ 9 */
10 10
11#include <dt-bindings/interrupt-controller/irq.h>
11#include "imx6dl-pinfunc.h" 12#include "imx6dl-pinfunc.h"
12#include "imx6qdl.dtsi" 13#include "imx6qdl.dtsi"
13 14
@@ -21,6 +22,26 @@
21 device_type = "cpu"; 22 device_type = "cpu";
22 reg = <0>; 23 reg = <0>;
23 next-level-cache = <&L2>; 24 next-level-cache = <&L2>;
25 operating-points = <
26 /* kHz uV */
27 996000 1275000
28 792000 1175000
29 396000 1075000
30 >;
31 fsl,soc-operating-points = <
32 /* ARM kHz SOC-PU uV */
33 996000 1175000
34 792000 1175000
35 396000 1175000
36 >;
37 clock-latency = <61036>; /* two CLK32 periods */
38 clocks = <&clks 104>, <&clks 6>, <&clks 16>,
39 <&clks 17>, <&clks 170>;
40 clock-names = "arm", "pll2_pfd2_396m", "step",
41 "pll1_sw", "pll1_sys";
42 arm-supply = <&reg_arm>;
43 pu-supply = <&reg_pu>;
44 soc-supply = <&reg_soc>;
24 }; 45 };
25 46
26 cpu@1 { 47 cpu@1 {
@@ -45,17 +66,17 @@
45 66
46 pxp: pxp@020f0000 { 67 pxp: pxp@020f0000 {
47 reg = <0x020f0000 0x4000>; 68 reg = <0x020f0000 0x4000>;
48 interrupts = <0 98 0x04>; 69 interrupts = <0 98 IRQ_TYPE_LEVEL_HIGH>;
49 }; 70 };
50 71
51 epdc: epdc@020f4000 { 72 epdc: epdc@020f4000 {
52 reg = <0x020f4000 0x4000>; 73 reg = <0x020f4000 0x4000>;
53 interrupts = <0 97 0x04>; 74 interrupts = <0 97 IRQ_TYPE_LEVEL_HIGH>;
54 }; 75 };
55 76
56 lcdif: lcdif@020f8000 { 77 lcdif: lcdif@020f8000 {
57 reg = <0x020f8000 0x4000>; 78 reg = <0x020f8000 0x4000>;
58 interrupts = <0 39 0x04>; 79 interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
59 }; 80 };
60 }; 81 };
61 82
@@ -65,7 +86,7 @@
65 #size-cells = <0>; 86 #size-cells = <0>;
66 compatible = "fsl,imx1-i2c"; 87 compatible = "fsl,imx1-i2c";
67 reg = <0x021f8000 0x4000>; 88 reg = <0x021f8000 0x4000>;
68 interrupts = <0 35 0x04>; 89 interrupts = <0 35 IRQ_TYPE_LEVEL_HIGH>;
69 status = "disabled"; 90 status = "disabled";
70 }; 91 };
71 }; 92 };
diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts
index edf1bd967164..78df05e9d1ce 100644
--- a/arch/arm/boot/dts/imx6q-arm2.dts
+++ b/arch/arm/boot/dts/imx6q-arm2.dts
@@ -23,14 +23,27 @@
23 23
24 regulators { 24 regulators {
25 compatible = "simple-bus"; 25 compatible = "simple-bus";
26 #address-cells = <1>;
27 #size-cells = <0>;
26 28
27 reg_3p3v: 3p3v { 29 reg_3p3v: regulator@0 {
28 compatible = "regulator-fixed"; 30 compatible = "regulator-fixed";
31 reg = <0>;
29 regulator-name = "3P3V"; 32 regulator-name = "3P3V";
30 regulator-min-microvolt = <3300000>; 33 regulator-min-microvolt = <3300000>;
31 regulator-max-microvolt = <3300000>; 34 regulator-max-microvolt = <3300000>;
32 regulator-always-on; 35 regulator-always-on;
33 }; 36 };
37
38 reg_usb_otg_vbus: regulator@1 {
39 compatible = "regulator-fixed";
40 reg = <1>;
41 regulator-name = "usb_otg_vbus";
42 regulator-min-microvolt = <5000000>;
43 regulator-max-microvolt = <5000000>;
44 gpio = <&gpio3 22 0>;
45 enable-active-high;
46 };
34 }; 47 };
35 48
36 leds { 49 leds {
@@ -46,7 +59,7 @@
46 59
47&gpmi { 60&gpmi {
48 pinctrl-names = "default"; 61 pinctrl-names = "default";
49 pinctrl-0 = <&pinctrl_gpmi_nand_1>; 62 pinctrl-0 = <&pinctrl_gpmi_nand>;
50 status = "disabled"; /* gpmi nand conflicts with SD */ 63 status = "disabled"; /* gpmi nand conflicts with SD */
51}; 64};
52 65
@@ -54,28 +67,131 @@
54 pinctrl-names = "default"; 67 pinctrl-names = "default";
55 pinctrl-0 = <&pinctrl_hog>; 68 pinctrl-0 = <&pinctrl_hog>;
56 69
57 hog { 70 imx6q-arm2 {
58 pinctrl_hog: hoggrp { 71 pinctrl_hog: hoggrp {
59 fsl,pins = < 72 fsl,pins = <
60 MX6QDL_PAD_EIM_D25__GPIO3_IO25 0x80000000 73 MX6QDL_PAD_EIM_D25__GPIO3_IO25 0x80000000
61 >; 74 >;
62 }; 75 };
63 };
64 76
65 arm2 { 77 pinctrl_enet: enetgrp {
66 pinctrl_usdhc3_arm2: usdhc3grp-arm2 { 78 fsl,pins = <
79 MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0
80 MX6QDL_PAD_KEY_COL2__ENET_MDC 0x1b0b0
81 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
82 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
83 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
84 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
85 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
86 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
87 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
88 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
89 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
90 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
91 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
92 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
93 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
94 MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1
95 >;
96 };
97
98 pinctrl_gpmi_nand: gpminandgrp {
99 fsl,pins = <
100 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
101 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
102 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
103 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
104 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
105 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
106 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
107 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
108 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
109 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
110 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
111 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
112 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
113 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
114 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
115 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
116 MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1
117 >;
118 };
119
120 pinctrl_uart2: uart2grp {
121 fsl,pins = <
122 MX6QDL_PAD_EIM_D26__UART2_RX_DATA 0x1b0b1
123 MX6QDL_PAD_EIM_D27__UART2_TX_DATA 0x1b0b1
124 MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B 0x1b0b1
125 MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B 0x1b0b1
126 >;
127 };
128
129 pinctrl_uart4: uart4grp {
130 fsl,pins = <
131 MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
132 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
133 >;
134 };
135
136 pinctrl_usbotg: usbotggrp {
137 fsl,pins = <
138 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
139 >;
140 };
141
142 pinctrl_usdhc3: usdhc3grp {
143 fsl,pins = <
144 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
145 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
146 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
147 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
148 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
149 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
150 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
151 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
152 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
153 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
154 >;
155 };
156
157 pinctrl_usdhc3_cdwp: usdhc3cdwp {
67 fsl,pins = < 158 fsl,pins = <
68 MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000 159 MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000
69 MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000 160 MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000
70 >; 161 >;
71 }; 162 };
163
164 pinctrl_usdhc4: usdhc4grp {
165 fsl,pins = <
166 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
167 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
168 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
169 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
170 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
171 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
172 MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
173 MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
174 MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
175 MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
176 >;
177 };
72 }; 178 };
73}; 179};
74 180
75&fec { 181&fec {
76 pinctrl-names = "default"; 182 pinctrl-names = "default";
77 pinctrl-0 = <&pinctrl_enet_2>; 183 pinctrl-0 = <&pinctrl_enet>;
78 phy-mode = "rgmii"; 184 phy-mode = "rgmii";
185 interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
186 <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
187 status = "okay";
188};
189
190&usbotg {
191 vbus-supply = <&reg_usb_otg_vbus>;
192 pinctrl-names = "default";
193 pinctrl-0 = <&pinctrl_usbotg>;
194 disable-over-current;
79 status = "okay"; 195 status = "okay";
80}; 196};
81 197
@@ -84,8 +200,8 @@
84 wp-gpios = <&gpio6 14 0>; 200 wp-gpios = <&gpio6 14 0>;
85 vmmc-supply = <&reg_3p3v>; 201 vmmc-supply = <&reg_3p3v>;
86 pinctrl-names = "default"; 202 pinctrl-names = "default";
87 pinctrl-0 = <&pinctrl_usdhc3_1 203 pinctrl-0 = <&pinctrl_usdhc3
88 &pinctrl_usdhc3_arm2>; 204 &pinctrl_usdhc3_cdwp>;
89 status = "okay"; 205 status = "okay";
90}; 206};
91 207
@@ -93,13 +209,13 @@
93 non-removable; 209 non-removable;
94 vmmc-supply = <&reg_3p3v>; 210 vmmc-supply = <&reg_3p3v>;
95 pinctrl-names = "default"; 211 pinctrl-names = "default";
96 pinctrl-0 = <&pinctrl_usdhc4_1>; 212 pinctrl-0 = <&pinctrl_usdhc4>;
97 status = "okay"; 213 status = "okay";
98}; 214};
99 215
100&uart2 { 216&uart2 {
101 pinctrl-names = "default"; 217 pinctrl-names = "default";
102 pinctrl-0 = <&pinctrl_uart2_2>; 218 pinctrl-0 = <&pinctrl_uart2>;
103 fsl,dte-mode; 219 fsl,dte-mode;
104 fsl,uart-has-rtscts; 220 fsl,uart-has-rtscts;
105 status = "okay"; 221 status = "okay";
@@ -107,6 +223,6 @@
107 223
108&uart4 { 224&uart4 {
109 pinctrl-names = "default"; 225 pinctrl-names = "default";
110 pinctrl-0 = <&pinctrl_uart4_1>; 226 pinctrl-0 = <&pinctrl_uart4>;
111 status = "okay"; 227 status = "okay";
112}; 228};
diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
new file mode 100644
index 000000000000..99b46f8030ad
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
@@ -0,0 +1,107 @@
1/*
2 * Copyright 2013 CompuLab Ltd.
3 *
4 * Author: Valentin Raevsky <valentin@compulab.co.il>
5 *
6 * The code contained herein is licensed under the GNU General Public
7 * License. You may obtain a copy of the GNU General Public License
8 * Version 2 or later at the following locations:
9 *
10 * http://www.opensource.org/licenses/gpl-license.html
11 * http://www.gnu.org/copyleft/gpl.html
12 */
13
14/dts-v1/;
15#include "imx6q.dtsi"
16
17/ {
18 model = "CompuLab CM-FX6";
19 compatible = "compulab,cm-fx6", "fsl,imx6q";
20
21 memory {
22 reg = <0x10000000 0x80000000>;
23 };
24
25 leds {
26 compatible = "gpio-leds";
27
28 heartbeat-led {
29 label = "Heartbeat";
30 gpios = <&gpio2 31 0>;
31 linux,default-trigger = "heartbeat";
32 };
33 };
34};
35
36&fec {
37 pinctrl-names = "default";
38 pinctrl-0 = <&pinctrl_enet>;
39 phy-mode = "rgmii";
40 status = "okay";
41};
42
43&gpmi {
44 pinctrl-names = "default";
45 pinctrl-0 = <&pinctrl_gpmi_nand>;
46 status = "okay";
47};
48
49&iomuxc {
50 imx6q-cm-fx6 {
51 pinctrl_enet: enetgrp {
52 fsl,pins = <
53 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
54 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
55 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
56 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
57 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
58 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
59 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
60 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
61 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
62 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
63 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
64 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
65 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
66 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
67 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
68 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
69 >;
70 };
71
72 pinctrl_gpmi_nand: gpminandgrp {
73 fsl,pins = <
74 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
75 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
76 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
77 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
78 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
79 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
80 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
81 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
82 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
83 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
84 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
85 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
86 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
87 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
88 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
89 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
90 MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1
91 >;
92 };
93
94 pinctrl_uart4: uart4grp {
95 fsl,pins = <
96 MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
97 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
98 >;
99 };
100 };
101};
102
103&uart4 {
104 pinctrl-names = "default";
105 pinctrl-0 = <&pinctrl_uart4>;
106 status = "okay";
107};
diff --git a/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts b/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts
new file mode 100644
index 000000000000..fd0ad9a8866c
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts
@@ -0,0 +1,23 @@
1/*
2 * Copyright 2013 Sascha Hauer <s.hauer@pengutronix.de>
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12#ifndef __DTS_V1__
13#define __DTS_V1__
14/dts-v1/;
15#endif
16
17#include "imx6q.dtsi"
18#include "imx6qdl-dfi-fs700-m60.dtsi"
19
20/ {
21 model = "DFI FS700-M60-6QD i.MX6qd Q7 Board";
22 compatible = "dfi,fs700-m60-6qd", "dfi,fs700e-m60", "fsl,imx6q";
23};
diff --git a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
new file mode 100644
index 000000000000..a63bbb3d46bb
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
@@ -0,0 +1,372 @@
1/*
2 * Copyright 2013 Data Modul AG
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13
14#include <dt-bindings/gpio/gpio.h>
15#include "imx6q.dtsi"
16
17/ {
18 model = "Data Modul eDM-QMX6 Board";
19 compatible = "dmo,imx6q-edmqmx6", "fsl,imx6q";
20
21 aliases {
22 gpio7 = &stmpe_gpio;
23 };
24
25 memory {
26 reg = <0x10000000 0x80000000>;
27 };
28
29 regulators {
30 compatible = "simple-bus";
31 #address-cells = <1>;
32 #size-cells = <0>;
33
34 reg_3p3v: regulator@0 {
35 compatible = "regulator-fixed";
36 reg = <0>;
37 regulator-name = "3P3V";
38 regulator-min-microvolt = <3300000>;
39 regulator-max-microvolt = <3300000>;
40 regulator-always-on;
41 };
42
43 reg_usb_otg_vbus: regulator@1 {
44 compatible = "regulator-fixed";
45 reg = <1>;
46 regulator-name = "usb_otg_vbus";
47 regulator-min-microvolt = <5000000>;
48 regulator-max-microvolt = <5000000>;
49 gpio = <&gpio7 12 0>;
50 };
51
52 reg_usb_host1: regulator@2 {
53 compatible = "regulator-fixed";
54 reg = <2>;
55 regulator-name = "usb_host1_en";
56 regulator-min-microvolt = <3300000>;
57 regulator-max-microvolt = <3300000>;
58 gpio = <&gpio3 31 0>;
59 enable-active-high;
60 };
61 };
62
63 gpio-leds {
64 compatible = "gpio-leds";
65
66 led-blue {
67 label = "blue";
68 gpios = <&stmpe_gpio 8 GPIO_ACTIVE_HIGH>;
69 linux,default-trigger = "heartbeat";
70 };
71
72 led-green {
73 label = "green";
74 gpios = <&stmpe_gpio 9 GPIO_ACTIVE_HIGH>;
75 };
76
77 led-pink {
78 label = "pink";
79 gpios = <&stmpe_gpio 10 GPIO_ACTIVE_HIGH>;
80 };
81
82 led-red {
83 label = "red";
84 gpios = <&stmpe_gpio 11 GPIO_ACTIVE_HIGH>;
85 };
86 };
87};
88
89&fec {
90 pinctrl-names = "default";
91 pinctrl-0 = <&pinctrl_enet>;
92 phy-mode = "rgmii";
93 phy-reset-gpios = <&gpio3 23 0>;
94 phy-supply = <&vgen2_1v2_eth>;
95 status = "okay";
96};
97
98&i2c2 {
99 clock-frequency = <100000>;
100 pinctrl-names = "default";
101 pinctrl-0 = <&pinctrl_i2c2
102 &pinctrl_stmpe>;
103 status = "okay";
104
105 pmic: pfuze100@08 {
106 compatible = "fsl,pfuze100";
107 reg = <0x08>;
108 interrupt-parent = <&gpio3>;
109 interrupts = <20 8>;
110
111 regulators {
112 sw1a_reg: sw1ab {
113 regulator-min-microvolt = <300000>;
114 regulator-max-microvolt = <1875000>;
115 regulator-boot-on;
116 regulator-always-on;
117 };
118
119 sw1c_reg: sw1c {
120 regulator-min-microvolt = <300000>;
121 regulator-max-microvolt = <1875000>;
122 regulator-boot-on;
123 regulator-always-on;
124 };
125
126 sw2_reg: sw2 {
127 regulator-min-microvolt = <800000>;
128 regulator-max-microvolt = <3300000>;
129 regulator-boot-on;
130 regulator-always-on;
131 };
132
133 sw3a_reg: sw3a {
134 regulator-min-microvolt = <400000>;
135 regulator-max-microvolt = <1975000>;
136 regulator-boot-on;
137 regulator-always-on;
138 };
139
140 sw3b_reg: sw3b {
141 regulator-min-microvolt = <400000>;
142 regulator-max-microvolt = <1975000>;
143 regulator-boot-on;
144 regulator-always-on;
145 };
146
147 sw4_reg: sw4 {
148 regulator-min-microvolt = <400000>;
149 regulator-max-microvolt = <1975000>;
150 regulator-always-on;
151 };
152
153 swbst_reg: swbst {
154 regulator-min-microvolt = <5000000>;
155 regulator-max-microvolt = <5150000>;
156 regulator-always-on;
157 };
158
159 snvs_reg: vsnvs {
160 regulator-min-microvolt = <1000000>;
161 regulator-max-microvolt = <3000000>;
162 regulator-boot-on;
163 regulator-always-on;
164 };
165
166 vref_reg: vrefddr {
167 regulator-boot-on;
168 regulator-always-on;
169 };
170
171 vgen1_reg: vgen1 {
172 regulator-min-microvolt = <800000>;
173 regulator-max-microvolt = <1550000>;
174 };
175
176 vgen2_1v2_eth: vgen2 {
177 regulator-min-microvolt = <800000>;
178 regulator-max-microvolt = <1550000>;
179 };
180
181 vdd_high_in: vgen3 {
182 regulator-min-microvolt = <1800000>;
183 regulator-max-microvolt = <3300000>;
184 regulator-boot-on;
185 regulator-always-on;
186 };
187
188 vgen4_reg: vgen4 {
189 regulator-min-microvolt = <1800000>;
190 regulator-max-microvolt = <3300000>;
191 regulator-always-on;
192 };
193
194 vgen5_reg: vgen5 {
195 regulator-min-microvolt = <1800000>;
196 regulator-max-microvolt = <3300000>;
197 regulator-always-on;
198 };
199
200 vgen6_reg: vgen6 {
201 regulator-min-microvolt = <1800000>;
202 regulator-max-microvolt = <3300000>;
203 regulator-always-on;
204 };
205 };
206 };
207
208 stmpe: stmpe1601@40 {
209 compatible = "st,stmpe1601";
210 reg = <0x40>;
211 interrupts = <30 0>;
212 interrupt-parent = <&gpio3>;
213
214 stmpe_gpio: stmpe_gpio {
215 #gpio-cells = <2>;
216 compatible = "st,stmpe-gpio";
217 };
218 };
219
220 temp1: ad7414@4c {
221 compatible = "ad,ad7414";
222 reg = <0x4c>;
223 };
224
225 temp2: ad7414@4d {
226 compatible = "ad,ad7414";
227 reg = <0x4d>;
228 };
229
230 rtc: m41t62@68 {
231 compatible = "stm,m41t62";
232 reg = <0x68>;
233 };
234};
235
236&iomuxc {
237 pinctrl-names = "default";
238 pinctrl-0 = <&pinctrl_hog>;
239
240 imx6q-dmo-edmqmx6 {
241 pinctrl_hog: hoggrp {
242 fsl,pins = <
243 MX6QDL_PAD_EIM_A16__GPIO2_IO22 0x80000000
244 MX6QDL_PAD_EIM_A17__GPIO2_IO21 0x80000000
245 >;
246 };
247
248 pinctrl_enet: enetgrp {
249 fsl,pins = <
250 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
251 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
252 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
253 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
254 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
255 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
256 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
257 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
258 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
259 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
260 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
261 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
262 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
263 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
264 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
265 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
266 >;
267 };
268
269 pinctrl_i2c2: i2c2grp {
270 fsl,pins = <
271 MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
272 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
273 >;
274 };
275
276 pinctrl_stmpe: stmpegrp {
277 fsl,pins = <MX6QDL_PAD_EIM_D30__GPIO3_IO30 0x80000000>;
278 };
279
280 pinctrl_uart1: uart1grp {
281 fsl,pins = <
282 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
283 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
284 >;
285 };
286
287 pinctrl_uart2: uart2grp {
288 fsl,pins = <
289 MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
290 MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
291 >;
292 };
293
294 pinctrl_usbotg: usbotggrp {
295 fsl,pins = <
296 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
297 >;
298 };
299
300 pinctrl_usdhc3: usdhc3grp {
301 fsl,pins = <
302 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
303 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
304 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
305 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
306 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
307 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
308 >;
309 };
310
311 pinctrl_usdhc4: usdhc4grp {
312 fsl,pins = <
313 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
314 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
315 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
316 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
317 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
318 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
319 MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
320 MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
321 MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
322 MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
323 >;
324 };
325 };
326};
327
328&sata {
329 status = "okay";
330};
331
332&uart1 {
333 pinctrl-names = "default";
334 pinctrl-0 = <&pinctrl_uart1>;
335 status = "okay";
336};
337
338&uart2 {
339 pinctrl-names = "default";
340 pinctrl-0 = <&pinctrl_uart2>;
341 status = "okay";
342};
343
344&usbh1 {
345 vbus-supply = <&reg_usb_host1>;
346 disable-over-current;
347 status = "okay";
348};
349
350&usbotg {
351 vbus-supply = <&reg_usb_otg_vbus>;
352 pinctrl-names = "default";
353 pinctrl-0 = <&pinctrl_usbotg>;
354 disable-over-current;
355 status = "okay";
356};
357
358&usdhc3 {
359 pinctrl-names = "default";
360 pinctrl-0 = <&pinctrl_usdhc3>;
361 vmmc-supply = <&reg_3p3v>;
362 status = "okay";
363};
364
365&usdhc4 {
366 pinctrl-names = "default";
367 pinctrl-0 = <&pinctrl_usdhc4>;
368 vmmc-supply = <&reg_3p3v>;
369 non-removable;
370 bus-width = <8>;
371 status = "okay";
372};
diff --git a/arch/arm/boot/dts/imx6q-gk802.dts b/arch/arm/boot/dts/imx6q-gk802.dts
new file mode 100644
index 000000000000..4a9b4dc9afc0
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gk802.dts
@@ -0,0 +1,171 @@
1/*
2 * Copyright (C) 2013 Philipp Zabel
3 *
4 * This file is licensed under the terms of the GNU General Public License
5 * version 2. This program is licensed "as is" without any warranty of any
6 * kind, whether express or implied.
7 */
8
9/dts-v1/;
10#include "imx6q.dtsi"
11
12/ {
13 model = "Zealz GK802";
14 compatible = "zealz,imx6q-gk802", "fsl,imx6q";
15
16 chosen {
17 linux,stdout-path = &uart4;
18 };
19
20 memory {
21 reg = <0x10000000 0x40000000>;
22 };
23
24 regulators {
25 compatible = "simple-bus";
26 #address-cells = <1>;
27 #size-cells = <0>;
28
29 reg_3p3v: regulator@0 {
30 compatible = "regulator-fixed";
31 reg = <0>;
32 regulator-name = "3P3V";
33 regulator-min-microvolt = <3300000>;
34 regulator-max-microvolt = <3300000>;
35 regulator-always-on;
36 };
37 };
38
39 gpio-keys {
40 compatible = "gpio-keys";
41
42 recovery-button {
43 label = "recovery";
44 gpios = <&gpio3 16 1>;
45 linux,code = <0x198>; /* KEY_RESTART */
46 gpio-key,wakeup;
47 };
48 };
49};
50
51/* Internal I2C */
52&i2c2 {
53 pinctrl-names = "default";
54 pinctrl-0 = <&pinctrl_i2c2>;
55 clock-frequency = <100000>;
56 status = "okay";
57
58 /* SDMC DM2016 1024 bit EEPROM + 128 bit OTP */
59 eeprom: dm2016@51 {
60 compatible = "sdmc,dm2016";
61 reg = <0x51>;
62 };
63};
64
65/* External I2C via HDMI */
66&i2c3 {
67 pinctrl-names = "default";
68 pinctrl-0 = <&pinctrl_i2c3>;
69 clock-frequency = <100000>;
70 status = "okay";
71};
72
73&iomuxc {
74 pinctrl-names = "default";
75 pinctrl-0 = <&pinctrl_hog>;
76
77 imx6q-gk802 {
78 pinctrl_hog: hoggrp {
79 fsl,pins = <
80 /* Recovery button, active-low */
81 MX6QDL_PAD_EIM_D16__GPIO3_IO16 0x100b1
82 /* RTL8192CU enable GPIO, active-low */
83 MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x1b0b0
84 >;
85 };
86
87 pinctrl_i2c2: i2c2grp {
88 fsl,pins = <
89 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
90 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
91 >;
92 };
93
94 pinctrl_i2c3: i2c3grp {
95 fsl,pins = <
96 MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1
97 MX6QDL_PAD_GPIO_16__I2C3_SDA 0x4001b8b1
98 >;
99 };
100
101 pinctrl_uart4: uart4grp {
102 fsl,pins = <
103 MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
104 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
105 >;
106 };
107
108 pinctrl_usdhc3: usdhc3grp {
109 fsl,pins = <
110 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
111 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
112 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
113 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
114 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
115 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
116 >;
117 };
118
119 pinctrl_usdhc4: usdhc4grp {
120 fsl,pins = <
121 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
122 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
123 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
124 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
125 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
126 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
127 >;
128 };
129 };
130};
131
132&uart2 {
133 status = "okay";
134};
135
136&uart4 {
137 pinctrl-names = "default";
138 pinctrl-0 = <&pinctrl_uart4>;
139 status = "okay";
140};
141
142/* External USB-A port (USBOTG) */
143&usbotg {
144 disable-over-current;
145 status = "okay";
146};
147
148/* Internal USB port (USBH1), connected to RTL8192CU */
149&usbh1 {
150 disable-over-current;
151 status = "okay";
152};
153
154/* External microSD */
155&usdhc3 {
156 pinctrl-names = "default";
157 pinctrl-0 = <&pinctrl_usdhc3>;
158 bus-width = <4>;
159 cd-gpios = <&gpio6 11 0>;
160 vmmc-supply = <&reg_3p3v>;
161 status = "okay";
162};
163
164/* Internal microSD */
165&usdhc4 {
166 pinctrl-names = "default";
167 pinctrl-0 = <&pinctrl_usdhc4>;
168 bus-width = <4>;
169 vmmc-supply = <&reg_3p3v>;
170 status = "okay";
171};
diff --git a/arch/arm/boot/dts/imx6q-gw51xx.dts b/arch/arm/boot/dts/imx6q-gw51xx.dts
new file mode 100644
index 000000000000..af4929aee075
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw51xx.dts
@@ -0,0 +1,19 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6q.dtsi"
14#include "imx6qdl-gw54xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 Quad GW51XX";
18 compatible = "gw,imx6q-gw51xx", "gw,ventana", "fsl,imx6q";
19};
diff --git a/arch/arm/boot/dts/imx6q-gw52xx.dts b/arch/arm/boot/dts/imx6q-gw52xx.dts
new file mode 100644
index 000000000000..5f71ddbc7f05
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw52xx.dts
@@ -0,0 +1,23 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6q.dtsi"
14#include "imx6qdl-gw52xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 Quad GW52XX";
18 compatible = "gw,imx6q-gw52xx", "gw,ventana", "fsl,imx6q";
19};
20
21&sata {
22 status = "okay";
23};
diff --git a/arch/arm/boot/dts/imx6q-gw53xx.dts b/arch/arm/boot/dts/imx6q-gw53xx.dts
new file mode 100644
index 000000000000..360c316b4740
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw53xx.dts
@@ -0,0 +1,23 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6q.dtsi"
14#include "imx6qdl-gw53xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 Quad GW53XX";
18 compatible = "gw,imx6q-gw53xx", "gw,ventana", "fsl,imx6q";
19};
20
21&sata {
22 status = "okay";
23};
diff --git a/arch/arm/boot/dts/imx6q-gw5400-a.dts b/arch/arm/boot/dts/imx6q-gw5400-a.dts
new file mode 100644
index 000000000000..902f98310481
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw5400-a.dts
@@ -0,0 +1,546 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6q.dtsi"
14
15/ {
16 model = "Gateworks Ventana GW5400-A";
17 compatible = "gw,imx6q-gw5400-a", "gw,ventana", "fsl,imx6q";
18
19 /* these are used by bootloader for disabling nodes */
20 aliases {
21 ethernet0 = &fec;
22 ethernet1 = &eth1;
23 i2c0 = &i2c1;
24 i2c1 = &i2c2;
25 i2c2 = &i2c3;
26 led0 = &led0;
27 led1 = &led1;
28 led2 = &led2;
29 sky2 = &eth1;
30 ssi0 = &ssi1;
31 spi0 = &ecspi1;
32 usb0 = &usbh1;
33 usb1 = &usbotg;
34 usdhc2 = &usdhc3;
35 };
36
37 chosen {
38 bootargs = "console=ttymxc1,115200";
39 };
40
41 leds {
42 compatible = "gpio-leds";
43
44 led0: user1 {
45 label = "user1";
46 gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */
47 default-state = "on";
48 linux,default-trigger = "heartbeat";
49 };
50
51 led1: user2 {
52 label = "user2";
53 gpios = <&gpio4 10 0>; /* 106 -> MX6_PANLEDR */
54 default-state = "off";
55 };
56
57 led2: user3 {
58 label = "user3";
59 gpios = <&gpio4 15 1>; /* 111 -> MX6_LOCLED# */
60 default-state = "off";
61 };
62 };
63
64 memory {
65 reg = <0x10000000 0x40000000>;
66 };
67
68 pps {
69 compatible = "pps-gpio";
70 gpios = <&gpio1 5 0>;
71 status = "okay";
72 };
73
74 regulators {
75 compatible = "simple-bus";
76 #address-cells = <1>;
77 #size-cells = <0>;
78
79 reg_1p0v: regulator@0 {
80 compatible = "regulator-fixed";
81 reg = <0>;
82 regulator-name = "1P0V";
83 regulator-min-microvolt = <1000000>;
84 regulator-max-microvolt = <1000000>;
85 regulator-always-on;
86 };
87
88 reg_3p3v: regulator@1 {
89 compatible = "regulator-fixed";
90 reg = <1>;
91 regulator-name = "3P3V";
92 regulator-min-microvolt = <3300000>;
93 regulator-max-microvolt = <3300000>;
94 regulator-always-on;
95 };
96
97 reg_usb_h1_vbus: regulator@2 {
98 compatible = "regulator-fixed";
99 reg = <2>;
100 regulator-name = "usb_h1_vbus";
101 regulator-min-microvolt = <5000000>;
102 regulator-max-microvolt = <5000000>;
103 regulator-always-on;
104 };
105
106 reg_usb_otg_vbus: regulator@3 {
107 compatible = "regulator-fixed";
108 reg = <3>;
109 regulator-name = "usb_otg_vbus";
110 regulator-min-microvolt = <5000000>;
111 regulator-max-microvolt = <5000000>;
112 gpio = <&gpio3 22 0>;
113 enable-active-high;
114 };
115 };
116
117 sound {
118 compatible = "fsl,imx6q-sabrelite-sgtl5000",
119 "fsl,imx-audio-sgtl5000";
120 model = "imx6q-sabrelite-sgtl5000";
121 ssi-controller = <&ssi1>;
122 audio-codec = <&codec>;
123 audio-routing =
124 "MIC_IN", "Mic Jack",
125 "Mic Jack", "Mic Bias",
126 "Headphone Jack", "HP_OUT";
127 mux-int-port = <1>;
128 mux-ext-port = <4>;
129 };
130};
131
132&audmux {
133 pinctrl-names = "default";
134 pinctrl-0 = <&pinctrl_audmux>;
135 status = "okay";
136};
137
138&ecspi1 {
139 fsl,spi-num-chipselects = <1>;
140 cs-gpios = <&gpio3 19 0>;
141 pinctrl-names = "default";
142 pinctrl-0 = <&pinctrl_ecspi1>;
143 status = "okay";
144
145 flash: m25p80@0 {
146 compatible = "sst,w25q256";
147 spi-max-frequency = <30000000>;
148 reg = <0>;
149 };
150};
151
152&fec {
153 pinctrl-names = "default";
154 pinctrl-0 = <&pinctrl_enet>;
155 phy-mode = "rgmii";
156 phy-reset-gpios = <&gpio1 30 0>;
157 status = "okay";
158};
159
160&i2c1 {
161 clock-frequency = <100000>;
162 pinctrl-names = "default";
163 pinctrl-0 = <&pinctrl_i2c1>;
164 status = "okay";
165
166 eeprom1: eeprom@50 {
167 compatible = "atmel,24c02";
168 reg = <0x50>;
169 pagesize = <16>;
170 };
171
172 eeprom2: eeprom@51 {
173 compatible = "atmel,24c02";
174 reg = <0x51>;
175 pagesize = <16>;
176 };
177
178 eeprom3: eeprom@52 {
179 compatible = "atmel,24c02";
180 reg = <0x52>;
181 pagesize = <16>;
182 };
183
184 eeprom4: eeprom@53 {
185 compatible = "atmel,24c02";
186 reg = <0x53>;
187 pagesize = <16>;
188 };
189
190 gpio: pca9555@23 {
191 compatible = "nxp,pca9555";
192 reg = <0x23>;
193 gpio-controller;
194 #gpio-cells = <2>;
195 };
196
197 hwmon: gsc@29 {
198 compatible = "gw,gsp";
199 reg = <0x29>;
200 };
201
202 rtc: ds1672@68 {
203 compatible = "dallas,ds1672";
204 reg = <0x68>;
205 };
206};
207
208&i2c2 {
209 clock-frequency = <100000>;
210 pinctrl-names = "default";
211 pinctrl-0 = <&pinctrl_i2c2>;
212 status = "okay";
213
214 pmic: pfuze100@08 {
215 compatible = "fsl,pfuze100";
216 reg = <0x08>;
217
218 regulators {
219 sw1a_reg: sw1ab {
220 regulator-min-microvolt = <300000>;
221 regulator-max-microvolt = <1875000>;
222 regulator-boot-on;
223 regulator-always-on;
224 regulator-ramp-delay = <6250>;
225 };
226
227 sw1c_reg: sw1c {
228 regulator-min-microvolt = <300000>;
229 regulator-max-microvolt = <1875000>;
230 regulator-boot-on;
231 regulator-always-on;
232 regulator-ramp-delay = <6250>;
233 };
234
235 sw2_reg: sw2 {
236 regulator-min-microvolt = <800000>;
237 regulator-max-microvolt = <3950000>;
238 regulator-boot-on;
239 regulator-always-on;
240 };
241
242 sw3a_reg: sw3a {
243 regulator-min-microvolt = <400000>;
244 regulator-max-microvolt = <1975000>;
245 regulator-boot-on;
246 regulator-always-on;
247 };
248
249 sw3b_reg: sw3b {
250 regulator-min-microvolt = <400000>;
251 regulator-max-microvolt = <1975000>;
252 regulator-boot-on;
253 regulator-always-on;
254 };
255
256 sw4_reg: sw4 {
257 regulator-min-microvolt = <800000>;
258 regulator-max-microvolt = <3300000>;
259 };
260
261 swbst_reg: swbst {
262 regulator-min-microvolt = <5000000>;
263 regulator-max-microvolt = <5150000>;
264 };
265
266 snvs_reg: vsnvs {
267 regulator-min-microvolt = <1000000>;
268 regulator-max-microvolt = <3000000>;
269 regulator-boot-on;
270 regulator-always-on;
271 };
272
273 vref_reg: vrefddr {
274 regulator-boot-on;
275 regulator-always-on;
276 };
277
278 vgen1_reg: vgen1 {
279 regulator-min-microvolt = <800000>;
280 regulator-max-microvolt = <1550000>;
281 };
282
283 vgen2_reg: vgen2 {
284 regulator-min-microvolt = <800000>;
285 regulator-max-microvolt = <1550000>;
286 };
287
288 vgen3_reg: vgen3 {
289 regulator-min-microvolt = <1800000>;
290 regulator-max-microvolt = <3300000>;
291 };
292
293 vgen4_reg: vgen4 {
294 regulator-min-microvolt = <1800000>;
295 regulator-max-microvolt = <3300000>;
296 regulator-always-on;
297 };
298
299 vgen5_reg: vgen5 {
300 regulator-min-microvolt = <1800000>;
301 regulator-max-microvolt = <3300000>;
302 regulator-always-on;
303 };
304
305 vgen6_reg: vgen6 {
306 regulator-min-microvolt = <1800000>;
307 regulator-max-microvolt = <3300000>;
308 regulator-always-on;
309 };
310 };
311 };
312
313 pciswitch: pex8609@3f {
314 compatible = "plx,pex8609";
315 reg = <0x3f>;
316 };
317
318 pciclkgen: si52147@6b {
319 compatible = "sil,si52147";
320 reg = <0x6b>;
321 };
322};
323
324&i2c3 {
325 clock-frequency = <100000>;
326 pinctrl-names = "default";
327 pinctrl-0 = <&pinctrl_i2c3>;
328 status = "okay";
329
330 accelerometer: mma8450@1c {
331 compatible = "fsl,mma8450";
332 reg = <0x1c>;
333 };
334
335 codec: sgtl5000@0a {
336 compatible = "fsl,sgtl5000";
337 reg = <0x0a>;
338 clocks = <&clks 201>;
339 VDDA-supply = <&sw4_reg>;
340 VDDIO-supply = <&reg_3p3v>;
341 };
342
343 hdmiin: adv7611@4c {
344 compatible = "adi,adv7611";
345 reg = <0x4c>;
346 };
347
348 touchscreen: egalax_ts@04 {
349 compatible = "eeti,egalax_ts";
350 reg = <0x04>;
351 interrupt-parent = <&gpio7>;
352 interrupts = <12 2>; /* gpio7_12 active low */
353 wakeup-gpios = <&gpio7 12 0>;
354 };
355
356 videoout: adv7393@2a {
357 compatible = "adi,adv7393";
358 reg = <0x2a>;
359 };
360
361 videoin: adv7180@20 {
362 compatible = "adi,adv7180";
363 reg = <0x20>;
364 };
365};
366
367&iomuxc {
368 pinctrl-names = "default";
369 pinctrl-0 = <&pinctrl_hog>;
370
371 imx6q-gw5400-a {
372 pinctrl_hog: hoggrp {
373 fsl,pins = <
374 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 /* OTG_PWR_EN */
375 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x80000000 /* SPINOR_CS0# */
376 MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 /* PCIE IRQ */
377 MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 /* PCIE RST */
378 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x000130b0 /* AUD4_MCK */
379 MX6QDL_PAD_GPIO_5__GPIO1_IO05 0x80000000 /* GPS_PPS */
380 MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 /* TOUCH_IRQ# */
381 MX6QDL_PAD_KEY_COL0__GPIO4_IO06 0x80000000 /* user1 led */
382 MX6QDL_PAD_KEY_COL2__GPIO4_IO10 0x80000000 /* user2 led */
383 MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000 /* user3 led */
384 MX6QDL_PAD_SD1_DAT0__GPIO1_IO16 0x80000000 /* USBHUB_RST# */
385 MX6QDL_PAD_SD1_DAT3__GPIO1_IO21 0x80000000 /* MIPI_DIO */
386 >;
387 };
388
389 pinctrl_audmux: audmuxgrp {
390 fsl,pins = <
391 MX6QDL_PAD_SD2_DAT0__AUD4_RXD 0x130b0
392 MX6QDL_PAD_SD2_DAT3__AUD4_TXC 0x130b0
393 MX6QDL_PAD_SD2_DAT2__AUD4_TXD 0x110b0
394 MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x130b0
395 >;
396 };
397
398 pinctrl_ecspi1: ecspi1grp {
399 fsl,pins = <
400 MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
401 MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
402 MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
403 >;
404 };
405
406 pinctrl_enet: enetgrp {
407 fsl,pins = <
408 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
409 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
410 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
411 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
412 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
413 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
414 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
415 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
416 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
417 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
418 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
419 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
420 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
421 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
422 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
423 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
424 >;
425 };
426
427 pinctrl_i2c1: i2c1grp {
428 fsl,pins = <
429 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
430 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
431 >;
432 };
433
434 pinctrl_i2c2: i2c2grp {
435 fsl,pins = <
436 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
437 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
438 >;
439 };
440
441 pinctrl_i2c3: i2c3grp {
442 fsl,pins = <
443 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
444 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
445 >;
446 };
447
448 pinctrl_uart1: uart1grp {
449 fsl,pins = <
450 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
451 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
452 >;
453 };
454
455 pinctrl_uart2: uart2grp {
456 fsl,pins = <
457 MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA 0x1b0b1
458 MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA 0x1b0b1
459 >;
460 };
461
462 pinctrl_uart5: uart5grp {
463 fsl,pins = <
464 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA 0x1b0b1
465 MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1
466 >;
467 };
468
469 pinctrl_usbotg: usbotggrp {
470 fsl,pins = <
471 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
472 >;
473 };
474
475 pinctrl_usdhc3: usdhc3grp {
476 fsl,pins = <
477 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
478 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
479 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
480 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
481 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
482 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
483 >;
484 };
485 };
486};
487
488&ldb {
489 status = "okay";
490 lvds-channel@0 {
491 crtcs = <&ipu1 0>, <&ipu1 1>, <&ipu2 0>, <&ipu2 1>;
492 };
493};
494
495&pcie {
496 reset-gpio = <&gpio1 29 0>;
497 status = "okay";
498
499 eth1: sky2@8 { /* MAC/PHY on bus 8 */
500 compatible = "marvell,sky2";
501 };
502};
503
504&ssi1 {
505 fsl,mode = "i2s-slave";
506 status = "okay";
507};
508
509&uart1 {
510 pinctrl-names = "default";
511 pinctrl-0 = <&pinctrl_uart1>;
512 status = "okay";
513};
514
515&uart2 {
516 pinctrl-names = "default";
517 pinctrl-0 = <&pinctrl_uart2>;
518 status = "okay";
519};
520
521&uart5 {
522 pinctrl-names = "default";
523 pinctrl-0 = <&pinctrl_uart5>;
524 status = "okay";
525};
526
527&usbotg {
528 vbus-supply = <&reg_usb_otg_vbus>;
529 pinctrl-names = "default";
530 pinctrl-0 = <&pinctrl_usbotg>;
531 disable-over-current;
532 status = "okay";
533};
534
535&usbh1 {
536 vbus-supply = <&reg_usb_h1_vbus>;
537 status = "okay";
538};
539
540&usdhc3 {
541 pinctrl-names = "default";
542 pinctrl-0 = <&pinctrl_usdhc3>;
543 cd-gpios = <&gpio7 0 0>;
544 vmmc-supply = <&reg_3p3v>;
545 status = "okay";
546};
diff --git a/arch/arm/boot/dts/imx6q-gw54xx.dts b/arch/arm/boot/dts/imx6q-gw54xx.dts
new file mode 100644
index 000000000000..ab518d66a75e
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-gw54xx.dts
@@ -0,0 +1,23 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/dts-v1/;
13#include "imx6q.dtsi"
14#include "imx6qdl-gw54xx.dtsi"
15
16/ {
17 model = "Gateworks Ventana i.MX6 Quad GW54XX";
18 compatible = "gw,imx6q-gw54xx", "gw,ventana", "fsl,imx6q";
19};
20
21&sata {
22 status = "okay";
23};
diff --git a/arch/arm/boot/dts/imx6q-nitrogen6x.dts b/arch/arm/boot/dts/imx6q-nitrogen6x.dts
new file mode 100644
index 000000000000..a57866b2e97e
--- /dev/null
+++ b/arch/arm/boot/dts/imx6q-nitrogen6x.dts
@@ -0,0 +1,25 @@
1/*
2 * Copyright 2013 Boundary Devices, Inc.
3 * Copyright 2012 Freescale Semiconductor, Inc.
4 * Copyright 2011 Linaro Ltd.
5 *
6 * The code contained herein is licensed under the GNU General Public
7 * License. You may obtain a copy of the GNU General Public License
8 * Version 2 or later at the following locations:
9 *
10 * http://www.opensource.org/licenses/gpl-license.html
11 * http://www.gnu.org/copyleft/gpl.html
12 */
13
14/dts-v1/;
15#include "imx6q.dtsi"
16#include "imx6qdl-nitrogen6x.dtsi"
17
18/ {
19 model = "Freescale i.MX6 Quad Nitrogen6x Board";
20 compatible = "fsl,imx6q-nitrogen6x", "fsl,imx6q";
21};
22
23&sata {
24 status = "okay";
25};
diff --git a/arch/arm/boot/dts/imx6q-phytec-pbab01.dts b/arch/arm/boot/dts/imx6q-phytec-pbab01.dts
index 7d37ec60d58d..5607c331fca8 100644
--- a/arch/arm/boot/dts/imx6q-phytec-pbab01.dts
+++ b/arch/arm/boot/dts/imx6q-phytec-pbab01.dts
@@ -21,10 +21,26 @@
21 status = "okay"; 21 status = "okay";
22}; 22};
23 23
24&gpmi {
25 status = "okay";
26};
27
28&sata {
29 status = "okay";
30};
31
24&uart4 { 32&uart4 {
25 status = "okay"; 33 status = "okay";
26}; 34};
27 35
36&usbh1 {
37 status = "okay";
38};
39
40&usbotg {
41 status = "okay";
42};
43
28&usdhc2 { 44&usdhc2 {
29 status = "okay"; 45 status = "okay";
30}; 46};
diff --git a/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi b/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi
index 1a3b50d4d8fa..324f1550976b 100644
--- a/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi
+++ b/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi
@@ -18,11 +18,35 @@
18 memory { 18 memory {
19 reg = <0x10000000 0x80000000>; 19 reg = <0x10000000 0x80000000>;
20 }; 20 };
21
22 regulators {
23 compatible = "simple-bus";
24 #address-cells = <1>;
25 #size-cells = <0>;
26
27 reg_usb_otg_vbus: regulator@0 {
28 compatible = "regulator-fixed";
29 reg = <0>;
30 regulator-name = "usb_otg_vbus";
31 regulator-min-microvolt = <5000000>;
32 regulator-max-microvolt = <5000000>;
33 gpio = <&gpio4 15 0>;
34 };
35
36 reg_usb_h1_vbus: regulator@1 {
37 compatible = "regulator-fixed";
38 reg = <1>;
39 regulator-name = "usb_h1_vbus";
40 regulator-min-microvolt = <5000000>;
41 regulator-max-microvolt = <5000000>;
42 gpio = <&gpio1 0 0>;
43 };
44 };
21}; 45};
22 46
23&ecspi3 { 47&ecspi3 {
24 pinctrl-names = "default"; 48 pinctrl-names = "default";
25 pinctrl-0 = <&pinctrl_ecspi3_1>; 49 pinctrl-0 = <&pinctrl_ecspi3>;
26 status = "okay"; 50 status = "okay";
27 fsl,spi-num-chipselects = <1>; 51 fsl,spi-num-chipselects = <1>;
28 cs-gpios = <&gpio4 24 0>; 52 cs-gpios = <&gpio4 24 0>;
@@ -36,7 +60,7 @@
36 60
37&i2c1 { 61&i2c1 {
38 pinctrl-names = "default"; 62 pinctrl-names = "default";
39 pinctrl-0 = <&pinctrl_i2c1_1>; 63 pinctrl-0 = <&pinctrl_i2c1>;
40 status = "okay"; 64 status = "okay";
41 65
42 eeprom@50 { 66 eeprom@50 {
@@ -128,7 +152,7 @@
128 pinctrl-names = "default"; 152 pinctrl-names = "default";
129 pinctrl-0 = <&pinctrl_hog>; 153 pinctrl-0 = <&pinctrl_hog>;
130 154
131 hog { 155 imx6q-phytec-pfla02 {
132 pinctrl_hog: hoggrp { 156 pinctrl_hog: hoggrp {
133 fsl,pins = < 157 fsl,pins = <
134 MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000 158 MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
@@ -136,10 +160,109 @@
136 MX6QDL_PAD_DI0_PIN15__GPIO4_IO17 0x80000000 /* PMIC interrupt */ 160 MX6QDL_PAD_DI0_PIN15__GPIO4_IO17 0x80000000 /* PMIC interrupt */
137 >; 161 >;
138 }; 162 };
139 };
140 163
141 pfla02 { 164 pinctrl_ecspi3: ecspi3grp {
142 pinctrl_usdhc3_pfla02: usdhc3grp-pfla02 { 165 fsl,pins = <
166 MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
167 MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
168 MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
169 >;
170 };
171
172 pinctrl_enet: enetgrp {
173 fsl,pins = <
174 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
175 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
176 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
177 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
178 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
179 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
180 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
181 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
182 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
183 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
184 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
185 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
186 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
187 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
188 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
189 MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0
190 >;
191 };
192
193 pinctrl_gpmi_nand: gpminandgrp {
194 fsl,pins = <
195 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
196 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
197 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
198 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
199 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
200 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
201 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
202 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
203 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
204 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
205 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
206 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
207 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
208 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
209 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
210 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
211 MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1
212 >;
213 };
214
215 pinctrl_i2c1: i2c1grp {
216 fsl,pins = <
217 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
218 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
219 >;
220 };
221
222 pinctrl_uart4: uart4grp {
223 fsl,pins = <
224 MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
225 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
226 >;
227 };
228
229 pinctrl_usbh1: usbh1grp {
230 fsl,pins = <
231 MX6QDL_PAD_GPIO_0__USB_H1_PWR 0x80000000
232 >;
233 };
234
235 pinctrl_usbotg: usbotggrp {
236 fsl,pins = <
237 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
238 MX6QDL_PAD_KEY_COL4__USB_OTG_OC 0x1b0b0
239 MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000
240 >;
241 };
242
243 pinctrl_usdhc2: usdhc2grp {
244 fsl,pins = <
245 MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
246 MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
247 MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
248 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
249 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
250 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
251 >;
252 };
253
254 pinctrl_usdhc3: usdhc3grp {
255 fsl,pins = <
256 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
257 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
258 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
259 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
260 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
261 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
262 >;
263 };
264
265 pinctrl_usdhc3_cdwp: usdhc3cdwp {
143 fsl,pins = < 266 fsl,pins = <
144 MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000 267 MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000
145 MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 268 MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
@@ -150,21 +273,43 @@
150 273
151&fec { 274&fec {
152 pinctrl-names = "default"; 275 pinctrl-names = "default";
153 pinctrl-0 = <&pinctrl_enet_3>; 276 pinctrl-0 = <&pinctrl_enet>;
154 phy-mode = "rgmii"; 277 phy-mode = "rgmii";
155 phy-reset-gpios = <&gpio3 23 0>; 278 phy-reset-gpios = <&gpio3 23 0>;
156 status = "disabled"; 279 status = "disabled";
157}; 280};
158 281
282&gpmi {
283 pinctrl-names = "default";
284 pinctrl-0 = <&pinctrl_gpmi_nand>;
285 nand-on-flash-bbt;
286 status = "disabled";
287};
288
159&uart4 { 289&uart4 {
160 pinctrl-names = "default"; 290 pinctrl-names = "default";
161 pinctrl-0 = <&pinctrl_uart4_1>; 291 pinctrl-0 = <&pinctrl_uart4>;
292 status = "disabled";
293};
294
295&usbh1 {
296 vbus-supply = <&reg_usb_h1_vbus>;
297 pinctrl-names = "default";
298 pinctrl-0 = <&pinctrl_usbh1>;
299 status = "disabled";
300};
301
302&usbotg {
303 vbus-supply = <&reg_usb_otg_vbus>;
304 pinctrl-names = "default";
305 pinctrl-0 = <&pinctrl_usbotg>;
306 disable-over-current;
162 status = "disabled"; 307 status = "disabled";
163}; 308};
164 309
165&usdhc2 { 310&usdhc2 {
166 pinctrl-names = "default"; 311 pinctrl-names = "default";
167 pinctrl-0 = <&pinctrl_usdhc2_2>; 312 pinctrl-0 = <&pinctrl_usdhc2>;
168 cd-gpios = <&gpio1 4 0>; 313 cd-gpios = <&gpio1 4 0>;
169 wp-gpios = <&gpio1 2 0>; 314 wp-gpios = <&gpio1 2 0>;
170 status = "disabled"; 315 status = "disabled";
@@ -172,8 +317,8 @@
172 317
173&usdhc3 { 318&usdhc3 {
174 pinctrl-names = "default"; 319 pinctrl-names = "default";
175 pinctrl-0 = <&pinctrl_usdhc3_2 320 pinctrl-0 = <&pinctrl_usdhc3
176 &pinctrl_usdhc3_pfla02>; 321 &pinctrl_usdhc3_cdwp>;
177 cd-gpios = <&gpio1 27 0>; 322 cd-gpios = <&gpio1 27 0>;
178 wp-gpios = <&gpio1 29 0>; 323 wp-gpios = <&gpio1 29 0>;
179 status = "disabled"; 324 status = "disabled";
diff --git a/arch/arm/boot/dts/imx6q-pinfunc.h b/arch/arm/boot/dts/imx6q-pinfunc.h
index 97ed0816a6e0..9fc6120a1853 100644
--- a/arch/arm/boot/dts/imx6q-pinfunc.h
+++ b/arch/arm/boot/dts/imx6q-pinfunc.h
@@ -673,6 +673,7 @@
673#define MX6QDL_PAD_GPIO_3__USB_H1_OC 0x22c 0x5fc 0x948 0x6 0x1 673#define MX6QDL_PAD_GPIO_3__USB_H1_OC 0x22c 0x5fc 0x948 0x6 0x1
674#define MX6QDL_PAD_GPIO_3__MLB_CLK 0x22c 0x5fc 0x900 0x7 0x1 674#define MX6QDL_PAD_GPIO_3__MLB_CLK 0x22c 0x5fc 0x900 0x7 0x1
675#define MX6QDL_PAD_GPIO_6__ESAI_TX_CLK 0x230 0x600 0x870 0x0 0x1 675#define MX6QDL_PAD_GPIO_6__ESAI_TX_CLK 0x230 0x600 0x870 0x0 0x1
676#define MX6QDL_PAD_GPIO_6__ENET_IRQ 0x230 0x600 0x03c 0x11 0xff000609
676#define MX6QDL_PAD_GPIO_6__I2C3_SDA 0x230 0x600 0x8ac 0x2 0x1 677#define MX6QDL_PAD_GPIO_6__I2C3_SDA 0x230 0x600 0x8ac 0x2 0x1
677#define MX6QDL_PAD_GPIO_6__GPIO1_IO06 0x230 0x600 0x000 0x5 0x0 678#define MX6QDL_PAD_GPIO_6__GPIO1_IO06 0x230 0x600 0x000 0x5 0x0
678#define MX6QDL_PAD_GPIO_6__SD2_LCTL 0x230 0x600 0x000 0x6 0x0 679#define MX6QDL_PAD_GPIO_6__SD2_LCTL 0x230 0x600 0x000 0x6 0x0
@@ -1024,6 +1025,7 @@
1024#define MX6QDL_PAD_SD1_DAT2__WDOG1_RESET_B_DEB 0x34c 0x734 0x000 0x6 0x0 1025#define MX6QDL_PAD_SD1_DAT2__WDOG1_RESET_B_DEB 0x34c 0x734 0x000 0x6 0x0
1025#define MX6QDL_PAD_SD1_CLK__SD1_CLK 0x350 0x738 0x000 0x0 0x0 1026#define MX6QDL_PAD_SD1_CLK__SD1_CLK 0x350 0x738 0x000 0x0 0x0
1026#define MX6QDL_PAD_SD1_CLK__ECSPI5_SCLK 0x350 0x738 0x828 0x1 0x0 1027#define MX6QDL_PAD_SD1_CLK__ECSPI5_SCLK 0x350 0x738 0x828 0x1 0x0
1028#define MX6QDL_PAD_SD1_CLK__OSC32K_32K_OUT 0x350 0x738 0x000 0x2 0x0
1027#define MX6QDL_PAD_SD1_CLK__GPT_CLKIN 0x350 0x738 0x000 0x3 0x0 1029#define MX6QDL_PAD_SD1_CLK__GPT_CLKIN 0x350 0x738 0x000 0x3 0x0
1028#define MX6QDL_PAD_SD1_CLK__GPIO1_IO20 0x350 0x738 0x000 0x5 0x0 1030#define MX6QDL_PAD_SD1_CLK__GPIO1_IO20 0x350 0x738 0x000 0x5 0x0
1029#define MX6QDL_PAD_SD2_CLK__SD2_CLK 0x354 0x73c 0x000 0x0 0x0 1031#define MX6QDL_PAD_SD2_CLK__SD2_CLK 0x354 0x73c 0x000 0x0 0x0
diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts b/arch/arm/boot/dts/imx6q-sabrelite.dts
index f004913f7d80..96e4688be77c 100644
--- a/arch/arm/boot/dts/imx6q-sabrelite.dts
+++ b/arch/arm/boot/dts/imx6q-sabrelite.dts
@@ -12,189 +12,13 @@
12 12
13/dts-v1/; 13/dts-v1/;
14#include "imx6q.dtsi" 14#include "imx6q.dtsi"
15#include "imx6qdl-sabrelite.dtsi"
15 16
16/ { 17/ {
17 model = "Freescale i.MX6 Quad SABRE Lite Board"; 18 model = "Freescale i.MX6 Quad SABRE Lite Board";
18 compatible = "fsl,imx6q-sabrelite", "fsl,imx6q"; 19 compatible = "fsl,imx6q-sabrelite", "fsl,imx6q";
19
20 memory {
21 reg = <0x10000000 0x40000000>;
22 };
23
24 regulators {
25 compatible = "simple-bus";
26
27 reg_2p5v: 2p5v {
28 compatible = "regulator-fixed";
29 regulator-name = "2P5V";
30 regulator-min-microvolt = <2500000>;
31 regulator-max-microvolt = <2500000>;
32 regulator-always-on;
33 };
34
35 reg_3p3v: 3p3v {
36 compatible = "regulator-fixed";
37 regulator-name = "3P3V";
38 regulator-min-microvolt = <3300000>;
39 regulator-max-microvolt = <3300000>;
40 regulator-always-on;
41 };
42
43 reg_usb_otg_vbus: usb_otg_vbus {
44 compatible = "regulator-fixed";
45 regulator-name = "usb_otg_vbus";
46 regulator-min-microvolt = <5000000>;
47 regulator-max-microvolt = <5000000>;
48 gpio = <&gpio3 22 0>;
49 enable-active-high;
50 };
51 };
52
53 sound {
54 compatible = "fsl,imx6q-sabrelite-sgtl5000",
55 "fsl,imx-audio-sgtl5000";
56 model = "imx6q-sabrelite-sgtl5000";
57 ssi-controller = <&ssi1>;
58 audio-codec = <&codec>;
59 audio-routing =
60 "MIC_IN", "Mic Jack",
61 "Mic Jack", "Mic Bias",
62 "Headphone Jack", "HP_OUT";
63 mux-int-port = <1>;
64 mux-ext-port = <4>;
65 };
66};
67
68&audmux {
69 status = "okay";
70 pinctrl-names = "default";
71 pinctrl-0 = <&pinctrl_audmux_1>;
72};
73
74&ecspi1 {
75 fsl,spi-num-chipselects = <1>;
76 cs-gpios = <&gpio3 19 0>;
77 pinctrl-names = "default";
78 pinctrl-0 = <&pinctrl_ecspi1_1>;
79 status = "okay";
80
81 flash: m25p80@0 {
82 compatible = "sst,sst25vf016b";
83 spi-max-frequency = <20000000>;
84 reg = <0>;
85 };
86};
87
88&fec {
89 pinctrl-names = "default";
90 pinctrl-0 = <&pinctrl_enet_1>;
91 phy-mode = "rgmii";
92 phy-reset-gpios = <&gpio3 23 0>;
93 status = "okay";
94};
95
96&i2c1 {
97 status = "okay";
98 clock-frequency = <100000>;
99 pinctrl-names = "default";
100 pinctrl-0 = <&pinctrl_i2c1_1>;
101
102 codec: sgtl5000@0a {
103 compatible = "fsl,sgtl5000";
104 reg = <0x0a>;
105 clocks = <&clks 201>;
106 VDDA-supply = <&reg_2p5v>;
107 VDDIO-supply = <&reg_3p3v>;
108 };
109};
110
111&iomuxc {
112 pinctrl-names = "default";
113 pinctrl-0 = <&pinctrl_hog>;
114
115 hog {
116 pinctrl_hog: hoggrp {
117 fsl,pins = <
118 MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x80000000
119 MX6QDL_PAD_NANDF_D7__GPIO2_IO07 0x80000000
120 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x80000000
121 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000
122 MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
123 MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000
124 MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x1f0b0
125 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x80000000
126 MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
127 >;
128 };
129 };
130};
131
132&ldb {
133 status = "okay";
134
135 lvds-channel@0 {
136 fsl,data-mapping = "spwg";
137 fsl,data-width = <18>;
138 status = "okay";
139
140 display-timings {
141 native-mode = <&timing0>;
142 timing0: hsd100pxn1 {
143 clock-frequency = <65000000>;
144 hactive = <1024>;
145 vactive = <768>;
146 hback-porch = <220>;
147 hfront-porch = <40>;
148 vback-porch = <21>;
149 vfront-porch = <7>;
150 hsync-len = <60>;
151 vsync-len = <10>;
152 };
153 };
154 };
155}; 20};
156 21
157&sata { 22&sata {
158 status = "okay"; 23 status = "okay";
159}; 24};
160
161&ssi1 {
162 fsl,mode = "i2s-slave";
163 status = "okay";
164};
165
166&uart2 {
167 status = "okay";
168 pinctrl-names = "default";
169 pinctrl-0 = <&pinctrl_uart2_1>;
170};
171
172&usbh1 {
173 status = "okay";
174};
175
176&usbotg {
177 vbus-supply = <&reg_usb_otg_vbus>;
178 pinctrl-names = "default";
179 pinctrl-0 = <&pinctrl_usbotg_1>;
180 disable-over-current;
181 status = "okay";
182};
183
184&usdhc3 {
185 pinctrl-names = "default";
186 pinctrl-0 = <&pinctrl_usdhc3_2>;
187 cd-gpios = <&gpio7 0 0>;
188 wp-gpios = <&gpio7 1 0>;
189 vmmc-supply = <&reg_3p3v>;
190 status = "okay";
191};
192
193&usdhc4 {
194 pinctrl-names = "default";
195 pinctrl-0 = <&pinctrl_usdhc4_2>;
196 cd-gpios = <&gpio2 6 0>;
197 wp-gpios = <&gpio2 7 0>;
198 vmmc-supply = <&reg_3p3v>;
199 status = "okay";
200};
diff --git a/arch/arm/boot/dts/imx6q-sbc6x.dts b/arch/arm/boot/dts/imx6q-sbc6x.dts
index ee6addf149af..86cf09364664 100644
--- a/arch/arm/boot/dts/imx6q-sbc6x.dts
+++ b/arch/arm/boot/dts/imx6q-sbc6x.dts
@@ -17,28 +17,78 @@
17 }; 17 };
18}; 18};
19 19
20
20&fec { 21&fec {
21 pinctrl-names = "default"; 22 pinctrl-names = "default";
22 pinctrl-0 = <&pinctrl_enet_1>; 23 pinctrl-0 = <&pinctrl_enet>;
23 phy-mode = "rgmii"; 24 phy-mode = "rgmii";
24 status = "okay"; 25 status = "okay";
25}; 26};
26 27
28&iomuxc {
29 imx6q-sbc6x {
30 pinctrl_enet: enetgrp {
31 fsl,pins = <
32 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
33 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
34 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
35 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
36 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
37 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
38 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
39 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
40 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
41 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
42 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
43 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
44 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
45 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
46 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
47 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
48 >;
49 };
50
51 pinctrl_uart1: uart1grp {
52 fsl,pins = <
53 MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
54 MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
55 >;
56 };
57
58 pinctrl_usbotg: usbotggrp {
59 fsl,pins = <
60 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
61 >;
62 };
63
64 pinctrl_usdhc3: usdhc3grp {
65 fsl,pins = <
66 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
67 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
68 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
69 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
70 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
71 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
72 >;
73 };
74 };
75};
76
27&uart1 { 77&uart1 {
28 pinctrl-names = "default"; 78 pinctrl-names = "default";
29 pinctrl-0 = <&pinctrl_uart1_1>; 79 pinctrl-0 = <&pinctrl_uart1>;
30 status = "okay"; 80 status = "okay";
31}; 81};
32 82
33&usbotg { 83&usbotg {
34 pinctrl-names = "default"; 84 pinctrl-names = "default";
35 pinctrl-0 = <&pinctrl_usbotg_1>; 85 pinctrl-0 = <&pinctrl_usbotg>;
36 disable-over-current; 86 disable-over-current;
37 status = "okay"; 87 status = "okay";
38}; 88};
39 89
40&usdhc3 { 90&usdhc3 {
41 pinctrl-names = "default"; 91 pinctrl-names = "default";
42 pinctrl-0 = <&pinctrl_usdhc3_2>; 92 pinctrl-0 = <&pinctrl_usdhc3>;
43 status = "okay"; 93 status = "okay";
44}; 94};
diff --git a/arch/arm/boot/dts/imx6q-udoo.dts b/arch/arm/boot/dts/imx6q-udoo.dts
index 6e1ccdc019a7..ed397d149ab6 100644
--- a/arch/arm/boot/dts/imx6q-udoo.dts
+++ b/arch/arm/boot/dts/imx6q-udoo.dts
@@ -21,19 +21,69 @@
21 }; 21 };
22}; 22};
23 23
24&fec {
25 pinctrl-names = "default";
26 pinctrl-0 = <&pinctrl_enet>;
27 phy-mode = "rgmii";
28 status = "okay";
29};
30
31&iomuxc {
32 imx6q-udoo {
33 pinctrl_enet: enetgrp {
34 fsl,pins = <
35 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
36 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
37 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
38 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
39 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
40 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
41 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
42 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
43 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
44 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
45 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
46 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
47 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
48 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
49 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
50 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
51 >;
52 };
53
54 pinctrl_uart2: uart2grp {
55 fsl,pins = <
56 MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
57 MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
58 >;
59 };
60
61 pinctrl_usdhc3: usdhc3grp {
62 fsl,pins = <
63 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
64 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
65 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
66 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
67 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
68 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
69 >;
70 };
71 };
72};
73
24&sata { 74&sata {
25 status = "okay"; 75 status = "okay";
26}; 76};
27 77
28&uart2 { 78&uart2 {
29 pinctrl-names = "default"; 79 pinctrl-names = "default";
30 pinctrl-0 = <&pinctrl_uart2_1>; 80 pinctrl-0 = <&pinctrl_uart2>;
31 status = "okay"; 81 status = "okay";
32}; 82};
33 83
34&usdhc3 { 84&usdhc3 {
35 pinctrl-names = "default"; 85 pinctrl-names = "default";
36 pinctrl-0 = <&pinctrl_usdhc3_2>; 86 pinctrl-0 = <&pinctrl_usdhc3>;
37 non-removable; 87 non-removable;
38 status = "okay"; 88 status = "okay";
39}; 89};
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
index f024ef28b34b..fadf4981c0ca 100644
--- a/arch/arm/boot/dts/imx6q.dtsi
+++ b/arch/arm/boot/dts/imx6q.dtsi
@@ -8,10 +8,15 @@
8 * 8 *
9 */ 9 */
10 10
11#include <dt-bindings/interrupt-controller/irq.h>
11#include "imx6q-pinfunc.h" 12#include "imx6q-pinfunc.h"
12#include "imx6qdl.dtsi" 13#include "imx6qdl.dtsi"
13 14
14/ { 15/ {
16 aliases {
17 spi4 = &ecspi5;
18 };
19
15 cpus { 20 cpus {
16 #address-cells = <1>; 21 #address-cells = <1>;
17 #size-cells = <0>; 22 #size-cells = <0>;
@@ -25,8 +30,17 @@
25 /* kHz uV */ 30 /* kHz uV */
26 1200000 1275000 31 1200000 1275000
27 996000 1250000 32 996000 1250000
33 852000 1250000
28 792000 1150000 34 792000 1150000
29 396000 950000 35 396000 975000
36 >;
37 fsl,soc-operating-points = <
38 /* ARM kHz SOC-PU uV */
39 1200000 1275000
40 996000 1250000
41 852000 1250000
42 792000 1175000
43 396000 1175000
30 >; 44 >;
31 clock-latency = <61036>; /* two CLK32 periods */ 45 clock-latency = <61036>; /* two CLK32 periods */
32 clocks = <&clks 104>, <&clks 6>, <&clks 16>, 46 clocks = <&clks 104>, <&clks 6>, <&clks 16>,
@@ -74,7 +88,7 @@
74 #size-cells = <0>; 88 #size-cells = <0>;
75 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi"; 89 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi";
76 reg = <0x02018000 0x4000>; 90 reg = <0x02018000 0x4000>;
77 interrupts = <0 35 0x04>; 91 interrupts = <0 35 IRQ_TYPE_LEVEL_HIGH>;
78 clocks = <&clks 116>, <&clks 116>; 92 clocks = <&clks 116>, <&clks 116>;
79 clock-names = "ipg", "per"; 93 clock-names = "ipg", "per";
80 status = "disabled"; 94 status = "disabled";
@@ -125,7 +139,7 @@
125 sata: sata@02200000 { 139 sata: sata@02200000 {
126 compatible = "fsl,imx6q-ahci"; 140 compatible = "fsl,imx6q-ahci";
127 reg = <0x02200000 0x4000>; 141 reg = <0x02200000 0x4000>;
128 interrupts = <0 39 0x04>; 142 interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
129 clocks = <&clks 154>, <&clks 187>, <&clks 105>; 143 clocks = <&clks 154>, <&clks 187>, <&clks 105>;
130 clock-names = "sata", "sata_ref", "ahb"; 144 clock-names = "sata", "sata_ref", "ahb";
131 status = "disabled"; 145 status = "disabled";
@@ -135,7 +149,8 @@
135 #crtc-cells = <1>; 149 #crtc-cells = <1>;
136 compatible = "fsl,imx6q-ipu"; 150 compatible = "fsl,imx6q-ipu";
137 reg = <0x02800000 0x400000>; 151 reg = <0x02800000 0x400000>;
138 interrupts = <0 8 0x4 0 7 0x4>; 152 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>,
153 <0 7 IRQ_TYPE_LEVEL_HIGH>;
139 clocks = <&clks 133>, <&clks 134>, <&clks 137>; 154 clocks = <&clks 133>, <&clks 134>, <&clks 137>;
140 clock-names = "bus", "di0", "di1"; 155 clock-names = "bus", "di0", "di1";
141 resets = <&src 4>; 156 resets = <&src 4>;
diff --git a/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi b/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi
new file mode 100644
index 000000000000..25cf035dd36e
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi
@@ -0,0 +1,199 @@
1/ {
2 regulators {
3 compatible = "simple-bus";
4 #address-cells = <1>;
5 #size-cells = <0>;
6
7 dummy_reg: regulator@0 {
8 compatible = "regulator-fixed";
9 reg = <0>;
10 regulator-name = "dummy-supply";
11 };
12
13 reg_usb_otg_vbus: regulator@1 {
14 compatible = "regulator-fixed";
15 reg = <1>;
16 regulator-name = "usb_otg_vbus";
17 regulator-min-microvolt = <5000000>;
18 regulator-max-microvolt = <5000000>;
19 gpio = <&gpio3 22 0>;
20 enable-active-high;
21 };
22 };
23
24 chosen {
25 linux,stdout-path = &uart1;
26 };
27};
28
29&ecspi3 {
30 fsl,spi-num-chipselects = <1>;
31 cs-gpios = <&gpio4 24 0>;
32 pinctrl-names = "default";
33 pinctrl-0 = <&pinctrl_ecspi3>;
34 status = "okay";
35
36 flash: m25p80@0 {
37 #address-cells = <1>;
38 #size-cells = <1>;
39 compatible = "sst,sst25vf040b", "m25p80";
40 spi-max-frequency = <20000000>;
41 reg = <0>;
42 };
43};
44
45&fec {
46 pinctrl-names = "default";
47 pinctrl-0 = <&pinctrl_enet>;
48 status = "okay";
49 phy-mode = "rgmii";
50};
51
52&iomuxc {
53 pinctrl-names = "default";
54 pinctrl-0 = <&pinctrl_hog>;
55
56 imx6qdl-dfi-fs700-m60 {
57 pinctrl_hog: hoggrp {
58 fsl,pins = <
59 MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x80000000
60 MX6QDL_PAD_GPIO_18__GPIO7_IO13 0x80000000 /* PMIC irq */
61 MX6QDL_PAD_EIM_D26__GPIO3_IO26 0x80000000 /* MAX11801 irq */
62 MX6QDL_PAD_NANDF_D5__GPIO2_IO05 0x000030b0 /* Backlight enable */
63 >;
64 };
65
66 pinctrl_enet: enetgrp {
67 fsl,pins = <
68 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
69 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
70 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
71 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
72 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
73 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
74 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
75 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
76 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
77 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
78 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
79 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
80 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
81 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
82 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
83 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
84 >;
85 };
86
87 pinctrl_i2c2: i2c2grp {
88 fsl,pins = <
89 MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
90 MX6QDL_PAD_EIM_D16__I2C2_SDA 0x4001b8b1
91 >;
92 };
93
94 pinctrl_uart1: uart1grp {
95 fsl,pins = <
96 MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
97 MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
98 >;
99 };
100
101 pinctrl_usbotg: usbotggrp {
102 fsl,pins = <
103 MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
104 >;
105 };
106
107 pinctrl_usdhc2: usdhc2grp {
108 fsl,pins = <
109 MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
110 MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
111 MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
112 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
113 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
114 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
115 MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000 /* card detect */
116 >;
117 };
118
119 pinctrl_usdhc3: usdhc3grp {
120 fsl,pins = <
121 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
122 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
123 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
124 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
125 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
126 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
127 >;
128 };
129
130 pinctrl_usdhc4: usdhc4grp {
131 fsl,pins = <
132 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
133 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
134 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
135 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
136 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
137 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
138 MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
139 MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
140 MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
141 MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
142 >;
143 };
144
145 pinctrl_ecspi3: ecspi3grp {
146 fsl,pins = <
147 MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
148 MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
149 MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
150 MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x80000000 /* SPI NOR chipselect */
151 >;
152 };
153 };
154};
155
156&i2c2 {
157 pinctrl-names = "default";
158 pinctrl-0 = <&pinctrl_i2c2>;
159 status = "okay";
160};
161
162&uart1 {
163 pinctrl-names = "default";
164 pinctrl-0 = <&pinctrl_uart1>;
165 status = "okay";
166};
167
168&usbh1 {
169 status = "okay";
170};
171
172&usbotg {
173 vbus-supply = <&reg_usb_otg_vbus>;
174 pinctrl-names = "default";
175 pinctrl-0 = <&pinctrl_usbotg>;
176 disable-over-current;
177 dr_mode = "host";
178 status = "okay";
179};
180
181&usdhc2 { /* module slot */
182 pinctrl-names = "default";
183 pinctrl-0 = <&pinctrl_usdhc2>;
184 cd-gpios = <&gpio2 2 0>;
185 status = "okay";
186};
187
188&usdhc3 { /* baseboard slot */
189 pinctrl-names = "default";
190 pinctrl-0 = <&pinctrl_usdhc3>;
191};
192
193&usdhc4 { /* eMMC */
194 pinctrl-names = "default";
195 pinctrl-0 = <&pinctrl_usdhc4>;
196 bus-width = <8>;
197 non-removable;
198 status = "okay";
199};
diff --git a/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi
new file mode 100644
index 000000000000..98a422153ce7
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi
@@ -0,0 +1,374 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/ {
13 /* these are used by bootloader for disabling nodes */
14 aliases {
15 can0 = &can1;
16 ethernet0 = &fec;
17 led0 = &led0;
18 led1 = &led1;
19 nand = &gpmi;
20 usb0 = &usbh1;
21 usb1 = &usbotg;
22 };
23
24 chosen {
25 bootargs = "console=ttymxc1,115200";
26 };
27
28 leds {
29 compatible = "gpio-leds";
30
31 led0: user1 {
32 label = "user1";
33 gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */
34 default-state = "on";
35 linux,default-trigger = "heartbeat";
36 };
37
38 led1: user2 {
39 label = "user2";
40 gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */
41 default-state = "off";
42 };
43 };
44
45 memory {
46 reg = <0x10000000 0x20000000>;
47 };
48
49 pps {
50 compatible = "pps-gpio";
51 gpios = <&gpio1 26 0>;
52 status = "okay";
53 };
54
55 regulators {
56 compatible = "simple-bus";
57 #address-cells = <1>;
58 #size-cells = <0>;
59
60 reg_3p3v: regulator@0 {
61 compatible = "regulator-fixed";
62 reg = <0>;
63 regulator-name = "3P3V";
64 regulator-min-microvolt = <3300000>;
65 regulator-max-microvolt = <3300000>;
66 regulator-always-on;
67 };
68
69 reg_5p0v: regulator@1 {
70 compatible = "regulator-fixed";
71 reg = <1>;
72 regulator-name = "5P0V";
73 regulator-min-microvolt = <5000000>;
74 regulator-max-microvolt = <5000000>;
75 regulator-always-on;
76 };
77
78 reg_usb_otg_vbus: regulator@2 {
79 compatible = "regulator-fixed";
80 reg = <2>;
81 regulator-name = "usb_otg_vbus";
82 regulator-min-microvolt = <5000000>;
83 regulator-max-microvolt = <5000000>;
84 gpio = <&gpio3 22 0>;
85 enable-active-high;
86 };
87 };
88};
89
90&fec {
91 pinctrl-names = "default";
92 pinctrl-0 = <&pinctrl_enet>;
93 phy-mode = "rgmii";
94 phy-reset-gpios = <&gpio1 30 0>;
95 status = "okay";
96};
97
98&gpmi {
99 pinctrl-names = "default";
100 pinctrl-0 = <&pinctrl_gpmi_nand>;
101 status = "okay";
102};
103
104&i2c1 {
105 clock-frequency = <100000>;
106 pinctrl-names = "default";
107 pinctrl-0 = <&pinctrl_i2c1>;
108 status = "okay";
109
110 eeprom1: eeprom@50 {
111 compatible = "atmel,24c02";
112 reg = <0x50>;
113 pagesize = <16>;
114 };
115
116 eeprom2: eeprom@51 {
117 compatible = "atmel,24c02";
118 reg = <0x51>;
119 pagesize = <16>;
120 };
121
122 eeprom3: eeprom@52 {
123 compatible = "atmel,24c02";
124 reg = <0x52>;
125 pagesize = <16>;
126 };
127
128 eeprom4: eeprom@53 {
129 compatible = "atmel,24c02";
130 reg = <0x53>;
131 pagesize = <16>;
132 };
133
134 gpio: pca9555@23 {
135 compatible = "nxp,pca9555";
136 reg = <0x23>;
137 gpio-controller;
138 #gpio-cells = <2>;
139 };
140
141 hwmon: gsc@29 {
142 compatible = "gw,gsp";
143 reg = <0x29>;
144 };
145
146 rtc: ds1672@68 {
147 compatible = "dallas,ds1672";
148 reg = <0x68>;
149 };
150};
151
152&i2c2 {
153 clock-frequency = <100000>;
154 pinctrl-names = "default";
155 pinctrl-0 = <&pinctrl_i2c2>;
156 status = "okay";
157
158 pmic: ltc3676@3c {
159 compatible = "ltc,ltc3676";
160 reg = <0x3c>;
161
162 regulators {
163 sw1_reg: ltc3676__sw1 {
164 regulator-min-microvolt = <1175000>;
165 regulator-max-microvolt = <1175000>;
166 regulator-boot-on;
167 regulator-always-on;
168 };
169
170 sw2_reg: ltc3676__sw2 {
171 regulator-min-microvolt = <1800000>;
172 regulator-max-microvolt = <1800000>;
173 regulator-boot-on;
174 regulator-always-on;
175 };
176
177 sw3_reg: ltc3676__sw3 {
178 regulator-min-microvolt = <1175000>;
179 regulator-max-microvolt = <1175000>;
180 regulator-boot-on;
181 regulator-always-on;
182 };
183
184 sw4_reg: ltc3676__sw4 {
185 regulator-min-microvolt = <1500000>;
186 regulator-max-microvolt = <1500000>;
187 regulator-boot-on;
188 regulator-always-on;
189 };
190
191 ldo2_reg: ltc3676__ldo2 {
192 regulator-min-microvolt = <2500000>;
193 regulator-max-microvolt = <2500000>;
194 regulator-boot-on;
195 regulator-always-on;
196 };
197
198 ldo4_reg: ltc3676__ldo4 {
199 regulator-min-microvolt = <3000000>;
200 regulator-max-microvolt = <3000000>;
201 };
202 };
203 };
204};
205
206&i2c3 {
207 clock-frequency = <100000>;
208 pinctrl-names = "default";
209 pinctrl-0 = <&pinctrl_i2c3>;
210 status = "okay";
211
212 videoin: adv7180@20 {
213 compatible = "adi,adv7180";
214 reg = <0x20>;
215 };
216};
217
218&iomuxc {
219 pinctrl-names = "default";
220 pinctrl-0 = <&pinctrl_hog>;
221
222 imx6qdl-gw51xx {
223 pinctrl_hog: hoggrp {
224 fsl,pins = <
225 MX6QDL_PAD_EIM_A19__GPIO2_IO19 0x80000000 /* MEZZ_DIO0 */
226 MX6QDL_PAD_EIM_A20__GPIO2_IO18 0x80000000 /* MEZZ_DIO1 */
227 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 /* OTG_PWR_EN */
228 MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* GPS_PPS */
229 MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* PHY Reset */
230 MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x80000000 /* PCIE_RST# */
231 MX6QDL_PAD_KEY_COL0__GPIO4_IO06 0x80000000 /* user1 led */
232 MX6QDL_PAD_KEY_ROW0__GPIO4_IO07 0x80000000 /* user2 led */
233 >;
234 };
235
236 pinctrl_enet: enetgrp {
237 fsl,pins = <
238 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
239 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
240 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
241 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
242 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
243 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
244 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
245 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
246 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
247 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
248 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
249 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
250 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
251 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
252 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
253 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
254 >;
255 };
256
257 pinctrl_gpmi_nand: gpminandgrp {
258 fsl,pins = <
259 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
260 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
261 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
262 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
263 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
264 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
265 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
266 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
267 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
268 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
269 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
270 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
271 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
272 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
273 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
274 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
275 >;
276 };
277
278 pinctrl_i2c1: i2c1grp {
279 fsl,pins = <
280 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
281 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
282 >;
283 };
284
285 pinctrl_i2c2: i2c2grp {
286 fsl,pins = <
287 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
288 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
289 >;
290 };
291
292 pinctrl_i2c3: i2c3grp {
293 fsl,pins = <
294 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
295 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
296 >;
297 };
298
299 pinctrl_uart1: uart1grp {
300 fsl,pins = <
301 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
302 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
303 >;
304 };
305
306 pinctrl_uart2: uart2grp {
307 fsl,pins = <
308 MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA 0x1b0b1
309 MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA 0x1b0b1
310 >;
311 };
312
313 pinctrl_uart3: uart3grp {
314 fsl,pins = <
315 MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
316 MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
317 >;
318 };
319
320 pinctrl_uart5: uart5grp {
321 fsl,pins = <
322 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA 0x1b0b1
323 MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1
324 >;
325 };
326
327 pinctrl_usbotg: usbotggrp {
328 fsl,pins = <
329 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
330 >;
331 };
332 };
333};
334
335&pcie {
336 reset-gpio = <&gpio1 0 0>;
337 status = "okay";
338};
339
340&uart1 {
341 pinctrl-names = "default";
342 pinctrl-0 = <&pinctrl_uart1>;
343 status = "okay";
344};
345
346&uart2 {
347 pinctrl-names = "default";
348 pinctrl-0 = <&pinctrl_uart2>;
349 status = "okay";
350};
351
352&uart3 {
353 pinctrl-names = "default";
354 pinctrl-0 = <&pinctrl_uart3>;
355 status = "okay";
356};
357
358&uart5 {
359 pinctrl-names = "default";
360 pinctrl-0 = <&pinctrl_uart5>;
361 status = "okay";
362};
363
364&usbotg {
365 vbus-supply = <&reg_usb_otg_vbus>;
366 pinctrl-names = "default";
367 pinctrl-0 = <&pinctrl_usbotg>;
368 disable-over-current;
369 status = "okay";
370};
371
372&usbh1 {
373 status = "okay";
374};
diff --git a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
new file mode 100644
index 000000000000..8e99c9a9bc76
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
@@ -0,0 +1,490 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/ {
13 /* these are used by bootloader for disabling nodes */
14 aliases {
15 ethernet0 = &fec;
16 led0 = &led0;
17 led1 = &led1;
18 led2 = &led2;
19 nand = &gpmi;
20 ssi0 = &ssi1;
21 usb0 = &usbh1;
22 usb1 = &usbotg;
23 usdhc2 = &usdhc3;
24 };
25
26 chosen {
27 bootargs = "console=ttymxc1,115200";
28 };
29
30 leds {
31 compatible = "gpio-leds";
32
33 led0: user1 {
34 label = "user1";
35 gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */
36 default-state = "on";
37 linux,default-trigger = "heartbeat";
38 };
39
40 led1: user2 {
41 label = "user2";
42 gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */
43 default-state = "off";
44 };
45
46 led2: user3 {
47 label = "user3";
48 gpios = <&gpio4 15 1>; /* 111 - MX6_LOCLED# */
49 default-state = "off";
50 };
51 };
52
53 memory {
54 reg = <0x10000000 0x20000000>;
55 };
56
57 pps {
58 compatible = "pps-gpio";
59 gpios = <&gpio1 26 0>;
60 status = "okay";
61 };
62
63 regulators {
64 compatible = "simple-bus";
65 #address-cells = <1>;
66 #size-cells = <0>;
67
68 reg_1p0v: regulator@0 {
69 compatible = "regulator-fixed";
70 reg = <0>;
71 regulator-name = "1P0V";
72 regulator-min-microvolt = <1000000>;
73 regulator-max-microvolt = <1000000>;
74 regulator-always-on;
75 };
76
77 /* remove this fixed regulator once ltc3676__sw2 driver available */
78 reg_1p8v: regulator@1 {
79 compatible = "regulator-fixed";
80 reg = <1>;
81 regulator-name = "1P8V";
82 regulator-min-microvolt = <1800000>;
83 regulator-max-microvolt = <1800000>;
84 regulator-always-on;
85 };
86
87 reg_3p3v: regulator@2 {
88 compatible = "regulator-fixed";
89 reg = <2>;
90 regulator-name = "3P3V";
91 regulator-min-microvolt = <3300000>;
92 regulator-max-microvolt = <3300000>;
93 regulator-always-on;
94 };
95
96 reg_5p0v: regulator@3 {
97 compatible = "regulator-fixed";
98 reg = <3>;
99 regulator-name = "5P0V";
100 regulator-min-microvolt = <5000000>;
101 regulator-max-microvolt = <5000000>;
102 regulator-always-on;
103 };
104
105 reg_usb_otg_vbus: regulator@4 {
106 compatible = "regulator-fixed";
107 reg = <4>;
108 regulator-name = "usb_otg_vbus";
109 regulator-min-microvolt = <5000000>;
110 regulator-max-microvolt = <5000000>;
111 gpio = <&gpio3 22 0>;
112 enable-active-high;
113 };
114 };
115
116 sound {
117 compatible = "fsl,imx6q-sabrelite-sgtl5000",
118 "fsl,imx-audio-sgtl5000";
119 model = "imx6q-sabrelite-sgtl5000";
120 ssi-controller = <&ssi1>;
121 audio-codec = <&codec>;
122 audio-routing =
123 "MIC_IN", "Mic Jack",
124 "Mic Jack", "Mic Bias",
125 "Headphone Jack", "HP_OUT";
126 mux-int-port = <1>;
127 mux-ext-port = <4>;
128 };
129};
130
131&audmux {
132 pinctrl-names = "default";
133 pinctrl-0 = <&pinctrl_audmux>;
134 status = "okay";
135};
136
137&fec {
138 pinctrl-names = "default";
139 pinctrl-0 = <&pinctrl_enet>;
140 phy-mode = "rgmii";
141 phy-reset-gpios = <&gpio1 30 0>;
142 status = "okay";
143};
144
145&gpmi {
146 pinctrl-names = "default";
147 pinctrl-0 = <&pinctrl_gpmi_nand>;
148 status = "okay";
149};
150
151&i2c1 {
152 clock-frequency = <100000>;
153 pinctrl-names = "default";
154 pinctrl-0 = <&pinctrl_i2c1>;
155 status = "okay";
156
157 eeprom1: eeprom@50 {
158 compatible = "atmel,24c02";
159 reg = <0x50>;
160 pagesize = <16>;
161 };
162
163 eeprom2: eeprom@51 {
164 compatible = "atmel,24c02";
165 reg = <0x51>;
166 pagesize = <16>;
167 };
168
169 eeprom3: eeprom@52 {
170 compatible = "atmel,24c02";
171 reg = <0x52>;
172 pagesize = <16>;
173 };
174
175 eeprom4: eeprom@53 {
176 compatible = "atmel,24c02";
177 reg = <0x53>;
178 pagesize = <16>;
179 };
180
181 gpio: pca9555@23 {
182 compatible = "nxp,pca9555";
183 reg = <0x23>;
184 gpio-controller;
185 #gpio-cells = <2>;
186 };
187
188 hwmon: gsc@29 {
189 compatible = "gw,gsp";
190 reg = <0x29>;
191 };
192
193 rtc: ds1672@68 {
194 compatible = "dallas,ds1672";
195 reg = <0x68>;
196 };
197};
198
199&i2c2 {
200 clock-frequency = <100000>;
201 pinctrl-names = "default";
202 pinctrl-0 = <&pinctrl_i2c2>;
203 status = "okay";
204
205 pciswitch: pex8609@3f {
206 compatible = "plx,pex8609";
207 reg = <0x3f>;
208 };
209
210 pmic: ltc3676@3c {
211 compatible = "ltc,ltc3676";
212 reg = <0x3c>;
213
214 regulators {
215 sw1_reg: ltc3676__sw1 {
216 regulator-min-microvolt = <1175000>;
217 regulator-max-microvolt = <1175000>;
218 regulator-boot-on;
219 regulator-always-on;
220 };
221
222 sw2_reg: ltc3676__sw2 {
223 regulator-min-microvolt = <1800000>;
224 regulator-max-microvolt = <1800000>;
225 regulator-boot-on;
226 regulator-always-on;
227 };
228
229 sw3_reg: ltc3676__sw3 {
230 regulator-min-microvolt = <1175000>;
231 regulator-max-microvolt = <1175000>;
232 regulator-boot-on;
233 regulator-always-on;
234 };
235
236 sw4_reg: ltc3676__sw4 {
237 regulator-min-microvolt = <1500000>;
238 regulator-max-microvolt = <1500000>;
239 regulator-boot-on;
240 regulator-always-on;
241 };
242
243 ldo2_reg: ltc3676__ldo2 {
244 regulator-min-microvolt = <2500000>;
245 regulator-max-microvolt = <2500000>;
246 regulator-boot-on;
247 regulator-always-on;
248 };
249
250 ldo3_reg: ltc3676__ldo3 {
251 regulator-min-microvolt = <1800000>;
252 regulator-max-microvolt = <1800000>;
253 regulator-boot-on;
254 regulator-always-on;
255 };
256
257 ldo4_reg: ltc3676__ldo4 {
258 regulator-min-microvolt = <3000000>;
259 regulator-max-microvolt = <3000000>;
260 };
261 };
262 };
263};
264
265&i2c3 {
266 clock-frequency = <100000>;
267 pinctrl-names = "default";
268 pinctrl-0 = <&pinctrl_i2c3>;
269 status = "okay";
270
271 accelerometer: fxos8700@1e {
272 compatible = "fsl,fxos8700";
273 reg = <0x13>;
274 };
275
276 codec: sgtl5000@0a {
277 compatible = "fsl,sgtl5000";
278 reg = <0x0a>;
279 clocks = <&clks 169>;
280 VDDA-supply = <&reg_1p8v>;
281 VDDIO-supply = <&reg_3p3v>;
282 };
283
284 touchscreen: egalax_ts@04 {
285 compatible = "eeti,egalax_ts";
286 reg = <0x04>;
287 interrupt-parent = <&gpio7>;
288 interrupts = <12 2>; /* gpio7_12 active low */
289 wakeup-gpios = <&gpio7 12 0>;
290 };
291
292 videoin: adv7180@20 {
293 compatible = "adi,adv7180";
294 reg = <0x20>;
295 };
296};
297
298&iomuxc {
299 pinctrl-names = "default";
300 pinctrl-0 = <&pinctrl_hog>;
301
302 imx6qdl-gw52xx {
303 pinctrl_hog: hoggrp {
304 fsl,pins = <
305 MX6QDL_PAD_EIM_A19__GPIO2_IO19 0x80000000 /* MEZZ_DIO0 */
306 MX6QDL_PAD_EIM_A20__GPIO2_IO18 0x80000000 /* MEZZ_DIO1 */
307 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 /* OTG_PWR_EN */
308 MX6QDL_PAD_EIM_D31__GPIO3_IO31 0x80000000 /* VIDDEC_PDN# */
309 MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* PHY Reset */
310 MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 /* PCIE_RST# */
311 MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000 /* GPS_PWDN */
312 MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* GPS_PPS */
313 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x000130b0 /* AUD4_MCK */
314 MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 /* USB_SEL_PCI */
315 MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 /* TOUCH_IRQ# */
316 MX6QDL_PAD_KEY_COL0__GPIO4_IO06 0x80000000 /* user1 led */
317 MX6QDL_PAD_KEY_ROW0__GPIO4_IO07 0x80000000 /* user2 led */
318 MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000 /* user3 led */
319 MX6QDL_PAD_SD2_CMD__GPIO1_IO11 0x80000000 /* LVDS_TCH# */
320 MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000 /* SD3_CD# */
321 MX6QDL_PAD_SD4_DAT3__GPIO2_IO11 0x80000000 /* UART2_EN# */
322 >;
323 };
324
325 pinctrl_audmux: audmuxgrp {
326 fsl,pins = <
327 MX6QDL_PAD_SD2_DAT0__AUD4_RXD 0x130b0
328 MX6QDL_PAD_SD2_DAT3__AUD4_TXC 0x130b0
329 MX6QDL_PAD_SD2_DAT2__AUD4_TXD 0x110b0
330 MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x130b0
331 >;
332 };
333
334 pinctrl_enet: enetgrp {
335 fsl,pins = <
336 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
337 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
338 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
339 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
340 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
341 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
342 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
343 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
344 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
345 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
346 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
347 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
348 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
349 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
350 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
351 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
352 >;
353 };
354
355 pinctrl_gpmi_nand: gpminandgrp {
356 fsl,pins = <
357 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
358 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
359 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
360 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
361 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
362 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
363 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
364 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
365 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
366 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
367 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
368 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
369 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
370 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
371 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
372 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
373 >;
374 };
375
376 pinctrl_i2c1: i2c1grp {
377 fsl,pins = <
378 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
379 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
380 >;
381 };
382
383 pinctrl_i2c2: i2c2grp {
384 fsl,pins = <
385 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
386 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
387 >;
388 };
389
390 pinctrl_i2c3: i2c3grp {
391 fsl,pins = <
392 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
393 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
394 >;
395 };
396
397 pinctrl_uart1: uart1grp {
398 fsl,pins = <
399 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
400 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
401 >;
402 };
403
404 pinctrl_uart2: uart2grp {
405 fsl,pins = <
406 MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA 0x1b0b1
407 MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA 0x1b0b1
408 >;
409 };
410
411 pinctrl_uart5: uart5grp {
412 fsl,pins = <
413 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA 0x1b0b1
414 MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1
415 >;
416 };
417
418 pinctrl_usbotg: usbotggrp {
419 fsl,pins = <
420 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
421 >;
422 };
423
424 pinctrl_usdhc3: usdhc3grp {
425 fsl,pins = <
426 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
427 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
428 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
429 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
430 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
431 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
432 >;
433 };
434 };
435};
436
437&ldb {
438 status = "okay";
439 lvds-channel@0 {
440 crtcs = <&ipu1 0>, <&ipu1 1>;
441 };
442};
443
444&pcie {
445 reset-gpio = <&gpio1 29 0>;
446 status = "okay";
447};
448
449&ssi1 {
450 fsl,mode = "i2s-slave";
451 status = "okay";
452};
453
454&uart1 {
455 pinctrl-names = "default";
456 pinctrl-0 = <&pinctrl_uart1>;
457 status = "okay";
458};
459
460&uart2 {
461 pinctrl-names = "default";
462 pinctrl-0 = <&pinctrl_uart2>;
463 status = "okay";
464};
465
466&uart5 {
467 pinctrl-names = "default";
468 pinctrl-0 = <&pinctrl_uart5>;
469 status = "okay";
470};
471
472&usbotg {
473 vbus-supply = <&reg_usb_otg_vbus>;
474 pinctrl-names = "default";
475 pinctrl-0 = <&pinctrl_usbotg>;
476 disable-over-current;
477 status = "okay";
478};
479
480&usbh1 {
481 status = "okay";
482};
483
484&usdhc3 {
485 pinctrl-names = "default";
486 pinctrl-0 = <&pinctrl_usdhc3>;
487 cd-gpios = <&gpio7 0 0>;
488 vmmc-supply = <&reg_3p3v>;
489 status = "okay";
490};
diff --git a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi
new file mode 100644
index 000000000000..c8e5ae06deaf
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi
@@ -0,0 +1,553 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/ {
13 /* these are used by bootloader for disabling nodes */
14 aliases {
15 can0 = &can1;
16 ethernet0 = &fec;
17 ethernet1 = &eth1;
18 led0 = &led0;
19 led1 = &led1;
20 led2 = &led2;
21 nand = &gpmi;
22 sky2 = &eth1;
23 ssi0 = &ssi1;
24 usb0 = &usbh1;
25 usb1 = &usbotg;
26 usdhc2 = &usdhc3;
27 };
28
29 chosen {
30 bootargs = "console=ttymxc1,115200";
31 };
32
33 leds {
34 compatible = "gpio-leds";
35
36 led0: user1 {
37 label = "user1";
38 gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */
39 default-state = "on";
40 linux,default-trigger = "heartbeat";
41 };
42
43 led1: user2 {
44 label = "user2";
45 gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */
46 default-state = "off";
47 };
48
49 led2: user3 {
50 label = "user3";
51 gpios = <&gpio4 15 1>; /* 111 -> MX6_LOCLED# */
52 default-state = "off";
53 };
54 };
55
56 memory {
57 reg = <0x10000000 0x40000000>;
58 };
59
60 pps {
61 compatible = "pps-gpio";
62 gpios = <&gpio1 26 0>;
63 status = "okay";
64 };
65
66 regulators {
67 compatible = "simple-bus";
68 #address-cells = <1>;
69 #size-cells = <0>;
70
71 reg_1p0v: regulator@0 {
72 compatible = "regulator-fixed";
73 reg = <0>;
74 regulator-name = "1P0V";
75 regulator-min-microvolt = <1000000>;
76 regulator-max-microvolt = <1000000>;
77 regulator-always-on;
78 };
79
80 /* remove when pmic 1p8 regulator available */
81 reg_1p8v: regulator@1 {
82 compatible = "regulator-fixed";
83 reg = <1>;
84 regulator-name = "1P8V";
85 regulator-min-microvolt = <1800000>;
86 regulator-max-microvolt = <1800000>;
87 regulator-always-on;
88 };
89
90 reg_3p3v: regulator@2 {
91 compatible = "regulator-fixed";
92 reg = <2>;
93 regulator-name = "3P3V";
94 regulator-min-microvolt = <3300000>;
95 regulator-max-microvolt = <3300000>;
96 regulator-always-on;
97 };
98
99 reg_usb_h1_vbus: regulator@3 {
100 compatible = "regulator-fixed";
101 reg = <3>;
102 regulator-name = "usb_h1_vbus";
103 regulator-min-microvolt = <5000000>;
104 regulator-max-microvolt = <5000000>;
105 regulator-always-on;
106 };
107
108 reg_usb_otg_vbus: regulator@4 {
109 compatible = "regulator-fixed";
110 reg = <4>;
111 regulator-name = "usb_otg_vbus";
112 regulator-min-microvolt = <5000000>;
113 regulator-max-microvolt = <5000000>;
114 gpio = <&gpio3 22 0>;
115 enable-active-high;
116 };
117 };
118
119 sound {
120 compatible = "fsl,imx6q-sabrelite-sgtl5000",
121 "fsl,imx-audio-sgtl5000";
122 model = "imx6q-sabrelite-sgtl5000";
123 ssi-controller = <&ssi1>;
124 audio-codec = <&codec>;
125 audio-routing =
126 "MIC_IN", "Mic Jack",
127 "Mic Jack", "Mic Bias",
128 "Headphone Jack", "HP_OUT";
129 mux-int-port = <1>;
130 mux-ext-port = <4>;
131 };
132};
133
134&audmux {
135 pinctrl-names = "default";
136 pinctrl-0 = <&pinctrl_audmux>;
137 status = "okay";
138};
139
140&can1 {
141 pinctrl-names = "default";
142 pinctrl-0 = <&pinctrl_flexcan1>;
143 status = "okay";
144};
145
146&fec {
147 pinctrl-names = "default";
148 pinctrl-0 = <&pinctrl_enet>;
149 phy-mode = "rgmii";
150 phy-reset-gpios = <&gpio1 30 0>;
151 status = "okay";
152};
153
154&gpmi {
155 pinctrl-names = "default";
156 pinctrl-0 = <&pinctrl_gpmi_nand>;
157 status = "okay";
158};
159
160&i2c1 {
161 clock-frequency = <100000>;
162 pinctrl-names = "default";
163 pinctrl-0 = <&pinctrl_i2c1>;
164 status = "okay";
165
166 eeprom1: eeprom@50 {
167 compatible = "atmel,24c02";
168 reg = <0x50>;
169 pagesize = <16>;
170 };
171
172 eeprom2: eeprom@51 {
173 compatible = "atmel,24c02";
174 reg = <0x51>;
175 pagesize = <16>;
176 };
177
178 eeprom3: eeprom@52 {
179 compatible = "atmel,24c02";
180 reg = <0x52>;
181 pagesize = <16>;
182 };
183
184 eeprom4: eeprom@53 {
185 compatible = "atmel,24c02";
186 reg = <0x53>;
187 pagesize = <16>;
188 };
189
190 gpio: pca9555@23 {
191 compatible = "nxp,pca9555";
192 reg = <0x23>;
193 gpio-controller;
194 #gpio-cells = <2>;
195 };
196
197 hwmon: gsc@29 {
198 compatible = "gw,gsp";
199 reg = <0x29>;
200 };
201
202 rtc: ds1672@68 {
203 compatible = "dallas,ds1672";
204 reg = <0x68>;
205 };
206};
207
208&i2c2 {
209 clock-frequency = <100000>;
210 pinctrl-names = "default";
211 pinctrl-0 = <&pinctrl_i2c2>;
212 status = "okay";
213
214 pciclkgen: si53156@6b {
215 compatible = "sil,si53156";
216 reg = <0x6b>;
217 };
218
219 pciswitch: pex8606@3f {
220 compatible = "plx,pex8606";
221 reg = <0x3f>;
222 };
223
224 pmic: ltc3676@3c {
225 compatible = "ltc,ltc3676";
226 reg = <0x3c>;
227
228 regulators {
229 /* VDD_SOC */
230 sw1_reg: ltc3676__sw1 {
231 regulator-min-microvolt = <1175000>;
232 regulator-max-microvolt = <1175000>;
233 regulator-boot-on;
234 regulator-always-on;
235 };
236
237 /* VDD_1P8 */
238 sw2_reg: ltc3676__sw2 {
239 regulator-min-microvolt = <1800000>;
240 regulator-max-microvolt = <1800000>;
241 regulator-boot-on;
242 regulator-always-on;
243 };
244
245 /* VDD_ARM */
246 sw3_reg: ltc3676__sw3 {
247 regulator-min-microvolt = <1175000>;
248 regulator-max-microvolt = <1175000>;
249 regulator-boot-on;
250 regulator-always-on;
251 };
252
253 /* VDD_DDR */
254 sw4_reg: ltc3676__sw4 {
255 regulator-min-microvolt = <1500000>;
256 regulator-max-microvolt = <1500000>;
257 regulator-boot-on;
258 regulator-always-on;
259 };
260
261 /* VDD_2P5 */
262 ldo2_reg: ltc3676__ldo2 {
263 regulator-min-microvolt = <2500000>;
264 regulator-max-microvolt = <2500000>;
265 regulator-boot-on;
266 regulator-always-on;
267 };
268
269 /* VDD_1P8 */
270 ldo3_reg: ltc3676__ldo3 {
271 regulator-min-microvolt = <1800000>;
272 regulator-max-microvolt = <1800000>;
273 regulator-boot-on;
274 regulator-always-on;
275 };
276
277 /* VDD_HIGH */
278 ldo4_reg: ltc3676__ldo4 {
279 regulator-min-microvolt = <3000000>;
280 regulator-max-microvolt = <3000000>;
281 };
282 };
283 };
284};
285
286&i2c3 {
287 clock-frequency = <100000>;
288 pinctrl-names = "default";
289 pinctrl-0 = <&pinctrl_i2c3>;
290 status = "okay";
291
292 accelerometer: fxos8700@1e {
293 compatible = "fsl,fxos8700";
294 reg = <0x1e>;
295 };
296
297 codec: sgtl5000@0a {
298 compatible = "fsl,sgtl5000";
299 reg = <0x0a>;
300 clocks = <&clks 201>;
301 VDDA-supply = <&reg_1p8v>;
302 VDDIO-supply = <&reg_3p3v>;
303 };
304
305 hdmiin: adv7611@4c {
306 compatible = "adi,adv7611";
307 reg = <0x4c>;
308 };
309
310 touchscreen: egalax_ts@04 {
311 compatible = "eeti,egalax_ts";
312 reg = <0x04>;
313 interrupt-parent = <&gpio1>;
314 interrupts = <11 2>; /* gpio1_11 active low */
315 wakeup-gpios = <&gpio1 11 0>;
316 };
317
318 videoout: adv7393@2a {
319 compatible = "adi,adv7393";
320 reg = <0x2a>;
321 };
322
323 videoin: adv7180@20 {
324 compatible = "adi,adv7180";
325 reg = <0x20>;
326 };
327};
328
329&iomuxc {
330 pinctrl-names = "default";
331 pinctrl-0 = <&pinctrl_hog>;
332
333 imx6qdl-gw53xx {
334 pinctrl_hog: hoggrp {
335 fsl,pins = <
336 MX6QDL_PAD_EIM_A19__GPIO2_IO19 0x80000000 /* PCIE6EXP_DIO0 */
337 MX6QDL_PAD_EIM_A20__GPIO2_IO18 0x80000000 /* PCIE6EXP_DIO1 */
338 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 /* OTG_PWR_EN */
339 MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000 /* GPS_SHDN */
340 MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* GPS_PPS */
341 MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 /* PCIE IRQ */
342 MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 /* PCIE RST */
343 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x000130b0 /* AUD4_MCK */
344 MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 /* CAN_STBY */
345 MX6QDL_PAD_GPIO_8__GPIO1_IO08 0x80000000 /* PMIC_IRQ# */
346 MX6QDL_PAD_GPIO_9__GPIO1_IO09 0x80000000 /* HUB_RST# */
347 MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 /* PCIE_WDIS# */
348 MX6QDL_PAD_GPIO_19__GPIO4_IO05 0x80000000 /* ACCEL_IRQ# */
349 MX6QDL_PAD_KEY_COL0__GPIO4_IO06 0x80000000 /* user1 led */
350 MX6QDL_PAD_KEY_COL4__GPIO4_IO14 0x80000000 /* USBOTG_OC# */
351 MX6QDL_PAD_KEY_ROW0__GPIO4_IO07 0x80000000 /* user2 led */
352 MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000 /* user3 led */
353 MX6QDL_PAD_SD2_CMD__GPIO1_IO11 0x80000000 /* TOUCH_IRQ# */
354 MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000 /* SD3_DET# */
355 >;
356 };
357
358 pinctrl_audmux: audmuxgrp {
359 fsl,pins = <
360 MX6QDL_PAD_SD2_DAT0__AUD4_RXD 0x130b0
361 MX6QDL_PAD_SD2_DAT3__AUD4_TXC 0x130b0
362 MX6QDL_PAD_SD2_DAT2__AUD4_TXD 0x110b0
363 MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x130b0
364 >;
365 };
366
367 pinctrl_enet: enetgrp {
368 fsl,pins = <
369 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
370 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
371 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
372 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
373 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
374 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
375 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
376 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
377 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
378 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
379 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
380 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
381 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
382 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
383 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
384 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
385 >;
386 };
387
388 pinctrl_flexcan1: flexcan1grp {
389 fsl,pins = <
390 MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
391 MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x80000000
392 >;
393 };
394
395 pinctrl_gpmi_nand: gpminandgrp {
396 fsl,pins = <
397 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
398 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
399 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
400 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
401 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
402 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
403 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
404 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
405 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
406 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
407 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
408 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
409 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
410 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
411 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
412 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
413 >;
414 };
415
416 pinctrl_i2c1: i2c1grp {
417 fsl,pins = <
418 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
419 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
420 >;
421 };
422
423 pinctrl_i2c2: i2c2grp {
424 fsl,pins = <
425 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
426 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
427 >;
428 };
429
430 pinctrl_i2c3: i2c3grp {
431 fsl,pins = <
432 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
433 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
434 >;
435 };
436
437 pinctrl_uart1: uart1grp {
438 fsl,pins = <
439 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
440 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
441 >;
442 };
443
444 pinctrl_uart2: uart2grp {
445 fsl,pins = <
446 MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA 0x1b0b1
447 MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA 0x1b0b1
448 >;
449 };
450
451 pinctrl_uart5: uart5grp {
452 fsl,pins = <
453 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA 0x1b0b1
454 MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1
455 >;
456 };
457
458 pinctrl_usbotg: usbotggrp {
459 fsl,pins = <
460 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
461 >;
462 };
463
464 pinctrl_usdhc3: usdhc3grp {
465 fsl,pins = <
466 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
467 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
468 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
469 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
470 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
471 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
472 >;
473 };
474 };
475};
476
477&ldb {
478 status = "okay";
479
480 lvds-channel@1 {
481 fsl,data-mapping = "spwg";
482 fsl,data-width = <18>;
483 status = "okay";
484
485 display-timings {
486 native-mode = <&timing0>;
487 timing0: hsd100pxn1 {
488 clock-frequency = <65000000>;
489 hactive = <1024>;
490 vactive = <768>;
491 hback-porch = <220>;
492 hfront-porch = <40>;
493 vback-porch = <21>;
494 vfront-porch = <7>;
495 hsync-len = <60>;
496 vsync-len = <10>;
497 };
498 };
499 };
500};
501
502&pcie {
503 reset-gpio = <&gpio1 29 0>;
504 status = "okay";
505
506 eth1: sky2@8 { /* MAC/PHY on bus 8 */
507 compatible = "marvell,sky2";
508 };
509};
510
511&ssi1 {
512 fsl,mode = "i2s-slave";
513 status = "okay";
514};
515
516&uart1 {
517 pinctrl-names = "default";
518 pinctrl-0 = <&pinctrl_uart1>;
519 status = "okay";
520};
521
522&uart2 {
523 pinctrl-names = "default";
524 pinctrl-0 = <&pinctrl_uart2>;
525 status = "okay";
526};
527
528&uart5 {
529 pinctrl-names = "default";
530 pinctrl-0 = <&pinctrl_uart5>;
531 status = "okay";
532};
533
534&usbotg {
535 vbus-supply = <&reg_usb_otg_vbus>;
536 pinctrl-names = "default";
537 pinctrl-0 = <&pinctrl_usbotg>;
538 disable-over-current;
539 status = "okay";
540};
541
542&usbh1 {
543 vbus-supply = <&reg_usb_h1_vbus>;
544 status = "okay";
545};
546
547&usdhc3 {
548 pinctrl-names = "default";
549 pinctrl-0 = <&pinctrl_usdhc3>;
550 cd-gpios = <&gpio7 0 0>;
551 vmmc-supply = <&reg_3p3v>;
552 status = "okay";
553};
diff --git a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi
new file mode 100644
index 000000000000..2795dfc8c926
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi
@@ -0,0 +1,580 @@
1/*
2 * Copyright 2013 Gateworks Corporation
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/ {
13 /* these are used by bootloader for disabling nodes */
14 aliases {
15 can0 = &can1;
16 ethernet0 = &fec;
17 ethernet1 = &eth1;
18 led0 = &led0;
19 led1 = &led1;
20 led2 = &led2;
21 nand = &gpmi;
22 sky2 = &eth1;
23 ssi0 = &ssi1;
24 usb0 = &usbh1;
25 usb1 = &usbotg;
26 usdhc2 = &usdhc3;
27 };
28
29 chosen {
30 bootargs = "console=ttymxc1,115200";
31 };
32
33 leds {
34 compatible = "gpio-leds";
35
36 led0: user1 {
37 label = "user1";
38 gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */
39 default-state = "on";
40 linux,default-trigger = "heartbeat";
41 };
42
43 led1: user2 {
44 label = "user2";
45 gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */
46 default-state = "off";
47 };
48
49 led2: user3 {
50 label = "user3";
51 gpios = <&gpio4 15 1>; /* 111 -> MX6_LOCLED# */
52 default-state = "off";
53 };
54 };
55
56 memory {
57 reg = <0x10000000 0x40000000>;
58 };
59
60 pps {
61 compatible = "pps-gpio";
62 gpios = <&gpio1 26 0>;
63 status = "okay";
64 };
65
66 regulators {
67 compatible = "simple-bus";
68 #address-cells = <1>;
69 #size-cells = <0>;
70
71 reg_1p0v: regulator@0 {
72 compatible = "regulator-fixed";
73 reg = <0>;
74 regulator-name = "1P0V";
75 regulator-min-microvolt = <1000000>;
76 regulator-max-microvolt = <1000000>;
77 regulator-always-on;
78 };
79
80 reg_3p3v: regulator@1 {
81 compatible = "regulator-fixed";
82 reg = <1>;
83 regulator-name = "3P3V";
84 regulator-min-microvolt = <3300000>;
85 regulator-max-microvolt = <3300000>;
86 regulator-always-on;
87 };
88
89 reg_usb_h1_vbus: regulator@2 {
90 compatible = "regulator-fixed";
91 reg = <2>;
92 regulator-name = "usb_h1_vbus";
93 regulator-min-microvolt = <5000000>;
94 regulator-max-microvolt = <5000000>;
95 regulator-always-on;
96 };
97
98 reg_usb_otg_vbus: regulator@3 {
99 compatible = "regulator-fixed";
100 reg = <3>;
101 regulator-name = "usb_otg_vbus";
102 regulator-min-microvolt = <5000000>;
103 regulator-max-microvolt = <5000000>;
104 gpio = <&gpio3 22 0>;
105 enable-active-high;
106 };
107 };
108
109 sound {
110 compatible = "fsl,imx6q-sabrelite-sgtl5000",
111 "fsl,imx-audio-sgtl5000";
112 model = "imx6q-sabrelite-sgtl5000";
113 ssi-controller = <&ssi1>;
114 audio-codec = <&codec>;
115 audio-routing =
116 "MIC_IN", "Mic Jack",
117 "Mic Jack", "Mic Bias",
118 "Headphone Jack", "HP_OUT";
119 mux-int-port = <1>;
120 mux-ext-port = <4>;
121 };
122};
123
124&audmux {
125 pinctrl-names = "default";
126 pinctrl-0 = <&pinctrl_audmux>; /* AUD4<->sgtl5000 */
127 status = "okay";
128};
129
130&can1 {
131 pinctrl-names = "default";
132 pinctrl-0 = <&pinctrl_flexcan1>;
133 status = "okay";
134};
135
136&fec {
137 pinctrl-names = "default";
138 pinctrl-0 = <&pinctrl_enet>;
139 phy-mode = "rgmii";
140 phy-reset-gpios = <&gpio1 30 0>;
141 status = "okay";
142};
143
144&gpmi {
145 pinctrl-names = "default";
146 pinctrl-0 = <&pinctrl_gpmi_nand>;
147 status = "okay";
148};
149
150&i2c1 {
151 clock-frequency = <100000>;
152 pinctrl-names = "default";
153 pinctrl-0 = <&pinctrl_i2c1>;
154 status = "okay";
155
156 eeprom1: eeprom@50 {
157 compatible = "atmel,24c02";
158 reg = <0x50>;
159 pagesize = <16>;
160 };
161
162 eeprom2: eeprom@51 {
163 compatible = "atmel,24c02";
164 reg = <0x51>;
165 pagesize = <16>;
166 };
167
168 eeprom3: eeprom@52 {
169 compatible = "atmel,24c02";
170 reg = <0x52>;
171 pagesize = <16>;
172 };
173
174 eeprom4: eeprom@53 {
175 compatible = "atmel,24c02";
176 reg = <0x53>;
177 pagesize = <16>;
178 };
179
180 gpio: pca9555@23 {
181 compatible = "nxp,pca9555";
182 reg = <0x23>;
183 gpio-controller;
184 #gpio-cells = <2>;
185 };
186
187 hwmon: gsc@29 {
188 compatible = "gw,gsp";
189 reg = <0x29>;
190 };
191
192 rtc: ds1672@68 {
193 compatible = "dallas,ds1672";
194 reg = <0x68>;
195 };
196};
197
198&i2c2 {
199 clock-frequency = <100000>;
200 pinctrl-names = "default";
201 pinctrl-0 = <&pinctrl_i2c2>;
202 status = "okay";
203
204 pmic: pfuze100@08 {
205 compatible = "fsl,pfuze100";
206 reg = <0x08>;
207
208 regulators {
209 sw1a_reg: sw1ab {
210 regulator-min-microvolt = <300000>;
211 regulator-max-microvolt = <1875000>;
212 regulator-boot-on;
213 regulator-always-on;
214 regulator-ramp-delay = <6250>;
215 };
216
217 sw1c_reg: sw1c {
218 regulator-min-microvolt = <300000>;
219 regulator-max-microvolt = <1875000>;
220 regulator-boot-on;
221 regulator-always-on;
222 regulator-ramp-delay = <6250>;
223 };
224
225 sw2_reg: sw2 {
226 regulator-min-microvolt = <800000>;
227 regulator-max-microvolt = <3950000>;
228 regulator-boot-on;
229 regulator-always-on;
230 };
231
232 sw3a_reg: sw3a {
233 regulator-min-microvolt = <400000>;
234 regulator-max-microvolt = <1975000>;
235 regulator-boot-on;
236 regulator-always-on;
237 };
238
239 sw3b_reg: sw3b {
240 regulator-min-microvolt = <400000>;
241 regulator-max-microvolt = <1975000>;
242 regulator-boot-on;
243 regulator-always-on;
244 };
245
246 sw4_reg: sw4 {
247 regulator-min-microvolt = <800000>;
248 regulator-max-microvolt = <3300000>;
249 };
250
251 swbst_reg: swbst {
252 regulator-min-microvolt = <5000000>;
253 regulator-max-microvolt = <5150000>;
254 };
255
256 snvs_reg: vsnvs {
257 regulator-min-microvolt = <1000000>;
258 regulator-max-microvolt = <3000000>;
259 regulator-boot-on;
260 regulator-always-on;
261 };
262
263 vref_reg: vrefddr {
264 regulator-boot-on;
265 regulator-always-on;
266 };
267
268 vgen1_reg: vgen1 {
269 regulator-min-microvolt = <800000>;
270 regulator-max-microvolt = <1550000>;
271 };
272
273 vgen2_reg: vgen2 {
274 regulator-min-microvolt = <800000>;
275 regulator-max-microvolt = <1550000>;
276 };
277
278 vgen3_reg: vgen3 {
279 regulator-min-microvolt = <1800000>;
280 regulator-max-microvolt = <3300000>;
281 };
282
283 vgen4_reg: vgen4 {
284 regulator-min-microvolt = <1800000>;
285 regulator-max-microvolt = <3300000>;
286 regulator-always-on;
287 };
288
289 vgen5_reg: vgen5 {
290 regulator-min-microvolt = <1800000>;
291 regulator-max-microvolt = <3300000>;
292 regulator-always-on;
293 };
294
295 vgen6_reg: vgen6 {
296 regulator-min-microvolt = <1800000>;
297 regulator-max-microvolt = <3300000>;
298 regulator-always-on;
299 };
300 };
301 };
302
303 pciswitch: pex8609@3f {
304 compatible = "plx,pex8609";
305 reg = <0x3f>;
306 };
307
308 pciclkgen: si52147@6b {
309 compatible = "sil,si52147";
310 reg = <0x6b>;
311 };
312};
313
314&i2c3 {
315 clock-frequency = <100000>;
316 pinctrl-names = "default";
317 pinctrl-0 = <&pinctrl_i2c3>;
318 status = "okay";
319
320 accelerometer: fxos8700@1e {
321 compatible = "fsl,fxos8700";
322 reg = <0x1e>;
323 };
324
325 codec: sgtl5000@0a {
326 compatible = "fsl,sgtl5000";
327 reg = <0x0a>;
328 clocks = <&clks 201>;
329 VDDA-supply = <&sw4_reg>;
330 VDDIO-supply = <&reg_3p3v>;
331 };
332
333 hdmiin: adv7611@4c {
334 compatible = "adi,adv7611";
335 reg = <0x4c>;
336 };
337
338 touchscreen: egalax_ts@04 {
339 compatible = "eeti,egalax_ts";
340 reg = <0x04>;
341 interrupt-parent = <&gpio7>;
342 interrupts = <12 2>; /* gpio7_12 active low */
343 wakeup-gpios = <&gpio7 12 0>;
344 };
345
346 videoout: adv7393@2a {
347 compatible = "adi,adv7393";
348 reg = <0x2a>;
349 };
350
351 videoin: adv7180@20 {
352 compatible = "adi,adv7180";
353 reg = <0x20>;
354 };
355};
356
357&iomuxc {
358 pinctrl-names = "default";
359 pinctrl-0 = <&pinctrl_hog>;
360
361 imx6qdl-gw54xx {
362 pinctrl_hog: hoggrp {
363 fsl,pins = <
364 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 /* OTG_PWR_EN */
365 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x80000000 /* SPINOR_CS0# */
366 MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* GPS_PPS */
367 MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 /* PCIE IRQ */
368 MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 /* PCIE RST */
369 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x000130b0 /* AUD4_MCK */
370 MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 /* CAN_STBY */
371 MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 /* TOUCH_IRQ# */
372 MX6QDL_PAD_KEY_COL0__GPIO4_IO06 0x80000000 /* user1 led */
373 MX6QDL_PAD_KEY_ROW0__GPIO4_IO07 0x80000000 /* user2 led */
374 MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000 /* user3 led */
375 MX6QDL_PAD_SD1_DAT0__GPIO1_IO16 0x80000000 /* USBHUB_RST# */
376 MX6QDL_PAD_SD1_DAT3__GPIO1_IO21 0x80000000 /* MIPI_DIO */
377 >;
378 };
379
380 pinctrl_audmux: audmuxgrp {
381 fsl,pins = <
382 MX6QDL_PAD_SD2_DAT0__AUD4_RXD 0x130b0
383 MX6QDL_PAD_SD2_DAT3__AUD4_TXC 0x130b0
384 MX6QDL_PAD_SD2_DAT2__AUD4_TXD 0x110b0
385 MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x130b0
386 >;
387 };
388
389 pinctrl_enet: enetgrp {
390 fsl,pins = <
391 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
392 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
393 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
394 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
395 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
396 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
397 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
398 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
399 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
400 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
401 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
402 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
403 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
404 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
405 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
406 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
407 >;
408 };
409
410 pinctrl_flexcan1: flexcan1grp {
411 fsl,pins = <
412 MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
413 MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x80000000
414 >;
415 };
416
417 pinctrl_gpmi_nand: gpminandgrp {
418 fsl,pins = <
419 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
420 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
421 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
422 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
423 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
424 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
425 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
426 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
427 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
428 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
429 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
430 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
431 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
432 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
433 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
434 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
435 >;
436 };
437
438 pinctrl_i2c1: i2c1grp {
439 fsl,pins = <
440 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
441 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
442 >;
443 };
444
445 pinctrl_i2c2: i2c2grp {
446 fsl,pins = <
447 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
448 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
449 >;
450 };
451
452 pinctrl_i2c3: i2c3grp {
453 fsl,pins = <
454 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
455 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
456 >;
457 };
458
459 pinctrl_uart1: uart1grp {
460 fsl,pins = <
461 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
462 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
463 >;
464 };
465
466 pinctrl_uart2: uart2grp {
467 fsl,pins = <
468 MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA 0x1b0b1
469 MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA 0x1b0b1
470 >;
471 };
472
473 pinctrl_uart5: uart5grp {
474 fsl,pins = <
475 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA 0x1b0b1
476 MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1
477 >;
478 };
479
480 pinctrl_usbotg: usbotggrp {
481 fsl,pins = <
482 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
483 >;
484 };
485
486 pinctrl_usdhc3: usdhc3grp {
487 fsl,pins = <
488 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
489 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
490 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
491 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
492 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
493 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
494 >;
495 };
496 };
497};
498
499&ldb {
500 status = "okay";
501
502 lvds-channel@1 {
503 fsl,data-mapping = "spwg";
504 fsl,data-width = <18>;
505 status = "okay";
506
507 display-timings {
508 native-mode = <&timing0>;
509 timing0: hsd100pxn1 {
510 clock-frequency = <65000000>;
511 hactive = <1024>;
512 vactive = <768>;
513 hback-porch = <220>;
514 hfront-porch = <40>;
515 vback-porch = <21>;
516 vfront-porch = <7>;
517 hsync-len = <60>;
518 vsync-len = <10>;
519 };
520 };
521 };
522};
523
524&pcie {
525 reset-gpio = <&gpio1 29 0>;
526 status = "okay";
527
528 eth1: sky2@8 { /* MAC/PHY on bus 8 */
529 compatible = "marvell,sky2";
530 };
531};
532
533&ssi1 {
534 fsl,mode = "i2s-slave";
535 status = "okay";
536};
537
538&ssi2 {
539 fsl,mode = "i2s-slave";
540 status = "okay";
541};
542
543&uart1 {
544 pinctrl-names = "default";
545 pinctrl-0 = <&pinctrl_uart1>;
546 status = "okay";
547};
548
549&uart2 {
550 pinctrl-names = "default";
551 pinctrl-0 = <&pinctrl_uart2>;
552 status = "okay";
553};
554
555&uart5 {
556 pinctrl-names = "default";
557 pinctrl-0 = <&pinctrl_uart5>;
558 status = "okay";
559};
560
561&usbotg {
562 vbus-supply = <&reg_usb_otg_vbus>;
563 pinctrl-names = "default";
564 pinctrl-0 = <&pinctrl_usbotg>;
565 disable-over-current;
566 status = "okay";
567};
568
569&usbh1 {
570 vbus-supply = <&reg_usb_h1_vbus>;
571 status = "okay";
572};
573
574&usdhc3 {
575 pinctrl-names = "default";
576 pinctrl-0 = <&pinctrl_usdhc3>;
577 cd-gpios = <&gpio7 0 0>;
578 vmmc-supply = <&reg_3p3v>;
579 status = "okay";
580};
diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
new file mode 100644
index 000000000000..99be301b5232
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
@@ -0,0 +1,422 @@
1/*
2 * Copyright 2013 Boundary Devices, Inc.
3 * Copyright 2011 Freescale Semiconductor, Inc.
4 * Copyright 2011 Linaro Ltd.
5 *
6 * The code contained herein is licensed under the GNU General Public
7 * License. You may obtain a copy of the GNU General Public License
8 * Version 2 or later at the following locations:
9 *
10 * http://www.opensource.org/licenses/gpl-license.html
11 * http://www.gnu.org/copyleft/gpl.html
12 */
13#include <dt-bindings/gpio/gpio.h>
14#include <dt-bindings/input/input.h>
15
16/ {
17 memory {
18 reg = <0x10000000 0x40000000>;
19 };
20
21 regulators {
22 compatible = "simple-bus";
23 #address-cells = <1>;
24 #size-cells = <0>;
25
26 reg_2p5v: regulator@0 {
27 compatible = "regulator-fixed";
28 reg = <0>;
29 regulator-name = "2P5V";
30 regulator-min-microvolt = <2500000>;
31 regulator-max-microvolt = <2500000>;
32 regulator-always-on;
33 };
34
35 reg_3p3v: regulator@1 {
36 compatible = "regulator-fixed";
37 reg = <1>;
38 regulator-name = "3P3V";
39 regulator-min-microvolt = <3300000>;
40 regulator-max-microvolt = <3300000>;
41 regulator-always-on;
42 };
43
44 reg_usb_otg_vbus: regulator@2 {
45 compatible = "regulator-fixed";
46 reg = <2>;
47 regulator-name = "usb_otg_vbus";
48 regulator-min-microvolt = <5000000>;
49 regulator-max-microvolt = <5000000>;
50 gpio = <&gpio3 22 0>;
51 enable-active-high;
52 };
53 };
54
55 gpio-keys {
56 compatible = "gpio-keys";
57 pinctrl-names = "default";
58 pinctrl-0 = <&pinctrl_gpio_keys>;
59
60 power {
61 label = "Power Button";
62 gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
63 linux,code = <KEY_POWER>;
64 gpio-key,wakeup;
65 };
66
67 menu {
68 label = "Menu";
69 gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
70 linux,code = <KEY_MENU>;
71 };
72
73 home {
74 label = "Home";
75 gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
76 linux,code = <KEY_HOME>;
77 };
78
79 back {
80 label = "Back";
81 gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
82 linux,code = <KEY_BACK>;
83 };
84
85 volume-up {
86 label = "Volume Up";
87 gpios = <&gpio7 13 GPIO_ACTIVE_LOW>;
88 linux,code = <KEY_VOLUMEUP>;
89 };
90
91 volume-down {
92 label = "Volume Down";
93 gpios = <&gpio4 5 GPIO_ACTIVE_LOW>;
94 linux,code = <KEY_VOLUMEDOWN>;
95 };
96 };
97
98 sound {
99 compatible = "fsl,imx6q-nitrogen6x-sgtl5000",
100 "fsl,imx-audio-sgtl5000";
101 model = "imx6q-nitrogen6x-sgtl5000";
102 ssi-controller = <&ssi1>;
103 audio-codec = <&codec>;
104 audio-routing =
105 "MIC_IN", "Mic Jack",
106 "Mic Jack", "Mic Bias",
107 "Headphone Jack", "HP_OUT";
108 mux-int-port = <1>;
109 mux-ext-port = <3>;
110 };
111
112 backlight_lcd {
113 compatible = "pwm-backlight";
114 pwms = <&pwm1 0 5000000>;
115 brightness-levels = <0 4 8 16 32 64 128 255>;
116 default-brightness-level = <7>;
117 power-supply = <&reg_3p3v>;
118 status = "okay";
119 };
120
121 backlight_lvds {
122 compatible = "pwm-backlight";
123 pwms = <&pwm4 0 5000000>;
124 brightness-levels = <0 4 8 16 32 64 128 255>;
125 default-brightness-level = <7>;
126 power-supply = <&reg_3p3v>;
127 status = "okay";
128 };
129};
130
131&audmux {
132 pinctrl-names = "default";
133 pinctrl-0 = <&pinctrl_audmux>;
134 status = "okay";
135};
136
137&ecspi1 {
138 fsl,spi-num-chipselects = <1>;
139 cs-gpios = <&gpio3 19 0>;
140 pinctrl-names = "default";
141 pinctrl-0 = <&pinctrl_ecspi1>;
142 status = "okay";
143
144 flash: m25p80@0 {
145 compatible = "sst,sst25vf016b";
146 spi-max-frequency = <20000000>;
147 reg = <0>;
148 };
149};
150
151&fec {
152 pinctrl-names = "default";
153 pinctrl-0 = <&pinctrl_enet>;
154 phy-mode = "rgmii";
155 phy-reset-gpios = <&gpio1 27 0>;
156 txen-skew-ps = <0>;
157 txc-skew-ps = <3000>;
158 rxdv-skew-ps = <0>;
159 rxc-skew-ps = <3000>;
160 rxd0-skew-ps = <0>;
161 rxd1-skew-ps = <0>;
162 rxd2-skew-ps = <0>;
163 rxd3-skew-ps = <0>;
164 txd0-skew-ps = <0>;
165 txd1-skew-ps = <0>;
166 txd2-skew-ps = <0>;
167 txd3-skew-ps = <0>;
168 interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
169 <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
170 status = "okay";
171};
172
173&i2c1 {
174 clock-frequency = <100000>;
175 pinctrl-names = "default";
176 pinctrl-0 = <&pinctrl_i2c1>;
177 status = "okay";
178
179 codec: sgtl5000@0a {
180 compatible = "fsl,sgtl5000";
181 reg = <0x0a>;
182 clocks = <&clks 201>;
183 VDDA-supply = <&reg_2p5v>;
184 VDDIO-supply = <&reg_3p3v>;
185 };
186};
187
188&iomuxc {
189 pinctrl-names = "default";
190 pinctrl-0 = <&pinctrl_hog>;
191
192 imx6q-nitrogen6x {
193 pinctrl_hog: hoggrp {
194 fsl,pins = <
195 /* SGTL5000 sys_mclk */
196 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x030b0
197 >;
198 };
199
200 pinctrl_audmux: audmuxgrp {
201 fsl,pins = <
202 MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
203 MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x130b0
204 MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x110b0
205 MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x130b0
206 >;
207 };
208
209 pinctrl_ecspi1: ecspi1grp {
210 fsl,pins = <
211 MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
212 MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
213 MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
214 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x000b1 /* CS */
215 >;
216 };
217
218 pinctrl_enet: enetgrp {
219 fsl,pins = <
220 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x100b0
221 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x100b0
222 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x100b0
223 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x100b0
224 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x100b0
225 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x100b0
226 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x100b0
227 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x100b0
228 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x100b0
229 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
230 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
231 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
232 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
233 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
234 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
235 /* Phy reset */
236 MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x000b0
237 MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1
238 >;
239 };
240
241 pinctrl_gpio_keys: gpio_keysgrp {
242 fsl,pins = <
243 /* Power Button */
244 MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x1b0b0
245 /* Menu Button */
246 MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x1b0b0
247 /* Home Button */
248 MX6QDL_PAD_NANDF_D4__GPIO2_IO04 0x1b0b0
249 /* Back Button */
250 MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x1b0b0
251 /* Volume Up Button */
252 MX6QDL_PAD_GPIO_18__GPIO7_IO13 0x1b0b0
253 /* Volume Down Button */
254 MX6QDL_PAD_GPIO_19__GPIO4_IO05 0x1b0b0
255 >;
256 };
257
258 pinctrl_i2c1: i2c1grp {
259 fsl,pins = <
260 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
261 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
262 >;
263 };
264
265 pinctrl_pwm1: pwm1grp {
266 fsl,pins = <
267 MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
268 >;
269 };
270
271 pinctrl_pwm3: pwm3grp {
272 fsl,pins = <
273 MX6QDL_PAD_SD1_DAT1__PWM3_OUT 0x1b0b1
274 >;
275 };
276
277 pinctrl_pwm4: pwm4grp {
278 fsl,pins = <
279 MX6QDL_PAD_SD1_CMD__PWM4_OUT 0x1b0b1
280 >;
281 };
282
283 pinctrl_uart1: uart1grp {
284 fsl,pins = <
285 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
286 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
287 >;
288 };
289
290 pinctrl_uart2: uart2grp {
291 fsl,pins = <
292 MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
293 MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
294 >;
295 };
296
297 pinctrl_usbotg: usbotggrp {
298 fsl,pins = <
299 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
300 MX6QDL_PAD_KEY_COL4__USB_OTG_OC 0x1b0b0
301 /* power enable, high active */
302 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x000b0
303 >;
304 };
305
306 pinctrl_usdhc3: usdhc3grp {
307 fsl,pins = <
308 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
309 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
310 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
311 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
312 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
313 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
314 MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x1b0b0 /* CD */
315 >;
316 };
317
318 pinctrl_usdhc4: usdhc4grp {
319 fsl,pins = <
320 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
321 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
322 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
323 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
324 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
325 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
326 MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x1b0b0 /* CD */
327 >;
328 };
329 };
330};
331
332&ldb {
333 status = "okay";
334
335 lvds-channel@0 {
336 fsl,data-mapping = "spwg";
337 fsl,data-width = <18>;
338 status = "okay";
339
340 display-timings {
341 native-mode = <&timing0>;
342 timing0: hsd100pxn1 {
343 clock-frequency = <65000000>;
344 hactive = <1024>;
345 vactive = <768>;
346 hback-porch = <220>;
347 hfront-porch = <40>;
348 vback-porch = <21>;
349 vfront-porch = <7>;
350 hsync-len = <60>;
351 vsync-len = <10>;
352 };
353 };
354 };
355};
356
357&pcie {
358 status = "okay";
359};
360
361&pwm1 {
362 pinctrl-names = "default";
363 pinctrl-0 = <&pinctrl_pwm1>;
364 status = "okay";
365};
366
367&pwm3 {
368 pinctrl-names = "default";
369 pinctrl-0 = <&pinctrl_pwm3>;
370 status = "okay";
371};
372
373&pwm4 {
374 pinctrl-names = "default";
375 pinctrl-0 = <&pinctrl_pwm4>;
376 status = "okay";
377};
378
379&ssi1 {
380 fsl,mode = "i2s-slave";
381 status = "okay";
382};
383
384&uart1 {
385 pinctrl-names = "default";
386 pinctrl-0 = <&pinctrl_uart1>;
387 status = "okay";
388};
389
390&uart2 {
391 pinctrl-names = "default";
392 pinctrl-0 = <&pinctrl_uart2>;
393 status = "okay";
394};
395
396&usbh1 {
397 status = "okay";
398};
399
400&usbotg {
401 vbus-supply = <&reg_usb_otg_vbus>;
402 pinctrl-names = "default";
403 pinctrl-0 = <&pinctrl_usbotg>;
404 disable-over-current;
405 status = "okay";
406};
407
408&usdhc3 {
409 pinctrl-names = "default";
410 pinctrl-0 = <&pinctrl_usdhc3>;
411 cd-gpios = <&gpio7 0 0>;
412 vmmc-supply = <&reg_3p3v>;
413 status = "okay";
414};
415
416&usdhc4 {
417 pinctrl-names = "default";
418 pinctrl-0 = <&pinctrl_usdhc4>;
419 cd-gpios = <&gpio2 6 0>;
420 vmmc-supply = <&reg_3p3v>;
421 status = "okay";
422};
diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
index ff6f1e8f2dd9..009abd69385d 100644
--- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
@@ -10,17 +10,46 @@
10 * http://www.gnu.org/copyleft/gpl.html 10 * http://www.gnu.org/copyleft/gpl.html
11 */ 11 */
12 12
13#include <dt-bindings/gpio/gpio.h>
14
13/ { 15/ {
14 memory { 16 memory {
15 reg = <0x10000000 0x80000000>; 17 reg = <0x10000000 0x80000000>;
16 }; 18 };
19
20 leds {
21 compatible = "gpio-leds";
22 pinctrl-names = "default";
23 pinctrl-0 = <&pinctrl_gpio_leds>;
24
25 user {
26 label = "debug";
27 gpios = <&gpio5 15 GPIO_ACTIVE_HIGH>;
28 };
29 };
30
31 sound-spdif {
32 compatible = "fsl,imx-audio-spdif",
33 "fsl,imx-sabreauto-spdif";
34 model = "imx-spdif";
35 spdif-controller = <&spdif>;
36 spdif-in;
37 };
38
39 backlight {
40 compatible = "pwm-backlight";
41 pwms = <&pwm3 0 5000000>;
42 brightness-levels = <0 4 8 16 32 64 128 255>;
43 default-brightness-level = <7>;
44 status = "okay";
45 };
17}; 46};
18 47
19&ecspi1 { 48&ecspi1 {
20 fsl,spi-num-chipselects = <1>; 49 fsl,spi-num-chipselects = <1>;
21 cs-gpios = <&gpio3 19 0>; 50 cs-gpios = <&gpio3 19 0>;
22 pinctrl-names = "default"; 51 pinctrl-names = "default";
23 pinctrl-0 = <&pinctrl_ecspi1_1 &pinctrl_ecspi1_sabreauto>; 52 pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
24 status = "disabled"; /* pin conflict with WEIM NOR */ 53 status = "disabled"; /* pin conflict with WEIM NOR */
25 54
26 flash: m25p80@0 { 55 flash: m25p80@0 {
@@ -34,22 +63,130 @@
34 63
35&fec { 64&fec {
36 pinctrl-names = "default"; 65 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_enet_2>; 66 pinctrl-0 = <&pinctrl_enet>;
38 phy-mode = "rgmii"; 67 phy-mode = "rgmii";
68 interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
69 <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
39 status = "okay"; 70 status = "okay";
40}; 71};
41 72
42&gpmi { 73&gpmi {
43 pinctrl-names = "default"; 74 pinctrl-names = "default";
44 pinctrl-0 = <&pinctrl_gpmi_nand_1>; 75 pinctrl-0 = <&pinctrl_gpmi_nand>;
76 status = "okay";
77};
78
79&i2c2 {
80 clock-frequency = <100000>;
81 pinctrl-names = "default";
82 pinctrl-0 = <&pinctrl_i2c2>;
45 status = "okay"; 83 status = "okay";
84
85 pmic: pfuze100@08 {
86 compatible = "fsl,pfuze100";
87 reg = <0x08>;
88
89 regulators {
90 sw1a_reg: sw1ab {
91 regulator-min-microvolt = <300000>;
92 regulator-max-microvolt = <1875000>;
93 regulator-boot-on;
94 regulator-always-on;
95 regulator-ramp-delay = <6250>;
96 };
97
98 sw1c_reg: sw1c {
99 regulator-min-microvolt = <300000>;
100 regulator-max-microvolt = <1875000>;
101 regulator-boot-on;
102 regulator-always-on;
103 regulator-ramp-delay = <6250>;
104 };
105
106 sw2_reg: sw2 {
107 regulator-min-microvolt = <800000>;
108 regulator-max-microvolt = <3300000>;
109 regulator-boot-on;
110 regulator-always-on;
111 };
112
113 sw3a_reg: sw3a {
114 regulator-min-microvolt = <400000>;
115 regulator-max-microvolt = <1975000>;
116 regulator-boot-on;
117 regulator-always-on;
118 };
119
120 sw3b_reg: sw3b {
121 regulator-min-microvolt = <400000>;
122 regulator-max-microvolt = <1975000>;
123 regulator-boot-on;
124 regulator-always-on;
125 };
126
127 sw4_reg: sw4 {
128 regulator-min-microvolt = <800000>;
129 regulator-max-microvolt = <3300000>;
130 };
131
132 swbst_reg: swbst {
133 regulator-min-microvolt = <5000000>;
134 regulator-max-microvolt = <5150000>;
135 };
136
137 snvs_reg: vsnvs {
138 regulator-min-microvolt = <1000000>;
139 regulator-max-microvolt = <3000000>;
140 regulator-boot-on;
141 regulator-always-on;
142 };
143
144 vref_reg: vrefddr {
145 regulator-boot-on;
146 regulator-always-on;
147 };
148
149 vgen1_reg: vgen1 {
150 regulator-min-microvolt = <800000>;
151 regulator-max-microvolt = <1550000>;
152 };
153
154 vgen2_reg: vgen2 {
155 regulator-min-microvolt = <800000>;
156 regulator-max-microvolt = <1550000>;
157 };
158
159 vgen3_reg: vgen3 {
160 regulator-min-microvolt = <1800000>;
161 regulator-max-microvolt = <3300000>;
162 };
163
164 vgen4_reg: vgen4 {
165 regulator-min-microvolt = <1800000>;
166 regulator-max-microvolt = <3300000>;
167 regulator-always-on;
168 };
169
170 vgen5_reg: vgen5 {
171 regulator-min-microvolt = <1800000>;
172 regulator-max-microvolt = <3300000>;
173 regulator-always-on;
174 };
175
176 vgen6_reg: vgen6 {
177 regulator-min-microvolt = <1800000>;
178 regulator-max-microvolt = <3300000>;
179 regulator-always-on;
180 };
181 };
182 };
46}; 183};
47 184
48&iomuxc { 185&iomuxc {
49 pinctrl-names = "default"; 186 pinctrl-names = "default";
50 pinctrl-0 = <&pinctrl_hog>; 187 pinctrl-0 = <&pinctrl_hog>;
51 188
52 hog { 189 imx6qdl-sabreauto {
53 pinctrl_hog: hoggrp { 190 pinctrl_hog: hoggrp {
54 fsl,pins = < 191 fsl,pins = <
55 MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000 192 MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
@@ -57,28 +194,245 @@
57 MX6QDL_PAD_GPIO_18__SD3_VSELECT 0x17059 194 MX6QDL_PAD_GPIO_18__SD3_VSELECT 0x17059
58 >; 195 >;
59 }; 196 };
60 };
61 197
62 ecspi1 { 198 pinctrl_ecspi1: ecspi1grp {
63 pinctrl_ecspi1_sabreauto: ecspi1-sabreauto { 199 fsl,pins = <
200 MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
201 MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
202 MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
203 >;
204 };
205
206 pinctrl_ecspi1_cs: ecspi1cs {
64 fsl,pins = < 207 fsl,pins = <
65 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x80000000 208 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x80000000
66 >; 209 >;
67 }; 210 };
211
212 pinctrl_enet: enetgrp {
213 fsl,pins = <
214 MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0
215 MX6QDL_PAD_KEY_COL2__ENET_MDC 0x1b0b0
216 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
217 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
218 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
219 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
220 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
221 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
222 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
223 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
224 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
225 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
226 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
227 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
228 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
229 MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1
230 >;
231 };
232
233 pinctrl_gpio_leds: gpioledsgrp {
234 fsl,pins = <
235 MX6QDL_PAD_DISP0_DAT21__GPIO5_IO15 0x80000000
236 >;
237 };
238
239 pinctrl_gpmi_nand: gpminandgrp {
240 fsl,pins = <
241 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
242 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
243 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
244 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
245 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
246 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
247 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
248 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
249 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
250 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
251 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
252 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
253 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
254 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
255 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
256 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
257 MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1
258 >;
259 };
260
261 pinctrl_i2c2: i2c2grp {
262 fsl,pins = <
263 MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
264 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
265 >;
266 };
267
268 pinctrl_pwm3: pwm1grp {
269 fsl,pins = <
270 MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
271 >;
272 };
273
274 pinctrl_spdif: spdifgrp {
275 fsl,pins = <
276 MX6QDL_PAD_KEY_COL3__SPDIF_IN 0x1b0b0
277 >;
278 };
279
280 pinctrl_uart4: uart4grp {
281 fsl,pins = <
282 MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
283 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
284 >;
285 };
286
287 pinctrl_usdhc3: usdhc3grp {
288 fsl,pins = <
289 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
290 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
291 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
292 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
293 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
294 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
295 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
296 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
297 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
298 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
299 >;
300 };
301
302 pinctrl_usdhc3_100mhz: usdhc3grp100mhz {
303 fsl,pins = <
304 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x170b9
305 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x100b9
306 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x170b9
307 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x170b9
308 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x170b9
309 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x170b9
310 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x170b9
311 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x170b9
312 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x170b9
313 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x170b9
314 >;
315 };
316
317 pinctrl_usdhc3_200mhz: usdhc3grp200mhz {
318 fsl,pins = <
319 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x170f9
320 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x100f9
321 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x170f9
322 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x170f9
323 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x170f9
324 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x170f9
325 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x170f9
326 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x170f9
327 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x170f9
328 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x170f9
329 >;
330 };
331
332 pinctrl_weim_cs0: weimcs0grp {
333 fsl,pins = <
334 MX6QDL_PAD_EIM_CS0__EIM_CS0_B 0xb0b1
335 >;
336 };
337
338 pinctrl_weim_nor: weimnorgrp {
339 fsl,pins = <
340 MX6QDL_PAD_EIM_OE__EIM_OE_B 0xb0b1
341 MX6QDL_PAD_EIM_RW__EIM_RW 0xb0b1
342 MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
343 MX6QDL_PAD_EIM_D16__EIM_DATA16 0x1b0b0
344 MX6QDL_PAD_EIM_D17__EIM_DATA17 0x1b0b0
345 MX6QDL_PAD_EIM_D18__EIM_DATA18 0x1b0b0
346 MX6QDL_PAD_EIM_D19__EIM_DATA19 0x1b0b0
347 MX6QDL_PAD_EIM_D20__EIM_DATA20 0x1b0b0
348 MX6QDL_PAD_EIM_D21__EIM_DATA21 0x1b0b0
349 MX6QDL_PAD_EIM_D22__EIM_DATA22 0x1b0b0
350 MX6QDL_PAD_EIM_D23__EIM_DATA23 0x1b0b0
351 MX6QDL_PAD_EIM_D24__EIM_DATA24 0x1b0b0
352 MX6QDL_PAD_EIM_D25__EIM_DATA25 0x1b0b0
353 MX6QDL_PAD_EIM_D26__EIM_DATA26 0x1b0b0
354 MX6QDL_PAD_EIM_D27__EIM_DATA27 0x1b0b0
355 MX6QDL_PAD_EIM_D28__EIM_DATA28 0x1b0b0
356 MX6QDL_PAD_EIM_D29__EIM_DATA29 0x1b0b0
357 MX6QDL_PAD_EIM_D30__EIM_DATA30 0x1b0b0
358 MX6QDL_PAD_EIM_D31__EIM_DATA31 0x1b0b0
359 MX6QDL_PAD_EIM_A23__EIM_ADDR23 0xb0b1
360 MX6QDL_PAD_EIM_A22__EIM_ADDR22 0xb0b1
361 MX6QDL_PAD_EIM_A21__EIM_ADDR21 0xb0b1
362 MX6QDL_PAD_EIM_A20__EIM_ADDR20 0xb0b1
363 MX6QDL_PAD_EIM_A19__EIM_ADDR19 0xb0b1
364 MX6QDL_PAD_EIM_A18__EIM_ADDR18 0xb0b1
365 MX6QDL_PAD_EIM_A17__EIM_ADDR17 0xb0b1
366 MX6QDL_PAD_EIM_A16__EIM_ADDR16 0xb0b1
367 MX6QDL_PAD_EIM_DA15__EIM_AD15 0xb0b1
368 MX6QDL_PAD_EIM_DA14__EIM_AD14 0xb0b1
369 MX6QDL_PAD_EIM_DA13__EIM_AD13 0xb0b1
370 MX6QDL_PAD_EIM_DA12__EIM_AD12 0xb0b1
371 MX6QDL_PAD_EIM_DA11__EIM_AD11 0xb0b1
372 MX6QDL_PAD_EIM_DA10__EIM_AD10 0xb0b1
373 MX6QDL_PAD_EIM_DA9__EIM_AD09 0xb0b1
374 MX6QDL_PAD_EIM_DA8__EIM_AD08 0xb0b1
375 MX6QDL_PAD_EIM_DA7__EIM_AD07 0xb0b1
376 MX6QDL_PAD_EIM_DA6__EIM_AD06 0xb0b1
377 MX6QDL_PAD_EIM_DA5__EIM_AD05 0xb0b1
378 MX6QDL_PAD_EIM_DA4__EIM_AD04 0xb0b1
379 MX6QDL_PAD_EIM_DA3__EIM_AD03 0xb0b1
380 MX6QDL_PAD_EIM_DA2__EIM_AD02 0xb0b1
381 MX6QDL_PAD_EIM_DA1__EIM_AD01 0xb0b1
382 MX6QDL_PAD_EIM_DA0__EIM_AD00 0xb0b1
383 >;
384 };
385 };
386};
387
388&ldb {
389 status = "okay";
390
391 lvds-channel@0 {
392 fsl,data-mapping = "spwg";
393 fsl,data-width = <18>;
394 status = "okay";
395
396 display-timings {
397 native-mode = <&timing0>;
398 timing0: hsd100pxn1 {
399 clock-frequency = <65000000>;
400 hactive = <1024>;
401 vactive = <768>;
402 hback-porch = <220>;
403 hfront-porch = <40>;
404 vback-porch = <21>;
405 vfront-porch = <7>;
406 hsync-len = <60>;
407 vsync-len = <10>;
408 };
409 };
68 }; 410 };
69}; 411};
70 412
413&pwm3 {
414 pinctrl-names = "default";
415 pinctrl-0 = <&pinctrl_pwm3>;
416 status = "okay";
417};
418
419&spdif {
420 pinctrl-names = "default";
421 pinctrl-0 = <&pinctrl_spdif>;
422 status = "okay";
423};
424
71&uart4 { 425&uart4 {
72 pinctrl-names = "default"; 426 pinctrl-names = "default";
73 pinctrl-0 = <&pinctrl_uart4_1>; 427 pinctrl-0 = <&pinctrl_uart4>;
74 status = "okay"; 428 status = "okay";
75}; 429};
76 430
77&usdhc3 { 431&usdhc3 {
78 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 432 pinctrl-names = "default", "state_100mhz", "state_200mhz";
79 pinctrl-0 = <&pinctrl_usdhc3_1>; 433 pinctrl-0 = <&pinctrl_usdhc3>;
80 pinctrl-1 = <&pinctrl_usdhc3_1_100mhz>; 434 pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
81 pinctrl-2 = <&pinctrl_usdhc3_1_200mhz>; 435 pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
82 cd-gpios = <&gpio6 15 0>; 436 cd-gpios = <&gpio6 15 0>;
83 wp-gpios = <&gpio1 13 0>; 437 wp-gpios = <&gpio1 13 0>;
84 status = "okay"; 438 status = "okay";
@@ -86,7 +440,7 @@
86 440
87&weim { 441&weim {
88 pinctrl-names = "default"; 442 pinctrl-names = "default";
89 pinctrl-0 = <&pinctrl_weim_nor_1 &pinctrl_weim_cs0_1>; 443 pinctrl-0 = <&pinctrl_weim_nor &pinctrl_weim_cs0>;
90 #address-cells = <2>; 444 #address-cells = <2>;
91 #size-cells = <1>; 445 #size-cells = <1>;
92 ranges = <0 0 0x08000000 0x08000000>; 446 ranges = <0 0 0x08000000 0x08000000>;
diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
new file mode 100644
index 000000000000..3bec128c7971
--- /dev/null
+++ b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
@@ -0,0 +1,423 @@
1/*
2 * Copyright 2011 Freescale Semiconductor, Inc.
3 * Copyright 2011 Linaro Ltd.
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12#include <dt-bindings/gpio/gpio.h>
13#include <dt-bindings/input/input.h>
14
15/ {
16 memory {
17 reg = <0x10000000 0x40000000>;
18 };
19
20 regulators {
21 compatible = "simple-bus";
22 #address-cells = <1>;
23 #size-cells = <0>;
24
25 reg_2p5v: regulator@0 {
26 compatible = "regulator-fixed";
27 reg = <0>;
28 regulator-name = "2P5V";
29 regulator-min-microvolt = <2500000>;
30 regulator-max-microvolt = <2500000>;
31 regulator-always-on;
32 };
33
34 reg_3p3v: regulator@1 {
35 compatible = "regulator-fixed";
36 reg = <1>;
37 regulator-name = "3P3V";
38 regulator-min-microvolt = <3300000>;
39 regulator-max-microvolt = <3300000>;
40 regulator-always-on;
41 };
42
43 reg_usb_otg_vbus: regulator@2 {
44 compatible = "regulator-fixed";
45 reg = <2>;
46 regulator-name = "usb_otg_vbus";
47 regulator-min-microvolt = <5000000>;
48 regulator-max-microvolt = <5000000>;
49 gpio = <&gpio3 22 0>;
50 enable-active-high;
51 };
52 };
53
54 gpio-keys {
55 compatible = "gpio-keys";
56 pinctrl-names = "default";
57 pinctrl-0 = <&pinctrl_gpio_keys>;
58
59 power {
60 label = "Power Button";
61 gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
62 linux,code = <KEY_POWER>;
63 gpio-key,wakeup;
64 };
65
66 menu {
67 label = "Menu";
68 gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
69 linux,code = <KEY_MENU>;
70 };
71
72 home {
73 label = "Home";
74 gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
75 linux,code = <KEY_HOME>;
76 };
77
78 back {
79 label = "Back";
80 gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
81 linux,code = <KEY_BACK>;
82 };
83
84 volume-up {
85 label = "Volume Up";
86 gpios = <&gpio7 13 GPIO_ACTIVE_LOW>;
87 linux,code = <KEY_VOLUMEUP>;
88 };
89
90 volume-down {
91 label = "Volume Down";
92 gpios = <&gpio4 5 GPIO_ACTIVE_LOW>;
93 linux,code = <KEY_VOLUMEDOWN>;
94 };
95 };
96
97 sound {
98 compatible = "fsl,imx6q-sabrelite-sgtl5000",
99 "fsl,imx-audio-sgtl5000";
100 model = "imx6q-sabrelite-sgtl5000";
101 ssi-controller = <&ssi1>;
102 audio-codec = <&codec>;
103 audio-routing =
104 "MIC_IN", "Mic Jack",
105 "Mic Jack", "Mic Bias",
106 "Headphone Jack", "HP_OUT";
107 mux-int-port = <1>;
108 mux-ext-port = <4>;
109 };
110
111 backlight_lcd {
112 compatible = "pwm-backlight";
113 pwms = <&pwm1 0 5000000>;
114 brightness-levels = <0 4 8 16 32 64 128 255>;
115 default-brightness-level = <7>;
116 power-supply = <&reg_3p3v>;
117 status = "okay";
118 };
119
120 backlight_lvds {
121 compatible = "pwm-backlight";
122 pwms = <&pwm4 0 5000000>;
123 brightness-levels = <0 4 8 16 32 64 128 255>;
124 default-brightness-level = <7>;
125 power-supply = <&reg_3p3v>;
126 status = "okay";
127 };
128};
129
130&audmux {
131 pinctrl-names = "default";
132 pinctrl-0 = <&pinctrl_audmux>;
133 status = "okay";
134};
135
136&ecspi1 {
137 fsl,spi-num-chipselects = <1>;
138 cs-gpios = <&gpio3 19 0>;
139 pinctrl-names = "default";
140 pinctrl-0 = <&pinctrl_ecspi1>;
141 status = "okay";
142
143 flash: m25p80@0 {
144 compatible = "sst,sst25vf016b";
145 spi-max-frequency = <20000000>;
146 reg = <0>;
147 };
148};
149
150&fec {
151 pinctrl-names = "default";
152 pinctrl-0 = <&pinctrl_enet>;
153 phy-mode = "rgmii";
154 phy-reset-gpios = <&gpio3 23 GPIO_ACTIVE_LOW>;
155 txen-skew-ps = <0>;
156 txc-skew-ps = <3000>;
157 rxdv-skew-ps = <0>;
158 rxc-skew-ps = <3000>;
159 rxd0-skew-ps = <0>;
160 rxd1-skew-ps = <0>;
161 rxd2-skew-ps = <0>;
162 rxd3-skew-ps = <0>;
163 txd0-skew-ps = <0>;
164 txd1-skew-ps = <0>;
165 txd2-skew-ps = <0>;
166 txd3-skew-ps = <0>;
167 interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
168 <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
169 status = "okay";
170};
171
172&i2c1 {
173 clock-frequency = <100000>;
174 pinctrl-names = "default";
175 pinctrl-0 = <&pinctrl_i2c1>;
176 status = "okay";
177
178 codec: sgtl5000@0a {
179 compatible = "fsl,sgtl5000";
180 reg = <0x0a>;
181 clocks = <&clks 201>;
182 VDDA-supply = <&reg_2p5v>;
183 VDDIO-supply = <&reg_3p3v>;
184 };
185};
186
187&iomuxc {
188 pinctrl-names = "default";
189 pinctrl-0 = <&pinctrl_hog>;
190
191 imx6q-sabrelite {
192 pinctrl_hog: hoggrp {
193 fsl,pins = <
194 /* SGTL5000 sys_mclk */
195 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x030b0
196 >;
197 };
198
199 pinctrl_audmux: audmuxgrp {
200 fsl,pins = <
201 MX6QDL_PAD_SD2_DAT0__AUD4_RXD 0x130b0
202 MX6QDL_PAD_SD2_DAT3__AUD4_TXC 0x130b0
203 MX6QDL_PAD_SD2_DAT2__AUD4_TXD 0x110b0
204 MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x130b0
205 >;
206 };
207
208 pinctrl_ecspi1: ecspi1grp {
209 fsl,pins = <
210 MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
211 MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
212 MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
213 MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x000b1 /* CS */
214 >;
215 };
216
217 pinctrl_enet: enetgrp {
218 fsl,pins = <
219 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x100b0
220 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x100b0
221 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x100b0
222 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x100b0
223 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x100b0
224 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x100b0
225 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x100b0
226 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x100b0
227 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x100b0
228 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
229 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
230 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
231 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
232 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
233 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
234 /* Phy reset */
235 MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x000b0
236 MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1
237 >;
238 };
239
240 pinctrl_gpio_keys: gpio_keysgrp {
241 fsl,pins = <
242 /* Power Button */
243 MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x1b0b0
244 /* Menu Button */
245 MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x1b0b0
246 /* Home Button */
247 MX6QDL_PAD_NANDF_D4__GPIO2_IO04 0x1b0b0
248 /* Back Button */
249 MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x1b0b0
250 /* Volume Up Button */
251 MX6QDL_PAD_GPIO_18__GPIO7_IO13 0x1b0b0
252 /* Volume Down Button */
253 MX6QDL_PAD_GPIO_19__GPIO4_IO05 0x1b0b0
254 >;
255 };
256
257 pinctrl_i2c1: i2c1grp {
258 fsl,pins = <
259 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
260 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
261 >;
262 };
263
264 pinctrl_pwm1: pwm1grp {
265 fsl,pins = <
266 MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
267 >;
268 };
269
270 pinctrl_pwm3: pwm3grp {
271 fsl,pins = <
272 MX6QDL_PAD_SD1_DAT1__PWM3_OUT 0x1b0b1
273 >;
274 };
275
276 pinctrl_pwm4: pwm4grp {
277 fsl,pins = <
278 MX6QDL_PAD_SD1_CMD__PWM4_OUT 0x1b0b1
279 >;
280 };
281
282 pinctrl_uart1: uart1grp {
283 fsl,pins = <
284 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
285 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
286 >;
287 };
288
289 pinctrl_uart2: uart2grp {
290 fsl,pins = <
291 MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
292 MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
293 >;
294 };
295
296 pinctrl_usbotg: usbotggrp {
297 fsl,pins = <
298 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
299 MX6QDL_PAD_KEY_COL4__USB_OTG_OC 0x1b0b0
300 /* power enable, high active */
301 MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x000b0
302 >;
303 };
304
305 pinctrl_usdhc3: usdhc3grp {
306 fsl,pins = <
307 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
308 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
309 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
310 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
311 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
312 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
313 MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x1b0b0 /* CD */
314 MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x1f0b0 /* WP */
315 >;
316 };
317
318 pinctrl_usdhc4: usdhc4grp {
319 fsl,pins = <
320 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
321 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
322 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
323 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
324 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
325 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
326 MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x1b0b0 /* CD */
327 >;
328 };
329 };
330};
331
332&ldb {
333 status = "okay";
334
335 lvds-channel@0 {
336 fsl,data-mapping = "spwg";
337 fsl,data-width = <18>;
338 status = "okay";
339
340 display-timings {
341 native-mode = <&timing0>;
342 timing0: hsd100pxn1 {
343 clock-frequency = <65000000>;
344 hactive = <1024>;
345 vactive = <768>;
346 hback-porch = <220>;
347 hfront-porch = <40>;
348 vback-porch = <21>;
349 vfront-porch = <7>;
350 hsync-len = <60>;
351 vsync-len = <10>;
352 };
353 };
354 };
355};
356
357&pcie {
358 status = "okay";
359};
360
361&pwm1 {
362 pinctrl-names = "default";
363 pinctrl-0 = <&pinctrl_pwm1>;
364 status = "okay";
365};
366
367&pwm3 {
368 pinctrl-names = "default";
369 pinctrl-0 = <&pinctrl_pwm3>;
370 status = "okay";
371};
372
373&pwm4 {
374 pinctrl-names = "default";
375 pinctrl-0 = <&pinctrl_pwm4>;
376 status = "okay";
377};
378
379&ssi1 {
380 fsl,mode = "i2s-slave";
381 status = "okay";
382};
383
384&uart1 {
385 pinctrl-names = "default";
386 pinctrl-0 = <&pinctrl_uart1>;
387 status = "okay";
388};
389
390&uart2 {
391 pinctrl-names = "default";
392 pinctrl-0 = <&pinctrl_uart2>;
393 status = "okay";
394};
395
396&usbh1 {
397 status = "okay";
398};
399
400&usbotg {
401 vbus-supply = <&reg_usb_otg_vbus>;
402 pinctrl-names = "default";
403 pinctrl-0 = <&pinctrl_usbotg>;
404 disable-over-current;
405 status = "okay";
406};
407
408&usdhc3 {
409 pinctrl-names = "default";
410 pinctrl-0 = <&pinctrl_usdhc3>;
411 cd-gpios = <&gpio7 0 0>;
412 wp-gpios = <&gpio7 1 0>;
413 vmmc-supply = <&reg_3p3v>;
414 status = "okay";
415};
416
417&usdhc4 {
418 pinctrl-names = "default";
419 pinctrl-0 = <&pinctrl_usdhc4>;
420 cd-gpios = <&gpio2 6 0>;
421 vmmc-supply = <&reg_3p3v>;
422 status = "okay";
423};
diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
index e75e11b36dff..0d816d3be4b6 100644
--- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
@@ -10,6 +10,9 @@
10 * http://www.gnu.org/copyleft/gpl.html 10 * http://www.gnu.org/copyleft/gpl.html
11 */ 11 */
12 12
13#include <dt-bindings/gpio/gpio.h>
14#include <dt-bindings/input/input.h>
15
13/ { 16/ {
14 memory { 17 memory {
15 reg = <0x10000000 0x40000000>; 18 reg = <0x10000000 0x40000000>;
@@ -17,9 +20,12 @@
17 20
18 regulators { 21 regulators {
19 compatible = "simple-bus"; 22 compatible = "simple-bus";
23 #address-cells = <1>;
24 #size-cells = <0>;
20 25
21 reg_usb_otg_vbus: usb_otg_vbus { 26 reg_usb_otg_vbus: regulator@0 {
22 compatible = "regulator-fixed"; 27 compatible = "regulator-fixed";
28 reg = <0>;
23 regulator-name = "usb_otg_vbus"; 29 regulator-name = "usb_otg_vbus";
24 regulator-min-microvolt = <5000000>; 30 regulator-min-microvolt = <5000000>;
25 regulator-max-microvolt = <5000000>; 31 regulator-max-microvolt = <5000000>;
@@ -27,8 +33,9 @@
27 enable-active-high; 33 enable-active-high;
28 }; 34 };
29 35
30 reg_usb_h1_vbus: usb_h1_vbus { 36 reg_usb_h1_vbus: regulator@1 {
31 compatible = "regulator-fixed"; 37 compatible = "regulator-fixed";
38 reg = <1>;
32 regulator-name = "usb_h1_vbus"; 39 regulator-name = "usb_h1_vbus";
33 regulator-min-microvolt = <5000000>; 40 regulator-min-microvolt = <5000000>;
34 regulator-max-microvolt = <5000000>; 41 regulator-max-microvolt = <5000000>;
@@ -36,8 +43,9 @@
36 enable-active-high; 43 enable-active-high;
37 }; 44 };
38 45
39 reg_audio: wm8962_supply { 46 reg_audio: regulator@2 {
40 compatible = "regulator-fixed"; 47 compatible = "regulator-fixed";
48 reg = <2>;
41 regulator-name = "wm8962-supply"; 49 regulator-name = "wm8962-supply";
42 gpio = <&gpio4 10 0>; 50 gpio = <&gpio4 10 0>;
43 enable-active-high; 51 enable-active-high;
@@ -46,19 +54,28 @@
46 54
47 gpio-keys { 55 gpio-keys {
48 compatible = "gpio-keys"; 56 compatible = "gpio-keys";
57 pinctrl-names = "default";
58 pinctrl-0 = <&pinctrl_gpio_keys>;
59
60 power {
61 label = "Power Button";
62 gpios = <&gpio3 29 GPIO_ACTIVE_LOW>;
63 gpio-key,wakeup;
64 linux,code = <KEY_POWER>;
65 };
49 66
50 volume-up { 67 volume-up {
51 label = "Volume Up"; 68 label = "Volume Up";
52 gpios = <&gpio1 4 0>; 69 gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
53 gpio-key,wakeup; 70 gpio-key,wakeup;
54 linux,code = <115>; /* KEY_VOLUMEUP */ 71 linux,code = <KEY_VOLUMEUP>;
55 }; 72 };
56 73
57 volume-down { 74 volume-down {
58 label = "Volume Down"; 75 label = "Volume Down";
59 gpios = <&gpio1 5 0>; 76 gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
60 gpio-key,wakeup; 77 gpio-key,wakeup;
61 linux,code = <114>; /* KEY_VOLUMEDOWN */ 78 linux,code = <KEY_VOLUMEDOWN>;
62 }; 79 };
63 }; 80 };
64 81
@@ -92,7 +109,7 @@
92 109
93&audmux { 110&audmux {
94 pinctrl-names = "default"; 111 pinctrl-names = "default";
95 pinctrl-0 = <&pinctrl_audmux_2>; 112 pinctrl-0 = <&pinctrl_audmux>;
96 status = "okay"; 113 status = "okay";
97}; 114};
98 115
@@ -100,7 +117,7 @@
100 fsl,spi-num-chipselects = <1>; 117 fsl,spi-num-chipselects = <1>;
101 cs-gpios = <&gpio4 9 0>; 118 cs-gpios = <&gpio4 9 0>;
102 pinctrl-names = "default"; 119 pinctrl-names = "default";
103 pinctrl-0 = <&pinctrl_ecspi1_2>; 120 pinctrl-0 = <&pinctrl_ecspi1>;
104 status = "okay"; 121 status = "okay";
105 122
106 flash: m25p80@0 { 123 flash: m25p80@0 {
@@ -114,7 +131,7 @@
114 131
115&fec { 132&fec {
116 pinctrl-names = "default"; 133 pinctrl-names = "default";
117 pinctrl-0 = <&pinctrl_enet_1>; 134 pinctrl-0 = <&pinctrl_enet>;
118 phy-mode = "rgmii"; 135 phy-mode = "rgmii";
119 phy-reset-gpios = <&gpio1 25 0>; 136 phy-reset-gpios = <&gpio1 25 0>;
120 status = "okay"; 137 status = "okay";
@@ -123,7 +140,7 @@
123&i2c1 { 140&i2c1 {
124 clock-frequency = <100000>; 141 clock-frequency = <100000>;
125 pinctrl-names = "default"; 142 pinctrl-names = "default";
126 pinctrl-0 = <&pinctrl_i2c1_2>; 143 pinctrl-0 = <&pinctrl_i2c1>;
127 status = "okay"; 144 status = "okay";
128 145
129 codec: wm8962@1a { 146 codec: wm8962@1a {
@@ -149,10 +166,116 @@
149 }; 166 };
150}; 167};
151 168
169&i2c2 {
170 clock-frequency = <100000>;
171 pinctrl-names = "default";
172 pinctrl-0 = <&pinctrl_i2c2>;
173 status = "okay";
174
175 pmic: pfuze100@08 {
176 compatible = "fsl,pfuze100";
177 reg = <0x08>;
178
179 regulators {
180 sw1a_reg: sw1ab {
181 regulator-min-microvolt = <300000>;
182 regulator-max-microvolt = <1875000>;
183 regulator-boot-on;
184 regulator-always-on;
185 regulator-ramp-delay = <6250>;
186 };
187
188 sw1c_reg: sw1c {
189 regulator-min-microvolt = <300000>;
190 regulator-max-microvolt = <1875000>;
191 regulator-boot-on;
192 regulator-always-on;
193 regulator-ramp-delay = <6250>;
194 };
195
196 sw2_reg: sw2 {
197 regulator-min-microvolt = <800000>;
198 regulator-max-microvolt = <3300000>;
199 regulator-boot-on;
200 regulator-always-on;
201 };
202
203 sw3a_reg: sw3a {
204 regulator-min-microvolt = <400000>;
205 regulator-max-microvolt = <1975000>;
206 regulator-boot-on;
207 regulator-always-on;
208 };
209
210 sw3b_reg: sw3b {
211 regulator-min-microvolt = <400000>;
212 regulator-max-microvolt = <1975000>;
213 regulator-boot-on;
214 regulator-always-on;
215 };
216
217 sw4_reg: sw4 {
218 regulator-min-microvolt = <800000>;
219 regulator-max-microvolt = <3300000>;
220 };
221
222 swbst_reg: swbst {
223 regulator-min-microvolt = <5000000>;
224 regulator-max-microvolt = <5150000>;
225 };
226
227 snvs_reg: vsnvs {
228 regulator-min-microvolt = <1000000>;
229 regulator-max-microvolt = <3000000>;
230 regulator-boot-on;
231 regulator-always-on;
232 };
233
234 vref_reg: vrefddr {
235 regulator-boot-on;
236 regulator-always-on;
237 };
238
239 vgen1_reg: vgen1 {
240 regulator-min-microvolt = <800000>;
241 regulator-max-microvolt = <1550000>;
242 };
243
244 vgen2_reg: vgen2 {
245 regulator-min-microvolt = <800000>;
246 regulator-max-microvolt = <1550000>;
247 };
248
249 vgen3_reg: vgen3 {
250 regulator-min-microvolt = <1800000>;
251 regulator-max-microvolt = <3300000>;
252 };
253
254 vgen4_reg: vgen4 {
255 regulator-min-microvolt = <1800000>;
256 regulator-max-microvolt = <3300000>;
257 regulator-always-on;
258 };
259
260 vgen5_reg: vgen5 {
261 regulator-min-microvolt = <1800000>;
262 regulator-max-microvolt = <3300000>;
263 regulator-always-on;
264 };
265
266 vgen6_reg: vgen6 {
267 regulator-min-microvolt = <1800000>;
268 regulator-max-microvolt = <3300000>;
269 regulator-always-on;
270 };
271 };
272 };
273};
274
152&i2c3 { 275&i2c3 {
153 clock-frequency = <100000>; 276 clock-frequency = <100000>;
154 pinctrl-names = "default"; 277 pinctrl-names = "default";
155 pinctrl-0 = <&pinctrl_i2c3_2>; 278 pinctrl-0 = <&pinctrl_i2c3>;
156 status = "okay"; 279 status = "okay";
157 280
158 egalax_ts@04 { 281 egalax_ts@04 {
@@ -168,11 +291,9 @@
168 pinctrl-names = "default"; 291 pinctrl-names = "default";
169 pinctrl-0 = <&pinctrl_hog>; 292 pinctrl-0 = <&pinctrl_hog>;
170 293
171 hog { 294 imx6qdl-sabresd {
172 pinctrl_hog: hoggrp { 295 pinctrl_hog: hoggrp {
173 fsl,pins = < 296 fsl,pins = <
174 MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000
175 MX6QDL_PAD_GPIO_5__GPIO1_IO05 0x80000000
176 MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000 297 MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000
177 MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000 298 MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000
178 MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000 299 MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000
@@ -184,6 +305,122 @@
184 MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x80000000 305 MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x80000000
185 >; 306 >;
186 }; 307 };
308
309 pinctrl_audmux: audmuxgrp {
310 fsl,pins = <
311 MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
312 MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x130b0
313 MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x110b0
314 MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x130b0
315 >;
316 };
317
318 pinctrl_ecspi1: ecspi1grp {
319 fsl,pins = <
320 MX6QDL_PAD_KEY_COL1__ECSPI1_MISO 0x100b1
321 MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI 0x100b1
322 MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK 0x100b1
323 >;
324 };
325
326 pinctrl_enet: enetgrp {
327 fsl,pins = <
328 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
329 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
330 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
331 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
332 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
333 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
334 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
335 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
336 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
337 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
338 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
339 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
340 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
341 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
342 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
343 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
344 >;
345 };
346
347 pinctrl_gpio_keys: gpio_keysgrp {
348 fsl,pins = <
349 MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000
350 MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000
351 MX6QDL_PAD_GPIO_5__GPIO1_IO05 0x80000000
352 >;
353 };
354
355 pinctrl_i2c1: i2c1grp {
356 fsl,pins = <
357 MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
358 MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
359 >;
360 };
361
362 pinctrl_i2c2: i2c2grp {
363 fsl,pins = <
364 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
365 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
366 >;
367 };
368
369 pinctrl_i2c3: i2c3grp {
370 fsl,pins = <
371 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
372 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
373 >;
374 };
375
376 pinctrl_pwm1: pwm1grp {
377 fsl,pins = <
378 MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
379 >;
380 };
381
382 pinctrl_uart1: uart1grp {
383 fsl,pins = <
384 MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
385 MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
386 >;
387 };
388
389 pinctrl_usbotg: usbotggrp {
390 fsl,pins = <
391 MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
392 >;
393 };
394
395 pinctrl_usdhc2: usdhc2grp {
396 fsl,pins = <
397 MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
398 MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
399 MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
400 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
401 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
402 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
403 MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059
404 MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059
405 MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059
406 MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059
407 >;
408 };
409
410 pinctrl_usdhc3: usdhc3grp {
411 fsl,pins = <
412 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
413 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
414 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
415 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
416 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
417 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
418 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
419 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
420 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
421 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
422 >;
423 };
187 }; 424 };
188}; 425};
189 426
@@ -214,7 +451,7 @@
214 451
215&pwm1 { 452&pwm1 {
216 pinctrl-names = "default"; 453 pinctrl-names = "default";
217 pinctrl-0 = <&pinctrl_pwm0_1>; 454 pinctrl-0 = <&pinctrl_pwm1>;
218 status = "okay"; 455 status = "okay";
219}; 456};
220 457
@@ -225,7 +462,7 @@
225 462
226&uart1 { 463&uart1 {
227 pinctrl-names = "default"; 464 pinctrl-names = "default";
228 pinctrl-0 = <&pinctrl_uart1_1>; 465 pinctrl-0 = <&pinctrl_uart1>;
229 status = "okay"; 466 status = "okay";
230}; 467};
231 468
@@ -237,14 +474,14 @@
237&usbotg { 474&usbotg {
238 vbus-supply = <&reg_usb_otg_vbus>; 475 vbus-supply = <&reg_usb_otg_vbus>;
239 pinctrl-names = "default"; 476 pinctrl-names = "default";
240 pinctrl-0 = <&pinctrl_usbotg_2>; 477 pinctrl-0 = <&pinctrl_usbotg>;
241 disable-over-current; 478 disable-over-current;
242 status = "okay"; 479 status = "okay";
243}; 480};
244 481
245&usdhc2 { 482&usdhc2 {
246 pinctrl-names = "default"; 483 pinctrl-names = "default";
247 pinctrl-0 = <&pinctrl_usdhc2_1>; 484 pinctrl-0 = <&pinctrl_usdhc2>;
248 bus-width = <8>; 485 bus-width = <8>;
249 cd-gpios = <&gpio2 2 0>; 486 cd-gpios = <&gpio2 2 0>;
250 wp-gpios = <&gpio2 3 0>; 487 wp-gpios = <&gpio2 3 0>;
@@ -253,7 +490,7 @@
253 490
254&usdhc3 { 491&usdhc3 {
255 pinctrl-names = "default"; 492 pinctrl-names = "default";
256 pinctrl-0 = <&pinctrl_usdhc3_1>; 493 pinctrl-0 = <&pinctrl_usdhc3>;
257 bus-width = <8>; 494 bus-width = <8>;
258 cd-gpios = <&gpio2 0 0>; 495 cd-gpios = <&gpio2 0 0>;
259 wp-gpios = <&gpio2 1 0>; 496 wp-gpios = <&gpio2 1 0>;
diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
index 35f547929167..bdfdf89d405f 100644
--- a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
@@ -12,17 +12,21 @@
12/ { 12/ {
13 regulators { 13 regulators {
14 compatible = "simple-bus"; 14 compatible = "simple-bus";
15 #address-cells = <1>;
16 #size-cells = <0>;
15 17
16 reg_2p5v: 2p5v { 18 reg_2p5v: regulator@0 {
17 compatible = "regulator-fixed"; 19 compatible = "regulator-fixed";
20 reg = <0>;
18 regulator-name = "2P5V"; 21 regulator-name = "2P5V";
19 regulator-min-microvolt = <2500000>; 22 regulator-min-microvolt = <2500000>;
20 regulator-max-microvolt = <2500000>; 23 regulator-max-microvolt = <2500000>;
21 regulator-always-on; 24 regulator-always-on;
22 }; 25 };
23 26
24 reg_3p3v: 3p3v { 27 reg_3p3v: regulator@1 {
25 compatible = "regulator-fixed"; 28 compatible = "regulator-fixed";
29 reg = <1>;
26 regulator-name = "3P3V"; 30 regulator-name = "3P3V";
27 regulator-min-microvolt = <3300000>; 31 regulator-min-microvolt = <3300000>;
28 regulator-max-microvolt = <3300000>; 32 regulator-max-microvolt = <3300000>;
@@ -54,14 +58,14 @@
54 58
55&audmux { 59&audmux {
56 pinctrl-names = "default"; 60 pinctrl-names = "default";
57 pinctrl-0 = <&pinctrl_audmux_2>; 61 pinctrl-0 = <&pinctrl_audmux>;
58 status = "okay"; 62 status = "okay";
59}; 63};
60 64
61&i2c2 { 65&i2c2 {
62 clock-frequency = <100000>; 66 clock-frequency = <100000>;
63 pinctrl-names = "default"; 67 pinctrl-names = "default";
64 pinctrl-0 = <&pinctrl_i2c2_2>; 68 pinctrl-0 = <&pinctrl_i2c2>;
65 status = "okay"; 69 status = "okay";
66 70
67 codec: sgtl5000@0a { 71 codec: sgtl5000@0a {
@@ -77,7 +81,7 @@
77 pinctrl-names = "default"; 81 pinctrl-names = "default";
78 pinctrl-0 = <&pinctrl_hog>; 82 pinctrl-0 = <&pinctrl_hog>;
79 83
80 hog { 84 imx6qdl-wandboard {
81 pinctrl_hog: hoggrp { 85 pinctrl_hog: hoggrp {
82 fsl,pins = < 86 fsl,pins = <
83 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0 87 MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0
@@ -91,20 +95,121 @@
91 MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000 95 MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000
92 >; 96 >;
93 }; 97 };
98
99 pinctrl_audmux: audmuxgrp {
100 fsl,pins = <
101 MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
102 MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x130b0
103 MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x110b0
104 MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x130b0
105 >;
106 };
107
108 pinctrl_enet: enetgrp {
109 fsl,pins = <
110 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
111 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
112 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
113 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
114 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
115 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
116 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
117 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
118 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
119 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
120 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
121 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
122 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
123 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
124 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
125 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
126 MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1
127 >;
128 };
129
130 pinctrl_i2c2: i2c2grp {
131 fsl,pins = <
132 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
133 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
134 >;
135 };
136
137 pinctrl_spdif: spdifgrp {
138 fsl,pins = <
139 MX6QDL_PAD_ENET_RXD0__SPDIF_OUT 0x1b0b0
140 >;
141 };
142
143 pinctrl_uart1: uart1grp {
144 fsl,pins = <
145 MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
146 MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
147 >;
148 };
149
150 pinctrl_uart3: uart3grp {
151 fsl,pins = <
152 MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
153 MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
154 MX6QDL_PAD_EIM_D23__UART3_CTS_B 0x1b0b1
155 MX6QDL_PAD_EIM_EB3__UART3_RTS_B 0x1b0b1
156 >;
157 };
158
159 pinctrl_usbotg: usbotggrp {
160 fsl,pins = <
161 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
162 >;
163 };
164
165 pinctrl_usdhc1: usdhc1grp {
166 fsl,pins = <
167 MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059
168 MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059
169 MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
170 MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
171 MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
172 MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
173 >;
174 };
175
176 pinctrl_usdhc2: usdhc2grp {
177 fsl,pins = <
178 MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
179 MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
180 MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
181 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
182 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
183 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
184 >;
185 };
186
187 pinctrl_usdhc3: usdhc3grp {
188 fsl,pins = <
189 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
190 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
191 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
192 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
193 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
194 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
195 >;
196 };
94 }; 197 };
95}; 198};
96 199
97&fec { 200&fec {
98 pinctrl-names = "default"; 201 pinctrl-names = "default";
99 pinctrl-0 = <&pinctrl_enet_1>; 202 pinctrl-0 = <&pinctrl_enet>;
100 phy-mode = "rgmii"; 203 phy-mode = "rgmii";
101 phy-reset-gpios = <&gpio3 29 0>; 204 phy-reset-gpios = <&gpio3 29 0>;
205 interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
206 <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
102 status = "okay"; 207 status = "okay";
103}; 208};
104 209
105&spdif { 210&spdif {
106 pinctrl-names = "default"; 211 pinctrl-names = "default";
107 pinctrl-0 = <&pinctrl_spdif_3>; 212 pinctrl-0 = <&pinctrl_spdif>;
108 status = "okay"; 213 status = "okay";
109}; 214};
110 215
@@ -115,13 +220,13 @@
115 220
116&uart1 { 221&uart1 {
117 pinctrl-names = "default"; 222 pinctrl-names = "default";
118 pinctrl-0 = <&pinctrl_uart1_1>; 223 pinctrl-0 = <&pinctrl_uart1>;
119 status = "okay"; 224 status = "okay";
120}; 225};
121 226
122&uart3 { 227&uart3 {
123 pinctrl-names = "default"; 228 pinctrl-names = "default";
124 pinctrl-0 = <&pinctrl_uart3_2>; 229 pinctrl-0 = <&pinctrl_uart3>;
125 fsl,uart-has-rtscts; 230 fsl,uart-has-rtscts;
126 status = "okay"; 231 status = "okay";
127}; 232};
@@ -132,7 +237,7 @@
132 237
133&usbotg { 238&usbotg {
134 pinctrl-names = "default"; 239 pinctrl-names = "default";
135 pinctrl-0 = <&pinctrl_usbotg_1>; 240 pinctrl-0 = <&pinctrl_usbotg>;
136 disable-over-current; 241 disable-over-current;
137 dr_mode = "peripheral"; 242 dr_mode = "peripheral";
138 status = "okay"; 243 status = "okay";
@@ -140,21 +245,21 @@
140 245
141&usdhc1 { 246&usdhc1 {
142 pinctrl-names = "default"; 247 pinctrl-names = "default";
143 pinctrl-0 = <&pinctrl_usdhc1_2>; 248 pinctrl-0 = <&pinctrl_usdhc1>;
144 cd-gpios = <&gpio1 2 0>; 249 cd-gpios = <&gpio1 2 0>;
145 status = "okay"; 250 status = "okay";
146}; 251};
147 252
148&usdhc2 { 253&usdhc2 {
149 pinctrl-names = "default"; 254 pinctrl-names = "default";
150 pinctrl-0 = <&pinctrl_usdhc2_2>; 255 pinctrl-0 = <&pinctrl_usdhc2>;
151 non-removable; 256 non-removable;
152 status = "okay"; 257 status = "okay";
153}; 258};
154 259
155&usdhc3 { 260&usdhc3 {
156 pinctrl-names = "default"; 261 pinctrl-names = "default";
157 pinctrl-0 = <&pinctrl_usdhc3_2>; 262 pinctrl-0 = <&pinctrl_usdhc3>;
158 cd-gpios = <&gpio3 9 0>; 263 cd-gpios = <&gpio3 9 0>;
159 status = "okay"; 264 status = "okay";
160}; 265};
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
index fb28b2ecb1db..947e463a2b2f 100644
--- a/arch/arm/boot/dts/imx6qdl.dtsi
+++ b/arch/arm/boot/dts/imx6qdl.dtsi
@@ -14,6 +14,8 @@
14 14
15/ { 15/ {
16 aliases { 16 aliases {
17 can0 = &can1;
18 can1 = &can2;
17 gpio0 = &gpio1; 19 gpio0 = &gpio1;
18 gpio1 = &gpio2; 20 gpio1 = &gpio2;
19 gpio2 = &gpio3; 21 gpio2 = &gpio3;
@@ -24,6 +26,10 @@
24 i2c0 = &i2c1; 26 i2c0 = &i2c1;
25 i2c1 = &i2c2; 27 i2c1 = &i2c2;
26 i2c2 = &i2c3; 28 i2c2 = &i2c3;
29 mmc0 = &usdhc1;
30 mmc1 = &usdhc2;
31 mmc2 = &usdhc3;
32 mmc3 = &usdhc4;
27 serial0 = &uart1; 33 serial0 = &uart1;
28 serial1 = &uart2; 34 serial1 = &uart2;
29 serial2 = &uart3; 35 serial2 = &uart3;
@@ -33,6 +39,8 @@
33 spi1 = &ecspi2; 39 spi1 = &ecspi2;
34 spi2 = &ecspi3; 40 spi2 = &ecspi3;
35 spi3 = &ecspi4; 41 spi3 = &ecspi4;
42 usbphy0 = &usbphy1;
43 usbphy1 = &usbphy2;
36 }; 44 };
37 45
38 intc: interrupt-controller@00a01000 { 46 intc: interrupt-controller@00a01000 {
@@ -75,7 +83,10 @@
75 dma_apbh: dma-apbh@00110000 { 83 dma_apbh: dma-apbh@00110000 {
76 compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh"; 84 compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh";
77 reg = <0x00110000 0x2000>; 85 reg = <0x00110000 0x2000>;
78 interrupts = <0 13 0x04>, <0 13 0x04>, <0 13 0x04>, <0 13 0x04>; 86 interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>,
87 <0 13 IRQ_TYPE_LEVEL_HIGH>,
88 <0 13 IRQ_TYPE_LEVEL_HIGH>,
89 <0 13 IRQ_TYPE_LEVEL_HIGH>;
79 interrupt-names = "gpmi0", "gpmi1", "gpmi2", "gpmi3"; 90 interrupt-names = "gpmi0", "gpmi1", "gpmi2", "gpmi3";
80 #dma-cells = <1>; 91 #dma-cells = <1>;
81 dma-channels = <4>; 92 dma-channels = <4>;
@@ -88,7 +99,7 @@
88 #size-cells = <1>; 99 #size-cells = <1>;
89 reg = <0x00112000 0x2000>, <0x00114000 0x2000>; 100 reg = <0x00112000 0x2000>, <0x00114000 0x2000>;
90 reg-names = "gpmi-nand", "bch"; 101 reg-names = "gpmi-nand", "bch";
91 interrupts = <0 15 0x04>; 102 interrupts = <0 15 IRQ_TYPE_LEVEL_HIGH>;
92 interrupt-names = "bch"; 103 interrupt-names = "bch";
93 clocks = <&clks 152>, <&clks 153>, <&clks 151>, 104 clocks = <&clks 152>, <&clks 153>, <&clks 151>,
94 <&clks 150>, <&clks 149>; 105 <&clks 150>, <&clks 149>;
@@ -109,7 +120,7 @@
109 L2: l2-cache@00a02000 { 120 L2: l2-cache@00a02000 {
110 compatible = "arm,pl310-cache"; 121 compatible = "arm,pl310-cache";
111 reg = <0x00a02000 0x1000>; 122 reg = <0x00a02000 0x1000>;
112 interrupts = <0 92 0x04>; 123 interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
113 cache-unified; 124 cache-unified;
114 cache-level = <2>; 125 cache-level = <2>;
115 arm,tag-latency = <4 2 3>; 126 arm,tag-latency = <4 2 3>;
@@ -126,7 +137,7 @@
126 0x81000000 0 0 0x01f80000 0 0x00010000 /* downstream I/O */ 137 0x81000000 0 0 0x01f80000 0 0x00010000 /* downstream I/O */
127 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */ 138 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */
128 num-lanes = <1>; 139 num-lanes = <1>;
129 interrupts = <0 123 0x04>; 140 interrupts = <0 123 IRQ_TYPE_LEVEL_HIGH>;
130 clocks = <&clks 189>, <&clks 187>, <&clks 206>, <&clks 144>; 141 clocks = <&clks 189>, <&clks 187>, <&clks 206>, <&clks 144>;
131 clock-names = "pcie_ref_125m", "sata_ref_100m", "lvds_gate", "pcie_axi"; 142 clock-names = "pcie_ref_125m", "sata_ref_100m", "lvds_gate", "pcie_axi";
132 status = "disabled"; 143 status = "disabled";
@@ -134,7 +145,7 @@
134 145
135 pmu { 146 pmu {
136 compatible = "arm,cortex-a9-pmu"; 147 compatible = "arm,cortex-a9-pmu";
137 interrupts = <0 94 0x04>; 148 interrupts = <0 94 IRQ_TYPE_LEVEL_HIGH>;
138 }; 149 };
139 150
140 aips-bus@02000000 { /* AIPS1 */ 151 aips-bus@02000000 { /* AIPS1 */
@@ -154,7 +165,7 @@
154 spdif: spdif@02004000 { 165 spdif: spdif@02004000 {
155 compatible = "fsl,imx35-spdif"; 166 compatible = "fsl,imx35-spdif";
156 reg = <0x02004000 0x4000>; 167 reg = <0x02004000 0x4000>;
157 interrupts = <0 52 0x04>; 168 interrupts = <0 52 IRQ_TYPE_LEVEL_HIGH>;
158 dmas = <&sdma 14 18 0>, 169 dmas = <&sdma 14 18 0>,
159 <&sdma 15 18 0>; 170 <&sdma 15 18 0>;
160 dma-names = "rx", "tx"; 171 dma-names = "rx", "tx";
@@ -176,9 +187,11 @@
176 #size-cells = <0>; 187 #size-cells = <0>;
177 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi"; 188 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi";
178 reg = <0x02008000 0x4000>; 189 reg = <0x02008000 0x4000>;
179 interrupts = <0 31 0x04>; 190 interrupts = <0 31 IRQ_TYPE_LEVEL_HIGH>;
180 clocks = <&clks 112>, <&clks 112>; 191 clocks = <&clks 112>, <&clks 112>;
181 clock-names = "ipg", "per"; 192 clock-names = "ipg", "per";
193 dmas = <&sdma 3 7 1>, <&sdma 4 7 2>;
194 dma-names = "rx", "tx";
182 status = "disabled"; 195 status = "disabled";
183 }; 196 };
184 197
@@ -187,9 +200,11 @@
187 #size-cells = <0>; 200 #size-cells = <0>;
188 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi"; 201 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi";
189 reg = <0x0200c000 0x4000>; 202 reg = <0x0200c000 0x4000>;
190 interrupts = <0 32 0x04>; 203 interrupts = <0 32 IRQ_TYPE_LEVEL_HIGH>;
191 clocks = <&clks 113>, <&clks 113>; 204 clocks = <&clks 113>, <&clks 113>;
192 clock-names = "ipg", "per"; 205 clock-names = "ipg", "per";
206 dmas = <&sdma 5 7 1>, <&sdma 6 7 2>;
207 dma-names = "rx", "tx";
193 status = "disabled"; 208 status = "disabled";
194 }; 209 };
195 210
@@ -198,9 +213,11 @@
198 #size-cells = <0>; 213 #size-cells = <0>;
199 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi"; 214 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi";
200 reg = <0x02010000 0x4000>; 215 reg = <0x02010000 0x4000>;
201 interrupts = <0 33 0x04>; 216 interrupts = <0 33 IRQ_TYPE_LEVEL_HIGH>;
202 clocks = <&clks 114>, <&clks 114>; 217 clocks = <&clks 114>, <&clks 114>;
203 clock-names = "ipg", "per"; 218 clock-names = "ipg", "per";
219 dmas = <&sdma 7 7 1>, <&sdma 8 7 2>;
220 dma-names = "rx", "tx";
204 status = "disabled"; 221 status = "disabled";
205 }; 222 };
206 223
@@ -209,16 +226,18 @@
209 #size-cells = <0>; 226 #size-cells = <0>;
210 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi"; 227 compatible = "fsl,imx6q-ecspi", "fsl,imx51-ecspi";
211 reg = <0x02014000 0x4000>; 228 reg = <0x02014000 0x4000>;
212 interrupts = <0 34 0x04>; 229 interrupts = <0 34 IRQ_TYPE_LEVEL_HIGH>;
213 clocks = <&clks 115>, <&clks 115>; 230 clocks = <&clks 115>, <&clks 115>;
214 clock-names = "ipg", "per"; 231 clock-names = "ipg", "per";
232 dmas = <&sdma 9 7 1>, <&sdma 10 7 2>;
233 dma-names = "rx", "tx";
215 status = "disabled"; 234 status = "disabled";
216 }; 235 };
217 236
218 uart1: serial@02020000 { 237 uart1: serial@02020000 {
219 compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; 238 compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
220 reg = <0x02020000 0x4000>; 239 reg = <0x02020000 0x4000>;
221 interrupts = <0 26 0x04>; 240 interrupts = <0 26 IRQ_TYPE_LEVEL_HIGH>;
222 clocks = <&clks 160>, <&clks 161>; 241 clocks = <&clks 160>, <&clks 161>;
223 clock-names = "ipg", "per"; 242 clock-names = "ipg", "per";
224 dmas = <&sdma 25 4 0>, <&sdma 26 4 0>; 243 dmas = <&sdma 25 4 0>, <&sdma 26 4 0>;
@@ -228,13 +247,15 @@
228 247
229 esai: esai@02024000 { 248 esai: esai@02024000 {
230 reg = <0x02024000 0x4000>; 249 reg = <0x02024000 0x4000>;
231 interrupts = <0 51 0x04>; 250 interrupts = <0 51 IRQ_TYPE_LEVEL_HIGH>;
232 }; 251 };
233 252
234 ssi1: ssi@02028000 { 253 ssi1: ssi@02028000 {
235 compatible = "fsl,imx6q-ssi","fsl,imx21-ssi"; 254 compatible = "fsl,imx6q-ssi",
255 "fsl,imx51-ssi",
256 "fsl,imx21-ssi";
236 reg = <0x02028000 0x4000>; 257 reg = <0x02028000 0x4000>;
237 interrupts = <0 46 0x04>; 258 interrupts = <0 46 IRQ_TYPE_LEVEL_HIGH>;
238 clocks = <&clks 178>; 259 clocks = <&clks 178>;
239 dmas = <&sdma 37 1 0>, 260 dmas = <&sdma 37 1 0>,
240 <&sdma 38 1 0>; 261 <&sdma 38 1 0>;
@@ -245,9 +266,11 @@
245 }; 266 };
246 267
247 ssi2: ssi@0202c000 { 268 ssi2: ssi@0202c000 {
248 compatible = "fsl,imx6q-ssi","fsl,imx21-ssi"; 269 compatible = "fsl,imx6q-ssi",
270 "fsl,imx51-ssi",
271 "fsl,imx21-ssi";
249 reg = <0x0202c000 0x4000>; 272 reg = <0x0202c000 0x4000>;
250 interrupts = <0 47 0x04>; 273 interrupts = <0 47 IRQ_TYPE_LEVEL_HIGH>;
251 clocks = <&clks 179>; 274 clocks = <&clks 179>;
252 dmas = <&sdma 41 1 0>, 275 dmas = <&sdma 41 1 0>,
253 <&sdma 42 1 0>; 276 <&sdma 42 1 0>;
@@ -258,9 +281,11 @@
258 }; 281 };
259 282
260 ssi3: ssi@02030000 { 283 ssi3: ssi@02030000 {
261 compatible = "fsl,imx6q-ssi","fsl,imx21-ssi"; 284 compatible = "fsl,imx6q-ssi",
285 "fsl,imx51-ssi",
286 "fsl,imx21-ssi";
262 reg = <0x02030000 0x4000>; 287 reg = <0x02030000 0x4000>;
263 interrupts = <0 48 0x04>; 288 interrupts = <0 48 IRQ_TYPE_LEVEL_HIGH>;
264 clocks = <&clks 180>; 289 clocks = <&clks 180>;
265 dmas = <&sdma 45 1 0>, 290 dmas = <&sdma 45 1 0>,
266 <&sdma 46 1 0>; 291 <&sdma 46 1 0>;
@@ -272,7 +297,7 @@
272 297
273 asrc: asrc@02034000 { 298 asrc: asrc@02034000 {
274 reg = <0x02034000 0x4000>; 299 reg = <0x02034000 0x4000>;
275 interrupts = <0 50 0x04>; 300 interrupts = <0 50 IRQ_TYPE_LEVEL_HIGH>;
276 }; 301 };
277 302
278 spba@0203c000 { 303 spba@0203c000 {
@@ -282,7 +307,8 @@
282 307
283 vpu: vpu@02040000 { 308 vpu: vpu@02040000 {
284 reg = <0x02040000 0x3c000>; 309 reg = <0x02040000 0x3c000>;
285 interrupts = <0 3 0x04 0 12 0x04>; 310 interrupts = <0 3 IRQ_TYPE_LEVEL_HIGH>,
311 <0 12 IRQ_TYPE_LEVEL_HIGH>;
286 }; 312 };
287 313
288 aipstz@0207c000 { /* AIPSTZ1 */ 314 aipstz@0207c000 { /* AIPSTZ1 */
@@ -293,7 +319,7 @@
293 #pwm-cells = <2>; 319 #pwm-cells = <2>;
294 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; 320 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
295 reg = <0x02080000 0x4000>; 321 reg = <0x02080000 0x4000>;
296 interrupts = <0 83 0x04>; 322 interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
297 clocks = <&clks 62>, <&clks 145>; 323 clocks = <&clks 62>, <&clks 145>;
298 clock-names = "ipg", "per"; 324 clock-names = "ipg", "per";
299 }; 325 };
@@ -302,7 +328,7 @@
302 #pwm-cells = <2>; 328 #pwm-cells = <2>;
303 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; 329 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
304 reg = <0x02084000 0x4000>; 330 reg = <0x02084000 0x4000>;
305 interrupts = <0 84 0x04>; 331 interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>;
306 clocks = <&clks 62>, <&clks 146>; 332 clocks = <&clks 62>, <&clks 146>;
307 clock-names = "ipg", "per"; 333 clock-names = "ipg", "per";
308 }; 334 };
@@ -311,7 +337,7 @@
311 #pwm-cells = <2>; 337 #pwm-cells = <2>;
312 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; 338 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
313 reg = <0x02088000 0x4000>; 339 reg = <0x02088000 0x4000>;
314 interrupts = <0 85 0x04>; 340 interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
315 clocks = <&clks 62>, <&clks 147>; 341 clocks = <&clks 62>, <&clks 147>;
316 clock-names = "ipg", "per"; 342 clock-names = "ipg", "per";
317 }; 343 };
@@ -320,7 +346,7 @@
320 #pwm-cells = <2>; 346 #pwm-cells = <2>;
321 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; 347 compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
322 reg = <0x0208c000 0x4000>; 348 reg = <0x0208c000 0x4000>;
323 interrupts = <0 86 0x04>; 349 interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
324 clocks = <&clks 62>, <&clks 148>; 350 clocks = <&clks 62>, <&clks 148>;
325 clock-names = "ipg", "per"; 351 clock-names = "ipg", "per";
326 }; 352 };
@@ -328,23 +354,25 @@
328 can1: flexcan@02090000 { 354 can1: flexcan@02090000 {
329 compatible = "fsl,imx6q-flexcan"; 355 compatible = "fsl,imx6q-flexcan";
330 reg = <0x02090000 0x4000>; 356 reg = <0x02090000 0x4000>;
331 interrupts = <0 110 0x04>; 357 interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
332 clocks = <&clks 108>, <&clks 109>; 358 clocks = <&clks 108>, <&clks 109>;
333 clock-names = "ipg", "per"; 359 clock-names = "ipg", "per";
360 status = "disabled";
334 }; 361 };
335 362
336 can2: flexcan@02094000 { 363 can2: flexcan@02094000 {
337 compatible = "fsl,imx6q-flexcan"; 364 compatible = "fsl,imx6q-flexcan";
338 reg = <0x02094000 0x4000>; 365 reg = <0x02094000 0x4000>;
339 interrupts = <0 111 0x04>; 366 interrupts = <0 111 IRQ_TYPE_LEVEL_HIGH>;
340 clocks = <&clks 110>, <&clks 111>; 367 clocks = <&clks 110>, <&clks 111>;
341 clock-names = "ipg", "per"; 368 clock-names = "ipg", "per";
369 status = "disabled";
342 }; 370 };
343 371
344 gpt: gpt@02098000 { 372 gpt: gpt@02098000 {
345 compatible = "fsl,imx6q-gpt", "fsl,imx31-gpt"; 373 compatible = "fsl,imx6q-gpt", "fsl,imx31-gpt";
346 reg = <0x02098000 0x4000>; 374 reg = <0x02098000 0x4000>;
347 interrupts = <0 55 0x04>; 375 interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;
348 clocks = <&clks 119>, <&clks 120>; 376 clocks = <&clks 119>, <&clks 120>;
349 clock-names = "ipg", "per"; 377 clock-names = "ipg", "per";
350 }; 378 };
@@ -352,7 +380,8 @@
352 gpio1: gpio@0209c000 { 380 gpio1: gpio@0209c000 {
353 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 381 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
354 reg = <0x0209c000 0x4000>; 382 reg = <0x0209c000 0x4000>;
355 interrupts = <0 66 0x04 0 67 0x04>; 383 interrupts = <0 66 IRQ_TYPE_LEVEL_HIGH>,
384 <0 67 IRQ_TYPE_LEVEL_HIGH>;
356 gpio-controller; 385 gpio-controller;
357 #gpio-cells = <2>; 386 #gpio-cells = <2>;
358 interrupt-controller; 387 interrupt-controller;
@@ -362,7 +391,8 @@
362 gpio2: gpio@020a0000 { 391 gpio2: gpio@020a0000 {
363 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 392 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
364 reg = <0x020a0000 0x4000>; 393 reg = <0x020a0000 0x4000>;
365 interrupts = <0 68 0x04 0 69 0x04>; 394 interrupts = <0 68 IRQ_TYPE_LEVEL_HIGH>,
395 <0 69 IRQ_TYPE_LEVEL_HIGH>;
366 gpio-controller; 396 gpio-controller;
367 #gpio-cells = <2>; 397 #gpio-cells = <2>;
368 interrupt-controller; 398 interrupt-controller;
@@ -372,7 +402,8 @@
372 gpio3: gpio@020a4000 { 402 gpio3: gpio@020a4000 {
373 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 403 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
374 reg = <0x020a4000 0x4000>; 404 reg = <0x020a4000 0x4000>;
375 interrupts = <0 70 0x04 0 71 0x04>; 405 interrupts = <0 70 IRQ_TYPE_LEVEL_HIGH>,
406 <0 71 IRQ_TYPE_LEVEL_HIGH>;
376 gpio-controller; 407 gpio-controller;
377 #gpio-cells = <2>; 408 #gpio-cells = <2>;
378 interrupt-controller; 409 interrupt-controller;
@@ -382,7 +413,8 @@
382 gpio4: gpio@020a8000 { 413 gpio4: gpio@020a8000 {
383 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 414 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
384 reg = <0x020a8000 0x4000>; 415 reg = <0x020a8000 0x4000>;
385 interrupts = <0 72 0x04 0 73 0x04>; 416 interrupts = <0 72 IRQ_TYPE_LEVEL_HIGH>,
417 <0 73 IRQ_TYPE_LEVEL_HIGH>;
386 gpio-controller; 418 gpio-controller;
387 #gpio-cells = <2>; 419 #gpio-cells = <2>;
388 interrupt-controller; 420 interrupt-controller;
@@ -392,7 +424,8 @@
392 gpio5: gpio@020ac000 { 424 gpio5: gpio@020ac000 {
393 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 425 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
394 reg = <0x020ac000 0x4000>; 426 reg = <0x020ac000 0x4000>;
395 interrupts = <0 74 0x04 0 75 0x04>; 427 interrupts = <0 74 IRQ_TYPE_LEVEL_HIGH>,
428 <0 75 IRQ_TYPE_LEVEL_HIGH>;
396 gpio-controller; 429 gpio-controller;
397 #gpio-cells = <2>; 430 #gpio-cells = <2>;
398 interrupt-controller; 431 interrupt-controller;
@@ -402,7 +435,8 @@
402 gpio6: gpio@020b0000 { 435 gpio6: gpio@020b0000 {
403 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 436 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
404 reg = <0x020b0000 0x4000>; 437 reg = <0x020b0000 0x4000>;
405 interrupts = <0 76 0x04 0 77 0x04>; 438 interrupts = <0 76 IRQ_TYPE_LEVEL_HIGH>,
439 <0 77 IRQ_TYPE_LEVEL_HIGH>;
406 gpio-controller; 440 gpio-controller;
407 #gpio-cells = <2>; 441 #gpio-cells = <2>;
408 interrupt-controller; 442 interrupt-controller;
@@ -412,7 +446,8 @@
412 gpio7: gpio@020b4000 { 446 gpio7: gpio@020b4000 {
413 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; 447 compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
414 reg = <0x020b4000 0x4000>; 448 reg = <0x020b4000 0x4000>;
415 interrupts = <0 78 0x04 0 79 0x04>; 449 interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>,
450 <0 79 IRQ_TYPE_LEVEL_HIGH>;
416 gpio-controller; 451 gpio-controller;
417 #gpio-cells = <2>; 452 #gpio-cells = <2>;
418 interrupt-controller; 453 interrupt-controller;
@@ -421,20 +456,20 @@
421 456
422 kpp: kpp@020b8000 { 457 kpp: kpp@020b8000 {
423 reg = <0x020b8000 0x4000>; 458 reg = <0x020b8000 0x4000>;
424 interrupts = <0 82 0x04>; 459 interrupts = <0 82 IRQ_TYPE_LEVEL_HIGH>;
425 }; 460 };
426 461
427 wdog1: wdog@020bc000 { 462 wdog1: wdog@020bc000 {
428 compatible = "fsl,imx6q-wdt", "fsl,imx21-wdt"; 463 compatible = "fsl,imx6q-wdt", "fsl,imx21-wdt";
429 reg = <0x020bc000 0x4000>; 464 reg = <0x020bc000 0x4000>;
430 interrupts = <0 80 0x04>; 465 interrupts = <0 80 IRQ_TYPE_LEVEL_HIGH>;
431 clocks = <&clks 0>; 466 clocks = <&clks 0>;
432 }; 467 };
433 468
434 wdog2: wdog@020c0000 { 469 wdog2: wdog@020c0000 {
435 compatible = "fsl,imx6q-wdt", "fsl,imx21-wdt"; 470 compatible = "fsl,imx6q-wdt", "fsl,imx21-wdt";
436 reg = <0x020c0000 0x4000>; 471 reg = <0x020c0000 0x4000>;
437 interrupts = <0 81 0x04>; 472 interrupts = <0 81 IRQ_TYPE_LEVEL_HIGH>;
438 clocks = <&clks 0>; 473 clocks = <&clks 0>;
439 status = "disabled"; 474 status = "disabled";
440 }; 475 };
@@ -442,14 +477,17 @@
442 clks: ccm@020c4000 { 477 clks: ccm@020c4000 {
443 compatible = "fsl,imx6q-ccm"; 478 compatible = "fsl,imx6q-ccm";
444 reg = <0x020c4000 0x4000>; 479 reg = <0x020c4000 0x4000>;
445 interrupts = <0 87 0x04 0 88 0x04>; 480 interrupts = <0 87 IRQ_TYPE_LEVEL_HIGH>,
481 <0 88 IRQ_TYPE_LEVEL_HIGH>;
446 #clock-cells = <1>; 482 #clock-cells = <1>;
447 }; 483 };
448 484
449 anatop: anatop@020c8000 { 485 anatop: anatop@020c8000 {
450 compatible = "fsl,imx6q-anatop", "syscon", "simple-bus"; 486 compatible = "fsl,imx6q-anatop", "syscon", "simple-bus";
451 reg = <0x020c8000 0x1000>; 487 reg = <0x020c8000 0x1000>;
452 interrupts = <0 49 0x04 0 54 0x04 0 127 0x04>; 488 interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>,
489 <0 54 IRQ_TYPE_LEVEL_HIGH>,
490 <0 127 IRQ_TYPE_LEVEL_HIGH>;
453 491
454 regulator-1p1@110 { 492 regulator-1p1@110 {
455 compatible = "fsl,anatop-regulator"; 493 compatible = "fsl,anatop-regulator";
@@ -495,7 +533,7 @@
495 533
496 reg_arm: regulator-vddcore@140 { 534 reg_arm: regulator-vddcore@140 {
497 compatible = "fsl,anatop-regulator"; 535 compatible = "fsl,anatop-regulator";
498 regulator-name = "cpu"; 536 regulator-name = "vddarm";
499 regulator-min-microvolt = <725000>; 537 regulator-min-microvolt = <725000>;
500 regulator-max-microvolt = <1450000>; 538 regulator-max-microvolt = <1450000>;
501 regulator-always-on; 539 regulator-always-on;
@@ -547,23 +585,26 @@
547 585
548 tempmon: tempmon { 586 tempmon: tempmon {
549 compatible = "fsl,imx6q-tempmon"; 587 compatible = "fsl,imx6q-tempmon";
550 interrupts = <0 49 0x04>; 588 interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>;
551 fsl,tempmon = <&anatop>; 589 fsl,tempmon = <&anatop>;
552 fsl,tempmon-data = <&ocotp>; 590 fsl,tempmon-data = <&ocotp>;
591 clocks = <&clks 172>;
553 }; 592 };
554 593
555 usbphy1: usbphy@020c9000 { 594 usbphy1: usbphy@020c9000 {
556 compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy"; 595 compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy";
557 reg = <0x020c9000 0x1000>; 596 reg = <0x020c9000 0x1000>;
558 interrupts = <0 44 0x04>; 597 interrupts = <0 44 IRQ_TYPE_LEVEL_HIGH>;
559 clocks = <&clks 182>; 598 clocks = <&clks 182>;
599 fsl,anatop = <&anatop>;
560 }; 600 };
561 601
562 usbphy2: usbphy@020ca000 { 602 usbphy2: usbphy@020ca000 {
563 compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy"; 603 compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy";
564 reg = <0x020ca000 0x1000>; 604 reg = <0x020ca000 0x1000>;
565 interrupts = <0 45 0x04>; 605 interrupts = <0 45 IRQ_TYPE_LEVEL_HIGH>;
566 clocks = <&clks 183>; 606 clocks = <&clks 183>;
607 fsl,anatop = <&anatop>;
567 }; 608 };
568 609
569 snvs@020cc000 { 610 snvs@020cc000 {
@@ -575,31 +616,34 @@
575 snvs-rtc-lp@34 { 616 snvs-rtc-lp@34 {
576 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 617 compatible = "fsl,sec-v4.0-mon-rtc-lp";
577 reg = <0x34 0x58>; 618 reg = <0x34 0x58>;
578 interrupts = <0 19 0x04 0 20 0x04>; 619 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>,
620 <0 20 IRQ_TYPE_LEVEL_HIGH>;
579 }; 621 };
580 }; 622 };
581 623
582 epit1: epit@020d0000 { /* EPIT1 */ 624 epit1: epit@020d0000 { /* EPIT1 */
583 reg = <0x020d0000 0x4000>; 625 reg = <0x020d0000 0x4000>;
584 interrupts = <0 56 0x04>; 626 interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH>;
585 }; 627 };
586 628
587 epit2: epit@020d4000 { /* EPIT2 */ 629 epit2: epit@020d4000 { /* EPIT2 */
588 reg = <0x020d4000 0x4000>; 630 reg = <0x020d4000 0x4000>;
589 interrupts = <0 57 0x04>; 631 interrupts = <0 57 IRQ_TYPE_LEVEL_HIGH>;
590 }; 632 };
591 633
592 src: src@020d8000 { 634 src: src@020d8000 {
593 compatible = "fsl,imx6q-src", "fsl,imx51-src"; 635 compatible = "fsl,imx6q-src", "fsl,imx51-src";
594 reg = <0x020d8000 0x4000>; 636 reg = <0x020d8000 0x4000>;
595 interrupts = <0 91 0x04 0 96 0x04>; 637 interrupts = <0 91 IRQ_TYPE_LEVEL_HIGH>,
638 <0 96 IRQ_TYPE_LEVEL_HIGH>;
596 #reset-cells = <1>; 639 #reset-cells = <1>;
597 }; 640 };
598 641
599 gpc: gpc@020dc000 { 642 gpc: gpc@020dc000 {
600 compatible = "fsl,imx6q-gpc"; 643 compatible = "fsl,imx6q-gpc";
601 reg = <0x020dc000 0x4000>; 644 reg = <0x020dc000 0x4000>;
602 interrupts = <0 89 0x04 0 90 0x04>; 645 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>,
646 <0 90 IRQ_TYPE_LEVEL_HIGH>;
603 }; 647 };
604 648
605 gpr: iomuxc-gpr@020e0000 { 649 gpr: iomuxc-gpr@020e0000 {
@@ -610,744 +654,6 @@
610 iomuxc: iomuxc@020e0000 { 654 iomuxc: iomuxc@020e0000 {
611 compatible = "fsl,imx6dl-iomuxc", "fsl,imx6q-iomuxc"; 655 compatible = "fsl,imx6dl-iomuxc", "fsl,imx6q-iomuxc";
612 reg = <0x020e0000 0x4000>; 656 reg = <0x020e0000 0x4000>;
613
614 audmux {
615 pinctrl_audmux_1: audmux-1 {
616 fsl,pins = <
617 MX6QDL_PAD_SD2_DAT0__AUD4_RXD 0x80000000
618 MX6QDL_PAD_SD2_DAT3__AUD4_TXC 0x80000000
619 MX6QDL_PAD_SD2_DAT2__AUD4_TXD 0x80000000
620 MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x80000000
621 >;
622 };
623
624 pinctrl_audmux_2: audmux-2 {
625 fsl,pins = <
626 MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x80000000
627 MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x80000000
628 MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x80000000
629 MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x80000000
630 >;
631 };
632
633 pinctrl_audmux_3: audmux-3 {
634 fsl,pins = <
635 MX6QDL_PAD_DISP0_DAT16__AUD5_TXC 0x80000000
636 MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS 0x80000000
637 MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x80000000
638 >;
639 };
640 };
641
642 ecspi1 {
643 pinctrl_ecspi1_1: ecspi1grp-1 {
644 fsl,pins = <
645 MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
646 MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
647 MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
648 >;
649 };
650
651 pinctrl_ecspi1_2: ecspi1grp-2 {
652 fsl,pins = <
653 MX6QDL_PAD_KEY_COL1__ECSPI1_MISO 0x100b1
654 MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI 0x100b1
655 MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK 0x100b1
656 >;
657 };
658 };
659
660 ecspi3 {
661 pinctrl_ecspi3_1: ecspi3grp-1 {
662 fsl,pins = <
663 MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
664 MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
665 MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
666 >;
667 };
668 };
669
670 enet {
671 pinctrl_enet_1: enetgrp-1 {
672 fsl,pins = <
673 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
674 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
675 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
676 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
677 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
678 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
679 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
680 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
681 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
682 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
683 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
684 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
685 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
686 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
687 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
688 MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
689 >;
690 };
691
692 pinctrl_enet_2: enetgrp-2 {
693 fsl,pins = <
694 MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0
695 MX6QDL_PAD_KEY_COL2__ENET_MDC 0x1b0b0
696 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
697 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
698 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
699 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
700 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
701 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
702 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
703 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
704 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
705 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
706 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
707 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
708 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
709 >;
710 };
711
712 pinctrl_enet_3: enetgrp-3 {
713 fsl,pins = <
714 MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
715 MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
716 MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
717 MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
718 MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
719 MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
720 MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
721 MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
722 MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
723 MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
724 MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
725 MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
726 MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
727 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
728 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
729 MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0
730 >;
731 };
732 };
733
734 esai {
735 pinctrl_esai_1: esaigrp-1 {
736 fsl,pins = <
737 MX6QDL_PAD_ENET_RXD0__ESAI_TX_HF_CLK 0x1b030
738 MX6QDL_PAD_ENET_CRS_DV__ESAI_TX_CLK 0x1b030
739 MX6QDL_PAD_ENET_RXD1__ESAI_TX_FS 0x1b030
740 MX6QDL_PAD_ENET_TX_EN__ESAI_TX3_RX2 0x1b030
741 MX6QDL_PAD_ENET_TXD1__ESAI_TX2_RX3 0x1b030
742 MX6QDL_PAD_ENET_TXD0__ESAI_TX4_RX1 0x1b030
743 MX6QDL_PAD_ENET_MDC__ESAI_TX5_RX0 0x1b030
744 MX6QDL_PAD_NANDF_CS2__ESAI_TX0 0x1b030
745 MX6QDL_PAD_NANDF_CS3__ESAI_TX1 0x1b030
746 >;
747 };
748
749 pinctrl_esai_2: esaigrp-2 {
750 fsl,pins = <
751 MX6QDL_PAD_ENET_CRS_DV__ESAI_TX_CLK 0x1b030
752 MX6QDL_PAD_ENET_RXD1__ESAI_TX_FS 0x1b030
753 MX6QDL_PAD_ENET_TX_EN__ESAI_TX3_RX2 0x1b030
754 MX6QDL_PAD_GPIO_5__ESAI_TX2_RX3 0x1b030
755 MX6QDL_PAD_ENET_TXD0__ESAI_TX4_RX1 0x1b030
756 MX6QDL_PAD_ENET_MDC__ESAI_TX5_RX0 0x1b030
757 MX6QDL_PAD_GPIO_17__ESAI_TX0 0x1b030
758 MX6QDL_PAD_NANDF_CS3__ESAI_TX1 0x1b030
759 MX6QDL_PAD_ENET_MDIO__ESAI_RX_CLK 0x1b030
760 MX6QDL_PAD_GPIO_9__ESAI_RX_FS 0x1b030
761 >;
762 };
763 };
764
765 flexcan1 {
766 pinctrl_flexcan1_1: flexcan1grp-1 {
767 fsl,pins = <
768 MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
769 MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x80000000
770 >;
771 };
772
773 pinctrl_flexcan1_2: flexcan1grp-2 {
774 fsl,pins = <
775 MX6QDL_PAD_GPIO_7__FLEXCAN1_TX 0x80000000
776 MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
777 >;
778 };
779 };
780
781 flexcan2 {
782 pinctrl_flexcan2_1: flexcan2grp-1 {
783 fsl,pins = <
784 MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX 0x80000000
785 MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX 0x80000000
786 >;
787 };
788 };
789
790 gpmi-nand {
791 pinctrl_gpmi_nand_1: gpmi-nand-1 {
792 fsl,pins = <
793 MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
794 MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1
795 MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1
796 MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
797 MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1
798 MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1
799 MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1
800 MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1
801 MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1
802 MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1
803 MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1
804 MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1
805 MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1
806 MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1
807 MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1
808 MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1
809 MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1
810 >;
811 };
812 };
813
814 hdmi_hdcp {
815 pinctrl_hdmi_hdcp_1: hdmihdcpgrp-1 {
816 fsl,pins = <
817 MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL 0x4001b8b1
818 MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
819 >;
820 };
821
822 pinctrl_hdmi_hdcp_2: hdmihdcpgrp-2 {
823 fsl,pins = <
824 MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL 0x4001b8b1
825 MX6QDL_PAD_EIM_D16__HDMI_TX_DDC_SDA 0x4001b8b1
826 >;
827 };
828
829 pinctrl_hdmi_hdcp_3: hdmihdcpgrp-3 {
830 fsl,pins = <
831 MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL 0x4001b8b1
832 MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
833 >;
834 };
835 };
836
837 hdmi_cec {
838 pinctrl_hdmi_cec_1: hdmicecgrp-1 {
839 fsl,pins = <
840 MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE 0x1f8b0
841 >;
842 };
843
844 pinctrl_hdmi_cec_2: hdmicecgrp-2 {
845 fsl,pins = <
846 MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
847 >;
848 };
849 };
850
851 i2c1 {
852 pinctrl_i2c1_1: i2c1grp-1 {
853 fsl,pins = <
854 MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
855 MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
856 >;
857 };
858
859 pinctrl_i2c1_2: i2c1grp-2 {
860 fsl,pins = <
861 MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
862 MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
863 >;
864 };
865 };
866
867 i2c2 {
868 pinctrl_i2c2_1: i2c2grp-1 {
869 fsl,pins = <
870 MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
871 MX6QDL_PAD_EIM_D16__I2C2_SDA 0x4001b8b1
872 >;
873 };
874
875 pinctrl_i2c2_2: i2c2grp-2 {
876 fsl,pins = <
877 MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
878 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
879 >;
880 };
881
882 pinctrl_i2c2_3: i2c2grp-3 {
883 fsl,pins = <
884 MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
885 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
886 >;
887 };
888 };
889
890 i2c3 {
891 pinctrl_i2c3_1: i2c3grp-1 {
892 fsl,pins = <
893 MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
894 MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
895 >;
896 };
897
898 pinctrl_i2c3_2: i2c3grp-2 {
899 fsl,pins = <
900 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
901 MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
902 >;
903 };
904
905 pinctrl_i2c3_3: i2c3grp-3 {
906 fsl,pins = <
907 MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1
908 MX6QDL_PAD_GPIO_16__I2C3_SDA 0x4001b8b1
909 >;
910 };
911
912 pinctrl_i2c3_4: i2c3grp-4 {
913 fsl,pins = <
914 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
915 MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
916 >;
917 };
918 };
919
920 ipu1 {
921 pinctrl_ipu1_1: ipu1grp-1 {
922 fsl,pins = <
923 MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0x10
924 MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15 0x10
925 MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02 0x10
926 MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03 0x10
927 MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04 0x80000000
928 MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00 0x10
929 MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01 0x10
930 MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02 0x10
931 MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03 0x10
932 MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04 0x10
933 MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05 0x10
934 MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06 0x10
935 MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07 0x10
936 MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08 0x10
937 MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09 0x10
938 MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10 0x10
939 MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11 0x10
940 MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12 0x10
941 MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13 0x10
942 MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14 0x10
943 MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15 0x10
944 MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16 0x10
945 MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17 0x10
946 MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18 0x10
947 MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19 0x10
948 MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20 0x10
949 MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21 0x10
950 MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22 0x10
951 MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23 0x10
952 >;
953 };
954
955 pinctrl_ipu1_2: ipu1grp-2 { /* parallel camera */
956 fsl,pins = <
957 MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 0x80000000
958 MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13 0x80000000
959 MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14 0x80000000
960 MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15 0x80000000
961 MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16 0x80000000
962 MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17 0x80000000
963 MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18 0x80000000
964 MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19 0x80000000
965 MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN 0x80000000
966 MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x80000000
967 MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC 0x80000000
968 MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC 0x80000000
969 >;
970 };
971
972 pinctrl_ipu1_3: ipu1grp-3 { /* parallel port 16-bit */
973 fsl,pins = <
974 MX6QDL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04 0x80000000
975 MX6QDL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05 0x80000000
976 MX6QDL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06 0x80000000
977 MX6QDL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07 0x80000000
978 MX6QDL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08 0x80000000
979 MX6QDL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09 0x80000000
980 MX6QDL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10 0x80000000
981 MX6QDL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11 0x80000000
982 MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 0x80000000
983 MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13 0x80000000
984 MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14 0x80000000
985 MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15 0x80000000
986 MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16 0x80000000
987 MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17 0x80000000
988 MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18 0x80000000
989 MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19 0x80000000
990 MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x80000000
991 MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC 0x80000000
992 MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC 0x80000000
993 >;
994 };
995 };
996
997 mlb {
998 pinctrl_mlb_1: mlbgrp-1 {
999 fsl,pins = <
1000 MX6QDL_PAD_GPIO_3__MLB_CLK 0x71
1001 MX6QDL_PAD_GPIO_6__MLB_SIG 0x71
1002 MX6QDL_PAD_GPIO_2__MLB_DATA 0x71
1003 >;
1004 };
1005
1006 pinctrl_mlb_2: mlbgrp-2 {
1007 fsl,pins = <
1008 MX6QDL_PAD_ENET_TXD1__MLB_CLK 0x71
1009 MX6QDL_PAD_GPIO_6__MLB_SIG 0x71
1010 MX6QDL_PAD_GPIO_2__MLB_DATA 0x71
1011 >;
1012 };
1013 };
1014
1015 pwm0 {
1016 pinctrl_pwm0_1: pwm0grp-1 {
1017 fsl,pins = <
1018 MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
1019 >;
1020 };
1021 };
1022
1023 pwm3 {
1024 pinctrl_pwm3_1: pwm3grp-1 {
1025 fsl,pins = <
1026 MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
1027 >;
1028 };
1029 };
1030
1031 spdif {
1032 pinctrl_spdif_1: spdifgrp-1 {
1033 fsl,pins = <
1034 MX6QDL_PAD_KEY_COL3__SPDIF_IN 0x1b0b0
1035 >;
1036 };
1037
1038 pinctrl_spdif_2: spdifgrp-2 {
1039 fsl,pins = <
1040 MX6QDL_PAD_GPIO_16__SPDIF_IN 0x1b0b0
1041 MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x1b0b0
1042 >;
1043 };
1044
1045 pinctrl_spdif_3: spdifgrp-3 {
1046 fsl,pins = <
1047 MX6QDL_PAD_ENET_RXD0__SPDIF_OUT 0x1b0b0
1048 >;
1049 };
1050 };
1051
1052 uart1 {
1053 pinctrl_uart1_1: uart1grp-1 {
1054 fsl,pins = <
1055 MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
1056 MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
1057 >;
1058 };
1059 };
1060
1061 uart2 {
1062 pinctrl_uart2_1: uart2grp-1 {
1063 fsl,pins = <
1064 MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
1065 MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
1066 >;
1067 };
1068
1069 pinctrl_uart2_2: uart2grp-2 { /* DTE mode */
1070 fsl,pins = <
1071 MX6QDL_PAD_EIM_D26__UART2_RX_DATA 0x1b0b1
1072 MX6QDL_PAD_EIM_D27__UART2_TX_DATA 0x1b0b1
1073 MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B 0x1b0b1
1074 MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B 0x1b0b1
1075 >;
1076 };
1077 };
1078
1079 uart3 {
1080 pinctrl_uart3_1: uart3grp-1 {
1081 fsl,pins = <
1082 MX6QDL_PAD_SD4_CLK__UART3_RX_DATA 0x1b0b1
1083 MX6QDL_PAD_SD4_CMD__UART3_TX_DATA 0x1b0b1
1084 MX6QDL_PAD_EIM_D30__UART3_CTS_B 0x1b0b1
1085 MX6QDL_PAD_EIM_EB3__UART3_RTS_B 0x1b0b1
1086 >;
1087 };
1088
1089 pinctrl_uart3_2: uart3grp-2 {
1090 fsl,pins = <
1091 MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
1092 MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
1093 MX6QDL_PAD_EIM_D23__UART3_CTS_B 0x1b0b1
1094 MX6QDL_PAD_EIM_EB3__UART3_RTS_B 0x1b0b1
1095 >;
1096 };
1097 };
1098
1099 uart4 {
1100 pinctrl_uart4_1: uart4grp-1 {
1101 fsl,pins = <
1102 MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
1103 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
1104 >;
1105 };
1106 };
1107
1108 usbotg {
1109 pinctrl_usbotg_1: usbotggrp-1 {
1110 fsl,pins = <
1111 MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
1112 >;
1113 };
1114
1115 pinctrl_usbotg_2: usbotggrp-2 {
1116 fsl,pins = <
1117 MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
1118 >;
1119 };
1120 };
1121
1122 usbh2 {
1123 pinctrl_usbh2_1: usbh2grp-1 {
1124 fsl,pins = <
1125 MX6QDL_PAD_RGMII_TXC__USB_H2_DATA 0x40013030
1126 MX6QDL_PAD_RGMII_TX_CTL__USB_H2_STROBE 0x40013030
1127 >;
1128 };
1129
1130 pinctrl_usbh2_2: usbh2grp-2 {
1131 fsl,pins = <
1132 MX6QDL_PAD_RGMII_TX_CTL__USB_H2_STROBE 0x40017030
1133 >;
1134 };
1135 };
1136
1137 usbh3 {
1138 pinctrl_usbh3_1: usbh3grp-1 {
1139 fsl,pins = <
1140 MX6QDL_PAD_RGMII_RX_CTL__USB_H3_DATA 0x40013030
1141 MX6QDL_PAD_RGMII_RXC__USB_H3_STROBE 0x40013030
1142 >;
1143 };
1144
1145 pinctrl_usbh3_2: usbh3grp-2 {
1146 fsl,pins = <
1147 MX6QDL_PAD_RGMII_RXC__USB_H3_STROBE 0x40017030
1148 >;
1149 };
1150 };
1151
1152 usdhc1 {
1153 pinctrl_usdhc1_1: usdhc1grp-1 {
1154 fsl,pins = <
1155 MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059
1156 MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059
1157 MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
1158 MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
1159 MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
1160 MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
1161 MX6QDL_PAD_NANDF_D0__SD1_DATA4 0x17059
1162 MX6QDL_PAD_NANDF_D1__SD1_DATA5 0x17059
1163 MX6QDL_PAD_NANDF_D2__SD1_DATA6 0x17059
1164 MX6QDL_PAD_NANDF_D3__SD1_DATA7 0x17059
1165 >;
1166 };
1167
1168 pinctrl_usdhc1_2: usdhc1grp-2 {
1169 fsl,pins = <
1170 MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059
1171 MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059
1172 MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
1173 MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
1174 MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
1175 MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
1176 >;
1177 };
1178 };
1179
1180 usdhc2 {
1181 pinctrl_usdhc2_1: usdhc2grp-1 {
1182 fsl,pins = <
1183 MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
1184 MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
1185 MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
1186 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
1187 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
1188 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
1189 MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059
1190 MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059
1191 MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059
1192 MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059
1193 >;
1194 };
1195
1196 pinctrl_usdhc2_2: usdhc2grp-2 {
1197 fsl,pins = <
1198 MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
1199 MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
1200 MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
1201 MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
1202 MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
1203 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
1204 >;
1205 };
1206 };
1207
1208 usdhc3 {
1209 pinctrl_usdhc3_1: usdhc3grp-1 {
1210 fsl,pins = <
1211 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
1212 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
1213 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
1214 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
1215 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
1216 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
1217 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
1218 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
1219 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
1220 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
1221 >;
1222 };
1223
1224 pinctrl_usdhc3_1_100mhz: usdhc3grp-1-100mhz { /* 100Mhz */
1225 fsl,pins = <
1226 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x170b9
1227 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x100b9
1228 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x170b9
1229 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x170b9
1230 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x170b9
1231 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x170b9
1232 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x170b9
1233 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x170b9
1234 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x170b9
1235 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x170b9
1236 >;
1237 };
1238
1239 pinctrl_usdhc3_1_200mhz: usdhc3grp-1-200mhz { /* 200Mhz */
1240 fsl,pins = <
1241 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x170f9
1242 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x100f9
1243 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x170f9
1244 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x170f9
1245 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x170f9
1246 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x170f9
1247 MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x170f9
1248 MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x170f9
1249 MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x170f9
1250 MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x170f9
1251 >;
1252 };
1253
1254 pinctrl_usdhc3_2: usdhc3grp-2 {
1255 fsl,pins = <
1256 MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
1257 MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
1258 MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
1259 MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
1260 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
1261 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
1262 >;
1263 };
1264 };
1265
1266 usdhc4 {
1267 pinctrl_usdhc4_1: usdhc4grp-1 {
1268 fsl,pins = <
1269 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
1270 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
1271 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
1272 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
1273 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
1274 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
1275 MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
1276 MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
1277 MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
1278 MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
1279 >;
1280 };
1281
1282 pinctrl_usdhc4_2: usdhc4grp-2 {
1283 fsl,pins = <
1284 MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
1285 MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
1286 MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
1287 MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
1288 MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
1289 MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
1290 >;
1291 };
1292 };
1293
1294 weim {
1295 pinctrl_weim_cs0_1: weim_cs0grp-1 {
1296 fsl,pins = <
1297 MX6QDL_PAD_EIM_CS0__EIM_CS0_B 0xb0b1
1298 >;
1299 };
1300
1301 pinctrl_weim_nor_1: weim_norgrp-1 {
1302 fsl,pins = <
1303 MX6QDL_PAD_EIM_OE__EIM_OE_B 0xb0b1
1304 MX6QDL_PAD_EIM_RW__EIM_RW 0xb0b1
1305 MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
1306 /* data */
1307 MX6QDL_PAD_EIM_D16__EIM_DATA16 0x1b0b0
1308 MX6QDL_PAD_EIM_D17__EIM_DATA17 0x1b0b0
1309 MX6QDL_PAD_EIM_D18__EIM_DATA18 0x1b0b0
1310 MX6QDL_PAD_EIM_D19__EIM_DATA19 0x1b0b0
1311 MX6QDL_PAD_EIM_D20__EIM_DATA20 0x1b0b0
1312 MX6QDL_PAD_EIM_D21__EIM_DATA21 0x1b0b0
1313 MX6QDL_PAD_EIM_D22__EIM_DATA22 0x1b0b0
1314 MX6QDL_PAD_EIM_D23__EIM_DATA23 0x1b0b0
1315 MX6QDL_PAD_EIM_D24__EIM_DATA24 0x1b0b0
1316 MX6QDL_PAD_EIM_D25__EIM_DATA25 0x1b0b0
1317 MX6QDL_PAD_EIM_D26__EIM_DATA26 0x1b0b0
1318 MX6QDL_PAD_EIM_D27__EIM_DATA27 0x1b0b0
1319 MX6QDL_PAD_EIM_D28__EIM_DATA28 0x1b0b0
1320 MX6QDL_PAD_EIM_D29__EIM_DATA29 0x1b0b0
1321 MX6QDL_PAD_EIM_D30__EIM_DATA30 0x1b0b0
1322 MX6QDL_PAD_EIM_D31__EIM_DATA31 0x1b0b0
1323 /* address */
1324 MX6QDL_PAD_EIM_A23__EIM_ADDR23 0xb0b1
1325 MX6QDL_PAD_EIM_A22__EIM_ADDR22 0xb0b1
1326 MX6QDL_PAD_EIM_A21__EIM_ADDR21 0xb0b1
1327 MX6QDL_PAD_EIM_A20__EIM_ADDR20 0xb0b1
1328 MX6QDL_PAD_EIM_A19__EIM_ADDR19 0xb0b1
1329 MX6QDL_PAD_EIM_A18__EIM_ADDR18 0xb0b1
1330 MX6QDL_PAD_EIM_A17__EIM_ADDR17 0xb0b1
1331 MX6QDL_PAD_EIM_A16__EIM_ADDR16 0xb0b1
1332 MX6QDL_PAD_EIM_DA15__EIM_AD15 0xb0b1
1333 MX6QDL_PAD_EIM_DA14__EIM_AD14 0xb0b1
1334 MX6QDL_PAD_EIM_DA13__EIM_AD13 0xb0b1
1335 MX6QDL_PAD_EIM_DA12__EIM_AD12 0xb0b1
1336 MX6QDL_PAD_EIM_DA11__EIM_AD11 0xb0b1
1337 MX6QDL_PAD_EIM_DA10__EIM_AD10 0xb0b1
1338 MX6QDL_PAD_EIM_DA9__EIM_AD09 0xb0b1
1339 MX6QDL_PAD_EIM_DA8__EIM_AD08 0xb0b1
1340 MX6QDL_PAD_EIM_DA7__EIM_AD07 0xb0b1
1341 MX6QDL_PAD_EIM_DA6__EIM_AD06 0xb0b1
1342 MX6QDL_PAD_EIM_DA5__EIM_AD05 0xb0b1
1343 MX6QDL_PAD_EIM_DA4__EIM_AD04 0xb0b1
1344 MX6QDL_PAD_EIM_DA3__EIM_AD03 0xb0b1
1345 MX6QDL_PAD_EIM_DA2__EIM_AD02 0xb0b1
1346 MX6QDL_PAD_EIM_DA1__EIM_AD01 0xb0b1
1347 MX6QDL_PAD_EIM_DA0__EIM_AD00 0xb0b1
1348 >;
1349 };
1350 };
1351 }; 657 };
1352 658
1353 ldb: ldb@020e0008 { 659 ldb: ldb@020e0008 {
@@ -1370,18 +676,18 @@
1370 676
1371 dcic1: dcic@020e4000 { 677 dcic1: dcic@020e4000 {
1372 reg = <0x020e4000 0x4000>; 678 reg = <0x020e4000 0x4000>;
1373 interrupts = <0 124 0x04>; 679 interrupts = <0 124 IRQ_TYPE_LEVEL_HIGH>;
1374 }; 680 };
1375 681
1376 dcic2: dcic@020e8000 { 682 dcic2: dcic@020e8000 {
1377 reg = <0x020e8000 0x4000>; 683 reg = <0x020e8000 0x4000>;
1378 interrupts = <0 125 0x04>; 684 interrupts = <0 125 IRQ_TYPE_LEVEL_HIGH>;
1379 }; 685 };
1380 686
1381 sdma: sdma@020ec000 { 687 sdma: sdma@020ec000 {
1382 compatible = "fsl,imx6q-sdma", "fsl,imx35-sdma"; 688 compatible = "fsl,imx6q-sdma", "fsl,imx35-sdma";
1383 reg = <0x020ec000 0x4000>; 689 reg = <0x020ec000 0x4000>;
1384 interrupts = <0 2 0x04>; 690 interrupts = <0 2 IRQ_TYPE_LEVEL_HIGH>;
1385 clocks = <&clks 155>, <&clks 155>; 691 clocks = <&clks 155>, <&clks 155>;
1386 clock-names = "ipg", "ahb"; 692 clock-names = "ipg", "ahb";
1387 #dma-cells = <3>; 693 #dma-cells = <3>;
@@ -1398,7 +704,8 @@
1398 704
1399 caam@02100000 { 705 caam@02100000 {
1400 reg = <0x02100000 0x40000>; 706 reg = <0x02100000 0x40000>;
1401 interrupts = <0 105 0x04 0 106 0x04>; 707 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>,
708 <0 106 IRQ_TYPE_LEVEL_HIGH>;
1402 }; 709 };
1403 710
1404 aipstz@0217c000 { /* AIPSTZ2 */ 711 aipstz@0217c000 { /* AIPSTZ2 */
@@ -1408,7 +715,7 @@
1408 usbotg: usb@02184000 { 715 usbotg: usb@02184000 {
1409 compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; 716 compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
1410 reg = <0x02184000 0x200>; 717 reg = <0x02184000 0x200>;
1411 interrupts = <0 43 0x04>; 718 interrupts = <0 43 IRQ_TYPE_LEVEL_HIGH>;
1412 clocks = <&clks 162>; 719 clocks = <&clks 162>;
1413 fsl,usbphy = <&usbphy1>; 720 fsl,usbphy = <&usbphy1>;
1414 fsl,usbmisc = <&usbmisc 0>; 721 fsl,usbmisc = <&usbmisc 0>;
@@ -1418,7 +725,7 @@
1418 usbh1: usb@02184200 { 725 usbh1: usb@02184200 {
1419 compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; 726 compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
1420 reg = <0x02184200 0x200>; 727 reg = <0x02184200 0x200>;
1421 interrupts = <0 40 0x04>; 728 interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>;
1422 clocks = <&clks 162>; 729 clocks = <&clks 162>;
1423 fsl,usbphy = <&usbphy2>; 730 fsl,usbphy = <&usbphy2>;
1424 fsl,usbmisc = <&usbmisc 1>; 731 fsl,usbmisc = <&usbmisc 1>;
@@ -1428,7 +735,7 @@
1428 usbh2: usb@02184400 { 735 usbh2: usb@02184400 {
1429 compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; 736 compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
1430 reg = <0x02184400 0x200>; 737 reg = <0x02184400 0x200>;
1431 interrupts = <0 41 0x04>; 738 interrupts = <0 41 IRQ_TYPE_LEVEL_HIGH>;
1432 clocks = <&clks 162>; 739 clocks = <&clks 162>;
1433 fsl,usbmisc = <&usbmisc 2>; 740 fsl,usbmisc = <&usbmisc 2>;
1434 status = "disabled"; 741 status = "disabled";
@@ -1437,7 +744,7 @@
1437 usbh3: usb@02184600 { 744 usbh3: usb@02184600 {
1438 compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; 745 compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
1439 reg = <0x02184600 0x200>; 746 reg = <0x02184600 0x200>;
1440 interrupts = <0 42 0x04>; 747 interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>;
1441 clocks = <&clks 162>; 748 clocks = <&clks 162>;
1442 fsl,usbmisc = <&usbmisc 3>; 749 fsl,usbmisc = <&usbmisc 3>;
1443 status = "disabled"; 750 status = "disabled";
@@ -1453,7 +760,9 @@
1453 fec: ethernet@02188000 { 760 fec: ethernet@02188000 {
1454 compatible = "fsl,imx6q-fec"; 761 compatible = "fsl,imx6q-fec";
1455 reg = <0x02188000 0x4000>; 762 reg = <0x02188000 0x4000>;
1456 interrupts = <0 118 0x04 0 119 0x04>; 763 interrupts-extended =
764 <&intc 0 118 IRQ_TYPE_LEVEL_HIGH>,
765 <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
1457 clocks = <&clks 117>, <&clks 117>, <&clks 190>; 766 clocks = <&clks 117>, <&clks 117>, <&clks 190>;
1458 clock-names = "ipg", "ahb", "ptp"; 767 clock-names = "ipg", "ahb", "ptp";
1459 status = "disabled"; 768 status = "disabled";
@@ -1461,13 +770,15 @@
1461 770
1462 mlb@0218c000 { 771 mlb@0218c000 {
1463 reg = <0x0218c000 0x4000>; 772 reg = <0x0218c000 0x4000>;
1464 interrupts = <0 53 0x04 0 117 0x04 0 126 0x04>; 773 interrupts = <0 53 IRQ_TYPE_LEVEL_HIGH>,
774 <0 117 IRQ_TYPE_LEVEL_HIGH>,
775 <0 126 IRQ_TYPE_LEVEL_HIGH>;
1465 }; 776 };
1466 777
1467 usdhc1: usdhc@02190000 { 778 usdhc1: usdhc@02190000 {
1468 compatible = "fsl,imx6q-usdhc"; 779 compatible = "fsl,imx6q-usdhc";
1469 reg = <0x02190000 0x4000>; 780 reg = <0x02190000 0x4000>;
1470 interrupts = <0 22 0x04>; 781 interrupts = <0 22 IRQ_TYPE_LEVEL_HIGH>;
1471 clocks = <&clks 163>, <&clks 163>, <&clks 163>; 782 clocks = <&clks 163>, <&clks 163>, <&clks 163>;
1472 clock-names = "ipg", "ahb", "per"; 783 clock-names = "ipg", "ahb", "per";
1473 bus-width = <4>; 784 bus-width = <4>;
@@ -1477,7 +788,7 @@
1477 usdhc2: usdhc@02194000 { 788 usdhc2: usdhc@02194000 {
1478 compatible = "fsl,imx6q-usdhc"; 789 compatible = "fsl,imx6q-usdhc";
1479 reg = <0x02194000 0x4000>; 790 reg = <0x02194000 0x4000>;
1480 interrupts = <0 23 0x04>; 791 interrupts = <0 23 IRQ_TYPE_LEVEL_HIGH>;
1481 clocks = <&clks 164>, <&clks 164>, <&clks 164>; 792 clocks = <&clks 164>, <&clks 164>, <&clks 164>;
1482 clock-names = "ipg", "ahb", "per"; 793 clock-names = "ipg", "ahb", "per";
1483 bus-width = <4>; 794 bus-width = <4>;
@@ -1487,7 +798,7 @@
1487 usdhc3: usdhc@02198000 { 798 usdhc3: usdhc@02198000 {
1488 compatible = "fsl,imx6q-usdhc"; 799 compatible = "fsl,imx6q-usdhc";
1489 reg = <0x02198000 0x4000>; 800 reg = <0x02198000 0x4000>;
1490 interrupts = <0 24 0x04>; 801 interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
1491 clocks = <&clks 165>, <&clks 165>, <&clks 165>; 802 clocks = <&clks 165>, <&clks 165>, <&clks 165>;
1492 clock-names = "ipg", "ahb", "per"; 803 clock-names = "ipg", "ahb", "per";
1493 bus-width = <4>; 804 bus-width = <4>;
@@ -1497,7 +808,7 @@
1497 usdhc4: usdhc@0219c000 { 808 usdhc4: usdhc@0219c000 {
1498 compatible = "fsl,imx6q-usdhc"; 809 compatible = "fsl,imx6q-usdhc";
1499 reg = <0x0219c000 0x4000>; 810 reg = <0x0219c000 0x4000>;
1500 interrupts = <0 25 0x04>; 811 interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
1501 clocks = <&clks 166>, <&clks 166>, <&clks 166>; 812 clocks = <&clks 166>, <&clks 166>, <&clks 166>;
1502 clock-names = "ipg", "ahb", "per"; 813 clock-names = "ipg", "ahb", "per";
1503 bus-width = <4>; 814 bus-width = <4>;
@@ -1509,7 +820,7 @@
1509 #size-cells = <0>; 820 #size-cells = <0>;
1510 compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; 821 compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c";
1511 reg = <0x021a0000 0x4000>; 822 reg = <0x021a0000 0x4000>;
1512 interrupts = <0 36 0x04>; 823 interrupts = <0 36 IRQ_TYPE_LEVEL_HIGH>;
1513 clocks = <&clks 125>; 824 clocks = <&clks 125>;
1514 status = "disabled"; 825 status = "disabled";
1515 }; 826 };
@@ -1519,7 +830,7 @@
1519 #size-cells = <0>; 830 #size-cells = <0>;
1520 compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; 831 compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c";
1521 reg = <0x021a4000 0x4000>; 832 reg = <0x021a4000 0x4000>;
1522 interrupts = <0 37 0x04>; 833 interrupts = <0 37 IRQ_TYPE_LEVEL_HIGH>;
1523 clocks = <&clks 126>; 834 clocks = <&clks 126>;
1524 status = "disabled"; 835 status = "disabled";
1525 }; 836 };
@@ -1529,7 +840,7 @@
1529 #size-cells = <0>; 840 #size-cells = <0>;
1530 compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; 841 compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c";
1531 reg = <0x021a8000 0x4000>; 842 reg = <0x021a8000 0x4000>;
1532 interrupts = <0 38 0x04>; 843 interrupts = <0 38 IRQ_TYPE_LEVEL_HIGH>;
1533 clocks = <&clks 127>; 844 clocks = <&clks 127>;
1534 status = "disabled"; 845 status = "disabled";
1535 }; 846 };
@@ -1550,7 +861,7 @@
1550 weim: weim@021b8000 { 861 weim: weim@021b8000 {
1551 compatible = "fsl,imx6q-weim"; 862 compatible = "fsl,imx6q-weim";
1552 reg = <0x021b8000 0x4000>; 863 reg = <0x021b8000 0x4000>;
1553 interrupts = <0 14 0x04>; 864 interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
1554 clocks = <&clks 196>; 865 clocks = <&clks 196>;
1555 }; 866 };
1556 867
@@ -1561,12 +872,12 @@
1561 872
1562 tzasc@021d0000 { /* TZASC1 */ 873 tzasc@021d0000 { /* TZASC1 */
1563 reg = <0x021d0000 0x4000>; 874 reg = <0x021d0000 0x4000>;
1564 interrupts = <0 108 0x04>; 875 interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
1565 }; 876 };
1566 877
1567 tzasc@021d4000 { /* TZASC2 */ 878 tzasc@021d4000 { /* TZASC2 */
1568 reg = <0x021d4000 0x4000>; 879 reg = <0x021d4000 0x4000>;
1569 interrupts = <0 109 0x04>; 880 interrupts = <0 109 IRQ_TYPE_LEVEL_HIGH>;
1570 }; 881 };
1571 882
1572 audmux: audmux@021d8000 { 883 audmux: audmux@021d8000 {
@@ -1575,7 +886,7 @@
1575 status = "disabled"; 886 status = "disabled";
1576 }; 887 };
1577 888
1578 mipi@021dc000 { /* MIPI-CSI */ 889 mipi_csi: mipi@021dc000 {
1579 reg = <0x021dc000 0x4000>; 890 reg = <0x021dc000 0x4000>;
1580 }; 891 };
1581 892
@@ -1585,13 +896,13 @@
1585 896
1586 vdoa@021e4000 { 897 vdoa@021e4000 {
1587 reg = <0x021e4000 0x4000>; 898 reg = <0x021e4000 0x4000>;
1588 interrupts = <0 18 0x04>; 899 interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
1589 }; 900 };
1590 901
1591 uart2: serial@021e8000 { 902 uart2: serial@021e8000 {
1592 compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; 903 compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
1593 reg = <0x021e8000 0x4000>; 904 reg = <0x021e8000 0x4000>;
1594 interrupts = <0 27 0x04>; 905 interrupts = <0 27 IRQ_TYPE_LEVEL_HIGH>;
1595 clocks = <&clks 160>, <&clks 161>; 906 clocks = <&clks 160>, <&clks 161>;
1596 clock-names = "ipg", "per"; 907 clock-names = "ipg", "per";
1597 dmas = <&sdma 27 4 0>, <&sdma 28 4 0>; 908 dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
@@ -1602,7 +913,7 @@
1602 uart3: serial@021ec000 { 913 uart3: serial@021ec000 {
1603 compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; 914 compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
1604 reg = <0x021ec000 0x4000>; 915 reg = <0x021ec000 0x4000>;
1605 interrupts = <0 28 0x04>; 916 interrupts = <0 28 IRQ_TYPE_LEVEL_HIGH>;
1606 clocks = <&clks 160>, <&clks 161>; 917 clocks = <&clks 160>, <&clks 161>;
1607 clock-names = "ipg", "per"; 918 clock-names = "ipg", "per";
1608 dmas = <&sdma 29 4 0>, <&sdma 30 4 0>; 919 dmas = <&sdma 29 4 0>, <&sdma 30 4 0>;
@@ -1613,7 +924,7 @@
1613 uart4: serial@021f0000 { 924 uart4: serial@021f0000 {
1614 compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; 925 compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
1615 reg = <0x021f0000 0x4000>; 926 reg = <0x021f0000 0x4000>;
1616 interrupts = <0 29 0x04>; 927 interrupts = <0 29 IRQ_TYPE_LEVEL_HIGH>;
1617 clocks = <&clks 160>, <&clks 161>; 928 clocks = <&clks 160>, <&clks 161>;
1618 clock-names = "ipg", "per"; 929 clock-names = "ipg", "per";
1619 dmas = <&sdma 31 4 0>, <&sdma 32 4 0>; 930 dmas = <&sdma 31 4 0>, <&sdma 32 4 0>;
@@ -1624,7 +935,7 @@
1624 uart5: serial@021f4000 { 935 uart5: serial@021f4000 {
1625 compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; 936 compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
1626 reg = <0x021f4000 0x4000>; 937 reg = <0x021f4000 0x4000>;
1627 interrupts = <0 30 0x04>; 938 interrupts = <0 30 IRQ_TYPE_LEVEL_HIGH>;
1628 clocks = <&clks 160>, <&clks 161>; 939 clocks = <&clks 160>, <&clks 161>;
1629 clock-names = "ipg", "per"; 940 clock-names = "ipg", "per";
1630 dmas = <&sdma 33 4 0>, <&sdma 34 4 0>; 941 dmas = <&sdma 33 4 0>, <&sdma 34 4 0>;
@@ -1637,7 +948,8 @@
1637 #crtc-cells = <1>; 948 #crtc-cells = <1>;
1638 compatible = "fsl,imx6q-ipu"; 949 compatible = "fsl,imx6q-ipu";
1639 reg = <0x02400000 0x400000>; 950 reg = <0x02400000 0x400000>;
1640 interrupts = <0 6 0x4 0 5 0x4>; 951 interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>,
952 <0 5 IRQ_TYPE_LEVEL_HIGH>;
1641 clocks = <&clks 130>, <&clks 131>, <&clks 132>; 953 clocks = <&clks 130>, <&clks 131>, <&clks 132>;
1642 clock-names = "bus", "di0", "di1"; 954 clock-names = "bus", "di0", "di1";
1643 resets = <&src 2>; 955 resets = <&src 2>;
diff --git a/arch/arm/boot/dts/imx6sl-evk.dts b/arch/arm/boot/dts/imx6sl-evk.dts
index cc68e19c5163..864d8dfb51ca 100644
--- a/arch/arm/boot/dts/imx6sl-evk.dts
+++ b/arch/arm/boot/dts/imx6sl-evk.dts
@@ -8,6 +8,8 @@
8 8
9/dts-v1/; 9/dts-v1/;
10 10
11#include <dt-bindings/gpio/gpio.h>
12#include <dt-bindings/input/input.h>
11#include "imx6sl.dtsi" 13#include "imx6sl.dtsi"
12 14
13/ { 15/ {
@@ -18,11 +20,26 @@
18 reg = <0x80000000 0x40000000>; 20 reg = <0x80000000 0x40000000>;
19 }; 21 };
20 22
23 leds {
24 compatible = "gpio-leds";
25 pinctrl-names = "default";
26 pinctrl-0 = <&pinctrl_led>;
27
28 user {
29 label = "debug";
30 gpios = <&gpio3 20 GPIO_ACTIVE_HIGH>;
31 linux,default-trigger = "heartbeat";
32 };
33 };
34
21 regulators { 35 regulators {
22 compatible = "simple-bus"; 36 compatible = "simple-bus";
37 #address-cells = <1>;
38 #size-cells = <0>;
23 39
24 reg_usb_otg1_vbus: usb_otg1_vbus { 40 reg_usb_otg1_vbus: regulator@0 {
25 compatible = "regulator-fixed"; 41 compatible = "regulator-fixed";
42 reg = <0>;
26 regulator-name = "usb_otg1_vbus"; 43 regulator-name = "usb_otg1_vbus";
27 regulator-min-microvolt = <5000000>; 44 regulator-min-microvolt = <5000000>;
28 regulator-max-microvolt = <5000000>; 45 regulator-max-microvolt = <5000000>;
@@ -30,22 +47,63 @@
30 enable-active-high; 47 enable-active-high;
31 }; 48 };
32 49
33 reg_usb_otg2_vbus: usb_otg2_vbus { 50 reg_usb_otg2_vbus: regulator@1 {
34 compatible = "regulator-fixed"; 51 compatible = "regulator-fixed";
52 reg = <1>;
35 regulator-name = "usb_otg2_vbus"; 53 regulator-name = "usb_otg2_vbus";
36 regulator-min-microvolt = <5000000>; 54 regulator-min-microvolt = <5000000>;
37 regulator-max-microvolt = <5000000>; 55 regulator-max-microvolt = <5000000>;
38 gpio = <&gpio4 2 0>; 56 gpio = <&gpio4 2 0>;
39 enable-active-high; 57 enable-active-high;
40 }; 58 };
59
60 reg_aud3v: regulator@2 {
61 compatible = "regulator-fixed";
62 reg = <2>;
63 regulator-name = "wm8962-supply-3v15";
64 regulator-min-microvolt = <3150000>;
65 regulator-max-microvolt = <3150000>;
66 regulator-boot-on;
67 };
68
69 reg_aud4v: regulator@3 {
70 compatible = "regulator-fixed";
71 reg = <3>;
72 regulator-name = "wm8962-supply-4v2";
73 regulator-min-microvolt = <4325000>;
74 regulator-max-microvolt = <4325000>;
75 regulator-boot-on;
76 };
77 };
78
79 sound {
80 compatible = "fsl,imx6sl-evk-wm8962", "fsl,imx-audio-wm8962";
81 model = "wm8962-audio";
82 ssi-controller = <&ssi2>;
83 audio-codec = <&codec>;
84 audio-routing =
85 "Headphone Jack", "HPOUTL",
86 "Headphone Jack", "HPOUTR",
87 "Ext Spk", "SPKOUTL",
88 "Ext Spk", "SPKOUTR",
89 "AMIC", "MICBIAS",
90 "IN3R", "AMIC";
91 mux-int-port = <2>;
92 mux-ext-port = <3>;
41 }; 93 };
42}; 94};
43 95
96&audmux {
97 pinctrl-names = "default";
98 pinctrl-0 = <&pinctrl_audmux3>;
99 status = "okay";
100};
101
44&ecspi1 { 102&ecspi1 {
45 fsl,spi-num-chipselects = <1>; 103 fsl,spi-num-chipselects = <1>;
46 cs-gpios = <&gpio4 11 0>; 104 cs-gpios = <&gpio4 11 0>;
47 pinctrl-names = "default"; 105 pinctrl-names = "default";
48 pinctrl-0 = <&pinctrl_ecspi1_1>; 106 pinctrl-0 = <&pinctrl_ecspi1>;
49 status = "okay"; 107 status = "okay";
50 108
51 flash: m25p80@0 { 109 flash: m25p80@0 {
@@ -59,16 +117,144 @@
59 117
60&fec { 118&fec {
61 pinctrl-names = "default"; 119 pinctrl-names = "default";
62 pinctrl-0 = <&pinctrl_fec_1>; 120 pinctrl-0 = <&pinctrl_fec>;
63 phy-mode = "rmii"; 121 phy-mode = "rmii";
64 status = "okay"; 122 status = "okay";
65}; 123};
66 124
125&i2c1 {
126 clock-frequency = <100000>;
127 pinctrl-names = "default";
128 pinctrl-0 = <&pinctrl_i2c1>;
129 status = "okay";
130
131 pmic: pfuze100@08 {
132 compatible = "fsl,pfuze100";
133 reg = <0x08>;
134
135 regulators {
136 sw1a_reg: sw1ab {
137 regulator-min-microvolt = <300000>;
138 regulator-max-microvolt = <1875000>;
139 regulator-boot-on;
140 regulator-always-on;
141 regulator-ramp-delay = <6250>;
142 };
143
144 sw1c_reg: sw1c {
145 regulator-min-microvolt = <300000>;
146 regulator-max-microvolt = <1875000>;
147 regulator-boot-on;
148 regulator-always-on;
149 regulator-ramp-delay = <6250>;
150 };
151
152 sw2_reg: sw2 {
153 regulator-min-microvolt = <800000>;
154 regulator-max-microvolt = <3300000>;
155 regulator-boot-on;
156 regulator-always-on;
157 };
158
159 sw3a_reg: sw3a {
160 regulator-min-microvolt = <400000>;
161 regulator-max-microvolt = <1975000>;
162 regulator-boot-on;
163 regulator-always-on;
164 };
165
166 sw3b_reg: sw3b {
167 regulator-min-microvolt = <400000>;
168 regulator-max-microvolt = <1975000>;
169 regulator-boot-on;
170 regulator-always-on;
171 };
172
173 sw4_reg: sw4 {
174 regulator-min-microvolt = <800000>;
175 regulator-max-microvolt = <3300000>;
176 };
177
178 swbst_reg: swbst {
179 regulator-min-microvolt = <5000000>;
180 regulator-max-microvolt = <5150000>;
181 };
182
183 snvs_reg: vsnvs {
184 regulator-min-microvolt = <1000000>;
185 regulator-max-microvolt = <3000000>;
186 regulator-boot-on;
187 regulator-always-on;
188 };
189
190 vref_reg: vrefddr {
191 regulator-boot-on;
192 regulator-always-on;
193 };
194
195 vgen1_reg: vgen1 {
196 regulator-min-microvolt = <800000>;
197 regulator-max-microvolt = <1550000>;
198 regulator-always-on;
199 };
200
201 vgen2_reg: vgen2 {
202 regulator-min-microvolt = <800000>;
203 regulator-max-microvolt = <1550000>;
204 };
205
206 vgen3_reg: vgen3 {
207 regulator-min-microvolt = <1800000>;
208 regulator-max-microvolt = <3300000>;
209 };
210
211 vgen4_reg: vgen4 {
212 regulator-min-microvolt = <1800000>;
213 regulator-max-microvolt = <3300000>;
214 regulator-always-on;
215 };
216
217 vgen5_reg: vgen5 {
218 regulator-min-microvolt = <1800000>;
219 regulator-max-microvolt = <3300000>;
220 regulator-always-on;
221 };
222
223 vgen6_reg: vgen6 {
224 regulator-min-microvolt = <1800000>;
225 regulator-max-microvolt = <3300000>;
226 regulator-always-on;
227 };
228 };
229 };
230};
231
232&i2c2 {
233 clock-frequency = <100000>;
234 pinctrl-names = "default";
235 pinctrl-0 = <&pinctrl_i2c2>;
236 status = "okay";
237
238 codec: wm8962@1a {
239 compatible = "wlf,wm8962";
240 reg = <0x1a>;
241 clocks = <&clks IMX6SL_CLK_EXTERN_AUDIO>;
242 DCVDD-supply = <&vgen3_reg>;
243 DBVDD-supply = <&reg_aud3v>;
244 AVDD-supply = <&vgen3_reg>;
245 CPVDD-supply = <&vgen3_reg>;
246 MICVDD-supply = <&reg_aud3v>;
247 PLLVDD-supply = <&vgen3_reg>;
248 SPKVDD1-supply = <&reg_aud4v>;
249 SPKVDD2-supply = <&reg_aud4v>;
250 };
251};
252
67&iomuxc { 253&iomuxc {
68 pinctrl-names = "default"; 254 pinctrl-names = "default";
69 pinctrl-0 = <&pinctrl_hog>; 255 pinctrl-0 = <&pinctrl_hog>;
70 256
71 hog { 257 imx6sl-evk {
72 pinctrl_hog: hoggrp { 258 pinctrl_hog: hoggrp {
73 fsl,pins = < 259 fsl,pins = <
74 MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x17059 260 MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x17059
@@ -78,21 +264,230 @@
78 MX6SL_PAD_REF_CLK_32K__GPIO3_IO22 0x17059 264 MX6SL_PAD_REF_CLK_32K__GPIO3_IO22 0x17059
79 MX6SL_PAD_KEY_COL4__GPIO4_IO00 0x80000000 265 MX6SL_PAD_KEY_COL4__GPIO4_IO00 0x80000000
80 MX6SL_PAD_KEY_COL5__GPIO4_IO02 0x80000000 266 MX6SL_PAD_KEY_COL5__GPIO4_IO02 0x80000000
267 MX6SL_PAD_AUD_MCLK__AUDIO_CLK_OUT 0x4130b0
268 >;
269 };
270
271 pinctrl_audmux3: audmux3grp {
272 fsl,pins = <
273 MX6SL_PAD_AUD_RXD__AUD3_RXD 0x4130b0
274 MX6SL_PAD_AUD_TXC__AUD3_TXC 0x4130b0
275 MX6SL_PAD_AUD_TXD__AUD3_TXD 0x4110b0
276 MX6SL_PAD_AUD_TXFS__AUD3_TXFS 0x4130b0
277 >;
278 };
279
280 pinctrl_ecspi1: ecspi1grp {
281 fsl,pins = <
282 MX6SL_PAD_ECSPI1_MISO__ECSPI1_MISO 0x100b1
283 MX6SL_PAD_ECSPI1_MOSI__ECSPI1_MOSI 0x100b1
284 MX6SL_PAD_ECSPI1_SCLK__ECSPI1_SCLK 0x100b1
285 >;
286 };
287
288 pinctrl_fec: fecgrp {
289 fsl,pins = <
290 MX6SL_PAD_FEC_MDC__FEC_MDC 0x1b0b0
291 MX6SL_PAD_FEC_MDIO__FEC_MDIO 0x1b0b0
292 MX6SL_PAD_FEC_CRS_DV__FEC_RX_DV 0x1b0b0
293 MX6SL_PAD_FEC_RXD0__FEC_RX_DATA0 0x1b0b0
294 MX6SL_PAD_FEC_RXD1__FEC_RX_DATA1 0x1b0b0
295 MX6SL_PAD_FEC_TX_EN__FEC_TX_EN 0x1b0b0
296 MX6SL_PAD_FEC_TXD0__FEC_TX_DATA0 0x1b0b0
297 MX6SL_PAD_FEC_TXD1__FEC_TX_DATA1 0x1b0b0
298 MX6SL_PAD_FEC_REF_CLK__FEC_REF_OUT 0x4001b0a8
299 >;
300 };
301
302 pinctrl_i2c1: i2c1grp {
303 fsl,pins = <
304 MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001b8b1
305 MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001b8b1
306 >;
307 };
308
309
310 pinctrl_i2c2: i2c2grp {
311 fsl,pins = <
312 MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x4001b8b1
313 MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x4001b8b1
314 >;
315 };
316
317 pinctrl_led: ledgrp {
318 fsl,pins = <
319 MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x17059
320 >;
321 };
322
323 pinctrl_kpp: kppgrp {
324 fsl,pins = <
325 MX6SL_PAD_KEY_ROW0__KEY_ROW0 0x1b010
326 MX6SL_PAD_KEY_ROW1__KEY_ROW1 0x1b010
327 MX6SL_PAD_KEY_ROW2__KEY_ROW2 0x1b0b0
328 MX6SL_PAD_KEY_COL0__KEY_COL0 0x110b0
329 MX6SL_PAD_KEY_COL1__KEY_COL1 0x110b0
330 MX6SL_PAD_KEY_COL2__KEY_COL2 0x110b0
331 >;
332 };
333
334 pinctrl_uart1: uart1grp {
335 fsl,pins = <
336 MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x1b0b1
337 MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1
338 >;
339 };
340
341 pinctrl_usbotg1: usbotg1grp {
342 fsl,pins = <
343 MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059
344 >;
345 };
346
347 pinctrl_usdhc1: usdhc1grp {
348 fsl,pins = <
349 MX6SL_PAD_SD1_CMD__SD1_CMD 0x17059
350 MX6SL_PAD_SD1_CLK__SD1_CLK 0x10059
351 MX6SL_PAD_SD1_DAT0__SD1_DATA0 0x17059
352 MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x17059
353 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x17059
354 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x17059
355 MX6SL_PAD_SD1_DAT4__SD1_DATA4 0x17059
356 MX6SL_PAD_SD1_DAT5__SD1_DATA5 0x17059
357 MX6SL_PAD_SD1_DAT6__SD1_DATA6 0x17059
358 MX6SL_PAD_SD1_DAT7__SD1_DATA7 0x17059
359 >;
360 };
361
362 pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
363 fsl,pins = <
364 MX6SL_PAD_SD1_CMD__SD1_CMD 0x170b9
365 MX6SL_PAD_SD1_CLK__SD1_CLK 0x100b9
366 MX6SL_PAD_SD1_DAT0__SD1_DATA0 0x170b9
367 MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x170b9
368 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x170b9
369 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x170b9
370 MX6SL_PAD_SD1_DAT4__SD1_DATA4 0x170b9
371 MX6SL_PAD_SD1_DAT5__SD1_DATA5 0x170b9
372 MX6SL_PAD_SD1_DAT6__SD1_DATA6 0x170b9
373 MX6SL_PAD_SD1_DAT7__SD1_DATA7 0x170b9
374 >;
375 };
376
377 pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
378 fsl,pins = <
379 MX6SL_PAD_SD1_CMD__SD1_CMD 0x170f9
380 MX6SL_PAD_SD1_CLK__SD1_CLK 0x100f9
381 MX6SL_PAD_SD1_DAT0__SD1_DATA0 0x170f9
382 MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x170f9
383 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x170f9
384 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x170f9
385 MX6SL_PAD_SD1_DAT4__SD1_DATA4 0x170f9
386 MX6SL_PAD_SD1_DAT5__SD1_DATA5 0x170f9
387 MX6SL_PAD_SD1_DAT6__SD1_DATA6 0x170f9
388 MX6SL_PAD_SD1_DAT7__SD1_DATA7 0x170f9
389 >;
390 };
391
392 pinctrl_usdhc2: usdhc2grp {
393 fsl,pins = <
394 MX6SL_PAD_SD2_CMD__SD2_CMD 0x17059
395 MX6SL_PAD_SD2_CLK__SD2_CLK 0x10059
396 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x17059
397 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x17059
398 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x17059
399 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x17059
400 >;
401 };
402
403 pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
404 fsl,pins = <
405 MX6SL_PAD_SD2_CMD__SD2_CMD 0x170b9
406 MX6SL_PAD_SD2_CLK__SD2_CLK 0x100b9
407 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170b9
408 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170b9
409 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170b9
410 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170b9
411 >;
412 };
413
414 pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
415 fsl,pins = <
416 MX6SL_PAD_SD2_CMD__SD2_CMD 0x170f9
417 MX6SL_PAD_SD2_CLK__SD2_CLK 0x100f9
418 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170f9
419 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170f9
420 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170f9
421 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170f9
422 >;
423 };
424
425 pinctrl_usdhc3: usdhc3grp {
426 fsl,pins = <
427 MX6SL_PAD_SD3_CMD__SD3_CMD 0x17059
428 MX6SL_PAD_SD3_CLK__SD3_CLK 0x10059
429 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x17059
430 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x17059
431 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x17059
432 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x17059
433 >;
434 };
435
436 pinctrl_usdhc3_100mhz: usdhc3grp100mhz {
437 fsl,pins = <
438 MX6SL_PAD_SD3_CMD__SD3_CMD 0x170b9
439 MX6SL_PAD_SD3_CLK__SD3_CLK 0x100b9
440 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170b9
441 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170b9
442 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170b9
443 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170b9
444 >;
445 };
446
447 pinctrl_usdhc3_200mhz: usdhc3grp200mhz {
448 fsl,pins = <
449 MX6SL_PAD_SD3_CMD__SD3_CMD 0x170f9
450 MX6SL_PAD_SD3_CLK__SD3_CLK 0x100f9
451 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170f9
452 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170f9
453 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170f9
454 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170f9
81 >; 455 >;
82 }; 456 };
83 }; 457 };
84}; 458};
85 459
460&kpp {
461 pinctrl-names = "default";
462 pinctrl-0 = <&pinctrl_kpp>;
463 linux,keymap = <
464 MATRIX_KEY(0x0, 0x0, KEY_UP) /* ROW0, COL0 */
465 MATRIX_KEY(0x0, 0x1, KEY_DOWN) /* ROW0, COL1 */
466 MATRIX_KEY(0x0, 0x2, KEY_ENTER) /* ROW0, COL2 */
467 MATRIX_KEY(0x1, 0x0, KEY_HOME) /* ROW1, COL0 */
468 MATRIX_KEY(0x1, 0x1, KEY_RIGHT) /* ROW1, COL1 */
469 MATRIX_KEY(0x1, 0x2, KEY_LEFT) /* ROW1, COL2 */
470 MATRIX_KEY(0x2, 0x0, KEY_VOLUMEDOWN) /* ROW2, COL0 */
471 MATRIX_KEY(0x2, 0x1, KEY_VOLUMEUP) /* ROW2, COL1 */
472 >;
473 status = "okay";
474};
475
476&ssi2 {
477 fsl,mode = "i2s-slave";
478 status = "okay";
479};
480
86&uart1 { 481&uart1 {
87 pinctrl-names = "default"; 482 pinctrl-names = "default";
88 pinctrl-0 = <&pinctrl_uart1_1>; 483 pinctrl-0 = <&pinctrl_uart1>;
89 status = "okay"; 484 status = "okay";
90}; 485};
91 486
92&usbotg1 { 487&usbotg1 {
93 vbus-supply = <&reg_usb_otg1_vbus>; 488 vbus-supply = <&reg_usb_otg1_vbus>;
94 pinctrl-names = "default"; 489 pinctrl-names = "default";
95 pinctrl-0 = <&pinctrl_usbotg1_1>; 490 pinctrl-0 = <&pinctrl_usbotg1>;
96 disable-over-current; 491 disable-over-current;
97 status = "okay"; 492 status = "okay";
98}; 493};
@@ -106,9 +501,9 @@
106 501
107&usdhc1 { 502&usdhc1 {
108 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 503 pinctrl-names = "default", "state_100mhz", "state_200mhz";
109 pinctrl-0 = <&pinctrl_usdhc1_1>; 504 pinctrl-0 = <&pinctrl_usdhc1>;
110 pinctrl-1 = <&pinctrl_usdhc1_1_100mhz>; 505 pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
111 pinctrl-2 = <&pinctrl_usdhc1_1_200mhz>; 506 pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
112 bus-width = <8>; 507 bus-width = <8>;
113 cd-gpios = <&gpio4 7 0>; 508 cd-gpios = <&gpio4 7 0>;
114 wp-gpios = <&gpio4 6 0>; 509 wp-gpios = <&gpio4 6 0>;
@@ -117,9 +512,9 @@
117 512
118&usdhc2 { 513&usdhc2 {
119 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 514 pinctrl-names = "default", "state_100mhz", "state_200mhz";
120 pinctrl-0 = <&pinctrl_usdhc2_1>; 515 pinctrl-0 = <&pinctrl_usdhc2>;
121 pinctrl-1 = <&pinctrl_usdhc2_1_100mhz>; 516 pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
122 pinctrl-2 = <&pinctrl_usdhc2_1_200mhz>; 517 pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
123 cd-gpios = <&gpio5 0 0>; 518 cd-gpios = <&gpio5 0 0>;
124 wp-gpios = <&gpio4 29 0>; 519 wp-gpios = <&gpio4 29 0>;
125 status = "okay"; 520 status = "okay";
@@ -127,9 +522,9 @@
127 522
128&usdhc3 { 523&usdhc3 {
129 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 524 pinctrl-names = "default", "state_100mhz", "state_200mhz";
130 pinctrl-0 = <&pinctrl_usdhc3_1>; 525 pinctrl-0 = <&pinctrl_usdhc3>;
131 pinctrl-1 = <&pinctrl_usdhc3_1_100mhz>; 526 pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
132 pinctrl-2 = <&pinctrl_usdhc3_1_200mhz>; 527 pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
133 cd-gpios = <&gpio3 22 0>; 528 cd-gpios = <&gpio3 22 0>;
134 status = "okay"; 529 status = "okay";
135}; 530};
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
index 28558f1aaf2d..3cb4941afeef 100644
--- a/arch/arm/boot/dts/imx6sl.dtsi
+++ b/arch/arm/boot/dts/imx6sl.dtsi
@@ -7,6 +7,7 @@
7 * 7 *
8 */ 8 */
9 9
10#include <dt-bindings/interrupt-controller/irq.h>
10#include "skeleton.dtsi" 11#include "skeleton.dtsi"
11#include "imx6sl-pinfunc.h" 12#include "imx6sl-pinfunc.h"
12#include <dt-bindings/clock/imx6sl-clock.h> 13#include <dt-bindings/clock/imx6sl-clock.h>
@@ -27,6 +28,8 @@
27 spi1 = &ecspi2; 28 spi1 = &ecspi2;
28 spi2 = &ecspi3; 29 spi2 = &ecspi3;
29 spi3 = &ecspi4; 30 spi3 = &ecspi4;
31 usbphy0 = &usbphy1;
32 usbphy1 = &usbphy2;
30 }; 33 };
31 34
32 cpus { 35 cpus {
@@ -38,6 +41,27 @@
38 device_type = "cpu"; 41 device_type = "cpu";
39 reg = <0x0>; 42 reg = <0x0>;
40 next-level-cache = <&L2>; 43 next-level-cache = <&L2>;
44 operating-points = <
45 /* kHz uV */
46 996000 1275000
47 792000 1175000
48 396000 975000
49 >;
50 fsl,soc-operating-points = <
51 /* ARM kHz SOC-PU uV */
52 996000 1225000
53 792000 1175000
54 396000 1175000
55 >;
56 clock-latency = <61036>; /* two CLK32 periods */
57 clocks = <&clks IMX6SL_CLK_ARM>, <&clks IMX6SL_CLK_PLL2_PFD2>,
58 <&clks IMX6SL_CLK_STEP>, <&clks IMX6SL_CLK_PLL1_SW>,
59 <&clks IMX6SL_CLK_PLL1_SYS>;
60 clock-names = "arm", "pll2_pfd2_396m", "step",
61 "pll1_sw", "pll1_sys";
62 arm-supply = <&reg_arm>;
63 pu-supply = <&reg_pu>;
64 soc-supply = <&reg_soc>;
41 }; 65 };
42 }; 66 };
43 67
@@ -73,10 +97,16 @@
73 interrupt-parent = <&intc>; 97 interrupt-parent = <&intc>;
74 ranges; 98 ranges;
75 99
100 ocram: sram@00900000 {
101 compatible = "mmio-sram";
102 reg = <0x00900000 0x20000>;
103 clocks = <&clks IMX6SL_CLK_OCRAM>;
104 };
105
76 L2: l2-cache@00a02000 { 106 L2: l2-cache@00a02000 {
77 compatible = "arm,pl310-cache"; 107 compatible = "arm,pl310-cache";
78 reg = <0x00a02000 0x1000>; 108 reg = <0x00a02000 0x1000>;
79 interrupts = <0 92 0x04>; 109 interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
80 cache-unified; 110 cache-unified;
81 cache-level = <2>; 111 cache-level = <2>;
82 arm,tag-latency = <4 2 3>; 112 arm,tag-latency = <4 2 3>;
@@ -85,7 +115,7 @@
85 115
86 pmu { 116 pmu {
87 compatible = "arm,cortex-a9-pmu"; 117 compatible = "arm,cortex-a9-pmu";
88 interrupts = <0 94 0x04>; 118 interrupts = <0 94 IRQ_TYPE_LEVEL_HIGH>;
89 }; 119 };
90 120
91 aips1: aips-bus@02000000 { 121 aips1: aips-bus@02000000 {
@@ -104,7 +134,7 @@
104 134
105 spdif: spdif@02004000 { 135 spdif: spdif@02004000 {
106 reg = <0x02004000 0x4000>; 136 reg = <0x02004000 0x4000>;
107 interrupts = <0 52 0x04>; 137 interrupts = <0 52 IRQ_TYPE_LEVEL_HIGH>;
108 }; 138 };
109 139
110 ecspi1: ecspi@02008000 { 140 ecspi1: ecspi@02008000 {
@@ -112,7 +142,7 @@
112 #size-cells = <0>; 142 #size-cells = <0>;
113 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi"; 143 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi";
114 reg = <0x02008000 0x4000>; 144 reg = <0x02008000 0x4000>;
115 interrupts = <0 31 0x04>; 145 interrupts = <0 31 IRQ_TYPE_LEVEL_HIGH>;
116 clocks = <&clks IMX6SL_CLK_ECSPI1>, 146 clocks = <&clks IMX6SL_CLK_ECSPI1>,
117 <&clks IMX6SL_CLK_ECSPI1>; 147 <&clks IMX6SL_CLK_ECSPI1>;
118 clock-names = "ipg", "per"; 148 clock-names = "ipg", "per";
@@ -124,7 +154,7 @@
124 #size-cells = <0>; 154 #size-cells = <0>;
125 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi"; 155 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi";
126 reg = <0x0200c000 0x4000>; 156 reg = <0x0200c000 0x4000>;
127 interrupts = <0 32 0x04>; 157 interrupts = <0 32 IRQ_TYPE_LEVEL_HIGH>;
128 clocks = <&clks IMX6SL_CLK_ECSPI2>, 158 clocks = <&clks IMX6SL_CLK_ECSPI2>,
129 <&clks IMX6SL_CLK_ECSPI2>; 159 <&clks IMX6SL_CLK_ECSPI2>;
130 clock-names = "ipg", "per"; 160 clock-names = "ipg", "per";
@@ -136,7 +166,7 @@
136 #size-cells = <0>; 166 #size-cells = <0>;
137 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi"; 167 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi";
138 reg = <0x02010000 0x4000>; 168 reg = <0x02010000 0x4000>;
139 interrupts = <0 33 0x04>; 169 interrupts = <0 33 IRQ_TYPE_LEVEL_HIGH>;
140 clocks = <&clks IMX6SL_CLK_ECSPI3>, 170 clocks = <&clks IMX6SL_CLK_ECSPI3>,
141 <&clks IMX6SL_CLK_ECSPI3>; 171 <&clks IMX6SL_CLK_ECSPI3>;
142 clock-names = "ipg", "per"; 172 clock-names = "ipg", "per";
@@ -148,7 +178,7 @@
148 #size-cells = <0>; 178 #size-cells = <0>;
149 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi"; 179 compatible = "fsl,imx6sl-ecspi", "fsl,imx51-ecspi";
150 reg = <0x02014000 0x4000>; 180 reg = <0x02014000 0x4000>;
151 interrupts = <0 34 0x04>; 181 interrupts = <0 34 IRQ_TYPE_LEVEL_HIGH>;
152 clocks = <&clks IMX6SL_CLK_ECSPI4>, 182 clocks = <&clks IMX6SL_CLK_ECSPI4>,
153 <&clks IMX6SL_CLK_ECSPI4>; 183 <&clks IMX6SL_CLK_ECSPI4>;
154 clock-names = "ipg", "per"; 184 clock-names = "ipg", "per";
@@ -159,7 +189,7 @@
159 compatible = "fsl,imx6sl-uart", 189 compatible = "fsl,imx6sl-uart",
160 "fsl,imx6q-uart", "fsl,imx21-uart"; 190 "fsl,imx6q-uart", "fsl,imx21-uart";
161 reg = <0x02018000 0x4000>; 191 reg = <0x02018000 0x4000>;
162 interrupts = <0 30 0x04>; 192 interrupts = <0 30 IRQ_TYPE_LEVEL_HIGH>;
163 clocks = <&clks IMX6SL_CLK_UART>, 193 clocks = <&clks IMX6SL_CLK_UART>,
164 <&clks IMX6SL_CLK_UART_SERIAL>; 194 <&clks IMX6SL_CLK_UART_SERIAL>;
165 clock-names = "ipg", "per"; 195 clock-names = "ipg", "per";
@@ -172,7 +202,7 @@
172 compatible = "fsl,imx6sl-uart", 202 compatible = "fsl,imx6sl-uart",
173 "fsl,imx6q-uart", "fsl,imx21-uart"; 203 "fsl,imx6q-uart", "fsl,imx21-uart";
174 reg = <0x02020000 0x4000>; 204 reg = <0x02020000 0x4000>;
175 interrupts = <0 26 0x04>; 205 interrupts = <0 26 IRQ_TYPE_LEVEL_HIGH>;
176 clocks = <&clks IMX6SL_CLK_UART>, 206 clocks = <&clks IMX6SL_CLK_UART>,
177 <&clks IMX6SL_CLK_UART_SERIAL>; 207 <&clks IMX6SL_CLK_UART_SERIAL>;
178 clock-names = "ipg", "per"; 208 clock-names = "ipg", "per";
@@ -185,7 +215,7 @@
185 compatible = "fsl,imx6sl-uart", 215 compatible = "fsl,imx6sl-uart",
186 "fsl,imx6q-uart", "fsl,imx21-uart"; 216 "fsl,imx6q-uart", "fsl,imx21-uart";
187 reg = <0x02024000 0x4000>; 217 reg = <0x02024000 0x4000>;
188 interrupts = <0 27 0x04>; 218 interrupts = <0 27 IRQ_TYPE_LEVEL_HIGH>;
189 clocks = <&clks IMX6SL_CLK_UART>, 219 clocks = <&clks IMX6SL_CLK_UART>,
190 <&clks IMX6SL_CLK_UART_SERIAL>; 220 <&clks IMX6SL_CLK_UART_SERIAL>;
191 clock-names = "ipg", "per"; 221 clock-names = "ipg", "per";
@@ -195,9 +225,11 @@
195 }; 225 };
196 226
197 ssi1: ssi@02028000 { 227 ssi1: ssi@02028000 {
198 compatible = "fsl,imx6sl-ssi","fsl,imx21-ssi"; 228 compatible = "fsl,imx6sl-ssi",
229 "fsl,imx51-ssi",
230 "fsl,imx21-ssi";
199 reg = <0x02028000 0x4000>; 231 reg = <0x02028000 0x4000>;
200 interrupts = <0 46 0x04>; 232 interrupts = <0 46 IRQ_TYPE_LEVEL_HIGH>;
201 clocks = <&clks IMX6SL_CLK_SSI1>; 233 clocks = <&clks IMX6SL_CLK_SSI1>;
202 dmas = <&sdma 37 1 0>, 234 dmas = <&sdma 37 1 0>,
203 <&sdma 38 1 0>; 235 <&sdma 38 1 0>;
@@ -207,9 +239,11 @@
207 }; 239 };
208 240
209 ssi2: ssi@0202c000 { 241 ssi2: ssi@0202c000 {
210 compatible = "fsl,imx6sl-ssi","fsl,imx21-ssi"; 242 compatible = "fsl,imx6sl-ssi",
243 "fsl,imx51-ssi",
244 "fsl,imx21-ssi";
211 reg = <0x0202c000 0x4000>; 245 reg = <0x0202c000 0x4000>;
212 interrupts = <0 47 0x04>; 246 interrupts = <0 47 IRQ_TYPE_LEVEL_HIGH>;
213 clocks = <&clks IMX6SL_CLK_SSI2>; 247 clocks = <&clks IMX6SL_CLK_SSI2>;
214 dmas = <&sdma 41 1 0>, 248 dmas = <&sdma 41 1 0>,
215 <&sdma 42 1 0>; 249 <&sdma 42 1 0>;
@@ -219,9 +253,11 @@
219 }; 253 };
220 254
221 ssi3: ssi@02030000 { 255 ssi3: ssi@02030000 {
222 compatible = "fsl,imx6sl-ssi","fsl,imx21-ssi"; 256 compatible = "fsl,imx6sl-ssi",
257 "fsl,imx51-ssi",
258 "fsl,imx21-ssi";
223 reg = <0x02030000 0x4000>; 259 reg = <0x02030000 0x4000>;
224 interrupts = <0 48 0x04>; 260 interrupts = <0 48 IRQ_TYPE_LEVEL_HIGH>;
225 clocks = <&clks IMX6SL_CLK_SSI3>; 261 clocks = <&clks IMX6SL_CLK_SSI3>;
226 dmas = <&sdma 45 1 0>, 262 dmas = <&sdma 45 1 0>,
227 <&sdma 46 1 0>; 263 <&sdma 46 1 0>;
@@ -234,7 +270,7 @@
234 compatible = "fsl,imx6sl-uart", 270 compatible = "fsl,imx6sl-uart",
235 "fsl,imx6q-uart", "fsl,imx21-uart"; 271 "fsl,imx6q-uart", "fsl,imx21-uart";
236 reg = <0x02034000 0x4000>; 272 reg = <0x02034000 0x4000>;
237 interrupts = <0 28 0x04>; 273 interrupts = <0 28 IRQ_TYPE_LEVEL_HIGH>;
238 clocks = <&clks IMX6SL_CLK_UART>, 274 clocks = <&clks IMX6SL_CLK_UART>,
239 <&clks IMX6SL_CLK_UART_SERIAL>; 275 <&clks IMX6SL_CLK_UART_SERIAL>;
240 clock-names = "ipg", "per"; 276 clock-names = "ipg", "per";
@@ -247,7 +283,7 @@
247 compatible = "fsl,imx6sl-uart", 283 compatible = "fsl,imx6sl-uart",
248 "fsl,imx6q-uart", "fsl,imx21-uart"; 284 "fsl,imx6q-uart", "fsl,imx21-uart";
249 reg = <0x02038000 0x4000>; 285 reg = <0x02038000 0x4000>;
250 interrupts = <0 29 0x04>; 286 interrupts = <0 29 IRQ_TYPE_LEVEL_HIGH>;
251 clocks = <&clks IMX6SL_CLK_UART>, 287 clocks = <&clks IMX6SL_CLK_UART>,
252 <&clks IMX6SL_CLK_UART_SERIAL>; 288 <&clks IMX6SL_CLK_UART_SERIAL>;
253 clock-names = "ipg", "per"; 289 clock-names = "ipg", "per";
@@ -261,7 +297,7 @@
261 #pwm-cells = <2>; 297 #pwm-cells = <2>;
262 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; 298 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
263 reg = <0x02080000 0x4000>; 299 reg = <0x02080000 0x4000>;
264 interrupts = <0 83 0x04>; 300 interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
265 clocks = <&clks IMX6SL_CLK_PWM1>, 301 clocks = <&clks IMX6SL_CLK_PWM1>,
266 <&clks IMX6SL_CLK_PWM1>; 302 <&clks IMX6SL_CLK_PWM1>;
267 clock-names = "ipg", "per"; 303 clock-names = "ipg", "per";
@@ -271,7 +307,7 @@
271 #pwm-cells = <2>; 307 #pwm-cells = <2>;
272 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; 308 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
273 reg = <0x02084000 0x4000>; 309 reg = <0x02084000 0x4000>;
274 interrupts = <0 84 0x04>; 310 interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>;
275 clocks = <&clks IMX6SL_CLK_PWM2>, 311 clocks = <&clks IMX6SL_CLK_PWM2>,
276 <&clks IMX6SL_CLK_PWM2>; 312 <&clks IMX6SL_CLK_PWM2>;
277 clock-names = "ipg", "per"; 313 clock-names = "ipg", "per";
@@ -281,7 +317,7 @@
281 #pwm-cells = <2>; 317 #pwm-cells = <2>;
282 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; 318 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
283 reg = <0x02088000 0x4000>; 319 reg = <0x02088000 0x4000>;
284 interrupts = <0 85 0x04>; 320 interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
285 clocks = <&clks IMX6SL_CLK_PWM3>, 321 clocks = <&clks IMX6SL_CLK_PWM3>,
286 <&clks IMX6SL_CLK_PWM3>; 322 <&clks IMX6SL_CLK_PWM3>;
287 clock-names = "ipg", "per"; 323 clock-names = "ipg", "per";
@@ -291,7 +327,7 @@
291 #pwm-cells = <2>; 327 #pwm-cells = <2>;
292 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; 328 compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
293 reg = <0x0208c000 0x4000>; 329 reg = <0x0208c000 0x4000>;
294 interrupts = <0 86 0x04>; 330 interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
295 clocks = <&clks IMX6SL_CLK_PWM4>, 331 clocks = <&clks IMX6SL_CLK_PWM4>,
296 <&clks IMX6SL_CLK_PWM4>; 332 <&clks IMX6SL_CLK_PWM4>;
297 clock-names = "ipg", "per"; 333 clock-names = "ipg", "per";
@@ -300,7 +336,7 @@
300 gpt: gpt@02098000 { 336 gpt: gpt@02098000 {
301 compatible = "fsl,imx6sl-gpt"; 337 compatible = "fsl,imx6sl-gpt";
302 reg = <0x02098000 0x4000>; 338 reg = <0x02098000 0x4000>;
303 interrupts = <0 55 0x04>; 339 interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;
304 clocks = <&clks IMX6SL_CLK_GPT>, 340 clocks = <&clks IMX6SL_CLK_GPT>,
305 <&clks IMX6SL_CLK_GPT_SERIAL>; 341 <&clks IMX6SL_CLK_GPT_SERIAL>;
306 clock-names = "ipg", "per"; 342 clock-names = "ipg", "per";
@@ -309,7 +345,8 @@
309 gpio1: gpio@0209c000 { 345 gpio1: gpio@0209c000 {
310 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio"; 346 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio";
311 reg = <0x0209c000 0x4000>; 347 reg = <0x0209c000 0x4000>;
312 interrupts = <0 66 0x04 0 67 0x04>; 348 interrupts = <0 66 IRQ_TYPE_LEVEL_HIGH>,
349 <0 67 IRQ_TYPE_LEVEL_HIGH>;
313 gpio-controller; 350 gpio-controller;
314 #gpio-cells = <2>; 351 #gpio-cells = <2>;
315 interrupt-controller; 352 interrupt-controller;
@@ -319,7 +356,8 @@
319 gpio2: gpio@020a0000 { 356 gpio2: gpio@020a0000 {
320 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio"; 357 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio";
321 reg = <0x020a0000 0x4000>; 358 reg = <0x020a0000 0x4000>;
322 interrupts = <0 68 0x04 0 69 0x04>; 359 interrupts = <0 68 IRQ_TYPE_LEVEL_HIGH>,
360 <0 69 IRQ_TYPE_LEVEL_HIGH>;
323 gpio-controller; 361 gpio-controller;
324 #gpio-cells = <2>; 362 #gpio-cells = <2>;
325 interrupt-controller; 363 interrupt-controller;
@@ -329,7 +367,8 @@
329 gpio3: gpio@020a4000 { 367 gpio3: gpio@020a4000 {
330 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio"; 368 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio";
331 reg = <0x020a4000 0x4000>; 369 reg = <0x020a4000 0x4000>;
332 interrupts = <0 70 0x04 0 71 0x04>; 370 interrupts = <0 70 IRQ_TYPE_LEVEL_HIGH>,
371 <0 71 IRQ_TYPE_LEVEL_HIGH>;
333 gpio-controller; 372 gpio-controller;
334 #gpio-cells = <2>; 373 #gpio-cells = <2>;
335 interrupt-controller; 374 interrupt-controller;
@@ -339,7 +378,8 @@
339 gpio4: gpio@020a8000 { 378 gpio4: gpio@020a8000 {
340 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio"; 379 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio";
341 reg = <0x020a8000 0x4000>; 380 reg = <0x020a8000 0x4000>;
342 interrupts = <0 72 0x04 0 73 0x04>; 381 interrupts = <0 72 IRQ_TYPE_LEVEL_HIGH>,
382 <0 73 IRQ_TYPE_LEVEL_HIGH>;
343 gpio-controller; 383 gpio-controller;
344 #gpio-cells = <2>; 384 #gpio-cells = <2>;
345 interrupt-controller; 385 interrupt-controller;
@@ -349,7 +389,8 @@
349 gpio5: gpio@020ac000 { 389 gpio5: gpio@020ac000 {
350 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio"; 390 compatible = "fsl,imx6sl-gpio", "fsl,imx35-gpio";
351 reg = <0x020ac000 0x4000>; 391 reg = <0x020ac000 0x4000>;
352 interrupts = <0 74 0x04 0 75 0x04>; 392 interrupts = <0 74 IRQ_TYPE_LEVEL_HIGH>,
393 <0 75 IRQ_TYPE_LEVEL_HIGH>;
353 gpio-controller; 394 gpio-controller;
354 #gpio-cells = <2>; 395 #gpio-cells = <2>;
355 interrupt-controller; 396 interrupt-controller;
@@ -357,21 +398,23 @@
357 }; 398 };
358 399
359 kpp: kpp@020b8000 { 400 kpp: kpp@020b8000 {
401 compatible = "fsl,imx6sl-kpp", "fsl,imx21-kpp";
360 reg = <0x020b8000 0x4000>; 402 reg = <0x020b8000 0x4000>;
361 interrupts = <0 82 0x04>; 403 interrupts = <0 82 IRQ_TYPE_LEVEL_HIGH>;
404 clocks = <&clks IMX6SL_CLK_DUMMY>;
362 }; 405 };
363 406
364 wdog1: wdog@020bc000 { 407 wdog1: wdog@020bc000 {
365 compatible = "fsl,imx6sl-wdt", "fsl,imx21-wdt"; 408 compatible = "fsl,imx6sl-wdt", "fsl,imx21-wdt";
366 reg = <0x020bc000 0x4000>; 409 reg = <0x020bc000 0x4000>;
367 interrupts = <0 80 0x04>; 410 interrupts = <0 80 IRQ_TYPE_LEVEL_HIGH>;
368 clocks = <&clks IMX6SL_CLK_DUMMY>; 411 clocks = <&clks IMX6SL_CLK_DUMMY>;
369 }; 412 };
370 413
371 wdog2: wdog@020c0000 { 414 wdog2: wdog@020c0000 {
372 compatible = "fsl,imx6sl-wdt", "fsl,imx21-wdt"; 415 compatible = "fsl,imx6sl-wdt", "fsl,imx21-wdt";
373 reg = <0x020c0000 0x4000>; 416 reg = <0x020c0000 0x4000>;
374 interrupts = <0 81 0x04>; 417 interrupts = <0 81 IRQ_TYPE_LEVEL_HIGH>;
375 clocks = <&clks IMX6SL_CLK_DUMMY>; 418 clocks = <&clks IMX6SL_CLK_DUMMY>;
376 status = "disabled"; 419 status = "disabled";
377 }; 420 };
@@ -379,7 +422,8 @@
379 clks: ccm@020c4000 { 422 clks: ccm@020c4000 {
380 compatible = "fsl,imx6sl-ccm"; 423 compatible = "fsl,imx6sl-ccm";
381 reg = <0x020c4000 0x4000>; 424 reg = <0x020c4000 0x4000>;
382 interrupts = <0 87 0x04 0 88 0x04>; 425 interrupts = <0 87 IRQ_TYPE_LEVEL_HIGH>,
426 <0 88 IRQ_TYPE_LEVEL_HIGH>;
383 #clock-cells = <1>; 427 #clock-cells = <1>;
384 }; 428 };
385 429
@@ -388,7 +432,9 @@
388 "fsl,imx6q-anatop", 432 "fsl,imx6q-anatop",
389 "syscon", "simple-bus"; 433 "syscon", "simple-bus";
390 reg = <0x020c8000 0x1000>; 434 reg = <0x020c8000 0x1000>;
391 interrupts = <0 49 0x04 0 54 0x04 0 127 0x04>; 435 interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>,
436 <0 54 IRQ_TYPE_LEVEL_HIGH>,
437 <0 127 IRQ_TYPE_LEVEL_HIGH>;
392 438
393 regulator-1p1@110 { 439 regulator-1p1@110 {
394 compatible = "fsl,anatop-regulator"; 440 compatible = "fsl,anatop-regulator";
@@ -434,7 +480,7 @@
434 480
435 reg_arm: regulator-vddcore@140 { 481 reg_arm: regulator-vddcore@140 {
436 compatible = "fsl,anatop-regulator"; 482 compatible = "fsl,anatop-regulator";
437 regulator-name = "cpu"; 483 regulator-name = "vddarm";
438 regulator-min-microvolt = <725000>; 484 regulator-min-microvolt = <725000>;
439 regulator-max-microvolt = <1450000>; 485 regulator-max-microvolt = <1450000>;
440 regulator-always-on; 486 regulator-always-on;
@@ -487,15 +533,17 @@
487 usbphy1: usbphy@020c9000 { 533 usbphy1: usbphy@020c9000 {
488 compatible = "fsl,imx6sl-usbphy", "fsl,imx23-usbphy"; 534 compatible = "fsl,imx6sl-usbphy", "fsl,imx23-usbphy";
489 reg = <0x020c9000 0x1000>; 535 reg = <0x020c9000 0x1000>;
490 interrupts = <0 44 0x04>; 536 interrupts = <0 44 IRQ_TYPE_LEVEL_HIGH>;
491 clocks = <&clks IMX6SL_CLK_USBPHY1>; 537 clocks = <&clks IMX6SL_CLK_USBPHY1>;
538 fsl,anatop = <&anatop>;
492 }; 539 };
493 540
494 usbphy2: usbphy@020ca000 { 541 usbphy2: usbphy@020ca000 {
495 compatible = "fsl,imx6sl-usbphy", "fsl,imx23-usbphy"; 542 compatible = "fsl,imx6sl-usbphy", "fsl,imx23-usbphy";
496 reg = <0x020ca000 0x1000>; 543 reg = <0x020ca000 0x1000>;
497 interrupts = <0 45 0x04>; 544 interrupts = <0 45 IRQ_TYPE_LEVEL_HIGH>;
498 clocks = <&clks IMX6SL_CLK_USBPHY2>; 545 clocks = <&clks IMX6SL_CLK_USBPHY2>;
546 fsl,anatop = <&anatop>;
499 }; 547 };
500 548
501 snvs@020cc000 { 549 snvs@020cc000 {
@@ -507,31 +555,33 @@
507 snvs-rtc-lp@34 { 555 snvs-rtc-lp@34 {
508 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 556 compatible = "fsl,sec-v4.0-mon-rtc-lp";
509 reg = <0x34 0x58>; 557 reg = <0x34 0x58>;
510 interrupts = <0 19 0x04 0 20 0x04>; 558 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>,
559 <0 20 IRQ_TYPE_LEVEL_HIGH>;
511 }; 560 };
512 }; 561 };
513 562
514 epit1: epit@020d0000 { 563 epit1: epit@020d0000 {
515 reg = <0x020d0000 0x4000>; 564 reg = <0x020d0000 0x4000>;
516 interrupts = <0 56 0x04>; 565 interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH>;
517 }; 566 };
518 567
519 epit2: epit@020d4000 { 568 epit2: epit@020d4000 {
520 reg = <0x020d4000 0x4000>; 569 reg = <0x020d4000 0x4000>;
521 interrupts = <0 57 0x04>; 570 interrupts = <0 57 IRQ_TYPE_LEVEL_HIGH>;
522 }; 571 };
523 572
524 src: src@020d8000 { 573 src: src@020d8000 {
525 compatible = "fsl,imx6sl-src", "fsl,imx51-src"; 574 compatible = "fsl,imx6sl-src", "fsl,imx51-src";
526 reg = <0x020d8000 0x4000>; 575 reg = <0x020d8000 0x4000>;
527 interrupts = <0 91 0x04 0 96 0x04>; 576 interrupts = <0 91 IRQ_TYPE_LEVEL_HIGH>,
577 <0 96 IRQ_TYPE_LEVEL_HIGH>;
528 #reset-cells = <1>; 578 #reset-cells = <1>;
529 }; 579 };
530 580
531 gpc: gpc@020dc000 { 581 gpc: gpc@020dc000 {
532 compatible = "fsl,imx6sl-gpc", "fsl,imx6q-gpc"; 582 compatible = "fsl,imx6sl-gpc", "fsl,imx6q-gpc";
533 reg = <0x020dc000 0x4000>; 583 reg = <0x020dc000 0x4000>;
534 interrupts = <0 89 0x04>; 584 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>;
535 }; 585 };
536 586
537 gpr: iomuxc-gpr@020e0000 { 587 gpr: iomuxc-gpr@020e0000 {
@@ -543,235 +593,22 @@
543 iomuxc: iomuxc@020e0000 { 593 iomuxc: iomuxc@020e0000 {
544 compatible = "fsl,imx6sl-iomuxc"; 594 compatible = "fsl,imx6sl-iomuxc";
545 reg = <0x020e0000 0x4000>; 595 reg = <0x020e0000 0x4000>;
546
547 ecspi1 {
548 pinctrl_ecspi1_1: ecspi1grp-1 {
549 fsl,pins = <
550 MX6SL_PAD_ECSPI1_MISO__ECSPI1_MISO 0x100b1
551 MX6SL_PAD_ECSPI1_MOSI__ECSPI1_MOSI 0x100b1
552 MX6SL_PAD_ECSPI1_SCLK__ECSPI1_SCLK 0x100b1
553 >;
554 };
555 };
556
557 fec {
558 pinctrl_fec_1: fecgrp-1 {
559 fsl,pins = <
560 MX6SL_PAD_FEC_MDC__FEC_MDC 0x1b0b0
561 MX6SL_PAD_FEC_MDIO__FEC_MDIO 0x1b0b0
562 MX6SL_PAD_FEC_CRS_DV__FEC_RX_DV 0x1b0b0
563 MX6SL_PAD_FEC_RXD0__FEC_RX_DATA0 0x1b0b0
564 MX6SL_PAD_FEC_RXD1__FEC_RX_DATA1 0x1b0b0
565 MX6SL_PAD_FEC_TX_EN__FEC_TX_EN 0x1b0b0
566 MX6SL_PAD_FEC_TXD0__FEC_TX_DATA0 0x1b0b0
567 MX6SL_PAD_FEC_TXD1__FEC_TX_DATA1 0x1b0b0
568 MX6SL_PAD_FEC_REF_CLK__FEC_REF_OUT 0x4001b0a8
569 >;
570 };
571 };
572
573 uart1 {
574 pinctrl_uart1_1: uart1grp-1 {
575 fsl,pins = <
576 MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x1b0b1
577 MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1
578 >;
579 };
580 };
581
582 usbotg1 {
583 pinctrl_usbotg1_1: usbotg1grp-1 {
584 fsl,pins = <
585 MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059
586 >;
587 };
588
589 pinctrl_usbotg1_2: usbotg1grp-2 {
590 fsl,pins = <
591 MX6SL_PAD_FEC_RXD0__USB_OTG1_ID 0x17059
592 >;
593 };
594
595 pinctrl_usbotg1_3: usbotg1grp-3 {
596 fsl,pins = <
597 MX6SL_PAD_LCD_DAT1__USB_OTG1_ID 0x17059
598 >;
599 };
600
601 pinctrl_usbotg1_4: usbotg1grp-4 {
602 fsl,pins = <
603 MX6SL_PAD_REF_CLK_32K__USB_OTG1_ID 0x17059
604 >;
605 };
606
607 pinctrl_usbotg1_5: usbotg1grp-5 {
608 fsl,pins = <
609 MX6SL_PAD_SD3_DAT0__USB_OTG1_ID 0x17059
610 >;
611 };
612 };
613
614 usbotg2 {
615 pinctrl_usbotg2_1: usbotg2grp-1 {
616 fsl,pins = <
617 MX6SL_PAD_ECSPI1_SCLK__USB_OTG2_OC 0x17059
618 >;
619 };
620
621 pinctrl_usbotg2_2: usbotg2grp-2 {
622 fsl,pins = <
623 MX6SL_PAD_ECSPI2_SCLK__USB_OTG2_OC 0x17059
624 >;
625 };
626
627 pinctrl_usbotg2_3: usbotg2grp-3 {
628 fsl,pins = <
629 MX6SL_PAD_KEY_ROW5__USB_OTG2_OC 0x17059
630 >;
631 };
632
633 pinctrl_usbotg2_4: usbotg2grp-4 {
634 fsl,pins = <
635 MX6SL_PAD_SD3_DAT2__USB_OTG2_OC 0x17059
636 >;
637 };
638 };
639
640 usdhc1 {
641 pinctrl_usdhc1_1: usdhc1grp-1 {
642 fsl,pins = <
643 MX6SL_PAD_SD1_CMD__SD1_CMD 0x17059
644 MX6SL_PAD_SD1_CLK__SD1_CLK 0x10059
645 MX6SL_PAD_SD1_DAT0__SD1_DATA0 0x17059
646 MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x17059
647 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x17059
648 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x17059
649 MX6SL_PAD_SD1_DAT4__SD1_DATA4 0x17059
650 MX6SL_PAD_SD1_DAT5__SD1_DATA5 0x17059
651 MX6SL_PAD_SD1_DAT6__SD1_DATA6 0x17059
652 MX6SL_PAD_SD1_DAT7__SD1_DATA7 0x17059
653 >;
654 };
655
656 pinctrl_usdhc1_1_100mhz: usdhc1grp-1-100mhz {
657 fsl,pins = <
658 MX6SL_PAD_SD1_CMD__SD1_CMD 0x170b9
659 MX6SL_PAD_SD1_CLK__SD1_CLK 0x100b9
660 MX6SL_PAD_SD1_DAT0__SD1_DATA0 0x170b9
661 MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x170b9
662 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x170b9
663 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x170b9
664 MX6SL_PAD_SD1_DAT4__SD1_DATA4 0x170b9
665 MX6SL_PAD_SD1_DAT5__SD1_DATA5 0x170b9
666 MX6SL_PAD_SD1_DAT6__SD1_DATA6 0x170b9
667 MX6SL_PAD_SD1_DAT7__SD1_DATA7 0x170b9
668 >;
669 };
670
671 pinctrl_usdhc1_1_200mhz: usdhc1grp-1-200mhz {
672 fsl,pins = <
673 MX6SL_PAD_SD1_CMD__SD1_CMD 0x170f9
674 MX6SL_PAD_SD1_CLK__SD1_CLK 0x100f9
675 MX6SL_PAD_SD1_DAT0__SD1_DATA0 0x170f9
676 MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x170f9
677 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x170f9
678 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x170f9
679 MX6SL_PAD_SD1_DAT4__SD1_DATA4 0x170f9
680 MX6SL_PAD_SD1_DAT5__SD1_DATA5 0x170f9
681 MX6SL_PAD_SD1_DAT6__SD1_DATA6 0x170f9
682 MX6SL_PAD_SD1_DAT7__SD1_DATA7 0x170f9
683 >;
684 };
685
686
687 };
688
689 usdhc2 {
690 pinctrl_usdhc2_1: usdhc2grp-1 {
691 fsl,pins = <
692 MX6SL_PAD_SD2_CMD__SD2_CMD 0x17059
693 MX6SL_PAD_SD2_CLK__SD2_CLK 0x10059
694 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x17059
695 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x17059
696 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x17059
697 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x17059
698 >;
699 };
700
701 pinctrl_usdhc2_1_100mhz: usdhc2grp-1-100mhz {
702 fsl,pins = <
703 MX6SL_PAD_SD2_CMD__SD2_CMD 0x170b9
704 MX6SL_PAD_SD2_CLK__SD2_CLK 0x100b9
705 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170b9
706 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170b9
707 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170b9
708 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170b9
709 >;
710 };
711
712 pinctrl_usdhc2_1_200mhz: usdhc2grp-1-200mhz {
713 fsl,pins = <
714 MX6SL_PAD_SD2_CMD__SD2_CMD 0x170f9
715 MX6SL_PAD_SD2_CLK__SD2_CLK 0x100f9
716 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170f9
717 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170f9
718 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170f9
719 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170f9
720 >;
721 };
722
723 };
724
725 usdhc3 {
726 pinctrl_usdhc3_1: usdhc3grp-1 {
727 fsl,pins = <
728 MX6SL_PAD_SD3_CMD__SD3_CMD 0x17059
729 MX6SL_PAD_SD3_CLK__SD3_CLK 0x10059
730 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x17059
731 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x17059
732 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x17059
733 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x17059
734 >;
735 };
736
737 pinctrl_usdhc3_1_100mhz: usdhc3grp-1-100mhz {
738 fsl,pins = <
739 MX6SL_PAD_SD3_CMD__SD3_CMD 0x170b9
740 MX6SL_PAD_SD3_CLK__SD3_CLK 0x100b9
741 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170b9
742 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170b9
743 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170b9
744 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170b9
745 >;
746 };
747
748 pinctrl_usdhc3_1_200mhz: usdhc3grp-1-200mhz {
749 fsl,pins = <
750 MX6SL_PAD_SD3_CMD__SD3_CMD 0x170f9
751 MX6SL_PAD_SD3_CLK__SD3_CLK 0x100f9
752 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170f9
753 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170f9
754 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170f9
755 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170f9
756 >;
757 };
758 };
759 }; 596 };
760 597
761 csi: csi@020e4000 { 598 csi: csi@020e4000 {
762 reg = <0x020e4000 0x4000>; 599 reg = <0x020e4000 0x4000>;
763 interrupts = <0 7 0x04>; 600 interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
764 }; 601 };
765 602
766 spdc: spdc@020e8000 { 603 spdc: spdc@020e8000 {
767 reg = <0x020e8000 0x4000>; 604 reg = <0x020e8000 0x4000>;
768 interrupts = <0 6 0x04>; 605 interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>;
769 }; 606 };
770 607
771 sdma: sdma@020ec000 { 608 sdma: sdma@020ec000 {
772 compatible = "fsl,imx6sl-sdma", "fsl,imx35-sdma"; 609 compatible = "fsl,imx6sl-sdma", "fsl,imx35-sdma";
773 reg = <0x020ec000 0x4000>; 610 reg = <0x020ec000 0x4000>;
774 interrupts = <0 2 0x04>; 611 interrupts = <0 2 IRQ_TYPE_LEVEL_HIGH>;
775 clocks = <&clks IMX6SL_CLK_SDMA>, 612 clocks = <&clks IMX6SL_CLK_SDMA>,
776 <&clks IMX6SL_CLK_SDMA>; 613 <&clks IMX6SL_CLK_SDMA>;
777 clock-names = "ipg", "ahb"; 614 clock-names = "ipg", "ahb";
@@ -782,22 +619,22 @@
782 619
783 pxp: pxp@020f0000 { 620 pxp: pxp@020f0000 {
784 reg = <0x020f0000 0x4000>; 621 reg = <0x020f0000 0x4000>;
785 interrupts = <0 98 0x04>; 622 interrupts = <0 98 IRQ_TYPE_LEVEL_HIGH>;
786 }; 623 };
787 624
788 epdc: epdc@020f4000 { 625 epdc: epdc@020f4000 {
789 reg = <0x020f4000 0x4000>; 626 reg = <0x020f4000 0x4000>;
790 interrupts = <0 97 0x04>; 627 interrupts = <0 97 IRQ_TYPE_LEVEL_HIGH>;
791 }; 628 };
792 629
793 lcdif: lcdif@020f8000 { 630 lcdif: lcdif@020f8000 {
794 reg = <0x020f8000 0x4000>; 631 reg = <0x020f8000 0x4000>;
795 interrupts = <0 39 0x04>; 632 interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
796 }; 633 };
797 634
798 dcp: dcp@020fc000 { 635 dcp: dcp@020fc000 {
799 reg = <0x020fc000 0x4000>; 636 reg = <0x020fc000 0x4000>;
800 interrupts = <0 99 0x04>; 637 interrupts = <0 99 IRQ_TYPE_LEVEL_HIGH>;
801 }; 638 };
802 }; 639 };
803 640
@@ -811,7 +648,7 @@
811 usbotg1: usb@02184000 { 648 usbotg1: usb@02184000 {
812 compatible = "fsl,imx6sl-usb", "fsl,imx27-usb"; 649 compatible = "fsl,imx6sl-usb", "fsl,imx27-usb";
813 reg = <0x02184000 0x200>; 650 reg = <0x02184000 0x200>;
814 interrupts = <0 43 0x04>; 651 interrupts = <0 43 IRQ_TYPE_LEVEL_HIGH>;
815 clocks = <&clks IMX6SL_CLK_USBOH3>; 652 clocks = <&clks IMX6SL_CLK_USBOH3>;
816 fsl,usbphy = <&usbphy1>; 653 fsl,usbphy = <&usbphy1>;
817 fsl,usbmisc = <&usbmisc 0>; 654 fsl,usbmisc = <&usbmisc 0>;
@@ -821,7 +658,7 @@
821 usbotg2: usb@02184200 { 658 usbotg2: usb@02184200 {
822 compatible = "fsl,imx6sl-usb", "fsl,imx27-usb"; 659 compatible = "fsl,imx6sl-usb", "fsl,imx27-usb";
823 reg = <0x02184200 0x200>; 660 reg = <0x02184200 0x200>;
824 interrupts = <0 42 0x04>; 661 interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>;
825 clocks = <&clks IMX6SL_CLK_USBOH3>; 662 clocks = <&clks IMX6SL_CLK_USBOH3>;
826 fsl,usbphy = <&usbphy2>; 663 fsl,usbphy = <&usbphy2>;
827 fsl,usbmisc = <&usbmisc 1>; 664 fsl,usbmisc = <&usbmisc 1>;
@@ -831,7 +668,7 @@
831 usbh: usb@02184400 { 668 usbh: usb@02184400 {
832 compatible = "fsl,imx6sl-usb", "fsl,imx27-usb"; 669 compatible = "fsl,imx6sl-usb", "fsl,imx27-usb";
833 reg = <0x02184400 0x200>; 670 reg = <0x02184400 0x200>;
834 interrupts = <0 40 0x04>; 671 interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>;
835 clocks = <&clks IMX6SL_CLK_USBOH3>; 672 clocks = <&clks IMX6SL_CLK_USBOH3>;
836 fsl,usbmisc = <&usbmisc 2>; 673 fsl,usbmisc = <&usbmisc 2>;
837 status = "disabled"; 674 status = "disabled";
@@ -847,7 +684,7 @@
847 fec: ethernet@02188000 { 684 fec: ethernet@02188000 {
848 compatible = "fsl,imx6sl-fec", "fsl,imx25-fec"; 685 compatible = "fsl,imx6sl-fec", "fsl,imx25-fec";
849 reg = <0x02188000 0x4000>; 686 reg = <0x02188000 0x4000>;
850 interrupts = <0 114 0x04>; 687 interrupts = <0 114 IRQ_TYPE_LEVEL_HIGH>;
851 clocks = <&clks IMX6SL_CLK_ENET_REF>, 688 clocks = <&clks IMX6SL_CLK_ENET_REF>,
852 <&clks IMX6SL_CLK_ENET_REF>; 689 <&clks IMX6SL_CLK_ENET_REF>;
853 clock-names = "ipg", "ahb"; 690 clock-names = "ipg", "ahb";
@@ -857,7 +694,7 @@
857 usdhc1: usdhc@02190000 { 694 usdhc1: usdhc@02190000 {
858 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc"; 695 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
859 reg = <0x02190000 0x4000>; 696 reg = <0x02190000 0x4000>;
860 interrupts = <0 22 0x04>; 697 interrupts = <0 22 IRQ_TYPE_LEVEL_HIGH>;
861 clocks = <&clks IMX6SL_CLK_USDHC1>, 698 clocks = <&clks IMX6SL_CLK_USDHC1>,
862 <&clks IMX6SL_CLK_USDHC1>, 699 <&clks IMX6SL_CLK_USDHC1>,
863 <&clks IMX6SL_CLK_USDHC1>; 700 <&clks IMX6SL_CLK_USDHC1>;
@@ -869,7 +706,7 @@
869 usdhc2: usdhc@02194000 { 706 usdhc2: usdhc@02194000 {
870 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc"; 707 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
871 reg = <0x02194000 0x4000>; 708 reg = <0x02194000 0x4000>;
872 interrupts = <0 23 0x04>; 709 interrupts = <0 23 IRQ_TYPE_LEVEL_HIGH>;
873 clocks = <&clks IMX6SL_CLK_USDHC2>, 710 clocks = <&clks IMX6SL_CLK_USDHC2>,
874 <&clks IMX6SL_CLK_USDHC2>, 711 <&clks IMX6SL_CLK_USDHC2>,
875 <&clks IMX6SL_CLK_USDHC2>; 712 <&clks IMX6SL_CLK_USDHC2>;
@@ -881,7 +718,7 @@
881 usdhc3: usdhc@02198000 { 718 usdhc3: usdhc@02198000 {
882 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc"; 719 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
883 reg = <0x02198000 0x4000>; 720 reg = <0x02198000 0x4000>;
884 interrupts = <0 24 0x04>; 721 interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
885 clocks = <&clks IMX6SL_CLK_USDHC3>, 722 clocks = <&clks IMX6SL_CLK_USDHC3>,
886 <&clks IMX6SL_CLK_USDHC3>, 723 <&clks IMX6SL_CLK_USDHC3>,
887 <&clks IMX6SL_CLK_USDHC3>; 724 <&clks IMX6SL_CLK_USDHC3>;
@@ -893,7 +730,7 @@
893 usdhc4: usdhc@0219c000 { 730 usdhc4: usdhc@0219c000 {
894 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc"; 731 compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
895 reg = <0x0219c000 0x4000>; 732 reg = <0x0219c000 0x4000>;
896 interrupts = <0 25 0x04>; 733 interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
897 clocks = <&clks IMX6SL_CLK_USDHC4>, 734 clocks = <&clks IMX6SL_CLK_USDHC4>,
898 <&clks IMX6SL_CLK_USDHC4>, 735 <&clks IMX6SL_CLK_USDHC4>,
899 <&clks IMX6SL_CLK_USDHC4>; 736 <&clks IMX6SL_CLK_USDHC4>;
@@ -907,7 +744,7 @@
907 #size-cells = <0>; 744 #size-cells = <0>;
908 compatible = "fsl,imx6sl-i2c", "fsl,imx21-i2c"; 745 compatible = "fsl,imx6sl-i2c", "fsl,imx21-i2c";
909 reg = <0x021a0000 0x4000>; 746 reg = <0x021a0000 0x4000>;
910 interrupts = <0 36 0x04>; 747 interrupts = <0 36 IRQ_TYPE_LEVEL_HIGH>;
911 clocks = <&clks IMX6SL_CLK_I2C1>; 748 clocks = <&clks IMX6SL_CLK_I2C1>;
912 status = "disabled"; 749 status = "disabled";
913 }; 750 };
@@ -917,7 +754,7 @@
917 #size-cells = <0>; 754 #size-cells = <0>;
918 compatible = "fsl,imx6sl-i2c", "fsl,imx21-i2c"; 755 compatible = "fsl,imx6sl-i2c", "fsl,imx21-i2c";
919 reg = <0x021a4000 0x4000>; 756 reg = <0x021a4000 0x4000>;
920 interrupts = <0 37 0x04>; 757 interrupts = <0 37 IRQ_TYPE_LEVEL_HIGH>;
921 clocks = <&clks IMX6SL_CLK_I2C2>; 758 clocks = <&clks IMX6SL_CLK_I2C2>;
922 status = "disabled"; 759 status = "disabled";
923 }; 760 };
@@ -927,7 +764,7 @@
927 #size-cells = <0>; 764 #size-cells = <0>;
928 compatible = "fsl,imx6sl-i2c", "fsl,imx21-i2c"; 765 compatible = "fsl,imx6sl-i2c", "fsl,imx21-i2c";
929 reg = <0x021a8000 0x4000>; 766 reg = <0x021a8000 0x4000>;
930 interrupts = <0 38 0x04>; 767 interrupts = <0 38 IRQ_TYPE_LEVEL_HIGH>;
931 clocks = <&clks IMX6SL_CLK_I2C3>; 768 clocks = <&clks IMX6SL_CLK_I2C3>;
932 status = "disabled"; 769 status = "disabled";
933 }; 770 };
@@ -939,12 +776,12 @@
939 776
940 rngb: rngb@021b4000 { 777 rngb: rngb@021b4000 {
941 reg = <0x021b4000 0x4000>; 778 reg = <0x021b4000 0x4000>;
942 interrupts = <0 5 0x04>; 779 interrupts = <0 5 IRQ_TYPE_LEVEL_HIGH>;
943 }; 780 };
944 781
945 weim: weim@021b8000 { 782 weim: weim@021b8000 {
946 reg = <0x021b8000 0x4000>; 783 reg = <0x021b8000 0x4000>;
947 interrupts = <0 14 0x04>; 784 interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
948 }; 785 };
949 786
950 ocotp: ocotp@021bc000 { 787 ocotp: ocotp@021bc000 {
diff --git a/arch/arm/boot/dts/k2e-clocks.dtsi b/arch/arm/boot/dts/k2e-clocks.dtsi
new file mode 100644
index 000000000000..90774d604bc1
--- /dev/null
+++ b/arch/arm/boot/dts/k2e-clocks.dtsi
@@ -0,0 +1,78 @@
1/*
2 * Copyright 2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Edison SoC specific device tree
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11clocks {
12 mainpllclk: mainpllclk@2310110 {
13 #clock-cells = <0>;
14 compatible = "ti,keystone,main-pll-clock";
15 clocks = <&refclksys>;
16 reg = <0x02620350 4>, <0x02310110 4>;
17 reg-names = "control", "multiplier";
18 fixed-postdiv = <2>;
19 };
20
21 papllclk: papllclk@2620358 {
22 #clock-cells = <0>;
23 compatible = "ti,keystone,pll-clock";
24 clocks = <&refclkpass>;
25 clock-output-names = "pa-pll-clk";
26 reg = <0x02620358 4>;
27 reg-names = "control";
28 };
29
30 ddr3apllclk: ddr3apllclk@2620360 {
31 #clock-cells = <0>;
32 compatible = "ti,keystone,pll-clock";
33 clocks = <&refclkddr3a>;
34 clock-output-names = "ddr-3a-pll-clk";
35 reg = <0x02620360 4>;
36 reg-names = "control";
37 };
38
39 clkusb1: clkusb1 {
40 #clock-cells = <0>;
41 compatible = "ti,keystone,psc-clock";
42 clocks = <&chipclk16>;
43 clock-output-names = "usb";
44 reg = <0x02350004 0xb00>, <0x02350000 0x400>;
45 reg-names = "control", "domain";
46 domain-id = <0>;
47 };
48
49 clkhyperlink0: clkhyperlink0 {
50 #clock-cells = <0>;
51 compatible = "ti,keystone,psc-clock";
52 clocks = <&chipclk12>;
53 clock-output-names = "hyperlink-0";
54 reg = <0x02350030 0xb00>, <0x02350014 0x400>;
55 reg-names = "control", "domain";
56 domain-id = <5>;
57 };
58
59 clkpcie1: clkpcie1 {
60 #clock-cells = <0>;
61 compatible = "ti,keystone,psc-clock";
62 clocks = <&chipclk12>;
63 clock-output-names = "pcie";
64 reg = <0x0235006c 0xb00>, <0x02350000 0x400>;
65 reg-names = "control", "domain";
66 domain-id = <18>;
67 };
68
69 clkxge: clkxge {
70 #clock-cells = <0>;
71 compatible = "ti,keystone,psc-clock";
72 clocks = <&chipclk13>;
73 clock-output-names = "xge";
74 reg = <0x023500c8 0xb00>, <0x02350074 0x400>;
75 reg-names = "control", "domain";
76 domain-id = <29>;
77 };
78};
diff --git a/arch/arm/boot/dts/k2e-evm.dts b/arch/arm/boot/dts/k2e-evm.dts
new file mode 100644
index 000000000000..bb8faeb1a2f8
--- /dev/null
+++ b/arch/arm/boot/dts/k2e-evm.dts
@@ -0,0 +1,60 @@
1/*
2 * Copyright 2013-2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Edison EVM device tree
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10/dts-v1/;
11
12#include "keystone.dtsi"
13#include "k2e.dtsi"
14
15/ {
16 compatible = "ti,k2e-evm";
17 model = "Texas Instruments Keystone 2 Edison EVM";
18
19 soc {
20
21 clocks {
22 refclksys: refclksys {
23 #clock-cells = <0>;
24 compatible = "fixed-clock";
25 clock-frequency = <100000000>;
26 clock-output-names = "refclk-sys";
27 };
28
29 refclkpass: refclkpass {
30 #clock-cells = <0>;
31 compatible = "fixed-clock";
32 clock-frequency = <100000000>;
33 clock-output-names = "refclk-pass";
34 };
35
36 refclkddr3a: refclkddr3a {
37 #clock-cells = <0>;
38 compatible = "fixed-clock";
39 clock-frequency = <100000000>;
40 clock-output-names = "refclk-ddr3a";
41 };
42 };
43 };
44};
45
46&usb_phy {
47 status = "okay";
48};
49
50&usb {
51 status = "okay";
52};
53
54&usb1_phy {
55 status = "okay";
56};
57
58&usb1 {
59 status = "okay";
60};
diff --git a/arch/arm/boot/dts/k2e.dtsi b/arch/arm/boot/dts/k2e.dtsi
new file mode 100644
index 000000000000..03d01909525b
--- /dev/null
+++ b/arch/arm/boot/dts/k2e.dtsi
@@ -0,0 +1,80 @@
1/*
2 * Copyright 2013-2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Edison soc device tree
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11/ {
12 cpus {
13 #address-cells = <1>;
14 #size-cells = <0>;
15
16 interrupt-parent = <&gic>;
17
18 cpu@0 {
19 compatible = "arm,cortex-a15";
20 device_type = "cpu";
21 reg = <0>;
22 };
23
24 cpu@1 {
25 compatible = "arm,cortex-a15";
26 device_type = "cpu";
27 reg = <1>;
28 };
29
30 cpu@2 {
31 compatible = "arm,cortex-a15";
32 device_type = "cpu";
33 reg = <2>;
34 };
35
36 cpu@3 {
37 compatible = "arm,cortex-a15";
38 device_type = "cpu";
39 reg = <3>;
40 };
41 };
42
43 soc {
44 /include/ "k2e-clocks.dtsi"
45
46 usb: usb@2680000 {
47 interrupts = <GIC_SPI 152 IRQ_TYPE_EDGE_RISING>;
48 dwc3@2690000 {
49 interrupts = <GIC_SPI 152 IRQ_TYPE_EDGE_RISING>;
50 };
51 };
52
53 usb1_phy: usb_phy@2620750 {
54 compatible = "ti,keystone-usbphy";
55 #address-cells = <1>;
56 #size-cells = <1>;
57 reg = <0x2620750 24>;
58 status = "disabled";
59 };
60
61 usb1: usb@25000000 {
62 compatible = "ti,keystone-dwc3";
63 #address-cells = <1>;
64 #size-cells = <1>;
65 reg = <0x25000000 0x10000>;
66 clocks = <&clkusb1>;
67 clock-names = "usb";
68 interrupts = <GIC_SPI 414 IRQ_TYPE_EDGE_RISING>;
69 ranges;
70 status = "disabled";
71
72 dwc3@25010000 {
73 compatible = "synopsys,dwc3";
74 reg = <0x25010000 0x70000>;
75 interrupts = <GIC_SPI 414 IRQ_TYPE_EDGE_RISING>;
76 usb-phy = <&usb1_phy>, <&usb1_phy>;
77 };
78 };
79 };
80};
diff --git a/arch/arm/boot/dts/k2hk-clocks.dtsi b/arch/arm/boot/dts/k2hk-clocks.dtsi
new file mode 100644
index 000000000000..a71aa2996321
--- /dev/null
+++ b/arch/arm/boot/dts/k2hk-clocks.dtsi
@@ -0,0 +1,426 @@
1/*
2 * Copyright 2013-2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Kepler/Hawking SoC clock nodes
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11clocks {
12 armpllclk: armpllclk@2620370 {
13 #clock-cells = <0>;
14 compatible = "ti,keystone,pll-clock";
15 clocks = <&refclkarm>;
16 clock-output-names = "arm-pll-clk";
17 reg = <0x02620370 4>;
18 reg-names = "control";
19 };
20
21 mainpllclk: mainpllclk@2310110 {
22 #clock-cells = <0>;
23 compatible = "ti,keystone,main-pll-clock";
24 clocks = <&refclksys>;
25 reg = <0x02620350 4>, <0x02310110 4>;
26 reg-names = "control", "multiplier";
27 fixed-postdiv = <2>;
28 };
29
30 papllclk: papllclk@2620358 {
31 #clock-cells = <0>;
32 compatible = "ti,keystone,pll-clock";
33 clocks = <&refclkpass>;
34 clock-output-names = "pa-pll-clk";
35 reg = <0x02620358 4>;
36 reg-names = "control";
37 };
38
39 ddr3apllclk: ddr3apllclk@2620360 {
40 #clock-cells = <0>;
41 compatible = "ti,keystone,pll-clock";
42 clocks = <&refclkddr3a>;
43 clock-output-names = "ddr-3a-pll-clk";
44 reg = <0x02620360 4>;
45 reg-names = "control";
46 };
47
48 ddr3bpllclk: ddr3bpllclk@2620368 {
49 #clock-cells = <0>;
50 compatible = "ti,keystone,pll-clock";
51 clocks = <&refclkddr3b>;
52 clock-output-names = "ddr-3b-pll-clk";
53 reg = <0x02620368 4>;
54 reg-names = "control";
55 };
56
57 clktsip: clktsip {
58 #clock-cells = <0>;
59 compatible = "ti,keystone,psc-clock";
60 clocks = <&chipclk16>;
61 clock-output-names = "tsip";
62 reg = <0x0235000c 0xb00>, <0x02350000 0x400>;
63 reg-names = "control", "domain";
64 domain-id = <0>;
65 };
66
67 clksrio: clksrio {
68 #clock-cells = <0>;
69 compatible = "ti,keystone,psc-clock";
70 clocks = <&chipclk1rstiso13>;
71 clock-output-names = "srio";
72 reg = <0x0235002c 0xb00>, <0x02350010 0x400>;
73 reg-names = "control", "domain";
74 domain-id = <4>;
75 };
76
77 clkhyperlink0: clkhyperlink0 {
78 #clock-cells = <0>;
79 compatible = "ti,keystone,psc-clock";
80 clocks = <&chipclk12>;
81 clock-output-names = "hyperlink-0";
82 reg = <0x02350030 0xb00>, <0x02350014 0x400>;
83 reg-names = "control", "domain";
84 domain-id = <5>;
85 };
86
87 clkgem1: clkgem1 {
88 #clock-cells = <0>;
89 compatible = "ti,keystone,psc-clock";
90 clocks = <&chipclk1>;
91 clock-output-names = "gem1";
92 reg = <0x02350040 0xb00>, <0x02350024 0x400>;
93 reg-names = "control", "domain";
94 domain-id = <9>;
95 };
96
97 clkgem2: clkgem2 {
98 #clock-cells = <0>;
99 compatible = "ti,keystone,psc-clock";
100 clocks = <&chipclk1>;
101 clock-output-names = "gem2";
102 reg = <0x02350044 0xb00>, <0x02350028 0x400>;
103 reg-names = "control", "domain";
104 domain-id = <10>;
105 };
106
107 clkgem3: clkgem3 {
108 #clock-cells = <0>;
109 compatible = "ti,keystone,psc-clock";
110 clocks = <&chipclk1>;
111 clock-output-names = "gem3";
112 reg = <0x02350048 0xb00>, <0x0235002c 0x400>;
113 reg-names = "control", "domain";
114 domain-id = <11>;
115 };
116
117 clkgem4: clkgem4 {
118 #clock-cells = <0>;
119 compatible = "ti,keystone,psc-clock";
120 clocks = <&chipclk1>;
121 clock-output-names = "gem4";
122 reg = <0x0235004c 0xb00>, <0x02350030 0x400>;
123 reg-names = "control", "domain";
124 domain-id = <12>;
125 };
126
127 clkgem5: clkgem5 {
128 #clock-cells = <0>;
129 compatible = "ti,keystone,psc-clock";
130 clocks = <&chipclk1>;
131 clock-output-names = "gem5";
132 reg = <0x02350050 0xb00>, <0x02350034 0x400>;
133 reg-names = "control", "domain";
134 domain-id = <13>;
135 };
136
137 clkgem6: clkgem6 {
138 #clock-cells = <0>;
139 compatible = "ti,keystone,psc-clock";
140 clocks = <&chipclk1>;
141 clock-output-names = "gem6";
142 reg = <0x02350054 0xb00>, <0x02350038 0x400>;
143 reg-names = "control", "domain";
144 domain-id = <14>;
145 };
146
147 clkgem7: clkgem7 {
148 #clock-cells = <0>;
149 compatible = "ti,keystone,psc-clock";
150 clocks = <&chipclk1>;
151 clock-output-names = "gem7";
152 reg = <0x02350058 0xb00>, <0x0235003c 0x400>;
153 reg-names = "control", "domain";
154 domain-id = <15>;
155 };
156
157 clkddr31: clkddr31 {
158 #clock-cells = <0>;
159 compatible = "ti,keystone,psc-clock";
160 clocks = <&chipclk13>;
161 clock-output-names = "ddr3-1";
162 reg = <0x02350060 0xb00>, <0x02350040 0x400>;
163 reg-names = "control", "domain";
164 domain-id = <16>;
165 };
166
167 clktac: clktac {
168 #clock-cells = <0>;
169 compatible = "ti,keystone,psc-clock";
170 clocks = <&chipclk13>;
171 clock-output-names = "tac";
172 reg = <0x02350064 0xb00>, <0x02350044 0x400>;
173 reg-names = "control", "domain";
174 domain-id = <17>;
175 };
176
177 clkrac01: clkrac01 {
178 #clock-cells = <0>;
179 compatible = "ti,keystone,psc-clock";
180 clocks = <&chipclk13>;
181 clock-output-names = "rac-01";
182 reg = <0x02350068 0xb00>, <0x02350044 0x400>;
183 reg-names = "control", "domain";
184 domain-id = <17>;
185 };
186
187 clkrac23: clkrac23 {
188 #clock-cells = <0>;
189 compatible = "ti,keystone,psc-clock";
190 clocks = <&chipclk13>;
191 clock-output-names = "rac-23";
192 reg = <0x0235006c 0xb00>, <0x02350048 0x400>;
193 reg-names = "control", "domain";
194 domain-id = <18>;
195 };
196
197 clkfftc0: clkfftc0 {
198 #clock-cells = <0>;
199 compatible = "ti,keystone,psc-clock";
200 clocks = <&chipclk13>;
201 clock-output-names = "fftc-0";
202 reg = <0x02350070 0xb00>, <0x0235004c 0x400>;
203 reg-names = "control", "domain";
204 domain-id = <19>;
205 };
206
207 clkfftc1: clkfftc1 {
208 #clock-cells = <0>;
209 compatible = "ti,keystone,psc-clock";
210 clocks = <&chipclk13>;
211 clock-output-names = "fftc-1";
212 reg = <0x02350074 0xb00>, <0x023504c0 0x400>;
213 reg-names = "control", "domain";
214 domain-id = <19>;
215 };
216
217 clkfftc2: clkfftc2 {
218 #clock-cells = <0>;
219 compatible = "ti,keystone,psc-clock";
220 clocks = <&chipclk13>;
221 clock-output-names = "fftc-2";
222 reg = <0x02350078 0xb00>, <0x02350050 0x400>;
223 reg-names = "control", "domain";
224 domain-id = <20>;
225 };
226
227 clkfftc3: clkfftc3 {
228 #clock-cells = <0>;
229 compatible = "ti,keystone,psc-clock";
230 clocks = <&chipclk13>;
231 clock-output-names = "fftc-3";
232 reg = <0x0235007c 0xb00>, <0x02350050 0x400>;
233 reg-names = "control", "domain";
234 domain-id = <20>;
235 };
236
237 clkfftc4: clkfftc4 {
238 #clock-cells = <0>;
239 compatible = "ti,keystone,psc-clock";
240 clocks = <&chipclk13>;
241 clock-output-names = "fftc-4";
242 reg = <0x02350080 0xb00>, <0x02350050 0x400>;
243 reg-names = "control", "domain";
244 domain-id = <20>;
245 };
246
247 clkfftc5: clkfftc5 {
248 #clock-cells = <0>;
249 compatible = "ti,keystone,psc-clock";
250 clocks = <&chipclk13>;
251 clock-output-names = "fftc-5";
252 reg = <0x02350084 0xb00>, <0x02350050 0x400>;
253 reg-names = "control", "domain";
254 domain-id = <20>;
255 };
256
257 clkaif: clkaif {
258 #clock-cells = <0>;
259 compatible = "ti,keystone,psc-clock";
260 clocks = <&chipclk13>;
261 clock-output-names = "aif";
262 reg = <0x02350088 0xb00>, <0x02350054 0x400>;
263 reg-names = "control", "domain";
264 domain-id = <21>;
265 };
266
267 clktcp3d0: clktcp3d0 {
268 #clock-cells = <0>;
269 compatible = "ti,keystone,psc-clock";
270 clocks = <&chipclk13>;
271 clock-output-names = "tcp3d-0";
272 reg = <0x0235008c 0xb00>, <0x02350058 0x400>;
273 reg-names = "control", "domain";
274 domain-id = <22>;
275 };
276
277 clktcp3d1: clktcp3d1 {
278 #clock-cells = <0>;
279 compatible = "ti,keystone,psc-clock";
280 clocks = <&chipclk13>;
281 clock-output-names = "tcp3d-1";
282 reg = <0x02350090 0xb00>, <0x02350058 0x400>;
283 reg-names = "control", "domain";
284 domain-id = <22>;
285 };
286
287 clktcp3d2: clktcp3d2 {
288 #clock-cells = <0>;
289 compatible = "ti,keystone,psc-clock";
290 clocks = <&chipclk13>;
291 clock-output-names = "tcp3d-2";
292 reg = <0x02350094 0xb00>, <0x0235005c 0x400>;
293 reg-names = "control", "domain";
294 domain-id = <23>;
295 };
296
297 clktcp3d3: clktcp3d3 {
298 #clock-cells = <0>;
299 compatible = "ti,keystone,psc-clock";
300 clocks = <&chipclk13>;
301 clock-output-names = "tcp3d-3";
302 reg = <0x02350098 0xb00>, <0x0235005c 0x400>;
303 reg-names = "control", "domain";
304 domain-id = <23>;
305 };
306
307 clkvcp0: clkvcp0 {
308 #clock-cells = <0>;
309 compatible = "ti,keystone,psc-clock";
310 clocks = <&chipclk13>;
311 clock-output-names = "vcp-0";
312 reg = <0x0235009c 0xb00>, <0x02350060 0x400>;
313 reg-names = "control", "domain";
314 domain-id = <24>;
315 };
316
317 clkvcp1: clkvcp1 {
318 #clock-cells = <0>;
319 compatible = "ti,keystone,psc-clock";
320 clocks = <&chipclk13>;
321 clock-output-names = "vcp-1";
322 reg = <0x023500a0 0xb00>, <0x02350060 0x400>;
323 reg-names = "control", "domain";
324 domain-id = <24>;
325 };
326
327 clkvcp2: clkvcp2 {
328 #clock-cells = <0>;
329 compatible = "ti,keystone,psc-clock";
330 clocks = <&chipclk13>;
331 clock-output-names = "vcp-2";
332 reg = <0x023500a4 0xb00>, <0x02350060 0x400>;
333 reg-names = "control", "domain";
334 domain-id = <24>;
335 };
336
337 clkvcp3: clkvcp3 {
338 #clock-cells = <0>;
339 compatible = "ti,keystone,psc-clock";
340 clocks = <&chipclk13>;
341 clock-output-names = "vcp-3";
342 reg = <0x023500a8 0xb00>, <0x02350060 0x400>;
343 reg-names = "control", "domain";
344 domain-id = <24>;
345 };
346
347 clkvcp4: clkvcp4 {
348 #clock-cells = <0>;
349 compatible = "ti,keystone,psc-clock";
350 clocks = <&chipclk13>;
351 clock-output-names = "vcp-4";
352 reg = <0x023500ac 0xb00>, <0x02350064 0x400>;
353 reg-names = "control", "domain";
354 domain-id = <25>;
355 };
356
357 clkvcp5: clkvcp5 {
358 #clock-cells = <0>;
359 compatible = "ti,keystone,psc-clock";
360 clocks = <&chipclk13>;
361 clock-output-names = "vcp-5";
362 reg = <0x023500b0 0xb00>, <0x02350064 0x400>;
363 reg-names = "control", "domain";
364 domain-id = <25>;
365 };
366
367 clkvcp6: clkvcp6 {
368 #clock-cells = <0>;
369 compatible = "ti,keystone,psc-clock";
370 clocks = <&chipclk13>;
371 clock-output-names = "vcp-6";
372 reg = <0x023500b4 0xb00>, <0x02350064 0x400>;
373 reg-names = "control", "domain";
374 domain-id = <25>;
375 };
376
377 clkvcp7: clkvcp7 {
378 #clock-cells = <0>;
379 compatible = "ti,keystone,psc-clock";
380 clocks = <&chipclk13>;
381 clock-output-names = "vcp-7";
382 reg = <0x023500b8 0xb00>, <0x02350064 0x400>;
383 reg-names = "control", "domain";
384 domain-id = <25>;
385 };
386
387 clkbcp: clkbcp {
388 #clock-cells = <0>;
389 compatible = "ti,keystone,psc-clock";
390 clocks = <&chipclk13>;
391 clock-output-names = "bcp";
392 reg = <0x023500bc 0xb00>, <0x02350068 0x400>;
393 reg-names = "control", "domain";
394 domain-id = <26>;
395 };
396
397 clkdxb: clkdxb {
398 #clock-cells = <0>;
399 compatible = "ti,keystone,psc-clock";
400 clocks = <&chipclk13>;
401 clock-output-names = "dxb";
402 reg = <0x023500c0 0xb00>, <0x0235006c 0x400>;
403 reg-names = "control", "domain";
404 domain-id = <27>;
405 };
406
407 clkhyperlink1: clkhyperlink1 {
408 #clock-cells = <0>;
409 compatible = "ti,keystone,psc-clock";
410 clocks = <&chipclk12>;
411 clock-output-names = "hyperlink-1";
412 reg = <0x023500c4 0xb00>, <0x02350070 0x400>;
413 reg-names = "control", "domain";
414 domain-id = <28>;
415 };
416
417 clkxge: clkxge {
418 #clock-cells = <0>;
419 compatible = "ti,keystone,psc-clock";
420 clocks = <&chipclk13>;
421 clock-output-names = "xge";
422 reg = <0x023500c8 0xb00>, <0x02350074 0x400>;
423 reg-names = "control", "domain";
424 domain-id = <29>;
425 };
426};
diff --git a/arch/arm/boot/dts/k2hk-evm.dts b/arch/arm/boot/dts/k2hk-evm.dts
index eaefdfef65c3..1a1335b4a0b1 100644
--- a/arch/arm/boot/dts/k2hk-evm.dts
+++ b/arch/arm/boot/dts/k2hk-evm.dts
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright 2013 Texas Instruments, Inc. 2 * Copyright 2013-2014 Texas Instruments, Inc.
3 * 3 *
4 * Keystone 2 Kepler/Hawking EVM device tree 4 * Keystone 2 Kepler/Hawking EVM device tree
5 * 5 *
@@ -10,12 +10,14 @@
10/dts-v1/; 10/dts-v1/;
11 11
12#include "keystone.dtsi" 12#include "keystone.dtsi"
13#include "k2hk.dtsi"
13 14
14/ { 15/ {
15 compatible = "ti,keystone-evm"; 16 compatible = "ti,k2hk-evm";
17 model = "Texas Instruments Keystone 2 Kepler/Hawking EVM";
16 18
17 soc { 19 soc {
18 clock { 20 clocks {
19 refclksys: refclksys { 21 refclksys: refclksys {
20 #clock-cells = <0>; 22 #clock-cells = <0>;
21 compatible = "fixed-clock"; 23 compatible = "fixed-clock";
@@ -52,6 +54,29 @@
52 }; 54 };
53 }; 55 };
54 }; 56 };
57
58 leds {
59 compatible = "gpio-leds";
60 debug1_1 {
61 label = "keystone:green:debug1";
62 gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; /* 12 */
63 };
64
65 debug1_2 {
66 label = "keystone:red:debug1";
67 gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; /* 13 */
68 };
69
70 debug2 {
71 label = "keystone:blue:debug2";
72 gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>; /* 14 */
73 };
74
75 debug3 {
76 label = "keystone:blue:debug3";
77 gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; /* 15 */
78 };
79 };
55}; 80};
56 81
57&usb_phy { 82&usb_phy {
@@ -61,3 +86,55 @@
61&usb { 86&usb {
62 status = "okay"; 87 status = "okay";
63}; 88};
89
90&aemif {
91 cs0 {
92 #address-cells = <2>;
93 #size-cells = <1>;
94 clock-ranges;
95 ranges;
96
97 ti,cs-chipselect = <0>;
98 /* all timings in nanoseconds */
99 ti,cs-min-turnaround-ns = <12>;
100 ti,cs-read-hold-ns = <6>;
101 ti,cs-read-strobe-ns = <23>;
102 ti,cs-read-setup-ns = <9>;
103 ti,cs-write-hold-ns = <8>;
104 ti,cs-write-strobe-ns = <23>;
105 ti,cs-write-setup-ns = <8>;
106
107 nand@0,0 {
108 compatible = "ti,keystone-nand","ti,davinci-nand";
109 #address-cells = <1>;
110 #size-cells = <1>;
111 reg = <0 0 0x4000000
112 1 0 0x0000100>;
113
114 ti,davinci-chipselect = <0>;
115 ti,davinci-mask-ale = <0x2000>;
116 ti,davinci-mask-cle = <0x4000>;
117 ti,davinci-mask-chipsel = <0>;
118 nand-ecc-mode = "hw";
119 ti,davinci-ecc-bits = <4>;
120 nand-on-flash-bbt;
121
122 partition@0 {
123 label = "u-boot";
124 reg = <0x0 0x100000>;
125 read-only;
126 };
127
128 partition@100000 {
129 label = "params";
130 reg = <0x100000 0x80000>;
131 read-only;
132 };
133
134 partition@180000 {
135 label = "ubifs";
136 reg = <0x180000 0x7E80000>;
137 };
138 };
139 };
140};
diff --git a/arch/arm/boot/dts/k2hk.dtsi b/arch/arm/boot/dts/k2hk.dtsi
new file mode 100644
index 000000000000..c73899c73118
--- /dev/null
+++ b/arch/arm/boot/dts/k2hk.dtsi
@@ -0,0 +1,46 @@
1/*
2 * Copyright 2013-2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Kepler/Hawking soc specific device tree
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11/ {
12 cpus {
13 #address-cells = <1>;
14 #size-cells = <0>;
15
16 interrupt-parent = <&gic>;
17
18 cpu@0 {
19 compatible = "arm,cortex-a15";
20 device_type = "cpu";
21 reg = <0>;
22 };
23
24 cpu@1 {
25 compatible = "arm,cortex-a15";
26 device_type = "cpu";
27 reg = <1>;
28 };
29
30 cpu@2 {
31 compatible = "arm,cortex-a15";
32 device_type = "cpu";
33 reg = <2>;
34 };
35
36 cpu@3 {
37 compatible = "arm,cortex-a15";
38 device_type = "cpu";
39 reg = <3>;
40 };
41 };
42
43 soc {
44 /include/ "k2hk-clocks.dtsi"
45 };
46};
diff --git a/arch/arm/boot/dts/k2l-clocks.dtsi b/arch/arm/boot/dts/k2l-clocks.dtsi
new file mode 100644
index 000000000000..f584b80200f8
--- /dev/null
+++ b/arch/arm/boot/dts/k2l-clocks.dtsi
@@ -0,0 +1,267 @@
1/*
2 * Copyright 2013-2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 lamarr SoC clock nodes
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11clocks {
12 armpllclk: armpllclk@2620370 {
13 #clock-cells = <0>;
14 compatible = "ti,keystone,pll-clock";
15 clocks = <&refclksys>;
16 clock-output-names = "arm-pll-clk";
17 reg = <0x02620370 4>;
18 reg-names = "control";
19 };
20
21 mainpllclk: mainpllclk@2310110 {
22 #clock-cells = <0>;
23 compatible = "ti,keystone,main-pll-clock";
24 clocks = <&refclksys>;
25 reg = <0x02620350 4>, <0x02310110 4>;
26 reg-names = "control", "multiplier";
27 fixed-postdiv = <2>;
28 };
29
30 papllclk: papllclk@2620358 {
31 #clock-cells = <0>;
32 compatible = "ti,keystone,pll-clock";
33 clocks = <&refclksys>;
34 clock-output-names = "pa-pll-clk";
35 reg = <0x02620358 4>;
36 reg-names = "control";
37 };
38
39 ddr3apllclk: ddr3apllclk@2620360 {
40 #clock-cells = <0>;
41 compatible = "ti,keystone,pll-clock";
42 clocks = <&refclksys>;
43 clock-output-names = "ddr-3a-pll-clk";
44 reg = <0x02620360 4>;
45 reg-names = "control";
46 };
47
48 clkdfeiqnsys: clkdfeiqnsys {
49 #clock-cells = <0>;
50 compatible = "ti,keystone,psc-clock";
51 clocks = <&chipclk12>;
52 clock-output-names = "dfe";
53 reg-names = "control", "domain";
54 reg = <0x02350004 0xb00>, <0x02350000 0x400>;
55 domain-id = <0>;
56 };
57
58 clkpcie1: clkpcie1 {
59 #clock-cells = <0>;
60 compatible = "ti,keystone,psc-clock";
61 clocks = <&chipclk12>;
62 clock-output-names = "pcie";
63 reg = <0x0235002c 0xb00>, <0x02350000 0x400>;
64 reg-names = "control", "domain";
65 domain-id = <4>;
66 };
67
68 clkgem1: clkgem1 {
69 #clock-cells = <0>;
70 compatible = "ti,keystone,psc-clock";
71 clocks = <&chipclk1>;
72 clock-output-names = "gem1";
73 reg = <0x02350040 0xb00>, <0x02350024 0x400>;
74 reg-names = "control", "domain";
75 domain-id = <9>;
76 };
77
78 clkgem2: clkgem2 {
79 #clock-cells = <0>;
80 compatible = "ti,keystone,psc-clock";
81 clocks = <&chipclk1>;
82 clock-output-names = "gem2";
83 reg = <0x02350044 0xb00>, <0x02350028 0x400>;
84 reg-names = "control", "domain";
85 domain-id = <10>;
86 };
87
88 clkgem3: clkgem3 {
89 #clock-cells = <0>;
90 compatible = "ti,keystone,psc-clock";
91 clocks = <&chipclk1>;
92 clock-output-names = "gem3";
93 reg = <0x02350048 0xb00>, <0x0235002c 0x400>;
94 reg-names = "control", "domain";
95 domain-id = <11>;
96 };
97
98 clktac: clktac {
99 #clock-cells = <0>;
100 compatible = "ti,keystone,psc-clock";
101 clocks = <&chipclk13>;
102 clock-output-names = "tac";
103 reg = <0x02350064 0xb00>, <0x02350044 0x400>;
104 reg-names = "control", "domain";
105 domain-id = <17>;
106 };
107
108 clkrac: clkrac {
109 #clock-cells = <0>;
110 compatible = "ti,keystone,psc-clock";
111 clocks = <&chipclk13>;
112 clock-output-names = "rac";
113 reg = <0x02350068 0xb00>, <0x02350044 0x400>;
114 reg-names = "control", "domain";
115 domain-id = <17>;
116 };
117
118 clkdfepd0: clkdfepd0 {
119 #clock-cells = <0>;
120 compatible = "ti,keystone,psc-clock";
121 clocks = <&chipclk13>;
122 clock-output-names = "dfe-pd0";
123 reg = <0x0235006c 0xb00>, <0x02350044 0x400>;
124 reg-names = "control", "domain";
125 domain-id = <18>;
126 };
127
128 clkfftc0: clkfftc0 {
129 #clock-cells = <0>;
130 compatible = "ti,keystone,psc-clock";
131 clocks = <&chipclk13>;
132 clock-output-names = "fftc-0";
133 reg = <0x02350070 0xb00>, <0x0235004c 0x400>;
134 reg-names = "control", "domain";
135 domain-id = <19>;
136 };
137
138 clkosr: clkosr {
139 #clock-cells = <0>;
140 compatible = "ti,keystone,psc-clock";
141 clocks = <&chipclk13>;
142 clock-output-names = "osr";
143 reg = <0x02350088 0xb00>, <0x0235004c 0x400>;
144 reg-names = "control", "domain";
145 domain-id = <21>;
146 };
147
148 clktcp3d0: clktcp3d0 {
149 #clock-cells = <0>;
150 compatible = "ti,keystone,psc-clock";
151 clocks = <&chipclk13>;
152 clock-output-names = "tcp3d-0";
153 reg = <0x0235008c 0xb00>, <0x02350058 0x400>;
154 reg-names = "control", "domain";
155 domain-id = <22>;
156 };
157
158 clktcp3d1: clktcp3d1 {
159 #clock-cells = <0>;
160 compatible = "ti,keystone,psc-clock";
161 clocks = <&chipclk13>;
162 clock-output-names = "tcp3d-1";
163 reg = <0x02350094 0xb00>, <0x02350058 0x400>;
164 reg-names = "control", "domain";
165 domain-id = <23>;
166 };
167
168 clkvcp0: clkvcp0 {
169 #clock-cells = <0>;
170 compatible = "ti,keystone,psc-clock";
171 clocks = <&chipclk13>;
172 clock-output-names = "vcp-0";
173 reg = <0x0235009c 0xb00>, <0x02350060 0x400>;
174 reg-names = "control", "domain";
175 domain-id = <24>;
176 };
177
178 clkvcp1: clkvcp1 {
179 #clock-cells = <0>;
180 compatible = "ti,keystone,psc-clock";
181 clocks = <&chipclk13>;
182 clock-output-names = "vcp-1";
183 reg = <0x023500a0 0xb00>, <0x02350060 0x400>;
184 reg-names = "control", "domain";
185 domain-id = <24>;
186 };
187
188 clkvcp2: clkvcp2 {
189 #clock-cells = <0>;
190 compatible = "ti,keystone,psc-clock";
191 clocks = <&chipclk13>;
192 clock-output-names = "vcp-2";
193 reg = <0x023500a4 0xb00>, <0x02350060 0x400>;
194 reg-names = "control", "domain";
195 domain-id = <24>;
196 };
197
198 clkvcp3: clkvcp3 {
199 #clock-cells = <0>;
200 compatible = "ti,keystone,psc-clock";
201 clocks = <&chipclk13>;
202 clock-output-names = "vcp-3";
203 reg = <0x023500a8 0xb00>, <0x02350060 0x400>;
204 reg-names = "control", "domain";
205 domain-id = <24>;
206 };
207
208 clkbcp: clkbcp {
209 #clock-cells = <0>;
210 compatible = "ti,keystone,psc-clock";
211 clocks = <&chipclk13>;
212 clock-output-names = "bcp";
213 reg = <0x023500bc 0xb00>, <0x02350068 0x400>;
214 reg-names = "control", "domain";
215 domain-id = <26>;
216 };
217
218 clkdfepd1: clkdfepd1 {
219 #clock-cells = <0>;
220 compatible = "ti,keystone,psc-clock";
221 clocks = <&chipclk13>;
222 clock-output-names = "dfe-pd1";
223 reg = <0x023500c0 0xb00>, <0x02350044 0x400>;
224 reg-names = "control", "domain";
225 domain-id = <27>;
226 };
227
228 clkfftc1: clkfftc1 {
229 #clock-cells = <0>;
230 compatible = "ti,keystone,psc-clock";
231 clocks = <&chipclk13>;
232 clock-output-names = "fftc-1";
233 reg = <0x023500c4 0xb00>, <0x023504c0 0x400>;
234 reg-names = "control", "domain";
235 domain-id = <28>;
236 };
237
238 clkiqnail: clkiqnail {
239 #clock-cells = <0>;
240 compatible = "ti,keystone,psc-clock";
241 clocks = <&chipclk13>;
242 clock-output-names = "iqn-ail";
243 reg = <0x023500c8 0xb00>, <0x0235004c 0x400>;
244 reg-names = "control", "domain";
245 domain-id = <29>;
246 };
247
248 clkuart2: clkuart2 {
249 #clock-cells = <0>;
250 compatible = "ti,keystone,psc-clock";
251 clocks = <&clkmodrst0>;
252 clock-output-names = "uart2";
253 reg = <0x02350000 0xb00>, <0x02350000 0x400>;
254 reg-names = "control", "domain";
255 domain-id = <0>;
256 };
257
258 clkuart3: clkuart3 {
259 #clock-cells = <0>;
260 compatible = "ti,keystone,psc-clock";
261 clocks = <&clkmodrst0>;
262 clock-output-names = "uart3";
263 reg = <0x02350000 0xb00>, <0x02350000 0x400>;
264 reg-names = "control", "domain";
265 domain-id = <0>;
266 };
267};
diff --git a/arch/arm/boot/dts/k2l-evm.dts b/arch/arm/boot/dts/k2l-evm.dts
new file mode 100644
index 000000000000..ebf316a1bf6b
--- /dev/null
+++ b/arch/arm/boot/dts/k2l-evm.dts
@@ -0,0 +1,37 @@
1/*
2 * Copyright 2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Lamarr EVM device tree
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10/dts-v1/;
11
12#include "keystone.dtsi"
13#include "k2l.dtsi"
14
15/ {
16 compatible = "ti,k2l-evm";
17 model = "Texas Instruments Keystone 2 Lamarr EVM";
18
19 soc {
20 clocks {
21 refclksys: refclksys {
22 #clock-cells = <0>;
23 compatible = "fixed-clock";
24 clock-frequency = <122880000>;
25 clock-output-names = "refclk-sys";
26 };
27 };
28 };
29};
30
31&usb_phy {
32 status = "okay";
33};
34
35&usb {
36 status = "okay";
37};
diff --git a/arch/arm/boot/dts/k2l.dtsi b/arch/arm/boot/dts/k2l.dtsi
new file mode 100644
index 000000000000..1f7f479589e1
--- /dev/null
+++ b/arch/arm/boot/dts/k2l.dtsi
@@ -0,0 +1,55 @@
1/*
2 * Copyright 2014 Texas Instruments, Inc.
3 *
4 * Keystone 2 Lamarr SoC specific device tree
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11/ {
12 cpus {
13 #address-cells = <1>;
14 #size-cells = <0>;
15
16 interrupt-parent = <&gic>;
17
18 cpu@0 {
19 compatible = "arm,cortex-a15";
20 device_type = "cpu";
21 reg = <0>;
22 };
23
24 cpu@1 {
25 compatible = "arm,cortex-a15";
26 device_type = "cpu";
27 reg = <1>;
28 };
29 };
30
31 soc {
32
33 /include/ "k2l-clocks.dtsi"
34
35 uart2: serial@02348400 {
36 compatible = "ns16550a";
37 current-speed = <115200>;
38 reg-shift = <2>;
39 reg-io-width = <4>;
40 reg = <0x02348400 0x100>;
41 clocks = <&clkuart2>;
42 interrupts = <GIC_SPI 432 IRQ_TYPE_EDGE_RISING>;
43 };
44
45 uart3: serial@02348800 {
46 compatible = "ns16550a";
47 current-speed = <115200>;
48 reg-shift = <2>;
49 reg-io-width = <4>;
50 reg = <0x02348800 0x100>;
51 clocks = <&clkuart3>;
52 interrupts = <GIC_SPI 435 IRQ_TYPE_EDGE_RISING>;
53 };
54 };
55};
diff --git a/arch/arm/boot/dts/keystone-clocks.dtsi b/arch/arm/boot/dts/keystone-clocks.dtsi
index 2363593e1050..93f82c7010ab 100644
--- a/arch/arm/boot/dts/keystone-clocks.dtsi
+++ b/arch/arm/boot/dts/keystone-clocks.dtsi
@@ -13,51 +13,6 @@ clocks {
13 #size-cells = <1>; 13 #size-cells = <1>;
14 ranges; 14 ranges;
15 15
16 mainpllclk: mainpllclk@2310110 {
17 #clock-cells = <0>;
18 compatible = "ti,keystone,main-pll-clock";
19 clocks = <&refclksys>;
20 reg = <0x02620350 4>, <0x02310110 4>;
21 reg-names = "control", "multiplier";
22 fixed-postdiv = <2>;
23 };
24
25 papllclk: papllclk@2620358 {
26 #clock-cells = <0>;
27 compatible = "ti,keystone,pll-clock";
28 clocks = <&refclkpass>;
29 clock-output-names = "pa-pll-clk";
30 reg = <0x02620358 4>;
31 reg-names = "control";
32 };
33
34 ddr3apllclk: ddr3apllclk@2620360 {
35 #clock-cells = <0>;
36 compatible = "ti,keystone,pll-clock";
37 clocks = <&refclkddr3a>;
38 clock-output-names = "ddr-3a-pll-clk";
39 reg = <0x02620360 4>;
40 reg-names = "control";
41 };
42
43 ddr3bpllclk: ddr3bpllclk@2620368 {
44 #clock-cells = <0>;
45 compatible = "ti,keystone,pll-clock";
46 clocks = <&refclkddr3b>;
47 clock-output-names = "ddr-3b-pll-clk";
48 reg = <0x02620368 4>;
49 reg-names = "control";
50 };
51
52 armpllclk: armpllclk@2620370 {
53 #clock-cells = <0>;
54 compatible = "ti,keystone,pll-clock";
55 clocks = <&refclkarm>;
56 clock-output-names = "arm-pll-clk";
57 reg = <0x02620370 4>;
58 reg-names = "control";
59 };
60
61 mainmuxclk: mainmuxclk@2310108 { 16 mainmuxclk: mainmuxclk@2310108 {
62 #clock-cells = <0>; 17 #clock-cells = <0>;
63 compatible = "ti,keystone,pll-mux-clock"; 18 compatible = "ti,keystone,pll-mux-clock";
@@ -244,7 +199,7 @@ clocks {
244 clock-output-names = "debugss-trc"; 199 clock-output-names = "debugss-trc";
245 reg = <0x02350014 0xb00>, <0x02350000 0x400>; 200 reg = <0x02350014 0xb00>, <0x02350000 0x400>;
246 reg-names = "control", "domain"; 201 reg-names = "control", "domain";
247 domain-id = <0>; 202 domain-id = <1>;
248 }; 203 };
249 204
250 clktetbtrc: clktetbtrc { 205 clktetbtrc: clktetbtrc {
@@ -297,26 +252,6 @@ clocks {
297 domain-id = <3>; 252 domain-id = <3>;
298 }; 253 };
299 254
300 clksrio: clksrio {
301 #clock-cells = <0>;
302 compatible = "ti,keystone,psc-clock";
303 clocks = <&chipclk1rstiso13>;
304 clock-output-names = "srio";
305 reg = <0x0235002c 0xb00>, <0x02350010 0x400>;
306 reg-names = "control", "domain";
307 domain-id = <4>;
308 };
309
310 clkhyperlink0: clkhyperlink0 {
311 #clock-cells = <0>;
312 compatible = "ti,keystone,psc-clock";
313 clocks = <&chipclk12>;
314 clock-output-names = "hyperlink-0";
315 reg = <0x02350030 0xb00>, <0x02350014 0x400>;
316 reg-names = "control", "domain";
317 domain-id = <5>;
318 };
319
320 clksr: clksr { 255 clksr: clksr {
321 #clock-cells = <0>; 256 #clock-cells = <0>;
322 compatible = "ti,keystone,psc-clock"; 257 compatible = "ti,keystone,psc-clock";
@@ -327,16 +262,6 @@ clocks {
327 domain-id = <6>; 262 domain-id = <6>;
328 }; 263 };
329 264
330 clkmsmcsram: clkmsmcsram {
331 #clock-cells = <0>;
332 compatible = "ti,keystone,psc-clock";
333 clocks = <&chipclk1>;
334 clock-output-names = "msmcsram";
335 reg = <0x02350038 0xb00>, <0x0235001c 0x400>;
336 reg-names = "control", "domain";
337 domain-id = <7>;
338 };
339
340 clkgem0: clkgem0 { 265 clkgem0: clkgem0 {
341 #clock-cells = <0>; 266 #clock-cells = <0>;
342 compatible = "ti,keystone,psc-clock"; 267 compatible = "ti,keystone,psc-clock";
@@ -347,76 +272,6 @@ clocks {
347 domain-id = <8>; 272 domain-id = <8>;
348 }; 273 };
349 274
350 clkgem1: clkgem1 {
351 #clock-cells = <0>;
352 compatible = "ti,keystone,psc-clock";
353 clocks = <&chipclk1>;
354 clock-output-names = "gem1";
355 reg = <0x02350040 0xb00>, <0x02350024 0x400>;
356 reg-names = "control", "domain";
357 domain-id = <9>;
358 };
359
360 clkgem2: clkgem2 {
361 #clock-cells = <0>;
362 compatible = "ti,keystone,psc-clock";
363 clocks = <&chipclk1>;
364 clock-output-names = "gem2";
365 reg = <0x02350044 0xb00>, <0x02350028 0x400>;
366 reg-names = "control", "domain";
367 domain-id = <10>;
368 };
369
370 clkgem3: clkgem3 {
371 #clock-cells = <0>;
372 compatible = "ti,keystone,psc-clock";
373 clocks = <&chipclk1>;
374 clock-output-names = "gem3";
375 reg = <0x02350048 0xb00>, <0x0235002c 0x400>;
376 reg-names = "control", "domain";
377 domain-id = <11>;
378 };
379
380 clkgem4: clkgem4 {
381 #clock-cells = <0>;
382 compatible = "ti,keystone,psc-clock";
383 clocks = <&chipclk1>;
384 clock-output-names = "gem4";
385 reg = <0x0235004c 0xb00>, <0x02350030 0x400>;
386 reg-names = "control", "domain";
387 domain-id = <12>;
388 };
389
390 clkgem5: clkgem5 {
391 #clock-cells = <0>;
392 compatible = "ti,keystone,psc-clock";
393 clocks = <&chipclk1>;
394 clock-output-names = "gem5";
395 reg = <0x02350050 0xb00>, <0x02350034 0x400>;
396 reg-names = "control", "domain";
397 domain-id = <13>;
398 };
399
400 clkgem6: clkgem6 {
401 #clock-cells = <0>;
402 compatible = "ti,keystone,psc-clock";
403 clocks = <&chipclk1>;
404 clock-output-names = "gem6";
405 reg = <0x02350054 0xb00>, <0x02350038 0x400>;
406 reg-names = "control", "domain";
407 domain-id = <14>;
408 };
409
410 clkgem7: clkgem7 {
411 #clock-cells = <0>;
412 compatible = "ti,keystone,psc-clock";
413 clocks = <&chipclk1>;
414 clock-output-names = "gem7";
415 reg = <0x02350058 0xb00>, <0x0235003c 0x400>;
416 reg-names = "control", "domain";
417 domain-id = <15>;
418 };
419
420 clkddr30: clkddr30 { 275 clkddr30: clkddr30 {
421 #clock-cells = <0>; 276 #clock-cells = <0>;
422 compatible = "ti,keystone,psc-clock"; 277 compatible = "ti,keystone,psc-clock";
@@ -427,276 +282,6 @@ clocks {
427 domain-id = <16>; 282 domain-id = <16>;
428 }; 283 };
429 284
430 clkddr31: clkddr31 {
431 #clock-cells = <0>;
432 compatible = "ti,keystone,psc-clock";
433 clocks = <&chipclk13>;
434 clock-output-names = "ddr3-1";
435 reg = <0x02350060 0xb00>, <0x02350040 0x400>;
436 reg-names = "control", "domain";
437 domain-id = <16>;
438 };
439
440 clktac: clktac {
441 #clock-cells = <0>;
442 compatible = "ti,keystone,psc-clock";
443 clocks = <&chipclk13>;
444 clock-output-names = "tac";
445 reg = <0x02350064 0xb00>, <0x02350044 0x400>;
446 reg-names = "control", "domain";
447 domain-id = <17>;
448 };
449
450 clkrac01: clktac01 {
451 #clock-cells = <0>;
452 compatible = "ti,keystone,psc-clock";
453 clocks = <&chipclk13>;
454 clock-output-names = "rac-01";
455 reg = <0x02350068 0xb00>, <0x02350044 0x400>;
456 reg-names = "control", "domain";
457 domain-id = <17>;
458 };
459
460 clkrac23: clktac23 {
461 #clock-cells = <0>;
462 compatible = "ti,keystone,psc-clock";
463 clocks = <&chipclk13>;
464 clock-output-names = "rac-23";
465 reg = <0x0235006c 0xb00>, <0x02350048 0x400>;
466 reg-names = "control", "domain";
467 domain-id = <18>;
468 };
469
470 clkfftc0: clkfftc0 {
471 #clock-cells = <0>;
472 compatible = "ti,keystone,psc-clock";
473 clocks = <&chipclk13>;
474 clock-output-names = "fftc-0";
475 reg = <0x02350070 0xb00>, <0x0235004c 0x400>;
476 reg-names = "control", "domain";
477 domain-id = <19>;
478 };
479
480 clkfftc1: clkfftc1 {
481 #clock-cells = <0>;
482 compatible = "ti,keystone,psc-clock";
483 clocks = <&chipclk13>;
484 clock-output-names = "fftc-1";
485 reg = <0x02350074 0xb00>, <0x023504c0 0x400>;
486 reg-names = "control", "domain";
487 domain-id = <19>;
488 };
489
490 clkfftc2: clkfftc2 {
491 #clock-cells = <0>;
492 compatible = "ti,keystone,psc-clock";
493 clocks = <&chipclk13>;
494 clock-output-names = "fftc-2";
495 reg = <0x02350078 0xb00>, <0x02350050 0x400>;
496 reg-names = "control", "domain";
497 domain-id = <20>;
498 };
499
500 clkfftc3: clkfftc3 {
501 #clock-cells = <0>;
502 compatible = "ti,keystone,psc-clock";
503 clocks = <&chipclk13>;
504 clock-output-names = "fftc-3";
505 reg = <0x0235007c 0xb00>, <0x02350050 0x400>;
506 reg-names = "control", "domain";
507 domain-id = <20>;
508 };
509
510 clkfftc4: clkfftc4 {
511 #clock-cells = <0>;
512 compatible = "ti,keystone,psc-clock";
513 clocks = <&chipclk13>;
514 clock-output-names = "fftc-4";
515 reg = <0x02350080 0xb00>, <0x02350050 0x400>;
516 reg-names = "control", "domain";
517 domain-id = <20>;
518 };
519
520 clkfftc5: clkfftc5 {
521 #clock-cells = <0>;
522 compatible = "ti,keystone,psc-clock";
523 clocks = <&chipclk13>;
524 clock-output-names = "fftc-5";
525 reg = <0x02350084 0xb00>, <0x02350050 0x400>;
526 reg-names = "control", "domain";
527 domain-id = <20>;
528 };
529
530 clkaif: clkaif {
531 #clock-cells = <0>;
532 compatible = "ti,keystone,psc-clock";
533 clocks = <&chipclk13>;
534 clock-output-names = "aif";
535 reg = <0x02350088 0xb00>, <0x02350054 0x400>;
536 reg-names = "control", "domain";
537 domain-id = <21>;
538 };
539
540 clktcp3d0: clktcp3d0 {
541 #clock-cells = <0>;
542 compatible = "ti,keystone,psc-clock";
543 clocks = <&chipclk13>;
544 clock-output-names = "tcp3d-0";
545 reg = <0x0235008c 0xb00>, <0x02350058 0x400>;
546 reg-names = "control", "domain";
547 domain-id = <22>;
548 };
549
550 clktcp3d1: clktcp3d1 {
551 #clock-cells = <0>;
552 compatible = "ti,keystone,psc-clock";
553 clocks = <&chipclk13>;
554 clock-output-names = "tcp3d-1";
555 reg = <0x02350090 0xb00>, <0x02350058 0x400>;
556 reg-names = "control", "domain";
557 domain-id = <22>;
558 };
559
560 clktcp3d2: clktcp3d2 {
561 #clock-cells = <0>;
562 compatible = "ti,keystone,psc-clock";
563 clocks = <&chipclk13>;
564 clock-output-names = "tcp3d-2";
565 reg = <0x02350094 0xb00>, <0x0235005c 0x400>;
566 reg-names = "control", "domain";
567 domain-id = <23>;
568 };
569
570 clktcp3d3: clktcp3d3 {
571 #clock-cells = <0>;
572 compatible = "ti,keystone,psc-clock";
573 clocks = <&chipclk13>;
574 clock-output-names = "tcp3d-3";
575 reg = <0x02350098 0xb00>, <0x0235005c 0x400>;
576 reg-names = "control", "domain";
577 domain-id = <23>;
578 };
579
580 clkvcp0: clkvcp0 {
581 #clock-cells = <0>;
582 compatible = "ti,keystone,psc-clock";
583 clocks = <&chipclk13>;
584 clock-output-names = "vcp-0";
585 reg = <0x0235009c 0xb00>, <0x02350060 0x400>;
586 reg-names = "control", "domain";
587 domain-id = <24>;
588 };
589
590 clkvcp1: clkvcp1 {
591 #clock-cells = <0>;
592 compatible = "ti,keystone,psc-clock";
593 clocks = <&chipclk13>;
594 clock-output-names = "vcp-1";
595 reg = <0x023500a0 0xb00>, <0x02350060 0x400>;
596 reg-names = "control", "domain";
597 domain-id = <24>;
598 };
599
600 clkvcp2: clkvcp2 {
601 #clock-cells = <0>;
602 compatible = "ti,keystone,psc-clock";
603 clocks = <&chipclk13>;
604 clock-output-names = "vcp-2";
605 reg = <0x023500a4 0xb00>, <0x02350060 0x400>;
606 reg-names = "control", "domain";
607 domain-id = <24>;
608 };
609
610 clkvcp3: clkvcp3 {
611 #clock-cells = <0>;
612 compatible = "ti,keystone,psc-clock";
613 clocks = <&chipclk13>;
614 clock-output-names = "vcp-3";
615 reg = <0x0235000a8 0xb00>, <0x02350060 0x400>;
616 reg-names = "control", "domain";
617 domain-id = <24>;
618 };
619
620 clkvcp4: clkvcp4 {
621 #clock-cells = <0>;
622 compatible = "ti,keystone,psc-clock";
623 clocks = <&chipclk13>;
624 clock-output-names = "vcp-4";
625 reg = <0x023500ac 0xb00>, <0x02350064 0x400>;
626 reg-names = "control", "domain";
627 domain-id = <25>;
628 };
629
630 clkvcp5: clkvcp5 {
631 #clock-cells = <0>;
632 compatible = "ti,keystone,psc-clock";
633 clocks = <&chipclk13>;
634 clock-output-names = "vcp-5";
635 reg = <0x023500b0 0xb00>, <0x02350064 0x400>;
636 reg-names = "control", "domain";
637 domain-id = <25>;
638 };
639
640 clkvcp6: clkvcp6 {
641 #clock-cells = <0>;
642 compatible = "ti,keystone,psc-clock";
643 clocks = <&chipclk13>;
644 clock-output-names = "vcp-6";
645 reg = <0x023500b4 0xb00>, <0x02350064 0x400>;
646 reg-names = "control", "domain";
647 domain-id = <25>;
648 };
649
650 clkvcp7: clkvcp7 {
651 #clock-cells = <0>;
652 compatible = "ti,keystone,psc-clock";
653 clocks = <&chipclk13>;
654 clock-output-names = "vcp-7";
655 reg = <0x023500b8 0xb00>, <0x02350064 0x400>;
656 reg-names = "control", "domain";
657 domain-id = <25>;
658 };
659
660 clkbcp: clkbcp {
661 #clock-cells = <0>;
662 compatible = "ti,keystone,psc-clock";
663 clocks = <&chipclk13>;
664 clock-output-names = "bcp";
665 reg = <0x023500bc 0xb00>, <0x02350068 0x400>;
666 reg-names = "control", "domain";
667 domain-id = <26>;
668 };
669
670 clkdxb: clkdxb {
671 #clock-cells = <0>;
672 compatible = "ti,keystone,psc-clock";
673 clocks = <&chipclk13>;
674 clock-output-names = "dxb";
675 reg = <0x023500c0 0xb00>, <0x0235006c 0x400>;
676 reg-names = "control", "domain";
677 domain-id = <27>;
678 };
679
680 clkhyperlink1: clkhyperlink1 {
681 #clock-cells = <0>;
682 compatible = "ti,keystone,psc-clock";
683 clocks = <&chipclk12>;
684 clock-output-names = "hyperlink-1";
685 reg = <0x023500c4 0xb00>, <0x02350070 0x400>;
686 reg-names = "control", "domain";
687 domain-id = <28>;
688 };
689
690 clkxge: clkxge {
691 #clock-cells = <0>;
692 compatible = "ti,keystone,psc-clock";
693 clocks = <&chipclk13>;
694 clock-output-names = "xge";
695 reg = <0x023500c8 0xb00>, <0x02350074 0x400>;
696 reg-names = "control", "domain";
697 domain-id = <29>;
698 };
699
700 clkwdtimer0: clkwdtimer0 { 285 clkwdtimer0: clkwdtimer0 {
701 #clock-cells = <0>; 286 #clock-cells = <0>;
702 compatible = "ti,keystone,psc-clock"; 287 compatible = "ti,keystone,psc-clock";
@@ -737,6 +322,16 @@ clocks {
737 domain-id = <0>; 322 domain-id = <0>;
738 }; 323 };
739 324
325 clktimer15: clktimer15 {
326 #clock-cells = <0>;
327 compatible = "ti,keystone,psc-clock";
328 clocks = <&clkmodrst0>;
329 clock-output-names = "timer15";
330 reg = <0x02350000 0xb00>, <0x02350000 0x400>;
331 reg-names = "control", "domain";
332 domain-id = <0>;
333 };
334
740 clkuart0: clkuart0 { 335 clkuart0: clkuart0 {
741 #clock-cells = <0>; 336 #clock-cells = <0>;
742 compatible = "ti,keystone,psc-clock"; 337 compatible = "ti,keystone,psc-clock";
diff --git a/arch/arm/boot/dts/keystone.dtsi b/arch/arm/boot/dts/keystone.dtsi
index b4202907a27b..90823eb90c1b 100644
--- a/arch/arm/boot/dts/keystone.dtsi
+++ b/arch/arm/boot/dts/keystone.dtsi
@@ -7,6 +7,7 @@
7 */ 7 */
8 8
9#include <dt-bindings/interrupt-controller/arm-gic.h> 9#include <dt-bindings/interrupt-controller/arm-gic.h>
10#include <dt-bindings/gpio/gpio.h>
10 11
11#include "skeleton.dtsi" 12#include "skeleton.dtsi"
12 13
@@ -24,37 +25,6 @@
24 reg = <0x00000000 0x80000000 0x00000000 0x40000000>; 25 reg = <0x00000000 0x80000000 0x00000000 0x40000000>;
25 }; 26 };
26 27
27 cpus {
28 #address-cells = <1>;
29 #size-cells = <0>;
30
31 interrupt-parent = <&gic>;
32
33 cpu@0 {
34 compatible = "arm,cortex-a15";
35 device_type = "cpu";
36 reg = <0>;
37 };
38
39 cpu@1 {
40 compatible = "arm,cortex-a15";
41 device_type = "cpu";
42 reg = <1>;
43 };
44
45 cpu@2 {
46 compatible = "arm,cortex-a15";
47 device_type = "cpu";
48 reg = <2>;
49 };
50
51 cpu@3 {
52 compatible = "arm,cortex-a15";
53 device_type = "cpu";
54 reg = <3>;
55 };
56 };
57
58 gic: interrupt-controller { 28 gic: interrupt-controller {
59 compatible = "arm,cortex-a15-gic"; 29 compatible = "arm,cortex-a15-gic";
60 #interrupt-cells = <3>; 30 #interrupt-cells = <3>;
@@ -208,5 +178,75 @@
208 usb-phy = <&usb_phy>, <&usb_phy>; 178 usb-phy = <&usb_phy>, <&usb_phy>;
209 }; 179 };
210 }; 180 };
181
182 wdt: wdt@022f0080 {
183 compatible = "ti,keystone-wdt","ti,davinci-wdt";
184 reg = <0x022f0080 0x80>;
185 clocks = <&clkwdtimer0>;
186 };
187
188 clock_event: timer@22f0000 {
189 compatible = "ti,keystone-timer";
190 reg = <0x022f0000 0x80>;
191 interrupts = <GIC_SPI 110 IRQ_TYPE_EDGE_RISING>;
192 clocks = <&clktimer15>;
193 };
194
195 gpio0: gpio@260bf00 {
196 compatible = "ti,keystone-gpio";
197 reg = <0x0260bf00 0x100>;
198 gpio-controller;
199 #gpio-cells = <2>;
200 /* HW Interrupts mapped to GPIO pins */
201 interrupts = <GIC_SPI 120 IRQ_TYPE_EDGE_RISING>,
202 <GIC_SPI 121 IRQ_TYPE_EDGE_RISING>,
203 <GIC_SPI 122 IRQ_TYPE_EDGE_RISING>,
204 <GIC_SPI 123 IRQ_TYPE_EDGE_RISING>,
205 <GIC_SPI 124 IRQ_TYPE_EDGE_RISING>,
206 <GIC_SPI 125 IRQ_TYPE_EDGE_RISING>,
207 <GIC_SPI 126 IRQ_TYPE_EDGE_RISING>,
208 <GIC_SPI 127 IRQ_TYPE_EDGE_RISING>,
209 <GIC_SPI 128 IRQ_TYPE_EDGE_RISING>,
210 <GIC_SPI 129 IRQ_TYPE_EDGE_RISING>,
211 <GIC_SPI 130 IRQ_TYPE_EDGE_RISING>,
212 <GIC_SPI 131 IRQ_TYPE_EDGE_RISING>,
213 <GIC_SPI 132 IRQ_TYPE_EDGE_RISING>,
214 <GIC_SPI 133 IRQ_TYPE_EDGE_RISING>,
215 <GIC_SPI 134 IRQ_TYPE_EDGE_RISING>,
216 <GIC_SPI 135 IRQ_TYPE_EDGE_RISING>,
217 <GIC_SPI 136 IRQ_TYPE_EDGE_RISING>,
218 <GIC_SPI 137 IRQ_TYPE_EDGE_RISING>,
219 <GIC_SPI 138 IRQ_TYPE_EDGE_RISING>,
220 <GIC_SPI 139 IRQ_TYPE_EDGE_RISING>,
221 <GIC_SPI 140 IRQ_TYPE_EDGE_RISING>,
222 <GIC_SPI 141 IRQ_TYPE_EDGE_RISING>,
223 <GIC_SPI 142 IRQ_TYPE_EDGE_RISING>,
224 <GIC_SPI 143 IRQ_TYPE_EDGE_RISING>,
225 <GIC_SPI 144 IRQ_TYPE_EDGE_RISING>,
226 <GIC_SPI 145 IRQ_TYPE_EDGE_RISING>,
227 <GIC_SPI 146 IRQ_TYPE_EDGE_RISING>,
228 <GIC_SPI 147 IRQ_TYPE_EDGE_RISING>,
229 <GIC_SPI 148 IRQ_TYPE_EDGE_RISING>,
230 <GIC_SPI 149 IRQ_TYPE_EDGE_RISING>,
231 <GIC_SPI 150 IRQ_TYPE_EDGE_RISING>,
232 <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>;
233 clocks = <&clkgpio>;
234 clock-names = "gpio";
235 ti,ngpio = <32>;
236 ti,davinci-gpio-unbanked = <32>;
237 };
238
239 aemif: aemif@21000A00 {
240 compatible = "ti,keystone-aemif", "ti,davinci-aemif";
241 #address-cells = <2>;
242 #size-cells = <1>;
243 clocks = <&clkaemif>;
244 clock-names = "aemif";
245 clock-ranges;
246
247 reg = <0x21000A00 0x00000100>;
248 ranges = <0 0 0x30000000 0x10000000
249 1 0 0x21000A00 0x00000100>;
250 };
211 }; 251 };
212}; 252};
diff --git a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi
index 60c605de22dd..85b1fb014c43 100644
--- a/arch/arm/boot/dts/omap2420.dtsi
+++ b/arch/arm/boot/dts/omap2420.dtsi
@@ -99,6 +99,7 @@
99 dmas = <&sdma 31>, 99 dmas = <&sdma 31>,
100 <&sdma 32>; 100 <&sdma 32>;
101 dma-names = "tx", "rx"; 101 dma-names = "tx", "rx";
102 status = "disabled";
102 }; 103 };
103 104
104 mcbsp2: mcbsp@48076000 { 105 mcbsp2: mcbsp@48076000 {
@@ -112,6 +113,7 @@
112 dmas = <&sdma 33>, 113 dmas = <&sdma 33>,
113 <&sdma 34>; 114 <&sdma 34>;
114 dma-names = "tx", "rx"; 115 dma-names = "tx", "rx";
116 status = "disabled";
115 }; 117 };
116 118
117 msdi1: mmc@4809c000 { 119 msdi1: mmc@4809c000 {
diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi
index d624345666f5..9d2f028fd687 100644
--- a/arch/arm/boot/dts/omap2430.dtsi
+++ b/arch/arm/boot/dts/omap2430.dtsi
@@ -113,6 +113,7 @@
113 dmas = <&sdma 31>, 113 dmas = <&sdma 31>,
114 <&sdma 32>; 114 <&sdma 32>;
115 dma-names = "tx", "rx"; 115 dma-names = "tx", "rx";
116 status = "disabled";
116 }; 117 };
117 118
118 mcbsp2: mcbsp@48076000 { 119 mcbsp2: mcbsp@48076000 {
@@ -128,6 +129,7 @@
128 dmas = <&sdma 33>, 129 dmas = <&sdma 33>,
129 <&sdma 34>; 130 <&sdma 34>;
130 dma-names = "tx", "rx"; 131 dma-names = "tx", "rx";
132 status = "disabled";
131 }; 133 };
132 134
133 mcbsp3: mcbsp@4808c000 { 135 mcbsp3: mcbsp@4808c000 {
@@ -143,6 +145,7 @@
143 dmas = <&sdma 17>, 145 dmas = <&sdma 17>,
144 <&sdma 18>; 146 <&sdma 18>;
145 dma-names = "tx", "rx"; 147 dma-names = "tx", "rx";
148 status = "disabled";
146 }; 149 };
147 150
148 mcbsp4: mcbsp@4808e000 { 151 mcbsp4: mcbsp@4808e000 {
@@ -158,6 +161,7 @@
158 dmas = <&sdma 19>, 161 dmas = <&sdma 19>,
159 <&sdma 20>; 162 <&sdma 20>;
160 dma-names = "tx", "rx"; 163 dma-names = "tx", "rx";
164 status = "disabled";
161 }; 165 };
162 166
163 mcbsp5: mcbsp@48096000 { 167 mcbsp5: mcbsp@48096000 {
@@ -173,6 +177,7 @@
173 dmas = <&sdma 21>, 177 dmas = <&sdma 21>,
174 <&sdma 22>; 178 <&sdma 22>;
175 dma-names = "tx", "rx"; 179 dma-names = "tx", "rx";
180 status = "disabled";
176 }; 181 };
177 182
178 mmc1: mmc@4809c000 { 183 mmc1: mmc@4809c000 {
diff --git a/arch/arm/boot/dts/omap3-beagle-xm.dts b/arch/arm/boot/dts/omap3-beagle-xm.dts
index 447e714d435b..cba357023878 100644
--- a/arch/arm/boot/dts/omap3-beagle-xm.dts
+++ b/arch/arm/boot/dts/omap3-beagle-xm.dts
@@ -234,3 +234,7 @@
234 regulator-max-microvolt = <1800000>; 234 regulator-max-microvolt = <1800000>;
235 regulator-always-on; 235 regulator-always-on;
236}; 236};
237
238&mcbsp2 {
239 status = "okay";
240};
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts
index 5053766d369b..d01e9a76c5da 100644
--- a/arch/arm/boot/dts/omap3-beagle.dts
+++ b/arch/arm/boot/dts/omap3-beagle.dts
@@ -211,3 +211,7 @@
211 regulator-max-microvolt = <1800000>; 211 regulator-max-microvolt = <1800000>;
212 regulator-always-on; 212 regulator-always-on;
213}; 213};
214
215&mcbsp2 {
216 status = "okay";
217};
diff --git a/arch/arm/boot/dts/omap3-cm-t3517.dts b/arch/arm/boot/dts/omap3-cm-t3517.dts
new file mode 100644
index 000000000000..d00502f4fd9b
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-cm-t3517.dts
@@ -0,0 +1,136 @@
1/*
2 * Support for CompuLab CM-T3517
3 */
4/dts-v1/;
5
6#include "am3517.dtsi"
7#include "omap3-cm-t3x.dtsi"
8
9/ {
10 model = "CompuLab CM-T3517";
11 compatible = "compulab,omap3-cm-t3517", "ti,am3517", "ti,omap3";
12
13 vmmc: regulator-vmmc {
14 compatible = "regulator-fixed";
15 regulator-name = "vmmc";
16 regulator-min-microvolt = <3300000>;
17 regulator-max-microvolt = <3300000>;
18 };
19
20 wl12xx_vmmc2: wl12xx_vmmc2 {
21 compatible = "regulator-fixed";
22 regulator-name = "vw1271";
23 pinctrl-names = "default";
24 pinctrl-0 = <
25 &wl12xx_wkup_pins
26 &wl12xx_core_pins
27 >;
28 regulator-min-microvolt = <1800000>;
29 regulator-max-microvolt = <1800000>;
30 gpio = <&gpio1 6 GPIO_ACTIVE_HIGH >; /* gpio6 */
31 startup-delay-us = <20000>;
32 enable-active-high;
33 };
34
35 wl12xx_vaux2: wl12xx_vaux2 {
36 compatible = "regulator-fixed";
37 regulator-name = "vwl1271_vaux2";
38 regulator-min-microvolt = <1800000>;
39 regulator-max-microvolt = <1800000>;
40 };
41};
42
43&omap3_pmx_wkup {
44
45 wl12xx_wkup_pins: pinmux_wl12xx_wkup_pins {
46 pinctrl-single,pins = <
47 OMAP3_WKUP_IOPAD(0x2a0e, PIN_OUTPUT | MUX_MODE4) /* sys_boot2.gpio_4 */
48 OMAP3_WKUP_IOPAD(0x2a12, PIN_OUTPUT | MUX_MODE4) /* sys_boot4.gpio_6 */
49 >;
50 };
51};
52
53&omap3_pmx_core {
54
55 phy1_reset_pins: pinmux_hsusb1_phy_reset_pins {
56 pinctrl-single,pins = <
57 OMAP3_CORE1_IOPAD(0x2178, PIN_OUTPUT | MUX_MODE4) /* uart2_tx.gpio_146 */
58 >;
59 };
60
61 phy2_reset_pins: pinmux_hsusb2_phy_reset_pins {
62 pinctrl-single,pins = <
63 OMAP3_CORE1_IOPAD(0x217a, PIN_OUTPUT | MUX_MODE4) /* uart2_rx.gpio_147 */
64 >;
65 };
66
67 otg_drv_vbus: pinmux_otg_drv_vbus {
68 pinctrl-single,pins = <
69 OMAP3_CORE1_IOPAD(0x2210, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_50Mhz_clk.usb0_drvvbus */
70 >;
71 };
72
73 mmc2_pins: pinmux_mmc2_pins {
74 pinctrl-single,pins = <
75 OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */
76 OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */
77 OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */
78 OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */
79 OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */
80 OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */
81 >;
82 };
83
84 wl12xx_core_pins: pinmux_wl12xx_core_pins {
85 pinctrl-single,pins = <
86 OMAP3_CORE1_IOPAD(0x20b8, PIN_OUTPUT | MUX_MODE4) /* gpmc_ncs5.gpio_56 */
87 OMAP3_CORE1_IOPAD(0x2176, PIN_INPUT_PULLUP | MUX_MODE4) /* uart2_rts.gpio_145 */
88 >;
89 };
90
91 usb_hub_pins: pinmux_usb_hub_pins {
92 pinctrl-single,pins = <
93 OMAP3_CORE1_IOPAD(0x2184, PIN_OUTPUT | MUX_MODE4) /* mcbsp4_clkx.gpio_152 - USB HUB RST */
94 >;
95 };
96};
97
98&hsusb1_phy {
99 pinctrl-names = "default";
100 pinctrl-0 = <&phy1_reset_pins>;
101 reset-gpios = <&gpio5 18 GPIO_ACTIVE_LOW>;
102};
103
104&hsusb2_phy {
105 pinctrl-names = "default";
106 pinctrl-0 = <&phy2_reset_pins>;
107 reset-gpios = <&gpio5 19 GPIO_ACTIVE_LOW>;
108};
109
110&davinci_emac {
111 status = "okay";
112};
113
114&davinci_mdio {
115 status = "okay";
116};
117
118&am35x_otg_hs {
119 status = "okay";
120 pinctrl-names = "default";
121 pinctrl-0 = <&otg_drv_vbus>;
122};
123
124&mmc1 {
125 vmmc-supply = <&vmmc>;
126};
127
128&mmc2 {
129 pinctrl-names = "default";
130 pinctrl-0 = <&mmc2_pins>;
131 vmmc-supply = <&wl12xx_vmmc2>;
132 vmmc_aux-supply = <&wl12xx_vaux2>;
133 non-removable;
134 bus-width = <4>;
135 cap-power-off-card;
136};
diff --git a/arch/arm/boot/dts/omap3-cm-t3530.dts b/arch/arm/boot/dts/omap3-cm-t3530.dts
new file mode 100644
index 000000000000..9faf1cd1dcaa
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-cm-t3530.dts
@@ -0,0 +1,12 @@
1/*
2 * Support for CompuLab CM-T3530
3 */
4/dts-v1/;
5
6#include "omap34xx.dtsi"
7#include "omap3-cm-t3x30.dtsi"
8
9/ {
10 model = "CompuLab CM-T3530";
11 compatible = "compulab,omap3-cm-t3530", "ti,omap34xx", "ti,omap3";
12};
diff --git a/arch/arm/boot/dts/omap3-cm-t3730.dts b/arch/arm/boot/dts/omap3-cm-t3730.dts
index 486f4d6c4219..b3f9a50b3bc8 100644
--- a/arch/arm/boot/dts/omap3-cm-t3730.dts
+++ b/arch/arm/boot/dts/omap3-cm-t3730.dts
@@ -32,57 +32,26 @@
32}; 32};
33 33
34&omap3_pmx_core { 34&omap3_pmx_core {
35 mmc1_pins: pinmux_mmc1_pins {
36 pinctrl-single,pins = <
37 0x114 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
38 0x116 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_cmd.sdmmc1_cmd */
39 0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat0.sdmmc1_dat0 */
40 0x11a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
41 0x11c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
42 0x11e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
43 >;
44 };
45 35
46 mmc2_pins: pinmux_mmc2_pins { 36 mmc2_pins: pinmux_mmc2_pins {
47 pinctrl-single,pins = < 37 pinctrl-single,pins = <
48 0x128 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */ 38 OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */
49 0x12a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */ 39 OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */
50 0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */ 40 OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */
51 0x12e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */ 41 OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */
52 0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */ 42 OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */
53 0x132 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */ 43 OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */
54 >;
55 };
56
57 smsc1_pins: pinmux_smsc1_pins {
58 pinctrl-single,pins = <
59 0x88 (PIN_OUTPUT | MUX_MODE0) /* gpmc_ncs5.gpmc_ncs5 */
60 0x16a (PIN_INPUT_PULLUP | MUX_MODE4) /* uart3_cts_rctx.gpio_163 */
61 >;
62 };
63
64 uart3_pins: pinmux_uart3_pins {
65 pinctrl-single,pins = <
66 0x16e (PIN_INPUT | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */
67 0x170 (PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx.uart3_tx_irtx */
68 >; 44 >;
69 }; 45 };
70 46
71 wl12xx_gpio: pinmux_wl12xx_gpio { 47 wl12xx_gpio: pinmux_wl12xx_gpio {
72 pinctrl-single,pins = < 48 pinctrl-single,pins = <
73 0xb2 (PIN_OUTPUT | MUX_MODE4) /* dss_data3.gpio_73 */ 49 OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE4) /* dss_data3.gpio_73 */
74 0x134 (PIN_INPUT | MUX_MODE4) /* sdmmc2_dat4.gpio_136 */ 50 OMAP3_CORE1_IOPAD(0x2164, PIN_INPUT | MUX_MODE4) /* sdmmc2_dat4.gpio_136 */
75 >; 51 >;
76 }; 52 };
77}; 53};
78 54
79&mmc1 {
80 vmmc-supply = <&vmmc1>;
81 bus-width = <4>;
82 pinctrl-names = "default";
83 pinctrl-0 = <&mmc1_pins>;
84};
85
86&mmc2 { 55&mmc2 {
87 pinctrl-names = "default"; 56 pinctrl-names = "default";
88 pinctrl-0 = <&mmc2_pins>; 57 pinctrl-0 = <&mmc2_pins>;
@@ -92,13 +61,3 @@
92 bus-width = <4>; 61 bus-width = <4>;
93 cap-power-off-card; 62 cap-power-off-card;
94}; 63};
95
96&smsc1 {
97 pinctrl-names = "default";
98 pinctrl-0 = <&smsc1_pins>;
99};
100
101&uart3 {
102 pinctrl-names = "default";
103 pinctrl-0 = <&uart3_pins>;
104};
diff --git a/arch/arm/boot/dts/omap3-cm-t3x.dtsi b/arch/arm/boot/dts/omap3-cm-t3x.dtsi
new file mode 100644
index 000000000000..c671a2299ea8
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-cm-t3x.dtsi
@@ -0,0 +1,110 @@
1/*
2 * Common support for CompuLab CM-T3x CoMs
3 */
4
5/ {
6
7 memory {
8 device_type = "memory";
9 reg = <0x80000000 0x10000000>; /* 256 MB */
10 };
11
12 leds {
13 compatible = "gpio-leds";
14 pinctrl-names = "default";
15 pinctrl-0 = <&green_led_pins>;
16 ledb {
17 label = "cm-t3x:green";
18 gpios = <&gpio6 26 GPIO_ACTIVE_HIGH>; /* gpio186 */
19 linux,default-trigger = "heartbeat";
20 };
21 };
22
23 /* HS USB Port 1 Power */
24 hsusb1_power: hsusb1_power_reg {
25 compatible = "regulator-fixed";
26 regulator-name = "hsusb1_vbus";
27 regulator-min-microvolt = <3300000>;
28 regulator-max-microvolt = <3300000>;
29 startup-delay-us = <70000>;
30 };
31
32 /* HS USB Port 2 Power */
33 hsusb2_power: hsusb2_power_reg {
34 compatible = "regulator-fixed";
35 regulator-name = "hsusb2_vbus";
36 regulator-min-microvolt = <3300000>;
37 regulator-max-microvolt = <3300000>;
38 startup-delay-us = <70000>;
39 };
40
41 /* HS USB Host PHY on PORT 1 */
42 hsusb1_phy: hsusb1_phy {
43 compatible = "usb-nop-xceiv";
44 vcc-supply = <&hsusb1_power>;
45 };
46
47 /* HS USB Host PHY on PORT 2 */
48 hsusb2_phy: hsusb2_phy {
49 compatible = "usb-nop-xceiv";
50 vcc-supply = <&hsusb2_power>;
51 };
52};
53
54&omap3_pmx_core {
55
56 uart3_pins: pinmux_uart3_pins {
57 pinctrl-single,pins = <
58 OMAP3_CORE1_IOPAD(0x219e, PIN_INPUT | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */
59 OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx.uart3_tx_irtx */
60 >;
61 };
62
63 mmc1_pins: pinmux_mmc1_pins {
64 pinctrl-single,pins = <
65 OMAP3_CORE1_IOPAD(0x2144, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
66 OMAP3_CORE1_IOPAD(0x2146, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_cmd.sdmmc1_cmd */
67 OMAP3_CORE1_IOPAD(0x2148, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat0.sdmmc1_dat0 */
68 OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
69 OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
70 OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
71 >;
72 };
73
74 green_led_pins: pinmux_green_led_pins {
75 pinctrl-single,pins = <
76 OMAP3_CORE1_IOPAD(0x21e2, PIN_OUTPUT | MUX_MODE4) /* sys_clkout2.gpio_186 */
77 >;
78 };
79};
80
81&uart3 {
82 pinctrl-names = "default";
83 pinctrl-0 = <&uart3_pins>;
84};
85
86&mmc1 {
87 pinctrl-names = "default";
88 pinctrl-0 = <&mmc1_pins>;
89 bus-width = <4>;
90};
91
92&mmc3 {
93 status = "disabled";
94};
95
96&i2c1 {
97 clock-frequency = <400000>;
98};
99
100&i2c3 {
101 clock-frequency = <400000>;
102};
103&usbhshost {
104 port1-mode = "ehci-phy";
105 port2-mode = "ehci-phy";
106};
107
108&usbhsehci {
109 phys = <&hsusb1_phy &hsusb2_phy>;
110};
diff --git a/arch/arm/boot/dts/omap3-cm-t3x30.dtsi b/arch/arm/boot/dts/omap3-cm-t3x30.dtsi
index 3a9f004d8924..d00055809e31 100644
--- a/arch/arm/boot/dts/omap3-cm-t3x30.dtsi
+++ b/arch/arm/boot/dts/omap3-cm-t3x30.dtsi
@@ -1,28 +1,16 @@
1/* 1/*
2 * Common support for CompuLab CM-T3530 and CM-T3730 2 * Common support for CompuLab CM-T3x30 CoMs
3 */ 3 */
4 4
5/ { 5#include "omap3-cm-t3x.dtsi"
6 memory {
7 device_type = "memory";
8 reg = <0x80000000 0x10000000>; /* 256 MB */
9 };
10 6
7/ {
11 cpus { 8 cpus {
12 cpu@0 { 9 cpu@0 {
13 cpu0-supply = <&vcc>; 10 cpu0-supply = <&vcc>;
14 }; 11 };
15 }; 12 };
16 13
17 leds {
18 compatible = "gpio-leds";
19 ledb {
20 label = "cm-t35:green";
21 gpios = <&gpio6 26 GPIO_ACTIVE_HIGH>; /* gpio186 */
22 linux,default-trigger = "heartbeat";
23 };
24 };
25
26 vddvario: regulator-vddvario { 14 vddvario: regulator-vddvario {
27 compatible = "regulator-fixed"; 15 compatible = "regulator-fixed";
28 regulator-name = "vddvario"; 16 regulator-name = "vddvario";
@@ -36,11 +24,40 @@
36 }; 24 };
37}; 25};
38 26
27&omap3_pmx_core {
28
29 smsc1_pins: pinmux_smsc1_pins {
30 pinctrl-single,pins = <
31 OMAP3_CORE1_IOPAD(0x20b8, PIN_OUTPUT | MUX_MODE0) /* gpmc_ncs5.gpmc_ncs5 */
32 OMAP3_CORE1_IOPAD(0x219a, PIN_INPUT_PULLUP | MUX_MODE4) /* uart3_cts_rctx.gpio_163 */
33 >;
34 };
35
36 hsusb0_pins: pinmux_hsusb0_pins {
37 pinctrl-single,pins = <
38 OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0) /* hsusb0_clk.hsusb0_clk */
39 OMAP3_CORE1_IOPAD(0x21a2, PIN_OUTPUT | MUX_MODE0) /* hsusb0_stp.hsusb0_stp */
40 OMAP3_CORE1_IOPAD(0x21a4, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_dir.hsusb0_dir */
41 OMAP3_CORE1_IOPAD(0x21a6, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_nxt.hsusb0_nxt */
42 OMAP3_CORE1_IOPAD(0x21a8, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data0.hsusb2_data0 */
43 OMAP3_CORE1_IOPAD(0x21aa, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data1.hsusb0_data1 */
44 OMAP3_CORE1_IOPAD(0x21ac, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data2.hsusb0_data2 */
45 OMAP3_CORE1_IOPAD(0x21ae, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data7.hsusb0_data3 */
46 OMAP3_CORE1_IOPAD(0x21b0, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data7.hsusb0_data4 */
47 OMAP3_CORE1_IOPAD(0x21b2, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data7.hsusb0_data5 */
48 OMAP3_CORE1_IOPAD(0x21b4, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data7.hsusb0_data6 */
49 OMAP3_CORE1_IOPAD(0x21b6, PIN_INPUT_PULLDOWN | MUX_MODE0) /* hsusb0_data7.hsusb0_data7 */
50 >;
51 };
52};
53
39&gpmc { 54&gpmc {
40 ranges = <5 0 0x2c000000 0x01000000>; 55 ranges = <5 0 0x2c000000 0x01000000>;
41 56
42 smsc1: ethernet@5,0 { 57 smsc1: ethernet@5,0 {
43 compatible = "smsc,lan9221", "smsc,lan9115"; 58 compatible = "smsc,lan9221", "smsc,lan9115";
59 pinctrl-names = "default";
60 pinctrl-0 = <&smsc1_pins>;
44 interrupt-parent = <&gpio6>; 61 interrupt-parent = <&gpio6>;
45 interrupts = <3 IRQ_TYPE_LEVEL_LOW>; 62 interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
46 reg = <5 0 0xff>; 63 reg = <5 0 0xff>;
@@ -74,8 +91,6 @@
74}; 91};
75 92
76&i2c1 { 93&i2c1 {
77 clock-frequency = <400000>;
78
79 twl: twl@48 { 94 twl: twl@48 {
80 reg = <0x48>; 95 reg = <0x48>;
81 interrupts = <7>; /* SYS_NIRQ cascaded to intc */ 96 interrupts = <7>; /* SYS_NIRQ cascaded to intc */
@@ -86,10 +101,31 @@
86#include "twl4030.dtsi" 101#include "twl4030.dtsi"
87#include "twl4030_omap3.dtsi" 102#include "twl4030_omap3.dtsi"
88 103
89&i2c3 { 104&mmc1 {
90 clock-frequency = <400000>; 105 vmmc-supply = <&vmmc1>;
91}; 106};
92 107
93&twl_gpio { 108&twl_gpio {
94 ti,use-leds; 109 ti,use-leds;
110 /* pullups: BIT(0) */
111 ti,pullups = <0x000001>;
112};
113
114&hsusb1_phy {
115 reset-gpios = <&twl_gpio 6 GPIO_ACTIVE_LOW>;
116};
117
118&hsusb2_phy {
119 reset-gpios = <&twl_gpio 7 GPIO_ACTIVE_LOW>;
120};
121
122&usb_otg_hs {
123 pinctrl-names = "default";
124 pinctrl-0 = <&hsusb0_pins>;
125 interface-type = <0>;
126 usb-phy = <&usb2_phy>;
127 phys = <&usb2_phy>;
128 phy-names = "usb2-phy";
129 mode = <3>;
130 power = <50>;
95}; 131};
diff --git a/arch/arm/boot/dts/omap3-devkit8000.dts b/arch/arm/boot/dts/omap3-devkit8000.dts
index 4665421bb7bc..bf5a515a3247 100644
--- a/arch/arm/boot/dts/omap3-devkit8000.dts
+++ b/arch/arm/boot/dts/omap3-devkit8000.dts
@@ -101,20 +101,8 @@
101 status = "disabled"; 101 status = "disabled";
102}; 102};
103 103
104&mcbsp1 { 104&mcbsp2 {
105 status = "disabled"; 105 status = "okay";
106};
107
108&mcbsp3 {
109 status = "disabled";
110};
111
112&mcbsp4 {
113 status = "disabled";
114};
115
116&mcbsp5 {
117 status = "disabled";
118}; 106};
119 107
120&gpmc { 108&gpmc {
diff --git a/arch/arm/boot/dts/omap3-gta04.dts b/arch/arm/boot/dts/omap3-gta04.dts
index b9b55c95a566..3ad9fddf2eb6 100644
--- a/arch/arm/boot/dts/omap3-gta04.dts
+++ b/arch/arm/boot/dts/omap3-gta04.dts
@@ -36,6 +36,14 @@
36 gpio-key,wakeup; 36 gpio-key,wakeup;
37 }; 37 };
38 }; 38 };
39
40 sound {
41 compatible = "ti,omap-twl4030";
42 ti,model = "gta04";
43
44 ti,mcbsp = <&mcbsp2>;
45 ti,codec = <&twl_audio>;
46 };
39}; 47};
40 48
41&omap3_pmx_core { 49&omap3_pmx_core {
@@ -80,6 +88,12 @@
80 interrupts = <7>; /* SYS_NIRQ cascaded to intc */ 88 interrupts = <7>; /* SYS_NIRQ cascaded to intc */
81 interrupt-parent = <&intc>; 89 interrupt-parent = <&intc>;
82 }; 90 };
91
92 twl_audio: audio {
93 compatible = "ti,twl4030-audio";
94 codec {
95 };
96 };
83}; 97};
84 98
85#include "twl4030.dtsi" 99#include "twl4030.dtsi"
@@ -94,6 +108,14 @@
94 reg = <0x77>; 108 reg = <0x77>;
95 }; 109 };
96 110
111 /* accelerometer */
112 bma180@41 {
113 compatible = "bosch,bma180";
114 reg = <0x41>;
115 interrupt-parent = <&gpio3>;
116 interrupts = <19 IRQ_TYPE_LEVEL_HIGH>;
117 };
118
97 /* leds */ 119 /* leds */
98 tca6507@45 { 120 tca6507@45 {
99 compatible = "ti,tca6507"; 121 compatible = "ti,tca6507";
@@ -122,6 +144,22 @@
122 reg = <0x4>; 144 reg = <0x4>;
123 }; 145 };
124 }; 146 };
147
148 /* compass aka magnetometer */
149 hmc5843@1e {
150 compatible = "honeywell,hmc5843";
151 reg = <0x1e>;
152 };
153
154 /* touchscreen */
155 tsc2007@48 {
156 compatible = "ti,tsc2007";
157 reg = <0x48>;
158 interrupt-parent = <&gpio6>;
159 interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
160 gpios = <&gpio6 0 GPIO_ACTIVE_LOW>;
161 ti,x-plate-ohms = <600>;
162 };
125}; 163};
126 164
127&i2c3 { 165&i2c3 {
@@ -146,7 +184,9 @@
146}; 184};
147 185
148&mmc2 { 186&mmc2 {
149 status = "disabled"; 187 vmmc-supply = <&vaux4>;
188 bus-width = <4>;
189 ti,non-removable;
150}; 190};
151 191
152&mmc3 { 192&mmc3 {
@@ -168,3 +208,12 @@
168 pinctrl-0 = <&uart3_pins>; 208 pinctrl-0 = <&uart3_pins>;
169}; 209};
170 210
211&charger {
212 bb_uvolt = <3200000>;
213 bb_uamp = <150>;
214};
215
216&vaux4 {
217 regulator-min-microvolt = <2800000>;
218 regulator-max-microvolt = <3150000>;
219};
diff --git a/arch/arm/boot/dts/omap3-igep.dtsi b/arch/arm/boot/dts/omap3-igep.dtsi
index c17009323520..b97736d98a64 100644
--- a/arch/arm/boot/dts/omap3-igep.dtsi
+++ b/arch/arm/boot/dts/omap3-igep.dtsi
@@ -170,6 +170,7 @@
170&mcbsp2 { 170&mcbsp2 {
171 pinctrl-names = "default"; 171 pinctrl-names = "default";
172 pinctrl-0 = <&mcbsp2_pins>; 172 pinctrl-0 = <&mcbsp2_pins>;
173 status = "okay";
173}; 174};
174 175
175&mmc1 { 176&mmc1 {
diff --git a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi
new file mode 100644
index 000000000000..6369d9f43ca2
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi
@@ -0,0 +1,459 @@
1/*
2 * Copyright (C) 2014 Christoph Fritz <chf.fritzc@googlemail.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10#include "omap36xx.dtsi"
11
12/ {
13 model = "INCOstartec LILLY-A83X module (DM3730)";
14 compatible = "incostartec,omap3-lilly-a83x", "ti,omap36xx", "ti,omap3";
15
16 chosen {
17 bootargs = "console=ttyO0,115200n8 vt.global_cursor_default=0 consoleblank=0";
18 };
19
20 memory {
21 device_type = "memory";
22 reg = <0x80000000 0x8000000>; /* 128 MB */
23 };
24
25 leds {
26 compatible = "gpio-leds";
27
28 led1 {
29 label = "lilly-a83x::led1";
30 gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
31 linux,default-trigger = "default-on";
32 };
33
34 };
35
36 sound {
37 compatible = "ti,omap-twl4030";
38 ti,model = "lilly-a83x";
39
40 ti,mcbsp = <&mcbsp2>;
41 ti,codec = <&twl_audio>;
42 };
43
44 reg_vcc3: vcc3 {
45 compatible = "regulator-fixed";
46 regulator-name = "VCC3";
47 regulator-min-microvolt = <3300000>;
48 regulator-max-microvolt = <3300000>;
49 regulator-always-on;
50 };
51
52 hsusb1_phy: hsusb1_phy {
53 compatible = "usb-nop-xceiv";
54 vcc-supply = <&reg_vcc3>;
55 };
56};
57
58&omap3_pmx_wkup {
59 pinctrl-names = "default";
60
61 lan9221_pins: pinmux_lan9221_pins {
62 pinctrl-single,pins = <
63 OMAP3_WKUP_IOPAD(0x2a5a, PIN_INPUT | MUX_MODE4) /* reserved.gpio_129 */
64 >;
65 };
66
67 tsc2048_pins: pinmux_tsc2048_pins {
68 pinctrl-single,pins = <
69 OMAP3_WKUP_IOPAD(0x2a16, PIN_INPUT_PULLUP | MUX_MODE4) /* sys_boot6.gpio_8 */
70 >;
71 };
72
73 mmc1cd_pins: pinmux_mmc1cd_pins {
74 pinctrl-single,pins = <
75 OMAP3_WKUP_IOPAD(0x2a56, PIN_INPUT | MUX_MODE4) /* reserved.gpio_126 */
76 >;
77 };
78};
79
80&omap3_pmx_core {
81 pinctrl-names = "default";
82
83 uart1_pins: pinmux_uart1_pins {
84 pinctrl-single,pins = <
85 OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE0) /* uart1_tx.uart1_tx */
86 OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE0) /* uart1_rts.uart1_rts */
87 OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT | MUX_MODE0) /* uart1_cts.uart1_cts */
88 OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | MUX_MODE0) /* uart1_rx.uart1_rx */
89 >;
90 };
91
92 uart2_pins: pinmux_uart2_pins {
93 pinctrl-single,pins = <
94 OMAP3_CORE1_IOPAD(0x2170, PIN_OUTPUT | MUX_MODE1) /* mcbsp3_clkx.uart2_tx */
95 OMAP3_CORE1_IOPAD(0x2172, PIN_INPUT | MUX_MODE1) /* mcbsp3_fsx.uart2_rx */
96 >;
97 };
98
99 uart3_pins: pinmux_uart3_pins {
100 pinctrl-single,pins = <
101 OMAP3_CORE1_IOPAD(0x219e, PIN_INPUT | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */
102 OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx.uart3_tx_irtx */
103 >;
104 };
105
106 i2c1_pins: pinmux_i2c1_pins {
107 pinctrl-single,pins = <
108 OMAP3_CORE1_IOPAD(0x21ba ,PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_scl.i2c1_scl */
109 OMAP3_CORE1_IOPAD(0x21bc ,PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_sda.i2c1_sda */
110 >;
111 };
112
113 i2c2_pins: pinmux_i2c2_pins {
114 pinctrl-single,pins = <
115 OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0) /* i2c2_scl.i2c2_scl */
116 OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0) /* i2c2_sda.i2c2_sda */
117 >;
118 };
119
120 i2c3_pins: pinmux_i2c3_pins {
121 pinctrl-single,pins = <
122 OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0) /* i2c3_scl.i2c3_scl */
123 OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0) /* i2c3_sda.i2c3_sda */
124 >;
125 };
126
127 hsusb1_pins: pinmux_hsusb1_pins {
128 pinctrl-single,pins = <
129
130 /* GPIO 182 controls USB-Hub reset. But USB-Phy its
131 * reset can't be controlled. So we clamp this GPIO to
132 * high (PIN_OFF_OUTPUT_HIGH) to always enable USB-Hub.
133 */
134
135 OMAP3_CORE1_IOPAD(0x21de, PIN_OUTPUT_PULLUP | PIN_OFF_OUTPUT_HIGH | MUX_MODE4) /* mcspi2_cs1.gpio_182 */
136 >;
137 };
138
139 hsusb_otg_pins: pinmux_hsusb_otg_pins {
140 pinctrl-single,pins = <
141 OMAP3_CORE1_IOPAD(0x21a2, PIN_INPUT | MUX_MODE0) /* hsusb0_clk.hsusb0_clk */
142 OMAP3_CORE1_IOPAD(0x21a4, PIN_OUTPUT | MUX_MODE0) /* hsusb0_stp.hsusb0_stp */
143 OMAP3_CORE1_IOPAD(0x21a6, PIN_INPUT | MUX_MODE0) /* hsusb0_dir.hsusb0_dir */
144 OMAP3_CORE1_IOPAD(0x21a8, PIN_INPUT | MUX_MODE0) /* hsusb0_nxt.hsusb0_nxt */
145 OMAP3_CORE1_IOPAD(0x21aa, PIN_INPUT | MUX_MODE0) /* hsusb0_data0.hsusb0_data0 */
146 OMAP3_CORE1_IOPAD(0x21ac, PIN_INPUT | MUX_MODE0) /* hsusb0_data1.hsusb0_data1 */
147 OMAP3_CORE1_IOPAD(0x21ae, PIN_INPUT | MUX_MODE0) /* hsusb0_data2.hsusb0_data2 */
148 OMAP3_CORE1_IOPAD(0x21b0, PIN_INPUT | MUX_MODE0) /* hsusb0_data3.hsusb0_data3 */
149 OMAP3_CORE1_IOPAD(0x21b2, PIN_INPUT | MUX_MODE0) /* hsusb0_data4.hsusb0_data4 */
150 OMAP3_CORE1_IOPAD(0x21b4, PIN_INPUT | MUX_MODE0) /* hsusb0_data5.hsusb0_data5 */
151 OMAP3_CORE1_IOPAD(0x21b6, PIN_INPUT | MUX_MODE0) /* hsusb0_data6.hsusb0_data6 */
152 OMAP3_CORE1_IOPAD(0x21b8, PIN_INPUT | MUX_MODE0) /* hsusb0_data7.hsusb0_data7 */
153 >;
154 };
155
156 mmc1_pins: pinmux_mmc1_pins {
157 pinctrl-single,pins = <
158 OMAP3_CORE1_IOPAD(0x2144, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
159 OMAP3_CORE1_IOPAD(0x2146, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_cmd.sdmmc1_cmd */
160 OMAP3_CORE1_IOPAD(0x2148, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat0.sdmmc1_dat0 */
161 OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
162 OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
163 OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
164 >;
165 };
166
167 spi2_pins: pinmux_spi2_pins {
168 pinctrl-single,pins = <
169 OMAP3_CORE1_IOPAD(0x21d6, PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcspi2_clk.mcspi2_clk */
170 OMAP3_CORE1_IOPAD(0x21d8, PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcspi2_simo.mcspi2_simo */
171 OMAP3_CORE1_IOPAD(0x21da, PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcspi2_somi.mcspi2_somi */
172 OMAP3_CORE1_IOPAD(0x21dc, PIN_OUTPUT | MUX_MODE0) /* mcspi2_cs0.mcspi2_cs0 */
173 >;
174 };
175};
176
177&omap3_pmx_core2 {
178 pinctrl-names = "default";
179 pinctrl-0 = <
180 &hsusb1_2_pins
181 >;
182
183 hsusb1_2_pins: pinmux_hsusb1_2_pins {
184 pinctrl-single,pins = <
185 OMAP3630_CORE2_IOPAD(0x25d8, PIN_OUTPUT | MUX_MODE3) /* etk_clk.hsusb1_stp */
186 OMAP3630_CORE2_IOPAD(0x25da, PIN_INPUT | MUX_MODE3) /* etk_ctl.hsusb1_clk */
187 OMAP3630_CORE2_IOPAD(0x25dc, PIN_INPUT | MUX_MODE3) /* etk_d0.hsusb1_data0 */
188 OMAP3630_CORE2_IOPAD(0x25de, PIN_INPUT | MUX_MODE3) /* etk_d1.hsusb1_data1 */
189 OMAP3630_CORE2_IOPAD(0x25e0, PIN_INPUT | MUX_MODE3) /* etk_d2.hsusb1_data2 */
190 OMAP3630_CORE2_IOPAD(0x25e2, PIN_INPUT | MUX_MODE3) /* etk_d3.hsusb1_data7 */
191 OMAP3630_CORE2_IOPAD(0x25e4, PIN_INPUT | MUX_MODE3) /* etk_d4.hsusb1_data4 */
192 OMAP3630_CORE2_IOPAD(0x25e6, PIN_INPUT | MUX_MODE3) /* etk_d5.hsusb1_data5 */
193 OMAP3630_CORE2_IOPAD(0x25e8, PIN_INPUT | MUX_MODE3) /* etk_d6.hsusb1_data6 */
194 OMAP3630_CORE2_IOPAD(0x25ea, PIN_INPUT | MUX_MODE3) /* etk_d7.hsusb1_data3 */
195 OMAP3630_CORE2_IOPAD(0x25ec, PIN_INPUT | MUX_MODE3) /* etk_d8.hsusb1_dir */
196 OMAP3630_CORE2_IOPAD(0x25ee, PIN_INPUT | MUX_MODE3) /* etk_d9.hsusb1_nxt */
197 >;
198 };
199
200 gpio1_pins: pinmux_gpio1_pins {
201 pinctrl-single,pins = <
202 OMAP3630_CORE2_IOPAD(0x25fa, PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* etk_d15.gpio_29 */
203 >;
204 };
205
206};
207
208&gpio1 {
209 pinctrl-names = "default";
210 pinctrl-0 = <&gpio1_pins>;
211};
212
213&gpio6 {
214 pinctrl-names = "default";
215 pinctrl-0 = <&hsusb1_pins>;
216};
217
218&i2c1 {
219 clock-frequency = <2600000>;
220 pinctrl-names = "default";
221 pinctrl-0 = <&i2c1_pins>;
222
223 twl: twl@48 {
224 reg = <0x48>;
225 interrupts = <7>; /* SYS_NIRQ cascaded to intc */
226 interrupt-parent = <&intc>;
227
228 twl_audio: audio {
229 compatible = "ti,twl4030-audio";
230 codec {
231 };
232 };
233 };
234};
235
236#include "twl4030.dtsi"
237#include "twl4030_omap3.dtsi"
238
239&twl {
240 vmmc1: regulator-vmmc1 {
241 regulator-always-on;
242 };
243
244 vdd1: regulator-vdd1 {
245 regulator-always-on;
246 };
247
248 vdd2: regulator-vdd2 {
249 regulator-always-on;
250 };
251};
252
253&i2c2 {
254 clock-frequency = <2600000>;
255 pinctrl-names = "default";
256 pinctrl-0 = <&i2c2_pins>;
257};
258
259&i2c3 {
260 clock-frequency = <2600000>;
261 pinctrl-names = "default";
262 pinctrl-0 = <&i2c3_pins>;
263 gpiom1: gpio@20 {
264 compatible = "mcp,mcp23017";
265 gpio-controller;
266 #gpio-cells = <2>;
267 reg = <0x20>;
268 };
269};
270
271&uart1 {
272 pinctrl-names = "default";
273 pinctrl-0 = <&uart1_pins>;
274};
275
276&uart2 {
277 pinctrl-names = "default";
278 pinctrl-0 = <&uart2_pins>;
279};
280
281&uart3 {
282 pinctrl-names = "default";
283 pinctrl-0 = <&uart3_pins>;
284};
285
286&uart4 {
287 status = "disabled";
288};
289
290&mmc1 {
291 cd-gpios = <&gpio4 30 IRQ_TYPE_LEVEL_LOW>;
292 cd-inverted;
293 vmmc-supply = <&vmmc1>;
294 bus-width = <4>;
295 pinctrl-names = "default";
296 pinctrl-0 = <&mmc1_pins &mmc1cd_pins>;
297 cap-sdio-irq;
298 cap-sd-highspeed;
299 cap-mmc-highspeed;
300};
301
302&mmc2 {
303 status = "disabled";
304};
305
306&mmc3 {
307 status = "disabled";
308};
309
310&mcspi2 {
311 status = "okay";
312 pinctrl-names = "default";
313 pinctrl-0 = <&spi2_pins>;
314
315 tsc2046@0 {
316 reg = <0>; /* CS0 */
317 compatible = "ti,tsc2046";
318 interrupt-parent = <&gpio1>;
319 interrupts = <8 0>; /* boot6 / gpio_8 */
320 spi-max-frequency = <1000000>;
321 pendown-gpio = <&gpio1 8 0>;
322 vcc-supply = <&reg_vcc3>;
323 pinctrl-names = "default";
324 pinctrl-0 = <&tsc2048_pins>;
325
326 ti,x-min = <300>;
327 ti,x-max = <3000>;
328 ti,y-min = <600>;
329 ti,y-max = <3600>;
330 ti,x-plate-ohms = <80>;
331 ti,pressure-max = <255>;
332 ti,swap-xy;
333
334 linux,wakeup;
335 };
336};
337
338&usbhsehci {
339 phys = <&hsusb1_phy>;
340};
341
342&usbhshost {
343 pinctrl-names = "default";
344 pinctrl-0 = <&hsusb1_2_pins>;
345 num-ports = <2>;
346 port1-mode = "ehci-phy";
347};
348
349&usb_otg_hs {
350 pinctrl-names = "default";
351 pinctrl-0 = <&hsusb_otg_pins>;
352 interface-type = <0>;
353 usb-phy = <&usb2_phy>;
354 phys = <&usb2_phy>;
355 phy-names = "usb2-phy";
356 mode = <3>;
357 power = <50>;
358};
359
360&gpmc {
361 ranges = <0 0 0x30000000 0x1000000>,
362 <7 0 0x15000000 0x01000000>;
363
364 nand@0,0 {
365 reg = <0 0 0x1000000>;
366 nand-bus-width = <16>;
367 ti,nand-ecc-opt = "bch8";
368 /* no elm on omap3 */
369
370 gpmc,mux-add-data = <0>;
371 gpmc,device-nand;
372 gpmc,device-width = <2>;
373 gpmc,wait-pin = <0>;
374 gpmc,wait-monitoring-ns = <0>;
375 gpmc,burst-length= <4>;
376 gpmc,cs-on-ns = <0>;
377 gpmc,cs-rd-off-ns = <100>;
378 gpmc,cs-wr-off-ns = <100>;
379 gpmc,adv-on-ns = <0>;
380 gpmc,adv-rd-off-ns = <100>;
381 gpmc,adv-wr-off-ns = <100>;
382 gpmc,oe-on-ns = <5>;
383 gpmc,oe-off-ns = <75>;
384 gpmc,we-on-ns = <5>;
385 gpmc,we-off-ns = <75>;
386 gpmc,rd-cycle-ns = <100>;
387 gpmc,wr-cycle-ns = <100>;
388 gpmc,access-ns = <60>;
389 gpmc,page-burst-access-ns = <5>;
390 gpmc,bus-turnaround-ns = <0>;
391 gpmc,cycle2cycle-samecsen;
392 gpmc,cycle2cycle-delay-ns = <50>;
393 gpmc,wr-data-mux-bus-ns = <75>;
394 gpmc,wr-access-ns = <155>;
395
396 #address-cells = <1>;
397 #size-cells = <1>;
398
399 partition@0 {
400 label = "MLO";
401 reg = <0 0x80000>;
402 };
403
404 partition@0x80000 {
405 label = "u-boot";
406 reg = <0x80000 0x1e0000>;
407 };
408
409 partition@0x260000 {
410 label = "u-boot-environment";
411 reg = <0x260000 0x20000>;
412 };
413
414 partition@0x280000 {
415 label = "kernel";
416 reg = <0x280000 0x500000>;
417 };
418
419 partition@0x780000 {
420 label = "filesystem";
421 reg = <0x780000 0xf880000>;
422 };
423 };
424
425 ethernet@7,0 {
426 compatible = "smsc,lan9221", "smsc,lan9115";
427 bank-width = <2>;
428 gpmc,mux-add-data = <2>;
429 gpmc,cs-on-ns = <10>;
430 gpmc,cs-rd-off-ns = <60>;
431 gpmc,cs-wr-off-ns = <60>;
432 gpmc,adv-on-ns = <0>;
433 gpmc,adv-rd-off-ns = <10>;
434 gpmc,adv-wr-off-ns = <10>;
435 gpmc,oe-on-ns = <10>;
436 gpmc,oe-off-ns = <60>;
437 gpmc,we-on-ns = <10>;
438 gpmc,we-off-ns = <60>;
439 gpmc,rd-cycle-ns = <100>;
440 gpmc,wr-cycle-ns = <100>;
441 gpmc,access-ns = <50>;
442 gpmc,page-burst-access-ns = <5>;
443 gpmc,bus-turnaround-ns = <0>;
444 gpmc,cycle2cycle-delay-ns = <75>;
445 gpmc,wr-data-mux-bus-ns = <15>;
446 gpmc,wr-access-ns = <75>;
447 gpmc,cycle2cycle-samecsen;
448 gpmc,cycle2cycle-diffcsen;
449 vddvario-supply = <&reg_vcc3>;
450 vdd33a-supply = <&reg_vcc3>;
451 reg-io-width = <4>;
452 interrupt-parent = <&gpio5>;
453 interrupts = <1 0x2>;
454 reg = <7 0 0xff>;
455 pinctrl-names = "default";
456 pinctrl-0 = <&lan9221_pins>;
457 phy-mode = "mii";
458 };
459};
diff --git a/arch/arm/boot/dts/omap3-lilly-dbb056.dts b/arch/arm/boot/dts/omap3-lilly-dbb056.dts
new file mode 100644
index 000000000000..834f7c65f62d
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-lilly-dbb056.dts
@@ -0,0 +1,170 @@
1/*
2 * Copyright (C) 2014 Christoph Fritz <chf.fritzc@googlemail.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9/dts-v1/;
10
11#include "omap3-lilly-a83x.dtsi"
12
13/ {
14 model = "INCOstartec LILLY-DBB056 (DM3730)";
15 compatible = "incostartec,omap3-lilly-dbb056", "incostartec,omap3-lilly-a83x", "ti,omap36xx", "ti,omap3";
16};
17
18&twl {
19 vaux2: regulator-vaux2 {
20 compatible = "ti,twl4030-vaux2";
21 regulator-min-microvolt = <2800000>;
22 regulator-max-microvolt = <2800000>;
23 regulator-always-on;
24 };
25};
26
27&omap3_pmx_core {
28 pinctrl-names = "default";
29 pinctrl-0 = <&lcd_pins>;
30
31 lan9117_pins: pinmux_lan9117_pins {
32 pinctrl-single,pins = <
33 OMAP3_CORE1_IOPAD(0x2114, PIN_INPUT | MUX_MODE4) /* cam_fld.gpio_98 */
34 >;
35 };
36
37 gpio4_pins: pinmux_gpio4_pins {
38 pinctrl-single,pins = <
39 OMAP3_CORE1_IOPAD(0x212e, PIN_INPUT | MUX_MODE4) /* cam_xclkb.gpio_111 -> sja1000 IRQ */
40 >;
41 };
42
43 gpio5_pins: pinmux_gpio5_pins {
44 pinctrl-single,pins = <
45 OMAP3_CORE1_IOPAD(0x218c, PIN_OUTPUT | PIN_OFF_OUTPUT_HIGH | MUX_MODE4) /* mcbsp1_clk.gpio_156 -> enable DSS */
46 >;
47 };
48
49 lcd_pins: pinmux_lcd_pins {
50 pinctrl-single,pins = <
51 OMAP3_CORE1_IOPAD(0x20d4, PIN_OUTPUT | MUX_MODE0) /* dss_pclk.dss_pclk */
52 OMAP3_CORE1_IOPAD(0x20d6, PIN_OUTPUT | MUX_MODE0) /* dss_hsync.dss_hsync */
53 OMAP3_CORE1_IOPAD(0x20d8, PIN_OUTPUT | MUX_MODE0) /* dss_vsync.dss_vsync */
54 OMAP3_CORE1_IOPAD(0x20da, PIN_OUTPUT | MUX_MODE0) /* dss_acbias.dss_acbias */
55 OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE0) /* dss_data0.dss_data0 */
56 OMAP3_CORE1_IOPAD(0x20de, PIN_OUTPUT | MUX_MODE0) /* dss_data1.dss_data1 */
57 OMAP3_CORE1_IOPAD(0x20e0, PIN_OUTPUT | MUX_MODE0) /* dss_data2.dss_data2 */
58 OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE0) /* dss_data3.dss_data3 */
59 OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE0) /* dss_data4.dss_data4 */
60 OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE0) /* dss_data5.dss_data5 */
61 OMAP3_CORE1_IOPAD(0x20e8, PIN_OUTPUT | MUX_MODE0) /* dss_data6.dss_data6 */
62 OMAP3_CORE1_IOPAD(0x20ea, PIN_OUTPUT | MUX_MODE0) /* dss_data7.dss_data7 */
63 OMAP3_CORE1_IOPAD(0x20ec, PIN_OUTPUT | MUX_MODE0) /* dss_data8.dss_data8 */
64 OMAP3_CORE1_IOPAD(0x20ee, PIN_OUTPUT | MUX_MODE0) /* dss_data9.dss_data9 */
65 OMAP3_CORE1_IOPAD(0x20f0, PIN_OUTPUT | MUX_MODE0) /* dss_data10.dss_data10 */
66 OMAP3_CORE1_IOPAD(0x20f2, PIN_OUTPUT | MUX_MODE0) /* dss_data11.dss_data11 */
67 OMAP3_CORE1_IOPAD(0x20f4, PIN_OUTPUT | MUX_MODE0) /* dss_data12.dss_data12 */
68 OMAP3_CORE1_IOPAD(0x20f6, PIN_OUTPUT | MUX_MODE0) /* dss_data13.dss_data13 */
69 OMAP3_CORE1_IOPAD(0x20f8, PIN_OUTPUT | MUX_MODE0) /* dss_data14.dss_data14 */
70 OMAP3_CORE1_IOPAD(0x20fa, PIN_OUTPUT | MUX_MODE0) /* dss_data15.dss_data15 */
71 OMAP3_CORE1_IOPAD(0x20fc, PIN_OUTPUT | MUX_MODE0) /* dss_data16.dss_data16 */
72 OMAP3_CORE1_IOPAD(0x20fe, PIN_OUTPUT | MUX_MODE0) /* dss_data17.dss_data17 */
73 >;
74 };
75
76 mmc2_pins: pinmux_mmc2_pins {
77 pinctrl-single,pins = <
78 OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */
79 OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */
80 OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */
81 OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */
82 OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */
83 OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */
84 OMAP3_CORE1_IOPAD(0x2164, PIN_OUTPUT | MUX_MODE1) /* sdmmc2_dat4.sdmmc2_dir_dat0 */
85 OMAP3_CORE1_IOPAD(0x2166, PIN_OUTPUT | MUX_MODE1) /* sdmmc2_dat5.sdmmc2_dir_dat1 */
86 OMAP3_CORE1_IOPAD(0x2168, PIN_OUTPUT | MUX_MODE1) /* sdmmc2_dat6.sdmmc2_dir_cmd */
87 OMAP3_CORE1_IOPAD(0x216a, PIN_INPUT | MUX_MODE1) /* sdmmc2_dat7.sdmmc2_clkin */
88 OMAP3_CORE1_IOPAD(0x219a, PIN_INPUT_PULLUP | MUX_MODE4) /* uart3_cts_rctx.gpio_163 -> wp */
89 OMAP3_CORE1_IOPAD(0x219c, PIN_INPUT_PULLUP | MUX_MODE4) /* uart3_rts_sd.gpio_164 -> cd */
90 >;
91 };
92
93 spi1_pins: pinmux_spi1_pins {
94 pinctrl-single,pins = <
95 OMAP3_CORE1_IOPAD(0x21c8, PIN_INPUT | MUX_MODE0) /* mcspi1_clk.mcspi1_clk */
96 OMAP3_CORE1_IOPAD(0x21ca, PIN_INPUT | MUX_MODE0) /* mcspi1_simo.mcspi1_simo */
97 OMAP3_CORE1_IOPAD(0x21cc, PIN_INPUT | MUX_MODE0) /* mcspi1_somi.mcspi1_somi */
98 OMAP3_CORE1_IOPAD(0x21ce, PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcspi1_cs0.mcspi1_cs0 */
99 >;
100 };
101};
102
103&gpio4 {
104 pinctrl-names = "default";
105 pinctrl-0 = <&gpio4_pins>;
106};
107
108&gpio5 {
109 pinctrl-names = "default";
110 pinctrl-0 = <&gpio5_pins>;
111};
112
113&mmc2 {
114 status = "okay";
115 bus-width = <4>;
116 vmmc-supply = <&vmmc1>;
117 cd-gpios = <&gpio6 4 0>; /* gpio_164 */
118 wp-gpios = <&gpio6 3 0>; /* gpio_163 */
119 pinctrl-names = "default";
120 pinctrl-0 = <&mmc2_pins>;
121 ti,dual-volt;
122};
123
124&mcspi1 {
125 status = "okay";
126 pinctrl-names = "default";
127 pinctrl-0 = <&spi1_pins>;
128};
129
130&gpmc {
131 ranges = <0 0 0x30000000 0x1000000>, /* nand assigned by COM a83x */
132 <4 0 0x20000000 0x01000000>,
133 <7 0 0x15000000 0x01000000>; /* eth assigend by COM a83x */
134
135 ethernet@4,0 {
136 compatible = "smsc,lan9117", "smsc,lan9115";
137 bank-width = <2>;
138 gpmc,mux-add-data = <2>;
139 gpmc,cs-on-ns = <10>;
140 gpmc,cs-rd-off-ns = <65>;
141 gpmc,cs-wr-off-ns = <65>;
142 gpmc,adv-on-ns = <0>;
143 gpmc,adv-rd-off-ns = <10>;
144 gpmc,adv-wr-off-ns = <10>;
145 gpmc,oe-on-ns = <10>;
146 gpmc,oe-off-ns = <65>;
147 gpmc,we-on-ns = <10>;
148 gpmc,we-off-ns = <65>;
149 gpmc,rd-cycle-ns = <100>;
150 gpmc,wr-cycle-ns = <100>;
151 gpmc,access-ns = <60>;
152 gpmc,page-burst-access-ns = <5>;
153 gpmc,bus-turnaround-ns = <0>;
154 gpmc,cycle2cycle-delay-ns = <75>;
155 gpmc,wr-data-mux-bus-ns = <15>;
156 gpmc,wr-access-ns = <75>;
157 gpmc,cycle2cycle-samecsen;
158 gpmc,cycle2cycle-diffcsen;
159 vddvario-supply = <&reg_vcc3>;
160 vdd33a-supply = <&reg_vcc3>;
161 reg-io-width = <4>;
162 interrupt-parent = <&gpio4>;
163 interrupts = <2 0x2>;
164 reg = <4 0 0xff>;
165 pinctrl-names = "default";
166 pinctrl-0 = <&lan9117_pins>;
167 phy-mode = "mii";
168 smsc,force-internal-phy;
169 };
170};
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts
index 6fc85f963530..64aa416ee4c1 100644
--- a/arch/arm/boot/dts/omap3-n900.dts
+++ b/arch/arm/boot/dts/omap3-n900.dts
@@ -74,6 +74,11 @@
74 }; 74 };
75 }; 75 };
76 76
77 isp1704: isp1704 {
78 compatible = "nxp,isp1704";
79 nxp,enable-gpio = <&gpio3 3 GPIO_ACTIVE_HIGH>;
80 usb-phy = <&usb2_phy>;
81 };
77}; 82};
78 83
79&omap3_pmx_core { 84&omap3_pmx_core {
@@ -254,6 +259,61 @@
254 }; 259 };
255}; 260};
256 261
262&twl_keypad {
263 linux,keymap = < 0x00000010 /* KEY_Q */
264 0x00010018 /* KEY_O */
265 0x00020019 /* KEY_P */
266 0x00030033 /* KEY_COMMA */
267 0x0004000e /* KEY_BACKSPACE */
268 0x0006001e /* KEY_A */
269 0x0007001f /* KEY_S */
270
271 0x01000011 /* KEY_W */
272 0x01010020 /* KEY_D */
273 0x01020021 /* KEY_F */
274 0x01030022 /* KEY_G */
275 0x01040023 /* KEY_H */
276 0x01050024 /* KEY_J */
277 0x01060025 /* KEY_K */
278 0x01070026 /* KEY_L */
279
280 0x02000012 /* KEY_E */
281 0x02010034 /* KEY_DOT */
282 0x02020067 /* KEY_UP */
283 0x0203001c /* KEY_ENTER */
284 0x0205002c /* KEY_Z */
285 0x0206002d /* KEY_X */
286 0x0207002e /* KEY_C */
287 0x02080043 /* KEY_F9 */
288
289 0x03000013 /* KEY_R */
290 0x0301002f /* KEY_V */
291 0x03020030 /* KEY_B */
292 0x03030031 /* KEY_N */
293 0x03040032 /* KEY_M */
294 0x03050039 /* KEY_SPACE */
295 0x03060039 /* KEY_SPACE */
296 0x03070069 /* KEY_LEFT */
297
298 0x04000014 /* KEY_T */
299 0x0401006c /* KEY_DOWN */
300 0x0402006a /* KEY_RIGHT */
301 0x0404001d /* KEY_LEFTCTRL */
302 0x04050064 /* KEY_RIGHTALT */
303 0x0406002a /* KEY_LEFTSHIFT */
304 0x04080044 /* KEY_F10 */
305
306 0x05000015 /* KEY_Y */
307 0x05080057 /* KEY_F11 */
308
309 0x06000016 /* KEY_U */
310
311 0x07000017 /* KEY_I */
312 0x07010041 /* KEY_F7 */
313 0x07020042 /* KEY_F8 */
314 >;
315};
316
257&twl_gpio { 317&twl_gpio {
258 ti,pullups = <0x0>; 318 ti,pullups = <0x0>;
259 ti,pulldowns = <0x03ff3f>; /* BIT(0..5) | BIT(8..17) */ 319 ti,pulldowns = <0x03ff3f>; /* BIT(0..5) | BIT(8..17) */
@@ -291,6 +351,13 @@
291 DVDD-supply = <&vio>; 351 DVDD-supply = <&vio>;
292 }; 352 };
293 353
354 tsl2563: tsl2563@29 {
355 compatible = "amstaos,tsl2563";
356 reg = <0x29>;
357
358 amstaos,cover-comp-gain = <16>;
359 };
360
294 lp5523: lp5523@32 { 361 lp5523: lp5523@32 {
295 compatible = "national,lp5523"; 362 compatible = "national,lp5523";
296 reg = <0x32>; 363 reg = <0x32>;
@@ -356,6 +423,29 @@
356 compatible = "ti,bq27200"; 423 compatible = "ti,bq27200";
357 reg = <0x55>; 424 reg = <0x55>;
358 }; 425 };
426
427 tpa6130a2: tpa6130a2@60 {
428 compatible = "ti,tpa6130a2";
429 reg = <0x60>;
430
431 Vdd-supply = <&vmmc2>;
432
433 power-gpio = <&gpio4 2 GPIO_ACTIVE_HIGH>; /* 98 */
434 };
435
436 bq24150a: bq24150a@6b {
437 compatible = "ti,bq24150a";
438 reg = <0x6b>;
439
440 ti,current-limit = <100>;
441 ti,weak-battery-voltage = <3400>;
442 ti,battery-regulation-voltage = <4200>;
443 ti,charge-current = <650>;
444 ti,termination-current = <100>;
445 ti,resistor-sense = <68>;
446
447 ti,usb-charger-detection = <&isp1704>;
448 };
359}; 449};
360 450
361&i2c3 { 451&i2c3 {
diff --git a/arch/arm/boot/dts/omap3-overo.dtsi b/arch/arm/boot/dts/omap3-overo.dtsi
index a461d2fd1fb0..b08142f755fd 100644
--- a/arch/arm/boot/dts/omap3-overo.dtsi
+++ b/arch/arm/boot/dts/omap3-overo.dtsi
@@ -95,3 +95,7 @@
95 pinctrl-names = "default"; 95 pinctrl-names = "default";
96 pinctrl-0 = <&uart3_pins>; 96 pinctrl-0 = <&uart3_pins>;
97}; 97};
98
99&mcbsp2 {
100 status = "okay";
101};
diff --git a/arch/arm/boot/dts/omap3-sb-t35.dtsi b/arch/arm/boot/dts/omap3-sb-t35.dtsi
index b9a2fedce7ee..7909c51b05a5 100644
--- a/arch/arm/boot/dts/omap3-sb-t35.dtsi
+++ b/arch/arm/boot/dts/omap3-sb-t35.dtsi
@@ -2,11 +2,36 @@
2 * Common support for CompuLab SB-T35 used on SBC-T3530, SBC-T3517 and SBC-T3730 2 * Common support for CompuLab SB-T35 used on SBC-T3530, SBC-T3517 and SBC-T3730
3 */ 3 */
4 4
5/ {
6 vddvario_sb_t35: regulator-vddvario-sb-t35 {
7 compatible = "regulator-fixed";
8 regulator-name = "vddvario";
9 regulator-always-on;
10 };
11
12 vdd33a_sb_t35: regulator-vdd33a-sb-t35 {
13 compatible = "regulator-fixed";
14 regulator-name = "vdd33a";
15 regulator-always-on;
16 };
17};
18
19&omap3_pmx_core {
20 smsc2_pins: pinmux_smsc2_pins {
21 pinctrl-single,pins = <
22 OMAP3_CORE1_IOPAD(0x20b6, PIN_OUTPUT | MUX_MODE0) /* gpmc_ncs4.gpmc_ncs4 */
23 OMAP3_CORE1_IOPAD(0x20d2, PIN_INPUT_PULLUP | MUX_MODE4) /* gpmc_wait3.gpio_65 */
24 >;
25 };
26};
27
5&gpmc { 28&gpmc {
6 ranges = <4 0 0x2d000000 0x01000000>; 29 ranges = <4 0 0x2d000000 0x01000000>;
7 30
8 smsc2: ethernet@4,0 { 31 smsc2: ethernet@4,0 {
9 compatible = "smsc,lan9221", "smsc,lan9115"; 32 compatible = "smsc,lan9221", "smsc,lan9115";
33 pinctrl-names = "default";
34 pinctrl-0 = <&smsc2_pins>;
10 interrupt-parent = <&gpio3>; 35 interrupt-parent = <&gpio3>;
11 interrupts = <1 IRQ_TYPE_LEVEL_LOW>; 36 interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
12 reg = <4 0 0xff>; 37 reg = <4 0 0xff>;
@@ -32,8 +57,8 @@
32 gpmc,wr-access-ns = <186>; 57 gpmc,wr-access-ns = <186>;
33 gpmc,cycle2cycle-samecsen; 58 gpmc,cycle2cycle-samecsen;
34 gpmc,cycle2cycle-diffcsen; 59 gpmc,cycle2cycle-diffcsen;
35 vddvario-supply = <&vddvario>; 60 vddvario-supply = <&vddvario_sb_t35>;
36 vdd33a-supply = <&vdd33a>; 61 vdd33a-supply = <&vdd33a_sb_t35>;
37 reg-io-width = <4>; 62 reg-io-width = <4>;
38 smsc,save-mac-address; 63 smsc,save-mac-address;
39 }; 64 };
diff --git a/arch/arm/boot/dts/omap3-sbc-t3517.dts b/arch/arm/boot/dts/omap3-sbc-t3517.dts
new file mode 100644
index 000000000000..024c9c6c682d
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-sbc-t3517.dts
@@ -0,0 +1,43 @@
1/*
2 * Suppport for CompuLab SBC-T3517 with CM-T3517
3 */
4
5#include "omap3-cm-t3517.dts"
6#include "omap3-sb-t35.dtsi"
7
8/ {
9 model = "CompuLab SBC-T3517 with CM-T3517";
10 compatible = "compulab,omap3-sbc-t3517", "compulab,omap3-cm-t3517", "ti,am3517", "ti,omap3";
11};
12
13&omap3_pmx_core {
14 pinctrl-names = "default";
15 pinctrl-0 = <
16 &sb_t35_usb_hub_pins
17 &usb_hub_pins
18 >;
19
20 mmc1_aux_pins: pinmux_mmc1_aux_pins {
21 pinctrl-single,pins = <
22 OMAP3_CORE1_IOPAD(0x20c0, PIN_INPUT_PULLUP | MUX_MODE4) /* gpmc_clk.gpio_59 */
23 OMAP3_CORE1_IOPAD(0x2174, PIN_INPUT_PULLUP | MUX_MODE4) /* uart2_cts.gpio_144 */
24 >;
25 };
26
27 sb_t35_usb_hub_pins: pinmux_sb_t35_usb_hub_pins {
28 pinctrl-single,pins = <
29 OMAP3_CORE1_IOPAD(0x21ec, PIN_OUTPUT | MUX_MODE4) /* ccdc_wen.gpio_98 - SB-T35 USB HUB RST */
30 >;
31 };
32};
33
34&mmc1 {
35 pinctrl-names = "default";
36 pinctrl-0 = <
37 &mmc1_pins
38 &mmc1_aux_pins
39 >;
40
41 wp-gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>; /* gpio_59 */
42 cd-gpios = <&gpio5 16 GPIO_ACTIVE_HIGH>; /* gpio_144 */
43};
diff --git a/arch/arm/boot/dts/omap3-sbc-t3530.dts b/arch/arm/boot/dts/omap3-sbc-t3530.dts
new file mode 100644
index 000000000000..bbbeea6b1988
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-sbc-t3530.dts
@@ -0,0 +1,36 @@
1/*
2 * Suppport for CompuLab SBC-T3530 with CM-T3530
3 */
4
5#include "omap3-cm-t3530.dts"
6#include "omap3-sb-t35.dtsi"
7
8/ {
9 model = "CompuLab SBC-T3530 with CM-T3530";
10 compatible = "compulab,omap3-sbc-t3530", "compulab,omap3-cm-t3530", "ti,omap34xx", "ti,omap3";
11};
12
13&omap3_pmx_core {
14 pinctrl-names = "default";
15 pinctrl-0 = <&sb_t35_usb_hub_pins>;
16
17 sb_t35_usb_hub_pins: pinmux_sb_t35_usb_hub_pins {
18 pinctrl-single,pins = <
19 OMAP3_CORE1_IOPAD(0x2130, PIN_OUTPUT | MUX_MODE4) /* ccdc_wen.gpio_167 - SB-T35 USB HUB RST */
20 >;
21 };
22};
23
24/*
25 * The following ranges correspond to SMSC9x eth chips on CM-T3530 CoM and
26 * SB-T35 baseboard respectively.
27 * This setting includes both chips in SBC-T3530 board device tree.
28 */
29&gpmc {
30 ranges = <5 0 0x2c000000 0x01000000>,
31 <4 0 0x2d000000 0x01000000>;
32};
33
34&mmc1 {
35 cd-gpios = <&twl_gpio 0 GPIO_ACTIVE_HIGH>;
36};
diff --git a/arch/arm/boot/dts/omap3-sbc-t3730.dts b/arch/arm/boot/dts/omap3-sbc-t3730.dts
index c119bd545053..08e4a7086f22 100644
--- a/arch/arm/boot/dts/omap3-sbc-t3730.dts
+++ b/arch/arm/boot/dts/omap3-sbc-t3730.dts
@@ -10,21 +10,18 @@
10 compatible = "compulab,omap3-sbc-t3730", "compulab,omap3-cm-t3730", "ti,omap36xx", "ti,omap3"; 10 compatible = "compulab,omap3-sbc-t3730", "compulab,omap3-cm-t3730", "ti,omap36xx", "ti,omap3";
11}; 11};
12 12
13&gpmc { 13&omap3_pmx_core {
14 ranges = <5 0 0x2c000000 0x01000000>,
15 <4 0 0x2d000000 0x01000000>;
16};
17
18&smsc2 {
19 pinctrl-names = "default"; 14 pinctrl-names = "default";
20 pinctrl-0 = <&smsc2_pins>; 15 pinctrl-0 = <&sb_t35_usb_hub_pins>;
21};
22 16
23&omap3_pmx_core { 17 sb_t35_usb_hub_pins: pinmux_sb_t35_usb_hub_pins {
24 smsc2_pins: pinmux_smsc2_pins {
25 pinctrl-single,pins = < 18 pinctrl-single,pins = <
26 0x86 (PIN_OUTPUT | MUX_MODE0) /* gpmc_ncs4.gpmc_ncs4 */ 19 OMAP3_CORE1_IOPAD(0x2130, PIN_OUTPUT | MUX_MODE4) /* ccdc_wen.gpio_167 - SB-T35 USB HUB RST */
27 0xa2 (PIN_INPUT_PULLUP | MUX_MODE4) /* gpmc_wait3.gpio_65 */
28 >; 20 >;
29 }; 21 };
30}; \ No newline at end of file 22};
23
24&gpmc {
25 ranges = <5 0 0x2c000000 0x01000000>,
26 <4 0 0x2d000000 0x01000000>;
27};
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
index a5fc83b9c835..b91117a38100 100644
--- a/arch/arm/boot/dts/omap3.dtsi
+++ b/arch/arm/boot/dts/omap3.dtsi
@@ -35,6 +35,11 @@
35 compatible = "arm,cortex-a8"; 35 compatible = "arm,cortex-a8";
36 device_type = "cpu"; 36 device_type = "cpu";
37 reg = <0x0>; 37 reg = <0x0>;
38
39 clocks = <&dpll1_ck>;
40 clock-names = "cpu";
41
42 clock-latency = <300000>; /* From omap-cpufreq driver */
38 }; 43 };
39 }; 44 };
40 45
@@ -436,6 +441,7 @@
436 dmas = <&sdma 31>, 441 dmas = <&sdma 31>,
437 <&sdma 32>; 442 <&sdma 32>;
438 dma-names = "tx", "rx"; 443 dma-names = "tx", "rx";
444 status = "disabled";
439 }; 445 };
440 446
441 mcbsp2: mcbsp@49022000 { 447 mcbsp2: mcbsp@49022000 {
@@ -453,6 +459,7 @@
453 dmas = <&sdma 33>, 459 dmas = <&sdma 33>,
454 <&sdma 34>; 460 <&sdma 34>;
455 dma-names = "tx", "rx"; 461 dma-names = "tx", "rx";
462 status = "disabled";
456 }; 463 };
457 464
458 mcbsp3: mcbsp@49024000 { 465 mcbsp3: mcbsp@49024000 {
@@ -470,6 +477,7 @@
470 dmas = <&sdma 17>, 477 dmas = <&sdma 17>,
471 <&sdma 18>; 478 <&sdma 18>;
472 dma-names = "tx", "rx"; 479 dma-names = "tx", "rx";
480 status = "disabled";
473 }; 481 };
474 482
475 mcbsp4: mcbsp@49026000 { 483 mcbsp4: mcbsp@49026000 {
@@ -485,6 +493,7 @@
485 dmas = <&sdma 19>, 493 dmas = <&sdma 19>,
486 <&sdma 20>; 494 <&sdma 20>;
487 dma-names = "tx", "rx"; 495 dma-names = "tx", "rx";
496 status = "disabled";
488 }; 497 };
489 498
490 mcbsp5: mcbsp@48096000 { 499 mcbsp5: mcbsp@48096000 {
@@ -500,6 +509,7 @@
500 dmas = <&sdma 21>, 509 dmas = <&sdma 21>,
501 <&sdma 22>; 510 <&sdma 22>;
502 dma-names = "tx", "rx"; 511 dma-names = "tx", "rx";
512 status = "disabled";
503 }; 513 };
504 514
505 sham: sham@480c3000 { 515 sham: sham@480c3000 {
@@ -634,14 +644,14 @@
634 ranges; 644 ranges;
635 645
636 usbhsohci: ohci@48064400 { 646 usbhsohci: ohci@48064400 {
637 compatible = "ti,ohci-omap3", "usb-ohci"; 647 compatible = "ti,ohci-omap3";
638 reg = <0x48064400 0x400>; 648 reg = <0x48064400 0x400>;
639 interrupt-parent = <&intc>; 649 interrupt-parent = <&intc>;
640 interrupts = <76>; 650 interrupts = <76>;
641 }; 651 };
642 652
643 usbhsehci: ehci@48064800 { 653 usbhsehci: ehci@48064800 {
644 compatible = "ti,ehci-omap", "usb-ehci"; 654 compatible = "ti,ehci-omap";
645 reg = <0x48064800 0x400>; 655 reg = <0x48064800 0x400>;
646 interrupt-parent = <&intc>; 656 interrupt-parent = <&intc>;
647 interrupts = <77>; 657 interrupts = <77>;
diff --git a/arch/arm/boot/dts/omap3430-sdp.dts b/arch/arm/boot/dts/omap3430-sdp.dts
index 281914ed0151..02f69f4a8fd3 100644
--- a/arch/arm/boot/dts/omap3430-sdp.dts
+++ b/arch/arm/boot/dts/omap3430-sdp.dts
@@ -34,6 +34,10 @@
34&mmc1 { 34&mmc1 {
35 vmmc-supply = <&vmmc1>; 35 vmmc-supply = <&vmmc1>;
36 vmmc_aux-supply = <&vsim>; 36 vmmc_aux-supply = <&vsim>;
37 /*
38 * S6-3 must be in ON position for 8 bit mode to function
39 * Else, use 4 bit mode
40 */
37 bus-width = <8>; 41 bus-width = <8>;
38}; 42};
39 43
@@ -103,9 +107,8 @@
103 #address-cells = <1>; 107 #address-cells = <1>;
104 #size-cells = <1>; 108 #size-cells = <1>;
105 reg = <1 0 0x08000000>; 109 reg = <1 0 0x08000000>;
110 ti,nand-ecc-opt = "ham1";
106 nand-bus-width = <8>; 111 nand-bus-width = <8>;
107
108 ti,nand-ecc-opt = "sw";
109 gpmc,cs-on-ns = <0>; 112 gpmc,cs-on-ns = <0>;
110 gpmc,cs-rd-off-ns = <36>; 113 gpmc,cs-rd-off-ns = <36>;
111 gpmc,cs-wr-off-ns = <36>; 114 gpmc,cs-wr-off-ns = <36>;
diff --git a/arch/arm/boot/dts/omap3430es1-clocks.dtsi b/arch/arm/boot/dts/omap3430es1-clocks.dtsi
index 02f6c7fabbec..6f31954636a1 100644
--- a/arch/arm/boot/dts/omap3430es1-clocks.dtsi
+++ b/arch/arm/boot/dts/omap3430es1-clocks.dtsi
@@ -82,16 +82,16 @@
82 ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>; 82 ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>;
83 }; 83 };
84 84
85 ssi_ssr_fck_3430es1: ssi_ssr_fck_3430es1 { 85 ssi_ssr_fck: ssi_ssr_fck_3430es1 {
86 #clock-cells = <0>; 86 #clock-cells = <0>;
87 compatible = "ti,composite-clock"; 87 compatible = "ti,composite-clock";
88 clocks = <&ssi_ssr_gate_fck_3430es1>, <&ssi_ssr_div_fck_3430es1>; 88 clocks = <&ssi_ssr_gate_fck_3430es1>, <&ssi_ssr_div_fck_3430es1>;
89 }; 89 };
90 90
91 ssi_sst_fck_3430es1: ssi_sst_fck_3430es1 { 91 ssi_sst_fck: ssi_sst_fck_3430es1 {
92 #clock-cells = <0>; 92 #clock-cells = <0>;
93 compatible = "fixed-factor-clock"; 93 compatible = "fixed-factor-clock";
94 clocks = <&ssi_ssr_fck_3430es1>; 94 clocks = <&ssi_ssr_fck>;
95 clock-mult = <1>; 95 clock-mult = <1>;
96 clock-div = <2>; 96 clock-div = <2>;
97 }; 97 };
@@ -120,7 +120,7 @@
120 clock-div = <1>; 120 clock-div = <1>;
121 }; 121 };
122 122
123 ssi_ick_3430es1: ssi_ick_3430es1 { 123 ssi_ick: ssi_ick_3430es1 {
124 #clock-cells = <0>; 124 #clock-cells = <0>;
125 compatible = "ti,omap3-no-wait-interface-clock"; 125 compatible = "ti,omap3-no-wait-interface-clock";
126 clocks = <&ssi_l4_ick>; 126 clocks = <&ssi_l4_ick>;
@@ -203,6 +203,6 @@
203 <&i2c1_ick>, <&uart2_ick>, <&uart1_ick>, <&gpt11_ick>, 203 <&i2c1_ick>, <&uart2_ick>, <&uart1_ick>, <&gpt11_ick>,
204 <&gpt10_ick>, <&mcbsp5_ick>, <&mcbsp1_ick>, 204 <&gpt10_ick>, <&mcbsp5_ick>, <&mcbsp1_ick>,
205 <&omapctrl_ick>, <&aes2_ick>, <&sha12_ick>, 205 <&omapctrl_ick>, <&aes2_ick>, <&sha12_ick>,
206 <&fshostusb_fck>, <&fac_ick>, <&ssi_ick_3430es1>; 206 <&fshostusb_fck>, <&fac_ick>, <&ssi_ick>;
207 }; 207 };
208}; 208};
diff --git a/arch/arm/boot/dts/omap36xx-omap3430es2plus-clocks.dtsi b/arch/arm/boot/dts/omap36xx-omap3430es2plus-clocks.dtsi
index 8ed475dd63c9..877318c28364 100644
--- a/arch/arm/boot/dts/omap36xx-omap3430es2plus-clocks.dtsi
+++ b/arch/arm/boot/dts/omap36xx-omap3430es2plus-clocks.dtsi
@@ -25,16 +25,16 @@
25 ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>; 25 ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>;
26 }; 26 };
27 27
28 ssi_ssr_fck_3430es2: ssi_ssr_fck_3430es2 { 28 ssi_ssr_fck: ssi_ssr_fck_3430es2 {
29 #clock-cells = <0>; 29 #clock-cells = <0>;
30 compatible = "ti,composite-clock"; 30 compatible = "ti,composite-clock";
31 clocks = <&ssi_ssr_gate_fck_3430es2>, <&ssi_ssr_div_fck_3430es2>; 31 clocks = <&ssi_ssr_gate_fck_3430es2>, <&ssi_ssr_div_fck_3430es2>;
32 }; 32 };
33 33
34 ssi_sst_fck_3430es2: ssi_sst_fck_3430es2 { 34 ssi_sst_fck: ssi_sst_fck_3430es2 {
35 #clock-cells = <0>; 35 #clock-cells = <0>;
36 compatible = "fixed-factor-clock"; 36 compatible = "fixed-factor-clock";
37 clocks = <&ssi_ssr_fck_3430es2>; 37 clocks = <&ssi_ssr_fck>;
38 clock-mult = <1>; 38 clock-mult = <1>;
39 clock-div = <2>; 39 clock-div = <2>;
40 }; 40 };
@@ -55,7 +55,7 @@
55 clock-div = <1>; 55 clock-div = <1>;
56 }; 56 };
57 57
58 ssi_ick_3430es2: ssi_ick_3430es2 { 58 ssi_ick: ssi_ick_3430es2 {
59 #clock-cells = <0>; 59 #clock-cells = <0>;
60 compatible = "ti,omap3-ssi-interface-clock"; 60 compatible = "ti,omap3-ssi-interface-clock";
61 clocks = <&ssi_l4_ick>; 61 clocks = <&ssi_l4_ick>;
@@ -193,6 +193,6 @@
193 <&i2c1_ick>, <&uart2_ick>, <&uart1_ick>, <&gpt11_ick>, 193 <&i2c1_ick>, <&uart2_ick>, <&uart1_ick>, <&gpt11_ick>,
194 <&gpt10_ick>, <&mcbsp5_ick>, <&mcbsp1_ick>, 194 <&gpt10_ick>, <&mcbsp5_ick>, <&mcbsp1_ick>,
195 <&omapctrl_ick>, <&aes2_ick>, <&sha12_ick>, 195 <&omapctrl_ick>, <&aes2_ick>, <&sha12_ick>,
196 <&ssi_ick_3430es2>; 196 <&ssi_ick>;
197 }; 197 };
198}; 198};
diff --git a/arch/arm/boot/dts/omap36xx.dtsi b/arch/arm/boot/dts/omap36xx.dtsi
index 7e8dee9175d6..ba077cd95e4e 100644
--- a/arch/arm/boot/dts/omap36xx.dtsi
+++ b/arch/arm/boot/dts/omap36xx.dtsi
@@ -39,6 +39,26 @@
39 clock-frequency = <48000000>; 39 clock-frequency = <48000000>;
40 }; 40 };
41 41
42 abb_mpu_iva: regulator-abb-mpu {
43 compatible = "ti,abb-v1";
44 regulator-name = "abb_mpu_iva";
45 #address-cell = <0>;
46 #size-cells = <0>;
47 reg = <0x483072f0 0x8>, <0x48306818 0x4>;
48 reg-names = "base-address", "int-address";
49 ti,tranxdone-status-mask = <0x4000000>;
50 clocks = <&sys_ck>;
51 ti,settling-time = <30>;
52 ti,clock-cycles = <8>;
53 ti,abb_info = <
54 /*uV ABB efuse rbb_m fbb_m vset_m*/
55 1012500 0 0 0 0 0
56 1200000 0 0 0 0 0
57 1325000 0 0 0 0 0
58 1375000 1 0 0 0 0
59 >;
60 };
61
42 omap3_pmx_core2: pinmux@480025a0 { 62 omap3_pmx_core2: pinmux@480025a0 {
43 compatible = "ti,omap3-padconf", "pinctrl-single"; 63 compatible = "ti,omap3-padconf", "pinctrl-single";
44 reg = <0x480025a0 0x5c>; 64 reg = <0x480025a0 0x5c>;
diff --git a/arch/arm/boot/dts/omap4-duovero-parlor.dts b/arch/arm/boot/dts/omap4-duovero-parlor.dts
new file mode 100644
index 000000000000..96f51d870812
--- /dev/null
+++ b/arch/arm/boot/dts/omap4-duovero-parlor.dts
@@ -0,0 +1,146 @@
1/*
2 * Copyright (C) 2014 Florian Vaussard, EPFL Mobots group
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8/dts-v1/;
9
10#include "omap4-duovero.dtsi"
11
12#include <dt-bindings/input/input.h>
13
14/ {
15 model = "OMAP4430 Gumstix Duovero on Parlor";
16 compatible = "gumstix,omap4-duovero-parlor", "gumstix,omap4-duovero", "ti,omap4430", "ti,omap4";
17
18 leds {
19 compatible = "gpio-leds";
20 led0 {
21 label = "duovero:blue:led0";
22 gpios = <&gpio4 26 GPIO_ACTIVE_HIGH>; /* gpio_122 */
23 linux,default-trigger = "heartbeat";
24 };
25 };
26
27 gpio_keys {
28 compatible = "gpio-keys";
29 #address-cells = <1>;
30 #size-cells = <0>;
31 button0@121 {
32 label = "button0";
33 linux,code = <BTN_0>;
34 gpios = <&gpio4 25 GPIO_ACTIVE_LOW>; /* gpio_121 */
35 gpio-key,wakeup;
36 };
37 };
38};
39
40&omap4_pmx_core {
41 pinctrl-0 = <
42 &led_pins
43 &button_pins
44 &smsc_pins
45 >;
46
47 led_pins: pinmux_led_pins {
48 pinctrl-single,pins = <
49 0xd6 (PIN_OUTPUT | MUX_MODE3) /* abe_dmic_din3.gpio_122 */
50 >;
51 };
52
53 button_pins: pinmux_button_pins {
54 pinctrl-single,pins = <
55 0xd4 (PIN_INPUT_PULLUP | MUX_MODE3) /* abe_dmic_din2.gpio_121 */
56 >;
57 };
58
59 i2c2_pins: pinmux_i2c2_pins {
60 pinctrl-single,pins = <
61 0xe6 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c2_scl */
62 0xe8 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c2_sda */
63 >;
64 };
65
66 i2c3_pins: pinmux_i2c3_pins {
67 pinctrl-single,pins = <
68 0xea (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c3_scl */
69 0xec (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c3_sda */
70 >;
71 };
72
73 smsc_pins: pinmux_smsc_pins {
74 pinctrl-single,pins = <
75 0x28 (PIN_INPUT | MUX_MODE3) /* gpmc_a20.gpio_44: IRQ */
76 0x2a (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a21.gpio_45: nReset */
77 0x30 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a24.gpio_48: amdix enabled */
78 >;
79 };
80};
81
82&i2c2 {
83 pinctrl-names = "default";
84 pinctrl-0 = <&i2c2_pins>;
85
86 clock-frequency = <400000>;
87};
88
89&i2c3 {
90 pinctrl-names = "default";
91 pinctrl-0 = <&i2c3_pins>;
92
93 clock-frequency = <100000>;
94
95 /* optional 1K EEPROM with revision information */
96 eeprom@51 {
97 compatible = "atmel,24c01";
98 reg = <0x51>;
99 pagesize = <8>;
100 };
101};
102
103&mmc3 {
104 status = "disabled";
105};
106
107#include "omap-gpmc-smsc911x.dtsi"
108
109&gpmc {
110 ranges = <5 0 0x2c000000 0x1000000>; /* CS5 */
111
112 ethernet@gpmc {
113 reg = <5 0 0xff>;
114 interrupt-parent = <&gpio2>;
115 interrupts = <12 IRQ_TYPE_LEVEL_LOW>; /* gpio_44 */
116
117 phy-mode = "mii";
118
119 gpmc,cs-on-ns = <10>;
120 gpmc,cs-rd-off-ns = <50>;
121 gpmc,cs-wr-off-ns = <50>;
122 gpmc,adv-on-ns = <0>;
123 gpmc,adv-rd-off-ns = <10>;
124 gpmc,adv-wr-off-ns = <10>;
125 gpmc,oe-on-ns = <15>;
126 gpmc,oe-off-ns = <50>;
127 gpmc,we-on-ns = <15>;
128 gpmc,we-off-ns = <50>;
129 gpmc,rd-cycle-ns = <50>;
130 gpmc,wr-cycle-ns = <50>;
131 gpmc,access-ns = <50>;
132 gpmc,page-burst-access-ns = <0>;
133 gpmc,bus-turnaround-ns = <35>;
134 gpmc,cycle2cycle-delay-ns = <35>;
135 gpmc,wr-data-mux-bus-ns = <35>;
136 gpmc,wr-access-ns = <50>;
137
138 gpmc,mux-add-data = <2>;
139 gpmc,sync-read;
140 gpmc,sync-write;
141 gpmc,clk-activation-ns = <5>;
142 gpmc,sync-clk-ps = <20000>;
143 };
144};
145
146
diff --git a/arch/arm/boot/dts/omap4-duovero.dtsi b/arch/arm/boot/dts/omap4-duovero.dtsi
new file mode 100644
index 000000000000..a514791154eb
--- /dev/null
+++ b/arch/arm/boot/dts/omap4-duovero.dtsi
@@ -0,0 +1,252 @@
1/*
2 * Copyright (C) 2014 Florian Vaussard, EPFL Mobots group
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include "omap443x.dtsi"
10
11/ {
12 model = "Gumstix Duovero";
13 compatible = "gumstix,omap4-duovero", "ti,omap4430", "ti,omap4";
14
15 memory {
16 device_type = "memory";
17 reg = <0x80000000 0x40000000>; /* 1 GB */
18 };
19
20 sound {
21 compatible = "ti,abe-twl6040";
22 ti,model = "DuoVero";
23
24 ti,mclk-freq = <38400000>;
25
26 ti,mcpdm = <&mcpdm>;
27
28 ti,twl6040 = <&twl6040>;
29
30 /* Audio routing */
31 ti,audio-routing =
32 "Headset Stereophone", "HSOL",
33 "Headset Stereophone", "HSOR",
34 "HSMIC", "Headset Mic",
35 "Headset Mic", "Headset Mic Bias";
36 };
37
38 /* HS USB Host PHY on PORT 1 */
39 hsusb1_phy: hsusb1_phy {
40 compatible = "usb-nop-xceiv";
41 reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; /* gpio_62 */
42
43 pinctrl-names = "default";
44 pinctrl-0 = <&hsusb1phy_pins>;
45
46 clocks = <&auxclk3_ck>;
47 clock-names = "main_clk";
48 clock-frequency = <19200000>;
49 };
50
51 /* regulator for w2cbw0015 on sdio5 */
52 w2cbw0015_vmmc: w2cbw0015_vmmc {
53 pinctrl-names = "default";
54 pinctrl-0 = <&w2cbw0015_pins>;
55 compatible = "regulator-fixed";
56 regulator-name = "w2cbw0015";
57 regulator-min-microvolt = <3000000>;
58 regulator-max-microvolt = <3000000>;
59 gpio = <&gpio2 11 GPIO_ACTIVE_LOW>; /* gpio_43 */
60 startup-delay-us = <70000>;
61 enable-active-high;
62 regulator-boot-on;
63 };
64};
65
66&omap4_pmx_core {
67 pinctrl-names = "default";
68 pinctrl-0 = <
69 &twl6040_pins
70 &mcpdm_pins
71 &mcbsp1_pins
72 &hsusbb1_pins
73 >;
74
75 twl6040_pins: pinmux_twl6040_pins {
76 pinctrl-single,pins = <
77 0x126 (PIN_OUTPUT | MUX_MODE3) /* usbb2_ulpitll_nxt.gpio_160 */
78 0x160 (PIN_INPUT | MUX_MODE0) /* sys_nirq2.sys_nirq2 */
79 >;
80 };
81
82 mcpdm_pins: pinmux_mcpdm_pins {
83 pinctrl-single,pins = <
84 0xc6 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* abe_pdm_ul_data.abe_pdm_ul_data */
85 0xc8 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* abe_pdm_dl_data.abe_pdm_dl_data */
86 0xca (PIN_INPUT_PULLUP | MUX_MODE0) /* abe_pdm_frame.abe_pdm_frame */
87 0xcc (PIN_INPUT_PULLDOWN | MUX_MODE0) /* abe_pdm_lb_clk.abe_pdm_lb_clk */
88 0xce (PIN_INPUT_PULLDOWN | MUX_MODE0) /* abe_clks.abe_clks */
89 >;
90 };
91
92 mcbsp1_pins: pinmux_mcbsp1_pins {
93 pinctrl-single,pins = <
94 0xbe (PIN_INPUT | MUX_MODE0) /* abe_mcbsp1_clkx.abe_mcbsp1_clkx */
95 0xc0 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* abe_mcbsp1_dr.abe_mcbsp1_dr */
96 0xc2 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* abe_mcbsp1_dx.abe_mcbsp1_dx */
97 0xc4 (PIN_INPUT | MUX_MODE0) /* abe_mcbsp1_fsx.abe_mcbsp1_fsx */
98 >;
99 };
100
101 hsusbb1_pins: pinmux_hsusbb1_pins {
102 pinctrl-single,pins = <
103 0x82 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_clk.usbb1_ulpiphy_clk */
104 0x84 (PIN_OUTPUT | MUX_MODE4) /* usbb1_ulpitll_stp.usbb1_ulpiphy_stp */
105 0x86 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dir.usbb1_ulpiphy_dir */
106 0x88 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_nxt.usbb1_ulpiphy_nxt */
107 0x8a (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat0.usbb1_ulpiphy_dat0 */
108 0x8c (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat1.usbb1_ulpiphy_dat1 */
109 0x8e (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat2.usbb1_ulpiphy_dat2 */
110 0x90 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat3.usbb1_ulpiphy_dat3 */
111 0x92 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat4.usbb1_ulpiphy_dat4 */
112 0x94 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat5.usbb1_ulpiphy_dat5 */
113 0x96 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat6.usbb1_ulpiphy_dat6 */
114 0x98 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* usbb1_ulpitll_dat7.usbb1_ulpiphy_dat7 */
115 >;
116 };
117
118 hsusb1phy_pins: pinmux_hsusb1phy_pins {
119 pinctrl-single,pins = <
120 0x4c (PIN_OUTPUT | MUX_MODE3) /* gpmc_wait1.gpio_62 */
121 >;
122 };
123
124 w2cbw0015_pins: pinmux_w2cbw0015_pins {
125 pinctrl-single,pins = <
126 0x26 (PIN_OUTPUT | MUX_MODE3) /* gpmc_a19.gpio_43 */
127 0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */
128 >;
129 };
130
131 i2c1_pins: pinmux_i2c1_pins {
132 pinctrl-single,pins = <
133 0xe2 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_scl */
134 0xe4 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_sda */
135 >;
136 };
137
138 i2c4_pins: pinmux_i2c4_pins {
139 pinctrl-single,pins = <
140 0xee (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c4_scl */
141 0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c4_sda */
142 >;
143 };
144
145 mmc1_pins: pinmux_mmc1_pins {
146 pinctrl-single,pins = <
147 0xa2 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk */
148 0xa4 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmcc1_cmd */
149 0xa6 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmcc1_dat0 */
150 0xa8 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1 */
151 0xaa (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2 */
152 0xac (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3 */
153 >;
154 };
155
156 mmc5_pins: pinmux_mmc5_pins {
157 pinctrl-single,pins = <
158 0x108 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_clk */
159 0x10a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmcc5_cmd */
160 0x10c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmcc5_dat0 */
161 0x10e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat1 */
162 0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat2 */
163 0x112 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat3 */
164 >;
165 };
166};
167
168/* PMIC */
169&i2c1 {
170 pinctrl-names = "default";
171 pinctrl-0 = <&i2c1_pins>;
172
173 clock-frequency = <400000>;
174
175 twl: twl@48 {
176 reg = <0x48>;
177 interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_1N cascaded to gic */
178 interrupt-parent = <&gic>;
179 };
180
181 twl6040: twl@4b {
182 compatible = "ti,twl6040";
183 reg = <0x4b>;
184 interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_2N cascaded to gic */
185 interrupt-parent = <&gic>;
186 ti,audpwron-gpio = <&gpio6 0 GPIO_ACTIVE_HIGH>; /* gpio_160 */
187
188 vio-supply = <&v1v8>;
189 v2v1-supply = <&v2v1>;
190 enable-active-high;
191 };
192};
193
194#include "twl6030.dtsi"
195#include "twl6030_omap4.dtsi"
196
197/* on-board bluetooth / WiFi module */
198&i2c4 {
199 pinctrl-names = "default";
200 pinctrl-0 = <&i2c4_pins>;
201
202 clock-frequency = <400000>;
203};
204
205&mmc1 {
206 pinctrl-names = "default";
207 pinctrl-0 = <&mmc1_pins>;
208
209 vmmc-supply = <&vmmc>;
210 ti,bus-width = <4>;
211 ti,non-removable; /* FIXME: use PMIC_MMC detect */
212};
213
214&mmc2 {
215 status = "disabled";
216};
217
218/* mmc3 is available to the expansion board */
219
220&mmc4 {
221 status = "disabled";
222};
223
224/* on-board WiFi module */
225&mmc5 {
226 pinctrl-names = "default";
227 pinctrl-0 = <&mmc5_pins>;
228
229 vmmc-supply = <&w2cbw0015_vmmc>;
230 ti,bus-width = <4>;
231 ti,non-removable;
232 cap-power-off-card;
233};
234
235&twl_usb_comparator {
236 usb-supply = <&vusb>;
237};
238
239&usb_otg_hs {
240 interface-type = <1>;
241 mode = <3>;
242 power = <50>;
243};
244
245&usbhshost {
246 port1-mode = "ehci-phy";
247};
248
249&usbhsehci {
250 phys = <&hsusb1_phy>;
251};
252
diff --git a/arch/arm/boot/dts/omap4-panda-common.dtsi b/arch/arm/boot/dts/omap4-panda-common.dtsi
index 88c6a05cab41..cbc45cfc44e9 100644
--- a/arch/arm/boot/dts/omap4-panda-common.dtsi
+++ b/arch/arm/boot/dts/omap4-panda-common.dtsi
@@ -83,12 +83,8 @@
83 compatible = "usb-nop-xceiv"; 83 compatible = "usb-nop-xceiv";
84 reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; /* gpio_62 */ 84 reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; /* gpio_62 */
85 vcc-supply = <&hsusb1_power>; 85 vcc-supply = <&hsusb1_power>;
86 /** 86 clocks = <&auxclk3_ck>;
87 * FIXME: 87 clock-names = "main_clk";
88 * put the right clock phandle here when available
89 * clocks = <&auxclk3>;
90 * clock-names = "main_clk";
91 */
92 clock-frequency = <19200000>; 88 clock-frequency = <19200000>;
93 }; 89 };
94 90
@@ -109,9 +105,6 @@
109&omap4_pmx_core { 105&omap4_pmx_core {
110 pinctrl-names = "default"; 106 pinctrl-names = "default";
111 pinctrl-0 = < 107 pinctrl-0 = <
112 &twl6040_pins
113 &mcpdm_pins
114 &mcbsp1_pins
115 &dss_dpi_pins 108 &dss_dpi_pins
116 &tfp410_pins 109 &tfp410_pins
117 &dss_hdmi_pins 110 &dss_hdmi_pins
@@ -300,6 +293,10 @@
300 twl6040: twl@4b { 293 twl6040: twl@4b {
301 compatible = "ti,twl6040"; 294 compatible = "ti,twl6040";
302 reg = <0x4b>; 295 reg = <0x4b>;
296
297 pinctrl-names = "default";
298 pinctrl-0 = <&twl6040_pins>;
299
303 /* IRQ# = 119 */ 300 /* IRQ# = 119 */
304 interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_2N cascaded to gic */ 301 interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_2N cascaded to gic */
305 interrupt-parent = <&gic>; 302 interrupt-parent = <&gic>;
@@ -380,16 +377,16 @@
380 device-handle = <&elpida_ECB240ABACN>; 377 device-handle = <&elpida_ECB240ABACN>;
381}; 378};
382 379
383&mcbsp2 { 380&mcbsp1 {
384 status = "disabled"; 381 pinctrl-names = "default";
385}; 382 pinctrl-0 = <&mcbsp1_pins>;
386 383 status = "okay";
387&mcbsp3 {
388 status = "disabled";
389}; 384};
390 385
391&dmic { 386&mcpdm {
392 status = "disabled"; 387 pinctrl-names = "default";
388 pinctrl-0 = <&mcpdm_pins>;
389 status = "okay";
393}; 390};
394 391
395&twl_usb_comparator { 392&twl_usb_comparator {
diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts
index dbc81fb6ef03..9bbbbec1d63d 100644
--- a/arch/arm/boot/dts/omap4-sdp.dts
+++ b/arch/arm/boot/dts/omap4-sdp.dts
@@ -158,11 +158,6 @@
158&omap4_pmx_core { 158&omap4_pmx_core {
159 pinctrl-names = "default"; 159 pinctrl-names = "default";
160 pinctrl-0 = < 160 pinctrl-0 = <
161 &twl6040_pins
162 &mcpdm_pins
163 &dmic_pins
164 &mcbsp1_pins
165 &mcbsp2_pins
166 &dss_hdmi_pins 161 &dss_hdmi_pins
167 &tpd12s015_pins 162 &tpd12s015_pins
168 >; 163 >;
@@ -326,6 +321,10 @@
326 twl6040: twl@4b { 321 twl6040: twl@4b {
327 compatible = "ti,twl6040"; 322 compatible = "ti,twl6040";
328 reg = <0x4b>; 323 reg = <0x4b>;
324
325 pinctrl-names = "default";
326 pinctrl-0 = <&twl6040_pins>;
327
329 /* SPI = 0, IRQ# = 119, 4 = active high level-sensitive */ 328 /* SPI = 0, IRQ# = 119, 4 = active high level-sensitive */
330 interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_2N cascaded to gic */ 329 interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_2N cascaded to gic */
331 interrupt-parent = <&gic>; 330 interrupt-parent = <&gic>;
@@ -537,8 +536,28 @@
537 pinctrl-0 = <&uart4_pins>; 536 pinctrl-0 = <&uart4_pins>;
538}; 537};
539 538
540&mcbsp3 { 539&mcbsp1 {
541 status = "disabled"; 540 pinctrl-names = "default";
541 pinctrl-0 = <&mcbsp1_pins>;
542 status = "okay";
543};
544
545&mcbsp2 {
546 pinctrl-names = "default";
547 pinctrl-0 = <&mcbsp2_pins>;
548 status = "okay";
549};
550
551&dmic {
552 pinctrl-names = "default";
553 pinctrl-0 = <&dmic_pins>;
554 status = "okay";
555};
556
557&mcpdm {
558 pinctrl-names = "default";
559 pinctrl-0 = <&mcpdm_pins>;
560 status = "okay";
542}; 561};
543 562
544&twl_usb_comparator { 563&twl_usb_comparator {
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
index d3f8a6e8ca20..4e15be59b839 100644
--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -36,6 +36,11 @@
36 device_type = "cpu"; 36 device_type = "cpu";
37 next-level-cache = <&L2>; 37 next-level-cache = <&L2>;
38 reg = <0x0>; 38 reg = <0x0>;
39
40 clocks = <&dpll_mpu_ck>;
41 clock-names = "cpu";
42
43 clock-latency = <300000>; /* From omap-cpufreq driver */
39 }; 44 };
40 cpu@1 { 45 cpu@1 {
41 compatible = "arm,cortex-a9"; 46 compatible = "arm,cortex-a9";
@@ -313,6 +318,7 @@
313 compatible = "ti,omap4-hwspinlock"; 318 compatible = "ti,omap4-hwspinlock";
314 reg = <0x4a0f6000 0x1000>; 319 reg = <0x4a0f6000 0x1000>;
315 ti,hwmods = "spinlock"; 320 ti,hwmods = "spinlock";
321 #hwlock-cells = <1>;
316 }; 322 };
317 323
318 i2c1: i2c@48070000 { 324 i2c1: i2c@48070000 {
@@ -478,6 +484,7 @@
478 dmas = <&sdma 65>, 484 dmas = <&sdma 65>,
479 <&sdma 66>; 485 <&sdma 66>;
480 dma-names = "up_link", "dn_link"; 486 dma-names = "up_link", "dn_link";
487 status = "disabled";
481 }; 488 };
482 489
483 dmic: dmic@4012e000 { 490 dmic: dmic@4012e000 {
@@ -489,6 +496,7 @@
489 ti,hwmods = "dmic"; 496 ti,hwmods = "dmic";
490 dmas = <&sdma 67>; 497 dmas = <&sdma 67>;
491 dma-names = "up_link"; 498 dma-names = "up_link";
499 status = "disabled";
492 }; 500 };
493 501
494 mcbsp1: mcbsp@40122000 { 502 mcbsp1: mcbsp@40122000 {
@@ -503,6 +511,7 @@
503 dmas = <&sdma 33>, 511 dmas = <&sdma 33>,
504 <&sdma 34>; 512 <&sdma 34>;
505 dma-names = "tx", "rx"; 513 dma-names = "tx", "rx";
514 status = "disabled";
506 }; 515 };
507 516
508 mcbsp2: mcbsp@40124000 { 517 mcbsp2: mcbsp@40124000 {
@@ -517,6 +526,7 @@
517 dmas = <&sdma 17>, 526 dmas = <&sdma 17>,
518 <&sdma 18>; 527 <&sdma 18>;
519 dma-names = "tx", "rx"; 528 dma-names = "tx", "rx";
529 status = "disabled";
520 }; 530 };
521 531
522 mcbsp3: mcbsp@40126000 { 532 mcbsp3: mcbsp@40126000 {
@@ -531,6 +541,7 @@
531 dmas = <&sdma 19>, 541 dmas = <&sdma 19>,
532 <&sdma 20>; 542 <&sdma 20>;
533 dma-names = "tx", "rx"; 543 dma-names = "tx", "rx";
544 status = "disabled";
534 }; 545 };
535 546
536 mcbsp4: mcbsp@48096000 { 547 mcbsp4: mcbsp@48096000 {
@@ -544,6 +555,7 @@
544 dmas = <&sdma 31>, 555 dmas = <&sdma 31>,
545 <&sdma 32>; 556 <&sdma 32>;
546 dma-names = "tx", "rx"; 557 dma-names = "tx", "rx";
558 status = "disabled";
547 }; 559 };
548 560
549 keypad: keypad@4a31c000 { 561 keypad: keypad@4a31c000 {
@@ -554,6 +566,13 @@
554 ti,hwmods = "kbd"; 566 ti,hwmods = "kbd";
555 }; 567 };
556 568
569 dmm@4e000000 {
570 compatible = "ti,omap4-dmm";
571 reg = <0x4e000000 0x800>;
572 interrupts = <0 113 0x4>;
573 ti,hwmods = "dmm";
574 };
575
557 emif1: emif@4c000000 { 576 emif1: emif@4c000000 {
558 compatible = "ti,emif-4d"; 577 compatible = "ti,emif-4d";
559 reg = <0x4c000000 0x100>; 578 reg = <0x4c000000 0x100>;
@@ -699,14 +718,14 @@
699 ranges; 718 ranges;
700 719
701 usbhsohci: ohci@4a064800 { 720 usbhsohci: ohci@4a064800 {
702 compatible = "ti,ohci-omap3", "usb-ohci"; 721 compatible = "ti,ohci-omap3";
703 reg = <0x4a064800 0x400>; 722 reg = <0x4a064800 0x400>;
704 interrupt-parent = <&gic>; 723 interrupt-parent = <&gic>;
705 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; 724 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
706 }; 725 };
707 726
708 usbhsehci: ehci@4a064c00 { 727 usbhsehci: ehci@4a064c00 {
709 compatible = "ti,ehci-omap", "usb-ehci"; 728 compatible = "ti,ehci-omap";
710 reg = <0x4a064c00 0x400>; 729 reg = <0x4a064c00 0x400>;
711 interrupt-parent = <&gic>; 730 interrupt-parent = <&gic>;
712 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; 731 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
@@ -757,6 +776,32 @@
757 dmas = <&sdma 117>, <&sdma 116>; 776 dmas = <&sdma 117>, <&sdma 116>;
758 dma-names = "tx", "rx"; 777 dma-names = "tx", "rx";
759 }; 778 };
779
780 abb_mpu: regulator-abb-mpu {
781 compatible = "ti,abb-v2";
782 regulator-name = "abb_mpu";
783 #address-cells = <0>;
784 #size-cells = <0>;
785 ti,tranxdone-status-mask = <0x80>;
786 clocks = <&sys_clkin_ck>;
787 ti,settling-time = <50>;
788 ti,clock-cycles = <16>;
789
790 status = "disabled";
791 };
792
793 abb_iva: regulator-abb-iva {
794 compatible = "ti,abb-v2";
795 regulator-name = "abb_iva";
796 #address-cells = <0>;
797 #size-cells = <0>;
798 ti,tranxdone-status-mask = <0x80000000>;
799 clocks = <&sys_clkin_ck>;
800 ti,settling-time = <50>;
801 ti,clock-cycles = <16>;
802
803 status = "disabled";
804 };
760 }; 805 };
761}; 806};
762 807
diff --git a/arch/arm/boot/dts/omap443x.dtsi b/arch/arm/boot/dts/omap443x.dtsi
index 8c1cfad30d60..0adfa1d1ef20 100644
--- a/arch/arm/boot/dts/omap443x.dtsi
+++ b/arch/arm/boot/dts/omap443x.dtsi
@@ -43,6 +43,32 @@
43 #thermal-sensor-cells = <0>; 43 #thermal-sensor-cells = <0>;
44 }; 44 };
45 }; 45 };
46
47 ocp {
48 abb_mpu: regulator-abb-mpu {
49 status = "okay";
50
51 reg = <0x4a307bd0 0x8>, <0x4a306014 0x4>;
52 reg-names = "base-address", "int-address";
53
54 ti,abb_info = <
55 /*uV ABB efuse rbb_m fbb_m vset_m*/
56 1025000 0 0 0 0 0
57 1200000 0 0 0 0 0
58 1313000 0 0 0 0 0
59 1375000 1 0 0 0 0
60 1389000 1 0 0 0 0
61 >;
62 };
63
64 /* Default unused, just provide register info for record */
65 abb_iva: regulator-abb-iva {
66 reg = <0x4a307bd8 0x8>, <0x4a306010 0x4>;
67 reg-names = "base-address", "int-address";
68 };
69
70 };
71
46}; 72};
47 73
48/include/ "omap443x-clocks.dtsi" 74/include/ "omap443x-clocks.dtsi"
diff --git a/arch/arm/boot/dts/omap4460.dtsi b/arch/arm/boot/dts/omap4460.dtsi
index 6b32f520741a..194f9ef0a009 100644
--- a/arch/arm/boot/dts/omap4460.dtsi
+++ b/arch/arm/boot/dts/omap4460.dtsi
@@ -50,7 +50,44 @@
50 50
51 #thermal-sensor-cells = <0>; 51 #thermal-sensor-cells = <0>;
52 }; 52 };
53
54 abb_mpu: regulator-abb-mpu {
55 status = "okay";
56
57 reg = <0x4a307bd0 0x8>, <0x4a306014 0x4>,
58 <0x4A002268 0x4>;
59 reg-names = "base-address", "int-address",
60 "efuse-address";
61
62 ti,abb_info = <
63 /*uV ABB efuse rbb_m fbb_m vset_m*/
64 1025000 0 0 0 0 0
65 1200000 0 0 0 0 0
66 1313000 0 0 0x100000 0x40000 0
67 1375000 1 0 0 0 0
68 1389000 1 0 0 0 0
69 >;
70 };
71
72 abb_iva: regulator-abb-iva {
73 status = "okay";
74
75 reg = <0x4a307bd8 0x8>, <0x4a306010 0x4>,
76 <0x4A002268 0x4>;
77 reg-names = "base-address", "int-address",
78 "efuse-address";
79
80 ti,abb_info = <
81 /*uV ABB efuse rbb_m fbb_m vset_m*/
82 950000 0 0 0 0 0
83 1140000 0 0 0 0 0
84 1291000 0 0 0x200000 0 0
85 1375000 1 0 0 0 0
86 1376000 1 0 0 0 0
87 >;
88 };
53 }; 89 };
90
54}; 91};
55 92
56/include/ "omap446x-clocks.dtsi" 93/include/ "omap446x-clocks.dtsi"
diff --git a/arch/arm/boot/dts/omap5-uevm.dts b/arch/arm/boot/dts/omap5-uevm.dts
index 002fa70180a5..3b99ec25b748 100644
--- a/arch/arm/boot/dts/omap5-uevm.dts
+++ b/arch/arm/boot/dts/omap5-uevm.dts
@@ -31,12 +31,8 @@
31 hsusb2_phy: hsusb2_phy { 31 hsusb2_phy: hsusb2_phy {
32 compatible = "usb-nop-xceiv"; 32 compatible = "usb-nop-xceiv";
33 reset-gpios = <&gpio3 16 GPIO_ACTIVE_LOW>; /* gpio3_80 HUB_NRESET */ 33 reset-gpios = <&gpio3 16 GPIO_ACTIVE_LOW>; /* gpio3_80 HUB_NRESET */
34 /** 34 clocks = <&auxclk1_ck>;
35 * FIXME 35 clock-names = "main_clk";
36 * Put the right clock phandle here when available
37 * clocks = <&auxclk1>;
38 * clock-names = "main_clk";
39 */
40 clock-frequency = <19200000>; 36 clock-frequency = <19200000>;
41 }; 37 };
42 38
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi
index a72813a9663e..859a800a77fc 100644
--- a/arch/arm/boot/dts/omap5.dtsi
+++ b/arch/arm/boot/dts/omap5.dtsi
@@ -49,6 +49,12 @@
49 1000000 1060000 49 1000000 1060000
50 1500000 1250000 50 1500000 1250000
51 >; 51 >;
52
53 clocks = <&dpll_mpu_ck>;
54 clock-names = "cpu";
55
56 clock-latency = <300000>; /* From omap-cpufreq driver */
57
52 /* cooling options */ 58 /* cooling options */
53 cooling-min-level = <0>; 59 cooling-min-level = <0>;
54 cooling-max-level = <2>; 60 cooling-max-level = <2>;
@@ -353,6 +359,7 @@
353 compatible = "ti,omap4-hwspinlock"; 359 compatible = "ti,omap4-hwspinlock";
354 reg = <0x4a0f6000 0x1000>; 360 reg = <0x4a0f6000 0x1000>;
355 ti,hwmods = "spinlock"; 361 ti,hwmods = "spinlock";
362 #hwlock-cells = <1>;
356 }; 363 };
357 364
358 mcspi1: spi@48098000 { 365 mcspi1: spi@48098000 {
@@ -529,6 +536,7 @@
529 dmas = <&sdma 65>, 536 dmas = <&sdma 65>,
530 <&sdma 66>; 537 <&sdma 66>;
531 dma-names = "up_link", "dn_link"; 538 dma-names = "up_link", "dn_link";
539 status = "disabled";
532 }; 540 };
533 541
534 dmic: dmic@4012e000 { 542 dmic: dmic@4012e000 {
@@ -540,6 +548,7 @@
540 ti,hwmods = "dmic"; 548 ti,hwmods = "dmic";
541 dmas = <&sdma 67>; 549 dmas = <&sdma 67>;
542 dma-names = "up_link"; 550 dma-names = "up_link";
551 status = "disabled";
543 }; 552 };
544 553
545 mcbsp1: mcbsp@40122000 { 554 mcbsp1: mcbsp@40122000 {
@@ -554,6 +563,7 @@
554 dmas = <&sdma 33>, 563 dmas = <&sdma 33>,
555 <&sdma 34>; 564 <&sdma 34>;
556 dma-names = "tx", "rx"; 565 dma-names = "tx", "rx";
566 status = "disabled";
557 }; 567 };
558 568
559 mcbsp2: mcbsp@40124000 { 569 mcbsp2: mcbsp@40124000 {
@@ -568,6 +578,7 @@
568 dmas = <&sdma 17>, 578 dmas = <&sdma 17>,
569 <&sdma 18>; 579 <&sdma 18>;
570 dma-names = "tx", "rx"; 580 dma-names = "tx", "rx";
581 status = "disabled";
571 }; 582 };
572 583
573 mcbsp3: mcbsp@40126000 { 584 mcbsp3: mcbsp@40126000 {
@@ -582,6 +593,7 @@
582 dmas = <&sdma 19>, 593 dmas = <&sdma 19>,
583 <&sdma 20>; 594 <&sdma 20>;
584 dma-names = "tx", "rx"; 595 dma-names = "tx", "rx";
596 status = "disabled";
585 }; 597 };
586 598
587 timer1: timer@4ae18000 { 599 timer1: timer@4ae18000 {
@@ -683,6 +695,13 @@
683 ti,hwmods = "wd_timer2"; 695 ti,hwmods = "wd_timer2";
684 }; 696 };
685 697
698 dmm@4e000000 {
699 compatible = "ti,omap5-dmm";
700 reg = <0x4e000000 0x800>;
701 interrupts = <0 113 0x4>;
702 ti,hwmods = "dmm";
703 };
704
686 emif1: emif@4c000000 { 705 emif1: emif@4c000000 {
687 compatible = "ti,emif-4d5"; 706 compatible = "ti,emif-4d5";
688 ti,hwmods = "emif1"; 707 ti,hwmods = "emif1";
@@ -732,7 +751,8 @@
732 compatible = "snps,dwc3"; 751 compatible = "snps,dwc3";
733 reg = <0x4a030000 0x10000>; 752 reg = <0x4a030000 0x10000>;
734 interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>; 753 interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
735 usb-phy = <&usb2_phy>, <&usb3_phy>; 754 phys = <&usb2_phy>, <&usb3_phy>;
755 phy-names = "usb2-phy", "usb3-phy";
736 dr_mode = "peripheral"; 756 dr_mode = "peripheral";
737 tx-fifo-resize; 757 tx-fifo-resize;
738 }; 758 };
@@ -749,6 +769,7 @@
749 compatible = "ti,omap-usb2"; 769 compatible = "ti,omap-usb2";
750 reg = <0x4a084000 0x7c>; 770 reg = <0x4a084000 0x7c>;
751 ctrl-module = <&omap_control_usb2phy>; 771 ctrl-module = <&omap_control_usb2phy>;
772 #phy-cells = <0>;
752 }; 773 };
753 774
754 usb3_phy: usb3phy@4a084400 { 775 usb3_phy: usb3phy@4a084400 {
@@ -758,6 +779,7 @@
758 <0x4a084c00 0x40>; 779 <0x4a084c00 0x40>;
759 reg-names = "phy_rx", "phy_tx", "pll_ctrl"; 780 reg-names = "phy_rx", "phy_tx", "pll_ctrl";
760 ctrl-module = <&omap_control_usb3phy>; 781 ctrl-module = <&omap_control_usb3phy>;
782 #phy-cells = <0>;
761 }; 783 };
762 }; 784 };
763 785
@@ -777,14 +799,14 @@
777 ranges; 799 ranges;
778 800
779 usbhsohci: ohci@4a064800 { 801 usbhsohci: ohci@4a064800 {
780 compatible = "ti,ohci-omap3", "usb-ohci"; 802 compatible = "ti,ohci-omap3";
781 reg = <0x4a064800 0x400>; 803 reg = <0x4a064800 0x400>;
782 interrupt-parent = <&gic>; 804 interrupt-parent = <&gic>;
783 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; 805 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
784 }; 806 };
785 807
786 usbhsehci: ehci@4a064c00 { 808 usbhsehci: ehci@4a064c00 {
787 compatible = "ti,ehci-omap", "usb-ehci"; 809 compatible = "ti,ehci-omap";
788 reg = <0x4a064c00 0x400>; 810 reg = <0x4a064c00 0x400>;
789 interrupt-parent = <&gic>; 811 interrupt-parent = <&gic>;
790 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; 812 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
diff --git a/arch/arm/boot/dts/qcom-msm8660-surf.dts b/arch/arm/boot/dts/qcom-msm8660-surf.dts
index 68a72f5507b9..169bad90dac9 100644
--- a/arch/arm/boot/dts/qcom-msm8660-surf.dts
+++ b/arch/arm/boot/dts/qcom-msm8660-surf.dts
@@ -1,63 +1,6 @@
1/dts-v1/; 1#include "qcom-msm8660.dtsi"
2
3/include/ "skeleton.dtsi"
4
5#include <dt-bindings/clock/qcom,gcc-msm8660.h>
6 2
7/ { 3/ {
8 model = "Qualcomm MSM8660 SURF"; 4 model = "Qualcomm MSM8660 SURF";
9 compatible = "qcom,msm8660-surf", "qcom,msm8660"; 5 compatible = "qcom,msm8660-surf", "qcom,msm8660";
10 interrupt-parent = <&intc>;
11
12 intc: interrupt-controller@2080000 {
13 compatible = "qcom,msm-8660-qgic";
14 interrupt-controller;
15 #interrupt-cells = <3>;
16 reg = < 0x02080000 0x1000 >,
17 < 0x02081000 0x1000 >;
18 };
19
20 timer@2000000 {
21 compatible = "qcom,scss-timer", "qcom,msm-timer";
22 interrupts = <1 0 0x301>,
23 <1 1 0x301>,
24 <1 2 0x301>;
25 reg = <0x02000000 0x100>;
26 clock-frequency = <27000000>,
27 <32768>;
28 cpu-offset = <0x40000>;
29 };
30
31 msmgpio: gpio@800000 {
32 compatible = "qcom,msm-gpio";
33 reg = <0x00800000 0x4000>;
34 gpio-controller;
35 #gpio-cells = <2>;
36 ngpio = <173>;
37 interrupts = <0 16 0x4>;
38 interrupt-controller;
39 #interrupt-cells = <2>;
40 };
41
42 gcc: clock-controller@900000 {
43 compatible = "qcom,gcc-msm8660";
44 #clock-cells = <1>;
45 #reset-cells = <1>;
46 reg = <0x900000 0x4000>;
47 };
48
49 serial@19c40000 {
50 compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
51 reg = <0x19c40000 0x1000>,
52 <0x19c00000 0x1000>;
53 interrupts = <0 195 0x0>;
54 clocks = <&gcc GSBI12_UART_CLK>, <&gcc GSBI12_H_CLK>;
55 clock-names = "core", "iface";
56 };
57
58 qcom,ssbi@500000 {
59 compatible = "qcom,ssbi";
60 reg = <0x500000 0x1000>;
61 qcom,controller-type = "pmic-arbiter";
62 };
63}; 6};
diff --git a/arch/arm/boot/dts/qcom-msm8660.dtsi b/arch/arm/boot/dts/qcom-msm8660.dtsi
new file mode 100644
index 000000000000..c52a9e964a44
--- /dev/null
+++ b/arch/arm/boot/dts/qcom-msm8660.dtsi
@@ -0,0 +1,87 @@
1/dts-v1/;
2
3/include/ "skeleton.dtsi"
4
5#include <dt-bindings/clock/qcom,gcc-msm8660.h>
6
7/ {
8 model = "Qualcomm MSM8660";
9 compatible = "qcom,msm8660";
10 interrupt-parent = <&intc>;
11
12 cpus {
13 #address-cells = <1>;
14 #size-cells = <0>;
15 compatible = "qcom,scorpion";
16 enable-method = "qcom,gcc-msm8660";
17
18 cpu@0 {
19 device_type = "cpu";
20 reg = <0>;
21 next-level-cache = <&L2>;
22 };
23
24 cpu@1 {
25 device_type = "cpu";
26 reg = <1>;
27 next-level-cache = <&L2>;
28 };
29
30 L2: l2-cache {
31 compatible = "cache";
32 cache-level = <2>;
33 };
34 };
35
36 intc: interrupt-controller@2080000 {
37 compatible = "qcom,msm-8660-qgic";
38 interrupt-controller;
39 #interrupt-cells = <3>;
40 reg = < 0x02080000 0x1000 >,
41 < 0x02081000 0x1000 >;
42 };
43
44 timer@2000000 {
45 compatible = "qcom,scss-timer", "qcom,msm-timer";
46 interrupts = <1 0 0x301>,
47 <1 1 0x301>,
48 <1 2 0x301>;
49 reg = <0x02000000 0x100>;
50 clock-frequency = <27000000>,
51 <32768>;
52 cpu-offset = <0x40000>;
53 };
54
55 msmgpio: gpio@800000 {
56 compatible = "qcom,msm-gpio";
57 reg = <0x00800000 0x4000>;
58 gpio-controller;
59 #gpio-cells = <2>;
60 ngpio = <173>;
61 interrupts = <0 16 0x4>;
62 interrupt-controller;
63 #interrupt-cells = <2>;
64 };
65
66 gcc: clock-controller@900000 {
67 compatible = "qcom,gcc-msm8660";
68 #clock-cells = <1>;
69 #reset-cells = <1>;
70 reg = <0x900000 0x4000>;
71 };
72
73 serial@19c40000 {
74 compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
75 reg = <0x19c40000 0x1000>,
76 <0x19c00000 0x1000>;
77 interrupts = <0 195 0x0>;
78 clocks = <&gcc GSBI12_UART_CLK>, <&gcc GSBI12_H_CLK>;
79 clock-names = "core", "iface";
80 };
81
82 qcom,ssbi@500000 {
83 compatible = "qcom,ssbi";
84 reg = <0x500000 0x1000>;
85 qcom,controller-type = "pmic-arbiter";
86 };
87};
diff --git a/arch/arm/boot/dts/qcom-msm8960-cdp.dts b/arch/arm/boot/dts/qcom-msm8960-cdp.dts
index 7c30de4fa302..a58fb88315f6 100644
--- a/arch/arm/boot/dts/qcom-msm8960-cdp.dts
+++ b/arch/arm/boot/dts/qcom-msm8960-cdp.dts
@@ -1,70 +1,6 @@
1/dts-v1/; 1#include "qcom-msm8960.dtsi"
2
3/include/ "skeleton.dtsi"
4
5#include <dt-bindings/clock/qcom,gcc-msm8960.h>
6 2
7/ { 3/ {
8 model = "Qualcomm MSM8960 CDP"; 4 model = "Qualcomm MSM8960 CDP";
9 compatible = "qcom,msm8960-cdp", "qcom,msm8960"; 5 compatible = "qcom,msm8960-cdp", "qcom,msm8960";
10 interrupt-parent = <&intc>;
11
12 intc: interrupt-controller@2000000 {
13 compatible = "qcom,msm-qgic2";
14 interrupt-controller;
15 #interrupt-cells = <3>;
16 reg = < 0x02000000 0x1000 >,
17 < 0x02002000 0x1000 >;
18 };
19
20 timer@200a000 {
21 compatible = "qcom,kpss-timer", "qcom,msm-timer";
22 interrupts = <1 1 0x301>,
23 <1 2 0x301>,
24 <1 3 0x301>;
25 reg = <0x0200a000 0x100>;
26 clock-frequency = <27000000>,
27 <32768>;
28 cpu-offset = <0x80000>;
29 };
30
31 msmgpio: gpio@800000 {
32 compatible = "qcom,msm-gpio";
33 gpio-controller;
34 #gpio-cells = <2>;
35 ngpio = <150>;
36 interrupts = <0 16 0x4>;
37 interrupt-controller;
38 #interrupt-cells = <2>;
39 reg = <0x800000 0x4000>;
40 };
41
42 gcc: clock-controller@900000 {
43 compatible = "qcom,gcc-msm8960";
44 #clock-cells = <1>;
45 #reset-cells = <1>;
46 reg = <0x900000 0x4000>;
47 };
48
49 clock-controller@4000000 {
50 compatible = "qcom,mmcc-msm8960";
51 reg = <0x4000000 0x1000>;
52 #clock-cells = <1>;
53 #reset-cells = <1>;
54 };
55
56 serial@16440000 {
57 compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
58 reg = <0x16440000 0x1000>,
59 <0x16400000 0x1000>;
60 interrupts = <0 154 0x0>;
61 clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>;
62 clock-names = "core", "iface";
63 };
64
65 qcom,ssbi@500000 {
66 compatible = "qcom,ssbi";
67 reg = <0x500000 0x1000>;
68 qcom,controller-type = "pmic-arbiter";
69 };
70}; 6};
diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi b/arch/arm/boot/dts/qcom-msm8960.dtsi
new file mode 100644
index 000000000000..ecfba7254205
--- /dev/null
+++ b/arch/arm/boot/dts/qcom-msm8960.dtsi
@@ -0,0 +1,129 @@
1/dts-v1/;
2
3/include/ "skeleton.dtsi"
4
5#include <dt-bindings/clock/qcom,gcc-msm8960.h>
6
7/ {
8 model = "Qualcomm MSM8960";
9 compatible = "qcom,msm8960";
10 interrupt-parent = <&intc>;
11
12 cpus {
13 #address-cells = <1>;
14 #size-cells = <0>;
15 interrupts = <1 14 0x304>;
16 compatible = "qcom,krait";
17 enable-method = "qcom,kpss-acc-v1";
18
19 cpu@0 {
20 device_type = "cpu";
21 reg = <0>;
22 next-level-cache = <&L2>;
23 qcom,acc = <&acc0>;
24 qcom,saw = <&saw0>;
25 };
26
27 cpu@1 {
28 device_type = "cpu";
29 reg = <1>;
30 next-level-cache = <&L2>;
31 qcom,acc = <&acc1>;
32 qcom,saw = <&saw1>;
33 };
34
35 L2: l2-cache {
36 compatible = "cache";
37 cache-level = <2>;
38 interrupts = <0 2 0x4>;
39 };
40 };
41
42 intc: interrupt-controller@2000000 {
43 compatible = "qcom,msm-qgic2";
44 interrupt-controller;
45 #interrupt-cells = <3>;
46 reg = < 0x02000000 0x1000 >,
47 < 0x02002000 0x1000 >;
48 };
49
50 timer@200a000 {
51 compatible = "qcom,kpss-timer", "qcom,msm-timer";
52 interrupts = <1 1 0x301>,
53 <1 2 0x301>,
54 <1 3 0x301>;
55 reg = <0x0200a000 0x100>;
56 clock-frequency = <27000000>,
57 <32768>;
58 cpu-offset = <0x80000>;
59 };
60
61 msmgpio: gpio@800000 {
62 compatible = "qcom,msm-gpio";
63 gpio-controller;
64 #gpio-cells = <2>;
65 ngpio = <150>;
66 interrupts = <0 16 0x4>;
67 interrupt-controller;
68 #interrupt-cells = <2>;
69 reg = <0x800000 0x4000>;
70 };
71
72 gcc: clock-controller@900000 {
73 compatible = "qcom,gcc-msm8960";
74 #clock-cells = <1>;
75 #reset-cells = <1>;
76 reg = <0x900000 0x4000>;
77 };
78
79 clock-controller@4000000 {
80 compatible = "qcom,mmcc-msm8960";
81 reg = <0x4000000 0x1000>;
82 #clock-cells = <1>;
83 #reset-cells = <1>;
84 };
85
86 acc0: clock-controller@2088000 {
87 compatible = "qcom,kpss-acc-v1";
88 reg = <0x02088000 0x1000>, <0x02008000 0x1000>;
89 };
90
91 acc1: clock-controller@2098000 {
92 compatible = "qcom,kpss-acc-v1";
93 reg = <0x02098000 0x1000>, <0x02008000 0x1000>;
94 };
95
96 saw0: regulator@2089000 {
97 compatible = "qcom,saw2";
98 reg = <0x02089000 0x1000>, <0x02009000 0x1000>;
99 regulator;
100 };
101
102 saw1: regulator@2099000 {
103 compatible = "qcom,saw2";
104 reg = <0x02099000 0x1000>, <0x02009000 0x1000>;
105 regulator;
106 };
107
108 serial@16440000 {
109 compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
110 reg = <0x16440000 0x1000>,
111 <0x16400000 0x1000>;
112 interrupts = <0 154 0x0>;
113 clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>;
114 clock-names = "core", "iface";
115 };
116
117 qcom,ssbi@500000 {
118 compatible = "qcom,ssbi";
119 reg = <0x500000 0x1000>;
120 qcom,controller-type = "pmic-arbiter";
121 };
122
123 rng@1a500000 {
124 compatible = "qcom,prng";
125 reg = <0x1a500000 0x200>;
126 clocks = <&gcc PRNG_CLK>;
127 clock-names = "core";
128 };
129};
diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi
index 9e5dadb101eb..011eb0937e58 100644
--- a/arch/arm/boot/dts/qcom-msm8974.dtsi
+++ b/arch/arm/boot/dts/qcom-msm8974.dtsi
@@ -9,6 +9,49 @@
9 compatible = "qcom,msm8974"; 9 compatible = "qcom,msm8974";
10 interrupt-parent = <&intc>; 10 interrupt-parent = <&intc>;
11 11
12 cpus {
13 #address-cells = <1>;
14 #size-cells = <0>;
15 interrupts = <1 9 0xf04>;
16 compatible = "qcom,krait";
17 enable-method = "qcom,kpss-acc-v2";
18
19 cpu@0 {
20 device_type = "cpu";
21 reg = <0>;
22 next-level-cache = <&L2>;
23 qcom,acc = <&acc0>;
24 };
25
26 cpu@1 {
27 device_type = "cpu";
28 reg = <1>;
29 next-level-cache = <&L2>;
30 qcom,acc = <&acc1>;
31 };
32
33 cpu@2 {
34 device_type = "cpu";
35 reg = <2>;
36 next-level-cache = <&L2>;
37 qcom,acc = <&acc2>;
38 };
39
40 cpu@3 {
41 device_type = "cpu";
42 reg = <3>;
43 next-level-cache = <&L2>;
44 qcom,acc = <&acc3>;
45 };
46
47 L2: l2-cache {
48 compatible = "cache";
49 cache-level = <2>;
50 interrupts = <0 2 0x4>;
51 qcom,saw = <&saw_l2>;
52 };
53 };
54
12 soc: soc { 55 soc: soc {
13 #address-cells = <1>; 56 #address-cells = <1>;
14 #size-cells = <1>; 57 #size-cells = <1>;
@@ -91,6 +134,32 @@
91 }; 134 };
92 }; 135 };
93 136
137 saw_l2: regulator@f9012000 {
138 compatible = "qcom,saw2";
139 reg = <0xf9012000 0x1000>;
140 regulator;
141 };
142
143 acc0: clock-controller@f9088000 {
144 compatible = "qcom,kpss-acc-v2";
145 reg = <0xf9088000 0x1000>, <0xf9008000 0x1000>;
146 };
147
148 acc1: clock-controller@f9098000 {
149 compatible = "qcom,kpss-acc-v2";
150 reg = <0xf9098000 0x1000>, <0xf9008000 0x1000>;
151 };
152
153 acc2: clock-controller@f90a8000 {
154 compatible = "qcom,kpss-acc-v2";
155 reg = <0xf90a8000 0x1000>, <0xf9008000 0x1000>;
156 };
157
158 acc3: clock-controller@f90b8000 {
159 compatible = "qcom,kpss-acc-v2";
160 reg = <0xf90b8000 0x1000>, <0xf9008000 0x1000>;
161 };
162
94 restart@fc4ab000 { 163 restart@fc4ab000 {
95 compatible = "qcom,pshold"; 164 compatible = "qcom,pshold";
96 reg = <0xfc4ab000 0x4>; 165 reg = <0xfc4ab000 0x4>;
@@ -117,5 +186,12 @@
117 clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>, <&gcc GCC_BLSP1_AHB_CLK>; 186 clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>, <&gcc GCC_BLSP1_AHB_CLK>;
118 clock-names = "core", "iface"; 187 clock-names = "core", "iface";
119 }; 188 };
189
190 rng@f9bff000 {
191 compatible = "qcom,prng";
192 reg = <0xf9bff000 0x200>;
193 clocks = <&gcc GCC_PRNG_AHB_CLK>;
194 clock-names = "core";
195 };
120 }; 196 };
121}; 197};
diff --git a/arch/arm/boot/dts/r7s72100-genmai-reference.dts b/arch/arm/boot/dts/r7s72100-genmai-reference.dts
index da19c70ed82b..e664611a47c8 100644
--- a/arch/arm/boot/dts/r7s72100-genmai-reference.dts
+++ b/arch/arm/boot/dts/r7s72100-genmai-reference.dts
@@ -9,7 +9,7 @@
9 */ 9 */
10 10
11/dts-v1/; 11/dts-v1/;
12/include/ "r7s72100.dtsi" 12#include "r7s72100.dtsi"
13 13
14/ { 14/ {
15 model = "Genmai"; 15 model = "Genmai";
@@ -29,3 +29,14 @@
29 #size-cells = <1>; 29 #size-cells = <1>;
30 }; 30 };
31}; 31};
32
33&i2c2 {
34 status = "okay";
35 clock-frequency = <400000>;
36
37 eeprom@50 {
38 compatible = "renesas,24c128";
39 reg = <0x50>;
40 pagesize = <64>;
41 };
42};
diff --git a/arch/arm/boot/dts/r7s72100.dtsi b/arch/arm/boot/dts/r7s72100.dtsi
index 46b82aa7dc4e..ee700717a34b 100644
--- a/arch/arm/boot/dts/r7s72100.dtsi
+++ b/arch/arm/boot/dts/r7s72100.dtsi
@@ -8,12 +8,26 @@
8 * kind, whether express or implied. 8 * kind, whether express or implied.
9 */ 9 */
10 10
11#include <dt-bindings/interrupt-controller/irq.h>
12
11/ { 13/ {
12 compatible = "renesas,r7s72100"; 14 compatible = "renesas,r7s72100";
13 interrupt-parent = <&gic>; 15 interrupt-parent = <&gic>;
14 #address-cells = <1>; 16 #address-cells = <1>;
15 #size-cells = <1>; 17 #size-cells = <1>;
16 18
19 aliases {
20 i2c0 = &i2c0;
21 i2c1 = &i2c1;
22 i2c2 = &i2c2;
23 i2c3 = &i2c3;
24 spi0 = &spi0;
25 spi1 = &spi1;
26 spi2 = &spi2;
27 spi3 = &spi3;
28 spi4 = &spi4;
29 };
30
17 cpus { 31 cpus {
18 #address-cells = <1>; 32 #address-cells = <1>;
19 #size-cells = <0>; 33 #size-cells = <0>;
@@ -33,4 +47,137 @@
33 reg = <0xe8201000 0x1000>, 47 reg = <0xe8201000 0x1000>,
34 <0xe8202000 0x1000>; 48 <0xe8202000 0x1000>;
35 }; 49 };
50
51 i2c0: i2c@fcfee000 {
52 #address-cells = <1>;
53 #size-cells = <0>;
54 compatible = "renesas,riic-r7s72100", "renesas,riic-rz";
55 reg = <0xfcfee000 0x44>;
56 interrupts = <0 157 IRQ_TYPE_LEVEL_HIGH>,
57 <0 158 IRQ_TYPE_EDGE_RISING>,
58 <0 159 IRQ_TYPE_EDGE_RISING>,
59 <0 160 IRQ_TYPE_LEVEL_HIGH>,
60 <0 161 IRQ_TYPE_LEVEL_HIGH>,
61 <0 162 IRQ_TYPE_LEVEL_HIGH>,
62 <0 163 IRQ_TYPE_LEVEL_HIGH>,
63 <0 164 IRQ_TYPE_LEVEL_HIGH>;
64 clock-frequency = <100000>;
65 status = "disabled";
66 };
67
68 i2c1: i2c@fcfee400 {
69 #address-cells = <1>;
70 #size-cells = <0>;
71 compatible = "renesas,riic-r7s72100", "renesas,riic-rz";
72 reg = <0xfcfee400 0x44>;
73 interrupts = <0 165 IRQ_TYPE_LEVEL_HIGH>,
74 <0 166 IRQ_TYPE_EDGE_RISING>,
75 <0 167 IRQ_TYPE_EDGE_RISING>,
76 <0 168 IRQ_TYPE_LEVEL_HIGH>,
77 <0 169 IRQ_TYPE_LEVEL_HIGH>,
78 <0 170 IRQ_TYPE_LEVEL_HIGH>,
79 <0 171 IRQ_TYPE_LEVEL_HIGH>,
80 <0 172 IRQ_TYPE_LEVEL_HIGH>;
81 clock-frequency = <100000>;
82 status = "disabled";
83 };
84
85 i2c2: i2c@fcfee800 {
86 #address-cells = <1>;
87 #size-cells = <0>;
88 compatible = "renesas,riic-r7s72100", "renesas,riic-rz";
89 reg = <0xfcfee800 0x44>;
90 interrupts = <0 173 IRQ_TYPE_LEVEL_HIGH>,
91 <0 174 IRQ_TYPE_EDGE_RISING>,
92 <0 175 IRQ_TYPE_EDGE_RISING>,
93 <0 176 IRQ_TYPE_LEVEL_HIGH>,
94 <0 177 IRQ_TYPE_LEVEL_HIGH>,
95 <0 178 IRQ_TYPE_LEVEL_HIGH>,
96 <0 179 IRQ_TYPE_LEVEL_HIGH>,
97 <0 180 IRQ_TYPE_LEVEL_HIGH>;
98 clock-frequency = <100000>;
99 status = "disabled";
100 };
101
102 i2c3: i2c@fcfeec00 {
103 #address-cells = <1>;
104 #size-cells = <0>;
105 compatible = "renesas,riic-r7s72100", "renesas,riic-rz";
106 reg = <0xfcfeec00 0x44>;
107 interrupts = <0 181 IRQ_TYPE_LEVEL_HIGH>,
108 <0 182 IRQ_TYPE_EDGE_RISING>,
109 <0 183 IRQ_TYPE_EDGE_RISING>,
110 <0 184 IRQ_TYPE_LEVEL_HIGH>,
111 <0 185 IRQ_TYPE_LEVEL_HIGH>,
112 <0 186 IRQ_TYPE_LEVEL_HIGH>,
113 <0 187 IRQ_TYPE_LEVEL_HIGH>,
114 <0 188 IRQ_TYPE_LEVEL_HIGH>;
115 clock-frequency = <100000>;
116 status = "disabled";
117 };
118
119 spi0: spi@e800c800 {
120 compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
121 reg = <0xe800c800 0x24>;
122 interrupts = <0 238 IRQ_TYPE_LEVEL_HIGH>,
123 <0 239 IRQ_TYPE_LEVEL_HIGH>,
124 <0 240 IRQ_TYPE_LEVEL_HIGH>;
125 interrupt-names = "error", "rx", "tx";
126 num-cs = <1>;
127 #address-cells = <1>;
128 #size-cells = <0>;
129 status = "disabled";
130 };
131
132 spi1: spi@e800d000 {
133 compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
134 reg = <0xe800d000 0x24>;
135 interrupts = <0 241 IRQ_TYPE_LEVEL_HIGH>,
136 <0 242 IRQ_TYPE_LEVEL_HIGH>,
137 <0 243 IRQ_TYPE_LEVEL_HIGH>;
138 interrupt-names = "error", "rx", "tx";
139 num-cs = <1>;
140 #address-cells = <1>;
141 #size-cells = <0>;
142 status = "disabled";
143 };
144
145 spi2: spi@e800d800 {
146 compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
147 reg = <0xe800d800 0x24>;
148 interrupts = <0 244 IRQ_TYPE_LEVEL_HIGH>,
149 <0 245 IRQ_TYPE_LEVEL_HIGH>,
150 <0 246 IRQ_TYPE_LEVEL_HIGH>;
151 interrupt-names = "error", "rx", "tx";
152 num-cs = <1>;
153 #address-cells = <1>;
154 #size-cells = <0>;
155 status = "disabled";
156 };
157
158 spi3: spi@e800e000 {
159 compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
160 reg = <0xe800e000 0x24>;
161 interrupts = <0 247 IRQ_TYPE_LEVEL_HIGH>,
162 <0 248 IRQ_TYPE_LEVEL_HIGH>,
163 <0 249 IRQ_TYPE_LEVEL_HIGH>;
164 interrupt-names = "error", "rx", "tx";
165 num-cs = <1>;
166 #address-cells = <1>;
167 #size-cells = <0>;
168 status = "disabled";
169 };
170
171 spi4: spi@e800e800 {
172 compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
173 reg = <0xe800e800 0x24>;
174 interrupts = <0 250 IRQ_TYPE_LEVEL_HIGH>,
175 <0 251 IRQ_TYPE_LEVEL_HIGH>,
176 <0 252 IRQ_TYPE_LEVEL_HIGH>;
177 interrupt-names = "error", "rx", "tx";
178 num-cs = <1>;
179 #address-cells = <1>;
180 #size-cells = <0>;
181 status = "disabled";
182 };
36}; 183};
diff --git a/arch/arm/boot/dts/r8a7778.dtsi b/arch/arm/boot/dts/r8a7778.dtsi
index ddb3bd7a8838..85c5b3b99f5e 100644
--- a/arch/arm/boot/dts/r8a7778.dtsi
+++ b/arch/arm/boot/dts/r8a7778.dtsi
@@ -203,46 +203,6 @@
203 status = "disabled"; 203 status = "disabled";
204 }; 204 };
205 205
206 i2c0: i2c@ffc70000 {
207 #address-cells = <1>;
208 #size-cells = <0>;
209 compatible = "renesas,i2c-r8a7778";
210 reg = <0xffc70000 0x1000>;
211 interrupt-parent = <&gic>;
212 interrupts = <0 67 IRQ_TYPE_LEVEL_HIGH>;
213 status = "disabled";
214 };
215
216 i2c1: i2c@ffc71000 {
217 #address-cells = <1>;
218 #size-cells = <0>;
219 compatible = "renesas,i2c-r8a7778";
220 reg = <0xffc71000 0x1000>;
221 interrupt-parent = <&gic>;
222 interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>;
223 status = "disabled";
224 };
225
226 i2c2: i2c@ffc72000 {
227 #address-cells = <1>;
228 #size-cells = <0>;
229 compatible = "renesas,i2c-r8a7778";
230 reg = <0xffc72000 0x1000>;
231 interrupt-parent = <&gic>;
232 interrupts = <0 76 IRQ_TYPE_LEVEL_HIGH>;
233 status = "disabled";
234 };
235
236 i2c3: i2c@ffc73000 {
237 #address-cells = <1>;
238 #size-cells = <0>;
239 compatible = "renesas,i2c-r8a7778";
240 reg = <0xffc73000 0x1000>;
241 interrupt-parent = <&gic>;
242 interrupts = <0 77 IRQ_TYPE_LEVEL_HIGH>;
243 status = "disabled";
244 };
245
246 hspi0: spi@fffc7000 { 206 hspi0: spi@fffc7000 {
247 compatible = "renesas,hspi"; 207 compatible = "renesas,hspi";
248 reg = <0xfffc7000 0x18>; 208 reg = <0xfffc7000 0x18>;
diff --git a/arch/arm/boot/dts/r8a7790-lager.dts b/arch/arm/boot/dts/r8a7790-lager.dts
index 57569cba1528..6e99eb2df076 100644
--- a/arch/arm/boot/dts/r8a7790-lager.dts
+++ b/arch/arm/boot/dts/r8a7790-lager.dts
@@ -1,7 +1,8 @@
1/* 1/*
2 * Device Tree Source for the Lager board 2 * Device Tree Source for the Lager board
3 * 3 *
4 * Copyright (C) 2013 Renesas Solutions Corp. 4 * Copyright (C) 2013-2014 Renesas Solutions Corp.
5 * Copyright (C) 2014 Cogent Embedded, Inc.
5 * 6 *
6 * This file is licensed under the terms of the GNU General Public License 7 * This file is licensed under the terms of the GNU General Public License
7 * version 2. This program is licensed "as is" without any warranty of any 8 * version 2. This program is licensed "as is" without any warranty of any
@@ -56,6 +57,54 @@
56 regulator-boot-on; 57 regulator-boot-on;
57 regulator-always-on; 58 regulator-always-on;
58 }; 59 };
60
61 vcc_sdhi0: regulator@1 {
62 compatible = "regulator-fixed";
63
64 regulator-name = "SDHI0 Vcc";
65 regulator-min-microvolt = <3300000>;
66 regulator-max-microvolt = <3300000>;
67
68 gpio = <&gpio5 24 GPIO_ACTIVE_HIGH>;
69 enable-active-high;
70 };
71
72 vccq_sdhi0: regulator@2 {
73 compatible = "regulator-gpio";
74
75 regulator-name = "SDHI0 VccQ";
76 regulator-min-microvolt = <1800000>;
77 regulator-max-microvolt = <3300000>;
78
79 gpios = <&gpio5 29 GPIO_ACTIVE_HIGH>;
80 gpios-states = <1>;
81 states = <3300000 1
82 1800000 0>;
83 };
84
85 vcc_sdhi2: regulator@3 {
86 compatible = "regulator-fixed";
87
88 regulator-name = "SDHI2 Vcc";
89 regulator-min-microvolt = <3300000>;
90 regulator-max-microvolt = <3300000>;
91
92 gpio = <&gpio5 25 GPIO_ACTIVE_HIGH>;
93 enable-active-high;
94 };
95
96 vccq_sdhi2: regulator@4 {
97 compatible = "regulator-gpio";
98
99 regulator-name = "SDHI2 VccQ";
100 regulator-min-microvolt = <1800000>;
101 regulator-max-microvolt = <3300000>;
102
103 gpios = <&gpio5 30 GPIO_ACTIVE_HIGH>;
104 gpios-states = <1>;
105 states = <3300000 1
106 1800000 0>;
107 };
59}; 108};
60 109
61&extal_clk { 110&extal_clk {
@@ -63,23 +112,68 @@
63}; 112};
64 113
65&pfc { 114&pfc {
66 pinctrl-0 = <&scif0_pins &scif1_pins>; 115 pinctrl-0 = <&du_pins &scif0_pins &scif1_pins>;
67 pinctrl-names = "default"; 116 pinctrl-names = "default";
68 117
118 du_pins: du {
119 renesas,groups = "du_rgb666", "du_sync_1", "du_clk_out_0";
120 renesas,function = "du";
121 };
122
69 scif0_pins: serial0 { 123 scif0_pins: serial0 {
70 renesas,groups = "scif0_data"; 124 renesas,groups = "scif0_data";
71 renesas,function = "scif0"; 125 renesas,function = "scif0";
72 }; 126 };
73 127
128 ether_pins: ether {
129 renesas,groups = "eth_link", "eth_mdio", "eth_rmii";
130 renesas,function = "eth";
131 };
132
133 phy1_pins: phy1 {
134 renesas,groups = "intc_irq0";
135 renesas,function = "intc";
136 };
137
74 scif1_pins: serial1 { 138 scif1_pins: serial1 {
75 renesas,groups = "scif1_data"; 139 renesas,groups = "scif1_data";
76 renesas,function = "scif1"; 140 renesas,function = "scif1";
77 }; 141 };
78 142
143 sdhi0_pins: sd0 {
144 renesas,gpios = "sdhi0_data4", "sdhi0_ctrl";
145 renesas,function = "sdhi0";
146 };
147
148 sdhi2_pins: sd2 {
149 renesas,gpios = "sdhi2_data4", "sdhi2_ctrl";
150 renesas,function = "sdhi2";
151 };
152
79 mmc1_pins: mmc1 { 153 mmc1_pins: mmc1 {
80 renesas,groups = "mmc1_data8", "mmc1_ctrl"; 154 renesas,groups = "mmc1_data8", "mmc1_ctrl";
81 renesas,function = "mmc1"; 155 renesas,function = "mmc1";
82 }; 156 };
157
158 qspi_pins: spi {
159 renesas,groups = "qspi_ctrl", "qspi_data4";
160 renesas,function = "qspi";
161 };
162};
163
164&ether {
165 pinctrl-0 = <&ether_pins &phy1_pins>;
166 pinctrl-names = "default";
167
168 phy-handle = <&phy1>;
169 renesas,ether-link-active-low;
170 status = "ok";
171
172 phy1: ethernet-phy@1 {
173 reg = <1>;
174 interrupt-parent = <&irqc0>;
175 interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
176 };
83}; 177};
84 178
85&mmcif1 { 179&mmcif1 {
@@ -91,3 +185,58 @@
91 non-removable; 185 non-removable;
92 status = "okay"; 186 status = "okay";
93}; 187};
188
189&sata1 {
190 status = "okay";
191};
192
193&spi {
194 pinctrl-0 = <&qspi_pins>;
195 pinctrl-names = "default";
196
197 status = "okay";
198
199 flash: flash@0 {
200 #address-cells = <1>;
201 #size-cells = <1>;
202 compatible = "spansion,s25fl512s";
203 reg = <0>;
204 spi-max-frequency = <30000000>;
205 m25p,fast-read;
206
207 partition@0 {
208 label = "loader";
209 reg = <0x00000000 0x00040000>;
210 read-only;
211 };
212 partition@40000 {
213 label = "user";
214 reg = <0x00040000 0x00400000>;
215 read-only;
216 };
217 partition@440000 {
218 label = "flash";
219 reg = <0x00440000 0x03bc0000>;
220 };
221 };
222};
223
224&sdhi0 {
225 pinctrl-0 = <&sdhi0_pins>;
226 pinctrl-names = "default";
227
228 vmmc-supply = <&vcc_sdhi0>;
229 vqmmc-supply = <&vccq_sdhi0>;
230 cd-gpios = <&gpio3 6 GPIO_ACTIVE_LOW>;
231 status = "okay";
232};
233
234&sdhi2 {
235 pinctrl-0 = <&sdhi2_pins>;
236 pinctrl-names = "default";
237
238 vmmc-supply = <&vcc_sdhi2>;
239 vqmmc-supply = <&vccq_sdhi2>;
240 cd-gpios = <&gpio3 22 GPIO_ACTIVE_LOW>;
241 status = "okay";
242};
diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
index 71b1251f79c7..e22520dff8c6 100644
--- a/arch/arm/boot/dts/r8a7790.dtsi
+++ b/arch/arm/boot/dts/r8a7790.dtsi
@@ -1,7 +1,8 @@
1/* 1/*
2 * Device Tree Source for the r8a7790 SoC 2 * Device Tree Source for the r8a7790 SoC
3 * 3 *
4 * Copyright (C) 2013 Renesas Solutions Corp. 4 * Copyright (C) 2013-2014 Renesas Solutions Corp.
5 * Copyright (C) 2014 Cogent Embedded Inc.
5 * 6 *
6 * This file is licensed under the terms of the GNU General Public License 7 * This file is licensed under the terms of the GNU General Public License
7 * version 2. This program is licensed "as is" without any warranty of any 8 * version 2. This program is licensed "as is" without any warranty of any
@@ -18,6 +19,13 @@
18 #address-cells = <2>; 19 #address-cells = <2>;
19 #size-cells = <2>; 20 #size-cells = <2>;
20 21
22 aliases {
23 i2c0 = &i2c0;
24 i2c1 = &i2c1;
25 i2c2 = &i2c2;
26 i2c3 = &i2c3;
27 };
28
21 cpus { 29 cpus {
22 #address-cells = <1>; 30 #address-cells = <1>;
23 #size-cells = <0>; 31 #size-cells = <0>;
@@ -94,7 +102,6 @@
94 gpio0: gpio@e6050000 { 102 gpio0: gpio@e6050000 {
95 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar"; 103 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
96 reg = <0 0xe6050000 0 0x50>; 104 reg = <0 0xe6050000 0 0x50>;
97 interrupt-parent = <&gic>;
98 interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>; 105 interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>;
99 #gpio-cells = <2>; 106 #gpio-cells = <2>;
100 gpio-controller; 107 gpio-controller;
@@ -106,7 +113,6 @@
106 gpio1: gpio@e6051000 { 113 gpio1: gpio@e6051000 {
107 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar"; 114 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
108 reg = <0 0xe6051000 0 0x50>; 115 reg = <0 0xe6051000 0 0x50>;
109 interrupt-parent = <&gic>;
110 interrupts = <0 5 IRQ_TYPE_LEVEL_HIGH>; 116 interrupts = <0 5 IRQ_TYPE_LEVEL_HIGH>;
111 #gpio-cells = <2>; 117 #gpio-cells = <2>;
112 gpio-controller; 118 gpio-controller;
@@ -118,7 +124,6 @@
118 gpio2: gpio@e6052000 { 124 gpio2: gpio@e6052000 {
119 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar"; 125 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
120 reg = <0 0xe6052000 0 0x50>; 126 reg = <0 0xe6052000 0 0x50>;
121 interrupt-parent = <&gic>;
122 interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>; 127 interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>;
123 #gpio-cells = <2>; 128 #gpio-cells = <2>;
124 gpio-controller; 129 gpio-controller;
@@ -130,7 +135,6 @@
130 gpio3: gpio@e6053000 { 135 gpio3: gpio@e6053000 {
131 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar"; 136 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
132 reg = <0 0xe6053000 0 0x50>; 137 reg = <0 0xe6053000 0 0x50>;
133 interrupt-parent = <&gic>;
134 interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>; 138 interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
135 #gpio-cells = <2>; 139 #gpio-cells = <2>;
136 gpio-controller; 140 gpio-controller;
@@ -142,7 +146,6 @@
142 gpio4: gpio@e6054000 { 146 gpio4: gpio@e6054000 {
143 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar"; 147 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
144 reg = <0 0xe6054000 0 0x50>; 148 reg = <0 0xe6054000 0 0x50>;
145 interrupt-parent = <&gic>;
146 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>; 149 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>;
147 #gpio-cells = <2>; 150 #gpio-cells = <2>;
148 gpio-controller; 151 gpio-controller;
@@ -154,7 +157,6 @@
154 gpio5: gpio@e6055000 { 157 gpio5: gpio@e6055000 {
155 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar"; 158 compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
156 reg = <0 0xe6055000 0 0x50>; 159 reg = <0 0xe6055000 0 0x50>;
157 interrupt-parent = <&gic>;
158 interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>; 160 interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>;
159 #gpio-cells = <2>; 161 #gpio-cells = <2>;
160 gpio-controller; 162 gpio-controller;
@@ -166,8 +168,8 @@
166 thermal@e61f0000 { 168 thermal@e61f0000 {
167 compatible = "renesas,thermal-r8a7790", "renesas,rcar-thermal"; 169 compatible = "renesas,thermal-r8a7790", "renesas,rcar-thermal";
168 reg = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>; 170 reg = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>;
169 interrupt-parent = <&gic>;
170 interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>; 171 interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>;
172 clocks = <&mstp5_clks R8A7790_CLK_THERMAL>;
171 }; 173 };
172 174
173 timer { 175 timer {
@@ -183,7 +185,6 @@
183 #interrupt-cells = <2>; 185 #interrupt-cells = <2>;
184 interrupt-controller; 186 interrupt-controller;
185 reg = <0 0xe61c0000 0 0x200>; 187 reg = <0 0xe61c0000 0 0x200>;
186 interrupt-parent = <&gic>;
187 interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>, 188 interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>,
188 <0 1 IRQ_TYPE_LEVEL_HIGH>, 189 <0 1 IRQ_TYPE_LEVEL_HIGH>,
189 <0 2 IRQ_TYPE_LEVEL_HIGH>, 190 <0 2 IRQ_TYPE_LEVEL_HIGH>,
@@ -195,7 +196,6 @@
195 #size-cells = <0>; 196 #size-cells = <0>;
196 compatible = "renesas,i2c-r8a7790"; 197 compatible = "renesas,i2c-r8a7790";
197 reg = <0 0xe6508000 0 0x40>; 198 reg = <0 0xe6508000 0 0x40>;
198 interrupt-parent = <&gic>;
199 interrupts = <0 287 IRQ_TYPE_LEVEL_HIGH>; 199 interrupts = <0 287 IRQ_TYPE_LEVEL_HIGH>;
200 clocks = <&mstp9_clks R8A7790_CLK_I2C0>; 200 clocks = <&mstp9_clks R8A7790_CLK_I2C0>;
201 status = "disabled"; 201 status = "disabled";
@@ -206,7 +206,6 @@
206 #size-cells = <0>; 206 #size-cells = <0>;
207 compatible = "renesas,i2c-r8a7790"; 207 compatible = "renesas,i2c-r8a7790";
208 reg = <0 0xe6518000 0 0x40>; 208 reg = <0 0xe6518000 0 0x40>;
209 interrupt-parent = <&gic>;
210 interrupts = <0 288 IRQ_TYPE_LEVEL_HIGH>; 209 interrupts = <0 288 IRQ_TYPE_LEVEL_HIGH>;
211 clocks = <&mstp9_clks R8A7790_CLK_I2C1>; 210 clocks = <&mstp9_clks R8A7790_CLK_I2C1>;
212 status = "disabled"; 211 status = "disabled";
@@ -217,7 +216,6 @@
217 #size-cells = <0>; 216 #size-cells = <0>;
218 compatible = "renesas,i2c-r8a7790"; 217 compatible = "renesas,i2c-r8a7790";
219 reg = <0 0xe6530000 0 0x40>; 218 reg = <0 0xe6530000 0 0x40>;
220 interrupt-parent = <&gic>;
221 interrupts = <0 286 IRQ_TYPE_LEVEL_HIGH>; 219 interrupts = <0 286 IRQ_TYPE_LEVEL_HIGH>;
222 clocks = <&mstp9_clks R8A7790_CLK_I2C2>; 220 clocks = <&mstp9_clks R8A7790_CLK_I2C2>;
223 status = "disabled"; 221 status = "disabled";
@@ -228,7 +226,6 @@
228 #size-cells = <0>; 226 #size-cells = <0>;
229 compatible = "renesas,i2c-r8a7790"; 227 compatible = "renesas,i2c-r8a7790";
230 reg = <0 0xe6540000 0 0x40>; 228 reg = <0 0xe6540000 0 0x40>;
231 interrupt-parent = <&gic>;
232 interrupts = <0 290 IRQ_TYPE_LEVEL_HIGH>; 229 interrupts = <0 290 IRQ_TYPE_LEVEL_HIGH>;
233 clocks = <&mstp9_clks R8A7790_CLK_I2C3>; 230 clocks = <&mstp9_clks R8A7790_CLK_I2C3>;
234 status = "disabled"; 231 status = "disabled";
@@ -237,7 +234,6 @@
237 mmcif0: mmcif@ee200000 { 234 mmcif0: mmcif@ee200000 {
238 compatible = "renesas,mmcif-r8a7790", "renesas,sh-mmcif"; 235 compatible = "renesas,mmcif-r8a7790", "renesas,sh-mmcif";
239 reg = <0 0xee200000 0 0x80>; 236 reg = <0 0xee200000 0 0x80>;
240 interrupt-parent = <&gic>;
241 interrupts = <0 169 IRQ_TYPE_LEVEL_HIGH>; 237 interrupts = <0 169 IRQ_TYPE_LEVEL_HIGH>;
242 clocks = <&mstp3_clks R8A7790_CLK_MMCIF0>; 238 clocks = <&mstp3_clks R8A7790_CLK_MMCIF0>;
243 reg-io-width = <4>; 239 reg-io-width = <4>;
@@ -247,7 +243,6 @@
247 mmcif1: mmc@ee220000 { 243 mmcif1: mmc@ee220000 {
248 compatible = "renesas,mmcif-r8a7790", "renesas,sh-mmcif"; 244 compatible = "renesas,mmcif-r8a7790", "renesas,sh-mmcif";
249 reg = <0 0xee220000 0 0x80>; 245 reg = <0 0xee220000 0 0x80>;
250 interrupt-parent = <&gic>;
251 interrupts = <0 170 IRQ_TYPE_LEVEL_HIGH>; 246 interrupts = <0 170 IRQ_TYPE_LEVEL_HIGH>;
252 clocks = <&mstp3_clks R8A7790_CLK_MMCIF1>; 247 clocks = <&mstp3_clks R8A7790_CLK_MMCIF1>;
253 reg-io-width = <4>; 248 reg-io-width = <4>;
@@ -262,7 +257,6 @@
262 sdhi0: sd@ee100000 { 257 sdhi0: sd@ee100000 {
263 compatible = "renesas,sdhi-r8a7790"; 258 compatible = "renesas,sdhi-r8a7790";
264 reg = <0 0xee100000 0 0x200>; 259 reg = <0 0xee100000 0 0x200>;
265 interrupt-parent = <&gic>;
266 interrupts = <0 165 IRQ_TYPE_LEVEL_HIGH>; 260 interrupts = <0 165 IRQ_TYPE_LEVEL_HIGH>;
267 clocks = <&mstp3_clks R8A7790_CLK_SDHI0>; 261 clocks = <&mstp3_clks R8A7790_CLK_SDHI0>;
268 cap-sd-highspeed; 262 cap-sd-highspeed;
@@ -272,7 +266,6 @@
272 sdhi1: sd@ee120000 { 266 sdhi1: sd@ee120000 {
273 compatible = "renesas,sdhi-r8a7790"; 267 compatible = "renesas,sdhi-r8a7790";
274 reg = <0 0xee120000 0 0x200>; 268 reg = <0 0xee120000 0 0x200>;
275 interrupt-parent = <&gic>;
276 interrupts = <0 166 IRQ_TYPE_LEVEL_HIGH>; 269 interrupts = <0 166 IRQ_TYPE_LEVEL_HIGH>;
277 clocks = <&mstp3_clks R8A7790_CLK_SDHI1>; 270 clocks = <&mstp3_clks R8A7790_CLK_SDHI1>;
278 cap-sd-highspeed; 271 cap-sd-highspeed;
@@ -282,7 +275,6 @@
282 sdhi2: sd@ee140000 { 275 sdhi2: sd@ee140000 {
283 compatible = "renesas,sdhi-r8a7790"; 276 compatible = "renesas,sdhi-r8a7790";
284 reg = <0 0xee140000 0 0x100>; 277 reg = <0 0xee140000 0 0x100>;
285 interrupt-parent = <&gic>;
286 interrupts = <0 167 IRQ_TYPE_LEVEL_HIGH>; 278 interrupts = <0 167 IRQ_TYPE_LEVEL_HIGH>;
287 clocks = <&mstp3_clks R8A7790_CLK_SDHI2>; 279 clocks = <&mstp3_clks R8A7790_CLK_SDHI2>;
288 cap-sd-highspeed; 280 cap-sd-highspeed;
@@ -292,13 +284,129 @@
292 sdhi3: sd@ee160000 { 284 sdhi3: sd@ee160000 {
293 compatible = "renesas,sdhi-r8a7790"; 285 compatible = "renesas,sdhi-r8a7790";
294 reg = <0 0xee160000 0 0x100>; 286 reg = <0 0xee160000 0 0x100>;
295 interrupt-parent = <&gic>;
296 interrupts = <0 168 IRQ_TYPE_LEVEL_HIGH>; 287 interrupts = <0 168 IRQ_TYPE_LEVEL_HIGH>;
297 clocks = <&mstp3_clks R8A7790_CLK_SDHI3>; 288 clocks = <&mstp3_clks R8A7790_CLK_SDHI3>;
298 cap-sd-highspeed; 289 cap-sd-highspeed;
299 status = "disabled"; 290 status = "disabled";
300 }; 291 };
301 292
293 scifa0: serial@e6c40000 {
294 compatible = "renesas,scifa-r8a7790", "renesas,scifa";
295 reg = <0 0xe6c40000 0 64>;
296 interrupts = <0 144 IRQ_TYPE_LEVEL_HIGH>;
297 clocks = <&mstp2_clks R8A7790_CLK_SCIFA0>;
298 clock-names = "sci_ick";
299 status = "disabled";
300 };
301
302 scifa1: serial@e6c50000 {
303 compatible = "renesas,scifa-r8a7790", "renesas,scifa";
304 reg = <0 0xe6c50000 0 64>;
305 interrupts = <0 145 IRQ_TYPE_LEVEL_HIGH>;
306 clocks = <&mstp2_clks R8A7790_CLK_SCIFA1>;
307 clock-names = "sci_ick";
308 status = "disabled";
309 };
310
311 scifa2: serial@e6c60000 {
312 compatible = "renesas,scifa-r8a7790", "renesas,scifa";
313 reg = <0 0xe6c60000 0 64>;
314 interrupts = <0 151 IRQ_TYPE_LEVEL_HIGH>;
315 clocks = <&mstp2_clks R8A7790_CLK_SCIFA2>;
316 clock-names = "sci_ick";
317 status = "disabled";
318 };
319
320 scifb0: serial@e6c20000 {
321 compatible = "renesas,scifb-r8a7790", "renesas,scifb";
322 reg = <0 0xe6c20000 0 64>;
323 interrupts = <0 148 IRQ_TYPE_LEVEL_HIGH>;
324 clocks = <&mstp2_clks R8A7790_CLK_SCIFB0>;
325 clock-names = "sci_ick";
326 status = "disabled";
327 };
328
329 scifb1: serial@e6c30000 {
330 compatible = "renesas,scifb-r8a7790", "renesas,scifb";
331 reg = <0 0xe6c30000 0 64>;
332 interrupts = <0 149 IRQ_TYPE_LEVEL_HIGH>;
333 clocks = <&mstp2_clks R8A7790_CLK_SCIFB1>;
334 clock-names = "sci_ick";
335 status = "disabled";
336 };
337
338 scifb2: serial@e6ce0000 {
339 compatible = "renesas,scifb-r8a7790", "renesas,scifb";
340 reg = <0 0xe6ce0000 0 64>;
341 interrupts = <0 150 IRQ_TYPE_LEVEL_HIGH>;
342 clocks = <&mstp2_clks R8A7790_CLK_SCIFB2>;
343 clock-names = "sci_ick";
344 status = "disabled";
345 };
346
347 scif0: serial@e6e60000 {
348 compatible = "renesas,scif-r8a7790", "renesas,scif";
349 reg = <0 0xe6e60000 0 64>;
350 interrupts = <0 152 IRQ_TYPE_LEVEL_HIGH>;
351 clocks = <&mstp7_clks R8A7790_CLK_SCIF0>;
352 clock-names = "sci_ick";
353 status = "disabled";
354 };
355
356 scif1: serial@e6e68000 {
357 compatible = "renesas,scif-r8a7790", "renesas,scif";
358 reg = <0 0xe6e68000 0 64>;
359 interrupts = <0 153 IRQ_TYPE_LEVEL_HIGH>;
360 clocks = <&mstp7_clks R8A7790_CLK_SCIF1>;
361 clock-names = "sci_ick";
362 status = "disabled";
363 };
364
365 hscif0: serial@e62c0000 {
366 compatible = "renesas,hscif-r8a7790", "renesas,hscif";
367 reg = <0 0xe62c0000 0 96>;
368 interrupts = <0 154 IRQ_TYPE_LEVEL_HIGH>;
369 clocks = <&mstp7_clks R8A7790_CLK_HSCIF0>;
370 clock-names = "sci_ick";
371 status = "disabled";
372 };
373
374 hscif1: serial@e62c8000 {
375 compatible = "renesas,hscif-r8a7790", "renesas,hscif";
376 reg = <0 0xe62c8000 0 96>;
377 interrupts = <0 155 IRQ_TYPE_LEVEL_HIGH>;
378 clocks = <&mstp7_clks R8A7790_CLK_HSCIF1>;
379 clock-names = "sci_ick";
380 status = "disabled";
381 };
382
383 ether: ethernet@ee700000 {
384 compatible = "renesas,ether-r8a7790";
385 reg = <0 0xee700000 0 0x400>;
386 interrupts = <0 162 IRQ_TYPE_LEVEL_HIGH>;
387 clocks = <&mstp8_clks R8A7790_CLK_ETHER>;
388 phy-mode = "rmii";
389 #address-cells = <1>;
390 #size-cells = <0>;
391 status = "disabled";
392 };
393
394 sata0: sata@ee300000 {
395 compatible = "renesas,sata-r8a7790";
396 reg = <0 0xee300000 0 0x2000>;
397 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
398 clocks = <&mstp8_clks R8A7790_CLK_SATA0>;
399 status = "disabled";
400 };
401
402 sata1: sata@ee500000 {
403 compatible = "renesas,sata-r8a7790";
404 reg = <0 0xee500000 0 0x2000>;
405 interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
406 clocks = <&mstp8_clks R8A7790_CLK_SATA1>;
407 status = "disabled";
408 };
409
302 clocks { 410 clocks {
303 #address-cells = <2>; 411 #address-cells = <2>;
304 #size-cells = <2>; 412 #size-cells = <2>;
@@ -607,10 +715,16 @@
607 mstp8_clks: mstp8_clks@e6150990 { 715 mstp8_clks: mstp8_clks@e6150990 {
608 compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks"; 716 compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks";
609 reg = <0 0xe6150990 0 4>, <0 0xe61509a0 0 4>; 717 reg = <0 0xe6150990 0 4>, <0 0xe61509a0 0 4>;
610 clocks = <&p_clk>; 718 clocks = <&zg_clk>, <&zg_clk>, <&zg_clk>, <&zg_clk>, <&p_clk>,
719 <&zs_clk>, <&zs_clk>;
611 #clock-cells = <1>; 720 #clock-cells = <1>;
612 renesas,clock-indices = <R8A7790_CLK_ETHER>; 721 renesas,clock-indices = <
613 clock-output-names = "ether"; 722 R8A7790_CLK_VIN3 R8A7790_CLK_VIN2 R8A7790_CLK_VIN1
723 R8A7790_CLK_VIN0 R8A7790_CLK_ETHER R8A7790_CLK_SATA1
724 R8A7790_CLK_SATA0
725 >;
726 clock-output-names =
727 "vin3", "vin2", "vin1", "vin0", "ether", "sata1", "sata0";
614 }; 728 };
615 mstp9_clks: mstp9_clks@e6150994 { 729 mstp9_clks: mstp9_clks@e6150994 {
616 compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks"; 730 compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks";
@@ -627,4 +741,15 @@
627 "rcan1", "rcan0", "qspi_mod", "i2c3", "i2c2", "i2c1", "i2c0"; 741 "rcan1", "rcan0", "qspi_mod", "i2c3", "i2c2", "i2c1", "i2c0";
628 }; 742 };
629 }; 743 };
744
745 spi: spi@e6b10000 {
746 compatible = "renesas,qspi-r8a7790", "renesas,qspi";
747 reg = <0 0xe6b10000 0 0x2c>;
748 interrupts = <0 184 IRQ_TYPE_LEVEL_HIGH>;
749 clocks = <&mstp9_clks R8A7790_CLK_QSPI_MOD>;
750 num-cs = <1>;
751 #address-cells = <1>;
752 #size-cells = <0>;
753 status = "disabled";
754 };
630}; 755};
diff --git a/arch/arm/boot/dts/r8a7791-koelsch-reference.dts b/arch/arm/boot/dts/r8a7791-koelsch-reference.dts
deleted file mode 100644
index 588ca17ea1f0..000000000000
--- a/arch/arm/boot/dts/r8a7791-koelsch-reference.dts
+++ /dev/null
@@ -1,115 +0,0 @@
1/*
2 * Device Tree Source for the Koelsch board
3 *
4 * Copyright (C) 2013 Renesas Electronics Corporation
5 * Copyright (C) 2013 Renesas Solutions Corp.
6 *
7 * This file is licensed under the terms of the GNU General Public License
8 * version 2. This program is licensed "as is" without any warranty of any
9 * kind, whether express or implied.
10 */
11
12/dts-v1/;
13#include "r8a7791.dtsi"
14#include <dt-bindings/gpio/gpio.h>
15
16/ {
17 model = "Koelsch";
18 compatible = "renesas,koelsch-reference", "renesas,r8a7791";
19
20 chosen {
21 bootargs = "console=ttySC6,115200 ignore_loglevel rw root=/dev/nfs ip=dhcp";
22 };
23
24 memory@40000000 {
25 device_type = "memory";
26 reg = <0 0x40000000 0 0x80000000>;
27 };
28
29 lbsc {
30 #address-cells = <1>;
31 #size-cells = <1>;
32 };
33
34 gpio-keys {
35 compatible = "gpio-keys";
36
37 key-a {
38 gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
39 linux,code = <30>;
40 label = "SW30";
41 gpio-key,wakeup;
42 debounce-interval = <20>;
43 };
44 key-b {
45 gpios = <&gpio7 1 GPIO_ACTIVE_LOW>;
46 linux,code = <48>;
47 label = "SW31";
48 gpio-key,wakeup;
49 debounce-interval = <20>;
50 };
51 key-c {
52 gpios = <&gpio7 2 GPIO_ACTIVE_LOW>;
53 linux,code = <46>;
54 label = "SW32";
55 gpio-key,wakeup;
56 debounce-interval = <20>;
57 };
58 key-d {
59 gpios = <&gpio7 3 GPIO_ACTIVE_LOW>;
60 linux,code = <32>;
61 label = "SW33";
62 gpio-key,wakeup;
63 debounce-interval = <20>;
64 };
65 key-e {
66 gpios = <&gpio7 4 GPIO_ACTIVE_LOW>;
67 linux,code = <18>;
68 label = "SW34";
69 gpio-key,wakeup;
70 debounce-interval = <20>;
71 };
72 key-f {
73 gpios = <&gpio7 5 GPIO_ACTIVE_LOW>;
74 linux,code = <33>;
75 label = "SW35";
76 gpio-key,wakeup;
77 debounce-interval = <20>;
78 };
79 key-g {
80 gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
81 linux,code = <34>;
82 label = "SW36";
83 gpio-key,wakeup;
84 debounce-interval = <20>;
85 };
86 };
87
88 leds {
89 compatible = "gpio-leds";
90 led6 {
91 gpios = <&gpio2 19 GPIO_ACTIVE_HIGH>;
92 };
93 led7 {
94 gpios = <&gpio2 20 GPIO_ACTIVE_HIGH>;
95 };
96 led8 {
97 gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
98 };
99 };
100};
101
102&pfc {
103 pinctrl-0 = <&scif0_pins &scif1_pins>;
104 pinctrl-names = "default";
105
106 scif0_pins: serial0 {
107 renesas,groups = "scif0_data_d";
108 renesas,function = "scif0";
109 };
110
111 scif1_pins: serial1 {
112 renesas,groups = "scif1_data_d";
113 renesas,function = "scif1";
114 };
115};
diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts b/arch/arm/boot/dts/r8a7791-koelsch.dts
index fd556c3483e3..bdd73e6657b2 100644
--- a/arch/arm/boot/dts/r8a7791-koelsch.dts
+++ b/arch/arm/boot/dts/r8a7791-koelsch.dts
@@ -2,7 +2,8 @@
2 * Device Tree Source for the Koelsch board 2 * Device Tree Source for the Koelsch board
3 * 3 *
4 * Copyright (C) 2013 Renesas Electronics Corporation 4 * Copyright (C) 2013 Renesas Electronics Corporation
5 * Copyright (C) 2013 Renesas Solutions Corp. 5 * Copyright (C) 2013-2014 Renesas Solutions Corp.
6 * Copyright (C) 2014 Cogent Embedded, Inc.
6 * 7 *
7 * This file is licensed under the terms of the GNU General Public License 8 * This file is licensed under the terms of the GNU General Public License
8 * version 2. This program is licensed "as is" without any warranty of any 9 * version 2. This program is licensed "as is" without any warranty of any
@@ -23,7 +24,12 @@
23 24
24 memory@40000000 { 25 memory@40000000 {
25 device_type = "memory"; 26 device_type = "memory";
26 reg = <0 0x40000000 0 0x80000000>; 27 reg = <0 0x40000000 0 0x40000000>;
28 };
29
30 memory@200000000 {
31 device_type = "memory";
32 reg = <2 0x00000000 0 0x40000000>;
27 }; 33 };
28 34
29 lbsc { 35 lbsc {
@@ -31,6 +37,60 @@
31 #size-cells = <1>; 37 #size-cells = <1>;
32 }; 38 };
33 39
40 gpio-keys {
41 compatible = "gpio-keys";
42
43 key-a {
44 gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
45 linux,code = <30>;
46 label = "SW30";
47 gpio-key,wakeup;
48 debounce-interval = <20>;
49 };
50 key-b {
51 gpios = <&gpio7 1 GPIO_ACTIVE_LOW>;
52 linux,code = <48>;
53 label = "SW31";
54 gpio-key,wakeup;
55 debounce-interval = <20>;
56 };
57 key-c {
58 gpios = <&gpio7 2 GPIO_ACTIVE_LOW>;
59 linux,code = <46>;
60 label = "SW32";
61 gpio-key,wakeup;
62 debounce-interval = <20>;
63 };
64 key-d {
65 gpios = <&gpio7 3 GPIO_ACTIVE_LOW>;
66 linux,code = <32>;
67 label = "SW33";
68 gpio-key,wakeup;
69 debounce-interval = <20>;
70 };
71 key-e {
72 gpios = <&gpio7 4 GPIO_ACTIVE_LOW>;
73 linux,code = <18>;
74 label = "SW34";
75 gpio-key,wakeup;
76 debounce-interval = <20>;
77 };
78 key-f {
79 gpios = <&gpio7 5 GPIO_ACTIVE_LOW>;
80 linux,code = <33>;
81 label = "SW35";
82 gpio-key,wakeup;
83 debounce-interval = <20>;
84 };
85 key-g {
86 gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
87 linux,code = <34>;
88 label = "SW36";
89 gpio-key,wakeup;
90 debounce-interval = <20>;
91 };
92 };
93
34 leds { 94 leds {
35 compatible = "gpio-leds"; 95 compatible = "gpio-leds";
36 led6 { 96 led6 {
@@ -43,16 +103,112 @@
43 gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>; 103 gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
44 }; 104 };
45 }; 105 };
106
107 vcc_sdhi0: regulator@0 {
108 compatible = "regulator-fixed";
109
110 regulator-name = "SDHI0 Vcc";
111 regulator-min-microvolt = <3300000>;
112 regulator-max-microvolt = <3300000>;
113
114 gpio = <&gpio7 17 GPIO_ACTIVE_HIGH>;
115 enable-active-high;
116 };
117
118 vccq_sdhi0: regulator@1 {
119 compatible = "regulator-gpio";
120
121 regulator-name = "SDHI0 VccQ";
122 regulator-min-microvolt = <1800000>;
123 regulator-max-microvolt = <3300000>;
124
125 gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
126 gpios-states = <1>;
127 states = <3300000 1
128 1800000 0>;
129 };
130
131 vcc_sdhi1: regulator@2 {
132 compatible = "regulator-fixed";
133
134 regulator-name = "SDHI1 Vcc";
135 regulator-min-microvolt = <3300000>;
136 regulator-max-microvolt = <3300000>;
137
138 gpio = <&gpio7 18 GPIO_ACTIVE_HIGH>;
139 enable-active-high;
140 };
141
142 vccq_sdhi1: regulator@3 {
143 compatible = "regulator-gpio";
144
145 regulator-name = "SDHI1 VccQ";
146 regulator-min-microvolt = <1800000>;
147 regulator-max-microvolt = <3300000>;
148
149 gpios = <&gpio2 13 GPIO_ACTIVE_HIGH>;
150 gpios-states = <1>;
151 states = <3300000 1
152 1800000 0>;
153 };
154
155 vcc_sdhi2: regulator@4 {
156 compatible = "regulator-fixed";
157
158 regulator-name = "SDHI2 Vcc";
159 regulator-min-microvolt = <3300000>;
160 regulator-max-microvolt = <3300000>;
161
162 gpio = <&gpio7 19 GPIO_ACTIVE_HIGH>;
163 enable-active-high;
164 };
165
166 vccq_sdhi2: regulator@5 {
167 compatible = "regulator-gpio";
168
169 regulator-name = "SDHI2 VccQ";
170 regulator-min-microvolt = <1800000>;
171 regulator-max-microvolt = <3300000>;
172
173 gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>;
174 gpios-states = <1>;
175 states = <3300000 1
176 1800000 0>;
177 };
46}; 178};
47 179
48&extal_clk { 180&extal_clk {
49 clock-frequency = <20000000>; 181 clock-frequency = <20000000>;
50}; 182};
51 183
184&i2c2 {
185 pinctrl-0 = <&i2c2_pins>;
186 pinctrl-names = "default";
187
188 status = "okay";
189 clock-frequency = <400000>;
190
191 eeprom@50 {
192 compatible = "renesas,24c02";
193 reg = <0x50>;
194 pagesize = <16>;
195 };
196};
197
52&pfc { 198&pfc {
53 pinctrl-0 = <&scif0_pins &scif1_pins>; 199 pinctrl-0 = <&du_pins &scif0_pins &scif1_pins>;
54 pinctrl-names = "default"; 200 pinctrl-names = "default";
55 201
202 i2c2_pins: i2c {
203 renesas,groups = "i2c2";
204 renesas,function = "i2c2";
205 };
206
207 du_pins: du {
208 renesas,groups = "du_rgb666", "du_sync", "du_clk_out_0";
209 renesas,function = "du";
210 };
211
56 scif0_pins: serial0 { 212 scif0_pins: serial0 {
57 renesas,groups = "scif0_data_d"; 213 renesas,groups = "scif0_data_d";
58 renesas,function = "scif0"; 214 renesas,function = "scif0";
@@ -62,4 +218,116 @@
62 renesas,groups = "scif1_data_d"; 218 renesas,groups = "scif1_data_d";
63 renesas,function = "scif1"; 219 renesas,function = "scif1";
64 }; 220 };
221
222 ether_pins: ether {
223 renesas,groups = "eth_link", "eth_mdio", "eth_rmii";
224 renesas,function = "eth";
225 };
226
227 phy1_pins: phy1 {
228 renesas,groups = "intc_irq0";
229 renesas,function = "intc";
230 };
231
232 sdhi0_pins: sd0 {
233 renesas,gpios = "sdhi0_data4", "sdhi0_ctrl";
234 renesas,function = "sdhi0";
235 };
236
237 sdhi1_pins: sd1 {
238 renesas,gpios = "sdhi1_data4", "sdhi1_ctrl";
239 renesas,function = "sdhi1";
240 };
241
242 sdhi2_pins: sd2 {
243 renesas,gpios = "sdhi2_data4", "sdhi2_ctrl";
244 renesas,function = "sdhi2";
245 };
246
247 qspi_pins: spi {
248 renesas,groups = "qspi_ctrl", "qspi_data4";
249 renesas,function = "qspi";
250 };
251};
252
253&ether {
254 pinctrl-0 = <&ether_pins &phy1_pins>;
255 pinctrl-names = "default";
256
257 phy-handle = <&phy1>;
258 renesas,ether-link-active-low;
259 status = "ok";
260
261 phy1: ethernet-phy@1 {
262 reg = <1>;
263 interrupt-parent = <&irqc0>;
264 interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
265 };
266};
267
268&sata0 {
269 status = "okay";
270};
271
272&sdhi0 {
273 pinctrl-0 = <&sdhi0_pins>;
274 pinctrl-names = "default";
275
276 vmmc-supply = <&vcc_sdhi0>;
277 vqmmc-supply = <&vccq_sdhi0>;
278 cd-gpios = <&gpio6 6 GPIO_ACTIVE_LOW>;
279 wp-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
280 status = "okay";
281};
282
283&sdhi1 {
284 pinctrl-0 = <&sdhi1_pins>;
285 pinctrl-names = "default";
286
287 vmmc-supply = <&vcc_sdhi1>;
288 vqmmc-supply = <&vccq_sdhi1>;
289 cd-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>;
290 wp-gpios = <&gpio6 15 GPIO_ACTIVE_HIGH>;
291 status = "okay";
292};
293
294&sdhi2 {
295 pinctrl-0 = <&sdhi2_pins>;
296 pinctrl-names = "default";
297
298 vmmc-supply = <&vcc_sdhi2>;
299 vqmmc-supply = <&vccq_sdhi2>;
300 cd-gpios = <&gpio6 22 GPIO_ACTIVE_LOW>;
301 status = "okay";
302};
303
304&spi {
305 pinctrl-0 = <&qspi_pins>;
306 pinctrl-names = "default";
307
308 status = "okay";
309
310 flash: flash@0 {
311 #address-cells = <1>;
312 #size-cells = <1>;
313 compatible = "spansion,s25fl512s";
314 reg = <0>;
315 spi-max-frequency = <30000000>;
316 m25p,fast-read;
317
318 partition@0 {
319 label = "loader";
320 reg = <0x00000000 0x00080000>;
321 read-only;
322 };
323 partition@80000 {
324 label = "bootenv";
325 reg = <0x00080000 0x00080000>;
326 read-only;
327 };
328 partition@100000 {
329 label = "data";
330 reg = <0x00100000 0x03f00000>;
331 };
332 };
65}; 333};
diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
index 19c65509a22d..b007f9e04ef4 100644
--- a/arch/arm/boot/dts/r8a7791.dtsi
+++ b/arch/arm/boot/dts/r8a7791.dtsi
@@ -2,7 +2,8 @@
2 * Device Tree Source for the r8a7791 SoC 2 * Device Tree Source for the r8a7791 SoC
3 * 3 *
4 * Copyright (C) 2013 Renesas Electronics Corporation 4 * Copyright (C) 2013 Renesas Electronics Corporation
5 * Copyright (C) 2013 Renesas Solutions Corp. 5 * Copyright (C) 2013-2014 Renesas Solutions Corp.
6 * Copyright (C) 2014 Cogent Embedded Inc.
6 * 7 *
7 * This file is licensed under the terms of the GNU General Public License 8 * This file is licensed under the terms of the GNU General Public License
8 * version 2. This program is licensed "as is" without any warranty of any 9 * version 2. This program is licensed "as is" without any warranty of any
@@ -19,6 +20,15 @@
19 #address-cells = <2>; 20 #address-cells = <2>;
20 #size-cells = <2>; 21 #size-cells = <2>;
21 22
23 aliases {
24 i2c0 = &i2c0;
25 i2c1 = &i2c1;
26 i2c2 = &i2c2;
27 i2c3 = &i2c3;
28 i2c4 = &i2c4;
29 i2c5 = &i2c5;
30 };
31
22 cpus { 32 cpus {
23 #address-cells = <1>; 33 #address-cells = <1>;
24 #size-cells = <0>; 34 #size-cells = <0>;
@@ -53,7 +63,6 @@
53 gpio0: gpio@e6050000 { 63 gpio0: gpio@e6050000 {
54 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 64 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
55 reg = <0 0xe6050000 0 0x50>; 65 reg = <0 0xe6050000 0 0x50>;
56 interrupt-parent = <&gic>;
57 interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>; 66 interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>;
58 #gpio-cells = <2>; 67 #gpio-cells = <2>;
59 gpio-controller; 68 gpio-controller;
@@ -65,7 +74,6 @@
65 gpio1: gpio@e6051000 { 74 gpio1: gpio@e6051000 {
66 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 75 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
67 reg = <0 0xe6051000 0 0x50>; 76 reg = <0 0xe6051000 0 0x50>;
68 interrupt-parent = <&gic>;
69 interrupts = <0 5 IRQ_TYPE_LEVEL_HIGH>; 77 interrupts = <0 5 IRQ_TYPE_LEVEL_HIGH>;
70 #gpio-cells = <2>; 78 #gpio-cells = <2>;
71 gpio-controller; 79 gpio-controller;
@@ -77,7 +85,6 @@
77 gpio2: gpio@e6052000 { 85 gpio2: gpio@e6052000 {
78 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 86 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
79 reg = <0 0xe6052000 0 0x50>; 87 reg = <0 0xe6052000 0 0x50>;
80 interrupt-parent = <&gic>;
81 interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>; 88 interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>;
82 #gpio-cells = <2>; 89 #gpio-cells = <2>;
83 gpio-controller; 90 gpio-controller;
@@ -89,7 +96,6 @@
89 gpio3: gpio@e6053000 { 96 gpio3: gpio@e6053000 {
90 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 97 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
91 reg = <0 0xe6053000 0 0x50>; 98 reg = <0 0xe6053000 0 0x50>;
92 interrupt-parent = <&gic>;
93 interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>; 99 interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
94 #gpio-cells = <2>; 100 #gpio-cells = <2>;
95 gpio-controller; 101 gpio-controller;
@@ -101,7 +107,6 @@
101 gpio4: gpio@e6054000 { 107 gpio4: gpio@e6054000 {
102 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 108 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
103 reg = <0 0xe6054000 0 0x50>; 109 reg = <0 0xe6054000 0 0x50>;
104 interrupt-parent = <&gic>;
105 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>; 110 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>;
106 #gpio-cells = <2>; 111 #gpio-cells = <2>;
107 gpio-controller; 112 gpio-controller;
@@ -113,7 +118,6 @@
113 gpio5: gpio@e6055000 { 118 gpio5: gpio@e6055000 {
114 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 119 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
115 reg = <0 0xe6055000 0 0x50>; 120 reg = <0 0xe6055000 0 0x50>;
116 interrupt-parent = <&gic>;
117 interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>; 121 interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>;
118 #gpio-cells = <2>; 122 #gpio-cells = <2>;
119 gpio-controller; 123 gpio-controller;
@@ -125,7 +129,6 @@
125 gpio6: gpio@e6055400 { 129 gpio6: gpio@e6055400 {
126 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 130 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
127 reg = <0 0xe6055400 0 0x50>; 131 reg = <0 0xe6055400 0 0x50>;
128 interrupt-parent = <&gic>;
129 interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>; 132 interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>;
130 #gpio-cells = <2>; 133 #gpio-cells = <2>;
131 gpio-controller; 134 gpio-controller;
@@ -137,7 +140,6 @@
137 gpio7: gpio@e6055800 { 140 gpio7: gpio@e6055800 {
138 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar"; 141 compatible = "renesas,gpio-r8a7791", "renesas,gpio-rcar";
139 reg = <0 0xe6055800 0 0x50>; 142 reg = <0 0xe6055800 0 0x50>;
140 interrupt-parent = <&gic>;
141 interrupts = <0 11 IRQ_TYPE_LEVEL_HIGH>; 143 interrupts = <0 11 IRQ_TYPE_LEVEL_HIGH>;
142 #gpio-cells = <2>; 144 #gpio-cells = <2>;
143 gpio-controller; 145 gpio-controller;
@@ -149,8 +151,8 @@
149 thermal@e61f0000 { 151 thermal@e61f0000 {
150 compatible = "renesas,thermal-r8a7791", "renesas,rcar-thermal"; 152 compatible = "renesas,thermal-r8a7791", "renesas,rcar-thermal";
151 reg = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>; 153 reg = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>;
152 interrupt-parent = <&gic>;
153 interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>; 154 interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>;
155 clocks = <&mstp5_clks R8A7791_CLK_THERMAL>;
154 }; 156 };
155 157
156 timer { 158 timer {
@@ -166,7 +168,6 @@
166 #interrupt-cells = <2>; 168 #interrupt-cells = <2>;
167 interrupt-controller; 169 interrupt-controller;
168 reg = <0 0xe61c0000 0 0x200>; 170 reg = <0 0xe61c0000 0 0x200>;
169 interrupt-parent = <&gic>;
170 interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>, 171 interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>,
171 <0 1 IRQ_TYPE_LEVEL_HIGH>, 172 <0 1 IRQ_TYPE_LEVEL_HIGH>,
172 <0 2 IRQ_TYPE_LEVEL_HIGH>, 173 <0 2 IRQ_TYPE_LEVEL_HIGH>,
@@ -179,12 +180,288 @@
179 <0 17 IRQ_TYPE_LEVEL_HIGH>; 180 <0 17 IRQ_TYPE_LEVEL_HIGH>;
180 }; 181 };
181 182
183 i2c0: i2c@e6508000 {
184 #address-cells = <1>;
185 #size-cells = <0>;
186 compatible = "renesas,i2c-r8a7791";
187 reg = <0 0xe6508000 0 0x40>;
188 interrupts = <0 287 IRQ_TYPE_LEVEL_HIGH>;
189 clocks = <&mstp9_clks R8A7791_CLK_I2C0>;
190 status = "disabled";
191 };
192
193 i2c1: i2c@e6518000 {
194 #address-cells = <1>;
195 #size-cells = <0>;
196 compatible = "renesas,i2c-r8a7791";
197 reg = <0 0xe6518000 0 0x40>;
198 interrupts = <0 288 IRQ_TYPE_LEVEL_HIGH>;
199 clocks = <&mstp9_clks R8A7791_CLK_I2C1>;
200 status = "disabled";
201 };
202
203 i2c2: i2c@e6530000 {
204 #address-cells = <1>;
205 #size-cells = <0>;
206 compatible = "renesas,i2c-r8a7791";
207 reg = <0 0xe6530000 0 0x40>;
208 interrupts = <0 286 IRQ_TYPE_LEVEL_HIGH>;
209 clocks = <&mstp9_clks R8A7791_CLK_I2C2>;
210 status = "disabled";
211 };
212
213 i2c3: i2c@e6540000 {
214 #address-cells = <1>;
215 #size-cells = <0>;
216 compatible = "renesas,i2c-r8a7791";
217 reg = <0 0xe6540000 0 0x40>;
218 interrupts = <0 290 IRQ_TYPE_LEVEL_HIGH>;
219 clocks = <&mstp9_clks R8A7791_CLK_I2C3>;
220 status = "disabled";
221 };
222
223 i2c4: i2c@e6520000 {
224 #address-cells = <1>;
225 #size-cells = <0>;
226 compatible = "renesas,i2c-r8a7791";
227 reg = <0 0xe6520000 0 0x40>;
228 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>;
229 clocks = <&mstp9_clks R8A7791_CLK_I2C4>;
230 status = "disabled";
231 };
232
233 i2c5: i2c@e6528000 {
234 #address-cells = <1>;
235 #size-cells = <0>;
236 compatible = "renesas,i2c-r8a7791";
237 reg = <0 0xe6528000 0 0x40>;
238 interrupts = <0 20 IRQ_TYPE_LEVEL_HIGH>;
239 clocks = <&mstp9_clks R8A7791_CLK_I2C5>;
240 status = "disabled";
241 };
242
182 pfc: pfc@e6060000 { 243 pfc: pfc@e6060000 {
183 compatible = "renesas,pfc-r8a7791"; 244 compatible = "renesas,pfc-r8a7791";
184 reg = <0 0xe6060000 0 0x250>; 245 reg = <0 0xe6060000 0 0x250>;
185 #gpio-range-cells = <3>; 246 #gpio-range-cells = <3>;
186 }; 247 };
187 248
249 sdhi0: sd@ee100000 {
250 compatible = "renesas,sdhi-r8a7791";
251 reg = <0 0xee100000 0 0x200>;
252 interrupt-parent = <&gic>;
253 interrupts = <0 165 IRQ_TYPE_LEVEL_HIGH>;
254 clocks = <&mstp3_clks R8A7791_CLK_SDHI0>;
255 status = "disabled";
256 };
257
258 sdhi1: sd@ee140000 {
259 compatible = "renesas,sdhi-r8a7791";
260 reg = <0 0xee140000 0 0x100>;
261 interrupt-parent = <&gic>;
262 interrupts = <0 167 IRQ_TYPE_LEVEL_HIGH>;
263 clocks = <&mstp3_clks R8A7791_CLK_SDHI1>;
264 status = "disabled";
265 };
266
267 sdhi2: sd@ee160000 {
268 compatible = "renesas,sdhi-r8a7791";
269 reg = <0 0xee160000 0 0x100>;
270 interrupt-parent = <&gic>;
271 interrupts = <0 168 IRQ_TYPE_LEVEL_HIGH>;
272 clocks = <&mstp3_clks R8A7791_CLK_SDHI2>;
273 status = "disabled";
274 };
275
276 scifa0: serial@e6c40000 {
277 compatible = "renesas,scifa-r8a7791", "renesas,scifa";
278 reg = <0 0xe6c40000 0 64>;
279 interrupts = <0 144 IRQ_TYPE_LEVEL_HIGH>;
280 clocks = <&mstp2_clks R8A7791_CLK_SCIFA0>;
281 clock-names = "sci_ick";
282 status = "disabled";
283 };
284
285 scifa1: serial@e6c50000 {
286 compatible = "renesas,scifa-r8a7791", "renesas,scifa";
287 reg = <0 0xe6c50000 0 64>;
288 interrupts = <0 145 IRQ_TYPE_LEVEL_HIGH>;
289 clocks = <&mstp2_clks R8A7791_CLK_SCIFA1>;
290 clock-names = "sci_ick";
291 status = "disabled";
292 };
293
294 scifa2: serial@e6c60000 {
295 compatible = "renesas,scifa-r8a7791", "renesas,scifa";
296 reg = <0 0xe6c60000 0 64>;
297 interrupts = <0 151 IRQ_TYPE_LEVEL_HIGH>;
298 clocks = <&mstp2_clks R8A7791_CLK_SCIFA2>;
299 clock-names = "sci_ick";
300 status = "disabled";
301 };
302
303 scifa3: serial@e6c70000 {
304 compatible = "renesas,scifa-r8a7791", "renesas,scifa";
305 reg = <0 0xe6c70000 0 64>;
306 interrupts = <0 29 IRQ_TYPE_LEVEL_HIGH>;
307 clocks = <&mstp11_clks R8A7791_CLK_SCIFA3>;
308 clock-names = "sci_ick";
309 status = "disabled";
310 };
311
312 scifa4: serial@e6c78000 {
313 compatible = "renesas,scifa-r8a7791", "renesas,scifa";
314 reg = <0 0xe6c78000 0 64>;
315 interrupts = <0 30 IRQ_TYPE_LEVEL_HIGH>;
316 clocks = <&mstp11_clks R8A7791_CLK_SCIFA4>;
317 clock-names = "sci_ick";
318 status = "disabled";
319 };
320
321 scifa5: serial@e6c80000 {
322 compatible = "renesas,scifa-r8a7791", "renesas,scifa";
323 reg = <0 0xe6c80000 0 64>;
324 interrupts = <0 31 IRQ_TYPE_LEVEL_HIGH>;
325 clocks = <&mstp11_clks R8A7791_CLK_SCIFA5>;
326 clock-names = "sci_ick";
327 status = "disabled";
328 };
329
330 scifb0: serial@e6c20000 {
331 compatible = "renesas,scifb-r8a7791", "renesas,scifb";
332 reg = <0 0xe6c20000 0 64>;
333 interrupts = <0 148 IRQ_TYPE_LEVEL_HIGH>;
334 clocks = <&mstp2_clks R8A7791_CLK_SCIFB0>;
335 clock-names = "sci_ick";
336 status = "disabled";
337 };
338
339 scifb1: serial@e6c30000 {
340 compatible = "renesas,scifb-r8a7791", "renesas,scifb";
341 reg = <0 0xe6c30000 0 64>;
342 interrupts = <0 149 IRQ_TYPE_LEVEL_HIGH>;
343 clocks = <&mstp2_clks R8A7791_CLK_SCIFB1>;
344 clock-names = "sci_ick";
345 status = "disabled";
346 };
347
348 scifb2: serial@e6ce0000 {
349 compatible = "renesas,scifb-r8a7791", "renesas,scifb";
350 reg = <0 0xe6ce0000 0 64>;
351 interrupts = <0 150 IRQ_TYPE_LEVEL_HIGH>;
352 clocks = <&mstp2_clks R8A7791_CLK_SCIFB2>;
353 clock-names = "sci_ick";
354 status = "disabled";
355 };
356
357 scif0: serial@e6e60000 {
358 compatible = "renesas,scif-r8a7791", "renesas,scif";
359 reg = <0 0xe6e60000 0 64>;
360 interrupts = <0 152 IRQ_TYPE_LEVEL_HIGH>;
361 clocks = <&mstp7_clks R8A7791_CLK_SCIF0>;
362 clock-names = "sci_ick";
363 status = "disabled";
364 };
365
366 scif1: serial@e6e68000 {
367 compatible = "renesas,scif-r8a7791", "renesas,scif";
368 reg = <0 0xe6e68000 0 64>;
369 interrupts = <0 153 IRQ_TYPE_LEVEL_HIGH>;
370 clocks = <&mstp7_clks R8A7791_CLK_SCIF1>;
371 clock-names = "sci_ick";
372 status = "disabled";
373 };
374
375 scif2: serial@e6e58000 {
376 compatible = "renesas,scif-r8a7791", "renesas,scif";
377 reg = <0 0xe6e58000 0 64>;
378 interrupts = <0 22 IRQ_TYPE_LEVEL_HIGH>;
379 clocks = <&mstp7_clks R8A7791_CLK_SCIF2>;
380 clock-names = "sci_ick";
381 status = "disabled";
382 };
383
384 scif3: serial@e6ea8000 {
385 compatible = "renesas,scif-r8a7791", "renesas,scif";
386 reg = <0 0xe6ea8000 0 64>;
387 interrupts = <0 23 IRQ_TYPE_LEVEL_HIGH>;
388 clocks = <&mstp7_clks R8A7791_CLK_SCIF3>;
389 clock-names = "sci_ick";
390 status = "disabled";
391 };
392
393 scif4: serial@e6ee0000 {
394 compatible = "renesas,scif-r8a7791", "renesas,scif";
395 reg = <0 0xe6ee0000 0 64>;
396 interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
397 clocks = <&mstp7_clks R8A7791_CLK_SCIF4>;
398 clock-names = "sci_ick";
399 status = "disabled";
400 };
401
402 scif5: serial@e6ee8000 {
403 compatible = "renesas,scif-r8a7791", "renesas,scif";
404 reg = <0 0xe6ee8000 0 64>;
405 interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
406 clocks = <&mstp7_clks R8A7791_CLK_SCIF5>;
407 clock-names = "sci_ick";
408 status = "disabled";
409 };
410
411 hscif0: serial@e62c0000 {
412 compatible = "renesas,hscif-r8a7791", "renesas,hscif";
413 reg = <0 0xe62c0000 0 96>;
414 interrupts = <0 154 IRQ_TYPE_LEVEL_HIGH>;
415 clocks = <&mstp7_clks R8A7791_CLK_HSCIF0>;
416 clock-names = "sci_ick";
417 status = "disabled";
418 };
419
420 hscif1: serial@e62c8000 {
421 compatible = "renesas,hscif-r8a7791", "renesas,hscif";
422 reg = <0 0xe62c8000 0 96>;
423 interrupts = <0 155 IRQ_TYPE_LEVEL_HIGH>;
424 clocks = <&mstp7_clks R8A7791_CLK_HSCIF1>;
425 clock-names = "sci_ick";
426 status = "disabled";
427 };
428
429 hscif2: serial@e62d0000 {
430 compatible = "renesas,hscif-r8a7791", "renesas,hscif";
431 reg = <0 0xe62d0000 0 96>;
432 interrupts = <0 21 IRQ_TYPE_LEVEL_HIGH>;
433 clocks = <&mstp7_clks R8A7791_CLK_HSCIF2>;
434 clock-names = "sci_ick";
435 status = "disabled";
436 };
437
438 ether: ethernet@ee700000 {
439 compatible = "renesas,ether-r8a7791";
440 reg = <0 0xee700000 0 0x400>;
441 interrupts = <0 162 IRQ_TYPE_LEVEL_HIGH>;
442 clocks = <&mstp8_clks R8A7791_CLK_ETHER>;
443 phy-mode = "rmii";
444 #address-cells = <1>;
445 #size-cells = <0>;
446 status = "disabled";
447 };
448
449 sata0: sata@ee300000 {
450 compatible = "renesas,sata-r8a7791";
451 reg = <0 0xee300000 0 0x2000>;
452 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
453 clocks = <&mstp8_clks R8A7791_CLK_SATA0>;
454 status = "disabled";
455 };
456
457 sata1: sata@ee500000 {
458 compatible = "renesas,sata-r8a7791";
459 reg = <0 0xee500000 0 0x2000>;
460 interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
461 clocks = <&mstp8_clks R8A7791_CLK_SATA1>;
462 status = "disabled";
463 };
464
188 clocks { 465 clocks {
189 #address-cells = <2>; 466 #address-cells = <2>;
190 #size-cells = <2>; 467 #size-cells = <2>;
@@ -474,10 +751,15 @@
474 mstp8_clks: mstp8_clks@e6150990 { 751 mstp8_clks: mstp8_clks@e6150990 {
475 compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks"; 752 compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks";
476 reg = <0 0xe6150990 0 4>, <0 0xe61509a0 0 4>; 753 reg = <0 0xe6150990 0 4>, <0 0xe61509a0 0 4>;
477 clocks = <&p_clk>; 754 clocks = <&zg_clk>, <&zg_clk>, <&zg_clk>, <&p_clk>, <&zs_clk>,
755 <&zs_clk>;
478 #clock-cells = <1>; 756 #clock-cells = <1>;
479 renesas,clock-indices = <R8A7791_CLK_ETHER>; 757 renesas,clock-indices = <
480 clock-output-names = "ether"; 758 R8A7791_CLK_VIN2 R8A7791_CLK_VIN1 R8A7791_CLK_VIN0
759 R8A7791_CLK_ETHER R8A7791_CLK_SATA1 R8A7791_CLK_SATA0
760 >;
761 clock-output-names =
762 "vin2", "vin1", "vin0", "ether", "sata1", "sata0";
481 }; 763 };
482 mstp9_clks: mstp9_clks@e6150994 { 764 mstp9_clks: mstp9_clks@e6150994 {
483 compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks"; 765 compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks";
@@ -488,7 +770,7 @@
488 #clock-cells = <1>; 770 #clock-cells = <1>;
489 renesas,clock-indices = < 771 renesas,clock-indices = <
490 R8A7791_CLK_RCAN1 R8A7791_CLK_RCAN0 R8A7791_CLK_QSPI_MOD 772 R8A7791_CLK_RCAN1 R8A7791_CLK_RCAN0 R8A7791_CLK_QSPI_MOD
491 R8A7791_CLK_I2C4 R8A7791_CLK_I2C4 R8A7791_CLK_I2C3 773 R8A7791_CLK_I2C5 R8A7791_CLK_I2C4 R8A7791_CLK_I2C3
492 R8A7791_CLK_I2C2 R8A7791_CLK_I2C1 R8A7791_CLK_I2C0 774 R8A7791_CLK_I2C2 R8A7791_CLK_I2C1 R8A7791_CLK_I2C0
493 >; 775 >;
494 clock-output-names = 776 clock-output-names =
@@ -506,4 +788,15 @@
506 clock-output-names = "scifa3", "scifa4", "scifa5"; 788 clock-output-names = "scifa3", "scifa4", "scifa5";
507 }; 789 };
508 }; 790 };
791
792 spi: spi@e6b10000 {
793 compatible = "renesas,qspi-r8a7791", "renesas,qspi";
794 reg = <0 0xe6b10000 0 0x2c>;
795 interrupts = <0 184 IRQ_TYPE_LEVEL_HIGH>;
796 clocks = <&mstp9_clks R8A7791_CLK_QSPI_MOD>;
797 num-cs = <1>;
798 #address-cells = <1>;
799 #size-cells = <0>;
800 status = "disabled";
801 };
509}; 802};
diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi
index 52447c17537a..3d5faf85f51b 100644
--- a/arch/arm/boot/dts/sama5d3.dtsi
+++ b/arch/arm/boot/dts/sama5d3.dtsi
@@ -1228,7 +1228,7 @@
1228 compatible = "atmel,at91rm9200-ohci", "usb-ohci"; 1228 compatible = "atmel,at91rm9200-ohci", "usb-ohci";
1229 reg = <0x00600000 0x100000>; 1229 reg = <0x00600000 0x100000>;
1230 interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>; 1230 interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>;
1231 clocks = <&usb>, <&uhphs_clk>, <&udphs_clk>, 1231 clocks = <&usb>, <&uhphs_clk>, <&uhphs_clk>,
1232 <&uhpck>; 1232 <&uhpck>;
1233 clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck"; 1233 clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
1234 status = "disabled"; 1234 status = "disabled";
diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi b/arch/arm/boot/dts/ste-dbx5x0.dtsi
index e0853ea02df2..e41eedca3ce3 100644
--- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
+++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
@@ -705,7 +705,7 @@
705 #address-cells = <1>; 705 #address-cells = <1>;
706 #size-cells = <0>; 706 #size-cells = <0>;
707 clocks = <&prcc_kclk 3 1>, <&prcc_pclk 3 1>; 707 clocks = <&prcc_kclk 3 1>, <&prcc_pclk 3 1>;
708 clock-names = "ssp0clk", "apb_pclk"; 708 clock-names = "SSPCLK", "apb_pclk";
709 dmas = <&dma 8 0 0x2>, /* Logical - DevToMem */ 709 dmas = <&dma 8 0 0x2>, /* Logical - DevToMem */
710 <&dma 8 0 0x0>; /* Logical - MemToDev */ 710 <&dma 8 0 0x0>; /* Logical - MemToDev */
711 dma-names = "rx", "tx"; 711 dma-names = "rx", "tx";
@@ -718,7 +718,7 @@
718 #address-cells = <1>; 718 #address-cells = <1>;
719 #size-cells = <0>; 719 #size-cells = <0>;
720 clocks = <&prcc_kclk 3 2>, <&prcc_pclk 3 2>; 720 clocks = <&prcc_kclk 3 2>, <&prcc_pclk 3 2>;
721 clock-names = "ssp1clk", "apb_pclk"; 721 clock-names = "SSPCLK", "apb_pclk";
722 dmas = <&dma 9 0 0x2>, /* Logical - DevToMem */ 722 dmas = <&dma 9 0 0x2>, /* Logical - DevToMem */
723 <&dma 9 0 0x0>; /* Logical - MemToDev */ 723 <&dma 9 0 0x0>; /* Logical - MemToDev */
724 dma-names = "rx", "tx"; 724 dma-names = "rx", "tx";
@@ -732,7 +732,7 @@
732 #size-cells = <0>; 732 #size-cells = <0>;
733 /* Same clock wired to kernel and pclk */ 733 /* Same clock wired to kernel and pclk */
734 clocks = <&prcc_pclk 2 8>, <&prcc_pclk 2 8>; 734 clocks = <&prcc_pclk 2 8>, <&prcc_pclk 2 8>;
735 clock-names = "spi0clk", "apb_pclk"; 735 clock-names = "SSPCLK", "apb_pclk";
736 dmas = <&dma 0 0 0x2>, /* Logical - DevToMem */ 736 dmas = <&dma 0 0 0x2>, /* Logical - DevToMem */
737 <&dma 0 0 0x0>; /* Logical - MemToDev */ 737 <&dma 0 0 0x0>; /* Logical - MemToDev */
738 dma-names = "rx", "tx"; 738 dma-names = "rx", "tx";
@@ -746,7 +746,7 @@
746 #size-cells = <0>; 746 #size-cells = <0>;
747 /* Same clock wired to kernel and pclk */ 747 /* Same clock wired to kernel and pclk */
748 clocks = <&prcc_pclk 2 2>, <&prcc_pclk 2 2>; 748 clocks = <&prcc_pclk 2 2>, <&prcc_pclk 2 2>;
749 clock-names = "spi1clk", "apb_pclk"; 749 clock-names = "SSPCLK", "apb_pclk";
750 dmas = <&dma 35 0 0x2>, /* Logical - DevToMem */ 750 dmas = <&dma 35 0 0x2>, /* Logical - DevToMem */
751 <&dma 35 0 0x0>; /* Logical - MemToDev */ 751 <&dma 35 0 0x0>; /* Logical - MemToDev */
752 dma-names = "rx", "tx"; 752 dma-names = "rx", "tx";
@@ -760,7 +760,7 @@
760 #size-cells = <0>; 760 #size-cells = <0>;
761 /* Same clock wired to kernel and pclk */ 761 /* Same clock wired to kernel and pclk */
762 clocks = <&prcc_pclk 2 1>, <&prcc_pclk 2 1>; 762 clocks = <&prcc_pclk 2 1>, <&prcc_pclk 2 1>;
763 clock-names = "spi2clk", "apb_pclk"; 763 clock-names = "SSPCLK", "apb_pclk";
764 dmas = <&dma 33 0 0x2>, /* Logical - DevToMem */ 764 dmas = <&dma 33 0 0x2>, /* Logical - DevToMem */
765 <&dma 33 0 0x0>; /* Logical - MemToDev */ 765 <&dma 33 0 0x0>; /* Logical - MemToDev */
766 dma-names = "rx", "tx"; 766 dma-names = "rx", "tx";
@@ -774,7 +774,7 @@
774 #size-cells = <0>; 774 #size-cells = <0>;
775 /* Same clock wired to kernel and pclk */ 775 /* Same clock wired to kernel and pclk */
776 clocks = <&prcc_pclk 1 7>, <&prcc_pclk 1 7>; 776 clocks = <&prcc_pclk 1 7>, <&prcc_pclk 1 7>;
777 clock-names = "spi3clk", "apb_pclk"; 777 clock-names = "SSPCLK", "apb_pclk";
778 dmas = <&dma 40 0 0x2>, /* Logical - DevToMem */ 778 dmas = <&dma 40 0 0x2>, /* Logical - DevToMem */
779 <&dma 40 0 0x0>; /* Logical - MemToDev */ 779 <&dma 40 0 0x0>; /* Logical - MemToDev */
780 dma-names = "rx", "tx"; 780 dma-names = "rx", "tx";
diff --git a/arch/arm/boot/dts/ste-href-ab8500.dtsi b/arch/arm/boot/dts/ste-href-ab8500.dtsi
new file mode 100644
index 000000000000..30f8601da323
--- /dev/null
+++ b/arch/arm/boot/dts/ste-href-ab8500.dtsi
@@ -0,0 +1,428 @@
1/*
2 * Copyright 2014 Linaro Ltd.
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/ {
13 soc {
14 prcmu@80157000 {
15 ab8500 {
16 ab8500-gpio {
17 /* Hog a few default settings */
18 pinctrl-names = "default";
19 pinctrl-0 = <&gpio2_default_mode>,
20 <&gpio4_default_mode>,
21 <&gpio10_default_mode>,
22 <&gpio11_default_mode>,
23 <&gpio12_default_mode>,
24 <&gpio13_default_mode>,
25 <&gpio16_default_mode>,
26 <&gpio24_default_mode>,
27 <&gpio25_default_mode>,
28 <&gpio36_default_mode>,
29 <&gpio37_default_mode>,
30 <&gpio38_default_mode>,
31 <&gpio39_default_mode>,
32 <&gpio42_default_mode>,
33 <&gpio26_default_mode>,
34 <&gpio35_default_mode>,
35 <&ycbcr_default_mode>,
36 <&pwm_default_mode>,
37 <&adi1_default_mode>,
38 <&usbuicc_default_mode>,
39 <&dmic_default_mode>,
40 <&extcpena_default_mode>,
41 <&modsclsda_default_mode>;
42
43 /*
44 * Pins 2, 4, 10, 11, 12, 13, 16, 24, 25, 36, 37, 38, 39 and 42
45 * are muxed in as GPIO, and configured as INPUT PULL DOWN
46 */
47 gpio2 {
48 gpio2_default_mode: gpio2_default {
49 default_mux {
50 ste,function = "gpio";
51 ste,pins = "gpio2_a_1";
52 };
53 default_cfg {
54 ste,pins = "GPIO2_T9";
55 input-enable;
56 bias-pull-down;
57 };
58 };
59 };
60 gpio4 {
61 gpio4_default_mode: gpio4_default {
62 default_mux {
63 ste,function = "gpio";
64 ste,pins = "gpio4_a_1";
65 };
66 default_cfg {
67 ste,pins = "GPIO4_W2";
68 input-enable;
69 bias-pull-down;
70 };
71 };
72 };
73 gpio10 {
74 gpio10_default_mode: gpio10_default {
75 default_mux {
76 ste,function = "gpio";
77 ste,pins = "gpio10_d_1";
78 };
79 default_cfg {
80 ste,pins = "GPIO10_U17";
81 input-enable;
82 bias-pull-down;
83 };
84 };
85 };
86 gpio11 {
87 gpio11_default_mode: gpio11_default {
88 default_mux {
89 ste,function = "gpio";
90 ste,pins = "gpio11_d_1";
91 };
92 default_cfg {
93 ste,pins = "GPIO11_AA18";
94 input-enable;
95 bias-pull-down;
96 };
97 };
98 };
99 gpio12 {
100 gpio12_default_mode: gpio12_default {
101 default_mux {
102 ste,function = "gpio";
103 ste,pins = "gpio12_d_1";
104 };
105 default_cfg {
106 ste,pins = "GPIO12_U16";
107 input-enable;
108 bias-pull-down;
109 };
110 };
111 };
112 gpio13 {
113 gpio13_default_mode: gpio13_default {
114 default_mux {
115 ste,function = "gpio";
116 ste,pins = "gpio13_d_1";
117 };
118 default_cfg {
119 ste,pins = "GPIO13_W17";
120 input-enable;
121 bias-pull-down;
122 };
123 };
124 };
125 gpio16 {
126 gpio16_default_mode: gpio16_default {
127 default_mux {
128 ste,function = "gpio";
129 ste,pins = "gpio16_a_1";
130 };
131 default_cfg {
132 ste,pins = "GPIO16_F15";
133 input-enable;
134 bias-pull-down;
135 };
136 };
137 };
138 gpio24 {
139 gpio24_default_mode: gpio24_default {
140 default_mux {
141 ste,function = "gpio";
142 ste,pins = "gpio24_a_1";
143 };
144 default_cfg {
145 ste,pins = "GPIO24_T14";
146 input-enable;
147 bias-pull-down;
148 };
149 };
150 };
151 gpio25 {
152 gpio25_default_mode: gpio25_default {
153 default_mux {
154 ste,function = "gpio";
155 ste,pins = "gpio25_a_1";
156 };
157 default_cfg {
158 ste,pins = "GPIO25_R16";
159 input-enable;
160 bias-pull-down;
161 };
162 };
163 };
164 gpio36 {
165 gpio36_default_mode: gpio36_default {
166 default_mux {
167 ste,function = "gpio";
168 ste,pins = "gpio36_a_1";
169 };
170 default_cfg {
171 ste,pins = "GPIO36_A17";
172 input-enable;
173 bias-pull-down;
174 };
175 };
176 };
177 gpio37 {
178 gpio37_default_mode: gpio37_default {
179 default_mux {
180 ste,function = "gpio";
181 ste,pins = "gpio37_a_1";
182 };
183 default_cfg {
184 ste,pins = "GPIO37_E15";
185 input-enable;
186 bias-pull-down;
187 };
188 };
189 };
190 gpio38 {
191 gpio38_default_mode: gpio38_default {
192 default_mux {
193 ste,function = "gpio";
194 ste,pins = "gpio38_a_1";
195 };
196 default_cfg {
197 ste,pins = "GPIO38_C17";
198 input-enable;
199 bias-pull-down;
200 };
201 };
202 };
203 gpio39 {
204 gpio39_default_mode: gpio39_default {
205 default_mux {
206 ste,function = "gpio";
207 ste,pins = "gpio39_a_1";
208 };
209 default_cfg {
210 ste,pins = "GPIO39_E16";
211 input-enable;
212 bias-pull-down;
213 };
214 };
215 };
216 gpio42 {
217 gpio42_default_mode: gpio42_default {
218 default_mux {
219 ste,function = "gpio";
220 ste,pins = "gpio42_a_1";
221 };
222 default_cfg {
223 ste,pins = "GPIO42_U2";
224 input-enable;
225 bias-pull-down;
226 };
227 };
228 };
229 /*
230 * Pins 26 and 35 muxed in as GPIO, and configured as OUTPUT LOW
231 */
232 gpio26 {
233 gpio26_default_mode: gpio26_default {
234 default_mux {
235 ste,function = "gpio";
236 ste,pins = "gpio26_d_1";
237 };
238 default_cfg {
239 ste,pins = "GPIO26_M16";
240 output-low;
241 };
242 };
243 };
244 gpio35 {
245 gpio35_default_mode: gpio35_default {
246 default_mux {
247 ste,function = "gpio";
248 ste,pins = "gpio35_d_1";
249 };
250 default_cfg {
251 ste,pins = "GPIO35_W15";
252 output-low;
253 };
254 };
255 };
256 /*
257 * This sets up the YCBCR connector pins, i.e. analog video out.
258 * Set as input with no bias.
259 */
260 ycbcr {
261 ycbcr_default_mode: ycbcr_default {
262 default_mux {
263 ste,function = "ycbcr";
264 ste,pins = "ycbcr0123_d_1";
265 };
266 default_cfg {
267 ste,pins = "GPIO6_Y18",
268 "GPIO7_AA20",
269 "GPIO8_W18",
270 "GPIO9_AA19";
271 input-enable;
272 bias-disable;
273 };
274 };
275 };
276 /* This sets up the PWM pins 14 and 15 */
277 pwm {
278 pwm_default_mode: pwm_default {
279 default_mux {
280 ste,function = "pwmout";
281 ste,pins = "pwmout1_d_1", "pwmout2_d_1";
282 };
283 default_cfg {
284 ste,pins = "GPIO14_F14",
285 "GPIO15_B17";
286 input-enable;
287 bias-pull-down;
288 };
289 };
290 };
291 /* This sets up audio interface 1 */
292 adi1 {
293 adi1_default_mode: adi1_default {
294 default_mux {
295 ste,function = "adi1";
296 ste,pins = "adi1_d_1";
297 };
298 default_cfg {
299 ste,pins = "GPIO17_P5",
300 "GPIO18_R5",
301 "GPIO19_U5",
302 "GPIO20_T5";
303 input-enable;
304 bias-pull-down;
305 };
306 };
307 };
308 /* This sets up the USB UICC pins */
309 usbuicc {
310 usbuicc_default_mode: usbuicc_default {
311 default_mux {
312 ste,function = "usbuicc";
313 ste,pins = "usbuicc_d_1";
314 };
315 default_cfg {
316 ste,pins = "GPIO21_H19",
317 "GPIO22_G20",
318 "GPIO23_G19";
319 input-enable;
320 bias-pull-down;
321 };
322 };
323 };
324 /* This sets up the microphone pins */
325 dmic {
326 dmic_default_mode: dmic_default {
327 default_mux {
328 ste,function = "dmic";
329 ste,pins = "dmic12_d_1",
330 "dmic34_d_1",
331 "dmic56_d_1";
332 };
333 default_cfg {
334 ste,pins = "GPIO27_J6",
335 "GPIO28_K6",
336 "GPIO29_G6",
337 "GPIO30_H6",
338 "GPIO31_F5",
339 "GPIO32_G5";
340 input-enable;
341 bias-pull-down;
342 };
343 };
344 };
345 extcpena {
346 extcpena_default_mode: extcpena_default {
347 default_mux {
348 ste,function = "extcpena";
349 ste,pins = "extcpena_d_1";
350 };
351 default_cfg {
352 ste,pins = "GPIO34_R17";
353 input-enable;
354 bias-pull-down;
355 };
356 };
357 };
358 /* Modem I2C setup (SCL and SDA pins) */
359 modsclsda {
360 modsclsda_default_mode: modsclsda_default {
361 default_mux {
362 ste,function = "modsclsda";
363 ste,pins = "modsclsda_d_1";
364 };
365 default_cfg {
366 ste,pins = "GPIO40_T19",
367 "GPIO41_U19";
368 input-enable;
369 bias-pull-down;
370 };
371 };
372 };
373 /*
374 * Clock output pins associated with regulators.
375 */
376 sysclkreq2 {
377 sysclkreq2_default_mode: sysclkreq2_default {
378 default_mux {
379 ste,function = "sysclkreq";
380 ste,pins = "sysclkreq2_d_1";
381 };
382 default_cfg {
383 ste,pins = "GPIO1_T10";
384 input-enable;
385 bias-disable;
386 };
387 };
388 sysclkreq2_sleep_mode: sysclkreq2_sleep {
389 default_mux {
390 ste,function = "gpio";
391 ste,pins = "gpio1_a_1";
392 };
393 default_cfg {
394 ste,pins = "GPIO1_T10";
395 input-enable;
396 bias-pull-down;
397 };
398 };
399 };
400 sysclkreq4 {
401 sysclkreq4_default_mode: sysclkreq4_default {
402 default_mux {
403 ste,function = "sysclkreq";
404 ste,pins = "sysclkreq4_d_1";
405 };
406 default_cfg {
407 ste,pins = "GPIO3_U9";
408 input-enable;
409 bias-disable;
410 };
411 };
412 sysclkreq4_sleep_mode: sysclkreq4_sleep {
413 default_mux {
414 ste,function = "gpio";
415 ste,pins = "gpio3_a_1";
416 };
417 default_cfg {
418 ste,pins = "GPIO3_U9";
419 input-enable;
420 bias-pull-down;
421 };
422 };
423 };
424 };
425 };
426 };
427 };
428};
diff --git a/arch/arm/boot/dts/ste-href-ab8505.dtsi b/arch/arm/boot/dts/ste-href-ab8505.dtsi
new file mode 100644
index 000000000000..6006d62086a2
--- /dev/null
+++ b/arch/arm/boot/dts/ste-href-ab8505.dtsi
@@ -0,0 +1,240 @@
1/*
2 * Copyright 2014 Linaro Ltd.
3 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 */
11
12/ {
13 soc {
14 prcmu@80157000 {
15 ab8505 {
16 ab8505-gpio {
17 /* Hog a few default settings */
18 pinctrl-names = "default";
19 pinctrl-0 = <&gpio2_default_mode>,
20 <&gpio10_default_mode>,
21 <&gpio11_default_mode>,
22 <&gpio13_default_mode>,
23 <&gpio34_default_mode>,
24 <&gpio50_default_mode>,
25 <&pwm_default_mode>,
26 <&adi2_default_mode>,
27 <&modsclsda_default_mode>,
28 <&resethw_default_mode>,
29 <&service_default_mode>;
30
31 /*
32 * Pins 2, 10, 11, 13, 34 and 50
33 * are muxed in as GPIO, and configured as INPUT PULL DOWN
34 */
35 gpio2 {
36 gpio2_default_mode: gpio2_default {
37 default_mux {
38 ste,function = "gpio";
39 ste,pins = "gpio2_a_1";
40 };
41 default_cfg {
42 ste,pins = "GPIO2_R5";
43 input-enable;
44 bias-pull-down;
45 };
46 };
47 };
48 gpio10 {
49 gpio10_default_mode: gpio10_default {
50 default_mux {
51 ste,function = "gpio";
52 ste,pins = "gpio10_d_1";
53 };
54 default_cfg {
55 ste,pins = "GPIO10_B16";
56 input-enable;
57 bias-pull-down;
58 };
59 };
60 };
61 gpio11 {
62 gpio11_default_mode: gpio11_default {
63 default_mux {
64 ste,function = "gpio";
65 ste,pins = "gpio11_d_1";
66 };
67 default_cfg {
68 ste,pins = "GPIO11_B17";
69 input-enable;
70 bias-pull-down;
71 };
72 };
73 };
74 gpio13 {
75 gpio13_default_mode: gpio13_default {
76 default_mux {
77 ste,function = "gpio";
78 ste,pins = "gpio13_d_1";
79 };
80 default_cfg {
81 ste,pins = "GPIO13_D17";
82 input-enable;
83 bias-disable;
84 };
85 };
86 };
87 gpio34 {
88 gpio34_default_mode: gpio34_default {
89 default_mux {
90 ste,function = "gpio";
91 ste,pins = "gpio34_a_1";
92 };
93 default_cfg {
94 ste,pins = "GPIO34_H14";
95 input-enable;
96 bias-pull-down;
97 };
98 };
99 };
100 gpio50 {
101 gpio50_default_mode: gpio50_default {
102 default_mux {
103 ste,function = "gpio";
104 ste,pins = "gpio50_d_1";
105 };
106 default_cfg {
107 ste,pins = "GPIO50_L4";
108 input-enable;
109 bias-disable;
110 };
111 };
112 };
113 /* This sets up the PWM pin 14 */
114 pwm {
115 pwm_default_mode: pwm_default {
116 default_mux {
117 ste,function = "pwmout";
118 ste,pins = "pwmout1_d_1";
119 };
120 default_cfg {
121 ste,pins = "GPIO14_C16";
122 input-enable;
123 bias-pull-down;
124 };
125 };
126 };
127 /* This sets up audio interface 2 */
128 adi2 {
129 adi2_default_mode: adi2_default {
130 default_mux {
131 ste,function = "adi2";
132 ste,pins = "adi2_d_1";
133 };
134 default_cfg {
135 ste,pins = "GPIO17_P2",
136 "GPIO18_N3",
137 "GPIO19_T1",
138 "GPIO20_P3";
139 input-enable;
140 bias-pull-down;
141 };
142 };
143 };
144 /* Modem I2C setup (SCL and SDA pins) */
145 modsclsda {
146 modsclsda_default_mode: modsclsda_default {
147 default_mux {
148 ste,function = "modsclsda";
149 ste,pins = "modsclsda_d_1";
150 };
151 default_cfg {
152 ste,pins = "GPIO40_J15",
153 "GPIO41_J14";
154 input-enable;
155 bias-pull-down;
156 };
157 };
158 };
159 resethw {
160 resethw_default_mode: resethw_default {
161 default_mux {
162 ste,function = "resethw";
163 ste,pins = "resethw_d_1";
164 };
165 default_cfg {
166 ste,pins = "GPIO52_D16";
167 input-enable;
168 bias-pull-down;
169 };
170 };
171 };
172 service {
173 service_default_mode: service_default {
174 default_mux {
175 ste,function = "service";
176 ste,pins = "service_d_1";
177 };
178 default_cfg {
179 ste,pins = "GPIO53_D15";
180 input-enable;
181 bias-pull-down;
182 };
183 };
184 };
185 /*
186 * Clock output pins associated with regulators.
187 */
188 sysclkreq2 {
189 sysclkreq2_default_mode: sysclkreq2_default {
190 default_mux {
191 ste,function = "sysclkreq";
192 ste,pins = "sysclkreq2_d_1";
193 };
194 default_cfg {
195 ste,pins = "GPIO1_N4";
196 input-enable;
197 bias-disable;
198 };
199 };
200 sysclkreq2_sleep_mode: sysclkreq2_sleep {
201 default_mux {
202 ste,function = "gpio";
203 ste,pins = "gpio1_a_1";
204 };
205 default_cfg {
206 ste,pins = "GPIO1_N4";
207 input-enable;
208 bias-pull-down;
209 };
210 };
211 };
212 sysclkreq4 {
213 sysclkreq4_default_mode: sysclkreq4_default {
214 default_mux {
215 ste,function = "sysclkreq";
216 ste,pins = "sysclkreq4_d_1";
217 };
218 default_cfg {
219 ste,pins = "GPIO3_P5";
220 input-enable;
221 bias-disable;
222 };
223 };
224 sysclkreq4_sleep_mode: sysclkreq4_sleep {
225 default_mux {
226 ste,function = "gpio";
227 ste,pins = "gpio3_a_1";
228 };
229 default_cfg {
230 ste,pins = "GPIO3_P5";
231 input-enable;
232 bias-pull-down;
233 };
234 };
235 };
236 };
237 };
238 };
239 };
240};
diff --git a/arch/arm/boot/dts/ste-href.dtsi b/arch/arm/boot/dts/ste-href.dtsi
index 0c1e8d871ed1..6cb9b68e2188 100644
--- a/arch/arm/boot/dts/ste-href.dtsi
+++ b/arch/arm/boot/dts/ste-href.dtsi
@@ -188,7 +188,6 @@
188 msp2: msp@80117000 { 188 msp2: msp@80117000 {
189 pinctrl-names = "default"; 189 pinctrl-names = "default";
190 pinctrl-0 = <&msp2_default_mode>; 190 pinctrl-0 = <&msp2_default_mode>;
191 status = "okay";
192 }; 191 };
193 192
194 msp3: msp@80125000 { 193 msp3: msp@80125000 {
diff --git a/arch/arm/boot/dts/ste-hrefprev60.dtsi b/arch/arm/boot/dts/ste-hrefprev60.dtsi
index 40f0ecdf9303..abc762e24fcb 100644
--- a/arch/arm/boot/dts/ste-hrefprev60.dtsi
+++ b/arch/arm/boot/dts/ste-hrefprev60.dtsi
@@ -12,6 +12,7 @@
12 */ 12 */
13 13
14#include "ste-dbx5x0.dtsi" 14#include "ste-dbx5x0.dtsi"
15#include "ste-href-ab8500.dtsi"
15#include "ste-href.dtsi" 16#include "ste-href.dtsi"
16 17
17/ { 18/ {
diff --git a/arch/arm/boot/dts/ste-hrefv60plus.dtsi b/arch/arm/boot/dts/ste-hrefv60plus.dtsi
index 3b6d1181939b..c2341061b943 100644
--- a/arch/arm/boot/dts/ste-hrefv60plus.dtsi
+++ b/arch/arm/boot/dts/ste-hrefv60plus.dtsi
@@ -10,6 +10,7 @@
10 */ 10 */
11 11
12#include "ste-dbx5x0.dtsi" 12#include "ste-dbx5x0.dtsi"
13#include "ste-href-ab8500.dtsi"
13#include "ste-href.dtsi" 14#include "ste-href.dtsi"
14 15
15/ { 16/ {
diff --git a/arch/arm/boot/dts/ste-snowball.dts b/arch/arm/boot/dts/ste-snowball.dts
index 97d5d21b7db7..a2f632d0be2a 100644
--- a/arch/arm/boot/dts/ste-snowball.dts
+++ b/arch/arm/boot/dts/ste-snowball.dts
@@ -11,6 +11,7 @@
11 11
12/dts-v1/; 12/dts-v1/;
13#include "ste-dbx5x0.dtsi" 13#include "ste-dbx5x0.dtsi"
14#include "ste-href-ab8500.dtsi"
14#include "ste-href-family-pinctrl.dtsi" 15#include "ste-href-family-pinctrl.dtsi"
15 16
16/ { 17/ {
diff --git a/arch/arm/boot/dts/ste-u300.dts b/arch/arm/boot/dts/ste-u300.dts
index a9da4800daf0..6fe688e9e4da 100644
--- a/arch/arm/boot/dts/ste-u300.dts
+++ b/arch/arm/boot/dts/ste-u300.dts
@@ -457,7 +457,7 @@
457 interrupt-parent = <&vica>; 457 interrupt-parent = <&vica>;
458 interrupts = <23>; 458 interrupts = <23>;
459 clocks = <&spi_clk>, <&spi_clk>; 459 clocks = <&spi_clk>, <&spi_clk>;
460 clock-names = "apb_pclk", "spi_clk"; 460 clock-names = "SSPCLK", "apb_pclk";
461 dmas = <&dmac 27 &dmac 28>; 461 dmas = <&dmac 27 &dmac 28>;
462 dma-names = "tx", "rx"; 462 dma-names = "tx", "rx";
463 num-cs = <3>; 463 num-cs = <3>;
diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts
index d4b081d6a167..cbd2e135bc09 100644
--- a/arch/arm/boot/dts/sun4i-a10-a1000.dts
+++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts
@@ -80,18 +80,14 @@
80 }; 80 };
81 }; 81 };
82 82
83 regulators { 83 reg_emac_3v3: emac-3v3 {
84 compatible = "simple-bus"; 84 compatible = "regulator-fixed";
85 85 pinctrl-names = "default";
86 reg_emac_3v3: emac-3v3 { 86 pinctrl-0 = <&emac_power_pin_a1000>;
87 compatible = "regulator-fixed"; 87 regulator-name = "emac-3v3";
88 pinctrl-names = "default"; 88 regulator-min-microvolt = <3300000>;
89 pinctrl-0 = <&emac_power_pin_a1000>; 89 regulator-max-microvolt = <3300000>;
90 regulator-name = "emac-3v3"; 90 enable-active-high;
91 regulator-min-microvolt = <3300000>; 91 gpio = <&pio 7 15 0>;
92 regulator-max-microvolt = <3300000>;
93 enable-active-high;
94 gpio = <&pio 7 15 0>;
95 };
96 }; 92 };
97}; 93};
diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts
index 3a1595f67823..6692d336335d 100644
--- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts
+++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts
@@ -54,16 +54,12 @@
54 }; 54 };
55 }; 55 };
56 56
57 regulators { 57 reg_emac_3v3: emac-3v3 {
58 compatible = "simple-bus"; 58 compatible = "regulator-fixed";
59 59 regulator-name = "emac-3v3";
60 reg_emac_3v3: emac-3v3 { 60 regulator-min-microvolt = <3300000>;
61 compatible = "regulator-fixed"; 61 regulator-max-microvolt = <3300000>;
62 regulator-name = "emac-3v3"; 62 enable-active-high;
63 regulator-min-microvolt = <3300000>; 63 gpio = <&pio 7 19 0>;
64 regulator-max-microvolt = <3300000>;
65 enable-active-high;
66 gpio = <&pio 7 19 0>;
67 };
68 }; 64 };
69}; 65};
diff --git a/arch/arm/boot/dts/sun4i-a10-pcduino.dts b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
new file mode 100644
index 000000000000..f5692a3b80db
--- /dev/null
+++ b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
@@ -0,0 +1,48 @@
1/*
2 * Copyright 2014 Zoltan HERPAI
3 * Zoltan HERPAI <wigyori@uid0.hu>
4 *
5 * The code contained herein is licensed under the GNU General Public
6 * License. You may obtain a copy of the GNU General Public License
7 * Version 2 or later at the following locations:
8 *
9 * http://www.opensource.org/licenses/gpl-license.html
10 * http://www.gnu.org/copyleft/gpl.html
11 */
12
13/dts-v1/;
14/include/ "sun4i-a10.dtsi"
15
16/ {
17 model = "LinkSprite pcDuino";
18 compatible = "linksprite,a10-pcduino", "allwinner,sun4i-a10";
19
20 soc@01c00000 {
21 emac: ethernet@01c0b000 {
22 pinctrl-names = "default";
23 pinctrl-0 = <&emac_pins_a>;
24 phy = <&phy1>;
25 status = "okay";
26 };
27
28 mdio@01c0b080 {
29 status = "okay";
30
31 phy1: ethernet-phy@1 {
32 reg = <1>;
33 };
34 };
35
36 uart0: serial@01c28000 {
37 pinctrl-names = "default";
38 pinctrl-0 = <&uart0_pins_a>;
39 status = "okay";
40 };
41
42 i2c0: i2c@01c2ac00 {
43 pinctrl-names = "default";
44 pinctrl-0 = <&i2c0_pins_a>;
45 status = "okay";
46 };
47 };
48};
diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
index 040bb0eba152..a850482c69f1 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
@@ -19,6 +19,12 @@
19 ethernet0 = &emac; 19 ethernet0 = &emac;
20 serial0 = &uart0; 20 serial0 = &uart0;
21 serial1 = &uart1; 21 serial1 = &uart1;
22 serial2 = &uart2;
23 serial3 = &uart3;
24 serial4 = &uart4;
25 serial5 = &uart5;
26 serial6 = &uart6;
27 serial7 = &uart7;
22 }; 28 };
23 29
24 cpus { 30 cpus {
@@ -52,44 +58,48 @@
52 clock-frequency = <0>; 58 clock-frequency = <0>;
53 }; 59 };
54 60
55 osc24M: osc24M@01c20050 { 61 osc24M: clk@01c20050 {
56 #clock-cells = <0>; 62 #clock-cells = <0>;
57 compatible = "allwinner,sun4i-osc-clk"; 63 compatible = "allwinner,sun4i-a10-osc-clk";
58 reg = <0x01c20050 0x4>; 64 reg = <0x01c20050 0x4>;
59 clock-frequency = <24000000>; 65 clock-frequency = <24000000>;
66 clock-output-names = "osc24M";
60 }; 67 };
61 68
62 osc32k: osc32k { 69 osc32k: clk@0 {
63 #clock-cells = <0>; 70 #clock-cells = <0>;
64 compatible = "fixed-clock"; 71 compatible = "fixed-clock";
65 clock-frequency = <32768>; 72 clock-frequency = <32768>;
73 clock-output-names = "osc32k";
66 }; 74 };
67 75
68 pll1: pll1@01c20000 { 76 pll1: clk@01c20000 {
69 #clock-cells = <0>; 77 #clock-cells = <0>;
70 compatible = "allwinner,sun4i-pll1-clk"; 78 compatible = "allwinner,sun4i-a10-pll1-clk";
71 reg = <0x01c20000 0x4>; 79 reg = <0x01c20000 0x4>;
72 clocks = <&osc24M>; 80 clocks = <&osc24M>;
81 clock-output-names = "pll1";
73 }; 82 };
74 83
75 pll4: pll4@01c20018 { 84 pll4: clk@01c20018 {
76 #clock-cells = <0>; 85 #clock-cells = <0>;
77 compatible = "allwinner,sun4i-pll1-clk"; 86 compatible = "allwinner,sun4i-a10-pll1-clk";
78 reg = <0x01c20018 0x4>; 87 reg = <0x01c20018 0x4>;
79 clocks = <&osc24M>; 88 clocks = <&osc24M>;
89 clock-output-names = "pll4";
80 }; 90 };
81 91
82 pll5: pll5@01c20020 { 92 pll5: clk@01c20020 {
83 #clock-cells = <1>; 93 #clock-cells = <1>;
84 compatible = "allwinner,sun4i-pll5-clk"; 94 compatible = "allwinner,sun4i-a10-pll5-clk";
85 reg = <0x01c20020 0x4>; 95 reg = <0x01c20020 0x4>;
86 clocks = <&osc24M>; 96 clocks = <&osc24M>;
87 clock-output-names = "pll5_ddr", "pll5_other"; 97 clock-output-names = "pll5_ddr", "pll5_other";
88 }; 98 };
89 99
90 pll6: pll6@01c20028 { 100 pll6: clk@01c20028 {
91 #clock-cells = <1>; 101 #clock-cells = <1>;
92 compatible = "allwinner,sun4i-pll6-clk"; 102 compatible = "allwinner,sun4i-a10-pll6-clk";
93 reg = <0x01c20028 0x4>; 103 reg = <0x01c20028 0x4>;
94 clocks = <&osc24M>; 104 clocks = <&osc24M>;
95 clock-output-names = "pll6_sata", "pll6_other", "pll6"; 105 clock-output-names = "pll6_sata", "pll6_other", "pll6";
@@ -98,21 +108,23 @@
98 /* dummy is 200M */ 108 /* dummy is 200M */
99 cpu: cpu@01c20054 { 109 cpu: cpu@01c20054 {
100 #clock-cells = <0>; 110 #clock-cells = <0>;
101 compatible = "allwinner,sun4i-cpu-clk"; 111 compatible = "allwinner,sun4i-a10-cpu-clk";
102 reg = <0x01c20054 0x4>; 112 reg = <0x01c20054 0x4>;
103 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>; 113 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>;
114 clock-output-names = "cpu";
104 }; 115 };
105 116
106 axi: axi@01c20054 { 117 axi: axi@01c20054 {
107 #clock-cells = <0>; 118 #clock-cells = <0>;
108 compatible = "allwinner,sun4i-axi-clk"; 119 compatible = "allwinner,sun4i-a10-axi-clk";
109 reg = <0x01c20054 0x4>; 120 reg = <0x01c20054 0x4>;
110 clocks = <&cpu>; 121 clocks = <&cpu>;
122 clock-output-names = "axi";
111 }; 123 };
112 124
113 axi_gates: axi_gates@01c2005c { 125 axi_gates: clk@01c2005c {
114 #clock-cells = <1>; 126 #clock-cells = <1>;
115 compatible = "allwinner,sun4i-axi-gates-clk"; 127 compatible = "allwinner,sun4i-a10-axi-gates-clk";
116 reg = <0x01c2005c 0x4>; 128 reg = <0x01c2005c 0x4>;
117 clocks = <&axi>; 129 clocks = <&axi>;
118 clock-output-names = "axi_dram"; 130 clock-output-names = "axi_dram";
@@ -120,14 +132,15 @@
120 132
121 ahb: ahb@01c20054 { 133 ahb: ahb@01c20054 {
122 #clock-cells = <0>; 134 #clock-cells = <0>;
123 compatible = "allwinner,sun4i-ahb-clk"; 135 compatible = "allwinner,sun4i-a10-ahb-clk";
124 reg = <0x01c20054 0x4>; 136 reg = <0x01c20054 0x4>;
125 clocks = <&axi>; 137 clocks = <&axi>;
138 clock-output-names = "ahb";
126 }; 139 };
127 140
128 ahb_gates: ahb_gates@01c20060 { 141 ahb_gates: clk@01c20060 {
129 #clock-cells = <1>; 142 #clock-cells = <1>;
130 compatible = "allwinner,sun4i-ahb-gates-clk"; 143 compatible = "allwinner,sun4i-a10-ahb-gates-clk";
131 reg = <0x01c20060 0x8>; 144 reg = <0x01c20060 0x8>;
132 clocks = <&ahb>; 145 clocks = <&ahb>;
133 clock-output-names = "ahb_usb0", "ahb_ehci0", 146 clock-output-names = "ahb_usb0", "ahb_ehci0",
@@ -145,14 +158,15 @@
145 158
146 apb0: apb0@01c20054 { 159 apb0: apb0@01c20054 {
147 #clock-cells = <0>; 160 #clock-cells = <0>;
148 compatible = "allwinner,sun4i-apb0-clk"; 161 compatible = "allwinner,sun4i-a10-apb0-clk";
149 reg = <0x01c20054 0x4>; 162 reg = <0x01c20054 0x4>;
150 clocks = <&ahb>; 163 clocks = <&ahb>;
164 clock-output-names = "apb0";
151 }; 165 };
152 166
153 apb0_gates: apb0_gates@01c20068 { 167 apb0_gates: clk@01c20068 {
154 #clock-cells = <1>; 168 #clock-cells = <1>;
155 compatible = "allwinner,sun4i-apb0-gates-clk"; 169 compatible = "allwinner,sun4i-a10-apb0-gates-clk";
156 reg = <0x01c20068 0x4>; 170 reg = <0x01c20068 0x4>;
157 clocks = <&apb0>; 171 clocks = <&apb0>;
158 clock-output-names = "apb0_codec", "apb0_spdif", 172 clock-output-names = "apb0_codec", "apb0_spdif",
@@ -162,21 +176,23 @@
162 176
163 apb1_mux: apb1_mux@01c20058 { 177 apb1_mux: apb1_mux@01c20058 {
164 #clock-cells = <0>; 178 #clock-cells = <0>;
165 compatible = "allwinner,sun4i-apb1-mux-clk"; 179 compatible = "allwinner,sun4i-a10-apb1-mux-clk";
166 reg = <0x01c20058 0x4>; 180 reg = <0x01c20058 0x4>;
167 clocks = <&osc24M>, <&pll6 1>, <&osc32k>; 181 clocks = <&osc24M>, <&pll6 1>, <&osc32k>;
182 clock-output-names = "apb1_mux";
168 }; 183 };
169 184
170 apb1: apb1@01c20058 { 185 apb1: apb1@01c20058 {
171 #clock-cells = <0>; 186 #clock-cells = <0>;
172 compatible = "allwinner,sun4i-apb1-clk"; 187 compatible = "allwinner,sun4i-a10-apb1-clk";
173 reg = <0x01c20058 0x4>; 188 reg = <0x01c20058 0x4>;
174 clocks = <&apb1_mux>; 189 clocks = <&apb1_mux>;
190 clock-output-names = "apb1";
175 }; 191 };
176 192
177 apb1_gates: apb1_gates@01c2006c { 193 apb1_gates: clk@01c2006c {
178 #clock-cells = <1>; 194 #clock-cells = <1>;
179 compatible = "allwinner,sun4i-apb1-gates-clk"; 195 compatible = "allwinner,sun4i-a10-apb1-gates-clk";
180 reg = <0x01c2006c 0x4>; 196 reg = <0x01c2006c 0x4>;
181 clocks = <&apb1>; 197 clocks = <&apb1>;
182 clock-output-names = "apb1_i2c0", "apb1_i2c1", 198 clock-output-names = "apb1_i2c0", "apb1_i2c1",
@@ -189,7 +205,7 @@
189 205
190 nand_clk: clk@01c20080 { 206 nand_clk: clk@01c20080 {
191 #clock-cells = <0>; 207 #clock-cells = <0>;
192 compatible = "allwinner,sun4i-mod0-clk"; 208 compatible = "allwinner,sun4i-a10-mod0-clk";
193 reg = <0x01c20080 0x4>; 209 reg = <0x01c20080 0x4>;
194 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 210 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
195 clock-output-names = "nand"; 211 clock-output-names = "nand";
@@ -197,7 +213,7 @@
197 213
198 ms_clk: clk@01c20084 { 214 ms_clk: clk@01c20084 {
199 #clock-cells = <0>; 215 #clock-cells = <0>;
200 compatible = "allwinner,sun4i-mod0-clk"; 216 compatible = "allwinner,sun4i-a10-mod0-clk";
201 reg = <0x01c20084 0x4>; 217 reg = <0x01c20084 0x4>;
202 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 218 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
203 clock-output-names = "ms"; 219 clock-output-names = "ms";
@@ -205,7 +221,7 @@
205 221
206 mmc0_clk: clk@01c20088 { 222 mmc0_clk: clk@01c20088 {
207 #clock-cells = <0>; 223 #clock-cells = <0>;
208 compatible = "allwinner,sun4i-mod0-clk"; 224 compatible = "allwinner,sun4i-a10-mod0-clk";
209 reg = <0x01c20088 0x4>; 225 reg = <0x01c20088 0x4>;
210 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 226 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
211 clock-output-names = "mmc0"; 227 clock-output-names = "mmc0";
@@ -213,7 +229,7 @@
213 229
214 mmc1_clk: clk@01c2008c { 230 mmc1_clk: clk@01c2008c {
215 #clock-cells = <0>; 231 #clock-cells = <0>;
216 compatible = "allwinner,sun4i-mod0-clk"; 232 compatible = "allwinner,sun4i-a10-mod0-clk";
217 reg = <0x01c2008c 0x4>; 233 reg = <0x01c2008c 0x4>;
218 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 234 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
219 clock-output-names = "mmc1"; 235 clock-output-names = "mmc1";
@@ -221,7 +237,7 @@
221 237
222 mmc2_clk: clk@01c20090 { 238 mmc2_clk: clk@01c20090 {
223 #clock-cells = <0>; 239 #clock-cells = <0>;
224 compatible = "allwinner,sun4i-mod0-clk"; 240 compatible = "allwinner,sun4i-a10-mod0-clk";
225 reg = <0x01c20090 0x4>; 241 reg = <0x01c20090 0x4>;
226 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 242 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
227 clock-output-names = "mmc2"; 243 clock-output-names = "mmc2";
@@ -229,7 +245,7 @@
229 245
230 mmc3_clk: clk@01c20094 { 246 mmc3_clk: clk@01c20094 {
231 #clock-cells = <0>; 247 #clock-cells = <0>;
232 compatible = "allwinner,sun4i-mod0-clk"; 248 compatible = "allwinner,sun4i-a10-mod0-clk";
233 reg = <0x01c20094 0x4>; 249 reg = <0x01c20094 0x4>;
234 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 250 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
235 clock-output-names = "mmc3"; 251 clock-output-names = "mmc3";
@@ -237,7 +253,7 @@
237 253
238 ts_clk: clk@01c20098 { 254 ts_clk: clk@01c20098 {
239 #clock-cells = <0>; 255 #clock-cells = <0>;
240 compatible = "allwinner,sun4i-mod0-clk"; 256 compatible = "allwinner,sun4i-a10-mod0-clk";
241 reg = <0x01c20098 0x4>; 257 reg = <0x01c20098 0x4>;
242 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 258 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
243 clock-output-names = "ts"; 259 clock-output-names = "ts";
@@ -245,7 +261,7 @@
245 261
246 ss_clk: clk@01c2009c { 262 ss_clk: clk@01c2009c {
247 #clock-cells = <0>; 263 #clock-cells = <0>;
248 compatible = "allwinner,sun4i-mod0-clk"; 264 compatible = "allwinner,sun4i-a10-mod0-clk";
249 reg = <0x01c2009c 0x4>; 265 reg = <0x01c2009c 0x4>;
250 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 266 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
251 clock-output-names = "ss"; 267 clock-output-names = "ss";
@@ -253,7 +269,7 @@
253 269
254 spi0_clk: clk@01c200a0 { 270 spi0_clk: clk@01c200a0 {
255 #clock-cells = <0>; 271 #clock-cells = <0>;
256 compatible = "allwinner,sun4i-mod0-clk"; 272 compatible = "allwinner,sun4i-a10-mod0-clk";
257 reg = <0x01c200a0 0x4>; 273 reg = <0x01c200a0 0x4>;
258 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 274 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
259 clock-output-names = "spi0"; 275 clock-output-names = "spi0";
@@ -261,7 +277,7 @@
261 277
262 spi1_clk: clk@01c200a4 { 278 spi1_clk: clk@01c200a4 {
263 #clock-cells = <0>; 279 #clock-cells = <0>;
264 compatible = "allwinner,sun4i-mod0-clk"; 280 compatible = "allwinner,sun4i-a10-mod0-clk";
265 reg = <0x01c200a4 0x4>; 281 reg = <0x01c200a4 0x4>;
266 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 282 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
267 clock-output-names = "spi1"; 283 clock-output-names = "spi1";
@@ -269,7 +285,7 @@
269 285
270 spi2_clk: clk@01c200a8 { 286 spi2_clk: clk@01c200a8 {
271 #clock-cells = <0>; 287 #clock-cells = <0>;
272 compatible = "allwinner,sun4i-mod0-clk"; 288 compatible = "allwinner,sun4i-a10-mod0-clk";
273 reg = <0x01c200a8 0x4>; 289 reg = <0x01c200a8 0x4>;
274 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 290 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
275 clock-output-names = "spi2"; 291 clock-output-names = "spi2";
@@ -277,7 +293,7 @@
277 293
278 pata_clk: clk@01c200ac { 294 pata_clk: clk@01c200ac {
279 #clock-cells = <0>; 295 #clock-cells = <0>;
280 compatible = "allwinner,sun4i-mod0-clk"; 296 compatible = "allwinner,sun4i-a10-mod0-clk";
281 reg = <0x01c200ac 0x4>; 297 reg = <0x01c200ac 0x4>;
282 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 298 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
283 clock-output-names = "pata"; 299 clock-output-names = "pata";
@@ -285,7 +301,7 @@
285 301
286 ir0_clk: clk@01c200b0 { 302 ir0_clk: clk@01c200b0 {
287 #clock-cells = <0>; 303 #clock-cells = <0>;
288 compatible = "allwinner,sun4i-mod0-clk"; 304 compatible = "allwinner,sun4i-a10-mod0-clk";
289 reg = <0x01c200b0 0x4>; 305 reg = <0x01c200b0 0x4>;
290 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 306 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
291 clock-output-names = "ir0"; 307 clock-output-names = "ir0";
@@ -293,15 +309,24 @@
293 309
294 ir1_clk: clk@01c200b4 { 310 ir1_clk: clk@01c200b4 {
295 #clock-cells = <0>; 311 #clock-cells = <0>;
296 compatible = "allwinner,sun4i-mod0-clk"; 312 compatible = "allwinner,sun4i-a10-mod0-clk";
297 reg = <0x01c200b4 0x4>; 313 reg = <0x01c200b4 0x4>;
298 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 314 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
299 clock-output-names = "ir1"; 315 clock-output-names = "ir1";
300 }; 316 };
301 317
318 usb_clk: clk@01c200cc {
319 #clock-cells = <1>;
320 #reset-cells = <1>;
321 compatible = "allwinner,sun4i-a10-usb-clk";
322 reg = <0x01c200cc 0x4>;
323 clocks = <&pll6 1>;
324 clock-output-names = "usb_ohci0", "usb_ohci1", "usb_phy";
325 };
326
302 spi3_clk: clk@01c200d4 { 327 spi3_clk: clk@01c200d4 {
303 #clock-cells = <0>; 328 #clock-cells = <0>;
304 compatible = "allwinner,sun4i-mod0-clk"; 329 compatible = "allwinner,sun4i-a10-mod0-clk";
305 reg = <0x01c200d4 0x4>; 330 reg = <0x01c200d4 0x4>;
306 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 331 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
307 clock-output-names = "spi3"; 332 clock-output-names = "spi3";
@@ -314,8 +339,30 @@
314 #size-cells = <1>; 339 #size-cells = <1>;
315 ranges; 340 ranges;
316 341
342 spi0: spi@01c05000 {
343 compatible = "allwinner,sun4i-a10-spi";
344 reg = <0x01c05000 0x1000>;
345 interrupts = <10>;
346 clocks = <&ahb_gates 20>, <&spi0_clk>;
347 clock-names = "ahb", "mod";
348 status = "disabled";
349 #address-cells = <1>;
350 #size-cells = <0>;
351 };
352
353 spi1: spi@01c06000 {
354 compatible = "allwinner,sun4i-a10-spi";
355 reg = <0x01c06000 0x1000>;
356 interrupts = <11>;
357 clocks = <&ahb_gates 21>, <&spi1_clk>;
358 clock-names = "ahb", "mod";
359 status = "disabled";
360 #address-cells = <1>;
361 #size-cells = <0>;
362 };
363
317 emac: ethernet@01c0b000 { 364 emac: ethernet@01c0b000 {
318 compatible = "allwinner,sun4i-emac"; 365 compatible = "allwinner,sun4i-a10-emac";
319 reg = <0x01c0b000 0x1000>; 366 reg = <0x01c0b000 0x1000>;
320 interrupts = <55>; 367 interrupts = <55>;
321 clocks = <&ahb_gates 17>; 368 clocks = <&ahb_gates 17>;
@@ -323,13 +370,35 @@
323 }; 370 };
324 371
325 mdio@01c0b080 { 372 mdio@01c0b080 {
326 compatible = "allwinner,sun4i-mdio"; 373 compatible = "allwinner,sun4i-a10-mdio";
327 reg = <0x01c0b080 0x14>; 374 reg = <0x01c0b080 0x14>;
328 status = "disabled"; 375 status = "disabled";
329 #address-cells = <1>; 376 #address-cells = <1>;
330 #size-cells = <0>; 377 #size-cells = <0>;
331 }; 378 };
332 379
380 spi2: spi@01c17000 {
381 compatible = "allwinner,sun4i-a10-spi";
382 reg = <0x01c17000 0x1000>;
383 interrupts = <12>;
384 clocks = <&ahb_gates 22>, <&spi2_clk>;
385 clock-names = "ahb", "mod";
386 status = "disabled";
387 #address-cells = <1>;
388 #size-cells = <0>;
389 };
390
391 spi3: spi@01c1f000 {
392 compatible = "allwinner,sun4i-a10-spi";
393 reg = <0x01c1f000 0x1000>;
394 interrupts = <50>;
395 clocks = <&ahb_gates 23>, <&spi3_clk>;
396 clock-names = "ahb", "mod";
397 status = "disabled";
398 #address-cells = <1>;
399 #size-cells = <0>;
400 };
401
333 intc: interrupt-controller@01c20400 { 402 intc: interrupt-controller@01c20400 {
334 compatible = "allwinner,sun4i-ic"; 403 compatible = "allwinner,sun4i-ic";
335 reg = <0x01c20400 0x400>; 404 reg = <0x01c20400 0x400>;
diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi
index ea16054857a4..a7198b615afd 100644
--- a/arch/arm/boot/dts/sun5i-a10s.dtsi
+++ b/arch/arm/boot/dts/sun5i-a10s.dtsi
@@ -18,6 +18,10 @@
18 18
19 aliases { 19 aliases {
20 ethernet0 = &emac; 20 ethernet0 = &emac;
21 serial0 = &uart0;
22 serial1 = &uart1;
23 serial2 = &uart2;
24 serial3 = &uart3;
21 }; 25 };
22 26
23 cpus { 27 cpus {
@@ -47,44 +51,48 @@
47 clock-frequency = <0>; 51 clock-frequency = <0>;
48 }; 52 };
49 53
50 osc24M: osc24M@01c20050 { 54 osc24M: clk@01c20050 {
51 #clock-cells = <0>; 55 #clock-cells = <0>;
52 compatible = "allwinner,sun4i-osc-clk"; 56 compatible = "allwinner,sun4i-a10-osc-clk";
53 reg = <0x01c20050 0x4>; 57 reg = <0x01c20050 0x4>;
54 clock-frequency = <24000000>; 58 clock-frequency = <24000000>;
59 clock-output-names = "osc24M";
55 }; 60 };
56 61
57 osc32k: osc32k { 62 osc32k: clk@0 {
58 #clock-cells = <0>; 63 #clock-cells = <0>;
59 compatible = "fixed-clock"; 64 compatible = "fixed-clock";
60 clock-frequency = <32768>; 65 clock-frequency = <32768>;
66 clock-output-names = "osc32k";
61 }; 67 };
62 68
63 pll1: pll1@01c20000 { 69 pll1: clk@01c20000 {
64 #clock-cells = <0>; 70 #clock-cells = <0>;
65 compatible = "allwinner,sun4i-pll1-clk"; 71 compatible = "allwinner,sun4i-a10-pll1-clk";
66 reg = <0x01c20000 0x4>; 72 reg = <0x01c20000 0x4>;
67 clocks = <&osc24M>; 73 clocks = <&osc24M>;
74 clock-output-names = "pll1";
68 }; 75 };
69 76
70 pll4: pll4@01c20018 { 77 pll4: clk@01c20018 {
71 #clock-cells = <0>; 78 #clock-cells = <0>;
72 compatible = "allwinner,sun4i-pll1-clk"; 79 compatible = "allwinner,sun4i-a10-pll1-clk";
73 reg = <0x01c20018 0x4>; 80 reg = <0x01c20018 0x4>;
74 clocks = <&osc24M>; 81 clocks = <&osc24M>;
82 clock-output-names = "pll4";
75 }; 83 };
76 84
77 pll5: pll5@01c20020 { 85 pll5: clk@01c20020 {
78 #clock-cells = <1>; 86 #clock-cells = <1>;
79 compatible = "allwinner,sun4i-pll5-clk"; 87 compatible = "allwinner,sun4i-a10-pll5-clk";
80 reg = <0x01c20020 0x4>; 88 reg = <0x01c20020 0x4>;
81 clocks = <&osc24M>; 89 clocks = <&osc24M>;
82 clock-output-names = "pll5_ddr", "pll5_other"; 90 clock-output-names = "pll5_ddr", "pll5_other";
83 }; 91 };
84 92
85 pll6: pll6@01c20028 { 93 pll6: clk@01c20028 {
86 #clock-cells = <1>; 94 #clock-cells = <1>;
87 compatible = "allwinner,sun4i-pll6-clk"; 95 compatible = "allwinner,sun4i-a10-pll6-clk";
88 reg = <0x01c20028 0x4>; 96 reg = <0x01c20028 0x4>;
89 clocks = <&osc24M>; 97 clocks = <&osc24M>;
90 clock-output-names = "pll6_sata", "pll6_other", "pll6"; 98 clock-output-names = "pll6_sata", "pll6_other", "pll6";
@@ -93,21 +101,23 @@
93 /* dummy is 200M */ 101 /* dummy is 200M */
94 cpu: cpu@01c20054 { 102 cpu: cpu@01c20054 {
95 #clock-cells = <0>; 103 #clock-cells = <0>;
96 compatible = "allwinner,sun4i-cpu-clk"; 104 compatible = "allwinner,sun4i-a10-cpu-clk";
97 reg = <0x01c20054 0x4>; 105 reg = <0x01c20054 0x4>;
98 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>; 106 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>;
107 clock-output-names = "cpu";
99 }; 108 };
100 109
101 axi: axi@01c20054 { 110 axi: axi@01c20054 {
102 #clock-cells = <0>; 111 #clock-cells = <0>;
103 compatible = "allwinner,sun4i-axi-clk"; 112 compatible = "allwinner,sun4i-a10-axi-clk";
104 reg = <0x01c20054 0x4>; 113 reg = <0x01c20054 0x4>;
105 clocks = <&cpu>; 114 clocks = <&cpu>;
115 clock-output-names = "axi";
106 }; 116 };
107 117
108 axi_gates: axi_gates@01c2005c { 118 axi_gates: clk@01c2005c {
109 #clock-cells = <1>; 119 #clock-cells = <1>;
110 compatible = "allwinner,sun4i-axi-gates-clk"; 120 compatible = "allwinner,sun4i-a10-axi-gates-clk";
111 reg = <0x01c2005c 0x4>; 121 reg = <0x01c2005c 0x4>;
112 clocks = <&axi>; 122 clocks = <&axi>;
113 clock-output-names = "axi_dram"; 123 clock-output-names = "axi_dram";
@@ -115,12 +125,13 @@
115 125
116 ahb: ahb@01c20054 { 126 ahb: ahb@01c20054 {
117 #clock-cells = <0>; 127 #clock-cells = <0>;
118 compatible = "allwinner,sun4i-ahb-clk"; 128 compatible = "allwinner,sun4i-a10-ahb-clk";
119 reg = <0x01c20054 0x4>; 129 reg = <0x01c20054 0x4>;
120 clocks = <&axi>; 130 clocks = <&axi>;
131 clock-output-names = "ahb";
121 }; 132 };
122 133
123 ahb_gates: ahb_gates@01c20060 { 134 ahb_gates: clk@01c20060 {
124 #clock-cells = <1>; 135 #clock-cells = <1>;
125 compatible = "allwinner,sun5i-a10s-ahb-gates-clk"; 136 compatible = "allwinner,sun5i-a10s-ahb-gates-clk";
126 reg = <0x01c20060 0x8>; 137 reg = <0x01c20060 0x8>;
@@ -136,12 +147,13 @@
136 147
137 apb0: apb0@01c20054 { 148 apb0: apb0@01c20054 {
138 #clock-cells = <0>; 149 #clock-cells = <0>;
139 compatible = "allwinner,sun4i-apb0-clk"; 150 compatible = "allwinner,sun4i-a10-apb0-clk";
140 reg = <0x01c20054 0x4>; 151 reg = <0x01c20054 0x4>;
141 clocks = <&ahb>; 152 clocks = <&ahb>;
153 clock-output-names = "apb0";
142 }; 154 };
143 155
144 apb0_gates: apb0_gates@01c20068 { 156 apb0_gates: clk@01c20068 {
145 #clock-cells = <1>; 157 #clock-cells = <1>;
146 compatible = "allwinner,sun5i-a10s-apb0-gates-clk"; 158 compatible = "allwinner,sun5i-a10s-apb0-gates-clk";
147 reg = <0x01c20068 0x4>; 159 reg = <0x01c20068 0x4>;
@@ -152,19 +164,21 @@
152 164
153 apb1_mux: apb1_mux@01c20058 { 165 apb1_mux: apb1_mux@01c20058 {
154 #clock-cells = <0>; 166 #clock-cells = <0>;
155 compatible = "allwinner,sun4i-apb1-mux-clk"; 167 compatible = "allwinner,sun4i-a10-apb1-mux-clk";
156 reg = <0x01c20058 0x4>; 168 reg = <0x01c20058 0x4>;
157 clocks = <&osc24M>, <&pll6 1>, <&osc32k>; 169 clocks = <&osc24M>, <&pll6 1>, <&osc32k>;
170 clock-output-names = "apb1_mux";
158 }; 171 };
159 172
160 apb1: apb1@01c20058 { 173 apb1: apb1@01c20058 {
161 #clock-cells = <0>; 174 #clock-cells = <0>;
162 compatible = "allwinner,sun4i-apb1-clk"; 175 compatible = "allwinner,sun4i-a10-apb1-clk";
163 reg = <0x01c20058 0x4>; 176 reg = <0x01c20058 0x4>;
164 clocks = <&apb1_mux>; 177 clocks = <&apb1_mux>;
178 clock-output-names = "apb1";
165 }; 179 };
166 180
167 apb1_gates: apb1_gates@01c2006c { 181 apb1_gates: clk@01c2006c {
168 #clock-cells = <1>; 182 #clock-cells = <1>;
169 compatible = "allwinner,sun5i-a10s-apb1-gates-clk"; 183 compatible = "allwinner,sun5i-a10s-apb1-gates-clk";
170 reg = <0x01c2006c 0x4>; 184 reg = <0x01c2006c 0x4>;
@@ -176,7 +190,7 @@
176 190
177 nand_clk: clk@01c20080 { 191 nand_clk: clk@01c20080 {
178 #clock-cells = <0>; 192 #clock-cells = <0>;
179 compatible = "allwinner,sun4i-mod0-clk"; 193 compatible = "allwinner,sun4i-a10-mod0-clk";
180 reg = <0x01c20080 0x4>; 194 reg = <0x01c20080 0x4>;
181 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 195 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
182 clock-output-names = "nand"; 196 clock-output-names = "nand";
@@ -184,7 +198,7 @@
184 198
185 ms_clk: clk@01c20084 { 199 ms_clk: clk@01c20084 {
186 #clock-cells = <0>; 200 #clock-cells = <0>;
187 compatible = "allwinner,sun4i-mod0-clk"; 201 compatible = "allwinner,sun4i-a10-mod0-clk";
188 reg = <0x01c20084 0x4>; 202 reg = <0x01c20084 0x4>;
189 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 203 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
190 clock-output-names = "ms"; 204 clock-output-names = "ms";
@@ -192,7 +206,7 @@
192 206
193 mmc0_clk: clk@01c20088 { 207 mmc0_clk: clk@01c20088 {
194 #clock-cells = <0>; 208 #clock-cells = <0>;
195 compatible = "allwinner,sun4i-mod0-clk"; 209 compatible = "allwinner,sun4i-a10-mod0-clk";
196 reg = <0x01c20088 0x4>; 210 reg = <0x01c20088 0x4>;
197 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 211 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
198 clock-output-names = "mmc0"; 212 clock-output-names = "mmc0";
@@ -200,7 +214,7 @@
200 214
201 mmc1_clk: clk@01c2008c { 215 mmc1_clk: clk@01c2008c {
202 #clock-cells = <0>; 216 #clock-cells = <0>;
203 compatible = "allwinner,sun4i-mod0-clk"; 217 compatible = "allwinner,sun4i-a10-mod0-clk";
204 reg = <0x01c2008c 0x4>; 218 reg = <0x01c2008c 0x4>;
205 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 219 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
206 clock-output-names = "mmc1"; 220 clock-output-names = "mmc1";
@@ -208,7 +222,7 @@
208 222
209 mmc2_clk: clk@01c20090 { 223 mmc2_clk: clk@01c20090 {
210 #clock-cells = <0>; 224 #clock-cells = <0>;
211 compatible = "allwinner,sun4i-mod0-clk"; 225 compatible = "allwinner,sun4i-a10-mod0-clk";
212 reg = <0x01c20090 0x4>; 226 reg = <0x01c20090 0x4>;
213 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 227 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
214 clock-output-names = "mmc2"; 228 clock-output-names = "mmc2";
@@ -216,7 +230,7 @@
216 230
217 ts_clk: clk@01c20098 { 231 ts_clk: clk@01c20098 {
218 #clock-cells = <0>; 232 #clock-cells = <0>;
219 compatible = "allwinner,sun4i-mod0-clk"; 233 compatible = "allwinner,sun4i-a10-mod0-clk";
220 reg = <0x01c20098 0x4>; 234 reg = <0x01c20098 0x4>;
221 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 235 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
222 clock-output-names = "ts"; 236 clock-output-names = "ts";
@@ -224,7 +238,7 @@
224 238
225 ss_clk: clk@01c2009c { 239 ss_clk: clk@01c2009c {
226 #clock-cells = <0>; 240 #clock-cells = <0>;
227 compatible = "allwinner,sun4i-mod0-clk"; 241 compatible = "allwinner,sun4i-a10-mod0-clk";
228 reg = <0x01c2009c 0x4>; 242 reg = <0x01c2009c 0x4>;
229 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 243 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
230 clock-output-names = "ss"; 244 clock-output-names = "ss";
@@ -232,7 +246,7 @@
232 246
233 spi0_clk: clk@01c200a0 { 247 spi0_clk: clk@01c200a0 {
234 #clock-cells = <0>; 248 #clock-cells = <0>;
235 compatible = "allwinner,sun4i-mod0-clk"; 249 compatible = "allwinner,sun4i-a10-mod0-clk";
236 reg = <0x01c200a0 0x4>; 250 reg = <0x01c200a0 0x4>;
237 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 251 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
238 clock-output-names = "spi0"; 252 clock-output-names = "spi0";
@@ -240,7 +254,7 @@
240 254
241 spi1_clk: clk@01c200a4 { 255 spi1_clk: clk@01c200a4 {
242 #clock-cells = <0>; 256 #clock-cells = <0>;
243 compatible = "allwinner,sun4i-mod0-clk"; 257 compatible = "allwinner,sun4i-a10-mod0-clk";
244 reg = <0x01c200a4 0x4>; 258 reg = <0x01c200a4 0x4>;
245 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 259 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
246 clock-output-names = "spi1"; 260 clock-output-names = "spi1";
@@ -248,7 +262,7 @@
248 262
249 spi2_clk: clk@01c200a8 { 263 spi2_clk: clk@01c200a8 {
250 #clock-cells = <0>; 264 #clock-cells = <0>;
251 compatible = "allwinner,sun4i-mod0-clk"; 265 compatible = "allwinner,sun4i-a10-mod0-clk";
252 reg = <0x01c200a8 0x4>; 266 reg = <0x01c200a8 0x4>;
253 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 267 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
254 clock-output-names = "spi2"; 268 clock-output-names = "spi2";
@@ -256,15 +270,24 @@
256 270
257 ir0_clk: clk@01c200b0 { 271 ir0_clk: clk@01c200b0 {
258 #clock-cells = <0>; 272 #clock-cells = <0>;
259 compatible = "allwinner,sun4i-mod0-clk"; 273 compatible = "allwinner,sun4i-a10-mod0-clk";
260 reg = <0x01c200b0 0x4>; 274 reg = <0x01c200b0 0x4>;
261 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 275 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
262 clock-output-names = "ir0"; 276 clock-output-names = "ir0";
263 }; 277 };
264 278
279 usb_clk: clk@01c200cc {
280 #clock-cells = <1>;
281 #reset-cells = <1>;
282 compatible = "allwinner,sun5i-a13-usb-clk";
283 reg = <0x01c200cc 0x4>;
284 clocks = <&pll6 1>;
285 clock-output-names = "usb_ohci0", "usb_phy";
286 };
287
265 mbus_clk: clk@01c2015c { 288 mbus_clk: clk@01c2015c {
266 #clock-cells = <0>; 289 #clock-cells = <0>;
267 compatible = "allwinner,sun4i-mod0-clk"; 290 compatible = "allwinner,sun4i-a10-mod0-clk";
268 reg = <0x01c2015c 0x4>; 291 reg = <0x01c2015c 0x4>;
269 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 292 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
270 clock-output-names = "mbus"; 293 clock-output-names = "mbus";
@@ -277,8 +300,30 @@
277 #size-cells = <1>; 300 #size-cells = <1>;
278 ranges; 301 ranges;
279 302
303 spi0: spi@01c05000 {
304 compatible = "allwinner,sun4i-a10-spi";
305 reg = <0x01c05000 0x1000>;
306 interrupts = <10>;
307 clocks = <&ahb_gates 20>, <&spi0_clk>;
308 clock-names = "ahb", "mod";
309 status = "disabled";
310 #address-cells = <1>;
311 #size-cells = <0>;
312 };
313
314 spi1: spi@01c06000 {
315 compatible = "allwinner,sun4i-a10-spi";
316 reg = <0x01c06000 0x1000>;
317 interrupts = <11>;
318 clocks = <&ahb_gates 21>, <&spi1_clk>;
319 clock-names = "ahb", "mod";
320 status = "disabled";
321 #address-cells = <1>;
322 #size-cells = <0>;
323 };
324
280 emac: ethernet@01c0b000 { 325 emac: ethernet@01c0b000 {
281 compatible = "allwinner,sun4i-emac"; 326 compatible = "allwinner,sun4i-a10-emac";
282 reg = <0x01c0b000 0x1000>; 327 reg = <0x01c0b000 0x1000>;
283 interrupts = <55>; 328 interrupts = <55>;
284 clocks = <&ahb_gates 17>; 329 clocks = <&ahb_gates 17>;
@@ -286,13 +331,24 @@
286 }; 331 };
287 332
288 mdio@01c0b080 { 333 mdio@01c0b080 {
289 compatible = "allwinner,sun4i-mdio"; 334 compatible = "allwinner,sun4i-a10-mdio";
290 reg = <0x01c0b080 0x14>; 335 reg = <0x01c0b080 0x14>;
291 status = "disabled"; 336 status = "disabled";
292 #address-cells = <1>; 337 #address-cells = <1>;
293 #size-cells = <0>; 338 #size-cells = <0>;
294 }; 339 };
295 340
341 spi2: spi@01c17000 {
342 compatible = "allwinner,sun4i-a10-spi";
343 reg = <0x01c17000 0x1000>;
344 interrupts = <12>;
345 clocks = <&ahb_gates 22>, <&spi2_clk>;
346 clock-names = "ahb", "mod";
347 status = "disabled";
348 #address-cells = <1>;
349 #size-cells = <0>;
350 };
351
296 intc: interrupt-controller@01c20400 { 352 intc: interrupt-controller@01c20400 {
297 compatible = "allwinner,sun4i-ic"; 353 compatible = "allwinner,sun4i-ic";
298 reg = <0x01c20400 0x400>; 354 reg = <0x01c20400 0x400>;
diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
index 320335abfccd..cda1d4bbe2e2 100644
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
@@ -16,6 +16,11 @@
16/ { 16/ {
17 interrupt-parent = <&intc>; 17 interrupt-parent = <&intc>;
18 18
19 aliases {
20 serial0 = &uart1;
21 serial1 = &uart3;
22 };
23
19 cpus { 24 cpus {
20 #address-cells = <1>; 25 #address-cells = <1>;
21 #size-cells = <0>; 26 #size-cells = <0>;
@@ -47,44 +52,48 @@
47 clock-frequency = <0>; 52 clock-frequency = <0>;
48 }; 53 };
49 54
50 osc24M: osc24M@01c20050 { 55 osc24M: clk@01c20050 {
51 #clock-cells = <0>; 56 #clock-cells = <0>;
52 compatible = "allwinner,sun4i-osc-clk"; 57 compatible = "allwinner,sun4i-a10-osc-clk";
53 reg = <0x01c20050 0x4>; 58 reg = <0x01c20050 0x4>;
54 clock-frequency = <24000000>; 59 clock-frequency = <24000000>;
60 clock-output-names = "osc24M";
55 }; 61 };
56 62
57 osc32k: osc32k { 63 osc32k: clk@0 {
58 #clock-cells = <0>; 64 #clock-cells = <0>;
59 compatible = "fixed-clock"; 65 compatible = "fixed-clock";
60 clock-frequency = <32768>; 66 clock-frequency = <32768>;
67 clock-output-names = "osc32k";
61 }; 68 };
62 69
63 pll1: pll1@01c20000 { 70 pll1: clk@01c20000 {
64 #clock-cells = <0>; 71 #clock-cells = <0>;
65 compatible = "allwinner,sun4i-pll1-clk"; 72 compatible = "allwinner,sun4i-a10-pll1-clk";
66 reg = <0x01c20000 0x4>; 73 reg = <0x01c20000 0x4>;
67 clocks = <&osc24M>; 74 clocks = <&osc24M>;
75 clock-output-names = "pll1";
68 }; 76 };
69 77
70 pll4: pll4@01c20018 { 78 pll4: clk@01c20018 {
71 #clock-cells = <0>; 79 #clock-cells = <0>;
72 compatible = "allwinner,sun4i-pll1-clk"; 80 compatible = "allwinner,sun4i-a10-pll1-clk";
73 reg = <0x01c20018 0x4>; 81 reg = <0x01c20018 0x4>;
74 clocks = <&osc24M>; 82 clocks = <&osc24M>;
83 clock-output-names = "pll4";
75 }; 84 };
76 85
77 pll5: pll5@01c20020 { 86 pll5: clk@01c20020 {
78 #clock-cells = <1>; 87 #clock-cells = <1>;
79 compatible = "allwinner,sun4i-pll5-clk"; 88 compatible = "allwinner,sun4i-a10-pll5-clk";
80 reg = <0x01c20020 0x4>; 89 reg = <0x01c20020 0x4>;
81 clocks = <&osc24M>; 90 clocks = <&osc24M>;
82 clock-output-names = "pll5_ddr", "pll5_other"; 91 clock-output-names = "pll5_ddr", "pll5_other";
83 }; 92 };
84 93
85 pll6: pll6@01c20028 { 94 pll6: clk@01c20028 {
86 #clock-cells = <1>; 95 #clock-cells = <1>;
87 compatible = "allwinner,sun4i-pll6-clk"; 96 compatible = "allwinner,sun4i-a10-pll6-clk";
88 reg = <0x01c20028 0x4>; 97 reg = <0x01c20028 0x4>;
89 clocks = <&osc24M>; 98 clocks = <&osc24M>;
90 clock-output-names = "pll6_sata", "pll6_other", "pll6"; 99 clock-output-names = "pll6_sata", "pll6_other", "pll6";
@@ -93,21 +102,23 @@
93 /* dummy is 200M */ 102 /* dummy is 200M */
94 cpu: cpu@01c20054 { 103 cpu: cpu@01c20054 {
95 #clock-cells = <0>; 104 #clock-cells = <0>;
96 compatible = "allwinner,sun4i-cpu-clk"; 105 compatible = "allwinner,sun4i-a10-cpu-clk";
97 reg = <0x01c20054 0x4>; 106 reg = <0x01c20054 0x4>;
98 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>; 107 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>;
108 clock-output-names = "cpu";
99 }; 109 };
100 110
101 axi: axi@01c20054 { 111 axi: axi@01c20054 {
102 #clock-cells = <0>; 112 #clock-cells = <0>;
103 compatible = "allwinner,sun4i-axi-clk"; 113 compatible = "allwinner,sun4i-a10-axi-clk";
104 reg = <0x01c20054 0x4>; 114 reg = <0x01c20054 0x4>;
105 clocks = <&cpu>; 115 clocks = <&cpu>;
116 clock-output-names = "axi";
106 }; 117 };
107 118
108 axi_gates: axi_gates@01c2005c { 119 axi_gates: clk@01c2005c {
109 #clock-cells = <1>; 120 #clock-cells = <1>;
110 compatible = "allwinner,sun4i-axi-gates-clk"; 121 compatible = "allwinner,sun4i-a10-axi-gates-clk";
111 reg = <0x01c2005c 0x4>; 122 reg = <0x01c2005c 0x4>;
112 clocks = <&axi>; 123 clocks = <&axi>;
113 clock-output-names = "axi_dram"; 124 clock-output-names = "axi_dram";
@@ -115,12 +126,13 @@
115 126
116 ahb: ahb@01c20054 { 127 ahb: ahb@01c20054 {
117 #clock-cells = <0>; 128 #clock-cells = <0>;
118 compatible = "allwinner,sun4i-ahb-clk"; 129 compatible = "allwinner,sun4i-a10-ahb-clk";
119 reg = <0x01c20054 0x4>; 130 reg = <0x01c20054 0x4>;
120 clocks = <&axi>; 131 clocks = <&axi>;
132 clock-output-names = "ahb";
121 }; 133 };
122 134
123 ahb_gates: ahb_gates@01c20060 { 135 ahb_gates: clk@01c20060 {
124 #clock-cells = <1>; 136 #clock-cells = <1>;
125 compatible = "allwinner,sun5i-a13-ahb-gates-clk"; 137 compatible = "allwinner,sun5i-a13-ahb-gates-clk";
126 reg = <0x01c20060 0x8>; 138 reg = <0x01c20060 0x8>;
@@ -135,12 +147,13 @@
135 147
136 apb0: apb0@01c20054 { 148 apb0: apb0@01c20054 {
137 #clock-cells = <0>; 149 #clock-cells = <0>;
138 compatible = "allwinner,sun4i-apb0-clk"; 150 compatible = "allwinner,sun4i-a10-apb0-clk";
139 reg = <0x01c20054 0x4>; 151 reg = <0x01c20054 0x4>;
140 clocks = <&ahb>; 152 clocks = <&ahb>;
153 clock-output-names = "apb0";
141 }; 154 };
142 155
143 apb0_gates: apb0_gates@01c20068 { 156 apb0_gates: clk@01c20068 {
144 #clock-cells = <1>; 157 #clock-cells = <1>;
145 compatible = "allwinner,sun5i-a13-apb0-gates-clk"; 158 compatible = "allwinner,sun5i-a13-apb0-gates-clk";
146 reg = <0x01c20068 0x4>; 159 reg = <0x01c20068 0x4>;
@@ -150,19 +163,21 @@
150 163
151 apb1_mux: apb1_mux@01c20058 { 164 apb1_mux: apb1_mux@01c20058 {
152 #clock-cells = <0>; 165 #clock-cells = <0>;
153 compatible = "allwinner,sun4i-apb1-mux-clk"; 166 compatible = "allwinner,sun4i-a10-apb1-mux-clk";
154 reg = <0x01c20058 0x4>; 167 reg = <0x01c20058 0x4>;
155 clocks = <&osc24M>, <&pll6 1>, <&osc32k>; 168 clocks = <&osc24M>, <&pll6 1>, <&osc32k>;
169 clock-output-names = "apb1_mux";
156 }; 170 };
157 171
158 apb1: apb1@01c20058 { 172 apb1: apb1@01c20058 {
159 #clock-cells = <0>; 173 #clock-cells = <0>;
160 compatible = "allwinner,sun4i-apb1-clk"; 174 compatible = "allwinner,sun4i-a10-apb1-clk";
161 reg = <0x01c20058 0x4>; 175 reg = <0x01c20058 0x4>;
162 clocks = <&apb1_mux>; 176 clocks = <&apb1_mux>;
177 clock-output-names = "apb1";
163 }; 178 };
164 179
165 apb1_gates: apb1_gates@01c2006c { 180 apb1_gates: clk@01c2006c {
166 #clock-cells = <1>; 181 #clock-cells = <1>;
167 compatible = "allwinner,sun5i-a13-apb1-gates-clk"; 182 compatible = "allwinner,sun5i-a13-apb1-gates-clk";
168 reg = <0x01c2006c 0x4>; 183 reg = <0x01c2006c 0x4>;
@@ -173,7 +188,7 @@
173 188
174 nand_clk: clk@01c20080 { 189 nand_clk: clk@01c20080 {
175 #clock-cells = <0>; 190 #clock-cells = <0>;
176 compatible = "allwinner,sun4i-mod0-clk"; 191 compatible = "allwinner,sun4i-a10-mod0-clk";
177 reg = <0x01c20080 0x4>; 192 reg = <0x01c20080 0x4>;
178 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 193 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
179 clock-output-names = "nand"; 194 clock-output-names = "nand";
@@ -181,7 +196,7 @@
181 196
182 ms_clk: clk@01c20084 { 197 ms_clk: clk@01c20084 {
183 #clock-cells = <0>; 198 #clock-cells = <0>;
184 compatible = "allwinner,sun4i-mod0-clk"; 199 compatible = "allwinner,sun4i-a10-mod0-clk";
185 reg = <0x01c20084 0x4>; 200 reg = <0x01c20084 0x4>;
186 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 201 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
187 clock-output-names = "ms"; 202 clock-output-names = "ms";
@@ -189,7 +204,7 @@
189 204
190 mmc0_clk: clk@01c20088 { 205 mmc0_clk: clk@01c20088 {
191 #clock-cells = <0>; 206 #clock-cells = <0>;
192 compatible = "allwinner,sun4i-mod0-clk"; 207 compatible = "allwinner,sun4i-a10-mod0-clk";
193 reg = <0x01c20088 0x4>; 208 reg = <0x01c20088 0x4>;
194 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 209 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
195 clock-output-names = "mmc0"; 210 clock-output-names = "mmc0";
@@ -197,7 +212,7 @@
197 212
198 mmc1_clk: clk@01c2008c { 213 mmc1_clk: clk@01c2008c {
199 #clock-cells = <0>; 214 #clock-cells = <0>;
200 compatible = "allwinner,sun4i-mod0-clk"; 215 compatible = "allwinner,sun4i-a10-mod0-clk";
201 reg = <0x01c2008c 0x4>; 216 reg = <0x01c2008c 0x4>;
202 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 217 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
203 clock-output-names = "mmc1"; 218 clock-output-names = "mmc1";
@@ -205,7 +220,7 @@
205 220
206 mmc2_clk: clk@01c20090 { 221 mmc2_clk: clk@01c20090 {
207 #clock-cells = <0>; 222 #clock-cells = <0>;
208 compatible = "allwinner,sun4i-mod0-clk"; 223 compatible = "allwinner,sun4i-a10-mod0-clk";
209 reg = <0x01c20090 0x4>; 224 reg = <0x01c20090 0x4>;
210 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 225 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
211 clock-output-names = "mmc2"; 226 clock-output-names = "mmc2";
@@ -213,7 +228,7 @@
213 228
214 ts_clk: clk@01c20098 { 229 ts_clk: clk@01c20098 {
215 #clock-cells = <0>; 230 #clock-cells = <0>;
216 compatible = "allwinner,sun4i-mod0-clk"; 231 compatible = "allwinner,sun4i-a10-mod0-clk";
217 reg = <0x01c20098 0x4>; 232 reg = <0x01c20098 0x4>;
218 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 233 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
219 clock-output-names = "ts"; 234 clock-output-names = "ts";
@@ -221,7 +236,7 @@
221 236
222 ss_clk: clk@01c2009c { 237 ss_clk: clk@01c2009c {
223 #clock-cells = <0>; 238 #clock-cells = <0>;
224 compatible = "allwinner,sun4i-mod0-clk"; 239 compatible = "allwinner,sun4i-a10-mod0-clk";
225 reg = <0x01c2009c 0x4>; 240 reg = <0x01c2009c 0x4>;
226 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 241 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
227 clock-output-names = "ss"; 242 clock-output-names = "ss";
@@ -229,7 +244,7 @@
229 244
230 spi0_clk: clk@01c200a0 { 245 spi0_clk: clk@01c200a0 {
231 #clock-cells = <0>; 246 #clock-cells = <0>;
232 compatible = "allwinner,sun4i-mod0-clk"; 247 compatible = "allwinner,sun4i-a10-mod0-clk";
233 reg = <0x01c200a0 0x4>; 248 reg = <0x01c200a0 0x4>;
234 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 249 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
235 clock-output-names = "spi0"; 250 clock-output-names = "spi0";
@@ -237,7 +252,7 @@
237 252
238 spi1_clk: clk@01c200a4 { 253 spi1_clk: clk@01c200a4 {
239 #clock-cells = <0>; 254 #clock-cells = <0>;
240 compatible = "allwinner,sun4i-mod0-clk"; 255 compatible = "allwinner,sun4i-a10-mod0-clk";
241 reg = <0x01c200a4 0x4>; 256 reg = <0x01c200a4 0x4>;
242 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 257 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
243 clock-output-names = "spi1"; 258 clock-output-names = "spi1";
@@ -245,7 +260,7 @@
245 260
246 spi2_clk: clk@01c200a8 { 261 spi2_clk: clk@01c200a8 {
247 #clock-cells = <0>; 262 #clock-cells = <0>;
248 compatible = "allwinner,sun4i-mod0-clk"; 263 compatible = "allwinner,sun4i-a10-mod0-clk";
249 reg = <0x01c200a8 0x4>; 264 reg = <0x01c200a8 0x4>;
250 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 265 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
251 clock-output-names = "spi2"; 266 clock-output-names = "spi2";
@@ -253,15 +268,24 @@
253 268
254 ir0_clk: clk@01c200b0 { 269 ir0_clk: clk@01c200b0 {
255 #clock-cells = <0>; 270 #clock-cells = <0>;
256 compatible = "allwinner,sun4i-mod0-clk"; 271 compatible = "allwinner,sun4i-a10-mod0-clk";
257 reg = <0x01c200b0 0x4>; 272 reg = <0x01c200b0 0x4>;
258 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 273 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
259 clock-output-names = "ir0"; 274 clock-output-names = "ir0";
260 }; 275 };
261 276
277 usb_clk: clk@01c200cc {
278 #clock-cells = <1>;
279 #reset-cells = <1>;
280 compatible = "allwinner,sun5i-a13-usb-clk";
281 reg = <0x01c200cc 0x4>;
282 clocks = <&pll6 1>;
283 clock-output-names = "usb_ohci0", "usb_phy";
284 };
285
262 mbus_clk: clk@01c2015c { 286 mbus_clk: clk@01c2015c {
263 #clock-cells = <0>; 287 #clock-cells = <0>;
264 compatible = "allwinner,sun4i-mod0-clk"; 288 compatible = "allwinner,sun4i-a10-mod0-clk";
265 reg = <0x01c2015c 0x4>; 289 reg = <0x01c2015c 0x4>;
266 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 290 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
267 clock-output-names = "mbus"; 291 clock-output-names = "mbus";
@@ -274,6 +298,39 @@
274 #size-cells = <1>; 298 #size-cells = <1>;
275 ranges; 299 ranges;
276 300
301 spi0: spi@01c05000 {
302 compatible = "allwinner,sun4i-a10-spi";
303 reg = <0x01c05000 0x1000>;
304 interrupts = <10>;
305 clocks = <&ahb_gates 20>, <&spi0_clk>;
306 clock-names = "ahb", "mod";
307 status = "disabled";
308 #address-cells = <1>;
309 #size-cells = <0>;
310 };
311
312 spi1: spi@01c06000 {
313 compatible = "allwinner,sun4i-a10-spi";
314 reg = <0x01c06000 0x1000>;
315 interrupts = <11>;
316 clocks = <&ahb_gates 21>, <&spi1_clk>;
317 clock-names = "ahb", "mod";
318 status = "disabled";
319 #address-cells = <1>;
320 #size-cells = <0>;
321 };
322
323 spi2: spi@01c17000 {
324 compatible = "allwinner,sun4i-a10-spi";
325 reg = <0x01c17000 0x1000>;
326 interrupts = <12>;
327 clocks = <&ahb_gates 22>, <&spi2_clk>;
328 clock-names = "ahb", "mod";
329 status = "disabled";
330 #address-cells = <1>;
331 #size-cells = <0>;
332 };
333
277 intc: interrupt-controller@01c20400 { 334 intc: interrupt-controller@01c20400 {
278 compatible = "allwinner,sun4i-ic"; 335 compatible = "allwinner,sun4i-ic";
279 reg = <0x01c20400 0x400>; 336 reg = <0x01c20400 0x400>;
diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi
index 5256ad9be52c..42f310a925c4 100644
--- a/arch/arm/boot/dts/sun6i-a31.dtsi
+++ b/arch/arm/boot/dts/sun6i-a31.dtsi
@@ -16,6 +16,16 @@
16/ { 16/ {
17 interrupt-parent = <&gic>; 17 interrupt-parent = <&gic>;
18 18
19 aliases {
20 serial0 = &uart0;
21 serial1 = &uart1;
22 serial2 = &uart2;
23 serial3 = &uart3;
24 serial4 = &uart4;
25 serial5 = &uart5;
26 };
27
28
19 cpus { 29 cpus {
20 #address-cells = <1>; 30 #address-cells = <1>;
21 #size-cells = <0>; 31 #size-cells = <0>;
@@ -60,34 +70,32 @@
60 clock-frequency = <24000000>; 70 clock-frequency = <24000000>;
61 }; 71 };
62 72
63 osc32k: osc32k { 73 osc32k: clk@0 {
64 #clock-cells = <0>; 74 #clock-cells = <0>;
65 compatible = "fixed-clock"; 75 compatible = "fixed-clock";
66 clock-frequency = <32768>; 76 clock-frequency = <32768>;
77 clock-output-names = "osc32k";
67 }; 78 };
68 79
69 pll1: pll1@01c20000 { 80 pll1: clk@01c20000 {
70 #clock-cells = <0>; 81 #clock-cells = <0>;
71 compatible = "allwinner,sun6i-a31-pll1-clk"; 82 compatible = "allwinner,sun6i-a31-pll1-clk";
72 reg = <0x01c20000 0x4>; 83 reg = <0x01c20000 0x4>;
73 clocks = <&osc24M>; 84 clocks = <&osc24M>;
85 clock-output-names = "pll1";
74 }; 86 };
75 87
76 /* 88 pll6: clk@01c20028 {
77 * This is a dummy clock, to be used as placeholder on
78 * other mux clocks when a specific parent clock is not
79 * yet implemented. It should be dropped when the driver
80 * is complete.
81 */
82 pll6: pll6 {
83 #clock-cells = <0>; 89 #clock-cells = <0>;
84 compatible = "fixed-clock"; 90 compatible = "allwinner,sun6i-a31-pll6-clk";
85 clock-frequency = <0>; 91 reg = <0x01c20028 0x4>;
92 clocks = <&osc24M>;
93 clock-output-names = "pll6";
86 }; 94 };
87 95
88 cpu: cpu@01c20050 { 96 cpu: cpu@01c20050 {
89 #clock-cells = <0>; 97 #clock-cells = <0>;
90 compatible = "allwinner,sun4i-cpu-clk"; 98 compatible = "allwinner,sun4i-a10-cpu-clk";
91 reg = <0x01c20050 0x4>; 99 reg = <0x01c20050 0x4>;
92 100
93 /* 101 /*
@@ -97,13 +105,15 @@
97 * Allwinner. 105 * Allwinner.
98 */ 106 */
99 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>; 107 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
108 clock-output-names = "cpu";
100 }; 109 };
101 110
102 axi: axi@01c20050 { 111 axi: axi@01c20050 {
103 #clock-cells = <0>; 112 #clock-cells = <0>;
104 compatible = "allwinner,sun4i-axi-clk"; 113 compatible = "allwinner,sun4i-a10-axi-clk";
105 reg = <0x01c20050 0x4>; 114 reg = <0x01c20050 0x4>;
106 clocks = <&cpu>; 115 clocks = <&cpu>;
116 clock-output-names = "axi";
107 }; 117 };
108 118
109 ahb1_mux: ahb1_mux@01c20054 { 119 ahb1_mux: ahb1_mux@01c20054 {
@@ -111,16 +121,18 @@
111 compatible = "allwinner,sun6i-a31-ahb1-mux-clk"; 121 compatible = "allwinner,sun6i-a31-ahb1-mux-clk";
112 reg = <0x01c20054 0x4>; 122 reg = <0x01c20054 0x4>;
113 clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6>; 123 clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6>;
124 clock-output-names = "ahb1_mux";
114 }; 125 };
115 126
116 ahb1: ahb1@01c20054 { 127 ahb1: ahb1@01c20054 {
117 #clock-cells = <0>; 128 #clock-cells = <0>;
118 compatible = "allwinner,sun4i-ahb-clk"; 129 compatible = "allwinner,sun4i-a10-ahb-clk";
119 reg = <0x01c20054 0x4>; 130 reg = <0x01c20054 0x4>;
120 clocks = <&ahb1_mux>; 131 clocks = <&ahb1_mux>;
132 clock-output-names = "ahb1";
121 }; 133 };
122 134
123 ahb1_gates: ahb1_gates@01c20060 { 135 ahb1_gates: clk@01c20060 {
124 #clock-cells = <1>; 136 #clock-cells = <1>;
125 compatible = "allwinner,sun6i-a31-ahb1-gates-clk"; 137 compatible = "allwinner,sun6i-a31-ahb1-gates-clk";
126 reg = <0x01c20060 0x8>; 138 reg = <0x01c20060 0x8>;
@@ -143,12 +155,13 @@
143 155
144 apb1: apb1@01c20054 { 156 apb1: apb1@01c20054 {
145 #clock-cells = <0>; 157 #clock-cells = <0>;
146 compatible = "allwinner,sun4i-apb0-clk"; 158 compatible = "allwinner,sun4i-a10-apb0-clk";
147 reg = <0x01c20054 0x4>; 159 reg = <0x01c20054 0x4>;
148 clocks = <&ahb1>; 160 clocks = <&ahb1>;
161 clock-output-names = "apb1";
149 }; 162 };
150 163
151 apb1_gates: apb1_gates@01c20060 { 164 apb1_gates: clk@01c20068 {
152 #clock-cells = <1>; 165 #clock-cells = <1>;
153 compatible = "allwinner,sun6i-a31-apb1-gates-clk"; 166 compatible = "allwinner,sun6i-a31-apb1-gates-clk";
154 reg = <0x01c20068 0x4>; 167 reg = <0x01c20068 0x4>;
@@ -160,9 +173,10 @@
160 173
161 apb2_mux: apb2_mux@01c20058 { 174 apb2_mux: apb2_mux@01c20058 {
162 #clock-cells = <0>; 175 #clock-cells = <0>;
163 compatible = "allwinner,sun4i-apb1-mux-clk"; 176 compatible = "allwinner,sun4i-a10-apb1-mux-clk";
164 reg = <0x01c20058 0x4>; 177 reg = <0x01c20058 0x4>;
165 clocks = <&osc32k>, <&osc24M>, <&pll6>, <&pll6>; 178 clocks = <&osc32k>, <&osc24M>, <&pll6>, <&pll6>;
179 clock-output-names = "apb2_mux";
166 }; 180 };
167 181
168 apb2: apb2@01c20058 { 182 apb2: apb2@01c20058 {
@@ -170,9 +184,10 @@
170 compatible = "allwinner,sun6i-a31-apb2-div-clk"; 184 compatible = "allwinner,sun6i-a31-apb2-div-clk";
171 reg = <0x01c20058 0x4>; 185 reg = <0x01c20058 0x4>;
172 clocks = <&apb2_mux>; 186 clocks = <&apb2_mux>;
187 clock-output-names = "apb2";
173 }; 188 };
174 189
175 apb2_gates: apb2_gates@01c2006c { 190 apb2_gates: clk@01c2006c {
176 #clock-cells = <1>; 191 #clock-cells = <1>;
177 compatible = "allwinner,sun6i-a31-apb2-gates-clk"; 192 compatible = "allwinner,sun6i-a31-apb2-gates-clk";
178 reg = <0x01c2006c 0x4>; 193 reg = <0x01c2006c 0x4>;
@@ -182,6 +197,38 @@
182 "apb2_uart1", "apb2_uart2", "apb2_uart3", 197 "apb2_uart1", "apb2_uart2", "apb2_uart3",
183 "apb2_uart4", "apb2_uart5"; 198 "apb2_uart4", "apb2_uart5";
184 }; 199 };
200
201 spi0_clk: clk@01c200a0 {
202 #clock-cells = <0>;
203 compatible = "allwinner,sun4i-a10-mod0-clk";
204 reg = <0x01c200a0 0x4>;
205 clocks = <&osc24M>, <&pll6>;
206 clock-output-names = "spi0";
207 };
208
209 spi1_clk: clk@01c200a4 {
210 #clock-cells = <0>;
211 compatible = "allwinner,sun4i-a10-mod0-clk";
212 reg = <0x01c200a4 0x4>;
213 clocks = <&osc24M>, <&pll6>;
214 clock-output-names = "spi1";
215 };
216
217 spi2_clk: clk@01c200a8 {
218 #clock-cells = <0>;
219 compatible = "allwinner,sun4i-a10-mod0-clk";
220 reg = <0x01c200a8 0x4>;
221 clocks = <&osc24M>, <&pll6>;
222 clock-output-names = "spi2";
223 };
224
225 spi3_clk: clk@01c200ac {
226 #clock-cells = <0>;
227 compatible = "allwinner,sun4i-a10-mod0-clk";
228 reg = <0x01c200ac 0x4>;
229 clocks = <&osc24M>, <&pll6>;
230 clock-output-names = "spi3";
231 };
185 }; 232 };
186 233
187 soc@01c00000 { 234 soc@01c00000 {
@@ -312,6 +359,46 @@
312 status = "disabled"; 359 status = "disabled";
313 }; 360 };
314 361
362 spi0: spi@01c68000 {
363 compatible = "allwinner,sun6i-a31-spi";
364 reg = <0x01c68000 0x1000>;
365 interrupts = <0 65 4>;
366 clocks = <&ahb1_gates 20>, <&spi0_clk>;
367 clock-names = "ahb", "mod";
368 resets = <&ahb1_rst 20>;
369 status = "disabled";
370 };
371
372 spi1: spi@01c69000 {
373 compatible = "allwinner,sun6i-a31-spi";
374 reg = <0x01c69000 0x1000>;
375 interrupts = <0 66 4>;
376 clocks = <&ahb1_gates 21>, <&spi1_clk>;
377 clock-names = "ahb", "mod";
378 resets = <&ahb1_rst 21>;
379 status = "disabled";
380 };
381
382 spi2: spi@01c6a000 {
383 compatible = "allwinner,sun6i-a31-spi";
384 reg = <0x01c6a000 0x1000>;
385 interrupts = <0 67 4>;
386 clocks = <&ahb1_gates 22>, <&spi2_clk>;
387 clock-names = "ahb", "mod";
388 resets = <&ahb1_rst 22>;
389 status = "disabled";
390 };
391
392 spi3: spi@01c6b000 {
393 compatible = "allwinner,sun6i-a31-spi";
394 reg = <0x01c6b000 0x1000>;
395 interrupts = <0 68 4>;
396 clocks = <&ahb1_gates 23>, <&spi3_clk>;
397 clock-names = "ahb", "mod";
398 resets = <&ahb1_rst 23>;
399 status = "disabled";
400 };
401
315 gic: interrupt-controller@01c81000 { 402 gic: interrupt-controller@01c81000 {
316 compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic"; 403 compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
317 reg = <0x01c81000 0x1000>, 404 reg = <0x01c81000 0x1000>,
diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
index 5c51cb8a98b0..7bf4935a58a9 100644
--- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
+++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
@@ -19,21 +19,6 @@
19 compatible = "cubietech,cubieboard2", "allwinner,sun7i-a20"; 19 compatible = "cubietech,cubieboard2", "allwinner,sun7i-a20";
20 20
21 soc@01c00000 { 21 soc@01c00000 {
22 emac: ethernet@01c0b000 {
23 pinctrl-names = "default";
24 pinctrl-0 = <&emac_pins_a>;
25 phy = <&phy1>;
26 status = "okay";
27 };
28
29 mdio@01c0b080 {
30 status = "okay";
31
32 phy1: ethernet-phy@1 {
33 reg = <1>;
34 };
35 };
36
37 pinctrl@01c20800 { 22 pinctrl@01c20800 {
38 led_pins_cubieboard2: led_pins@0 { 23 led_pins_cubieboard2: led_pins@0 {
39 allwinner,pins = "PH20", "PH21"; 24 allwinner,pins = "PH20", "PH21";
@@ -60,6 +45,18 @@
60 pinctrl-0 = <&i2c1_pins_a>; 45 pinctrl-0 = <&i2c1_pins_a>;
61 status = "okay"; 46 status = "okay";
62 }; 47 };
48
49 gmac: ethernet@01c50000 {
50 pinctrl-names = "default";
51 pinctrl-0 = <&gmac_pins_mii_a>;
52 phy = <&phy1>;
53 phy-mode = "mii";
54 status = "okay";
55
56 phy1: ethernet-phy@1 {
57 reg = <1>;
58 };
59 };
63 }; 60 };
64 61
65 leds { 62 leds {
diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
index f9dcb61a5305..025ce5234692 100644
--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
@@ -51,6 +51,18 @@
51 pinctrl-0 = <&i2c2_pins_a>; 51 pinctrl-0 = <&i2c2_pins_a>;
52 status = "okay"; 52 status = "okay";
53 }; 53 };
54
55 gmac: ethernet@01c50000 {
56 pinctrl-names = "default";
57 pinctrl-0 = <&gmac_pins_rgmii_a>;
58 phy = <&phy1>;
59 phy-mode = "rgmii";
60 status = "okay";
61
62 phy1: ethernet-phy@1 {
63 reg = <1>;
64 };
65 };
54 }; 66 };
55 67
56 leds { 68 leds {
diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
index ead3013f9aca..9d98316c9928 100644
--- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
+++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
@@ -18,20 +18,22 @@
18 model = "Olimex A20-Olinuxino Micro"; 18 model = "Olimex A20-Olinuxino Micro";
19 compatible = "olimex,a20-olinuxino-micro", "allwinner,sun7i-a20"; 19 compatible = "olimex,a20-olinuxino-micro", "allwinner,sun7i-a20";
20 20
21 aliases {
22 spi0 = &spi1;
23 spi1 = &spi2;
24 };
25
21 soc@01c00000 { 26 soc@01c00000 {
22 emac: ethernet@01c0b000 { 27 spi1: spi@01c06000 {
23 pinctrl-names = "default"; 28 pinctrl-names = "default";
24 pinctrl-0 = <&emac_pins_a>; 29 pinctrl-0 = <&spi1_pins_a>;
25 phy = <&phy1>;
26 status = "okay"; 30 status = "okay";
27 }; 31 };
28 32
29 mdio@01c0b080 { 33 spi2: spi@01c17000 {
34 pinctrl-names = "default";
35 pinctrl-0 = <&spi2_pins_a>;
30 status = "okay"; 36 status = "okay";
31
32 phy1: ethernet-phy@1 {
33 reg = <1>;
34 };
35 }; 37 };
36 38
37 pinctrl@01c20800 { 39 pinctrl@01c20800 {
@@ -78,6 +80,18 @@
78 pinctrl-0 = <&i2c2_pins_a>; 80 pinctrl-0 = <&i2c2_pins_a>;
79 status = "okay"; 81 status = "okay";
80 }; 82 };
83
84 gmac: ethernet@01c50000 {
85 pinctrl-names = "default";
86 pinctrl-0 = <&gmac_pins_mii_a>;
87 phy = <&phy1>;
88 phy-mode = "mii";
89 status = "okay";
90
91 phy1: ethernet-phy@1 {
92 reg = <1>;
93 };
94 };
81 }; 95 };
82 96
83 leds { 97 leds {
diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
index 119f066f0d98..52507e4e3a91 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -17,7 +17,15 @@
17 interrupt-parent = <&gic>; 17 interrupt-parent = <&gic>;
18 18
19 aliases { 19 aliases {
20 ethernet0 = &emac; 20 ethernet0 = &gmac;
21 serial0 = &uart0;
22 serial1 = &uart1;
23 serial2 = &uart2;
24 serial3 = &uart3;
25 serial4 = &uart4;
26 serial5 = &uart5;
27 serial6 = &uart6;
28 serial7 = &uart7;
21 }; 29 };
22 30
23 cpus { 31 cpus {
@@ -41,16 +49,25 @@
41 reg = <0x40000000 0x80000000>; 49 reg = <0x40000000 0x80000000>;
42 }; 50 };
43 51
52 timer {
53 compatible = "arm,armv7-timer";
54 interrupts = <1 13 0xf08>,
55 <1 14 0xf08>,
56 <1 11 0xf08>,
57 <1 10 0xf08>;
58 };
59
44 clocks { 60 clocks {
45 #address-cells = <1>; 61 #address-cells = <1>;
46 #size-cells = <1>; 62 #size-cells = <1>;
47 ranges; 63 ranges;
48 64
49 osc24M: osc24M@01c20050 { 65 osc24M: clk@01c20050 {
50 #clock-cells = <0>; 66 #clock-cells = <0>;
51 compatible = "allwinner,sun4i-osc-clk"; 67 compatible = "allwinner,sun4i-a10-osc-clk";
52 reg = <0x01c20050 0x4>; 68 reg = <0x01c20050 0x4>;
53 clock-frequency = <24000000>; 69 clock-frequency = <24000000>;
70 clock-output-names = "osc24M";
54 }; 71 };
55 72
56 osc32k: clk@0 { 73 osc32k: clk@0 {
@@ -60,31 +77,33 @@
60 clock-output-names = "osc32k"; 77 clock-output-names = "osc32k";
61 }; 78 };
62 79
63 pll1: pll1@01c20000 { 80 pll1: clk@01c20000 {
64 #clock-cells = <0>; 81 #clock-cells = <0>;
65 compatible = "allwinner,sun4i-pll1-clk"; 82 compatible = "allwinner,sun4i-a10-pll1-clk";
66 reg = <0x01c20000 0x4>; 83 reg = <0x01c20000 0x4>;
67 clocks = <&osc24M>; 84 clocks = <&osc24M>;
85 clock-output-names = "pll1";
68 }; 86 };
69 87
70 pll4: pll4@01c20018 { 88 pll4: clk@01c20018 {
71 #clock-cells = <0>; 89 #clock-cells = <0>;
72 compatible = "allwinner,sun4i-pll1-clk"; 90 compatible = "allwinner,sun4i-a10-pll1-clk";
73 reg = <0x01c20018 0x4>; 91 reg = <0x01c20018 0x4>;
74 clocks = <&osc24M>; 92 clocks = <&osc24M>;
93 clock-output-names = "pll4";
75 }; 94 };
76 95
77 pll5: pll5@01c20020 { 96 pll5: clk@01c20020 {
78 #clock-cells = <1>; 97 #clock-cells = <1>;
79 compatible = "allwinner,sun4i-pll5-clk"; 98 compatible = "allwinner,sun4i-a10-pll5-clk";
80 reg = <0x01c20020 0x4>; 99 reg = <0x01c20020 0x4>;
81 clocks = <&osc24M>; 100 clocks = <&osc24M>;
82 clock-output-names = "pll5_ddr", "pll5_other"; 101 clock-output-names = "pll5_ddr", "pll5_other";
83 }; 102 };
84 103
85 pll6: pll6@01c20028 { 104 pll6: clk@01c20028 {
86 #clock-cells = <1>; 105 #clock-cells = <1>;
87 compatible = "allwinner,sun4i-pll6-clk"; 106 compatible = "allwinner,sun4i-a10-pll6-clk";
88 reg = <0x01c20028 0x4>; 107 reg = <0x01c20028 0x4>;
89 clocks = <&osc24M>; 108 clocks = <&osc24M>;
90 clock-output-names = "pll6_sata", "pll6_other", "pll6"; 109 clock-output-names = "pll6_sata", "pll6_other", "pll6";
@@ -92,26 +111,29 @@
92 111
93 cpu: cpu@01c20054 { 112 cpu: cpu@01c20054 {
94 #clock-cells = <0>; 113 #clock-cells = <0>;
95 compatible = "allwinner,sun4i-cpu-clk"; 114 compatible = "allwinner,sun4i-a10-cpu-clk";
96 reg = <0x01c20054 0x4>; 115 reg = <0x01c20054 0x4>;
97 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll6 1>; 116 clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll6 1>;
117 clock-output-names = "cpu";
98 }; 118 };
99 119
100 axi: axi@01c20054 { 120 axi: axi@01c20054 {
101 #clock-cells = <0>; 121 #clock-cells = <0>;
102 compatible = "allwinner,sun4i-axi-clk"; 122 compatible = "allwinner,sun4i-a10-axi-clk";
103 reg = <0x01c20054 0x4>; 123 reg = <0x01c20054 0x4>;
104 clocks = <&cpu>; 124 clocks = <&cpu>;
125 clock-output-names = "axi";
105 }; 126 };
106 127
107 ahb: ahb@01c20054 { 128 ahb: ahb@01c20054 {
108 #clock-cells = <0>; 129 #clock-cells = <0>;
109 compatible = "allwinner,sun4i-ahb-clk"; 130 compatible = "allwinner,sun4i-a10-ahb-clk";
110 reg = <0x01c20054 0x4>; 131 reg = <0x01c20054 0x4>;
111 clocks = <&axi>; 132 clocks = <&axi>;
133 clock-output-names = "ahb";
112 }; 134 };
113 135
114 ahb_gates: ahb_gates@01c20060 { 136 ahb_gates: clk@01c20060 {
115 #clock-cells = <1>; 137 #clock-cells = <1>;
116 compatible = "allwinner,sun7i-a20-ahb-gates-clk"; 138 compatible = "allwinner,sun7i-a20-ahb-gates-clk";
117 reg = <0x01c20060 0x8>; 139 reg = <0x01c20060 0x8>;
@@ -133,12 +155,13 @@
133 155
134 apb0: apb0@01c20054 { 156 apb0: apb0@01c20054 {
135 #clock-cells = <0>; 157 #clock-cells = <0>;
136 compatible = "allwinner,sun4i-apb0-clk"; 158 compatible = "allwinner,sun4i-a10-apb0-clk";
137 reg = <0x01c20054 0x4>; 159 reg = <0x01c20054 0x4>;
138 clocks = <&ahb>; 160 clocks = <&ahb>;
161 clock-output-names = "apb0";
139 }; 162 };
140 163
141 apb0_gates: apb0_gates@01c20068 { 164 apb0_gates: clk@01c20068 {
142 #clock-cells = <1>; 165 #clock-cells = <1>;
143 compatible = "allwinner,sun7i-a20-apb0-gates-clk"; 166 compatible = "allwinner,sun7i-a20-apb0-gates-clk";
144 reg = <0x01c20068 0x4>; 167 reg = <0x01c20068 0x4>;
@@ -151,19 +174,21 @@
151 174
152 apb1_mux: apb1_mux@01c20058 { 175 apb1_mux: apb1_mux@01c20058 {
153 #clock-cells = <0>; 176 #clock-cells = <0>;
154 compatible = "allwinner,sun4i-apb1-mux-clk"; 177 compatible = "allwinner,sun4i-a10-apb1-mux-clk";
155 reg = <0x01c20058 0x4>; 178 reg = <0x01c20058 0x4>;
156 clocks = <&osc24M>, <&pll6 1>, <&osc32k>; 179 clocks = <&osc24M>, <&pll6 1>, <&osc32k>;
180 clock-output-names = "apb1_mux";
157 }; 181 };
158 182
159 apb1: apb1@01c20058 { 183 apb1: apb1@01c20058 {
160 #clock-cells = <0>; 184 #clock-cells = <0>;
161 compatible = "allwinner,sun4i-apb1-clk"; 185 compatible = "allwinner,sun4i-a10-apb1-clk";
162 reg = <0x01c20058 0x4>; 186 reg = <0x01c20058 0x4>;
163 clocks = <&apb1_mux>; 187 clocks = <&apb1_mux>;
188 clock-output-names = "apb1";
164 }; 189 };
165 190
166 apb1_gates: apb1_gates@01c2006c { 191 apb1_gates: clk@01c2006c {
167 #clock-cells = <1>; 192 #clock-cells = <1>;
168 compatible = "allwinner,sun7i-a20-apb1-gates-clk"; 193 compatible = "allwinner,sun7i-a20-apb1-gates-clk";
169 reg = <0x01c2006c 0x4>; 194 reg = <0x01c2006c 0x4>;
@@ -178,7 +203,7 @@
178 203
179 nand_clk: clk@01c20080 { 204 nand_clk: clk@01c20080 {
180 #clock-cells = <0>; 205 #clock-cells = <0>;
181 compatible = "allwinner,sun4i-mod0-clk"; 206 compatible = "allwinner,sun4i-a10-mod0-clk";
182 reg = <0x01c20080 0x4>; 207 reg = <0x01c20080 0x4>;
183 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 208 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
184 clock-output-names = "nand"; 209 clock-output-names = "nand";
@@ -186,7 +211,7 @@
186 211
187 ms_clk: clk@01c20084 { 212 ms_clk: clk@01c20084 {
188 #clock-cells = <0>; 213 #clock-cells = <0>;
189 compatible = "allwinner,sun4i-mod0-clk"; 214 compatible = "allwinner,sun4i-a10-mod0-clk";
190 reg = <0x01c20084 0x4>; 215 reg = <0x01c20084 0x4>;
191 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 216 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
192 clock-output-names = "ms"; 217 clock-output-names = "ms";
@@ -194,7 +219,7 @@
194 219
195 mmc0_clk: clk@01c20088 { 220 mmc0_clk: clk@01c20088 {
196 #clock-cells = <0>; 221 #clock-cells = <0>;
197 compatible = "allwinner,sun4i-mod0-clk"; 222 compatible = "allwinner,sun4i-a10-mod0-clk";
198 reg = <0x01c20088 0x4>; 223 reg = <0x01c20088 0x4>;
199 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 224 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
200 clock-output-names = "mmc0"; 225 clock-output-names = "mmc0";
@@ -202,7 +227,7 @@
202 227
203 mmc1_clk: clk@01c2008c { 228 mmc1_clk: clk@01c2008c {
204 #clock-cells = <0>; 229 #clock-cells = <0>;
205 compatible = "allwinner,sun4i-mod0-clk"; 230 compatible = "allwinner,sun4i-a10-mod0-clk";
206 reg = <0x01c2008c 0x4>; 231 reg = <0x01c2008c 0x4>;
207 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 232 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
208 clock-output-names = "mmc1"; 233 clock-output-names = "mmc1";
@@ -210,7 +235,7 @@
210 235
211 mmc2_clk: clk@01c20090 { 236 mmc2_clk: clk@01c20090 {
212 #clock-cells = <0>; 237 #clock-cells = <0>;
213 compatible = "allwinner,sun4i-mod0-clk"; 238 compatible = "allwinner,sun4i-a10-mod0-clk";
214 reg = <0x01c20090 0x4>; 239 reg = <0x01c20090 0x4>;
215 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 240 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
216 clock-output-names = "mmc2"; 241 clock-output-names = "mmc2";
@@ -218,7 +243,7 @@
218 243
219 mmc3_clk: clk@01c20094 { 244 mmc3_clk: clk@01c20094 {
220 #clock-cells = <0>; 245 #clock-cells = <0>;
221 compatible = "allwinner,sun4i-mod0-clk"; 246 compatible = "allwinner,sun4i-a10-mod0-clk";
222 reg = <0x01c20094 0x4>; 247 reg = <0x01c20094 0x4>;
223 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 248 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
224 clock-output-names = "mmc3"; 249 clock-output-names = "mmc3";
@@ -226,7 +251,7 @@
226 251
227 ts_clk: clk@01c20098 { 252 ts_clk: clk@01c20098 {
228 #clock-cells = <0>; 253 #clock-cells = <0>;
229 compatible = "allwinner,sun4i-mod0-clk"; 254 compatible = "allwinner,sun4i-a10-mod0-clk";
230 reg = <0x01c20098 0x4>; 255 reg = <0x01c20098 0x4>;
231 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 256 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
232 clock-output-names = "ts"; 257 clock-output-names = "ts";
@@ -234,7 +259,7 @@
234 259
235 ss_clk: clk@01c2009c { 260 ss_clk: clk@01c2009c {
236 #clock-cells = <0>; 261 #clock-cells = <0>;
237 compatible = "allwinner,sun4i-mod0-clk"; 262 compatible = "allwinner,sun4i-a10-mod0-clk";
238 reg = <0x01c2009c 0x4>; 263 reg = <0x01c2009c 0x4>;
239 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 264 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
240 clock-output-names = "ss"; 265 clock-output-names = "ss";
@@ -242,7 +267,7 @@
242 267
243 spi0_clk: clk@01c200a0 { 268 spi0_clk: clk@01c200a0 {
244 #clock-cells = <0>; 269 #clock-cells = <0>;
245 compatible = "allwinner,sun4i-mod0-clk"; 270 compatible = "allwinner,sun4i-a10-mod0-clk";
246 reg = <0x01c200a0 0x4>; 271 reg = <0x01c200a0 0x4>;
247 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 272 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
248 clock-output-names = "spi0"; 273 clock-output-names = "spi0";
@@ -250,7 +275,7 @@
250 275
251 spi1_clk: clk@01c200a4 { 276 spi1_clk: clk@01c200a4 {
252 #clock-cells = <0>; 277 #clock-cells = <0>;
253 compatible = "allwinner,sun4i-mod0-clk"; 278 compatible = "allwinner,sun4i-a10-mod0-clk";
254 reg = <0x01c200a4 0x4>; 279 reg = <0x01c200a4 0x4>;
255 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 280 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
256 clock-output-names = "spi1"; 281 clock-output-names = "spi1";
@@ -258,7 +283,7 @@
258 283
259 spi2_clk: clk@01c200a8 { 284 spi2_clk: clk@01c200a8 {
260 #clock-cells = <0>; 285 #clock-cells = <0>;
261 compatible = "allwinner,sun4i-mod0-clk"; 286 compatible = "allwinner,sun4i-a10-mod0-clk";
262 reg = <0x01c200a8 0x4>; 287 reg = <0x01c200a8 0x4>;
263 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 288 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
264 clock-output-names = "spi2"; 289 clock-output-names = "spi2";
@@ -266,7 +291,7 @@
266 291
267 pata_clk: clk@01c200ac { 292 pata_clk: clk@01c200ac {
268 #clock-cells = <0>; 293 #clock-cells = <0>;
269 compatible = "allwinner,sun4i-mod0-clk"; 294 compatible = "allwinner,sun4i-a10-mod0-clk";
270 reg = <0x01c200ac 0x4>; 295 reg = <0x01c200ac 0x4>;
271 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 296 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
272 clock-output-names = "pata"; 297 clock-output-names = "pata";
@@ -274,7 +299,7 @@
274 299
275 ir0_clk: clk@01c200b0 { 300 ir0_clk: clk@01c200b0 {
276 #clock-cells = <0>; 301 #clock-cells = <0>;
277 compatible = "allwinner,sun4i-mod0-clk"; 302 compatible = "allwinner,sun4i-a10-mod0-clk";
278 reg = <0x01c200b0 0x4>; 303 reg = <0x01c200b0 0x4>;
279 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 304 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
280 clock-output-names = "ir0"; 305 clock-output-names = "ir0";
@@ -282,15 +307,24 @@
282 307
283 ir1_clk: clk@01c200b4 { 308 ir1_clk: clk@01c200b4 {
284 #clock-cells = <0>; 309 #clock-cells = <0>;
285 compatible = "allwinner,sun4i-mod0-clk"; 310 compatible = "allwinner,sun4i-a10-mod0-clk";
286 reg = <0x01c200b4 0x4>; 311 reg = <0x01c200b4 0x4>;
287 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 312 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
288 clock-output-names = "ir1"; 313 clock-output-names = "ir1";
289 }; 314 };
290 315
316 usb_clk: clk@01c200cc {
317 #clock-cells = <1>;
318 #reset-cells = <1>;
319 compatible = "allwinner,sun4i-a10-usb-clk";
320 reg = <0x01c200cc 0x4>;
321 clocks = <&pll6 1>;
322 clock-output-names = "usb_ohci0", "usb_ohci1", "usb_phy";
323 };
324
291 spi3_clk: clk@01c200d4 { 325 spi3_clk: clk@01c200d4 {
292 #clock-cells = <0>; 326 #clock-cells = <0>;
293 compatible = "allwinner,sun4i-mod0-clk"; 327 compatible = "allwinner,sun4i-a10-mod0-clk";
294 reg = <0x01c200d4 0x4>; 328 reg = <0x01c200d4 0x4>;
295 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; 329 clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
296 clock-output-names = "spi3"; 330 clock-output-names = "spi3";
@@ -298,13 +332,41 @@
298 332
299 mbus_clk: clk@01c2015c { 333 mbus_clk: clk@01c2015c {
300 #clock-cells = <0>; 334 #clock-cells = <0>;
301 compatible = "allwinner,sun4i-mod0-clk"; 335 compatible = "allwinner,sun4i-a10-mod0-clk";
302 reg = <0x01c2015c 0x4>; 336 reg = <0x01c2015c 0x4>;
303 clocks = <&osc24M>, <&pll6 2>, <&pll5 1>; 337 clocks = <&osc24M>, <&pll6 2>, <&pll5 1>;
304 clock-output-names = "mbus"; 338 clock-output-names = "mbus";
305 }; 339 };
306 340
307 /* 341 /*
342 * The following two are dummy clocks, placeholders used in the gmac_tx
343 * clock. The gmac driver will choose one parent depending on the PHY
344 * interface mode, using clk_set_rate auto-reparenting.
345 * The actual TX clock rate is not controlled by the gmac_tx clock.
346 */
347 mii_phy_tx_clk: clk@2 {
348 #clock-cells = <0>;
349 compatible = "fixed-clock";
350 clock-frequency = <25000000>;
351 clock-output-names = "mii_phy_tx";
352 };
353
354 gmac_int_tx_clk: clk@3 {
355 #clock-cells = <0>;
356 compatible = "fixed-clock";
357 clock-frequency = <125000000>;
358 clock-output-names = "gmac_int_tx";
359 };
360
361 gmac_tx_clk: clk@01c20164 {
362 #clock-cells = <0>;
363 compatible = "allwinner,sun7i-a20-gmac-clk";
364 reg = <0x01c20164 0x4>;
365 clocks = <&mii_phy_tx_clk>, <&gmac_int_tx_clk>;
366 clock-output-names = "gmac_tx";
367 };
368
369 /*
308 * Dummy clock used by output clocks 370 * Dummy clock used by output clocks
309 */ 371 */
310 osc24M_32k: clk@1 { 372 osc24M_32k: clk@1 {
@@ -339,8 +401,30 @@
339 #size-cells = <1>; 401 #size-cells = <1>;
340 ranges; 402 ranges;
341 403
404 spi0: spi@01c05000 {
405 compatible = "allwinner,sun4i-a10-spi";
406 reg = <0x01c05000 0x1000>;
407 interrupts = <0 10 4>;
408 clocks = <&ahb_gates 20>, <&spi0_clk>;
409 clock-names = "ahb", "mod";
410 status = "disabled";
411 #address-cells = <1>;
412 #size-cells = <0>;
413 };
414
415 spi1: spi@01c06000 {
416 compatible = "allwinner,sun4i-a10-spi";
417 reg = <0x01c06000 0x1000>;
418 interrupts = <0 11 4>;
419 clocks = <&ahb_gates 21>, <&spi1_clk>;
420 clock-names = "ahb", "mod";
421 status = "disabled";
422 #address-cells = <1>;
423 #size-cells = <0>;
424 };
425
342 emac: ethernet@01c0b000 { 426 emac: ethernet@01c0b000 {
343 compatible = "allwinner,sun4i-emac"; 427 compatible = "allwinner,sun4i-a10-emac";
344 reg = <0x01c0b000 0x1000>; 428 reg = <0x01c0b000 0x1000>;
345 interrupts = <0 55 4>; 429 interrupts = <0 55 4>;
346 clocks = <&ahb_gates 17>; 430 clocks = <&ahb_gates 17>;
@@ -348,13 +432,35 @@
348 }; 432 };
349 433
350 mdio@01c0b080 { 434 mdio@01c0b080 {
351 compatible = "allwinner,sun4i-mdio"; 435 compatible = "allwinner,sun4i-a10-mdio";
352 reg = <0x01c0b080 0x14>; 436 reg = <0x01c0b080 0x14>;
353 status = "disabled"; 437 status = "disabled";
354 #address-cells = <1>; 438 #address-cells = <1>;
355 #size-cells = <0>; 439 #size-cells = <0>;
356 }; 440 };
357 441
442 spi2: spi@01c17000 {
443 compatible = "allwinner,sun4i-a10-spi";
444 reg = <0x01c17000 0x1000>;
445 interrupts = <0 12 4>;
446 clocks = <&ahb_gates 22>, <&spi2_clk>;
447 clock-names = "ahb", "mod";
448 status = "disabled";
449 #address-cells = <1>;
450 #size-cells = <0>;
451 };
452
453 spi3: spi@01c1f000 {
454 compatible = "allwinner,sun4i-a10-spi";
455 reg = <0x01c1f000 0x1000>;
456 interrupts = <0 50 4>;
457 clocks = <&ahb_gates 23>, <&spi3_clk>;
458 clock-names = "ahb", "mod";
459 status = "disabled";
460 #address-cells = <1>;
461 #size-cells = <0>;
462 };
463
358 pio: pinctrl@01c20800 { 464 pio: pinctrl@01c20800 {
359 compatible = "allwinner,sun7i-a20-pinctrl"; 465 compatible = "allwinner,sun7i-a20-pinctrl";
360 reg = <0x01c20800 0x400>; 466 reg = <0x01c20800 0x400>;
@@ -373,6 +479,13 @@
373 allwinner,pull = <0>; 479 allwinner,pull = <0>;
374 }; 480 };
375 481
482 uart2_pins_a: uart2@0 {
483 allwinner,pins = "PI16", "PI17", "PI18", "PI19";
484 allwinner,function = "uart2";
485 allwinner,drive = <0>;
486 allwinner,pull = <0>;
487 };
488
376 uart6_pins_a: uart6@0 { 489 uart6_pins_a: uart6@0 {
377 allwinner,pins = "PI12", "PI13"; 490 allwinner,pins = "PI12", "PI13";
378 allwinner,function = "uart6"; 491 allwinner,function = "uart6";
@@ -432,6 +545,46 @@
432 allwinner,drive = <0>; 545 allwinner,drive = <0>;
433 allwinner,pull = <0>; 546 allwinner,pull = <0>;
434 }; 547 };
548
549 gmac_pins_mii_a: gmac_mii@0 {
550 allwinner,pins = "PA0", "PA1", "PA2",
551 "PA3", "PA4", "PA5", "PA6",
552 "PA7", "PA8", "PA9", "PA10",
553 "PA11", "PA12", "PA13", "PA14",
554 "PA15", "PA16";
555 allwinner,function = "gmac";
556 allwinner,drive = <0>;
557 allwinner,pull = <0>;
558 };
559
560 gmac_pins_rgmii_a: gmac_rgmii@0 {
561 allwinner,pins = "PA0", "PA1", "PA2",
562 "PA3", "PA4", "PA5", "PA6",
563 "PA7", "PA8", "PA10",
564 "PA11", "PA12", "PA13",
565 "PA15", "PA16";
566 allwinner,function = "gmac";
567 /*
568 * data lines in RGMII mode use DDR mode
569 * and need a higher signal drive strength
570 */
571 allwinner,drive = <3>;
572 allwinner,pull = <0>;
573 };
574
575 spi1_pins_a: spi1@0 {
576 allwinner,pins = "PI16", "PI17", "PI18", "PI19";
577 allwinner,function = "spi1";
578 allwinner,drive = <0>;
579 allwinner,pull = <0>;
580 };
581
582 spi2_pins_a: spi2@0 {
583 allwinner,pins = "PC19", "PC20", "PC21", "PC22";
584 allwinner,function = "spi2";
585 allwinner,drive = <0>;
586 allwinner,pull = <0>;
587 };
435 }; 588 };
436 589
437 timer@01c20c00 { 590 timer@01c20c00 {
@@ -593,6 +746,21 @@
593 status = "disabled"; 746 status = "disabled";
594 }; 747 };
595 748
749 gmac: ethernet@01c50000 {
750 compatible = "allwinner,sun7i-a20-gmac";
751 reg = <0x01c50000 0x10000>;
752 interrupts = <0 85 4>;
753 interrupt-names = "macirq";
754 clocks = <&ahb_gates 49>, <&gmac_tx_clk>;
755 clock-names = "stmmaceth", "allwinner_gmac_tx";
756 snps,pbl = <2>;
757 snps,fixed-burst;
758 snps,force_sf_dma_mode;
759 status = "disabled";
760 #address-cells = <1>;
761 #size-cells = <0>;
762 };
763
596 hstimer@01c60000 { 764 hstimer@01c60000 {
597 compatible = "allwinner,sun7i-a20-hstimer"; 765 compatible = "allwinner,sun7i-a20-hstimer";
598 reg = <0x01c60000 0x1000>; 766 reg = <0x01c60000 0x1000>;
diff --git a/arch/arm/boot/dts/tps65910.dtsi b/arch/arm/boot/dts/tps65910.dtsi
index 92693a89160e..b0ac6657a170 100644
--- a/arch/arm/boot/dts/tps65910.dtsi
+++ b/arch/arm/boot/dts/tps65910.dtsi
@@ -82,5 +82,10 @@
82 reg = <12>; 82 reg = <12>;
83 regulator-compatible = "vmmc"; 83 regulator-compatible = "vmmc";
84 }; 84 };
85
86 vbb_reg: regulator@13 {
87 reg = <13>;
88 regulator-compatible = "vbb";
89 };
85 }; 90 };
86}; 91};
diff --git a/arch/arm/boot/dts/twl4030.dtsi b/arch/arm/boot/dts/twl4030.dtsi
index 4217096ee677..86cfc7d15ca7 100644
--- a/arch/arm/boot/dts/twl4030.dtsi
+++ b/arch/arm/boot/dts/twl4030.dtsi
@@ -145,4 +145,11 @@
145 compatible = "ti,twl4030-pwrbutton"; 145 compatible = "ti,twl4030-pwrbutton";
146 interrupts = <8>; 146 interrupts = <8>;
147 }; 147 };
148
149 twl_keypad: keypad {
150 compatible = "ti,twl4030-keypad";
151 interrupts = <1>;
152 keypad,num-rows = <8>;
153 keypad,num-columns = <8>;
154 };
148}; 155};
diff --git a/arch/arm/boot/dts/vf610-cosmic.dts b/arch/arm/boot/dts/vf610-cosmic.dts
index c42e4f938dcd..3fd1b74e1216 100644
--- a/arch/arm/boot/dts/vf610-cosmic.dts
+++ b/arch/arm/boot/dts/vf610-cosmic.dts
@@ -36,12 +36,37 @@
36&fec1 { 36&fec1 {
37 phy-mode = "rmii"; 37 phy-mode = "rmii";
38 pinctrl-names = "default"; 38 pinctrl-names = "default";
39 pinctrl-0 = <&pinctrl_fec1_1>; 39 pinctrl-0 = <&pinctrl_fec1>;
40 status = "okay"; 40 status = "okay";
41}; 41};
42 42
43&iomuxc {
44 vf610-cosmic {
45 pinctrl_fec1: fec1grp {
46 fsl,pins = <
47 VF610_PAD_PTC9__ENET_RMII1_MDC 0x30d2
48 VF610_PAD_PTC10__ENET_RMII1_MDIO 0x30d3
49 VF610_PAD_PTC11__ENET_RMII1_CRS 0x30d1
50 VF610_PAD_PTC12__ENET_RMII_RXD1 0x30d1
51 VF610_PAD_PTC13__ENET_RMII1_RXD0 0x30d1
52 VF610_PAD_PTC14__ENET_RMII1_RXER 0x30d1
53 VF610_PAD_PTC15__ENET_RMII1_TXD1 0x30d2
54 VF610_PAD_PTC16__ENET_RMII1_TXD0 0x30d2
55 VF610_PAD_PTC17__ENET_RMII1_TXEN 0x30d2
56 >;
57 };
58
59 pinctrl_uart1: uart1grp {
60 fsl,pins = <
61 VF610_PAD_PTB4__UART1_TX 0x21a2
62 VF610_PAD_PTB5__UART1_RX 0x21a1
63 >;
64 };
65 };
66};
67
43&uart1 { 68&uart1 {
44 pinctrl-names = "default"; 69 pinctrl-names = "default";
45 pinctrl-0 = <&pinctrl_uart1_1>; 70 pinctrl-0 = <&pinctrl_uart1>;
46 status = "okay"; 71 status = "okay";
47}; 72};
diff --git a/arch/arm/boot/dts/vf610-twr.dts b/arch/arm/boot/dts/vf610-twr.dts
index c8047ca16501..7dd1d6ede525 100644
--- a/arch/arm/boot/dts/vf610-twr.dts
+++ b/arch/arm/boot/dts/vf610-twr.dts
@@ -34,12 +34,70 @@
34 }; 34 };
35 }; 35 };
36 36
37 regulators {
38 compatible = "simple-bus";
39 #address-cells = <1>;
40 #size-cells = <0>;
41
42 reg_3p3v: regulator@0 {
43 compatible = "regulator-fixed";
44 reg = <0>;
45 regulator-name = "3P3V";
46 regulator-min-microvolt = <3300000>;
47 regulator-max-microvolt = <3300000>;
48 regulator-always-on;
49 };
50
51 reg_vcc_3v3_mcu: regulator@1 {
52 compatible = "regulator-fixed";
53 reg = <1>;
54 regulator-name = "vcc_3v3_mcu";
55 regulator-min-microvolt = <3300000>;
56 regulator-max-microvolt = <3300000>;
57 };
58 };
59
60 sound {
61 compatible = "simple-audio-card";
62 simple-audio-card,format = "i2s";
63 simple-audio-card,widgets =
64 "Microphone", "Microphone Jack",
65 "Headphone", "Headphone Jack",
66 "Speaker", "Speaker Ext",
67 "Line", "Line In Jack";
68 simple-audio-card,routing =
69 "MIC_IN", "Microphone Jack",
70 "Microphone Jack", "Mic Bias",
71 "LINE_IN", "Line In Jack",
72 "Headphone Jack", "HP_OUT",
73 "Speaker Ext", "LINE_OUT";
74
75 simple-audio-card,cpu {
76 sound-dai = <&sai2>;
77 master-clkdir-out;
78 frame-master;
79 bitclock-master;
80 };
81
82 simple-audio-card,codec {
83 sound-dai = <&codec>;
84 frame-master;
85 bitclock-master;
86 };
87 };
88};
89
90&adc0 {
91 pinctrl-names = "default";
92 pinctrl-0 = <&pinctrl_adc0_ad5>;
93 vref-supply = <&reg_vcc_3v3_mcu>;
94 status = "okay";
37}; 95};
38 96
39&dspi0 { 97&dspi0 {
40 bus-num = <0>; 98 bus-num = <0>;
41 pinctrl-names = "default"; 99 pinctrl-names = "default";
42 pinctrl-0 = <&pinctrl_dspi0_1>; 100 pinctrl-0 = <&pinctrl_dspi0>;
43 status = "okay"; 101 status = "okay";
44 102
45 sflash: at26df081a@0 { 103 sflash: at26df081a@0 {
@@ -56,26 +114,116 @@
56&fec0 { 114&fec0 {
57 phy-mode = "rmii"; 115 phy-mode = "rmii";
58 pinctrl-names = "default"; 116 pinctrl-names = "default";
59 pinctrl-0 = <&pinctrl_fec0_1>; 117 pinctrl-0 = <&pinctrl_fec0>;
60 status = "okay"; 118 status = "okay";
61}; 119};
62 120
63&fec1 { 121&fec1 {
64 phy-mode = "rmii"; 122 phy-mode = "rmii";
65 pinctrl-names = "default"; 123 pinctrl-names = "default";
66 pinctrl-0 = <&pinctrl_fec1_1>; 124 pinctrl-0 = <&pinctrl_fec1>;
67 status = "okay"; 125 status = "okay";
68}; 126};
69 127
70&i2c0 { 128&i2c0 {
71 clock-frequency = <100000>; 129 clock-frequency = <100000>;
72 pinctrl-names = "default"; 130 pinctrl-names = "default";
73 pinctrl-0 = <&pinctrl_i2c0_1>; 131 pinctrl-0 = <&pinctrl_i2c0>;
132 status = "okay";
133
134 codec: sgtl5000@0a {
135 #sound-dai-cells = <0>;
136 compatible = "fsl,sgtl5000";
137 reg = <0x0a>;
138 VDDA-supply = <&reg_3p3v>;
139 VDDIO-supply = <&reg_3p3v>;
140 clocks = <&clks VF610_CLK_SAI2>;
141 };
142};
143
144&iomuxc {
145 vf610-twr {
146 pinctrl_adc0_ad5: adc0ad5grp {
147 fsl,pins = <
148 VF610_PAD_PTC30__ADC0_SE5 0xa1
149 >;
150 };
151
152 pinctrl_dspi0: dspi0grp {
153 fsl,pins = <
154 VF610_PAD_PTB19__DSPI0_CS0 0x1182
155 VF610_PAD_PTB20__DSPI0_SIN 0x1181
156 VF610_PAD_PTB21__DSPI0_SOUT 0x1182
157 VF610_PAD_PTB22__DSPI0_SCK 0x1182
158 >;
159 };
160
161 pinctrl_fec0: fec0grp {
162 fsl,pins = <
163 VF610_PAD_PTA6__RMII_CLKIN 0x30d1
164 VF610_PAD_PTC0__ENET_RMII0_MDC 0x30d3
165 VF610_PAD_PTC1__ENET_RMII0_MDIO 0x30d1
166 VF610_PAD_PTC2__ENET_RMII0_CRS 0x30d1
167 VF610_PAD_PTC3__ENET_RMII0_RXD1 0x30d1
168 VF610_PAD_PTC4__ENET_RMII0_RXD0 0x30d1
169 VF610_PAD_PTC5__ENET_RMII0_RXER 0x30d1
170 VF610_PAD_PTC6__ENET_RMII0_TXD1 0x30d2
171 VF610_PAD_PTC7__ENET_RMII0_TXD0 0x30d2
172 VF610_PAD_PTC8__ENET_RMII0_TXEN 0x30d2
173 >;
174 };
175
176 pinctrl_fec1: fec1grp {
177 fsl,pins = <
178 VF610_PAD_PTC9__ENET_RMII1_MDC 0x30d2
179 VF610_PAD_PTC10__ENET_RMII1_MDIO 0x30d3
180 VF610_PAD_PTC11__ENET_RMII1_CRS 0x30d1
181 VF610_PAD_PTC12__ENET_RMII_RXD1 0x30d1
182 VF610_PAD_PTC13__ENET_RMII1_RXD0 0x30d1
183 VF610_PAD_PTC14__ENET_RMII1_RXER 0x30d1
184 VF610_PAD_PTC15__ENET_RMII1_TXD1 0x30d2
185 VF610_PAD_PTC16__ENET_RMII1_TXD0 0x30d2
186 VF610_PAD_PTC17__ENET_RMII1_TXEN 0x30d2
187 >;
188 };
189
190 pinctrl_i2c0: i2c0grp {
191 fsl,pins = <
192 VF610_PAD_PTB14__I2C0_SCL 0x30d3
193 VF610_PAD_PTB15__I2C0_SDA 0x30d3
194 >;
195 };
196
197 pinctrl_sai2: sai2grp {
198 fsl,pins = <
199 VF610_PAD_PTA16__SAI2_TX_BCLK 0x02ed
200 VF610_PAD_PTA18__SAI2_TX_DATA 0x02ee
201 VF610_PAD_PTA19__SAI2_TX_SYNC 0x02ed
202 VF610_PAD_PTA21__SAI2_RX_BCLK 0x02ed
203 VF610_PAD_PTA22__SAI2_RX_DATA 0x02ed
204 VF610_PAD_PTA23__SAI2_RX_SYNC 0x02ed
205 VF610_PAD_PTB18__EXT_AUDIO_MCLK 0x02ed
206 >;
207 };
208
209 pinctrl_uart1: uart1grp {
210 fsl,pins = <
211 VF610_PAD_PTB4__UART1_TX 0x21a2
212 VF610_PAD_PTB5__UART1_RX 0x21a1
213 >;
214 };
215 };
216};
217
218&sai2 {
219 #sound-dai-cells = <0>;
220 pinctrl-names = "default";
221 pinctrl-0 = <&pinctrl_sai2>;
74 status = "okay"; 222 status = "okay";
75}; 223};
76 224
77&uart1 { 225&uart1 {
78 pinctrl-names = "default"; 226 pinctrl-names = "default";
79 pinctrl-0 = <&pinctrl_uart1_1>; 227 pinctrl-0 = <&pinctrl_uart1>;
80 status = "okay"; 228 status = "okay";
81}; 229};
diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi
index d31ce1b4a7b0..804873367669 100644
--- a/arch/arm/boot/dts/vf610.dtsi
+++ b/arch/arm/boot/dts/vf610.dtsi
@@ -10,6 +10,7 @@
10#include "skeleton.dtsi" 10#include "skeleton.dtsi"
11#include "vf610-pinfunc.h" 11#include "vf610-pinfunc.h"
12#include <dt-bindings/clock/vf610-clock.h> 12#include <dt-bindings/clock/vf610-clock.h>
13#include <dt-bindings/interrupt-controller/irq.h>
13 14
14/ { 15/ {
15 aliases { 16 aliases {
@@ -87,39 +88,66 @@
87 arm,tag-latency = <2 2 2>; 88 arm,tag-latency = <2 2 2>;
88 }; 89 };
89 90
91 edma0: dma-controller@40018000 {
92 #dma-cells = <2>;
93 compatible = "fsl,vf610-edma";
94 reg = <0x40018000 0x2000>,
95 <0x40024000 0x1000>,
96 <0x40025000 0x1000>;
97 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>,
98 <0 9 IRQ_TYPE_LEVEL_HIGH>;
99 interrupt-names = "edma-tx", "edma-err";
100 dma-channels = <32>;
101 clock-names = "dmamux0", "dmamux1";
102 clocks = <&clks VF610_CLK_DMAMUX0>,
103 <&clks VF610_CLK_DMAMUX1>;
104 };
105
90 uart0: serial@40027000 { 106 uart0: serial@40027000 {
91 compatible = "fsl,vf610-lpuart"; 107 compatible = "fsl,vf610-lpuart";
92 reg = <0x40027000 0x1000>; 108 reg = <0x40027000 0x1000>;
93 interrupts = <0 61 0x00>; 109 interrupts = <0 61 IRQ_TYPE_LEVEL_HIGH>;
94 clocks = <&clks VF610_CLK_UART0>; 110 clocks = <&clks VF610_CLK_UART0>;
95 clock-names = "ipg"; 111 clock-names = "ipg";
112 dmas = <&edma0 0 2>,
113 <&edma0 0 3>;
114 dma-names = "rx","tx";
96 status = "disabled"; 115 status = "disabled";
97 }; 116 };
98 117
99 uart1: serial@40028000 { 118 uart1: serial@40028000 {
100 compatible = "fsl,vf610-lpuart"; 119 compatible = "fsl,vf610-lpuart";
101 reg = <0x40028000 0x1000>; 120 reg = <0x40028000 0x1000>;
102 interrupts = <0 62 0x04>; 121 interrupts = <0 62 IRQ_TYPE_LEVEL_HIGH>;
103 clocks = <&clks VF610_CLK_UART1>; 122 clocks = <&clks VF610_CLK_UART1>;
104 clock-names = "ipg"; 123 clock-names = "ipg";
124 dmas = <&edma0 0 4>,
125 <&edma0 0 5>;
126 dma-names = "rx","tx";
105 status = "disabled"; 127 status = "disabled";
106 }; 128 };
107 129
108 uart2: serial@40029000 { 130 uart2: serial@40029000 {
109 compatible = "fsl,vf610-lpuart"; 131 compatible = "fsl,vf610-lpuart";
110 reg = <0x40029000 0x1000>; 132 reg = <0x40029000 0x1000>;
111 interrupts = <0 63 0x04>; 133 interrupts = <0 63 IRQ_TYPE_LEVEL_HIGH>;
112 clocks = <&clks VF610_CLK_UART2>; 134 clocks = <&clks VF610_CLK_UART2>;
113 clock-names = "ipg"; 135 clock-names = "ipg";
136 dmas = <&edma0 0 6>,
137 <&edma0 0 7>;
138 dma-names = "rx","tx";
114 status = "disabled"; 139 status = "disabled";
115 }; 140 };
116 141
117 uart3: serial@4002a000 { 142 uart3: serial@4002a000 {
118 compatible = "fsl,vf610-lpuart"; 143 compatible = "fsl,vf610-lpuart";
119 reg = <0x4002a000 0x1000>; 144 reg = <0x4002a000 0x1000>;
120 interrupts = <0 64 0x04>; 145 interrupts = <0 64 IRQ_TYPE_LEVEL_HIGH>;
121 clocks = <&clks VF610_CLK_UART3>; 146 clocks = <&clks VF610_CLK_UART3>;
122 clock-names = "ipg"; 147 clock-names = "ipg";
148 dmas = <&edma0 0 8>,
149 <&edma0 0 9>;
150 dma-names = "rx","tx";
123 status = "disabled"; 151 status = "disabled";
124 }; 152 };
125 153
@@ -128,7 +156,7 @@
128 #size-cells = <0>; 156 #size-cells = <0>;
129 compatible = "fsl,vf610-dspi"; 157 compatible = "fsl,vf610-dspi";
130 reg = <0x4002c000 0x1000>; 158 reg = <0x4002c000 0x1000>;
131 interrupts = <0 67 0x04>; 159 interrupts = <0 67 IRQ_TYPE_LEVEL_HIGH>;
132 clocks = <&clks VF610_CLK_DSPI0>; 160 clocks = <&clks VF610_CLK_DSPI0>;
133 clock-names = "dspi"; 161 clock-names = "dspi";
134 spi-num-chipselects = <5>; 162 spi-num-chipselects = <5>;
@@ -138,20 +166,32 @@
138 sai2: sai@40031000 { 166 sai2: sai@40031000 {
139 compatible = "fsl,vf610-sai"; 167 compatible = "fsl,vf610-sai";
140 reg = <0x40031000 0x1000>; 168 reg = <0x40031000 0x1000>;
141 interrupts = <0 86 0x04>; 169 interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
142 clocks = <&clks VF610_CLK_SAI2>; 170 clocks = <&clks VF610_CLK_SAI2>;
143 clock-names = "sai"; 171 clock-names = "sai";
172 dma-names = "tx", "rx";
173 dmas = <&edma0 0 21>,
174 <&edma0 0 20>;
144 status = "disabled"; 175 status = "disabled";
145 }; 176 };
146 177
147 pit: pit@40037000 { 178 pit: pit@40037000 {
148 compatible = "fsl,vf610-pit"; 179 compatible = "fsl,vf610-pit";
149 reg = <0x40037000 0x1000>; 180 reg = <0x40037000 0x1000>;
150 interrupts = <0 39 0x04>; 181 interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
151 clocks = <&clks VF610_CLK_PIT>; 182 clocks = <&clks VF610_CLK_PIT>;
152 clock-names = "pit"; 183 clock-names = "pit";
153 }; 184 };
154 185
186 adc0: adc@4003b000 {
187 compatible = "fsl,vf610-adc";
188 reg = <0x4003b000 0x1000>;
189 interrupts = <0 53 0x04>;
190 clocks = <&clks VF610_CLK_ADC0>;
191 clock-names = "adc";
192 status = "disabled";
193 };
194
155 wdog@4003e000 { 195 wdog@4003e000 {
156 compatible = "fsl,vf610-wdt", "fsl,imx21-wdt"; 196 compatible = "fsl,vf610-wdt", "fsl,imx21-wdt";
157 reg = <0x4003e000 0x1000>; 197 reg = <0x4003e000 0x1000>;
@@ -164,7 +204,7 @@
164 #size-cells = <0>; 204 #size-cells = <0>;
165 compatible = "fsl,vf610-qspi"; 205 compatible = "fsl,vf610-qspi";
166 reg = <0x40044000 0x1000>; 206 reg = <0x40044000 0x1000>;
167 interrupts = <0 24 0x04>; 207 interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
168 clocks = <&clks VF610_CLK_QSPI0_EN>, 208 clocks = <&clks VF610_CLK_QSPI0_EN>,
169 <&clks VF610_CLK_QSPI0>; 209 <&clks VF610_CLK_QSPI0>;
170 clock-names = "qspi_en", "qspi"; 210 clock-names = "qspi_en", "qspi";
@@ -175,182 +215,12 @@
175 compatible = "fsl,vf610-iomuxc"; 215 compatible = "fsl,vf610-iomuxc";
176 reg = <0x40048000 0x1000>; 216 reg = <0x40048000 0x1000>;
177 #gpio-range-cells = <3>; 217 #gpio-range-cells = <3>;
178
179 /* functions and groups pins */
180
181 dcu0 {
182 pinctrl_dcu0_1: dcu0grp_1 {
183 fsl,pins = <
184 VF610_PAD_PTB8__GPIO_30 0x42
185 VF610_PAD_PTE0__DCU0_HSYNC 0x42
186 VF610_PAD_PTE1__DCU0_VSYNC 0x42
187 VF610_PAD_PTE2__DCU0_PCLK 0x42
188 VF610_PAD_PTE4__DCU0_DE 0x42
189 VF610_PAD_PTE5__DCU0_R0 0x42
190 VF610_PAD_PTE6__DCU0_R1 0x42
191 VF610_PAD_PTE7__DCU0_R2 0x42
192 VF610_PAD_PTE8__DCU0_R3 0x42
193 VF610_PAD_PTE9__DCU0_R4 0x42
194 VF610_PAD_PTE10__DCU0_R5 0x42
195 VF610_PAD_PTE11__DCU0_R6 0x42
196 VF610_PAD_PTE12__DCU0_R7 0x42
197 VF610_PAD_PTE13__DCU0_G0 0x42
198 VF610_PAD_PTE14__DCU0_G1 0x42
199 VF610_PAD_PTE15__DCU0_G2 0x42
200 VF610_PAD_PTE16__DCU0_G3 0x42
201 VF610_PAD_PTE17__DCU0_G4 0x42
202 VF610_PAD_PTE18__DCU0_G5 0x42
203 VF610_PAD_PTE19__DCU0_G6 0x42
204 VF610_PAD_PTE20__DCU0_G7 0x42
205 VF610_PAD_PTE21__DCU0_B0 0x42
206 VF610_PAD_PTE22__DCU0_B1 0x42
207 VF610_PAD_PTE23__DCU0_B2 0x42
208 VF610_PAD_PTE24__DCU0_B3 0x42
209 VF610_PAD_PTE25__DCU0_B4 0x42
210 VF610_PAD_PTE26__DCU0_B5 0x42
211 VF610_PAD_PTE27__DCU0_B6 0x42
212 VF610_PAD_PTE28__DCU0_B7 0x42
213 >;
214 };
215 };
216
217 dspi0 {
218 pinctrl_dspi0_1: dspi0grp_1 {
219 fsl,pins = <
220 VF610_PAD_PTB19__DSPI0_CS0 0x1182
221 VF610_PAD_PTB20__DSPI0_SIN 0x1181
222 VF610_PAD_PTB21__DSPI0_SOUT 0x1182
223 VF610_PAD_PTB22__DSPI0_SCK 0x1182
224 >;
225 };
226 };
227
228 esdhc1 {
229 pinctrl_esdhc1_1: esdhc1grp_1 {
230 fsl,pins = <
231 VF610_PAD_PTA24__ESDHC1_CLK 0x31ef
232 VF610_PAD_PTA25__ESDHC1_CMD 0x31ef
233 VF610_PAD_PTA26__ESDHC1_DAT0 0x31ef
234 VF610_PAD_PTA27__ESDHC1_DAT1 0x31ef
235 VF610_PAD_PTA28__ESDHC1_DATA2 0x31ef
236 VF610_PAD_PTA29__ESDHC1_DAT3 0x31ef
237 VF610_PAD_PTA7__GPIO_134 0x219d
238 >;
239 };
240 };
241
242 fec0 {
243 pinctrl_fec0_1: fec0grp_1 {
244 fsl,pins = <
245 VF610_PAD_PTA6__RMII_CLKIN 0x30d1
246 VF610_PAD_PTC0__ENET_RMII0_MDC 0x30d3
247 VF610_PAD_PTC1__ENET_RMII0_MDIO 0x30d1
248 VF610_PAD_PTC2__ENET_RMII0_CRS 0x30d1
249 VF610_PAD_PTC3__ENET_RMII0_RXD1 0x30d1
250 VF610_PAD_PTC4__ENET_RMII0_RXD0 0x30d1
251 VF610_PAD_PTC5__ENET_RMII0_RXER 0x30d1
252 VF610_PAD_PTC6__ENET_RMII0_TXD1 0x30d2
253 VF610_PAD_PTC7__ENET_RMII0_TXD0 0x30d2
254 VF610_PAD_PTC8__ENET_RMII0_TXEN 0x30d2
255 >;
256 };
257 };
258
259 fec1 {
260 pinctrl_fec1_1: fec1grp_1 {
261 fsl,pins = <
262 VF610_PAD_PTC9__ENET_RMII1_MDC 0x30d2
263 VF610_PAD_PTC10__ENET_RMII1_MDIO 0x30d3
264 VF610_PAD_PTC11__ENET_RMII1_CRS 0x30d1
265 VF610_PAD_PTC12__ENET_RMII_RXD1 0x30d1
266 VF610_PAD_PTC13__ENET_RMII1_RXD0 0x30d1
267 VF610_PAD_PTC14__ENET_RMII1_RXER 0x30d1
268 VF610_PAD_PTC15__ENET_RMII1_TXD1 0x30d2
269 VF610_PAD_PTC16__ENET_RMII1_TXD0 0x30d2
270 VF610_PAD_PTC17__ENET_RMII1_TXEN 0x30d2
271 >;
272 };
273 };
274
275 i2c0 {
276 pinctrl_i2c0_1: i2c0grp_1 {
277 fsl,pins = <
278 VF610_PAD_PTB14__I2C0_SCL 0x30d3
279 VF610_PAD_PTB15__I2C0_SDA 0x30d3
280 >;
281 };
282 };
283
284 pwm0 {
285 pinctrl_pwm0_1: pwm0grp_1 {
286 fsl,pins = <
287 VF610_PAD_PTB0__FTM0_CH0 0x1582
288 VF610_PAD_PTB1__FTM0_CH1 0x1582
289 VF610_PAD_PTB2__FTM0_CH2 0x1582
290 VF610_PAD_PTB3__FTM0_CH3 0x1582
291 VF610_PAD_PTB6__FTM0_CH6 0x1582
292 VF610_PAD_PTB7__FTM0_CH7 0x1582
293 >;
294 };
295 };
296
297 qspi0 {
298 pinctrl_qspi0_1: qspi0grp_1 {
299 fsl,pins = <
300 VF610_PAD_PTD0__QSPI0_A_QSCK 0x307b
301 VF610_PAD_PTD1__QSPI0_A_CS0 0x307f
302 VF610_PAD_PTD2__QSPI0_A_DATA3 0x3073
303 VF610_PAD_PTD3__QSPI0_A_DATA2 0x3073
304 VF610_PAD_PTD4__QSPI0_A_DATA1 0x3073
305 VF610_PAD_PTD5__QSPI0_A_DATA0 0x307b
306 VF610_PAD_PTD7__QSPI0_B_QSCK 0x307b
307 VF610_PAD_PTD8__QSPI0_B_CS0 0x307f
308 VF610_PAD_PTD9__QSPI0_B_DATA3 0x3073
309 VF610_PAD_PTD10__QSPI0_B_DATA2 0x3073
310 VF610_PAD_PTD11__QSPI0_B_DATA1 0x3073
311 VF610_PAD_PTD12__QSPI0_B_DATA0 0x307b
312 >;
313 };
314 };
315
316 sai2 {
317 pinctrl_sai2_1: sai2grp_1 {
318 fsl,pins = <
319 VF610_PAD_PTA16__SAI2_TX_BCLK 0x02ed
320 VF610_PAD_PTA18__SAI2_TX_DATA 0x02ee
321 VF610_PAD_PTA19__SAI2_TX_SYNC 0x02ed
322 VF610_PAD_PTA21__SAI2_RX_BCLK 0x02ed
323 VF610_PAD_PTA22__SAI2_RX_DATA 0x02ed
324 VF610_PAD_PTA23__SAI2_RX_SYNC 0x02ed
325 VF610_PAD_PTB18__EXT_AUDIO_MCLK 0x02ed
326 >;
327 };
328 };
329
330 uart1 {
331 pinctrl_uart1_1: uart1grp_1 {
332 fsl,pins = <
333 VF610_PAD_PTB4__UART1_TX 0x21a2
334 VF610_PAD_PTB5__UART1_RX 0x21a1
335 >;
336 };
337 };
338
339 usbvbus {
340 pinctrl_usbvbus_1: usbvbusgrp_1 {
341 fsl,pins = <
342 VF610_PAD_PTA24__USB1_VBUS_EN 0x219c
343 VF610_PAD_PTA16__USB0_VBUS_EN 0x219c
344 >;
345 };
346 };
347
348 }; 218 };
349 219
350 gpio1: gpio@40049000 { 220 gpio1: gpio@40049000 {
351 compatible = "fsl,vf610-gpio"; 221 compatible = "fsl,vf610-gpio";
352 reg = <0x40049000 0x1000 0x400ff000 0x40>; 222 reg = <0x40049000 0x1000 0x400ff000 0x40>;
353 interrupts = <0 107 0x04>; 223 interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
354 gpio-controller; 224 gpio-controller;
355 #gpio-cells = <2>; 225 #gpio-cells = <2>;
356 interrupt-controller; 226 interrupt-controller;
@@ -361,7 +231,7 @@
361 gpio2: gpio@4004a000 { 231 gpio2: gpio@4004a000 {
362 compatible = "fsl,vf610-gpio"; 232 compatible = "fsl,vf610-gpio";
363 reg = <0x4004a000 0x1000 0x400ff040 0x40>; 233 reg = <0x4004a000 0x1000 0x400ff040 0x40>;
364 interrupts = <0 108 0x04>; 234 interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
365 gpio-controller; 235 gpio-controller;
366 #gpio-cells = <2>; 236 #gpio-cells = <2>;
367 interrupt-controller; 237 interrupt-controller;
@@ -372,7 +242,7 @@
372 gpio3: gpio@4004b000 { 242 gpio3: gpio@4004b000 {
373 compatible = "fsl,vf610-gpio"; 243 compatible = "fsl,vf610-gpio";
374 reg = <0x4004b000 0x1000 0x400ff080 0x40>; 244 reg = <0x4004b000 0x1000 0x400ff080 0x40>;
375 interrupts = <0 109 0x04>; 245 interrupts = <0 109 IRQ_TYPE_LEVEL_HIGH>;
376 gpio-controller; 246 gpio-controller;
377 #gpio-cells = <2>; 247 #gpio-cells = <2>;
378 interrupt-controller; 248 interrupt-controller;
@@ -383,7 +253,7 @@
383 gpio4: gpio@4004c000 { 253 gpio4: gpio@4004c000 {
384 compatible = "fsl,vf610-gpio"; 254 compatible = "fsl,vf610-gpio";
385 reg = <0x4004c000 0x1000 0x400ff0c0 0x40>; 255 reg = <0x4004c000 0x1000 0x400ff0c0 0x40>;
386 interrupts = <0 110 0x04>; 256 interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
387 gpio-controller; 257 gpio-controller;
388 #gpio-cells = <2>; 258 #gpio-cells = <2>;
389 interrupt-controller; 259 interrupt-controller;
@@ -394,7 +264,7 @@
394 gpio5: gpio@4004d000 { 264 gpio5: gpio@4004d000 {
395 compatible = "fsl,vf610-gpio"; 265 compatible = "fsl,vf610-gpio";
396 reg = <0x4004d000 0x1000 0x400ff100 0x40>; 266 reg = <0x4004d000 0x1000 0x400ff100 0x40>;
397 interrupts = <0 111 0x04>; 267 interrupts = <0 111 IRQ_TYPE_LEVEL_HIGH>;
398 gpio-controller; 268 gpio-controller;
399 #gpio-cells = <2>; 269 #gpio-cells = <2>;
400 interrupt-controller; 270 interrupt-controller;
@@ -412,9 +282,12 @@
412 #size-cells = <0>; 282 #size-cells = <0>;
413 compatible = "fsl,vf610-i2c"; 283 compatible = "fsl,vf610-i2c";
414 reg = <0x40066000 0x1000>; 284 reg = <0x40066000 0x1000>;
415 interrupts =<0 71 0x04>; 285 interrupts =<0 71 IRQ_TYPE_LEVEL_HIGH>;
416 clocks = <&clks VF610_CLK_I2C0>; 286 clocks = <&clks VF610_CLK_I2C0>;
417 clock-names = "ipg"; 287 clock-names = "ipg";
288 dmas = <&edma0 0 50>,
289 <&edma0 0 51>;
290 dma-names = "rx","tx";
418 status = "disabled"; 291 status = "disabled";
419 }; 292 };
420 293
@@ -432,10 +305,25 @@
432 reg = <0x40080000 0x80000>; 305 reg = <0x40080000 0x80000>;
433 ranges; 306 ranges;
434 307
308 edma1: dma-controller@40098000 {
309 #dma-cells = <2>;
310 compatible = "fsl,vf610-edma";
311 reg = <0x40098000 0x2000>,
312 <0x400a1000 0x1000>,
313 <0x400a2000 0x1000>;
314 interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>,
315 <0 11 IRQ_TYPE_LEVEL_HIGH>;
316 interrupt-names = "edma-tx", "edma-err";
317 dma-channels = <32>;
318 clock-names = "dmamux0", "dmamux1";
319 clocks = <&clks VF610_CLK_DMAMUX2>,
320 <&clks VF610_CLK_DMAMUX3>;
321 };
322
435 uart4: serial@400a9000 { 323 uart4: serial@400a9000 {
436 compatible = "fsl,vf610-lpuart"; 324 compatible = "fsl,vf610-lpuart";
437 reg = <0x400a9000 0x1000>; 325 reg = <0x400a9000 0x1000>;
438 interrupts = <0 65 0x04>; 326 interrupts = <0 65 IRQ_TYPE_LEVEL_HIGH>;
439 clocks = <&clks VF610_CLK_UART4>; 327 clocks = <&clks VF610_CLK_UART4>;
440 clock-names = "ipg"; 328 clock-names = "ipg";
441 status = "disabled"; 329 status = "disabled";
@@ -444,16 +332,25 @@
444 uart5: serial@400aa000 { 332 uart5: serial@400aa000 {
445 compatible = "fsl,vf610-lpuart"; 333 compatible = "fsl,vf610-lpuart";
446 reg = <0x400aa000 0x1000>; 334 reg = <0x400aa000 0x1000>;
447 interrupts = <0 66 0x04>; 335 interrupts = <0 66 IRQ_TYPE_LEVEL_HIGH>;
448 clocks = <&clks VF610_CLK_UART5>; 336 clocks = <&clks VF610_CLK_UART5>;
449 clock-names = "ipg"; 337 clock-names = "ipg";
450 status = "disabled"; 338 status = "disabled";
451 }; 339 };
452 340
341 adc1: adc@400bb000 {
342 compatible = "fsl,vf610-adc";
343 reg = <0x400bb000 0x1000>;
344 interrupts = <0 54 0x04>;
345 clocks = <&clks VF610_CLK_ADC1>;
346 clock-names = "adc";
347 status = "disabled";
348 };
349
453 fec0: ethernet@400d0000 { 350 fec0: ethernet@400d0000 {
454 compatible = "fsl,mvf600-fec"; 351 compatible = "fsl,mvf600-fec";
455 reg = <0x400d0000 0x1000>; 352 reg = <0x400d0000 0x1000>;
456 interrupts = <0 78 0x04>; 353 interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>;
457 clocks = <&clks VF610_CLK_ENET0>, 354 clocks = <&clks VF610_CLK_ENET0>,
458 <&clks VF610_CLK_ENET0>, 355 <&clks VF610_CLK_ENET0>,
459 <&clks VF610_CLK_ENET>; 356 <&clks VF610_CLK_ENET>;
@@ -464,7 +361,7 @@
464 fec1: ethernet@400d1000 { 361 fec1: ethernet@400d1000 {
465 compatible = "fsl,mvf600-fec"; 362 compatible = "fsl,mvf600-fec";
466 reg = <0x400d1000 0x1000>; 363 reg = <0x400d1000 0x1000>;
467 interrupts = <0 79 0x04>; 364 interrupts = <0 79 IRQ_TYPE_LEVEL_HIGH>;
468 clocks = <&clks VF610_CLK_ENET1>, 365 clocks = <&clks VF610_CLK_ENET1>,
469 <&clks VF610_CLK_ENET1>, 366 <&clks VF610_CLK_ENET1>,
470 <&clks VF610_CLK_ENET>; 367 <&clks VF610_CLK_ENET>;
diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi
index 8b67b19392ec..93d1980a755d 100644
--- a/arch/arm/boot/dts/zynq-7000.dtsi
+++ b/arch/arm/boot/dts/zynq-7000.dtsi
@@ -134,6 +134,7 @@
134 #clock-cells = <1>; 134 #clock-cells = <1>;
135 compatible = "xlnx,ps7-clkc"; 135 compatible = "xlnx,ps7-clkc";
136 ps-clk-frequency = <33333333>; 136 ps-clk-frequency = <33333333>;
137 fclk-enable = <0>;
137 clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x", 138 clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
138 "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x", 139 "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
139 "dci", "lqspi", "smc", "pcap", "gem0", "gem1", 140 "dci", "lqspi", "smc", "pcap", "gem0", "gem1",
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index 845bc745706b..ee6982976d66 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -29,6 +29,7 @@ CONFIG_ARCH_OMAP3=y
29CONFIG_ARCH_OMAP4=y 29CONFIG_ARCH_OMAP4=y
30CONFIG_SOC_OMAP5=y 30CONFIG_SOC_OMAP5=y
31CONFIG_SOC_AM33XX=y 31CONFIG_SOC_AM33XX=y
32CONFIG_SOC_DRA7XX=y
32CONFIG_SOC_AM43XX=y 33CONFIG_SOC_AM43XX=y
33CONFIG_ARCH_ROCKCHIP=y 34CONFIG_ARCH_ROCKCHIP=y
34CONFIG_ARCH_SOCFPGA=y 35CONFIG_ARCH_SOCFPGA=y
diff --git a/arch/arm/include/asm/timex.h b/arch/arm/include/asm/timex.h
index 83f2aa83899c..f6fcc67ef06e 100644
--- a/arch/arm/include/asm/timex.h
+++ b/arch/arm/include/asm/timex.h
@@ -12,12 +12,6 @@
12#ifndef _ASMARM_TIMEX_H 12#ifndef _ASMARM_TIMEX_H
13#define _ASMARM_TIMEX_H 13#define _ASMARM_TIMEX_H
14 14
15#ifdef CONFIG_ARCH_MULTIPLATFORM
16#define CLOCK_TICK_RATE 1000000
17#else
18#include <mach/timex.h>
19#endif
20
21typedef unsigned long cycles_t; 15typedef unsigned long cycles_t;
22#define get_cycles() ({ cycles_t c; read_current_timer(&c) ? 0 : c; }) 16#define get_cycles() ({ cycles_t c; read_current_timer(&c) ? 0 : c; })
23 17
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
index e47f5fd232f5..787bb50a4dff 100644
--- a/arch/arm/mach-at91/at91rm9200.c
+++ b/arch/arm/mach-at91/at91rm9200.c
@@ -21,6 +21,7 @@
21#include <mach/at91rm9200.h> 21#include <mach/at91rm9200.h>
22#include <mach/at91_st.h> 22#include <mach/at91_st.h>
23#include <mach/cpu.h> 23#include <mach/cpu.h>
24#include <mach/hardware.h>
24 25
25#include "at91_aic.h" 26#include "at91_aic.h"
26#include "soc.h" 27#include "soc.h"
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c
index 3ebc9792560c..f3f19f21352a 100644
--- a/arch/arm/mach-at91/at91rm9200_devices.c
+++ b/arch/arm/mach-at91/at91rm9200_devices.c
@@ -21,6 +21,7 @@
21#include <mach/at91rm9200.h> 21#include <mach/at91rm9200.h>
22#include <mach/at91rm9200_mc.h> 22#include <mach/at91rm9200_mc.h>
23#include <mach/at91_ramc.h> 23#include <mach/at91_ramc.h>
24#include <mach/hardware.h>
24 25
25#include "board.h" 26#include "board.h"
26#include "generic.h" 27#include "generic.h"
@@ -922,6 +923,7 @@ static struct resource dbgu_resources[] = {
922static struct atmel_uart_data dbgu_data = { 923static struct atmel_uart_data dbgu_data = {
923 .use_dma_tx = 0, 924 .use_dma_tx = 0,
924 .use_dma_rx = 0, /* DBGU not capable of receive DMA */ 925 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
926 .rts_gpio = -EINVAL,
925}; 927};
926 928
927static u64 dbgu_dmamask = DMA_BIT_MASK(32); 929static u64 dbgu_dmamask = DMA_BIT_MASK(32);
@@ -960,6 +962,7 @@ static struct resource uart0_resources[] = {
960static struct atmel_uart_data uart0_data = { 962static struct atmel_uart_data uart0_data = {
961 .use_dma_tx = 1, 963 .use_dma_tx = 1,
962 .use_dma_rx = 1, 964 .use_dma_rx = 1,
965 .rts_gpio = -EINVAL,
963}; 966};
964 967
965static u64 uart0_dmamask = DMA_BIT_MASK(32); 968static u64 uart0_dmamask = DMA_BIT_MASK(32);
@@ -987,9 +990,10 @@ static inline void configure_usart0_pins(unsigned pins)
987 if (pins & ATMEL_UART_RTS) { 990 if (pins & ATMEL_UART_RTS) {
988 /* 991 /*
989 * AT91RM9200 Errata #39 - RTS0 is not internally connected to PA21. 992 * AT91RM9200 Errata #39 - RTS0 is not internally connected to PA21.
990 * We need to drive the pin manually. Default is off (RTS is active low). 993 * We need to drive the pin manually. The serial driver will driver
994 * this to high when initializing.
991 */ 995 */
992 at91_set_gpio_output(AT91_PIN_PA21, 1); 996 uart0_data.rts_gpio = AT91_PIN_PA21;
993 } 997 }
994} 998}
995 999
@@ -1009,6 +1013,7 @@ static struct resource uart1_resources[] = {
1009static struct atmel_uart_data uart1_data = { 1013static struct atmel_uart_data uart1_data = {
1010 .use_dma_tx = 1, 1014 .use_dma_tx = 1,
1011 .use_dma_rx = 1, 1015 .use_dma_rx = 1,
1016 .rts_gpio = -EINVAL,
1012}; 1017};
1013 1018
1014static u64 uart1_dmamask = DMA_BIT_MASK(32); 1019static u64 uart1_dmamask = DMA_BIT_MASK(32);
@@ -1060,6 +1065,7 @@ static struct resource uart2_resources[] = {
1060static struct atmel_uart_data uart2_data = { 1065static struct atmel_uart_data uart2_data = {
1061 .use_dma_tx = 1, 1066 .use_dma_tx = 1,
1062 .use_dma_rx = 1, 1067 .use_dma_rx = 1,
1068 .rts_gpio = -EINVAL,
1063}; 1069};
1064 1070
1065static u64 uart2_dmamask = DMA_BIT_MASK(32); 1071static u64 uart2_dmamask = DMA_BIT_MASK(32);
@@ -1103,6 +1109,7 @@ static struct resource uart3_resources[] = {
1103static struct atmel_uart_data uart3_data = { 1109static struct atmel_uart_data uart3_data = {
1104 .use_dma_tx = 1, 1110 .use_dma_tx = 1,
1105 .use_dma_rx = 1, 1111 .use_dma_rx = 1,
1112 .rts_gpio = -EINVAL,
1106}; 1113};
1107 1114
1108static u64 uart3_dmamask = DMA_BIT_MASK(32); 1115static u64 uart3_dmamask = DMA_BIT_MASK(32);
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c
index bc7b363a3083..7fd13aef9827 100644
--- a/arch/arm/mach-at91/at91rm9200_time.c
+++ b/arch/arm/mach-at91/at91rm9200_time.c
@@ -31,6 +31,7 @@
31#include <asm/mach/time.h> 31#include <asm/mach/time.h>
32 32
33#include <mach/at91_st.h> 33#include <mach/at91_st.h>
34#include <mach/hardware.h>
34 35
35static unsigned long last_crtr; 36static unsigned long last_crtr;
36static u32 irqmask; 37static u32 irqmask;
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
index 6c821e562159..c3d22be73b7c 100644
--- a/arch/arm/mach-at91/at91sam9260.c
+++ b/arch/arm/mach-at91/at91sam9260.c
@@ -21,6 +21,7 @@
21#include <mach/cpu.h> 21#include <mach/cpu.h>
22#include <mach/at91_dbgu.h> 22#include <mach/at91_dbgu.h>
23#include <mach/at91sam9260.h> 23#include <mach/at91sam9260.h>
24#include <mach/hardware.h>
24 25
25#include "at91_aic.h" 26#include "at91_aic.h"
26#include "at91_rstc.h" 27#include "at91_rstc.h"
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
index eda8d1679d40..2ae7715f1309 100644
--- a/arch/arm/mach-at91/at91sam9260_devices.c
+++ b/arch/arm/mach-at91/at91sam9260_devices.c
@@ -25,6 +25,7 @@
25#include <mach/at91_matrix.h> 25#include <mach/at91_matrix.h>
26#include <mach/at91sam9_smc.h> 26#include <mach/at91sam9_smc.h>
27#include <mach/at91_adc.h> 27#include <mach/at91_adc.h>
28#include <mach/hardware.h>
28 29
29#include "board.h" 30#include "board.h"
30#include "generic.h" 31#include "generic.h"
@@ -819,6 +820,7 @@ static struct resource dbgu_resources[] = {
819static struct atmel_uart_data dbgu_data = { 820static struct atmel_uart_data dbgu_data = {
820 .use_dma_tx = 0, 821 .use_dma_tx = 0,
821 .use_dma_rx = 0, /* DBGU not capable of receive DMA */ 822 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
823 .rts_gpio = -EINVAL,
822}; 824};
823 825
824static u64 dbgu_dmamask = DMA_BIT_MASK(32); 826static u64 dbgu_dmamask = DMA_BIT_MASK(32);
@@ -857,6 +859,7 @@ static struct resource uart0_resources[] = {
857static struct atmel_uart_data uart0_data = { 859static struct atmel_uart_data uart0_data = {
858 .use_dma_tx = 1, 860 .use_dma_tx = 1,
859 .use_dma_rx = 1, 861 .use_dma_rx = 1,
862 .rts_gpio = -EINVAL,
860}; 863};
861 864
862static u64 uart0_dmamask = DMA_BIT_MASK(32); 865static u64 uart0_dmamask = DMA_BIT_MASK(32);
@@ -908,6 +911,7 @@ static struct resource uart1_resources[] = {
908static struct atmel_uart_data uart1_data = { 911static struct atmel_uart_data uart1_data = {
909 .use_dma_tx = 1, 912 .use_dma_tx = 1,
910 .use_dma_rx = 1, 913 .use_dma_rx = 1,
914 .rts_gpio = -EINVAL,
911}; 915};
912 916
913static u64 uart1_dmamask = DMA_BIT_MASK(32); 917static u64 uart1_dmamask = DMA_BIT_MASK(32);
@@ -951,6 +955,7 @@ static struct resource uart2_resources[] = {
951static struct atmel_uart_data uart2_data = { 955static struct atmel_uart_data uart2_data = {
952 .use_dma_tx = 1, 956 .use_dma_tx = 1,
953 .use_dma_rx = 1, 957 .use_dma_rx = 1,
958 .rts_gpio = -EINVAL,
954}; 959};
955 960
956static u64 uart2_dmamask = DMA_BIT_MASK(32); 961static u64 uart2_dmamask = DMA_BIT_MASK(32);
@@ -994,6 +999,7 @@ static struct resource uart3_resources[] = {
994static struct atmel_uart_data uart3_data = { 999static struct atmel_uart_data uart3_data = {
995 .use_dma_tx = 1, 1000 .use_dma_tx = 1,
996 .use_dma_rx = 1, 1001 .use_dma_rx = 1,
1002 .rts_gpio = -EINVAL,
997}; 1003};
998 1004
999static u64 uart3_dmamask = DMA_BIT_MASK(32); 1005static u64 uart3_dmamask = DMA_BIT_MASK(32);
@@ -1037,6 +1043,7 @@ static struct resource uart4_resources[] = {
1037static struct atmel_uart_data uart4_data = { 1043static struct atmel_uart_data uart4_data = {
1038 .use_dma_tx = 1, 1044 .use_dma_tx = 1,
1039 .use_dma_rx = 1, 1045 .use_dma_rx = 1,
1046 .rts_gpio = -EINVAL,
1040}; 1047};
1041 1048
1042static u64 uart4_dmamask = DMA_BIT_MASK(32); 1049static u64 uart4_dmamask = DMA_BIT_MASK(32);
@@ -1075,6 +1082,7 @@ static struct resource uart5_resources[] = {
1075static struct atmel_uart_data uart5_data = { 1082static struct atmel_uart_data uart5_data = {
1076 .use_dma_tx = 1, 1083 .use_dma_tx = 1,
1077 .use_dma_rx = 1, 1084 .use_dma_rx = 1,
1085 .rts_gpio = -EINVAL,
1078}; 1086};
1079 1087
1080static u64 uart5_dmamask = DMA_BIT_MASK(32); 1088static u64 uart5_dmamask = DMA_BIT_MASK(32);
diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c
index 6276b4c1acfe..48b51f796d6a 100644
--- a/arch/arm/mach-at91/at91sam9261.c
+++ b/arch/arm/mach-at91/at91sam9261.c
@@ -20,6 +20,7 @@
20#include <asm/system_misc.h> 20#include <asm/system_misc.h>
21#include <mach/cpu.h> 21#include <mach/cpu.h>
22#include <mach/at91sam9261.h> 22#include <mach/at91sam9261.h>
23#include <mach/hardware.h>
23 24
24#include "at91_aic.h" 25#include "at91_aic.h"
25#include "at91_rstc.h" 26#include "at91_rstc.h"
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
index b2a34740146a..80e35895d28f 100644
--- a/arch/arm/mach-at91/at91sam9261_devices.c
+++ b/arch/arm/mach-at91/at91sam9261_devices.c
@@ -25,6 +25,7 @@
25#include <mach/at91sam9261_matrix.h> 25#include <mach/at91sam9261_matrix.h>
26#include <mach/at91_matrix.h> 26#include <mach/at91_matrix.h>
27#include <mach/at91sam9_smc.h> 27#include <mach/at91sam9_smc.h>
28#include <mach/hardware.h>
28 29
29#include "board.h" 30#include "board.h"
30#include "generic.h" 31#include "generic.h"
@@ -880,6 +881,7 @@ static struct resource dbgu_resources[] = {
880static struct atmel_uart_data dbgu_data = { 881static struct atmel_uart_data dbgu_data = {
881 .use_dma_tx = 0, 882 .use_dma_tx = 0,
882 .use_dma_rx = 0, /* DBGU not capable of receive DMA */ 883 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
884 .rts_gpio = -EINVAL,
883}; 885};
884 886
885static u64 dbgu_dmamask = DMA_BIT_MASK(32); 887static u64 dbgu_dmamask = DMA_BIT_MASK(32);
@@ -918,6 +920,7 @@ static struct resource uart0_resources[] = {
918static struct atmel_uart_data uart0_data = { 920static struct atmel_uart_data uart0_data = {
919 .use_dma_tx = 1, 921 .use_dma_tx = 1,
920 .use_dma_rx = 1, 922 .use_dma_rx = 1,
923 .rts_gpio = -EINVAL,
921}; 924};
922 925
923static u64 uart0_dmamask = DMA_BIT_MASK(32); 926static u64 uart0_dmamask = DMA_BIT_MASK(32);
@@ -961,6 +964,7 @@ static struct resource uart1_resources[] = {
961static struct atmel_uart_data uart1_data = { 964static struct atmel_uart_data uart1_data = {
962 .use_dma_tx = 1, 965 .use_dma_tx = 1,
963 .use_dma_rx = 1, 966 .use_dma_rx = 1,
967 .rts_gpio = -EINVAL,
964}; 968};
965 969
966static u64 uart1_dmamask = DMA_BIT_MASK(32); 970static u64 uart1_dmamask = DMA_BIT_MASK(32);
@@ -1004,6 +1008,7 @@ static struct resource uart2_resources[] = {
1004static struct atmel_uart_data uart2_data = { 1008static struct atmel_uart_data uart2_data = {
1005 .use_dma_tx = 1, 1009 .use_dma_tx = 1,
1006 .use_dma_rx = 1, 1010 .use_dma_rx = 1,
1011 .rts_gpio = -EINVAL,
1007}; 1012};
1008 1013
1009static u64 uart2_dmamask = DMA_BIT_MASK(32); 1014static u64 uart2_dmamask = DMA_BIT_MASK(32);
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c
index 37b90f4b990c..486530c3973b 100644
--- a/arch/arm/mach-at91/at91sam9263.c
+++ b/arch/arm/mach-at91/at91sam9263.c
@@ -19,6 +19,7 @@
19#include <asm/mach/map.h> 19#include <asm/mach/map.h>
20#include <asm/system_misc.h> 20#include <asm/system_misc.h>
21#include <mach/at91sam9263.h> 21#include <mach/at91sam9263.h>
22#include <mach/hardware.h>
22 23
23#include "at91_aic.h" 24#include "at91_aic.h"
24#include "at91_rstc.h" 25#include "at91_rstc.h"
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
index 4aeadddbc181..43d53d6156dd 100644
--- a/arch/arm/mach-at91/at91sam9263_devices.c
+++ b/arch/arm/mach-at91/at91sam9263_devices.c
@@ -24,6 +24,7 @@
24#include <mach/at91sam9263_matrix.h> 24#include <mach/at91sam9263_matrix.h>
25#include <mach/at91_matrix.h> 25#include <mach/at91_matrix.h>
26#include <mach/at91sam9_smc.h> 26#include <mach/at91sam9_smc.h>
27#include <mach/hardware.h>
27 28
28#include "board.h" 29#include "board.h"
29#include "generic.h" 30#include "generic.h"
@@ -1324,6 +1325,7 @@ static struct resource dbgu_resources[] = {
1324static struct atmel_uart_data dbgu_data = { 1325static struct atmel_uart_data dbgu_data = {
1325 .use_dma_tx = 0, 1326 .use_dma_tx = 0,
1326 .use_dma_rx = 0, /* DBGU not capable of receive DMA */ 1327 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
1328 .rts_gpio = -EINVAL,
1327}; 1329};
1328 1330
1329static u64 dbgu_dmamask = DMA_BIT_MASK(32); 1331static u64 dbgu_dmamask = DMA_BIT_MASK(32);
@@ -1362,6 +1364,7 @@ static struct resource uart0_resources[] = {
1362static struct atmel_uart_data uart0_data = { 1364static struct atmel_uart_data uart0_data = {
1363 .use_dma_tx = 1, 1365 .use_dma_tx = 1,
1364 .use_dma_rx = 1, 1366 .use_dma_rx = 1,
1367 .rts_gpio = -EINVAL,
1365}; 1368};
1366 1369
1367static u64 uart0_dmamask = DMA_BIT_MASK(32); 1370static u64 uart0_dmamask = DMA_BIT_MASK(32);
@@ -1405,6 +1408,7 @@ static struct resource uart1_resources[] = {
1405static struct atmel_uart_data uart1_data = { 1408static struct atmel_uart_data uart1_data = {
1406 .use_dma_tx = 1, 1409 .use_dma_tx = 1,
1407 .use_dma_rx = 1, 1410 .use_dma_rx = 1,
1411 .rts_gpio = -EINVAL,
1408}; 1412};
1409 1413
1410static u64 uart1_dmamask = DMA_BIT_MASK(32); 1414static u64 uart1_dmamask = DMA_BIT_MASK(32);
@@ -1448,6 +1452,7 @@ static struct resource uart2_resources[] = {
1448static struct atmel_uart_data uart2_data = { 1452static struct atmel_uart_data uart2_data = {
1449 .use_dma_tx = 1, 1453 .use_dma_tx = 1,
1450 .use_dma_rx = 1, 1454 .use_dma_rx = 1,
1455 .rts_gpio = -EINVAL,
1451}; 1456};
1452 1457
1453static u64 uart2_dmamask = DMA_BIT_MASK(32); 1458static u64 uart2_dmamask = DMA_BIT_MASK(32);
diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c
index 0f04ffe9c5a8..0a9e2fc8f796 100644
--- a/arch/arm/mach-at91/at91sam926x_time.c
+++ b/arch/arm/mach-at91/at91sam926x_time.c
@@ -19,6 +19,7 @@
19#include <linux/of_irq.h> 19#include <linux/of_irq.h>
20 20
21#include <asm/mach/time.h> 21#include <asm/mach/time.h>
22#include <mach/hardware.h>
22 23
23#define AT91_PIT_MR 0x00 /* Mode Register */ 24#define AT91_PIT_MR 0x00 /* Mode Register */
24#define AT91_PIT_PITIEN (1 << 25) /* Timer Interrupt Enable */ 25#define AT91_PIT_PITIEN (1 << 25) /* Timer Interrupt Enable */
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c
index 2f455ce35268..8c11696f606e 100644
--- a/arch/arm/mach-at91/at91sam9g45.c
+++ b/arch/arm/mach-at91/at91sam9g45.c
@@ -20,6 +20,7 @@
20#include <asm/system_misc.h> 20#include <asm/system_misc.h>
21#include <mach/at91sam9g45.h> 21#include <mach/at91sam9g45.h>
22#include <mach/cpu.h> 22#include <mach/cpu.h>
23#include <mach/hardware.h>
23 24
24#include "at91_aic.h" 25#include "at91_aic.h"
25#include "soc.h" 26#include "soc.h"
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index cb36fa872d30..77b04c2edd78 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -32,6 +32,7 @@
32#include <mach/at91sam9_smc.h> 32#include <mach/at91sam9_smc.h>
33#include <linux/platform_data/dma-atmel.h> 33#include <linux/platform_data/dma-atmel.h>
34#include <mach/atmel-mci.h> 34#include <mach/atmel-mci.h>
35#include <mach/hardware.h>
35 36
36#include <media/atmel-isi.h> 37#include <media/atmel-isi.h>
37 38
@@ -1587,6 +1588,7 @@ static struct resource dbgu_resources[] = {
1587static struct atmel_uart_data dbgu_data = { 1588static struct atmel_uart_data dbgu_data = {
1588 .use_dma_tx = 0, 1589 .use_dma_tx = 0,
1589 .use_dma_rx = 0, 1590 .use_dma_rx = 0,
1591 .rts_gpio = -EINVAL,
1590}; 1592};
1591 1593
1592static u64 dbgu_dmamask = DMA_BIT_MASK(32); 1594static u64 dbgu_dmamask = DMA_BIT_MASK(32);
@@ -1625,6 +1627,7 @@ static struct resource uart0_resources[] = {
1625static struct atmel_uart_data uart0_data = { 1627static struct atmel_uart_data uart0_data = {
1626 .use_dma_tx = 1, 1628 .use_dma_tx = 1,
1627 .use_dma_rx = 1, 1629 .use_dma_rx = 1,
1630 .rts_gpio = -EINVAL,
1628}; 1631};
1629 1632
1630static u64 uart0_dmamask = DMA_BIT_MASK(32); 1633static u64 uart0_dmamask = DMA_BIT_MASK(32);
@@ -1668,6 +1671,7 @@ static struct resource uart1_resources[] = {
1668static struct atmel_uart_data uart1_data = { 1671static struct atmel_uart_data uart1_data = {
1669 .use_dma_tx = 1, 1672 .use_dma_tx = 1,
1670 .use_dma_rx = 1, 1673 .use_dma_rx = 1,
1674 .rts_gpio = -EINVAL,
1671}; 1675};
1672 1676
1673static u64 uart1_dmamask = DMA_BIT_MASK(32); 1677static u64 uart1_dmamask = DMA_BIT_MASK(32);
@@ -1711,6 +1715,7 @@ static struct resource uart2_resources[] = {
1711static struct atmel_uart_data uart2_data = { 1715static struct atmel_uart_data uart2_data = {
1712 .use_dma_tx = 1, 1716 .use_dma_tx = 1,
1713 .use_dma_rx = 1, 1717 .use_dma_rx = 1,
1718 .rts_gpio = -EINVAL,
1714}; 1719};
1715 1720
1716static u64 uart2_dmamask = DMA_BIT_MASK(32); 1721static u64 uart2_dmamask = DMA_BIT_MASK(32);
@@ -1754,6 +1759,7 @@ static struct resource uart3_resources[] = {
1754static struct atmel_uart_data uart3_data = { 1759static struct atmel_uart_data uart3_data = {
1755 .use_dma_tx = 1, 1760 .use_dma_tx = 1,
1756 .use_dma_rx = 1, 1761 .use_dma_rx = 1,
1762 .rts_gpio = -EINVAL,
1757}; 1763};
1758 1764
1759static u64 uart3_dmamask = DMA_BIT_MASK(32); 1765static u64 uart3_dmamask = DMA_BIT_MASK(32);
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c
index 3651517abedf..c0d5474706f8 100644
--- a/arch/arm/mach-at91/at91sam9rl.c
+++ b/arch/arm/mach-at91/at91sam9rl.c
@@ -20,6 +20,7 @@
20#include <mach/cpu.h> 20#include <mach/cpu.h>
21#include <mach/at91_dbgu.h> 21#include <mach/at91_dbgu.h>
22#include <mach/at91sam9rl.h> 22#include <mach/at91sam9rl.h>
23#include <mach/hardware.h>
23 24
24#include "at91_aic.h" 25#include "at91_aic.h"
25#include "at91_rstc.h" 26#include "at91_rstc.h"
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
index a698bdab2cce..428fc412aaf1 100644
--- a/arch/arm/mach-at91/at91sam9rl_devices.c
+++ b/arch/arm/mach-at91/at91sam9rl_devices.c
@@ -21,6 +21,7 @@
21#include <mach/at91sam9rl_matrix.h> 21#include <mach/at91sam9rl_matrix.h>
22#include <mach/at91_matrix.h> 22#include <mach/at91_matrix.h>
23#include <mach/at91sam9_smc.h> 23#include <mach/at91sam9_smc.h>
24#include <mach/hardware.h>
24#include <linux/platform_data/dma-atmel.h> 25#include <linux/platform_data/dma-atmel.h>
25 26
26#include "board.h" 27#include "board.h"
@@ -956,6 +957,7 @@ static struct resource dbgu_resources[] = {
956static struct atmel_uart_data dbgu_data = { 957static struct atmel_uart_data dbgu_data = {
957 .use_dma_tx = 0, 958 .use_dma_tx = 0,
958 .use_dma_rx = 0, /* DBGU not capable of receive DMA */ 959 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
960 .rts_gpio = -EINVAL,
959}; 961};
960 962
961static u64 dbgu_dmamask = DMA_BIT_MASK(32); 963static u64 dbgu_dmamask = DMA_BIT_MASK(32);
@@ -994,6 +996,7 @@ static struct resource uart0_resources[] = {
994static struct atmel_uart_data uart0_data = { 996static struct atmel_uart_data uart0_data = {
995 .use_dma_tx = 1, 997 .use_dma_tx = 1,
996 .use_dma_rx = 1, 998 .use_dma_rx = 1,
999 .rts_gpio = -EINVAL,
997}; 1000};
998 1001
999static u64 uart0_dmamask = DMA_BIT_MASK(32); 1002static u64 uart0_dmamask = DMA_BIT_MASK(32);
@@ -1045,6 +1048,7 @@ static struct resource uart1_resources[] = {
1045static struct atmel_uart_data uart1_data = { 1048static struct atmel_uart_data uart1_data = {
1046 .use_dma_tx = 1, 1049 .use_dma_tx = 1,
1047 .use_dma_rx = 1, 1050 .use_dma_rx = 1,
1051 .rts_gpio = -EINVAL,
1048}; 1052};
1049 1053
1050static u64 uart1_dmamask = DMA_BIT_MASK(32); 1054static u64 uart1_dmamask = DMA_BIT_MASK(32);
@@ -1088,6 +1092,7 @@ static struct resource uart2_resources[] = {
1088static struct atmel_uart_data uart2_data = { 1092static struct atmel_uart_data uart2_data = {
1089 .use_dma_tx = 1, 1093 .use_dma_tx = 1,
1090 .use_dma_rx = 1, 1094 .use_dma_rx = 1,
1095 .rts_gpio = -EINVAL,
1091}; 1096};
1092 1097
1093static u64 uart2_dmamask = DMA_BIT_MASK(32); 1098static u64 uart2_dmamask = DMA_BIT_MASK(32);
@@ -1131,6 +1136,7 @@ static struct resource uart3_resources[] = {
1131static struct atmel_uart_data uart3_data = { 1136static struct atmel_uart_data uart3_data = {
1132 .use_dma_tx = 1, 1137 .use_dma_tx = 1,
1133 .use_dma_rx = 1, 1138 .use_dma_rx = 1,
1139 .rts_gpio = -EINVAL,
1134}; 1140};
1135 1141
1136static u64 uart3_dmamask = DMA_BIT_MASK(32); 1142static u64 uart3_dmamask = DMA_BIT_MASK(32);
diff --git a/arch/arm/mach-at91/at91x40.c b/arch/arm/mach-at91/at91x40.c
index bad94b84a46f..7523f1cdfe1d 100644
--- a/arch/arm/mach-at91/at91x40.c
+++ b/arch/arm/mach-at91/at91x40.c
@@ -19,7 +19,7 @@
19#include <asm/mach/arch.h> 19#include <asm/mach/arch.h>
20#include <mach/at91x40.h> 20#include <mach/at91x40.h>
21#include <mach/at91_st.h> 21#include <mach/at91_st.h>
22#include <mach/timex.h> 22#include <mach/hardware.h>
23 23
24#include "at91_aic.h" 24#include "at91_aic.h"
25#include "generic.h" 25#include "generic.h"
diff --git a/arch/arm/mach-at91/at91x40_time.c b/arch/arm/mach-at91/at91x40_time.c
index c0e637adf65d..07d0bf2ac2da 100644
--- a/arch/arm/mach-at91/at91x40_time.c
+++ b/arch/arm/mach-at91/at91x40_time.c
@@ -25,6 +25,7 @@
25#include <linux/time.h> 25#include <linux/time.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <mach/hardware.h> 27#include <mach/hardware.h>
28#include <mach/at91x40.h>
28#include <asm/mach/time.h> 29#include <asm/mach/time.h>
29 30
30#include "at91_tc.h" 31#include "at91_tc.h"
diff --git a/arch/arm/mach-at91/board-gsia18s.c b/arch/arm/mach-at91/board-gsia18s.c
index c1d61d247790..416bae8435ee 100644
--- a/arch/arm/mach-at91/board-gsia18s.c
+++ b/arch/arm/mach-at91/board-gsia18s.c
@@ -31,6 +31,7 @@
31#include <asm/mach/arch.h> 31#include <asm/mach/arch.h>
32 32
33#include <mach/at91sam9_smc.h> 33#include <mach/at91sam9_smc.h>
34#include <mach/hardware.h>
34 35
35#include "at91_aic.h" 36#include "at91_aic.h"
36#include "board.h" 37#include "board.h"
diff --git a/arch/arm/mach-at91/board-pcontrol-g20.c b/arch/arm/mach-at91/board-pcontrol-g20.c
index 65c0d6b5ecba..5f25fa54eb93 100644
--- a/arch/arm/mach-at91/board-pcontrol-g20.c
+++ b/arch/arm/mach-at91/board-pcontrol-g20.c
@@ -30,6 +30,7 @@
30#include <asm/mach/arch.h> 30#include <asm/mach/arch.h>
31 31
32#include <mach/at91sam9_smc.h> 32#include <mach/at91sam9_smc.h>
33#include <mach/hardware.h>
33 34
34#include "at91_aic.h" 35#include "at91_aic.h"
35#include "board.h" 36#include "board.h"
diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c
index 869cbecf00b7..e4a5ac17cdbc 100644
--- a/arch/arm/mach-at91/board-stamp9g20.c
+++ b/arch/arm/mach-at91/board-stamp9g20.c
@@ -26,6 +26,7 @@
26#include <asm/mach/arch.h> 26#include <asm/mach/arch.h>
27 27
28#include <mach/at91sam9_smc.h> 28#include <mach/at91sam9_smc.h>
29#include <mach/hardware.h>
29 30
30#include "at91_aic.h" 31#include "at91_aic.h"
31#include "board.h" 32#include "board.h"
diff --git a/arch/arm/mach-at91/include/mach/at91x40.h b/arch/arm/mach-at91/include/mach/at91x40.h
index 90680217064e..38dca2bb027f 100644
--- a/arch/arm/mach-at91/include/mach/at91x40.h
+++ b/arch/arm/mach-at91/include/mach/at91x40.h
@@ -55,4 +55,6 @@
55#define AT91_PS_CR (AT91_PS + 0) /* PS Control register */ 55#define AT91_PS_CR (AT91_PS + 0) /* PS Control register */
56#define AT91_PS_CR_CPU (1 << 0) /* CPU clock disable bit */ 56#define AT91_PS_CR_CPU (1 << 0) /* CPU clock disable bit */
57 57
58#define AT91X40_MASTER_CLOCK 40000000
59
58#endif /* AT91X40_H */ 60#endif /* AT91X40_H */
diff --git a/arch/arm/mach-at91/include/mach/timex.h b/arch/arm/mach-at91/include/mach/timex.h
deleted file mode 100644
index 5e917a66edd7..000000000000
--- a/arch/arm/mach-at91/include/mach/timex.h
+++ /dev/null
@@ -1,37 +0,0 @@
1/*
2 * arch/arm/mach-at91/include/mach/timex.h
3 *
4 * Copyright (C) 2003 SAN People
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#ifndef __ASM_ARCH_TIMEX_H
22#define __ASM_ARCH_TIMEX_H
23
24#include <mach/hardware.h>
25
26#ifdef CONFIG_ARCH_AT91X40
27
28#define AT91X40_MASTER_CLOCK 40000000
29#define CLOCK_TICK_RATE (AT91X40_MASTER_CLOCK)
30
31#else
32
33#define CLOCK_TICK_RATE 12345678
34
35#endif
36
37#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index 590b52dea9f7..8bda1cefdf96 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -27,6 +27,7 @@
27#include <asm/mach/irq.h> 27#include <asm/mach/irq.h>
28 28
29#include <mach/cpu.h> 29#include <mach/cpu.h>
30#include <mach/hardware.h>
30 31
31#include "at91_aic.h" 32#include "at91_aic.h"
32#include "generic.h" 33#include "generic.h"
diff --git a/arch/arm/mach-clps711x/include/mach/timex.h b/arch/arm/mach-clps711x/include/mach/timex.h
deleted file mode 100644
index de6fd192d1c3..000000000000
--- a/arch/arm/mach-clps711x/include/mach/timex.h
+++ /dev/null
@@ -1,2 +0,0 @@
1/* Bogus value */
2#define CLOCK_TICK_RATE 512000
diff --git a/arch/arm/mach-davinci/include/mach/timex.h b/arch/arm/mach-davinci/include/mach/timex.h
deleted file mode 100644
index 9b885298f106..000000000000
--- a/arch/arm/mach-davinci/include/mach/timex.h
+++ /dev/null
@@ -1,22 +0,0 @@
1/*
2 * DaVinci timer defines
3 *
4 * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
5 *
6 * 2007 (c) MontaVista Software, Inc. This file is licensed under
7 * the terms of the GNU General Public License version 2. This program
8 * is licensed "as is" without any warranty of any kind, whether express
9 * or implied.
10 */
11#ifndef __ASM_ARCH_TIMEX_H
12#define __ASM_ARCH_TIMEX_H
13
14/*
15 * Alert: Not all timers of the DaVinci family run at a frequency of 27MHz,
16 * but we should be fine as long as CLOCK_TICK_RATE or LATCH (see include/
17 * linux/jiffies.h) are not used directly in code. Currently none of the
18 * code relevant to DaVinci platform depends on these values directly.
19 */
20#define CLOCK_TICK_RATE 27000000
21
22#endif /* __ASM_ARCH_TIMEX_H__ */
diff --git a/arch/arm/mach-dove/include/mach/timex.h b/arch/arm/mach-dove/include/mach/timex.h
deleted file mode 100644
index 251d538541db..000000000000
--- a/arch/arm/mach-dove/include/mach/timex.h
+++ /dev/null
@@ -1,9 +0,0 @@
1/*
2 * arch/arm/mach-dove/include/mach/timex.h
3 *
4 * This file is licensed under the terms of the GNU General Public
5 * License version 2. This program is licensed "as is" without any
6 * warranty of any kind, whether express or implied.
7 */
8
9#define CLOCK_TICK_RATE (100 * HZ)
diff --git a/arch/arm/mach-ebsa110/include/mach/timex.h b/arch/arm/mach-ebsa110/include/mach/timex.h
deleted file mode 100644
index 4fb43b22a102..000000000000
--- a/arch/arm/mach-ebsa110/include/mach/timex.h
+++ /dev/null
@@ -1,19 +0,0 @@
1/*
2 * arch/arm/mach-ebsa110/include/mach/timex.h
3 *
4 * Copyright (C) 1997, 1998 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * EBSA110 architecture timex specifications
11 */
12
13/*
14 * On the EBSA, the clock ticks at weird rates.
15 * This is therefore not used to calculate the
16 * divisor.
17 */
18#define CLOCK_TICK_RATE 47894000
19
diff --git a/arch/arm/mach-efm32/include/mach/entry-macro.S b/arch/arm/mach-efm32/include/mach/entry-macro.S
deleted file mode 100644
index 322159d5ed91..000000000000
--- a/arch/arm/mach-efm32/include/mach/entry-macro.S
+++ /dev/null
@@ -1,4 +0,0 @@
1/*
2 * Empty file waiting for deletion once <mach/entry-macro.S> isn't needed any
3 * more. Patch "ARM: v7-M: drop using mach/entry-macro.S" sitting in next.
4 */
diff --git a/arch/arm/mach-efm32/include/mach/timex.h b/arch/arm/mach-efm32/include/mach/timex.h
deleted file mode 100644
index 7a8b26da6599..000000000000
--- a/arch/arm/mach-efm32/include/mach/timex.h
+++ /dev/null
@@ -1,3 +0,0 @@
1/*
2 * Empty file waiting for deletion once <mach/timex.h> isn't needed any more.
3 */
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
index 157ba88433c9..6c705472da6c 100644
--- a/arch/arm/mach-ep93xx/core.c
+++ b/arch/arm/mach-ep93xx/core.c
@@ -117,7 +117,7 @@ void __init ep93xx_map_io(void)
117#define EP93XX_TIMER4_CLOCK 983040 117#define EP93XX_TIMER4_CLOCK 983040
118 118
119#define TIMER1_RELOAD ((EP93XX_TIMER123_CLOCK / HZ) - 1) 119#define TIMER1_RELOAD ((EP93XX_TIMER123_CLOCK / HZ) - 1)
120#define TIMER4_TICKS_PER_JIFFY DIV_ROUND_CLOSEST(CLOCK_TICK_RATE, HZ) 120#define TIMER4_TICKS_PER_JIFFY DIV_ROUND_CLOSEST(EP93XX_TIMER4_CLOCK, HZ)
121 121
122static unsigned int last_jiffy_time; 122static unsigned int last_jiffy_time;
123 123
diff --git a/arch/arm/mach-ep93xx/include/mach/timex.h b/arch/arm/mach-ep93xx/include/mach/timex.h
deleted file mode 100644
index 6b3503b01fa6..000000000000
--- a/arch/arm/mach-ep93xx/include/mach/timex.h
+++ /dev/null
@@ -1,5 +0,0 @@
1/*
2 * arch/arm/mach-ep93xx/include/mach/timex.h
3 */
4
5#define CLOCK_TICK_RATE 983040
diff --git a/arch/arm/mach-exynos/include/mach/timex.h b/arch/arm/mach-exynos/include/mach/timex.h
deleted file mode 100644
index 6d138750a708..000000000000
--- a/arch/arm/mach-exynos/include/mach/timex.h
+++ /dev/null
@@ -1,29 +0,0 @@
1/* linux/arch/arm/mach-exynos4/include/mach/timex.h
2 *
3 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com
5 *
6 * Copyright (c) 2003-2010 Simtec Electronics
7 * Ben Dooks <ben@simtec.co.uk>
8 *
9 * Based on arch/arm/mach-s5p6442/include/mach/timex.h
10 *
11 * EXYNOS4 - time parameters
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16*/
17
18#ifndef __ASM_ARCH_TIMEX_H
19#define __ASM_ARCH_TIMEX_H __FILE__
20
21/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
22 * a variable is useless. It seems as long as we make our timers an
23 * exact multiple of HZ, any value that makes a 1->1 correspondence
24 * for the time conversion functions to/from jiffies is acceptable.
25*/
26
27#define CLOCK_TICK_RATE 12000000
28
29#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-footbridge/include/mach/timex.h b/arch/arm/mach-footbridge/include/mach/timex.h
deleted file mode 100644
index d0fea9d6d4ab..000000000000
--- a/arch/arm/mach-footbridge/include/mach/timex.h
+++ /dev/null
@@ -1,18 +0,0 @@
1/*
2 * arch/arm/mach-footbridge/include/mach/timex.h
3 *
4 * Copyright (C) 1998 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * EBSA285 architecture timex specifications
11 */
12
13/*
14 * We assume a constant here; this satisfies the maths in linux/timex.h
15 * and linux/time.h. CLOCK_TICK_RATE is actually system dependent, but
16 * this must be a constant.
17 */
18#define CLOCK_TICK_RATE (50000000/16)
diff --git a/arch/arm/mach-gemini/include/mach/timex.h b/arch/arm/mach-gemini/include/mach/timex.h
deleted file mode 100644
index dc5690ba975c..000000000000
--- a/arch/arm/mach-gemini/include/mach/timex.h
+++ /dev/null
@@ -1,13 +0,0 @@
1/*
2 * Gemini timex specifications
3 *
4 * Copyright (C) 2008-2009 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 */
11
12/* When AHB bus frequency is 150MHz */
13#define CLOCK_TICK_RATE 38000000
diff --git a/arch/arm/mach-hisi/Kconfig b/arch/arm/mach-hisi/Kconfig
index 8f4649b301b2..1abae5f6a418 100644
--- a/arch/arm/mach-hisi/Kconfig
+++ b/arch/arm/mach-hisi/Kconfig
@@ -8,7 +8,7 @@ config ARCH_HI3xxx
8 select CLKSRC_OF 8 select CLKSRC_OF
9 select GENERIC_CLOCKEVENTS 9 select GENERIC_CLOCKEVENTS
10 select HAVE_ARM_SCU 10 select HAVE_ARM_SCU
11 select HAVE_ARM_TWD 11 select HAVE_ARM_TWD if SMP
12 select HAVE_SMP 12 select HAVE_SMP
13 select PINCTRL 13 select PINCTRL
14 select PINCTRL_SINGLE 14 select PINCTRL_SINGLE
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
index af2e582d2b74..4d677f442539 100644
--- a/arch/arm/mach-imx/clk-imx6q.c
+++ b/arch/arm/mach-imx/clk-imx6q.c
@@ -482,6 +482,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
482 if (IS_ENABLED(CONFIG_PCI_IMX6)) 482 if (IS_ENABLED(CONFIG_PCI_IMX6))
483 clk_set_parent(clk[lvds1_sel], clk[sata_ref]); 483 clk_set_parent(clk[lvds1_sel], clk[sata_ref]);
484 484
485 /* Set initial power mode */
486 imx6q_set_lpm(WAIT_CLOCKED);
487
485 np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt"); 488 np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
486 base = of_iomap(np, 0); 489 base = of_iomap(np, 0);
487 WARN_ON(!base); 490 WARN_ON(!base);
diff --git a/arch/arm/mach-imx/clk-imx6sl.c b/arch/arm/mach-imx/clk-imx6sl.c
index 3781a1853998..4c86f3035205 100644
--- a/arch/arm/mach-imx/clk-imx6sl.c
+++ b/arch/arm/mach-imx/clk-imx6sl.c
@@ -266,6 +266,9 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
266 /* Audio-related clocks configuration */ 266 /* Audio-related clocks configuration */
267 clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]); 267 clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]);
268 268
269 /* Set initial power mode */
270 imx6q_set_lpm(WAIT_CLOCKED);
271
269 np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt"); 272 np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt");
270 base = of_iomap(np, 0); 273 base = of_iomap(np, 0);
271 WARN_ON(!base); 274 WARN_ON(!base);
diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c
index 9d47adc078aa..7a9b98589db7 100644
--- a/arch/arm/mach-imx/pm-imx6q.c
+++ b/arch/arm/mach-imx/pm-imx6q.c
@@ -236,8 +236,6 @@ void __init imx6q_pm_init(void)
236 regmap_update_bits(gpr, IOMUXC_GPR1, IMX6Q_GPR1_GINT, 236 regmap_update_bits(gpr, IOMUXC_GPR1, IMX6Q_GPR1_GINT,
237 IMX6Q_GPR1_GINT); 237 IMX6Q_GPR1_GINT);
238 238
239 /* Set initial power mode */
240 imx6q_set_lpm(WAIT_CLOCKED);
241 239
242 suspend_set_ops(&imx6q_pm_ops); 240 suspend_set_ops(&imx6q_pm_ops);
243} 241}
diff --git a/arch/arm/mach-integrator/include/mach/timex.h b/arch/arm/mach-integrator/include/mach/timex.h
deleted file mode 100644
index 1dcb42028c82..000000000000
--- a/arch/arm/mach-integrator/include/mach/timex.h
+++ /dev/null
@@ -1,26 +0,0 @@
1/*
2 * arch/arm/mach-integrator/include/mach/timex.h
3 *
4 * Integrator architecture timex specifications
5 *
6 * Copyright (C) 1999 ARM Limited
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23/*
24 * ??
25 */
26#define CLOCK_TICK_RATE (50000000 / 16)
diff --git a/arch/arm/mach-iop13xx/include/mach/timex.h b/arch/arm/mach-iop13xx/include/mach/timex.h
deleted file mode 100644
index 45fb2745bb54..000000000000
--- a/arch/arm/mach-iop13xx/include/mach/timex.h
+++ /dev/null
@@ -1 +0,0 @@
1#define CLOCK_TICK_RATE (100 * HZ)
diff --git a/arch/arm/mach-iop32x/include/mach/timex.h b/arch/arm/mach-iop32x/include/mach/timex.h
deleted file mode 100644
index 7262ab81419d..000000000000
--- a/arch/arm/mach-iop32x/include/mach/timex.h
+++ /dev/null
@@ -1,6 +0,0 @@
1/*
2 * arch/arm/mach-iop32x/include/mach/timex.h
3 *
4 * IOP32x architecture timex specifications
5 */
6#define CLOCK_TICK_RATE (100 * HZ)
diff --git a/arch/arm/mach-iop33x/include/mach/timex.h b/arch/arm/mach-iop33x/include/mach/timex.h
deleted file mode 100644
index 54c589091d6e..000000000000
--- a/arch/arm/mach-iop33x/include/mach/timex.h
+++ /dev/null
@@ -1,6 +0,0 @@
1/*
2 * arch/arm/mach-iop33x/include/mach/timex.h
3 *
4 * IOP3xx architecture timex specifications
5 */
6#define CLOCK_TICK_RATE (100 * HZ)
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
index 6d68aed6548a..dc5d7a0e5d9c 100644
--- a/arch/arm/mach-ixp4xx/common.c
+++ b/arch/arm/mach-ixp4xx/common.c
@@ -23,7 +23,6 @@
23#include <linux/interrupt.h> 23#include <linux/interrupt.h>
24#include <linux/bitops.h> 24#include <linux/bitops.h>
25#include <linux/time.h> 25#include <linux/time.h>
26#include <linux/timex.h>
27#include <linux/clocksource.h> 26#include <linux/clocksource.h>
28#include <linux/clockchips.h> 27#include <linux/clockchips.h>
29#include <linux/io.h> 28#include <linux/io.h>
@@ -45,6 +44,17 @@
45#include <asm/mach/irq.h> 44#include <asm/mach/irq.h>
46#include <asm/mach/time.h> 45#include <asm/mach/time.h>
47 46
47#define IXP4XX_TIMER_FREQ 66666000
48
49/*
50 * The timer register doesn't allow to specify the two least significant bits of
51 * the timeout value and assumes them being zero. So make sure IXP4XX_LATCH is
52 * the best value with the two least significant bits unset.
53 */
54#define IXP4XX_LATCH DIV_ROUND_CLOSEST(IXP4XX_TIMER_FREQ, \
55 (IXP4XX_OST_RELOAD_MASK + 1) * HZ) * \
56 (IXP4XX_OST_RELOAD_MASK + 1)
57
48static void __init ixp4xx_clocksource_init(void); 58static void __init ixp4xx_clocksource_init(void);
49static void __init ixp4xx_clockevent_init(void); 59static void __init ixp4xx_clockevent_init(void);
50static struct clock_event_device clockevent_ixp4xx; 60static struct clock_event_device clockevent_ixp4xx;
@@ -520,7 +530,7 @@ static void ixp4xx_set_mode(enum clock_event_mode mode,
520 530
521 switch (mode) { 531 switch (mode) {
522 case CLOCK_EVT_MODE_PERIODIC: 532 case CLOCK_EVT_MODE_PERIODIC:
523 osrt = LATCH & ~IXP4XX_OST_RELOAD_MASK; 533 osrt = IXP4XX_LATCH & ~IXP4XX_OST_RELOAD_MASK;
524 opts = IXP4XX_OST_ENABLE; 534 opts = IXP4XX_OST_ENABLE;
525 break; 535 break;
526 case CLOCK_EVT_MODE_ONESHOT: 536 case CLOCK_EVT_MODE_ONESHOT:
diff --git a/arch/arm/mach-ixp4xx/include/mach/timex.h b/arch/arm/mach-ixp4xx/include/mach/timex.h
deleted file mode 100644
index 0396d89f947c..000000000000
--- a/arch/arm/mach-ixp4xx/include/mach/timex.h
+++ /dev/null
@@ -1,16 +0,0 @@
1/*
2 * arch/arm/mach-ixp4xx/include/mach/timex.h
3 *
4 */
5
6#include <mach/ixp4xx-regs.h>
7
8/*
9 * We use IXP425 General purpose timer for our timer needs, it runs at
10 * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the
11 * timer register ignores the bottom 2 bits of the LATCH value.
12 */
13#define IXP4XX_TIMER_FREQ 66666000
14#define CLOCK_TICK_RATE \
15 (((IXP4XX_TIMER_FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
16
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
index 6e6bb7d5ea30..aa0d2121449f 100644
--- a/arch/arm/mach-keystone/keystone.c
+++ b/arch/arm/mach-keystone/keystone.c
@@ -47,6 +47,9 @@ static void __init keystone_init(void)
47 47
48static const char *keystone_match[] __initconst = { 48static const char *keystone_match[] __initconst = {
49 "ti,keystone-evm", 49 "ti,keystone-evm",
50 "ti,k2hk-evm",
51 "ti,k2l-evm",
52 "ti,k2e-evm",
50 NULL, 53 NULL,
51}; 54};
52 55
diff --git a/arch/arm/mach-kirkwood/include/mach/timex.h b/arch/arm/mach-kirkwood/include/mach/timex.h
deleted file mode 100644
index c923cd169b9c..000000000000
--- a/arch/arm/mach-kirkwood/include/mach/timex.h
+++ /dev/null
@@ -1,10 +0,0 @@
1/*
2 * arch/arm/mach-kirkwood/include/mach/timex.h
3 *
4 * This file is licensed under the terms of the GNU General Public
5 * License version 2. This program is licensed "as is" without any
6 * warranty of any kind, whether express or implied.
7 */
8
9#define CLOCK_TICK_RATE (100 * HZ)
10
diff --git a/arch/arm/mach-ks8695/include/mach/timex.h b/arch/arm/mach-ks8695/include/mach/timex.h
deleted file mode 100644
index 10f716371bd3..000000000000
--- a/arch/arm/mach-ks8695/include/mach/timex.h
+++ /dev/null
@@ -1,21 +0,0 @@
1/*
2 * arch/arm/mach-ks8695/include/mach/timex.h
3 *
4 * Copyright (C) 2006 Simtec Electronics
5 * Ben Dooks <ben@simtec.co.uk>
6 *
7 * KS8695 - Time Parameters
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#ifndef __ASM_ARCH_TIMEX_H
15#define __ASM_ARCH_TIMEX_H
16
17#include <mach/hardware.h>
18
19#define CLOCK_TICK_RATE KS8695_CLOCK_RATE
20
21#endif
diff --git a/arch/arm/mach-lpc32xx/include/mach/timex.h b/arch/arm/mach-lpc32xx/include/mach/timex.h
deleted file mode 100644
index 8d4066b16b3f..000000000000
--- a/arch/arm/mach-lpc32xx/include/mach/timex.h
+++ /dev/null
@@ -1,28 +0,0 @@
1/*
2 * arch/arm/mach-lpc32xx/include/mach/timex.h
3 *
4 * Author: Kevin Wells <kevin.wells@nxp.com>
5 *
6 * Copyright (C) 2010 NXP Semiconductors
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19#ifndef __ASM_ARCH_TIMEX_H
20#define __ASM_ARCH_TIMEX_H
21
22/*
23 * Rate in Hz of the main system oscillator. This value should match
24 * the value 'MAIN_OSC_FREQ' in platform.h
25 */
26#define CLOCK_TICK_RATE 13000000
27
28#endif
diff --git a/arch/arm/mach-mmp/include/mach/timex.h b/arch/arm/mach-mmp/include/mach/timex.h
deleted file mode 100644
index 70c9f1d88c02..000000000000
--- a/arch/arm/mach-mmp/include/mach/timex.h
+++ /dev/null
@@ -1,13 +0,0 @@
1/*
2 * linux/arch/arm/mach-mmp/include/mach/timex.h
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#ifdef CONFIG_CPU_MMP2
10#define CLOCK_TICK_RATE 6500000
11#else
12#define CLOCK_TICK_RATE 3250000
13#endif
diff --git a/arch/arm/mach-mmp/time.c b/arch/arm/mach-mmp/time.c
index 024022d91fe3..048997e75dd0 100644
--- a/arch/arm/mach-mmp/time.c
+++ b/arch/arm/mach-mmp/time.c
@@ -39,6 +39,12 @@
39 39
40#include "clock.h" 40#include "clock.h"
41 41
42#ifdef CONFIG_CPU_MMP2
43#define MMP_CLOCK_FREQ 6500000
44#else
45#define MMP_CLOCK_FREQ 3250000
46#endif
47
42#define TIMERS_VIRT_BASE TIMERS1_VIRT_BASE 48#define TIMERS_VIRT_BASE TIMERS1_VIRT_BASE
43 49
44#define MAX_DELTA (0xfffffffe) 50#define MAX_DELTA (0xfffffffe)
@@ -195,14 +201,14 @@ void __init timer_init(int irq)
195{ 201{
196 timer_config(); 202 timer_config();
197 203
198 sched_clock_register(mmp_read_sched_clock, 32, CLOCK_TICK_RATE); 204 sched_clock_register(mmp_read_sched_clock, 32, MMP_CLOCK_FREQ);
199 205
200 ckevt.cpumask = cpumask_of(0); 206 ckevt.cpumask = cpumask_of(0);
201 207
202 setup_irq(irq, &timer_irq); 208 setup_irq(irq, &timer_irq);
203 209
204 clocksource_register_hz(&cksrc, CLOCK_TICK_RATE); 210 clocksource_register_hz(&cksrc, MMP_CLOCK_FREQ);
205 clockevents_config_and_register(&ckevt, CLOCK_TICK_RATE, 211 clockevents_config_and_register(&ckevt, MMP_CLOCK_FREQ,
206 MIN_DELTA, MAX_DELTA); 212 MIN_DELTA, MAX_DELTA);
207} 213}
208 214
diff --git a/arch/arm/mach-moxart/Kconfig b/arch/arm/mach-moxart/Kconfig
index ba470d64493b..3795ae28a613 100644
--- a/arch/arm/mach-moxart/Kconfig
+++ b/arch/arm/mach-moxart/Kconfig
@@ -2,7 +2,6 @@ config ARCH_MOXART
2 bool "MOXA ART SoC" if ARCH_MULTI_V4T 2 bool "MOXA ART SoC" if ARCH_MULTI_V4T
3 select CPU_FA526 3 select CPU_FA526
4 select ARM_DMA_MEM_BUFFERABLE 4 select ARM_DMA_MEM_BUFFERABLE
5 select DMA_OF
6 select USE_OF 5 select USE_OF
7 select CLKSRC_OF 6 select CLKSRC_OF
8 select CLKSRC_MMIO 7 select CLKSRC_MMIO
diff --git a/arch/arm/mach-msm/Kconfig b/arch/arm/mach-msm/Kconfig
index 9625cf378931..a7f959e58c3d 100644
--- a/arch/arm/mach-msm/Kconfig
+++ b/arch/arm/mach-msm/Kconfig
@@ -1,50 +1,9 @@
1config ARCH_MSM
2 bool
3
4config ARCH_MSM_DT
5 bool "Qualcomm MSM DT Support" if ARCH_MULTI_V7
6 select ARCH_MSM
7 select ARCH_REQUIRE_GPIOLIB
8 select CLKSRC_OF
9 select GENERIC_CLOCKEVENTS
10 help
11 Support for Qualcomm's devicetree based MSM systems.
12
13if ARCH_MSM 1if ARCH_MSM
14 2
15menu "Qualcomm MSM SoC Selection"
16 depends on ARCH_MSM_DT
17
18config ARCH_MSM8X60
19 bool "Enable support for MSM8X60"
20 select ARM_GIC
21 select CPU_V7
22 select HAVE_SMP
23 select MSM_SCM if SMP
24 select MSM_TIMER
25
26config ARCH_MSM8960
27 bool "Enable support for MSM8960"
28 select ARM_GIC
29 select CPU_V7
30 select HAVE_SMP
31 select MSM_SCM if SMP
32 select MSM_TIMER
33
34config ARCH_MSM8974
35 bool "Enable support for MSM8974"
36 select ARM_GIC
37 select CPU_V7
38 select HAVE_ARM_ARCH_TIMER
39 select HAVE_SMP
40 select MSM_SCM if SMP
41
42endmenu
43
44choice 3choice
45 prompt "Qualcomm MSM SoC Type" 4 prompt "Qualcomm MSM SoC Type"
46 default ARCH_MSM7X00A 5 default ARCH_MSM7X00A
47 depends on ARCH_MSM_NODT 6 depends on ARCH_MSM
48 7
49config ARCH_MSM7X00A 8config ARCH_MSM7X00A
50 bool "MSM7x00A / MSM7x01A" 9 bool "MSM7x00A / MSM7x01A"
@@ -54,7 +13,7 @@ config ARCH_MSM7X00A
54 select MACH_TROUT if !MACH_HALIBUT 13 select MACH_TROUT if !MACH_HALIBUT
55 select MSM_PROC_COMM 14 select MSM_PROC_COMM
56 select MSM_SMD 15 select MSM_SMD
57 select MSM_TIMER 16 select CLKSRC_QCOM
58 select MSM_SMD_PKG3 17 select MSM_SMD_PKG3
59 18
60config ARCH_MSM7X30 19config ARCH_MSM7X30
@@ -66,7 +25,7 @@ config ARCH_MSM7X30
66 select MSM_GPIOMUX 25 select MSM_GPIOMUX
67 select MSM_PROC_COMM 26 select MSM_PROC_COMM
68 select MSM_SMD 27 select MSM_SMD
69 select MSM_TIMER 28 select CLKSRC_QCOM
70 select MSM_VIC 29 select MSM_VIC
71 30
72config ARCH_QSD8X50 31config ARCH_QSD8X50
@@ -78,7 +37,7 @@ config ARCH_QSD8X50
78 select MSM_GPIOMUX 37 select MSM_GPIOMUX
79 select MSM_PROC_COMM 38 select MSM_PROC_COMM
80 select MSM_SMD 39 select MSM_SMD
81 select MSM_TIMER 40 select CLKSRC_QCOM
82 select MSM_VIC 41 select MSM_VIC
83 42
84endchoice 43endchoice
@@ -99,7 +58,7 @@ config MSM_VIC
99 bool 58 bool
100 59
101menu "Qualcomm MSM Board Type" 60menu "Qualcomm MSM Board Type"
102 depends on ARCH_MSM_NODT 61 depends on ARCH_MSM
103 62
104config MACH_HALIBUT 63config MACH_HALIBUT
105 depends on ARCH_MSM 64 depends on ARCH_MSM
@@ -153,7 +112,4 @@ config MSM_GPIOMUX
153config MSM_SCM 112config MSM_SCM
154 bool 113 bool
155 114
156config MSM_TIMER
157 bool
158
159endif 115endif
diff --git a/arch/arm/mach-msm/Makefile b/arch/arm/mach-msm/Makefile
index 8e307a10d3c3..27c078a568df 100644
--- a/arch/arm/mach-msm/Makefile
+++ b/arch/arm/mach-msm/Makefile
@@ -1,4 +1,3 @@
1obj-$(CONFIG_MSM_TIMER) += timer.o
2obj-$(CONFIG_MSM_PROC_COMM) += clock.o 1obj-$(CONFIG_MSM_PROC_COMM) += clock.o
3 2
4obj-$(CONFIG_MSM_VIC) += irq-vic.o 3obj-$(CONFIG_MSM_VIC) += irq-vic.o
@@ -14,18 +13,11 @@ obj-$(CONFIG_ARCH_QSD8X50) += dma.o io.o
14 13
15obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o 14obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o
16obj-$(CONFIG_MSM_SMD) += last_radio_log.o 15obj-$(CONFIG_MSM_SMD) += last_radio_log.o
17obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o
18
19CFLAGS_scm.o :=$(call as-instr,.arch_extension sec,-DREQUIRES_SEC=1)
20
21obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
22obj-$(CONFIG_SMP) += headsmp.o platsmp.o
23 16
24obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o devices-msm7x00.o 17obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o devices-msm7x00.o
25obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o board-trout-panel.o devices-msm7x00.o 18obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o board-trout-panel.o devices-msm7x00.o
26obj-$(CONFIG_MACH_HALIBUT) += board-halibut.o devices-msm7x00.o 19obj-$(CONFIG_MACH_HALIBUT) += board-halibut.o devices-msm7x00.o
27obj-$(CONFIG_ARCH_MSM7X30) += board-msm7x30.o devices-msm7x30.o 20obj-$(CONFIG_ARCH_MSM7X30) += board-msm7x30.o devices-msm7x30.o
28obj-$(CONFIG_ARCH_QSD8X50) += board-qsd8x50.o devices-qsd8x50.o 21obj-$(CONFIG_ARCH_QSD8X50) += board-qsd8x50.o devices-qsd8x50.o
29obj-$(CONFIG_ARCH_MSM_DT) += board-dt.o
30obj-$(CONFIG_MSM_GPIOMUX) += gpiomux.o 22obj-$(CONFIG_MSM_GPIOMUX) += gpiomux.o
31obj-$(CONFIG_ARCH_QSD8X50) += gpiomux-8x50.o 23obj-$(CONFIG_ARCH_QSD8X50) += gpiomux-8x50.o
diff --git a/arch/arm/mach-msm/common.h b/arch/arm/mach-msm/common.h
index 33c7725adae2..0a4899b7d85c 100644
--- a/arch/arm/mach-msm/common.h
+++ b/arch/arm/mach-msm/common.h
@@ -24,7 +24,6 @@ extern void __iomem *__msm_ioremap_caller(phys_addr_t phys_addr, size_t size,
24 unsigned int mtype, void *caller); 24 unsigned int mtype, void *caller);
25 25
26extern struct smp_operations msm_smp_ops; 26extern struct smp_operations msm_smp_ops;
27extern void msm_cpu_die(unsigned int cpu);
28 27
29struct msm_mmc_platform_data; 28struct msm_mmc_platform_data;
30 29
diff --git a/arch/arm/mach-msm/headsmp.S b/arch/arm/mach-msm/headsmp.S
deleted file mode 100644
index 6c62c3f82fe6..000000000000
--- a/arch/arm/mach-msm/headsmp.S
+++ /dev/null
@@ -1,39 +0,0 @@
1/*
2 * linux/arch/arm/mach-realview/headsmp.S
3 *
4 * Copyright (c) 2003 ARM Limited
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#include <linux/linkage.h>
12#include <linux/init.h>
13
14/*
15 * MSM specific entry point for secondary CPUs. This provides
16 * a "holding pen" into which all secondary cores are held until we're
17 * ready for them to initialise.
18 */
19ENTRY(msm_secondary_startup)
20 mrc p15, 0, r0, c0, c0, 5
21 and r0, r0, #15
22 adr r4, 1f
23 ldmia r4, {r5, r6}
24 sub r4, r4, r5
25 add r6, r6, r4
26pen: ldr r7, [r6]
27 cmp r7, r0
28 bne pen
29
30 /*
31 * we've been released from the holding pen: secondary_stack
32 * should now contain the SVC stack for this core
33 */
34 b secondary_startup
35ENDPROC(msm_secondary_startup)
36
37 .align
381: .long .
39 .long pen_release
diff --git a/arch/arm/mach-msm/hotplug.c b/arch/arm/mach-msm/hotplug.c
deleted file mode 100644
index 326a87261f9a..000000000000
--- a/arch/arm/mach-msm/hotplug.c
+++ /dev/null
@@ -1,74 +0,0 @@
1/*
2 * Copyright (C) 2002 ARM Ltd.
3 * All Rights Reserved
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 */
9#include <linux/kernel.h>
10#include <linux/errno.h>
11#include <linux/smp.h>
12
13#include <asm/smp_plat.h>
14
15#include "common.h"
16
17static inline void cpu_enter_lowpower(void)
18{
19}
20
21static inline void cpu_leave_lowpower(void)
22{
23}
24
25static inline void platform_do_lowpower(unsigned int cpu)
26{
27 /* Just enter wfi for now. TODO: Properly shut off the cpu. */
28 for (;;) {
29 /*
30 * here's the WFI
31 */
32 asm("wfi"
33 :
34 :
35 : "memory", "cc");
36
37 if (pen_release == cpu_logical_map(cpu)) {
38 /*
39 * OK, proper wakeup, we're done
40 */
41 break;
42 }
43
44 /*
45 * getting here, means that we have come out of WFI without
46 * having been woken up - this shouldn't happen
47 *
48 * The trouble is, letting people know about this is not really
49 * possible, since we are currently running incoherently, and
50 * therefore cannot safely call printk() or anything else
51 */
52 pr_debug("CPU%u: spurious wakeup call\n", cpu);
53 }
54}
55
56/*
57 * platform-specific code to shutdown a CPU
58 *
59 * Called with IRQs disabled
60 */
61void __ref msm_cpu_die(unsigned int cpu)
62{
63 /*
64 * we're ready for shutdown now, so do it
65 */
66 cpu_enter_lowpower();
67 platform_do_lowpower(cpu);
68
69 /*
70 * bring this CPU back into the world of cache
71 * coherency, and then restore interrupts
72 */
73 cpu_leave_lowpower();
74}
diff --git a/arch/arm/mach-msm/include/mach/timex.h b/arch/arm/mach-msm/include/mach/timex.h
deleted file mode 100644
index a62e6b215aec..000000000000
--- a/arch/arm/mach-msm/include/mach/timex.h
+++ /dev/null
@@ -1,21 +0,0 @@
1/* arch/arm/mach-msm/include/mach/timex.h
2 *
3 * Copyright (C) 2007 Google, Inc.
4 *
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15
16#ifndef __ASM_ARCH_MSM_TIMEX_H
17#define __ASM_ARCH_MSM_TIMEX_H
18
19#define CLOCK_TICK_RATE 1000000
20
21#endif
diff --git a/arch/arm/mach-mv78xx0/include/mach/timex.h b/arch/arm/mach-mv78xx0/include/mach/timex.h
deleted file mode 100644
index 0e8c443c723a..000000000000
--- a/arch/arm/mach-mv78xx0/include/mach/timex.h
+++ /dev/null
@@ -1,9 +0,0 @@
1/*
2 * arch/arm/mach-mv78xx0/include/mach/timex.h
3 *
4 * This file is licensed under the terms of the GNU General Public
5 * License version 2. This program is licensed "as is" without any
6 * warranty of any kind, whether express or implied.
7 */
8
9#define CLOCK_TICK_RATE (100 * HZ)
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c
index 1dc5acd4fc99..2e7cec86e50e 100644
--- a/arch/arm/mach-mxs/mach-mxs.c
+++ b/arch/arm/mach-mxs/mach-mxs.c
@@ -157,6 +157,8 @@ enum mac_oui {
157 OUI_FSL, 157 OUI_FSL,
158 OUI_DENX, 158 OUI_DENX,
159 OUI_CRYSTALFONTZ, 159 OUI_CRYSTALFONTZ,
160 OUI_I2SE,
161 OUI_ARMADEUS,
160}; 162};
161 163
162static void __init update_fec_mac_prop(enum mac_oui oui) 164static void __init update_fec_mac_prop(enum mac_oui oui)
@@ -211,6 +213,16 @@ static void __init update_fec_mac_prop(enum mac_oui oui)
211 macaddr[1] = 0xb9; 213 macaddr[1] = 0xb9;
212 macaddr[2] = 0xe1; 214 macaddr[2] = 0xe1;
213 break; 215 break;
216 case OUI_I2SE:
217 macaddr[0] = 0x00;
218 macaddr[1] = 0x01;
219 macaddr[2] = 0x87;
220 break;
221 case OUI_ARMADEUS:
222 macaddr[0] = 0x00;
223 macaddr[1] = 0x1e;
224 macaddr[2] = 0xac;
225 break;
214 } 226 }
215 val = ocotp[i]; 227 val = ocotp[i];
216 macaddr[3] = (val >> 16) & 0xff; 228 macaddr[3] = (val >> 16) & 0xff;
@@ -236,6 +248,11 @@ static void __init imx28_evk_init(void)
236 mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0); 248 mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0);
237} 249}
238 250
251static void __init imx28_apf28_init(void)
252{
253 update_fec_mac_prop(OUI_ARMADEUS);
254}
255
239static int apx4devkit_phy_fixup(struct phy_device *phy) 256static int apx4devkit_phy_fixup(struct phy_device *phy)
240{ 257{
241 phy->dev_flags |= MICREL_PHY_50MHZ_CLK; 258 phy->dev_flags |= MICREL_PHY_50MHZ_CLK;
@@ -330,6 +347,11 @@ static void __init crystalfontz_init(void)
330 update_fec_mac_prop(OUI_CRYSTALFONTZ); 347 update_fec_mac_prop(OUI_CRYSTALFONTZ);
331} 348}
332 349
350static void __init duckbill_init(void)
351{
352 update_fec_mac_prop(OUI_I2SE);
353}
354
333static void __init m28cu3_init(void) 355static void __init m28cu3_init(void)
334{ 356{
335 update_fec_mac_prop(OUI_DENX); 357 update_fec_mac_prop(OUI_DENX);
@@ -426,6 +448,11 @@ static int __init mxs_restart_init(void)
426 return 0; 448 return 0;
427} 449}
428 450
451static void __init eukrea_mbmx283lc_init(void)
452{
453 mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0);
454}
455
429static void __init mxs_machine_init(void) 456static void __init mxs_machine_init(void)
430{ 457{
431 struct device_node *root; 458 struct device_node *root;
@@ -458,10 +485,16 @@ static void __init mxs_machine_init(void)
458 485
459 if (of_machine_is_compatible("fsl,imx28-evk")) 486 if (of_machine_is_compatible("fsl,imx28-evk"))
460 imx28_evk_init(); 487 imx28_evk_init();
488 if (of_machine_is_compatible("armadeus,imx28-apf28"))
489 imx28_apf28_init();
461 else if (of_machine_is_compatible("bluegiga,apx4devkit")) 490 else if (of_machine_is_compatible("bluegiga,apx4devkit"))
462 apx4devkit_init(); 491 apx4devkit_init();
463 else if (of_machine_is_compatible("crystalfontz,cfa10036")) 492 else if (of_machine_is_compatible("crystalfontz,cfa10036"))
464 crystalfontz_init(); 493 crystalfontz_init();
494 else if (of_machine_is_compatible("eukrea,mbmx283lc"))
495 eukrea_mbmx283lc_init();
496 else if (of_machine_is_compatible("i2se,duckbill"))
497 duckbill_init();
465 else if (of_machine_is_compatible("msr,m28cu3")) 498 else if (of_machine_is_compatible("msr,m28cu3"))
466 m28cu3_init(); 499 m28cu3_init();
467 500
diff --git a/arch/arm/mach-netx/include/mach/timex.h b/arch/arm/mach-netx/include/mach/timex.h
deleted file mode 100644
index 1120dd0ba393..000000000000
--- a/arch/arm/mach-netx/include/mach/timex.h
+++ /dev/null
@@ -1,20 +0,0 @@
1/*
2 * arch/arm/mach-netx/include/mach/timex.h
3 *
4 * Copyright (C) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#define CLOCK_TICK_RATE 100000000
diff --git a/arch/arm/mach-netx/time.c b/arch/arm/mach-netx/time.c
index 6df42e643031..e2346013e227 100644
--- a/arch/arm/mach-netx/time.c
+++ b/arch/arm/mach-netx/time.c
@@ -28,6 +28,9 @@
28#include <asm/mach/time.h> 28#include <asm/mach/time.h>
29#include <mach/netx-regs.h> 29#include <mach/netx-regs.h>
30 30
31#define NETX_CLOCK_FREQ 100000000
32#define NETX_LATCH DIV_ROUND_CLOSEST(NETX_CLOCK_FREQ, HZ)
33
31#define TIMER_CLOCKEVENT 0 34#define TIMER_CLOCKEVENT 0
32#define TIMER_CLOCKSOURCE 1 35#define TIMER_CLOCKSOURCE 1
33 36
@@ -41,7 +44,7 @@ static void netx_set_mode(enum clock_event_mode mode,
41 44
42 switch (mode) { 45 switch (mode) {
43 case CLOCK_EVT_MODE_PERIODIC: 46 case CLOCK_EVT_MODE_PERIODIC:
44 writel(LATCH, NETX_GPIO_COUNTER_MAX(TIMER_CLOCKEVENT)); 47 writel(NETX_LATCH, NETX_GPIO_COUNTER_MAX(TIMER_CLOCKEVENT));
45 tmode = NETX_GPIO_COUNTER_CTRL_RST_EN | 48 tmode = NETX_GPIO_COUNTER_CTRL_RST_EN |
46 NETX_GPIO_COUNTER_CTRL_IRQ_EN | 49 NETX_GPIO_COUNTER_CTRL_IRQ_EN |
47 NETX_GPIO_COUNTER_CTRL_RUN; 50 NETX_GPIO_COUNTER_CTRL_RUN;
@@ -114,7 +117,7 @@ void __init netx_timer_init(void)
114 /* Reset the timer value to zero */ 117 /* Reset the timer value to zero */
115 writel(0, NETX_GPIO_COUNTER_CURRENT(0)); 118 writel(0, NETX_GPIO_COUNTER_CURRENT(0));
116 119
117 writel(LATCH, NETX_GPIO_COUNTER_MAX(0)); 120 writel(NETX_LATCH, NETX_GPIO_COUNTER_MAX(0));
118 121
119 /* acknowledge interrupt */ 122 /* acknowledge interrupt */
120 writel(COUNTER_BIT(0), NETX_GPIO_IRQ); 123 writel(COUNTER_BIT(0), NETX_GPIO_IRQ);
@@ -137,11 +140,11 @@ void __init netx_timer_init(void)
137 NETX_GPIO_COUNTER_CTRL(TIMER_CLOCKSOURCE)); 140 NETX_GPIO_COUNTER_CTRL(TIMER_CLOCKSOURCE));
138 141
139 clocksource_mmio_init(NETX_GPIO_COUNTER_CURRENT(TIMER_CLOCKSOURCE), 142 clocksource_mmio_init(NETX_GPIO_COUNTER_CURRENT(TIMER_CLOCKSOURCE),
140 "netx_timer", CLOCK_TICK_RATE, 200, 32, clocksource_mmio_readl_up); 143 "netx_timer", NETX_CLOCK_FREQ, 200, 32, clocksource_mmio_readl_up);
141 144
142 /* with max_delta_ns >= delta2ns(0x800) the system currently runs fine. 145 /* with max_delta_ns >= delta2ns(0x800) the system currently runs fine.
143 * Adding some safety ... */ 146 * Adding some safety ... */
144 netx_clockevent.cpumask = cpumask_of(0); 147 netx_clockevent.cpumask = cpumask_of(0);
145 clockevents_config_and_register(&netx_clockevent, CLOCK_TICK_RATE, 148 clockevents_config_and_register(&netx_clockevent, NETX_CLOCK_FREQ,
146 0xa00, 0xfffffffe); 149 0xa00, 0xfffffffe);
147} 150}
diff --git a/arch/arm/mach-omap1/include/mach/timex.h b/arch/arm/mach-omap1/include/mach/timex.h
deleted file mode 100644
index 4793790d53cc..000000000000
--- a/arch/arm/mach-omap1/include/mach/timex.h
+++ /dev/null
@@ -1,5 +0,0 @@
1/*
2 * arch/arm/mach-omap1/include/mach/timex.h
3 */
4
5#include <plat/timex.h>
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 653b489479e0..e2ce4f8366a7 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -54,7 +54,7 @@ config SOC_OMAP5
54 select ARM_GIC 54 select ARM_GIC
55 select CPU_V7 55 select CPU_V7
56 select HAVE_ARM_SCU if SMP 56 select HAVE_ARM_SCU if SMP
57 select HAVE_ARM_TWD if LOCAL_TIMERS 57 select HAVE_ARM_TWD if SMP
58 select HAVE_SMP 58 select HAVE_SMP
59 select HAVE_ARM_ARCH_TIMER 59 select HAVE_ARM_ARCH_TIMER
60 select ARM_ERRATA_798181 if SMP 60 select ARM_ERRATA_798181 if SMP
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c
index 174caecc3186..4349e82debfe 100644
--- a/arch/arm/mach-omap2/gpmc-nand.c
+++ b/arch/arm/mach-omap2/gpmc-nand.c
@@ -45,24 +45,31 @@ static struct platform_device gpmc_nand_device = {
45 45
46static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) 46static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt)
47{ 47{
48 /* support only OMAP3 class */ 48 /* platforms which support all ECC schemes */
49 if (!cpu_is_omap34xx() && !soc_is_am33xx()) { 49 if (soc_is_am33xx() || cpu_is_omap44xx() ||
50 pr_err("BCH ecc is not supported on this CPU\n"); 50 soc_is_omap54xx() || soc_is_dra7xx())
51 return 1;
52
53 /* OMAP3xxx do not have ELM engine, so cannot support ECC schemes
54 * which require H/W based ECC error detection */
55 if ((cpu_is_omap34xx() || cpu_is_omap3630()) &&
56 ((ecc_opt == OMAP_ECC_BCH4_CODE_HW) ||
57 (ecc_opt == OMAP_ECC_BCH8_CODE_HW)))
51 return 0; 58 return 0;
52 }
53 59
54 /* 60 /*
55 * For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1 61 * For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1
56 * and AM33xx derivates. Other chips may be added if confirmed to work. 62 * and AM33xx derivates. Other chips may be added if confirmed to work.
57 */ 63 */
58 if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW) && 64 if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW) &&
59 (!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0)) && 65 (!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0)))
60 (!soc_is_am33xx())) {
61 pr_err("BCH 4-bit mode is not supported on this CPU\n");
62 return 0; 66 return 0;
63 }
64 67
65 return 1; 68 /* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */
69 if (ecc_opt == OMAP_ECC_HAM1_CODE_HW)
70 return 1;
71 else
72 return 0;
66} 73}
67 74
68/* This function will go away once the device-tree convertion is complete */ 75/* This function will go away once the device-tree convertion is complete */
@@ -133,8 +140,10 @@ int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data,
133 140
134 gpmc_update_nand_reg(&gpmc_nand_data->reg, gpmc_nand_data->cs); 141 gpmc_update_nand_reg(&gpmc_nand_data->reg, gpmc_nand_data->cs);
135 142
136 if (!gpmc_hwecc_bch_capable(gpmc_nand_data->ecc_opt)) 143 if (!gpmc_hwecc_bch_capable(gpmc_nand_data->ecc_opt)) {
144 dev_err(dev, "Unsupported NAND ECC scheme selected\n");
137 return -EINVAL; 145 return -EINVAL;
146 }
138 147
139 err = platform_device_register(&gpmc_nand_device); 148 err = platform_device_register(&gpmc_nand_device);
140 if (err < 0) { 149 if (err < 0) {
diff --git a/arch/arm/mach-omap2/include/mach/timex.h b/arch/arm/mach-omap2/include/mach/timex.h
deleted file mode 100644
index de9f8fc40e7c..000000000000
--- a/arch/arm/mach-omap2/include/mach/timex.h
+++ /dev/null
@@ -1,5 +0,0 @@
1/*
2 * arch/arm/mach-omap2/include/mach/timex.h
3 */
4
5#include <plat/timex.h>
diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
index 3d5b24dcd9a4..9723886c18ba 100644
--- a/arch/arm/mach-omap2/pdata-quirks.c
+++ b/arch/arm/mach-omap2/pdata-quirks.c
@@ -31,20 +31,6 @@ struct pdata_init {
31struct of_dev_auxdata omap_auxdata_lookup[]; 31struct of_dev_auxdata omap_auxdata_lookup[];
32static struct twl4030_gpio_platform_data twl_gpio_auxdata; 32static struct twl4030_gpio_platform_data twl_gpio_auxdata;
33 33
34/*
35 * Create alias for USB host PHY clock.
36 * Remove this when clock phandle can be provided via DT
37 */
38static void __init __used legacy_init_ehci_clk(char *clkname)
39{
40 int ret;
41
42 ret = clk_add_alias("main_clk", NULL, clkname, NULL);
43 if (ret)
44 pr_err("%s:Failed to add main_clk alias to %s :%d\n",
45 __func__, clkname, ret);
46}
47
48#if IS_ENABLED(CONFIG_WL12XX) 34#if IS_ENABLED(CONFIG_WL12XX)
49 35
50static struct wl12xx_platform_data wl12xx __initdata; 36static struct wl12xx_platform_data wl12xx __initdata;
@@ -99,7 +85,7 @@ static int omap3_sbc_t3730_twl_callback(struct device *dev,
99 int res; 85 int res;
100 86
101 res = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH, 87 res = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
102 "wlan rst"); 88 "wlan pwr");
103 if (res) 89 if (res)
104 return res; 90 return res;
105 91
@@ -108,6 +94,23 @@ static int omap3_sbc_t3730_twl_callback(struct device *dev,
108 return 0; 94 return 0;
109} 95}
110 96
97static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name)
98{
99 int err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, hub_name);
100
101 if (err) {
102 pr_err("SBC-T3x: %s reset gpio request failed: %d\n",
103 hub_name, err);
104 return;
105 }
106
107 gpio_export(gpio, 0);
108
109 udelay(10);
110 gpio_set_value(gpio, 1);
111 msleep(1);
112}
113
111static void __init omap3_sbc_t3730_twl_init(void) 114static void __init omap3_sbc_t3730_twl_init(void)
112{ 115{
113 twl_gpio_auxdata.setup = omap3_sbc_t3730_twl_callback; 116 twl_gpio_auxdata.setup = omap3_sbc_t3730_twl_callback;
@@ -115,10 +118,17 @@ static void __init omap3_sbc_t3730_twl_init(void)
115 118
116static void __init omap3_sbc_t3730_legacy_init(void) 119static void __init omap3_sbc_t3730_legacy_init(void)
117{ 120{
121 omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub");
118 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 136); 122 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 136);
119 omap_ads7846_init(1, 57, 0, NULL); 123 omap_ads7846_init(1, 57, 0, NULL);
120} 124}
121 125
126static void __init omap3_sbc_t3530_legacy_init(void)
127{
128 omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub");
129 omap_ads7846_init(1, 57, 0, NULL);
130}
131
122static void __init omap3_igep0020_legacy_init(void) 132static void __init omap3_igep0020_legacy_init(void)
123{ 133{
124 omap3_igep2_display_init_of(); 134 omap3_igep2_display_init_of();
@@ -160,7 +170,7 @@ static struct emac_platform_data am35xx_emac_pdata = {
160 .interrupt_disable = am35xx_disable_emac_int, 170 .interrupt_disable = am35xx_disable_emac_int,
161}; 171};
162 172
163static void __init am3517_evm_legacy_init(void) 173static void __init am35xx_emac_reset(void)
164{ 174{
165 u32 v; 175 u32 v;
166 176
@@ -169,6 +179,43 @@ static void __init am3517_evm_legacy_init(void)
169 omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET); 179 omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET);
170 omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ 180 omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */
171} 181}
182
183static struct gpio cm_t3517_wlan_gpios[] __initdata = {
184 { 56, GPIOF_OUT_INIT_HIGH, "wlan pwr" },
185 { 4, GPIOF_OUT_INIT_HIGH, "xcvr noe" },
186};
187
188static void __init omap3_sbc_t3517_wifi_init(void)
189{
190 int err = gpio_request_array(cm_t3517_wlan_gpios,
191 ARRAY_SIZE(cm_t3517_wlan_gpios));
192 if (err) {
193 pr_err("SBC-T3517: wl12xx gpios request failed: %d\n", err);
194 return;
195 }
196
197 gpio_export(cm_t3517_wlan_gpios[0].gpio, 0);
198 gpio_export(cm_t3517_wlan_gpios[1].gpio, 0);
199
200 msleep(100);
201 gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0);
202}
203
204static void __init omap3_sbc_t3517_legacy_init(void)
205{
206 omap3_sbc_t3x_usb_hub_init(152, "cm-t3517 usb hub");
207 omap3_sbc_t3x_usb_hub_init(98, "sb-t35 usb hub");
208 am35xx_emac_reset();
209 hsmmc2_internal_input_clk();
210 omap3_sbc_t3517_wifi_init();
211 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 145);
212 omap_ads7846_init(1, 57, 0, NULL);
213}
214
215static void __init am3517_evm_legacy_init(void)
216{
217 am35xx_emac_reset();
218}
172#endif /* CONFIG_ARCH_OMAP3 */ 219#endif /* CONFIG_ARCH_OMAP3 */
173 220
174#ifdef CONFIG_ARCH_OMAP4 221#ifdef CONFIG_ARCH_OMAP4
@@ -182,15 +229,20 @@ static void __init omap4_sdp_legacy_init(void)
182static void __init omap4_panda_legacy_init(void) 229static void __init omap4_panda_legacy_init(void)
183{ 230{
184 omap4_panda_display_init_of(); 231 omap4_panda_display_init_of();
185 legacy_init_ehci_clk("auxclk3_ck");
186 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 53); 232 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 53);
187} 233}
188#endif 234#endif
189 235
236#ifdef CONFIG_SOC_AM33XX
237static void __init am335x_evmsk_legacy_init(void)
238{
239 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 31);
240}
241#endif
242
190#ifdef CONFIG_SOC_OMAP5 243#ifdef CONFIG_SOC_OMAP5
191static void __init omap5_uevm_legacy_init(void) 244static void __init omap5_uevm_legacy_init(void)
192{ 245{
193 legacy_init_ehci_clk("auxclk1_ck");
194} 246}
195#endif 247#endif
196 248
@@ -258,6 +310,8 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
258 */ 310 */
259static struct pdata_init pdata_quirks[] __initdata = { 311static struct pdata_init pdata_quirks[] __initdata = {
260#ifdef CONFIG_ARCH_OMAP3 312#ifdef CONFIG_ARCH_OMAP3
313 { "compulab,omap3-sbc-t3517", omap3_sbc_t3517_legacy_init, },
314 { "compulab,omap3-sbc-t3530", omap3_sbc_t3530_legacy_init, },
261 { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, }, 315 { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, },
262 { "nokia,omap3-n900", hsmmc2_internal_input_clk, }, 316 { "nokia,omap3-n900", hsmmc2_internal_input_clk, },
263 { "nokia,omap3-n9", hsmmc2_internal_input_clk, }, 317 { "nokia,omap3-n9", hsmmc2_internal_input_clk, },
@@ -271,6 +325,9 @@ static struct pdata_init pdata_quirks[] __initdata = {
271 { "ti,omap4-sdp", omap4_sdp_legacy_init, }, 325 { "ti,omap4-sdp", omap4_sdp_legacy_init, },
272 { "ti,omap4-panda", omap4_panda_legacy_init, }, 326 { "ti,omap4-panda", omap4_panda_legacy_init, },
273#endif 327#endif
328#ifdef CONFIG_SOC_AM33XX
329 { "ti,am335x-evmsk", am335x_evmsk_legacy_init, },
330#endif
274#ifdef CONFIG_SOC_OMAP5 331#ifdef CONFIG_SOC_OMAP5
275 { "ti,omap5-uevm", omap5_uevm_legacy_init, }, 332 { "ti,omap5-uevm", omap5_uevm_legacy_init, },
276#endif 333#endif
diff --git a/arch/arm/mach-orion5x/include/mach/timex.h b/arch/arm/mach-orion5x/include/mach/timex.h
deleted file mode 100644
index 4c69820e0810..000000000000
--- a/arch/arm/mach-orion5x/include/mach/timex.h
+++ /dev/null
@@ -1,11 +0,0 @@
1/*
2 * arch/arm/mach-orion5x/include/mach/timex.h
3 *
4 * Tzachi Perelstein <tzachi@marvell.com>
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
9 */
10
11#define CLOCK_TICK_RATE (100 * HZ)
diff --git a/arch/arm/mach-pxa/am300epd.c b/arch/arm/mach-pxa/am300epd.c
index c9f309ae88c5..8b90c4f2d430 100644
--- a/arch/arm/mach-pxa/am300epd.c
+++ b/arch/arm/mach-pxa/am300epd.c
@@ -30,6 +30,7 @@
30 30
31#include <mach/gumstix.h> 31#include <mach/gumstix.h>
32#include <mach/mfp-pxa25x.h> 32#include <mach/mfp-pxa25x.h>
33#include <mach/irqs.h>
33#include <linux/platform_data/video-pxafb.h> 34#include <linux/platform_data/video-pxafb.h>
34 35
35#include "generic.h" 36#include "generic.h"
diff --git a/arch/arm/mach-pxa/include/mach/balloon3.h b/arch/arm/mach-pxa/include/mach/balloon3.h
index 954641e6c8b1..1b0825911e62 100644
--- a/arch/arm/mach-pxa/include/mach/balloon3.h
+++ b/arch/arm/mach-pxa/include/mach/balloon3.h
@@ -14,6 +14,8 @@
14#ifndef ASM_ARCH_BALLOON3_H 14#ifndef ASM_ARCH_BALLOON3_H
15#define ASM_ARCH_BALLOON3_H 15#define ASM_ARCH_BALLOON3_H
16 16
17#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
18
17enum balloon3_features { 19enum balloon3_features {
18 BALLOON3_FEATURE_OHCI, 20 BALLOON3_FEATURE_OHCI,
19 BALLOON3_FEATURE_MMC, 21 BALLOON3_FEATURE_MMC,
diff --git a/arch/arm/mach-pxa/include/mach/corgi.h b/arch/arm/mach-pxa/include/mach/corgi.h
index f3c3493b468d..c030d955bbd7 100644
--- a/arch/arm/mach-pxa/include/mach/corgi.h
+++ b/arch/arm/mach-pxa/include/mach/corgi.h
@@ -13,6 +13,7 @@
13#ifndef __ASM_ARCH_CORGI_H 13#ifndef __ASM_ARCH_CORGI_H
14#define __ASM_ARCH_CORGI_H 1 14#define __ASM_ARCH_CORGI_H 1
15 15
16#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
16 17
17/* 18/*
18 * Corgi (Non Standard) GPIO Definitions 19 * Corgi (Non Standard) GPIO Definitions
diff --git a/arch/arm/mach-pxa/include/mach/csb726.h b/arch/arm/mach-pxa/include/mach/csb726.h
index 2628e7b72116..00cfbbbf73f7 100644
--- a/arch/arm/mach-pxa/include/mach/csb726.h
+++ b/arch/arm/mach-pxa/include/mach/csb726.h
@@ -11,6 +11,8 @@
11#ifndef CSB726_H 11#ifndef CSB726_H
12#define CSB726_H 12#define CSB726_H
13 13
14#include "irqs.h" /* PXA_GPIO_TO_IRQ */
15
14#define CSB726_GPIO_IRQ_LAN 52 16#define CSB726_GPIO_IRQ_LAN 52
15#define CSB726_GPIO_IRQ_SM501 53 17#define CSB726_GPIO_IRQ_SM501 53
16#define CSB726_GPIO_MMC_DETECT 100 18#define CSB726_GPIO_MMC_DETECT 100
diff --git a/arch/arm/mach-pxa/include/mach/gumstix.h b/arch/arm/mach-pxa/include/mach/gumstix.h
index dba14b6503ad..f7df27bbb42e 100644
--- a/arch/arm/mach-pxa/include/mach/gumstix.h
+++ b/arch/arm/mach-pxa/include/mach/gumstix.h
@@ -6,6 +6,7 @@
6 * published by the Free Software Foundation. 6 * published by the Free Software Foundation.
7 */ 7 */
8 8
9#include "irqs.h" /* PXA_GPIO_TO_IRQ */
9 10
10/* BTRESET - Reset line to Bluetooth module, active low signal. */ 11/* BTRESET - Reset line to Bluetooth module, active low signal. */
11#define GPIO_GUMSTIX_BTRESET 7 12#define GPIO_GUMSTIX_BTRESET 7
diff --git a/arch/arm/mach-pxa/include/mach/idp.h b/arch/arm/mach-pxa/include/mach/idp.h
index 22a96f87232b..7e63f4680271 100644
--- a/arch/arm/mach-pxa/include/mach/idp.h
+++ b/arch/arm/mach-pxa/include/mach/idp.h
@@ -23,6 +23,7 @@
23 * IDP hardware. 23 * IDP hardware.
24 */ 24 */
25 25
26#include "irqs.h" /* PXA_GPIO_TO_IRQ */
26 27
27#define IDP_FLASH_PHYS (PXA_CS0_PHYS) 28#define IDP_FLASH_PHYS (PXA_CS0_PHYS)
28#define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS) 29#define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS)
diff --git a/arch/arm/mach-pxa/include/mach/palmld.h b/arch/arm/mach-pxa/include/mach/palmld.h
index 2c4471336570..b184f296023b 100644
--- a/arch/arm/mach-pxa/include/mach/palmld.h
+++ b/arch/arm/mach-pxa/include/mach/palmld.h
@@ -13,6 +13,8 @@
13#ifndef _INCLUDE_PALMLD_H_ 13#ifndef _INCLUDE_PALMLD_H_
14#define _INCLUDE_PALMLD_H_ 14#define _INCLUDE_PALMLD_H_
15 15
16#include "irqs.h" /* PXA_GPIO_TO_IRQ */
17
16/** HERE ARE GPIOs **/ 18/** HERE ARE GPIOs **/
17 19
18/* GPIOs */ 20/* GPIOs */
diff --git a/arch/arm/mach-pxa/include/mach/palmt5.h b/arch/arm/mach-pxa/include/mach/palmt5.h
index 0bd4f036c72f..e342c5921405 100644
--- a/arch/arm/mach-pxa/include/mach/palmt5.h
+++ b/arch/arm/mach-pxa/include/mach/palmt5.h
@@ -15,6 +15,8 @@
15#ifndef _INCLUDE_PALMT5_H_ 15#ifndef _INCLUDE_PALMT5_H_
16#define _INCLUDE_PALMT5_H_ 16#define _INCLUDE_PALMT5_H_
17 17
18#include "irqs.h" /* PXA_GPIO_TO_IRQ */
19
18/** HERE ARE GPIOs **/ 20/** HERE ARE GPIOs **/
19 21
20/* GPIOs */ 22/* GPIOs */
diff --git a/arch/arm/mach-pxa/include/mach/palmtc.h b/arch/arm/mach-pxa/include/mach/palmtc.h
index c383a21680b6..81c727b3cfd2 100644
--- a/arch/arm/mach-pxa/include/mach/palmtc.h
+++ b/arch/arm/mach-pxa/include/mach/palmtc.h
@@ -16,6 +16,8 @@
16#ifndef _INCLUDE_PALMTC_H_ 16#ifndef _INCLUDE_PALMTC_H_
17#define _INCLUDE_PALMTC_H_ 17#define _INCLUDE_PALMTC_H_
18 18
19#include "irqs.h" /* PXA_GPIO_TO_IRQ */
20
19/** HERE ARE GPIOs **/ 21/** HERE ARE GPIOs **/
20 22
21/* GPIOs */ 23/* GPIOs */
diff --git a/arch/arm/mach-pxa/include/mach/palmtx.h b/arch/arm/mach-pxa/include/mach/palmtx.h
index f2e530380253..92bc1f05300d 100644
--- a/arch/arm/mach-pxa/include/mach/palmtx.h
+++ b/arch/arm/mach-pxa/include/mach/palmtx.h
@@ -16,6 +16,8 @@
16#ifndef _INCLUDE_PALMTX_H_ 16#ifndef _INCLUDE_PALMTX_H_
17#define _INCLUDE_PALMTX_H_ 17#define _INCLUDE_PALMTX_H_
18 18
19#include "irqs.h" /* PXA_GPIO_TO_IRQ */
20
19/** HERE ARE GPIOs **/ 21/** HERE ARE GPIOs **/
20 22
21/* GPIOs */ 23/* GPIOs */
diff --git a/arch/arm/mach-pxa/include/mach/pcm027.h b/arch/arm/mach-pxa/include/mach/pcm027.h
index 6bf28de228bd..86ebd7b6c960 100644
--- a/arch/arm/mach-pxa/include/mach/pcm027.h
+++ b/arch/arm/mach-pxa/include/mach/pcm027.h
@@ -23,6 +23,8 @@
23 * Definitions of CPU card resources only 23 * Definitions of CPU card resources only
24 */ 24 */
25 25
26#include "irqs.h" /* PXA_GPIO_TO_IRQ */
27
26/* phyCORE-PXA270 (PCM027) Interrupts */ 28/* phyCORE-PXA270 (PCM027) Interrupts */
27#define PCM027_IRQ(x) (IRQ_BOARD_START + (x)) 29#define PCM027_IRQ(x) (IRQ_BOARD_START + (x))
28#define PCM027_BTDET_IRQ PCM027_IRQ(0) 30#define PCM027_BTDET_IRQ PCM027_IRQ(0)
diff --git a/arch/arm/mach-pxa/include/mach/pcm990_baseboard.h b/arch/arm/mach-pxa/include/mach/pcm990_baseboard.h
index 0260aaa2fc17..7e544c14967e 100644
--- a/arch/arm/mach-pxa/include/mach/pcm990_baseboard.h
+++ b/arch/arm/mach-pxa/include/mach/pcm990_baseboard.h
@@ -20,6 +20,7 @@
20 */ 20 */
21 21
22#include <mach/pcm027.h> 22#include <mach/pcm027.h>
23#include "irqs.h" /* PXA_GPIO_TO_IRQ */
23 24
24/* 25/*
25 * definitions relevant only when the PCM-990 26 * definitions relevant only when the PCM-990
diff --git a/arch/arm/mach-pxa/include/mach/poodle.h b/arch/arm/mach-pxa/include/mach/poodle.h
index f32ff75dcca8..b56b19351a03 100644
--- a/arch/arm/mach-pxa/include/mach/poodle.h
+++ b/arch/arm/mach-pxa/include/mach/poodle.h
@@ -15,6 +15,8 @@
15#ifndef __ASM_ARCH_POODLE_H 15#ifndef __ASM_ARCH_POODLE_H
16#define __ASM_ARCH_POODLE_H 1 16#define __ASM_ARCH_POODLE_H 1
17 17
18#include "irqs.h" /* PXA_GPIO_TO_IRQ */
19
18/* 20/*
19 * GPIOs 21 * GPIOs
20 */ 22 */
diff --git a/arch/arm/mach-pxa/include/mach/spitz.h b/arch/arm/mach-pxa/include/mach/spitz.h
index 0bfe6507c95d..25c9f62e46aa 100644
--- a/arch/arm/mach-pxa/include/mach/spitz.h
+++ b/arch/arm/mach-pxa/include/mach/spitz.h
@@ -15,8 +15,8 @@
15#define __ASM_ARCH_SPITZ_H 1 15#define __ASM_ARCH_SPITZ_H 1
16#endif 16#endif
17 17
18#include "irqs.h" /* PXA_NR_BUILTIN_GPIO, PXA_GPIO_TO_IRQ */
18#include <linux/fb.h> 19#include <linux/fb.h>
19#include <linux/gpio.h>
20 20
21/* Spitz/Akita GPIOs */ 21/* Spitz/Akita GPIOs */
22 22
diff --git a/arch/arm/mach-pxa/include/mach/timex.h b/arch/arm/mach-pxa/include/mach/timex.h
deleted file mode 100644
index af6760a50e1a..000000000000
--- a/arch/arm/mach-pxa/include/mach/timex.h
+++ /dev/null
@@ -1,34 +0,0 @@
1/*
2 * arch/arm/mach-pxa/include/mach/timex.h
3 *
4 * Author: Nicolas Pitre
5 * Created: Jun 15, 2001
6 * Copyright: MontaVista Software Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13/* Various drivers are still using the constant of CLOCK_TICK_RATE, for
14 * those drivers to at least work, the definition is provided here.
15 *
16 * NOTE: this is no longer accurate when multiple processors and boards
17 * are selected, newer drivers should not depend on this any more. Use
18 * either the clocksource/clockevent or get this at run-time by calling
19 * get_clock_tick_rate() (as defined in generic.c).
20 */
21
22#if defined(CONFIG_PXA25x)
23/* PXA250/210 timer base */
24#define CLOCK_TICK_RATE 3686400
25#elif defined(CONFIG_PXA27x)
26/* PXA27x timer base */
27#ifdef CONFIG_MACH_MAINSTONE
28#define CLOCK_TICK_RATE 3249600
29#else
30#define CLOCK_TICK_RATE 3250000
31#endif
32#else
33#define CLOCK_TICK_RATE 3250000
34#endif
diff --git a/arch/arm/mach-pxa/include/mach/tosa.h b/arch/arm/mach-pxa/include/mach/tosa.h
index 2bb0e862598c..0497d95cef25 100644
--- a/arch/arm/mach-pxa/include/mach/tosa.h
+++ b/arch/arm/mach-pxa/include/mach/tosa.h
@@ -13,6 +13,8 @@
13#ifndef _ASM_ARCH_TOSA_H_ 13#ifndef _ASM_ARCH_TOSA_H_
14#define _ASM_ARCH_TOSA_H_ 1 14#define _ASM_ARCH_TOSA_H_ 1
15 15
16#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
17
16/* TOSA Chip selects */ 18/* TOSA Chip selects */
17#define TOSA_LCDC_PHYS PXA_CS4_PHYS 19#define TOSA_LCDC_PHYS PXA_CS4_PHYS
18/* Internel Scoop */ 20/* Internel Scoop */
diff --git a/arch/arm/mach-pxa/include/mach/trizeps4.h b/arch/arm/mach-pxa/include/mach/trizeps4.h
index d2ca01053f69..ae3ca013afab 100644
--- a/arch/arm/mach-pxa/include/mach/trizeps4.h
+++ b/arch/arm/mach-pxa/include/mach/trizeps4.h
@@ -10,6 +10,8 @@
10#ifndef _TRIPEPS4_H_ 10#ifndef _TRIPEPS4_H_
11#define _TRIPEPS4_H_ 11#define _TRIPEPS4_H_
12 12
13#include "irqs.h" /* PXA_GPIO_TO_IRQ */
14
13/* physical memory regions */ 15/* physical memory regions */
14#define TRIZEPS4_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */ 16#define TRIZEPS4_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
15#define TRIZEPS4_DISK_PHYS (PXA_CS1_PHYS) /* Disk On Chip region */ 17#define TRIZEPS4_DISK_PHYS (PXA_CS1_PHYS) /* Disk On Chip region */
diff --git a/arch/arm/mach-qcom/Kconfig b/arch/arm/mach-qcom/Kconfig
new file mode 100644
index 000000000000..a028be234334
--- /dev/null
+++ b/arch/arm/mach-qcom/Kconfig
@@ -0,0 +1,33 @@
1config ARCH_QCOM
2 bool "Qualcomm Support" if ARCH_MULTI_V7
3 select ARCH_REQUIRE_GPIOLIB
4 select ARM_GIC
5 select CLKSRC_OF
6 select GENERIC_CLOCKEVENTS
7 select HAVE_SMP
8 select QCOM_SCM if SMP
9 help
10 Support for Qualcomm's devicetree based systems.
11
12if ARCH_QCOM
13
14menu "Qualcomm SoC Selection"
15
16config ARCH_MSM8X60
17 bool "Enable support for MSM8X60"
18 select CLKSRC_QCOM
19
20config ARCH_MSM8960
21 bool "Enable support for MSM8960"
22 select CLKSRC_QCOM
23
24config ARCH_MSM8974
25 bool "Enable support for MSM8974"
26 select HAVE_ARM_ARCH_TIMER
27
28endmenu
29
30config QCOM_SCM
31 bool
32
33endif
diff --git a/arch/arm/mach-qcom/Makefile b/arch/arm/mach-qcom/Makefile
new file mode 100644
index 000000000000..8f756ae1ae31
--- /dev/null
+++ b/arch/arm/mach-qcom/Makefile
@@ -0,0 +1,5 @@
1obj-y := board.o
2obj-$(CONFIG_SMP) += platsmp.o
3obj-$(CONFIG_QCOM_SCM) += scm.o scm-boot.o
4
5CFLAGS_scm.o :=$(call as-instr,.arch_extension sec,-DREQUIRES_SEC=1)
diff --git a/arch/arm/mach-msm/board-dt.c b/arch/arm/mach-qcom/board.c
index 1f11d93e700e..830f69c3a3ce 100644
--- a/arch/arm/mach-msm/board-dt.c
+++ b/arch/arm/mach-qcom/board.c
@@ -1,4 +1,4 @@
1/* Copyright (c) 2010-2012,2013 The Linux Foundation. All rights reserved. 1/* Copyright (c) 2010-2014 The Linux Foundation. All rights reserved.
2 * 2 *
3 * This program is free software; you can redistribute it and/or modify 3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and 4 * it under the terms of the GNU General Public License version 2 and
@@ -17,10 +17,9 @@
17#include <asm/mach/arch.h> 17#include <asm/mach/arch.h>
18#include <asm/mach/map.h> 18#include <asm/mach/map.h>
19 19
20#include "common.h" 20extern struct smp_operations qcom_smp_ops;
21 21
22static const char * const msm_dt_match[] __initconst = { 22static const char * const qcom_dt_match[] __initconst = {
23 "qcom,msm8660-fluid",
24 "qcom,msm8660-surf", 23 "qcom,msm8660-surf",
25 "qcom,msm8960-cdp", 24 "qcom,msm8960-cdp",
26 NULL 25 NULL
@@ -31,11 +30,11 @@ static const char * const apq8074_dt_match[] __initconst = {
31 NULL 30 NULL
32}; 31};
33 32
34DT_MACHINE_START(MSM_DT, "Qualcomm MSM (Flattened Device Tree)") 33DT_MACHINE_START(QCOM_DT, "Qualcomm (Flattened Device Tree)")
35 .smp = smp_ops(msm_smp_ops), 34 .smp = smp_ops(qcom_smp_ops),
36 .dt_compat = msm_dt_match, 35 .dt_compat = qcom_dt_match,
37MACHINE_END 36MACHINE_END
38 37
39DT_MACHINE_START(APQ_DT, "Qualcomm MSM (Flattened Device Tree)") 38DT_MACHINE_START(APQ_DT, "Qualcomm (Flattened Device Tree)")
40 .dt_compat = apq8074_dt_match, 39 .dt_compat = apq8074_dt_match,
41MACHINE_END 40MACHINE_END
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-qcom/platsmp.c
index f10a1f58fde9..9c53ea70550d 100644
--- a/arch/arm/mach-msm/platsmp.c
+++ b/arch/arm/mach-qcom/platsmp.c
@@ -2,6 +2,7 @@
2 * Copyright (C) 2002 ARM Ltd. 2 * Copyright (C) 2002 ARM Ltd.
3 * All Rights Reserved 3 * All Rights Reserved
4 * Copyright (c) 2010, Code Aurora Forum. All rights reserved. 4 * Copyright (c) 2010, Code Aurora Forum. All rights reserved.
5 * Copyright (c) 2014 The Linux Foundation. All rights reserved.
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as 8 * it under the terms of the GNU General Public License version 2 as
@@ -12,42 +13,38 @@
12#include <linux/errno.h> 13#include <linux/errno.h>
13#include <linux/delay.h> 14#include <linux/delay.h>
14#include <linux/device.h> 15#include <linux/device.h>
15#include <linux/jiffies.h>
16#include <linux/smp.h> 16#include <linux/smp.h>
17#include <linux/io.h> 17#include <linux/io.h>
18 18
19#include <asm/cacheflush.h>
20#include <asm/cputype.h> 19#include <asm/cputype.h>
21#include <asm/mach-types.h>
22#include <asm/smp_plat.h> 20#include <asm/smp_plat.h>
23 21
24#include "scm-boot.h" 22#include "scm-boot.h"
25#include "common.h"
26 23
27#define VDD_SC1_ARRAY_CLAMP_GFS_CTL 0x15A0 24#define VDD_SC1_ARRAY_CLAMP_GFS_CTL 0x15A0
28#define SCSS_CPU1CORE_RESET 0xD80 25#define SCSS_CPU1CORE_RESET 0xD80
29#define SCSS_DBG_STATUS_CORE_PWRDUP 0xE64 26#define SCSS_DBG_STATUS_CORE_PWRDUP 0xE64
30 27
31extern void msm_secondary_startup(void); 28extern void secondary_startup(void);
32 29
33static DEFINE_SPINLOCK(boot_lock); 30static DEFINE_SPINLOCK(boot_lock);
34 31
32#ifdef CONFIG_HOTPLUG_CPU
33static void __ref qcom_cpu_die(unsigned int cpu)
34{
35 wfi();
36}
37#endif
38
35static inline int get_core_count(void) 39static inline int get_core_count(void)
36{ 40{
37 /* 1 + the PART[1:0] field of MIDR */ 41 /* 1 + the PART[1:0] field of MIDR */
38 return ((read_cpuid_id() >> 4) & 3) + 1; 42 return ((read_cpuid_id() >> 4) & 3) + 1;
39} 43}
40 44
41static void msm_secondary_init(unsigned int cpu) 45static void qcom_secondary_init(unsigned int cpu)
42{ 46{
43 /* 47 /*
44 * let the primary processor know we're out of the
45 * pen, then head off into the C entry point
46 */
47 pen_release = -1;
48 smp_wmb();
49
50 /*
51 * Synchronise with the boot thread. 48 * Synchronise with the boot thread.
52 */ 49 */
53 spin_lock(&boot_lock); 50 spin_lock(&boot_lock);
@@ -57,7 +54,7 @@ static void msm_secondary_init(unsigned int cpu)
57static void prepare_cold_cpu(unsigned int cpu) 54static void prepare_cold_cpu(unsigned int cpu)
58{ 55{
59 int ret; 56 int ret;
60 ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup), 57 ret = scm_set_boot_addr(virt_to_phys(secondary_startup),
61 SCM_FLAG_COLDBOOT_CPU1); 58 SCM_FLAG_COLDBOOT_CPU1);
62 if (ret == 0) { 59 if (ret == 0) {
63 void __iomem *sc1_base_ptr; 60 void __iomem *sc1_base_ptr;
@@ -73,9 +70,8 @@ static void prepare_cold_cpu(unsigned int cpu)
73 "address\n"); 70 "address\n");
74} 71}
75 72
76static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle) 73static int qcom_boot_secondary(unsigned int cpu, struct task_struct *idle)
77{ 74{
78 unsigned long timeout;
79 static int cold_boot_done; 75 static int cold_boot_done;
80 76
81 /* Only need to bring cpu out of reset this way once */ 77 /* Only need to bring cpu out of reset this way once */
@@ -91,39 +87,19 @@ static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
91 spin_lock(&boot_lock); 87 spin_lock(&boot_lock);
92 88
93 /* 89 /*
94 * The secondary processor is waiting to be released from
95 * the holding pen - release it, then wait for it to flag
96 * that it has been released by resetting pen_release.
97 *
98 * Note that "pen_release" is the hardware CPU ID, whereas
99 * "cpu" is Linux's internal ID.
100 */
101 pen_release = cpu_logical_map(cpu);
102 sync_cache_w(&pen_release);
103
104 /*
105 * Send the secondary CPU a soft interrupt, thereby causing 90 * Send the secondary CPU a soft interrupt, thereby causing
106 * the boot monitor to read the system wide flags register, 91 * the boot monitor to read the system wide flags register,
107 * and branch to the address found there. 92 * and branch to the address found there.
108 */ 93 */
109 arch_send_wakeup_ipi_mask(cpumask_of(cpu)); 94 arch_send_wakeup_ipi_mask(cpumask_of(cpu));
110 95
111 timeout = jiffies + (1 * HZ);
112 while (time_before(jiffies, timeout)) {
113 smp_rmb();
114 if (pen_release == -1)
115 break;
116
117 udelay(10);
118 }
119
120 /* 96 /*
121 * now the secondary core is starting up let it run its 97 * now the secondary core is starting up let it run its
122 * calibrations, then wait for it to finish 98 * calibrations, then wait for it to finish
123 */ 99 */
124 spin_unlock(&boot_lock); 100 spin_unlock(&boot_lock);
125 101
126 return pen_release != -1 ? -ENOSYS : 0; 102 return 0;
127} 103}
128 104
129/* 105/*
@@ -132,7 +108,7 @@ static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
132 * does not support the ARM SCU, so just set the possible cpu mask to 108 * does not support the ARM SCU, so just set the possible cpu mask to
133 * NR_CPUS. 109 * NR_CPUS.
134 */ 110 */
135static void __init msm_smp_init_cpus(void) 111static void __init qcom_smp_init_cpus(void)
136{ 112{
137 unsigned int i, ncores = get_core_count(); 113 unsigned int i, ncores = get_core_count();
138 114
@@ -146,16 +122,16 @@ static void __init msm_smp_init_cpus(void)
146 set_cpu_possible(i, true); 122 set_cpu_possible(i, true);
147} 123}
148 124
149static void __init msm_smp_prepare_cpus(unsigned int max_cpus) 125static void __init qcom_smp_prepare_cpus(unsigned int max_cpus)
150{ 126{
151} 127}
152 128
153struct smp_operations msm_smp_ops __initdata = { 129struct smp_operations qcom_smp_ops __initdata = {
154 .smp_init_cpus = msm_smp_init_cpus, 130 .smp_init_cpus = qcom_smp_init_cpus,
155 .smp_prepare_cpus = msm_smp_prepare_cpus, 131 .smp_prepare_cpus = qcom_smp_prepare_cpus,
156 .smp_secondary_init = msm_secondary_init, 132 .smp_secondary_init = qcom_secondary_init,
157 .smp_boot_secondary = msm_boot_secondary, 133 .smp_boot_secondary = qcom_boot_secondary,
158#ifdef CONFIG_HOTPLUG_CPU 134#ifdef CONFIG_HOTPLUG_CPU
159 .cpu_die = msm_cpu_die, 135 .cpu_die = qcom_cpu_die,
160#endif 136#endif
161}; 137};
diff --git a/arch/arm/mach-msm/scm-boot.c b/arch/arm/mach-qcom/scm-boot.c
index 45cee3e469a5..45cee3e469a5 100644
--- a/arch/arm/mach-msm/scm-boot.c
+++ b/arch/arm/mach-qcom/scm-boot.c
diff --git a/arch/arm/mach-msm/scm-boot.h b/arch/arm/mach-qcom/scm-boot.h
index 7be32ff5d687..7be32ff5d687 100644
--- a/arch/arm/mach-msm/scm-boot.h
+++ b/arch/arm/mach-qcom/scm-boot.h
diff --git a/arch/arm/mach-msm/scm.c b/arch/arm/mach-qcom/scm.c
index c536fd6bf827..c536fd6bf827 100644
--- a/arch/arm/mach-msm/scm.c
+++ b/arch/arm/mach-qcom/scm.c
diff --git a/arch/arm/mach-msm/scm.h b/arch/arm/mach-qcom/scm.h
index 00b31ea58f29..00b31ea58f29 100644
--- a/arch/arm/mach-msm/scm.h
+++ b/arch/arm/mach-qcom/scm.h
diff --git a/arch/arm/mach-realview/include/mach/timex.h b/arch/arm/mach-realview/include/mach/timex.h
deleted file mode 100644
index 4eeb069373c2..000000000000
--- a/arch/arm/mach-realview/include/mach/timex.h
+++ /dev/null
@@ -1,23 +0,0 @@
1/*
2 * arch/arm/mach-realview/include/mach/timex.h
3 *
4 * RealView architecture timex specifications
5 *
6 * Copyright (C) 2003 ARM Limited
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#define CLOCK_TICK_RATE (50000000 / 16)
diff --git a/arch/arm/mach-rpc/include/mach/timex.h b/arch/arm/mach-rpc/include/mach/timex.h
deleted file mode 100644
index dd75e7387bbe..000000000000
--- a/arch/arm/mach-rpc/include/mach/timex.h
+++ /dev/null
@@ -1,17 +0,0 @@
1/*
2 * arch/arm/mach-rpc/include/mach/timex.h
3 *
4 * Copyright (C) 1997, 1998 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * RiscPC architecture timex specifications
11 */
12
13/*
14 * On the RiscPC, the clock ticks at 2MHz.
15 */
16#define CLOCK_TICK_RATE 2000000
17
diff --git a/arch/arm/mach-rpc/time.c b/arch/arm/mach-rpc/time.c
index 9a6def14df01..99363ae5cac7 100644
--- a/arch/arm/mach-rpc/time.c
+++ b/arch/arm/mach-rpc/time.c
@@ -24,6 +24,9 @@
24 24
25#include <asm/mach/time.h> 25#include <asm/mach/time.h>
26 26
27#define RPC_CLOCK_FREQ 2000000
28#define RPC_LATCH DIV_ROUND_CLOSEST(RPC_CLOCK_FREQ, HZ)
29
27static u32 ioc_timer_gettimeoffset(void) 30static u32 ioc_timer_gettimeoffset(void)
28{ 31{
29 unsigned int count1, count2, status; 32 unsigned int count1, count2, status;
@@ -46,23 +49,23 @@ static u32 ioc_timer_gettimeoffset(void)
46 * and count2. 49 * and count2.
47 */ 50 */
48 if (status & (1 << 5)) 51 if (status & (1 << 5))
49 offset -= LATCH; 52 offset -= RPC_LATCH;
50 } else if (count2 > count1) { 53 } else if (count2 > count1) {
51 /* 54 /*
52 * We have just had another interrupt between reading 55 * We have just had another interrupt between reading
53 * count1 and count2. 56 * count1 and count2.
54 */ 57 */
55 offset -= LATCH; 58 offset -= RPC_LATCH;
56 } 59 }
57 60
58 offset = (LATCH - offset) * (tick_nsec / 1000); 61 offset = (RPC_LATCH - offset) * (tick_nsec / 1000);
59 return ((offset + LATCH/2) / LATCH) * 1000; 62 return DIV_ROUND_CLOSEST(offset, RPC_LATCH) * 1000;
60} 63}
61 64
62void __init ioctime_init(void) 65void __init ioctime_init(void)
63{ 66{
64 ioc_writeb(LATCH & 255, IOC_T0LTCHL); 67 ioc_writeb(RPC_LATCH & 255, IOC_T0LTCHL);
65 ioc_writeb(LATCH >> 8, IOC_T0LTCHH); 68 ioc_writeb(RPC_LATCH >> 8, IOC_T0LTCHH);
66 ioc_writeb(0, IOC_T0GO); 69 ioc_writeb(0, IOC_T0GO);
67} 70}
68 71
diff --git a/arch/arm/mach-s3c24xx/include/mach/timex.h b/arch/arm/mach-s3c24xx/include/mach/timex.h
deleted file mode 100644
index fe9ca1ffd51b..000000000000
--- a/arch/arm/mach-s3c24xx/include/mach/timex.h
+++ /dev/null
@@ -1,24 +0,0 @@
1/* arch/arm/mach-s3c2410/include/mach/timex.h
2 *
3 * Copyright (c) 2003-2005 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * S3C2410 - time parameters
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11*/
12
13#ifndef __ASM_ARCH_TIMEX_H
14#define __ASM_ARCH_TIMEX_H
15
16/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
17 * a variable is useless. It seems as long as we make our timers an
18 * exact multiple of HZ, any value that makes a 1->1 correspondence
19 * for the time conversion functions to/from jiffies is acceptable.
20*/
21
22#define CLOCK_TICK_RATE 12000000
23
24#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-s3c64xx/include/mach/timex.h b/arch/arm/mach-s3c64xx/include/mach/timex.h
deleted file mode 100644
index fb2e8cd40829..000000000000
--- a/arch/arm/mach-s3c64xx/include/mach/timex.h
+++ /dev/null
@@ -1,24 +0,0 @@
1/* arch/arm/mach-s3c64xx/include/mach/timex.h
2 *
3 * Copyright (c) 2003-2005 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * S3C6400 - time parameters
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11*/
12
13#ifndef __ASM_ARCH_TIMEX_H
14#define __ASM_ARCH_TIMEX_H
15
16/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
17 * a variable is useless. It seems as long as we make our timers an
18 * exact multiple of HZ, any value that makes a 1->1 correspondence
19 * for the time conversion functions to/from jiffies is acceptable.
20*/
21
22#define CLOCK_TICK_RATE 12000000
23
24#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-s5p64x0/include/mach/timex.h b/arch/arm/mach-s5p64x0/include/mach/timex.h
deleted file mode 100644
index 4b91faa195a8..000000000000
--- a/arch/arm/mach-s5p64x0/include/mach/timex.h
+++ /dev/null
@@ -1,27 +0,0 @@
1/* linux/arch/arm/mach-s5p64x0/include/mach/timex.h
2 *
3 * Copyright (c) 2010 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com
5 *
6 * Copyright (c) 2003-2005 Simtec Electronics
7 * Ben Dooks <ben@simtec.co.uk>
8 *
9 * S5P64X0 - time parameters
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14*/
15
16#ifndef __ASM_ARCH_TIMEX_H
17#define __ASM_ARCH_TIMEX_H
18
19/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
20 * a variable is useless. It seems as long as we make our timers an
21 * exact multiple of HZ, any value that makes a 1->1 correspondence
22 * for the time conversion functions to/from jiffies is acceptable.
23*/
24
25#define CLOCK_TICK_RATE 12000000
26
27#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-s5pc100/include/mach/timex.h b/arch/arm/mach-s5pc100/include/mach/timex.h
deleted file mode 100644
index 47ffb17aff96..000000000000
--- a/arch/arm/mach-s5pc100/include/mach/timex.h
+++ /dev/null
@@ -1,24 +0,0 @@
1/* arch/arm/mach-s5pc100/include/mach/timex.h
2 *
3 * Copyright (c) 2003-2005 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * S3C6400 - time parameters
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11*/
12
13#ifndef __ASM_ARCH_TIMEX_H
14#define __ASM_ARCH_TIMEX_H
15
16/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
17 * a variable is useless. It seems as long as we make our timers an
18 * exact multiple of HZ, any value that makes a 1->1 correspondence
19 * for the time conversion functions to/from jiffies is acceptable.
20*/
21
22#define CLOCK_TICK_RATE 12000000
23
24#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-s5pv210/include/mach/timex.h b/arch/arm/mach-s5pv210/include/mach/timex.h
deleted file mode 100644
index 73dc85496a83..000000000000
--- a/arch/arm/mach-s5pv210/include/mach/timex.h
+++ /dev/null
@@ -1,29 +0,0 @@
1/* linux/arch/arm/mach-s5pv210/include/mach/timex.h
2 *
3 * Copyright (c) 2003-2010 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * Copyright (c) 2010 Samsung Electronics Co., Ltd.
7 * http://www.samsung.com/
8 *
9 * Based on arch/arm/mach-s5p6442/include/mach/timex.h
10 *
11 * S5PV210 - time parameters
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16*/
17
18#ifndef __ASM_ARCH_TIMEX_H
19#define __ASM_ARCH_TIMEX_H __FILE__
20
21/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
22 * a variable is useless. It seems as long as we make our timers an
23 * exact multiple of HZ, any value that makes a 1->1 correspondence
24 * for the time conversion functions to/from jiffies is acceptable.
25*/
26
27#define CLOCK_TICK_RATE 12000000
28
29#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-sa1100/include/mach/timex.h b/arch/arm/mach-sa1100/include/mach/timex.h
deleted file mode 100644
index 7a5d017b58b3..000000000000
--- a/arch/arm/mach-sa1100/include/mach/timex.h
+++ /dev/null
@@ -1,12 +0,0 @@
1/*
2 * arch/arm/mach-sa1100/include/mach/timex.h
3 *
4 * SA1100 architecture timex specifications
5 *
6 * Copyright (C) 1998
7 */
8
9/*
10 * SA1100 timer
11 */
12#define CLOCK_TICK_RATE 3686400
diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c
index 6fd4acb8f187..7aaac005e036 100644
--- a/arch/arm/mach-sa1100/time.c
+++ b/arch/arm/mach-sa1100/time.c
@@ -9,6 +9,7 @@
9 * 9 *
10 */ 10 */
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/kernel.h>
12#include <linux/errno.h> 13#include <linux/errno.h>
13#include <linux/interrupt.h> 14#include <linux/interrupt.h>
14#include <linux/irq.h> 15#include <linux/irq.h>
@@ -20,6 +21,9 @@
20#include <mach/hardware.h> 21#include <mach/hardware.h>
21#include <mach/irqs.h> 22#include <mach/irqs.h>
22 23
24#define SA1100_CLOCK_FREQ 3686400
25#define SA1100_LATCH DIV_ROUND_CLOSEST(SA1100_CLOCK_FREQ, HZ)
26
23static u64 notrace sa1100_read_sched_clock(void) 27static u64 notrace sa1100_read_sched_clock(void)
24{ 28{
25 return readl_relaxed(OSCR); 29 return readl_relaxed(OSCR);
@@ -93,7 +97,7 @@ static void sa1100_timer_resume(struct clock_event_device *cedev)
93 /* 97 /*
94 * OSMR0 is the system timer: make sure OSCR is sufficiently behind 98 * OSMR0 is the system timer: make sure OSCR is sufficiently behind
95 */ 99 */
96 writel_relaxed(OSMR0 - LATCH, OSCR); 100 writel_relaxed(OSMR0 - SA1100_LATCH, OSCR);
97} 101}
98#else 102#else
99#define sa1100_timer_suspend NULL 103#define sa1100_timer_suspend NULL
@@ -128,7 +132,7 @@ void __init sa1100_timer_init(void)
128 132
129 setup_irq(IRQ_OST0, &sa1100_timer_irq); 133 setup_irq(IRQ_OST0, &sa1100_timer_irq);
130 134
131 clocksource_mmio_init(OSCR, "oscr", CLOCK_TICK_RATE, 200, 32, 135 clocksource_mmio_init(OSCR, "oscr", SA1100_CLOCK_FREQ, 200, 32,
132 clocksource_mmio_readl_up); 136 clocksource_mmio_readl_up);
133 clockevents_config_and_register(&ckevt_sa1100_osmr0, 3686400, 137 clockevents_config_and_register(&ckevt_sa1100_osmr0, 3686400,
134 MIN_OSCR_DELTA * 2, 0x7fffffff); 138 MIN_OSCR_DELTA * 2, 0x7fffffff);
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index 338640631e08..05fa505df585 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -8,7 +8,7 @@ config ARCH_SHMOBILE_MULTI
8 select CPU_V7 8 select CPU_V7
9 select GENERIC_CLOCKEVENTS 9 select GENERIC_CLOCKEVENTS
10 select HAVE_ARM_SCU if SMP 10 select HAVE_ARM_SCU if SMP
11 select HAVE_ARM_TWD if LOCAL_TIMERS 11 select HAVE_ARM_TWD if SMP
12 select HAVE_SMP 12 select HAVE_SMP
13 select ARM_GIC 13 select ARM_GIC
14 select MIGHT_HAVE_CACHE_L2X0 14 select MIGHT_HAVE_CACHE_L2X0
diff --git a/arch/arm/mach-shmobile/include/mach/timex.h b/arch/arm/mach-shmobile/include/mach/timex.h
deleted file mode 100644
index ae0d8d825c23..000000000000
--- a/arch/arm/mach-shmobile/include/mach/timex.h
+++ /dev/null
@@ -1,6 +0,0 @@
1#ifndef __ASM_MACH_TIMEX_H
2#define __ASM_MACH_TIMEX_H
3
4#define CLOCK_TICK_RATE 1193180 /* unused i8253 PIT value */
5
6#endif /* __ASM_MACH_TIMEX_H */
diff --git a/arch/arm/mach-spear/include/mach/timex.h b/arch/arm/mach-spear/include/mach/timex.h
deleted file mode 100644
index ef95e5b780bd..000000000000
--- a/arch/arm/mach-spear/include/mach/timex.h
+++ /dev/null
@@ -1,19 +0,0 @@
1/*
2 * arch/arm/plat-spear/include/plat/timex.h
3 *
4 * SPEAr platform specific timex definitions
5 *
6 * Copyright (C) 2009 ST Microelectronics
7 * Viresh Kumar <viresh.linux@gmail.com>
8 *
9 * This file is licensed under the terms of the GNU General Public
10 * License version 2. This program is licensed "as is" without any
11 * warranty of any kind, whether express or implied.
12 */
13
14#ifndef __PLAT_TIMEX_H
15#define __PLAT_TIMEX_H
16
17#define CLOCK_TICK_RATE 48000000
18
19#endif /* __PLAT_TIMEX_H */
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig
index 0034d2cd6973..b2019dc50e40 100644
--- a/arch/arm/mach-ux500/Kconfig
+++ b/arch/arm/mach-ux500/Kconfig
@@ -73,11 +73,6 @@ config UX500_AUTO_PLATFORM
73 a working kernel. If everything else is disabled, this 73 a working kernel. If everything else is disabled, this
74 automatically enables MACH_MOP500. 74 automatically enables MACH_MOP500.
75 75
76config MACH_UX500_DT
77 bool "Generic U8500 support using device tree"
78 depends on MACH_MOP500
79 select USE_OF
80
81endmenu 76endmenu
82 77
83config UX500_DEBUG_UART 78config UX500_DEBUG_UART
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile
index d05ba759da30..de544aabf292 100644
--- a/arch/arm/mach-ux500/Makefile
+++ b/arch/arm/mach-ux500/Makefile
@@ -7,7 +7,6 @@ obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o
7obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o 7obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o
8obj-$(CONFIG_MACH_MOP500) += board-mop500-sdi.o \ 8obj-$(CONFIG_MACH_MOP500) += board-mop500-sdi.o \
9 board-mop500-regulators.o \ 9 board-mop500-regulators.o \
10 board-mop500-pins.o \
11 board-mop500-audio.o 10 board-mop500-audio.o
12obj-$(CONFIG_SMP) += platsmp.o headsmp.o 11obj-$(CONFIG_SMP) += platsmp.o headsmp.o
13obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o 12obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
diff --git a/arch/arm/mach-ux500/board-mop500-audio.c b/arch/arm/mach-ux500/board-mop500-audio.c
index 9309ad4cbd09..b2a0899e7453 100644
--- a/arch/arm/mach-ux500/board-mop500-audio.c
+++ b/arch/arm/mach-ux500/board-mop500-audio.c
@@ -9,7 +9,6 @@
9#include <linux/gpio.h> 9#include <linux/gpio.h>
10#include <linux/platform_data/dma-ste-dma40.h> 10#include <linux/platform_data/dma-ste-dma40.h>
11 11
12#include "irqs.h"
13#include <linux/platform_data/asoc-ux500-msp.h> 12#include <linux/platform_data/asoc-ux500-msp.h>
14 13
15#include "ste-dma40-db8500.h" 14#include "ste-dma40-db8500.h"
diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c
deleted file mode 100644
index f63619b69113..000000000000
--- a/arch/arm/mach-ux500/board-mop500-pins.c
+++ /dev/null
@@ -1,291 +0,0 @@
1/*
2 * Copyright (C) ST-Ericsson SA 2010
3 *
4 * License terms: GNU General Public License (GPL) version 2
5 */
6
7#include <linux/kernel.h>
8#include <linux/init.h>
9#include <linux/bug.h>
10#include <linux/string.h>
11#include <linux/pinctrl/machine.h>
12#include <linux/pinctrl/pinconf-generic.h>
13
14#include <asm/mach-types.h>
15
16#include "board-mop500.h"
17
18/* These simply sets bias for pins */
19#define BIAS(a,b) static unsigned long a[] = { b }
20
21BIAS(abx500_out_lo, PIN_CONF_PACKED(PIN_CONFIG_OUTPUT, 0));
22BIAS(abx500_in_pd, PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_DOWN, 1));
23BIAS(abx500_in_nopull, PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_DOWN, 0));
24
25#define AB8500_MUX_HOG(group, func) \
26 PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-ab8500.0", group, func)
27#define AB8500_PIN_HOG(pin, conf) \
28 PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-ab8500.0", pin, abx500_##conf)
29
30#define AB8500_MUX_STATE(group, func, dev, state) \
31 PIN_MAP_MUX_GROUP(dev, state, "pinctrl-ab8500.0", group, func)
32#define AB8500_PIN_STATE(pin, conf, dev, state) \
33 PIN_MAP_CONFIGS_PIN(dev, state, "pinctrl-ab8500.0", pin, abx500_##conf)
34
35#define AB8505_MUX_HOG(group, func) \
36 PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-ab8505.0", group, func)
37#define AB8505_PIN_HOG(pin, conf) \
38 PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-ab8505.0", pin, abx500_##conf)
39
40#define AB8505_MUX_STATE(group, func, dev, state) \
41 PIN_MAP_MUX_GROUP(dev, state, "pinctrl-ab8505.0", group, func)
42#define AB8505_PIN_STATE(pin, conf, dev, state) \
43 PIN_MAP_CONFIGS_PIN(dev, state, "pinctrl-ab8505.0", pin, abx500_##conf)
44
45static struct pinctrl_map __initdata ab8500_pinmap[] = {
46 /* Sysclkreq2 */
47 AB8500_MUX_STATE("sysclkreq2_d_1", "sysclkreq", "regulator.35", PINCTRL_STATE_DEFAULT),
48 AB8500_PIN_STATE("GPIO1_T10", in_nopull, "regulator.35", PINCTRL_STATE_DEFAULT),
49 /* sysclkreq2 disable, mux in gpio configured in input pulldown */
50 AB8500_MUX_STATE("gpio1_a_1", "gpio", "regulator.35", PINCTRL_STATE_SLEEP),
51 AB8500_PIN_STATE("GPIO1_T10", in_pd, "regulator.35", PINCTRL_STATE_SLEEP),
52
53 /* pins 2 is muxed in GPIO, configured in INPUT PULL DOWN */
54 AB8500_MUX_HOG("gpio2_a_1", "gpio"),
55 AB8500_PIN_HOG("GPIO2_T9", in_pd),
56
57 /* Sysclkreq4 */
58 AB8500_MUX_STATE("sysclkreq4_d_1", "sysclkreq", "regulator.36", PINCTRL_STATE_DEFAULT),
59 AB8500_PIN_STATE("GPIO3_U9", in_nopull, "regulator.36", PINCTRL_STATE_DEFAULT),
60 /* sysclkreq4 disable, mux in gpio configured in input pulldown */
61 AB8500_MUX_STATE("gpio3_a_1", "gpio", "regulator.36", PINCTRL_STATE_SLEEP),
62 AB8500_PIN_STATE("GPIO3_U9", in_pd, "regulator.36", PINCTRL_STATE_SLEEP),
63
64 /* pins 4 is muxed in GPIO, configured in INPUT PULL DOWN */
65 AB8500_MUX_HOG("gpio4_a_1", "gpio"),
66 AB8500_PIN_HOG("GPIO4_W2", in_pd),
67
68 /*
69 * pins 6,7,8 and 9 are muxed in YCBCR0123
70 * configured in INPUT PULL UP
71 */
72 AB8500_MUX_HOG("ycbcr0123_d_1", "ycbcr"),
73 AB8500_PIN_HOG("GPIO6_Y18", in_nopull),
74 AB8500_PIN_HOG("GPIO7_AA20", in_nopull),
75 AB8500_PIN_HOG("GPIO8_W18", in_nopull),
76 AB8500_PIN_HOG("GPIO9_AA19", in_nopull),
77
78 /*
79 * pins 10,11,12 and 13 are muxed in GPIO
80 * configured in INPUT PULL DOWN
81 */
82 AB8500_MUX_HOG("gpio10_d_1", "gpio"),
83 AB8500_PIN_HOG("GPIO10_U17", in_pd),
84
85 AB8500_MUX_HOG("gpio11_d_1", "gpio"),
86 AB8500_PIN_HOG("GPIO11_AA18", in_pd),
87
88 AB8500_MUX_HOG("gpio12_d_1", "gpio"),
89 AB8500_PIN_HOG("GPIO12_U16", in_pd),
90
91 AB8500_MUX_HOG("gpio13_d_1", "gpio"),
92 AB8500_PIN_HOG("GPIO13_W17", in_pd),
93
94 /*
95 * pins 14,15 are muxed in PWM1 and PWM2
96 * configured in INPUT PULL DOWN
97 */
98 AB8500_MUX_HOG("pwmout1_d_1", "pwmout"),
99 AB8500_PIN_HOG("GPIO14_F14", in_pd),
100
101 AB8500_MUX_HOG("pwmout2_d_1", "pwmout"),
102 AB8500_PIN_HOG("GPIO15_B17", in_pd),
103
104 /*
105 * pins 16 is muxed in GPIO
106 * configured in INPUT PULL DOWN
107 */
108 AB8500_MUX_HOG("gpio16_a_1", "gpio"),
109 AB8500_PIN_HOG("GPIO14_F14", in_pd),
110
111 /*
112 * pins 17,18,19 and 20 are muxed in AUDIO interface 1
113 * configured in INPUT PULL DOWN
114 */
115 AB8500_MUX_HOG("adi1_d_1", "adi1"),
116 AB8500_PIN_HOG("GPIO17_P5", in_pd),
117 AB8500_PIN_HOG("GPIO18_R5", in_pd),
118 AB8500_PIN_HOG("GPIO19_U5", in_pd),
119 AB8500_PIN_HOG("GPIO20_T5", in_pd),
120
121 /*
122 * pins 21,22 and 23 are muxed in USB UICC
123 * configured in INPUT PULL DOWN
124 */
125 AB8500_MUX_HOG("usbuicc_d_1", "usbuicc"),
126 AB8500_PIN_HOG("GPIO21_H19", in_pd),
127 AB8500_PIN_HOG("GPIO22_G20", in_pd),
128 AB8500_PIN_HOG("GPIO23_G19", in_pd),
129
130 /*
131 * pins 24,25 are muxed in GPIO
132 * configured in INPUT PULL DOWN
133 */
134 AB8500_MUX_HOG("gpio24_a_1", "gpio"),
135 AB8500_PIN_HOG("GPIO24_T14", in_pd),
136
137 AB8500_MUX_HOG("gpio25_a_1", "gpio"),
138 AB8500_PIN_HOG("GPIO25_R16", in_pd),
139
140 /*
141 * pins 26 is muxed in GPIO
142 * configured in OUTPUT LOW
143 */
144 AB8500_MUX_HOG("gpio26_d_1", "gpio"),
145 AB8500_PIN_HOG("GPIO26_M16", out_lo),
146
147 /*
148 * pins 27,28 are muxed in DMIC12
149 * configured in INPUT PULL DOWN
150 */
151 AB8500_MUX_HOG("dmic12_d_1", "dmic"),
152 AB8500_PIN_HOG("GPIO27_J6", in_pd),
153 AB8500_PIN_HOG("GPIO28_K6", in_pd),
154
155 /*
156 * pins 29,30 are muxed in DMIC34
157 * configured in INPUT PULL DOWN
158 */
159 AB8500_MUX_HOG("dmic34_d_1", "dmic"),
160 AB8500_PIN_HOG("GPIO29_G6", in_pd),
161 AB8500_PIN_HOG("GPIO30_H6", in_pd),
162
163 /*
164 * pins 31,32 are muxed in DMIC56
165 * configured in INPUT PULL DOWN
166 */
167 AB8500_MUX_HOG("dmic56_d_1", "dmic"),
168 AB8500_PIN_HOG("GPIO31_F5", in_pd),
169 AB8500_PIN_HOG("GPIO32_G5", in_pd),
170
171 /*
172 * pins 34 is muxed in EXTCPENA
173 * configured INPUT PULL DOWN
174 */
175 AB8500_MUX_HOG("extcpena_d_1", "extcpena"),
176 AB8500_PIN_HOG("GPIO34_R17", in_pd),
177
178 /*
179 * pins 35 is muxed in GPIO
180 * configured in OUTPUT LOW
181 */
182 AB8500_MUX_HOG("gpio35_d_1", "gpio"),
183 AB8500_PIN_HOG("GPIO35_W15", in_pd),
184
185 /*
186 * pins 36,37,38 and 39 are muxed in GPIO
187 * configured in INPUT PULL DOWN
188 */
189 AB8500_MUX_HOG("gpio36_a_1", "gpio"),
190 AB8500_PIN_HOG("GPIO36_A17", in_pd),
191
192 AB8500_MUX_HOG("gpio37_a_1", "gpio"),
193 AB8500_PIN_HOG("GPIO37_E15", in_pd),
194
195 AB8500_MUX_HOG("gpio38_a_1", "gpio"),
196 AB8500_PIN_HOG("GPIO38_C17", in_pd),
197
198 AB8500_MUX_HOG("gpio39_a_1", "gpio"),
199 AB8500_PIN_HOG("GPIO39_E16", in_pd),
200
201 /*
202 * pins 40 and 41 are muxed in MODCSLSDA
203 * configured INPUT PULL DOWN
204 */
205 AB8500_MUX_HOG("modsclsda_d_1", "modsclsda"),
206 AB8500_PIN_HOG("GPIO40_T19", in_pd),
207 AB8500_PIN_HOG("GPIO41_U19", in_pd),
208
209 /*
210 * pins 42 is muxed in GPIO
211 * configured INPUT PULL DOWN
212 */
213 AB8500_MUX_HOG("gpio42_a_1", "gpio"),
214 AB8500_PIN_HOG("GPIO42_U2", in_pd),
215};
216
217static struct pinctrl_map __initdata ab8505_pinmap[] = {
218 /* Sysclkreq2 */
219 AB8505_MUX_STATE("sysclkreq2_d_1", "sysclkreq", "regulator.36", PINCTRL_STATE_DEFAULT),
220 AB8505_PIN_STATE("GPIO1_N4", in_nopull, "regulator.36", PINCTRL_STATE_DEFAULT),
221 /* sysclkreq2 disable, mux in gpio configured in input pulldown */
222 AB8505_MUX_STATE("gpio1_a_1", "gpio", "regulator.36", PINCTRL_STATE_SLEEP),
223 AB8505_PIN_STATE("GPIO1_N4", in_pd, "regulator.36", PINCTRL_STATE_SLEEP),
224
225 /* pins 2 is muxed in GPIO, configured in INPUT PULL DOWN */
226 AB8505_MUX_HOG("gpio2_a_1", "gpio"),
227 AB8505_PIN_HOG("GPIO2_R5", in_pd),
228
229 /* Sysclkreq4 */
230 AB8505_MUX_STATE("sysclkreq4_d_1", "sysclkreq", "regulator.37", PINCTRL_STATE_DEFAULT),
231 AB8505_PIN_STATE("GPIO3_P5", in_nopull, "regulator.37", PINCTRL_STATE_DEFAULT),
232 /* sysclkreq4 disable, mux in gpio configured in input pulldown */
233 AB8505_MUX_STATE("gpio3_a_1", "gpio", "regulator.37", PINCTRL_STATE_SLEEP),
234 AB8505_PIN_STATE("GPIO3_P5", in_pd, "regulator.37", PINCTRL_STATE_SLEEP),
235
236 AB8505_MUX_HOG("gpio10_d_1", "gpio"),
237 AB8505_PIN_HOG("GPIO10_B16", in_pd),
238
239 AB8505_MUX_HOG("gpio11_d_1", "gpio"),
240 AB8505_PIN_HOG("GPIO11_B17", in_pd),
241
242 AB8505_MUX_HOG("gpio13_d_1", "gpio"),
243 AB8505_PIN_HOG("GPIO13_D17", in_nopull),
244
245 AB8505_MUX_HOG("pwmout1_d_1", "pwmout"),
246 AB8505_PIN_HOG("GPIO14_C16", in_pd),
247
248 AB8505_MUX_HOG("adi2_d_1", "adi2"),
249 AB8505_PIN_HOG("GPIO17_P2", in_pd),
250 AB8505_PIN_HOG("GPIO18_N3", in_pd),
251 AB8505_PIN_HOG("GPIO19_T1", in_pd),
252 AB8505_PIN_HOG("GPIO20_P3", in_pd),
253
254 AB8505_MUX_HOG("gpio34_a_1", "gpio"),
255 AB8505_PIN_HOG("GPIO34_H14", in_pd),
256
257 AB8505_MUX_HOG("modsclsda_d_1", "modsclsda"),
258 AB8505_PIN_HOG("GPIO40_J15", in_pd),
259 AB8505_PIN_HOG("GPIO41_J14", in_pd),
260
261 AB8505_MUX_HOG("gpio50_d_1", "gpio"),
262 AB8505_PIN_HOG("GPIO50_L4", in_nopull),
263
264 AB8505_MUX_HOG("resethw_d_1", "resethw"),
265 AB8505_PIN_HOG("GPIO52_D16", in_pd),
266
267 AB8505_MUX_HOG("service_d_1", "service"),
268 AB8505_PIN_HOG("GPIO53_D15", in_pd),
269};
270
271void __init mop500_pinmaps_init(void)
272{
273 if (machine_is_u8520())
274 pinctrl_register_mappings(ab8505_pinmap,
275 ARRAY_SIZE(ab8505_pinmap));
276 else
277 pinctrl_register_mappings(ab8500_pinmap,
278 ARRAY_SIZE(ab8500_pinmap));
279}
280
281void __init snowball_pinmaps_init(void)
282{
283 pinctrl_register_mappings(ab8500_pinmap,
284 ARRAY_SIZE(ab8500_pinmap));
285}
286
287void __init hrefv60_pinmaps_init(void)
288{
289 pinctrl_register_mappings(ab8500_pinmap,
290 ARRAY_SIZE(ab8500_pinmap));
291}
diff --git a/arch/arm/mach-ux500/board-mop500.h b/arch/arm/mach-ux500/board-mop500.h
index d48e8662c676..32cc0d8d8a0e 100644
--- a/arch/arm/mach-ux500/board-mop500.h
+++ b/arch/arm/mach-ux500/board-mop500.h
@@ -7,78 +7,9 @@
7#ifndef __BOARD_MOP500_H 7#ifndef __BOARD_MOP500_H
8#define __BOARD_MOP500_H 8#define __BOARD_MOP500_H
9 9
10/* For NOMADIK_NR_GPIO */
11#include "irqs.h"
12#include <linux/platform_data/asoc-ux500-msp.h> 10#include <linux/platform_data/asoc-ux500-msp.h>
13#include <linux/amba/mmci.h> 11#include <linux/amba/mmci.h>
14 12
15/* Snowball specific GPIO assignments, this board has no GPIO expander */
16#define SNOWBALL_ACCEL_INT1_GPIO 163
17#define SNOWBALL_ACCEL_INT2_GPIO 164
18#define SNOWBALL_MAGNET_DRDY_GPIO 165
19#define SNOWBALL_SDMMC_EN_GPIO 217
20#define SNOWBALL_SDMMC_1V8_3V_GPIO 228
21#define SNOWBALL_SDMMC_CD_GPIO 218
22
23/* HREFv60-specific GPIO assignments, this board has no GPIO expander */
24#define HREFV60_SDMMC_1V8_3V_GPIO 5
25#define HREFV60_CAMERA_FLASH_ENABLE 21
26#define HREFV60_MAGNET_DRDY_GPIO 32
27#define HREFV60_DISP1_RST_GPIO 65
28#define HREFV60_DISP2_RST_GPIO 66
29#define HREFV60_ACCEL_INT1_GPIO 82
30#define HREFV60_ACCEL_INT2_GPIO 83
31#define HREFV60_SDMMC_CD_GPIO 95
32#define HREFV60_XSHUTDOWN_SECONDARY_SENSOR 140
33#define HREFV60_TOUCH_RST_GPIO 143
34#define HREFV60_HAL_SW_GPIO 145
35#define HREFV60_SDMMC_EN_GPIO 169
36#define HREFV60_MMIO_XENON_CHARGE 170
37#define HREFV60_PROX_SENSE_GPIO 217
38
39/* MOP500 generic GPIOs */
40#define CAMERA_FLASH_INT_PIN 7
41#define CYPRESS_TOUCH_INT_PIN 84
42#define XSHUTDOWN_PRIMARY_SENSOR 141
43#define XSHUTDOWN_SECONDARY_SENSOR 142
44#define CYPRESS_TOUCH_RST_GPIO 143
45#define MOP500_HDMI_RST_GPIO 196
46#define CYPRESS_SLAVE_SELECT_GPIO 216
47
48/* GPIOs on the TC35892 expander */
49#define MOP500_EGPIO(x) (NOMADIK_NR_GPIO + (x))
50#define GPIO_MAGNET_DRDY MOP500_EGPIO(1)
51#define GPIO_SDMMC_CD MOP500_EGPIO(3)
52#define GPIO_CAMERA_FLASH_ENABLE MOP500_EGPIO(4)
53#define GPIO_MMIO_XENON_CHARGE MOP500_EGPIO(5)
54#define GPIO_PROX_SENSOR MOP500_EGPIO(7)
55#define GPIO_HAL_SENSOR MOP500_EGPIO(8)
56#define GPIO_ACCEL_INT1 MOP500_EGPIO(10)
57#define GPIO_ACCEL_INT2 MOP500_EGPIO(11)
58#define GPIO_BU21013_CS MOP500_EGPIO(13)
59#define MOP500_DISP2_RST_GPIO MOP500_EGPIO(14)
60#define MOP500_DISP1_RST_GPIO MOP500_EGPIO(15)
61#define GPIO_SDMMC_EN MOP500_EGPIO(17)
62#define GPIO_SDMMC_1V8_3V_SEL MOP500_EGPIO(18)
63#define MOP500_EGPIO_END MOP500_EGPIO(24)
64
65/*
66 * GPIOs on the AB8500 mixed-signals circuit
67 * Notice that we subtract 1 from the number passed into the macro, this is
68 * because the AB8500 GPIO pins are enumbered starting from 1, so the value in
69 * parens matches the GPIO pin number in the data sheet.
70 */
71#define MOP500_AB8500_PIN_GPIO(x) (MOP500_EGPIO_END + (x) - 1)
72/*Snowball AB8500 GPIO */
73#define SNOWBALL_VSMPS2_1V8_GPIO MOP500_AB8500_PIN_GPIO(1) /* SYSCLKREQ2/GPIO1 */
74#define SNOWBALL_PM_GPIO1_GPIO MOP500_AB8500_PIN_GPIO(2) /* SYSCLKREQ3/GPIO2 */
75#define SNOWBALL_WLAN_CLK_REQ_GPIO MOP500_AB8500_PIN_GPIO(3) /* SYSCLKREQ4/GPIO3 */
76#define SNOWBALL_PM_GPIO4_GPIO MOP500_AB8500_PIN_GPIO(4) /* SYSCLKREQ6/GPIO4 */
77#define SNOWBALL_EN_3V6_GPIO MOP500_AB8500_PIN_GPIO(16) /* PWMOUT3/GPIO16 */
78#define SNOWBALL_PME_ETH_GPIO MOP500_AB8500_PIN_GPIO(24) /* SYSCLKREQ7/GPIO24 */
79#define SNOWBALL_EN_3V3_ETH_GPIO MOP500_AB8500_PIN_GPIO(26) /* GPIO26 */
80
81struct device;
82extern struct mmci_platform_data mop500_sdi0_data; 13extern struct mmci_platform_data mop500_sdi0_data;
83extern struct mmci_platform_data mop500_sdi1_data; 14extern struct mmci_platform_data mop500_sdi1_data;
84extern struct mmci_platform_data mop500_sdi2_data; 15extern struct mmci_platform_data mop500_sdi2_data;
@@ -88,8 +19,4 @@ extern struct msp_i2s_platform_data msp1_platform_data;
88extern struct msp_i2s_platform_data msp2_platform_data; 19extern struct msp_i2s_platform_data msp2_platform_data;
89extern struct msp_i2s_platform_data msp3_platform_data; 20extern struct msp_i2s_platform_data msp3_platform_data;
90 21
91void __init mop500_pinmaps_init(void);
92void __init snowball_pinmaps_init(void);
93void __init hrefv60_pinmaps_init(void);
94
95#endif 22#endif
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c
index bc8a6183560d..8820f602fcd2 100644
--- a/arch/arm/mach-ux500/cpu-db8500.c
+++ b/arch/arm/mach-ux500/cpu-db8500.c
@@ -27,7 +27,6 @@
27#include <asm/mach/map.h> 27#include <asm/mach/map.h>
28 28
29#include "setup.h" 29#include "setup.h"
30#include "irqs.h"
31 30
32#include "board-mop500-regulators.h" 31#include "board-mop500-regulators.h"
33#include "board-mop500.h" 32#include "board-mop500.h"
@@ -35,14 +34,11 @@
35#include "id.h" 34#include "id.h"
36 35
37struct ab8500_platform_data ab8500_platdata = { 36struct ab8500_platform_data ab8500_platdata = {
38 .irq_base = MOP500_AB8500_IRQ_BASE,
39 .regulator = &ab8500_regulator_plat_data, 37 .regulator = &ab8500_regulator_plat_data,
40}; 38};
41 39
42struct prcmu_pdata db8500_prcmu_pdata = { 40struct prcmu_pdata db8500_prcmu_pdata = {
43 .ab_platdata = &ab8500_platdata, 41 .ab_platdata = &ab8500_platdata,
44 .ab_irq = IRQ_DB8500_AB8500,
45 .irq_base = IRQ_PRCMU_BASE,
46 .version_offset = DB8500_PRCMU_FW_VERSION_OFFSET, 42 .version_offset = DB8500_PRCMU_FW_VERSION_OFFSET,
47 .legacy_offset = DB8500_PRCMU_LEGACY_OFFSET, 43 .legacy_offset = DB8500_PRCMU_LEGACY_OFFSET,
48}; 44};
@@ -146,7 +142,6 @@ static struct device * __init db8500_soc_device_init(void)
146 return ux500_soc_device_init(soc_id); 142 return ux500_soc_device_init(soc_id);
147} 143}
148 144
149#ifdef CONFIG_MACH_UX500_DT
150static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = { 145static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
151 /* Requires call-back bindings. */ 146 /* Requires call-back bindings. */
152 OF_DEV_AUXDATA("arm,cortex-a9-pmu", 0, "arm-pmu", &db8500_pmu_platdata), 147 OF_DEV_AUXDATA("arm,cortex-a9-pmu", 0, "arm-pmu", &db8500_pmu_platdata),
@@ -191,16 +186,6 @@ static void __init u8500_init_machine(void)
191{ 186{
192 struct device *parent = db8500_soc_device_init(); 187 struct device *parent = db8500_soc_device_init();
193 188
194 /* Pinmaps must be in place before devices register */
195 if (of_machine_is_compatible("st-ericsson,mop500"))
196 mop500_pinmaps_init();
197 else if (of_machine_is_compatible("calaosystems,snowball-a9500")) {
198 snowball_pinmaps_init();
199 } else if (of_machine_is_compatible("st-ericsson,hrefv60+"))
200 hrefv60_pinmaps_init();
201 else if (of_machine_is_compatible("st-ericsson,ccu9540")) {}
202 /* TODO: Add pinmaps for ccu9540 board. */
203
204 /* automatically probe child nodes of dbx5x0 devices */ 189 /* automatically probe child nodes of dbx5x0 devices */
205 if (of_machine_is_compatible("st-ericsson,u8540")) 190 if (of_machine_is_compatible("st-ericsson,u8540"))
206 of_platform_populate(NULL, u8500_local_bus_nodes, 191 of_platform_populate(NULL, u8500_local_bus_nodes,
@@ -229,5 +214,3 @@ DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)")
229 .dt_compat = stericsson_dt_platform_compat, 214 .dt_compat = stericsson_dt_platform_compat,
230 .restart = ux500_restart, 215 .restart = ux500_restart,
231MACHINE_END 216MACHINE_END
232
233#endif
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c
index d11ac4bf336c..db16b5a04ad5 100644
--- a/arch/arm/mach-ux500/cpu.c
+++ b/arch/arm/mach-ux500/cpu.c
@@ -52,17 +52,7 @@ void ux500_restart(enum reboot_mode mode, const char *cmd)
52*/ 52*/
53void __init ux500_init_irq(void) 53void __init ux500_init_irq(void)
54{ 54{
55 void __iomem *dist_base;
56 void __iomem *cpu_base;
57
58 gic_arch_extn.flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND; 55 gic_arch_extn.flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND;
59
60 if (cpu_is_u8500_family() || cpu_is_ux540_family()) {
61 dist_base = __io_address(U8500_GIC_DIST_BASE);
62 cpu_base = __io_address(U8500_GIC_CPU_BASE);
63 } else
64 ux500_unknown_soc();
65
66 irqchip_init(); 56 irqchip_init();
67 57
68 /* 58 /*
diff --git a/arch/arm/mach-ux500/irqs-board-mop500.h b/arch/arm/mach-ux500/irqs-board-mop500.h
deleted file mode 100644
index d526dd8e87d3..000000000000
--- a/arch/arm/mach-ux500/irqs-board-mop500.h
+++ /dev/null
@@ -1,55 +0,0 @@
1/*
2 * Copyright (C) ST-Ericsson SA 2010
3 *
4 * Author: Rabin Vincent <rabin.vincent@stericsson.com>
5 * License terms: GNU General Public License (GPL) version 2
6 */
7
8#ifndef __MACH_IRQS_BOARD_MOP500_H
9#define __MACH_IRQS_BOARD_MOP500_H
10
11/* Number of AB8500 irqs is taken from header file */
12#include <linux/mfd/abx500/ab8500.h>
13
14#define MOP500_AB8500_IRQ_BASE IRQ_BOARD_START
15#define MOP500_AB8500_IRQ_END (MOP500_AB8500_IRQ_BASE \
16 + AB8500_MAX_NR_IRQS)
17
18/* TC35892 */
19#define TC35892_NR_INTERNAL_IRQS 8
20#define TC35892_INT_GPIO(x) (TC35892_NR_INTERNAL_IRQS + (x))
21#define TC35892_NR_GPIOS 24
22#define TC35892_NR_IRQS TC35892_INT_GPIO(TC35892_NR_GPIOS)
23
24#define MOP500_EGPIO_NR_IRQS TC35892_NR_IRQS
25
26#define MOP500_EGPIO_IRQ_BASE MOP500_AB8500_IRQ_END
27#define MOP500_EGPIO_IRQ_END (MOP500_EGPIO_IRQ_BASE \
28 + MOP500_EGPIO_NR_IRQS)
29/* STMPE1601 irqs */
30#define STMPE_NR_INTERNAL_IRQS 9
31#define STMPE_INT_GPIO(x) (STMPE_NR_INTERNAL_IRQS + (x))
32#define STMPE_NR_GPIOS 24
33#define STMPE_NR_IRQS STMPE_INT_GPIO(STMPE_NR_GPIOS)
34
35#define MOP500_STMPE1601_IRQBASE MOP500_EGPIO_IRQ_END
36#define MOP500_STMPE1601_IRQ(x) (MOP500_STMPE1601_IRQBASE + (x))
37
38#define MOP500_STMPE1601_IRQ_END \
39 MOP500_STMPE1601_IRQ(STMPE_NR_INTERNAL_IRQS)
40
41#define MOP500_NR_IRQS MOP500_STMPE1601_IRQ_END
42
43#define MOP500_IRQ_END MOP500_NR_IRQS
44
45/*
46 * We may have several boards, but only one will run at a
47 * time, so the one with most IRQs will bump this ahead,
48 * but the IRQ_BOARD_START remains the same for either board.
49 */
50#if MOP500_IRQ_END > IRQ_BOARD_END
51#undef IRQ_BOARD_END
52#define IRQ_BOARD_END MOP500_IRQ_END
53#endif
54
55#endif
diff --git a/arch/arm/mach-ux500/irqs-db8500.h b/arch/arm/mach-ux500/irqs-db8500.h
deleted file mode 100644
index f3a9d5947ef3..000000000000
--- a/arch/arm/mach-ux500/irqs-db8500.h
+++ /dev/null
@@ -1,125 +0,0 @@
1/*
2 * Copyright (C) ST-Ericsson SA 2010
3 *
4 * Author: Rabin Vincent <rabin.vincent@stericsson.com>
5 * License terms: GNU General Public License (GPL) version 2
6 */
7
8#ifndef __MACH_IRQS_DB8500_H
9#define __MACH_IRQS_DB8500_H
10
11#define IRQ_DB8500_MTU0 (IRQ_SHPI_START + 4)
12#define IRQ_DB8500_SPI2 (IRQ_SHPI_START + 6)
13#define IRQ_DB8500_PMU (IRQ_SHPI_START + 7)
14#define IRQ_DB8500_SPI0 (IRQ_SHPI_START + 8)
15#define IRQ_DB8500_RTT (IRQ_SHPI_START + 9)
16#define IRQ_DB8500_PKA (IRQ_SHPI_START + 10)
17#define IRQ_DB8500_UART0 (IRQ_SHPI_START + 11)
18#define IRQ_DB8500_I2C3 (IRQ_SHPI_START + 12)
19#define IRQ_DB8500_L2CC (IRQ_SHPI_START + 13)
20#define IRQ_DB8500_SSP0 (IRQ_SHPI_START + 14)
21#define IRQ_DB8500_CRYP1 (IRQ_SHPI_START + 15)
22#define IRQ_DB8500_MSP1_RX (IRQ_SHPI_START + 16)
23#define IRQ_DB8500_MTU1 (IRQ_SHPI_START + 17)
24#define IRQ_DB8500_RTC (IRQ_SHPI_START + 18)
25#define IRQ_DB8500_UART1 (IRQ_SHPI_START + 19)
26#define IRQ_DB8500_USB_WAKEUP (IRQ_SHPI_START + 20)
27#define IRQ_DB8500_I2C0 (IRQ_SHPI_START + 21)
28#define IRQ_DB8500_I2C1 (IRQ_SHPI_START + 22)
29#define IRQ_DB8500_USBOTG (IRQ_SHPI_START + 23)
30#define IRQ_DB8500_DMA_SECURE (IRQ_SHPI_START + 24)
31#define IRQ_DB8500_DMA (IRQ_SHPI_START + 25)
32#define IRQ_DB8500_UART2 (IRQ_SHPI_START + 26)
33#define IRQ_DB8500_ICN_PMU1 (IRQ_SHPI_START + 27)
34#define IRQ_DB8500_ICN_PMU2 (IRQ_SHPI_START + 28)
35#define IRQ_DB8500_HSIR_EXCEP (IRQ_SHPI_START + 29)
36#define IRQ_DB8500_MSP0 (IRQ_SHPI_START + 31)
37#define IRQ_DB8500_HSIR_CH0_OVRRUN (IRQ_SHPI_START + 32)
38#define IRQ_DB8500_HSIR_CH1_OVRRUN (IRQ_SHPI_START + 33)
39#define IRQ_DB8500_HSIR_CH2_OVRRUN (IRQ_SHPI_START + 34)
40#define IRQ_DB8500_HSIR_CH3_OVRRUN (IRQ_SHPI_START + 35)
41#define IRQ_DB8500_HSIR_CH4_OVRRUN (IRQ_SHPI_START + 36)
42#define IRQ_DB8500_HSIR_CH5_OVRRUN (IRQ_SHPI_START + 37)
43#define IRQ_DB8500_HSIR_CH6_OVRRUN (IRQ_SHPI_START + 38)
44#define IRQ_DB8500_HSIR_CH7_OVRRUN (IRQ_SHPI_START + 39)
45#define IRQ_DB8500_AB8500 (IRQ_SHPI_START + 40)
46#define IRQ_DB8500_SDMMC2 (IRQ_SHPI_START + 41)
47#define IRQ_DB8500_SIA (IRQ_SHPI_START + 42)
48#define IRQ_DB8500_SIA2 (IRQ_SHPI_START + 43)
49#define IRQ_DB8500_SVA (IRQ_SHPI_START + 44)
50#define IRQ_DB8500_SVA2 (IRQ_SHPI_START + 45)
51#define IRQ_DB8500_PRCMU0 (IRQ_SHPI_START + 46)
52#define IRQ_DB8500_PRCMU1 (IRQ_SHPI_START + 47)
53#define IRQ_DB8500_DISP (IRQ_SHPI_START + 48)
54#define IRQ_DB8500_SPI3 (IRQ_SHPI_START + 49)
55#define IRQ_DB8500_SDMMC1 (IRQ_SHPI_START + 50)
56#define IRQ_DB8500_I2C4 (IRQ_SHPI_START + 51)
57#define IRQ_DB8500_SSP1 (IRQ_SHPI_START + 52)
58#define IRQ_DB8500_SKE (IRQ_SHPI_START + 53)
59#define IRQ_DB8500_KB (IRQ_SHPI_START + 54)
60#define IRQ_DB8500_I2C2 (IRQ_SHPI_START + 55)
61#define IRQ_DB8500_B2R2 (IRQ_SHPI_START + 56)
62#define IRQ_DB8500_CRYP0 (IRQ_SHPI_START + 57)
63#define IRQ_DB8500_SDMMC3 (IRQ_SHPI_START + 59)
64#define IRQ_DB8500_SDMMC0 (IRQ_SHPI_START + 60)
65#define IRQ_DB8500_HSEM (IRQ_SHPI_START + 61)
66#define IRQ_DB8500_MSP1 (IRQ_SHPI_START + 62)
67#define IRQ_DB8500_SBAG (IRQ_SHPI_START + 63)
68#define IRQ_DB8500_SPI1 (IRQ_SHPI_START + 96)
69#define IRQ_DB8500_SRPTIMER (IRQ_SHPI_START + 97)
70#define IRQ_DB8500_MSP2 (IRQ_SHPI_START + 98)
71#define IRQ_DB8500_SDMMC4 (IRQ_SHPI_START + 99)
72#define IRQ_DB8500_SDMMC5 (IRQ_SHPI_START + 100)
73#define IRQ_DB8500_HSIRD0 (IRQ_SHPI_START + 104)
74#define IRQ_DB8500_HSIRD1 (IRQ_SHPI_START + 105)
75#define IRQ_DB8500_HSITD0 (IRQ_SHPI_START + 106)
76#define IRQ_DB8500_HSITD1 (IRQ_SHPI_START + 107)
77#define IRQ_DB8500_CTI0 (IRQ_SHPI_START + 108)
78#define IRQ_DB8500_CTI1 (IRQ_SHPI_START + 109)
79#define IRQ_DB8500_ICN_ERR (IRQ_SHPI_START + 110)
80#define IRQ_DB8500_MALI_PPMMU (IRQ_SHPI_START + 112)
81#define IRQ_DB8500_MALI_PP (IRQ_SHPI_START + 113)
82#define IRQ_DB8500_MALI_GPMMU (IRQ_SHPI_START + 114)
83#define IRQ_DB8500_MALI_GP (IRQ_SHPI_START + 115)
84#define IRQ_DB8500_MALI (IRQ_SHPI_START + 116)
85#define IRQ_DB8500_PRCMU_SEM (IRQ_SHPI_START + 118)
86#define IRQ_DB8500_GPIO0 (IRQ_SHPI_START + 119)
87#define IRQ_DB8500_GPIO1 (IRQ_SHPI_START + 120)
88#define IRQ_DB8500_GPIO2 (IRQ_SHPI_START + 121)
89#define IRQ_DB8500_GPIO3 (IRQ_SHPI_START + 122)
90#define IRQ_DB8500_GPIO4 (IRQ_SHPI_START + 123)
91#define IRQ_DB8500_GPIO5 (IRQ_SHPI_START + 124)
92#define IRQ_DB8500_GPIO6 (IRQ_SHPI_START + 125)
93#define IRQ_DB8500_GPIO7 (IRQ_SHPI_START + 126)
94#define IRQ_DB8500_GPIO8 (IRQ_SHPI_START + 127)
95
96#define IRQ_CA_WAKE_REQ_ED (IRQ_SHPI_START + 71)
97#define IRQ_AC_READ_NOTIFICATION_0_ED (IRQ_SHPI_START + 66)
98#define IRQ_AC_READ_NOTIFICATION_1_ED (IRQ_SHPI_START + 64)
99#define IRQ_CA_MSG_PEND_NOTIFICATION_0_ED (IRQ_SHPI_START + 67)
100#define IRQ_CA_MSG_PEND_NOTIFICATION_1_ED (IRQ_SHPI_START + 65)
101
102#define IRQ_CA_WAKE_REQ_V1 (IRQ_SHPI_START + 83)
103#define IRQ_AC_READ_NOTIFICATION_0_V1 (IRQ_SHPI_START + 78)
104#define IRQ_AC_READ_NOTIFICATION_1_V1 (IRQ_SHPI_START + 76)
105#define IRQ_CA_MSG_PEND_NOTIFICATION_0_V1 (IRQ_SHPI_START + 79)
106#define IRQ_CA_MSG_PEND_NOTIFICATION_1_V1 (IRQ_SHPI_START + 77)
107
108#ifdef CONFIG_UX500_SOC_DB8500
109
110/* Virtual interrupts corresponding to the PRCMU wakeups. */
111#define IRQ_PRCMU_BASE IRQ_SOC_START
112#define IRQ_PRCMU_END (IRQ_PRCMU_BASE + 23)
113
114/*
115 * We may have several SoCs, but only one will run at a
116 * time, so the one with most IRQs will bump this ahead,
117 * but the IRQ_SOC_START remains the same for either SoC.
118 */
119#if IRQ_SOC_END < IRQ_PRCMU_END
120#undef IRQ_SOC_END
121#define IRQ_SOC_END IRQ_PRCMU_END
122#endif
123
124#endif /* CONFIG_UX500_SOC_DB8500 */
125#endif
diff --git a/arch/arm/mach-ux500/irqs.h b/arch/arm/mach-ux500/irqs.h
deleted file mode 100644
index 15b2af698ed7..000000000000
--- a/arch/arm/mach-ux500/irqs.h
+++ /dev/null
@@ -1,49 +0,0 @@
1/*
2 * Copyright (C) 2008 STMicroelectronics
3 * Copyright (C) 2009 ST-Ericsson.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 */
10#ifndef ASM_ARCH_IRQS_H
11#define ASM_ARCH_IRQS_H
12
13#define IRQ_LOCALTIMER 29
14#define IRQ_LOCALWDOG 30
15
16/* Shared Peripheral Interrupt (SHPI) */
17#define IRQ_SHPI_START 32
18
19/*
20 * MTU0 preserved for now until plat-nomadik is taught not to use it. Don't
21 * add any other IRQs here, use the irqs-dbx500.h files.
22 */
23#define IRQ_MTU0 (IRQ_SHPI_START + 4)
24
25#define DBX500_NR_INTERNAL_IRQS 166
26
27/* After chip-specific IRQ numbers we have the GPIO ones */
28#define NOMADIK_NR_GPIO 288
29#define NOMADIK_GPIO_TO_IRQ(gpio) ((gpio) + DBX500_NR_INTERNAL_IRQS)
30#define NOMADIK_IRQ_TO_GPIO(irq) ((irq) - DBX500_NR_INTERNAL_IRQS)
31#define IRQ_GPIO_END NOMADIK_GPIO_TO_IRQ(NOMADIK_NR_GPIO)
32
33#define IRQ_SOC_START IRQ_GPIO_END
34/* This will be overridden by SoC-specific irq headers */
35#define IRQ_SOC_END IRQ_SOC_START
36
37#include "irqs-db8500.h"
38
39#define IRQ_BOARD_START IRQ_SOC_END
40/* This will be overridden by board-specific irq headers */
41#define IRQ_BOARD_END IRQ_BOARD_START
42
43#ifdef CONFIG_MACH_MOP500
44#include "irqs-board-mop500.h"
45#endif
46
47#define UX500_NR_IRQS IRQ_BOARD_END
48
49#endif /* ASM_ARCH_IRQS_H */
diff --git a/arch/arm/mach-versatile/include/mach/timex.h b/arch/arm/mach-versatile/include/mach/timex.h
deleted file mode 100644
index 426199b1add5..000000000000
--- a/arch/arm/mach-versatile/include/mach/timex.h
+++ /dev/null
@@ -1,23 +0,0 @@
1/*
2 * arch/arm/mach-versatile/include/mach/timex.h
3 *
4 * Versatile architecture timex specifications
5 *
6 * Copyright (C) 2003 ARM Limited
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#define CLOCK_TICK_RATE (50000000 / 16)
diff --git a/arch/arm/mach-w90x900/include/mach/timex.h b/arch/arm/mach-w90x900/include/mach/timex.h
deleted file mode 100644
index 164dce0b64db..000000000000
--- a/arch/arm/mach-w90x900/include/mach/timex.h
+++ /dev/null
@@ -1,25 +0,0 @@
1/*
2 * arch/arm/mach-w90x900/include/mach/timex.h
3 *
4 * Copyright (c) 2008 Nuvoton technology corporation
5 * All rights reserved.
6 *
7 * Wan ZongShun <mcuos.com@gmail.com>
8 *
9 * Based on arch/arm/mach-s3c2410/include/mach/timex.h
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 */
17
18#ifndef __ASM_ARCH_TIMEX_H
19#define __ASM_ARCH_TIMEX_H
20
21/* CLOCK_TICK_RATE Now, I don't use it. */
22
23#define CLOCK_TICK_RATE 15000000
24
25#endif /* __ASM_ARCH_TIMEX_H */
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c
index 1db2a5ca9ab8..8c09a8393fb6 100644
--- a/arch/arm/mach-zynq/common.c
+++ b/arch/arm/mach-zynq/common.c
@@ -25,6 +25,7 @@
25#include <linux/of_irq.h> 25#include <linux/of_irq.h>
26#include <linux/of_platform.h> 26#include <linux/of_platform.h>
27#include <linux/of.h> 27#include <linux/of.h>
28#include <linux/memblock.h>
28#include <linux/irqchip.h> 29#include <linux/irqchip.h>
29#include <linux/irqchip/arm-gic.h> 30#include <linux/irqchip/arm-gic.h>
30 31
@@ -41,6 +42,18 @@
41 42
42void __iomem *zynq_scu_base; 43void __iomem *zynq_scu_base;
43 44
45/**
46 * zynq_memory_init - Initialize special memory
47 *
48 * We need to stop things allocating the low memory as DMA can't work in
49 * the 1st 512K of memory.
50 */
51static void __init zynq_memory_init(void)
52{
53 if (!__pa(PAGE_OFFSET))
54 memblock_reserve(__pa(PAGE_OFFSET), __pa(swapper_pg_dir));
55}
56
44static struct platform_device zynq_cpuidle_device = { 57static struct platform_device zynq_cpuidle_device = {
45 .name = "cpuidle-zynq", 58 .name = "cpuidle-zynq",
46}; 59};
@@ -117,5 +130,6 @@ DT_MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform")
117 .init_machine = zynq_init_machine, 130 .init_machine = zynq_init_machine,
118 .init_time = zynq_timer_init, 131 .init_time = zynq_timer_init,
119 .dt_compat = zynq_dt_match, 132 .dt_compat = zynq_dt_match,
133 .reserve = zynq_memory_init,
120 .restart = zynq_system_reset, 134 .restart = zynq_system_reset,
121MACHINE_END 135MACHINE_END
diff --git a/arch/arm/plat-omap/include/plat/timex.h b/arch/arm/plat-omap/include/plat/timex.h
deleted file mode 100644
index e27d2daa7790..000000000000
--- a/arch/arm/plat-omap/include/plat/timex.h
+++ /dev/null
@@ -1,33 +0,0 @@
1/*
2 * arch/arm/plat-omap/include/mach/timex.h
3 *
4 * Copyright (C) 2000 RidgeRun, Inc.
5 * Author: Greg Lonnon <glonnon@ridgerun.com>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
15 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
16 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
17 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
18 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
21 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22 *
23 * You should have received a copy of the GNU General Public License along
24 * with this program; if not, write to the Free Software Foundation, Inc.,
25 * 675 Mass Ave, Cambridge, MA 02139, USA.
26 */
27
28#if !defined(__ASM_ARCH_OMAP_TIMEX_H)
29#define __ASM_ARCH_OMAP_TIMEX_H
30
31#define CLOCK_TICK_RATE (HZ * 100000UL)
32
33#endif /* __ASM_ARCH_OMAP_TIMEX_H */
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index dd4327f09ba4..27bbcfc7202a 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -36,6 +36,7 @@ config ARM64
36 select HAVE_GENERIC_DMA_COHERENT 36 select HAVE_GENERIC_DMA_COHERENT
37 select HAVE_HW_BREAKPOINT if PERF_EVENTS 37 select HAVE_HW_BREAKPOINT if PERF_EVENTS
38 select HAVE_MEMBLOCK 38 select HAVE_MEMBLOCK
39 select HAVE_PATA_PLATFORM
39 select HAVE_PERF_EVENTS 40 select HAVE_PERF_EVENTS
40 select IRQ_DOMAIN 41 select IRQ_DOMAIN
41 select MODULES_USE_ELF_RELA 42 select MODULES_USE_ELF_RELA
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 84139be62ae6..7959dd0ca5d5 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -1,4 +1,3 @@
1CONFIG_EXPERIMENTAL=y
2# CONFIG_LOCALVERSION_AUTO is not set 1# CONFIG_LOCALVERSION_AUTO is not set
3# CONFIG_SWAP is not set 2# CONFIG_SWAP is not set
4CONFIG_SYSVIPC=y 3CONFIG_SYSVIPC=y
@@ -19,6 +18,7 @@ CONFIG_BLK_DEV_INITRD=y
19CONFIG_KALLSYMS_ALL=y 18CONFIG_KALLSYMS_ALL=y
20# CONFIG_COMPAT_BRK is not set 19# CONFIG_COMPAT_BRK is not set
21CONFIG_PROFILING=y 20CONFIG_PROFILING=y
21CONFIG_JUMP_LABEL=y
22CONFIG_MODULES=y 22CONFIG_MODULES=y
23CONFIG_MODULE_UNLOAD=y 23CONFIG_MODULE_UNLOAD=y
24# CONFIG_BLK_DEV_BSG is not set 24# CONFIG_BLK_DEV_BSG is not set
@@ -27,6 +27,7 @@ CONFIG_ARCH_VEXPRESS=y
27CONFIG_ARCH_XGENE=y 27CONFIG_ARCH_XGENE=y
28CONFIG_SMP=y 28CONFIG_SMP=y
29CONFIG_PREEMPT=y 29CONFIG_PREEMPT=y
30CONFIG_CMA=y
30CONFIG_CMDLINE="console=ttyAMA0" 31CONFIG_CMDLINE="console=ttyAMA0"
31# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set 32# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
32CONFIG_COMPAT=y 33CONFIG_COMPAT=y
@@ -42,14 +43,17 @@ CONFIG_IP_PNP_BOOTP=y
42# CONFIG_WIRELESS is not set 43# CONFIG_WIRELESS is not set
43CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 44CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
44CONFIG_DEVTMPFS=y 45CONFIG_DEVTMPFS=y
45CONFIG_BLK_DEV=y 46CONFIG_DMA_CMA=y
46CONFIG_SCSI=y 47CONFIG_SCSI=y
47# CONFIG_SCSI_PROC_FS is not set 48# CONFIG_SCSI_PROC_FS is not set
48CONFIG_BLK_DEV_SD=y 49CONFIG_BLK_DEV_SD=y
49# CONFIG_SCSI_LOWLEVEL is not set 50# CONFIG_SCSI_LOWLEVEL is not set
51CONFIG_ATA=y
52CONFIG_PATA_PLATFORM=y
53CONFIG_PATA_OF_PLATFORM=y
50CONFIG_NETDEVICES=y 54CONFIG_NETDEVICES=y
51CONFIG_MII=y
52CONFIG_SMC91X=y 55CONFIG_SMC91X=y
56CONFIG_SMSC911X=y
53# CONFIG_WLAN is not set 57# CONFIG_WLAN is not set
54CONFIG_INPUT_EVDEV=y 58CONFIG_INPUT_EVDEV=y
55# CONFIG_SERIO_I8042 is not set 59# CONFIG_SERIO_I8042 is not set
@@ -62,13 +66,19 @@ CONFIG_SERIAL_AMBA_PL011=y
62CONFIG_SERIAL_AMBA_PL011_CONSOLE=y 66CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
63# CONFIG_HW_RANDOM is not set 67# CONFIG_HW_RANDOM is not set
64# CONFIG_HWMON is not set 68# CONFIG_HWMON is not set
69CONFIG_REGULATOR=y
70CONFIG_REGULATOR_FIXED_VOLTAGE=y
65CONFIG_FB=y 71CONFIG_FB=y
66# CONFIG_VGA_CONSOLE is not set 72# CONFIG_VGA_CONSOLE is not set
67CONFIG_FRAMEBUFFER_CONSOLE=y 73CONFIG_FRAMEBUFFER_CONSOLE=y
68CONFIG_LOGO=y 74CONFIG_LOGO=y
69# CONFIG_LOGO_LINUX_MONO is not set 75# CONFIG_LOGO_LINUX_MONO is not set
70# CONFIG_LOGO_LINUX_VGA16 is not set 76# CONFIG_LOGO_LINUX_VGA16 is not set
71# CONFIG_USB_SUPPORT is not set 77CONFIG_USB=y
78CONFIG_USB_ISP1760_HCD=y
79CONFIG_USB_STORAGE=y
80CONFIG_MMC=y
81CONFIG_MMC_ARMMMCI=y
72# CONFIG_IOMMU_SUPPORT is not set 82# CONFIG_IOMMU_SUPPORT is not set
73CONFIG_EXT2_FS=y 83CONFIG_EXT2_FS=y
74CONFIG_EXT3_FS=y 84CONFIG_EXT3_FS=y
diff --git a/arch/arm64/include/asm/atomic.h b/arch/arm64/include/asm/atomic.h
index 01de5aaa3edc..0237f0867e37 100644
--- a/arch/arm64/include/asm/atomic.h
+++ b/arch/arm64/include/asm/atomic.h
@@ -54,8 +54,7 @@ static inline void atomic_add(int i, atomic_t *v)
54" stxr %w1, %w0, %2\n" 54" stxr %w1, %w0, %2\n"
55" cbnz %w1, 1b" 55" cbnz %w1, 1b"
56 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 56 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
57 : "Ir" (i) 57 : "Ir" (i));
58 : "cc");
59} 58}
60 59
61static inline int atomic_add_return(int i, atomic_t *v) 60static inline int atomic_add_return(int i, atomic_t *v)
@@ -64,14 +63,15 @@ static inline int atomic_add_return(int i, atomic_t *v)
64 int result; 63 int result;
65 64
66 asm volatile("// atomic_add_return\n" 65 asm volatile("// atomic_add_return\n"
67"1: ldaxr %w0, %2\n" 66"1: ldxr %w0, %2\n"
68" add %w0, %w0, %w3\n" 67" add %w0, %w0, %w3\n"
69" stlxr %w1, %w0, %2\n" 68" stlxr %w1, %w0, %2\n"
70" cbnz %w1, 1b" 69" cbnz %w1, 1b"
71 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 70 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
72 : "Ir" (i) 71 : "Ir" (i)
73 : "cc", "memory"); 72 : "memory");
74 73
74 smp_mb();
75 return result; 75 return result;
76} 76}
77 77
@@ -86,8 +86,7 @@ static inline void atomic_sub(int i, atomic_t *v)
86" stxr %w1, %w0, %2\n" 86" stxr %w1, %w0, %2\n"
87" cbnz %w1, 1b" 87" cbnz %w1, 1b"
88 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 88 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
89 : "Ir" (i) 89 : "Ir" (i));
90 : "cc");
91} 90}
92 91
93static inline int atomic_sub_return(int i, atomic_t *v) 92static inline int atomic_sub_return(int i, atomic_t *v)
@@ -96,14 +95,15 @@ static inline int atomic_sub_return(int i, atomic_t *v)
96 int result; 95 int result;
97 96
98 asm volatile("// atomic_sub_return\n" 97 asm volatile("// atomic_sub_return\n"
99"1: ldaxr %w0, %2\n" 98"1: ldxr %w0, %2\n"
100" sub %w0, %w0, %w3\n" 99" sub %w0, %w0, %w3\n"
101" stlxr %w1, %w0, %2\n" 100" stlxr %w1, %w0, %2\n"
102" cbnz %w1, 1b" 101" cbnz %w1, 1b"
103 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 102 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
104 : "Ir" (i) 103 : "Ir" (i)
105 : "cc", "memory"); 104 : "memory");
106 105
106 smp_mb();
107 return result; 107 return result;
108} 108}
109 109
@@ -112,17 +112,20 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
112 unsigned long tmp; 112 unsigned long tmp;
113 int oldval; 113 int oldval;
114 114
115 smp_mb();
116
115 asm volatile("// atomic_cmpxchg\n" 117 asm volatile("// atomic_cmpxchg\n"
116"1: ldaxr %w1, %2\n" 118"1: ldxr %w1, %2\n"
117" cmp %w1, %w3\n" 119" cmp %w1, %w3\n"
118" b.ne 2f\n" 120" b.ne 2f\n"
119" stlxr %w0, %w4, %2\n" 121" stxr %w0, %w4, %2\n"
120" cbnz %w0, 1b\n" 122" cbnz %w0, 1b\n"
121"2:" 123"2:"
122 : "=&r" (tmp), "=&r" (oldval), "+Q" (ptr->counter) 124 : "=&r" (tmp), "=&r" (oldval), "+Q" (ptr->counter)
123 : "Ir" (old), "r" (new) 125 : "Ir" (old), "r" (new)
124 : "cc", "memory"); 126 : "cc");
125 127
128 smp_mb();
126 return oldval; 129 return oldval;
127} 130}
128 131
@@ -173,8 +176,7 @@ static inline void atomic64_add(u64 i, atomic64_t *v)
173" stxr %w1, %0, %2\n" 176" stxr %w1, %0, %2\n"
174" cbnz %w1, 1b" 177" cbnz %w1, 1b"
175 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 178 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
176 : "Ir" (i) 179 : "Ir" (i));
177 : "cc");
178} 180}
179 181
180static inline long atomic64_add_return(long i, atomic64_t *v) 182static inline long atomic64_add_return(long i, atomic64_t *v)
@@ -183,14 +185,15 @@ static inline long atomic64_add_return(long i, atomic64_t *v)
183 unsigned long tmp; 185 unsigned long tmp;
184 186
185 asm volatile("// atomic64_add_return\n" 187 asm volatile("// atomic64_add_return\n"
186"1: ldaxr %0, %2\n" 188"1: ldxr %0, %2\n"
187" add %0, %0, %3\n" 189" add %0, %0, %3\n"
188" stlxr %w1, %0, %2\n" 190" stlxr %w1, %0, %2\n"
189" cbnz %w1, 1b" 191" cbnz %w1, 1b"
190 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 192 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
191 : "Ir" (i) 193 : "Ir" (i)
192 : "cc", "memory"); 194 : "memory");
193 195
196 smp_mb();
194 return result; 197 return result;
195} 198}
196 199
@@ -205,8 +208,7 @@ static inline void atomic64_sub(u64 i, atomic64_t *v)
205" stxr %w1, %0, %2\n" 208" stxr %w1, %0, %2\n"
206" cbnz %w1, 1b" 209" cbnz %w1, 1b"
207 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 210 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
208 : "Ir" (i) 211 : "Ir" (i));
209 : "cc");
210} 212}
211 213
212static inline long atomic64_sub_return(long i, atomic64_t *v) 214static inline long atomic64_sub_return(long i, atomic64_t *v)
@@ -215,14 +217,15 @@ static inline long atomic64_sub_return(long i, atomic64_t *v)
215 unsigned long tmp; 217 unsigned long tmp;
216 218
217 asm volatile("// atomic64_sub_return\n" 219 asm volatile("// atomic64_sub_return\n"
218"1: ldaxr %0, %2\n" 220"1: ldxr %0, %2\n"
219" sub %0, %0, %3\n" 221" sub %0, %0, %3\n"
220" stlxr %w1, %0, %2\n" 222" stlxr %w1, %0, %2\n"
221" cbnz %w1, 1b" 223" cbnz %w1, 1b"
222 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 224 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
223 : "Ir" (i) 225 : "Ir" (i)
224 : "cc", "memory"); 226 : "memory");
225 227
228 smp_mb();
226 return result; 229 return result;
227} 230}
228 231
@@ -231,17 +234,20 @@ static inline long atomic64_cmpxchg(atomic64_t *ptr, long old, long new)
231 long oldval; 234 long oldval;
232 unsigned long res; 235 unsigned long res;
233 236
237 smp_mb();
238
234 asm volatile("// atomic64_cmpxchg\n" 239 asm volatile("// atomic64_cmpxchg\n"
235"1: ldaxr %1, %2\n" 240"1: ldxr %1, %2\n"
236" cmp %1, %3\n" 241" cmp %1, %3\n"
237" b.ne 2f\n" 242" b.ne 2f\n"
238" stlxr %w0, %4, %2\n" 243" stxr %w0, %4, %2\n"
239" cbnz %w0, 1b\n" 244" cbnz %w0, 1b\n"
240"2:" 245"2:"
241 : "=&r" (res), "=&r" (oldval), "+Q" (ptr->counter) 246 : "=&r" (res), "=&r" (oldval), "+Q" (ptr->counter)
242 : "Ir" (old), "r" (new) 247 : "Ir" (old), "r" (new)
243 : "cc", "memory"); 248 : "cc");
244 249
250 smp_mb();
245 return oldval; 251 return oldval;
246} 252}
247 253
@@ -253,11 +259,12 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
253 unsigned long tmp; 259 unsigned long tmp;
254 260
255 asm volatile("// atomic64_dec_if_positive\n" 261 asm volatile("// atomic64_dec_if_positive\n"
256"1: ldaxr %0, %2\n" 262"1: ldxr %0, %2\n"
257" subs %0, %0, #1\n" 263" subs %0, %0, #1\n"
258" b.mi 2f\n" 264" b.mi 2f\n"
259" stlxr %w1, %0, %2\n" 265" stlxr %w1, %0, %2\n"
260" cbnz %w1, 1b\n" 266" cbnz %w1, 1b\n"
267" dmb ish\n"
261"2:" 268"2:"
262 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter) 269 : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
263 : 270 :
diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
index 78e20ba8806b..409ca370cfe2 100644
--- a/arch/arm64/include/asm/barrier.h
+++ b/arch/arm64/include/asm/barrier.h
@@ -25,7 +25,7 @@
25#define wfi() asm volatile("wfi" : : : "memory") 25#define wfi() asm volatile("wfi" : : : "memory")
26 26
27#define isb() asm volatile("isb" : : : "memory") 27#define isb() asm volatile("isb" : : : "memory")
28#define dsb() asm volatile("dsb sy" : : : "memory") 28#define dsb(opt) asm volatile("dsb sy" : : : "memory")
29 29
30#define mb() dsb() 30#define mb() dsb()
31#define rmb() asm volatile("dsb ld" : : : "memory") 31#define rmb() asm volatile("dsb ld" : : : "memory")
diff --git a/arch/arm64/include/asm/cacheflush.h b/arch/arm64/include/asm/cacheflush.h
index fea9ee327206..889324981aa4 100644
--- a/arch/arm64/include/asm/cacheflush.h
+++ b/arch/arm64/include/asm/cacheflush.h
@@ -116,6 +116,7 @@ extern void flush_dcache_page(struct page *);
116static inline void __flush_icache_all(void) 116static inline void __flush_icache_all(void)
117{ 117{
118 asm("ic ialluis"); 118 asm("ic ialluis");
119 dsb();
119} 120}
120 121
121#define flush_dcache_mmap_lock(mapping) \ 122#define flush_dcache_mmap_lock(mapping) \
diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h
index 56166d7f4a25..57c0fa7bf711 100644
--- a/arch/arm64/include/asm/cmpxchg.h
+++ b/arch/arm64/include/asm/cmpxchg.h
@@ -29,44 +29,45 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
29 switch (size) { 29 switch (size) {
30 case 1: 30 case 1:
31 asm volatile("// __xchg1\n" 31 asm volatile("// __xchg1\n"
32 "1: ldaxrb %w0, %2\n" 32 "1: ldxrb %w0, %2\n"
33 " stlxrb %w1, %w3, %2\n" 33 " stlxrb %w1, %w3, %2\n"
34 " cbnz %w1, 1b\n" 34 " cbnz %w1, 1b\n"
35 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u8 *)ptr) 35 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u8 *)ptr)
36 : "r" (x) 36 : "r" (x)
37 : "cc", "memory"); 37 : "memory");
38 break; 38 break;
39 case 2: 39 case 2:
40 asm volatile("// __xchg2\n" 40 asm volatile("// __xchg2\n"
41 "1: ldaxrh %w0, %2\n" 41 "1: ldxrh %w0, %2\n"
42 " stlxrh %w1, %w3, %2\n" 42 " stlxrh %w1, %w3, %2\n"
43 " cbnz %w1, 1b\n" 43 " cbnz %w1, 1b\n"
44 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u16 *)ptr) 44 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u16 *)ptr)
45 : "r" (x) 45 : "r" (x)
46 : "cc", "memory"); 46 : "memory");
47 break; 47 break;
48 case 4: 48 case 4:
49 asm volatile("// __xchg4\n" 49 asm volatile("// __xchg4\n"
50 "1: ldaxr %w0, %2\n" 50 "1: ldxr %w0, %2\n"
51 " stlxr %w1, %w3, %2\n" 51 " stlxr %w1, %w3, %2\n"
52 " cbnz %w1, 1b\n" 52 " cbnz %w1, 1b\n"
53 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u32 *)ptr) 53 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u32 *)ptr)
54 : "r" (x) 54 : "r" (x)
55 : "cc", "memory"); 55 : "memory");
56 break; 56 break;
57 case 8: 57 case 8:
58 asm volatile("// __xchg8\n" 58 asm volatile("// __xchg8\n"
59 "1: ldaxr %0, %2\n" 59 "1: ldxr %0, %2\n"
60 " stlxr %w1, %3, %2\n" 60 " stlxr %w1, %3, %2\n"
61 " cbnz %w1, 1b\n" 61 " cbnz %w1, 1b\n"
62 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u64 *)ptr) 62 : "=&r" (ret), "=&r" (tmp), "+Q" (*(u64 *)ptr)
63 : "r" (x) 63 : "r" (x)
64 : "cc", "memory"); 64 : "memory");
65 break; 65 break;
66 default: 66 default:
67 BUILD_BUG(); 67 BUILD_BUG();
68 } 68 }
69 69
70 smp_mb();
70 return ret; 71 return ret;
71} 72}
72 73
diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h
index 78834123a32e..c4a7f940b387 100644
--- a/arch/arm64/include/asm/esr.h
+++ b/arch/arm64/include/asm/esr.h
@@ -42,7 +42,7 @@
42#define ESR_EL1_EC_SP_ALIGN (0x26) 42#define ESR_EL1_EC_SP_ALIGN (0x26)
43#define ESR_EL1_EC_FP_EXC32 (0x28) 43#define ESR_EL1_EC_FP_EXC32 (0x28)
44#define ESR_EL1_EC_FP_EXC64 (0x2C) 44#define ESR_EL1_EC_FP_EXC64 (0x2C)
45#define ESR_EL1_EC_SERRROR (0x2F) 45#define ESR_EL1_EC_SERROR (0x2F)
46#define ESR_EL1_EC_BREAKPT_EL0 (0x30) 46#define ESR_EL1_EC_BREAKPT_EL0 (0x30)
47#define ESR_EL1_EC_BREAKPT_EL1 (0x31) 47#define ESR_EL1_EC_BREAKPT_EL1 (0x31)
48#define ESR_EL1_EC_SOFTSTP_EL0 (0x32) 48#define ESR_EL1_EC_SOFTSTP_EL0 (0x32)
diff --git a/arch/arm64/include/asm/futex.h b/arch/arm64/include/asm/futex.h
index 78cc3aba5d69..5f750dc96e0f 100644
--- a/arch/arm64/include/asm/futex.h
+++ b/arch/arm64/include/asm/futex.h
@@ -24,10 +24,11 @@
24 24
25#define __futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \ 25#define __futex_atomic_op(insn, ret, oldval, uaddr, tmp, oparg) \
26 asm volatile( \ 26 asm volatile( \
27"1: ldaxr %w1, %2\n" \ 27"1: ldxr %w1, %2\n" \
28 insn "\n" \ 28 insn "\n" \
29"2: stlxr %w3, %w0, %2\n" \ 29"2: stlxr %w3, %w0, %2\n" \
30" cbnz %w3, 1b\n" \ 30" cbnz %w3, 1b\n" \
31" dmb ish\n" \
31"3:\n" \ 32"3:\n" \
32" .pushsection .fixup,\"ax\"\n" \ 33" .pushsection .fixup,\"ax\"\n" \
33" .align 2\n" \ 34" .align 2\n" \
@@ -40,7 +41,7 @@
40" .popsection\n" \ 41" .popsection\n" \
41 : "=&r" (ret), "=&r" (oldval), "+Q" (*uaddr), "=&r" (tmp) \ 42 : "=&r" (ret), "=&r" (oldval), "+Q" (*uaddr), "=&r" (tmp) \
42 : "r" (oparg), "Ir" (-EFAULT) \ 43 : "r" (oparg), "Ir" (-EFAULT) \
43 : "cc", "memory") 44 : "memory")
44 45
45static inline int 46static inline int
46futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr) 47futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr)
@@ -111,11 +112,12 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
111 return -EFAULT; 112 return -EFAULT;
112 113
113 asm volatile("// futex_atomic_cmpxchg_inatomic\n" 114 asm volatile("// futex_atomic_cmpxchg_inatomic\n"
114"1: ldaxr %w1, %2\n" 115"1: ldxr %w1, %2\n"
115" sub %w3, %w1, %w4\n" 116" sub %w3, %w1, %w4\n"
116" cbnz %w3, 3f\n" 117" cbnz %w3, 3f\n"
117"2: stlxr %w3, %w5, %2\n" 118"2: stlxr %w3, %w5, %2\n"
118" cbnz %w3, 1b\n" 119" cbnz %w3, 1b\n"
120" dmb ish\n"
119"3:\n" 121"3:\n"
120" .pushsection .fixup,\"ax\"\n" 122" .pushsection .fixup,\"ax\"\n"
121"4: mov %w0, %w6\n" 123"4: mov %w0, %w6\n"
@@ -127,7 +129,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
127" .popsection\n" 129" .popsection\n"
128 : "+r" (ret), "=&r" (val), "+Q" (*uaddr), "=&r" (tmp) 130 : "+r" (ret), "=&r" (val), "+Q" (*uaddr), "=&r" (tmp)
129 : "r" (oldval), "r" (newval), "Ir" (-EFAULT) 131 : "r" (oldval), "r" (newval), "Ir" (-EFAULT)
130 : "cc", "memory"); 132 : "memory");
131 133
132 *uval = val; 134 *uval = val;
133 return ret; 135 return ret;
diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index c98ef4771c73..0eb398655378 100644
--- a/arch/arm64/include/asm/kvm_arm.h
+++ b/arch/arm64/include/asm/kvm_arm.h
@@ -231,7 +231,7 @@
231#define ESR_EL2_EC_SP_ALIGN (0x26) 231#define ESR_EL2_EC_SP_ALIGN (0x26)
232#define ESR_EL2_EC_FP_EXC32 (0x28) 232#define ESR_EL2_EC_FP_EXC32 (0x28)
233#define ESR_EL2_EC_FP_EXC64 (0x2C) 233#define ESR_EL2_EC_FP_EXC64 (0x2C)
234#define ESR_EL2_EC_SERRROR (0x2F) 234#define ESR_EL2_EC_SERROR (0x2F)
235#define ESR_EL2_EC_BREAKPT (0x30) 235#define ESR_EL2_EC_BREAKPT (0x30)
236#define ESR_EL2_EC_BREAKPT_HYP (0x31) 236#define ESR_EL2_EC_BREAKPT_HYP (0x31)
237#define ESR_EL2_EC_SOFTSTP (0x32) 237#define ESR_EL2_EC_SOFTSTP (0x32)
diff --git a/arch/arm64/include/asm/spinlock.h b/arch/arm64/include/asm/spinlock.h
index 3d5cf064d7a1..c45b7b1b7197 100644
--- a/arch/arm64/include/asm/spinlock.h
+++ b/arch/arm64/include/asm/spinlock.h
@@ -132,7 +132,7 @@ static inline void arch_write_lock(arch_rwlock_t *rw)
132 " cbnz %w0, 2b\n" 132 " cbnz %w0, 2b\n"
133 : "=&r" (tmp), "+Q" (rw->lock) 133 : "=&r" (tmp), "+Q" (rw->lock)
134 : "r" (0x80000000) 134 : "r" (0x80000000)
135 : "cc", "memory"); 135 : "memory");
136} 136}
137 137
138static inline int arch_write_trylock(arch_rwlock_t *rw) 138static inline int arch_write_trylock(arch_rwlock_t *rw)
@@ -146,7 +146,7 @@ static inline int arch_write_trylock(arch_rwlock_t *rw)
146 "1:\n" 146 "1:\n"
147 : "=&r" (tmp), "+Q" (rw->lock) 147 : "=&r" (tmp), "+Q" (rw->lock)
148 : "r" (0x80000000) 148 : "r" (0x80000000)
149 : "cc", "memory"); 149 : "memory");
150 150
151 return !tmp; 151 return !tmp;
152} 152}
@@ -187,7 +187,7 @@ static inline void arch_read_lock(arch_rwlock_t *rw)
187 " cbnz %w1, 2b\n" 187 " cbnz %w1, 2b\n"
188 : "=&r" (tmp), "=&r" (tmp2), "+Q" (rw->lock) 188 : "=&r" (tmp), "=&r" (tmp2), "+Q" (rw->lock)
189 : 189 :
190 : "cc", "memory"); 190 : "memory");
191} 191}
192 192
193static inline void arch_read_unlock(arch_rwlock_t *rw) 193static inline void arch_read_unlock(arch_rwlock_t *rw)
@@ -201,7 +201,7 @@ static inline void arch_read_unlock(arch_rwlock_t *rw)
201 " cbnz %w1, 1b\n" 201 " cbnz %w1, 1b\n"
202 : "=&r" (tmp), "=&r" (tmp2), "+Q" (rw->lock) 202 : "=&r" (tmp), "=&r" (tmp2), "+Q" (rw->lock)
203 : 203 :
204 : "cc", "memory"); 204 : "memory");
205} 205}
206 206
207static inline int arch_read_trylock(arch_rwlock_t *rw) 207static inline int arch_read_trylock(arch_rwlock_t *rw)
@@ -216,7 +216,7 @@ static inline int arch_read_trylock(arch_rwlock_t *rw)
216 "1:\n" 216 "1:\n"
217 : "=&r" (tmp), "+r" (tmp2), "+Q" (rw->lock) 217 : "=&r" (tmp), "+r" (tmp2), "+Q" (rw->lock)
218 : 218 :
219 : "cc", "memory"); 219 : "memory");
220 220
221 return !tmp2; 221 return !tmp2;
222} 222}
diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
index 58125bf008d3..bb8eb8a78e67 100644
--- a/arch/arm64/include/asm/unistd32.h
+++ b/arch/arm64/include/asm/unistd32.h
@@ -399,7 +399,10 @@ __SYSCALL(374, compat_sys_sendmmsg)
399__SYSCALL(375, sys_setns) 399__SYSCALL(375, sys_setns)
400__SYSCALL(376, compat_sys_process_vm_readv) 400__SYSCALL(376, compat_sys_process_vm_readv)
401__SYSCALL(377, compat_sys_process_vm_writev) 401__SYSCALL(377, compat_sys_process_vm_writev)
402__SYSCALL(378, sys_ni_syscall) /* 378 for kcmp */ 402__SYSCALL(378, sys_kcmp)
403__SYSCALL(379, sys_finit_module)
404__SYSCALL(380, sys_sched_setattr)
405__SYSCALL(381, sys_sched_getattr)
403 406
404#define __NR_compat_syscalls 379 407#define __NR_compat_syscalls 379
405 408
diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h
index 495ab6f84a61..eaf54a30bedc 100644
--- a/arch/arm64/include/uapi/asm/kvm.h
+++ b/arch/arm64/include/uapi/asm/kvm.h
@@ -148,6 +148,15 @@ struct kvm_arch_memory_slot {
148#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2) 148#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2)
149#define KVM_REG_ARM_TIMER_CVAL ARM64_SYS_REG(3, 3, 14, 0, 2) 149#define KVM_REG_ARM_TIMER_CVAL ARM64_SYS_REG(3, 3, 14, 0, 2)
150 150
151/* Device Control API: ARM VGIC */
152#define KVM_DEV_ARM_VGIC_GRP_ADDR 0
153#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
154#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2
155#define KVM_DEV_ARM_VGIC_CPUID_SHIFT 32
156#define KVM_DEV_ARM_VGIC_CPUID_MASK (0xffULL << KVM_DEV_ARM_VGIC_CPUID_SHIFT)
157#define KVM_DEV_ARM_VGIC_OFFSET_SHIFT 0
158#define KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
159
151/* KVM_IRQ_LINE irq field index values */ 160/* KVM_IRQ_LINE irq field index values */
152#define KVM_ARM_IRQ_TYPE_SHIFT 24 161#define KVM_ARM_IRQ_TYPE_SHIFT 24
153#define KVM_ARM_IRQ_TYPE_MASK 0xff 162#define KVM_ARM_IRQ_TYPE_MASK 0xff
diff --git a/arch/arm64/kernel/kuser32.S b/arch/arm64/kernel/kuser32.S
index 63c48ffdf230..7787208e8cc6 100644
--- a/arch/arm64/kernel/kuser32.S
+++ b/arch/arm64/kernel/kuser32.S
@@ -38,12 +38,13 @@ __kuser_cmpxchg64: // 0xffff0f60
38 .inst 0xe92d00f0 // push {r4, r5, r6, r7} 38 .inst 0xe92d00f0 // push {r4, r5, r6, r7}
39 .inst 0xe1c040d0 // ldrd r4, r5, [r0] 39 .inst 0xe1c040d0 // ldrd r4, r5, [r0]
40 .inst 0xe1c160d0 // ldrd r6, r7, [r1] 40 .inst 0xe1c160d0 // ldrd r6, r7, [r1]
41 .inst 0xe1b20e9f // 1: ldaexd r0, r1, [r2] 41 .inst 0xe1b20f9f // 1: ldrexd r0, r1, [r2]
42 .inst 0xe0303004 // eors r3, r0, r4 42 .inst 0xe0303004 // eors r3, r0, r4
43 .inst 0x00313005 // eoreqs r3, r1, r5 43 .inst 0x00313005 // eoreqs r3, r1, r5
44 .inst 0x01a23e96 // stlexdeq r3, r6, [r2] 44 .inst 0x01a23e96 // stlexdeq r3, r6, [r2]
45 .inst 0x03330001 // teqeq r3, #1 45 .inst 0x03330001 // teqeq r3, #1
46 .inst 0x0afffff9 // beq 1b 46 .inst 0x0afffff9 // beq 1b
47 .inst 0xf57ff05b // dmb ish
47 .inst 0xe2730000 // rsbs r0, r3, #0 48 .inst 0xe2730000 // rsbs r0, r3, #0
48 .inst 0xe8bd00f0 // pop {r4, r5, r6, r7} 49 .inst 0xe8bd00f0 // pop {r4, r5, r6, r7}
49 .inst 0xe12fff1e // bx lr 50 .inst 0xe12fff1e // bx lr
@@ -55,11 +56,12 @@ __kuser_memory_barrier: // 0xffff0fa0
55 56
56 .align 5 57 .align 5
57__kuser_cmpxchg: // 0xffff0fc0 58__kuser_cmpxchg: // 0xffff0fc0
58 .inst 0xe1923e9f // 1: ldaex r3, [r2] 59 .inst 0xe1923f9f // 1: ldrex r3, [r2]
59 .inst 0xe0533000 // subs r3, r3, r0 60 .inst 0xe0533000 // subs r3, r3, r0
60 .inst 0x01823e91 // stlexeq r3, r1, [r2] 61 .inst 0x01823e91 // stlexeq r3, r1, [r2]
61 .inst 0x03330001 // teqeq r3, #1 62 .inst 0x03330001 // teqeq r3, #1
62 .inst 0x0afffffa // beq 1b 63 .inst 0x0afffffa // beq 1b
64 .inst 0xf57ff05b // dmb ish
63 .inst 0xe2730000 // rsbs r0, r3, #0 65 .inst 0xe2730000 // rsbs r0, r3, #0
64 .inst 0xe12fff1e // bx lr 66 .inst 0xe12fff1e // bx lr
65 67
diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
index 65d40cf6945a..a7149cae1615 100644
--- a/arch/arm64/kernel/vdso.c
+++ b/arch/arm64/kernel/vdso.c
@@ -238,6 +238,8 @@ void update_vsyscall(struct timekeeper *tk)
238 vdso_data->use_syscall = use_syscall; 238 vdso_data->use_syscall = use_syscall;
239 vdso_data->xtime_coarse_sec = xtime_coarse.tv_sec; 239 vdso_data->xtime_coarse_sec = xtime_coarse.tv_sec;
240 vdso_data->xtime_coarse_nsec = xtime_coarse.tv_nsec; 240 vdso_data->xtime_coarse_nsec = xtime_coarse.tv_nsec;
241 vdso_data->wtm_clock_sec = tk->wall_to_monotonic.tv_sec;
242 vdso_data->wtm_clock_nsec = tk->wall_to_monotonic.tv_nsec;
241 243
242 if (!use_syscall) { 244 if (!use_syscall) {
243 vdso_data->cs_cycle_last = tk->clock->cycle_last; 245 vdso_data->cs_cycle_last = tk->clock->cycle_last;
@@ -245,8 +247,6 @@ void update_vsyscall(struct timekeeper *tk)
245 vdso_data->xtime_clock_nsec = tk->xtime_nsec; 247 vdso_data->xtime_clock_nsec = tk->xtime_nsec;
246 vdso_data->cs_mult = tk->mult; 248 vdso_data->cs_mult = tk->mult;
247 vdso_data->cs_shift = tk->shift; 249 vdso_data->cs_shift = tk->shift;
248 vdso_data->wtm_clock_sec = tk->wall_to_monotonic.tv_sec;
249 vdso_data->wtm_clock_nsec = tk->wall_to_monotonic.tv_nsec;
250 } 250 }
251 251
252 smp_wmb(); 252 smp_wmb();
diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
index d8064af42e62..6d20b7d162d8 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
@@ -48,7 +48,7 @@ $(obj-vdso): %.o: %.S
48 48
49# Actual build commands 49# Actual build commands
50quiet_cmd_vdsold = VDSOL $@ 50quiet_cmd_vdsold = VDSOL $@
51 cmd_vdsold = $(CC) $(c_flags) -Wl,-T $^ -o $@ 51 cmd_vdsold = $(CC) $(c_flags) -Wl,-n -Wl,-T $^ -o $@
52quiet_cmd_vdsoas = VDSOA $@ 52quiet_cmd_vdsoas = VDSOA $@
53 cmd_vdsoas = $(CC) $(a_flags) -c -o $@ $< 53 cmd_vdsoas = $(CC) $(a_flags) -c -o $@ $<
54 54
diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S
index f0a6d10b5211..fe652ffd34c2 100644
--- a/arch/arm64/kernel/vdso/gettimeofday.S
+++ b/arch/arm64/kernel/vdso/gettimeofday.S
@@ -103,6 +103,8 @@ ENTRY(__kernel_clock_gettime)
103 bl __do_get_tspec 103 bl __do_get_tspec
104 seqcnt_check w9, 1b 104 seqcnt_check w9, 1b
105 105
106 mov x30, x2
107
106 cmp w0, #CLOCK_MONOTONIC 108 cmp w0, #CLOCK_MONOTONIC
107 b.ne 6f 109 b.ne 6f
108 110
@@ -118,6 +120,9 @@ ENTRY(__kernel_clock_gettime)
118 ccmp w0, #CLOCK_MONOTONIC_COARSE, #0x4, ne 120 ccmp w0, #CLOCK_MONOTONIC_COARSE, #0x4, ne
119 b.ne 8f 121 b.ne 8f
120 122
123 /* xtime_coarse_nsec is already right-shifted */
124 mov x12, #0
125
121 /* Get coarse timespec. */ 126 /* Get coarse timespec. */
122 adr vdso_data, _vdso_data 127 adr vdso_data, _vdso_data
1233: seqcnt_acquire 1283: seqcnt_acquire
@@ -156,7 +161,7 @@ ENTRY(__kernel_clock_gettime)
156 lsr x11, x11, x12 161 lsr x11, x11, x12
157 stp x10, x11, [x1, #TSPEC_TV_SEC] 162 stp x10, x11, [x1, #TSPEC_TV_SEC]
158 mov x0, xzr 163 mov x0, xzr
159 ret x2 164 ret
1607: 1657:
161 mov x30, x2 166 mov x30, x2
1628: /* Syscall fallback. */ 1678: /* Syscall fallback. */
diff --git a/arch/arm64/lib/bitops.S b/arch/arm64/lib/bitops.S
index e5db797790d3..7dac371cc9a2 100644
--- a/arch/arm64/lib/bitops.S
+++ b/arch/arm64/lib/bitops.S
@@ -46,11 +46,12 @@ ENTRY( \name )
46 mov x2, #1 46 mov x2, #1
47 add x1, x1, x0, lsr #3 // Get word offset 47 add x1, x1, x0, lsr #3 // Get word offset
48 lsl x4, x2, x3 // Create mask 48 lsl x4, x2, x3 // Create mask
491: ldaxr x2, [x1] 491: ldxr x2, [x1]
50 lsr x0, x2, x3 // Save old value of bit 50 lsr x0, x2, x3 // Save old value of bit
51 \instr x2, x2, x4 // toggle bit 51 \instr x2, x2, x4 // toggle bit
52 stlxr w5, x2, [x1] 52 stlxr w5, x2, [x1]
53 cbnz w5, 1b 53 cbnz w5, 1b
54 dmb ish
54 and x0, x0, #1 55 and x0, x0, #1
553: ret 563: ret
56ENDPROC(\name ) 57ENDPROC(\name )
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 45b5ab54c9ee..fbd76785c5db 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -45,6 +45,7 @@ static void *arm64_swiotlb_alloc_coherent(struct device *dev, size_t size,
45 if (IS_ENABLED(CONFIG_DMA_CMA)) { 45 if (IS_ENABLED(CONFIG_DMA_CMA)) {
46 struct page *page; 46 struct page *page;
47 47
48 size = PAGE_ALIGN(size);
48 page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT, 49 page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT,
49 get_order(size)); 50 get_order(size));
50 if (!page) 51 if (!page)
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index f557ebbe7013..f8dc7e8fce6f 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -203,10 +203,18 @@ static void __init alloc_init_pmd(pud_t *pud, unsigned long addr,
203 do { 203 do {
204 next = pmd_addr_end(addr, end); 204 next = pmd_addr_end(addr, end);
205 /* try section mapping first */ 205 /* try section mapping first */
206 if (((addr | next | phys) & ~SECTION_MASK) == 0) 206 if (((addr | next | phys) & ~SECTION_MASK) == 0) {
207 pmd_t old_pmd =*pmd;
207 set_pmd(pmd, __pmd(phys | prot_sect_kernel)); 208 set_pmd(pmd, __pmd(phys | prot_sect_kernel));
208 else 209 /*
210 * Check for previous table entries created during
211 * boot (__create_page_tables) and flush them.
212 */
213 if (!pmd_none(old_pmd))
214 flush_tlb_all();
215 } else {
209 alloc_init_pte(pmd, addr, next, __phys_to_pfn(phys)); 216 alloc_init_pte(pmd, addr, next, __phys_to_pfn(phys));
217 }
210 phys += next - addr; 218 phys += next - addr;
211 } while (pmd++, addr = next, addr != end); 219 } while (pmd++, addr = next, addr != end);
212} 220}
diff --git a/arch/arm64/mm/pgd.c b/arch/arm64/mm/pgd.c
index 7083cdada657..62c6101df260 100644
--- a/arch/arm64/mm/pgd.c
+++ b/arch/arm64/mm/pgd.c
@@ -32,17 +32,10 @@
32 32
33pgd_t *pgd_alloc(struct mm_struct *mm) 33pgd_t *pgd_alloc(struct mm_struct *mm)
34{ 34{
35 pgd_t *new_pgd;
36
37 if (PGD_SIZE == PAGE_SIZE) 35 if (PGD_SIZE == PAGE_SIZE)
38 new_pgd = (pgd_t *)get_zeroed_page(GFP_KERNEL); 36 return (pgd_t *)get_zeroed_page(GFP_KERNEL);
39 else 37 else
40 new_pgd = kzalloc(PGD_SIZE, GFP_KERNEL); 38 return kzalloc(PGD_SIZE, GFP_KERNEL);
41
42 if (!new_pgd)
43 return NULL;
44
45 return new_pgd;
46} 39}
47 40
48void pgd_free(struct mm_struct *mm, pgd_t *pgd) 41void pgd_free(struct mm_struct *mm, pgd_t *pgd)
diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h
index afd45e0d552e..ae763d8bf55a 100644
--- a/arch/ia64/include/asm/unistd.h
+++ b/arch/ia64/include/asm/unistd.h
@@ -11,7 +11,7 @@
11 11
12 12
13 13
14#define NR_syscalls 312 /* length of syscall table */ 14#define NR_syscalls 314 /* length of syscall table */
15 15
16/* 16/*
17 * The following defines stop scripts/checksyscalls.sh from complaining about 17 * The following defines stop scripts/checksyscalls.sh from complaining about
diff --git a/arch/ia64/include/uapi/asm/unistd.h b/arch/ia64/include/uapi/asm/unistd.h
index 34fd6fe46da1..715e85f858de 100644
--- a/arch/ia64/include/uapi/asm/unistd.h
+++ b/arch/ia64/include/uapi/asm/unistd.h
@@ -325,5 +325,7 @@
325#define __NR_process_vm_writev 1333 325#define __NR_process_vm_writev 1333
326#define __NR_accept4 1334 326#define __NR_accept4 1334
327#define __NR_finit_module 1335 327#define __NR_finit_module 1335
328#define __NR_sched_setattr 1336
329#define __NR_sched_getattr 1337
328 330
329#endif /* _UAPI_ASM_IA64_UNISTD_H */ 331#endif /* _UAPI_ASM_IA64_UNISTD_H */
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
index ddea607f948a..fa8d61a312a7 100644
--- a/arch/ia64/kernel/entry.S
+++ b/arch/ia64/kernel/entry.S
@@ -1773,6 +1773,8 @@ sys_call_table:
1773 data8 sys_process_vm_writev 1773 data8 sys_process_vm_writev
1774 data8 sys_accept4 1774 data8 sys_accept4
1775 data8 sys_finit_module // 1335 1775 data8 sys_finit_module // 1335
1776 data8 sys_sched_setattr
1777 data8 sys_sched_getattr
1776 1778
1777 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 1779 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
1778#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */ 1780#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
diff --git a/arch/microblaze/include/asm/delay.h b/arch/microblaze/include/asm/delay.h
index 05b7d39e4391..66fc24c24238 100644
--- a/arch/microblaze/include/asm/delay.h
+++ b/arch/microblaze/include/asm/delay.h
@@ -13,6 +13,8 @@
13#ifndef _ASM_MICROBLAZE_DELAY_H 13#ifndef _ASM_MICROBLAZE_DELAY_H
14#define _ASM_MICROBLAZE_DELAY_H 14#define _ASM_MICROBLAZE_DELAY_H
15 15
16#include <linux/param.h>
17
16extern inline void __delay(unsigned long loops) 18extern inline void __delay(unsigned long loops)
17{ 19{
18 asm volatile ("# __delay \n\t" \ 20 asm volatile ("# __delay \n\t" \
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h
index a2cea7206077..3fbb7f1db3bc 100644
--- a/arch/microblaze/include/asm/io.h
+++ b/arch/microblaze/include/asm/io.h
@@ -89,6 +89,11 @@ static inline unsigned int readl(const volatile void __iomem *addr)
89{ 89{
90 return le32_to_cpu(*(volatile unsigned int __force *)addr); 90 return le32_to_cpu(*(volatile unsigned int __force *)addr);
91} 91}
92#define readq readq
93static inline u64 readq(const volatile void __iomem *addr)
94{
95 return le64_to_cpu(__raw_readq(addr));
96}
92static inline void writeb(unsigned char v, volatile void __iomem *addr) 97static inline void writeb(unsigned char v, volatile void __iomem *addr)
93{ 98{
94 *(volatile unsigned char __force *)addr = v; 99 *(volatile unsigned char __force *)addr = v;
@@ -101,6 +106,7 @@ static inline void writel(unsigned int v, volatile void __iomem *addr)
101{ 106{
102 *(volatile unsigned int __force *)addr = cpu_to_le32(v); 107 *(volatile unsigned int __force *)addr = cpu_to_le32(v);
103} 108}
109#define writeq(b, addr) __raw_writeq(cpu_to_le64(b), addr)
104 110
105/* ioread and iowrite variants. thease are for now same as __raw_ 111/* ioread and iowrite variants. thease are for now same as __raw_
106 * variants of accessors. we might check for endianess in the feature 112 * variants of accessors. we might check for endianess in the feature
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S
index b7fb0438458c..17645b2e2f07 100644
--- a/arch/microblaze/kernel/head.S
+++ b/arch/microblaze/kernel/head.S
@@ -66,7 +66,7 @@ real_start:
66 mts rmsr, r0 66 mts rmsr, r0
67/* Disable stack protection from bootloader */ 67/* Disable stack protection from bootloader */
68 mts rslr, r0 68 mts rslr, r0
69 addi r8, r0, 0xFFFFFFF 69 addi r8, r0, 0xFFFFFFFF
70 mts rshr, r8 70 mts rshr, r8
71/* 71/*
72 * According to Xilinx, msrclr instruction behaves like 'mfs rX,rpc' 72 * According to Xilinx, msrclr instruction behaves like 'mfs rX,rpc'
diff --git a/arch/mips/alchemy/devboards/db1000.c b/arch/mips/alchemy/devboards/db1000.c
index 11f3ad20321c..5483906e0f86 100644
--- a/arch/mips/alchemy/devboards/db1000.c
+++ b/arch/mips/alchemy/devboards/db1000.c
@@ -534,13 +534,10 @@ static int __init db1000_dev_init(void)
534 s0 = AU1100_GPIO1_INT; 534 s0 = AU1100_GPIO1_INT;
535 s1 = AU1100_GPIO4_INT; 535 s1 = AU1100_GPIO4_INT;
536 536
537 gpio_request(19, "sd0_cd");
538 gpio_request(20, "sd1_cd");
537 gpio_direction_input(19); /* sd0 cd# */ 539 gpio_direction_input(19); /* sd0 cd# */
538 gpio_direction_input(20); /* sd1 cd# */ 540 gpio_direction_input(20); /* sd1 cd# */
539 gpio_direction_input(21); /* touch pendown# */
540 gpio_direction_input(207); /* SPI MISO */
541 gpio_direction_output(208, 0); /* SPI MOSI */
542 gpio_direction_output(209, 1); /* SPI SCK */
543 gpio_direction_output(210, 1); /* SPI CS# */
544 541
545 /* spi_gpio on SSI0 pins */ 542 /* spi_gpio on SSI0 pins */
546 pfc = __raw_readl((void __iomem *)SYS_PINFUNC); 543 pfc = __raw_readl((void __iomem *)SYS_PINFUNC);
diff --git a/arch/mips/include/asm/fpu.h b/arch/mips/include/asm/fpu.h
index cfe092fc720d..6b9749540edf 100644
--- a/arch/mips/include/asm/fpu.h
+++ b/arch/mips/include/asm/fpu.h
@@ -74,6 +74,8 @@ static inline int __enable_fpu(enum fpu_mode mode)
74 default: 74 default:
75 BUG(); 75 BUG();
76 } 76 }
77
78 return SIGFPE;
77} 79}
78 80
79#define __disable_fpu() \ 81#define __disable_fpu() \
diff --git a/arch/mips/include/uapi/asm/unistd.h b/arch/mips/include/uapi/asm/unistd.h
index 1dee279f9665..d6e154a9e6a5 100644
--- a/arch/mips/include/uapi/asm/unistd.h
+++ b/arch/mips/include/uapi/asm/unistd.h
@@ -369,16 +369,18 @@
369#define __NR_process_vm_writev (__NR_Linux + 346) 369#define __NR_process_vm_writev (__NR_Linux + 346)
370#define __NR_kcmp (__NR_Linux + 347) 370#define __NR_kcmp (__NR_Linux + 347)
371#define __NR_finit_module (__NR_Linux + 348) 371#define __NR_finit_module (__NR_Linux + 348)
372#define __NR_sched_setattr (__NR_Linux + 349)
373#define __NR_sched_getattr (__NR_Linux + 350)
372 374
373/* 375/*
374 * Offset of the last Linux o32 flavoured syscall 376 * Offset of the last Linux o32 flavoured syscall
375 */ 377 */
376#define __NR_Linux_syscalls 348 378#define __NR_Linux_syscalls 350
377 379
378#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ 380#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
379 381
380#define __NR_O32_Linux 4000 382#define __NR_O32_Linux 4000
381#define __NR_O32_Linux_syscalls 348 383#define __NR_O32_Linux_syscalls 350
382 384
383#if _MIPS_SIM == _MIPS_SIM_ABI64 385#if _MIPS_SIM == _MIPS_SIM_ABI64
384 386
@@ -695,16 +697,18 @@
695#define __NR_kcmp (__NR_Linux + 306) 697#define __NR_kcmp (__NR_Linux + 306)
696#define __NR_finit_module (__NR_Linux + 307) 698#define __NR_finit_module (__NR_Linux + 307)
697#define __NR_getdents64 (__NR_Linux + 308) 699#define __NR_getdents64 (__NR_Linux + 308)
700#define __NR_sched_setattr (__NR_Linux + 309)
701#define __NR_sched_getattr (__NR_Linux + 310)
698 702
699/* 703/*
700 * Offset of the last Linux 64-bit flavoured syscall 704 * Offset of the last Linux 64-bit flavoured syscall
701 */ 705 */
702#define __NR_Linux_syscalls 308 706#define __NR_Linux_syscalls 310
703 707
704#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ 708#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
705 709
706#define __NR_64_Linux 5000 710#define __NR_64_Linux 5000
707#define __NR_64_Linux_syscalls 308 711#define __NR_64_Linux_syscalls 310
708 712
709#if _MIPS_SIM == _MIPS_SIM_NABI32 713#if _MIPS_SIM == _MIPS_SIM_NABI32
710 714
@@ -1025,15 +1029,17 @@
1025#define __NR_process_vm_writev (__NR_Linux + 310) 1029#define __NR_process_vm_writev (__NR_Linux + 310)
1026#define __NR_kcmp (__NR_Linux + 311) 1030#define __NR_kcmp (__NR_Linux + 311)
1027#define __NR_finit_module (__NR_Linux + 312) 1031#define __NR_finit_module (__NR_Linux + 312)
1032#define __NR_sched_setattr (__NR_Linux + 313)
1033#define __NR_sched_getattr (__NR_Linux + 314)
1028 1034
1029/* 1035/*
1030 * Offset of the last N32 flavoured syscall 1036 * Offset of the last N32 flavoured syscall
1031 */ 1037 */
1032#define __NR_Linux_syscalls 312 1038#define __NR_Linux_syscalls 314
1033 1039
1034#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ 1040#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
1035 1041
1036#define __NR_N32_Linux 6000 1042#define __NR_N32_Linux 6000
1037#define __NR_N32_Linux_syscalls 312 1043#define __NR_N32_Linux_syscalls 314
1038 1044
1039#endif /* _UAPI_ASM_UNISTD_H */ 1045#endif /* _UAPI_ASM_UNISTD_H */
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index e8e541b40d86..a5b14f48e1af 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -563,3 +563,5 @@ EXPORT(sys_call_table)
563 PTR sys_process_vm_writev 563 PTR sys_process_vm_writev
564 PTR sys_kcmp 564 PTR sys_kcmp
565 PTR sys_finit_module 565 PTR sys_finit_module
566 PTR sys_sched_setattr
567 PTR sys_sched_getattr /* 4350 */
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index 57e3742fec59..b56e254beb15 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -425,4 +425,6 @@ EXPORT(sys_call_table)
425 PTR sys_kcmp 425 PTR sys_kcmp
426 PTR sys_finit_module 426 PTR sys_finit_module
427 PTR sys_getdents64 427 PTR sys_getdents64
428 PTR sys_sched_setattr
429 PTR sys_sched_getattr /* 5310 */
428 .size sys_call_table,.-sys_call_table 430 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 2f48f5934399..f7e5b72cf481 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -418,4 +418,6 @@ EXPORT(sysn32_call_table)
418 PTR compat_sys_process_vm_writev /* 6310 */ 418 PTR compat_sys_process_vm_writev /* 6310 */
419 PTR sys_kcmp 419 PTR sys_kcmp
420 PTR sys_finit_module 420 PTR sys_finit_module
421 PTR sys_sched_setattr
422 PTR sys_sched_getattr
421 .size sysn32_call_table,.-sysn32_call_table 423 .size sysn32_call_table,.-sysn32_call_table
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index f1acdb429f4f..6788727d91af 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -541,4 +541,6 @@ EXPORT(sys32_call_table)
541 PTR compat_sys_process_vm_writev 541 PTR compat_sys_process_vm_writev
542 PTR sys_kcmp 542 PTR sys_kcmp
543 PTR sys_finit_module 543 PTR sys_finit_module
544 PTR sys_sched_setattr
545 PTR sys_sched_getattr /* 4350 */
544 .size sys32_call_table,.-sys32_call_table 546 .size sys32_call_table,.-sys32_call_table
diff --git a/arch/parisc/hpux/fs.c b/arch/parisc/hpux/fs.c
index 88d0962de65a..2bedafea3d94 100644
--- a/arch/parisc/hpux/fs.c
+++ b/arch/parisc/hpux/fs.c
@@ -33,22 +33,9 @@
33 33
34int hpux_execve(struct pt_regs *regs) 34int hpux_execve(struct pt_regs *regs)
35{ 35{
36 int error; 36 return do_execve(getname((const char __user *) regs->gr[26]),
37 struct filename *filename;
38
39 filename = getname((const char __user *) regs->gr[26]);
40 error = PTR_ERR(filename);
41 if (IS_ERR(filename))
42 goto out;
43
44 error = do_execve(filename->name,
45 (const char __user *const __user *) regs->gr[25], 37 (const char __user *const __user *) regs->gr[25],
46 (const char __user *const __user *) regs->gr[24]); 38 (const char __user *const __user *) regs->gr[24]);
47
48 putname(filename);
49
50out:
51 return error;
52} 39}
53 40
54struct hpux_dirent { 41struct hpux_dirent {
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h
index e27e9ad6818e..150866b2a3fe 100644
--- a/arch/powerpc/include/asm/dma-mapping.h
+++ b/arch/powerpc/include/asm/dma-mapping.h
@@ -134,6 +134,7 @@ static inline int dma_supported(struct device *dev, u64 mask)
134} 134}
135 135
136extern int dma_set_mask(struct device *dev, u64 dma_mask); 136extern int dma_set_mask(struct device *dev, u64 dma_mask);
137extern int __dma_set_mask(struct device *dev, u64 dma_mask);
137 138
138#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL) 139#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
139 140
diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h
index f7a8036579b5..42632c7a2a4e 100644
--- a/arch/powerpc/include/asm/iommu.h
+++ b/arch/powerpc/include/asm/iommu.h
@@ -77,6 +77,7 @@ struct iommu_table {
77#ifdef CONFIG_IOMMU_API 77#ifdef CONFIG_IOMMU_API
78 struct iommu_group *it_group; 78 struct iommu_group *it_group;
79#endif 79#endif
80 void (*set_bypass)(struct iommu_table *tbl, bool enable);
80}; 81};
81 82
82/* Pure 2^n version of get_order */ 83/* Pure 2^n version of get_order */
diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h
index 4ee06fe15de4..d0e784e0ff48 100644
--- a/arch/powerpc/include/asm/sections.h
+++ b/arch/powerpc/include/asm/sections.h
@@ -8,6 +8,7 @@
8 8
9#ifdef __powerpc64__ 9#ifdef __powerpc64__
10 10
11extern char __start_interrupts[];
11extern char __end_interrupts[]; 12extern char __end_interrupts[];
12 13
13extern char __prom_init_toc_start[]; 14extern char __prom_init_toc_start[];
@@ -21,6 +22,17 @@ static inline int in_kernel_text(unsigned long addr)
21 return 0; 22 return 0;
22} 23}
23 24
25static inline int overlaps_interrupt_vector_text(unsigned long start,
26 unsigned long end)
27{
28 unsigned long real_start, real_end;
29 real_start = __start_interrupts - _stext;
30 real_end = __end_interrupts - _stext;
31
32 return start < (unsigned long)__va(real_end) &&
33 (unsigned long)__va(real_start) < end;
34}
35
24static inline int overlaps_kernel_text(unsigned long start, unsigned long end) 36static inline int overlaps_kernel_text(unsigned long start, unsigned long end)
25{ 37{
26 return start < (unsigned long)__init_end && 38 return start < (unsigned long)__init_end &&
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 8032b97ccdcb..ee78f6e49d64 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -191,12 +191,10 @@ EXPORT_SYMBOL(dma_direct_ops);
191 191
192#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16) 192#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
193 193
194int dma_set_mask(struct device *dev, u64 dma_mask) 194int __dma_set_mask(struct device *dev, u64 dma_mask)
195{ 195{
196 struct dma_map_ops *dma_ops = get_dma_ops(dev); 196 struct dma_map_ops *dma_ops = get_dma_ops(dev);
197 197
198 if (ppc_md.dma_set_mask)
199 return ppc_md.dma_set_mask(dev, dma_mask);
200 if ((dma_ops != NULL) && (dma_ops->set_dma_mask != NULL)) 198 if ((dma_ops != NULL) && (dma_ops->set_dma_mask != NULL))
201 return dma_ops->set_dma_mask(dev, dma_mask); 199 return dma_ops->set_dma_mask(dev, dma_mask);
202 if (!dev->dma_mask || !dma_supported(dev, dma_mask)) 200 if (!dev->dma_mask || !dma_supported(dev, dma_mask))
@@ -204,6 +202,12 @@ int dma_set_mask(struct device *dev, u64 dma_mask)
204 *dev->dma_mask = dma_mask; 202 *dev->dma_mask = dma_mask;
205 return 0; 203 return 0;
206} 204}
205int dma_set_mask(struct device *dev, u64 dma_mask)
206{
207 if (ppc_md.dma_set_mask)
208 return ppc_md.dma_set_mask(dev, dma_mask);
209 return __dma_set_mask(dev, dma_mask);
210}
207EXPORT_SYMBOL(dma_set_mask); 211EXPORT_SYMBOL(dma_set_mask);
208 212
209u64 dma_get_required_mask(struct device *dev) 213u64 dma_get_required_mask(struct device *dev)
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index 7bb30dca4e19..fdc679d309ec 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -362,9 +362,13 @@ static void *eeh_rmv_device(void *data, void *userdata)
362 */ 362 */
363 if (!dev || (dev->hdr_type & PCI_HEADER_TYPE_BRIDGE)) 363 if (!dev || (dev->hdr_type & PCI_HEADER_TYPE_BRIDGE))
364 return NULL; 364 return NULL;
365
365 driver = eeh_pcid_get(dev); 366 driver = eeh_pcid_get(dev);
366 if (driver && driver->err_handler) 367 if (driver) {
367 return NULL; 368 eeh_pcid_put(dev);
369 if (driver->err_handler)
370 return NULL;
371 }
368 372
369 /* Remove it from PCI subsystem */ 373 /* Remove it from PCI subsystem */
370 pr_debug("EEH: Removing %s without EEH sensitive driver\n", 374 pr_debug("EEH: Removing %s without EEH sensitive driver\n",
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index d773dd440a45..88e3ec6e1d96 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -1088,6 +1088,14 @@ int iommu_take_ownership(struct iommu_table *tbl)
1088 memset(tbl->it_map, 0xff, sz); 1088 memset(tbl->it_map, 0xff, sz);
1089 iommu_clear_tces_and_put_pages(tbl, tbl->it_offset, tbl->it_size); 1089 iommu_clear_tces_and_put_pages(tbl, tbl->it_offset, tbl->it_size);
1090 1090
1091 /*
1092 * Disable iommu bypass, otherwise the user can DMA to all of
1093 * our physical memory via the bypass window instead of just
1094 * the pages that has been explicitly mapped into the iommu
1095 */
1096 if (tbl->set_bypass)
1097 tbl->set_bypass(tbl, false);
1098
1091 return 0; 1099 return 0;
1092} 1100}
1093EXPORT_SYMBOL_GPL(iommu_take_ownership); 1101EXPORT_SYMBOL_GPL(iommu_take_ownership);
@@ -1102,6 +1110,10 @@ void iommu_release_ownership(struct iommu_table *tbl)
1102 /* Restore bit#0 set by iommu_init_table() */ 1110 /* Restore bit#0 set by iommu_init_table() */
1103 if (tbl->it_offset == 0) 1111 if (tbl->it_offset == 0)
1104 set_bit(0, tbl->it_map); 1112 set_bit(0, tbl->it_map);
1113
1114 /* The kernel owns the device now, we can restore the iommu bypass */
1115 if (tbl->set_bypass)
1116 tbl->set_bypass(tbl, true);
1105} 1117}
1106EXPORT_SYMBOL_GPL(iommu_release_ownership); 1118EXPORT_SYMBOL_GPL(iommu_release_ownership);
1107 1119
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 9729b23bfb0a..1d0848bba049 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -559,8 +559,13 @@ void exc_lvl_ctx_init(void)
559#ifdef CONFIG_PPC64 559#ifdef CONFIG_PPC64
560 cpu_nr = i; 560 cpu_nr = i;
561#else 561#else
562#ifdef CONFIG_SMP
562 cpu_nr = get_hard_smp_processor_id(i); 563 cpu_nr = get_hard_smp_processor_id(i);
564#else
565 cpu_nr = 0;
563#endif 566#endif
567#endif
568
564 memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE); 569 memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
565 tp = critirq_ctx[cpu_nr]; 570 tp = critirq_ctx[cpu_nr];
566 tp->cpu = cpu_nr; 571 tp->cpu = cpu_nr;
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
index 75d4f7340da8..015ae55c1868 100644
--- a/arch/powerpc/kernel/machine_kexec.c
+++ b/arch/powerpc/kernel/machine_kexec.c
@@ -196,7 +196,9 @@ int overlaps_crashkernel(unsigned long start, unsigned long size)
196 196
197/* Values we need to export to the second kernel via the device tree. */ 197/* Values we need to export to the second kernel via the device tree. */
198static phys_addr_t kernel_end; 198static phys_addr_t kernel_end;
199static phys_addr_t crashk_base;
199static phys_addr_t crashk_size; 200static phys_addr_t crashk_size;
201static unsigned long long mem_limit;
200 202
201static struct property kernel_end_prop = { 203static struct property kernel_end_prop = {
202 .name = "linux,kernel-end", 204 .name = "linux,kernel-end",
@@ -207,7 +209,7 @@ static struct property kernel_end_prop = {
207static struct property crashk_base_prop = { 209static struct property crashk_base_prop = {
208 .name = "linux,crashkernel-base", 210 .name = "linux,crashkernel-base",
209 .length = sizeof(phys_addr_t), 211 .length = sizeof(phys_addr_t),
210 .value = &crashk_res.start, 212 .value = &crashk_base
211}; 213};
212 214
213static struct property crashk_size_prop = { 215static struct property crashk_size_prop = {
@@ -219,9 +221,11 @@ static struct property crashk_size_prop = {
219static struct property memory_limit_prop = { 221static struct property memory_limit_prop = {
220 .name = "linux,memory-limit", 222 .name = "linux,memory-limit",
221 .length = sizeof(unsigned long long), 223 .length = sizeof(unsigned long long),
222 .value = &memory_limit, 224 .value = &mem_limit,
223}; 225};
224 226
227#define cpu_to_be_ulong __PASTE(cpu_to_be, BITS_PER_LONG)
228
225static void __init export_crashk_values(struct device_node *node) 229static void __init export_crashk_values(struct device_node *node)
226{ 230{
227 struct property *prop; 231 struct property *prop;
@@ -237,8 +241,9 @@ static void __init export_crashk_values(struct device_node *node)
237 of_remove_property(node, prop); 241 of_remove_property(node, prop);
238 242
239 if (crashk_res.start != 0) { 243 if (crashk_res.start != 0) {
244 crashk_base = cpu_to_be_ulong(crashk_res.start),
240 of_add_property(node, &crashk_base_prop); 245 of_add_property(node, &crashk_base_prop);
241 crashk_size = resource_size(&crashk_res); 246 crashk_size = cpu_to_be_ulong(resource_size(&crashk_res));
242 of_add_property(node, &crashk_size_prop); 247 of_add_property(node, &crashk_size_prop);
243 } 248 }
244 249
@@ -246,6 +251,7 @@ static void __init export_crashk_values(struct device_node *node)
246 * memory_limit is required by the kexec-tools to limit the 251 * memory_limit is required by the kexec-tools to limit the
247 * crash regions to the actual memory used. 252 * crash regions to the actual memory used.
248 */ 253 */
254 mem_limit = cpu_to_be_ulong(memory_limit);
249 of_update_property(node, &memory_limit_prop); 255 of_update_property(node, &memory_limit_prop);
250} 256}
251 257
@@ -264,7 +270,7 @@ static int __init kexec_setup(void)
264 of_remove_property(node, prop); 270 of_remove_property(node, prop);
265 271
266 /* information needed by userspace when using default_machine_kexec */ 272 /* information needed by userspace when using default_machine_kexec */
267 kernel_end = __pa(_end); 273 kernel_end = cpu_to_be_ulong(__pa(_end));
268 of_add_property(node, &kernel_end_prop); 274 of_add_property(node, &kernel_end_prop);
269 275
270 export_crashk_values(node); 276 export_crashk_values(node);
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c
index be4e6d648f60..59d229a2a3e0 100644
--- a/arch/powerpc/kernel/machine_kexec_64.c
+++ b/arch/powerpc/kernel/machine_kexec_64.c
@@ -369,6 +369,7 @@ void default_machine_kexec(struct kimage *image)
369 369
370/* Values we need to export to the second kernel via the device tree. */ 370/* Values we need to export to the second kernel via the device tree. */
371static unsigned long htab_base; 371static unsigned long htab_base;
372static unsigned long htab_size;
372 373
373static struct property htab_base_prop = { 374static struct property htab_base_prop = {
374 .name = "linux,htab-base", 375 .name = "linux,htab-base",
@@ -379,7 +380,7 @@ static struct property htab_base_prop = {
379static struct property htab_size_prop = { 380static struct property htab_size_prop = {
380 .name = "linux,htab-size", 381 .name = "linux,htab-size",
381 .length = sizeof(unsigned long), 382 .length = sizeof(unsigned long),
382 .value = &htab_size_bytes, 383 .value = &htab_size,
383}; 384};
384 385
385static int __init export_htab_values(void) 386static int __init export_htab_values(void)
@@ -403,8 +404,9 @@ static int __init export_htab_values(void)
403 if (prop) 404 if (prop)
404 of_remove_property(node, prop); 405 of_remove_property(node, prop);
405 406
406 htab_base = __pa(htab_address); 407 htab_base = cpu_to_be64(__pa(htab_address));
407 of_add_property(node, &htab_base_prop); 408 of_add_property(node, &htab_base_prop);
409 htab_size = cpu_to_be64(htab_size_bytes);
408 of_add_property(node, &htab_size_prop); 410 of_add_property(node, &htab_size_prop);
409 411
410 of_node_put(node); 412 of_node_put(node);
diff --git a/arch/powerpc/kernel/reloc_64.S b/arch/powerpc/kernel/reloc_64.S
index b47a0e1ab001..1482327cfeba 100644
--- a/arch/powerpc/kernel/reloc_64.S
+++ b/arch/powerpc/kernel/reloc_64.S
@@ -69,8 +69,8 @@ _GLOBAL(relocate)
69 * R_PPC64_RELATIVE ones. 69 * R_PPC64_RELATIVE ones.
70 */ 70 */
71 mtctr r8 71 mtctr r8
725: lwz r0,12(9) /* ELF64_R_TYPE(reloc->r_info) */ 725: ld r0,8(9) /* ELF64_R_TYPE(reloc->r_info) */
73 cmpwi r0,R_PPC64_RELATIVE 73 cmpdi r0,R_PPC64_RELATIVE
74 bne 6f 74 bne 6f
75 ld r6,0(r9) /* reloc->r_offset */ 75 ld r6,0(r9) /* reloc->r_offset */
76 ld r0,16(r9) /* reloc->r_addend */ 76 ld r0,16(r9) /* reloc->r_addend */
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 2b0da27eaee4..04cc4fcca78b 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -247,7 +247,12 @@ static void __init exc_lvl_early_init(void)
247 /* interrupt stacks must be in lowmem, we get that for free on ppc32 247 /* interrupt stacks must be in lowmem, we get that for free on ppc32
248 * as the memblock is limited to lowmem by MEMBLOCK_REAL_LIMIT */ 248 * as the memblock is limited to lowmem by MEMBLOCK_REAL_LIMIT */
249 for_each_possible_cpu(i) { 249 for_each_possible_cpu(i) {
250#ifdef CONFIG_SMP
250 hw_cpu = get_hard_smp_processor_id(i); 251 hw_cpu = get_hard_smp_processor_id(i);
252#else
253 hw_cpu = 0;
254#endif
255
251 critirq_ctx[hw_cpu] = (struct thread_info *) 256 critirq_ctx[hw_cpu] = (struct thread_info *)
252 __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE)); 257 __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
253#ifdef CONFIG_BOOKE 258#ifdef CONFIG_BOOKE
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index de6881259aef..d766d6ee33fe 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -207,6 +207,20 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
207 if (overlaps_kernel_text(vaddr, vaddr + step)) 207 if (overlaps_kernel_text(vaddr, vaddr + step))
208 tprot &= ~HPTE_R_N; 208 tprot &= ~HPTE_R_N;
209 209
210 /*
211 * If relocatable, check if it overlaps interrupt vectors that
212 * are copied down to real 0. For relocatable kernel
213 * (e.g. kdump case) we copy interrupt vectors down to real
214 * address 0. Mark that region as executable. This is
215 * because on p8 system with relocation on exception feature
216 * enabled, exceptions are raised with MMU (IR=DR=1) ON. Hence
217 * in order to execute the interrupt handlers in virtual
218 * mode the vector region need to be marked as executable.
219 */
220 if ((PHYSICAL_START > MEMORY_START) &&
221 overlaps_interrupt_vector_text(vaddr, vaddr + step))
222 tprot &= ~HPTE_R_N;
223
210 hash = hpt_hash(vpn, shift, ssize); 224 hash = hpt_hash(vpn, shift, ssize);
211 hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP); 225 hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP);
212 226
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 29b89e863d7c..67cf22083f4c 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -1147,6 +1147,9 @@ static void power_pmu_enable(struct pmu *pmu)
1147 mmcr0 = ebb_switch_in(ebb, cpuhw->mmcr[0]); 1147 mmcr0 = ebb_switch_in(ebb, cpuhw->mmcr[0]);
1148 1148
1149 mb(); 1149 mb();
1150 if (cpuhw->bhrb_users)
1151 ppmu->config_bhrb(cpuhw->bhrb_filter);
1152
1150 write_mmcr0(cpuhw, mmcr0); 1153 write_mmcr0(cpuhw, mmcr0);
1151 1154
1152 /* 1155 /*
@@ -1158,8 +1161,6 @@ static void power_pmu_enable(struct pmu *pmu)
1158 } 1161 }
1159 1162
1160 out: 1163 out:
1161 if (cpuhw->bhrb_users)
1162 ppmu->config_bhrb(cpuhw->bhrb_filter);
1163 1164
1164 local_irq_restore(flags); 1165 local_irq_restore(flags);
1165} 1166}
diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
index a3f7abd2f13f..96cee20dcd34 100644
--- a/arch/powerpc/perf/power8-pmu.c
+++ b/arch/powerpc/perf/power8-pmu.c
@@ -25,6 +25,37 @@
25#define PM_BRU_FIN 0x10068 25#define PM_BRU_FIN 0x10068
26#define PM_BR_MPRED_CMPL 0x400f6 26#define PM_BR_MPRED_CMPL 0x400f6
27 27
28/* All L1 D cache load references counted at finish, gated by reject */
29#define PM_LD_REF_L1 0x100ee
30/* Load Missed L1 */
31#define PM_LD_MISS_L1 0x3e054
32/* Store Missed L1 */
33#define PM_ST_MISS_L1 0x300f0
34/* L1 cache data prefetches */
35#define PM_L1_PREF 0x0d8b8
36/* Instruction fetches from L1 */
37#define PM_INST_FROM_L1 0x04080
38/* Demand iCache Miss */
39#define PM_L1_ICACHE_MISS 0x200fd
40/* Instruction Demand sectors wriittent into IL1 */
41#define PM_L1_DEMAND_WRITE 0x0408c
42/* Instruction prefetch written into IL1 */
43#define PM_IC_PREF_WRITE 0x0408e
44/* The data cache was reloaded from local core's L3 due to a demand load */
45#define PM_DATA_FROM_L3 0x4c042
46/* Demand LD - L3 Miss (not L2 hit and not L3 hit) */
47#define PM_DATA_FROM_L3MISS 0x300fe
48/* All successful D-side store dispatches for this thread */
49#define PM_L2_ST 0x17080
50/* All successful D-side store dispatches for this thread that were L2 Miss */
51#define PM_L2_ST_MISS 0x17082
52/* Total HW L3 prefetches(Load+store) */
53#define PM_L3_PREF_ALL 0x4e052
54/* Data PTEG reload */
55#define PM_DTLB_MISS 0x300fc
56/* ITLB Reloaded */
57#define PM_ITLB_MISS 0x400fc
58
28 59
29/* 60/*
30 * Raw event encoding for POWER8: 61 * Raw event encoding for POWER8:
@@ -557,6 +588,8 @@ static int power8_generic_events[] = {
557 [PERF_COUNT_HW_INSTRUCTIONS] = PM_INST_CMPL, 588 [PERF_COUNT_HW_INSTRUCTIONS] = PM_INST_CMPL,
558 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = PM_BRU_FIN, 589 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = PM_BRU_FIN,
559 [PERF_COUNT_HW_BRANCH_MISSES] = PM_BR_MPRED_CMPL, 590 [PERF_COUNT_HW_BRANCH_MISSES] = PM_BR_MPRED_CMPL,
591 [PERF_COUNT_HW_CACHE_REFERENCES] = PM_LD_REF_L1,
592 [PERF_COUNT_HW_CACHE_MISSES] = PM_LD_MISS_L1,
560}; 593};
561 594
562static u64 power8_bhrb_filter_map(u64 branch_sample_type) 595static u64 power8_bhrb_filter_map(u64 branch_sample_type)
@@ -596,6 +629,116 @@ static void power8_config_bhrb(u64 pmu_bhrb_filter)
596 mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); 629 mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter));
597} 630}
598 631
632#define C(x) PERF_COUNT_HW_CACHE_##x
633
634/*
635 * Table of generalized cache-related events.
636 * 0 means not supported, -1 means nonsensical, other values
637 * are event codes.
638 */
639static int power8_cache_events[C(MAX)][C(OP_MAX)][C(RESULT_MAX)] = {
640 [ C(L1D) ] = {
641 [ C(OP_READ) ] = {
642 [ C(RESULT_ACCESS) ] = PM_LD_REF_L1,
643 [ C(RESULT_MISS) ] = PM_LD_MISS_L1,
644 },
645 [ C(OP_WRITE) ] = {
646 [ C(RESULT_ACCESS) ] = 0,
647 [ C(RESULT_MISS) ] = PM_ST_MISS_L1,
648 },
649 [ C(OP_PREFETCH) ] = {
650 [ C(RESULT_ACCESS) ] = PM_L1_PREF,
651 [ C(RESULT_MISS) ] = 0,
652 },
653 },
654 [ C(L1I) ] = {
655 [ C(OP_READ) ] = {
656 [ C(RESULT_ACCESS) ] = PM_INST_FROM_L1,
657 [ C(RESULT_MISS) ] = PM_L1_ICACHE_MISS,
658 },
659 [ C(OP_WRITE) ] = {
660 [ C(RESULT_ACCESS) ] = PM_L1_DEMAND_WRITE,
661 [ C(RESULT_MISS) ] = -1,
662 },
663 [ C(OP_PREFETCH) ] = {
664 [ C(RESULT_ACCESS) ] = PM_IC_PREF_WRITE,
665 [ C(RESULT_MISS) ] = 0,
666 },
667 },
668 [ C(LL) ] = {
669 [ C(OP_READ) ] = {
670 [ C(RESULT_ACCESS) ] = PM_DATA_FROM_L3,
671 [ C(RESULT_MISS) ] = PM_DATA_FROM_L3MISS,
672 },
673 [ C(OP_WRITE) ] = {
674 [ C(RESULT_ACCESS) ] = PM_L2_ST,
675 [ C(RESULT_MISS) ] = PM_L2_ST_MISS,
676 },
677 [ C(OP_PREFETCH) ] = {
678 [ C(RESULT_ACCESS) ] = PM_L3_PREF_ALL,
679 [ C(RESULT_MISS) ] = 0,
680 },
681 },
682 [ C(DTLB) ] = {
683 [ C(OP_READ) ] = {
684 [ C(RESULT_ACCESS) ] = 0,
685 [ C(RESULT_MISS) ] = PM_DTLB_MISS,
686 },
687 [ C(OP_WRITE) ] = {
688 [ C(RESULT_ACCESS) ] = -1,
689 [ C(RESULT_MISS) ] = -1,
690 },
691 [ C(OP_PREFETCH) ] = {
692 [ C(RESULT_ACCESS) ] = -1,
693 [ C(RESULT_MISS) ] = -1,
694 },
695 },
696 [ C(ITLB) ] = {
697 [ C(OP_READ) ] = {
698 [ C(RESULT_ACCESS) ] = 0,
699 [ C(RESULT_MISS) ] = PM_ITLB_MISS,
700 },
701 [ C(OP_WRITE) ] = {
702 [ C(RESULT_ACCESS) ] = -1,
703 [ C(RESULT_MISS) ] = -1,
704 },
705 [ C(OP_PREFETCH) ] = {
706 [ C(RESULT_ACCESS) ] = -1,
707 [ C(RESULT_MISS) ] = -1,
708 },
709 },
710 [ C(BPU) ] = {
711 [ C(OP_READ) ] = {
712 [ C(RESULT_ACCESS) ] = PM_BRU_FIN,
713 [ C(RESULT_MISS) ] = PM_BR_MPRED_CMPL,
714 },
715 [ C(OP_WRITE) ] = {
716 [ C(RESULT_ACCESS) ] = -1,
717 [ C(RESULT_MISS) ] = -1,
718 },
719 [ C(OP_PREFETCH) ] = {
720 [ C(RESULT_ACCESS) ] = -1,
721 [ C(RESULT_MISS) ] = -1,
722 },
723 },
724 [ C(NODE) ] = {
725 [ C(OP_READ) ] = {
726 [ C(RESULT_ACCESS) ] = -1,
727 [ C(RESULT_MISS) ] = -1,
728 },
729 [ C(OP_WRITE) ] = {
730 [ C(RESULT_ACCESS) ] = -1,
731 [ C(RESULT_MISS) ] = -1,
732 },
733 [ C(OP_PREFETCH) ] = {
734 [ C(RESULT_ACCESS) ] = -1,
735 [ C(RESULT_MISS) ] = -1,
736 },
737 },
738};
739
740#undef C
741
599static struct power_pmu power8_pmu = { 742static struct power_pmu power8_pmu = {
600 .name = "POWER8", 743 .name = "POWER8",
601 .n_counter = 6, 744 .n_counter = 6,
@@ -611,6 +754,7 @@ static struct power_pmu power8_pmu = {
611 .flags = PPMU_HAS_SSLOT | PPMU_HAS_SIER | PPMU_BHRB | PPMU_EBB, 754 .flags = PPMU_HAS_SSLOT | PPMU_HAS_SIER | PPMU_BHRB | PPMU_EBB,
612 .n_generic = ARRAY_SIZE(power8_generic_events), 755 .n_generic = ARRAY_SIZE(power8_generic_events),
613 .generic_events = power8_generic_events, 756 .generic_events = power8_generic_events,
757 .cache_events = &power8_cache_events,
614 .attr_groups = power8_pmu_attr_groups, 758 .attr_groups = power8_pmu_attr_groups,
615 .bhrb_nr = 32, 759 .bhrb_nr = 32,
616}; 760};
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 7d6dcc6d5fa9..3b2b4fb3585b 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -21,6 +21,7 @@
21#include <linux/irq.h> 21#include <linux/irq.h>
22#include <linux/io.h> 22#include <linux/io.h>
23#include <linux/msi.h> 23#include <linux/msi.h>
24#include <linux/memblock.h>
24 25
25#include <asm/sections.h> 26#include <asm/sections.h>
26#include <asm/io.h> 27#include <asm/io.h>
@@ -460,9 +461,39 @@ static void pnv_pci_ioda_dma_dev_setup(struct pnv_phb *phb, struct pci_dev *pdev
460 return; 461 return;
461 462
462 pe = &phb->ioda.pe_array[pdn->pe_number]; 463 pe = &phb->ioda.pe_array[pdn->pe_number];
464 WARN_ON(get_dma_ops(&pdev->dev) != &dma_iommu_ops);
463 set_iommu_table_base_and_group(&pdev->dev, &pe->tce32_table); 465 set_iommu_table_base_and_group(&pdev->dev, &pe->tce32_table);
464} 466}
465 467
468static int pnv_pci_ioda_dma_set_mask(struct pnv_phb *phb,
469 struct pci_dev *pdev, u64 dma_mask)
470{
471 struct pci_dn *pdn = pci_get_pdn(pdev);
472 struct pnv_ioda_pe *pe;
473 uint64_t top;
474 bool bypass = false;
475
476 if (WARN_ON(!pdn || pdn->pe_number == IODA_INVALID_PE))
477 return -ENODEV;;
478
479 pe = &phb->ioda.pe_array[pdn->pe_number];
480 if (pe->tce_bypass_enabled) {
481 top = pe->tce_bypass_base + memblock_end_of_DRAM() - 1;
482 bypass = (dma_mask >= top);
483 }
484
485 if (bypass) {
486 dev_info(&pdev->dev, "Using 64-bit DMA iommu bypass\n");
487 set_dma_ops(&pdev->dev, &dma_direct_ops);
488 set_dma_offset(&pdev->dev, pe->tce_bypass_base);
489 } else {
490 dev_info(&pdev->dev, "Using 32-bit DMA via iommu\n");
491 set_dma_ops(&pdev->dev, &dma_iommu_ops);
492 set_iommu_table_base(&pdev->dev, &pe->tce32_table);
493 }
494 return 0;
495}
496
466static void pnv_ioda_setup_bus_dma(struct pnv_ioda_pe *pe, struct pci_bus *bus) 497static void pnv_ioda_setup_bus_dma(struct pnv_ioda_pe *pe, struct pci_bus *bus)
467{ 498{
468 struct pci_dev *dev; 499 struct pci_dev *dev;
@@ -657,6 +688,56 @@ static void pnv_pci_ioda_setup_dma_pe(struct pnv_phb *phb,
657 __free_pages(tce_mem, get_order(TCE32_TABLE_SIZE * segs)); 688 __free_pages(tce_mem, get_order(TCE32_TABLE_SIZE * segs));
658} 689}
659 690
691static void pnv_pci_ioda2_set_bypass(struct iommu_table *tbl, bool enable)
692{
693 struct pnv_ioda_pe *pe = container_of(tbl, struct pnv_ioda_pe,
694 tce32_table);
695 uint16_t window_id = (pe->pe_number << 1 ) + 1;
696 int64_t rc;
697
698 pe_info(pe, "%sabling 64-bit DMA bypass\n", enable ? "En" : "Dis");
699 if (enable) {
700 phys_addr_t top = memblock_end_of_DRAM();
701
702 top = roundup_pow_of_two(top);
703 rc = opal_pci_map_pe_dma_window_real(pe->phb->opal_id,
704 pe->pe_number,
705 window_id,
706 pe->tce_bypass_base,
707 top);
708 } else {
709 rc = opal_pci_map_pe_dma_window_real(pe->phb->opal_id,
710 pe->pe_number,
711 window_id,
712 pe->tce_bypass_base,
713 0);
714
715 /*
716 * We might want to reset the DMA ops of all devices on
717 * this PE. However in theory, that shouldn't be necessary
718 * as this is used for VFIO/KVM pass-through and the device
719 * hasn't yet been returned to its kernel driver
720 */
721 }
722 if (rc)
723 pe_err(pe, "OPAL error %lld configuring bypass window\n", rc);
724 else
725 pe->tce_bypass_enabled = enable;
726}
727
728static void pnv_pci_ioda2_setup_bypass_pe(struct pnv_phb *phb,
729 struct pnv_ioda_pe *pe)
730{
731 /* TVE #1 is selected by PCI address bit 59 */
732 pe->tce_bypass_base = 1ull << 59;
733
734 /* Install set_bypass callback for VFIO */
735 pe->tce32_table.set_bypass = pnv_pci_ioda2_set_bypass;
736
737 /* Enable bypass by default */
738 pnv_pci_ioda2_set_bypass(&pe->tce32_table, true);
739}
740
660static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb, 741static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb,
661 struct pnv_ioda_pe *pe) 742 struct pnv_ioda_pe *pe)
662{ 743{
@@ -727,6 +808,8 @@ static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb,
727 else 808 else
728 pnv_ioda_setup_bus_dma(pe, pe->pbus); 809 pnv_ioda_setup_bus_dma(pe, pe->pbus);
729 810
811 /* Also create a bypass window */
812 pnv_pci_ioda2_setup_bypass_pe(phb, pe);
730 return; 813 return;
731fail: 814fail:
732 if (pe->tce32_seg >= 0) 815 if (pe->tce32_seg >= 0)
@@ -1286,6 +1369,7 @@ void __init pnv_pci_init_ioda_phb(struct device_node *np,
1286 1369
1287 /* Setup TCEs */ 1370 /* Setup TCEs */
1288 phb->dma_dev_setup = pnv_pci_ioda_dma_dev_setup; 1371 phb->dma_dev_setup = pnv_pci_ioda_dma_dev_setup;
1372 phb->dma_set_mask = pnv_pci_ioda_dma_set_mask;
1289 1373
1290 /* Setup shutdown function for kexec */ 1374 /* Setup shutdown function for kexec */
1291 phb->shutdown = pnv_pci_ioda_shutdown; 1375 phb->shutdown = pnv_pci_ioda_shutdown;
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index b555ebc57ef5..95633d79ef5d 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -634,6 +634,16 @@ static void pnv_pci_dma_dev_setup(struct pci_dev *pdev)
634 pnv_pci_dma_fallback_setup(hose, pdev); 634 pnv_pci_dma_fallback_setup(hose, pdev);
635} 635}
636 636
637int pnv_pci_dma_set_mask(struct pci_dev *pdev, u64 dma_mask)
638{
639 struct pci_controller *hose = pci_bus_to_host(pdev->bus);
640 struct pnv_phb *phb = hose->private_data;
641
642 if (phb && phb->dma_set_mask)
643 return phb->dma_set_mask(phb, pdev, dma_mask);
644 return __dma_set_mask(&pdev->dev, dma_mask);
645}
646
637void pnv_pci_shutdown(void) 647void pnv_pci_shutdown(void)
638{ 648{
639 struct pci_controller *hose; 649 struct pci_controller *hose;
diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
index 13f1942a9a5f..cde169442775 100644
--- a/arch/powerpc/platforms/powernv/pci.h
+++ b/arch/powerpc/platforms/powernv/pci.h
@@ -54,7 +54,9 @@ struct pnv_ioda_pe {
54 struct iommu_table tce32_table; 54 struct iommu_table tce32_table;
55 phys_addr_t tce_inval_reg_phys; 55 phys_addr_t tce_inval_reg_phys;
56 56
57 /* XXX TODO: Add support for additional 64-bit iommus */ 57 /* 64-bit TCE bypass region */
58 bool tce_bypass_enabled;
59 uint64_t tce_bypass_base;
58 60
59 /* MSIs. MVE index is identical for for 32 and 64 bit MSI 61 /* MSIs. MVE index is identical for for 32 and 64 bit MSI
60 * and -1 if not supported. (It's actually identical to the 62 * and -1 if not supported. (It's actually identical to the
@@ -113,6 +115,8 @@ struct pnv_phb {
113 unsigned int hwirq, unsigned int virq, 115 unsigned int hwirq, unsigned int virq,
114 unsigned int is_64, struct msi_msg *msg); 116 unsigned int is_64, struct msi_msg *msg);
115 void (*dma_dev_setup)(struct pnv_phb *phb, struct pci_dev *pdev); 117 void (*dma_dev_setup)(struct pnv_phb *phb, struct pci_dev *pdev);
118 int (*dma_set_mask)(struct pnv_phb *phb, struct pci_dev *pdev,
119 u64 dma_mask);
116 void (*fixup_phb)(struct pci_controller *hose); 120 void (*fixup_phb)(struct pci_controller *hose);
117 u32 (*bdfn_to_pe)(struct pnv_phb *phb, struct pci_bus *bus, u32 devfn); 121 u32 (*bdfn_to_pe)(struct pnv_phb *phb, struct pci_bus *bus, u32 devfn);
118 void (*shutdown)(struct pnv_phb *phb); 122 void (*shutdown)(struct pnv_phb *phb);
diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h
index de6819be1f95..0051e108ef0f 100644
--- a/arch/powerpc/platforms/powernv/powernv.h
+++ b/arch/powerpc/platforms/powernv/powernv.h
@@ -7,12 +7,20 @@ extern void pnv_smp_init(void);
7static inline void pnv_smp_init(void) { } 7static inline void pnv_smp_init(void) { }
8#endif 8#endif
9 9
10struct pci_dev;
11
10#ifdef CONFIG_PCI 12#ifdef CONFIG_PCI
11extern void pnv_pci_init(void); 13extern void pnv_pci_init(void);
12extern void pnv_pci_shutdown(void); 14extern void pnv_pci_shutdown(void);
15extern int pnv_pci_dma_set_mask(struct pci_dev *pdev, u64 dma_mask);
13#else 16#else
14static inline void pnv_pci_init(void) { } 17static inline void pnv_pci_init(void) { }
15static inline void pnv_pci_shutdown(void) { } 18static inline void pnv_pci_shutdown(void) { }
19
20static inline int pnv_pci_dma_set_mask(struct pci_dev *pdev, u64 dma_mask)
21{
22 return -ENODEV;
23}
16#endif 24#endif
17 25
18extern void pnv_lpc_init(void); 26extern void pnv_lpc_init(void);
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index 21166f65c97c..110f4fbd319f 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -27,6 +27,7 @@
27#include <linux/interrupt.h> 27#include <linux/interrupt.h>
28#include <linux/bug.h> 28#include <linux/bug.h>
29#include <linux/cpuidle.h> 29#include <linux/cpuidle.h>
30#include <linux/pci.h>
30 31
31#include <asm/machdep.h> 32#include <asm/machdep.h>
32#include <asm/firmware.h> 33#include <asm/firmware.h>
@@ -141,6 +142,13 @@ static void pnv_progress(char *s, unsigned short hex)
141{ 142{
142} 143}
143 144
145static int pnv_dma_set_mask(struct device *dev, u64 dma_mask)
146{
147 if (dev_is_pci(dev))
148 return pnv_pci_dma_set_mask(to_pci_dev(dev), dma_mask);
149 return __dma_set_mask(dev, dma_mask);
150}
151
144static void pnv_shutdown(void) 152static void pnv_shutdown(void)
145{ 153{
146 /* Let the PCI code clear up IODA tables */ 154 /* Let the PCI code clear up IODA tables */
@@ -238,6 +246,7 @@ define_machine(powernv) {
238 .machine_shutdown = pnv_shutdown, 246 .machine_shutdown = pnv_shutdown,
239 .power_save = powernv_idle, 247 .power_save = powernv_idle,
240 .calibrate_decr = generic_calibrate_decr, 248 .calibrate_decr = generic_calibrate_decr,
249 .dma_set_mask = pnv_dma_set_mask,
241#ifdef CONFIG_KEXEC 250#ifdef CONFIG_KEXEC
242 .kexec_cpu_down = pnv_kexec_cpu_down, 251 .kexec_cpu_down = pnv_kexec_cpu_down,
243#endif 252#endif
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 37300f6ee244..80b1d57c306a 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -20,6 +20,7 @@ config PPC_PSERIES
20 select PPC_DOORBELL 20 select PPC_DOORBELL
21 select HAVE_CONTEXT_TRACKING 21 select HAVE_CONTEXT_TRACKING
22 select HOTPLUG_CPU if SMP 22 select HOTPLUG_CPU if SMP
23 select ARCH_RANDOM
23 default y 24 default y
24 25
25config PPC_SPLPAR 26config PPC_SPLPAR
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 8e639d7cbda7..972df0ffd4dc 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -430,8 +430,7 @@ static void pSeries_machine_kexec(struct kimage *image)
430{ 430{
431 long rc; 431 long rc;
432 432
433 if (firmware_has_feature(FW_FEATURE_SET_MODE) && 433 if (firmware_has_feature(FW_FEATURE_SET_MODE)) {
434 (image->type != KEXEC_TYPE_CRASH)) {
435 rc = pSeries_disable_reloc_on_exc(); 434 rc = pSeries_disable_reloc_on_exc();
436 if (rc != H_SUCCESS) 435 if (rc != H_SUCCESS)
437 pr_warning("Warning: Failed to disable relocation on " 436 pr_warning("Warning: Failed to disable relocation on "
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 0e166ed4cd16..8209744b2829 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -886,25 +886,25 @@ int mpic_set_irq_type(struct irq_data *d, unsigned int flow_type)
886 886
887 /* Default: read HW settings */ 887 /* Default: read HW settings */
888 if (flow_type == IRQ_TYPE_DEFAULT) { 888 if (flow_type == IRQ_TYPE_DEFAULT) {
889 switch(vold & (MPIC_INFO(VECPRI_POLARITY_MASK) | 889 int vold_ps;
890 MPIC_INFO(VECPRI_SENSE_MASK))) { 890
891 case MPIC_INFO(VECPRI_SENSE_EDGE) | 891 vold_ps = vold & (MPIC_INFO(VECPRI_POLARITY_MASK) |
892 MPIC_INFO(VECPRI_POLARITY_POSITIVE): 892 MPIC_INFO(VECPRI_SENSE_MASK));
893 flow_type = IRQ_TYPE_EDGE_RISING; 893
894 break; 894 if (vold_ps == (MPIC_INFO(VECPRI_SENSE_EDGE) |
895 case MPIC_INFO(VECPRI_SENSE_EDGE) | 895 MPIC_INFO(VECPRI_POLARITY_POSITIVE)))
896 MPIC_INFO(VECPRI_POLARITY_NEGATIVE): 896 flow_type = IRQ_TYPE_EDGE_RISING;
897 flow_type = IRQ_TYPE_EDGE_FALLING; 897 else if (vold_ps == (MPIC_INFO(VECPRI_SENSE_EDGE) |
898 break; 898 MPIC_INFO(VECPRI_POLARITY_NEGATIVE)))
899 case MPIC_INFO(VECPRI_SENSE_LEVEL) | 899 flow_type = IRQ_TYPE_EDGE_FALLING;
900 MPIC_INFO(VECPRI_POLARITY_POSITIVE): 900 else if (vold_ps == (MPIC_INFO(VECPRI_SENSE_LEVEL) |
901 flow_type = IRQ_TYPE_LEVEL_HIGH; 901 MPIC_INFO(VECPRI_POLARITY_POSITIVE)))
902 break; 902 flow_type = IRQ_TYPE_LEVEL_HIGH;
903 case MPIC_INFO(VECPRI_SENSE_LEVEL) | 903 else if (vold_ps == (MPIC_INFO(VECPRI_SENSE_LEVEL) |
904 MPIC_INFO(VECPRI_POLARITY_NEGATIVE): 904 MPIC_INFO(VECPRI_POLARITY_NEGATIVE)))
905 flow_type = IRQ_TYPE_LEVEL_LOW; 905 flow_type = IRQ_TYPE_LEVEL_LOW;
906 break; 906 else
907 } 907 WARN_ONCE(1, "mpic: unknown IRQ type %d\n", vold);
908 } 908 }
909 909
910 /* Apply to irq desc */ 910 /* Apply to irq desc */
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index a90731b3d44a..b07909850f77 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -309,16 +309,23 @@ static void get_output_lock(void)
309 309
310 if (xmon_speaker == me) 310 if (xmon_speaker == me)
311 return; 311 return;
312
312 for (;;) { 313 for (;;) {
313 if (xmon_speaker == 0) { 314 last_speaker = cmpxchg(&xmon_speaker, 0, me);
314 last_speaker = cmpxchg(&xmon_speaker, 0, me); 315 if (last_speaker == 0)
315 if (last_speaker == 0) 316 return;
316 return; 317
317 } 318 /*
318 timeout = 10000000; 319 * Wait a full second for the lock, we might be on a slow
320 * console, but check every 100us.
321 */
322 timeout = 10000;
319 while (xmon_speaker == last_speaker) { 323 while (xmon_speaker == last_speaker) {
320 if (--timeout > 0) 324 if (--timeout > 0) {
325 udelay(100);
321 continue; 326 continue;
327 }
328
322 /* hostile takeover */ 329 /* hostile takeover */
323 prev = cmpxchg(&xmon_speaker, last_speaker, me); 330 prev = cmpxchg(&xmon_speaker, last_speaker, me);
324 if (prev == last_speaker) 331 if (prev == last_speaker)
@@ -397,7 +404,6 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
397 } 404 }
398 405
399 xmon_fault_jmp[cpu] = recurse_jmp; 406 xmon_fault_jmp[cpu] = recurse_jmp;
400 cpumask_set_cpu(cpu, &cpus_in_xmon);
401 407
402 bp = NULL; 408 bp = NULL;
403 if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT)) 409 if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT))
@@ -419,6 +425,8 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
419 release_output_lock(); 425 release_output_lock();
420 } 426 }
421 427
428 cpumask_set_cpu(cpu, &cpus_in_xmon);
429
422 waiting: 430 waiting:
423 secondary = 1; 431 secondary = 1;
424 while (secondary && !xmon_gate) { 432 while (secondary && !xmon_gate) {
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c
index 4c4a1cef5208..47c8630c93cd 100644
--- a/arch/s390/appldata/appldata_base.c
+++ b/arch/s390/appldata/appldata_base.c
@@ -529,6 +529,7 @@ static int __init appldata_init(void)
529{ 529{
530 int rc; 530 int rc;
531 531
532 init_virt_timer(&appldata_timer);
532 appldata_timer.function = appldata_timer_function; 533 appldata_timer.function = appldata_timer_function;
533 appldata_timer.data = (unsigned long) &appldata_work; 534 appldata_timer.data = (unsigned long) &appldata_work;
534 535
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index b3feabd39f31..cf3c0089bef2 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -25,6 +25,7 @@
25#include <linux/err.h> 25#include <linux/err.h>
26#include <linux/module.h> 26#include <linux/module.h>
27#include <linux/init.h> 27#include <linux/init.h>
28#include <linux/spinlock.h>
28#include "crypt_s390.h" 29#include "crypt_s390.h"
29 30
30#define AES_KEYLEN_128 1 31#define AES_KEYLEN_128 1
@@ -32,6 +33,7 @@
32#define AES_KEYLEN_256 4 33#define AES_KEYLEN_256 4
33 34
34static u8 *ctrblk; 35static u8 *ctrblk;
36static DEFINE_SPINLOCK(ctrblk_lock);
35static char keylen_flag; 37static char keylen_flag;
36 38
37struct s390_aes_ctx { 39struct s390_aes_ctx {
@@ -758,43 +760,67 @@ static int ctr_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
758 return aes_set_key(tfm, in_key, key_len); 760 return aes_set_key(tfm, in_key, key_len);
759} 761}
760 762
763static unsigned int __ctrblk_init(u8 *ctrptr, unsigned int nbytes)
764{
765 unsigned int i, n;
766
767 /* only use complete blocks, max. PAGE_SIZE */
768 n = (nbytes > PAGE_SIZE) ? PAGE_SIZE : nbytes & ~(AES_BLOCK_SIZE - 1);
769 for (i = AES_BLOCK_SIZE; i < n; i += AES_BLOCK_SIZE) {
770 memcpy(ctrptr + i, ctrptr + i - AES_BLOCK_SIZE,
771 AES_BLOCK_SIZE);
772 crypto_inc(ctrptr + i, AES_BLOCK_SIZE);
773 }
774 return n;
775}
776
761static int ctr_aes_crypt(struct blkcipher_desc *desc, long func, 777static int ctr_aes_crypt(struct blkcipher_desc *desc, long func,
762 struct s390_aes_ctx *sctx, struct blkcipher_walk *walk) 778 struct s390_aes_ctx *sctx, struct blkcipher_walk *walk)
763{ 779{
764 int ret = blkcipher_walk_virt_block(desc, walk, AES_BLOCK_SIZE); 780 int ret = blkcipher_walk_virt_block(desc, walk, AES_BLOCK_SIZE);
765 unsigned int i, n, nbytes; 781 unsigned int n, nbytes;
766 u8 buf[AES_BLOCK_SIZE]; 782 u8 buf[AES_BLOCK_SIZE], ctrbuf[AES_BLOCK_SIZE];
767 u8 *out, *in; 783 u8 *out, *in, *ctrptr = ctrbuf;
768 784
769 if (!walk->nbytes) 785 if (!walk->nbytes)
770 return ret; 786 return ret;
771 787
772 memcpy(ctrblk, walk->iv, AES_BLOCK_SIZE); 788 if (spin_trylock(&ctrblk_lock))
789 ctrptr = ctrblk;
790
791 memcpy(ctrptr, walk->iv, AES_BLOCK_SIZE);
773 while ((nbytes = walk->nbytes) >= AES_BLOCK_SIZE) { 792 while ((nbytes = walk->nbytes) >= AES_BLOCK_SIZE) {
774 out = walk->dst.virt.addr; 793 out = walk->dst.virt.addr;
775 in = walk->src.virt.addr; 794 in = walk->src.virt.addr;
776 while (nbytes >= AES_BLOCK_SIZE) { 795 while (nbytes >= AES_BLOCK_SIZE) {
777 /* only use complete blocks, max. PAGE_SIZE */ 796 if (ctrptr == ctrblk)
778 n = (nbytes > PAGE_SIZE) ? PAGE_SIZE : 797 n = __ctrblk_init(ctrptr, nbytes);
779 nbytes & ~(AES_BLOCK_SIZE - 1); 798 else
780 for (i = AES_BLOCK_SIZE; i < n; i += AES_BLOCK_SIZE) { 799 n = AES_BLOCK_SIZE;
781 memcpy(ctrblk + i, ctrblk + i - AES_BLOCK_SIZE, 800 ret = crypt_s390_kmctr(func, sctx->key, out, in,
782 AES_BLOCK_SIZE); 801 n, ctrptr);
783 crypto_inc(ctrblk + i, AES_BLOCK_SIZE); 802 if (ret < 0 || ret != n) {
784 } 803 if (ctrptr == ctrblk)
785 ret = crypt_s390_kmctr(func, sctx->key, out, in, n, ctrblk); 804 spin_unlock(&ctrblk_lock);
786 if (ret < 0 || ret != n)
787 return -EIO; 805 return -EIO;
806 }
788 if (n > AES_BLOCK_SIZE) 807 if (n > AES_BLOCK_SIZE)
789 memcpy(ctrblk, ctrblk + n - AES_BLOCK_SIZE, 808 memcpy(ctrptr, ctrptr + n - AES_BLOCK_SIZE,
790 AES_BLOCK_SIZE); 809 AES_BLOCK_SIZE);
791 crypto_inc(ctrblk, AES_BLOCK_SIZE); 810 crypto_inc(ctrptr, AES_BLOCK_SIZE);
792 out += n; 811 out += n;
793 in += n; 812 in += n;
794 nbytes -= n; 813 nbytes -= n;
795 } 814 }
796 ret = blkcipher_walk_done(desc, walk, nbytes); 815 ret = blkcipher_walk_done(desc, walk, nbytes);
797 } 816 }
817 if (ctrptr == ctrblk) {
818 if (nbytes)
819 memcpy(ctrbuf, ctrptr, AES_BLOCK_SIZE);
820 else
821 memcpy(walk->iv, ctrptr, AES_BLOCK_SIZE);
822 spin_unlock(&ctrblk_lock);
823 }
798 /* 824 /*
799 * final block may be < AES_BLOCK_SIZE, copy only nbytes 825 * final block may be < AES_BLOCK_SIZE, copy only nbytes
800 */ 826 */
@@ -802,14 +828,15 @@ static int ctr_aes_crypt(struct blkcipher_desc *desc, long func,
802 out = walk->dst.virt.addr; 828 out = walk->dst.virt.addr;
803 in = walk->src.virt.addr; 829 in = walk->src.virt.addr;
804 ret = crypt_s390_kmctr(func, sctx->key, buf, in, 830 ret = crypt_s390_kmctr(func, sctx->key, buf, in,
805 AES_BLOCK_SIZE, ctrblk); 831 AES_BLOCK_SIZE, ctrbuf);
806 if (ret < 0 || ret != AES_BLOCK_SIZE) 832 if (ret < 0 || ret != AES_BLOCK_SIZE)
807 return -EIO; 833 return -EIO;
808 memcpy(out, buf, nbytes); 834 memcpy(out, buf, nbytes);
809 crypto_inc(ctrblk, AES_BLOCK_SIZE); 835 crypto_inc(ctrbuf, AES_BLOCK_SIZE);
810 ret = blkcipher_walk_done(desc, walk, 0); 836 ret = blkcipher_walk_done(desc, walk, 0);
837 memcpy(walk->iv, ctrbuf, AES_BLOCK_SIZE);
811 } 838 }
812 memcpy(walk->iv, ctrblk, AES_BLOCK_SIZE); 839
813 return ret; 840 return ret;
814} 841}
815 842
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index 200f2a1b599d..0a5aac8a9412 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -25,6 +25,7 @@
25#define DES3_KEY_SIZE (3 * DES_KEY_SIZE) 25#define DES3_KEY_SIZE (3 * DES_KEY_SIZE)
26 26
27static u8 *ctrblk; 27static u8 *ctrblk;
28static DEFINE_SPINLOCK(ctrblk_lock);
28 29
29struct s390_des_ctx { 30struct s390_des_ctx {
30 u8 iv[DES_BLOCK_SIZE]; 31 u8 iv[DES_BLOCK_SIZE];
@@ -105,29 +106,35 @@ static int ecb_desall_crypt(struct blkcipher_desc *desc, long func,
105} 106}
106 107
107static int cbc_desall_crypt(struct blkcipher_desc *desc, long func, 108static int cbc_desall_crypt(struct blkcipher_desc *desc, long func,
108 u8 *iv, struct blkcipher_walk *walk) 109 struct blkcipher_walk *walk)
109{ 110{
111 struct s390_des_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
110 int ret = blkcipher_walk_virt(desc, walk); 112 int ret = blkcipher_walk_virt(desc, walk);
111 unsigned int nbytes = walk->nbytes; 113 unsigned int nbytes = walk->nbytes;
114 struct {
115 u8 iv[DES_BLOCK_SIZE];
116 u8 key[DES3_KEY_SIZE];
117 } param;
112 118
113 if (!nbytes) 119 if (!nbytes)
114 goto out; 120 goto out;
115 121
116 memcpy(iv, walk->iv, DES_BLOCK_SIZE); 122 memcpy(param.iv, walk->iv, DES_BLOCK_SIZE);
123 memcpy(param.key, ctx->key, DES3_KEY_SIZE);
117 do { 124 do {
118 /* only use complete blocks */ 125 /* only use complete blocks */
119 unsigned int n = nbytes & ~(DES_BLOCK_SIZE - 1); 126 unsigned int n = nbytes & ~(DES_BLOCK_SIZE - 1);
120 u8 *out = walk->dst.virt.addr; 127 u8 *out = walk->dst.virt.addr;
121 u8 *in = walk->src.virt.addr; 128 u8 *in = walk->src.virt.addr;
122 129
123 ret = crypt_s390_kmc(func, iv, out, in, n); 130 ret = crypt_s390_kmc(func, &param, out, in, n);
124 if (ret < 0 || ret != n) 131 if (ret < 0 || ret != n)
125 return -EIO; 132 return -EIO;
126 133
127 nbytes &= DES_BLOCK_SIZE - 1; 134 nbytes &= DES_BLOCK_SIZE - 1;
128 ret = blkcipher_walk_done(desc, walk, nbytes); 135 ret = blkcipher_walk_done(desc, walk, nbytes);
129 } while ((nbytes = walk->nbytes)); 136 } while ((nbytes = walk->nbytes));
130 memcpy(walk->iv, iv, DES_BLOCK_SIZE); 137 memcpy(walk->iv, param.iv, DES_BLOCK_SIZE);
131 138
132out: 139out:
133 return ret; 140 return ret;
@@ -179,22 +186,20 @@ static int cbc_des_encrypt(struct blkcipher_desc *desc,
179 struct scatterlist *dst, struct scatterlist *src, 186 struct scatterlist *dst, struct scatterlist *src,
180 unsigned int nbytes) 187 unsigned int nbytes)
181{ 188{
182 struct s390_des_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
183 struct blkcipher_walk walk; 189 struct blkcipher_walk walk;
184 190
185 blkcipher_walk_init(&walk, dst, src, nbytes); 191 blkcipher_walk_init(&walk, dst, src, nbytes);
186 return cbc_desall_crypt(desc, KMC_DEA_ENCRYPT, ctx->iv, &walk); 192 return cbc_desall_crypt(desc, KMC_DEA_ENCRYPT, &walk);
187} 193}
188 194
189static int cbc_des_decrypt(struct blkcipher_desc *desc, 195static int cbc_des_decrypt(struct blkcipher_desc *desc,
190 struct scatterlist *dst, struct scatterlist *src, 196 struct scatterlist *dst, struct scatterlist *src,
191 unsigned int nbytes) 197 unsigned int nbytes)
192{ 198{
193 struct s390_des_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
194 struct blkcipher_walk walk; 199 struct blkcipher_walk walk;
195 200
196 blkcipher_walk_init(&walk, dst, src, nbytes); 201 blkcipher_walk_init(&walk, dst, src, nbytes);
197 return cbc_desall_crypt(desc, KMC_DEA_DECRYPT, ctx->iv, &walk); 202 return cbc_desall_crypt(desc, KMC_DEA_DECRYPT, &walk);
198} 203}
199 204
200static struct crypto_alg cbc_des_alg = { 205static struct crypto_alg cbc_des_alg = {
@@ -327,22 +332,20 @@ static int cbc_des3_encrypt(struct blkcipher_desc *desc,
327 struct scatterlist *dst, struct scatterlist *src, 332 struct scatterlist *dst, struct scatterlist *src,
328 unsigned int nbytes) 333 unsigned int nbytes)
329{ 334{
330 struct s390_des_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
331 struct blkcipher_walk walk; 335 struct blkcipher_walk walk;
332 336
333 blkcipher_walk_init(&walk, dst, src, nbytes); 337 blkcipher_walk_init(&walk, dst, src, nbytes);
334 return cbc_desall_crypt(desc, KMC_TDEA_192_ENCRYPT, ctx->iv, &walk); 338 return cbc_desall_crypt(desc, KMC_TDEA_192_ENCRYPT, &walk);
335} 339}
336 340
337static int cbc_des3_decrypt(struct blkcipher_desc *desc, 341static int cbc_des3_decrypt(struct blkcipher_desc *desc,
338 struct scatterlist *dst, struct scatterlist *src, 342 struct scatterlist *dst, struct scatterlist *src,
339 unsigned int nbytes) 343 unsigned int nbytes)
340{ 344{
341 struct s390_des_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
342 struct blkcipher_walk walk; 345 struct blkcipher_walk walk;
343 346
344 blkcipher_walk_init(&walk, dst, src, nbytes); 347 blkcipher_walk_init(&walk, dst, src, nbytes);
345 return cbc_desall_crypt(desc, KMC_TDEA_192_DECRYPT, ctx->iv, &walk); 348 return cbc_desall_crypt(desc, KMC_TDEA_192_DECRYPT, &walk);
346} 349}
347 350
348static struct crypto_alg cbc_des3_alg = { 351static struct crypto_alg cbc_des3_alg = {
@@ -366,54 +369,80 @@ static struct crypto_alg cbc_des3_alg = {
366 } 369 }
367}; 370};
368 371
372static unsigned int __ctrblk_init(u8 *ctrptr, unsigned int nbytes)
373{
374 unsigned int i, n;
375
376 /* align to block size, max. PAGE_SIZE */
377 n = (nbytes > PAGE_SIZE) ? PAGE_SIZE : nbytes & ~(DES_BLOCK_SIZE - 1);
378 for (i = DES_BLOCK_SIZE; i < n; i += DES_BLOCK_SIZE) {
379 memcpy(ctrptr + i, ctrptr + i - DES_BLOCK_SIZE, DES_BLOCK_SIZE);
380 crypto_inc(ctrptr + i, DES_BLOCK_SIZE);
381 }
382 return n;
383}
384
369static int ctr_desall_crypt(struct blkcipher_desc *desc, long func, 385static int ctr_desall_crypt(struct blkcipher_desc *desc, long func,
370 struct s390_des_ctx *ctx, struct blkcipher_walk *walk) 386 struct s390_des_ctx *ctx,
387 struct blkcipher_walk *walk)
371{ 388{
372 int ret = blkcipher_walk_virt_block(desc, walk, DES_BLOCK_SIZE); 389 int ret = blkcipher_walk_virt_block(desc, walk, DES_BLOCK_SIZE);
373 unsigned int i, n, nbytes; 390 unsigned int n, nbytes;
374 u8 buf[DES_BLOCK_SIZE]; 391 u8 buf[DES_BLOCK_SIZE], ctrbuf[DES_BLOCK_SIZE];
375 u8 *out, *in; 392 u8 *out, *in, *ctrptr = ctrbuf;
393
394 if (!walk->nbytes)
395 return ret;
376 396
377 memcpy(ctrblk, walk->iv, DES_BLOCK_SIZE); 397 if (spin_trylock(&ctrblk_lock))
398 ctrptr = ctrblk;
399
400 memcpy(ctrptr, walk->iv, DES_BLOCK_SIZE);
378 while ((nbytes = walk->nbytes) >= DES_BLOCK_SIZE) { 401 while ((nbytes = walk->nbytes) >= DES_BLOCK_SIZE) {
379 out = walk->dst.virt.addr; 402 out = walk->dst.virt.addr;
380 in = walk->src.virt.addr; 403 in = walk->src.virt.addr;
381 while (nbytes >= DES_BLOCK_SIZE) { 404 while (nbytes >= DES_BLOCK_SIZE) {
382 /* align to block size, max. PAGE_SIZE */ 405 if (ctrptr == ctrblk)
383 n = (nbytes > PAGE_SIZE) ? PAGE_SIZE : 406 n = __ctrblk_init(ctrptr, nbytes);
384 nbytes & ~(DES_BLOCK_SIZE - 1); 407 else
385 for (i = DES_BLOCK_SIZE; i < n; i += DES_BLOCK_SIZE) { 408 n = DES_BLOCK_SIZE;
386 memcpy(ctrblk + i, ctrblk + i - DES_BLOCK_SIZE, 409 ret = crypt_s390_kmctr(func, ctx->key, out, in,
387 DES_BLOCK_SIZE); 410 n, ctrptr);
388 crypto_inc(ctrblk + i, DES_BLOCK_SIZE); 411 if (ret < 0 || ret != n) {
389 } 412 if (ctrptr == ctrblk)
390 ret = crypt_s390_kmctr(func, ctx->key, out, in, n, ctrblk); 413 spin_unlock(&ctrblk_lock);
391 if (ret < 0 || ret != n)
392 return -EIO; 414 return -EIO;
415 }
393 if (n > DES_BLOCK_SIZE) 416 if (n > DES_BLOCK_SIZE)
394 memcpy(ctrblk, ctrblk + n - DES_BLOCK_SIZE, 417 memcpy(ctrptr, ctrptr + n - DES_BLOCK_SIZE,
395 DES_BLOCK_SIZE); 418 DES_BLOCK_SIZE);
396 crypto_inc(ctrblk, DES_BLOCK_SIZE); 419 crypto_inc(ctrptr, DES_BLOCK_SIZE);
397 out += n; 420 out += n;
398 in += n; 421 in += n;
399 nbytes -= n; 422 nbytes -= n;
400 } 423 }
401 ret = blkcipher_walk_done(desc, walk, nbytes); 424 ret = blkcipher_walk_done(desc, walk, nbytes);
402 } 425 }
403 426 if (ctrptr == ctrblk) {
427 if (nbytes)
428 memcpy(ctrbuf, ctrptr, DES_BLOCK_SIZE);
429 else
430 memcpy(walk->iv, ctrptr, DES_BLOCK_SIZE);
431 spin_unlock(&ctrblk_lock);
432 }
404 /* final block may be < DES_BLOCK_SIZE, copy only nbytes */ 433 /* final block may be < DES_BLOCK_SIZE, copy only nbytes */
405 if (nbytes) { 434 if (nbytes) {
406 out = walk->dst.virt.addr; 435 out = walk->dst.virt.addr;
407 in = walk->src.virt.addr; 436 in = walk->src.virt.addr;
408 ret = crypt_s390_kmctr(func, ctx->key, buf, in, 437 ret = crypt_s390_kmctr(func, ctx->key, buf, in,
409 DES_BLOCK_SIZE, ctrblk); 438 DES_BLOCK_SIZE, ctrbuf);
410 if (ret < 0 || ret != DES_BLOCK_SIZE) 439 if (ret < 0 || ret != DES_BLOCK_SIZE)
411 return -EIO; 440 return -EIO;
412 memcpy(out, buf, nbytes); 441 memcpy(out, buf, nbytes);
413 crypto_inc(ctrblk, DES_BLOCK_SIZE); 442 crypto_inc(ctrbuf, DES_BLOCK_SIZE);
414 ret = blkcipher_walk_done(desc, walk, 0); 443 ret = blkcipher_walk_done(desc, walk, 0);
444 memcpy(walk->iv, ctrbuf, DES_BLOCK_SIZE);
415 } 445 }
416 memcpy(walk->iv, ctrblk, DES_BLOCK_SIZE);
417 return ret; 446 return ret;
418} 447}
419 448
diff --git a/arch/s390/kernel/head64.S b/arch/s390/kernel/head64.S
index b9e25ae2579c..d7c00507568a 100644
--- a/arch/s390/kernel/head64.S
+++ b/arch/s390/kernel/head64.S
@@ -59,7 +59,7 @@ ENTRY(startup_continue)
59 .quad 0 # cr12: tracing off 59 .quad 0 # cr12: tracing off
60 .quad 0 # cr13: home space segment table 60 .quad 0 # cr13: home space segment table
61 .quad 0xc0000000 # cr14: machine check handling off 61 .quad 0xc0000000 # cr14: machine check handling off
62 .quad 0 # cr15: linkage stack operations 62 .quad .Llinkage_stack # cr15: linkage stack operations
63.Lpcmsk:.quad 0x0000000180000000 63.Lpcmsk:.quad 0x0000000180000000
64.L4malign:.quad 0xffffffffffc00000 64.L4malign:.quad 0xffffffffffc00000
65.Lscan2g:.quad 0x80000000 + 0x20000 - 8 # 2GB + 128K - 8 65.Lscan2g:.quad 0x80000000 + 0x20000 - 8 # 2GB + 128K - 8
@@ -67,12 +67,15 @@ ENTRY(startup_continue)
67.Lparmaddr: 67.Lparmaddr:
68 .quad PARMAREA 68 .quad PARMAREA
69 .align 64 69 .align 64
70.Lduct: .long 0,0,0,0,.Lduald,0,0,0 70.Lduct: .long 0,.Laste,.Laste,0,.Lduald,0,0,0
71 .long 0,0,0,0,0,0,0,0 71 .long 0,0,0,0,0,0,0,0
72.Laste: .quad 0,0xffffffffffffffff,0,0,0,0,0,0
72 .align 128 73 .align 128
73.Lduald:.rept 8 74.Lduald:.rept 8
74 .long 0x80000000,0,0,0 # invalid access-list entries 75 .long 0x80000000,0,0,0 # invalid access-list entries
75 .endr 76 .endr
77.Llinkage_stack:
78 .long 0,0,0x89000000,0,0,0,0x8a000000,0
76 79
77ENTRY(_ehead) 80ENTRY(_ehead)
78 81
diff --git a/arch/s390/mm/page-states.c b/arch/s390/mm/page-states.c
index a90d45e9dfb0..27c50f4d90cb 100644
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
@@ -12,6 +12,8 @@
12#include <linux/mm.h> 12#include <linux/mm.h>
13#include <linux/gfp.h> 13#include <linux/gfp.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <asm/setup.h>
16#include <asm/ipl.h>
15 17
16#define ESSA_SET_STABLE 1 18#define ESSA_SET_STABLE 1
17#define ESSA_SET_UNUSED 2 19#define ESSA_SET_UNUSED 2
@@ -41,6 +43,14 @@ void __init cmma_init(void)
41 43
42 if (!cmma_flag) 44 if (!cmma_flag)
43 return; 45 return;
46 /*
47 * Disable CMM for dump, otherwise the tprot based memory
48 * detection can fail because of unstable pages.
49 */
50 if (OLDMEM_BASE || ipl_info.type == IPL_TYPE_FCP_DUMP) {
51 cmma_flag = 0;
52 return;
53 }
44 asm volatile( 54 asm volatile(
45 " .insn rrf,0xb9ab0000,%1,%1,0,0\n" 55 " .insn rrf,0xb9ab0000,%1,%1,0,0\n"
46 "0: la %0,0\n" 56 "0: la %0,0\n"
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 940e50ebfafa..0af5250d914f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -444,6 +444,7 @@ config X86_INTEL_MID
444 bool "Intel MID platform support" 444 bool "Intel MID platform support"
445 depends on X86_32 445 depends on X86_32
446 depends on X86_EXTENDED_PLATFORM 446 depends on X86_EXTENDED_PLATFORM
447 depends on X86_PLATFORM_DEVICES
447 depends on PCI 448 depends on PCI
448 depends on PCI_GOANY 449 depends on PCI_GOANY
449 depends on X86_IO_APIC 450 depends on X86_IO_APIC
@@ -1051,9 +1052,9 @@ config MICROCODE_INTEL
1051 This options enables microcode patch loading support for Intel 1052 This options enables microcode patch loading support for Intel
1052 processors. 1053 processors.
1053 1054
1054 For latest news and information on obtaining all the required 1055 For the current Intel microcode data package go to
1055 Intel ingredients for this driver, check: 1056 <https://downloadcenter.intel.com> and search for
1056 <http://www.urbanmyth.org/microcode/>. 1057 'Linux Processor Microcode Data File'.
1057 1058
1058config MICROCODE_AMD 1059config MICROCODE_AMD
1059 bool "AMD microcode loading support" 1060 bool "AMD microcode loading support"
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index 0f3621ed1db6..321a52ccf63a 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -184,6 +184,7 @@ config HAVE_MMIOTRACE_SUPPORT
184config X86_DECODER_SELFTEST 184config X86_DECODER_SELFTEST
185 bool "x86 instruction decoder selftest" 185 bool "x86 instruction decoder selftest"
186 depends on DEBUG_KERNEL && KPROBES 186 depends on DEBUG_KERNEL && KPROBES
187 depends on !COMPILE_TEST
187 ---help--- 188 ---help---
188 Perform x86 instruction decoder selftests at build time. 189 Perform x86 instruction decoder selftests at build time.
189 This option is useful for checking the sanity of x86 instruction 190 This option is useful for checking the sanity of x86 instruction
diff --git a/arch/x86/include/asm/amd_nb.h b/arch/x86/include/asm/amd_nb.h
index a54ee1d054d9..aaac3b2fb746 100644
--- a/arch/x86/include/asm/amd_nb.h
+++ b/arch/x86/include/asm/amd_nb.h
@@ -19,7 +19,7 @@ extern int amd_cache_northbridges(void);
19extern void amd_flush_garts(void); 19extern void amd_flush_garts(void);
20extern int amd_numa_init(void); 20extern int amd_numa_init(void);
21extern int amd_get_subcaches(int); 21extern int amd_get_subcaches(int);
22extern int amd_set_subcaches(int, int); 22extern int amd_set_subcaches(int, unsigned long);
23 23
24struct amd_l3_cache { 24struct amd_l3_cache {
25 unsigned indices; 25 unsigned indices;
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index 3b978c472d08..3d6b9f81cc68 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
@@ -132,6 +132,8 @@ extern void __init efi_map_region_fixed(efi_memory_desc_t *md);
132extern void efi_sync_low_kernel_mappings(void); 132extern void efi_sync_low_kernel_mappings(void);
133extern void efi_setup_page_tables(void); 133extern void efi_setup_page_tables(void);
134extern void __init old_map_region(efi_memory_desc_t *md); 134extern void __init old_map_region(efi_memory_desc_t *md);
135extern void __init runtime_code_page_mkexec(void);
136extern void __init efi_runtime_mkexec(void);
135 137
136struct efi_setup_data { 138struct efi_setup_data {
137 u64 fw_vendor; 139 u64 fw_vendor;
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index bbc8b12fa443..5ad38ad07890 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -445,10 +445,20 @@ static inline int pte_same(pte_t a, pte_t b)
445 return a.pte == b.pte; 445 return a.pte == b.pte;
446} 446}
447 447
448static inline int pteval_present(pteval_t pteval)
449{
450 /*
451 * Yes Linus, _PAGE_PROTNONE == _PAGE_NUMA. Expressing it this
452 * way clearly states that the intent is that protnone and numa
453 * hinting ptes are considered present for the purposes of
454 * pagetable operations like zapping, protection changes, gup etc.
455 */
456 return pteval & (_PAGE_PRESENT | _PAGE_PROTNONE | _PAGE_NUMA);
457}
458
448static inline int pte_present(pte_t a) 459static inline int pte_present(pte_t a)
449{ 460{
450 return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE | 461 return pteval_present(pte_flags(a));
451 _PAGE_NUMA);
452} 462}
453 463
454#define pte_accessible pte_accessible 464#define pte_accessible pte_accessible
diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index e6d90babc245..04905bfc508b 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -62,7 +62,7 @@ static inline void __flush_tlb_all(void)
62 62
63static inline void __flush_tlb_one(unsigned long addr) 63static inline void __flush_tlb_one(unsigned long addr)
64{ 64{
65 count_vm_event(NR_TLB_LOCAL_FLUSH_ONE); 65 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ONE);
66 __flush_tlb_single(addr); 66 __flush_tlb_single(addr);
67} 67}
68 68
@@ -93,13 +93,13 @@ static inline void __flush_tlb_one(unsigned long addr)
93 */ 93 */
94static inline void __flush_tlb_up(void) 94static inline void __flush_tlb_up(void)
95{ 95{
96 count_vm_event(NR_TLB_LOCAL_FLUSH_ALL); 96 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
97 __flush_tlb(); 97 __flush_tlb();
98} 98}
99 99
100static inline void flush_tlb_all(void) 100static inline void flush_tlb_all(void)
101{ 101{
102 count_vm_event(NR_TLB_LOCAL_FLUSH_ALL); 102 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
103 __flush_tlb_all(); 103 __flush_tlb_all();
104} 104}
105 105
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
index 787e1bb5aafc..3e276eb23d1b 100644
--- a/arch/x86/include/asm/xen/page.h
+++ b/arch/x86/include/asm/xen/page.h
@@ -52,8 +52,7 @@ extern unsigned long set_phys_range_identity(unsigned long pfn_s,
52extern int m2p_add_override(unsigned long mfn, struct page *page, 52extern int m2p_add_override(unsigned long mfn, struct page *page,
53 struct gnttab_map_grant_ref *kmap_op); 53 struct gnttab_map_grant_ref *kmap_op);
54extern int m2p_remove_override(struct page *page, 54extern int m2p_remove_override(struct page *page,
55 struct gnttab_map_grant_ref *kmap_op, 55 struct gnttab_map_grant_ref *kmap_op);
56 unsigned long mfn);
57extern struct page *m2p_find_override(unsigned long mfn); 56extern struct page *m2p_find_override(unsigned long mfn);
58extern unsigned long m2p_find_override_pfn(unsigned long mfn, unsigned long pfn); 57extern unsigned long m2p_find_override_pfn(unsigned long mfn, unsigned long pfn);
59 58
@@ -122,7 +121,7 @@ static inline unsigned long mfn_to_pfn(unsigned long mfn)
122 pfn = m2p_find_override_pfn(mfn, ~0); 121 pfn = m2p_find_override_pfn(mfn, ~0);
123 } 122 }
124 123
125 /* 124 /*
126 * pfn is ~0 if there are no entries in the m2p for mfn or if the 125 * pfn is ~0 if there are no entries in the m2p for mfn or if the
127 * entry doesn't map back to the mfn and m2p_override doesn't have a 126 * entry doesn't map back to the mfn and m2p_override doesn't have a
128 * valid entry for it. 127 * valid entry for it.
diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
index 59554dca96ec..dec8de4e1663 100644
--- a/arch/x86/kernel/amd_nb.c
+++ b/arch/x86/kernel/amd_nb.c
@@ -179,7 +179,7 @@ int amd_get_subcaches(int cpu)
179 return (mask >> (4 * cuid)) & 0xf; 179 return (mask >> (4 * cuid)) & 0xf;
180} 180}
181 181
182int amd_set_subcaches(int cpu, int mask) 182int amd_set_subcaches(int cpu, unsigned long mask)
183{ 183{
184 static unsigned int reset, ban; 184 static unsigned int reset, ban;
185 struct amd_northbridge *nb = node_to_amd_nb(amd_get_nb_id(cpu)); 185 struct amd_northbridge *nb = node_to_amd_nb(amd_get_nb_id(cpu));
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index d3153e281d72..c67ffa686064 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -767,10 +767,7 @@ static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
767 767
768static void cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c) 768static void cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c)
769{ 769{
770 tlb_flushall_shift = 5; 770 tlb_flushall_shift = 6;
771
772 if (c->x86 <= 0x11)
773 tlb_flushall_shift = 4;
774} 771}
775 772
776static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c) 773static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 24b6fd10625a..8e28bf2fc3ef 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -284,8 +284,13 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
284 raw_local_save_flags(eflags); 284 raw_local_save_flags(eflags);
285 BUG_ON(eflags & X86_EFLAGS_AC); 285 BUG_ON(eflags & X86_EFLAGS_AC);
286 286
287 if (cpu_has(c, X86_FEATURE_SMAP)) 287 if (cpu_has(c, X86_FEATURE_SMAP)) {
288#ifdef CONFIG_X86_SMAP
288 set_in_cr4(X86_CR4_SMAP); 289 set_in_cr4(X86_CR4_SMAP);
290#else
291 clear_in_cr4(X86_CR4_SMAP);
292#endif
293 }
289} 294}
290 295
291/* 296/*
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 3db61c644e44..5cd9bfabd645 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -640,21 +640,17 @@ static void intel_tlb_flushall_shift_set(struct cpuinfo_x86 *c)
640 case 0x61d: /* six-core 45 nm xeon "Dunnington" */ 640 case 0x61d: /* six-core 45 nm xeon "Dunnington" */
641 tlb_flushall_shift = -1; 641 tlb_flushall_shift = -1;
642 break; 642 break;
643 case 0x63a: /* Ivybridge */
644 tlb_flushall_shift = 2;
645 break;
643 case 0x61a: /* 45 nm nehalem, "Bloomfield" */ 646 case 0x61a: /* 45 nm nehalem, "Bloomfield" */
644 case 0x61e: /* 45 nm nehalem, "Lynnfield" */ 647 case 0x61e: /* 45 nm nehalem, "Lynnfield" */
645 case 0x625: /* 32 nm nehalem, "Clarkdale" */ 648 case 0x625: /* 32 nm nehalem, "Clarkdale" */
646 case 0x62c: /* 32 nm nehalem, "Gulftown" */ 649 case 0x62c: /* 32 nm nehalem, "Gulftown" */
647 case 0x62e: /* 45 nm nehalem-ex, "Beckton" */ 650 case 0x62e: /* 45 nm nehalem-ex, "Beckton" */
648 case 0x62f: /* 32 nm Xeon E7 */ 651 case 0x62f: /* 32 nm Xeon E7 */
649 tlb_flushall_shift = 6;
650 break;
651 case 0x62a: /* SandyBridge */ 652 case 0x62a: /* SandyBridge */
652 case 0x62d: /* SandyBridge, "Romely-EP" */ 653 case 0x62d: /* SandyBridge, "Romely-EP" */
653 tlb_flushall_shift = 5;
654 break;
655 case 0x63a: /* Ivybridge */
656 tlb_flushall_shift = 1;
657 break;
658 default: 654 default:
659 tlb_flushall_shift = 6; 655 tlb_flushall_shift = 6;
660 } 656 }
diff --git a/arch/x86/kernel/cpu/microcode/amd_early.c b/arch/x86/kernel/cpu/microcode/amd_early.c
index 8384c0fa206f..617a9e284245 100644
--- a/arch/x86/kernel/cpu/microcode/amd_early.c
+++ b/arch/x86/kernel/cpu/microcode/amd_early.c
@@ -285,6 +285,15 @@ static void __init collect_cpu_sig_on_bsp(void *arg)
285 285
286 uci->cpu_sig.sig = cpuid_eax(0x00000001); 286 uci->cpu_sig.sig = cpuid_eax(0x00000001);
287} 287}
288
289static void __init get_bsp_sig(void)
290{
291 unsigned int bsp = boot_cpu_data.cpu_index;
292 struct ucode_cpu_info *uci = ucode_cpu_info + bsp;
293
294 if (!uci->cpu_sig.sig)
295 smp_call_function_single(bsp, collect_cpu_sig_on_bsp, NULL, 1);
296}
288#else 297#else
289void load_ucode_amd_ap(void) 298void load_ucode_amd_ap(void)
290{ 299{
@@ -337,31 +346,37 @@ void load_ucode_amd_ap(void)
337 346
338int __init save_microcode_in_initrd_amd(void) 347int __init save_microcode_in_initrd_amd(void)
339{ 348{
349 unsigned long cont;
340 enum ucode_state ret; 350 enum ucode_state ret;
341 u32 eax; 351 u32 eax;
342 352
343#ifdef CONFIG_X86_32 353 if (!container)
344 unsigned int bsp = boot_cpu_data.cpu_index; 354 return -EINVAL;
345 struct ucode_cpu_info *uci = ucode_cpu_info + bsp;
346
347 if (!uci->cpu_sig.sig)
348 smp_call_function_single(bsp, collect_cpu_sig_on_bsp, NULL, 1);
349 355
356#ifdef CONFIG_X86_32
357 get_bsp_sig();
358 cont = (unsigned long)container;
359#else
350 /* 360 /*
351 * Take into account the fact that the ramdisk might get relocated 361 * We need the physical address of the container for both bitness since
352 * and therefore we need to recompute the container's position in 362 * boot_params.hdr.ramdisk_image is a physical address.
353 * virtual memory space.
354 */ 363 */
355 container = (u8 *)(__va((u32)relocated_ramdisk) + 364 cont = __pa(container);
356 ((u32)container - boot_params.hdr.ramdisk_image));
357#endif 365#endif
366
367 /*
368 * Take into account the fact that the ramdisk might get relocated and
369 * therefore we need to recompute the container's position in virtual
370 * memory space.
371 */
372 if (relocated_ramdisk)
373 container = (u8 *)(__va(relocated_ramdisk) +
374 (cont - boot_params.hdr.ramdisk_image));
375
358 if (ucode_new_rev) 376 if (ucode_new_rev)
359 pr_info("microcode: updated early to new patch_level=0x%08x\n", 377 pr_info("microcode: updated early to new patch_level=0x%08x\n",
360 ucode_new_rev); 378 ucode_new_rev);
361 379
362 if (!container)
363 return -EINVAL;
364
365 eax = cpuid_eax(0x00000001); 380 eax = cpuid_eax(0x00000001);
366 eax = ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff); 381 eax = ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff);
367 382
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
index ce2d0a2c3e4f..0e25a1bc5ab5 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -683,7 +683,7 @@ static void prepare_set(void) __acquires(set_atomicity_lock)
683 } 683 }
684 684
685 /* Flush all TLBs via a mov %cr3, %reg; mov %reg, %cr3 */ 685 /* Flush all TLBs via a mov %cr3, %reg; mov %reg, %cr3 */
686 count_vm_event(NR_TLB_LOCAL_FLUSH_ALL); 686 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
687 __flush_tlb(); 687 __flush_tlb();
688 688
689 /* Save MTRR state */ 689 /* Save MTRR state */
@@ -697,7 +697,7 @@ static void prepare_set(void) __acquires(set_atomicity_lock)
697static void post_set(void) __releases(set_atomicity_lock) 697static void post_set(void) __releases(set_atomicity_lock)
698{ 698{
699 /* Flush TLBs (no need to flush caches - they are disabled) */ 699 /* Flush TLBs (no need to flush caches - they are disabled) */
700 count_vm_event(NR_TLB_LOCAL_FLUSH_ALL); 700 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
701 __flush_tlb(); 701 __flush_tlb();
702 702
703 /* Intel (P6) standard MTRRs */ 703 /* Intel (P6) standard MTRRs */
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index d4bdd253fea7..e6253195a301 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -77,8 +77,7 @@ within(unsigned long addr, unsigned long start, unsigned long end)
77 return addr >= start && addr < end; 77 return addr >= start && addr < end;
78} 78}
79 79
80static int 80static unsigned long text_ip_addr(unsigned long ip)
81do_ftrace_mod_code(unsigned long ip, const void *new_code)
82{ 81{
83 /* 82 /*
84 * On x86_64, kernel text mappings are mapped read-only with 83 * On x86_64, kernel text mappings are mapped read-only with
@@ -91,7 +90,7 @@ do_ftrace_mod_code(unsigned long ip, const void *new_code)
91 if (within(ip, (unsigned long)_text, (unsigned long)_etext)) 90 if (within(ip, (unsigned long)_text, (unsigned long)_etext))
92 ip = (unsigned long)__va(__pa_symbol(ip)); 91 ip = (unsigned long)__va(__pa_symbol(ip));
93 92
94 return probe_kernel_write((void *)ip, new_code, MCOUNT_INSN_SIZE); 93 return ip;
95} 94}
96 95
97static const unsigned char *ftrace_nop_replace(void) 96static const unsigned char *ftrace_nop_replace(void)
@@ -123,8 +122,10 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
123 if (memcmp(replaced, old_code, MCOUNT_INSN_SIZE) != 0) 122 if (memcmp(replaced, old_code, MCOUNT_INSN_SIZE) != 0)
124 return -EINVAL; 123 return -EINVAL;
125 124
125 ip = text_ip_addr(ip);
126
126 /* replace the text with the new text */ 127 /* replace the text with the new text */
127 if (do_ftrace_mod_code(ip, new_code)) 128 if (probe_kernel_write((void *)ip, new_code, MCOUNT_INSN_SIZE))
128 return -EPERM; 129 return -EPERM;
129 130
130 sync_core(); 131 sync_core();
@@ -221,37 +222,51 @@ int ftrace_modify_call(struct dyn_ftrace *rec, unsigned long old_addr,
221 return -EINVAL; 222 return -EINVAL;
222} 223}
223 224
224int ftrace_update_ftrace_func(ftrace_func_t func) 225static unsigned long ftrace_update_func;
226
227static int update_ftrace_func(unsigned long ip, void *new)
225{ 228{
226 unsigned long ip = (unsigned long)(&ftrace_call); 229 unsigned char old[MCOUNT_INSN_SIZE];
227 unsigned char old[MCOUNT_INSN_SIZE], *new;
228 int ret; 230 int ret;
229 231
230 memcpy(old, &ftrace_call, MCOUNT_INSN_SIZE); 232 memcpy(old, (void *)ip, MCOUNT_INSN_SIZE);
231 new = ftrace_call_replace(ip, (unsigned long)func); 233
234 ftrace_update_func = ip;
235 /* Make sure the breakpoints see the ftrace_update_func update */
236 smp_wmb();
232 237
233 /* See comment above by declaration of modifying_ftrace_code */ 238 /* See comment above by declaration of modifying_ftrace_code */
234 atomic_inc(&modifying_ftrace_code); 239 atomic_inc(&modifying_ftrace_code);
235 240
236 ret = ftrace_modify_code(ip, old, new); 241 ret = ftrace_modify_code(ip, old, new);
237 242
243 atomic_dec(&modifying_ftrace_code);
244
245 return ret;
246}
247
248int ftrace_update_ftrace_func(ftrace_func_t func)
249{
250 unsigned long ip = (unsigned long)(&ftrace_call);
251 unsigned char *new;
252 int ret;
253
254 new = ftrace_call_replace(ip, (unsigned long)func);
255 ret = update_ftrace_func(ip, new);
256
238 /* Also update the regs callback function */ 257 /* Also update the regs callback function */
239 if (!ret) { 258 if (!ret) {
240 ip = (unsigned long)(&ftrace_regs_call); 259 ip = (unsigned long)(&ftrace_regs_call);
241 memcpy(old, &ftrace_regs_call, MCOUNT_INSN_SIZE);
242 new = ftrace_call_replace(ip, (unsigned long)func); 260 new = ftrace_call_replace(ip, (unsigned long)func);
243 ret = ftrace_modify_code(ip, old, new); 261 ret = update_ftrace_func(ip, new);
244 } 262 }
245 263
246 atomic_dec(&modifying_ftrace_code);
247
248 return ret; 264 return ret;
249} 265}
250 266
251static int is_ftrace_caller(unsigned long ip) 267static int is_ftrace_caller(unsigned long ip)
252{ 268{
253 if (ip == (unsigned long)(&ftrace_call) || 269 if (ip == ftrace_update_func)
254 ip == (unsigned long)(&ftrace_regs_call))
255 return 1; 270 return 1;
256 271
257 return 0; 272 return 0;
@@ -677,45 +692,41 @@ int __init ftrace_dyn_arch_init(void *data)
677#ifdef CONFIG_DYNAMIC_FTRACE 692#ifdef CONFIG_DYNAMIC_FTRACE
678extern void ftrace_graph_call(void); 693extern void ftrace_graph_call(void);
679 694
680static int ftrace_mod_jmp(unsigned long ip, 695static unsigned char *ftrace_jmp_replace(unsigned long ip, unsigned long addr)
681 int old_offset, int new_offset)
682{ 696{
683 unsigned char code[MCOUNT_INSN_SIZE]; 697 static union ftrace_code_union calc;
684 698
685 if (probe_kernel_read(code, (void *)ip, MCOUNT_INSN_SIZE)) 699 /* Jmp not a call (ignore the .e8) */
686 return -EFAULT; 700 calc.e8 = 0xe9;
701 calc.offset = ftrace_calc_offset(ip + MCOUNT_INSN_SIZE, addr);
687 702
688 if (code[0] != 0xe9 || old_offset != *(int *)(&code[1])) 703 /*
689 return -EINVAL; 704 * ftrace external locks synchronize the access to the static variable.
705 */
706 return calc.code;
707}
690 708
691 *(int *)(&code[1]) = new_offset; 709static int ftrace_mod_jmp(unsigned long ip, void *func)
710{
711 unsigned char *new;
692 712
693 if (do_ftrace_mod_code(ip, &code)) 713 new = ftrace_jmp_replace(ip, (unsigned long)func);
694 return -EPERM;
695 714
696 return 0; 715 return update_ftrace_func(ip, new);
697} 716}
698 717
699int ftrace_enable_ftrace_graph_caller(void) 718int ftrace_enable_ftrace_graph_caller(void)
700{ 719{
701 unsigned long ip = (unsigned long)(&ftrace_graph_call); 720 unsigned long ip = (unsigned long)(&ftrace_graph_call);
702 int old_offset, new_offset;
703 721
704 old_offset = (unsigned long)(&ftrace_stub) - (ip + MCOUNT_INSN_SIZE); 722 return ftrace_mod_jmp(ip, &ftrace_graph_caller);
705 new_offset = (unsigned long)(&ftrace_graph_caller) - (ip + MCOUNT_INSN_SIZE);
706
707 return ftrace_mod_jmp(ip, old_offset, new_offset);
708} 723}
709 724
710int ftrace_disable_ftrace_graph_caller(void) 725int ftrace_disable_ftrace_graph_caller(void)
711{ 726{
712 unsigned long ip = (unsigned long)(&ftrace_graph_call); 727 unsigned long ip = (unsigned long)(&ftrace_graph_call);
713 int old_offset, new_offset;
714
715 old_offset = (unsigned long)(&ftrace_graph_caller) - (ip + MCOUNT_INSN_SIZE);
716 new_offset = (unsigned long)(&ftrace_stub) - (ip + MCOUNT_INSN_SIZE);
717 728
718 return ftrace_mod_jmp(ip, old_offset, new_offset); 729 return ftrace_mod_jmp(ip, &ftrace_stub);
719} 730}
720 731
721#endif /* !CONFIG_DYNAMIC_FTRACE */ 732#endif /* !CONFIG_DYNAMIC_FTRACE */
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index dbb60878b744..d99f31d9a750 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -266,6 +266,14 @@ __visible void smp_trace_x86_platform_ipi(struct pt_regs *regs)
266EXPORT_SYMBOL_GPL(vector_used_by_percpu_irq); 266EXPORT_SYMBOL_GPL(vector_used_by_percpu_irq);
267 267
268#ifdef CONFIG_HOTPLUG_CPU 268#ifdef CONFIG_HOTPLUG_CPU
269
270/* These two declarations are only used in check_irq_vectors_for_cpu_disable()
271 * below, which is protected by stop_machine(). Putting them on the stack
272 * results in a stack frame overflow. Dynamically allocating could result in a
273 * failure so declare these two cpumasks as global.
274 */
275static struct cpumask affinity_new, online_new;
276
269/* 277/*
270 * This cpu is going to be removed and its vectors migrated to the remaining 278 * This cpu is going to be removed and its vectors migrated to the remaining
271 * online cpus. Check to see if there are enough vectors in the remaining cpus. 279 * online cpus. Check to see if there are enough vectors in the remaining cpus.
@@ -277,7 +285,6 @@ int check_irq_vectors_for_cpu_disable(void)
277 unsigned int this_cpu, vector, this_count, count; 285 unsigned int this_cpu, vector, this_count, count;
278 struct irq_desc *desc; 286 struct irq_desc *desc;
279 struct irq_data *data; 287 struct irq_data *data;
280 struct cpumask affinity_new, online_new;
281 288
282 this_cpu = smp_processor_id(); 289 this_cpu = smp_processor_id();
283 cpumask_copy(&online_new, cpu_online_mask); 290 cpumask_copy(&online_new, cpu_online_mask);
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c
index 04ee1e2e4c02..7c6acd4b8995 100644
--- a/arch/x86/kernel/quirks.c
+++ b/arch/x86/kernel/quirks.c
@@ -571,3 +571,40 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_15H_NB_F5,
571 quirk_amd_nb_node); 571 quirk_amd_nb_node);
572 572
573#endif 573#endif
574
575#ifdef CONFIG_PCI
576/*
577 * Processor does not ensure DRAM scrub read/write sequence
578 * is atomic wrt accesses to CC6 save state area. Therefore
579 * if a concurrent scrub read/write access is to same address
580 * the entry may appear as if it is not written. This quirk
581 * applies to Fam16h models 00h-0Fh
582 *
583 * See "Revision Guide" for AMD F16h models 00h-0fh,
584 * document 51810 rev. 3.04, Nov 2013
585 */
586static void amd_disable_seq_and_redirect_scrub(struct pci_dev *dev)
587{
588 u32 val;
589
590 /*
591 * Suggested workaround:
592 * set D18F3x58[4:0] = 00h and set D18F3x5C[0] = 0b
593 */
594 pci_read_config_dword(dev, 0x58, &val);
595 if (val & 0x1F) {
596 val &= ~(0x1F);
597 pci_write_config_dword(dev, 0x58, val);
598 }
599
600 pci_read_config_dword(dev, 0x5C, &val);
601 if (val & BIT(0)) {
602 val &= ~BIT(0);
603 pci_write_config_dword(dev, 0x5c, val);
604 }
605}
606
607DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F3,
608 amd_disable_seq_and_redirect_scrub);
609
610#endif
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 19e5adb49a27..acb3b606613e 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -209,7 +209,7 @@ static inline unsigned long long cycles_2_ns(unsigned long long cyc)
209 * dance when its actually needed. 209 * dance when its actually needed.
210 */ 210 */
211 211
212 preempt_disable(); 212 preempt_disable_notrace();
213 data = this_cpu_read(cyc2ns.head); 213 data = this_cpu_read(cyc2ns.head);
214 tail = this_cpu_read(cyc2ns.tail); 214 tail = this_cpu_read(cyc2ns.tail);
215 215
@@ -229,7 +229,7 @@ static inline unsigned long long cycles_2_ns(unsigned long long cyc)
229 if (!--data->__count) 229 if (!--data->__count)
230 this_cpu_write(cyc2ns.tail, data); 230 this_cpu_write(cyc2ns.tail, data);
231 } 231 }
232 preempt_enable(); 232 preempt_enable_notrace();
233 233
234 return ns; 234 return ns;
235} 235}
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 9d591c895803..6dea040cc3a1 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -1001,6 +1001,12 @@ static int fault_in_kernel_space(unsigned long address)
1001 1001
1002static inline bool smap_violation(int error_code, struct pt_regs *regs) 1002static inline bool smap_violation(int error_code, struct pt_regs *regs)
1003{ 1003{
1004 if (!IS_ENABLED(CONFIG_X86_SMAP))
1005 return false;
1006
1007 if (!static_cpu_has(X86_FEATURE_SMAP))
1008 return false;
1009
1004 if (error_code & PF_USER) 1010 if (error_code & PF_USER)
1005 return false; 1011 return false;
1006 1012
@@ -1087,11 +1093,9 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code)
1087 if (unlikely(error_code & PF_RSVD)) 1093 if (unlikely(error_code & PF_RSVD))
1088 pgtable_bad(regs, error_code, address); 1094 pgtable_bad(regs, error_code, address);
1089 1095
1090 if (static_cpu_has(X86_FEATURE_SMAP)) { 1096 if (unlikely(smap_violation(error_code, regs))) {
1091 if (unlikely(smap_violation(error_code, regs))) { 1097 bad_area_nosemaphore(regs, error_code, address);
1092 bad_area_nosemaphore(regs, error_code, address); 1098 return;
1093 return;
1094 }
1095 } 1099 }
1096 1100
1097 /* 1101 /*
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
index 81b2750f3666..27aa0455fab3 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
@@ -493,14 +493,6 @@ static int __init numa_register_memblks(struct numa_meminfo *mi)
493 struct numa_memblk *mb = &mi->blk[i]; 493 struct numa_memblk *mb = &mi->blk[i];
494 memblock_set_node(mb->start, mb->end - mb->start, 494 memblock_set_node(mb->start, mb->end - mb->start,
495 &memblock.memory, mb->nid); 495 &memblock.memory, mb->nid);
496
497 /*
498 * At this time, all memory regions reserved by memblock are
499 * used by the kernel. Set the nid in memblock.reserved will
500 * mark out all the nodes the kernel resides in.
501 */
502 memblock_set_node(mb->start, mb->end - mb->start,
503 &memblock.reserved, mb->nid);
504 } 496 }
505 497
506 /* 498 /*
@@ -565,10 +557,21 @@ static void __init numa_init_array(void)
565static void __init numa_clear_kernel_node_hotplug(void) 557static void __init numa_clear_kernel_node_hotplug(void)
566{ 558{
567 int i, nid; 559 int i, nid;
568 nodemask_t numa_kernel_nodes; 560 nodemask_t numa_kernel_nodes = NODE_MASK_NONE;
569 unsigned long start, end; 561 unsigned long start, end;
570 struct memblock_type *type = &memblock.reserved; 562 struct memblock_type *type = &memblock.reserved;
571 563
564 /*
565 * At this time, all memory regions reserved by memblock are
566 * used by the kernel. Set the nid in memblock.reserved will
567 * mark out all the nodes the kernel resides in.
568 */
569 for (i = 0; i < numa_meminfo.nr_blks; i++) {
570 struct numa_memblk *mb = &numa_meminfo.blk[i];
571 memblock_set_node(mb->start, mb->end - mb->start,
572 &memblock.reserved, mb->nid);
573 }
574
572 /* Mark all kernel nodes. */ 575 /* Mark all kernel nodes. */
573 for (i = 0; i < type->cnt; i++) 576 for (i = 0; i < type->cnt; i++)
574 node_set(type->regions[i].nid, numa_kernel_nodes); 577 node_set(type->regions[i].nid, numa_kernel_nodes);
diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
index 0342d27ca798..47b6436e41c2 100644
--- a/arch/x86/mm/numa_32.c
+++ b/arch/x86/mm/numa_32.c
@@ -52,6 +52,8 @@ void memory_present(int nid, unsigned long start, unsigned long end)
52 nid, start, end); 52 nid, start, end);
53 printk(KERN_DEBUG " Setting physnode_map array to node %d for pfns:\n", nid); 53 printk(KERN_DEBUG " Setting physnode_map array to node %d for pfns:\n", nid);
54 printk(KERN_DEBUG " "); 54 printk(KERN_DEBUG " ");
55 start = round_down(start, PAGES_PER_SECTION);
56 end = round_up(end, PAGES_PER_SECTION);
55 for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) { 57 for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
56 physnode_map[pfn / PAGES_PER_SECTION] = nid; 58 physnode_map[pfn / PAGES_PER_SECTION] = nid;
57 printk(KERN_CONT "%lx ", pfn); 59 printk(KERN_CONT "%lx ", pfn);
diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
index 1a25187e151e..1953e9c9391a 100644
--- a/arch/x86/mm/srat.c
+++ b/arch/x86/mm/srat.c
@@ -42,15 +42,25 @@ static __init inline int srat_disabled(void)
42 return acpi_numa < 0; 42 return acpi_numa < 0;
43} 43}
44 44
45/* Callback for SLIT parsing */ 45/*
46 * Callback for SLIT parsing. pxm_to_node() returns NUMA_NO_NODE for
47 * I/O localities since SRAT does not list them. I/O localities are
48 * not supported at this point.
49 */
46void __init acpi_numa_slit_init(struct acpi_table_slit *slit) 50void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
47{ 51{
48 int i, j; 52 int i, j;
49 53
50 for (i = 0; i < slit->locality_count; i++) 54 for (i = 0; i < slit->locality_count; i++) {
51 for (j = 0; j < slit->locality_count; j++) 55 if (pxm_to_node(i) == NUMA_NO_NODE)
56 continue;
57 for (j = 0; j < slit->locality_count; j++) {
58 if (pxm_to_node(j) == NUMA_NO_NODE)
59 continue;
52 numa_set_distance(pxm_to_node(i), pxm_to_node(j), 60 numa_set_distance(pxm_to_node(i), pxm_to_node(j),
53 slit->entry[slit->locality_count * i + j]); 61 slit->entry[slit->locality_count * i + j]);
62 }
63 }
54} 64}
55 65
56/* Callback for Proximity Domain -> x2APIC mapping */ 66/* Callback for Proximity Domain -> x2APIC mapping */
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index ae699b3bbac8..dd8dda167a24 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -103,7 +103,7 @@ static void flush_tlb_func(void *info)
103 if (f->flush_mm != this_cpu_read(cpu_tlbstate.active_mm)) 103 if (f->flush_mm != this_cpu_read(cpu_tlbstate.active_mm))
104 return; 104 return;
105 105
106 count_vm_event(NR_TLB_REMOTE_FLUSH_RECEIVED); 106 count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED);
107 if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) { 107 if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) {
108 if (f->flush_end == TLB_FLUSH_ALL) 108 if (f->flush_end == TLB_FLUSH_ALL)
109 local_flush_tlb(); 109 local_flush_tlb();
@@ -131,7 +131,7 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
131 info.flush_start = start; 131 info.flush_start = start;
132 info.flush_end = end; 132 info.flush_end = end;
133 133
134 count_vm_event(NR_TLB_REMOTE_FLUSH); 134 count_vm_tlb_event(NR_TLB_REMOTE_FLUSH);
135 if (is_uv_system()) { 135 if (is_uv_system()) {
136 unsigned int cpu; 136 unsigned int cpu;
137 137
@@ -151,44 +151,19 @@ void flush_tlb_current_task(void)
151 151
152 preempt_disable(); 152 preempt_disable();
153 153
154 count_vm_event(NR_TLB_LOCAL_FLUSH_ALL); 154 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
155 local_flush_tlb(); 155 local_flush_tlb();
156 if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids) 156 if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
157 flush_tlb_others(mm_cpumask(mm), mm, 0UL, TLB_FLUSH_ALL); 157 flush_tlb_others(mm_cpumask(mm), mm, 0UL, TLB_FLUSH_ALL);
158 preempt_enable(); 158 preempt_enable();
159} 159}
160 160
161/*
162 * It can find out the THP large page, or
163 * HUGETLB page in tlb_flush when THP disabled
164 */
165static inline unsigned long has_large_page(struct mm_struct *mm,
166 unsigned long start, unsigned long end)
167{
168 pgd_t *pgd;
169 pud_t *pud;
170 pmd_t *pmd;
171 unsigned long addr = ALIGN(start, HPAGE_SIZE);
172 for (; addr < end; addr += HPAGE_SIZE) {
173 pgd = pgd_offset(mm, addr);
174 if (likely(!pgd_none(*pgd))) {
175 pud = pud_offset(pgd, addr);
176 if (likely(!pud_none(*pud))) {
177 pmd = pmd_offset(pud, addr);
178 if (likely(!pmd_none(*pmd)))
179 if (pmd_large(*pmd))
180 return addr;
181 }
182 }
183 }
184 return 0;
185}
186
187void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, 161void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
188 unsigned long end, unsigned long vmflag) 162 unsigned long end, unsigned long vmflag)
189{ 163{
190 unsigned long addr; 164 unsigned long addr;
191 unsigned act_entries, tlb_entries = 0; 165 unsigned act_entries, tlb_entries = 0;
166 unsigned long nr_base_pages;
192 167
193 preempt_disable(); 168 preempt_disable();
194 if (current->active_mm != mm) 169 if (current->active_mm != mm)
@@ -210,21 +185,20 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
210 tlb_entries = tlb_lli_4k[ENTRIES]; 185 tlb_entries = tlb_lli_4k[ENTRIES];
211 else 186 else
212 tlb_entries = tlb_lld_4k[ENTRIES]; 187 tlb_entries = tlb_lld_4k[ENTRIES];
188
213 /* Assume all of TLB entries was occupied by this task */ 189 /* Assume all of TLB entries was occupied by this task */
214 act_entries = mm->total_vm > tlb_entries ? tlb_entries : mm->total_vm; 190 act_entries = tlb_entries >> tlb_flushall_shift;
191 act_entries = mm->total_vm > act_entries ? act_entries : mm->total_vm;
192 nr_base_pages = (end - start) >> PAGE_SHIFT;
215 193
216 /* tlb_flushall_shift is on balance point, details in commit log */ 194 /* tlb_flushall_shift is on balance point, details in commit log */
217 if ((end - start) >> PAGE_SHIFT > act_entries >> tlb_flushall_shift) { 195 if (nr_base_pages > act_entries) {
218 count_vm_event(NR_TLB_LOCAL_FLUSH_ALL); 196 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
219 local_flush_tlb(); 197 local_flush_tlb();
220 } else { 198 } else {
221 if (has_large_page(mm, start, end)) {
222 local_flush_tlb();
223 goto flush_all;
224 }
225 /* flush range by one by one 'invlpg' */ 199 /* flush range by one by one 'invlpg' */
226 for (addr = start; addr < end; addr += PAGE_SIZE) { 200 for (addr = start; addr < end; addr += PAGE_SIZE) {
227 count_vm_event(NR_TLB_LOCAL_FLUSH_ONE); 201 count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ONE);
228 __flush_tlb_single(addr); 202 __flush_tlb_single(addr);
229 } 203 }
230 204
@@ -262,7 +236,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long start)
262 236
263static void do_flush_tlb_all(void *info) 237static void do_flush_tlb_all(void *info)
264{ 238{
265 count_vm_event(NR_TLB_REMOTE_FLUSH_RECEIVED); 239 count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED);
266 __flush_tlb_all(); 240 __flush_tlb_all();
267 if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY) 241 if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY)
268 leave_mm(smp_processor_id()); 242 leave_mm(smp_processor_id());
@@ -270,7 +244,7 @@ static void do_flush_tlb_all(void *info)
270 244
271void flush_tlb_all(void) 245void flush_tlb_all(void)
272{ 246{
273 count_vm_event(NR_TLB_REMOTE_FLUSH); 247 count_vm_tlb_event(NR_TLB_REMOTE_FLUSH);
274 on_each_cpu(do_flush_tlb_all, NULL, 1); 248 on_each_cpu(do_flush_tlb_all, NULL, 1);
275} 249}
276 250
diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c
index 7145ec63c520..f15103dff4b4 100644
--- a/arch/x86/platform/efi/efi-bgrt.c
+++ b/arch/x86/platform/efi/efi-bgrt.c
@@ -42,14 +42,15 @@ void __init efi_bgrt_init(void)
42 42
43 if (bgrt_tab->header.length < sizeof(*bgrt_tab)) 43 if (bgrt_tab->header.length < sizeof(*bgrt_tab))
44 return; 44 return;
45 if (bgrt_tab->version != 1) 45 if (bgrt_tab->version != 1 || bgrt_tab->status != 1)
46 return; 46 return;
47 if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address) 47 if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address)
48 return; 48 return;
49 49
50 image = efi_lookup_mapped_addr(bgrt_tab->image_address); 50 image = efi_lookup_mapped_addr(bgrt_tab->image_address);
51 if (!image) { 51 if (!image) {
52 image = ioremap(bgrt_tab->image_address, sizeof(bmp_header)); 52 image = early_memremap(bgrt_tab->image_address,
53 sizeof(bmp_header));
53 ioremapped = true; 54 ioremapped = true;
54 if (!image) 55 if (!image)
55 return; 56 return;
@@ -57,7 +58,7 @@ void __init efi_bgrt_init(void)
57 58
58 memcpy_fromio(&bmp_header, image, sizeof(bmp_header)); 59 memcpy_fromio(&bmp_header, image, sizeof(bmp_header));
59 if (ioremapped) 60 if (ioremapped)
60 iounmap(image); 61 early_iounmap(image, sizeof(bmp_header));
61 bgrt_image_size = bmp_header.size; 62 bgrt_image_size = bmp_header.size;
62 63
63 bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL); 64 bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL);
@@ -65,7 +66,8 @@ void __init efi_bgrt_init(void)
65 return; 66 return;
66 67
67 if (ioremapped) { 68 if (ioremapped) {
68 image = ioremap(bgrt_tab->image_address, bmp_header.size); 69 image = early_memremap(bgrt_tab->image_address,
70 bmp_header.size);
69 if (!image) { 71 if (!image) {
70 kfree(bgrt_image); 72 kfree(bgrt_image);
71 bgrt_image = NULL; 73 bgrt_image = NULL;
@@ -75,5 +77,5 @@ void __init efi_bgrt_init(void)
75 77
76 memcpy_fromio(bgrt_image, image, bgrt_image_size); 78 memcpy_fromio(bgrt_image, image, bgrt_image_size);
77 if (ioremapped) 79 if (ioremapped)
78 iounmap(image); 80 early_iounmap(image, bmp_header.size);
79} 81}
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index d62ec87a2b26..1a201ac7cef8 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -792,7 +792,7 @@ void __init efi_set_executable(efi_memory_desc_t *md, bool executable)
792 set_memory_nx(addr, npages); 792 set_memory_nx(addr, npages);
793} 793}
794 794
795static void __init runtime_code_page_mkexec(void) 795void __init runtime_code_page_mkexec(void)
796{ 796{
797 efi_memory_desc_t *md; 797 efi_memory_desc_t *md;
798 void *p; 798 void *p;
@@ -1069,8 +1069,7 @@ void __init efi_enter_virtual_mode(void)
1069 efi.update_capsule = virt_efi_update_capsule; 1069 efi.update_capsule = virt_efi_update_capsule;
1070 efi.query_capsule_caps = virt_efi_query_capsule_caps; 1070 efi.query_capsule_caps = virt_efi_query_capsule_caps;
1071 1071
1072 if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX)) 1072 efi_runtime_mkexec();
1073 runtime_code_page_mkexec();
1074 1073
1075 kfree(new_memmap); 1074 kfree(new_memmap);
1076 1075
diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c
index 249b183cf417..0b74cdf7f816 100644
--- a/arch/x86/platform/efi/efi_32.c
+++ b/arch/x86/platform/efi/efi_32.c
@@ -77,3 +77,9 @@ void efi_call_phys_epilog(void)
77 77
78 local_irq_restore(efi_rt_eflags); 78 local_irq_restore(efi_rt_eflags);
79} 79}
80
81void __init efi_runtime_mkexec(void)
82{
83 if (__supported_pte_mask & _PAGE_NX)
84 runtime_code_page_mkexec();
85}
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index 6284f158a47d..0c2a234fef1e 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -233,3 +233,12 @@ void __init parse_efi_setup(u64 phys_addr, u32 data_len)
233{ 233{
234 efi_setup = phys_addr + sizeof(struct setup_data); 234 efi_setup = phys_addr + sizeof(struct setup_data);
235} 235}
236
237void __init efi_runtime_mkexec(void)
238{
239 if (!efi_enabled(EFI_OLD_MEMMAP))
240 return;
241
242 if (__supported_pte_mask & _PAGE_NX)
243 runtime_code_page_mkexec();
244}
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index a4d7b647867f..201d09a7c46b 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1473,6 +1473,18 @@ static void xen_pvh_set_cr_flags(int cpu)
1473 * X86_CR0_TS, X86_CR0_PE, X86_CR0_ET are set by Xen for HVM guests 1473 * X86_CR0_TS, X86_CR0_PE, X86_CR0_ET are set by Xen for HVM guests
1474 * (which PVH shared codepaths), while X86_CR0_PG is for PVH. */ 1474 * (which PVH shared codepaths), while X86_CR0_PG is for PVH. */
1475 write_cr0(read_cr0() | X86_CR0_MP | X86_CR0_NE | X86_CR0_WP | X86_CR0_AM); 1475 write_cr0(read_cr0() | X86_CR0_MP | X86_CR0_NE | X86_CR0_WP | X86_CR0_AM);
1476
1477 if (!cpu)
1478 return;
1479 /*
1480 * For BSP, PSE PGE are set in probe_page_size_mask(), for APs
1481 * set them here. For all, OSFXSR OSXMMEXCPT are set in fpu_init.
1482 */
1483 if (cpu_has_pse)
1484 set_in_cr4(X86_CR4_PSE);
1485
1486 if (cpu_has_pge)
1487 set_in_cr4(X86_CR4_PGE);
1476} 1488}
1477 1489
1478/* 1490/*
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 2423ef04ffea..256282e7888b 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -365,7 +365,7 @@ void xen_ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr,
365/* Assume pteval_t is equivalent to all the other *val_t types. */ 365/* Assume pteval_t is equivalent to all the other *val_t types. */
366static pteval_t pte_mfn_to_pfn(pteval_t val) 366static pteval_t pte_mfn_to_pfn(pteval_t val)
367{ 367{
368 if (val & _PAGE_PRESENT) { 368 if (pteval_present(val)) {
369 unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; 369 unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
370 unsigned long pfn = mfn_to_pfn(mfn); 370 unsigned long pfn = mfn_to_pfn(mfn);
371 371
@@ -381,7 +381,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
381 381
382static pteval_t pte_pfn_to_mfn(pteval_t val) 382static pteval_t pte_pfn_to_mfn(pteval_t val)
383{ 383{
384 if (val & _PAGE_PRESENT) { 384 if (pteval_present(val)) {
385 unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; 385 unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
386 pteval_t flags = val & PTE_FLAGS_MASK; 386 pteval_t flags = val & PTE_FLAGS_MASK;
387 unsigned long mfn; 387 unsigned long mfn;
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index 8009acbe41e4..696c694986d0 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -899,6 +899,13 @@ int m2p_add_override(unsigned long mfn, struct page *page,
899 "m2p_add_override: pfn %lx not mapped", pfn)) 899 "m2p_add_override: pfn %lx not mapped", pfn))
900 return -EINVAL; 900 return -EINVAL;
901 } 901 }
902 WARN_ON(PagePrivate(page));
903 SetPagePrivate(page);
904 set_page_private(page, mfn);
905 page->index = pfn_to_mfn(pfn);
906
907 if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn))))
908 return -ENOMEM;
902 909
903 if (kmap_op != NULL) { 910 if (kmap_op != NULL) {
904 if (!PageHighMem(page)) { 911 if (!PageHighMem(page)) {
@@ -937,16 +944,19 @@ int m2p_add_override(unsigned long mfn, struct page *page,
937} 944}
938EXPORT_SYMBOL_GPL(m2p_add_override); 945EXPORT_SYMBOL_GPL(m2p_add_override);
939int m2p_remove_override(struct page *page, 946int m2p_remove_override(struct page *page,
940 struct gnttab_map_grant_ref *kmap_op, 947 struct gnttab_map_grant_ref *kmap_op)
941 unsigned long mfn)
942{ 948{
943 unsigned long flags; 949 unsigned long flags;
950 unsigned long mfn;
944 unsigned long pfn; 951 unsigned long pfn;
945 unsigned long uninitialized_var(address); 952 unsigned long uninitialized_var(address);
946 unsigned level; 953 unsigned level;
947 pte_t *ptep = NULL; 954 pte_t *ptep = NULL;
948 955
949 pfn = page_to_pfn(page); 956 pfn = page_to_pfn(page);
957 mfn = get_phys_to_machine(pfn);
958 if (mfn == INVALID_P2M_ENTRY || !(mfn & FOREIGN_FRAME_BIT))
959 return -EINVAL;
950 960
951 if (!PageHighMem(page)) { 961 if (!PageHighMem(page)) {
952 address = (unsigned long)__va(pfn << PAGE_SHIFT); 962 address = (unsigned long)__va(pfn << PAGE_SHIFT);
@@ -960,7 +970,10 @@ int m2p_remove_override(struct page *page,
960 spin_lock_irqsave(&m2p_override_lock, flags); 970 spin_lock_irqsave(&m2p_override_lock, flags);
961 list_del(&page->lru); 971 list_del(&page->lru);
962 spin_unlock_irqrestore(&m2p_override_lock, flags); 972 spin_unlock_irqrestore(&m2p_override_lock, flags);
973 WARN_ON(!PagePrivate(page));
974 ClearPagePrivate(page);
963 975
976 set_phys_to_machine(pfn, page->index);
964 if (kmap_op != NULL) { 977 if (kmap_op != NULL) {
965 if (!PageHighMem(page)) { 978 if (!PageHighMem(page)) {
966 struct multicall_space mcs; 979 struct multicall_space mcs;
diff --git a/block/blk-core.c b/block/blk-core.c
index c00e0bdeab4a..853f92749202 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -693,11 +693,20 @@ blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id)
693 if (!uninit_q) 693 if (!uninit_q)
694 return NULL; 694 return NULL;
695 695
696 uninit_q->flush_rq = kzalloc(sizeof(struct request), GFP_KERNEL);
697 if (!uninit_q->flush_rq)
698 goto out_cleanup_queue;
699
696 q = blk_init_allocated_queue(uninit_q, rfn, lock); 700 q = blk_init_allocated_queue(uninit_q, rfn, lock);
697 if (!q) 701 if (!q)
698 blk_cleanup_queue(uninit_q); 702 goto out_free_flush_rq;
699
700 return q; 703 return q;
704
705out_free_flush_rq:
706 kfree(uninit_q->flush_rq);
707out_cleanup_queue:
708 blk_cleanup_queue(uninit_q);
709 return NULL;
701} 710}
702EXPORT_SYMBOL(blk_init_queue_node); 711EXPORT_SYMBOL(blk_init_queue_node);
703 712
@@ -1127,7 +1136,7 @@ static struct request *blk_old_get_request(struct request_queue *q, int rw,
1127struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask) 1136struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask)
1128{ 1137{
1129 if (q->mq_ops) 1138 if (q->mq_ops)
1130 return blk_mq_alloc_request(q, rw, gfp_mask, false); 1139 return blk_mq_alloc_request(q, rw, gfp_mask);
1131 else 1140 else
1132 return blk_old_get_request(q, rw, gfp_mask); 1141 return blk_old_get_request(q, rw, gfp_mask);
1133} 1142}
@@ -1278,6 +1287,11 @@ void __blk_put_request(struct request_queue *q, struct request *req)
1278 if (unlikely(!q)) 1287 if (unlikely(!q))
1279 return; 1288 return;
1280 1289
1290 if (q->mq_ops) {
1291 blk_mq_free_request(req);
1292 return;
1293 }
1294
1281 blk_pm_put_request(req); 1295 blk_pm_put_request(req);
1282 1296
1283 elv_completed_request(q, req); 1297 elv_completed_request(q, req);
diff --git a/block/blk-exec.c b/block/blk-exec.c
index bbfc072a79c2..c68613bb4c79 100644
--- a/block/blk-exec.c
+++ b/block/blk-exec.c
@@ -65,7 +65,7 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk,
65 * be resued after dying flag is set 65 * be resued after dying flag is set
66 */ 66 */
67 if (q->mq_ops) { 67 if (q->mq_ops) {
68 blk_mq_insert_request(q, rq, true); 68 blk_mq_insert_request(q, rq, at_head, true);
69 return; 69 return;
70 } 70 }
71 71
diff --git a/block/blk-flush.c b/block/blk-flush.c
index 9288aaf35c21..66e2b697f5db 100644
--- a/block/blk-flush.c
+++ b/block/blk-flush.c
@@ -130,20 +130,26 @@ static void blk_flush_restore_request(struct request *rq)
130 blk_clear_rq_complete(rq); 130 blk_clear_rq_complete(rq);
131} 131}
132 132
133static void mq_flush_data_run(struct work_struct *work) 133static void mq_flush_run(struct work_struct *work)
134{ 134{
135 struct request *rq; 135 struct request *rq;
136 136
137 rq = container_of(work, struct request, mq_flush_data); 137 rq = container_of(work, struct request, mq_flush_work);
138 138
139 memset(&rq->csd, 0, sizeof(rq->csd)); 139 memset(&rq->csd, 0, sizeof(rq->csd));
140 blk_mq_run_request(rq, true, false); 140 blk_mq_run_request(rq, true, false);
141} 141}
142 142
143static void blk_mq_flush_data_insert(struct request *rq) 143static bool blk_flush_queue_rq(struct request *rq)
144{ 144{
145 INIT_WORK(&rq->mq_flush_data, mq_flush_data_run); 145 if (rq->q->mq_ops) {
146 kblockd_schedule_work(rq->q, &rq->mq_flush_data); 146 INIT_WORK(&rq->mq_flush_work, mq_flush_run);
147 kblockd_schedule_work(rq->q, &rq->mq_flush_work);
148 return false;
149 } else {
150 list_add_tail(&rq->queuelist, &rq->q->queue_head);
151 return true;
152 }
147} 153}
148 154
149/** 155/**
@@ -187,12 +193,7 @@ static bool blk_flush_complete_seq(struct request *rq, unsigned int seq,
187 193
188 case REQ_FSEQ_DATA: 194 case REQ_FSEQ_DATA:
189 list_move_tail(&rq->flush.list, &q->flush_data_in_flight); 195 list_move_tail(&rq->flush.list, &q->flush_data_in_flight);
190 if (q->mq_ops) 196 queued = blk_flush_queue_rq(rq);
191 blk_mq_flush_data_insert(rq);
192 else {
193 list_add(&rq->queuelist, &q->queue_head);
194 queued = true;
195 }
196 break; 197 break;
197 198
198 case REQ_FSEQ_DONE: 199 case REQ_FSEQ_DONE:
@@ -216,9 +217,6 @@ static bool blk_flush_complete_seq(struct request *rq, unsigned int seq,
216 } 217 }
217 218
218 kicked = blk_kick_flush(q); 219 kicked = blk_kick_flush(q);
219 /* blk_mq_run_flush will run queue */
220 if (q->mq_ops)
221 return queued;
222 return kicked | queued; 220 return kicked | queued;
223} 221}
224 222
@@ -230,10 +228,9 @@ static void flush_end_io(struct request *flush_rq, int error)
230 struct request *rq, *n; 228 struct request *rq, *n;
231 unsigned long flags = 0; 229 unsigned long flags = 0;
232 230
233 if (q->mq_ops) { 231 if (q->mq_ops)
234 blk_mq_free_request(flush_rq);
235 spin_lock_irqsave(&q->mq_flush_lock, flags); 232 spin_lock_irqsave(&q->mq_flush_lock, flags);
236 } 233
237 running = &q->flush_queue[q->flush_running_idx]; 234 running = &q->flush_queue[q->flush_running_idx];
238 BUG_ON(q->flush_pending_idx == q->flush_running_idx); 235 BUG_ON(q->flush_pending_idx == q->flush_running_idx);
239 236
@@ -263,49 +260,14 @@ static void flush_end_io(struct request *flush_rq, int error)
263 * kblockd. 260 * kblockd.
264 */ 261 */
265 if (queued || q->flush_queue_delayed) { 262 if (queued || q->flush_queue_delayed) {
266 if (!q->mq_ops) 263 WARN_ON(q->mq_ops);
267 blk_run_queue_async(q); 264 blk_run_queue_async(q);
268 else
269 /*
270 * This can be optimized to only run queues with requests
271 * queued if necessary.
272 */
273 blk_mq_run_queues(q, true);
274 } 265 }
275 q->flush_queue_delayed = 0; 266 q->flush_queue_delayed = 0;
276 if (q->mq_ops) 267 if (q->mq_ops)
277 spin_unlock_irqrestore(&q->mq_flush_lock, flags); 268 spin_unlock_irqrestore(&q->mq_flush_lock, flags);
278} 269}
279 270
280static void mq_flush_work(struct work_struct *work)
281{
282 struct request_queue *q;
283 struct request *rq;
284
285 q = container_of(work, struct request_queue, mq_flush_work);
286
287 /* We don't need set REQ_FLUSH_SEQ, it's for consistency */
288 rq = blk_mq_alloc_request(q, WRITE_FLUSH|REQ_FLUSH_SEQ,
289 __GFP_WAIT|GFP_ATOMIC, true);
290 rq->cmd_type = REQ_TYPE_FS;
291 rq->end_io = flush_end_io;
292
293 blk_mq_run_request(rq, true, false);
294}
295
296/*
297 * We can't directly use q->flush_rq, because it doesn't have tag and is not in
298 * hctx->rqs[]. so we must allocate a new request, since we can't sleep here,
299 * so offload the work to workqueue.
300 *
301 * Note: we assume a flush request finished in any hardware queue will flush
302 * the whole disk cache.
303 */
304static void mq_run_flush(struct request_queue *q)
305{
306 kblockd_schedule_work(q, &q->mq_flush_work);
307}
308
309/** 271/**
310 * blk_kick_flush - consider issuing flush request 272 * blk_kick_flush - consider issuing flush request
311 * @q: request_queue being kicked 273 * @q: request_queue being kicked
@@ -340,19 +302,31 @@ static bool blk_kick_flush(struct request_queue *q)
340 * different from running_idx, which means flush is in flight. 302 * different from running_idx, which means flush is in flight.
341 */ 303 */
342 q->flush_pending_idx ^= 1; 304 q->flush_pending_idx ^= 1;
305
343 if (q->mq_ops) { 306 if (q->mq_ops) {
344 mq_run_flush(q); 307 struct blk_mq_ctx *ctx = first_rq->mq_ctx;
345 return true; 308 struct blk_mq_hw_ctx *hctx = q->mq_ops->map_queue(q, ctx->cpu);
309
310 blk_mq_rq_init(hctx, q->flush_rq);
311 q->flush_rq->mq_ctx = ctx;
312
313 /*
314 * Reuse the tag value from the fist waiting request,
315 * with blk-mq the tag is generated during request
316 * allocation and drivers can rely on it being inside
317 * the range they asked for.
318 */
319 q->flush_rq->tag = first_rq->tag;
320 } else {
321 blk_rq_init(q, q->flush_rq);
346 } 322 }
347 323
348 blk_rq_init(q, &q->flush_rq); 324 q->flush_rq->cmd_type = REQ_TYPE_FS;
349 q->flush_rq.cmd_type = REQ_TYPE_FS; 325 q->flush_rq->cmd_flags = WRITE_FLUSH | REQ_FLUSH_SEQ;
350 q->flush_rq.cmd_flags = WRITE_FLUSH | REQ_FLUSH_SEQ; 326 q->flush_rq->rq_disk = first_rq->rq_disk;
351 q->flush_rq.rq_disk = first_rq->rq_disk; 327 q->flush_rq->end_io = flush_end_io;
352 q->flush_rq.end_io = flush_end_io;
353 328
354 list_add_tail(&q->flush_rq.queuelist, &q->queue_head); 329 return blk_flush_queue_rq(q->flush_rq);
355 return true;
356} 330}
357 331
358static void flush_data_end_io(struct request *rq, int error) 332static void flush_data_end_io(struct request *rq, int error)
@@ -558,5 +532,4 @@ EXPORT_SYMBOL(blkdev_issue_flush);
558void blk_mq_init_flush(struct request_queue *q) 532void blk_mq_init_flush(struct request_queue *q)
559{ 533{
560 spin_lock_init(&q->mq_flush_lock); 534 spin_lock_init(&q->mq_flush_lock);
561 INIT_WORK(&q->mq_flush_work, mq_flush_work);
562} 535}
diff --git a/block/blk-lib.c b/block/blk-lib.c
index 2da76c999ef3..97a733cf3d5f 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -119,6 +119,14 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
119 119
120 atomic_inc(&bb.done); 120 atomic_inc(&bb.done);
121 submit_bio(type, bio); 121 submit_bio(type, bio);
122
123 /*
124 * We can loop for a long time in here, if someone does
125 * full device discards (like mkfs). Be nice and allow
126 * us to schedule out to avoid softlocking if preempt
127 * is disabled.
128 */
129 cond_resched();
122 } 130 }
123 blk_finish_plug(&plug); 131 blk_finish_plug(&plug);
124 132
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 8f8adaa95466..6c583f9c5b65 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -21,6 +21,16 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
21 if (!bio) 21 if (!bio)
22 return 0; 22 return 0;
23 23
24 /*
25 * This should probably be returning 0, but blk_add_request_payload()
26 * (Christoph!!!!)
27 */
28 if (bio->bi_rw & REQ_DISCARD)
29 return 1;
30
31 if (bio->bi_rw & REQ_WRITE_SAME)
32 return 1;
33
24 fbio = bio; 34 fbio = bio;
25 cluster = blk_queue_cluster(q); 35 cluster = blk_queue_cluster(q);
26 seg_size = 0; 36 seg_size = 0;
@@ -161,30 +171,60 @@ new_segment:
161 *bvprv = *bvec; 171 *bvprv = *bvec;
162} 172}
163 173
164/* 174static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio,
165 * map a request to scatterlist, return number of sg entries setup. Caller 175 struct scatterlist *sglist,
166 * must make sure sg can hold rq->nr_phys_segments entries 176 struct scatterlist **sg)
167 */
168int blk_rq_map_sg(struct request_queue *q, struct request *rq,
169 struct scatterlist *sglist)
170{ 177{
171 struct bio_vec bvec, bvprv = { NULL }; 178 struct bio_vec bvec, bvprv = { NULL };
172 struct req_iterator iter; 179 struct bvec_iter iter;
173 struct scatterlist *sg;
174 int nsegs, cluster; 180 int nsegs, cluster;
175 181
176 nsegs = 0; 182 nsegs = 0;
177 cluster = blk_queue_cluster(q); 183 cluster = blk_queue_cluster(q);
178 184
179 /* 185 if (bio->bi_rw & REQ_DISCARD) {
180 * for each bio in rq 186 /*
181 */ 187 * This is a hack - drivers should be neither modifying the
182 sg = NULL; 188 * biovec, nor relying on bi_vcnt - but because of
183 rq_for_each_segment(bvec, rq, iter) { 189 * blk_add_request_payload(), a discard bio may or may not have
184 __blk_segment_map_sg(q, &bvec, sglist, &bvprv, &sg, 190 * a payload we need to set up here (thank you Christoph) and
185 &nsegs, &cluster); 191 * bi_vcnt is really the only way of telling if we need to.
186 } /* segments in rq */ 192 */
193
194 if (bio->bi_vcnt)
195 goto single_segment;
196
197 return 0;
198 }
199
200 if (bio->bi_rw & REQ_WRITE_SAME) {
201single_segment:
202 *sg = sglist;
203 bvec = bio_iovec(bio);
204 sg_set_page(*sg, bvec.bv_page, bvec.bv_len, bvec.bv_offset);
205 return 1;
206 }
207
208 for_each_bio(bio)
209 bio_for_each_segment(bvec, bio, iter)
210 __blk_segment_map_sg(q, &bvec, sglist, &bvprv, sg,
211 &nsegs, &cluster);
187 212
213 return nsegs;
214}
215
216/*
217 * map a request to scatterlist, return number of sg entries setup. Caller
218 * must make sure sg can hold rq->nr_phys_segments entries
219 */
220int blk_rq_map_sg(struct request_queue *q, struct request *rq,
221 struct scatterlist *sglist)
222{
223 struct scatterlist *sg = NULL;
224 int nsegs = 0;
225
226 if (rq->bio)
227 nsegs = __blk_bios_map_sg(q, rq->bio, sglist, &sg);
188 228
189 if (unlikely(rq->cmd_flags & REQ_COPY_USER) && 229 if (unlikely(rq->cmd_flags & REQ_COPY_USER) &&
190 (blk_rq_bytes(rq) & q->dma_pad_mask)) { 230 (blk_rq_bytes(rq) & q->dma_pad_mask)) {
@@ -230,20 +270,13 @@ EXPORT_SYMBOL(blk_rq_map_sg);
230int blk_bio_map_sg(struct request_queue *q, struct bio *bio, 270int blk_bio_map_sg(struct request_queue *q, struct bio *bio,
231 struct scatterlist *sglist) 271 struct scatterlist *sglist)
232{ 272{
233 struct bio_vec bvec, bvprv = { NULL }; 273 struct scatterlist *sg = NULL;
234 struct scatterlist *sg; 274 int nsegs;
235 int nsegs, cluster; 275 struct bio *next = bio->bi_next;
236 struct bvec_iter iter; 276 bio->bi_next = NULL;
237
238 nsegs = 0;
239 cluster = blk_queue_cluster(q);
240
241 sg = NULL;
242 bio_for_each_segment(bvec, bio, iter) {
243 __blk_segment_map_sg(q, &bvec, sglist, &bvprv, &sg,
244 &nsegs, &cluster);
245 } /* segments in bio */
246 277
278 nsegs = __blk_bios_map_sg(q, bio, sglist, &sg);
279 bio->bi_next = next;
247 if (sg) 280 if (sg)
248 sg_mark_end(sg); 281 sg_mark_end(sg);
249 282
diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 5d70edc9855f..83ae96c51a27 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -184,7 +184,7 @@ void blk_mq_free_tags(struct blk_mq_tags *tags)
184ssize_t blk_mq_tag_sysfs_show(struct blk_mq_tags *tags, char *page) 184ssize_t blk_mq_tag_sysfs_show(struct blk_mq_tags *tags, char *page)
185{ 185{
186 char *orig_page = page; 186 char *orig_page = page;
187 int cpu; 187 unsigned int cpu;
188 188
189 if (!tags) 189 if (!tags)
190 return 0; 190 return 0;
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 57039fcd9c93..1fa9dd153fde 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -226,15 +226,14 @@ static struct request *blk_mq_alloc_request_pinned(struct request_queue *q,
226 return rq; 226 return rq;
227} 227}
228 228
229struct request *blk_mq_alloc_request(struct request_queue *q, int rw, 229struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp)
230 gfp_t gfp, bool reserved)
231{ 230{
232 struct request *rq; 231 struct request *rq;
233 232
234 if (blk_mq_queue_enter(q)) 233 if (blk_mq_queue_enter(q))
235 return NULL; 234 return NULL;
236 235
237 rq = blk_mq_alloc_request_pinned(q, rw, gfp, reserved); 236 rq = blk_mq_alloc_request_pinned(q, rw, gfp, false);
238 if (rq) 237 if (rq)
239 blk_mq_put_ctx(rq->mq_ctx); 238 blk_mq_put_ctx(rq->mq_ctx);
240 return rq; 239 return rq;
@@ -258,7 +257,7 @@ EXPORT_SYMBOL(blk_mq_alloc_reserved_request);
258/* 257/*
259 * Re-init and set pdu, if we have it 258 * Re-init and set pdu, if we have it
260 */ 259 */
261static void blk_mq_rq_init(struct blk_mq_hw_ctx *hctx, struct request *rq) 260void blk_mq_rq_init(struct blk_mq_hw_ctx *hctx, struct request *rq)
262{ 261{
263 blk_rq_init(hctx->queue, rq); 262 blk_rq_init(hctx->queue, rq);
264 263
@@ -305,7 +304,7 @@ static void blk_mq_bio_endio(struct request *rq, struct bio *bio, int error)
305 bio_endio(bio, error); 304 bio_endio(bio, error);
306} 305}
307 306
308void blk_mq_complete_request(struct request *rq, int error) 307void blk_mq_end_io(struct request *rq, int error)
309{ 308{
310 struct bio *bio = rq->bio; 309 struct bio *bio = rq->bio;
311 unsigned int bytes = 0; 310 unsigned int bytes = 0;
@@ -330,48 +329,55 @@ void blk_mq_complete_request(struct request *rq, int error)
330 else 329 else
331 blk_mq_free_request(rq); 330 blk_mq_free_request(rq);
332} 331}
332EXPORT_SYMBOL(blk_mq_end_io);
333 333
334void __blk_mq_end_io(struct request *rq, int error) 334static void __blk_mq_complete_request_remote(void *data)
335{
336 if (!blk_mark_rq_complete(rq))
337 blk_mq_complete_request(rq, error);
338}
339
340static void blk_mq_end_io_remote(void *data)
341{ 335{
342 struct request *rq = data; 336 struct request *rq = data;
343 337
344 __blk_mq_end_io(rq, rq->errors); 338 rq->q->softirq_done_fn(rq);
345} 339}
346 340
347/* 341void __blk_mq_complete_request(struct request *rq)
348 * End IO on this request on a multiqueue enabled driver. We'll either do
349 * it directly inline, or punt to a local IPI handler on the matching
350 * remote CPU.
351 */
352void blk_mq_end_io(struct request *rq, int error)
353{ 342{
354 struct blk_mq_ctx *ctx = rq->mq_ctx; 343 struct blk_mq_ctx *ctx = rq->mq_ctx;
355 int cpu; 344 int cpu;
356 345
357 if (!ctx->ipi_redirect) 346 if (!ctx->ipi_redirect) {
358 return __blk_mq_end_io(rq, error); 347 rq->q->softirq_done_fn(rq);
348 return;
349 }
359 350
360 cpu = get_cpu(); 351 cpu = get_cpu();
361 if (cpu != ctx->cpu && cpu_online(ctx->cpu)) { 352 if (cpu != ctx->cpu && cpu_online(ctx->cpu)) {
362 rq->errors = error; 353 rq->csd.func = __blk_mq_complete_request_remote;
363 rq->csd.func = blk_mq_end_io_remote;
364 rq->csd.info = rq; 354 rq->csd.info = rq;
365 rq->csd.flags = 0; 355 rq->csd.flags = 0;
366 __smp_call_function_single(ctx->cpu, &rq->csd, 0); 356 __smp_call_function_single(ctx->cpu, &rq->csd, 0);
367 } else { 357 } else {
368 __blk_mq_end_io(rq, error); 358 rq->q->softirq_done_fn(rq);
369 } 359 }
370 put_cpu(); 360 put_cpu();
371} 361}
372EXPORT_SYMBOL(blk_mq_end_io);
373 362
374static void blk_mq_start_request(struct request *rq) 363/**
364 * blk_mq_complete_request - end I/O on a request
365 * @rq: the request being processed
366 *
367 * Description:
368 * Ends all I/O on a request. It does not handle partial completions.
369 * The actual completion happens out-of-order, through a IPI handler.
370 **/
371void blk_mq_complete_request(struct request *rq)
372{
373 if (unlikely(blk_should_fake_timeout(rq->q)))
374 return;
375 if (!blk_mark_rq_complete(rq))
376 __blk_mq_complete_request(rq);
377}
378EXPORT_SYMBOL(blk_mq_complete_request);
379
380static void blk_mq_start_request(struct request *rq, bool last)
375{ 381{
376 struct request_queue *q = rq->q; 382 struct request_queue *q = rq->q;
377 383
@@ -384,6 +390,25 @@ static void blk_mq_start_request(struct request *rq)
384 */ 390 */
385 rq->deadline = jiffies + q->rq_timeout; 391 rq->deadline = jiffies + q->rq_timeout;
386 set_bit(REQ_ATOM_STARTED, &rq->atomic_flags); 392 set_bit(REQ_ATOM_STARTED, &rq->atomic_flags);
393
394 if (q->dma_drain_size && blk_rq_bytes(rq)) {
395 /*
396 * Make sure space for the drain appears. We know we can do
397 * this because max_hw_segments has been adjusted to be one
398 * fewer than the device can handle.
399 */
400 rq->nr_phys_segments++;
401 }
402
403 /*
404 * Flag the last request in the series so that drivers know when IO
405 * should be kicked off, if they don't do it on a per-request basis.
406 *
407 * Note: the flag isn't the only condition drivers should do kick off.
408 * If drive is busy, the last request might not have the bit set.
409 */
410 if (last)
411 rq->cmd_flags |= REQ_END;
387} 412}
388 413
389static void blk_mq_requeue_request(struct request *rq) 414static void blk_mq_requeue_request(struct request *rq)
@@ -392,6 +417,11 @@ static void blk_mq_requeue_request(struct request *rq)
392 417
393 trace_block_rq_requeue(q, rq); 418 trace_block_rq_requeue(q, rq);
394 clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags); 419 clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags);
420
421 rq->cmd_flags &= ~REQ_END;
422
423 if (q->dma_drain_size && blk_rq_bytes(rq))
424 rq->nr_phys_segments--;
395} 425}
396 426
397struct blk_mq_timeout_data { 427struct blk_mq_timeout_data {
@@ -559,19 +589,8 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)
559 589
560 rq = list_first_entry(&rq_list, struct request, queuelist); 590 rq = list_first_entry(&rq_list, struct request, queuelist);
561 list_del_init(&rq->queuelist); 591 list_del_init(&rq->queuelist);
562 blk_mq_start_request(rq);
563 592
564 /* 593 blk_mq_start_request(rq, list_empty(&rq_list));
565 * Last request in the series. Flag it as such, this
566 * enables drivers to know when IO should be kicked off,
567 * if they don't do it on a per-request basis.
568 *
569 * Note: the flag isn't the only condition drivers
570 * should do kick off. If drive is busy, the last
571 * request might not have the bit set.
572 */
573 if (list_empty(&rq_list))
574 rq->cmd_flags |= REQ_END;
575 594
576 ret = q->mq_ops->queue_rq(hctx, rq); 595 ret = q->mq_ops->queue_rq(hctx, rq);
577 switch (ret) { 596 switch (ret) {
@@ -589,8 +608,8 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)
589 break; 608 break;
590 default: 609 default:
591 pr_err("blk-mq: bad return on queue: %d\n", ret); 610 pr_err("blk-mq: bad return on queue: %d\n", ret);
592 rq->errors = -EIO;
593 case BLK_MQ_RQ_QUEUE_ERROR: 611 case BLK_MQ_RQ_QUEUE_ERROR:
612 rq->errors = -EIO;
594 blk_mq_end_io(rq, rq->errors); 613 blk_mq_end_io(rq, rq->errors);
595 break; 614 break;
596 } 615 }
@@ -693,13 +712,16 @@ static void blk_mq_work_fn(struct work_struct *work)
693} 712}
694 713
695static void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, 714static void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx,
696 struct request *rq) 715 struct request *rq, bool at_head)
697{ 716{
698 struct blk_mq_ctx *ctx = rq->mq_ctx; 717 struct blk_mq_ctx *ctx = rq->mq_ctx;
699 718
700 trace_block_rq_insert(hctx->queue, rq); 719 trace_block_rq_insert(hctx->queue, rq);
701 720
702 list_add_tail(&rq->queuelist, &ctx->rq_list); 721 if (at_head)
722 list_add(&rq->queuelist, &ctx->rq_list);
723 else
724 list_add_tail(&rq->queuelist, &ctx->rq_list);
703 blk_mq_hctx_mark_pending(hctx, ctx); 725 blk_mq_hctx_mark_pending(hctx, ctx);
704 726
705 /* 727 /*
@@ -709,7 +731,7 @@ static void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx,
709} 731}
710 732
711void blk_mq_insert_request(struct request_queue *q, struct request *rq, 733void blk_mq_insert_request(struct request_queue *q, struct request *rq,
712 bool run_queue) 734 bool at_head, bool run_queue)
713{ 735{
714 struct blk_mq_hw_ctx *hctx; 736 struct blk_mq_hw_ctx *hctx;
715 struct blk_mq_ctx *ctx, *current_ctx; 737 struct blk_mq_ctx *ctx, *current_ctx;
@@ -728,7 +750,7 @@ void blk_mq_insert_request(struct request_queue *q, struct request *rq,
728 rq->mq_ctx = ctx; 750 rq->mq_ctx = ctx;
729 } 751 }
730 spin_lock(&ctx->lock); 752 spin_lock(&ctx->lock);
731 __blk_mq_insert_request(hctx, rq); 753 __blk_mq_insert_request(hctx, rq, at_head);
732 spin_unlock(&ctx->lock); 754 spin_unlock(&ctx->lock);
733 755
734 blk_mq_put_ctx(current_ctx); 756 blk_mq_put_ctx(current_ctx);
@@ -760,7 +782,7 @@ void blk_mq_run_request(struct request *rq, bool run_queue, bool async)
760 782
761 /* ctx->cpu might be offline */ 783 /* ctx->cpu might be offline */
762 spin_lock(&ctx->lock); 784 spin_lock(&ctx->lock);
763 __blk_mq_insert_request(hctx, rq); 785 __blk_mq_insert_request(hctx, rq, false);
764 spin_unlock(&ctx->lock); 786 spin_unlock(&ctx->lock);
765 787
766 blk_mq_put_ctx(current_ctx); 788 blk_mq_put_ctx(current_ctx);
@@ -798,7 +820,7 @@ static void blk_mq_insert_requests(struct request_queue *q,
798 rq = list_first_entry(list, struct request, queuelist); 820 rq = list_first_entry(list, struct request, queuelist);
799 list_del_init(&rq->queuelist); 821 list_del_init(&rq->queuelist);
800 rq->mq_ctx = ctx; 822 rq->mq_ctx = ctx;
801 __blk_mq_insert_request(hctx, rq); 823 __blk_mq_insert_request(hctx, rq, false);
802 } 824 }
803 spin_unlock(&ctx->lock); 825 spin_unlock(&ctx->lock);
804 826
@@ -888,6 +910,11 @@ static void blk_mq_make_request(struct request_queue *q, struct bio *bio)
888 910
889 blk_queue_bounce(q, &bio); 911 blk_queue_bounce(q, &bio);
890 912
913 if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
914 bio_endio(bio, -EIO);
915 return;
916 }
917
891 if (use_plug && blk_attempt_plug_merge(q, bio, &request_count)) 918 if (use_plug && blk_attempt_plug_merge(q, bio, &request_count))
892 return; 919 return;
893 920
@@ -950,7 +977,7 @@ static void blk_mq_make_request(struct request_queue *q, struct bio *bio)
950 __blk_mq_free_request(hctx, ctx, rq); 977 __blk_mq_free_request(hctx, ctx, rq);
951 else { 978 else {
952 blk_mq_bio_to_request(rq, bio); 979 blk_mq_bio_to_request(rq, bio);
953 __blk_mq_insert_request(hctx, rq); 980 __blk_mq_insert_request(hctx, rq, false);
954 } 981 }
955 982
956 spin_unlock(&ctx->lock); 983 spin_unlock(&ctx->lock);
@@ -1309,15 +1336,6 @@ struct request_queue *blk_mq_init_queue(struct blk_mq_reg *reg,
1309 reg->queue_depth = BLK_MQ_MAX_DEPTH; 1336 reg->queue_depth = BLK_MQ_MAX_DEPTH;
1310 } 1337 }
1311 1338
1312 /*
1313 * Set aside a tag for flush requests. It will only be used while
1314 * another flush request is in progress but outside the driver.
1315 *
1316 * TODO: only allocate if flushes are supported
1317 */
1318 reg->queue_depth++;
1319 reg->reserved_tags++;
1320
1321 if (reg->queue_depth < (reg->reserved_tags + BLK_MQ_TAG_MIN)) 1339 if (reg->queue_depth < (reg->reserved_tags + BLK_MQ_TAG_MIN))
1322 return ERR_PTR(-EINVAL); 1340 return ERR_PTR(-EINVAL);
1323 1341
@@ -1360,17 +1378,27 @@ struct request_queue *blk_mq_init_queue(struct blk_mq_reg *reg,
1360 q->mq_ops = reg->ops; 1378 q->mq_ops = reg->ops;
1361 q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT; 1379 q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT;
1362 1380
1381 q->sg_reserved_size = INT_MAX;
1382
1363 blk_queue_make_request(q, blk_mq_make_request); 1383 blk_queue_make_request(q, blk_mq_make_request);
1364 blk_queue_rq_timed_out(q, reg->ops->timeout); 1384 blk_queue_rq_timed_out(q, reg->ops->timeout);
1365 if (reg->timeout) 1385 if (reg->timeout)
1366 blk_queue_rq_timeout(q, reg->timeout); 1386 blk_queue_rq_timeout(q, reg->timeout);
1367 1387
1388 if (reg->ops->complete)
1389 blk_queue_softirq_done(q, reg->ops->complete);
1390
1368 blk_mq_init_flush(q); 1391 blk_mq_init_flush(q);
1369 blk_mq_init_cpu_queues(q, reg->nr_hw_queues); 1392 blk_mq_init_cpu_queues(q, reg->nr_hw_queues);
1370 1393
1371 if (blk_mq_init_hw_queues(q, reg, driver_data)) 1394 q->flush_rq = kzalloc(round_up(sizeof(struct request) + reg->cmd_size,
1395 cache_line_size()), GFP_KERNEL);
1396 if (!q->flush_rq)
1372 goto err_hw; 1397 goto err_hw;
1373 1398
1399 if (blk_mq_init_hw_queues(q, reg, driver_data))
1400 goto err_flush_rq;
1401
1374 blk_mq_map_swqueue(q); 1402 blk_mq_map_swqueue(q);
1375 1403
1376 mutex_lock(&all_q_mutex); 1404 mutex_lock(&all_q_mutex);
@@ -1378,6 +1406,9 @@ struct request_queue *blk_mq_init_queue(struct blk_mq_reg *reg,
1378 mutex_unlock(&all_q_mutex); 1406 mutex_unlock(&all_q_mutex);
1379 1407
1380 return q; 1408 return q;
1409
1410err_flush_rq:
1411 kfree(q->flush_rq);
1381err_hw: 1412err_hw:
1382 kfree(q->mq_map); 1413 kfree(q->mq_map);
1383err_map: 1414err_map:
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 5c3917984b00..ed0035cd458e 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -22,13 +22,13 @@ struct blk_mq_ctx {
22 struct kobject kobj; 22 struct kobject kobj;
23}; 23};
24 24
25void __blk_mq_end_io(struct request *rq, int error); 25void __blk_mq_complete_request(struct request *rq);
26void blk_mq_complete_request(struct request *rq, int error);
27void blk_mq_run_request(struct request *rq, bool run_queue, bool async); 26void blk_mq_run_request(struct request *rq, bool run_queue, bool async);
28void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async); 27void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async);
29void blk_mq_init_flush(struct request_queue *q); 28void blk_mq_init_flush(struct request_queue *q);
30void blk_mq_drain_queue(struct request_queue *q); 29void blk_mq_drain_queue(struct request_queue *q);
31void blk_mq_free_queue(struct request_queue *q); 30void blk_mq_free_queue(struct request_queue *q);
31void blk_mq_rq_init(struct blk_mq_hw_ctx *hctx, struct request *rq);
32 32
33/* 33/*
34 * CPU hotplug helpers 34 * CPU hotplug helpers
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 8095c4a21fc0..7500f876dae4 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -549,6 +549,8 @@ static void blk_release_queue(struct kobject *kobj)
549 if (q->mq_ops) 549 if (q->mq_ops)
550 blk_mq_free_queue(q); 550 blk_mq_free_queue(q);
551 551
552 kfree(q->flush_rq);
553
552 blk_trace_shutdown(q); 554 blk_trace_shutdown(q);
553 555
554 bdi_destroy(&q->backing_dev_info); 556 bdi_destroy(&q->backing_dev_info);
diff --git a/block/blk-timeout.c b/block/blk-timeout.c
index bba81c9348e1..d96f7061c6fd 100644
--- a/block/blk-timeout.c
+++ b/block/blk-timeout.c
@@ -91,7 +91,7 @@ static void blk_rq_timed_out(struct request *req)
91 case BLK_EH_HANDLED: 91 case BLK_EH_HANDLED:
92 /* Can we use req->errors here? */ 92 /* Can we use req->errors here? */
93 if (q->mq_ops) 93 if (q->mq_ops)
94 blk_mq_complete_request(req, req->errors); 94 __blk_mq_complete_request(req);
95 else 95 else
96 __blk_complete_request(req); 96 __blk_complete_request(req);
97 break; 97 break;
diff --git a/block/blk.h b/block/blk.h
index c90e1d8f7a2b..d23b415b8a28 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -113,7 +113,7 @@ static inline struct request *__elv_next_request(struct request_queue *q)
113 q->flush_queue_delayed = 1; 113 q->flush_queue_delayed = 1;
114 return NULL; 114 return NULL;
115 } 115 }
116 if (unlikely(blk_queue_dying(q)) || 116 if (unlikely(blk_queue_bypass(q)) ||
117 !q->elevator->type->ops.elevator_dispatch_fn(q, 0)) 117 !q->elevator->type->ops.elevator_dispatch_fn(q, 0))
118 return NULL; 118 return NULL;
119 } 119 }
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 470e7542bf31..018a42883706 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -549,7 +549,7 @@ static ssize_t acpi_battery_alarm_store(struct device *dev,
549{ 549{
550 unsigned long x; 550 unsigned long x;
551 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); 551 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev));
552 if (sscanf(buf, "%ld\n", &x) == 1) 552 if (sscanf(buf, "%lu\n", &x) == 1)
553 battery->alarm = x/1000; 553 battery->alarm = x/1000;
554 if (acpi_battery_present(battery)) 554 if (acpi_battery_present(battery))
555 acpi_battery_set_alarm(battery); 555 acpi_battery_set_alarm(battery);
diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c
index 0b6ae6eb5c4a..368f9ddb8480 100644
--- a/drivers/acpi/container.c
+++ b/drivers/acpi/container.c
@@ -79,9 +79,10 @@ static int container_device_attach(struct acpi_device *adev,
79 ACPI_COMPANION_SET(dev, adev); 79 ACPI_COMPANION_SET(dev, adev);
80 dev->release = acpi_container_release; 80 dev->release = acpi_container_release;
81 ret = device_register(dev); 81 ret = device_register(dev);
82 if (ret) 82 if (ret) {
83 put_device(dev);
83 return ret; 84 return ret;
84 85 }
85 adev->driver_data = dev; 86 adev->driver_data = dev;
86 return 1; 87 return 1;
87} 88}
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index c431c88faaff..e9b3081c4fe9 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -609,7 +609,7 @@ static int handle_eject_request(struct dock_station *ds, u32 event)
609static void dock_notify(struct dock_station *ds, u32 event) 609static void dock_notify(struct dock_station *ds, u32 event)
610{ 610{
611 acpi_handle handle = ds->handle; 611 acpi_handle handle = ds->handle;
612 struct acpi_device *ad; 612 struct acpi_device *adev = NULL;
613 int surprise_removal = 0; 613 int surprise_removal = 0;
614 614
615 /* 615 /*
@@ -632,7 +632,8 @@ static void dock_notify(struct dock_station *ds, u32 event)
632 switch (event) { 632 switch (event) {
633 case ACPI_NOTIFY_BUS_CHECK: 633 case ACPI_NOTIFY_BUS_CHECK:
634 case ACPI_NOTIFY_DEVICE_CHECK: 634 case ACPI_NOTIFY_DEVICE_CHECK:
635 if (!dock_in_progress(ds) && acpi_bus_get_device(handle, &ad)) { 635 acpi_bus_get_device(handle, &adev);
636 if (!dock_in_progress(ds) && !acpi_device_enumerated(adev)) {
636 begin_dock(ds); 637 begin_dock(ds);
637 dock(ds); 638 dock(ds);
638 if (!dock_present(ds)) { 639 if (!dock_present(ds)) {
diff --git a/drivers/acpi/proc.c b/drivers/acpi/proc.c
index 50fe34ffe932..75c28eae8860 100644
--- a/drivers/acpi/proc.c
+++ b/drivers/acpi/proc.c
@@ -60,7 +60,7 @@ acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset)
60 seq_printf(seq, "%c%-8s %s:%s\n", 60 seq_printf(seq, "%c%-8s %s:%s\n",
61 dev->wakeup.flags.run_wake ? '*' : ' ', 61 dev->wakeup.flags.run_wake ? '*' : ' ',
62 (device_may_wakeup(&dev->dev) || 62 (device_may_wakeup(&dev->dev) ||
63 (ldev && device_may_wakeup(ldev))) ? 63 device_may_wakeup(ldev)) ?
64 "enabled" : "disabled", 64 "enabled" : "disabled",
65 ldev->bus ? ldev->bus->name : 65 ldev->bus ? ldev->bus->name :
66 "no-bus", dev_name(ldev)); 66 "no-bus", dev_name(ldev));
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 7384158c7f87..57b053f424d1 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -484,7 +484,6 @@ static void acpi_device_hotplug(void *data, u32 src)
484static void acpi_hotplug_notify_cb(acpi_handle handle, u32 type, void *data) 484static void acpi_hotplug_notify_cb(acpi_handle handle, u32 type, void *data)
485{ 485{
486 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; 486 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
487 struct acpi_scan_handler *handler = data;
488 struct acpi_device *adev; 487 struct acpi_device *adev;
489 acpi_status status; 488 acpi_status status;
490 489
@@ -500,7 +499,10 @@ static void acpi_hotplug_notify_cb(acpi_handle handle, u32 type, void *data)
500 break; 499 break;
501 case ACPI_NOTIFY_EJECT_REQUEST: 500 case ACPI_NOTIFY_EJECT_REQUEST:
502 acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n"); 501 acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n");
503 if (!handler->hotplug.enabled) { 502 if (!adev->handler)
503 goto err_out;
504
505 if (!adev->handler->hotplug.enabled) {
504 acpi_handle_err(handle, "Eject disabled\n"); 506 acpi_handle_err(handle, "Eject disabled\n");
505 ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED; 507 ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
506 goto err_out; 508 goto err_out;
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 0347a37eb438..85e3b612bdc0 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -99,10 +99,6 @@ acpi_extract_package(union acpi_object *package,
99 99
100 union acpi_object *element = &(package->package.elements[i]); 100 union acpi_object *element = &(package->package.elements[i]);
101 101
102 if (!element) {
103 return AE_BAD_DATA;
104 }
105
106 switch (element->type) { 102 switch (element->type) {
107 103
108 case ACPI_TYPE_INTEGER: 104 case ACPI_TYPE_INTEGER:
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
index f0447d3daf2c..a697b77b8865 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -170,6 +170,14 @@ static struct dmi_system_id video_detect_dmi_table[] = {
170 }, 170 },
171 { 171 {
172 .callback = video_detect_force_vendor, 172 .callback = video_detect_force_vendor,
173 .ident = "HP EliteBook Revolve 810",
174 .matches = {
175 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
176 DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook Revolve 810 G1"),
177 },
178 },
179 {
180 .callback = video_detect_force_vendor,
173 .ident = "Lenovo Yoga 13", 181 .ident = "Lenovo Yoga 13",
174 .matches = { 182 .matches = {
175 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 183 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index 20a7517bd339..52b8181ddafd 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -4126,12 +4126,14 @@ static int mv_platform_probe(struct platform_device *pdev)
4126 clk_prepare_enable(hpriv->port_clks[port]); 4126 clk_prepare_enable(hpriv->port_clks[port]);
4127 4127
4128 sprintf(port_number, "port%d", port); 4128 sprintf(port_number, "port%d", port);
4129 hpriv->port_phys[port] = devm_phy_get(&pdev->dev, port_number); 4129 hpriv->port_phys[port] = devm_phy_optional_get(&pdev->dev,
4130 port_number);
4130 if (IS_ERR(hpriv->port_phys[port])) { 4131 if (IS_ERR(hpriv->port_phys[port])) {
4131 rc = PTR_ERR(hpriv->port_phys[port]); 4132 rc = PTR_ERR(hpriv->port_phys[port]);
4132 hpriv->port_phys[port] = NULL; 4133 hpriv->port_phys[port] = NULL;
4133 if ((rc != -EPROBE_DEFER) && (rc != -ENODEV)) 4134 if (rc != -EPROBE_DEFER)
4134 dev_warn(&pdev->dev, "error getting phy"); 4135 dev_warn(&pdev->dev, "error getting phy %d",
4136 rc);
4135 goto err; 4137 goto err;
4136 } else 4138 } else
4137 phy_power_on(hpriv->port_phys[port]); 4139 phy_power_on(hpriv->port_phys[port]);
diff --git a/drivers/base/component.c b/drivers/base/component.c
index c53efe6c6d8e..c4778995cd72 100644
--- a/drivers/base/component.c
+++ b/drivers/base/component.c
@@ -133,9 +133,16 @@ static int try_to_bring_up_master(struct master *master,
133 goto out; 133 goto out;
134 } 134 }
135 135
136 if (!devres_open_group(master->dev, NULL, GFP_KERNEL)) {
137 ret = -ENOMEM;
138 goto out;
139 }
140
136 /* Found all components */ 141 /* Found all components */
137 ret = master->ops->bind(master->dev); 142 ret = master->ops->bind(master->dev);
138 if (ret < 0) { 143 if (ret < 0) {
144 devres_release_group(master->dev, NULL);
145 dev_info(master->dev, "master bind failed: %d\n", ret);
139 master_remove_components(master); 146 master_remove_components(master);
140 goto out; 147 goto out;
141 } 148 }
@@ -166,6 +173,7 @@ static void take_down_master(struct master *master)
166{ 173{
167 if (master->bound) { 174 if (master->bound) {
168 master->ops->unbind(master->dev); 175 master->ops->unbind(master->dev);
176 devres_release_group(master->dev, NULL);
169 master->bound = false; 177 master->bound = false;
170 } 178 }
171 179
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
index 3107282a9741..091b9ea14feb 100644
--- a/drivers/block/null_blk.c
+++ b/drivers/block/null_blk.c
@@ -60,7 +60,9 @@ enum {
60 NULL_IRQ_NONE = 0, 60 NULL_IRQ_NONE = 0,
61 NULL_IRQ_SOFTIRQ = 1, 61 NULL_IRQ_SOFTIRQ = 1,
62 NULL_IRQ_TIMER = 2, 62 NULL_IRQ_TIMER = 2,
63};
63 64
65enum {
64 NULL_Q_BIO = 0, 66 NULL_Q_BIO = 0,
65 NULL_Q_RQ = 1, 67 NULL_Q_RQ = 1,
66 NULL_Q_MQ = 2, 68 NULL_Q_MQ = 2,
@@ -172,18 +174,20 @@ static struct nullb_cmd *alloc_cmd(struct nullb_queue *nq, int can_wait)
172 174
173static void end_cmd(struct nullb_cmd *cmd) 175static void end_cmd(struct nullb_cmd *cmd)
174{ 176{
175 if (cmd->rq) { 177 switch (queue_mode) {
176 if (queue_mode == NULL_Q_MQ) 178 case NULL_Q_MQ:
177 blk_mq_end_io(cmd->rq, 0); 179 blk_mq_end_io(cmd->rq, 0);
178 else { 180 return;
179 INIT_LIST_HEAD(&cmd->rq->queuelist); 181 case NULL_Q_RQ:
180 blk_end_request_all(cmd->rq, 0); 182 INIT_LIST_HEAD(&cmd->rq->queuelist);
181 } 183 blk_end_request_all(cmd->rq, 0);
182 } else if (cmd->bio) 184 break;
185 case NULL_Q_BIO:
183 bio_endio(cmd->bio, 0); 186 bio_endio(cmd->bio, 0);
187 break;
188 }
184 189
185 if (queue_mode != NULL_Q_MQ) 190 free_cmd(cmd);
186 free_cmd(cmd);
187} 191}
188 192
189static enum hrtimer_restart null_cmd_timer_expired(struct hrtimer *timer) 193static enum hrtimer_restart null_cmd_timer_expired(struct hrtimer *timer)
@@ -195,6 +199,7 @@ static enum hrtimer_restart null_cmd_timer_expired(struct hrtimer *timer)
195 cq = &per_cpu(completion_queues, smp_processor_id()); 199 cq = &per_cpu(completion_queues, smp_processor_id());
196 200
197 while ((entry = llist_del_all(&cq->list)) != NULL) { 201 while ((entry = llist_del_all(&cq->list)) != NULL) {
202 entry = llist_reverse_order(entry);
198 do { 203 do {
199 cmd = container_of(entry, struct nullb_cmd, ll_list); 204 cmd = container_of(entry, struct nullb_cmd, ll_list);
200 end_cmd(cmd); 205 end_cmd(cmd);
@@ -221,61 +226,31 @@ static void null_cmd_end_timer(struct nullb_cmd *cmd)
221 226
222static void null_softirq_done_fn(struct request *rq) 227static void null_softirq_done_fn(struct request *rq)
223{ 228{
224 blk_end_request_all(rq, 0); 229 end_cmd(rq->special);
225}
226
227#ifdef CONFIG_SMP
228
229static void null_ipi_cmd_end_io(void *data)
230{
231 struct completion_queue *cq;
232 struct llist_node *entry, *next;
233 struct nullb_cmd *cmd;
234
235 cq = &per_cpu(completion_queues, smp_processor_id());
236
237 entry = llist_del_all(&cq->list);
238
239 while (entry) {
240 next = entry->next;
241 cmd = llist_entry(entry, struct nullb_cmd, ll_list);
242 end_cmd(cmd);
243 entry = next;
244 }
245}
246
247static void null_cmd_end_ipi(struct nullb_cmd *cmd)
248{
249 struct call_single_data *data = &cmd->csd;
250 int cpu = get_cpu();
251 struct completion_queue *cq = &per_cpu(completion_queues, cpu);
252
253 cmd->ll_list.next = NULL;
254
255 if (llist_add(&cmd->ll_list, &cq->list)) {
256 data->func = null_ipi_cmd_end_io;
257 data->flags = 0;
258 __smp_call_function_single(cpu, data, 0);
259 }
260
261 put_cpu();
262} 230}
263 231
264#endif /* CONFIG_SMP */
265
266static inline void null_handle_cmd(struct nullb_cmd *cmd) 232static inline void null_handle_cmd(struct nullb_cmd *cmd)
267{ 233{
268 /* Complete IO by inline, softirq or timer */ 234 /* Complete IO by inline, softirq or timer */
269 switch (irqmode) { 235 switch (irqmode) {
270 case NULL_IRQ_NONE:
271 end_cmd(cmd);
272 break;
273 case NULL_IRQ_SOFTIRQ: 236 case NULL_IRQ_SOFTIRQ:
274#ifdef CONFIG_SMP 237 switch (queue_mode) {
275 null_cmd_end_ipi(cmd); 238 case NULL_Q_MQ:
276#else 239 blk_mq_complete_request(cmd->rq);
240 break;
241 case NULL_Q_RQ:
242 blk_complete_request(cmd->rq);
243 break;
244 case NULL_Q_BIO:
245 /*
246 * XXX: no proper submitting cpu information available.
247 */
248 end_cmd(cmd);
249 break;
250 }
251 break;
252 case NULL_IRQ_NONE:
277 end_cmd(cmd); 253 end_cmd(cmd);
278#endif
279 break; 254 break;
280 case NULL_IRQ_TIMER: 255 case NULL_IRQ_TIMER:
281 null_cmd_end_timer(cmd); 256 null_cmd_end_timer(cmd);
@@ -411,6 +386,7 @@ static struct blk_mq_ops null_mq_ops = {
411 .queue_rq = null_queue_rq, 386 .queue_rq = null_queue_rq,
412 .map_queue = blk_mq_map_queue, 387 .map_queue = blk_mq_map_queue,
413 .init_hctx = null_init_hctx, 388 .init_hctx = null_init_hctx,
389 .complete = null_softirq_done_fn,
414}; 390};
415 391
416static struct blk_mq_reg null_mq_reg = { 392static struct blk_mq_reg null_mq_reg = {
@@ -609,13 +585,6 @@ static int __init null_init(void)
609{ 585{
610 unsigned int i; 586 unsigned int i;
611 587
612#if !defined(CONFIG_SMP)
613 if (irqmode == NULL_IRQ_SOFTIRQ) {
614 pr_warn("null_blk: softirq completions not available.\n");
615 pr_warn("null_blk: using direct completions.\n");
616 irqmode = NULL_IRQ_NONE;
617 }
618#endif
619 if (bs > PAGE_SIZE) { 588 if (bs > PAGE_SIZE) {
620 pr_warn("null_blk: invalid block size\n"); 589 pr_warn("null_blk: invalid block size\n");
621 pr_warn("null_blk: defaults block size to %lu\n", PAGE_SIZE); 590 pr_warn("null_blk: defaults block size to %lu\n", PAGE_SIZE);
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index 1f14ac403945..51824d1f23ea 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -46,7 +46,6 @@
46#define NVME_Q_DEPTH 1024 46#define NVME_Q_DEPTH 1024
47#define SQ_SIZE(depth) (depth * sizeof(struct nvme_command)) 47#define SQ_SIZE(depth) (depth * sizeof(struct nvme_command))
48#define CQ_SIZE(depth) (depth * sizeof(struct nvme_completion)) 48#define CQ_SIZE(depth) (depth * sizeof(struct nvme_completion))
49#define NVME_MINORS 64
50#define ADMIN_TIMEOUT (60 * HZ) 49#define ADMIN_TIMEOUT (60 * HZ)
51 50
52static int nvme_major; 51static int nvme_major;
@@ -58,6 +57,17 @@ module_param(use_threaded_interrupts, int, 0);
58static DEFINE_SPINLOCK(dev_list_lock); 57static DEFINE_SPINLOCK(dev_list_lock);
59static LIST_HEAD(dev_list); 58static LIST_HEAD(dev_list);
60static struct task_struct *nvme_thread; 59static struct task_struct *nvme_thread;
60static struct workqueue_struct *nvme_workq;
61
62static void nvme_reset_failed_dev(struct work_struct *ws);
63
64struct async_cmd_info {
65 struct kthread_work work;
66 struct kthread_worker *worker;
67 u32 result;
68 int status;
69 void *ctx;
70};
61 71
62/* 72/*
63 * An NVM Express queue. Each device has at least two (one for admin 73 * An NVM Express queue. Each device has at least two (one for admin
@@ -66,6 +76,7 @@ static struct task_struct *nvme_thread;
66struct nvme_queue { 76struct nvme_queue {
67 struct device *q_dmadev; 77 struct device *q_dmadev;
68 struct nvme_dev *dev; 78 struct nvme_dev *dev;
79 char irqname[24]; /* nvme4294967295-65535\0 */
69 spinlock_t q_lock; 80 spinlock_t q_lock;
70 struct nvme_command *sq_cmds; 81 struct nvme_command *sq_cmds;
71 volatile struct nvme_completion *cqes; 82 volatile struct nvme_completion *cqes;
@@ -80,9 +91,11 @@ struct nvme_queue {
80 u16 sq_head; 91 u16 sq_head;
81 u16 sq_tail; 92 u16 sq_tail;
82 u16 cq_head; 93 u16 cq_head;
94 u16 qid;
83 u8 cq_phase; 95 u8 cq_phase;
84 u8 cqe_seen; 96 u8 cqe_seen;
85 u8 q_suspended; 97 u8 q_suspended;
98 struct async_cmd_info cmdinfo;
86 unsigned long cmdid_data[]; 99 unsigned long cmdid_data[];
87}; 100};
88 101
@@ -97,6 +110,7 @@ static inline void _nvme_check_size(void)
97 BUILD_BUG_ON(sizeof(struct nvme_delete_queue) != 64); 110 BUILD_BUG_ON(sizeof(struct nvme_delete_queue) != 64);
98 BUILD_BUG_ON(sizeof(struct nvme_features) != 64); 111 BUILD_BUG_ON(sizeof(struct nvme_features) != 64);
99 BUILD_BUG_ON(sizeof(struct nvme_format_cmd) != 64); 112 BUILD_BUG_ON(sizeof(struct nvme_format_cmd) != 64);
113 BUILD_BUG_ON(sizeof(struct nvme_abort_cmd) != 64);
100 BUILD_BUG_ON(sizeof(struct nvme_command) != 64); 114 BUILD_BUG_ON(sizeof(struct nvme_command) != 64);
101 BUILD_BUG_ON(sizeof(struct nvme_id_ctrl) != 4096); 115 BUILD_BUG_ON(sizeof(struct nvme_id_ctrl) != 4096);
102 BUILD_BUG_ON(sizeof(struct nvme_id_ns) != 4096); 116 BUILD_BUG_ON(sizeof(struct nvme_id_ns) != 4096);
@@ -111,6 +125,7 @@ struct nvme_cmd_info {
111 nvme_completion_fn fn; 125 nvme_completion_fn fn;
112 void *ctx; 126 void *ctx;
113 unsigned long timeout; 127 unsigned long timeout;
128 int aborted;
114}; 129};
115 130
116static struct nvme_cmd_info *nvme_cmd_info(struct nvme_queue *nvmeq) 131static struct nvme_cmd_info *nvme_cmd_info(struct nvme_queue *nvmeq)
@@ -154,6 +169,7 @@ static int alloc_cmdid(struct nvme_queue *nvmeq, void *ctx,
154 info[cmdid].fn = handler; 169 info[cmdid].fn = handler;
155 info[cmdid].ctx = ctx; 170 info[cmdid].ctx = ctx;
156 info[cmdid].timeout = jiffies + timeout; 171 info[cmdid].timeout = jiffies + timeout;
172 info[cmdid].aborted = 0;
157 return cmdid; 173 return cmdid;
158} 174}
159 175
@@ -172,6 +188,7 @@ static int alloc_cmdid_killable(struct nvme_queue *nvmeq, void *ctx,
172#define CMD_CTX_COMPLETED (0x310 + CMD_CTX_BASE) 188#define CMD_CTX_COMPLETED (0x310 + CMD_CTX_BASE)
173#define CMD_CTX_INVALID (0x314 + CMD_CTX_BASE) 189#define CMD_CTX_INVALID (0x314 + CMD_CTX_BASE)
174#define CMD_CTX_FLUSH (0x318 + CMD_CTX_BASE) 190#define CMD_CTX_FLUSH (0x318 + CMD_CTX_BASE)
191#define CMD_CTX_ABORT (0x31C + CMD_CTX_BASE)
175 192
176static void special_completion(struct nvme_dev *dev, void *ctx, 193static void special_completion(struct nvme_dev *dev, void *ctx,
177 struct nvme_completion *cqe) 194 struct nvme_completion *cqe)
@@ -180,6 +197,10 @@ static void special_completion(struct nvme_dev *dev, void *ctx,
180 return; 197 return;
181 if (ctx == CMD_CTX_FLUSH) 198 if (ctx == CMD_CTX_FLUSH)
182 return; 199 return;
200 if (ctx == CMD_CTX_ABORT) {
201 ++dev->abort_limit;
202 return;
203 }
183 if (ctx == CMD_CTX_COMPLETED) { 204 if (ctx == CMD_CTX_COMPLETED) {
184 dev_warn(&dev->pci_dev->dev, 205 dev_warn(&dev->pci_dev->dev,
185 "completed id %d twice on queue %d\n", 206 "completed id %d twice on queue %d\n",
@@ -196,6 +217,15 @@ static void special_completion(struct nvme_dev *dev, void *ctx,
196 dev_warn(&dev->pci_dev->dev, "Unknown special completion %p\n", ctx); 217 dev_warn(&dev->pci_dev->dev, "Unknown special completion %p\n", ctx);
197} 218}
198 219
220static void async_completion(struct nvme_dev *dev, void *ctx,
221 struct nvme_completion *cqe)
222{
223 struct async_cmd_info *cmdinfo = ctx;
224 cmdinfo->result = le32_to_cpup(&cqe->result);
225 cmdinfo->status = le16_to_cpup(&cqe->status) >> 1;
226 queue_kthread_work(cmdinfo->worker, &cmdinfo->work);
227}
228
199/* 229/*
200 * Called with local interrupts disabled and the q_lock held. May not sleep. 230 * Called with local interrupts disabled and the q_lock held. May not sleep.
201 */ 231 */
@@ -693,7 +723,7 @@ static int nvme_process_cq(struct nvme_queue *nvmeq)
693 if (head == nvmeq->cq_head && phase == nvmeq->cq_phase) 723 if (head == nvmeq->cq_head && phase == nvmeq->cq_phase)
694 return 0; 724 return 0;
695 725
696 writel(head, nvmeq->q_db + (1 << nvmeq->dev->db_stride)); 726 writel(head, nvmeq->q_db + nvmeq->dev->db_stride);
697 nvmeq->cq_head = head; 727 nvmeq->cq_head = head;
698 nvmeq->cq_phase = phase; 728 nvmeq->cq_phase = phase;
699 729
@@ -804,12 +834,34 @@ int nvme_submit_sync_cmd(struct nvme_queue *nvmeq, struct nvme_command *cmd,
804 return cmdinfo.status; 834 return cmdinfo.status;
805} 835}
806 836
837static int nvme_submit_async_cmd(struct nvme_queue *nvmeq,
838 struct nvme_command *cmd,
839 struct async_cmd_info *cmdinfo, unsigned timeout)
840{
841 int cmdid;
842
843 cmdid = alloc_cmdid_killable(nvmeq, cmdinfo, async_completion, timeout);
844 if (cmdid < 0)
845 return cmdid;
846 cmdinfo->status = -EINTR;
847 cmd->common.command_id = cmdid;
848 nvme_submit_cmd(nvmeq, cmd);
849 return 0;
850}
851
807int nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd, 852int nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd,
808 u32 *result) 853 u32 *result)
809{ 854{
810 return nvme_submit_sync_cmd(dev->queues[0], cmd, result, ADMIN_TIMEOUT); 855 return nvme_submit_sync_cmd(dev->queues[0], cmd, result, ADMIN_TIMEOUT);
811} 856}
812 857
858static int nvme_submit_admin_cmd_async(struct nvme_dev *dev,
859 struct nvme_command *cmd, struct async_cmd_info *cmdinfo)
860{
861 return nvme_submit_async_cmd(dev->queues[0], cmd, cmdinfo,
862 ADMIN_TIMEOUT);
863}
864
813static int adapter_delete_queue(struct nvme_dev *dev, u8 opcode, u16 id) 865static int adapter_delete_queue(struct nvme_dev *dev, u8 opcode, u16 id)
814{ 866{
815 int status; 867 int status;
@@ -920,6 +972,56 @@ int nvme_set_features(struct nvme_dev *dev, unsigned fid, unsigned dword11,
920} 972}
921 973
922/** 974/**
975 * nvme_abort_cmd - Attempt aborting a command
976 * @cmdid: Command id of a timed out IO
977 * @queue: The queue with timed out IO
978 *
979 * Schedule controller reset if the command was already aborted once before and
980 * still hasn't been returned to the driver, or if this is the admin queue.
981 */
982static void nvme_abort_cmd(int cmdid, struct nvme_queue *nvmeq)
983{
984 int a_cmdid;
985 struct nvme_command cmd;
986 struct nvme_dev *dev = nvmeq->dev;
987 struct nvme_cmd_info *info = nvme_cmd_info(nvmeq);
988
989 if (!nvmeq->qid || info[cmdid].aborted) {
990 if (work_busy(&dev->reset_work))
991 return;
992 list_del_init(&dev->node);
993 dev_warn(&dev->pci_dev->dev,
994 "I/O %d QID %d timeout, reset controller\n", cmdid,
995 nvmeq->qid);
996 PREPARE_WORK(&dev->reset_work, nvme_reset_failed_dev);
997 queue_work(nvme_workq, &dev->reset_work);
998 return;
999 }
1000
1001 if (!dev->abort_limit)
1002 return;
1003
1004 a_cmdid = alloc_cmdid(dev->queues[0], CMD_CTX_ABORT, special_completion,
1005 ADMIN_TIMEOUT);
1006 if (a_cmdid < 0)
1007 return;
1008
1009 memset(&cmd, 0, sizeof(cmd));
1010 cmd.abort.opcode = nvme_admin_abort_cmd;
1011 cmd.abort.cid = cmdid;
1012 cmd.abort.sqid = cpu_to_le16(nvmeq->qid);
1013 cmd.abort.command_id = a_cmdid;
1014
1015 --dev->abort_limit;
1016 info[cmdid].aborted = 1;
1017 info[cmdid].timeout = jiffies + ADMIN_TIMEOUT;
1018
1019 dev_warn(nvmeq->q_dmadev, "Aborting I/O %d QID %d\n", cmdid,
1020 nvmeq->qid);
1021 nvme_submit_cmd(dev->queues[0], &cmd);
1022}
1023
1024/**
923 * nvme_cancel_ios - Cancel outstanding I/Os 1025 * nvme_cancel_ios - Cancel outstanding I/Os
924 * @queue: The queue to cancel I/Os on 1026 * @queue: The queue to cancel I/Os on
925 * @timeout: True to only cancel I/Os which have timed out 1027 * @timeout: True to only cancel I/Os which have timed out
@@ -942,7 +1044,12 @@ static void nvme_cancel_ios(struct nvme_queue *nvmeq, bool timeout)
942 continue; 1044 continue;
943 if (info[cmdid].ctx == CMD_CTX_CANCELLED) 1045 if (info[cmdid].ctx == CMD_CTX_CANCELLED)
944 continue; 1046 continue;
945 dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid); 1047 if (timeout && nvmeq->dev->initialized) {
1048 nvme_abort_cmd(cmdid, nvmeq);
1049 continue;
1050 }
1051 dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d QID %d\n", cmdid,
1052 nvmeq->qid);
946 ctx = cancel_cmdid(nvmeq, cmdid, &fn); 1053 ctx = cancel_cmdid(nvmeq, cmdid, &fn);
947 fn(nvmeq->dev, ctx, &cqe); 1054 fn(nvmeq->dev, ctx, &cqe);
948 } 1055 }
@@ -964,26 +1071,31 @@ static void nvme_free_queue(struct nvme_queue *nvmeq)
964 kfree(nvmeq); 1071 kfree(nvmeq);
965} 1072}
966 1073
967static void nvme_free_queues(struct nvme_dev *dev) 1074static void nvme_free_queues(struct nvme_dev *dev, int lowest)
968{ 1075{
969 int i; 1076 int i;
970 1077
971 for (i = dev->queue_count - 1; i >= 0; i--) { 1078 for (i = dev->queue_count - 1; i >= lowest; i--) {
972 nvme_free_queue(dev->queues[i]); 1079 nvme_free_queue(dev->queues[i]);
973 dev->queue_count--; 1080 dev->queue_count--;
974 dev->queues[i] = NULL; 1081 dev->queues[i] = NULL;
975 } 1082 }
976} 1083}
977 1084
978static void nvme_disable_queue(struct nvme_dev *dev, int qid) 1085/**
1086 * nvme_suspend_queue - put queue into suspended state
1087 * @nvmeq - queue to suspend
1088 *
1089 * Returns 1 if already suspended, 0 otherwise.
1090 */
1091static int nvme_suspend_queue(struct nvme_queue *nvmeq)
979{ 1092{
980 struct nvme_queue *nvmeq = dev->queues[qid]; 1093 int vector = nvmeq->dev->entry[nvmeq->cq_vector].vector;
981 int vector = dev->entry[nvmeq->cq_vector].vector;
982 1094
983 spin_lock_irq(&nvmeq->q_lock); 1095 spin_lock_irq(&nvmeq->q_lock);
984 if (nvmeq->q_suspended) { 1096 if (nvmeq->q_suspended) {
985 spin_unlock_irq(&nvmeq->q_lock); 1097 spin_unlock_irq(&nvmeq->q_lock);
986 return; 1098 return 1;
987 } 1099 }
988 nvmeq->q_suspended = 1; 1100 nvmeq->q_suspended = 1;
989 spin_unlock_irq(&nvmeq->q_lock); 1101 spin_unlock_irq(&nvmeq->q_lock);
@@ -991,18 +1103,35 @@ static void nvme_disable_queue(struct nvme_dev *dev, int qid)
991 irq_set_affinity_hint(vector, NULL); 1103 irq_set_affinity_hint(vector, NULL);
992 free_irq(vector, nvmeq); 1104 free_irq(vector, nvmeq);
993 1105
994 /* Don't tell the adapter to delete the admin queue */ 1106 return 0;
995 if (qid) { 1107}
996 adapter_delete_sq(dev, qid);
997 adapter_delete_cq(dev, qid);
998 }
999 1108
1109static void nvme_clear_queue(struct nvme_queue *nvmeq)
1110{
1000 spin_lock_irq(&nvmeq->q_lock); 1111 spin_lock_irq(&nvmeq->q_lock);
1001 nvme_process_cq(nvmeq); 1112 nvme_process_cq(nvmeq);
1002 nvme_cancel_ios(nvmeq, false); 1113 nvme_cancel_ios(nvmeq, false);
1003 spin_unlock_irq(&nvmeq->q_lock); 1114 spin_unlock_irq(&nvmeq->q_lock);
1004} 1115}
1005 1116
1117static void nvme_disable_queue(struct nvme_dev *dev, int qid)
1118{
1119 struct nvme_queue *nvmeq = dev->queues[qid];
1120
1121 if (!nvmeq)
1122 return;
1123 if (nvme_suspend_queue(nvmeq))
1124 return;
1125
1126 /* Don't tell the adapter to delete the admin queue.
1127 * Don't tell a removed adapter to delete IO queues. */
1128 if (qid && readl(&dev->bar->csts) != -1) {
1129 adapter_delete_sq(dev, qid);
1130 adapter_delete_cq(dev, qid);
1131 }
1132 nvme_clear_queue(nvmeq);
1133}
1134
1006static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, 1135static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
1007 int depth, int vector) 1136 int depth, int vector)
1008{ 1137{
@@ -1025,15 +1154,18 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
1025 1154
1026 nvmeq->q_dmadev = dmadev; 1155 nvmeq->q_dmadev = dmadev;
1027 nvmeq->dev = dev; 1156 nvmeq->dev = dev;
1157 snprintf(nvmeq->irqname, sizeof(nvmeq->irqname), "nvme%dq%d",
1158 dev->instance, qid);
1028 spin_lock_init(&nvmeq->q_lock); 1159 spin_lock_init(&nvmeq->q_lock);
1029 nvmeq->cq_head = 0; 1160 nvmeq->cq_head = 0;
1030 nvmeq->cq_phase = 1; 1161 nvmeq->cq_phase = 1;
1031 init_waitqueue_head(&nvmeq->sq_full); 1162 init_waitqueue_head(&nvmeq->sq_full);
1032 init_waitqueue_entry(&nvmeq->sq_cong_wait, nvme_thread); 1163 init_waitqueue_entry(&nvmeq->sq_cong_wait, nvme_thread);
1033 bio_list_init(&nvmeq->sq_cong); 1164 bio_list_init(&nvmeq->sq_cong);
1034 nvmeq->q_db = &dev->dbs[qid << (dev->db_stride + 1)]; 1165 nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
1035 nvmeq->q_depth = depth; 1166 nvmeq->q_depth = depth;
1036 nvmeq->cq_vector = vector; 1167 nvmeq->cq_vector = vector;
1168 nvmeq->qid = qid;
1037 nvmeq->q_suspended = 1; 1169 nvmeq->q_suspended = 1;
1038 dev->queue_count++; 1170 dev->queue_count++;
1039 1171
@@ -1052,11 +1184,10 @@ static int queue_request_irq(struct nvme_dev *dev, struct nvme_queue *nvmeq,
1052{ 1184{
1053 if (use_threaded_interrupts) 1185 if (use_threaded_interrupts)
1054 return request_threaded_irq(dev->entry[nvmeq->cq_vector].vector, 1186 return request_threaded_irq(dev->entry[nvmeq->cq_vector].vector,
1055 nvme_irq_check, nvme_irq, 1187 nvme_irq_check, nvme_irq, IRQF_SHARED,
1056 IRQF_DISABLED | IRQF_SHARED,
1057 name, nvmeq); 1188 name, nvmeq);
1058 return request_irq(dev->entry[nvmeq->cq_vector].vector, nvme_irq, 1189 return request_irq(dev->entry[nvmeq->cq_vector].vector, nvme_irq,
1059 IRQF_DISABLED | IRQF_SHARED, name, nvmeq); 1190 IRQF_SHARED, name, nvmeq);
1060} 1191}
1061 1192
1062static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid) 1193static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid)
@@ -1067,7 +1198,7 @@ static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid)
1067 nvmeq->sq_tail = 0; 1198 nvmeq->sq_tail = 0;
1068 nvmeq->cq_head = 0; 1199 nvmeq->cq_head = 0;
1069 nvmeq->cq_phase = 1; 1200 nvmeq->cq_phase = 1;
1070 nvmeq->q_db = &dev->dbs[qid << (dev->db_stride + 1)]; 1201 nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
1071 memset(nvmeq->cmdid_data, 0, extra); 1202 memset(nvmeq->cmdid_data, 0, extra);
1072 memset((void *)nvmeq->cqes, 0, CQ_SIZE(nvmeq->q_depth)); 1203 memset((void *)nvmeq->cqes, 0, CQ_SIZE(nvmeq->q_depth));
1073 nvme_cancel_ios(nvmeq, false); 1204 nvme_cancel_ios(nvmeq, false);
@@ -1087,13 +1218,13 @@ static int nvme_create_queue(struct nvme_queue *nvmeq, int qid)
1087 if (result < 0) 1218 if (result < 0)
1088 goto release_cq; 1219 goto release_cq;
1089 1220
1090 result = queue_request_irq(dev, nvmeq, "nvme"); 1221 result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
1091 if (result < 0) 1222 if (result < 0)
1092 goto release_sq; 1223 goto release_sq;
1093 1224
1094 spin_lock(&nvmeq->q_lock); 1225 spin_lock_irq(&nvmeq->q_lock);
1095 nvme_init_queue(nvmeq, qid); 1226 nvme_init_queue(nvmeq, qid);
1096 spin_unlock(&nvmeq->q_lock); 1227 spin_unlock_irq(&nvmeq->q_lock);
1097 1228
1098 return result; 1229 return result;
1099 1230
@@ -1205,13 +1336,13 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
1205 if (result) 1336 if (result)
1206 return result; 1337 return result;
1207 1338
1208 result = queue_request_irq(dev, nvmeq, "nvme admin"); 1339 result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
1209 if (result) 1340 if (result)
1210 return result; 1341 return result;
1211 1342
1212 spin_lock(&nvmeq->q_lock); 1343 spin_lock_irq(&nvmeq->q_lock);
1213 nvme_init_queue(nvmeq, 0); 1344 nvme_init_queue(nvmeq, 0);
1214 spin_unlock(&nvmeq->q_lock); 1345 spin_unlock_irq(&nvmeq->q_lock);
1215 return result; 1346 return result;
1216} 1347}
1217 1348
@@ -1487,10 +1618,47 @@ static int nvme_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
1487 } 1618 }
1488} 1619}
1489 1620
1621#ifdef CONFIG_COMPAT
1622static int nvme_compat_ioctl(struct block_device *bdev, fmode_t mode,
1623 unsigned int cmd, unsigned long arg)
1624{
1625 struct nvme_ns *ns = bdev->bd_disk->private_data;
1626
1627 switch (cmd) {
1628 case SG_IO:
1629 return nvme_sg_io32(ns, arg);
1630 }
1631 return nvme_ioctl(bdev, mode, cmd, arg);
1632}
1633#else
1634#define nvme_compat_ioctl NULL
1635#endif
1636
1637static int nvme_open(struct block_device *bdev, fmode_t mode)
1638{
1639 struct nvme_ns *ns = bdev->bd_disk->private_data;
1640 struct nvme_dev *dev = ns->dev;
1641
1642 kref_get(&dev->kref);
1643 return 0;
1644}
1645
1646static void nvme_free_dev(struct kref *kref);
1647
1648static void nvme_release(struct gendisk *disk, fmode_t mode)
1649{
1650 struct nvme_ns *ns = disk->private_data;
1651 struct nvme_dev *dev = ns->dev;
1652
1653 kref_put(&dev->kref, nvme_free_dev);
1654}
1655
1490static const struct block_device_operations nvme_fops = { 1656static const struct block_device_operations nvme_fops = {
1491 .owner = THIS_MODULE, 1657 .owner = THIS_MODULE,
1492 .ioctl = nvme_ioctl, 1658 .ioctl = nvme_ioctl,
1493 .compat_ioctl = nvme_ioctl, 1659 .compat_ioctl = nvme_compat_ioctl,
1660 .open = nvme_open,
1661 .release = nvme_release,
1494}; 1662};
1495 1663
1496static void nvme_resubmit_bios(struct nvme_queue *nvmeq) 1664static void nvme_resubmit_bios(struct nvme_queue *nvmeq)
@@ -1514,13 +1682,25 @@ static void nvme_resubmit_bios(struct nvme_queue *nvmeq)
1514 1682
1515static int nvme_kthread(void *data) 1683static int nvme_kthread(void *data)
1516{ 1684{
1517 struct nvme_dev *dev; 1685 struct nvme_dev *dev, *next;
1518 1686
1519 while (!kthread_should_stop()) { 1687 while (!kthread_should_stop()) {
1520 set_current_state(TASK_INTERRUPTIBLE); 1688 set_current_state(TASK_INTERRUPTIBLE);
1521 spin_lock(&dev_list_lock); 1689 spin_lock(&dev_list_lock);
1522 list_for_each_entry(dev, &dev_list, node) { 1690 list_for_each_entry_safe(dev, next, &dev_list, node) {
1523 int i; 1691 int i;
1692 if (readl(&dev->bar->csts) & NVME_CSTS_CFS &&
1693 dev->initialized) {
1694 if (work_busy(&dev->reset_work))
1695 continue;
1696 list_del_init(&dev->node);
1697 dev_warn(&dev->pci_dev->dev,
1698 "Failed status, reset controller\n");
1699 PREPARE_WORK(&dev->reset_work,
1700 nvme_reset_failed_dev);
1701 queue_work(nvme_workq, &dev->reset_work);
1702 continue;
1703 }
1524 for (i = 0; i < dev->queue_count; i++) { 1704 for (i = 0; i < dev->queue_count; i++) {
1525 struct nvme_queue *nvmeq = dev->queues[i]; 1705 struct nvme_queue *nvmeq = dev->queues[i];
1526 if (!nvmeq) 1706 if (!nvmeq)
@@ -1541,33 +1721,6 @@ static int nvme_kthread(void *data)
1541 return 0; 1721 return 0;
1542} 1722}
1543 1723
1544static DEFINE_IDA(nvme_index_ida);
1545
1546static int nvme_get_ns_idx(void)
1547{
1548 int index, error;
1549
1550 do {
1551 if (!ida_pre_get(&nvme_index_ida, GFP_KERNEL))
1552 return -1;
1553
1554 spin_lock(&dev_list_lock);
1555 error = ida_get_new(&nvme_index_ida, &index);
1556 spin_unlock(&dev_list_lock);
1557 } while (error == -EAGAIN);
1558
1559 if (error)
1560 index = -1;
1561 return index;
1562}
1563
1564static void nvme_put_ns_idx(int index)
1565{
1566 spin_lock(&dev_list_lock);
1567 ida_remove(&nvme_index_ida, index);
1568 spin_unlock(&dev_list_lock);
1569}
1570
1571static void nvme_config_discard(struct nvme_ns *ns) 1724static void nvme_config_discard(struct nvme_ns *ns)
1572{ 1725{
1573 u32 logical_block_size = queue_logical_block_size(ns->queue); 1726 u32 logical_block_size = queue_logical_block_size(ns->queue);
@@ -1601,7 +1754,7 @@ static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid,
1601 ns->dev = dev; 1754 ns->dev = dev;
1602 ns->queue->queuedata = ns; 1755 ns->queue->queuedata = ns;
1603 1756
1604 disk = alloc_disk(NVME_MINORS); 1757 disk = alloc_disk(0);
1605 if (!disk) 1758 if (!disk)
1606 goto out_free_queue; 1759 goto out_free_queue;
1607 ns->ns_id = nsid; 1760 ns->ns_id = nsid;
@@ -1614,12 +1767,12 @@ static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid,
1614 blk_queue_max_hw_sectors(ns->queue, dev->max_hw_sectors); 1767 blk_queue_max_hw_sectors(ns->queue, dev->max_hw_sectors);
1615 1768
1616 disk->major = nvme_major; 1769 disk->major = nvme_major;
1617 disk->minors = NVME_MINORS; 1770 disk->first_minor = 0;
1618 disk->first_minor = NVME_MINORS * nvme_get_ns_idx();
1619 disk->fops = &nvme_fops; 1771 disk->fops = &nvme_fops;
1620 disk->private_data = ns; 1772 disk->private_data = ns;
1621 disk->queue = ns->queue; 1773 disk->queue = ns->queue;
1622 disk->driverfs_dev = &dev->pci_dev->dev; 1774 disk->driverfs_dev = &dev->pci_dev->dev;
1775 disk->flags = GENHD_FL_EXT_DEVT;
1623 sprintf(disk->disk_name, "nvme%dn%d", dev->instance, nsid); 1776 sprintf(disk->disk_name, "nvme%dn%d", dev->instance, nsid);
1624 set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9)); 1777 set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9));
1625 1778
@@ -1635,15 +1788,6 @@ static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid,
1635 return NULL; 1788 return NULL;
1636} 1789}
1637 1790
1638static void nvme_ns_free(struct nvme_ns *ns)
1639{
1640 int index = ns->disk->first_minor / NVME_MINORS;
1641 put_disk(ns->disk);
1642 nvme_put_ns_idx(index);
1643 blk_cleanup_queue(ns->queue);
1644 kfree(ns);
1645}
1646
1647static int set_queue_count(struct nvme_dev *dev, int count) 1791static int set_queue_count(struct nvme_dev *dev, int count)
1648{ 1792{
1649 int status; 1793 int status;
@@ -1659,11 +1803,12 @@ static int set_queue_count(struct nvme_dev *dev, int count)
1659 1803
1660static size_t db_bar_size(struct nvme_dev *dev, unsigned nr_io_queues) 1804static size_t db_bar_size(struct nvme_dev *dev, unsigned nr_io_queues)
1661{ 1805{
1662 return 4096 + ((nr_io_queues + 1) << (dev->db_stride + 3)); 1806 return 4096 + ((nr_io_queues + 1) * 8 * dev->db_stride);
1663} 1807}
1664 1808
1665static int nvme_setup_io_queues(struct nvme_dev *dev) 1809static int nvme_setup_io_queues(struct nvme_dev *dev)
1666{ 1810{
1811 struct nvme_queue *adminq = dev->queues[0];
1667 struct pci_dev *pdev = dev->pci_dev; 1812 struct pci_dev *pdev = dev->pci_dev;
1668 int result, cpu, i, vecs, nr_io_queues, size, q_depth; 1813 int result, cpu, i, vecs, nr_io_queues, size, q_depth;
1669 1814
@@ -1690,7 +1835,7 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1690 } 1835 }
1691 1836
1692 /* Deregister the admin queue's interrupt */ 1837 /* Deregister the admin queue's interrupt */
1693 free_irq(dev->entry[0].vector, dev->queues[0]); 1838 free_irq(dev->entry[0].vector, adminq);
1694 1839
1695 vecs = nr_io_queues; 1840 vecs = nr_io_queues;
1696 for (i = 0; i < vecs; i++) 1841 for (i = 0; i < vecs; i++)
@@ -1728,9 +1873,9 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1728 */ 1873 */
1729 nr_io_queues = vecs; 1874 nr_io_queues = vecs;
1730 1875
1731 result = queue_request_irq(dev, dev->queues[0], "nvme admin"); 1876 result = queue_request_irq(dev, adminq, adminq->irqname);
1732 if (result) { 1877 if (result) {
1733 dev->queues[0]->q_suspended = 1; 1878 adminq->q_suspended = 1;
1734 goto free_queues; 1879 goto free_queues;
1735 } 1880 }
1736 1881
@@ -1739,9 +1884,9 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1739 for (i = dev->queue_count - 1; i > nr_io_queues; i--) { 1884 for (i = dev->queue_count - 1; i > nr_io_queues; i--) {
1740 struct nvme_queue *nvmeq = dev->queues[i]; 1885 struct nvme_queue *nvmeq = dev->queues[i];
1741 1886
1742 spin_lock(&nvmeq->q_lock); 1887 spin_lock_irq(&nvmeq->q_lock);
1743 nvme_cancel_ios(nvmeq, false); 1888 nvme_cancel_ios(nvmeq, false);
1744 spin_unlock(&nvmeq->q_lock); 1889 spin_unlock_irq(&nvmeq->q_lock);
1745 1890
1746 nvme_free_queue(nvmeq); 1891 nvme_free_queue(nvmeq);
1747 dev->queue_count--; 1892 dev->queue_count--;
@@ -1782,7 +1927,7 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1782 return 0; 1927 return 0;
1783 1928
1784 free_queues: 1929 free_queues:
1785 nvme_free_queues(dev); 1930 nvme_free_queues(dev, 1);
1786 return result; 1931 return result;
1787} 1932}
1788 1933
@@ -1794,6 +1939,7 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1794 */ 1939 */
1795static int nvme_dev_add(struct nvme_dev *dev) 1940static int nvme_dev_add(struct nvme_dev *dev)
1796{ 1941{
1942 struct pci_dev *pdev = dev->pci_dev;
1797 int res; 1943 int res;
1798 unsigned nn, i; 1944 unsigned nn, i;
1799 struct nvme_ns *ns; 1945 struct nvme_ns *ns;
@@ -1803,8 +1949,7 @@ static int nvme_dev_add(struct nvme_dev *dev)
1803 dma_addr_t dma_addr; 1949 dma_addr_t dma_addr;
1804 int shift = NVME_CAP_MPSMIN(readq(&dev->bar->cap)) + 12; 1950 int shift = NVME_CAP_MPSMIN(readq(&dev->bar->cap)) + 12;
1805 1951
1806 mem = dma_alloc_coherent(&dev->pci_dev->dev, 8192, &dma_addr, 1952 mem = dma_alloc_coherent(&pdev->dev, 8192, &dma_addr, GFP_KERNEL);
1807 GFP_KERNEL);
1808 if (!mem) 1953 if (!mem)
1809 return -ENOMEM; 1954 return -ENOMEM;
1810 1955
@@ -1817,13 +1962,14 @@ static int nvme_dev_add(struct nvme_dev *dev)
1817 ctrl = mem; 1962 ctrl = mem;
1818 nn = le32_to_cpup(&ctrl->nn); 1963 nn = le32_to_cpup(&ctrl->nn);
1819 dev->oncs = le16_to_cpup(&ctrl->oncs); 1964 dev->oncs = le16_to_cpup(&ctrl->oncs);
1965 dev->abort_limit = ctrl->acl + 1;
1820 memcpy(dev->serial, ctrl->sn, sizeof(ctrl->sn)); 1966 memcpy(dev->serial, ctrl->sn, sizeof(ctrl->sn));
1821 memcpy(dev->model, ctrl->mn, sizeof(ctrl->mn)); 1967 memcpy(dev->model, ctrl->mn, sizeof(ctrl->mn));
1822 memcpy(dev->firmware_rev, ctrl->fr, sizeof(ctrl->fr)); 1968 memcpy(dev->firmware_rev, ctrl->fr, sizeof(ctrl->fr));
1823 if (ctrl->mdts) 1969 if (ctrl->mdts)
1824 dev->max_hw_sectors = 1 << (ctrl->mdts + shift - 9); 1970 dev->max_hw_sectors = 1 << (ctrl->mdts + shift - 9);
1825 if ((dev->pci_dev->vendor == PCI_VENDOR_ID_INTEL) && 1971 if ((pdev->vendor == PCI_VENDOR_ID_INTEL) &&
1826 (dev->pci_dev->device == 0x0953) && ctrl->vs[3]) 1972 (pdev->device == 0x0953) && ctrl->vs[3])
1827 dev->stripe_size = 1 << (ctrl->vs[3] + shift); 1973 dev->stripe_size = 1 << (ctrl->vs[3] + shift);
1828 1974
1829 id_ns = mem; 1975 id_ns = mem;
@@ -1871,16 +2017,21 @@ static int nvme_dev_map(struct nvme_dev *dev)
1871 dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32))) 2017 dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)))
1872 goto disable; 2018 goto disable;
1873 2019
1874 pci_set_drvdata(pdev, dev);
1875 dev->bar = ioremap(pci_resource_start(pdev, 0), 8192); 2020 dev->bar = ioremap(pci_resource_start(pdev, 0), 8192);
1876 if (!dev->bar) 2021 if (!dev->bar)
1877 goto disable; 2022 goto disable;
1878 2023 if (readl(&dev->bar->csts) == -1) {
1879 dev->db_stride = NVME_CAP_STRIDE(readq(&dev->bar->cap)); 2024 result = -ENODEV;
2025 goto unmap;
2026 }
2027 dev->db_stride = 1 << NVME_CAP_STRIDE(readq(&dev->bar->cap));
1880 dev->dbs = ((void __iomem *)dev->bar) + 4096; 2028 dev->dbs = ((void __iomem *)dev->bar) + 4096;
1881 2029
1882 return 0; 2030 return 0;
1883 2031
2032 unmap:
2033 iounmap(dev->bar);
2034 dev->bar = NULL;
1884 disable: 2035 disable:
1885 pci_release_regions(pdev); 2036 pci_release_regions(pdev);
1886 disable_pci: 2037 disable_pci:
@@ -1898,37 +2049,183 @@ static void nvme_dev_unmap(struct nvme_dev *dev)
1898 if (dev->bar) { 2049 if (dev->bar) {
1899 iounmap(dev->bar); 2050 iounmap(dev->bar);
1900 dev->bar = NULL; 2051 dev->bar = NULL;
2052 pci_release_regions(dev->pci_dev);
1901 } 2053 }
1902 2054
1903 pci_release_regions(dev->pci_dev);
1904 if (pci_is_enabled(dev->pci_dev)) 2055 if (pci_is_enabled(dev->pci_dev))
1905 pci_disable_device(dev->pci_dev); 2056 pci_disable_device(dev->pci_dev);
1906} 2057}
1907 2058
2059struct nvme_delq_ctx {
2060 struct task_struct *waiter;
2061 struct kthread_worker *worker;
2062 atomic_t refcount;
2063};
2064
2065static void nvme_wait_dq(struct nvme_delq_ctx *dq, struct nvme_dev *dev)
2066{
2067 dq->waiter = current;
2068 mb();
2069
2070 for (;;) {
2071 set_current_state(TASK_KILLABLE);
2072 if (!atomic_read(&dq->refcount))
2073 break;
2074 if (!schedule_timeout(ADMIN_TIMEOUT) ||
2075 fatal_signal_pending(current)) {
2076 set_current_state(TASK_RUNNING);
2077
2078 nvme_disable_ctrl(dev, readq(&dev->bar->cap));
2079 nvme_disable_queue(dev, 0);
2080
2081 send_sig(SIGKILL, dq->worker->task, 1);
2082 flush_kthread_worker(dq->worker);
2083 return;
2084 }
2085 }
2086 set_current_state(TASK_RUNNING);
2087}
2088
2089static void nvme_put_dq(struct nvme_delq_ctx *dq)
2090{
2091 atomic_dec(&dq->refcount);
2092 if (dq->waiter)
2093 wake_up_process(dq->waiter);
2094}
2095
2096static struct nvme_delq_ctx *nvme_get_dq(struct nvme_delq_ctx *dq)
2097{
2098 atomic_inc(&dq->refcount);
2099 return dq;
2100}
2101
2102static void nvme_del_queue_end(struct nvme_queue *nvmeq)
2103{
2104 struct nvme_delq_ctx *dq = nvmeq->cmdinfo.ctx;
2105
2106 nvme_clear_queue(nvmeq);
2107 nvme_put_dq(dq);
2108}
2109
2110static int adapter_async_del_queue(struct nvme_queue *nvmeq, u8 opcode,
2111 kthread_work_func_t fn)
2112{
2113 struct nvme_command c;
2114
2115 memset(&c, 0, sizeof(c));
2116 c.delete_queue.opcode = opcode;
2117 c.delete_queue.qid = cpu_to_le16(nvmeq->qid);
2118
2119 init_kthread_work(&nvmeq->cmdinfo.work, fn);
2120 return nvme_submit_admin_cmd_async(nvmeq->dev, &c, &nvmeq->cmdinfo);
2121}
2122
2123static void nvme_del_cq_work_handler(struct kthread_work *work)
2124{
2125 struct nvme_queue *nvmeq = container_of(work, struct nvme_queue,
2126 cmdinfo.work);
2127 nvme_del_queue_end(nvmeq);
2128}
2129
2130static int nvme_delete_cq(struct nvme_queue *nvmeq)
2131{
2132 return adapter_async_del_queue(nvmeq, nvme_admin_delete_cq,
2133 nvme_del_cq_work_handler);
2134}
2135
2136static void nvme_del_sq_work_handler(struct kthread_work *work)
2137{
2138 struct nvme_queue *nvmeq = container_of(work, struct nvme_queue,
2139 cmdinfo.work);
2140 int status = nvmeq->cmdinfo.status;
2141
2142 if (!status)
2143 status = nvme_delete_cq(nvmeq);
2144 if (status)
2145 nvme_del_queue_end(nvmeq);
2146}
2147
2148static int nvme_delete_sq(struct nvme_queue *nvmeq)
2149{
2150 return adapter_async_del_queue(nvmeq, nvme_admin_delete_sq,
2151 nvme_del_sq_work_handler);
2152}
2153
2154static void nvme_del_queue_start(struct kthread_work *work)
2155{
2156 struct nvme_queue *nvmeq = container_of(work, struct nvme_queue,
2157 cmdinfo.work);
2158 allow_signal(SIGKILL);
2159 if (nvme_delete_sq(nvmeq))
2160 nvme_del_queue_end(nvmeq);
2161}
2162
2163static void nvme_disable_io_queues(struct nvme_dev *dev)
2164{
2165 int i;
2166 DEFINE_KTHREAD_WORKER_ONSTACK(worker);
2167 struct nvme_delq_ctx dq;
2168 struct task_struct *kworker_task = kthread_run(kthread_worker_fn,
2169 &worker, "nvme%d", dev->instance);
2170
2171 if (IS_ERR(kworker_task)) {
2172 dev_err(&dev->pci_dev->dev,
2173 "Failed to create queue del task\n");
2174 for (i = dev->queue_count - 1; i > 0; i--)
2175 nvme_disable_queue(dev, i);
2176 return;
2177 }
2178
2179 dq.waiter = NULL;
2180 atomic_set(&dq.refcount, 0);
2181 dq.worker = &worker;
2182 for (i = dev->queue_count - 1; i > 0; i--) {
2183 struct nvme_queue *nvmeq = dev->queues[i];
2184
2185 if (nvme_suspend_queue(nvmeq))
2186 continue;
2187 nvmeq->cmdinfo.ctx = nvme_get_dq(&dq);
2188 nvmeq->cmdinfo.worker = dq.worker;
2189 init_kthread_work(&nvmeq->cmdinfo.work, nvme_del_queue_start);
2190 queue_kthread_work(dq.worker, &nvmeq->cmdinfo.work);
2191 }
2192 nvme_wait_dq(&dq, dev);
2193 kthread_stop(kworker_task);
2194}
2195
1908static void nvme_dev_shutdown(struct nvme_dev *dev) 2196static void nvme_dev_shutdown(struct nvme_dev *dev)
1909{ 2197{
1910 int i; 2198 int i;
1911 2199
1912 for (i = dev->queue_count - 1; i >= 0; i--) 2200 dev->initialized = 0;
1913 nvme_disable_queue(dev, i);
1914 2201
1915 spin_lock(&dev_list_lock); 2202 spin_lock(&dev_list_lock);
1916 list_del_init(&dev->node); 2203 list_del_init(&dev->node);
1917 spin_unlock(&dev_list_lock); 2204 spin_unlock(&dev_list_lock);
1918 2205
1919 if (dev->bar) 2206 if (!dev->bar || (dev->bar && readl(&dev->bar->csts) == -1)) {
2207 for (i = dev->queue_count - 1; i >= 0; i--) {
2208 struct nvme_queue *nvmeq = dev->queues[i];
2209 nvme_suspend_queue(nvmeq);
2210 nvme_clear_queue(nvmeq);
2211 }
2212 } else {
2213 nvme_disable_io_queues(dev);
1920 nvme_shutdown_ctrl(dev); 2214 nvme_shutdown_ctrl(dev);
2215 nvme_disable_queue(dev, 0);
2216 }
1921 nvme_dev_unmap(dev); 2217 nvme_dev_unmap(dev);
1922} 2218}
1923 2219
1924static void nvme_dev_remove(struct nvme_dev *dev) 2220static void nvme_dev_remove(struct nvme_dev *dev)
1925{ 2221{
1926 struct nvme_ns *ns, *next; 2222 struct nvme_ns *ns;
1927 2223
1928 list_for_each_entry_safe(ns, next, &dev->namespaces, list) { 2224 list_for_each_entry(ns, &dev->namespaces, list) {
1929 list_del(&ns->list); 2225 if (ns->disk->flags & GENHD_FL_UP)
1930 del_gendisk(ns->disk); 2226 del_gendisk(ns->disk);
1931 nvme_ns_free(ns); 2227 if (!blk_queue_dying(ns->queue))
2228 blk_cleanup_queue(ns->queue);
1932 } 2229 }
1933} 2230}
1934 2231
@@ -1985,14 +2282,22 @@ static void nvme_release_instance(struct nvme_dev *dev)
1985 spin_unlock(&dev_list_lock); 2282 spin_unlock(&dev_list_lock);
1986} 2283}
1987 2284
2285static void nvme_free_namespaces(struct nvme_dev *dev)
2286{
2287 struct nvme_ns *ns, *next;
2288
2289 list_for_each_entry_safe(ns, next, &dev->namespaces, list) {
2290 list_del(&ns->list);
2291 put_disk(ns->disk);
2292 kfree(ns);
2293 }
2294}
2295
1988static void nvme_free_dev(struct kref *kref) 2296static void nvme_free_dev(struct kref *kref)
1989{ 2297{
1990 struct nvme_dev *dev = container_of(kref, struct nvme_dev, kref); 2298 struct nvme_dev *dev = container_of(kref, struct nvme_dev, kref);
1991 nvme_dev_remove(dev); 2299
1992 nvme_dev_shutdown(dev); 2300 nvme_free_namespaces(dev);
1993 nvme_free_queues(dev);
1994 nvme_release_instance(dev);
1995 nvme_release_prp_pools(dev);
1996 kfree(dev->queues); 2301 kfree(dev->queues);
1997 kfree(dev->entry); 2302 kfree(dev->entry);
1998 kfree(dev); 2303 kfree(dev);
@@ -2056,6 +2361,7 @@ static int nvme_dev_start(struct nvme_dev *dev)
2056 return result; 2361 return result;
2057 2362
2058 disable: 2363 disable:
2364 nvme_disable_queue(dev, 0);
2059 spin_lock(&dev_list_lock); 2365 spin_lock(&dev_list_lock);
2060 list_del_init(&dev->node); 2366 list_del_init(&dev->node);
2061 spin_unlock(&dev_list_lock); 2367 spin_unlock(&dev_list_lock);
@@ -2064,6 +2370,71 @@ static int nvme_dev_start(struct nvme_dev *dev)
2064 return result; 2370 return result;
2065} 2371}
2066 2372
2373static int nvme_remove_dead_ctrl(void *arg)
2374{
2375 struct nvme_dev *dev = (struct nvme_dev *)arg;
2376 struct pci_dev *pdev = dev->pci_dev;
2377
2378 if (pci_get_drvdata(pdev))
2379 pci_stop_and_remove_bus_device(pdev);
2380 kref_put(&dev->kref, nvme_free_dev);
2381 return 0;
2382}
2383
2384static void nvme_remove_disks(struct work_struct *ws)
2385{
2386 int i;
2387 struct nvme_dev *dev = container_of(ws, struct nvme_dev, reset_work);
2388
2389 nvme_dev_remove(dev);
2390 spin_lock(&dev_list_lock);
2391 for (i = dev->queue_count - 1; i > 0; i--) {
2392 BUG_ON(!dev->queues[i] || !dev->queues[i]->q_suspended);
2393 nvme_free_queue(dev->queues[i]);
2394 dev->queue_count--;
2395 dev->queues[i] = NULL;
2396 }
2397 spin_unlock(&dev_list_lock);
2398}
2399
2400static int nvme_dev_resume(struct nvme_dev *dev)
2401{
2402 int ret;
2403
2404 ret = nvme_dev_start(dev);
2405 if (ret && ret != -EBUSY)
2406 return ret;
2407 if (ret == -EBUSY) {
2408 spin_lock(&dev_list_lock);
2409 PREPARE_WORK(&dev->reset_work, nvme_remove_disks);
2410 queue_work(nvme_workq, &dev->reset_work);
2411 spin_unlock(&dev_list_lock);
2412 }
2413 dev->initialized = 1;
2414 return 0;
2415}
2416
2417static void nvme_dev_reset(struct nvme_dev *dev)
2418{
2419 nvme_dev_shutdown(dev);
2420 if (nvme_dev_resume(dev)) {
2421 dev_err(&dev->pci_dev->dev, "Device failed to resume\n");
2422 kref_get(&dev->kref);
2423 if (IS_ERR(kthread_run(nvme_remove_dead_ctrl, dev, "nvme%d",
2424 dev->instance))) {
2425 dev_err(&dev->pci_dev->dev,
2426 "Failed to start controller remove task\n");
2427 kref_put(&dev->kref, nvme_free_dev);
2428 }
2429 }
2430}
2431
2432static void nvme_reset_failed_dev(struct work_struct *ws)
2433{
2434 struct nvme_dev *dev = container_of(ws, struct nvme_dev, reset_work);
2435 nvme_dev_reset(dev);
2436}
2437
2067static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) 2438static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2068{ 2439{
2069 int result = -ENOMEM; 2440 int result = -ENOMEM;
@@ -2082,8 +2453,9 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2082 goto free; 2453 goto free;
2083 2454
2084 INIT_LIST_HEAD(&dev->namespaces); 2455 INIT_LIST_HEAD(&dev->namespaces);
2456 INIT_WORK(&dev->reset_work, nvme_reset_failed_dev);
2085 dev->pci_dev = pdev; 2457 dev->pci_dev = pdev;
2086 2458 pci_set_drvdata(pdev, dev);
2087 result = nvme_set_instance(dev); 2459 result = nvme_set_instance(dev);
2088 if (result) 2460 if (result)
2089 goto free; 2461 goto free;
@@ -2099,6 +2471,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2099 goto release_pools; 2471 goto release_pools;
2100 } 2472 }
2101 2473
2474 kref_init(&dev->kref);
2102 result = nvme_dev_add(dev); 2475 result = nvme_dev_add(dev);
2103 if (result) 2476 if (result)
2104 goto shutdown; 2477 goto shutdown;
@@ -2113,15 +2486,16 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2113 if (result) 2486 if (result)
2114 goto remove; 2487 goto remove;
2115 2488
2116 kref_init(&dev->kref); 2489 dev->initialized = 1;
2117 return 0; 2490 return 0;
2118 2491
2119 remove: 2492 remove:
2120 nvme_dev_remove(dev); 2493 nvme_dev_remove(dev);
2494 nvme_free_namespaces(dev);
2121 shutdown: 2495 shutdown:
2122 nvme_dev_shutdown(dev); 2496 nvme_dev_shutdown(dev);
2123 release_pools: 2497 release_pools:
2124 nvme_free_queues(dev); 2498 nvme_free_queues(dev, 0);
2125 nvme_release_prp_pools(dev); 2499 nvme_release_prp_pools(dev);
2126 release: 2500 release:
2127 nvme_release_instance(dev); 2501 nvme_release_instance(dev);
@@ -2132,10 +2506,28 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2132 return result; 2506 return result;
2133} 2507}
2134 2508
2509static void nvme_shutdown(struct pci_dev *pdev)
2510{
2511 struct nvme_dev *dev = pci_get_drvdata(pdev);
2512 nvme_dev_shutdown(dev);
2513}
2514
2135static void nvme_remove(struct pci_dev *pdev) 2515static void nvme_remove(struct pci_dev *pdev)
2136{ 2516{
2137 struct nvme_dev *dev = pci_get_drvdata(pdev); 2517 struct nvme_dev *dev = pci_get_drvdata(pdev);
2518
2519 spin_lock(&dev_list_lock);
2520 list_del_init(&dev->node);
2521 spin_unlock(&dev_list_lock);
2522
2523 pci_set_drvdata(pdev, NULL);
2524 flush_work(&dev->reset_work);
2138 misc_deregister(&dev->miscdev); 2525 misc_deregister(&dev->miscdev);
2526 nvme_dev_remove(dev);
2527 nvme_dev_shutdown(dev);
2528 nvme_free_queues(dev, 0);
2529 nvme_release_instance(dev);
2530 nvme_release_prp_pools(dev);
2139 kref_put(&dev->kref, nvme_free_dev); 2531 kref_put(&dev->kref, nvme_free_dev);
2140} 2532}
2141 2533
@@ -2159,13 +2551,12 @@ static int nvme_resume(struct device *dev)
2159{ 2551{
2160 struct pci_dev *pdev = to_pci_dev(dev); 2552 struct pci_dev *pdev = to_pci_dev(dev);
2161 struct nvme_dev *ndev = pci_get_drvdata(pdev); 2553 struct nvme_dev *ndev = pci_get_drvdata(pdev);
2162 int ret;
2163 2554
2164 ret = nvme_dev_start(ndev); 2555 if (nvme_dev_resume(ndev) && !work_busy(&ndev->reset_work)) {
2165 /* XXX: should remove gendisks if resume fails */ 2556 PREPARE_WORK(&ndev->reset_work, nvme_reset_failed_dev);
2166 if (ret) 2557 queue_work(nvme_workq, &ndev->reset_work);
2167 nvme_free_queues(ndev); 2558 }
2168 return ret; 2559 return 0;
2169} 2560}
2170 2561
2171static SIMPLE_DEV_PM_OPS(nvme_dev_pm_ops, nvme_suspend, nvme_resume); 2562static SIMPLE_DEV_PM_OPS(nvme_dev_pm_ops, nvme_suspend, nvme_resume);
@@ -2192,6 +2583,7 @@ static struct pci_driver nvme_driver = {
2192 .id_table = nvme_id_table, 2583 .id_table = nvme_id_table,
2193 .probe = nvme_probe, 2584 .probe = nvme_probe,
2194 .remove = nvme_remove, 2585 .remove = nvme_remove,
2586 .shutdown = nvme_shutdown,
2195 .driver = { 2587 .driver = {
2196 .pm = &nvme_dev_pm_ops, 2588 .pm = &nvme_dev_pm_ops,
2197 }, 2589 },
@@ -2206,9 +2598,14 @@ static int __init nvme_init(void)
2206 if (IS_ERR(nvme_thread)) 2598 if (IS_ERR(nvme_thread))
2207 return PTR_ERR(nvme_thread); 2599 return PTR_ERR(nvme_thread);
2208 2600
2601 result = -ENOMEM;
2602 nvme_workq = create_singlethread_workqueue("nvme");
2603 if (!nvme_workq)
2604 goto kill_kthread;
2605
2209 result = register_blkdev(nvme_major, "nvme"); 2606 result = register_blkdev(nvme_major, "nvme");
2210 if (result < 0) 2607 if (result < 0)
2211 goto kill_kthread; 2608 goto kill_workq;
2212 else if (result > 0) 2609 else if (result > 0)
2213 nvme_major = result; 2610 nvme_major = result;
2214 2611
@@ -2219,6 +2616,8 @@ static int __init nvme_init(void)
2219 2616
2220 unregister_blkdev: 2617 unregister_blkdev:
2221 unregister_blkdev(nvme_major, "nvme"); 2618 unregister_blkdev(nvme_major, "nvme");
2619 kill_workq:
2620 destroy_workqueue(nvme_workq);
2222 kill_kthread: 2621 kill_kthread:
2223 kthread_stop(nvme_thread); 2622 kthread_stop(nvme_thread);
2224 return result; 2623 return result;
@@ -2228,6 +2627,7 @@ static void __exit nvme_exit(void)
2228{ 2627{
2229 pci_unregister_driver(&nvme_driver); 2628 pci_unregister_driver(&nvme_driver);
2230 unregister_blkdev(nvme_major, "nvme"); 2629 unregister_blkdev(nvme_major, "nvme");
2630 destroy_workqueue(nvme_workq);
2231 kthread_stop(nvme_thread); 2631 kthread_stop(nvme_thread);
2232} 2632}
2233 2633
diff --git a/drivers/block/nvme-scsi.c b/drivers/block/nvme-scsi.c
index 4a4ff4eb8e23..4a0ceb64e269 100644
--- a/drivers/block/nvme-scsi.c
+++ b/drivers/block/nvme-scsi.c
@@ -25,6 +25,7 @@
25#include <linux/bio.h> 25#include <linux/bio.h>
26#include <linux/bitops.h> 26#include <linux/bitops.h>
27#include <linux/blkdev.h> 27#include <linux/blkdev.h>
28#include <linux/compat.h>
28#include <linux/delay.h> 29#include <linux/delay.h>
29#include <linux/errno.h> 30#include <linux/errno.h>
30#include <linux/fs.h> 31#include <linux/fs.h>
@@ -3038,6 +3039,152 @@ int nvme_sg_io(struct nvme_ns *ns, struct sg_io_hdr __user *u_hdr)
3038 return retcode; 3039 return retcode;
3039} 3040}
3040 3041
3042#ifdef CONFIG_COMPAT
3043typedef struct sg_io_hdr32 {
3044 compat_int_t interface_id; /* [i] 'S' for SCSI generic (required) */
3045 compat_int_t dxfer_direction; /* [i] data transfer direction */
3046 unsigned char cmd_len; /* [i] SCSI command length ( <= 16 bytes) */
3047 unsigned char mx_sb_len; /* [i] max length to write to sbp */
3048 unsigned short iovec_count; /* [i] 0 implies no scatter gather */
3049 compat_uint_t dxfer_len; /* [i] byte count of data transfer */
3050 compat_uint_t dxferp; /* [i], [*io] points to data transfer memory
3051 or scatter gather list */
3052 compat_uptr_t cmdp; /* [i], [*i] points to command to perform */
3053 compat_uptr_t sbp; /* [i], [*o] points to sense_buffer memory */
3054 compat_uint_t timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */
3055 compat_uint_t flags; /* [i] 0 -> default, see SG_FLAG... */
3056 compat_int_t pack_id; /* [i->o] unused internally (normally) */
3057 compat_uptr_t usr_ptr; /* [i->o] unused internally */
3058 unsigned char status; /* [o] scsi status */
3059 unsigned char masked_status; /* [o] shifted, masked scsi status */
3060 unsigned char msg_status; /* [o] messaging level data (optional) */
3061 unsigned char sb_len_wr; /* [o] byte count actually written to sbp */
3062 unsigned short host_status; /* [o] errors from host adapter */
3063 unsigned short driver_status; /* [o] errors from software driver */
3064 compat_int_t resid; /* [o] dxfer_len - actual_transferred */
3065 compat_uint_t duration; /* [o] time taken by cmd (unit: millisec) */
3066 compat_uint_t info; /* [o] auxiliary information */
3067} sg_io_hdr32_t; /* 64 bytes long (on sparc32) */
3068
3069typedef struct sg_iovec32 {
3070 compat_uint_t iov_base;
3071 compat_uint_t iov_len;
3072} sg_iovec32_t;
3073
3074static int sg_build_iovec(sg_io_hdr_t __user *sgio, void __user *dxferp, u16 iovec_count)
3075{
3076 sg_iovec_t __user *iov = (sg_iovec_t __user *) (sgio + 1);
3077 sg_iovec32_t __user *iov32 = dxferp;
3078 int i;
3079
3080 for (i = 0; i < iovec_count; i++) {
3081 u32 base, len;
3082
3083 if (get_user(base, &iov32[i].iov_base) ||
3084 get_user(len, &iov32[i].iov_len) ||
3085 put_user(compat_ptr(base), &iov[i].iov_base) ||
3086 put_user(len, &iov[i].iov_len))
3087 return -EFAULT;
3088 }
3089
3090 if (put_user(iov, &sgio->dxferp))
3091 return -EFAULT;
3092 return 0;
3093}
3094
3095int nvme_sg_io32(struct nvme_ns *ns, unsigned long arg)
3096{
3097 sg_io_hdr32_t __user *sgio32 = (sg_io_hdr32_t __user *)arg;
3098 sg_io_hdr_t __user *sgio;
3099 u16 iovec_count;
3100 u32 data;
3101 void __user *dxferp;
3102 int err;
3103 int interface_id;
3104
3105 if (get_user(interface_id, &sgio32->interface_id))
3106 return -EFAULT;
3107 if (interface_id != 'S')
3108 return -EINVAL;
3109
3110 if (get_user(iovec_count, &sgio32->iovec_count))
3111 return -EFAULT;
3112
3113 {
3114 void __user *top = compat_alloc_user_space(0);
3115 void __user *new = compat_alloc_user_space(sizeof(sg_io_hdr_t) +
3116 (iovec_count * sizeof(sg_iovec_t)));
3117 if (new > top)
3118 return -EINVAL;
3119
3120 sgio = new;
3121 }
3122
3123 /* Ok, now construct. */
3124 if (copy_in_user(&sgio->interface_id, &sgio32->interface_id,
3125 (2 * sizeof(int)) +
3126 (2 * sizeof(unsigned char)) +
3127 (1 * sizeof(unsigned short)) +
3128 (1 * sizeof(unsigned int))))
3129 return -EFAULT;
3130
3131 if (get_user(data, &sgio32->dxferp))
3132 return -EFAULT;
3133 dxferp = compat_ptr(data);
3134 if (iovec_count) {
3135 if (sg_build_iovec(sgio, dxferp, iovec_count))
3136 return -EFAULT;
3137 } else {
3138 if (put_user(dxferp, &sgio->dxferp))
3139 return -EFAULT;
3140 }
3141
3142 {
3143 unsigned char __user *cmdp;
3144 unsigned char __user *sbp;
3145
3146 if (get_user(data, &sgio32->cmdp))
3147 return -EFAULT;
3148 cmdp = compat_ptr(data);
3149
3150 if (get_user(data, &sgio32->sbp))
3151 return -EFAULT;
3152 sbp = compat_ptr(data);
3153
3154 if (put_user(cmdp, &sgio->cmdp) ||
3155 put_user(sbp, &sgio->sbp))
3156 return -EFAULT;
3157 }
3158
3159 if (copy_in_user(&sgio->timeout, &sgio32->timeout,
3160 3 * sizeof(int)))
3161 return -EFAULT;
3162
3163 if (get_user(data, &sgio32->usr_ptr))
3164 return -EFAULT;
3165 if (put_user(compat_ptr(data), &sgio->usr_ptr))
3166 return -EFAULT;
3167
3168 err = nvme_sg_io(ns, sgio);
3169 if (err >= 0) {
3170 void __user *datap;
3171
3172 if (copy_in_user(&sgio32->pack_id, &sgio->pack_id,
3173 sizeof(int)) ||
3174 get_user(datap, &sgio->usr_ptr) ||
3175 put_user((u32)(unsigned long)datap,
3176 &sgio32->usr_ptr) ||
3177 copy_in_user(&sgio32->status, &sgio->status,
3178 (4 * sizeof(unsigned char)) +
3179 (2 * sizeof(unsigned short)) +
3180 (3 * sizeof(int))))
3181 err = -EFAULT;
3182 }
3183
3184 return err;
3185}
3186#endif
3187
3041int nvme_sg_get_version_num(int __user *ip) 3188int nvme_sg_get_version_num(int __user *ip)
3042{ 3189{
3043 return put_user(sg_version_num, ip); 3190 return put_user(sg_version_num, ip);
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 6a680d4de7f1..b1cb3f4c4db4 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -110,9 +110,9 @@ static int __virtblk_add_req(struct virtqueue *vq,
110 return virtqueue_add_sgs(vq, sgs, num_out, num_in, vbr, GFP_ATOMIC); 110 return virtqueue_add_sgs(vq, sgs, num_out, num_in, vbr, GFP_ATOMIC);
111} 111}
112 112
113static inline void virtblk_request_done(struct virtblk_req *vbr) 113static inline void virtblk_request_done(struct request *req)
114{ 114{
115 struct request *req = vbr->req; 115 struct virtblk_req *vbr = req->special;
116 int error = virtblk_result(vbr); 116 int error = virtblk_result(vbr);
117 117
118 if (req->cmd_type == REQ_TYPE_BLOCK_PC) { 118 if (req->cmd_type == REQ_TYPE_BLOCK_PC) {
@@ -138,7 +138,7 @@ static void virtblk_done(struct virtqueue *vq)
138 do { 138 do {
139 virtqueue_disable_cb(vq); 139 virtqueue_disable_cb(vq);
140 while ((vbr = virtqueue_get_buf(vblk->vq, &len)) != NULL) { 140 while ((vbr = virtqueue_get_buf(vblk->vq, &len)) != NULL) {
141 virtblk_request_done(vbr); 141 blk_mq_complete_request(vbr->req);
142 req_done = true; 142 req_done = true;
143 } 143 }
144 if (unlikely(virtqueue_is_broken(vq))) 144 if (unlikely(virtqueue_is_broken(vq)))
@@ -479,6 +479,7 @@ static struct blk_mq_ops virtio_mq_ops = {
479 .map_queue = blk_mq_map_queue, 479 .map_queue = blk_mq_map_queue,
480 .alloc_hctx = blk_mq_alloc_single_hw_queue, 480 .alloc_hctx = blk_mq_alloc_single_hw_queue,
481 .free_hctx = blk_mq_free_single_hw_queue, 481 .free_hctx = blk_mq_free_single_hw_queue,
482 .complete = virtblk_request_done,
482}; 483};
483 484
484static struct blk_mq_reg virtio_mq_reg = { 485static struct blk_mq_reg virtio_mq_reg = {
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index da18046d0e07..64c60edcdfbc 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -285,7 +285,8 @@ static void free_persistent_gnts(struct xen_blkif *blkif, struct rb_root *root,
285 285
286 if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST || 286 if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST ||
287 !rb_next(&persistent_gnt->node)) { 287 !rb_next(&persistent_gnt->node)) {
288 ret = gnttab_unmap_refs(unmap, pages, segs_to_unmap); 288 ret = gnttab_unmap_refs(unmap, NULL, pages,
289 segs_to_unmap);
289 BUG_ON(ret); 290 BUG_ON(ret);
290 put_free_pages(blkif, pages, segs_to_unmap); 291 put_free_pages(blkif, pages, segs_to_unmap);
291 segs_to_unmap = 0; 292 segs_to_unmap = 0;
@@ -298,7 +299,7 @@ static void free_persistent_gnts(struct xen_blkif *blkif, struct rb_root *root,
298 BUG_ON(num != 0); 299 BUG_ON(num != 0);
299} 300}
300 301
301static void unmap_purged_grants(struct work_struct *work) 302void xen_blkbk_unmap_purged_grants(struct work_struct *work)
302{ 303{
303 struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST]; 304 struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
304 struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST]; 305 struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
@@ -320,7 +321,8 @@ static void unmap_purged_grants(struct work_struct *work)
320 pages[segs_to_unmap] = persistent_gnt->page; 321 pages[segs_to_unmap] = persistent_gnt->page;
321 322
322 if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST) { 323 if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST) {
323 ret = gnttab_unmap_refs(unmap, pages, segs_to_unmap); 324 ret = gnttab_unmap_refs(unmap, NULL, pages,
325 segs_to_unmap);
324 BUG_ON(ret); 326 BUG_ON(ret);
325 put_free_pages(blkif, pages, segs_to_unmap); 327 put_free_pages(blkif, pages, segs_to_unmap);
326 segs_to_unmap = 0; 328 segs_to_unmap = 0;
@@ -328,7 +330,7 @@ static void unmap_purged_grants(struct work_struct *work)
328 kfree(persistent_gnt); 330 kfree(persistent_gnt);
329 } 331 }
330 if (segs_to_unmap > 0) { 332 if (segs_to_unmap > 0) {
331 ret = gnttab_unmap_refs(unmap, pages, segs_to_unmap); 333 ret = gnttab_unmap_refs(unmap, NULL, pages, segs_to_unmap);
332 BUG_ON(ret); 334 BUG_ON(ret);
333 put_free_pages(blkif, pages, segs_to_unmap); 335 put_free_pages(blkif, pages, segs_to_unmap);
334 } 336 }
@@ -373,7 +375,7 @@ static void purge_persistent_gnt(struct xen_blkif *blkif)
373 375
374 pr_debug(DRV_PFX "Going to purge %u persistent grants\n", num_clean); 376 pr_debug(DRV_PFX "Going to purge %u persistent grants\n", num_clean);
375 377
376 INIT_LIST_HEAD(&blkif->persistent_purge_list); 378 BUG_ON(!list_empty(&blkif->persistent_purge_list));
377 root = &blkif->persistent_gnts; 379 root = &blkif->persistent_gnts;
378purge_list: 380purge_list:
379 foreach_grant_safe(persistent_gnt, n, root, node) { 381 foreach_grant_safe(persistent_gnt, n, root, node) {
@@ -418,7 +420,6 @@ finished:
418 blkif->vbd.overflow_max_grants = 0; 420 blkif->vbd.overflow_max_grants = 0;
419 421
420 /* We can defer this work */ 422 /* We can defer this work */
421 INIT_WORK(&blkif->persistent_purge_work, unmap_purged_grants);
422 schedule_work(&blkif->persistent_purge_work); 423 schedule_work(&blkif->persistent_purge_work);
423 pr_debug(DRV_PFX "Purged %u/%u\n", (total - num_clean), total); 424 pr_debug(DRV_PFX "Purged %u/%u\n", (total - num_clean), total);
424 return; 425 return;
@@ -623,9 +624,23 @@ purge_gnt_list:
623 print_stats(blkif); 624 print_stats(blkif);
624 } 625 }
625 626
626 /* Since we are shutting down remove all pages from the buffer */ 627 /* Drain pending purge work */
627 shrink_free_pagepool(blkif, 0 /* All */); 628 flush_work(&blkif->persistent_purge_work);
628 629
630 if (log_stats)
631 print_stats(blkif);
632
633 blkif->xenblkd = NULL;
634 xen_blkif_put(blkif);
635
636 return 0;
637}
638
639/*
640 * Remove persistent grants and empty the pool of free pages
641 */
642void xen_blkbk_free_caches(struct xen_blkif *blkif)
643{
629 /* Free all persistent grant pages */ 644 /* Free all persistent grant pages */
630 if (!RB_EMPTY_ROOT(&blkif->persistent_gnts)) 645 if (!RB_EMPTY_ROOT(&blkif->persistent_gnts))
631 free_persistent_gnts(blkif, &blkif->persistent_gnts, 646 free_persistent_gnts(blkif, &blkif->persistent_gnts,
@@ -634,13 +649,8 @@ purge_gnt_list:
634 BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts)); 649 BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts));
635 blkif->persistent_gnt_c = 0; 650 blkif->persistent_gnt_c = 0;
636 651
637 if (log_stats) 652 /* Since we are shutting down remove all pages from the buffer */
638 print_stats(blkif); 653 shrink_free_pagepool(blkif, 0 /* All */);
639
640 blkif->xenblkd = NULL;
641 xen_blkif_put(blkif);
642
643 return 0;
644} 654}
645 655
646/* 656/*
@@ -668,14 +678,15 @@ static void xen_blkbk_unmap(struct xen_blkif *blkif,
668 GNTMAP_host_map, pages[i]->handle); 678 GNTMAP_host_map, pages[i]->handle);
669 pages[i]->handle = BLKBACK_INVALID_HANDLE; 679 pages[i]->handle = BLKBACK_INVALID_HANDLE;
670 if (++invcount == BLKIF_MAX_SEGMENTS_PER_REQUEST) { 680 if (++invcount == BLKIF_MAX_SEGMENTS_PER_REQUEST) {
671 ret = gnttab_unmap_refs(unmap, unmap_pages, invcount); 681 ret = gnttab_unmap_refs(unmap, NULL, unmap_pages,
682 invcount);
672 BUG_ON(ret); 683 BUG_ON(ret);
673 put_free_pages(blkif, unmap_pages, invcount); 684 put_free_pages(blkif, unmap_pages, invcount);
674 invcount = 0; 685 invcount = 0;
675 } 686 }
676 } 687 }
677 if (invcount) { 688 if (invcount) {
678 ret = gnttab_unmap_refs(unmap, unmap_pages, invcount); 689 ret = gnttab_unmap_refs(unmap, NULL, unmap_pages, invcount);
679 BUG_ON(ret); 690 BUG_ON(ret);
680 put_free_pages(blkif, unmap_pages, invcount); 691 put_free_pages(blkif, unmap_pages, invcount);
681 } 692 }
@@ -737,7 +748,7 @@ again:
737 } 748 }
738 749
739 if (segs_to_map) { 750 if (segs_to_map) {
740 ret = gnttab_map_refs(map, pages_to_gnt, segs_to_map); 751 ret = gnttab_map_refs(map, NULL, pages_to_gnt, segs_to_map);
741 BUG_ON(ret); 752 BUG_ON(ret);
742 } 753 }
743 754
@@ -835,7 +846,7 @@ static int xen_blkbk_parse_indirect(struct blkif_request *req,
835 struct grant_page **pages = pending_req->indirect_pages; 846 struct grant_page **pages = pending_req->indirect_pages;
836 struct xen_blkif *blkif = pending_req->blkif; 847 struct xen_blkif *blkif = pending_req->blkif;
837 int indirect_grefs, rc, n, nseg, i; 848 int indirect_grefs, rc, n, nseg, i;
838 struct blkif_request_segment_aligned *segments = NULL; 849 struct blkif_request_segment *segments = NULL;
839 850
840 nseg = pending_req->nr_pages; 851 nseg = pending_req->nr_pages;
841 indirect_grefs = INDIRECT_PAGES(nseg); 852 indirect_grefs = INDIRECT_PAGES(nseg);
@@ -931,9 +942,7 @@ static void xen_blk_drain_io(struct xen_blkif *blkif)
931{ 942{
932 atomic_set(&blkif->drain, 1); 943 atomic_set(&blkif->drain, 1);
933 do { 944 do {
934 /* The initial value is one, and one refcnt taken at the 945 if (atomic_read(&blkif->inflight) == 0)
935 * start of the xen_blkif_schedule thread. */
936 if (atomic_read(&blkif->refcnt) <= 2)
937 break; 946 break;
938 wait_for_completion_interruptible_timeout( 947 wait_for_completion_interruptible_timeout(
939 &blkif->drain_complete, HZ); 948 &blkif->drain_complete, HZ);
@@ -973,17 +982,30 @@ static void __end_block_io_op(struct pending_req *pending_req, int error)
973 * the proper response on the ring. 982 * the proper response on the ring.
974 */ 983 */
975 if (atomic_dec_and_test(&pending_req->pendcnt)) { 984 if (atomic_dec_and_test(&pending_req->pendcnt)) {
976 xen_blkbk_unmap(pending_req->blkif, 985 struct xen_blkif *blkif = pending_req->blkif;
986
987 xen_blkbk_unmap(blkif,
977 pending_req->segments, 988 pending_req->segments,
978 pending_req->nr_pages); 989 pending_req->nr_pages);
979 make_response(pending_req->blkif, pending_req->id, 990 make_response(blkif, pending_req->id,
980 pending_req->operation, pending_req->status); 991 pending_req->operation, pending_req->status);
981 xen_blkif_put(pending_req->blkif); 992 free_req(blkif, pending_req);
982 if (atomic_read(&pending_req->blkif->refcnt) <= 2) { 993 /*
983 if (atomic_read(&pending_req->blkif->drain)) 994 * Make sure the request is freed before releasing blkif,
984 complete(&pending_req->blkif->drain_complete); 995 * or there could be a race between free_req and the
996 * cleanup done in xen_blkif_free during shutdown.
997 *
998 * NB: The fact that we might try to wake up pending_free_wq
999 * before drain_complete (in case there's a drain going on)
1000 * it's not a problem with our current implementation
1001 * because we can assure there's no thread waiting on
1002 * pending_free_wq if there's a drain going on, but it has
1003 * to be taken into account if the current model is changed.
1004 */
1005 if (atomic_dec_and_test(&blkif->inflight) && atomic_read(&blkif->drain)) {
1006 complete(&blkif->drain_complete);
985 } 1007 }
986 free_req(pending_req->blkif, pending_req); 1008 xen_blkif_put(blkif);
987 } 1009 }
988} 1010}
989 1011
@@ -1237,6 +1259,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
1237 * below (in "!bio") if we are handling a BLKIF_OP_DISCARD. 1259 * below (in "!bio") if we are handling a BLKIF_OP_DISCARD.
1238 */ 1260 */
1239 xen_blkif_get(blkif); 1261 xen_blkif_get(blkif);
1262 atomic_inc(&blkif->inflight);
1240 1263
1241 for (i = 0; i < nseg; i++) { 1264 for (i = 0; i < nseg; i++) {
1242 while ((bio == NULL) || 1265 while ((bio == NULL) ||
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index 8d8807563d99..be052773ad03 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -57,7 +57,7 @@
57#define MAX_INDIRECT_SEGMENTS 256 57#define MAX_INDIRECT_SEGMENTS 256
58 58
59#define SEGS_PER_INDIRECT_FRAME \ 59#define SEGS_PER_INDIRECT_FRAME \
60 (PAGE_SIZE/sizeof(struct blkif_request_segment_aligned)) 60 (PAGE_SIZE/sizeof(struct blkif_request_segment))
61#define MAX_INDIRECT_PAGES \ 61#define MAX_INDIRECT_PAGES \
62 ((MAX_INDIRECT_SEGMENTS + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) 62 ((MAX_INDIRECT_SEGMENTS + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME)
63#define INDIRECT_PAGES(_segs) \ 63#define INDIRECT_PAGES(_segs) \
@@ -278,6 +278,7 @@ struct xen_blkif {
278 /* for barrier (drain) requests */ 278 /* for barrier (drain) requests */
279 struct completion drain_complete; 279 struct completion drain_complete;
280 atomic_t drain; 280 atomic_t drain;
281 atomic_t inflight;
281 /* One thread per one blkif. */ 282 /* One thread per one blkif. */
282 struct task_struct *xenblkd; 283 struct task_struct *xenblkd;
283 unsigned int waiting_reqs; 284 unsigned int waiting_reqs;
@@ -376,6 +377,7 @@ int xen_blkif_xenbus_init(void);
376irqreturn_t xen_blkif_be_int(int irq, void *dev_id); 377irqreturn_t xen_blkif_be_int(int irq, void *dev_id);
377int xen_blkif_schedule(void *arg); 378int xen_blkif_schedule(void *arg);
378int xen_blkif_purge_persistent(void *arg); 379int xen_blkif_purge_persistent(void *arg);
380void xen_blkbk_free_caches(struct xen_blkif *blkif);
379 381
380int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt, 382int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt,
381 struct backend_info *be, int state); 383 struct backend_info *be, int state);
@@ -383,6 +385,7 @@ int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt,
383int xen_blkbk_barrier(struct xenbus_transaction xbt, 385int xen_blkbk_barrier(struct xenbus_transaction xbt,
384 struct backend_info *be, int state); 386 struct backend_info *be, int state);
385struct xenbus_device *xen_blkbk_xenbus(struct backend_info *be); 387struct xenbus_device *xen_blkbk_xenbus(struct backend_info *be);
388void xen_blkbk_unmap_purged_grants(struct work_struct *work);
386 389
387static inline void blkif_get_x86_32_req(struct blkif_request *dst, 390static inline void blkif_get_x86_32_req(struct blkif_request *dst,
388 struct blkif_x86_32_request *src) 391 struct blkif_x86_32_request *src)
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index c2014a0aa206..9a547e6b6ebf 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -125,8 +125,11 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
125 blkif->persistent_gnts.rb_node = NULL; 125 blkif->persistent_gnts.rb_node = NULL;
126 spin_lock_init(&blkif->free_pages_lock); 126 spin_lock_init(&blkif->free_pages_lock);
127 INIT_LIST_HEAD(&blkif->free_pages); 127 INIT_LIST_HEAD(&blkif->free_pages);
128 INIT_LIST_HEAD(&blkif->persistent_purge_list);
128 blkif->free_pages_num = 0; 129 blkif->free_pages_num = 0;
129 atomic_set(&blkif->persistent_gnt_in_use, 0); 130 atomic_set(&blkif->persistent_gnt_in_use, 0);
131 atomic_set(&blkif->inflight, 0);
132 INIT_WORK(&blkif->persistent_purge_work, xen_blkbk_unmap_purged_grants);
130 133
131 INIT_LIST_HEAD(&blkif->pending_free); 134 INIT_LIST_HEAD(&blkif->pending_free);
132 135
@@ -259,6 +262,17 @@ static void xen_blkif_free(struct xen_blkif *blkif)
259 if (!atomic_dec_and_test(&blkif->refcnt)) 262 if (!atomic_dec_and_test(&blkif->refcnt))
260 BUG(); 263 BUG();
261 264
265 /* Remove all persistent grants and the cache of ballooned pages. */
266 xen_blkbk_free_caches(blkif);
267
268 /* Make sure everything is drained before shutting down */
269 BUG_ON(blkif->persistent_gnt_c != 0);
270 BUG_ON(atomic_read(&blkif->persistent_gnt_in_use) != 0);
271 BUG_ON(blkif->free_pages_num != 0);
272 BUG_ON(!list_empty(&blkif->persistent_purge_list));
273 BUG_ON(!list_empty(&blkif->free_pages));
274 BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts));
275
262 /* Check that there is no request in use */ 276 /* Check that there is no request in use */
263 list_for_each_entry_safe(req, n, &blkif->pending_free, free_list) { 277 list_for_each_entry_safe(req, n, &blkif->pending_free, free_list) {
264 list_del(&req->free_list); 278 list_del(&req->free_list);
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8dcfb54f1603..efe1b4761735 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -162,7 +162,7 @@ static DEFINE_SPINLOCK(minor_lock);
162#define DEV_NAME "xvd" /* name in /dev */ 162#define DEV_NAME "xvd" /* name in /dev */
163 163
164#define SEGS_PER_INDIRECT_FRAME \ 164#define SEGS_PER_INDIRECT_FRAME \
165 (PAGE_SIZE/sizeof(struct blkif_request_segment_aligned)) 165 (PAGE_SIZE/sizeof(struct blkif_request_segment))
166#define INDIRECT_GREFS(_segs) \ 166#define INDIRECT_GREFS(_segs) \
167 ((_segs + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) 167 ((_segs + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME)
168 168
@@ -393,7 +393,7 @@ static int blkif_queue_request(struct request *req)
393 unsigned long id; 393 unsigned long id;
394 unsigned int fsect, lsect; 394 unsigned int fsect, lsect;
395 int i, ref, n; 395 int i, ref, n;
396 struct blkif_request_segment_aligned *segments = NULL; 396 struct blkif_request_segment *segments = NULL;
397 397
398 /* 398 /*
399 * Used to store if we are able to queue the request by just using 399 * Used to store if we are able to queue the request by just using
@@ -550,7 +550,7 @@ static int blkif_queue_request(struct request *req)
550 } else { 550 } else {
551 n = i % SEGS_PER_INDIRECT_FRAME; 551 n = i % SEGS_PER_INDIRECT_FRAME;
552 segments[n] = 552 segments[n] =
553 (struct blkif_request_segment_aligned) { 553 (struct blkif_request_segment) {
554 .gref = ref, 554 .gref = ref,
555 .first_sect = fsect, 555 .first_sect = fsect,
556 .last_sect = lsect }; 556 .last_sect = lsect };
@@ -1904,13 +1904,16 @@ static void blkback_changed(struct xenbus_device *dev,
1904 case XenbusStateReconfiguring: 1904 case XenbusStateReconfiguring:
1905 case XenbusStateReconfigured: 1905 case XenbusStateReconfigured:
1906 case XenbusStateUnknown: 1906 case XenbusStateUnknown:
1907 case XenbusStateClosed:
1908 break; 1907 break;
1909 1908
1910 case XenbusStateConnected: 1909 case XenbusStateConnected:
1911 blkfront_connect(info); 1910 blkfront_connect(info);
1912 break; 1911 break;
1913 1912
1913 case XenbusStateClosed:
1914 if (dev->state == XenbusStateClosed)
1915 break;
1916 /* Missed the backend's Closing state -- fallthrough */
1914 case XenbusStateClosing: 1917 case XenbusStateClosing:
1915 blkfront_closing(info); 1918 blkfront_closing(info);
1916 break; 1919 break;
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index fa3243d71c76..1386749b48ff 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -499,6 +499,7 @@ config RAW_DRIVER
499config MAX_RAW_DEVS 499config MAX_RAW_DEVS
500 int "Maximum number of RAW devices to support (1-65536)" 500 int "Maximum number of RAW devices to support (1-65536)"
501 depends on RAW_DRIVER 501 depends on RAW_DRIVER
502 range 1 65536
502 default "256" 503 default "256"
503 help 504 help
504 The maximum number of RAW devices that are supported. 505 The maximum number of RAW devices that are supported.
diff --git a/drivers/char/raw.c b/drivers/char/raw.c
index f3223aac4df1..6e8d65e9b1d3 100644
--- a/drivers/char/raw.c
+++ b/drivers/char/raw.c
@@ -190,7 +190,7 @@ static int bind_get(int number, dev_t *dev)
190 struct raw_device_data *rawdev; 190 struct raw_device_data *rawdev;
191 struct block_device *bdev; 191 struct block_device *bdev;
192 192
193 if (number <= 0 || number >= MAX_RAW_MINORS) 193 if (number <= 0 || number >= max_raw_minors)
194 return -EINVAL; 194 return -EINVAL;
195 195
196 rawdev = &raw_devices[number]; 196 rawdev = &raw_devices[number];
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index feea87cc6b8f..6928d094451d 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -890,12 +890,10 @@ static int pipe_to_sg(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
890 } else { 890 } else {
891 /* Failback to copying a page */ 891 /* Failback to copying a page */
892 struct page *page = alloc_page(GFP_KERNEL); 892 struct page *page = alloc_page(GFP_KERNEL);
893 char *src = buf->ops->map(pipe, buf, 1); 893 char *src;
894 char *dst;
895 894
896 if (!page) 895 if (!page)
897 return -ENOMEM; 896 return -ENOMEM;
898 dst = kmap(page);
899 897
900 offset = sd->pos & ~PAGE_MASK; 898 offset = sd->pos & ~PAGE_MASK;
901 899
@@ -903,9 +901,8 @@ static int pipe_to_sg(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
903 if (len + offset > PAGE_SIZE) 901 if (len + offset > PAGE_SIZE)
904 len = PAGE_SIZE - offset; 902 len = PAGE_SIZE - offset;
905 903
906 memcpy(dst + offset, src + buf->offset, len); 904 src = buf->ops->map(pipe, buf, 1);
907 905 memcpy(page_address(page) + offset, src + buf->offset, len);
908 kunmap(page);
909 buf->ops->unmap(pipe, buf, src); 906 buf->ops->unmap(pipe, buf, src);
910 907
911 sg_set_page(&(sgl->sg[sgl->n]), page, len, offset); 908 sg_set_page(&(sgl->sg[sgl->n]), page, len, offset);
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index cd6950fd8caf..6510ec4f45ff 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -140,3 +140,6 @@ config VF_PIT_TIMER
140 bool 140 bool
141 help 141 help
142 Support for Period Interrupt Timer on Freescale Vybrid Family SoCs. 142 Support for Period Interrupt Timer on Freescale Vybrid Family SoCs.
143
144config CLKSRC_QCOM
145 bool
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index c7ca50a9c232..2e0c0cc0a014 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -32,6 +32,7 @@ obj-$(CONFIG_CLKSRC_EFM32) += time-efm32.o
32obj-$(CONFIG_CLKSRC_EXYNOS_MCT) += exynos_mct.o 32obj-$(CONFIG_CLKSRC_EXYNOS_MCT) += exynos_mct.o
33obj-$(CONFIG_CLKSRC_SAMSUNG_PWM) += samsung_pwm_timer.o 33obj-$(CONFIG_CLKSRC_SAMSUNG_PWM) += samsung_pwm_timer.o
34obj-$(CONFIG_VF_PIT_TIMER) += vf_pit_timer.o 34obj-$(CONFIG_VF_PIT_TIMER) += vf_pit_timer.o
35obj-$(CONFIG_CLKSRC_QCOM) += qcom-timer.o
35 36
36obj-$(CONFIG_ARM_ARCH_TIMER) += arm_arch_timer.o 37obj-$(CONFIG_ARM_ARCH_TIMER) += arm_arch_timer.o
37obj-$(CONFIG_ARM_GLOBAL_TIMER) += arm_global_timer.o 38obj-$(CONFIG_ARM_GLOBAL_TIMER) += arm_global_timer.o
diff --git a/drivers/clocksource/bcm_kona_timer.c b/drivers/clocksource/bcm_kona_timer.c
index 974b2db2fe10..0595dc6c453e 100644
--- a/drivers/clocksource/bcm_kona_timer.c
+++ b/drivers/clocksource/bcm_kona_timer.c
@@ -99,31 +99,6 @@ kona_timer_get_counter(void *timer_base, uint32_t *msw, uint32_t *lsw)
99 return; 99 return;
100} 100}
101 101
102static void __init kona_timers_init(struct device_node *node)
103{
104 u32 freq;
105 struct clk *external_clk;
106
107 external_clk = of_clk_get_by_name(node, NULL);
108
109 if (!IS_ERR(external_clk)) {
110 arch_timer_rate = clk_get_rate(external_clk);
111 clk_prepare_enable(external_clk);
112 } else if (!of_property_read_u32(node, "clock-frequency", &freq)) {
113 arch_timer_rate = freq;
114 } else {
115 panic("unable to determine clock-frequency");
116 }
117
118 /* Setup IRQ numbers */
119 timers.tmr_irq = irq_of_parse_and_map(node, 0);
120
121 /* Setup IO addresses */
122 timers.tmr_regs = of_iomap(node, 0);
123
124 kona_timer_disable_and_clear(timers.tmr_regs);
125}
126
127static int kona_timer_set_next_event(unsigned long clc, 102static int kona_timer_set_next_event(unsigned long clc,
128 struct clock_event_device *unused) 103 struct clock_event_device *unused)
129{ 104{
@@ -198,7 +173,34 @@ static struct irqaction kona_timer_irq = {
198 173
199static void __init kona_timer_init(struct device_node *node) 174static void __init kona_timer_init(struct device_node *node)
200{ 175{
201 kona_timers_init(node); 176 u32 freq;
177 struct clk *external_clk;
178
179 if (!of_device_is_available(node)) {
180 pr_info("Kona Timer v1 marked as disabled in device tree\n");
181 return;
182 }
183
184 external_clk = of_clk_get_by_name(node, NULL);
185
186 if (!IS_ERR(external_clk)) {
187 arch_timer_rate = clk_get_rate(external_clk);
188 clk_prepare_enable(external_clk);
189 } else if (!of_property_read_u32(node, "clock-frequency", &freq)) {
190 arch_timer_rate = freq;
191 } else {
192 pr_err("Kona Timer v1 unable to determine clock-frequency");
193 return;
194 }
195
196 /* Setup IRQ numbers */
197 timers.tmr_irq = irq_of_parse_and_map(node, 0);
198
199 /* Setup IO addresses */
200 timers.tmr_regs = of_iomap(node, 0);
201
202 kona_timer_disable_and_clear(timers.tmr_regs);
203
202 kona_timer_clockevents_init(); 204 kona_timer_clockevents_init();
203 setup_irq(timers.tmr_irq, &kona_timer_irq); 205 setup_irq(timers.tmr_irq, &kona_timer_irq);
204 kona_timer_set_next_event((arch_timer_rate / HZ), NULL); 206 kona_timer_set_next_event((arch_timer_rate / HZ), NULL);
diff --git a/arch/arm/mach-msm/timer.c b/drivers/clocksource/qcom-timer.c
index fd1644987534..e807acf4c665 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/drivers/clocksource/qcom-timer.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * 2 *
3 * Copyright (C) 2007 Google, Inc. 3 * Copyright (C) 2007 Google, Inc.
4 * Copyright (c) 2009-2012, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2009-2012,2014, The Linux Foundation. All rights reserved.
5 * 5 *
6 * This software is licensed under the terms of the GNU General Public 6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and 7 * License version 2, as published by the Free Software Foundation, and
@@ -26,10 +26,6 @@
26#include <linux/of_irq.h> 26#include <linux/of_irq.h>
27#include <linux/sched_clock.h> 27#include <linux/sched_clock.h>
28 28
29#include <asm/mach/time.h>
30
31#include "common.h"
32
33#define TIMER_MATCH_VAL 0x0000 29#define TIMER_MATCH_VAL 0x0000
34#define TIMER_COUNT_VAL 0x0004 30#define TIMER_COUNT_VAL 0x0004
35#define TIMER_ENABLE 0x0008 31#define TIMER_ENABLE 0x0008
@@ -110,15 +106,6 @@ static notrace cycle_t msm_read_timer_count(struct clocksource *cs)
110 return readl_relaxed(source_base + TIMER_COUNT_VAL); 106 return readl_relaxed(source_base + TIMER_COUNT_VAL);
111} 107}
112 108
113static notrace cycle_t msm_read_timer_count_shift(struct clocksource *cs)
114{
115 /*
116 * Shift timer count down by a constant due to unreliable lower bits
117 * on some targets.
118 */
119 return msm_read_timer_count(cs) >> MSM_DGT_SHIFT;
120}
121
122static struct clocksource msm_clocksource = { 109static struct clocksource msm_clocksource = {
123 .name = "dg_timer", 110 .name = "dg_timer",
124 .rating = 300, 111 .rating = 300,
@@ -232,7 +219,7 @@ err:
232 sched_clock_register(msm_sched_clock_read, sched_bits, dgt_hz); 219 sched_clock_register(msm_sched_clock_read, sched_bits, dgt_hz);
233} 220}
234 221
235#ifdef CONFIG_OF 222#ifdef CONFIG_ARCH_QCOM
236static void __init msm_dt_timer_init(struct device_node *np) 223static void __init msm_dt_timer_init(struct device_node *np)
237{ 224{
238 u32 freq; 225 u32 freq;
@@ -285,7 +272,7 @@ static void __init msm_dt_timer_init(struct device_node *np)
285} 272}
286CLOCKSOURCE_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init); 273CLOCKSOURCE_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init);
287CLOCKSOURCE_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init); 274CLOCKSOURCE_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init);
288#endif 275#else
289 276
290static int __init msm_timer_map(phys_addr_t addr, u32 event, u32 source, 277static int __init msm_timer_map(phys_addr_t addr, u32 event, u32 source,
291 u32 sts) 278 u32 sts)
@@ -305,6 +292,15 @@ static int __init msm_timer_map(phys_addr_t addr, u32 event, u32 source,
305 return 0; 292 return 0;
306} 293}
307 294
295static notrace cycle_t msm_read_timer_count_shift(struct clocksource *cs)
296{
297 /*
298 * Shift timer count down by a constant due to unreliable lower bits
299 * on some targets.
300 */
301 return msm_read_timer_count(cs) >> MSM_DGT_SHIFT;
302}
303
308void __init msm7x01_timer_init(void) 304void __init msm7x01_timer_init(void)
309{ 305{
310 struct clocksource *cs = &msm_clocksource; 306 struct clocksource *cs = &msm_clocksource;
@@ -331,3 +327,4 @@ void __init qsd8x50_timer_init(void)
331 return; 327 return;
332 msm_timer_init(19200000 / 4, 32, 7, false); 328 msm_timer_init(19200000 / 4, 32, 7, false);
333} 329}
330#endif
diff --git a/drivers/clocksource/timer-marco.c b/drivers/clocksource/timer-marco.c
index 09a17d9a6594..b52e1c078b99 100644
--- a/drivers/clocksource/timer-marco.c
+++ b/drivers/clocksource/timer-marco.c
@@ -19,7 +19,8 @@
19#include <linux/of_irq.h> 19#include <linux/of_irq.h>
20#include <linux/of_address.h> 20#include <linux/of_address.h>
21#include <linux/sched_clock.h> 21#include <linux/sched_clock.h>
22#include <asm/mach/time.h> 22
23#define MARCO_CLOCK_FREQ 1000000
23 24
24#define SIRFSOC_TIMER_32COUNTER_0_CTRL 0x0000 25#define SIRFSOC_TIMER_32COUNTER_0_CTRL 0x0000
25#define SIRFSOC_TIMER_32COUNTER_1_CTRL 0x0004 26#define SIRFSOC_TIMER_32COUNTER_1_CTRL 0x0004
@@ -191,7 +192,7 @@ static int sirfsoc_local_timer_setup(struct clock_event_device *ce)
191 ce->rating = 200; 192 ce->rating = 200;
192 ce->set_mode = sirfsoc_timer_set_mode; 193 ce->set_mode = sirfsoc_timer_set_mode;
193 ce->set_next_event = sirfsoc_timer_set_next_event; 194 ce->set_next_event = sirfsoc_timer_set_next_event;
194 clockevents_calc_mult_shift(ce, CLOCK_TICK_RATE, 60); 195 clockevents_calc_mult_shift(ce, MARCO_CLOCK_FREQ, 60);
195 ce->max_delta_ns = clockevent_delta2ns(-2, ce); 196 ce->max_delta_ns = clockevent_delta2ns(-2, ce);
196 ce->min_delta_ns = clockevent_delta2ns(2, ce); 197 ce->min_delta_ns = clockevent_delta2ns(2, ce);
197 ce->cpumask = cpumask_of(cpu); 198 ce->cpumask = cpumask_of(cpu);
@@ -263,11 +264,11 @@ static void __init sirfsoc_marco_timer_init(void)
263 BUG_ON(IS_ERR(clk)); 264 BUG_ON(IS_ERR(clk));
264 rate = clk_get_rate(clk); 265 rate = clk_get_rate(clk);
265 266
266 BUG_ON(rate < CLOCK_TICK_RATE); 267 BUG_ON(rate < MARCO_CLOCK_FREQ);
267 BUG_ON(rate % CLOCK_TICK_RATE); 268 BUG_ON(rate % MARCO_CLOCK_FREQ);
268 269
269 /* Initialize the timer dividers */ 270 /* Initialize the timer dividers */
270 timer_div = rate / CLOCK_TICK_RATE - 1; 271 timer_div = rate / MARCO_CLOCK_FREQ - 1;
271 writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL); 272 writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL);
272 writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL); 273 writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL);
273 writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_1_CTRL); 274 writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_1_CTRL);
@@ -283,7 +284,7 @@ static void __init sirfsoc_marco_timer_init(void)
283 /* Clear all interrupts */ 284 /* Clear all interrupts */
284 writel_relaxed(0xFFFF, sirfsoc_timer_base + SIRFSOC_TIMER_INTR_STATUS); 285 writel_relaxed(0xFFFF, sirfsoc_timer_base + SIRFSOC_TIMER_INTR_STATUS);
285 286
286 BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, CLOCK_TICK_RATE)); 287 BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, MARCO_CLOCK_FREQ));
287 288
288 sirfsoc_clockevent_init(); 289 sirfsoc_clockevent_init();
289} 290}
diff --git a/drivers/clocksource/timer-prima2.c b/drivers/clocksource/timer-prima2.c
index 8a492d34ff9f..1a6b2d6356d6 100644
--- a/drivers/clocksource/timer-prima2.c
+++ b/drivers/clocksource/timer-prima2.c
@@ -21,6 +21,8 @@
21#include <linux/sched_clock.h> 21#include <linux/sched_clock.h>
22#include <asm/mach/time.h> 22#include <asm/mach/time.h>
23 23
24#define PRIMA2_CLOCK_FREQ 1000000
25
24#define SIRFSOC_TIMER_COUNTER_LO 0x0000 26#define SIRFSOC_TIMER_COUNTER_LO 0x0000
25#define SIRFSOC_TIMER_COUNTER_HI 0x0004 27#define SIRFSOC_TIMER_COUNTER_HI 0x0004
26#define SIRFSOC_TIMER_MATCH_0 0x0008 28#define SIRFSOC_TIMER_MATCH_0 0x0008
@@ -173,7 +175,7 @@ static u64 notrace sirfsoc_read_sched_clock(void)
173static void __init sirfsoc_clockevent_init(void) 175static void __init sirfsoc_clockevent_init(void)
174{ 176{
175 sirfsoc_clockevent.cpumask = cpumask_of(0); 177 sirfsoc_clockevent.cpumask = cpumask_of(0);
176 clockevents_config_and_register(&sirfsoc_clockevent, CLOCK_TICK_RATE, 178 clockevents_config_and_register(&sirfsoc_clockevent, PRIMA2_CLOCK_FREQ,
177 2, -2); 179 2, -2);
178} 180}
179 181
@@ -190,8 +192,8 @@ static void __init sirfsoc_prima2_timer_init(struct device_node *np)
190 192
191 rate = clk_get_rate(clk); 193 rate = clk_get_rate(clk);
192 194
193 BUG_ON(rate < CLOCK_TICK_RATE); 195 BUG_ON(rate < PRIMA2_CLOCK_FREQ);
194 BUG_ON(rate % CLOCK_TICK_RATE); 196 BUG_ON(rate % PRIMA2_CLOCK_FREQ);
195 197
196 sirfsoc_timer_base = of_iomap(np, 0); 198 sirfsoc_timer_base = of_iomap(np, 0);
197 if (!sirfsoc_timer_base) 199 if (!sirfsoc_timer_base)
@@ -199,14 +201,16 @@ static void __init sirfsoc_prima2_timer_init(struct device_node *np)
199 201
200 sirfsoc_timer_irq.irq = irq_of_parse_and_map(np, 0); 202 sirfsoc_timer_irq.irq = irq_of_parse_and_map(np, 0);
201 203
202 writel_relaxed(rate / CLOCK_TICK_RATE / 2 - 1, sirfsoc_timer_base + SIRFSOC_TIMER_DIV); 204 writel_relaxed(rate / PRIMA2_CLOCK_FREQ / 2 - 1,
205 sirfsoc_timer_base + SIRFSOC_TIMER_DIV);
203 writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO); 206 writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO);
204 writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI); 207 writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI);
205 writel_relaxed(BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_STATUS); 208 writel_relaxed(BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_STATUS);
206 209
207 BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, CLOCK_TICK_RATE)); 210 BUG_ON(clocksource_register_hz(&sirfsoc_clocksource,
211 PRIMA2_CLOCK_FREQ));
208 212
209 sched_clock_register(sirfsoc_read_sched_clock, 64, CLOCK_TICK_RATE); 213 sched_clock_register(sirfsoc_read_sched_clock, 64, PRIMA2_CLOCK_FREQ);
210 214
211 BUG_ON(setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq)); 215 BUG_ON(setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq));
212 216
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 7e257b233602..c788abf1c457 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -51,12 +51,11 @@ static inline int32_t div_fp(int32_t x, int32_t y)
51 return div_s64((int64_t)x << FRAC_BITS, (int64_t)y); 51 return div_s64((int64_t)x << FRAC_BITS, (int64_t)y);
52} 52}
53 53
54static u64 energy_divisor;
55
56struct sample { 54struct sample {
57 int32_t core_pct_busy; 55 int32_t core_pct_busy;
58 u64 aperf; 56 u64 aperf;
59 u64 mperf; 57 u64 mperf;
58 unsigned long long tsc;
60 int freq; 59 int freq;
61}; 60};
62 61
@@ -96,6 +95,7 @@ struct cpudata {
96 95
97 u64 prev_aperf; 96 u64 prev_aperf;
98 u64 prev_mperf; 97 u64 prev_mperf;
98 unsigned long long prev_tsc;
99 int sample_ptr; 99 int sample_ptr;
100 struct sample samples[SAMPLE_COUNT]; 100 struct sample samples[SAMPLE_COUNT];
101}; 101};
@@ -548,30 +548,41 @@ static inline void intel_pstate_calc_busy(struct cpudata *cpu,
548 struct sample *sample) 548 struct sample *sample)
549{ 549{
550 u64 core_pct; 550 u64 core_pct;
551 core_pct = div64_u64(int_tofp(sample->aperf * 100), 551 u64 c0_pct;
552 sample->mperf); 552
553 sample->freq = fp_toint(cpu->pstate.max_pstate * core_pct * 1000); 553 core_pct = div64_u64(sample->aperf * 100, sample->mperf);
554 554
555 sample->core_pct_busy = core_pct; 555 c0_pct = div64_u64(sample->mperf * 100, sample->tsc);
556 sample->freq = fp_toint(
557 mul_fp(int_tofp(cpu->pstate.max_pstate),
558 int_tofp(core_pct * 1000)));
559
560 sample->core_pct_busy = mul_fp(int_tofp(core_pct),
561 div_fp(int_tofp(c0_pct + 1), int_tofp(100)));
556} 562}
557 563
558static inline void intel_pstate_sample(struct cpudata *cpu) 564static inline void intel_pstate_sample(struct cpudata *cpu)
559{ 565{
560 u64 aperf, mperf; 566 u64 aperf, mperf;
567 unsigned long long tsc;
561 568
562 rdmsrl(MSR_IA32_APERF, aperf); 569 rdmsrl(MSR_IA32_APERF, aperf);
563 rdmsrl(MSR_IA32_MPERF, mperf); 570 rdmsrl(MSR_IA32_MPERF, mperf);
571 tsc = native_read_tsc();
564 572
565 cpu->sample_ptr = (cpu->sample_ptr + 1) % SAMPLE_COUNT; 573 cpu->sample_ptr = (cpu->sample_ptr + 1) % SAMPLE_COUNT;
566 cpu->samples[cpu->sample_ptr].aperf = aperf; 574 cpu->samples[cpu->sample_ptr].aperf = aperf;
567 cpu->samples[cpu->sample_ptr].mperf = mperf; 575 cpu->samples[cpu->sample_ptr].mperf = mperf;
576 cpu->samples[cpu->sample_ptr].tsc = tsc;
568 cpu->samples[cpu->sample_ptr].aperf -= cpu->prev_aperf; 577 cpu->samples[cpu->sample_ptr].aperf -= cpu->prev_aperf;
569 cpu->samples[cpu->sample_ptr].mperf -= cpu->prev_mperf; 578 cpu->samples[cpu->sample_ptr].mperf -= cpu->prev_mperf;
579 cpu->samples[cpu->sample_ptr].tsc -= cpu->prev_tsc;
570 580
571 intel_pstate_calc_busy(cpu, &cpu->samples[cpu->sample_ptr]); 581 intel_pstate_calc_busy(cpu, &cpu->samples[cpu->sample_ptr]);
572 582
573 cpu->prev_aperf = aperf; 583 cpu->prev_aperf = aperf;
574 cpu->prev_mperf = mperf; 584 cpu->prev_mperf = mperf;
585 cpu->prev_tsc = tsc;
575} 586}
576 587
577static inline void intel_pstate_set_sample_time(struct cpudata *cpu) 588static inline void intel_pstate_set_sample_time(struct cpudata *cpu)
@@ -617,12 +628,10 @@ static void intel_pstate_timer_func(unsigned long __data)
617{ 628{
618 struct cpudata *cpu = (struct cpudata *) __data; 629 struct cpudata *cpu = (struct cpudata *) __data;
619 struct sample *sample; 630 struct sample *sample;
620 u64 energy;
621 631
622 intel_pstate_sample(cpu); 632 intel_pstate_sample(cpu);
623 633
624 sample = &cpu->samples[cpu->sample_ptr]; 634 sample = &cpu->samples[cpu->sample_ptr];
625 rdmsrl(MSR_PKG_ENERGY_STATUS, energy);
626 635
627 intel_pstate_adjust_busy_pstate(cpu); 636 intel_pstate_adjust_busy_pstate(cpu);
628 637
@@ -631,7 +640,6 @@ static void intel_pstate_timer_func(unsigned long __data)
631 cpu->pstate.current_pstate, 640 cpu->pstate.current_pstate,
632 sample->mperf, 641 sample->mperf,
633 sample->aperf, 642 sample->aperf,
634 div64_u64(energy, energy_divisor),
635 sample->freq); 643 sample->freq);
636 644
637 intel_pstate_set_sample_time(cpu); 645 intel_pstate_set_sample_time(cpu);
@@ -913,7 +921,6 @@ static int __init intel_pstate_init(void)
913 int cpu, rc = 0; 921 int cpu, rc = 0;
914 const struct x86_cpu_id *id; 922 const struct x86_cpu_id *id;
915 struct cpu_defaults *cpu_info; 923 struct cpu_defaults *cpu_info;
916 u64 units;
917 924
918 if (no_load) 925 if (no_load)
919 return -ENODEV; 926 return -ENODEV;
@@ -947,9 +954,6 @@ static int __init intel_pstate_init(void)
947 if (rc) 954 if (rc)
948 goto out; 955 goto out;
949 956
950 rdmsrl(MSR_RAPL_POWER_UNIT, units);
951 energy_divisor = 1 << ((units >> 8) & 0x1f); /* bits{12:8} */
952
953 intel_pstate_debug_expose_params(); 957 intel_pstate_debug_expose_params();
954 intel_pstate_sysfs_expose_params(); 958 intel_pstate_sysfs_expose_params();
955 959
diff --git a/drivers/crypto/nx/nx-842.c b/drivers/crypto/nx/nx-842.c
index 6c4c000671c5..1e5481d88a26 100644
--- a/drivers/crypto/nx/nx-842.c
+++ b/drivers/crypto/nx/nx-842.c
@@ -158,6 +158,15 @@ static inline unsigned long nx842_get_scatterlist_size(
158 return sl->entry_nr * sizeof(struct nx842_slentry); 158 return sl->entry_nr * sizeof(struct nx842_slentry);
159} 159}
160 160
161static inline unsigned long nx842_get_pa(void *addr)
162{
163 if (is_vmalloc_addr(addr))
164 return page_to_phys(vmalloc_to_page(addr))
165 + offset_in_page(addr);
166 else
167 return __pa(addr);
168}
169
161static int nx842_build_scatterlist(unsigned long buf, int len, 170static int nx842_build_scatterlist(unsigned long buf, int len,
162 struct nx842_scatterlist *sl) 171 struct nx842_scatterlist *sl)
163{ 172{
@@ -168,7 +177,7 @@ static int nx842_build_scatterlist(unsigned long buf, int len,
168 177
169 entry = sl->entries; 178 entry = sl->entries;
170 while (len) { 179 while (len) {
171 entry->ptr = __pa(buf); 180 entry->ptr = nx842_get_pa((void *)buf);
172 nextpage = ALIGN(buf + 1, NX842_HW_PAGE_SIZE); 181 nextpage = ALIGN(buf + 1, NX842_HW_PAGE_SIZE);
173 if (nextpage < buf + len) { 182 if (nextpage < buf + len) {
174 /* we aren't at the end yet */ 183 /* we aren't at the end yet */
@@ -370,8 +379,8 @@ int nx842_compress(const unsigned char *in, unsigned int inlen,
370 op.flags = NX842_OP_COMPRESS; 379 op.flags = NX842_OP_COMPRESS;
371 csbcpb = &workmem->csbcpb; 380 csbcpb = &workmem->csbcpb;
372 memset(csbcpb, 0, sizeof(*csbcpb)); 381 memset(csbcpb, 0, sizeof(*csbcpb));
373 op.csbcpb = __pa(csbcpb); 382 op.csbcpb = nx842_get_pa(csbcpb);
374 op.out = __pa(slout.entries); 383 op.out = nx842_get_pa(slout.entries);
375 384
376 for (i = 0; i < hdr->blocks_nr; i++) { 385 for (i = 0; i < hdr->blocks_nr; i++) {
377 /* 386 /*
@@ -401,13 +410,13 @@ int nx842_compress(const unsigned char *in, unsigned int inlen,
401 */ 410 */
402 if (likely(max_sync_size == NX842_HW_PAGE_SIZE)) { 411 if (likely(max_sync_size == NX842_HW_PAGE_SIZE)) {
403 /* Create direct DDE */ 412 /* Create direct DDE */
404 op.in = __pa(inbuf); 413 op.in = nx842_get_pa((void *)inbuf);
405 op.inlen = max_sync_size; 414 op.inlen = max_sync_size;
406 415
407 } else { 416 } else {
408 /* Create indirect DDE (scatterlist) */ 417 /* Create indirect DDE (scatterlist) */
409 nx842_build_scatterlist(inbuf, max_sync_size, &slin); 418 nx842_build_scatterlist(inbuf, max_sync_size, &slin);
410 op.in = __pa(slin.entries); 419 op.in = nx842_get_pa(slin.entries);
411 op.inlen = -nx842_get_scatterlist_size(&slin); 420 op.inlen = -nx842_get_scatterlist_size(&slin);
412 } 421 }
413 422
@@ -565,7 +574,7 @@ int nx842_decompress(const unsigned char *in, unsigned int inlen,
565 op.flags = NX842_OP_DECOMPRESS; 574 op.flags = NX842_OP_DECOMPRESS;
566 csbcpb = &workmem->csbcpb; 575 csbcpb = &workmem->csbcpb;
567 memset(csbcpb, 0, sizeof(*csbcpb)); 576 memset(csbcpb, 0, sizeof(*csbcpb));
568 op.csbcpb = __pa(csbcpb); 577 op.csbcpb = nx842_get_pa(csbcpb);
569 578
570 /* 579 /*
571 * max_sync_size may have changed since compression, 580 * max_sync_size may have changed since compression,
@@ -597,12 +606,12 @@ int nx842_decompress(const unsigned char *in, unsigned int inlen,
597 if (likely((inbuf & NX842_HW_PAGE_MASK) == 606 if (likely((inbuf & NX842_HW_PAGE_MASK) ==
598 ((inbuf + hdr->sizes[i] - 1) & NX842_HW_PAGE_MASK))) { 607 ((inbuf + hdr->sizes[i] - 1) & NX842_HW_PAGE_MASK))) {
599 /* Create direct DDE */ 608 /* Create direct DDE */
600 op.in = __pa(inbuf); 609 op.in = nx842_get_pa((void *)inbuf);
601 op.inlen = hdr->sizes[i]; 610 op.inlen = hdr->sizes[i];
602 } else { 611 } else {
603 /* Create indirect DDE (scatterlist) */ 612 /* Create indirect DDE (scatterlist) */
604 nx842_build_scatterlist(inbuf, hdr->sizes[i] , &slin); 613 nx842_build_scatterlist(inbuf, hdr->sizes[i] , &slin);
605 op.in = __pa(slin.entries); 614 op.in = nx842_get_pa(slin.entries);
606 op.inlen = -nx842_get_scatterlist_size(&slin); 615 op.inlen = -nx842_get_scatterlist_size(&slin);
607 } 616 }
608 617
@@ -613,12 +622,12 @@ int nx842_decompress(const unsigned char *in, unsigned int inlen,
613 */ 622 */
614 if (likely(max_sync_size == NX842_HW_PAGE_SIZE)) { 623 if (likely(max_sync_size == NX842_HW_PAGE_SIZE)) {
615 /* Create direct DDE */ 624 /* Create direct DDE */
616 op.out = __pa(outbuf); 625 op.out = nx842_get_pa((void *)outbuf);
617 op.outlen = max_sync_size; 626 op.outlen = max_sync_size;
618 } else { 627 } else {
619 /* Create indirect DDE (scatterlist) */ 628 /* Create indirect DDE (scatterlist) */
620 nx842_build_scatterlist(outbuf, max_sync_size, &slout); 629 nx842_build_scatterlist(outbuf, max_sync_size, &slout);
621 op.out = __pa(slout.entries); 630 op.out = nx842_get_pa(slout.entries);
622 op.outlen = -nx842_get_scatterlist_size(&slout); 631 op.outlen = -nx842_get_scatterlist_size(&slout);
623 } 632 }
624 633
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
index 9bed1a2a67a1..605b016bcea4 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
@@ -346,6 +346,7 @@ config MOXART_DMA
346 tristate "MOXART DMA support" 346 tristate "MOXART DMA support"
347 depends on ARCH_MOXART 347 depends on ARCH_MOXART
348 select DMA_ENGINE 348 select DMA_ENGINE
349 select DMA_OF
349 select DMA_VIRTUAL_CHANNELS 350 select DMA_VIRTUAL_CHANNELS
350 help 351 help
351 Enable support for the MOXA ART SoC DMA controller. 352 Enable support for the MOXA ART SoC DMA controller.
diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
index 53fb0c8365b0..766b68ed505c 100644
--- a/drivers/dma/mv_xor.c
+++ b/drivers/dma/mv_xor.c
@@ -497,8 +497,8 @@ mv_xor_tx_submit(struct dma_async_tx_descriptor *tx)
497 if (!mv_can_chain(grp_start)) 497 if (!mv_can_chain(grp_start))
498 goto submit_done; 498 goto submit_done;
499 499
500 dev_dbg(mv_chan_to_devp(mv_chan), "Append to last desc %x\n", 500 dev_dbg(mv_chan_to_devp(mv_chan), "Append to last desc %pa\n",
501 old_chain_tail->async_tx.phys); 501 &old_chain_tail->async_tx.phys);
502 502
503 /* fix up the hardware chain */ 503 /* fix up the hardware chain */
504 mv_desc_set_next_desc(old_chain_tail, grp_start->async_tx.phys); 504 mv_desc_set_next_desc(old_chain_tail, grp_start->async_tx.phys);
@@ -527,7 +527,8 @@ submit_done:
527/* returns the number of allocated descriptors */ 527/* returns the number of allocated descriptors */
528static int mv_xor_alloc_chan_resources(struct dma_chan *chan) 528static int mv_xor_alloc_chan_resources(struct dma_chan *chan)
529{ 529{
530 char *hw_desc; 530 void *virt_desc;
531 dma_addr_t dma_desc;
531 int idx; 532 int idx;
532 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); 533 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
533 struct mv_xor_desc_slot *slot = NULL; 534 struct mv_xor_desc_slot *slot = NULL;
@@ -542,17 +543,16 @@ static int mv_xor_alloc_chan_resources(struct dma_chan *chan)
542 " %d descriptor slots", idx); 543 " %d descriptor slots", idx);
543 break; 544 break;
544 } 545 }
545 hw_desc = (char *) mv_chan->dma_desc_pool_virt; 546 virt_desc = mv_chan->dma_desc_pool_virt;
546 slot->hw_desc = (void *) &hw_desc[idx * MV_XOR_SLOT_SIZE]; 547 slot->hw_desc = virt_desc + idx * MV_XOR_SLOT_SIZE;
547 548
548 dma_async_tx_descriptor_init(&slot->async_tx, chan); 549 dma_async_tx_descriptor_init(&slot->async_tx, chan);
549 slot->async_tx.tx_submit = mv_xor_tx_submit; 550 slot->async_tx.tx_submit = mv_xor_tx_submit;
550 INIT_LIST_HEAD(&slot->chain_node); 551 INIT_LIST_HEAD(&slot->chain_node);
551 INIT_LIST_HEAD(&slot->slot_node); 552 INIT_LIST_HEAD(&slot->slot_node);
552 INIT_LIST_HEAD(&slot->tx_list); 553 INIT_LIST_HEAD(&slot->tx_list);
553 hw_desc = (char *) mv_chan->dma_desc_pool; 554 dma_desc = mv_chan->dma_desc_pool;
554 slot->async_tx.phys = 555 slot->async_tx.phys = dma_desc + idx * MV_XOR_SLOT_SIZE;
555 (dma_addr_t) &hw_desc[idx * MV_XOR_SLOT_SIZE];
556 slot->idx = idx++; 556 slot->idx = idx++;
557 557
558 spin_lock_bh(&mv_chan->lock); 558 spin_lock_bh(&mv_chan->lock);
@@ -582,8 +582,8 @@ mv_xor_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
582 int slot_cnt; 582 int slot_cnt;
583 583
584 dev_dbg(mv_chan_to_devp(mv_chan), 584 dev_dbg(mv_chan_to_devp(mv_chan),
585 "%s dest: %x src %x len: %u flags: %ld\n", 585 "%s dest: %pad src %pad len: %u flags: %ld\n",
586 __func__, dest, src, len, flags); 586 __func__, &dest, &src, len, flags);
587 if (unlikely(len < MV_XOR_MIN_BYTE_COUNT)) 587 if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
588 return NULL; 588 return NULL;
589 589
@@ -626,8 +626,8 @@ mv_xor_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
626 BUG_ON(len > MV_XOR_MAX_BYTE_COUNT); 626 BUG_ON(len > MV_XOR_MAX_BYTE_COUNT);
627 627
628 dev_dbg(mv_chan_to_devp(mv_chan), 628 dev_dbg(mv_chan_to_devp(mv_chan),
629 "%s src_cnt: %d len: dest %x %u flags: %ld\n", 629 "%s src_cnt: %d len: %u dest %pad flags: %ld\n",
630 __func__, src_cnt, len, dest, flags); 630 __func__, src_cnt, len, &dest, flags);
631 631
632 spin_lock_bh(&mv_chan->lock); 632 spin_lock_bh(&mv_chan->lock);
633 slot_cnt = mv_chan_xor_slot_count(len, src_cnt); 633 slot_cnt = mv_chan_xor_slot_count(len, src_cnt);
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index e8c9ef03495b..33edd6766344 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -559,7 +559,8 @@ static void edac_mc_workq_function(struct work_struct *work_req)
559 * 559 *
560 * called with the mem_ctls_mutex held 560 * called with the mem_ctls_mutex held
561 */ 561 */
562static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec) 562static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec,
563 bool init)
563{ 564{
564 edac_dbg(0, "\n"); 565 edac_dbg(0, "\n");
565 566
@@ -567,7 +568,9 @@ static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec)
567 if (mci->op_state != OP_RUNNING_POLL) 568 if (mci->op_state != OP_RUNNING_POLL)
568 return; 569 return;
569 570
570 INIT_DELAYED_WORK(&mci->work, edac_mc_workq_function); 571 if (init)
572 INIT_DELAYED_WORK(&mci->work, edac_mc_workq_function);
573
571 mod_delayed_work(edac_workqueue, &mci->work, msecs_to_jiffies(msec)); 574 mod_delayed_work(edac_workqueue, &mci->work, msecs_to_jiffies(msec));
572} 575}
573 576
@@ -601,7 +604,7 @@ static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
601 * user space has updated our poll period value, need to 604 * user space has updated our poll period value, need to
602 * reset our workq delays 605 * reset our workq delays
603 */ 606 */
604void edac_mc_reset_delay_period(int value) 607void edac_mc_reset_delay_period(unsigned long value)
605{ 608{
606 struct mem_ctl_info *mci; 609 struct mem_ctl_info *mci;
607 struct list_head *item; 610 struct list_head *item;
@@ -611,7 +614,7 @@ void edac_mc_reset_delay_period(int value)
611 list_for_each(item, &mc_devices) { 614 list_for_each(item, &mc_devices) {
612 mci = list_entry(item, struct mem_ctl_info, link); 615 mci = list_entry(item, struct mem_ctl_info, link);
613 616
614 edac_mc_workq_setup(mci, (unsigned long) value); 617 edac_mc_workq_setup(mci, value, false);
615 } 618 }
616 619
617 mutex_unlock(&mem_ctls_mutex); 620 mutex_unlock(&mem_ctls_mutex);
@@ -782,7 +785,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci)
782 /* This instance is NOW RUNNING */ 785 /* This instance is NOW RUNNING */
783 mci->op_state = OP_RUNNING_POLL; 786 mci->op_state = OP_RUNNING_POLL;
784 787
785 edac_mc_workq_setup(mci, edac_mc_get_poll_msec()); 788 edac_mc_workq_setup(mci, edac_mc_get_poll_msec(), true);
786 } else { 789 } else {
787 mci->op_state = OP_RUNNING_INTERRUPT; 790 mci->op_state = OP_RUNNING_INTERRUPT;
788 } 791 }
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 51c0362acf5c..b335c6ab5efe 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -52,18 +52,20 @@ int edac_mc_get_poll_msec(void)
52 52
53static int edac_set_poll_msec(const char *val, struct kernel_param *kp) 53static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
54{ 54{
55 long l; 55 unsigned long l;
56 int ret; 56 int ret;
57 57
58 if (!val) 58 if (!val)
59 return -EINVAL; 59 return -EINVAL;
60 60
61 ret = kstrtol(val, 0, &l); 61 ret = kstrtoul(val, 0, &l);
62 if (ret) 62 if (ret)
63 return ret; 63 return ret;
64 if ((int)l != l) 64
65 if (l < 1000)
65 return -EINVAL; 66 return -EINVAL;
66 *((int *)kp->arg) = l; 67
68 *((unsigned long *)kp->arg) = l;
67 69
68 /* notify edac_mc engine to reset the poll period */ 70 /* notify edac_mc engine to reset the poll period */
69 edac_mc_reset_delay_period(l); 71 edac_mc_reset_delay_period(l);
diff --git a/drivers/edac/edac_module.h b/drivers/edac/edac_module.h
index 3d139c6e7fe3..f2118bfcf8df 100644
--- a/drivers/edac/edac_module.h
+++ b/drivers/edac/edac_module.h
@@ -52,7 +52,7 @@ extern void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
52extern void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev); 52extern void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev);
53extern void edac_device_reset_delay_period(struct edac_device_ctl_info 53extern void edac_device_reset_delay_period(struct edac_device_ctl_info
54 *edac_dev, unsigned long value); 54 *edac_dev, unsigned long value);
55extern void edac_mc_reset_delay_period(int value); 55extern void edac_mc_reset_delay_period(unsigned long value);
56 56
57extern void *edac_align_ptr(void **p, unsigned size, int n_elems); 57extern void *edac_align_ptr(void **p, unsigned size, int n_elems);
58 58
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 697338772b64..903f24d28ba0 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -403,6 +403,7 @@ config GPIO_GRGPIO
403 403
404config GPIO_TB10X 404config GPIO_TB10X
405 bool 405 bool
406 select GENERIC_IRQ_CHIP
406 select OF_GPIO 407 select OF_GPIO
407 408
408comment "I2C GPIO expanders:" 409comment "I2C GPIO expanders:"
diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index 233d088ac59f..f32357e2d78d 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2012-2013 Broadcom Corporation 2 * Copyright (C) 2012-2014 Broadcom Corporation
3 * 3 *
4 * This program is free software; you can redistribute it and/or 4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as 5 * modify it under the terms of the GNU General Public License as
@@ -657,6 +657,6 @@ static struct platform_driver bcm_kona_gpio_driver = {
657 657
658module_platform_driver(bcm_kona_gpio_driver); 658module_platform_driver(bcm_kona_gpio_driver);
659 659
660MODULE_AUTHOR("Broadcom"); 660MODULE_AUTHOR("Broadcom Corporation <bcm-kernel-feedback-list@broadcom.com>");
661MODULE_DESCRIPTION("Broadcom Kona GPIO Driver"); 661MODULE_DESCRIPTION("Broadcom Kona GPIO Driver");
662MODULE_LICENSE("GPL v2"); 662MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpio/gpio-clps711x.c b/drivers/gpio/gpio-clps711x.c
index d3550274b8f7..3c2ba2ad0ada 100644
--- a/drivers/gpio/gpio-clps711x.c
+++ b/drivers/gpio/gpio-clps711x.c
@@ -97,3 +97,4 @@ module_platform_driver(clps711x_gpio_driver);
97MODULE_LICENSE("GPL"); 97MODULE_LICENSE("GPL");
98MODULE_AUTHOR("Alexander Shiyan <shc_work@mail.ru>"); 98MODULE_AUTHOR("Alexander Shiyan <shc_work@mail.ru>");
99MODULE_DESCRIPTION("CLPS711X GPIO driver"); 99MODULE_DESCRIPTION("CLPS711X GPIO driver");
100MODULE_ALIAS("platform:clps711x-gpio");
diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-mid.c
index d1b50ef5fab8..e585163f1ad5 100644
--- a/drivers/gpio/gpio-intel-mid.c
+++ b/drivers/gpio/gpio-intel-mid.c
@@ -394,8 +394,8 @@ static const struct irq_domain_ops intel_gpio_irq_ops = {
394 394
395static int intel_gpio_runtime_idle(struct device *dev) 395static int intel_gpio_runtime_idle(struct device *dev)
396{ 396{
397 pm_schedule_suspend(dev, 500); 397 int err = pm_schedule_suspend(dev, 500);
398 return -EBUSY; 398 return err ?: -EBUSY;
399} 399}
400 400
401static const struct dev_pm_ops intel_gpio_pm_ops = { 401static const struct dev_pm_ops intel_gpio_pm_ops = {
diff --git a/drivers/gpio/gpio-xtensa.c b/drivers/gpio/gpio-xtensa.c
index 1d136eceda62..7081304d6797 100644
--- a/drivers/gpio/gpio-xtensa.c
+++ b/drivers/gpio/gpio-xtensa.c
@@ -40,6 +40,8 @@
40#error GPIO32 option is not enabled for your xtensa core variant 40#error GPIO32 option is not enabled for your xtensa core variant
41#endif 41#endif
42 42
43#if XCHAL_HAVE_CP
44
43static inline unsigned long enable_cp(unsigned long *cpenable) 45static inline unsigned long enable_cp(unsigned long *cpenable)
44{ 46{
45 unsigned long flags; 47 unsigned long flags;
@@ -57,6 +59,20 @@ static inline void disable_cp(unsigned long flags, unsigned long cpenable)
57 local_irq_restore(flags); 59 local_irq_restore(flags);
58} 60}
59 61
62#else
63
64static inline unsigned long enable_cp(unsigned long *cpenable)
65{
66 *cpenable = 0; /* avoid uninitialized value warning */
67 return 0;
68}
69
70static inline void disable_cp(unsigned long flags, unsigned long cpenable)
71{
72}
73
74#endif /* XCHAL_HAVE_CP */
75
60static int xtensa_impwire_get_direction(struct gpio_chip *gc, unsigned offset) 76static int xtensa_impwire_get_direction(struct gpio_chip *gc, unsigned offset)
61{ 77{
62 return 1; /* input only */ 78 return 1; /* input only */
diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c
index 3f65dd6676b2..a28640f47c27 100644
--- a/drivers/gpu/drm/ast/ast_fb.c
+++ b/drivers/gpu/drm/ast/ast_fb.c
@@ -65,7 +65,7 @@ static void ast_dirty_update(struct ast_fbdev *afbdev,
65 * then the BO is being moved and we should 65 * then the BO is being moved and we should
66 * store up the damage until later. 66 * store up the damage until later.
67 */ 67 */
68 if (!drm_can_sleep()) 68 if (drm_can_sleep())
69 ret = ast_bo_reserve(bo, true); 69 ret = ast_bo_reserve(bo, true);
70 if (ret) { 70 if (ret) {
71 if (ret != -EBUSY) 71 if (ret != -EBUSY)
diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
index 2fd4a92162cb..32bbba0a787b 100644
--- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
+++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
@@ -39,7 +39,7 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev,
39 * then the BO is being moved and we should 39 * then the BO is being moved and we should
40 * store up the damage until later. 40 * store up the damage until later.
41 */ 41 */
42 if (!drm_can_sleep()) 42 if (drm_can_sleep())
43 ret = cirrus_bo_reserve(bo, true); 43 ret = cirrus_bo_reserve(bo, true);
44 if (ret) { 44 if (ret) {
45 if (ret != -EBUSY) 45 if (ret != -EBUSY)
diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index f227f544aa36..6e1a1a20cf6b 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -51,7 +51,7 @@ config DRM_EXYNOS_G2D
51 51
52config DRM_EXYNOS_IPP 52config DRM_EXYNOS_IPP
53 bool "Exynos DRM IPP" 53 bool "Exynos DRM IPP"
54 depends on DRM_EXYNOS && !ARCH_MULTIPLATFORM 54 depends on DRM_EXYNOS
55 help 55 help
56 Choose this option if you want to use IPP feature for DRM. 56 Choose this option if you want to use IPP feature for DRM.
57 57
@@ -69,6 +69,6 @@ config DRM_EXYNOS_ROTATOR
69 69
70config DRM_EXYNOS_GSC 70config DRM_EXYNOS_GSC
71 bool "Exynos DRM GSC" 71 bool "Exynos DRM GSC"
72 depends on DRM_EXYNOS_IPP && ARCH_EXYNOS5 72 depends on DRM_EXYNOS_IPP && ARCH_EXYNOS5 && !ARCH_MULTIPLATFORM
73 help 73 help
74 Choose this option if you want to use Exynos GSC for DRM. 74 Choose this option if you want to use Exynos GSC for DRM.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 9d096a0c5f8d..215131ab1dd2 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -171,22 +171,24 @@ static int exynos_drm_open(struct drm_device *dev, struct drm_file *file)
171 file->driver_priv = file_priv; 171 file->driver_priv = file_priv;
172 172
173 ret = exynos_drm_subdrv_open(dev, file); 173 ret = exynos_drm_subdrv_open(dev, file);
174 if (ret) { 174 if (ret)
175 kfree(file_priv); 175 goto out;
176 file->driver_priv = NULL;
177 }
178 176
179 anon_filp = anon_inode_getfile("exynos_gem", &exynos_drm_gem_fops, 177 anon_filp = anon_inode_getfile("exynos_gem", &exynos_drm_gem_fops,
180 NULL, 0); 178 NULL, 0);
181 if (IS_ERR(anon_filp)) { 179 if (IS_ERR(anon_filp)) {
182 kfree(file_priv); 180 ret = PTR_ERR(anon_filp);
183 return PTR_ERR(anon_filp); 181 goto out;
184 } 182 }
185 183
186 anon_filp->f_mode = FMODE_READ | FMODE_WRITE; 184 anon_filp->f_mode = FMODE_READ | FMODE_WRITE;
187 file_priv->anon_filp = anon_filp; 185 file_priv->anon_filp = anon_filp;
188 186
189 return ret; 187 return ret;
188out:
189 kfree(file_priv);
190 file->driver_priv = NULL;
191 return ret;
190} 192}
191 193
192static void exynos_drm_preclose(struct drm_device *dev, 194static void exynos_drm_preclose(struct drm_device *dev,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 380aec28840b..6c1885eedfdf 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -607,7 +607,7 @@ static enum g2d_reg_type g2d_get_reg_type(int reg_offset)
607 reg_type = REG_TYPE_NONE; 607 reg_type = REG_TYPE_NONE;
608 DRM_ERROR("Unknown register offset![%d]\n", reg_offset); 608 DRM_ERROR("Unknown register offset![%d]\n", reg_offset);
609 break; 609 break;
610 }; 610 }
611 611
612 return reg_type; 612 return reg_type;
613} 613}
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index d519a4e5fe40..09312b877470 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -16,7 +16,6 @@
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/clk.h> 17#include <linux/clk.h>
18#include <linux/pm_runtime.h> 18#include <linux/pm_runtime.h>
19#include <plat/map-base.h>
20 19
21#include <drm/drmP.h> 20#include <drm/drmP.h>
22#include <drm/exynos_drm.h> 21#include <drm/exynos_drm.h>
@@ -826,7 +825,7 @@ static void ipp_put_event(struct drm_exynos_ipp_cmd_node *c_node,
826 DRM_DEBUG_KMS("count[%d]e[0x%x]\n", count++, (int)e); 825 DRM_DEBUG_KMS("count[%d]e[0x%x]\n", count++, (int)e);
827 826
828 /* 827 /*
829 * quf == NULL condition means all event deletion. 828 * qbuf == NULL condition means all event deletion.
830 * stop operations want to delete all event list. 829 * stop operations want to delete all event list.
831 * another case delete only same buf id. 830 * another case delete only same buf id.
832 */ 831 */
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index a0e10aeb0e67..c021ddc1ffb4 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -34,6 +34,7 @@
34#include <linux/io.h> 34#include <linux/io.h>
35#include <linux/of.h> 35#include <linux/of.h>
36#include <linux/of_gpio.h> 36#include <linux/of_gpio.h>
37#include <linux/hdmi.h>
37 38
38#include <drm/exynos_drm.h> 39#include <drm/exynos_drm.h>
39 40
@@ -59,19 +60,6 @@
59#define HDMI_AUI_VERSION 0x01 60#define HDMI_AUI_VERSION 0x01
60#define HDMI_AUI_LENGTH 0x0A 61#define HDMI_AUI_LENGTH 0x0A
61 62
62/* HDMI infoframe to configure HDMI out packet header, AUI and AVI */
63enum HDMI_PACKET_TYPE {
64 /* refer to Table 5-8 Packet Type in HDMI specification v1.4a */
65 /* InfoFrame packet type */
66 HDMI_PACKET_TYPE_INFOFRAME = 0x80,
67 /* Vendor-Specific InfoFrame */
68 HDMI_PACKET_TYPE_VSI = HDMI_PACKET_TYPE_INFOFRAME + 1,
69 /* Auxiliary Video information InfoFrame */
70 HDMI_PACKET_TYPE_AVI = HDMI_PACKET_TYPE_INFOFRAME + 2,
71 /* Audio information InfoFrame */
72 HDMI_PACKET_TYPE_AUI = HDMI_PACKET_TYPE_INFOFRAME + 4
73};
74
75enum hdmi_type { 63enum hdmi_type {
76 HDMI_TYPE13, 64 HDMI_TYPE13,
77 HDMI_TYPE14, 65 HDMI_TYPE14,
@@ -379,12 +367,6 @@ static const struct hdmiphy_config hdmiphy_v14_configs[] = {
379 }, 367 },
380}; 368};
381 369
382struct hdmi_infoframe {
383 enum HDMI_PACKET_TYPE type;
384 u8 ver;
385 u8 len;
386};
387
388static inline u32 hdmi_reg_read(struct hdmi_context *hdata, u32 reg_id) 370static inline u32 hdmi_reg_read(struct hdmi_context *hdata, u32 reg_id)
389{ 371{
390 return readl(hdata->regs + reg_id); 372 return readl(hdata->regs + reg_id);
@@ -682,7 +664,7 @@ static u8 hdmi_chksum(struct hdmi_context *hdata,
682} 664}
683 665
684static void hdmi_reg_infoframe(struct hdmi_context *hdata, 666static void hdmi_reg_infoframe(struct hdmi_context *hdata,
685 struct hdmi_infoframe *infoframe) 667 union hdmi_infoframe *infoframe)
686{ 668{
687 u32 hdr_sum; 669 u32 hdr_sum;
688 u8 chksum; 670 u8 chksum;
@@ -700,13 +682,15 @@ static void hdmi_reg_infoframe(struct hdmi_context *hdata,
700 return; 682 return;
701 } 683 }
702 684
703 switch (infoframe->type) { 685 switch (infoframe->any.type) {
704 case HDMI_PACKET_TYPE_AVI: 686 case HDMI_INFOFRAME_TYPE_AVI:
705 hdmi_reg_writeb(hdata, HDMI_AVI_CON, HDMI_AVI_CON_EVERY_VSYNC); 687 hdmi_reg_writeb(hdata, HDMI_AVI_CON, HDMI_AVI_CON_EVERY_VSYNC);
706 hdmi_reg_writeb(hdata, HDMI_AVI_HEADER0, infoframe->type); 688 hdmi_reg_writeb(hdata, HDMI_AVI_HEADER0, infoframe->any.type);
707 hdmi_reg_writeb(hdata, HDMI_AVI_HEADER1, infoframe->ver); 689 hdmi_reg_writeb(hdata, HDMI_AVI_HEADER1,
708 hdmi_reg_writeb(hdata, HDMI_AVI_HEADER2, infoframe->len); 690 infoframe->any.version);
709 hdr_sum = infoframe->type + infoframe->ver + infoframe->len; 691 hdmi_reg_writeb(hdata, HDMI_AVI_HEADER2, infoframe->any.length);
692 hdr_sum = infoframe->any.type + infoframe->any.version +
693 infoframe->any.length;
710 694
711 /* Output format zero hardcoded ,RGB YBCR selection */ 695 /* Output format zero hardcoded ,RGB YBCR selection */
712 hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(1), 0 << 5 | 696 hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(1), 0 << 5 |
@@ -722,18 +706,20 @@ static void hdmi_reg_infoframe(struct hdmi_context *hdata,
722 hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(4), vic); 706 hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(4), vic);
723 707
724 chksum = hdmi_chksum(hdata, HDMI_AVI_BYTE(1), 708 chksum = hdmi_chksum(hdata, HDMI_AVI_BYTE(1),
725 infoframe->len, hdr_sum); 709 infoframe->any.length, hdr_sum);
726 DRM_DEBUG_KMS("AVI checksum = 0x%x\n", chksum); 710 DRM_DEBUG_KMS("AVI checksum = 0x%x\n", chksum);
727 hdmi_reg_writeb(hdata, HDMI_AVI_CHECK_SUM, chksum); 711 hdmi_reg_writeb(hdata, HDMI_AVI_CHECK_SUM, chksum);
728 break; 712 break;
729 case HDMI_PACKET_TYPE_AUI: 713 case HDMI_INFOFRAME_TYPE_AUDIO:
730 hdmi_reg_writeb(hdata, HDMI_AUI_CON, 0x02); 714 hdmi_reg_writeb(hdata, HDMI_AUI_CON, 0x02);
731 hdmi_reg_writeb(hdata, HDMI_AUI_HEADER0, infoframe->type); 715 hdmi_reg_writeb(hdata, HDMI_AUI_HEADER0, infoframe->any.type);
732 hdmi_reg_writeb(hdata, HDMI_AUI_HEADER1, infoframe->ver); 716 hdmi_reg_writeb(hdata, HDMI_AUI_HEADER1,
733 hdmi_reg_writeb(hdata, HDMI_AUI_HEADER2, infoframe->len); 717 infoframe->any.version);
734 hdr_sum = infoframe->type + infoframe->ver + infoframe->len; 718 hdmi_reg_writeb(hdata, HDMI_AUI_HEADER2, infoframe->any.length);
719 hdr_sum = infoframe->any.type + infoframe->any.version +
720 infoframe->any.length;
735 chksum = hdmi_chksum(hdata, HDMI_AUI_BYTE(1), 721 chksum = hdmi_chksum(hdata, HDMI_AUI_BYTE(1),
736 infoframe->len, hdr_sum); 722 infoframe->any.length, hdr_sum);
737 DRM_DEBUG_KMS("AUI checksum = 0x%x\n", chksum); 723 DRM_DEBUG_KMS("AUI checksum = 0x%x\n", chksum);
738 hdmi_reg_writeb(hdata, HDMI_AUI_CHECK_SUM, chksum); 724 hdmi_reg_writeb(hdata, HDMI_AUI_CHECK_SUM, chksum);
739 break; 725 break;
@@ -985,7 +971,7 @@ static void hdmi_conf_reset(struct hdmi_context *hdata)
985 971
986static void hdmi_conf_init(struct hdmi_context *hdata) 972static void hdmi_conf_init(struct hdmi_context *hdata)
987{ 973{
988 struct hdmi_infoframe infoframe; 974 union hdmi_infoframe infoframe;
989 975
990 /* disable HPD interrupts from HDMI IP block, use GPIO instead */ 976 /* disable HPD interrupts from HDMI IP block, use GPIO instead */
991 hdmi_reg_writemask(hdata, HDMI_INTC_CON, 0, HDMI_INTC_EN_GLOBAL | 977 hdmi_reg_writemask(hdata, HDMI_INTC_CON, 0, HDMI_INTC_EN_GLOBAL |
@@ -1021,14 +1007,14 @@ static void hdmi_conf_init(struct hdmi_context *hdata)
1021 hdmi_reg_writeb(hdata, HDMI_V13_AUI_CON, 0x02); 1007 hdmi_reg_writeb(hdata, HDMI_V13_AUI_CON, 0x02);
1022 hdmi_reg_writeb(hdata, HDMI_V13_ACR_CON, 0x04); 1008 hdmi_reg_writeb(hdata, HDMI_V13_ACR_CON, 0x04);
1023 } else { 1009 } else {
1024 infoframe.type = HDMI_PACKET_TYPE_AVI; 1010 infoframe.any.type = HDMI_INFOFRAME_TYPE_AVI;
1025 infoframe.ver = HDMI_AVI_VERSION; 1011 infoframe.any.version = HDMI_AVI_VERSION;
1026 infoframe.len = HDMI_AVI_LENGTH; 1012 infoframe.any.length = HDMI_AVI_LENGTH;
1027 hdmi_reg_infoframe(hdata, &infoframe); 1013 hdmi_reg_infoframe(hdata, &infoframe);
1028 1014
1029 infoframe.type = HDMI_PACKET_TYPE_AUI; 1015 infoframe.any.type = HDMI_INFOFRAME_TYPE_AUDIO;
1030 infoframe.ver = HDMI_AUI_VERSION; 1016 infoframe.any.version = HDMI_AUI_VERSION;
1031 infoframe.len = HDMI_AUI_LENGTH; 1017 infoframe.any.length = HDMI_AUI_LENGTH;
1032 hdmi_reg_infoframe(hdata, &infoframe); 1018 hdmi_reg_infoframe(hdata, &infoframe);
1033 1019
1034 /* enable AVI packet every vsync, fixes purple line problem */ 1020 /* enable AVI packet every vsync, fixes purple line problem */
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index 400b0c4a10fb..fa18cf374470 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -208,7 +208,7 @@ struct tda998x_priv {
208# define PLL_SERIAL_1_SRL_IZ(x) (((x) & 3) << 1) 208# define PLL_SERIAL_1_SRL_IZ(x) (((x) & 3) << 1)
209# define PLL_SERIAL_1_SRL_MAN_IZ (1 << 6) 209# define PLL_SERIAL_1_SRL_MAN_IZ (1 << 6)
210#define REG_PLL_SERIAL_2 REG(0x02, 0x01) /* read/write */ 210#define REG_PLL_SERIAL_2 REG(0x02, 0x01) /* read/write */
211# define PLL_SERIAL_2_SRL_NOSC(x) (((x) & 3) << 0) 211# define PLL_SERIAL_2_SRL_NOSC(x) ((x) << 0)
212# define PLL_SERIAL_2_SRL_PR(x) (((x) & 0xf) << 4) 212# define PLL_SERIAL_2_SRL_PR(x) (((x) & 0xf) << 4)
213#define REG_PLL_SERIAL_3 REG(0x02, 0x02) /* read/write */ 213#define REG_PLL_SERIAL_3 REG(0x02, 0x02) /* read/write */
214# define PLL_SERIAL_3_SRL_CCIR (1 << 0) 214# define PLL_SERIAL_3_SRL_CCIR (1 << 0)
@@ -528,10 +528,10 @@ tda998x_write_aif(struct drm_encoder *encoder, struct tda998x_encoder_params *p)
528{ 528{
529 uint8_t buf[PB(5) + 1]; 529 uint8_t buf[PB(5) + 1];
530 530
531 memset(buf, 0, sizeof(buf));
531 buf[HB(0)] = 0x84; 532 buf[HB(0)] = 0x84;
532 buf[HB(1)] = 0x01; 533 buf[HB(1)] = 0x01;
533 buf[HB(2)] = 10; 534 buf[HB(2)] = 10;
534 buf[PB(0)] = 0;
535 buf[PB(1)] = p->audio_frame[1] & 0x07; /* CC */ 535 buf[PB(1)] = p->audio_frame[1] & 0x07; /* CC */
536 buf[PB(2)] = p->audio_frame[2] & 0x1c; /* SF */ 536 buf[PB(2)] = p->audio_frame[2] & 0x1c; /* SF */
537 buf[PB(4)] = p->audio_frame[4]; 537 buf[PB(4)] = p->audio_frame[4];
@@ -824,6 +824,11 @@ tda998x_encoder_mode_set(struct drm_encoder *encoder,
824 } 824 }
825 825
826 div = 148500 / mode->clock; 826 div = 148500 / mode->clock;
827 if (div != 0) {
828 div--;
829 if (div > 3)
830 div = 3;
831 }
827 832
828 /* mute the audio FIFO: */ 833 /* mute the audio FIFO: */
829 reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 834 reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO);
@@ -913,7 +918,7 @@ tda998x_encoder_mode_set(struct drm_encoder *encoder,
913 918
914 if (priv->rev == TDA19988) { 919 if (priv->rev == TDA19988) {
915 /* let incoming pixels fill the active space (if any) */ 920 /* let incoming pixels fill the active space (if any) */
916 reg_write(encoder, REG_ENABLE_SPACE, 0x01); 921 reg_write(encoder, REG_ENABLE_SPACE, 0x00);
917 } 922 }
918 923
919 /* must be last register set: */ 924 /* must be last register set: */
@@ -1094,6 +1099,8 @@ tda998x_encoder_destroy(struct drm_encoder *encoder)
1094{ 1099{
1095 struct tda998x_priv *priv = to_tda998x_priv(encoder); 1100 struct tda998x_priv *priv = to_tda998x_priv(encoder);
1096 drm_i2c_encoder_destroy(encoder); 1101 drm_i2c_encoder_destroy(encoder);
1102 if (priv->cec)
1103 i2c_unregister_device(priv->cec);
1097 kfree(priv); 1104 kfree(priv);
1098} 1105}
1099 1106
@@ -1142,8 +1149,10 @@ tda998x_encoder_init(struct i2c_client *client,
1142 priv->vip_cntrl_1 = VIP_CNTRL_1_SWAP_C(0) | VIP_CNTRL_1_SWAP_D(1); 1149 priv->vip_cntrl_1 = VIP_CNTRL_1_SWAP_C(0) | VIP_CNTRL_1_SWAP_D(1);
1143 priv->vip_cntrl_2 = VIP_CNTRL_2_SWAP_E(4) | VIP_CNTRL_2_SWAP_F(5); 1150 priv->vip_cntrl_2 = VIP_CNTRL_2_SWAP_E(4) | VIP_CNTRL_2_SWAP_F(5);
1144 1151
1145 priv->current_page = 0; 1152 priv->current_page = 0xff;
1146 priv->cec = i2c_new_dummy(client->adapter, 0x34); 1153 priv->cec = i2c_new_dummy(client->adapter, 0x34);
1154 if (!priv->cec)
1155 return -ENODEV;
1147 priv->dpms = DRM_MODE_DPMS_OFF; 1156 priv->dpms = DRM_MODE_DPMS_OFF;
1148 1157
1149 encoder_slave->slave_priv = priv; 1158 encoder_slave->slave_priv = priv;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 4a2bf8e3f739..df77e20e3c3d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1831,6 +1831,14 @@ struct drm_i915_file_private {
1831 1831
1832/* Early gen2 have a totally busted CS tlb and require pinned batches. */ 1832/* Early gen2 have a totally busted CS tlb and require pinned batches. */
1833#define HAS_BROKEN_CS_TLB(dev) (IS_I830(dev) || IS_845G(dev)) 1833#define HAS_BROKEN_CS_TLB(dev) (IS_I830(dev) || IS_845G(dev))
1834/*
1835 * dp aux and gmbus irq on gen4 seems to be able to generate legacy interrupts
1836 * even when in MSI mode. This results in spurious interrupt warnings if the
1837 * legacy irq no. is shared with another device. The kernel then disables that
1838 * interrupt source and so prevents the other device from working properly.
1839 */
1840#define HAS_AUX_IRQ(dev) (INTEL_INFO(dev)->gen >= 5)
1841#define HAS_GMBUS_IRQ(dev) (INTEL_INFO(dev)->gen >= 5)
1834 1842
1835/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte 1843/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
1836 * rows, which changed the alignment requirements and fence programming. 1844 * rows, which changed the alignment requirements and fence programming.
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index d7fd2fd2f0a5..990cf8f43efd 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -146,7 +146,10 @@ static void i915_error_vprintf(struct drm_i915_error_state_buf *e,
146 va_list tmp; 146 va_list tmp;
147 147
148 va_copy(tmp, args); 148 va_copy(tmp, args);
149 if (!__i915_error_seek(e, vsnprintf(NULL, 0, f, tmp))) 149 len = vsnprintf(NULL, 0, f, tmp);
150 va_end(tmp);
151
152 if (!__i915_error_seek(e, len))
150 return; 153 return;
151 } 154 }
152 155
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 17d8fcb1b6f7..9fec71175571 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -567,8 +567,7 @@ static u32 i915_get_vblank_counter(struct drm_device *dev, int pipe)
567 567
568 vbl_start = mode->crtc_vblank_start * mode->crtc_htotal; 568 vbl_start = mode->crtc_vblank_start * mode->crtc_htotal;
569 } else { 569 } else {
570 enum transcoder cpu_transcoder = 570 enum transcoder cpu_transcoder = (enum transcoder) pipe;
571 intel_pipe_to_cpu_transcoder(dev_priv, pipe);
572 u32 htotal; 571 u32 htotal;
573 572
574 htotal = ((I915_READ(HTOTAL(cpu_transcoder)) >> 16) & 0x1fff) + 1; 573 htotal = ((I915_READ(HTOTAL(cpu_transcoder)) >> 16) & 0x1fff) + 1;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 5ede4e8e290d..2f517b85b3f4 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -404,7 +404,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
404 int i, ret, recv_bytes; 404 int i, ret, recv_bytes;
405 uint32_t status; 405 uint32_t status;
406 int try, precharge, clock = 0; 406 int try, precharge, clock = 0;
407 bool has_aux_irq = true; 407 bool has_aux_irq = HAS_AUX_IRQ(dev);
408 uint32_t timeout; 408 uint32_t timeout;
409 409
410 /* dp aux is extremely sensitive to irq latency, hence request the 410 /* dp aux is extremely sensitive to irq latency, hence request the
@@ -1869,10 +1869,12 @@ static void vlv_pre_enable_dp(struct intel_encoder *encoder)
1869 1869
1870 mutex_unlock(&dev_priv->dpio_lock); 1870 mutex_unlock(&dev_priv->dpio_lock);
1871 1871
1872 /* init power sequencer on this pipe and port */ 1872 if (is_edp(intel_dp)) {
1873 intel_dp_init_panel_power_sequencer(dev, intel_dp, &power_seq); 1873 /* init power sequencer on this pipe and port */
1874 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, 1874 intel_dp_init_panel_power_sequencer(dev, intel_dp, &power_seq);
1875 &power_seq); 1875 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp,
1876 &power_seq);
1877 }
1876 1878
1877 intel_enable_dp(encoder); 1879 intel_enable_dp(encoder);
1878 1880
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
index b1dc33f47899..d33b61d0dd33 100644
--- a/drivers/gpu/drm/i915/intel_i2c.c
+++ b/drivers/gpu/drm/i915/intel_i2c.c
@@ -258,13 +258,6 @@ intel_gpio_setup(struct intel_gmbus *bus, u32 pin)
258 algo->data = bus; 258 algo->data = bus;
259} 259}
260 260
261/*
262 * gmbus on gen4 seems to be able to generate legacy interrupts even when in MSI
263 * mode. This results in spurious interrupt warnings if the legacy irq no. is
264 * shared with another device. The kernel then disables that interrupt source
265 * and so prevents the other device from working properly.
266 */
267#define HAS_GMBUS_IRQ(dev) (INTEL_INFO(dev)->gen >= 5)
268static int 261static int
269gmbus_wait_hw_status(struct drm_i915_private *dev_priv, 262gmbus_wait_hw_status(struct drm_i915_private *dev_priv,
270 u32 gmbus2_status, 263 u32 gmbus2_status,
diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c
index 4e960ec7419f..acde2945eb8a 100644
--- a/drivers/gpu/drm/i915/intel_opregion.c
+++ b/drivers/gpu/drm/i915/intel_opregion.c
@@ -226,6 +226,8 @@ struct opregion_asle {
226#define ACPI_DIGITAL_OUTPUT (3<<8) 226#define ACPI_DIGITAL_OUTPUT (3<<8)
227#define ACPI_LVDS_OUTPUT (4<<8) 227#define ACPI_LVDS_OUTPUT (4<<8)
228 228
229#define MAX_DSLP 1500
230
229#ifdef CONFIG_ACPI 231#ifdef CONFIG_ACPI
230static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out) 232static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
231{ 233{
@@ -260,10 +262,11 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
260 /* The spec says 2ms should be the default, but it's too small 262 /* The spec says 2ms should be the default, but it's too small
261 * for some machines. */ 263 * for some machines. */
262 dslp = 50; 264 dslp = 50;
263 } else if (dslp > 500) { 265 } else if (dslp > MAX_DSLP) {
264 /* Hey bios, trust must be earned. */ 266 /* Hey bios, trust must be earned. */
265 WARN_ONCE(1, "excessive driver sleep timeout (DSPL) %u\n", dslp); 267 DRM_INFO_ONCE("ACPI BIOS requests an excessive sleep of %u ms, "
266 dslp = 500; 268 "using %u ms instead\n", dslp, MAX_DSLP);
269 dslp = MAX_DSLP;
267 } 270 }
268 271
269 /* The spec tells us to do this, but we are the only user... */ 272 /* The spec tells us to do this, but we are the only user... */
diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c
index f9adc27ef32a..13b7dd83faa9 100644
--- a/drivers/gpu/drm/mgag200/mgag200_fb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
@@ -41,7 +41,7 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev,
41 * then the BO is being moved and we should 41 * then the BO is being moved and we should
42 * store up the damage until later. 42 * store up the damage until later.
43 */ 43 */
44 if (!drm_can_sleep()) 44 if (drm_can_sleep())
45 ret = mgag200_bo_reserve(bo, true); 45 ret = mgag200_bo_reserve(bo, true);
46 if (ret) { 46 if (ret) {
47 if (ret != -EBUSY) 47 if (ret != -EBUSY)
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index b8583f275e80..968374776db9 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1519,11 +1519,11 @@ static int mga_vga_mode_valid(struct drm_connector *connector,
1519 (mga_vga_calculate_mode_bandwidth(mode, bpp) 1519 (mga_vga_calculate_mode_bandwidth(mode, bpp)
1520 > (32700 * 1024))) { 1520 > (32700 * 1024))) {
1521 return MODE_BANDWIDTH; 1521 return MODE_BANDWIDTH;
1522 } else if (mode->type == G200_EH && 1522 } else if (mdev->type == G200_EH &&
1523 (mga_vga_calculate_mode_bandwidth(mode, bpp) 1523 (mga_vga_calculate_mode_bandwidth(mode, bpp)
1524 > (37500 * 1024))) { 1524 > (37500 * 1024))) {
1525 return MODE_BANDWIDTH; 1525 return MODE_BANDWIDTH;
1526 } else if (mode->type == G200_ER && 1526 } else if (mdev->type == G200_ER &&
1527 (mga_vga_calculate_mode_bandwidth(mode, 1527 (mga_vga_calculate_mode_bandwidth(mode,
1528 bpp) > (55000 * 1024))) { 1528 bpp) > (55000 * 1024))) {
1529 return MODE_BANDWIDTH; 1529 return MODE_BANDWIDTH;
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
index 1964f4f0d452..84c5b13b33c9 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
@@ -39,6 +39,7 @@ struct mdp4_crtc {
39 spinlock_t lock; 39 spinlock_t lock;
40 bool stale; 40 bool stale;
41 uint32_t width, height; 41 uint32_t width, height;
42 uint32_t x, y;
42 43
43 /* next cursor to scan-out: */ 44 /* next cursor to scan-out: */
44 uint32_t next_iova; 45 uint32_t next_iova;
@@ -57,9 +58,16 @@ struct mdp4_crtc {
57#define PENDING_FLIP 0x2 58#define PENDING_FLIP 0x2
58 atomic_t pending; 59 atomic_t pending;
59 60
60 /* the fb that we currently hold a scanout ref to: */ 61 /* the fb that we logically (from PoV of KMS API) hold a ref
62 * to. Which we may not yet be scanning out (we may still
63 * be scanning out previous in case of page_flip while waiting
64 * for gpu rendering to complete:
65 */
61 struct drm_framebuffer *fb; 66 struct drm_framebuffer *fb;
62 67
68 /* the fb that we currently hold a scanout ref to: */
69 struct drm_framebuffer *scanout_fb;
70
63 /* for unref'ing framebuffers after scanout completes: */ 71 /* for unref'ing framebuffers after scanout completes: */
64 struct drm_flip_work unref_fb_work; 72 struct drm_flip_work unref_fb_work;
65 73
@@ -77,24 +85,73 @@ static struct mdp4_kms *get_kms(struct drm_crtc *crtc)
77 return to_mdp4_kms(to_mdp_kms(priv->kms)); 85 return to_mdp4_kms(to_mdp_kms(priv->kms));
78} 86}
79 87
80static void update_fb(struct drm_crtc *crtc, bool async, 88static void request_pending(struct drm_crtc *crtc, uint32_t pending)
81 struct drm_framebuffer *new_fb)
82{ 89{
83 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 90 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
84 struct drm_framebuffer *old_fb = mdp4_crtc->fb;
85 91
86 if (old_fb) 92 atomic_or(pending, &mdp4_crtc->pending);
87 drm_flip_work_queue(&mdp4_crtc->unref_fb_work, old_fb); 93 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank);
94}
95
96static void crtc_flush(struct drm_crtc *crtc)
97{
98 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
99 struct mdp4_kms *mdp4_kms = get_kms(crtc);
100 uint32_t i, flush = 0;
101
102 for (i = 0; i < ARRAY_SIZE(mdp4_crtc->planes); i++) {
103 struct drm_plane *plane = mdp4_crtc->planes[i];
104 if (plane) {
105 enum mdp4_pipe pipe_id = mdp4_plane_pipe(plane);
106 flush |= pipe2flush(pipe_id);
107 }
108 }
109 flush |= ovlp2flush(mdp4_crtc->ovlp);
110
111 DBG("%s: flush=%08x", mdp4_crtc->name, flush);
112
113 mdp4_write(mdp4_kms, REG_MDP4_OVERLAY_FLUSH, flush);
114}
115
116static void update_fb(struct drm_crtc *crtc, struct drm_framebuffer *new_fb)
117{
118 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
119 struct drm_framebuffer *old_fb = mdp4_crtc->fb;
88 120
89 /* grab reference to incoming scanout fb: */ 121 /* grab reference to incoming scanout fb: */
90 drm_framebuffer_reference(new_fb); 122 drm_framebuffer_reference(new_fb);
91 mdp4_crtc->base.fb = new_fb; 123 mdp4_crtc->base.fb = new_fb;
92 mdp4_crtc->fb = new_fb; 124 mdp4_crtc->fb = new_fb;
93 125
94 if (!async) { 126 if (old_fb)
95 /* enable vblank to pick up the old_fb */ 127 drm_flip_work_queue(&mdp4_crtc->unref_fb_work, old_fb);
96 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank); 128}
97 } 129
130/* unlike update_fb(), take a ref to the new scanout fb *before* updating
131 * plane, then call this. Needed to ensure we don't unref the buffer that
132 * is actually still being scanned out.
133 *
134 * Note that this whole thing goes away with atomic.. since we can defer
135 * calling into driver until rendering is done.
136 */
137static void update_scanout(struct drm_crtc *crtc, struct drm_framebuffer *fb)
138{
139 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
140
141 /* flush updates, to make sure hw is updated to new scanout fb,
142 * so that we can safely queue unref to current fb (ie. next
143 * vblank we know hw is done w/ previous scanout_fb).
144 */
145 crtc_flush(crtc);
146
147 if (mdp4_crtc->scanout_fb)
148 drm_flip_work_queue(&mdp4_crtc->unref_fb_work,
149 mdp4_crtc->scanout_fb);
150
151 mdp4_crtc->scanout_fb = fb;
152
153 /* enable vblank to complete flip: */
154 request_pending(crtc, PENDING_FLIP);
98} 155}
99 156
100/* if file!=NULL, this is preclose potential cancel-flip path */ 157/* if file!=NULL, this is preclose potential cancel-flip path */
@@ -120,34 +177,6 @@ static void complete_flip(struct drm_crtc *crtc, struct drm_file *file)
120 spin_unlock_irqrestore(&dev->event_lock, flags); 177 spin_unlock_irqrestore(&dev->event_lock, flags);
121} 178}
122 179
123static void crtc_flush(struct drm_crtc *crtc)
124{
125 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
126 struct mdp4_kms *mdp4_kms = get_kms(crtc);
127 uint32_t i, flush = 0;
128
129 for (i = 0; i < ARRAY_SIZE(mdp4_crtc->planes); i++) {
130 struct drm_plane *plane = mdp4_crtc->planes[i];
131 if (plane) {
132 enum mdp4_pipe pipe_id = mdp4_plane_pipe(plane);
133 flush |= pipe2flush(pipe_id);
134 }
135 }
136 flush |= ovlp2flush(mdp4_crtc->ovlp);
137
138 DBG("%s: flush=%08x", mdp4_crtc->name, flush);
139
140 mdp4_write(mdp4_kms, REG_MDP4_OVERLAY_FLUSH, flush);
141}
142
143static void request_pending(struct drm_crtc *crtc, uint32_t pending)
144{
145 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
146
147 atomic_or(pending, &mdp4_crtc->pending);
148 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank);
149}
150
151static void pageflip_cb(struct msm_fence_cb *cb) 180static void pageflip_cb(struct msm_fence_cb *cb)
152{ 181{
153 struct mdp4_crtc *mdp4_crtc = 182 struct mdp4_crtc *mdp4_crtc =
@@ -158,11 +187,9 @@ static void pageflip_cb(struct msm_fence_cb *cb)
158 if (!fb) 187 if (!fb)
159 return; 188 return;
160 189
190 drm_framebuffer_reference(fb);
161 mdp4_plane_set_scanout(mdp4_crtc->plane, fb); 191 mdp4_plane_set_scanout(mdp4_crtc->plane, fb);
162 crtc_flush(crtc); 192 update_scanout(crtc, fb);
163
164 /* enable vblank to complete flip: */
165 request_pending(crtc, PENDING_FLIP);
166} 193}
167 194
168static void unref_fb_worker(struct drm_flip_work *work, void *val) 195static void unref_fb_worker(struct drm_flip_work *work, void *val)
@@ -320,6 +347,20 @@ static int mdp4_crtc_mode_set(struct drm_crtc *crtc,
320 mode->vsync_end, mode->vtotal, 347 mode->vsync_end, mode->vtotal,
321 mode->type, mode->flags); 348 mode->type, mode->flags);
322 349
350 /* grab extra ref for update_scanout() */
351 drm_framebuffer_reference(crtc->fb);
352
353 ret = mdp4_plane_mode_set(mdp4_crtc->plane, crtc, crtc->fb,
354 0, 0, mode->hdisplay, mode->vdisplay,
355 x << 16, y << 16,
356 mode->hdisplay << 16, mode->vdisplay << 16);
357 if (ret) {
358 drm_framebuffer_unreference(crtc->fb);
359 dev_err(crtc->dev->dev, "%s: failed to set mode on plane: %d\n",
360 mdp4_crtc->name, ret);
361 return ret;
362 }
363
323 mdp4_write(mdp4_kms, REG_MDP4_DMA_SRC_SIZE(dma), 364 mdp4_write(mdp4_kms, REG_MDP4_DMA_SRC_SIZE(dma),
324 MDP4_DMA_SRC_SIZE_WIDTH(mode->hdisplay) | 365 MDP4_DMA_SRC_SIZE_WIDTH(mode->hdisplay) |
325 MDP4_DMA_SRC_SIZE_HEIGHT(mode->vdisplay)); 366 MDP4_DMA_SRC_SIZE_HEIGHT(mode->vdisplay));
@@ -341,24 +382,15 @@ static int mdp4_crtc_mode_set(struct drm_crtc *crtc,
341 382
342 mdp4_write(mdp4_kms, REG_MDP4_OVLP_CFG(ovlp), 1); 383 mdp4_write(mdp4_kms, REG_MDP4_OVLP_CFG(ovlp), 1);
343 384
344 update_fb(crtc, false, crtc->fb);
345
346 ret = mdp4_plane_mode_set(mdp4_crtc->plane, crtc, crtc->fb,
347 0, 0, mode->hdisplay, mode->vdisplay,
348 x << 16, y << 16,
349 mode->hdisplay << 16, mode->vdisplay << 16);
350 if (ret) {
351 dev_err(crtc->dev->dev, "%s: failed to set mode on plane: %d\n",
352 mdp4_crtc->name, ret);
353 return ret;
354 }
355
356 if (dma == DMA_E) { 385 if (dma == DMA_E) {
357 mdp4_write(mdp4_kms, REG_MDP4_DMA_E_QUANT(0), 0x00ff0000); 386 mdp4_write(mdp4_kms, REG_MDP4_DMA_E_QUANT(0), 0x00ff0000);
358 mdp4_write(mdp4_kms, REG_MDP4_DMA_E_QUANT(1), 0x00ff0000); 387 mdp4_write(mdp4_kms, REG_MDP4_DMA_E_QUANT(1), 0x00ff0000);
359 mdp4_write(mdp4_kms, REG_MDP4_DMA_E_QUANT(2), 0x00ff0000); 388 mdp4_write(mdp4_kms, REG_MDP4_DMA_E_QUANT(2), 0x00ff0000);
360 } 389 }
361 390
391 update_fb(crtc, crtc->fb);
392 update_scanout(crtc, crtc->fb);
393
362 return 0; 394 return 0;
363} 395}
364 396
@@ -385,13 +417,24 @@ static int mdp4_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
385 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 417 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
386 struct drm_plane *plane = mdp4_crtc->plane; 418 struct drm_plane *plane = mdp4_crtc->plane;
387 struct drm_display_mode *mode = &crtc->mode; 419 struct drm_display_mode *mode = &crtc->mode;
420 int ret;
388 421
389 update_fb(crtc, false, crtc->fb); 422 /* grab extra ref for update_scanout() */
423 drm_framebuffer_reference(crtc->fb);
390 424
391 return mdp4_plane_mode_set(plane, crtc, crtc->fb, 425 ret = mdp4_plane_mode_set(plane, crtc, crtc->fb,
392 0, 0, mode->hdisplay, mode->vdisplay, 426 0, 0, mode->hdisplay, mode->vdisplay,
393 x << 16, y << 16, 427 x << 16, y << 16,
394 mode->hdisplay << 16, mode->vdisplay << 16); 428 mode->hdisplay << 16, mode->vdisplay << 16);
429 if (ret) {
430 drm_framebuffer_unreference(crtc->fb);
431 return ret;
432 }
433
434 update_fb(crtc, crtc->fb);
435 update_scanout(crtc, crtc->fb);
436
437 return 0;
395} 438}
396 439
397static void mdp4_crtc_load_lut(struct drm_crtc *crtc) 440static void mdp4_crtc_load_lut(struct drm_crtc *crtc)
@@ -419,7 +462,7 @@ static int mdp4_crtc_page_flip(struct drm_crtc *crtc,
419 mdp4_crtc->event = event; 462 mdp4_crtc->event = event;
420 spin_unlock_irqrestore(&dev->event_lock, flags); 463 spin_unlock_irqrestore(&dev->event_lock, flags);
421 464
422 update_fb(crtc, true, new_fb); 465 update_fb(crtc, new_fb);
423 466
424 return msm_gem_queue_inactive_cb(obj, &mdp4_crtc->pageflip_cb); 467 return msm_gem_queue_inactive_cb(obj, &mdp4_crtc->pageflip_cb);
425} 468}
@@ -442,12 +485,12 @@ static int mdp4_crtc_set_property(struct drm_crtc *crtc,
442static void update_cursor(struct drm_crtc *crtc) 485static void update_cursor(struct drm_crtc *crtc)
443{ 486{
444 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 487 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
488 struct mdp4_kms *mdp4_kms = get_kms(crtc);
445 enum mdp4_dma dma = mdp4_crtc->dma; 489 enum mdp4_dma dma = mdp4_crtc->dma;
446 unsigned long flags; 490 unsigned long flags;
447 491
448 spin_lock_irqsave(&mdp4_crtc->cursor.lock, flags); 492 spin_lock_irqsave(&mdp4_crtc->cursor.lock, flags);
449 if (mdp4_crtc->cursor.stale) { 493 if (mdp4_crtc->cursor.stale) {
450 struct mdp4_kms *mdp4_kms = get_kms(crtc);
451 struct drm_gem_object *next_bo = mdp4_crtc->cursor.next_bo; 494 struct drm_gem_object *next_bo = mdp4_crtc->cursor.next_bo;
452 struct drm_gem_object *prev_bo = mdp4_crtc->cursor.scanout_bo; 495 struct drm_gem_object *prev_bo = mdp4_crtc->cursor.scanout_bo;
453 uint32_t iova = mdp4_crtc->cursor.next_iova; 496 uint32_t iova = mdp4_crtc->cursor.next_iova;
@@ -479,6 +522,11 @@ static void update_cursor(struct drm_crtc *crtc)
479 mdp4_crtc->cursor.scanout_bo = next_bo; 522 mdp4_crtc->cursor.scanout_bo = next_bo;
480 mdp4_crtc->cursor.stale = false; 523 mdp4_crtc->cursor.stale = false;
481 } 524 }
525
526 mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_POS(dma),
527 MDP4_DMA_CURSOR_POS_X(mdp4_crtc->cursor.x) |
528 MDP4_DMA_CURSOR_POS_Y(mdp4_crtc->cursor.y));
529
482 spin_unlock_irqrestore(&mdp4_crtc->cursor.lock, flags); 530 spin_unlock_irqrestore(&mdp4_crtc->cursor.lock, flags);
483} 531}
484 532
@@ -530,6 +578,7 @@ static int mdp4_crtc_cursor_set(struct drm_crtc *crtc,
530 drm_gem_object_unreference_unlocked(old_bo); 578 drm_gem_object_unreference_unlocked(old_bo);
531 } 579 }
532 580
581 crtc_flush(crtc);
533 request_pending(crtc, PENDING_CURSOR); 582 request_pending(crtc, PENDING_CURSOR);
534 583
535 return 0; 584 return 0;
@@ -542,12 +591,15 @@ fail:
542static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) 591static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
543{ 592{
544 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 593 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
545 struct mdp4_kms *mdp4_kms = get_kms(crtc); 594 unsigned long flags;
546 enum mdp4_dma dma = mdp4_crtc->dma;
547 595
548 mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_POS(dma), 596 spin_lock_irqsave(&mdp4_crtc->cursor.lock, flags);
549 MDP4_DMA_CURSOR_POS_X(x) | 597 mdp4_crtc->cursor.x = x;
550 MDP4_DMA_CURSOR_POS_Y(y)); 598 mdp4_crtc->cursor.y = y;
599 spin_unlock_irqrestore(&mdp4_crtc->cursor.lock, flags);
600
601 crtc_flush(crtc);
602 request_pending(crtc, PENDING_CURSOR);
551 603
552 return 0; 604 return 0;
553} 605}
@@ -713,6 +765,7 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
713 crtc = &mdp4_crtc->base; 765 crtc = &mdp4_crtc->base;
714 766
715 mdp4_crtc->plane = plane; 767 mdp4_crtc->plane = plane;
768 mdp4_crtc->id = id;
716 769
717 mdp4_crtc->ovlp = ovlp_id; 770 mdp4_crtc->ovlp = ovlp_id;
718 mdp4_crtc->dma = dma_id; 771 mdp4_crtc->dma = dma_id;
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
index 2406027200ec..1e893dd13859 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
@@ -170,8 +170,8 @@ int mdp4_plane_mode_set(struct drm_plane *plane,
170 MDP4_PIPE_DST_SIZE_HEIGHT(crtc_h)); 170 MDP4_PIPE_DST_SIZE_HEIGHT(crtc_h));
171 171
172 mdp4_write(mdp4_kms, REG_MDP4_PIPE_DST_XY(pipe), 172 mdp4_write(mdp4_kms, REG_MDP4_PIPE_DST_XY(pipe),
173 MDP4_PIPE_SRC_XY_X(crtc_x) | 173 MDP4_PIPE_DST_XY_X(crtc_x) |
174 MDP4_PIPE_SRC_XY_Y(crtc_y)); 174 MDP4_PIPE_DST_XY_Y(crtc_y));
175 175
176 mdp4_plane_set_scanout(plane, fb); 176 mdp4_plane_set_scanout(plane, fb);
177 177
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
index 71a3b2345eb3..f2794021f086 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
@@ -296,6 +296,7 @@ static int mdp5_crtc_mode_set(struct drm_crtc *crtc,
296 x << 16, y << 16, 296 x << 16, y << 16,
297 mode->hdisplay << 16, mode->vdisplay << 16); 297 mode->hdisplay << 16, mode->vdisplay << 16);
298 if (ret) { 298 if (ret) {
299 drm_framebuffer_unreference(crtc->fb);
299 dev_err(crtc->dev->dev, "%s: failed to set mode on plane: %d\n", 300 dev_err(crtc->dev->dev, "%s: failed to set mode on plane: %d\n",
300 mdp5_crtc->name, ret); 301 mdp5_crtc->name, ret);
301 return ret; 302 return ret;
@@ -343,11 +344,15 @@ static int mdp5_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
343 0, 0, mode->hdisplay, mode->vdisplay, 344 0, 0, mode->hdisplay, mode->vdisplay,
344 x << 16, y << 16, 345 x << 16, y << 16,
345 mode->hdisplay << 16, mode->vdisplay << 16); 346 mode->hdisplay << 16, mode->vdisplay << 16);
347 if (ret) {
348 drm_framebuffer_unreference(crtc->fb);
349 return ret;
350 }
346 351
347 update_fb(crtc, crtc->fb); 352 update_fb(crtc, crtc->fb);
348 update_scanout(crtc, crtc->fb); 353 update_scanout(crtc, crtc->fb);
349 354
350 return ret; 355 return 0;
351} 356}
352 357
353static void mdp5_crtc_load_lut(struct drm_crtc *crtc) 358static void mdp5_crtc_load_lut(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index d8d60c969ac7..3da8264d3039 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -644,7 +644,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev,
644 644
645fail: 645fail:
646 if (obj) 646 if (obj)
647 drm_gem_object_unreference_unlocked(obj); 647 drm_gem_object_unreference(obj);
648 648
649 return ERR_PTR(ret); 649 return ERR_PTR(ret);
650} 650}
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index 5281d4bc37f7..5423e914e491 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -163,7 +163,7 @@ retry:
163 163
164 164
165 /* if locking succeeded, pin bo: */ 165 /* if locking succeeded, pin bo: */
166 ret = msm_gem_get_iova(&msm_obj->base, 166 ret = msm_gem_get_iova_locked(&msm_obj->base,
167 submit->gpu->id, &iova); 167 submit->gpu->id, &iova);
168 168
169 /* this would break the logic in the fail path.. there is no 169 /* this would break the logic in the fail path.. there is no
@@ -247,7 +247,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
247 /* For now, just map the entire thing. Eventually we probably 247 /* For now, just map the entire thing. Eventually we probably
248 * to do it page-by-page, w/ kmap() if not vmap()d.. 248 * to do it page-by-page, w/ kmap() if not vmap()d..
249 */ 249 */
250 ptr = msm_gem_vaddr(&obj->base); 250 ptr = msm_gem_vaddr_locked(&obj->base);
251 251
252 if (IS_ERR(ptr)) { 252 if (IS_ERR(ptr)) {
253 ret = PTR_ERR(ptr); 253 ret = PTR_ERR(ptr);
@@ -307,14 +307,12 @@ static void submit_cleanup(struct msm_gem_submit *submit, bool fail)
307{ 307{
308 unsigned i; 308 unsigned i;
309 309
310 mutex_lock(&submit->dev->struct_mutex);
311 for (i = 0; i < submit->nr_bos; i++) { 310 for (i = 0; i < submit->nr_bos; i++) {
312 struct msm_gem_object *msm_obj = submit->bos[i].obj; 311 struct msm_gem_object *msm_obj = submit->bos[i].obj;
313 submit_unlock_unpin_bo(submit, i); 312 submit_unlock_unpin_bo(submit, i);
314 list_del_init(&msm_obj->submit_entry); 313 list_del_init(&msm_obj->submit_entry);
315 drm_gem_object_unreference(&msm_obj->base); 314 drm_gem_object_unreference(&msm_obj->base);
316 } 315 }
317 mutex_unlock(&submit->dev->struct_mutex);
318 316
319 ww_acquire_fini(&submit->ticket); 317 ww_acquire_fini(&submit->ticket);
320 kfree(submit); 318 kfree(submit);
@@ -342,6 +340,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
342 if (args->nr_cmds > MAX_CMDS) 340 if (args->nr_cmds > MAX_CMDS)
343 return -EINVAL; 341 return -EINVAL;
344 342
343 mutex_lock(&dev->struct_mutex);
344
345 submit = submit_create(dev, gpu, args->nr_bos); 345 submit = submit_create(dev, gpu, args->nr_bos);
346 if (!submit) { 346 if (!submit) {
347 ret = -ENOMEM; 347 ret = -ENOMEM;
@@ -410,5 +410,6 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
410out: 410out:
411 if (submit) 411 if (submit)
412 submit_cleanup(submit, !!ret); 412 submit_cleanup(submit, !!ret);
413 mutex_unlock(&dev->struct_mutex);
413 return ret; 414 return ret;
414} 415}
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 4ebce8be489d..0cfe3f426ee4 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -298,8 +298,6 @@ int msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
298 struct msm_drm_private *priv = dev->dev_private; 298 struct msm_drm_private *priv = dev->dev_private;
299 int i, ret; 299 int i, ret;
300 300
301 mutex_lock(&dev->struct_mutex);
302
303 submit->fence = ++priv->next_fence; 301 submit->fence = ++priv->next_fence;
304 302
305 gpu->submitted_fence = submit->fence; 303 gpu->submitted_fence = submit->fence;
@@ -331,7 +329,6 @@ int msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
331 msm_gem_move_to_active(&msm_obj->base, gpu, true, submit->fence); 329 msm_gem_move_to_active(&msm_obj->base, gpu, true, submit->fence);
332 } 330 }
333 hangcheck_timer_reset(gpu); 331 hangcheck_timer_reset(gpu);
334 mutex_unlock(&dev->struct_mutex);
335 332
336 return ret; 333 return ret;
337} 334}
diff --git a/drivers/gpu/drm/radeon/btc_dpm.c b/drivers/gpu/drm/radeon/btc_dpm.c
index 0fbd36f3d4e9..ea103ccdf4bd 100644
--- a/drivers/gpu/drm/radeon/btc_dpm.c
+++ b/drivers/gpu/drm/radeon/btc_dpm.c
@@ -29,6 +29,7 @@
29#include "cypress_dpm.h" 29#include "cypress_dpm.h"
30#include "btc_dpm.h" 30#include "btc_dpm.h"
31#include "atom.h" 31#include "atom.h"
32#include <linux/seq_file.h>
32 33
33#define MC_CG_ARB_FREQ_F0 0x0a 34#define MC_CG_ARB_FREQ_F0 0x0a
34#define MC_CG_ARB_FREQ_F1 0x0b 35#define MC_CG_ARB_FREQ_F1 0x0b
@@ -2756,6 +2757,37 @@ void btc_dpm_fini(struct radeon_device *rdev)
2756 r600_free_extended_power_table(rdev); 2757 r600_free_extended_power_table(rdev);
2757} 2758}
2758 2759
2760void btc_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
2761 struct seq_file *m)
2762{
2763 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev);
2764 struct radeon_ps *rps = &eg_pi->current_rps;
2765 struct rv7xx_ps *ps = rv770_get_ps(rps);
2766 struct rv7xx_pl *pl;
2767 u32 current_index =
2768 (RREG32(TARGET_AND_CURRENT_PROFILE_INDEX) & CURRENT_PROFILE_INDEX_MASK) >>
2769 CURRENT_PROFILE_INDEX_SHIFT;
2770
2771 if (current_index > 2) {
2772 seq_printf(m, "invalid dpm profile %d\n", current_index);
2773 } else {
2774 if (current_index == 0)
2775 pl = &ps->low;
2776 else if (current_index == 1)
2777 pl = &ps->medium;
2778 else /* current_index == 2 */
2779 pl = &ps->high;
2780 seq_printf(m, "uvd vclk: %d dclk: %d\n", rps->vclk, rps->dclk);
2781 if (rdev->family >= CHIP_CEDAR) {
2782 seq_printf(m, "power level %d sclk: %u mclk: %u vddc: %u vddci: %u\n",
2783 current_index, pl->sclk, pl->mclk, pl->vddc, pl->vddci);
2784 } else {
2785 seq_printf(m, "power level %d sclk: %u mclk: %u vddc: %u\n",
2786 current_index, pl->sclk, pl->mclk, pl->vddc);
2787 }
2788 }
2789}
2790
2759u32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low) 2791u32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low)
2760{ 2792{
2761 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 2793 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev);
diff --git a/drivers/gpu/drm/radeon/btcd.h b/drivers/gpu/drm/radeon/btcd.h
index 29e32de7e025..9c65be2d55a9 100644
--- a/drivers/gpu/drm/radeon/btcd.h
+++ b/drivers/gpu/drm/radeon/btcd.h
@@ -44,6 +44,10 @@
44# define DYN_SPREAD_SPECTRUM_EN (1 << 23) 44# define DYN_SPREAD_SPECTRUM_EN (1 << 23)
45# define AC_DC_SW (1 << 24) 45# define AC_DC_SW (1 << 24)
46 46
47#define TARGET_AND_CURRENT_PROFILE_INDEX 0x66c
48# define CURRENT_PROFILE_INDEX_MASK (0xf << 4)
49# define CURRENT_PROFILE_INDEX_SHIFT 4
50
47#define CG_BIF_REQ_AND_RSP 0x7f4 51#define CG_BIF_REQ_AND_RSP 0x7f4
48#define CG_CLIENT_REQ(x) ((x) << 0) 52#define CG_CLIENT_REQ(x) ((x) << 0)
49#define CG_CLIENT_REQ_MASK (0xff << 0) 53#define CG_CLIENT_REQ_MASK (0xff << 0)
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
index b6e01d5d2cce..351db361239d 100644
--- a/drivers/gpu/drm/radeon/kv_dpm.c
+++ b/drivers/gpu/drm/radeon/kv_dpm.c
@@ -1223,7 +1223,7 @@ int kv_dpm_enable(struct radeon_device *rdev)
1223 1223
1224int kv_dpm_late_enable(struct radeon_device *rdev) 1224int kv_dpm_late_enable(struct radeon_device *rdev)
1225{ 1225{
1226 int ret; 1226 int ret = 0;
1227 1227
1228 if (rdev->irq.installed && 1228 if (rdev->irq.installed &&
1229 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { 1229 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) {
diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
index c351226ecb31..1217fbcbdcca 100644
--- a/drivers/gpu/drm/radeon/ni_dpm.c
+++ b/drivers/gpu/drm/radeon/ni_dpm.c
@@ -3945,7 +3945,6 @@ static void ni_parse_pplib_clock_info(struct radeon_device *rdev,
3945 struct rv7xx_power_info *pi = rv770_get_pi(rdev); 3945 struct rv7xx_power_info *pi = rv770_get_pi(rdev);
3946 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 3946 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev);
3947 struct ni_ps *ps = ni_get_ps(rps); 3947 struct ni_ps *ps = ni_get_ps(rps);
3948 u16 vddc;
3949 struct rv7xx_pl *pl = &ps->performance_levels[index]; 3948 struct rv7xx_pl *pl = &ps->performance_levels[index];
3950 3949
3951 ps->performance_level_count = index + 1; 3950 ps->performance_level_count = index + 1;
@@ -3961,8 +3960,8 @@ static void ni_parse_pplib_clock_info(struct radeon_device *rdev,
3961 3960
3962 /* patch up vddc if necessary */ 3961 /* patch up vddc if necessary */
3963 if (pl->vddc == 0xff01) { 3962 if (pl->vddc == 0xff01) {
3964 if (radeon_atom_get_max_vddc(rdev, 0, 0, &vddc) == 0) 3963 if (pi->max_vddc)
3965 pl->vddc = vddc; 3964 pl->vddc = pi->max_vddc;
3966 } 3965 }
3967 3966
3968 if (rps->class & ATOM_PPLIB_CLASSIFICATION_ACPI) { 3967 if (rps->class & ATOM_PPLIB_CLASSIFICATION_ACPI) {
@@ -4322,7 +4321,8 @@ void ni_dpm_print_power_state(struct radeon_device *rdev,
4322void ni_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, 4321void ni_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
4323 struct seq_file *m) 4322 struct seq_file *m)
4324{ 4323{
4325 struct radeon_ps *rps = rdev->pm.dpm.current_ps; 4324 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev);
4325 struct radeon_ps *rps = &eg_pi->current_rps;
4326 struct ni_ps *ps = ni_get_ps(rps); 4326 struct ni_ps *ps = ni_get_ps(rps);
4327 struct rv7xx_pl *pl; 4327 struct rv7xx_pl *pl;
4328 u32 current_index = 4328 u32 current_index =
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 56140b4e5bb2..cdbc4171fe73 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -3991,6 +3991,10 @@ restart_ih:
3991 break; 3991 break;
3992 } 3992 }
3993 break; 3993 break;
3994 case 124: /* UVD */
3995 DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
3996 radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
3997 break;
3994 case 176: /* CP_INT in ring buffer */ 3998 case 176: /* CP_INT in ring buffer */
3995 case 177: /* CP_INT in IB1 */ 3999 case 177: /* CP_INT in IB1 */
3996 case 178: /* CP_INT in IB2 */ 4000 case 178: /* CP_INT in IB2 */
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index 7b399dc5fd54..2812c7d1ae6f 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -1007,8 +1007,22 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
1007 case R_008C64_SQ_VSTMP_RING_SIZE: 1007 case R_008C64_SQ_VSTMP_RING_SIZE:
1008 case R_0288C8_SQ_GS_VERT_ITEMSIZE: 1008 case R_0288C8_SQ_GS_VERT_ITEMSIZE:
1009 /* get value to populate the IB don't remove */ 1009 /* get value to populate the IB don't remove */
1010 tmp =radeon_get_ib_value(p, idx); 1010 /*tmp =radeon_get_ib_value(p, idx);
1011 ib[idx] = 0; 1011 ib[idx] = 0;*/
1012 break;
1013 case SQ_ESGS_RING_BASE:
1014 case SQ_GSVS_RING_BASE:
1015 case SQ_ESTMP_RING_BASE:
1016 case SQ_GSTMP_RING_BASE:
1017 case SQ_PSTMP_RING_BASE:
1018 case SQ_VSTMP_RING_BASE:
1019 r = radeon_cs_packet_next_reloc(p, &reloc, 0);
1020 if (r) {
1021 dev_warn(p->dev, "bad SET_CONTEXT_REG "
1022 "0x%04X\n", reg);
1023 return -EINVAL;
1024 }
1025 ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
1012 break; 1026 break;
1013 case SQ_CONFIG: 1027 case SQ_CONFIG:
1014 track->sq_config = radeon_get_ib_value(p, idx); 1028 track->sq_config = radeon_get_ib_value(p, idx);
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index f74db43346fd..dda02bfc10a4 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -1555,7 +1555,7 @@ static struct radeon_asic btc_asic = {
1555 .get_sclk = &btc_dpm_get_sclk, 1555 .get_sclk = &btc_dpm_get_sclk,
1556 .get_mclk = &btc_dpm_get_mclk, 1556 .get_mclk = &btc_dpm_get_mclk,
1557 .print_power_state = &rv770_dpm_print_power_state, 1557 .print_power_state = &rv770_dpm_print_power_state,
1558 .debugfs_print_current_performance_level = &rv770_dpm_debugfs_print_current_performance_level, 1558 .debugfs_print_current_performance_level = &btc_dpm_debugfs_print_current_performance_level,
1559 .force_performance_level = &rv770_dpm_force_performance_level, 1559 .force_performance_level = &rv770_dpm_force_performance_level,
1560 .vblank_too_short = &btc_dpm_vblank_too_short, 1560 .vblank_too_short = &btc_dpm_vblank_too_short,
1561 }, 1561 },
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
index b3bc433eed4c..ae637cfda783 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.h
+++ b/drivers/gpu/drm/radeon/radeon_asic.h
@@ -551,6 +551,8 @@ void btc_dpm_fini(struct radeon_device *rdev);
551u32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low); 551u32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low);
552u32 btc_dpm_get_mclk(struct radeon_device *rdev, bool low); 552u32 btc_dpm_get_mclk(struct radeon_device *rdev, bool low);
553bool btc_dpm_vblank_too_short(struct radeon_device *rdev); 553bool btc_dpm_vblank_too_short(struct radeon_device *rdev);
554void btc_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
555 struct seq_file *m);
554int sumo_dpm_init(struct radeon_device *rdev); 556int sumo_dpm_init(struct radeon_device *rdev);
555int sumo_dpm_enable(struct radeon_device *rdev); 557int sumo_dpm_enable(struct radeon_device *rdev);
556int sumo_dpm_late_enable(struct radeon_device *rdev); 558int sumo_dpm_late_enable(struct radeon_device *rdev);
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index ec8c388eec17..84a1bbb75f91 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -78,9 +78,10 @@
78 * 2.34.0 - Add CIK tiling mode array query 78 * 2.34.0 - Add CIK tiling mode array query
79 * 2.35.0 - Add CIK macrotile mode array query 79 * 2.35.0 - Add CIK macrotile mode array query
80 * 2.36.0 - Fix CIK DCE tiling setup 80 * 2.36.0 - Fix CIK DCE tiling setup
81 * 2.37.0 - allow GS ring setup on r6xx/r7xx
81 */ 82 */
82#define KMS_DRIVER_MAJOR 2 83#define KMS_DRIVER_MAJOR 2
83#define KMS_DRIVER_MINOR 36 84#define KMS_DRIVER_MINOR 37
84#define KMS_DRIVER_PATCHLEVEL 0 85#define KMS_DRIVER_PATCHLEVEL 0
85int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); 86int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
86int radeon_driver_unload_kms(struct drm_device *dev); 87int radeon_driver_unload_kms(struct drm_device *dev);
diff --git a/drivers/gpu/drm/radeon/reg_srcs/r600 b/drivers/gpu/drm/radeon/reg_srcs/r600
index 20bfbda7b3f1..ec0c6829c1dc 100644
--- a/drivers/gpu/drm/radeon/reg_srcs/r600
+++ b/drivers/gpu/drm/radeon/reg_srcs/r600
@@ -18,6 +18,7 @@ r600 0x9400
180x00028A3C VGT_GROUP_VECT_1_FMT_CNTL 180x00028A3C VGT_GROUP_VECT_1_FMT_CNTL
190x00028A40 VGT_GS_MODE 190x00028A40 VGT_GS_MODE
200x00028A6C VGT_GS_OUT_PRIM_TYPE 200x00028A6C VGT_GS_OUT_PRIM_TYPE
210x00028B38 VGT_GS_MAX_VERT_OUT
210x000088C8 VGT_GS_PER_ES 220x000088C8 VGT_GS_PER_ES
220x000088E8 VGT_GS_PER_VS 230x000088E8 VGT_GS_PER_VS
230x000088D4 VGT_GS_VERTEX_REUSE 240x000088D4 VGT_GS_VERTEX_REUSE
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c
index 80c595aba359..5b2ea8ac0731 100644
--- a/drivers/gpu/drm/radeon/rv770_dpm.c
+++ b/drivers/gpu/drm/radeon/rv770_dpm.c
@@ -2174,7 +2174,6 @@ static void rv7xx_parse_pplib_clock_info(struct radeon_device *rdev,
2174 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 2174 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev);
2175 struct rv7xx_ps *ps = rv770_get_ps(rps); 2175 struct rv7xx_ps *ps = rv770_get_ps(rps);
2176 u32 sclk, mclk; 2176 u32 sclk, mclk;
2177 u16 vddc;
2178 struct rv7xx_pl *pl; 2177 struct rv7xx_pl *pl;
2179 2178
2180 switch (index) { 2179 switch (index) {
@@ -2214,8 +2213,8 @@ static void rv7xx_parse_pplib_clock_info(struct radeon_device *rdev,
2214 2213
2215 /* patch up vddc if necessary */ 2214 /* patch up vddc if necessary */
2216 if (pl->vddc == 0xff01) { 2215 if (pl->vddc == 0xff01) {
2217 if (radeon_atom_get_max_vddc(rdev, 0, 0, &vddc) == 0) 2216 if (pi->max_vddc)
2218 pl->vddc = vddc; 2217 pl->vddc = pi->max_vddc;
2219 } 2218 }
2220 2219
2221 if (rps->class & ATOM_PPLIB_CLASSIFICATION_ACPI) { 2220 if (rps->class & ATOM_PPLIB_CLASSIFICATION_ACPI) {
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 09ec4f6c53bb..83578324e5d1 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -6338,6 +6338,10 @@ restart_ih:
6338 break; 6338 break;
6339 } 6339 }
6340 break; 6340 break;
6341 case 124: /* UVD */
6342 DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
6343 radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
6344 break;
6341 case 146: 6345 case 146:
6342 case 147: 6346 case 147:
6343 addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR); 6347 addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR);
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index 0471501338fb..eafb0e6bc67e 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -6472,7 +6472,8 @@ void si_dpm_fini(struct radeon_device *rdev)
6472void si_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, 6472void si_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
6473 struct seq_file *m) 6473 struct seq_file *m)
6474{ 6474{
6475 struct radeon_ps *rps = rdev->pm.dpm.current_ps; 6475 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev);
6476 struct radeon_ps *rps = &eg_pi->current_rps;
6476 struct ni_ps *ps = ni_get_ps(rps); 6477 struct ni_ps *ps = ni_get_ps(rps);
6477 struct rv7xx_pl *pl; 6478 struct rv7xx_pl *pl;
6478 u32 current_index = 6479 u32 current_index =
diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c
index f121efe12dc5..8b47b3cd0357 100644
--- a/drivers/gpu/drm/radeon/sumo_dpm.c
+++ b/drivers/gpu/drm/radeon/sumo_dpm.c
@@ -1807,7 +1807,7 @@ void sumo_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev
1807 struct seq_file *m) 1807 struct seq_file *m)
1808{ 1808{
1809 struct sumo_power_info *pi = sumo_get_pi(rdev); 1809 struct sumo_power_info *pi = sumo_get_pi(rdev);
1810 struct radeon_ps *rps = rdev->pm.dpm.current_ps; 1810 struct radeon_ps *rps = &pi->current_rps;
1811 struct sumo_ps *ps = sumo_get_ps(rps); 1811 struct sumo_ps *ps = sumo_get_ps(rps);
1812 struct sumo_pl *pl; 1812 struct sumo_pl *pl;
1813 u32 current_index = 1813 u32 current_index =
diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c
index 2d447192d6f7..2da0e17eb960 100644
--- a/drivers/gpu/drm/radeon/trinity_dpm.c
+++ b/drivers/gpu/drm/radeon/trinity_dpm.c
@@ -1926,7 +1926,8 @@ void trinity_dpm_print_power_state(struct radeon_device *rdev,
1926void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, 1926void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
1927 struct seq_file *m) 1927 struct seq_file *m)
1928{ 1928{
1929 struct radeon_ps *rps = rdev->pm.dpm.current_ps; 1929 struct trinity_power_info *pi = trinity_get_pi(rdev);
1930 struct radeon_ps *rps = &pi->current_rps;
1930 struct trinity_ps *ps = trinity_get_ps(rps); 1931 struct trinity_ps *ps = trinity_get_ps(rps);
1931 struct trinity_pl *pl; 1932 struct trinity_pl *pl;
1932 u32 current_index = 1933 u32 current_index =
diff --git a/drivers/gpu/drm/radeon/uvd_v2_2.c b/drivers/gpu/drm/radeon/uvd_v2_2.c
index 824550db3fed..d1771004cb52 100644
--- a/drivers/gpu/drm/radeon/uvd_v2_2.c
+++ b/drivers/gpu/drm/radeon/uvd_v2_2.c
@@ -57,7 +57,6 @@ void uvd_v2_2_fence_emit(struct radeon_device *rdev,
57 radeon_ring_write(ring, 0); 57 radeon_ring_write(ring, 0);
58 radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_CMD, 0)); 58 radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_CMD, 0));
59 radeon_ring_write(ring, 2); 59 radeon_ring_write(ring, 2);
60 return;
61} 60}
62 61
63/** 62/**
diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c
index 37079859afc8..53b51c4e671a 100644
--- a/drivers/gpu/drm/ttm/ttm_object.c
+++ b/drivers/gpu/drm/ttm/ttm_object.c
@@ -292,7 +292,7 @@ int ttm_ref_object_add(struct ttm_object_file *tfile,
292 292
293 if (ret == 0) { 293 if (ret == 0) {
294 ref = drm_hash_entry(hash, struct ttm_ref_object, hash); 294 ref = drm_hash_entry(hash, struct ttm_ref_object, hash);
295 if (!kref_get_unless_zero(&ref->kref)) { 295 if (kref_get_unless_zero(&ref->kref)) {
296 rcu_read_unlock(); 296 rcu_read_unlock();
297 break; 297 break;
298 } 298 }
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index 9af99084b344..75f319090043 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -380,6 +380,9 @@ static void ttm_tt_clear_mapping(struct ttm_tt *ttm)
380 pgoff_t i; 380 pgoff_t i;
381 struct page **page = ttm->pages; 381 struct page **page = ttm->pages;
382 382
383 if (ttm->page_flags & TTM_PAGE_FLAG_SG)
384 return;
385
383 for (i = 0; i < ttm->num_pages; ++i) { 386 for (i = 0; i < ttm->num_pages; ++i) {
384 (*page)->mapping = NULL; 387 (*page)->mapping = NULL;
385 (*page++)->index = 0; 388 (*page++)->index = 0;
diff --git a/drivers/gpu/drm/vmwgfx/svga3d_reg.h b/drivers/gpu/drm/vmwgfx/svga3d_reg.h
index d95335cb90bd..b645647b7776 100644
--- a/drivers/gpu/drm/vmwgfx/svga3d_reg.h
+++ b/drivers/gpu/drm/vmwgfx/svga3d_reg.h
@@ -2583,4 +2583,28 @@ typedef union {
2583 float f; 2583 float f;
2584} SVGA3dDevCapResult; 2584} SVGA3dDevCapResult;
2585 2585
2586typedef enum {
2587 SVGA3DCAPS_RECORD_UNKNOWN = 0,
2588 SVGA3DCAPS_RECORD_DEVCAPS_MIN = 0x100,
2589 SVGA3DCAPS_RECORD_DEVCAPS = 0x100,
2590 SVGA3DCAPS_RECORD_DEVCAPS_MAX = 0x1ff,
2591} SVGA3dCapsRecordType;
2592
2593typedef
2594struct SVGA3dCapsRecordHeader {
2595 uint32 length;
2596 SVGA3dCapsRecordType type;
2597}
2598SVGA3dCapsRecordHeader;
2599
2600typedef
2601struct SVGA3dCapsRecord {
2602 SVGA3dCapsRecordHeader header;
2603 uint32 data[1];
2604}
2605SVGA3dCapsRecord;
2606
2607
2608typedef uint32 SVGA3dCapPair[2];
2609
2586#endif /* _SVGA3D_REG_H_ */ 2610#endif /* _SVGA3D_REG_H_ */
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
index 82c41daebc0e..9426c53fb483 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
@@ -37,7 +37,7 @@ struct vmw_user_context {
37 37
38 38
39 39
40typedef int (*vmw_scrub_func)(struct vmw_ctx_bindinfo *); 40typedef int (*vmw_scrub_func)(struct vmw_ctx_bindinfo *, bool);
41 41
42static void vmw_user_context_free(struct vmw_resource *res); 42static void vmw_user_context_free(struct vmw_resource *res);
43static struct vmw_resource * 43static struct vmw_resource *
@@ -50,9 +50,11 @@ static int vmw_gb_context_unbind(struct vmw_resource *res,
50 bool readback, 50 bool readback,
51 struct ttm_validate_buffer *val_buf); 51 struct ttm_validate_buffer *val_buf);
52static int vmw_gb_context_destroy(struct vmw_resource *res); 52static int vmw_gb_context_destroy(struct vmw_resource *res);
53static int vmw_context_scrub_shader(struct vmw_ctx_bindinfo *bi); 53static int vmw_context_scrub_shader(struct vmw_ctx_bindinfo *bi, bool rebind);
54static int vmw_context_scrub_render_target(struct vmw_ctx_bindinfo *bi); 54static int vmw_context_scrub_render_target(struct vmw_ctx_bindinfo *bi,
55static int vmw_context_scrub_texture(struct vmw_ctx_bindinfo *bi); 55 bool rebind);
56static int vmw_context_scrub_texture(struct vmw_ctx_bindinfo *bi, bool rebind);
57static void vmw_context_binding_state_scrub(struct vmw_ctx_binding_state *cbs);
56static void vmw_context_binding_state_kill(struct vmw_ctx_binding_state *cbs); 58static void vmw_context_binding_state_kill(struct vmw_ctx_binding_state *cbs);
57static uint64_t vmw_user_context_size; 59static uint64_t vmw_user_context_size;
58 60
@@ -111,10 +113,14 @@ static void vmw_hw_context_destroy(struct vmw_resource *res)
111 113
112 if (res->func->destroy == vmw_gb_context_destroy) { 114 if (res->func->destroy == vmw_gb_context_destroy) {
113 mutex_lock(&dev_priv->cmdbuf_mutex); 115 mutex_lock(&dev_priv->cmdbuf_mutex);
116 mutex_lock(&dev_priv->binding_mutex);
117 (void) vmw_context_binding_state_kill
118 (&container_of(res, struct vmw_user_context, res)->cbs);
114 (void) vmw_gb_context_destroy(res); 119 (void) vmw_gb_context_destroy(res);
115 if (dev_priv->pinned_bo != NULL && 120 if (dev_priv->pinned_bo != NULL &&
116 !dev_priv->query_cid_valid) 121 !dev_priv->query_cid_valid)
117 __vmw_execbuf_release_pinned_bo(dev_priv, NULL); 122 __vmw_execbuf_release_pinned_bo(dev_priv, NULL);
123 mutex_unlock(&dev_priv->binding_mutex);
118 mutex_unlock(&dev_priv->cmdbuf_mutex); 124 mutex_unlock(&dev_priv->cmdbuf_mutex);
119 return; 125 return;
120 } 126 }
@@ -328,7 +334,7 @@ static int vmw_gb_context_unbind(struct vmw_resource *res,
328 BUG_ON(bo->mem.mem_type != VMW_PL_MOB); 334 BUG_ON(bo->mem.mem_type != VMW_PL_MOB);
329 335
330 mutex_lock(&dev_priv->binding_mutex); 336 mutex_lock(&dev_priv->binding_mutex);
331 vmw_context_binding_state_kill(&uctx->cbs); 337 vmw_context_binding_state_scrub(&uctx->cbs);
332 338
333 submit_size = sizeof(*cmd2) + (readback ? sizeof(*cmd1) : 0); 339 submit_size = sizeof(*cmd2) + (readback ? sizeof(*cmd1) : 0);
334 340
@@ -378,10 +384,6 @@ static int vmw_gb_context_destroy(struct vmw_resource *res)
378 SVGA3dCmdHeader header; 384 SVGA3dCmdHeader header;
379 SVGA3dCmdDestroyGBContext body; 385 SVGA3dCmdDestroyGBContext body;
380 } *cmd; 386 } *cmd;
381 struct vmw_user_context *uctx =
382 container_of(res, struct vmw_user_context, res);
383
384 BUG_ON(!list_empty(&uctx->cbs.list));
385 387
386 if (likely(res->id == -1)) 388 if (likely(res->id == -1))
387 return 0; 389 return 0;
@@ -528,8 +530,9 @@ out_unlock:
528 * vmw_context_scrub_shader - scrub a shader binding from a context. 530 * vmw_context_scrub_shader - scrub a shader binding from a context.
529 * 531 *
530 * @bi: single binding information. 532 * @bi: single binding information.
533 * @rebind: Whether to issue a bind instead of scrub command.
531 */ 534 */
532static int vmw_context_scrub_shader(struct vmw_ctx_bindinfo *bi) 535static int vmw_context_scrub_shader(struct vmw_ctx_bindinfo *bi, bool rebind)
533{ 536{
534 struct vmw_private *dev_priv = bi->ctx->dev_priv; 537 struct vmw_private *dev_priv = bi->ctx->dev_priv;
535 struct { 538 struct {
@@ -548,7 +551,8 @@ static int vmw_context_scrub_shader(struct vmw_ctx_bindinfo *bi)
548 cmd->header.size = sizeof(cmd->body); 551 cmd->header.size = sizeof(cmd->body);
549 cmd->body.cid = bi->ctx->id; 552 cmd->body.cid = bi->ctx->id;
550 cmd->body.type = bi->i1.shader_type; 553 cmd->body.type = bi->i1.shader_type;
551 cmd->body.shid = SVGA3D_INVALID_ID; 554 cmd->body.shid =
555 cpu_to_le32((rebind) ? bi->res->id : SVGA3D_INVALID_ID);
552 vmw_fifo_commit(dev_priv, sizeof(*cmd)); 556 vmw_fifo_commit(dev_priv, sizeof(*cmd));
553 557
554 return 0; 558 return 0;
@@ -559,8 +563,10 @@ static int vmw_context_scrub_shader(struct vmw_ctx_bindinfo *bi)
559 * from a context. 563 * from a context.
560 * 564 *
561 * @bi: single binding information. 565 * @bi: single binding information.
566 * @rebind: Whether to issue a bind instead of scrub command.
562 */ 567 */
563static int vmw_context_scrub_render_target(struct vmw_ctx_bindinfo *bi) 568static int vmw_context_scrub_render_target(struct vmw_ctx_bindinfo *bi,
569 bool rebind)
564{ 570{
565 struct vmw_private *dev_priv = bi->ctx->dev_priv; 571 struct vmw_private *dev_priv = bi->ctx->dev_priv;
566 struct { 572 struct {
@@ -579,7 +585,8 @@ static int vmw_context_scrub_render_target(struct vmw_ctx_bindinfo *bi)
579 cmd->header.size = sizeof(cmd->body); 585 cmd->header.size = sizeof(cmd->body);
580 cmd->body.cid = bi->ctx->id; 586 cmd->body.cid = bi->ctx->id;
581 cmd->body.type = bi->i1.rt_type; 587 cmd->body.type = bi->i1.rt_type;
582 cmd->body.target.sid = SVGA3D_INVALID_ID; 588 cmd->body.target.sid =
589 cpu_to_le32((rebind) ? bi->res->id : SVGA3D_INVALID_ID);
583 cmd->body.target.face = 0; 590 cmd->body.target.face = 0;
584 cmd->body.target.mipmap = 0; 591 cmd->body.target.mipmap = 0;
585 vmw_fifo_commit(dev_priv, sizeof(*cmd)); 592 vmw_fifo_commit(dev_priv, sizeof(*cmd));
@@ -591,11 +598,13 @@ static int vmw_context_scrub_render_target(struct vmw_ctx_bindinfo *bi)
591 * vmw_context_scrub_texture - scrub a texture binding from a context. 598 * vmw_context_scrub_texture - scrub a texture binding from a context.
592 * 599 *
593 * @bi: single binding information. 600 * @bi: single binding information.
601 * @rebind: Whether to issue a bind instead of scrub command.
594 * 602 *
595 * TODO: Possibly complement this function with a function that takes 603 * TODO: Possibly complement this function with a function that takes
596 * a list of texture bindings and combines them to a single command. 604 * a list of texture bindings and combines them to a single command.
597 */ 605 */
598static int vmw_context_scrub_texture(struct vmw_ctx_bindinfo *bi) 606static int vmw_context_scrub_texture(struct vmw_ctx_bindinfo *bi,
607 bool rebind)
599{ 608{
600 struct vmw_private *dev_priv = bi->ctx->dev_priv; 609 struct vmw_private *dev_priv = bi->ctx->dev_priv;
601 struct { 610 struct {
@@ -619,7 +628,8 @@ static int vmw_context_scrub_texture(struct vmw_ctx_bindinfo *bi)
619 cmd->body.c.cid = bi->ctx->id; 628 cmd->body.c.cid = bi->ctx->id;
620 cmd->body.s1.stage = bi->i1.texture_stage; 629 cmd->body.s1.stage = bi->i1.texture_stage;
621 cmd->body.s1.name = SVGA3D_TS_BIND_TEXTURE; 630 cmd->body.s1.name = SVGA3D_TS_BIND_TEXTURE;
622 cmd->body.s1.value = (uint32) SVGA3D_INVALID_ID; 631 cmd->body.s1.value =
632 cpu_to_le32((rebind) ? bi->res->id : SVGA3D_INVALID_ID);
623 vmw_fifo_commit(dev_priv, sizeof(*cmd)); 633 vmw_fifo_commit(dev_priv, sizeof(*cmd));
624 634
625 return 0; 635 return 0;
@@ -692,6 +702,7 @@ int vmw_context_binding_add(struct vmw_ctx_binding_state *cbs,
692 vmw_context_binding_drop(loc); 702 vmw_context_binding_drop(loc);
693 703
694 loc->bi = *bi; 704 loc->bi = *bi;
705 loc->bi.scrubbed = false;
695 list_add_tail(&loc->ctx_list, &cbs->list); 706 list_add_tail(&loc->ctx_list, &cbs->list);
696 INIT_LIST_HEAD(&loc->res_list); 707 INIT_LIST_HEAD(&loc->res_list);
697 708
@@ -727,12 +738,11 @@ static void vmw_context_binding_transfer(struct vmw_ctx_binding_state *cbs,
727 if (loc->bi.ctx != NULL) 738 if (loc->bi.ctx != NULL)
728 vmw_context_binding_drop(loc); 739 vmw_context_binding_drop(loc);
729 740
730 loc->bi = *bi; 741 if (bi->res != NULL) {
731 list_add_tail(&loc->ctx_list, &cbs->list); 742 loc->bi = *bi;
732 if (bi->res != NULL) 743 list_add_tail(&loc->ctx_list, &cbs->list);
733 list_add_tail(&loc->res_list, &bi->res->binding_head); 744 list_add_tail(&loc->res_list, &bi->res->binding_head);
734 else 745 }
735 INIT_LIST_HEAD(&loc->res_list);
736} 746}
737 747
738/** 748/**
@@ -746,7 +756,10 @@ static void vmw_context_binding_transfer(struct vmw_ctx_binding_state *cbs,
746 */ 756 */
747static void vmw_context_binding_kill(struct vmw_ctx_binding *cb) 757static void vmw_context_binding_kill(struct vmw_ctx_binding *cb)
748{ 758{
749 (void) vmw_scrub_funcs[cb->bi.bt](&cb->bi); 759 if (!cb->bi.scrubbed) {
760 (void) vmw_scrub_funcs[cb->bi.bt](&cb->bi, false);
761 cb->bi.scrubbed = true;
762 }
750 vmw_context_binding_drop(cb); 763 vmw_context_binding_drop(cb);
751} 764}
752 765
@@ -768,6 +781,27 @@ static void vmw_context_binding_state_kill(struct vmw_ctx_binding_state *cbs)
768} 781}
769 782
770/** 783/**
784 * vmw_context_binding_state_scrub - Scrub all bindings associated with a
785 * struct vmw_ctx_binding state structure.
786 *
787 * @cbs: Pointer to the context binding state tracker.
788 *
789 * Emits commands to scrub all bindings associated with the
790 * context binding state tracker.
791 */
792static void vmw_context_binding_state_scrub(struct vmw_ctx_binding_state *cbs)
793{
794 struct vmw_ctx_binding *entry;
795
796 list_for_each_entry(entry, &cbs->list, ctx_list) {
797 if (!entry->bi.scrubbed) {
798 (void) vmw_scrub_funcs[entry->bi.bt](&entry->bi, false);
799 entry->bi.scrubbed = true;
800 }
801 }
802}
803
804/**
771 * vmw_context_binding_res_list_kill - Kill all bindings on a 805 * vmw_context_binding_res_list_kill - Kill all bindings on a
772 * resource binding list 806 * resource binding list
773 * 807 *
@@ -785,6 +819,27 @@ void vmw_context_binding_res_list_kill(struct list_head *head)
785} 819}
786 820
787/** 821/**
822 * vmw_context_binding_res_list_scrub - Scrub all bindings on a
823 * resource binding list
824 *
825 * @head: list head of resource binding list
826 *
827 * Scrub all bindings associated with a specific resource. Typically
828 * called before the resource is evicted.
829 */
830void vmw_context_binding_res_list_scrub(struct list_head *head)
831{
832 struct vmw_ctx_binding *entry;
833
834 list_for_each_entry(entry, head, res_list) {
835 if (!entry->bi.scrubbed) {
836 (void) vmw_scrub_funcs[entry->bi.bt](&entry->bi, false);
837 entry->bi.scrubbed = true;
838 }
839 }
840}
841
842/**
788 * vmw_context_binding_state_transfer - Commit staged binding info 843 * vmw_context_binding_state_transfer - Commit staged binding info
789 * 844 *
790 * @ctx: Pointer to context to commit the staged binding info to. 845 * @ctx: Pointer to context to commit the staged binding info to.
@@ -803,3 +858,50 @@ void vmw_context_binding_state_transfer(struct vmw_resource *ctx,
803 list_for_each_entry_safe(entry, next, &from->list, ctx_list) 858 list_for_each_entry_safe(entry, next, &from->list, ctx_list)
804 vmw_context_binding_transfer(&uctx->cbs, &entry->bi); 859 vmw_context_binding_transfer(&uctx->cbs, &entry->bi);
805} 860}
861
862/**
863 * vmw_context_rebind_all - Rebind all scrubbed bindings of a context
864 *
865 * @ctx: The context resource
866 *
867 * Walks through the context binding list and rebinds all scrubbed
868 * resources.
869 */
870int vmw_context_rebind_all(struct vmw_resource *ctx)
871{
872 struct vmw_ctx_binding *entry;
873 struct vmw_user_context *uctx =
874 container_of(ctx, struct vmw_user_context, res);
875 struct vmw_ctx_binding_state *cbs = &uctx->cbs;
876 int ret;
877
878 list_for_each_entry(entry, &cbs->list, ctx_list) {
879 if (likely(!entry->bi.scrubbed))
880 continue;
881
882 if (WARN_ON(entry->bi.res == NULL || entry->bi.res->id ==
883 SVGA3D_INVALID_ID))
884 continue;
885
886 ret = vmw_scrub_funcs[entry->bi.bt](&entry->bi, true);
887 if (unlikely(ret != 0))
888 return ret;
889
890 entry->bi.scrubbed = false;
891 }
892
893 return 0;
894}
895
896/**
897 * vmw_context_binding_list - Return a list of context bindings
898 *
899 * @ctx: The context resource
900 *
901 * Returns the current list of bindings of the given context. Note that
902 * this list becomes stale as soon as the dev_priv::binding_mutex is unlocked.
903 */
904struct list_head *vmw_context_binding_list(struct vmw_resource *ctx)
905{
906 return &(container_of(ctx, struct vmw_user_context, res)->cbs.list);
907}
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 9893328f8fdc..3bdc0adc656d 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -941,6 +941,7 @@ static void vmw_postclose(struct drm_device *dev,
941 drm_master_put(&vmw_fp->locked_master); 941 drm_master_put(&vmw_fp->locked_master);
942 } 942 }
943 943
944 vmw_compat_shader_man_destroy(vmw_fp->shman);
944 ttm_object_file_release(&vmw_fp->tfile); 945 ttm_object_file_release(&vmw_fp->tfile);
945 kfree(vmw_fp); 946 kfree(vmw_fp);
946} 947}
@@ -960,11 +961,17 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
960 if (unlikely(vmw_fp->tfile == NULL)) 961 if (unlikely(vmw_fp->tfile == NULL))
961 goto out_no_tfile; 962 goto out_no_tfile;
962 963
964 vmw_fp->shman = vmw_compat_shader_man_create(dev_priv);
965 if (IS_ERR(vmw_fp->shman))
966 goto out_no_shman;
967
963 file_priv->driver_priv = vmw_fp; 968 file_priv->driver_priv = vmw_fp;
964 dev_priv->bdev.dev_mapping = dev->dev_mapping; 969 dev_priv->bdev.dev_mapping = dev->dev_mapping;
965 970
966 return 0; 971 return 0;
967 972
973out_no_shman:
974 ttm_object_file_release(&vmw_fp->tfile);
968out_no_tfile: 975out_no_tfile:
969 kfree(vmw_fp); 976 kfree(vmw_fp);
970 return ret; 977 return ret;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index 554e7fa33082..ecaa302a6154 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -75,10 +75,14 @@
75#define VMW_RES_FENCE ttm_driver_type3 75#define VMW_RES_FENCE ttm_driver_type3
76#define VMW_RES_SHADER ttm_driver_type4 76#define VMW_RES_SHADER ttm_driver_type4
77 77
78struct vmw_compat_shader_manager;
79
78struct vmw_fpriv { 80struct vmw_fpriv {
79 struct drm_master *locked_master; 81 struct drm_master *locked_master;
80 struct ttm_object_file *tfile; 82 struct ttm_object_file *tfile;
81 struct list_head fence_events; 83 struct list_head fence_events;
84 bool gb_aware;
85 struct vmw_compat_shader_manager *shman;
82}; 86};
83 87
84struct vmw_dma_buffer { 88struct vmw_dma_buffer {
@@ -272,6 +276,7 @@ struct vmw_ctx_bindinfo {
272 struct vmw_resource *ctx; 276 struct vmw_resource *ctx;
273 struct vmw_resource *res; 277 struct vmw_resource *res;
274 enum vmw_ctx_binding_type bt; 278 enum vmw_ctx_binding_type bt;
279 bool scrubbed;
275 union { 280 union {
276 SVGA3dShaderType shader_type; 281 SVGA3dShaderType shader_type;
277 SVGA3dRenderTargetType rt_type; 282 SVGA3dRenderTargetType rt_type;
@@ -318,7 +323,7 @@ struct vmw_sw_context{
318 struct drm_open_hash res_ht; 323 struct drm_open_hash res_ht;
319 bool res_ht_initialized; 324 bool res_ht_initialized;
320 bool kernel; /**< is the called made from the kernel */ 325 bool kernel; /**< is the called made from the kernel */
321 struct ttm_object_file *tfile; 326 struct vmw_fpriv *fp;
322 struct list_head validate_nodes; 327 struct list_head validate_nodes;
323 struct vmw_relocation relocs[VMWGFX_MAX_RELOCATIONS]; 328 struct vmw_relocation relocs[VMWGFX_MAX_RELOCATIONS];
324 uint32_t cur_reloc; 329 uint32_t cur_reloc;
@@ -336,6 +341,7 @@ struct vmw_sw_context{
336 bool needs_post_query_barrier; 341 bool needs_post_query_barrier;
337 struct vmw_resource *error_resource; 342 struct vmw_resource *error_resource;
338 struct vmw_ctx_binding_state staged_bindings; 343 struct vmw_ctx_binding_state staged_bindings;
344 struct list_head staged_shaders;
339}; 345};
340 346
341struct vmw_legacy_display; 347struct vmw_legacy_display;
@@ -569,6 +575,8 @@ struct vmw_user_resource_conv;
569 575
570extern void vmw_resource_unreference(struct vmw_resource **p_res); 576extern void vmw_resource_unreference(struct vmw_resource **p_res);
571extern struct vmw_resource *vmw_resource_reference(struct vmw_resource *res); 577extern struct vmw_resource *vmw_resource_reference(struct vmw_resource *res);
578extern struct vmw_resource *
579vmw_resource_reference_unless_doomed(struct vmw_resource *res);
572extern int vmw_resource_validate(struct vmw_resource *res); 580extern int vmw_resource_validate(struct vmw_resource *res);
573extern int vmw_resource_reserve(struct vmw_resource *res, bool no_backup); 581extern int vmw_resource_reserve(struct vmw_resource *res, bool no_backup);
574extern bool vmw_resource_needs_backup(const struct vmw_resource *res); 582extern bool vmw_resource_needs_backup(const struct vmw_resource *res);
@@ -957,6 +965,9 @@ extern void
957vmw_context_binding_state_transfer(struct vmw_resource *res, 965vmw_context_binding_state_transfer(struct vmw_resource *res,
958 struct vmw_ctx_binding_state *cbs); 966 struct vmw_ctx_binding_state *cbs);
959extern void vmw_context_binding_res_list_kill(struct list_head *head); 967extern void vmw_context_binding_res_list_kill(struct list_head *head);
968extern void vmw_context_binding_res_list_scrub(struct list_head *head);
969extern int vmw_context_rebind_all(struct vmw_resource *ctx);
970extern struct list_head *vmw_context_binding_list(struct vmw_resource *ctx);
960 971
961/* 972/*
962 * Surface management - vmwgfx_surface.c 973 * Surface management - vmwgfx_surface.c
@@ -991,6 +1002,28 @@ extern int vmw_shader_define_ioctl(struct drm_device *dev, void *data,
991 struct drm_file *file_priv); 1002 struct drm_file *file_priv);
992extern int vmw_shader_destroy_ioctl(struct drm_device *dev, void *data, 1003extern int vmw_shader_destroy_ioctl(struct drm_device *dev, void *data,
993 struct drm_file *file_priv); 1004 struct drm_file *file_priv);
1005extern int vmw_compat_shader_lookup(struct vmw_compat_shader_manager *man,
1006 SVGA3dShaderType shader_type,
1007 u32 *user_key);
1008extern void vmw_compat_shaders_commit(struct vmw_compat_shader_manager *man,
1009 struct list_head *list);
1010extern void vmw_compat_shaders_revert(struct vmw_compat_shader_manager *man,
1011 struct list_head *list);
1012extern int vmw_compat_shader_remove(struct vmw_compat_shader_manager *man,
1013 u32 user_key,
1014 SVGA3dShaderType shader_type,
1015 struct list_head *list);
1016extern int vmw_compat_shader_add(struct vmw_compat_shader_manager *man,
1017 u32 user_key, const void *bytecode,
1018 SVGA3dShaderType shader_type,
1019 size_t size,
1020 struct ttm_object_file *tfile,
1021 struct list_head *list);
1022extern struct vmw_compat_shader_manager *
1023vmw_compat_shader_man_create(struct vmw_private *dev_priv);
1024extern void
1025vmw_compat_shader_man_destroy(struct vmw_compat_shader_manager *man);
1026
994 1027
995/** 1028/**
996 * Inline helper functions 1029 * Inline helper functions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
index 7a5f1eb55c5a..269b85cc875a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
@@ -114,8 +114,10 @@ static void vmw_resource_list_unreserve(struct list_head *list,
114 * persistent context binding tracker. 114 * persistent context binding tracker.
115 */ 115 */
116 if (unlikely(val->staged_bindings)) { 116 if (unlikely(val->staged_bindings)) {
117 vmw_context_binding_state_transfer 117 if (!backoff) {
118 (val->res, val->staged_bindings); 118 vmw_context_binding_state_transfer
119 (val->res, val->staged_bindings);
120 }
119 kfree(val->staged_bindings); 121 kfree(val->staged_bindings);
120 val->staged_bindings = NULL; 122 val->staged_bindings = NULL;
121 } 123 }
@@ -178,6 +180,44 @@ static int vmw_resource_val_add(struct vmw_sw_context *sw_context,
178} 180}
179 181
180/** 182/**
183 * vmw_resource_context_res_add - Put resources previously bound to a context on
184 * the validation list
185 *
186 * @dev_priv: Pointer to a device private structure
187 * @sw_context: Pointer to a software context used for this command submission
188 * @ctx: Pointer to the context resource
189 *
190 * This function puts all resources that were previously bound to @ctx on
191 * the resource validation list. This is part of the context state reemission
192 */
193static int vmw_resource_context_res_add(struct vmw_private *dev_priv,
194 struct vmw_sw_context *sw_context,
195 struct vmw_resource *ctx)
196{
197 struct list_head *binding_list;
198 struct vmw_ctx_binding *entry;
199 int ret = 0;
200 struct vmw_resource *res;
201
202 mutex_lock(&dev_priv->binding_mutex);
203 binding_list = vmw_context_binding_list(ctx);
204
205 list_for_each_entry(entry, binding_list, ctx_list) {
206 res = vmw_resource_reference_unless_doomed(entry->bi.res);
207 if (unlikely(res == NULL))
208 continue;
209
210 ret = vmw_resource_val_add(sw_context, entry->bi.res, NULL);
211 vmw_resource_unreference(&res);
212 if (unlikely(ret != 0))
213 break;
214 }
215
216 mutex_unlock(&dev_priv->binding_mutex);
217 return ret;
218}
219
220/**
181 * vmw_resource_relocation_add - Add a relocation to the relocation list 221 * vmw_resource_relocation_add - Add a relocation to the relocation list
182 * 222 *
183 * @list: Pointer to head of relocation list. 223 * @list: Pointer to head of relocation list.
@@ -233,8 +273,12 @@ static void vmw_resource_relocations_apply(uint32_t *cb,
233{ 273{
234 struct vmw_resource_relocation *rel; 274 struct vmw_resource_relocation *rel;
235 275
236 list_for_each_entry(rel, list, head) 276 list_for_each_entry(rel, list, head) {
237 cb[rel->offset] = rel->res->id; 277 if (likely(rel->res != NULL))
278 cb[rel->offset] = rel->res->id;
279 else
280 cb[rel->offset] = SVGA_3D_CMD_NOP;
281 }
238} 282}
239 283
240static int vmw_cmd_invalid(struct vmw_private *dev_priv, 284static int vmw_cmd_invalid(struct vmw_private *dev_priv,
@@ -379,22 +423,27 @@ static int vmw_resources_validate(struct vmw_sw_context *sw_context)
379} 423}
380 424
381/** 425/**
382 * vmw_cmd_res_check - Check that a resource is present and if so, put it 426 * vmw_cmd_compat_res_check - Check that a resource is present and if so, put it
383 * on the resource validate list unless it's already there. 427 * on the resource validate list unless it's already there.
384 * 428 *
385 * @dev_priv: Pointer to a device private structure. 429 * @dev_priv: Pointer to a device private structure.
386 * @sw_context: Pointer to the software context. 430 * @sw_context: Pointer to the software context.
387 * @res_type: Resource type. 431 * @res_type: Resource type.
388 * @converter: User-space visisble type specific information. 432 * @converter: User-space visisble type specific information.
389 * @id: Pointer to the location in the command buffer currently being 433 * @id: user-space resource id handle.
434 * @id_loc: Pointer to the location in the command buffer currently being
390 * parsed from where the user-space resource id handle is located. 435 * parsed from where the user-space resource id handle is located.
436 * @p_val: Pointer to pointer to resource validalidation node. Populated
437 * on exit.
391 */ 438 */
392static int vmw_cmd_res_check(struct vmw_private *dev_priv, 439static int
393 struct vmw_sw_context *sw_context, 440vmw_cmd_compat_res_check(struct vmw_private *dev_priv,
394 enum vmw_res_type res_type, 441 struct vmw_sw_context *sw_context,
395 const struct vmw_user_resource_conv *converter, 442 enum vmw_res_type res_type,
396 uint32_t *id, 443 const struct vmw_user_resource_conv *converter,
397 struct vmw_resource_val_node **p_val) 444 uint32_t id,
445 uint32_t *id_loc,
446 struct vmw_resource_val_node **p_val)
398{ 447{
399 struct vmw_res_cache_entry *rcache = 448 struct vmw_res_cache_entry *rcache =
400 &sw_context->res_cache[res_type]; 449 &sw_context->res_cache[res_type];
@@ -402,7 +451,7 @@ static int vmw_cmd_res_check(struct vmw_private *dev_priv,
402 struct vmw_resource_val_node *node; 451 struct vmw_resource_val_node *node;
403 int ret; 452 int ret;
404 453
405 if (*id == SVGA3D_INVALID_ID) { 454 if (id == SVGA3D_INVALID_ID) {
406 if (p_val) 455 if (p_val)
407 *p_val = NULL; 456 *p_val = NULL;
408 if (res_type == vmw_res_context) { 457 if (res_type == vmw_res_context) {
@@ -417,7 +466,7 @@ static int vmw_cmd_res_check(struct vmw_private *dev_priv,
417 * resource 466 * resource
418 */ 467 */
419 468
420 if (likely(rcache->valid && *id == rcache->handle)) { 469 if (likely(rcache->valid && id == rcache->handle)) {
421 const struct vmw_resource *res = rcache->res; 470 const struct vmw_resource *res = rcache->res;
422 471
423 rcache->node->first_usage = false; 472 rcache->node->first_usage = false;
@@ -426,28 +475,28 @@ static int vmw_cmd_res_check(struct vmw_private *dev_priv,
426 475
427 return vmw_resource_relocation_add 476 return vmw_resource_relocation_add
428 (&sw_context->res_relocations, res, 477 (&sw_context->res_relocations, res,
429 id - sw_context->buf_start); 478 id_loc - sw_context->buf_start);
430 } 479 }
431 480
432 ret = vmw_user_resource_lookup_handle(dev_priv, 481 ret = vmw_user_resource_lookup_handle(dev_priv,
433 sw_context->tfile, 482 sw_context->fp->tfile,
434 *id, 483 id,
435 converter, 484 converter,
436 &res); 485 &res);
437 if (unlikely(ret != 0)) { 486 if (unlikely(ret != 0)) {
438 DRM_ERROR("Could not find or use resource 0x%08x.\n", 487 DRM_ERROR("Could not find or use resource 0x%08x.\n",
439 (unsigned) *id); 488 (unsigned) id);
440 dump_stack(); 489 dump_stack();
441 return ret; 490 return ret;
442 } 491 }
443 492
444 rcache->valid = true; 493 rcache->valid = true;
445 rcache->res = res; 494 rcache->res = res;
446 rcache->handle = *id; 495 rcache->handle = id;
447 496
448 ret = vmw_resource_relocation_add(&sw_context->res_relocations, 497 ret = vmw_resource_relocation_add(&sw_context->res_relocations,
449 res, 498 res,
450 id - sw_context->buf_start); 499 id_loc - sw_context->buf_start);
451 if (unlikely(ret != 0)) 500 if (unlikely(ret != 0))
452 goto out_no_reloc; 501 goto out_no_reloc;
453 502
@@ -459,7 +508,11 @@ static int vmw_cmd_res_check(struct vmw_private *dev_priv,
459 if (p_val) 508 if (p_val)
460 *p_val = node; 509 *p_val = node;
461 510
462 if (node->first_usage && res_type == vmw_res_context) { 511 if (dev_priv->has_mob && node->first_usage &&
512 res_type == vmw_res_context) {
513 ret = vmw_resource_context_res_add(dev_priv, sw_context, res);
514 if (unlikely(ret != 0))
515 goto out_no_reloc;
463 node->staged_bindings = 516 node->staged_bindings =
464 kzalloc(sizeof(*node->staged_bindings), GFP_KERNEL); 517 kzalloc(sizeof(*node->staged_bindings), GFP_KERNEL);
465 if (node->staged_bindings == NULL) { 518 if (node->staged_bindings == NULL) {
@@ -481,6 +534,59 @@ out_no_reloc:
481} 534}
482 535
483/** 536/**
537 * vmw_cmd_res_check - Check that a resource is present and if so, put it
538 * on the resource validate list unless it's already there.
539 *
540 * @dev_priv: Pointer to a device private structure.
541 * @sw_context: Pointer to the software context.
542 * @res_type: Resource type.
543 * @converter: User-space visisble type specific information.
544 * @id_loc: Pointer to the location in the command buffer currently being
545 * parsed from where the user-space resource id handle is located.
546 * @p_val: Pointer to pointer to resource validalidation node. Populated
547 * on exit.
548 */
549static int
550vmw_cmd_res_check(struct vmw_private *dev_priv,
551 struct vmw_sw_context *sw_context,
552 enum vmw_res_type res_type,
553 const struct vmw_user_resource_conv *converter,
554 uint32_t *id_loc,
555 struct vmw_resource_val_node **p_val)
556{
557 return vmw_cmd_compat_res_check(dev_priv, sw_context, res_type,
558 converter, *id_loc, id_loc, p_val);
559}
560
561/**
562 * vmw_rebind_contexts - Rebind all resources previously bound to
563 * referenced contexts.
564 *
565 * @sw_context: Pointer to the software context.
566 *
567 * Rebind context binding points that have been scrubbed because of eviction.
568 */
569static int vmw_rebind_contexts(struct vmw_sw_context *sw_context)
570{
571 struct vmw_resource_val_node *val;
572 int ret;
573
574 list_for_each_entry(val, &sw_context->resource_list, head) {
575 if (likely(!val->staged_bindings))
576 continue;
577
578 ret = vmw_context_rebind_all(val->res);
579 if (unlikely(ret != 0)) {
580 if (ret != -ERESTARTSYS)
581 DRM_ERROR("Failed to rebind context.\n");
582 return ret;
583 }
584 }
585
586 return 0;
587}
588
589/**
484 * vmw_cmd_cid_check - Check a command header for valid context information. 590 * vmw_cmd_cid_check - Check a command header for valid context information.
485 * 591 *
486 * @dev_priv: Pointer to a device private structure. 592 * @dev_priv: Pointer to a device private structure.
@@ -767,7 +873,7 @@ static int vmw_translate_mob_ptr(struct vmw_private *dev_priv,
767 struct vmw_relocation *reloc; 873 struct vmw_relocation *reloc;
768 int ret; 874 int ret;
769 875
770 ret = vmw_user_dmabuf_lookup(sw_context->tfile, handle, &vmw_bo); 876 ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo);
771 if (unlikely(ret != 0)) { 877 if (unlikely(ret != 0)) {
772 DRM_ERROR("Could not find or use MOB buffer.\n"); 878 DRM_ERROR("Could not find or use MOB buffer.\n");
773 return -EINVAL; 879 return -EINVAL;
@@ -828,7 +934,7 @@ static int vmw_translate_guest_ptr(struct vmw_private *dev_priv,
828 struct vmw_relocation *reloc; 934 struct vmw_relocation *reloc;
829 int ret; 935 int ret;
830 936
831 ret = vmw_user_dmabuf_lookup(sw_context->tfile, handle, &vmw_bo); 937 ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo);
832 if (unlikely(ret != 0)) { 938 if (unlikely(ret != 0)) {
833 DRM_ERROR("Could not find or use GMR region.\n"); 939 DRM_ERROR("Could not find or use GMR region.\n");
834 return -EINVAL; 940 return -EINVAL;
@@ -1127,7 +1233,8 @@ static int vmw_cmd_dma(struct vmw_private *dev_priv,
1127 1233
1128 srf = vmw_res_to_srf(sw_context->res_cache[vmw_res_surface].res); 1234 srf = vmw_res_to_srf(sw_context->res_cache[vmw_res_surface].res);
1129 1235
1130 vmw_kms_cursor_snoop(srf, sw_context->tfile, &vmw_bo->base, header); 1236 vmw_kms_cursor_snoop(srf, sw_context->fp->tfile, &vmw_bo->base,
1237 header);
1131 1238
1132out_no_surface: 1239out_no_surface:
1133 vmw_dmabuf_unreference(&vmw_bo); 1240 vmw_dmabuf_unreference(&vmw_bo);
@@ -1478,6 +1585,98 @@ static int vmw_cmd_invalidate_gb_surface(struct vmw_private *dev_priv,
1478 &cmd->body.sid, NULL); 1585 &cmd->body.sid, NULL);
1479} 1586}
1480 1587
1588
1589/**
1590 * vmw_cmd_shader_define - Validate an SVGA_3D_CMD_SHADER_DEFINE
1591 * command
1592 *
1593 * @dev_priv: Pointer to a device private struct.
1594 * @sw_context: The software context being used for this batch.
1595 * @header: Pointer to the command header in the command stream.
1596 */
1597static int vmw_cmd_shader_define(struct vmw_private *dev_priv,
1598 struct vmw_sw_context *sw_context,
1599 SVGA3dCmdHeader *header)
1600{
1601 struct vmw_shader_define_cmd {
1602 SVGA3dCmdHeader header;
1603 SVGA3dCmdDefineShader body;
1604 } *cmd;
1605 int ret;
1606 size_t size;
1607
1608 cmd = container_of(header, struct vmw_shader_define_cmd,
1609 header);
1610
1611 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context,
1612 user_context_converter, &cmd->body.cid,
1613 NULL);
1614 if (unlikely(ret != 0))
1615 return ret;
1616
1617 if (unlikely(!dev_priv->has_mob))
1618 return 0;
1619
1620 size = cmd->header.size - sizeof(cmd->body);
1621 ret = vmw_compat_shader_add(sw_context->fp->shman,
1622 cmd->body.shid, cmd + 1,
1623 cmd->body.type, size,
1624 sw_context->fp->tfile,
1625 &sw_context->staged_shaders);
1626 if (unlikely(ret != 0))
1627 return ret;
1628
1629 return vmw_resource_relocation_add(&sw_context->res_relocations,
1630 NULL, &cmd->header.id -
1631 sw_context->buf_start);
1632
1633 return 0;
1634}
1635
1636/**
1637 * vmw_cmd_shader_destroy - Validate an SVGA_3D_CMD_SHADER_DESTROY
1638 * command
1639 *
1640 * @dev_priv: Pointer to a device private struct.
1641 * @sw_context: The software context being used for this batch.
1642 * @header: Pointer to the command header in the command stream.
1643 */
1644static int vmw_cmd_shader_destroy(struct vmw_private *dev_priv,
1645 struct vmw_sw_context *sw_context,
1646 SVGA3dCmdHeader *header)
1647{
1648 struct vmw_shader_destroy_cmd {
1649 SVGA3dCmdHeader header;
1650 SVGA3dCmdDestroyShader body;
1651 } *cmd;
1652 int ret;
1653
1654 cmd = container_of(header, struct vmw_shader_destroy_cmd,
1655 header);
1656
1657 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context,
1658 user_context_converter, &cmd->body.cid,
1659 NULL);
1660 if (unlikely(ret != 0))
1661 return ret;
1662
1663 if (unlikely(!dev_priv->has_mob))
1664 return 0;
1665
1666 ret = vmw_compat_shader_remove(sw_context->fp->shman,
1667 cmd->body.shid,
1668 cmd->body.type,
1669 &sw_context->staged_shaders);
1670 if (unlikely(ret != 0))
1671 return ret;
1672
1673 return vmw_resource_relocation_add(&sw_context->res_relocations,
1674 NULL, &cmd->header.id -
1675 sw_context->buf_start);
1676
1677 return 0;
1678}
1679
1481/** 1680/**
1482 * vmw_cmd_set_shader - Validate an SVGA_3D_CMD_SET_SHADER 1681 * vmw_cmd_set_shader - Validate an SVGA_3D_CMD_SET_SHADER
1483 * command 1682 * command
@@ -1509,10 +1708,18 @@ static int vmw_cmd_set_shader(struct vmw_private *dev_priv,
1509 if (dev_priv->has_mob) { 1708 if (dev_priv->has_mob) {
1510 struct vmw_ctx_bindinfo bi; 1709 struct vmw_ctx_bindinfo bi;
1511 struct vmw_resource_val_node *res_node; 1710 struct vmw_resource_val_node *res_node;
1512 1711 u32 shid = cmd->body.shid;
1513 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_shader, 1712
1514 user_shader_converter, 1713 if (shid != SVGA3D_INVALID_ID)
1515 &cmd->body.shid, &res_node); 1714 (void) vmw_compat_shader_lookup(sw_context->fp->shman,
1715 cmd->body.type,
1716 &shid);
1717
1718 ret = vmw_cmd_compat_res_check(dev_priv, sw_context,
1719 vmw_res_shader,
1720 user_shader_converter,
1721 shid,
1722 &cmd->body.shid, &res_node);
1516 if (unlikely(ret != 0)) 1723 if (unlikely(ret != 0))
1517 return ret; 1724 return ret;
1518 1725
@@ -1527,6 +1734,39 @@ static int vmw_cmd_set_shader(struct vmw_private *dev_priv,
1527} 1734}
1528 1735
1529/** 1736/**
1737 * vmw_cmd_set_shader_const - Validate an SVGA_3D_CMD_SET_SHADER_CONST
1738 * command
1739 *
1740 * @dev_priv: Pointer to a device private struct.
1741 * @sw_context: The software context being used for this batch.
1742 * @header: Pointer to the command header in the command stream.
1743 */
1744static int vmw_cmd_set_shader_const(struct vmw_private *dev_priv,
1745 struct vmw_sw_context *sw_context,
1746 SVGA3dCmdHeader *header)
1747{
1748 struct vmw_set_shader_const_cmd {
1749 SVGA3dCmdHeader header;
1750 SVGA3dCmdSetShaderConst body;
1751 } *cmd;
1752 int ret;
1753
1754 cmd = container_of(header, struct vmw_set_shader_const_cmd,
1755 header);
1756
1757 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context,
1758 user_context_converter, &cmd->body.cid,
1759 NULL);
1760 if (unlikely(ret != 0))
1761 return ret;
1762
1763 if (dev_priv->has_mob)
1764 header->id = SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE;
1765
1766 return 0;
1767}
1768
1769/**
1530 * vmw_cmd_bind_gb_shader - Validate an SVGA_3D_CMD_BIND_GB_SHADER 1770 * vmw_cmd_bind_gb_shader - Validate an SVGA_3D_CMD_BIND_GB_SHADER
1531 * command 1771 * command
1532 * 1772 *
@@ -1634,14 +1874,14 @@ static const struct vmw_cmd_entry const vmw_cmd_entries[SVGA_3D_CMD_MAX] = {
1634 true, false, false), 1874 true, false, false),
1635 VMW_CMD_DEF(SVGA_3D_CMD_PRESENT, &vmw_cmd_present_check, 1875 VMW_CMD_DEF(SVGA_3D_CMD_PRESENT, &vmw_cmd_present_check,
1636 false, false, false), 1876 false, false, false),
1637 VMW_CMD_DEF(SVGA_3D_CMD_SHADER_DEFINE, &vmw_cmd_cid_check, 1877 VMW_CMD_DEF(SVGA_3D_CMD_SHADER_DEFINE, &vmw_cmd_shader_define,
1638 true, true, false), 1878 true, false, false),
1639 VMW_CMD_DEF(SVGA_3D_CMD_SHADER_DESTROY, &vmw_cmd_cid_check, 1879 VMW_CMD_DEF(SVGA_3D_CMD_SHADER_DESTROY, &vmw_cmd_shader_destroy,
1640 true, true, false), 1880 true, false, false),
1641 VMW_CMD_DEF(SVGA_3D_CMD_SET_SHADER, &vmw_cmd_set_shader, 1881 VMW_CMD_DEF(SVGA_3D_CMD_SET_SHADER, &vmw_cmd_set_shader,
1642 true, false, false), 1882 true, false, false),
1643 VMW_CMD_DEF(SVGA_3D_CMD_SET_SHADER_CONST, &vmw_cmd_cid_check, 1883 VMW_CMD_DEF(SVGA_3D_CMD_SET_SHADER_CONST, &vmw_cmd_set_shader_const,
1644 true, true, false), 1884 true, false, false),
1645 VMW_CMD_DEF(SVGA_3D_CMD_DRAW_PRIMITIVES, &vmw_cmd_draw, 1885 VMW_CMD_DEF(SVGA_3D_CMD_DRAW_PRIMITIVES, &vmw_cmd_draw,
1646 true, false, false), 1886 true, false, false),
1647 VMW_CMD_DEF(SVGA_3D_CMD_SETSCISSORRECT, &vmw_cmd_cid_check, 1887 VMW_CMD_DEF(SVGA_3D_CMD_SETSCISSORRECT, &vmw_cmd_cid_check,
@@ -2171,7 +2411,7 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2171 } else 2411 } else
2172 sw_context->kernel = true; 2412 sw_context->kernel = true;
2173 2413
2174 sw_context->tfile = vmw_fpriv(file_priv)->tfile; 2414 sw_context->fp = vmw_fpriv(file_priv);
2175 sw_context->cur_reloc = 0; 2415 sw_context->cur_reloc = 0;
2176 sw_context->cur_val_buf = 0; 2416 sw_context->cur_val_buf = 0;
2177 sw_context->fence_flags = 0; 2417 sw_context->fence_flags = 0;
@@ -2188,16 +2428,17 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2188 goto out_unlock; 2428 goto out_unlock;
2189 sw_context->res_ht_initialized = true; 2429 sw_context->res_ht_initialized = true;
2190 } 2430 }
2431 INIT_LIST_HEAD(&sw_context->staged_shaders);
2191 2432
2192 INIT_LIST_HEAD(&resource_list); 2433 INIT_LIST_HEAD(&resource_list);
2193 ret = vmw_cmd_check_all(dev_priv, sw_context, kernel_commands, 2434 ret = vmw_cmd_check_all(dev_priv, sw_context, kernel_commands,
2194 command_size); 2435 command_size);
2195 if (unlikely(ret != 0)) 2436 if (unlikely(ret != 0))
2196 goto out_err; 2437 goto out_err_nores;
2197 2438
2198 ret = vmw_resources_reserve(sw_context); 2439 ret = vmw_resources_reserve(sw_context);
2199 if (unlikely(ret != 0)) 2440 if (unlikely(ret != 0))
2200 goto out_err; 2441 goto out_err_nores;
2201 2442
2202 ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes); 2443 ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes);
2203 if (unlikely(ret != 0)) 2444 if (unlikely(ret != 0))
@@ -2225,6 +2466,12 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2225 goto out_err; 2466 goto out_err;
2226 } 2467 }
2227 2468
2469 if (dev_priv->has_mob) {
2470 ret = vmw_rebind_contexts(sw_context);
2471 if (unlikely(ret != 0))
2472 goto out_err;
2473 }
2474
2228 cmd = vmw_fifo_reserve(dev_priv, command_size); 2475 cmd = vmw_fifo_reserve(dev_priv, command_size);
2229 if (unlikely(cmd == NULL)) { 2476 if (unlikely(cmd == NULL)) {
2230 DRM_ERROR("Failed reserving fifo space for commands.\n"); 2477 DRM_ERROR("Failed reserving fifo space for commands.\n");
@@ -2276,6 +2523,8 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2276 } 2523 }
2277 2524
2278 list_splice_init(&sw_context->resource_list, &resource_list); 2525 list_splice_init(&sw_context->resource_list, &resource_list);
2526 vmw_compat_shaders_commit(sw_context->fp->shman,
2527 &sw_context->staged_shaders);
2279 mutex_unlock(&dev_priv->cmdbuf_mutex); 2528 mutex_unlock(&dev_priv->cmdbuf_mutex);
2280 2529
2281 /* 2530 /*
@@ -2289,10 +2538,11 @@ int vmw_execbuf_process(struct drm_file *file_priv,
2289out_unlock_binding: 2538out_unlock_binding:
2290 mutex_unlock(&dev_priv->binding_mutex); 2539 mutex_unlock(&dev_priv->binding_mutex);
2291out_err: 2540out_err:
2292 vmw_resource_relocations_free(&sw_context->res_relocations);
2293 vmw_free_relocations(sw_context);
2294 ttm_eu_backoff_reservation(&ticket, &sw_context->validate_nodes); 2541 ttm_eu_backoff_reservation(&ticket, &sw_context->validate_nodes);
2542out_err_nores:
2295 vmw_resource_list_unreserve(&sw_context->resource_list, true); 2543 vmw_resource_list_unreserve(&sw_context->resource_list, true);
2544 vmw_resource_relocations_free(&sw_context->res_relocations);
2545 vmw_free_relocations(sw_context);
2296 vmw_clear_validations(sw_context); 2546 vmw_clear_validations(sw_context);
2297 if (unlikely(dev_priv->pinned_bo != NULL && 2547 if (unlikely(dev_priv->pinned_bo != NULL &&
2298 !dev_priv->query_cid_valid)) 2548 !dev_priv->query_cid_valid))
@@ -2301,6 +2551,8 @@ out_unlock:
2301 list_splice_init(&sw_context->resource_list, &resource_list); 2551 list_splice_init(&sw_context->resource_list, &resource_list);
2302 error_resource = sw_context->error_resource; 2552 error_resource = sw_context->error_resource;
2303 sw_context->error_resource = NULL; 2553 sw_context->error_resource = NULL;
2554 vmw_compat_shaders_revert(sw_context->fp->shman,
2555 &sw_context->staged_shaders);
2304 mutex_unlock(&dev_priv->cmdbuf_mutex); 2556 mutex_unlock(&dev_priv->cmdbuf_mutex);
2305 2557
2306 /* 2558 /*
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c
index 116c49736763..f9881f9e62bd 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c
@@ -29,12 +29,18 @@
29#include <drm/vmwgfx_drm.h> 29#include <drm/vmwgfx_drm.h>
30#include "vmwgfx_kms.h" 30#include "vmwgfx_kms.h"
31 31
32struct svga_3d_compat_cap {
33 SVGA3dCapsRecordHeader header;
34 SVGA3dCapPair pairs[SVGA3D_DEVCAP_MAX];
35};
36
32int vmw_getparam_ioctl(struct drm_device *dev, void *data, 37int vmw_getparam_ioctl(struct drm_device *dev, void *data,
33 struct drm_file *file_priv) 38 struct drm_file *file_priv)
34{ 39{
35 struct vmw_private *dev_priv = vmw_priv(dev); 40 struct vmw_private *dev_priv = vmw_priv(dev);
36 struct drm_vmw_getparam_arg *param = 41 struct drm_vmw_getparam_arg *param =
37 (struct drm_vmw_getparam_arg *)data; 42 (struct drm_vmw_getparam_arg *)data;
43 struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
38 44
39 switch (param->param) { 45 switch (param->param) {
40 case DRM_VMW_PARAM_NUM_STREAMS: 46 case DRM_VMW_PARAM_NUM_STREAMS:
@@ -60,6 +66,11 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data,
60 __le32 __iomem *fifo_mem = dev_priv->mmio_virt; 66 __le32 __iomem *fifo_mem = dev_priv->mmio_virt;
61 const struct vmw_fifo_state *fifo = &dev_priv->fifo; 67 const struct vmw_fifo_state *fifo = &dev_priv->fifo;
62 68
69 if ((dev_priv->capabilities & SVGA_CAP_GBOBJECTS)) {
70 param->value = SVGA3D_HWVERSION_WS8_B1;
71 break;
72 }
73
63 param->value = 74 param->value =
64 ioread32(fifo_mem + 75 ioread32(fifo_mem +
65 ((fifo->capabilities & 76 ((fifo->capabilities &
@@ -69,17 +80,26 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data,
69 break; 80 break;
70 } 81 }
71 case DRM_VMW_PARAM_MAX_SURF_MEMORY: 82 case DRM_VMW_PARAM_MAX_SURF_MEMORY:
72 param->value = dev_priv->memory_size; 83 if ((dev_priv->capabilities & SVGA_CAP_GBOBJECTS) &&
84 !vmw_fp->gb_aware)
85 param->value = dev_priv->max_mob_pages * PAGE_SIZE / 2;
86 else
87 param->value = dev_priv->memory_size;
73 break; 88 break;
74 case DRM_VMW_PARAM_3D_CAPS_SIZE: 89 case DRM_VMW_PARAM_3D_CAPS_SIZE:
75 if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) 90 if ((dev_priv->capabilities & SVGA_CAP_GBOBJECTS) &&
76 param->value = SVGA3D_DEVCAP_MAX; 91 vmw_fp->gb_aware)
92 param->value = SVGA3D_DEVCAP_MAX * sizeof(uint32_t);
93 else if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS)
94 param->value = sizeof(struct svga_3d_compat_cap) +
95 sizeof(uint32_t);
77 else 96 else
78 param->value = (SVGA_FIFO_3D_CAPS_LAST - 97 param->value = (SVGA_FIFO_3D_CAPS_LAST -
79 SVGA_FIFO_3D_CAPS + 1); 98 SVGA_FIFO_3D_CAPS + 1) *
80 param->value *= sizeof(uint32_t); 99 sizeof(uint32_t);
81 break; 100 break;
82 case DRM_VMW_PARAM_MAX_MOB_MEMORY: 101 case DRM_VMW_PARAM_MAX_MOB_MEMORY:
102 vmw_fp->gb_aware = true;
83 param->value = dev_priv->max_mob_pages * PAGE_SIZE; 103 param->value = dev_priv->max_mob_pages * PAGE_SIZE;
84 break; 104 break;
85 default: 105 default:
@@ -91,6 +111,38 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data,
91 return 0; 111 return 0;
92} 112}
93 113
114static int vmw_fill_compat_cap(struct vmw_private *dev_priv, void *bounce,
115 size_t size)
116{
117 struct svga_3d_compat_cap *compat_cap =
118 (struct svga_3d_compat_cap *) bounce;
119 unsigned int i;
120 size_t pair_offset = offsetof(struct svga_3d_compat_cap, pairs);
121 unsigned int max_size;
122
123 if (size < pair_offset)
124 return -EINVAL;
125
126 max_size = (size - pair_offset) / sizeof(SVGA3dCapPair);
127
128 if (max_size > SVGA3D_DEVCAP_MAX)
129 max_size = SVGA3D_DEVCAP_MAX;
130
131 compat_cap->header.length =
132 (pair_offset + max_size * sizeof(SVGA3dCapPair)) / sizeof(u32);
133 compat_cap->header.type = SVGA3DCAPS_RECORD_DEVCAPS;
134
135 mutex_lock(&dev_priv->hw_mutex);
136 for (i = 0; i < max_size; ++i) {
137 vmw_write(dev_priv, SVGA_REG_DEV_CAP, i);
138 compat_cap->pairs[i][0] = i;
139 compat_cap->pairs[i][1] = vmw_read(dev_priv, SVGA_REG_DEV_CAP);
140 }
141 mutex_unlock(&dev_priv->hw_mutex);
142
143 return 0;
144}
145
94 146
95int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data, 147int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data,
96 struct drm_file *file_priv) 148 struct drm_file *file_priv)
@@ -104,41 +156,49 @@ int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data,
104 void *bounce; 156 void *bounce;
105 int ret; 157 int ret;
106 bool gb_objects = !!(dev_priv->capabilities & SVGA_CAP_GBOBJECTS); 158 bool gb_objects = !!(dev_priv->capabilities & SVGA_CAP_GBOBJECTS);
159 struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
107 160
108 if (unlikely(arg->pad64 != 0)) { 161 if (unlikely(arg->pad64 != 0)) {
109 DRM_ERROR("Illegal GET_3D_CAP argument.\n"); 162 DRM_ERROR("Illegal GET_3D_CAP argument.\n");
110 return -EINVAL; 163 return -EINVAL;
111 } 164 }
112 165
113 if (gb_objects) 166 if (gb_objects && vmw_fp->gb_aware)
114 size = SVGA3D_DEVCAP_MAX; 167 size = SVGA3D_DEVCAP_MAX * sizeof(uint32_t);
168 else if (gb_objects)
169 size = sizeof(struct svga_3d_compat_cap) + sizeof(uint32_t);
115 else 170 else
116 size = (SVGA_FIFO_3D_CAPS_LAST - SVGA_FIFO_3D_CAPS + 1); 171 size = (SVGA_FIFO_3D_CAPS_LAST - SVGA_FIFO_3D_CAPS + 1) *
117 172 sizeof(uint32_t);
118 size *= sizeof(uint32_t);
119 173
120 if (arg->max_size < size) 174 if (arg->max_size < size)
121 size = arg->max_size; 175 size = arg->max_size;
122 176
123 bounce = vmalloc(size); 177 bounce = vzalloc(size);
124 if (unlikely(bounce == NULL)) { 178 if (unlikely(bounce == NULL)) {
125 DRM_ERROR("Failed to allocate bounce buffer for 3D caps.\n"); 179 DRM_ERROR("Failed to allocate bounce buffer for 3D caps.\n");
126 return -ENOMEM; 180 return -ENOMEM;
127 } 181 }
128 182
129 if (gb_objects) { 183 if (gb_objects && vmw_fp->gb_aware) {
130 int i; 184 int i, num;
131 uint32_t *bounce32 = (uint32_t *) bounce; 185 uint32_t *bounce32 = (uint32_t *) bounce;
132 186
187 num = size / sizeof(uint32_t);
188 if (num > SVGA3D_DEVCAP_MAX)
189 num = SVGA3D_DEVCAP_MAX;
190
133 mutex_lock(&dev_priv->hw_mutex); 191 mutex_lock(&dev_priv->hw_mutex);
134 for (i = 0; i < SVGA3D_DEVCAP_MAX; ++i) { 192 for (i = 0; i < num; ++i) {
135 vmw_write(dev_priv, SVGA_REG_DEV_CAP, i); 193 vmw_write(dev_priv, SVGA_REG_DEV_CAP, i);
136 *bounce32++ = vmw_read(dev_priv, SVGA_REG_DEV_CAP); 194 *bounce32++ = vmw_read(dev_priv, SVGA_REG_DEV_CAP);
137 } 195 }
138 mutex_unlock(&dev_priv->hw_mutex); 196 mutex_unlock(&dev_priv->hw_mutex);
139 197 } else if (gb_objects) {
198 ret = vmw_fill_compat_cap(dev_priv, bounce, size);
199 if (unlikely(ret != 0))
200 goto out_err;
140 } else { 201 } else {
141
142 fifo_mem = dev_priv->mmio_virt; 202 fifo_mem = dev_priv->mmio_virt;
143 memcpy_fromio(bounce, &fifo_mem[SVGA_FIFO_3D_CAPS], size); 203 memcpy_fromio(bounce, &fifo_mem[SVGA_FIFO_3D_CAPS], size);
144 } 204 }
@@ -146,6 +206,7 @@ int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data,
146 ret = copy_to_user(buffer, bounce, size); 206 ret = copy_to_user(buffer, bounce, size);
147 if (ret) 207 if (ret)
148 ret = -EFAULT; 208 ret = -EFAULT;
209out_err:
149 vfree(bounce); 210 vfree(bounce);
150 211
151 if (unlikely(ret != 0)) 212 if (unlikely(ret != 0))
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
index 4910e7b81811..d4a5a19cb8c3 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
@@ -134,6 +134,7 @@ static int vmw_setup_otable_base(struct vmw_private *dev_priv,
134 cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); 134 cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd));
135 if (unlikely(cmd == NULL)) { 135 if (unlikely(cmd == NULL)) {
136 DRM_ERROR("Failed reserving FIFO space for OTable setup.\n"); 136 DRM_ERROR("Failed reserving FIFO space for OTable setup.\n");
137 ret = -ENOMEM;
137 goto out_no_fifo; 138 goto out_no_fifo;
138 } 139 }
139 140
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
index 6fdd82d42f65..2aa4bc6a4d60 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
@@ -88,6 +88,11 @@ struct vmw_resource *vmw_resource_reference(struct vmw_resource *res)
88 return res; 88 return res;
89} 89}
90 90
91struct vmw_resource *
92vmw_resource_reference_unless_doomed(struct vmw_resource *res)
93{
94 return kref_get_unless_zero(&res->kref) ? res : NULL;
95}
91 96
92/** 97/**
93 * vmw_resource_release_id - release a resource id to the id manager. 98 * vmw_resource_release_id - release a resource id to the id manager.
@@ -136,8 +141,12 @@ static void vmw_resource_release(struct kref *kref)
136 vmw_dmabuf_unreference(&res->backup); 141 vmw_dmabuf_unreference(&res->backup);
137 } 142 }
138 143
139 if (likely(res->hw_destroy != NULL)) 144 if (likely(res->hw_destroy != NULL)) {
140 res->hw_destroy(res); 145 res->hw_destroy(res);
146 mutex_lock(&dev_priv->binding_mutex);
147 vmw_context_binding_res_list_kill(&res->binding_head);
148 mutex_unlock(&dev_priv->binding_mutex);
149 }
141 150
142 id = res->id; 151 id = res->id;
143 if (res->res_free != NULL) 152 if (res->res_free != NULL)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
index 1457ec4b7125..217d941b8176 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
@@ -29,6 +29,8 @@
29#include "vmwgfx_resource_priv.h" 29#include "vmwgfx_resource_priv.h"
30#include "ttm/ttm_placement.h" 30#include "ttm/ttm_placement.h"
31 31
32#define VMW_COMPAT_SHADER_HT_ORDER 12
33
32struct vmw_shader { 34struct vmw_shader {
33 struct vmw_resource res; 35 struct vmw_resource res;
34 SVGA3dShaderType type; 36 SVGA3dShaderType type;
@@ -40,6 +42,50 @@ struct vmw_user_shader {
40 struct vmw_shader shader; 42 struct vmw_shader shader;
41}; 43};
42 44
45/**
46 * enum vmw_compat_shader_state - Staging state for compat shaders
47 */
48enum vmw_compat_shader_state {
49 VMW_COMPAT_COMMITED,
50 VMW_COMPAT_ADD,
51 VMW_COMPAT_DEL
52};
53
54/**
55 * struct vmw_compat_shader - Metadata for compat shaders.
56 *
57 * @handle: The TTM handle of the guest backed shader.
58 * @tfile: The struct ttm_object_file the guest backed shader is registered
59 * with.
60 * @hash: Hash item for lookup.
61 * @head: List head for staging lists or the compat shader manager list.
62 * @state: Staging state.
63 *
64 * The structure is protected by the cmdbuf lock.
65 */
66struct vmw_compat_shader {
67 u32 handle;
68 struct ttm_object_file *tfile;
69 struct drm_hash_item hash;
70 struct list_head head;
71 enum vmw_compat_shader_state state;
72};
73
74/**
75 * struct vmw_compat_shader_manager - Compat shader manager.
76 *
77 * @shaders: Hash table containing staged and commited compat shaders
78 * @list: List of commited shaders.
79 * @dev_priv: Pointer to a device private structure.
80 *
81 * @shaders and @list are protected by the cmdbuf mutex for now.
82 */
83struct vmw_compat_shader_manager {
84 struct drm_open_hash shaders;
85 struct list_head list;
86 struct vmw_private *dev_priv;
87};
88
43static void vmw_user_shader_free(struct vmw_resource *res); 89static void vmw_user_shader_free(struct vmw_resource *res);
44static struct vmw_resource * 90static struct vmw_resource *
45vmw_user_shader_base_to_res(struct ttm_base_object *base); 91vmw_user_shader_base_to_res(struct ttm_base_object *base);
@@ -258,7 +304,7 @@ static int vmw_gb_shader_destroy(struct vmw_resource *res)
258 return 0; 304 return 0;
259 305
260 mutex_lock(&dev_priv->binding_mutex); 306 mutex_lock(&dev_priv->binding_mutex);
261 vmw_context_binding_res_list_kill(&res->binding_head); 307 vmw_context_binding_res_list_scrub(&res->binding_head);
262 308
263 cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); 309 cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd));
264 if (unlikely(cmd == NULL)) { 310 if (unlikely(cmd == NULL)) {
@@ -325,13 +371,81 @@ int vmw_shader_destroy_ioctl(struct drm_device *dev, void *data,
325 TTM_REF_USAGE); 371 TTM_REF_USAGE);
326} 372}
327 373
374int vmw_shader_alloc(struct vmw_private *dev_priv,
375 struct vmw_dma_buffer *buffer,
376 size_t shader_size,
377 size_t offset,
378 SVGA3dShaderType shader_type,
379 struct ttm_object_file *tfile,
380 u32 *handle)
381{
382 struct vmw_user_shader *ushader;
383 struct vmw_resource *res, *tmp;
384 int ret;
385
386 /*
387 * Approximate idr memory usage with 128 bytes. It will be limited
388 * by maximum number_of shaders anyway.
389 */
390 if (unlikely(vmw_user_shader_size == 0))
391 vmw_user_shader_size =
392 ttm_round_pot(sizeof(struct vmw_user_shader)) + 128;
393
394 ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
395 vmw_user_shader_size,
396 false, true);
397 if (unlikely(ret != 0)) {
398 if (ret != -ERESTARTSYS)
399 DRM_ERROR("Out of graphics memory for shader "
400 "creation.\n");
401 goto out;
402 }
403
404 ushader = kzalloc(sizeof(*ushader), GFP_KERNEL);
405 if (unlikely(ushader == NULL)) {
406 ttm_mem_global_free(vmw_mem_glob(dev_priv),
407 vmw_user_shader_size);
408 ret = -ENOMEM;
409 goto out;
410 }
411
412 res = &ushader->shader.res;
413 ushader->base.shareable = false;
414 ushader->base.tfile = NULL;
415
416 /*
417 * From here on, the destructor takes over resource freeing.
418 */
419
420 ret = vmw_gb_shader_init(dev_priv, res, shader_size,
421 offset, shader_type, buffer,
422 vmw_user_shader_free);
423 if (unlikely(ret != 0))
424 goto out;
425
426 tmp = vmw_resource_reference(res);
427 ret = ttm_base_object_init(tfile, &ushader->base, false,
428 VMW_RES_SHADER,
429 &vmw_user_shader_base_release, NULL);
430
431 if (unlikely(ret != 0)) {
432 vmw_resource_unreference(&tmp);
433 goto out_err;
434 }
435
436 if (handle)
437 *handle = ushader->base.hash.key;
438out_err:
439 vmw_resource_unreference(&res);
440out:
441 return ret;
442}
443
444
328int vmw_shader_define_ioctl(struct drm_device *dev, void *data, 445int vmw_shader_define_ioctl(struct drm_device *dev, void *data,
329 struct drm_file *file_priv) 446 struct drm_file *file_priv)
330{ 447{
331 struct vmw_private *dev_priv = vmw_priv(dev); 448 struct vmw_private *dev_priv = vmw_priv(dev);
332 struct vmw_user_shader *ushader;
333 struct vmw_resource *res;
334 struct vmw_resource *tmp;
335 struct drm_vmw_shader_create_arg *arg = 449 struct drm_vmw_shader_create_arg *arg =
336 (struct drm_vmw_shader_create_arg *)data; 450 (struct drm_vmw_shader_create_arg *)data;
337 struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; 451 struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
@@ -373,69 +487,324 @@ int vmw_shader_define_ioctl(struct drm_device *dev, void *data,
373 goto out_bad_arg; 487 goto out_bad_arg;
374 } 488 }
375 489
376 /* 490 ret = ttm_read_lock(&vmaster->lock, true);
377 * Approximate idr memory usage with 128 bytes. It will be limited 491 if (unlikely(ret != 0))
378 * by maximum number_of shaders anyway. 492 goto out_bad_arg;
379 */
380 493
381 if (unlikely(vmw_user_shader_size == 0)) 494 ret = vmw_shader_alloc(dev_priv, buffer, arg->size, arg->offset,
382 vmw_user_shader_size = ttm_round_pot(sizeof(*ushader)) 495 shader_type, tfile, &arg->shader_handle);
383 + 128;
384 496
385 ret = ttm_read_lock(&vmaster->lock, true); 497 ttm_read_unlock(&vmaster->lock);
498out_bad_arg:
499 vmw_dmabuf_unreference(&buffer);
500 return ret;
501}
502
503/**
504 * vmw_compat_shader_lookup - Look up a compat shader
505 *
506 * @man: Pointer to the compat shader manager.
507 * @shader_type: The shader type, that combined with the user_key identifies
508 * the shader.
509 * @user_key: On entry, this should be a pointer to the user_key.
510 * On successful exit, it will contain the guest-backed shader's TTM handle.
511 *
512 * Returns 0 on success. Non-zero on failure, in which case the value pointed
513 * to by @user_key is unmodified.
514 */
515int vmw_compat_shader_lookup(struct vmw_compat_shader_manager *man,
516 SVGA3dShaderType shader_type,
517 u32 *user_key)
518{
519 struct drm_hash_item *hash;
520 int ret;
521 unsigned long key = *user_key | (shader_type << 24);
522
523 ret = drm_ht_find_item(&man->shaders, key, &hash);
386 if (unlikely(ret != 0)) 524 if (unlikely(ret != 0))
387 return ret; 525 return ret;
388 526
389 ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), 527 *user_key = drm_hash_entry(hash, struct vmw_compat_shader,
390 vmw_user_shader_size, 528 hash)->handle;
391 false, true); 529
392 if (unlikely(ret != 0)) { 530 return 0;
393 if (ret != -ERESTARTSYS) 531}
394 DRM_ERROR("Out of graphics memory for shader" 532
395 " creation.\n"); 533/**
396 goto out_unlock; 534 * vmw_compat_shader_free - Free a compat shader.
535 *
536 * @man: Pointer to the compat shader manager.
537 * @entry: Pointer to a struct vmw_compat_shader.
538 *
539 * Frees a struct vmw_compat_shder entry and drops its reference to the
540 * guest backed shader.
541 */
542static void vmw_compat_shader_free(struct vmw_compat_shader_manager *man,
543 struct vmw_compat_shader *entry)
544{
545 list_del(&entry->head);
546 WARN_ON(drm_ht_remove_item(&man->shaders, &entry->hash));
547 WARN_ON(ttm_ref_object_base_unref(entry->tfile, entry->handle,
548 TTM_REF_USAGE));
549 kfree(entry);
550}
551
552/**
553 * vmw_compat_shaders_commit - Commit a list of compat shader actions.
554 *
555 * @man: Pointer to the compat shader manager.
556 * @list: Caller's list of compat shader actions.
557 *
558 * This function commits a list of compat shader additions or removals.
559 * It is typically called when the execbuf ioctl call triggering these
560 * actions has commited the fifo contents to the device.
561 */
562void vmw_compat_shaders_commit(struct vmw_compat_shader_manager *man,
563 struct list_head *list)
564{
565 struct vmw_compat_shader *entry, *next;
566
567 list_for_each_entry_safe(entry, next, list, head) {
568 list_del(&entry->head);
569 switch (entry->state) {
570 case VMW_COMPAT_ADD:
571 entry->state = VMW_COMPAT_COMMITED;
572 list_add_tail(&entry->head, &man->list);
573 break;
574 case VMW_COMPAT_DEL:
575 ttm_ref_object_base_unref(entry->tfile, entry->handle,
576 TTM_REF_USAGE);
577 kfree(entry);
578 break;
579 default:
580 BUG();
581 break;
582 }
397 } 583 }
584}
398 585
399 ushader = kzalloc(sizeof(*ushader), GFP_KERNEL); 586/**
400 if (unlikely(ushader == NULL)) { 587 * vmw_compat_shaders_revert - Revert a list of compat shader actions
401 ttm_mem_global_free(vmw_mem_glob(dev_priv), 588 *
402 vmw_user_shader_size); 589 * @man: Pointer to the compat shader manager.
403 ret = -ENOMEM; 590 * @list: Caller's list of compat shader actions.
404 goto out_unlock; 591 *
592 * This function reverts a list of compat shader additions or removals.
593 * It is typically called when the execbuf ioctl call triggering these
594 * actions failed for some reason, and the command stream was never
595 * submitted.
596 */
597void vmw_compat_shaders_revert(struct vmw_compat_shader_manager *man,
598 struct list_head *list)
599{
600 struct vmw_compat_shader *entry, *next;
601 int ret;
602
603 list_for_each_entry_safe(entry, next, list, head) {
604 switch (entry->state) {
605 case VMW_COMPAT_ADD:
606 vmw_compat_shader_free(man, entry);
607 break;
608 case VMW_COMPAT_DEL:
609 ret = drm_ht_insert_item(&man->shaders, &entry->hash);
610 list_del(&entry->head);
611 list_add_tail(&entry->head, &man->list);
612 entry->state = VMW_COMPAT_COMMITED;
613 break;
614 default:
615 BUG();
616 break;
617 }
405 } 618 }
619}
406 620
407 res = &ushader->shader.res; 621/**
408 ushader->base.shareable = false; 622 * vmw_compat_shader_remove - Stage a compat shader for removal.
409 ushader->base.tfile = NULL; 623 *
624 * @man: Pointer to the compat shader manager
625 * @user_key: The key that is used to identify the shader. The key is
626 * unique to the shader type.
627 * @shader_type: Shader type.
628 * @list: Caller's list of staged shader actions.
629 *
630 * This function stages a compat shader for removal and removes the key from
631 * the shader manager's hash table. If the shader was previously only staged
632 * for addition it is completely removed (But the execbuf code may keep a
633 * reference if it was bound to a context between addition and removal). If
634 * it was previously commited to the manager, it is staged for removal.
635 */
636int vmw_compat_shader_remove(struct vmw_compat_shader_manager *man,
637 u32 user_key, SVGA3dShaderType shader_type,
638 struct list_head *list)
639{
640 struct vmw_compat_shader *entry;
641 struct drm_hash_item *hash;
642 int ret;
410 643
411 /* 644 ret = drm_ht_find_item(&man->shaders, user_key | (shader_type << 24),
412 * From here on, the destructor takes over resource freeing. 645 &hash);
413 */ 646 if (likely(ret != 0))
647 return -EINVAL;
414 648
415 ret = vmw_gb_shader_init(dev_priv, res, arg->size, 649 entry = drm_hash_entry(hash, struct vmw_compat_shader, hash);
416 arg->offset, shader_type, buffer, 650
417 vmw_user_shader_free); 651 switch (entry->state) {
652 case VMW_COMPAT_ADD:
653 vmw_compat_shader_free(man, entry);
654 break;
655 case VMW_COMPAT_COMMITED:
656 (void) drm_ht_remove_item(&man->shaders, &entry->hash);
657 list_del(&entry->head);
658 entry->state = VMW_COMPAT_DEL;
659 list_add_tail(&entry->head, list);
660 break;
661 default:
662 BUG();
663 break;
664 }
665
666 return 0;
667}
668
669/**
670 * vmw_compat_shader_add - Create a compat shader and add the
671 * key to the manager
672 *
673 * @man: Pointer to the compat shader manager
674 * @user_key: The key that is used to identify the shader. The key is
675 * unique to the shader type.
676 * @bytecode: Pointer to the bytecode of the shader.
677 * @shader_type: Shader type.
678 * @tfile: Pointer to a struct ttm_object_file that the guest-backed shader is
679 * to be created with.
680 * @list: Caller's list of staged shader actions.
681 *
682 * Note that only the key is added to the shader manager's hash table.
683 * The shader is not yet added to the shader manager's list of shaders.
684 */
685int vmw_compat_shader_add(struct vmw_compat_shader_manager *man,
686 u32 user_key, const void *bytecode,
687 SVGA3dShaderType shader_type,
688 size_t size,
689 struct ttm_object_file *tfile,
690 struct list_head *list)
691{
692 struct vmw_dma_buffer *buf;
693 struct ttm_bo_kmap_obj map;
694 bool is_iomem;
695 struct vmw_compat_shader *compat;
696 u32 handle;
697 int ret;
698
699 if (user_key > ((1 << 24) - 1) || (unsigned) shader_type > 16)
700 return -EINVAL;
701
702 /* Allocate and pin a DMA buffer */
703 buf = kzalloc(sizeof(*buf), GFP_KERNEL);
704 if (unlikely(buf == NULL))
705 return -ENOMEM;
706
707 ret = vmw_dmabuf_init(man->dev_priv, buf, size, &vmw_sys_ne_placement,
708 true, vmw_dmabuf_bo_free);
418 if (unlikely(ret != 0)) 709 if (unlikely(ret != 0))
419 goto out_unlock; 710 goto out;
420 711
421 tmp = vmw_resource_reference(res); 712 ret = ttm_bo_reserve(&buf->base, false, true, false, NULL);
422 ret = ttm_base_object_init(tfile, &ushader->base, false, 713 if (unlikely(ret != 0))
423 VMW_RES_SHADER, 714 goto no_reserve;
424 &vmw_user_shader_base_release, NULL);
425 715
716 /* Map and copy shader bytecode. */
717 ret = ttm_bo_kmap(&buf->base, 0, PAGE_ALIGN(size) >> PAGE_SHIFT,
718 &map);
426 if (unlikely(ret != 0)) { 719 if (unlikely(ret != 0)) {
427 vmw_resource_unreference(&tmp); 720 ttm_bo_unreserve(&buf->base);
428 goto out_err; 721 goto no_reserve;
429 } 722 }
430 723
431 arg->shader_handle = ushader->base.hash.key; 724 memcpy(ttm_kmap_obj_virtual(&map, &is_iomem), bytecode, size);
432out_err: 725 WARN_ON(is_iomem);
433 vmw_resource_unreference(&res); 726
434out_unlock: 727 ttm_bo_kunmap(&map);
435 ttm_read_unlock(&vmaster->lock); 728 ret = ttm_bo_validate(&buf->base, &vmw_sys_placement, false, true);
436out_bad_arg: 729 WARN_ON(ret != 0);
437 vmw_dmabuf_unreference(&buffer); 730 ttm_bo_unreserve(&buf->base);
731
732 /* Create a guest-backed shader container backed by the dma buffer */
733 ret = vmw_shader_alloc(man->dev_priv, buf, size, 0, shader_type,
734 tfile, &handle);
735 vmw_dmabuf_unreference(&buf);
736 if (unlikely(ret != 0))
737 goto no_reserve;
738 /*
739 * Create a compat shader structure and stage it for insertion
740 * in the manager
741 */
742 compat = kzalloc(sizeof(*compat), GFP_KERNEL);
743 if (compat == NULL)
744 goto no_compat;
745
746 compat->hash.key = user_key | (shader_type << 24);
747 ret = drm_ht_insert_item(&man->shaders, &compat->hash);
748 if (unlikely(ret != 0))
749 goto out_invalid_key;
750
751 compat->state = VMW_COMPAT_ADD;
752 compat->handle = handle;
753 compat->tfile = tfile;
754 list_add_tail(&compat->head, list);
438 755
756 return 0;
757
758out_invalid_key:
759 kfree(compat);
760no_compat:
761 ttm_ref_object_base_unref(tfile, handle, TTM_REF_USAGE);
762no_reserve:
763out:
439 return ret; 764 return ret;
765}
766
767/**
768 * vmw_compat_shader_man_create - Create a compat shader manager
769 *
770 * @dev_priv: Pointer to a device private structure.
771 *
772 * Typically done at file open time. If successful returns a pointer to a
773 * compat shader manager. Otherwise returns an error pointer.
774 */
775struct vmw_compat_shader_manager *
776vmw_compat_shader_man_create(struct vmw_private *dev_priv)
777{
778 struct vmw_compat_shader_manager *man;
779 int ret;
780
781 man = kzalloc(sizeof(*man), GFP_KERNEL);
782
783 man->dev_priv = dev_priv;
784 INIT_LIST_HEAD(&man->list);
785 ret = drm_ht_create(&man->shaders, VMW_COMPAT_SHADER_HT_ORDER);
786 if (ret == 0)
787 return man;
788
789 kfree(man);
790 return ERR_PTR(ret);
791}
792
793/**
794 * vmw_compat_shader_man_destroy - Destroy a compat shader manager
795 *
796 * @man: Pointer to the shader manager to destroy.
797 *
798 * Typically done at file close time.
799 */
800void vmw_compat_shader_man_destroy(struct vmw_compat_shader_manager *man)
801{
802 struct vmw_compat_shader *entry, *next;
803
804 mutex_lock(&man->dev_priv->cmdbuf_mutex);
805 list_for_each_entry_safe(entry, next, &man->list, head)
806 vmw_compat_shader_free(man, entry);
440 807
808 mutex_unlock(&man->dev_priv->cmdbuf_mutex);
809 kfree(man);
441} 810}
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index 979da1c246a5..82468d902915 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -908,8 +908,8 @@ int vmw_surface_reference_ioctl(struct drm_device *dev, void *data,
908 rep->size_addr; 908 rep->size_addr;
909 909
910 if (user_sizes) 910 if (user_sizes)
911 ret = copy_to_user(user_sizes, srf->sizes, 911 ret = copy_to_user(user_sizes, &srf->base_size,
912 srf->num_sizes * sizeof(*srf->sizes)); 912 sizeof(srf->base_size));
913 if (unlikely(ret != 0)) { 913 if (unlikely(ret != 0)) {
914 DRM_ERROR("copy_to_user failed %p %u\n", 914 DRM_ERROR("copy_to_user failed %p %u\n",
915 user_sizes, srf->num_sizes); 915 user_sizes, srf->num_sizes);
@@ -1111,7 +1111,7 @@ static int vmw_gb_surface_destroy(struct vmw_resource *res)
1111 return 0; 1111 return 0;
1112 1112
1113 mutex_lock(&dev_priv->binding_mutex); 1113 mutex_lock(&dev_priv->binding_mutex);
1114 vmw_context_binding_res_list_kill(&res->binding_head); 1114 vmw_context_binding_res_list_scrub(&res->binding_head);
1115 1115
1116 cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); 1116 cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd));
1117 if (unlikely(cmd == NULL)) { 1117 if (unlikely(cmd == NULL)) {
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index af6edf9b1936..f2d7bf90c9fe 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -67,7 +67,6 @@ static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
67 int ret = 0; 67 int ret = 0;
68 struct vmbus_channel_initiate_contact *msg; 68 struct vmbus_channel_initiate_contact *msg;
69 unsigned long flags; 69 unsigned long flags;
70 int t;
71 70
72 init_completion(&msginfo->waitevent); 71 init_completion(&msginfo->waitevent);
73 72
@@ -78,6 +77,8 @@ static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
78 msg->interrupt_page = virt_to_phys(vmbus_connection.int_page); 77 msg->interrupt_page = virt_to_phys(vmbus_connection.int_page);
79 msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]); 78 msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
80 msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]); 79 msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
80 if (version == VERSION_WIN8)
81 msg->target_vcpu = hv_context.vp_index[smp_processor_id()];
81 82
82 /* 83 /*
83 * Add to list before we send the request since we may 84 * Add to list before we send the request since we may
@@ -100,15 +101,7 @@ static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
100 } 101 }
101 102
102 /* Wait for the connection response */ 103 /* Wait for the connection response */
103 t = wait_for_completion_timeout(&msginfo->waitevent, 5*HZ); 104 wait_for_completion(&msginfo->waitevent);
104 if (t == 0) {
105 spin_lock_irqsave(&vmbus_connection.channelmsg_lock,
106 flags);
107 list_del(&msginfo->msglistentry);
108 spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock,
109 flags);
110 return -ETIMEDOUT;
111 }
112 105
113 spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); 106 spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
114 list_del(&msginfo->msglistentry); 107 list_del(&msginfo->msglistentry);
diff --git a/drivers/hwmon/da9055-hwmon.c b/drivers/hwmon/da9055-hwmon.c
index 029ecabc4380..73b3865f1207 100644
--- a/drivers/hwmon/da9055-hwmon.c
+++ b/drivers/hwmon/da9055-hwmon.c
@@ -278,10 +278,6 @@ static int da9055_hwmon_probe(struct platform_device *pdev)
278 if (hwmon_irq < 0) 278 if (hwmon_irq < 0)
279 return hwmon_irq; 279 return hwmon_irq;
280 280
281 hwmon_irq = regmap_irq_get_virq(hwmon->da9055->irq_data, hwmon_irq);
282 if (hwmon_irq < 0)
283 return hwmon_irq;
284
285 ret = devm_request_threaded_irq(&pdev->dev, hwmon_irq, 281 ret = devm_request_threaded_irq(&pdev->dev, hwmon_irq,
286 NULL, da9055_auxadc_irq, 282 NULL, da9055_auxadc_irq,
287 IRQF_TRIGGER_HIGH | IRQF_ONESHOT, 283 IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
index 8c23203915af..8a17f01e8672 100644
--- a/drivers/hwmon/ntc_thermistor.c
+++ b/drivers/hwmon/ntc_thermistor.c
@@ -145,7 +145,7 @@ struct ntc_data {
145static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata) 145static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)
146{ 146{
147 struct iio_channel *channel = pdata->chan; 147 struct iio_channel *channel = pdata->chan;
148 unsigned int result; 148 s64 result;
149 int val, ret; 149 int val, ret;
150 150
151 ret = iio_read_channel_raw(channel, &val); 151 ret = iio_read_channel_raw(channel, &val);
@@ -155,10 +155,10 @@ static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)
155 } 155 }
156 156
157 /* unit: mV */ 157 /* unit: mV */
158 result = pdata->pullup_uv * val; 158 result = pdata->pullup_uv * (s64) val;
159 result >>= 12; 159 result >>= 12;
160 160
161 return result; 161 return (int)result;
162} 162}
163 163
164static const struct of_device_id ntc_match[] = { 164static const struct of_device_id ntc_match[] = {
diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
index 3cbf66e9d861..291d11fe93e7 100644
--- a/drivers/hwmon/pmbus/pmbus_core.c
+++ b/drivers/hwmon/pmbus/pmbus_core.c
@@ -90,7 +90,8 @@ struct pmbus_data {
90 90
91 u32 flags; /* from platform data */ 91 u32 flags; /* from platform data */
92 92
93 int exponent; /* linear mode: exponent for output voltages */ 93 int exponent[PMBUS_PAGES];
94 /* linear mode: exponent for output voltages */
94 95
95 const struct pmbus_driver_info *info; 96 const struct pmbus_driver_info *info;
96 97
@@ -410,7 +411,7 @@ static long pmbus_reg2data_linear(struct pmbus_data *data,
410 long val; 411 long val;
411 412
412 if (sensor->class == PSC_VOLTAGE_OUT) { /* LINEAR16 */ 413 if (sensor->class == PSC_VOLTAGE_OUT) { /* LINEAR16 */
413 exponent = data->exponent; 414 exponent = data->exponent[sensor->page];
414 mantissa = (u16) sensor->data; 415 mantissa = (u16) sensor->data;
415 } else { /* LINEAR11 */ 416 } else { /* LINEAR11 */
416 exponent = ((s16)sensor->data) >> 11; 417 exponent = ((s16)sensor->data) >> 11;
@@ -516,7 +517,7 @@ static long pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor)
516#define MIN_MANTISSA (511 * 1000) 517#define MIN_MANTISSA (511 * 1000)
517 518
518static u16 pmbus_data2reg_linear(struct pmbus_data *data, 519static u16 pmbus_data2reg_linear(struct pmbus_data *data,
519 enum pmbus_sensor_classes class, long val) 520 struct pmbus_sensor *sensor, long val)
520{ 521{
521 s16 exponent = 0, mantissa; 522 s16 exponent = 0, mantissa;
522 bool negative = false; 523 bool negative = false;
@@ -525,7 +526,7 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data,
525 if (val == 0) 526 if (val == 0)
526 return 0; 527 return 0;
527 528
528 if (class == PSC_VOLTAGE_OUT) { 529 if (sensor->class == PSC_VOLTAGE_OUT) {
529 /* LINEAR16 does not support negative voltages */ 530 /* LINEAR16 does not support negative voltages */
530 if (val < 0) 531 if (val < 0)
531 return 0; 532 return 0;
@@ -534,10 +535,10 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data,
534 * For a static exponents, we don't have a choice 535 * For a static exponents, we don't have a choice
535 * but to adjust the value to it. 536 * but to adjust the value to it.
536 */ 537 */
537 if (data->exponent < 0) 538 if (data->exponent[sensor->page] < 0)
538 val <<= -data->exponent; 539 val <<= -data->exponent[sensor->page];
539 else 540 else
540 val >>= data->exponent; 541 val >>= data->exponent[sensor->page];
541 val = DIV_ROUND_CLOSEST(val, 1000); 542 val = DIV_ROUND_CLOSEST(val, 1000);
542 return val & 0xffff; 543 return val & 0xffff;
543 } 544 }
@@ -548,14 +549,14 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data,
548 } 549 }
549 550
550 /* Power is in uW. Convert to mW before converting. */ 551 /* Power is in uW. Convert to mW before converting. */
551 if (class == PSC_POWER) 552 if (sensor->class == PSC_POWER)
552 val = DIV_ROUND_CLOSEST(val, 1000L); 553 val = DIV_ROUND_CLOSEST(val, 1000L);
553 554
554 /* 555 /*
555 * For simplicity, convert fan data to milli-units 556 * For simplicity, convert fan data to milli-units
556 * before calculating the exponent. 557 * before calculating the exponent.
557 */ 558 */
558 if (class == PSC_FAN) 559 if (sensor->class == PSC_FAN)
559 val = val * 1000; 560 val = val * 1000;
560 561
561 /* Reduce large mantissa until it fits into 10 bit */ 562 /* Reduce large mantissa until it fits into 10 bit */
@@ -585,22 +586,22 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data,
585} 586}
586 587
587static u16 pmbus_data2reg_direct(struct pmbus_data *data, 588static u16 pmbus_data2reg_direct(struct pmbus_data *data,
588 enum pmbus_sensor_classes class, long val) 589 struct pmbus_sensor *sensor, long val)
589{ 590{
590 long m, b, R; 591 long m, b, R;
591 592
592 m = data->info->m[class]; 593 m = data->info->m[sensor->class];
593 b = data->info->b[class]; 594 b = data->info->b[sensor->class];
594 R = data->info->R[class]; 595 R = data->info->R[sensor->class];
595 596
596 /* Power is in uW. Adjust R and b. */ 597 /* Power is in uW. Adjust R and b. */
597 if (class == PSC_POWER) { 598 if (sensor->class == PSC_POWER) {
598 R -= 3; 599 R -= 3;
599 b *= 1000; 600 b *= 1000;
600 } 601 }
601 602
602 /* Calculate Y = (m * X + b) * 10^R */ 603 /* Calculate Y = (m * X + b) * 10^R */
603 if (class != PSC_FAN) { 604 if (sensor->class != PSC_FAN) {
604 R -= 3; /* Adjust R and b for data in milli-units */ 605 R -= 3; /* Adjust R and b for data in milli-units */
605 b *= 1000; 606 b *= 1000;
606 } 607 }
@@ -619,7 +620,7 @@ static u16 pmbus_data2reg_direct(struct pmbus_data *data,
619} 620}
620 621
621static u16 pmbus_data2reg_vid(struct pmbus_data *data, 622static u16 pmbus_data2reg_vid(struct pmbus_data *data,
622 enum pmbus_sensor_classes class, long val) 623 struct pmbus_sensor *sensor, long val)
623{ 624{
624 val = clamp_val(val, 500, 1600); 625 val = clamp_val(val, 500, 1600);
625 626
@@ -627,20 +628,20 @@ static u16 pmbus_data2reg_vid(struct pmbus_data *data,
627} 628}
628 629
629static u16 pmbus_data2reg(struct pmbus_data *data, 630static u16 pmbus_data2reg(struct pmbus_data *data,
630 enum pmbus_sensor_classes class, long val) 631 struct pmbus_sensor *sensor, long val)
631{ 632{
632 u16 regval; 633 u16 regval;
633 634
634 switch (data->info->format[class]) { 635 switch (data->info->format[sensor->class]) {
635 case direct: 636 case direct:
636 regval = pmbus_data2reg_direct(data, class, val); 637 regval = pmbus_data2reg_direct(data, sensor, val);
637 break; 638 break;
638 case vid: 639 case vid:
639 regval = pmbus_data2reg_vid(data, class, val); 640 regval = pmbus_data2reg_vid(data, sensor, val);
640 break; 641 break;
641 case linear: 642 case linear:
642 default: 643 default:
643 regval = pmbus_data2reg_linear(data, class, val); 644 regval = pmbus_data2reg_linear(data, sensor, val);
644 break; 645 break;
645 } 646 }
646 return regval; 647 return regval;
@@ -746,7 +747,7 @@ static ssize_t pmbus_set_sensor(struct device *dev,
746 return -EINVAL; 747 return -EINVAL;
747 748
748 mutex_lock(&data->update_lock); 749 mutex_lock(&data->update_lock);
749 regval = pmbus_data2reg(data, sensor->class, val); 750 regval = pmbus_data2reg(data, sensor, val);
750 ret = _pmbus_write_word_data(client, sensor->page, sensor->reg, regval); 751 ret = _pmbus_write_word_data(client, sensor->page, sensor->reg, regval);
751 if (ret < 0) 752 if (ret < 0)
752 rv = ret; 753 rv = ret;
@@ -1643,12 +1644,13 @@ static int pmbus_find_attributes(struct i2c_client *client,
1643 * This function is called for all chips. 1644 * This function is called for all chips.
1644 */ 1645 */
1645static int pmbus_identify_common(struct i2c_client *client, 1646static int pmbus_identify_common(struct i2c_client *client,
1646 struct pmbus_data *data) 1647 struct pmbus_data *data, int page)
1647{ 1648{
1648 int vout_mode = -1; 1649 int vout_mode = -1;
1649 1650
1650 if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) 1651 if (pmbus_check_byte_register(client, page, PMBUS_VOUT_MODE))
1651 vout_mode = _pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); 1652 vout_mode = _pmbus_read_byte_data(client, page,
1653 PMBUS_VOUT_MODE);
1652 if (vout_mode >= 0 && vout_mode != 0xff) { 1654 if (vout_mode >= 0 && vout_mode != 0xff) {
1653 /* 1655 /*
1654 * Not all chips support the VOUT_MODE command, 1656 * Not all chips support the VOUT_MODE command,
@@ -1659,7 +1661,7 @@ static int pmbus_identify_common(struct i2c_client *client,
1659 if (data->info->format[PSC_VOLTAGE_OUT] != linear) 1661 if (data->info->format[PSC_VOLTAGE_OUT] != linear)
1660 return -ENODEV; 1662 return -ENODEV;
1661 1663
1662 data->exponent = ((s8)(vout_mode << 3)) >> 3; 1664 data->exponent[page] = ((s8)(vout_mode << 3)) >> 3;
1663 break; 1665 break;
1664 case 1: /* VID mode */ 1666 case 1: /* VID mode */
1665 if (data->info->format[PSC_VOLTAGE_OUT] != vid) 1667 if (data->info->format[PSC_VOLTAGE_OUT] != vid)
@@ -1674,7 +1676,7 @@ static int pmbus_identify_common(struct i2c_client *client,
1674 } 1676 }
1675 } 1677 }
1676 1678
1677 pmbus_clear_fault_page(client, 0); 1679 pmbus_clear_fault_page(client, page);
1678 return 0; 1680 return 0;
1679} 1681}
1680 1682
@@ -1682,7 +1684,7 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,
1682 struct pmbus_driver_info *info) 1684 struct pmbus_driver_info *info)
1683{ 1685{
1684 struct device *dev = &client->dev; 1686 struct device *dev = &client->dev;
1685 int ret; 1687 int page, ret;
1686 1688
1687 /* 1689 /*
1688 * Some PMBus chips don't support PMBUS_STATUS_BYTE, so try 1690 * Some PMBus chips don't support PMBUS_STATUS_BYTE, so try
@@ -1715,10 +1717,12 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,
1715 return -ENODEV; 1717 return -ENODEV;
1716 } 1718 }
1717 1719
1718 ret = pmbus_identify_common(client, data); 1720 for (page = 0; page < info->pages; page++) {
1719 if (ret < 0) { 1721 ret = pmbus_identify_common(client, data, page);
1720 dev_err(dev, "Failed to identify chip capabilities\n"); 1722 if (ret < 0) {
1721 return ret; 1723 dev_err(dev, "Failed to identify chip capabilities\n");
1724 return ret;
1725 }
1722 } 1726 }
1723 return 0; 1727 return 0;
1724} 1728}
diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c
index b8c5187b9ee0..d52d84937ad3 100644
--- a/drivers/i2c/busses/i2c-mv64xxx.c
+++ b/drivers/i2c/busses/i2c-mv64xxx.c
@@ -97,7 +97,6 @@ enum {
97enum { 97enum {
98 MV64XXX_I2C_ACTION_INVALID, 98 MV64XXX_I2C_ACTION_INVALID,
99 MV64XXX_I2C_ACTION_CONTINUE, 99 MV64XXX_I2C_ACTION_CONTINUE,
100 MV64XXX_I2C_ACTION_OFFLOAD_SEND_START,
101 MV64XXX_I2C_ACTION_SEND_START, 100 MV64XXX_I2C_ACTION_SEND_START,
102 MV64XXX_I2C_ACTION_SEND_RESTART, 101 MV64XXX_I2C_ACTION_SEND_RESTART,
103 MV64XXX_I2C_ACTION_OFFLOAD_RESTART, 102 MV64XXX_I2C_ACTION_OFFLOAD_RESTART,
@@ -204,6 +203,9 @@ static int mv64xxx_i2c_offload_msg(struct mv64xxx_i2c_data *drv_data)
204 unsigned long ctrl_reg; 203 unsigned long ctrl_reg;
205 struct i2c_msg *msg = drv_data->msgs; 204 struct i2c_msg *msg = drv_data->msgs;
206 205
206 if (!drv_data->offload_enabled)
207 return -EOPNOTSUPP;
208
207 drv_data->msg = msg; 209 drv_data->msg = msg;
208 drv_data->byte_posn = 0; 210 drv_data->byte_posn = 0;
209 drv_data->bytes_left = msg->len; 211 drv_data->bytes_left = msg->len;
@@ -433,8 +435,7 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
433 435
434 drv_data->msgs++; 436 drv_data->msgs++;
435 drv_data->num_msgs--; 437 drv_data->num_msgs--;
436 if (!(drv_data->offload_enabled && 438 if (mv64xxx_i2c_offload_msg(drv_data) < 0) {
437 mv64xxx_i2c_offload_msg(drv_data))) {
438 drv_data->cntl_bits |= MV64XXX_I2C_REG_CONTROL_START; 439 drv_data->cntl_bits |= MV64XXX_I2C_REG_CONTROL_START;
439 writel(drv_data->cntl_bits, 440 writel(drv_data->cntl_bits,
440 drv_data->reg_base + drv_data->reg_offsets.control); 441 drv_data->reg_base + drv_data->reg_offsets.control);
@@ -458,15 +459,14 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
458 drv_data->reg_base + drv_data->reg_offsets.control); 459 drv_data->reg_base + drv_data->reg_offsets.control);
459 break; 460 break;
460 461
461 case MV64XXX_I2C_ACTION_OFFLOAD_SEND_START:
462 if (!mv64xxx_i2c_offload_msg(drv_data))
463 break;
464 else
465 drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
466 /* FALLTHRU */
467 case MV64XXX_I2C_ACTION_SEND_START: 462 case MV64XXX_I2C_ACTION_SEND_START:
468 writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START, 463 /* Can we offload this msg ? */
469 drv_data->reg_base + drv_data->reg_offsets.control); 464 if (mv64xxx_i2c_offload_msg(drv_data) < 0) {
465 /* No, switch to standard path */
466 mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs);
467 writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
468 drv_data->reg_base + drv_data->reg_offsets.control);
469 }
470 break; 470 break;
471 471
472 case MV64XXX_I2C_ACTION_SEND_ADDR_1: 472 case MV64XXX_I2C_ACTION_SEND_ADDR_1:
@@ -625,15 +625,10 @@ mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
625 unsigned long flags; 625 unsigned long flags;
626 626
627 spin_lock_irqsave(&drv_data->lock, flags); 627 spin_lock_irqsave(&drv_data->lock, flags);
628 if (drv_data->offload_enabled) {
629 drv_data->action = MV64XXX_I2C_ACTION_OFFLOAD_SEND_START;
630 drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
631 } else {
632 mv64xxx_i2c_prepare_for_io(drv_data, msg);
633 628
634 drv_data->action = MV64XXX_I2C_ACTION_SEND_START; 629 drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
635 drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND; 630 drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
636 } 631
637 drv_data->send_stop = is_last; 632 drv_data->send_stop = is_last;
638 drv_data->block = 1; 633 drv_data->block = 1;
639 mv64xxx_i2c_do_action(drv_data); 634 mv64xxx_i2c_do_action(drv_data);
diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c
index 3bec9220df04..bfec313492b3 100644
--- a/drivers/iio/accel/bma180.c
+++ b/drivers/iio/accel/bma180.c
@@ -447,14 +447,14 @@ static const struct iio_chan_spec_ext_info bma180_ext_info[] = {
447 { }, 447 { },
448}; 448};
449 449
450#define BMA180_CHANNEL(_index) { \ 450#define BMA180_CHANNEL(_axis) { \
451 .type = IIO_ACCEL, \ 451 .type = IIO_ACCEL, \
452 .indexed = 1, \ 452 .modified = 1, \
453 .channel = (_index), \ 453 .channel2 = IIO_MOD_##_axis, \
454 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 454 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
455 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ 455 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
456 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ 456 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
457 .scan_index = (_index), \ 457 .scan_index = AXIS_##_axis, \
458 .scan_type = { \ 458 .scan_type = { \
459 .sign = 's', \ 459 .sign = 's', \
460 .realbits = 14, \ 460 .realbits = 14, \
@@ -465,10 +465,10 @@ static const struct iio_chan_spec_ext_info bma180_ext_info[] = {
465} 465}
466 466
467static const struct iio_chan_spec bma180_channels[] = { 467static const struct iio_chan_spec bma180_channels[] = {
468 BMA180_CHANNEL(AXIS_X), 468 BMA180_CHANNEL(X),
469 BMA180_CHANNEL(AXIS_Y), 469 BMA180_CHANNEL(Y),
470 BMA180_CHANNEL(AXIS_Z), 470 BMA180_CHANNEL(Z),
471 IIO_CHAN_SOFT_TIMESTAMP(4), 471 IIO_CHAN_SOFT_TIMESTAMP(3),
472}; 472};
473 473
474static irqreturn_t bma180_trigger_handler(int irq, void *p) 474static irqreturn_t bma180_trigger_handler(int irq, void *p)
diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c
index e283f2f2ee2f..360259266d4f 100644
--- a/drivers/iio/adc/max1363.c
+++ b/drivers/iio/adc/max1363.c
@@ -1560,7 +1560,7 @@ static int max1363_probe(struct i2c_client *client,
1560 st->client = client; 1560 st->client = client;
1561 1561
1562 st->vref_uv = st->chip_info->int_vref_mv * 1000; 1562 st->vref_uv = st->chip_info->int_vref_mv * 1000;
1563 vref = devm_regulator_get(&client->dev, "vref"); 1563 vref = devm_regulator_get_optional(&client->dev, "vref");
1564 if (!IS_ERR(vref)) { 1564 if (!IS_ERR(vref)) {
1565 int vref_uv; 1565 int vref_uv;
1566 1566
diff --git a/drivers/iio/imu/adis16400.h b/drivers/iio/imu/adis16400.h
index 2f8f9d632386..0916bf6b6c31 100644
--- a/drivers/iio/imu/adis16400.h
+++ b/drivers/iio/imu/adis16400.h
@@ -189,6 +189,7 @@ enum {
189 ADIS16300_SCAN_INCLI_X, 189 ADIS16300_SCAN_INCLI_X,
190 ADIS16300_SCAN_INCLI_Y, 190 ADIS16300_SCAN_INCLI_Y,
191 ADIS16400_SCAN_ADC, 191 ADIS16400_SCAN_ADC,
192 ADIS16400_SCAN_TIMESTAMP,
192}; 193};
193 194
194#ifdef CONFIG_IIO_BUFFER 195#ifdef CONFIG_IIO_BUFFER
diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c
index 368660dfe135..7c582f7ae34e 100644
--- a/drivers/iio/imu/adis16400_core.c
+++ b/drivers/iio/imu/adis16400_core.c
@@ -632,7 +632,7 @@ static const struct iio_chan_spec adis16400_channels[] = {
632 ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 14), 632 ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 14),
633 ADIS16400_TEMP_CHAN(ADIS16400_TEMP_OUT, 12), 633 ADIS16400_TEMP_CHAN(ADIS16400_TEMP_OUT, 12),
634 ADIS16400_AUX_ADC_CHAN(ADIS16400_AUX_ADC, 12), 634 ADIS16400_AUX_ADC_CHAN(ADIS16400_AUX_ADC, 12),
635 IIO_CHAN_SOFT_TIMESTAMP(12) 635 IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP),
636}; 636};
637 637
638static const struct iio_chan_spec adis16448_channels[] = { 638static const struct iio_chan_spec adis16448_channels[] = {
@@ -659,7 +659,7 @@ static const struct iio_chan_spec adis16448_channels[] = {
659 }, 659 },
660 }, 660 },
661 ADIS16400_TEMP_CHAN(ADIS16448_TEMP_OUT, 12), 661 ADIS16400_TEMP_CHAN(ADIS16448_TEMP_OUT, 12),
662 IIO_CHAN_SOFT_TIMESTAMP(11) 662 IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP),
663}; 663};
664 664
665static const struct iio_chan_spec adis16350_channels[] = { 665static const struct iio_chan_spec adis16350_channels[] = {
@@ -677,7 +677,7 @@ static const struct iio_chan_spec adis16350_channels[] = {
677 ADIS16400_MOD_TEMP_CHAN(X, ADIS16350_XTEMP_OUT, 12), 677 ADIS16400_MOD_TEMP_CHAN(X, ADIS16350_XTEMP_OUT, 12),
678 ADIS16400_MOD_TEMP_CHAN(Y, ADIS16350_YTEMP_OUT, 12), 678 ADIS16400_MOD_TEMP_CHAN(Y, ADIS16350_YTEMP_OUT, 12),
679 ADIS16400_MOD_TEMP_CHAN(Z, ADIS16350_ZTEMP_OUT, 12), 679 ADIS16400_MOD_TEMP_CHAN(Z, ADIS16350_ZTEMP_OUT, 12),
680 IIO_CHAN_SOFT_TIMESTAMP(11) 680 IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP),
681}; 681};
682 682
683static const struct iio_chan_spec adis16300_channels[] = { 683static const struct iio_chan_spec adis16300_channels[] = {
@@ -690,7 +690,7 @@ static const struct iio_chan_spec adis16300_channels[] = {
690 ADIS16400_AUX_ADC_CHAN(ADIS16300_AUX_ADC, 12), 690 ADIS16400_AUX_ADC_CHAN(ADIS16300_AUX_ADC, 12),
691 ADIS16400_INCLI_CHAN(X, ADIS16300_PITCH_OUT, 13), 691 ADIS16400_INCLI_CHAN(X, ADIS16300_PITCH_OUT, 13),
692 ADIS16400_INCLI_CHAN(Y, ADIS16300_ROLL_OUT, 13), 692 ADIS16400_INCLI_CHAN(Y, ADIS16300_ROLL_OUT, 13),
693 IIO_CHAN_SOFT_TIMESTAMP(14) 693 IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP),
694}; 694};
695 695
696static const struct iio_chan_spec adis16334_channels[] = { 696static const struct iio_chan_spec adis16334_channels[] = {
@@ -701,7 +701,7 @@ static const struct iio_chan_spec adis16334_channels[] = {
701 ADIS16400_ACCEL_CHAN(Y, ADIS16400_YACCL_OUT, 14), 701 ADIS16400_ACCEL_CHAN(Y, ADIS16400_YACCL_OUT, 14),
702 ADIS16400_ACCEL_CHAN(Z, ADIS16400_ZACCL_OUT, 14), 702 ADIS16400_ACCEL_CHAN(Z, ADIS16400_ZACCL_OUT, 14),
703 ADIS16400_TEMP_CHAN(ADIS16350_XTEMP_OUT, 12), 703 ADIS16400_TEMP_CHAN(ADIS16350_XTEMP_OUT, 12),
704 IIO_CHAN_SOFT_TIMESTAMP(8) 704 IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP),
705}; 705};
706 706
707static struct attribute *adis16400_attributes[] = { 707static struct attribute *adis16400_attributes[] = {
diff --git a/drivers/iio/light/tsl2563.c b/drivers/iio/light/tsl2563.c
index 3d8110157f2d..94daa9fc1247 100644
--- a/drivers/iio/light/tsl2563.c
+++ b/drivers/iio/light/tsl2563.c
@@ -460,10 +460,14 @@ static int tsl2563_write_raw(struct iio_dev *indio_dev,
460{ 460{
461 struct tsl2563_chip *chip = iio_priv(indio_dev); 461 struct tsl2563_chip *chip = iio_priv(indio_dev);
462 462
463 if (chan->channel == IIO_MOD_LIGHT_BOTH) 463 if (mask != IIO_CHAN_INFO_CALIBSCALE)
464 return -EINVAL;
465 if (chan->channel2 == IIO_MOD_LIGHT_BOTH)
464 chip->calib0 = calib_from_sysfs(val); 466 chip->calib0 = calib_from_sysfs(val);
465 else 467 else if (chan->channel2 == IIO_MOD_LIGHT_IR)
466 chip->calib1 = calib_from_sysfs(val); 468 chip->calib1 = calib_from_sysfs(val);
469 else
470 return -EINVAL;
467 471
468 return 0; 472 return 0;
469} 473}
@@ -472,14 +476,14 @@ static int tsl2563_read_raw(struct iio_dev *indio_dev,
472 struct iio_chan_spec const *chan, 476 struct iio_chan_spec const *chan,
473 int *val, 477 int *val,
474 int *val2, 478 int *val2,
475 long m) 479 long mask)
476{ 480{
477 int ret = -EINVAL; 481 int ret = -EINVAL;
478 u32 calib0, calib1; 482 u32 calib0, calib1;
479 struct tsl2563_chip *chip = iio_priv(indio_dev); 483 struct tsl2563_chip *chip = iio_priv(indio_dev);
480 484
481 mutex_lock(&chip->lock); 485 mutex_lock(&chip->lock);
482 switch (m) { 486 switch (mask) {
483 case IIO_CHAN_INFO_RAW: 487 case IIO_CHAN_INFO_RAW:
484 case IIO_CHAN_INFO_PROCESSED: 488 case IIO_CHAN_INFO_PROCESSED:
485 switch (chan->type) { 489 switch (chan->type) {
@@ -498,7 +502,7 @@ static int tsl2563_read_raw(struct iio_dev *indio_dev,
498 ret = tsl2563_get_adc(chip); 502 ret = tsl2563_get_adc(chip);
499 if (ret) 503 if (ret)
500 goto error_ret; 504 goto error_ret;
501 if (chan->channel == 0) 505 if (chan->channel2 == IIO_MOD_LIGHT_BOTH)
502 *val = chip->data0; 506 *val = chip->data0;
503 else 507 else
504 *val = chip->data1; 508 *val = chip->data1;
@@ -510,7 +514,7 @@ static int tsl2563_read_raw(struct iio_dev *indio_dev,
510 break; 514 break;
511 515
512 case IIO_CHAN_INFO_CALIBSCALE: 516 case IIO_CHAN_INFO_CALIBSCALE:
513 if (chan->channel == 0) 517 if (chan->channel2 == IIO_MOD_LIGHT_BOTH)
514 *val = calib_to_sysfs(chip->calib0); 518 *val = calib_to_sysfs(chip->calib0);
515 else 519 else
516 *val = calib_to_sysfs(chip->calib1); 520 *val = calib_to_sysfs(chip->calib1);
diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
index ff284e5afd95..05423543f89d 100644
--- a/drivers/iio/magnetometer/ak8975.c
+++ b/drivers/iio/magnetometer/ak8975.c
@@ -85,6 +85,7 @@
85#define AK8975_MAX_CONVERSION_TIMEOUT 500 85#define AK8975_MAX_CONVERSION_TIMEOUT 500
86#define AK8975_CONVERSION_DONE_POLL_TIME 10 86#define AK8975_CONVERSION_DONE_POLL_TIME 10
87#define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000) 87#define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000)
88#define RAW_TO_GAUSS(asa) ((((asa) + 128) * 3000) / 256)
88 89
89/* 90/*
90 * Per-instance context data for the device. 91 * Per-instance context data for the device.
@@ -265,15 +266,15 @@ static int ak8975_setup(struct i2c_client *client)
265 * 266 *
266 * Since 1uT = 0.01 gauss, our final scale factor becomes: 267 * Since 1uT = 0.01 gauss, our final scale factor becomes:
267 * 268 *
268 * Hadj = H * ((ASA + 128) / 256) * 3/10 * 100 269 * Hadj = H * ((ASA + 128) / 256) * 3/10 * 1/100
269 * Hadj = H * ((ASA + 128) * 30 / 256 270 * Hadj = H * ((ASA + 128) * 0.003) / 256
270 * 271 *
271 * Since ASA doesn't change, we cache the resultant scale factor into the 272 * Since ASA doesn't change, we cache the resultant scale factor into the
272 * device context in ak8975_setup(). 273 * device context in ak8975_setup().
273 */ 274 */
274 data->raw_to_gauss[0] = ((data->asa[0] + 128) * 30) >> 8; 275 data->raw_to_gauss[0] = RAW_TO_GAUSS(data->asa[0]);
275 data->raw_to_gauss[1] = ((data->asa[1] + 128) * 30) >> 8; 276 data->raw_to_gauss[1] = RAW_TO_GAUSS(data->asa[1]);
276 data->raw_to_gauss[2] = ((data->asa[2] + 128) * 30) >> 8; 277 data->raw_to_gauss[2] = RAW_TO_GAUSS(data->asa[2]);
277 278
278 return 0; 279 return 0;
279} 280}
@@ -428,8 +429,9 @@ static int ak8975_read_raw(struct iio_dev *indio_dev,
428 case IIO_CHAN_INFO_RAW: 429 case IIO_CHAN_INFO_RAW:
429 return ak8975_read_axis(indio_dev, chan->address, val); 430 return ak8975_read_axis(indio_dev, chan->address, val);
430 case IIO_CHAN_INFO_SCALE: 431 case IIO_CHAN_INFO_SCALE:
431 *val = data->raw_to_gauss[chan->address]; 432 *val = 0;
432 return IIO_VAL_INT; 433 *val2 = data->raw_to_gauss[chan->address];
434 return IIO_VAL_INT_PLUS_MICRO;
433 } 435 }
434 return -EINVAL; 436 return -EINVAL;
435} 437}
diff --git a/drivers/iio/magnetometer/mag3110.c b/drivers/iio/magnetometer/mag3110.c
index 4b65b6d3bdb1..f66955fb3509 100644
--- a/drivers/iio/magnetometer/mag3110.c
+++ b/drivers/iio/magnetometer/mag3110.c
@@ -106,7 +106,7 @@ static ssize_t mag3110_show_int_plus_micros(char *buf,
106 106
107 while (n-- > 0) 107 while (n-- > 0)
108 len += scnprintf(buf + len, PAGE_SIZE - len, 108 len += scnprintf(buf + len, PAGE_SIZE - len,
109 "%d.%d ", vals[n][0], vals[n][1]); 109 "%d.%06d ", vals[n][0], vals[n][1]);
110 110
111 /* replace trailing space by newline */ 111 /* replace trailing space by newline */
112 buf[len - 1] = '\n'; 112 buf[len - 1] = '\n';
@@ -154,6 +154,9 @@ static int mag3110_read_raw(struct iio_dev *indio_dev,
154 154
155 switch (mask) { 155 switch (mask) {
156 case IIO_CHAN_INFO_RAW: 156 case IIO_CHAN_INFO_RAW:
157 if (iio_buffer_enabled(indio_dev))
158 return -EBUSY;
159
157 switch (chan->type) { 160 switch (chan->type) {
158 case IIO_MAGN: /* in 0.1 uT / LSB */ 161 case IIO_MAGN: /* in 0.1 uT / LSB */
159 ret = mag3110_read(data, buffer); 162 ret = mag3110_read(data, buffer);
@@ -199,6 +202,9 @@ static int mag3110_write_raw(struct iio_dev *indio_dev,
199 struct mag3110_data *data = iio_priv(indio_dev); 202 struct mag3110_data *data = iio_priv(indio_dev);
200 int rate; 203 int rate;
201 204
205 if (iio_buffer_enabled(indio_dev))
206 return -EBUSY;
207
202 switch (mask) { 208 switch (mask) {
203 case IIO_CHAN_INFO_SAMP_FREQ: 209 case IIO_CHAN_INFO_SAMP_FREQ:
204 rate = mag3110_get_samp_freq_index(data, val, val2); 210 rate = mag3110_get_samp_freq_index(data, val, val2);
diff --git a/drivers/infiniband/hw/amso1100/c2.c b/drivers/infiniband/hw/amso1100/c2.c
index d53cf519f42a..00400c352c1a 100644
--- a/drivers/infiniband/hw/amso1100/c2.c
+++ b/drivers/infiniband/hw/amso1100/c2.c
@@ -1082,6 +1082,7 @@ static int c2_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
1082 1082
1083 /* Initialize network device */ 1083 /* Initialize network device */
1084 if ((netdev = c2_devinit(c2dev, mmio_regs)) == NULL) { 1084 if ((netdev = c2_devinit(c2dev, mmio_regs)) == NULL) {
1085 ret = -ENOMEM;
1085 iounmap(mmio_regs); 1086 iounmap(mmio_regs);
1086 goto bail4; 1087 goto bail4;
1087 } 1088 }
@@ -1151,7 +1152,8 @@ static int c2_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
1151 goto bail10; 1152 goto bail10;
1152 } 1153 }
1153 1154
1154 if (c2_register_device(c2dev)) 1155 ret = c2_register_device(c2dev);
1156 if (ret)
1155 goto bail10; 1157 goto bail10;
1156 1158
1157 return 0; 1159 return 0;
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c
index b7c986990053..d2a6d961344b 100644
--- a/drivers/infiniband/hw/amso1100/c2_rnic.c
+++ b/drivers/infiniband/hw/amso1100/c2_rnic.c
@@ -576,7 +576,8 @@ int c2_rnic_init(struct c2_dev *c2dev)
576 goto bail4; 576 goto bail4;
577 577
578 /* Initialize cached the adapter limits */ 578 /* Initialize cached the adapter limits */
579 if (c2_rnic_query(c2dev, &c2dev->props)) 579 err = c2_rnic_query(c2dev, &c2dev->props);
580 if (err)
580 goto bail5; 581 goto bail5;
581 582
582 /* Initialize the PD pool */ 583 /* Initialize the PD pool */
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index 45126879ad28..d286bdebe2ab 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -3352,6 +3352,7 @@ static int rx_pkt(struct c4iw_dev *dev, struct sk_buff *skb)
3352 goto free_dst; 3352 goto free_dst;
3353 } 3353 }
3354 3354
3355 neigh_release(neigh);
3355 step = dev->rdev.lldi.nrxq / dev->rdev.lldi.nchan; 3356 step = dev->rdev.lldi.nrxq / dev->rdev.lldi.nchan;
3356 rss_qid = dev->rdev.lldi.rxq_ids[pi->port_id * step]; 3357 rss_qid = dev->rdev.lldi.rxq_ids[pi->port_id * step];
3357 window = (__force u16) htons((__force u16)tcph->window); 3358 window = (__force u16) htons((__force u16)tcph->window);
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index c2702f549f10..e81c5547e647 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -347,7 +347,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port,
347 props->active_width = (((u8 *)mailbox->buf)[5] == 0x40) ? 347 props->active_width = (((u8 *)mailbox->buf)[5] == 0x40) ?
348 IB_WIDTH_4X : IB_WIDTH_1X; 348 IB_WIDTH_4X : IB_WIDTH_1X;
349 props->active_speed = IB_SPEED_QDR; 349 props->active_speed = IB_SPEED_QDR;
350 props->port_cap_flags = IB_PORT_CM_SUP; 350 props->port_cap_flags = IB_PORT_CM_SUP | IB_PORT_IP_BASED_GIDS;
351 props->gid_tbl_len = mdev->dev->caps.gid_table_len[port]; 351 props->gid_tbl_len = mdev->dev->caps.gid_table_len[port];
352 props->max_msg_sz = mdev->dev->caps.max_msg_sz; 352 props->max_msg_sz = mdev->dev->caps.max_msg_sz;
353 props->pkey_tbl_len = 1; 353 props->pkey_tbl_len = 1;
@@ -1357,6 +1357,21 @@ static struct device_attribute *mlx4_class_attributes[] = {
1357 &dev_attr_board_id 1357 &dev_attr_board_id
1358}; 1358};
1359 1359
1360static void mlx4_addrconf_ifid_eui48(u8 *eui, u16 vlan_id,
1361 struct net_device *dev)
1362{
1363 memcpy(eui, dev->dev_addr, 3);
1364 memcpy(eui + 5, dev->dev_addr + 3, 3);
1365 if (vlan_id < 0x1000) {
1366 eui[3] = vlan_id >> 8;
1367 eui[4] = vlan_id & 0xff;
1368 } else {
1369 eui[3] = 0xff;
1370 eui[4] = 0xfe;
1371 }
1372 eui[0] ^= 2;
1373}
1374
1360static void update_gids_task(struct work_struct *work) 1375static void update_gids_task(struct work_struct *work)
1361{ 1376{
1362 struct update_gid_work *gw = container_of(work, struct update_gid_work, work); 1377 struct update_gid_work *gw = container_of(work, struct update_gid_work, work);
@@ -1393,7 +1408,6 @@ static void reset_gids_task(struct work_struct *work)
1393 struct mlx4_cmd_mailbox *mailbox; 1408 struct mlx4_cmd_mailbox *mailbox;
1394 union ib_gid *gids; 1409 union ib_gid *gids;
1395 int err; 1410 int err;
1396 int i;
1397 struct mlx4_dev *dev = gw->dev->dev; 1411 struct mlx4_dev *dev = gw->dev->dev;
1398 1412
1399 mailbox = mlx4_alloc_cmd_mailbox(dev); 1413 mailbox = mlx4_alloc_cmd_mailbox(dev);
@@ -1405,18 +1419,16 @@ static void reset_gids_task(struct work_struct *work)
1405 gids = mailbox->buf; 1419 gids = mailbox->buf;
1406 memcpy(gids, gw->gids, sizeof(gw->gids)); 1420 memcpy(gids, gw->gids, sizeof(gw->gids));
1407 1421
1408 for (i = 1; i < gw->dev->num_ports + 1; i++) { 1422 if (mlx4_ib_port_link_layer(&gw->dev->ib_dev, gw->port) ==
1409 if (mlx4_ib_port_link_layer(&gw->dev->ib_dev, i) == 1423 IB_LINK_LAYER_ETHERNET) {
1410 IB_LINK_LAYER_ETHERNET) { 1424 err = mlx4_cmd(dev, mailbox->dma,
1411 err = mlx4_cmd(dev, mailbox->dma, 1425 MLX4_SET_PORT_GID_TABLE << 8 | gw->port,
1412 MLX4_SET_PORT_GID_TABLE << 8 | i, 1426 1, MLX4_CMD_SET_PORT,
1413 1, MLX4_CMD_SET_PORT, 1427 MLX4_CMD_TIME_CLASS_B,
1414 MLX4_CMD_TIME_CLASS_B, 1428 MLX4_CMD_WRAPPED);
1415 MLX4_CMD_WRAPPED); 1429 if (err)
1416 if (err) 1430 pr_warn(KERN_WARNING
1417 pr_warn(KERN_WARNING 1431 "set port %d command failed\n", gw->port);
1418 "set port %d command failed\n", i);
1419 }
1420 } 1432 }
1421 1433
1422 mlx4_free_cmd_mailbox(dev, mailbox); 1434 mlx4_free_cmd_mailbox(dev, mailbox);
@@ -1425,7 +1437,8 @@ free:
1425} 1437}
1426 1438
1427static int update_gid_table(struct mlx4_ib_dev *dev, int port, 1439static int update_gid_table(struct mlx4_ib_dev *dev, int port,
1428 union ib_gid *gid, int clear) 1440 union ib_gid *gid, int clear,
1441 int default_gid)
1429{ 1442{
1430 struct update_gid_work *work; 1443 struct update_gid_work *work;
1431 int i; 1444 int i;
@@ -1434,26 +1447,31 @@ static int update_gid_table(struct mlx4_ib_dev *dev, int port,
1434 int found = -1; 1447 int found = -1;
1435 int max_gids; 1448 int max_gids;
1436 1449
1437 max_gids = dev->dev->caps.gid_table_len[port]; 1450 if (default_gid) {
1438 for (i = 0; i < max_gids; ++i) { 1451 free = 0;
1439 if (!memcmp(&dev->iboe.gid_table[port - 1][i], gid, 1452 } else {
1440 sizeof(*gid))) 1453 max_gids = dev->dev->caps.gid_table_len[port];
1441 found = i; 1454 for (i = 1; i < max_gids; ++i) {
1442 1455 if (!memcmp(&dev->iboe.gid_table[port - 1][i], gid,
1443 if (clear) {
1444 if (found >= 0) {
1445 need_update = 1;
1446 dev->iboe.gid_table[port - 1][found] = zgid;
1447 break;
1448 }
1449 } else {
1450 if (found >= 0)
1451 break;
1452
1453 if (free < 0 &&
1454 !memcmp(&dev->iboe.gid_table[port - 1][i], &zgid,
1455 sizeof(*gid))) 1456 sizeof(*gid)))
1456 free = i; 1457 found = i;
1458
1459 if (clear) {
1460 if (found >= 0) {
1461 need_update = 1;
1462 dev->iboe.gid_table[port - 1][found] =
1463 zgid;
1464 break;
1465 }
1466 } else {
1467 if (found >= 0)
1468 break;
1469
1470 if (free < 0 &&
1471 !memcmp(&dev->iboe.gid_table[port - 1][i],
1472 &zgid, sizeof(*gid)))
1473 free = i;
1474 }
1457 } 1475 }
1458 } 1476 }
1459 1477
@@ -1478,18 +1496,26 @@ static int update_gid_table(struct mlx4_ib_dev *dev, int port,
1478 return 0; 1496 return 0;
1479} 1497}
1480 1498
1481static int reset_gid_table(struct mlx4_ib_dev *dev) 1499static void mlx4_make_default_gid(struct net_device *dev, union ib_gid *gid)
1482{ 1500{
1483 struct update_gid_work *work; 1501 gid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL);
1502 mlx4_addrconf_ifid_eui48(&gid->raw[8], 0xffff, dev);
1503}
1504
1484 1505
1506static int reset_gid_table(struct mlx4_ib_dev *dev, u8 port)
1507{
1508 struct update_gid_work *work;
1485 1509
1486 work = kzalloc(sizeof(*work), GFP_ATOMIC); 1510 work = kzalloc(sizeof(*work), GFP_ATOMIC);
1487 if (!work) 1511 if (!work)
1488 return -ENOMEM; 1512 return -ENOMEM;
1489 memset(dev->iboe.gid_table, 0, sizeof(dev->iboe.gid_table)); 1513
1514 memset(dev->iboe.gid_table[port - 1], 0, sizeof(work->gids));
1490 memset(work->gids, 0, sizeof(work->gids)); 1515 memset(work->gids, 0, sizeof(work->gids));
1491 INIT_WORK(&work->work, reset_gids_task); 1516 INIT_WORK(&work->work, reset_gids_task);
1492 work->dev = dev; 1517 work->dev = dev;
1518 work->port = port;
1493 queue_work(wq, &work->work); 1519 queue_work(wq, &work->work);
1494 return 0; 1520 return 0;
1495} 1521}
@@ -1502,6 +1528,12 @@ static int mlx4_ib_addr_event(int event, struct net_device *event_netdev,
1502 struct net_device *real_dev = rdma_vlan_dev_real_dev(event_netdev) ? 1528 struct net_device *real_dev = rdma_vlan_dev_real_dev(event_netdev) ?
1503 rdma_vlan_dev_real_dev(event_netdev) : 1529 rdma_vlan_dev_real_dev(event_netdev) :
1504 event_netdev; 1530 event_netdev;
1531 union ib_gid default_gid;
1532
1533 mlx4_make_default_gid(real_dev, &default_gid);
1534
1535 if (!memcmp(gid, &default_gid, sizeof(*gid)))
1536 return 0;
1505 1537
1506 if (event != NETDEV_DOWN && event != NETDEV_UP) 1538 if (event != NETDEV_DOWN && event != NETDEV_UP)
1507 return 0; 1539 return 0;
@@ -1520,7 +1552,7 @@ static int mlx4_ib_addr_event(int event, struct net_device *event_netdev,
1520 (!netif_is_bond_master(real_dev) && 1552 (!netif_is_bond_master(real_dev) &&
1521 (real_dev == iboe->netdevs[port - 1]))) 1553 (real_dev == iboe->netdevs[port - 1])))
1522 update_gid_table(ibdev, port, gid, 1554 update_gid_table(ibdev, port, gid,
1523 event == NETDEV_DOWN); 1555 event == NETDEV_DOWN, 0);
1524 1556
1525 spin_unlock(&iboe->lock); 1557 spin_unlock(&iboe->lock);
1526 return 0; 1558 return 0;
@@ -1536,7 +1568,6 @@ static u8 mlx4_ib_get_dev_port(struct net_device *dev,
1536 rdma_vlan_dev_real_dev(dev) : dev; 1568 rdma_vlan_dev_real_dev(dev) : dev;
1537 1569
1538 iboe = &ibdev->iboe; 1570 iboe = &ibdev->iboe;
1539 spin_lock(&iboe->lock);
1540 1571
1541 for (port = 1; port <= MLX4_MAX_PORTS; ++port) 1572 for (port = 1; port <= MLX4_MAX_PORTS; ++port)
1542 if ((netif_is_bond_master(real_dev) && 1573 if ((netif_is_bond_master(real_dev) &&
@@ -1545,8 +1576,6 @@ static u8 mlx4_ib_get_dev_port(struct net_device *dev,
1545 (real_dev == iboe->netdevs[port - 1]))) 1576 (real_dev == iboe->netdevs[port - 1])))
1546 break; 1577 break;
1547 1578
1548 spin_unlock(&iboe->lock);
1549
1550 if ((port == 0) || (port > MLX4_MAX_PORTS)) 1579 if ((port == 0) || (port > MLX4_MAX_PORTS))
1551 return 0; 1580 return 0;
1552 else 1581 else
@@ -1607,7 +1636,7 @@ static void mlx4_ib_get_dev_addr(struct net_device *dev,
1607 /*ifa->ifa_address;*/ 1636 /*ifa->ifa_address;*/
1608 ipv6_addr_set_v4mapped(ifa->ifa_address, 1637 ipv6_addr_set_v4mapped(ifa->ifa_address,
1609 (struct in6_addr *)&gid); 1638 (struct in6_addr *)&gid);
1610 update_gid_table(ibdev, port, &gid, 0); 1639 update_gid_table(ibdev, port, &gid, 0, 0);
1611 } 1640 }
1612 endfor_ifa(in_dev); 1641 endfor_ifa(in_dev);
1613 in_dev_put(in_dev); 1642 in_dev_put(in_dev);
@@ -1619,7 +1648,7 @@ static void mlx4_ib_get_dev_addr(struct net_device *dev,
1619 read_lock_bh(&in6_dev->lock); 1648 read_lock_bh(&in6_dev->lock);
1620 list_for_each_entry(ifp, &in6_dev->addr_list, if_list) { 1649 list_for_each_entry(ifp, &in6_dev->addr_list, if_list) {
1621 pgid = (union ib_gid *)&ifp->addr; 1650 pgid = (union ib_gid *)&ifp->addr;
1622 update_gid_table(ibdev, port, pgid, 0); 1651 update_gid_table(ibdev, port, pgid, 0, 0);
1623 } 1652 }
1624 read_unlock_bh(&in6_dev->lock); 1653 read_unlock_bh(&in6_dev->lock);
1625 in6_dev_put(in6_dev); 1654 in6_dev_put(in6_dev);
@@ -1627,14 +1656,26 @@ static void mlx4_ib_get_dev_addr(struct net_device *dev,
1627#endif 1656#endif
1628} 1657}
1629 1658
1659static void mlx4_ib_set_default_gid(struct mlx4_ib_dev *ibdev,
1660 struct net_device *dev, u8 port)
1661{
1662 union ib_gid gid;
1663 mlx4_make_default_gid(dev, &gid);
1664 update_gid_table(ibdev, port, &gid, 0, 1);
1665}
1666
1630static int mlx4_ib_init_gid_table(struct mlx4_ib_dev *ibdev) 1667static int mlx4_ib_init_gid_table(struct mlx4_ib_dev *ibdev)
1631{ 1668{
1632 struct net_device *dev; 1669 struct net_device *dev;
1670 struct mlx4_ib_iboe *iboe = &ibdev->iboe;
1671 int i;
1633 1672
1634 if (reset_gid_table(ibdev)) 1673 for (i = 1; i <= ibdev->num_ports; ++i)
1635 return -1; 1674 if (reset_gid_table(ibdev, i))
1675 return -1;
1636 1676
1637 read_lock(&dev_base_lock); 1677 read_lock(&dev_base_lock);
1678 spin_lock(&iboe->lock);
1638 1679
1639 for_each_netdev(&init_net, dev) { 1680 for_each_netdev(&init_net, dev) {
1640 u8 port = mlx4_ib_get_dev_port(dev, ibdev); 1681 u8 port = mlx4_ib_get_dev_port(dev, ibdev);
@@ -1642,6 +1683,7 @@ static int mlx4_ib_init_gid_table(struct mlx4_ib_dev *ibdev)
1642 mlx4_ib_get_dev_addr(dev, ibdev, port); 1683 mlx4_ib_get_dev_addr(dev, ibdev, port);
1643 } 1684 }
1644 1685
1686 spin_unlock(&iboe->lock);
1645 read_unlock(&dev_base_lock); 1687 read_unlock(&dev_base_lock);
1646 1688
1647 return 0; 1689 return 0;
@@ -1656,25 +1698,57 @@ static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev)
1656 1698
1657 spin_lock(&iboe->lock); 1699 spin_lock(&iboe->lock);
1658 mlx4_foreach_ib_transport_port(port, ibdev->dev) { 1700 mlx4_foreach_ib_transport_port(port, ibdev->dev) {
1701 enum ib_port_state port_state = IB_PORT_NOP;
1659 struct net_device *old_master = iboe->masters[port - 1]; 1702 struct net_device *old_master = iboe->masters[port - 1];
1703 struct net_device *curr_netdev;
1660 struct net_device *curr_master; 1704 struct net_device *curr_master;
1705
1661 iboe->netdevs[port - 1] = 1706 iboe->netdevs[port - 1] =
1662 mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port); 1707 mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port);
1708 if (iboe->netdevs[port - 1])
1709 mlx4_ib_set_default_gid(ibdev,
1710 iboe->netdevs[port - 1], port);
1711 curr_netdev = iboe->netdevs[port - 1];
1663 1712
1664 if (iboe->netdevs[port - 1] && 1713 if (iboe->netdevs[port - 1] &&
1665 netif_is_bond_slave(iboe->netdevs[port - 1])) { 1714 netif_is_bond_slave(iboe->netdevs[port - 1])) {
1666 rtnl_lock();
1667 iboe->masters[port - 1] = netdev_master_upper_dev_get( 1715 iboe->masters[port - 1] = netdev_master_upper_dev_get(
1668 iboe->netdevs[port - 1]); 1716 iboe->netdevs[port - 1]);
1669 rtnl_unlock(); 1717 } else {
1718 iboe->masters[port - 1] = NULL;
1670 } 1719 }
1671 curr_master = iboe->masters[port - 1]; 1720 curr_master = iboe->masters[port - 1];
1672 1721
1722 if (curr_netdev) {
1723 port_state = (netif_running(curr_netdev) && netif_carrier_ok(curr_netdev)) ?
1724 IB_PORT_ACTIVE : IB_PORT_DOWN;
1725 mlx4_ib_set_default_gid(ibdev, curr_netdev, port);
1726 } else {
1727 reset_gid_table(ibdev, port);
1728 }
1729 /* if using bonding/team and a slave port is down, we don't the bond IP
1730 * based gids in the table since flows that select port by gid may get
1731 * the down port.
1732 */
1733 if (curr_master && (port_state == IB_PORT_DOWN)) {
1734 reset_gid_table(ibdev, port);
1735 mlx4_ib_set_default_gid(ibdev, curr_netdev, port);
1736 }
1673 /* if bonding is used it is possible that we add it to masters 1737 /* if bonding is used it is possible that we add it to masters
1674 only after IP address is assigned to the net bonding 1738 * only after IP address is assigned to the net bonding
1675 interface */ 1739 * interface.
1676 if (curr_master && (old_master != curr_master)) 1740 */
1741 if (curr_master && (old_master != curr_master)) {
1742 reset_gid_table(ibdev, port);
1743 mlx4_ib_set_default_gid(ibdev, curr_netdev, port);
1677 mlx4_ib_get_dev_addr(curr_master, ibdev, port); 1744 mlx4_ib_get_dev_addr(curr_master, ibdev, port);
1745 }
1746
1747 if (!curr_master && (old_master != curr_master)) {
1748 reset_gid_table(ibdev, port);
1749 mlx4_ib_set_default_gid(ibdev, curr_netdev, port);
1750 mlx4_ib_get_dev_addr(curr_netdev, ibdev, port);
1751 }
1678 } 1752 }
1679 1753
1680 spin_unlock(&iboe->lock); 1754 spin_unlock(&iboe->lock);
@@ -1810,6 +1884,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
1810 int i, j; 1884 int i, j;
1811 int err; 1885 int err;
1812 struct mlx4_ib_iboe *iboe; 1886 struct mlx4_ib_iboe *iboe;
1887 int ib_num_ports = 0;
1813 1888
1814 pr_info_once("%s", mlx4_ib_version); 1889 pr_info_once("%s", mlx4_ib_version);
1815 1890
@@ -1985,10 +2060,14 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
1985 ibdev->counters[i] = -1; 2060 ibdev->counters[i] = -1;
1986 } 2061 }
1987 2062
2063 mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
2064 ib_num_ports++;
2065
1988 spin_lock_init(&ibdev->sm_lock); 2066 spin_lock_init(&ibdev->sm_lock);
1989 mutex_init(&ibdev->cap_mask_mutex); 2067 mutex_init(&ibdev->cap_mask_mutex);
1990 2068
1991 if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED) { 2069 if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED &&
2070 ib_num_ports) {
1992 ibdev->steer_qpn_count = MLX4_IB_UC_MAX_NUM_QPS; 2071 ibdev->steer_qpn_count = MLX4_IB_UC_MAX_NUM_QPS;
1993 err = mlx4_qp_reserve_range(dev, ibdev->steer_qpn_count, 2072 err = mlx4_qp_reserve_range(dev, ibdev->steer_qpn_count,
1994 MLX4_IB_UC_STEER_QPN_ALIGN, 2073 MLX4_IB_UC_STEER_QPN_ALIGN,
@@ -2051,7 +2130,11 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
2051 } 2130 }
2052 } 2131 }
2053#endif 2132#endif
2133 for (i = 1 ; i <= ibdev->num_ports ; ++i)
2134 reset_gid_table(ibdev, i);
2135 rtnl_lock();
2054 mlx4_ib_scan_netdevs(ibdev); 2136 mlx4_ib_scan_netdevs(ibdev);
2137 rtnl_unlock();
2055 mlx4_ib_init_gid_table(ibdev); 2138 mlx4_ib_init_gid_table(ibdev);
2056 } 2139 }
2057 2140
diff --git a/drivers/infiniband/hw/mlx5/Kconfig b/drivers/infiniband/hw/mlx5/Kconfig
index 8e6aebfaf8a4..10df386c6344 100644
--- a/drivers/infiniband/hw/mlx5/Kconfig
+++ b/drivers/infiniband/hw/mlx5/Kconfig
@@ -1,6 +1,6 @@
1config MLX5_INFINIBAND 1config MLX5_INFINIBAND
2 tristate "Mellanox Connect-IB HCA support" 2 tristate "Mellanox Connect-IB HCA support"
3 depends on NETDEVICES && ETHERNET && PCI && X86 3 depends on NETDEVICES && ETHERNET && PCI
4 select NET_VENDOR_MELLANOX 4 select NET_VENDOR_MELLANOX
5 select MLX5_CORE 5 select MLX5_CORE
6 ---help--- 6 ---help---
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 9660d093f8cf..aa03e732b6a8 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -261,8 +261,7 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
261 props->device_cap_flags = IB_DEVICE_CHANGE_PHY_PORT | 261 props->device_cap_flags = IB_DEVICE_CHANGE_PHY_PORT |
262 IB_DEVICE_PORT_ACTIVE_EVENT | 262 IB_DEVICE_PORT_ACTIVE_EVENT |
263 IB_DEVICE_SYS_IMAGE_GUID | 263 IB_DEVICE_SYS_IMAGE_GUID |
264 IB_DEVICE_RC_RNR_NAK_GEN | 264 IB_DEVICE_RC_RNR_NAK_GEN;
265 IB_DEVICE_BLOCK_MULTICAST_LOOPBACK;
266 flags = dev->mdev.caps.flags; 265 flags = dev->mdev.caps.flags;
267 if (flags & MLX5_DEV_CAP_FLAG_BAD_PKEY_CNTR) 266 if (flags & MLX5_DEV_CAP_FLAG_BAD_PKEY_CNTR)
268 props->device_cap_flags |= IB_DEVICE_BAD_PKEY_CNTR; 267 props->device_cap_flags |= IB_DEVICE_BAD_PKEY_CNTR;
@@ -536,24 +535,38 @@ static struct ib_ucontext *mlx5_ib_alloc_ucontext(struct ib_device *ibdev,
536 struct ib_udata *udata) 535 struct ib_udata *udata)
537{ 536{
538 struct mlx5_ib_dev *dev = to_mdev(ibdev); 537 struct mlx5_ib_dev *dev = to_mdev(ibdev);
539 struct mlx5_ib_alloc_ucontext_req req; 538 struct mlx5_ib_alloc_ucontext_req_v2 req;
540 struct mlx5_ib_alloc_ucontext_resp resp; 539 struct mlx5_ib_alloc_ucontext_resp resp;
541 struct mlx5_ib_ucontext *context; 540 struct mlx5_ib_ucontext *context;
542 struct mlx5_uuar_info *uuari; 541 struct mlx5_uuar_info *uuari;
543 struct mlx5_uar *uars; 542 struct mlx5_uar *uars;
544 int gross_uuars; 543 int gross_uuars;
545 int num_uars; 544 int num_uars;
545 int ver;
546 int uuarn; 546 int uuarn;
547 int err; 547 int err;
548 int i; 548 int i;
549 int reqlen;
549 550
550 if (!dev->ib_active) 551 if (!dev->ib_active)
551 return ERR_PTR(-EAGAIN); 552 return ERR_PTR(-EAGAIN);
552 553
553 err = ib_copy_from_udata(&req, udata, sizeof(req)); 554 memset(&req, 0, sizeof(req));
555 reqlen = udata->inlen - sizeof(struct ib_uverbs_cmd_hdr);
556 if (reqlen == sizeof(struct mlx5_ib_alloc_ucontext_req))
557 ver = 0;
558 else if (reqlen == sizeof(struct mlx5_ib_alloc_ucontext_req_v2))
559 ver = 2;
560 else
561 return ERR_PTR(-EINVAL);
562
563 err = ib_copy_from_udata(&req, udata, reqlen);
554 if (err) 564 if (err)
555 return ERR_PTR(err); 565 return ERR_PTR(err);
556 566
567 if (req.flags || req.reserved)
568 return ERR_PTR(-EINVAL);
569
557 if (req.total_num_uuars > MLX5_MAX_UUARS) 570 if (req.total_num_uuars > MLX5_MAX_UUARS)
558 return ERR_PTR(-ENOMEM); 571 return ERR_PTR(-ENOMEM);
559 572
@@ -626,6 +639,7 @@ static struct ib_ucontext *mlx5_ib_alloc_ucontext(struct ib_device *ibdev,
626 if (err) 639 if (err)
627 goto out_uars; 640 goto out_uars;
628 641
642 uuari->ver = ver;
629 uuari->num_low_latency_uuars = req.num_low_latency_uuars; 643 uuari->num_low_latency_uuars = req.num_low_latency_uuars;
630 uuari->uars = uars; 644 uuari->uars = uars;
631 uuari->num_uars = num_uars; 645 uuari->num_uars = num_uars;
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index ae37fb9bf262..7dfe8a1c84cf 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -216,7 +216,9 @@ static int sq_overhead(enum ib_qp_type qp_type)
216 216
217 case IB_QPT_UC: 217 case IB_QPT_UC:
218 size += sizeof(struct mlx5_wqe_ctrl_seg) + 218 size += sizeof(struct mlx5_wqe_ctrl_seg) +
219 sizeof(struct mlx5_wqe_raddr_seg); 219 sizeof(struct mlx5_wqe_raddr_seg) +
220 sizeof(struct mlx5_wqe_umr_ctrl_seg) +
221 sizeof(struct mlx5_mkey_seg);
220 break; 222 break;
221 223
222 case IB_QPT_UD: 224 case IB_QPT_UD:
@@ -428,11 +430,17 @@ static int alloc_uuar(struct mlx5_uuar_info *uuari,
428 break; 430 break;
429 431
430 case MLX5_IB_LATENCY_CLASS_MEDIUM: 432 case MLX5_IB_LATENCY_CLASS_MEDIUM:
431 uuarn = alloc_med_class_uuar(uuari); 433 if (uuari->ver < 2)
434 uuarn = -ENOMEM;
435 else
436 uuarn = alloc_med_class_uuar(uuari);
432 break; 437 break;
433 438
434 case MLX5_IB_LATENCY_CLASS_HIGH: 439 case MLX5_IB_LATENCY_CLASS_HIGH:
435 uuarn = alloc_high_class_uuar(uuari); 440 if (uuari->ver < 2)
441 uuarn = -ENOMEM;
442 else
443 uuarn = alloc_high_class_uuar(uuari);
436 break; 444 break;
437 445
438 case MLX5_IB_LATENCY_CLASS_FAST_PATH: 446 case MLX5_IB_LATENCY_CLASS_FAST_PATH:
@@ -657,8 +665,8 @@ static int create_kernel_qp(struct mlx5_ib_dev *dev,
657 int err; 665 int err;
658 666
659 uuari = &dev->mdev.priv.uuari; 667 uuari = &dev->mdev.priv.uuari;
660 if (init_attr->create_flags & IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK) 668 if (init_attr->create_flags)
661 qp->flags |= MLX5_IB_QP_BLOCK_MULTICAST_LOOPBACK; 669 return -EINVAL;
662 670
663 if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR) 671 if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR)
664 lc = MLX5_IB_LATENCY_CLASS_FAST_PATH; 672 lc = MLX5_IB_LATENCY_CLASS_FAST_PATH;
diff --git a/drivers/infiniband/hw/mlx5/user.h b/drivers/infiniband/hw/mlx5/user.h
index 32a2a5dfc523..0f4f8e42a17f 100644
--- a/drivers/infiniband/hw/mlx5/user.h
+++ b/drivers/infiniband/hw/mlx5/user.h
@@ -62,6 +62,13 @@ struct mlx5_ib_alloc_ucontext_req {
62 __u32 num_low_latency_uuars; 62 __u32 num_low_latency_uuars;
63}; 63};
64 64
65struct mlx5_ib_alloc_ucontext_req_v2 {
66 __u32 total_num_uuars;
67 __u32 num_low_latency_uuars;
68 __u32 flags;
69 __u32 reserved;
70};
71
65struct mlx5_ib_alloc_ucontext_resp { 72struct mlx5_ib_alloc_ucontext_resp {
66 __u32 qp_tab_size; 73 __u32 qp_tab_size;
67 __u32 bf_reg_size; 74 __u32 bf_reg_size;
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index 429141078eec..353c7b05a90a 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -675,8 +675,11 @@ static int nes_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
675 INIT_DELAYED_WORK(&nesdev->work, nes_recheck_link_status); 675 INIT_DELAYED_WORK(&nesdev->work, nes_recheck_link_status);
676 676
677 /* Initialize network devices */ 677 /* Initialize network devices */
678 if ((netdev = nes_netdev_init(nesdev, mmio_regs)) == NULL) 678 netdev = nes_netdev_init(nesdev, mmio_regs);
679 if (netdev == NULL) {
680 ret = -ENOMEM;
679 goto bail7; 681 goto bail7;
682 }
680 683
681 /* Register network device */ 684 /* Register network device */
682 ret = register_netdev(netdev); 685 ret = register_netdev(netdev);
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
index 2ca86ca818bd..1a8a945efa60 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
@@ -127,7 +127,7 @@ static int ocrdma_addr_event(unsigned long event, struct net_device *netdev,
127 127
128 is_vlan = netdev->priv_flags & IFF_802_1Q_VLAN; 128 is_vlan = netdev->priv_flags & IFF_802_1Q_VLAN;
129 if (is_vlan) 129 if (is_vlan)
130 netdev = vlan_dev_real_dev(netdev); 130 netdev = rdma_vlan_dev_real_dev(netdev);
131 131
132 rcu_read_lock(); 132 rcu_read_lock();
133 list_for_each_entry_rcu(dev, &ocrdma_dev_list, entry) { 133 list_for_each_entry_rcu(dev, &ocrdma_dev_list, entry) {
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
index aa92f40c9d50..e0cc201be41a 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
@@ -176,7 +176,7 @@ int ocrdma_query_port(struct ib_device *ibdev,
176 props->port_cap_flags = 176 props->port_cap_flags =
177 IB_PORT_CM_SUP | 177 IB_PORT_CM_SUP |
178 IB_PORT_REINIT_SUP | 178 IB_PORT_REINIT_SUP |
179 IB_PORT_DEVICE_MGMT_SUP | IB_PORT_VENDOR_CLASS_SUP; 179 IB_PORT_DEVICE_MGMT_SUP | IB_PORT_VENDOR_CLASS_SUP | IB_PORT_IP_BASED_GIDS;
180 props->gid_tbl_len = OCRDMA_MAX_SGID; 180 props->gid_tbl_len = OCRDMA_MAX_SGID;
181 props->pkey_tbl_len = 1; 181 props->pkey_tbl_len = 1;
182 props->bad_pkey_cntr = 0; 182 props->bad_pkey_cntr = 0;
@@ -1416,7 +1416,7 @@ int ocrdma_query_qp(struct ib_qp *ibqp,
1416 OCRDMA_QP_PARAMS_HOP_LMT_MASK) >> 1416 OCRDMA_QP_PARAMS_HOP_LMT_MASK) >>
1417 OCRDMA_QP_PARAMS_HOP_LMT_SHIFT; 1417 OCRDMA_QP_PARAMS_HOP_LMT_SHIFT;
1418 qp_attr->ah_attr.grh.traffic_class = (params.tclass_sq_psn & 1418 qp_attr->ah_attr.grh.traffic_class = (params.tclass_sq_psn &
1419 OCRDMA_QP_PARAMS_SQ_PSN_MASK) >> 1419 OCRDMA_QP_PARAMS_TCLASS_MASK) >>
1420 OCRDMA_QP_PARAMS_TCLASS_SHIFT; 1420 OCRDMA_QP_PARAMS_TCLASS_SHIFT;
1421 1421
1422 qp_attr->ah_attr.ah_flags = IB_AH_GRH; 1422 qp_attr->ah_attr.ah_flags = IB_AH_GRH;
diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
index 5bfc02f450e6..d1bd21319d7d 100644
--- a/drivers/infiniband/hw/qib/qib_iba7322.c
+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
@@ -2395,6 +2395,11 @@ static int qib_7322_bringup_serdes(struct qib_pportdata *ppd)
2395 qib_write_kreg_port(ppd, krp_ibcctrl_a, ppd->cpspec->ibcctrl_a); 2395 qib_write_kreg_port(ppd, krp_ibcctrl_a, ppd->cpspec->ibcctrl_a);
2396 qib_write_kreg(dd, kr_scratch, 0ULL); 2396 qib_write_kreg(dd, kr_scratch, 0ULL);
2397 2397
2398 /* ensure previous Tx parameters are not still forced */
2399 qib_write_kreg_port(ppd, krp_tx_deemph_override,
2400 SYM_MASK(IBSD_TX_DEEMPHASIS_OVERRIDE_0,
2401 reset_tx_deemphasis_override));
2402
2398 if (qib_compat_ddr_negotiate) { 2403 if (qib_compat_ddr_negotiate) {
2399 ppd->cpspec->ibdeltainprog = 1; 2404 ppd->cpspec->ibdeltainprog = 1;
2400 ppd->cpspec->ibsymsnap = read_7322_creg32_port(ppd, 2405 ppd->cpspec->ibsymsnap = read_7322_creg32_port(ppd,
diff --git a/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c b/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
index 7ecc6061f1f4..f8dfd76be89f 100644
--- a/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
+++ b/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
@@ -629,6 +629,7 @@ static int qp_grp_id_from_flow(struct usnic_ib_qp_grp_flow *qp_flow,
629{ 629{
630 enum usnic_transport_type trans_type = qp_flow->trans_type; 630 enum usnic_transport_type trans_type = qp_flow->trans_type;
631 int err; 631 int err;
632 uint16_t port_num = 0;
632 633
633 switch (trans_type) { 634 switch (trans_type) {
634 case USNIC_TRANSPORT_ROCE_CUSTOM: 635 case USNIC_TRANSPORT_ROCE_CUSTOM:
@@ -637,9 +638,15 @@ static int qp_grp_id_from_flow(struct usnic_ib_qp_grp_flow *qp_flow,
637 case USNIC_TRANSPORT_IPV4_UDP: 638 case USNIC_TRANSPORT_IPV4_UDP:
638 err = usnic_transport_sock_get_addr(qp_flow->udp.sock, 639 err = usnic_transport_sock_get_addr(qp_flow->udp.sock,
639 NULL, NULL, 640 NULL, NULL,
640 (uint16_t *) id); 641 &port_num);
641 if (err) 642 if (err)
642 return err; 643 return err;
644 /*
645 * Copy port_num to stack first and then to *id,
646 * so that the short to int cast works for little
647 * and big endian systems.
648 */
649 *id = port_num;
643 break; 650 break;
644 default: 651 default:
645 usnic_err("Unsupported transport %u\n", trans_type); 652 usnic_err("Unsupported transport %u\n", trans_type);
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index 538822684d5b..334f34b1cd46 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -610,11 +610,12 @@ void iser_snd_completion(struct iser_tx_desc *tx_desc,
610 ib_dma_unmap_single(device->ib_device, tx_desc->dma_addr, 610 ib_dma_unmap_single(device->ib_device, tx_desc->dma_addr,
611 ISER_HEADERS_LEN, DMA_TO_DEVICE); 611 ISER_HEADERS_LEN, DMA_TO_DEVICE);
612 kmem_cache_free(ig.desc_cache, tx_desc); 612 kmem_cache_free(ig.desc_cache, tx_desc);
613 tx_desc = NULL;
613 } 614 }
614 615
615 atomic_dec(&ib_conn->post_send_buf_count); 616 atomic_dec(&ib_conn->post_send_buf_count);
616 617
617 if (tx_desc->type == ISCSI_TX_CONTROL) { 618 if (tx_desc && tx_desc->type == ISCSI_TX_CONTROL) {
618 /* this arithmetic is legal by libiscsi dd_data allocation */ 619 /* this arithmetic is legal by libiscsi dd_data allocation */
619 task = (void *) ((long)(void *)tx_desc - 620 task = (void *) ((long)(void *)tx_desc -
620 sizeof(struct iscsi_task)); 621 sizeof(struct iscsi_task));
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index afe95674008b..ca37edef2791 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -652,9 +652,13 @@ static int iser_disconnected_handler(struct rdma_cm_id *cma_id)
652 /* getting here when the state is UP means that the conn is being * 652 /* getting here when the state is UP means that the conn is being *
653 * terminated asynchronously from the iSCSI layer's perspective. */ 653 * terminated asynchronously from the iSCSI layer's perspective. */
654 if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP, 654 if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP,
655 ISER_CONN_TERMINATING)) 655 ISER_CONN_TERMINATING)){
656 iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn, 656 if (ib_conn->iser_conn)
657 ISCSI_ERR_CONN_FAILED); 657 iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn,
658 ISCSI_ERR_CONN_FAILED);
659 else
660 iser_err("iscsi_iser connection isn't bound\n");
661 }
658 662
659 /* Complete the termination process if no posts are pending */ 663 /* Complete the termination process if no posts are pending */
660 if (ib_conn->post_recv_buf_count == 0 && 664 if (ib_conn->post_recv_buf_count == 0 &&
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 2b161be3c1a3..d18d08a076e8 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -453,6 +453,7 @@ isert_conn_create_fastreg_pool(struct isert_conn *isert_conn)
453 if (ret) { 453 if (ret) {
454 pr_err("Failed to create fastreg descriptor err=%d\n", 454 pr_err("Failed to create fastreg descriptor err=%d\n",
455 ret); 455 ret);
456 kfree(fr_desc);
456 goto err; 457 goto err;
457 } 458 }
458 459
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 520a7e5a490b..0e537d8d0e47 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -3666,9 +3666,9 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rdma_size(
3666 unsigned long val; 3666 unsigned long val;
3667 int ret; 3667 int ret;
3668 3668
3669 ret = strict_strtoul(page, 0, &val); 3669 ret = kstrtoul(page, 0, &val);
3670 if (ret < 0) { 3670 if (ret < 0) {
3671 pr_err("strict_strtoul() failed with ret: %d\n", ret); 3671 pr_err("kstrtoul() failed with ret: %d\n", ret);
3672 return -EINVAL; 3672 return -EINVAL;
3673 } 3673 }
3674 if (val > MAX_SRPT_RDMA_SIZE) { 3674 if (val > MAX_SRPT_RDMA_SIZE) {
@@ -3706,9 +3706,9 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rsp_size(
3706 unsigned long val; 3706 unsigned long val;
3707 int ret; 3707 int ret;
3708 3708
3709 ret = strict_strtoul(page, 0, &val); 3709 ret = kstrtoul(page, 0, &val);
3710 if (ret < 0) { 3710 if (ret < 0) {
3711 pr_err("strict_strtoul() failed with ret: %d\n", ret); 3711 pr_err("kstrtoul() failed with ret: %d\n", ret);
3712 return -EINVAL; 3712 return -EINVAL;
3713 } 3713 }
3714 if (val > MAX_SRPT_RSP_SIZE) { 3714 if (val > MAX_SRPT_RSP_SIZE) {
@@ -3746,9 +3746,9 @@ static ssize_t srpt_tpg_attrib_store_srp_sq_size(
3746 unsigned long val; 3746 unsigned long val;
3747 int ret; 3747 int ret;
3748 3748
3749 ret = strict_strtoul(page, 0, &val); 3749 ret = kstrtoul(page, 0, &val);
3750 if (ret < 0) { 3750 if (ret < 0) {
3751 pr_err("strict_strtoul() failed with ret: %d\n", ret); 3751 pr_err("kstrtoul() failed with ret: %d\n", ret);
3752 return -EINVAL; 3752 return -EINVAL;
3753 } 3753 }
3754 if (val > MAX_SRPT_SRQ_SIZE) { 3754 if (val > MAX_SRPT_SRQ_SIZE) {
@@ -3793,7 +3793,7 @@ static ssize_t srpt_tpg_store_enable(
3793 unsigned long tmp; 3793 unsigned long tmp;
3794 int ret; 3794 int ret;
3795 3795
3796 ret = strict_strtoul(page, 0, &tmp); 3796 ret = kstrtoul(page, 0, &tmp);
3797 if (ret < 0) { 3797 if (ret < 0) {
3798 printk(KERN_ERR "Unable to extract srpt_tpg_store_enable\n"); 3798 printk(KERN_ERR "Unable to extract srpt_tpg_store_enable\n");
3799 return -EINVAL; 3799 return -EINVAL;
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c
index 17ccba88d636..ed8e5e8449d3 100644
--- a/drivers/input/misc/ixp4xx-beeper.c
+++ b/drivers/input/misc/ixp4xx-beeper.c
@@ -67,7 +67,7 @@ static int ixp4xx_spkr_event(struct input_dev *dev, unsigned int type, unsigned
67 } 67 }
68 68
69 if (value > 20 && value < 32767) 69 if (value > 20 && value < 32767)
70 count = (IXP4XX_TIMER_FREQ / (value * 4)) - 1; 70 count = (ixp4xx_timer_freq / (value * 4)) - 1;
71 71
72 ixp4xx_spkr_control(pin, count); 72 ixp4xx_spkr_control(pin, count);
73 73
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index 86b484cb3ec2..5194afb39e78 100644
--- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_SIRF_IRQ) += irq-sirfsoc.o
21obj-$(CONFIG_RENESAS_INTC_IRQPIN) += irq-renesas-intc-irqpin.o 21obj-$(CONFIG_RENESAS_INTC_IRQPIN) += irq-renesas-intc-irqpin.o
22obj-$(CONFIG_RENESAS_IRQC) += irq-renesas-irqc.o 22obj-$(CONFIG_RENESAS_IRQC) += irq-renesas-irqc.o
23obj-$(CONFIG_VERSATILE_FPGA_IRQ) += irq-versatile-fpga.o 23obj-$(CONFIG_VERSATILE_FPGA_IRQ) += irq-versatile-fpga.o
24obj-$(CONFIG_ARCH_NSPIRE) += irq-zevio.o
24obj-$(CONFIG_ARCH_VT8500) += irq-vt8500.o 25obj-$(CONFIG_ARCH_VT8500) += irq-vt8500.o
25obj-$(CONFIG_TB10X_IRQC) += irq-tb10x.o 26obj-$(CONFIG_TB10X_IRQC) += irq-tb10x.o
26obj-$(CONFIG_XTENSA) += irq-xtensa-pic.o 27obj-$(CONFIG_XTENSA) += irq-xtensa-pic.o
diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
index 9300bc32784e..540956465ed2 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -381,7 +381,7 @@ armada_370_xp_handle_irq(struct pt_regs *regs)
381 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS) 381 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS)
382 & PCI_MSI_DOORBELL_MASK; 382 & PCI_MSI_DOORBELL_MASK;
383 383
384 writel(~PCI_MSI_DOORBELL_MASK, per_cpu_int_base + 384 writel(~msimask, per_cpu_int_base +
385 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); 385 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
386 386
387 for (msinr = PCI_MSI_DOORBELL_START; 387 for (msinr = PCI_MSI_DOORBELL_START;
@@ -407,7 +407,7 @@ armada_370_xp_handle_irq(struct pt_regs *regs)
407 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS) 407 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS)
408 & IPI_DOORBELL_MASK; 408 & IPI_DOORBELL_MASK;
409 409
410 writel(~IPI_DOORBELL_MASK, per_cpu_int_base + 410 writel(~ipimask, per_cpu_int_base +
411 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); 411 ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
412 412
413 /* Handle all pending doorbells */ 413 /* Handle all pending doorbells */
diff --git a/drivers/irqchip/irq-zevio.c b/drivers/irqchip/irq-zevio.c
new file mode 100644
index 000000000000..8ed04c4a43ee
--- /dev/null
+++ b/drivers/irqchip/irq-zevio.c
@@ -0,0 +1,127 @@
1/*
2 * linux/drivers/irqchip/irq-zevio.c
3 *
4 * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2, as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#include <linux/io.h>
13#include <linux/irq.h>
14#include <linux/of.h>
15#include <linux/of_address.h>
16#include <linux/of_irq.h>
17
18#include <asm/mach/irq.h>
19#include <asm/exception.h>
20
21#include "irqchip.h"
22
23#define IO_STATUS 0x000
24#define IO_RAW_STATUS 0x004
25#define IO_ENABLE 0x008
26#define IO_DISABLE 0x00C
27#define IO_CURRENT 0x020
28#define IO_RESET 0x028
29#define IO_MAX_PRIOTY 0x02C
30
31#define IO_IRQ_BASE 0x000
32#define IO_FIQ_BASE 0x100
33
34#define IO_INVERT_SEL 0x200
35#define IO_STICKY_SEL 0x204
36#define IO_PRIORITY_SEL 0x300
37
38#define MAX_INTRS 32
39#define FIQ_START MAX_INTRS
40
41static struct irq_domain *zevio_irq_domain;
42static void __iomem *zevio_irq_io;
43
44static void zevio_irq_ack(struct irq_data *irqd)
45{
46 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(irqd);
47 struct irq_chip_regs *regs =
48 &container_of(irqd->chip, struct irq_chip_type, chip)->regs;
49
50 readl(gc->reg_base + regs->ack);
51}
52
53static asmlinkage void __exception_irq_entry zevio_handle_irq(struct pt_regs *regs)
54{
55 int irqnr;
56
57 while (readl(zevio_irq_io + IO_STATUS)) {
58 irqnr = readl(zevio_irq_io + IO_CURRENT);
59 irqnr = irq_find_mapping(zevio_irq_domain, irqnr);
60 handle_IRQ(irqnr, regs);
61 };
62}
63
64static void __init zevio_init_irq_base(void __iomem *base)
65{
66 /* Disable all interrupts */
67 writel(~0, base + IO_DISABLE);
68
69 /* Accept interrupts of all priorities */
70 writel(0xF, base + IO_MAX_PRIOTY);
71
72 /* Reset existing interrupts */
73 readl(base + IO_RESET);
74}
75
76static int __init zevio_of_init(struct device_node *node,
77 struct device_node *parent)
78{
79 unsigned int clr = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN;
80 struct irq_chip_generic *gc;
81 int ret;
82
83 if (WARN_ON(zevio_irq_io || zevio_irq_domain))
84 return -EBUSY;
85
86 zevio_irq_io = of_iomap(node, 0);
87 BUG_ON(!zevio_irq_io);
88
89 /* Do not invert interrupt status bits */
90 writel(~0, zevio_irq_io + IO_INVERT_SEL);
91
92 /* Disable sticky interrupts */
93 writel(0, zevio_irq_io + IO_STICKY_SEL);
94
95 /* We don't use IRQ priorities. Set each IRQ to highest priority. */
96 memset_io(zevio_irq_io + IO_PRIORITY_SEL, 0, MAX_INTRS * sizeof(u32));
97
98 /* Init IRQ and FIQ */
99 zevio_init_irq_base(zevio_irq_io + IO_IRQ_BASE);
100 zevio_init_irq_base(zevio_irq_io + IO_FIQ_BASE);
101
102 zevio_irq_domain = irq_domain_add_linear(node, MAX_INTRS,
103 &irq_generic_chip_ops, NULL);
104 BUG_ON(!zevio_irq_domain);
105
106 ret = irq_alloc_domain_generic_chips(zevio_irq_domain, MAX_INTRS, 1,
107 "zevio_intc", handle_level_irq,
108 clr, 0, IRQ_GC_INIT_MASK_CACHE);
109 BUG_ON(ret);
110
111 gc = irq_get_domain_generic_chip(zevio_irq_domain, 0);
112 gc->reg_base = zevio_irq_io;
113 gc->chip_types[0].chip.irq_ack = zevio_irq_ack;
114 gc->chip_types[0].chip.irq_mask = irq_gc_mask_disable_reg;
115 gc->chip_types[0].chip.irq_unmask = irq_gc_unmask_enable_reg;
116 gc->chip_types[0].regs.mask = IO_IRQ_BASE + IO_ENABLE;
117 gc->chip_types[0].regs.enable = IO_IRQ_BASE + IO_ENABLE;
118 gc->chip_types[0].regs.disable = IO_IRQ_BASE + IO_DISABLE;
119 gc->chip_types[0].regs.ack = IO_IRQ_BASE + IO_RESET;
120
121 set_handle_irq(zevio_handle_irq);
122
123 pr_info("TI-NSPIRE classic IRQ controller\n");
124 return 0;
125}
126
127IRQCHIP_DECLARE(zevio_irq, "lsi,zevio-intc", zevio_of_init);
diff --git a/drivers/isdn/hisax/q931.c b/drivers/isdn/hisax/q931.c
index af1b020a81f1..b420f8bd862e 100644
--- a/drivers/isdn/hisax/q931.c
+++ b/drivers/isdn/hisax/q931.c
@@ -810,7 +810,7 @@ prfeatureind(char *dest, u_char *p)
810 dp += sprintf(dp, " octet 3 "); 810 dp += sprintf(dp, " octet 3 ");
811 dp += prbits(dp, *p, 8, 8); 811 dp += prbits(dp, *p, 8, 8);
812 *dp++ = '\n'; 812 *dp++ = '\n';
813 if (!(*p++ & 80)) { 813 if (!(*p++ & 0x80)) {
814 dp += sprintf(dp, " octet 4 "); 814 dp += sprintf(dp, " octet 4 ");
815 dp += prbits(dp, *p++, 8, 8); 815 dp += prbits(dp, *p++, 8, 8);
816 *dp++ = '\n'; 816 *dp++ = '\n';
diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
index 0c707e4f4eaf..a4c7306ff43d 100644
--- a/drivers/md/bcache/bcache.h
+++ b/drivers/md/bcache/bcache.h
@@ -210,7 +210,9 @@ BITMASK(GC_MARK, struct bucket, gc_mark, 0, 2);
210#define GC_MARK_RECLAIMABLE 0 210#define GC_MARK_RECLAIMABLE 0
211#define GC_MARK_DIRTY 1 211#define GC_MARK_DIRTY 1
212#define GC_MARK_METADATA 2 212#define GC_MARK_METADATA 2
213BITMASK(GC_SECTORS_USED, struct bucket, gc_mark, 2, 13); 213#define GC_SECTORS_USED_SIZE 13
214#define MAX_GC_SECTORS_USED (~(~0ULL << GC_SECTORS_USED_SIZE))
215BITMASK(GC_SECTORS_USED, struct bucket, gc_mark, 2, GC_SECTORS_USED_SIZE);
214BITMASK(GC_MOVE, struct bucket, gc_mark, 15, 1); 216BITMASK(GC_MOVE, struct bucket, gc_mark, 15, 1);
215 217
216#include "journal.h" 218#include "journal.h"
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 4f6b5940e609..3f74b4b0747b 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -23,7 +23,7 @@ void bch_dump_bset(struct btree_keys *b, struct bset *i, unsigned set)
23 for (k = i->start; k < bset_bkey_last(i); k = next) { 23 for (k = i->start; k < bset_bkey_last(i); k = next) {
24 next = bkey_next(k); 24 next = bkey_next(k);
25 25
26 printk(KERN_ERR "block %u key %zi/%u: ", set, 26 printk(KERN_ERR "block %u key %li/%u: ", set,
27 (uint64_t *) k - i->d, i->keys); 27 (uint64_t *) k - i->d, i->keys);
28 28
29 if (b->ops->key_dump) 29 if (b->ops->key_dump)
@@ -1185,9 +1185,12 @@ static void __btree_sort(struct btree_keys *b, struct btree_iter *iter,
1185 struct bset *out = (void *) __get_free_pages(__GFP_NOWARN|GFP_NOIO, 1185 struct bset *out = (void *) __get_free_pages(__GFP_NOWARN|GFP_NOIO,
1186 order); 1186 order);
1187 if (!out) { 1187 if (!out) {
1188 struct page *outp;
1189
1188 BUG_ON(order > state->page_order); 1190 BUG_ON(order > state->page_order);
1189 1191
1190 out = page_address(mempool_alloc(state->pool, GFP_NOIO)); 1192 outp = mempool_alloc(state->pool, GFP_NOIO);
1193 out = page_address(outp);
1191 used_mempool = true; 1194 used_mempool = true;
1192 order = state->page_order; 1195 order = state->page_order;
1193 } 1196 }
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 98cc0a810a36..5f9c2a665ca5 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -1167,7 +1167,7 @@ uint8_t __bch_btree_mark_key(struct cache_set *c, int level, struct bkey *k)
1167 /* guard against overflow */ 1167 /* guard against overflow */
1168 SET_GC_SECTORS_USED(g, min_t(unsigned, 1168 SET_GC_SECTORS_USED(g, min_t(unsigned,
1169 GC_SECTORS_USED(g) + KEY_SIZE(k), 1169 GC_SECTORS_USED(g) + KEY_SIZE(k),
1170 (1 << 14) - 1)); 1170 MAX_GC_SECTORS_USED));
1171 1171
1172 BUG_ON(!GC_SECTORS_USED(g)); 1172 BUG_ON(!GC_SECTORS_USED(g));
1173 } 1173 }
@@ -1805,7 +1805,7 @@ static bool btree_insert_key(struct btree *b, struct bkey *k,
1805 1805
1806static size_t insert_u64s_remaining(struct btree *b) 1806static size_t insert_u64s_remaining(struct btree *b)
1807{ 1807{
1808 ssize_t ret = bch_btree_keys_u64s_remaining(&b->keys); 1808 long ret = bch_btree_keys_u64s_remaining(&b->keys);
1809 1809
1810 /* 1810 /*
1811 * Might land in the middle of an existing extent and have to split it 1811 * Might land in the middle of an existing extent and have to split it
diff --git a/drivers/md/bcache/extents.c b/drivers/md/bcache/extents.c
index c3ead586dc27..416d1a3e028e 100644
--- a/drivers/md/bcache/extents.c
+++ b/drivers/md/bcache/extents.c
@@ -194,7 +194,7 @@ err:
194 mutex_unlock(&b->c->bucket_lock); 194 mutex_unlock(&b->c->bucket_lock);
195 bch_extent_to_text(buf, sizeof(buf), k); 195 bch_extent_to_text(buf, sizeof(buf), k);
196 btree_bug(b, 196 btree_bug(b,
197"inconsistent btree pointer %s: bucket %li pin %i prio %i gen %i last_gc %i mark %llu gc_gen %i", 197"inconsistent btree pointer %s: bucket %zi pin %i prio %i gen %i last_gc %i mark %llu gc_gen %i",
198 buf, PTR_BUCKET_NR(b->c, k, i), atomic_read(&g->pin), 198 buf, PTR_BUCKET_NR(b->c, k, i), atomic_read(&g->pin),
199 g->prio, g->gen, g->last_gc, GC_MARK(g), g->gc_gen); 199 g->prio, g->gen, g->last_gc, GC_MARK(g), g->gc_gen);
200 return true; 200 return true;
diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
index 72cd213f213f..5d5d031cf381 100644
--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -353,14 +353,14 @@ static void bch_data_insert_start(struct closure *cl)
353 struct data_insert_op *op = container_of(cl, struct data_insert_op, cl); 353 struct data_insert_op *op = container_of(cl, struct data_insert_op, cl);
354 struct bio *bio = op->bio, *n; 354 struct bio *bio = op->bio, *n;
355 355
356 if (op->bypass)
357 return bch_data_invalidate(cl);
358
359 if (atomic_sub_return(bio_sectors(bio), &op->c->sectors_to_gc) < 0) { 356 if (atomic_sub_return(bio_sectors(bio), &op->c->sectors_to_gc) < 0) {
360 set_gc_sectors(op->c); 357 set_gc_sectors(op->c);
361 wake_up_gc(op->c); 358 wake_up_gc(op->c);
362 } 359 }
363 360
361 if (op->bypass)
362 return bch_data_invalidate(cl);
363
364 /* 364 /*
365 * Journal writes are marked REQ_FLUSH; if the original write was a 365 * Journal writes are marked REQ_FLUSH; if the original write was a
366 * flush, it'll wait on the journal write. 366 * flush, it'll wait on the journal write.
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index c6ab69333a6d..d8458d477a12 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -416,7 +416,7 @@ static int btree_bset_stats(struct btree_op *b_op, struct btree *b)
416 return MAP_CONTINUE; 416 return MAP_CONTINUE;
417} 417}
418 418
419int bch_bset_print_stats(struct cache_set *c, char *buf) 419static int bch_bset_print_stats(struct cache_set *c, char *buf)
420{ 420{
421 struct bset_stats_op op; 421 struct bset_stats_op op;
422 int ret; 422 int ret;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index fd3a2a14b587..4a6ca1cb2e78 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -1953,11 +1953,15 @@ static int process_checks(struct r1bio *r1_bio)
1953 for (i = 0; i < conf->raid_disks * 2; i++) { 1953 for (i = 0; i < conf->raid_disks * 2; i++) {
1954 int j; 1954 int j;
1955 int size; 1955 int size;
1956 int uptodate;
1956 struct bio *b = r1_bio->bios[i]; 1957 struct bio *b = r1_bio->bios[i];
1957 if (b->bi_end_io != end_sync_read) 1958 if (b->bi_end_io != end_sync_read)
1958 continue; 1959 continue;
1959 /* fixup the bio for reuse */ 1960 /* fixup the bio for reuse, but preserve BIO_UPTODATE */
1961 uptodate = test_bit(BIO_UPTODATE, &b->bi_flags);
1960 bio_reset(b); 1962 bio_reset(b);
1963 if (!uptodate)
1964 clear_bit(BIO_UPTODATE, &b->bi_flags);
1961 b->bi_vcnt = vcnt; 1965 b->bi_vcnt = vcnt;
1962 b->bi_iter.bi_size = r1_bio->sectors << 9; 1966 b->bi_iter.bi_size = r1_bio->sectors << 9;
1963 b->bi_iter.bi_sector = r1_bio->sector + 1967 b->bi_iter.bi_sector = r1_bio->sector +
@@ -1990,11 +1994,14 @@ static int process_checks(struct r1bio *r1_bio)
1990 int j; 1994 int j;
1991 struct bio *pbio = r1_bio->bios[primary]; 1995 struct bio *pbio = r1_bio->bios[primary];
1992 struct bio *sbio = r1_bio->bios[i]; 1996 struct bio *sbio = r1_bio->bios[i];
1997 int uptodate = test_bit(BIO_UPTODATE, &sbio->bi_flags);
1993 1998
1994 if (sbio->bi_end_io != end_sync_read) 1999 if (sbio->bi_end_io != end_sync_read)
1995 continue; 2000 continue;
2001 /* Now we can 'fixup' the BIO_UPTODATE flag */
2002 set_bit(BIO_UPTODATE, &sbio->bi_flags);
1996 2003
1997 if (test_bit(BIO_UPTODATE, &sbio->bi_flags)) { 2004 if (uptodate) {
1998 for (j = vcnt; j-- ; ) { 2005 for (j = vcnt; j-- ; ) {
1999 struct page *p, *s; 2006 struct page *p, *s;
2000 p = pbio->bi_io_vec[j].bv_page; 2007 p = pbio->bi_io_vec[j].bv_page;
@@ -2009,7 +2016,7 @@ static int process_checks(struct r1bio *r1_bio)
2009 if (j >= 0) 2016 if (j >= 0)
2010 atomic64_add(r1_bio->sectors, &mddev->resync_mismatches); 2017 atomic64_add(r1_bio->sectors, &mddev->resync_mismatches);
2011 if (j < 0 || (test_bit(MD_RECOVERY_CHECK, &mddev->recovery) 2018 if (j < 0 || (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)
2012 && test_bit(BIO_UPTODATE, &sbio->bi_flags))) { 2019 && uptodate)) {
2013 /* No need to write to this device. */ 2020 /* No need to write to this device. */
2014 sbio->bi_end_io = NULL; 2021 sbio->bi_end_io = NULL;
2015 rdev_dec_pending(conf->mirrors[i].rdev, mddev); 2022 rdev_dec_pending(conf->mirrors[i].rdev, mddev);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index f1feadeb7bb2..16f5c21963db 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5514,23 +5514,43 @@ raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks)
5514 return sectors * (raid_disks - conf->max_degraded); 5514 return sectors * (raid_disks - conf->max_degraded);
5515} 5515}
5516 5516
5517static void free_scratch_buffer(struct r5conf *conf, struct raid5_percpu *percpu)
5518{
5519 safe_put_page(percpu->spare_page);
5520 kfree(percpu->scribble);
5521 percpu->spare_page = NULL;
5522 percpu->scribble = NULL;
5523}
5524
5525static int alloc_scratch_buffer(struct r5conf *conf, struct raid5_percpu *percpu)
5526{
5527 if (conf->level == 6 && !percpu->spare_page)
5528 percpu->spare_page = alloc_page(GFP_KERNEL);
5529 if (!percpu->scribble)
5530 percpu->scribble = kmalloc(conf->scribble_len, GFP_KERNEL);
5531
5532 if (!percpu->scribble || (conf->level == 6 && !percpu->spare_page)) {
5533 free_scratch_buffer(conf, percpu);
5534 return -ENOMEM;
5535 }
5536
5537 return 0;
5538}
5539
5517static void raid5_free_percpu(struct r5conf *conf) 5540static void raid5_free_percpu(struct r5conf *conf)
5518{ 5541{
5519 struct raid5_percpu *percpu;
5520 unsigned long cpu; 5542 unsigned long cpu;
5521 5543
5522 if (!conf->percpu) 5544 if (!conf->percpu)
5523 return; 5545 return;
5524 5546
5525 get_online_cpus();
5526 for_each_possible_cpu(cpu) {
5527 percpu = per_cpu_ptr(conf->percpu, cpu);
5528 safe_put_page(percpu->spare_page);
5529 kfree(percpu->scribble);
5530 }
5531#ifdef CONFIG_HOTPLUG_CPU 5547#ifdef CONFIG_HOTPLUG_CPU
5532 unregister_cpu_notifier(&conf->cpu_notify); 5548 unregister_cpu_notifier(&conf->cpu_notify);
5533#endif 5549#endif
5550
5551 get_online_cpus();
5552 for_each_possible_cpu(cpu)
5553 free_scratch_buffer(conf, per_cpu_ptr(conf->percpu, cpu));
5534 put_online_cpus(); 5554 put_online_cpus();
5535 5555
5536 free_percpu(conf->percpu); 5556 free_percpu(conf->percpu);
@@ -5557,15 +5577,7 @@ static int raid456_cpu_notify(struct notifier_block *nfb, unsigned long action,
5557 switch (action) { 5577 switch (action) {
5558 case CPU_UP_PREPARE: 5578 case CPU_UP_PREPARE:
5559 case CPU_UP_PREPARE_FROZEN: 5579 case CPU_UP_PREPARE_FROZEN:
5560 if (conf->level == 6 && !percpu->spare_page) 5580 if (alloc_scratch_buffer(conf, percpu)) {
5561 percpu->spare_page = alloc_page(GFP_KERNEL);
5562 if (!percpu->scribble)
5563 percpu->scribble = kmalloc(conf->scribble_len, GFP_KERNEL);
5564
5565 if (!percpu->scribble ||
5566 (conf->level == 6 && !percpu->spare_page)) {
5567 safe_put_page(percpu->spare_page);
5568 kfree(percpu->scribble);
5569 pr_err("%s: failed memory allocation for cpu%ld\n", 5581 pr_err("%s: failed memory allocation for cpu%ld\n",
5570 __func__, cpu); 5582 __func__, cpu);
5571 return notifier_from_errno(-ENOMEM); 5583 return notifier_from_errno(-ENOMEM);
@@ -5573,10 +5585,7 @@ static int raid456_cpu_notify(struct notifier_block *nfb, unsigned long action,
5573 break; 5585 break;
5574 case CPU_DEAD: 5586 case CPU_DEAD:
5575 case CPU_DEAD_FROZEN: 5587 case CPU_DEAD_FROZEN:
5576 safe_put_page(percpu->spare_page); 5588 free_scratch_buffer(conf, per_cpu_ptr(conf->percpu, cpu));
5577 kfree(percpu->scribble);
5578 percpu->spare_page = NULL;
5579 percpu->scribble = NULL;
5580 break; 5589 break;
5581 default: 5590 default:
5582 break; 5591 break;
@@ -5588,40 +5597,29 @@ static int raid456_cpu_notify(struct notifier_block *nfb, unsigned long action,
5588static int raid5_alloc_percpu(struct r5conf *conf) 5597static int raid5_alloc_percpu(struct r5conf *conf)
5589{ 5598{
5590 unsigned long cpu; 5599 unsigned long cpu;
5591 struct page *spare_page; 5600 int err = 0;
5592 struct raid5_percpu __percpu *allcpus;
5593 void *scribble;
5594 int err;
5595 5601
5596 allcpus = alloc_percpu(struct raid5_percpu); 5602 conf->percpu = alloc_percpu(struct raid5_percpu);
5597 if (!allcpus) 5603 if (!conf->percpu)
5598 return -ENOMEM; 5604 return -ENOMEM;
5599 conf->percpu = allcpus; 5605
5606#ifdef CONFIG_HOTPLUG_CPU
5607 conf->cpu_notify.notifier_call = raid456_cpu_notify;
5608 conf->cpu_notify.priority = 0;
5609 err = register_cpu_notifier(&conf->cpu_notify);
5610 if (err)
5611 return err;
5612#endif
5600 5613
5601 get_online_cpus(); 5614 get_online_cpus();
5602 err = 0;
5603 for_each_present_cpu(cpu) { 5615 for_each_present_cpu(cpu) {
5604 if (conf->level == 6) { 5616 err = alloc_scratch_buffer(conf, per_cpu_ptr(conf->percpu, cpu));
5605 spare_page = alloc_page(GFP_KERNEL); 5617 if (err) {
5606 if (!spare_page) { 5618 pr_err("%s: failed memory allocation for cpu%ld\n",
5607 err = -ENOMEM; 5619 __func__, cpu);
5608 break;
5609 }
5610 per_cpu_ptr(conf->percpu, cpu)->spare_page = spare_page;
5611 }
5612 scribble = kmalloc(conf->scribble_len, GFP_KERNEL);
5613 if (!scribble) {
5614 err = -ENOMEM;
5615 break; 5620 break;
5616 } 5621 }
5617 per_cpu_ptr(conf->percpu, cpu)->scribble = scribble;
5618 } 5622 }
5619#ifdef CONFIG_HOTPLUG_CPU
5620 conf->cpu_notify.notifier_call = raid456_cpu_notify;
5621 conf->cpu_notify.priority = 0;
5622 if (err == 0)
5623 err = register_cpu_notifier(&conf->cpu_notify);
5624#endif
5625 put_online_cpus(); 5623 put_online_cpus();
5626 5624
5627 return err; 5625 return err;
diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c
index 68f768a5422d..a6c3c9e2e897 100644
--- a/drivers/media/dvb-frontends/cx24117.c
+++ b/drivers/media/dvb-frontends/cx24117.c
@@ -1176,7 +1176,7 @@ struct dvb_frontend *cx24117_attach(const struct cx24117_config *config,
1176 1176
1177 switch (demod) { 1177 switch (demod) {
1178 case 0: 1178 case 0:
1179 dev_err(&state->priv->i2c->dev, 1179 dev_err(&i2c->dev,
1180 "%s: Error attaching frontend %d\n", 1180 "%s: Error attaching frontend %d\n",
1181 KBUILD_MODNAME, demod); 1181 KBUILD_MODNAME, demod);
1182 goto error1; 1182 goto error1;
@@ -1200,12 +1200,6 @@ struct dvb_frontend *cx24117_attach(const struct cx24117_config *config,
1200 state->demod = demod - 1; 1200 state->demod = demod - 1;
1201 state->priv = priv; 1201 state->priv = priv;
1202 1202
1203 /* test i2c bus for ack */
1204 if (demod == 0) {
1205 if (cx24117_readreg(state, 0x00) < 0)
1206 goto error3;
1207 }
1208
1209 dev_info(&state->priv->i2c->dev, 1203 dev_info(&state->priv->i2c->dev,
1210 "%s: Attaching frontend %d\n", 1204 "%s: Attaching frontend %d\n",
1211 KBUILD_MODNAME, state->demod); 1205 KBUILD_MODNAME, state->demod);
@@ -1216,8 +1210,6 @@ struct dvb_frontend *cx24117_attach(const struct cx24117_config *config,
1216 state->frontend.demodulator_priv = state; 1210 state->frontend.demodulator_priv = state;
1217 return &state->frontend; 1211 return &state->frontend;
1218 1212
1219error3:
1220 kfree(state);
1221error2: 1213error2:
1222 cx24117_release_priv(priv); 1214 cx24117_release_priv(priv);
1223error1: 1215error1:
diff --git a/drivers/media/dvb-frontends/nxt200x.c b/drivers/media/dvb-frontends/nxt200x.c
index 4bf057544607..8a8e1ecb762d 100644
--- a/drivers/media/dvb-frontends/nxt200x.c
+++ b/drivers/media/dvb-frontends/nxt200x.c
@@ -2,7 +2,7 @@
2 * Support for NXT2002 and NXT2004 - VSB/QAM 2 * Support for NXT2002 and NXT2004 - VSB/QAM
3 * 3 *
4 * Copyright (C) 2005 Kirk Lapray <kirk.lapray@gmail.com> 4 * Copyright (C) 2005 Kirk Lapray <kirk.lapray@gmail.com>
5 * Copyright (C) 2006 Michael Krufky <mkrufky@m1k.net> 5 * Copyright (C) 2006-2014 Michael Krufky <mkrufky@linuxtv.org>
6 * based on nxt2002 by Taylor Jacob <rtjacob@earthlink.net> 6 * based on nxt2002 by Taylor Jacob <rtjacob@earthlink.net>
7 * and nxt2004 by Jean-Francois Thibert <jeanfrancois@sagetv.com> 7 * and nxt2004 by Jean-Francois Thibert <jeanfrancois@sagetv.com>
8 * 8 *
diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
index 1effc21e1cdd..9bbd6656fb8f 100644
--- a/drivers/media/i2c/adv7842.c
+++ b/drivers/media/i2c/adv7842.c
@@ -2554,7 +2554,7 @@ static int adv7842_core_init(struct v4l2_subdev *sd)
2554 sdp_write_and_or(sd, 0xdd, 0xf0, pdata->sdp_free_run_force | 2554 sdp_write_and_or(sd, 0xdd, 0xf0, pdata->sdp_free_run_force |
2555 (pdata->sdp_free_run_cbar_en << 1) | 2555 (pdata->sdp_free_run_cbar_en << 1) |
2556 (pdata->sdp_free_run_man_col_en << 2) | 2556 (pdata->sdp_free_run_man_col_en << 2) |
2557 (pdata->sdp_free_run_force << 3)); 2557 (pdata->sdp_free_run_auto << 3));
2558 2558
2559 /* TODO from platform data */ 2559 /* TODO from platform data */
2560 cp_write(sd, 0x69, 0x14); /* Enable CP CSC */ 2560 cp_write(sd, 0x69, 0x14); /* Enable CP CSC */
diff --git a/drivers/media/i2c/s5k5baf.c b/drivers/media/i2c/s5k5baf.c
index 4b8381111cbd..77e10e0fd8d6 100644
--- a/drivers/media/i2c/s5k5baf.c
+++ b/drivers/media/i2c/s5k5baf.c
@@ -478,25 +478,33 @@ static void s5k5baf_write_arr_seq(struct s5k5baf *state, u16 addr,
478 u16 count, const u16 *seq) 478 u16 count, const u16 *seq)
479{ 479{
480 struct i2c_client *c = v4l2_get_subdevdata(&state->sd); 480 struct i2c_client *c = v4l2_get_subdevdata(&state->sd);
481 __be16 buf[count + 1]; 481 __be16 buf[65];
482 int ret, n;
483 482
484 s5k5baf_i2c_write(state, REG_CMDWR_ADDR, addr); 483 s5k5baf_i2c_write(state, REG_CMDWR_ADDR, addr);
485 if (state->error) 484 if (state->error)
486 return; 485 return;
487 486
487 v4l2_dbg(3, debug, c, "i2c_write_seq(count=%d): %*ph\n", count,
488 min(2 * count, 64), seq);
489
488 buf[0] = __constant_cpu_to_be16(REG_CMD_BUF); 490 buf[0] = __constant_cpu_to_be16(REG_CMD_BUF);
489 for (n = 1; n <= count; ++n)
490 buf[n] = cpu_to_be16(*seq++);
491 491
492 n *= 2; 492 while (count > 0) {
493 ret = i2c_master_send(c, (char *)buf, n); 493 int n = min_t(int, count, ARRAY_SIZE(buf) - 1);
494 v4l2_dbg(3, debug, c, "i2c_write_seq(count=%d): %*ph\n", count, 494 int ret, i;
495 min(2 * count, 64), seq - count);
496 495
497 if (ret != n) { 496 for (i = 1; i <= n; ++i)
498 v4l2_err(c, "i2c_write_seq: error during transfer (%d)\n", ret); 497 buf[i] = cpu_to_be16(*seq++);
499 state->error = ret; 498
499 i *= 2;
500 ret = i2c_master_send(c, (char *)buf, i);
501 if (ret != i) {
502 v4l2_err(c, "i2c_write_seq: error during transfer (%d)\n", ret);
503 state->error = ret;
504 break;
505 }
506
507 count -= n;
500 } 508 }
501} 509}
502 510
diff --git a/drivers/media/pci/bt8xx/bttv-cards.c b/drivers/media/pci/bt8xx/bttv-cards.c
index d85cb0ace4dc..6662b495b22c 100644
--- a/drivers/media/pci/bt8xx/bttv-cards.c
+++ b/drivers/media/pci/bt8xx/bttv-cards.c
@@ -2426,7 +2426,7 @@ struct tvcard bttv_tvcards[] = {
2426 }, 2426 },
2427 /* ---- card 0x87---------------------------------- */ 2427 /* ---- card 0x87---------------------------------- */
2428 [BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE] = { 2428 [BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE] = {
2429 /* Michael Krufky <mkrufky@m1k.net> */ 2429 /* Michael Krufky <mkrufky@linuxtv.org> */
2430 .name = "DViCO FusionHDTV 5 Lite", 2430 .name = "DViCO FusionHDTV 5 Lite",
2431 .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */ 2431 .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */
2432 .tuner_addr = ADDR_UNSET, 2432 .tuner_addr = ADDR_UNSET,
diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
index 922e8233fd0b..3f364b7062b9 100644
--- a/drivers/media/pci/bt8xx/bttv-gpio.c
+++ b/drivers/media/pci/bt8xx/bttv-gpio.c
@@ -98,7 +98,7 @@ int bttv_sub_add_device(struct bttv_core *core, char *name)
98 98
99 err = device_register(&sub->dev); 99 err = device_register(&sub->dev);
100 if (0 != err) { 100 if (0 != err) {
101 kfree(sub); 101 put_device(&sub->dev);
102 return err; 102 return err;
103 } 103 }
104 pr_info("%d: add subdevice \"%s\"\n", core->nr, dev_name(&sub->dev)); 104 pr_info("%d: add subdevice \"%s\"\n", core->nr, dev_name(&sub->dev));
diff --git a/drivers/media/pci/saa7134/saa7134-cards.c b/drivers/media/pci/saa7134/saa7134-cards.c
index d45e7f6ff332..c9b2350e92c8 100644
--- a/drivers/media/pci/saa7134/saa7134-cards.c
+++ b/drivers/media/pci/saa7134/saa7134-cards.c
@@ -2590,7 +2590,7 @@ struct saa7134_board saa7134_boards[] = {
2590 }}, 2590 }},
2591 }, 2591 },
2592 [SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180] = { 2592 [SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180] = {
2593 /* Michael Krufky <mkrufky@m1k.net> 2593 /* Michael Krufky <mkrufky@linuxtv.org>
2594 * Uses Alps Electric TDHU2, containing NXT2004 ATSC Decoder 2594 * Uses Alps Electric TDHU2, containing NXT2004 ATSC Decoder
2595 * AFAIK, there is no analog demod, thus, 2595 * AFAIK, there is no analog demod, thus,
2596 * no support for analog television. 2596 * no support for analog television.
diff --git a/drivers/media/platform/exynos4-is/fimc-core.c b/drivers/media/platform/exynos4-is/fimc-core.c
index a7dfd07e8389..da2fc86cc524 100644
--- a/drivers/media/platform/exynos4-is/fimc-core.c
+++ b/drivers/media/platform/exynos4-is/fimc-core.c
@@ -1027,7 +1027,8 @@ static int fimc_probe(struct platform_device *pdev)
1027 return 0; 1027 return 0;
1028 1028
1029err_gclk: 1029err_gclk:
1030 clk_disable(fimc->clock[CLK_GATE]); 1030 if (!pm_runtime_enabled(dev))
1031 clk_disable(fimc->clock[CLK_GATE]);
1031err_sd: 1032err_sd:
1032 fimc_unregister_capture_subdev(fimc); 1033 fimc_unregister_capture_subdev(fimc);
1033err_sclk: 1034err_sclk:
@@ -1036,6 +1037,7 @@ err_sclk:
1036 return ret; 1037 return ret;
1037} 1038}
1038 1039
1040#ifdef CONFIG_PM_RUNTIME
1039static int fimc_runtime_resume(struct device *dev) 1041static int fimc_runtime_resume(struct device *dev)
1040{ 1042{
1041 struct fimc_dev *fimc = dev_get_drvdata(dev); 1043 struct fimc_dev *fimc = dev_get_drvdata(dev);
@@ -1068,6 +1070,7 @@ static int fimc_runtime_suspend(struct device *dev)
1068 dbg("fimc%d: state: 0x%lx", fimc->id, fimc->state); 1070 dbg("fimc%d: state: 0x%lx", fimc->id, fimc->state);
1069 return ret; 1071 return ret;
1070} 1072}
1073#endif
1071 1074
1072#ifdef CONFIG_PM_SLEEP 1075#ifdef CONFIG_PM_SLEEP
1073static int fimc_resume(struct device *dev) 1076static int fimc_resume(struct device *dev)
diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c
index 1234734bccf4..779ec3cd259d 100644
--- a/drivers/media/platform/exynos4-is/fimc-lite.c
+++ b/drivers/media/platform/exynos4-is/fimc-lite.c
@@ -1563,7 +1563,7 @@ static int fimc_lite_probe(struct platform_device *pdev)
1563 if (!pm_runtime_enabled(dev)) { 1563 if (!pm_runtime_enabled(dev)) {
1564 ret = clk_enable(fimc->clock); 1564 ret = clk_enable(fimc->clock);
1565 if (ret < 0) 1565 if (ret < 0)
1566 goto err_clk_put; 1566 goto err_sd;
1567 } 1567 }
1568 1568
1569 fimc->alloc_ctx = vb2_dma_contig_init_ctx(dev); 1569 fimc->alloc_ctx = vb2_dma_contig_init_ctx(dev);
@@ -1579,7 +1579,8 @@ static int fimc_lite_probe(struct platform_device *pdev)
1579 return 0; 1579 return 0;
1580 1580
1581err_clk_dis: 1581err_clk_dis:
1582 clk_disable(fimc->clock); 1582 if (!pm_runtime_enabled(dev))
1583 clk_disable(fimc->clock);
1583err_sd: 1584err_sd:
1584 fimc_lite_unregister_capture_subdev(fimc); 1585 fimc_lite_unregister_capture_subdev(fimc);
1585err_clk_put: 1586err_clk_put:
@@ -1587,6 +1588,7 @@ err_clk_put:
1587 return ret; 1588 return ret;
1588} 1589}
1589 1590
1591#ifdef CONFIG_PM_RUNTIME
1590static int fimc_lite_runtime_resume(struct device *dev) 1592static int fimc_lite_runtime_resume(struct device *dev)
1591{ 1593{
1592 struct fimc_lite *fimc = dev_get_drvdata(dev); 1594 struct fimc_lite *fimc = dev_get_drvdata(dev);
@@ -1602,6 +1604,7 @@ static int fimc_lite_runtime_suspend(struct device *dev)
1602 clk_disable(fimc->clock); 1604 clk_disable(fimc->clock);
1603 return 0; 1605 return 0;
1604} 1606}
1607#endif
1605 1608
1606#ifdef CONFIG_PM_SLEEP 1609#ifdef CONFIG_PM_SLEEP
1607static int fimc_lite_resume(struct device *dev) 1610static int fimc_lite_resume(struct device *dev)
diff --git a/drivers/media/platform/s5p-jpeg/jpeg-core.c b/drivers/media/platform/s5p-jpeg/jpeg-core.c
index a1c78c870b68..7d68d0b9966a 100644
--- a/drivers/media/platform/s5p-jpeg/jpeg-core.c
+++ b/drivers/media/platform/s5p-jpeg/jpeg-core.c
@@ -175,7 +175,7 @@ static struct s5p_jpeg_fmt sjpeg_formats[] = {
175 { 175 {
176 .name = "YUV 4:2:0 planar, Y/CbCr", 176 .name = "YUV 4:2:0 planar, Y/CbCr",
177 .fourcc = V4L2_PIX_FMT_NV12, 177 .fourcc = V4L2_PIX_FMT_NV12,
178 .depth = 16, 178 .depth = 12,
179 .colplanes = 2, 179 .colplanes = 2,
180 .h_align = 1, 180 .h_align = 1,
181 .v_align = 1, 181 .v_align = 1,
@@ -188,10 +188,10 @@ static struct s5p_jpeg_fmt sjpeg_formats[] = {
188 { 188 {
189 .name = "YUV 4:2:0 planar, Y/CbCr", 189 .name = "YUV 4:2:0 planar, Y/CbCr",
190 .fourcc = V4L2_PIX_FMT_NV12, 190 .fourcc = V4L2_PIX_FMT_NV12,
191 .depth = 16, 191 .depth = 12,
192 .colplanes = 4, 192 .colplanes = 2,
193 .h_align = 4, 193 .h_align = 4,
194 .v_align = 1, 194 .v_align = 4,
195 .flags = SJPEG_FMT_FLAG_ENC_OUTPUT | 195 .flags = SJPEG_FMT_FLAG_ENC_OUTPUT |
196 SJPEG_FMT_FLAG_DEC_CAPTURE | 196 SJPEG_FMT_FLAG_DEC_CAPTURE |
197 SJPEG_FMT_FLAG_S5P | 197 SJPEG_FMT_FLAG_S5P |
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
index 8f9b2cea88f0..8ede8ea762e6 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.c
+++ b/drivers/media/usb/dvb-usb-v2/af9035.c
@@ -1539,6 +1539,8 @@ static const struct usb_device_id af9035_id_table[] = {
1539 &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)", NULL) }, 1539 &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)", NULL) },
1540 { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a05, 1540 { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a05,
1541 &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) }, 1541 &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) },
1542 { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900,
1543 &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) },
1542 { } 1544 { }
1543}; 1545};
1544MODULE_DEVICE_TABLE(usb, af9035_id_table); 1546MODULE_DEVICE_TABLE(usb, af9035_id_table);
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
index d83df4bb72d3..0a98d04c53e4 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-demod.c - driver for the MaxLinear MXL111SF DVB-T demodulator 2 * mxl111sf-demod.c - driver for the MaxLinear MXL111SF DVB-T demodulator
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -601,7 +601,7 @@ struct dvb_frontend *mxl111sf_demod_attach(struct mxl111sf_state *mxl_state,
601EXPORT_SYMBOL_GPL(mxl111sf_demod_attach); 601EXPORT_SYMBOL_GPL(mxl111sf_demod_attach);
602 602
603MODULE_DESCRIPTION("MaxLinear MxL111SF DVB-T demodulator driver"); 603MODULE_DESCRIPTION("MaxLinear MxL111SF DVB-T demodulator driver");
604MODULE_AUTHOR("Michael Krufky <mkrufky@kernellabs.com>"); 604MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");
605MODULE_LICENSE("GPL"); 605MODULE_LICENSE("GPL");
606MODULE_VERSION("0.1"); 606MODULE_VERSION("0.1");
607 607
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.h b/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.h
index 3f3f8bfd190b..2d4530f5be54 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-demod.h - driver for the MaxLinear MXL111SF DVB-T demodulator 2 * mxl111sf-demod.h - driver for the MaxLinear MXL111SF DVB-T demodulator
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.c
index e4121cb8f5ef..a619410adde4 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-gpio.c - driver for the MaxLinear MXL111SF 2 * mxl111sf-gpio.c - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.h b/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.h
index 0220f54299a5..b85a5772d771 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-gpio.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-gpio.h - driver for the MaxLinear MXL111SF 2 * mxl111sf-gpio.h - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.c
index 34434557ef65..a101d06eb143 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-i2c.c - driver for the MaxLinear MXL111SF 2 * mxl111sf-i2c.c - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.h b/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.h
index a57a45ffb9e4..465762145ad2 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-i2c.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-i2c.h - driver for the MaxLinear MXL111SF 2 * mxl111sf-i2c.h - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.c
index b741b3a7a325..f6b348024bec 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-phy.c - driver for the MaxLinear MXL111SF 2 * mxl111sf-phy.c - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.h b/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.h
index f0756071d347..0643738de7de 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-phy.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-phy.h - driver for the MaxLinear MXL111SF 2 * mxl111sf-phy.h - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-reg.h b/drivers/media/usb/dvb-usb-v2/mxl111sf-reg.h
index 17831b0fb9db..89bf115e927e 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-reg.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-reg.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-reg.h - driver for the MaxLinear MXL111SF 2 * mxl111sf-reg.h - driver for the MaxLinear MXL111SF
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c
index 879c529640f7..a8d2c7053674 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-tuner.c - driver for the MaxLinear MXL111SF CMOS tuner 2 * mxl111sf-tuner.c - driver for the MaxLinear MXL111SF CMOS tuner
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -512,7 +512,7 @@ struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe,
512EXPORT_SYMBOL_GPL(mxl111sf_tuner_attach); 512EXPORT_SYMBOL_GPL(mxl111sf_tuner_attach);
513 513
514MODULE_DESCRIPTION("MaxLinear MxL111SF CMOS tuner driver"); 514MODULE_DESCRIPTION("MaxLinear MxL111SF CMOS tuner driver");
515MODULE_AUTHOR("Michael Krufky <mkrufky@kernellabs.com>"); 515MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");
516MODULE_LICENSE("GPL"); 516MODULE_LICENSE("GPL");
517MODULE_VERSION("0.1"); 517MODULE_VERSION("0.1");
518 518
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.h b/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.h
index 90f583e5d6a6..2046db22519e 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mxl111sf-tuner.h - driver for the MaxLinear MXL111SF CMOS tuner 2 * mxl111sf-tuner.h - driver for the MaxLinear MXL111SF CMOS tuner
3 * 3 *
4 * Copyright (C) 2010 Michael Krufky <mkrufky@kernellabs.com> 4 * Copyright (C) 2010-2014 Michael Krufky <mkrufky@linuxtv.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe,
68#else 68#else
69static inline 69static inline
70struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe, 70struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe,
71 struct mxl111sf_state *mxl_state 71 struct mxl111sf_state *mxl_state,
72 struct mxl111sf_tuner_config *cfg) 72 struct mxl111sf_tuner_config *cfg)
73{ 73{
74 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 74 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf.c b/drivers/media/usb/dvb-usb-v2/mxl111sf.c
index 08240e498451..c7304fa8ab73 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2010 Michael Krufky (mkrufky@kernellabs.com) 2 * Copyright (C) 2010-2014 Michael Krufky (mkrufky@linuxtv.org)
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free 5 * under the terms of the GNU General Public License as published by the Free
@@ -105,7 +105,7 @@ int mxl111sf_read_reg(struct mxl111sf_state *state, u8 addr, u8 *data)
105 ret = -EINVAL; 105 ret = -EINVAL;
106 } 106 }
107 107
108 pr_debug("R: (0x%02x, 0x%02x)\n", addr, *data); 108 pr_debug("R: (0x%02x, 0x%02x)\n", addr, buf[1]);
109fail: 109fail:
110 return ret; 110 return ret;
111} 111}
@@ -1421,7 +1421,7 @@ static struct usb_driver mxl111sf_usb_driver = {
1421 1421
1422module_usb_driver(mxl111sf_usb_driver); 1422module_usb_driver(mxl111sf_usb_driver);
1423 1423
1424MODULE_AUTHOR("Michael Krufky <mkrufky@kernellabs.com>"); 1424MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");
1425MODULE_DESCRIPTION("Driver for MaxLinear MxL111SF"); 1425MODULE_DESCRIPTION("Driver for MaxLinear MxL111SF");
1426MODULE_VERSION("1.0"); 1426MODULE_VERSION("1.0");
1427MODULE_LICENSE("GPL"); 1427MODULE_LICENSE("GPL");
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf.h b/drivers/media/usb/dvb-usb-v2/mxl111sf.h
index 9816de86e48c..8516c011b7cc 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf.h
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2010 Michael Krufky (mkrufky@kernellabs.com) 2 * Copyright (C) 2010-2014 Michael Krufky (mkrufky@linuxtv.org)
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free 5 * under the terms of the GNU General Public License as published by the Free
diff --git a/drivers/media/usb/hdpvr/hdpvr-core.c b/drivers/media/usb/hdpvr/hdpvr-core.c
index 2f0c89cbac76..c5638964c3f2 100644
--- a/drivers/media/usb/hdpvr/hdpvr-core.c
+++ b/drivers/media/usb/hdpvr/hdpvr-core.c
@@ -198,7 +198,6 @@ static int device_authorization(struct hdpvr_device *dev)
198 hex_dump_to_buffer(response, 8, 16, 1, print_buf, 5*buf_size+1, 0); 198 hex_dump_to_buffer(response, 8, 16, 1, print_buf, 5*buf_size+1, 0);
199 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, " response: %s\n", 199 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, " response: %s\n",
200 print_buf); 200 print_buf);
201 kfree(print_buf);
202#endif 201#endif
203 202
204 msleep(100); 203 msleep(100);
@@ -214,6 +213,9 @@ static int device_authorization(struct hdpvr_device *dev)
214 retval = ret != 8; 213 retval = ret != 8;
215unlock: 214unlock:
216 mutex_unlock(&dev->usbc_mutex); 215 mutex_unlock(&dev->usbc_mutex);
216#ifdef HDPVR_DEBUG
217 kfree(print_buf);
218#endif
217 return retval; 219 return retval;
218} 220}
219 221
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c
index ee52b9f4a944..f7902fe8a526 100644
--- a/drivers/media/v4l2-core/v4l2-dv-timings.c
+++ b/drivers/media/v4l2-core/v4l2-dv-timings.c
@@ -515,6 +515,7 @@ bool v4l2_detect_gtf(unsigned frame_height,
515 aspect.denominator = 9; 515 aspect.denominator = 9;
516 } 516 }
517 image_width = ((image_height * aspect.numerator) / aspect.denominator); 517 image_width = ((image_height * aspect.numerator) / aspect.denominator);
518 image_width = (image_width + GTF_CELL_GRAN/2) & ~(GTF_CELL_GRAN - 1);
518 519
519 /* Horizontal */ 520 /* Horizontal */
520 if (default_gtf) 521 if (default_gtf)
diff --git a/drivers/media/v4l2-core/videobuf-dma-contig.c b/drivers/media/v4l2-core/videobuf-dma-contig.c
index 65411adcd0ea..7e6b209b7002 100644
--- a/drivers/media/v4l2-core/videobuf-dma-contig.c
+++ b/drivers/media/v4l2-core/videobuf-dma-contig.c
@@ -66,14 +66,11 @@ static void __videobuf_dc_free(struct device *dev,
66static void videobuf_vm_open(struct vm_area_struct *vma) 66static void videobuf_vm_open(struct vm_area_struct *vma)
67{ 67{
68 struct videobuf_mapping *map = vma->vm_private_data; 68 struct videobuf_mapping *map = vma->vm_private_data;
69 struct videobuf_queue *q = map->q;
70 69
71 dev_dbg(q->dev, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", 70 dev_dbg(map->q->dev, "vm_open %p [count=%u,vma=%08lx-%08lx]\n",
72 map, map->count, vma->vm_start, vma->vm_end); 71 map, map->count, vma->vm_start, vma->vm_end);
73 72
74 videobuf_queue_lock(q);
75 map->count++; 73 map->count++;
76 videobuf_queue_unlock(q);
77} 74}
78 75
79static void videobuf_vm_close(struct vm_area_struct *vma) 76static void videobuf_vm_close(struct vm_area_struct *vma)
@@ -85,11 +82,12 @@ static void videobuf_vm_close(struct vm_area_struct *vma)
85 dev_dbg(q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", 82 dev_dbg(q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n",
86 map, map->count, vma->vm_start, vma->vm_end); 83 map, map->count, vma->vm_start, vma->vm_end);
87 84
88 videobuf_queue_lock(q); 85 map->count--;
89 if (!--map->count) { 86 if (0 == map->count) {
90 struct videobuf_dma_contig_memory *mem; 87 struct videobuf_dma_contig_memory *mem;
91 88
92 dev_dbg(q->dev, "munmap %p q=%p\n", map, q); 89 dev_dbg(q->dev, "munmap %p q=%p\n", map, q);
90 videobuf_queue_lock(q);
93 91
94 /* We need first to cancel streams, before unmapping */ 92 /* We need first to cancel streams, before unmapping */
95 if (q->streaming) 93 if (q->streaming)
@@ -128,8 +126,8 @@ static void videobuf_vm_close(struct vm_area_struct *vma)
128 126
129 kfree(map); 127 kfree(map);
130 128
129 videobuf_queue_unlock(q);
131 } 130 }
132 videobuf_queue_unlock(q);
133} 131}
134 132
135static const struct vm_operations_struct videobuf_vm_ops = { 133static const struct vm_operations_struct videobuf_vm_ops = {
diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c
index 9db674ccdc68..828e7c10bd70 100644
--- a/drivers/media/v4l2-core/videobuf-dma-sg.c
+++ b/drivers/media/v4l2-core/videobuf-dma-sg.c
@@ -338,14 +338,11 @@ EXPORT_SYMBOL_GPL(videobuf_dma_free);
338static void videobuf_vm_open(struct vm_area_struct *vma) 338static void videobuf_vm_open(struct vm_area_struct *vma)
339{ 339{
340 struct videobuf_mapping *map = vma->vm_private_data; 340 struct videobuf_mapping *map = vma->vm_private_data;
341 struct videobuf_queue *q = map->q;
342 341
343 dprintk(2, "vm_open %p [count=%d,vma=%08lx-%08lx]\n", map, 342 dprintk(2, "vm_open %p [count=%d,vma=%08lx-%08lx]\n", map,
344 map->count, vma->vm_start, vma->vm_end); 343 map->count, vma->vm_start, vma->vm_end);
345 344
346 videobuf_queue_lock(q);
347 map->count++; 345 map->count++;
348 videobuf_queue_unlock(q);
349} 346}
350 347
351static void videobuf_vm_close(struct vm_area_struct *vma) 348static void videobuf_vm_close(struct vm_area_struct *vma)
@@ -358,9 +355,10 @@ static void videobuf_vm_close(struct vm_area_struct *vma)
358 dprintk(2, "vm_close %p [count=%d,vma=%08lx-%08lx]\n", map, 355 dprintk(2, "vm_close %p [count=%d,vma=%08lx-%08lx]\n", map,
359 map->count, vma->vm_start, vma->vm_end); 356 map->count, vma->vm_start, vma->vm_end);
360 357
361 videobuf_queue_lock(q); 358 map->count--;
362 if (!--map->count) { 359 if (0 == map->count) {
363 dprintk(1, "munmap %p q=%p\n", map, q); 360 dprintk(1, "munmap %p q=%p\n", map, q);
361 videobuf_queue_lock(q);
364 for (i = 0; i < VIDEO_MAX_FRAME; i++) { 362 for (i = 0; i < VIDEO_MAX_FRAME; i++) {
365 if (NULL == q->bufs[i]) 363 if (NULL == q->bufs[i])
366 continue; 364 continue;
@@ -376,9 +374,9 @@ static void videobuf_vm_close(struct vm_area_struct *vma)
376 q->bufs[i]->baddr = 0; 374 q->bufs[i]->baddr = 0;
377 q->ops->buf_release(q, q->bufs[i]); 375 q->ops->buf_release(q, q->bufs[i]);
378 } 376 }
377 videobuf_queue_unlock(q);
379 kfree(map); 378 kfree(map);
380 } 379 }
381 videobuf_queue_unlock(q);
382 return; 380 return;
383} 381}
384 382
diff --git a/drivers/media/v4l2-core/videobuf-vmalloc.c b/drivers/media/v4l2-core/videobuf-vmalloc.c
index 1365c651c177..2ff7fcc77b11 100644
--- a/drivers/media/v4l2-core/videobuf-vmalloc.c
+++ b/drivers/media/v4l2-core/videobuf-vmalloc.c
@@ -54,14 +54,11 @@ MODULE_LICENSE("GPL");
54static void videobuf_vm_open(struct vm_area_struct *vma) 54static void videobuf_vm_open(struct vm_area_struct *vma)
55{ 55{
56 struct videobuf_mapping *map = vma->vm_private_data; 56 struct videobuf_mapping *map = vma->vm_private_data;
57 struct videobuf_queue *q = map->q;
58 57
59 dprintk(2, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", map, 58 dprintk(2, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", map,
60 map->count, vma->vm_start, vma->vm_end); 59 map->count, vma->vm_start, vma->vm_end);
61 60
62 videobuf_queue_lock(q);
63 map->count++; 61 map->count++;
64 videobuf_queue_unlock(q);
65} 62}
66 63
67static void videobuf_vm_close(struct vm_area_struct *vma) 64static void videobuf_vm_close(struct vm_area_struct *vma)
@@ -73,11 +70,12 @@ static void videobuf_vm_close(struct vm_area_struct *vma)
73 dprintk(2, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", map, 70 dprintk(2, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", map,
74 map->count, vma->vm_start, vma->vm_end); 71 map->count, vma->vm_start, vma->vm_end);
75 72
76 videobuf_queue_lock(q); 73 map->count--;
77 if (!--map->count) { 74 if (0 == map->count) {
78 struct videobuf_vmalloc_memory *mem; 75 struct videobuf_vmalloc_memory *mem;
79 76
80 dprintk(1, "munmap %p q=%p\n", map, q); 77 dprintk(1, "munmap %p q=%p\n", map, q);
78 videobuf_queue_lock(q);
81 79
82 /* We need first to cancel streams, before unmapping */ 80 /* We need first to cancel streams, before unmapping */
83 if (q->streaming) 81 if (q->streaming)
@@ -116,8 +114,8 @@ static void videobuf_vm_close(struct vm_area_struct *vma)
116 114
117 kfree(map); 115 kfree(map);
118 116
117 videobuf_queue_unlock(q);
119 } 118 }
120 videobuf_queue_unlock(q);
121 119
122 return; 120 return;
123} 121}
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
index 5a5fb7f09b7b..a127925c9d61 100644
--- a/drivers/media/v4l2-core/videobuf2-core.c
+++ b/drivers/media/v4l2-core/videobuf2-core.c
@@ -1776,6 +1776,11 @@ static int vb2_internal_streamon(struct vb2_queue *q, enum v4l2_buf_type type)
1776 return 0; 1776 return 0;
1777 } 1777 }
1778 1778
1779 if (!q->num_buffers) {
1780 dprintk(1, "streamon: no buffers have been allocated\n");
1781 return -EINVAL;
1782 }
1783
1779 /* 1784 /*
1780 * If any buffers were queued before streamon, 1785 * If any buffers were queued before streamon,
1781 * we can now pass them to driver for processing. 1786 * we can now pass them to driver for processing.
diff --git a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c
index a60c188c2bd9..04bd3b6de401 100644
--- a/drivers/message/i2o/i2o_config.c
+++ b/drivers/message/i2o/i2o_config.c
@@ -754,19 +754,19 @@ static long i2o_cfg_compat_ioctl(struct file *file, unsigned cmd,
754 unsigned long arg) 754 unsigned long arg)
755{ 755{
756 int ret; 756 int ret;
757 mutex_lock(&i2o_cfg_mutex);
758 switch (cmd) { 757 switch (cmd) {
759 case I2OGETIOPS: 758 case I2OGETIOPS:
760 ret = i2o_cfg_ioctl(file, cmd, arg); 759 ret = i2o_cfg_ioctl(file, cmd, arg);
761 break; 760 break;
762 case I2OPASSTHRU32: 761 case I2OPASSTHRU32:
762 mutex_lock(&i2o_cfg_mutex);
763 ret = i2o_cfg_passthru32(file, cmd, arg); 763 ret = i2o_cfg_passthru32(file, cmd, arg);
764 mutex_unlock(&i2o_cfg_mutex);
764 break; 765 break;
765 default: 766 default:
766 ret = -ENOIOCTLCMD; 767 ret = -ENOIOCTLCMD;
767 break; 768 break;
768 } 769 }
769 mutex_unlock(&i2o_cfg_mutex);
770 return ret; 770 return ret;
771} 771}
772 772
diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c
index aaff683cd37d..a8ee4a36a1d8 100644
--- a/drivers/mfd/ab8500-core.c
+++ b/drivers/mfd/ab8500-core.c
@@ -592,7 +592,7 @@ static int ab8500_irq_init(struct ab8500 *ab8500, struct device_node *np)
592 592
593 /* If ->irq_base is zero this will give a linear mapping */ 593 /* If ->irq_base is zero this will give a linear mapping */
594 ab8500->domain = irq_domain_add_simple(NULL, 594 ab8500->domain = irq_domain_add_simple(NULL,
595 num_irqs, ab8500->irq_base, 595 num_irqs, 0,
596 &ab8500_irq_ops, ab8500); 596 &ab8500_irq_ops, ab8500);
597 597
598 if (!ab8500->domain) { 598 if (!ab8500->domain) {
@@ -1583,14 +1583,13 @@ static int ab8500_probe(struct platform_device *pdev)
1583 if (!ab8500) 1583 if (!ab8500)
1584 return -ENOMEM; 1584 return -ENOMEM;
1585 1585
1586 if (plat)
1587 ab8500->irq_base = plat->irq_base;
1588
1589 ab8500->dev = &pdev->dev; 1586 ab8500->dev = &pdev->dev;
1590 1587
1591 resource = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1588 resource = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1592 if (!resource) 1589 if (!resource) {
1590 dev_err(&pdev->dev, "no IRQ resource\n");
1593 return -ENODEV; 1591 return -ENODEV;
1592 }
1594 1593
1595 ab8500->irq = resource->start; 1594 ab8500->irq = resource->start;
1596 1595
@@ -1612,8 +1611,10 @@ static int ab8500_probe(struct platform_device *pdev)
1612 else { 1611 else {
1613 ret = get_register_interruptible(ab8500, AB8500_MISC, 1612 ret = get_register_interruptible(ab8500, AB8500_MISC,
1614 AB8500_IC_NAME_REG, &value); 1613 AB8500_IC_NAME_REG, &value);
1615 if (ret < 0) 1614 if (ret < 0) {
1615 dev_err(&pdev->dev, "could not probe HW\n");
1616 return ret; 1616 return ret;
1617 }
1617 1618
1618 ab8500->version = value; 1619 ab8500->version = value;
1619 } 1620 }
@@ -1759,30 +1760,30 @@ static int ab8500_probe(struct platform_device *pdev)
1759 if (is_ab9540(ab8500)) 1760 if (is_ab9540(ab8500))
1760 ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs, 1761 ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs,
1761 ARRAY_SIZE(ab9540_devs), NULL, 1762 ARRAY_SIZE(ab9540_devs), NULL,
1762 ab8500->irq_base, ab8500->domain); 1763 0, ab8500->domain);
1763 else if (is_ab8540(ab8500)) { 1764 else if (is_ab8540(ab8500)) {
1764 ret = mfd_add_devices(ab8500->dev, 0, ab8540_devs, 1765 ret = mfd_add_devices(ab8500->dev, 0, ab8540_devs,
1765 ARRAY_SIZE(ab8540_devs), NULL, 1766 ARRAY_SIZE(ab8540_devs), NULL,
1766 ab8500->irq_base, NULL); 1767 0, ab8500->domain);
1767 if (ret) 1768 if (ret)
1768 return ret; 1769 return ret;
1769 1770
1770 if (is_ab8540_1p2_or_earlier(ab8500)) 1771 if (is_ab8540_1p2_or_earlier(ab8500))
1771 ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut1_devs, 1772 ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut1_devs,
1772 ARRAY_SIZE(ab8540_cut1_devs), NULL, 1773 ARRAY_SIZE(ab8540_cut1_devs), NULL,
1773 ab8500->irq_base, NULL); 1774 0, ab8500->domain);
1774 else /* ab8540 >= cut2 */ 1775 else /* ab8540 >= cut2 */
1775 ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut2_devs, 1776 ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut2_devs,
1776 ARRAY_SIZE(ab8540_cut2_devs), NULL, 1777 ARRAY_SIZE(ab8540_cut2_devs), NULL,
1777 ab8500->irq_base, NULL); 1778 0, ab8500->domain);
1778 } else if (is_ab8505(ab8500)) 1779 } else if (is_ab8505(ab8500))
1779 ret = mfd_add_devices(ab8500->dev, 0, ab8505_devs, 1780 ret = mfd_add_devices(ab8500->dev, 0, ab8505_devs,
1780 ARRAY_SIZE(ab8505_devs), NULL, 1781 ARRAY_SIZE(ab8505_devs), NULL,
1781 ab8500->irq_base, ab8500->domain); 1782 0, ab8500->domain);
1782 else 1783 else
1783 ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs, 1784 ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs,
1784 ARRAY_SIZE(ab8500_devs), NULL, 1785 ARRAY_SIZE(ab8500_devs), NULL,
1785 ab8500->irq_base, ab8500->domain); 1786 0, ab8500->domain);
1786 if (ret) 1787 if (ret)
1787 return ret; 1788 return ret;
1788 1789
@@ -1790,7 +1791,7 @@ static int ab8500_probe(struct platform_device *pdev)
1790 /* Add battery management devices */ 1791 /* Add battery management devices */
1791 ret = mfd_add_devices(ab8500->dev, 0, ab8500_bm_devs, 1792 ret = mfd_add_devices(ab8500->dev, 0, ab8500_bm_devs,
1792 ARRAY_SIZE(ab8500_bm_devs), NULL, 1793 ARRAY_SIZE(ab8500_bm_devs), NULL,
1793 ab8500->irq_base, ab8500->domain); 1794 0, ab8500->domain);
1794 if (ret) 1795 if (ret)
1795 dev_err(ab8500->dev, "error adding bm devices\n"); 1796 dev_err(ab8500->dev, "error adding bm devices\n");
1796 } 1797 }
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index e43e6e821117..7694e0700d34 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -25,6 +25,7 @@
25#include <linux/bitops.h> 25#include <linux/bitops.h>
26#include <linux/fs.h> 26#include <linux/fs.h>
27#include <linux/of.h> 27#include <linux/of.h>
28#include <linux/of_irq.h>
28#include <linux/platform_device.h> 29#include <linux/platform_device.h>
29#include <linux/uaccess.h> 30#include <linux/uaccess.h>
30#include <linux/mfd/core.h> 31#include <linux/mfd/core.h>
@@ -2678,16 +2679,12 @@ static struct irq_domain_ops db8500_irq_ops = {
2678 .xlate = irq_domain_xlate_twocell, 2679 .xlate = irq_domain_xlate_twocell,
2679}; 2680};
2680 2681
2681static int db8500_irq_init(struct device_node *np, int irq_base) 2682static int db8500_irq_init(struct device_node *np)
2682{ 2683{
2683 int i; 2684 int i;
2684 2685
2685 /* In the device tree case, just take some IRQs */
2686 if (np)
2687 irq_base = 0;
2688
2689 db8500_irq_domain = irq_domain_add_simple( 2686 db8500_irq_domain = irq_domain_add_simple(
2690 np, NUM_PRCMU_WAKEUPS, irq_base, 2687 np, NUM_PRCMU_WAKEUPS, 0,
2691 &db8500_irq_ops, NULL); 2688 &db8500_irq_ops, NULL);
2692 2689
2693 if (!db8500_irq_domain) { 2690 if (!db8500_irq_domain) {
@@ -3114,10 +3111,10 @@ static void db8500_prcmu_update_cpufreq(void)
3114} 3111}
3115 3112
3116static int db8500_prcmu_register_ab8500(struct device *parent, 3113static int db8500_prcmu_register_ab8500(struct device *parent,
3117 struct ab8500_platform_data *pdata, 3114 struct ab8500_platform_data *pdata)
3118 int irq)
3119{ 3115{
3120 struct resource ab8500_resource = DEFINE_RES_IRQ(irq); 3116 struct device_node *np;
3117 struct resource ab8500_resource;
3121 struct mfd_cell ab8500_cell = { 3118 struct mfd_cell ab8500_cell = {
3122 .name = "ab8500-core", 3119 .name = "ab8500-core",
3123 .of_compatible = "stericsson,ab8500", 3120 .of_compatible = "stericsson,ab8500",
@@ -3128,6 +3125,20 @@ static int db8500_prcmu_register_ab8500(struct device *parent,
3128 .num_resources = 1, 3125 .num_resources = 1,
3129 }; 3126 };
3130 3127
3128 if (!parent->of_node)
3129 return -ENODEV;
3130
3131 /* Look up the device node, sneak the IRQ out of it */
3132 for_each_child_of_node(parent->of_node, np) {
3133 if (of_device_is_compatible(np, ab8500_cell.of_compatible))
3134 break;
3135 }
3136 if (!np) {
3137 dev_info(parent, "could not find AB8500 node in the device tree\n");
3138 return -ENODEV;
3139 }
3140 of_irq_to_resource_table(np, &ab8500_resource, 1);
3141
3131 return mfd_add_devices(parent, 0, &ab8500_cell, 1, NULL, 0, NULL); 3142 return mfd_add_devices(parent, 0, &ab8500_cell, 1, NULL, 0, NULL);
3132} 3143}
3133 3144
@@ -3180,7 +3191,7 @@ static int db8500_prcmu_probe(struct platform_device *pdev)
3180 goto no_irq_return; 3191 goto no_irq_return;
3181 } 3192 }
3182 3193
3183 db8500_irq_init(np, pdata->irq_base); 3194 db8500_irq_init(np);
3184 3195
3185 prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET); 3196 prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
3186 3197
@@ -3205,8 +3216,7 @@ static int db8500_prcmu_probe(struct platform_device *pdev)
3205 } 3216 }
3206 } 3217 }
3207 3218
3208 err = db8500_prcmu_register_ab8500(&pdev->dev, pdata->ab_platdata, 3219 err = db8500_prcmu_register_ab8500(&pdev->dev, pdata->ab_platdata);
3209 pdata->ab_irq);
3210 if (err) { 3220 if (err) {
3211 mfd_remove_devices(&pdev->dev); 3221 mfd_remove_devices(&pdev->dev);
3212 pr_err("prcmu: Failed to add ab8500 subdevice\n"); 3222 pr_err("prcmu: Failed to add ab8500 subdevice\n");
diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c
index 8f8a6b327cdb..2c2c9cc75231 100644
--- a/drivers/misc/genwqe/card_dev.c
+++ b/drivers/misc/genwqe/card_dev.c
@@ -787,6 +787,7 @@ static int genwqe_pin_mem(struct genwqe_file *cfile, struct genwqe_mem *m)
787 if (rc != 0) { 787 if (rc != 0) {
788 dev_err(&pci_dev->dev, 788 dev_err(&pci_dev->dev,
789 "[%s] genwqe_user_vmap rc=%d\n", __func__, rc); 789 "[%s] genwqe_user_vmap rc=%d\n", __func__, rc);
790 kfree(dma_map);
790 return rc; 791 return rc;
791 } 792 }
792 793
diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
index 1ee2b9492a82..9b809cfc2899 100644
--- a/drivers/misc/mei/client.c
+++ b/drivers/misc/mei/client.c
@@ -908,7 +908,6 @@ void mei_cl_all_disconnect(struct mei_device *dev)
908 list_for_each_entry_safe(cl, next, &dev->file_list, link) { 908 list_for_each_entry_safe(cl, next, &dev->file_list, link) {
909 cl->state = MEI_FILE_DISCONNECTED; 909 cl->state = MEI_FILE_DISCONNECTED;
910 cl->mei_flow_ctrl_creds = 0; 910 cl->mei_flow_ctrl_creds = 0;
911 cl->read_cb = NULL;
912 cl->timer_count = 0; 911 cl->timer_count = 0;
913 } 912 }
914} 913}
@@ -942,8 +941,16 @@ void mei_cl_all_wakeup(struct mei_device *dev)
942void mei_cl_all_write_clear(struct mei_device *dev) 941void mei_cl_all_write_clear(struct mei_device *dev)
943{ 942{
944 struct mei_cl_cb *cb, *next; 943 struct mei_cl_cb *cb, *next;
944 struct list_head *list;
945 945
946 list_for_each_entry_safe(cb, next, &dev->write_list.list, list) { 946 list = &dev->write_list.list;
947 list_for_each_entry_safe(cb, next, list, list) {
948 list_del(&cb->list);
949 mei_io_cb_free(cb);
950 }
951
952 list = &dev->write_waiting_list.list;
953 list_for_each_entry_safe(cb, next, list, list) {
947 list_del(&cb->list); 954 list_del(&cb->list);
948 mei_io_cb_free(cb); 955 mei_io_cb_free(cb);
949 } 956 }
diff --git a/drivers/misc/mic/host/mic_virtio.c b/drivers/misc/mic/host/mic_virtio.c
index 752ff873f891..7e1ef0ebbb80 100644
--- a/drivers/misc/mic/host/mic_virtio.c
+++ b/drivers/misc/mic/host/mic_virtio.c
@@ -156,7 +156,8 @@ static int mic_vringh_copy(struct mic_vdev *mvdev, struct vringh_kiov *iov,
156static int _mic_virtio_copy(struct mic_vdev *mvdev, 156static int _mic_virtio_copy(struct mic_vdev *mvdev,
157 struct mic_copy_desc *copy) 157 struct mic_copy_desc *copy)
158{ 158{
159 int ret = 0, iovcnt = copy->iovcnt; 159 int ret = 0;
160 u32 iovcnt = copy->iovcnt;
160 struct iovec iov; 161 struct iovec iov;
161 struct iovec __user *u_iov = copy->iov; 162 struct iovec __user *u_iov = copy->iov;
162 void __user *ubuf = NULL; 163 void __user *ubuf = NULL;
diff --git a/drivers/misc/sgi-gru/grukdump.c b/drivers/misc/sgi-gru/grukdump.c
index 9b2062d17327..2bef3f76032a 100644
--- a/drivers/misc/sgi-gru/grukdump.c
+++ b/drivers/misc/sgi-gru/grukdump.c
@@ -139,8 +139,11 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum,
139 139
140 ubuf += sizeof(hdr); 140 ubuf += sizeof(hdr);
141 ubufcch = ubuf; 141 ubufcch = ubuf;
142 if (gru_user_copy_handle(&ubuf, cch)) 142 if (gru_user_copy_handle(&ubuf, cch)) {
143 goto fail; 143 if (cch_locked)
144 unlock_cch_handle(cch);
145 return -EFAULT;
146 }
144 if (cch_locked) 147 if (cch_locked)
145 ubufcch->delresp = 0; 148 ubufcch->delresp = 0;
146 bytes = sizeof(hdr) + GRU_CACHE_LINE_BYTES; 149 bytes = sizeof(hdr) + GRU_CACHE_LINE_BYTES;
@@ -179,10 +182,6 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum,
179 ret = -EFAULT; 182 ret = -EFAULT;
180 183
181 return ret ? ret : bytes; 184 return ret ? ret : bytes;
182
183fail:
184 unlock_cch_handle(cch);
185 return -EFAULT;
186} 185}
187 186
188int gru_dump_chiplet_request(unsigned long arg) 187int gru_dump_chiplet_request(unsigned long arg)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 4c08018d7333..71ba18efa15b 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1270,9 +1270,13 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1270 1270
1271 if (slave_ops->ndo_set_mac_address == NULL) { 1271 if (slave_ops->ndo_set_mac_address == NULL) {
1272 if (!bond_has_slaves(bond)) { 1272 if (!bond_has_slaves(bond)) {
1273 pr_warning("%s: Warning: The first slave device specified does not support setting the MAC address. Setting fail_over_mac to active.", 1273 pr_warn("%s: Warning: The first slave device specified does not support setting the MAC address.\n",
1274 bond_dev->name); 1274 bond_dev->name);
1275 bond->params.fail_over_mac = BOND_FOM_ACTIVE; 1275 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP) {
1276 bond->params.fail_over_mac = BOND_FOM_ACTIVE;
1277 pr_warn("%s: Setting fail_over_mac to active for active-backup mode.\n",
1278 bond_dev->name);
1279 }
1276 } else if (bond->params.fail_over_mac != BOND_FOM_ACTIVE) { 1280 } else if (bond->params.fail_over_mac != BOND_FOM_ACTIVE) {
1277 pr_err("%s: Error: The slave device specified does not support setting the MAC address, but fail_over_mac is not set to active.\n", 1281 pr_err("%s: Error: The slave device specified does not support setting the MAC address, but fail_over_mac is not set to active.\n",
1278 bond_dev->name); 1282 bond_dev->name);
@@ -1315,7 +1319,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1315 */ 1319 */
1316 memcpy(new_slave->perm_hwaddr, slave_dev->dev_addr, ETH_ALEN); 1320 memcpy(new_slave->perm_hwaddr, slave_dev->dev_addr, ETH_ALEN);
1317 1321
1318 if (!bond->params.fail_over_mac) { 1322 if (!bond->params.fail_over_mac ||
1323 bond->params.mode != BOND_MODE_ACTIVEBACKUP) {
1319 /* 1324 /*
1320 * Set slave to master's mac address. The application already 1325 * Set slave to master's mac address. The application already
1321 * set the master's mac address to that of the first slave 1326 * set the master's mac address to that of the first slave
@@ -1505,7 +1510,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1505 slave_dev->npinfo = bond->dev->npinfo; 1510 slave_dev->npinfo = bond->dev->npinfo;
1506 if (slave_dev->npinfo) { 1511 if (slave_dev->npinfo) {
1507 if (slave_enable_netpoll(new_slave)) { 1512 if (slave_enable_netpoll(new_slave)) {
1508 read_unlock(&bond->lock);
1509 pr_info("Error, %s: master_dev is using netpoll, " 1513 pr_info("Error, %s: master_dev is using netpoll, "
1510 "but new slave device does not support netpoll.\n", 1514 "but new slave device does not support netpoll.\n",
1511 bond_dev->name); 1515 bond_dev->name);
@@ -1579,7 +1583,8 @@ err_close:
1579 dev_close(slave_dev); 1583 dev_close(slave_dev);
1580 1584
1581err_restore_mac: 1585err_restore_mac:
1582 if (!bond->params.fail_over_mac) { 1586 if (!bond->params.fail_over_mac ||
1587 bond->params.mode != BOND_MODE_ACTIVEBACKUP) {
1583 /* XXX TODO - fom follow mode needs to change master's 1588 /* XXX TODO - fom follow mode needs to change master's
1584 * MAC if this slave's MAC is in use by the bond, or at 1589 * MAC if this slave's MAC is in use by the bond, or at
1585 * least print a warning. 1590 * least print a warning.
@@ -1672,7 +1677,8 @@ static int __bond_release_one(struct net_device *bond_dev,
1672 1677
1673 bond->current_arp_slave = NULL; 1678 bond->current_arp_slave = NULL;
1674 1679
1675 if (!all && !bond->params.fail_over_mac) { 1680 if (!all && (!bond->params.fail_over_mac ||
1681 bond->params.mode != BOND_MODE_ACTIVEBACKUP)) {
1676 if (ether_addr_equal_64bits(bond_dev->dev_addr, slave->perm_hwaddr) && 1682 if (ether_addr_equal_64bits(bond_dev->dev_addr, slave->perm_hwaddr) &&
1677 bond_has_slaves(bond)) 1683 bond_has_slaves(bond))
1678 pr_warn("%s: Warning: the permanent HWaddr of %s - %pM - is still in use by %s. Set the HWaddr of %s to a different address to avoid conflicts.\n", 1684 pr_warn("%s: Warning: the permanent HWaddr of %s - %pM - is still in use by %s. Set the HWaddr of %s to a different address to avoid conflicts.\n",
@@ -1769,7 +1775,8 @@ static int __bond_release_one(struct net_device *bond_dev,
1769 /* close slave before restoring its mac address */ 1775 /* close slave before restoring its mac address */
1770 dev_close(slave_dev); 1776 dev_close(slave_dev);
1771 1777
1772 if (bond->params.fail_over_mac != BOND_FOM_ACTIVE) { 1778 if (bond->params.fail_over_mac != BOND_FOM_ACTIVE ||
1779 bond->params.mode != BOND_MODE_ACTIVEBACKUP) {
1773 /* restore original ("permanent") mac address */ 1780 /* restore original ("permanent") mac address */
1774 memcpy(addr.sa_data, slave->perm_hwaddr, ETH_ALEN); 1781 memcpy(addr.sa_data, slave->perm_hwaddr, ETH_ALEN);
1775 addr.sa_family = slave_dev->type; 1782 addr.sa_family = slave_dev->type;
@@ -3431,7 +3438,8 @@ static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
3431 /* If fail_over_mac is enabled, do nothing and return success. 3438 /* If fail_over_mac is enabled, do nothing and return success.
3432 * Returning an error causes ifenslave to fail. 3439 * Returning an error causes ifenslave to fail.
3433 */ 3440 */
3434 if (bond->params.fail_over_mac) 3441 if (bond->params.fail_over_mac &&
3442 bond->params.mode == BOND_MODE_ACTIVEBACKUP)
3435 return 0; 3443 return 0;
3436 3444
3437 if (!is_valid_ether_addr(sa->sa_data)) 3445 if (!is_valid_ether_addr(sa->sa_data))
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
index d447b881bbde..9e7d95dae2c7 100644
--- a/drivers/net/can/Kconfig
+++ b/drivers/net/can/Kconfig
@@ -104,7 +104,7 @@ config CAN_JANZ_ICAN3
104 104
105config CAN_FLEXCAN 105config CAN_FLEXCAN
106 tristate "Support for Freescale FLEXCAN based chips" 106 tristate "Support for Freescale FLEXCAN based chips"
107 depends on (ARM && CPU_LITTLE_ENDIAN) || PPC 107 depends on ARM || PPC
108 ---help--- 108 ---help---
109 Say Y here if you want to support for Freescale FlexCAN. 109 Say Y here if you want to support for Freescale FlexCAN.
110 110
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 13a909822e25..fc59bc6f040b 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -323,19 +323,10 @@ void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,
323 } 323 }
324 324
325 if (!priv->echo_skb[idx]) { 325 if (!priv->echo_skb[idx]) {
326 struct sock *srcsk = skb->sk;
327 326
328 if (atomic_read(&skb->users) != 1) { 327 skb = can_create_echo_skb(skb);
329 struct sk_buff *old_skb = skb; 328 if (!skb)
330 329 return;
331 skb = skb_clone(old_skb, GFP_ATOMIC);
332 kfree_skb(old_skb);
333 if (!skb)
334 return;
335 } else
336 skb_orphan(skb);
337
338 skb->sk = srcsk;
339 330
340 /* make settings for echo to reduce code in irq context */ 331 /* make settings for echo to reduce code in irq context */
341 skb->protocol = htons(ETH_P_CAN); 332 skb->protocol = htons(ETH_P_CAN);
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index aaed97bee471..320bef2dba42 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -235,9 +235,12 @@ static const struct can_bittiming_const flexcan_bittiming_const = {
235}; 235};
236 236
237/* 237/*
238 * Abstract off the read/write for arm versus ppc. 238 * Abstract off the read/write for arm versus ppc. This
239 * assumes that PPC uses big-endian registers and everything
240 * else uses little-endian registers, independent of CPU
241 * endianess.
239 */ 242 */
240#if defined(__BIG_ENDIAN) 243#if defined(CONFIG_PPC)
241static inline u32 flexcan_read(void __iomem *addr) 244static inline u32 flexcan_read(void __iomem *addr)
242{ 245{
243 return in_be32(addr); 246 return in_be32(addr);
diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
index e24e6690d672..71594e5676fd 100644
--- a/drivers/net/can/janz-ican3.c
+++ b/drivers/net/can/janz-ican3.c
@@ -18,6 +18,7 @@
18#include <linux/netdevice.h> 18#include <linux/netdevice.h>
19#include <linux/can.h> 19#include <linux/can.h>
20#include <linux/can/dev.h> 20#include <linux/can/dev.h>
21#include <linux/can/skb.h>
21#include <linux/can/error.h> 22#include <linux/can/error.h>
22 23
23#include <linux/mfd/janz.h> 24#include <linux/mfd/janz.h>
@@ -1133,20 +1134,9 @@ static void ican3_handle_message(struct ican3_dev *mod, struct ican3_msg *msg)
1133 */ 1134 */
1134static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb) 1135static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb)
1135{ 1136{
1136 struct sock *srcsk = skb->sk; 1137 skb = can_create_echo_skb(skb);
1137 1138 if (!skb)
1138 if (atomic_read(&skb->users) != 1) { 1139 return;
1139 struct sk_buff *old_skb = skb;
1140
1141 skb = skb_clone(old_skb, GFP_ATOMIC);
1142 kfree_skb(old_skb);
1143 if (!skb)
1144 return;
1145 } else {
1146 skb_orphan(skb);
1147 }
1148
1149 skb->sk = srcsk;
1150 1140
1151 /* save this skb for tx interrupt echo handling */ 1141 /* save this skb for tx interrupt echo handling */
1152 skb_queue_tail(&mod->echoq, skb); 1142 skb_queue_tail(&mod->echoq, skb);
@@ -1322,7 +1312,7 @@ static int ican3_napi(struct napi_struct *napi, int budget)
1322 1312
1323 /* process all communication messages */ 1313 /* process all communication messages */
1324 while (true) { 1314 while (true) {
1325 struct ican3_msg msg; 1315 struct ican3_msg uninitialized_var(msg);
1326 ret = ican3_recv_msg(mod, &msg); 1316 ret = ican3_recv_msg(mod, &msg);
1327 if (ret) 1317 if (ret)
1328 break; 1318 break;
diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
index 0a2a5ee79a17..4e94057ef5cf 100644
--- a/drivers/net/can/vcan.c
+++ b/drivers/net/can/vcan.c
@@ -46,6 +46,7 @@
46#include <linux/if_ether.h> 46#include <linux/if_ether.h>
47#include <linux/can.h> 47#include <linux/can.h>
48#include <linux/can/dev.h> 48#include <linux/can/dev.h>
49#include <linux/can/skb.h>
49#include <linux/slab.h> 50#include <linux/slab.h>
50#include <net/rtnetlink.h> 51#include <net/rtnetlink.h>
51 52
@@ -109,25 +110,23 @@ static netdev_tx_t vcan_tx(struct sk_buff *skb, struct net_device *dev)
109 stats->rx_packets++; 110 stats->rx_packets++;
110 stats->rx_bytes += cfd->len; 111 stats->rx_bytes += cfd->len;
111 } 112 }
112 kfree_skb(skb); 113 consume_skb(skb);
113 return NETDEV_TX_OK; 114 return NETDEV_TX_OK;
114 } 115 }
115 116
116 /* perform standard echo handling for CAN network interfaces */ 117 /* perform standard echo handling for CAN network interfaces */
117 118
118 if (loop) { 119 if (loop) {
119 struct sock *srcsk = skb->sk;
120 120
121 skb = skb_share_check(skb, GFP_ATOMIC); 121 skb = can_create_echo_skb(skb);
122 if (!skb) 122 if (!skb)
123 return NETDEV_TX_OK; 123 return NETDEV_TX_OK;
124 124
125 /* receive with packet counting */ 125 /* receive with packet counting */
126 skb->sk = srcsk;
127 vcan_rx(skb, dev); 126 vcan_rx(skb, dev);
128 } else { 127 } else {
129 /* no looped packets => no counting */ 128 /* no looped packets => no counting */
130 kfree_skb(skb); 129 consume_skb(skb);
131 } 130 }
132 return NETDEV_TX_OK; 131 return NETDEV_TX_OK;
133} 132}
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 0f4241c6e97e..238ccea965c8 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -3294,7 +3294,6 @@ static int __init vortex_init(void)
3294 3294
3295static void __exit vortex_eisa_cleanup(void) 3295static void __exit vortex_eisa_cleanup(void)
3296{ 3296{
3297 struct vortex_private *vp;
3298 void __iomem *ioaddr; 3297 void __iomem *ioaddr;
3299 3298
3300#ifdef CONFIG_EISA 3299#ifdef CONFIG_EISA
@@ -3303,7 +3302,6 @@ static void __exit vortex_eisa_cleanup(void)
3303#endif 3302#endif
3304 3303
3305 if (compaq_net_device) { 3304 if (compaq_net_device) {
3306 vp = netdev_priv(compaq_net_device);
3307 ioaddr = ioport_map(compaq_net_device->base_addr, 3305 ioaddr = ioport_map(compaq_net_device->base_addr,
3308 VORTEX_TOTAL_SIZE); 3306 VORTEX_TOTAL_SIZE);
3309 3307
diff --git a/drivers/net/ethernet/allwinner/sun4i-emac.c b/drivers/net/ethernet/allwinner/sun4i-emac.c
index 0cc21437478c..511f6eecd58b 100644
--- a/drivers/net/ethernet/allwinner/sun4i-emac.c
+++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
@@ -929,6 +929,9 @@ static int emac_resume(struct platform_device *dev)
929} 929}
930 930
931static const struct of_device_id emac_of_match[] = { 931static const struct of_device_id emac_of_match[] = {
932 {.compatible = "allwinner,sun4i-a10-emac",},
933
934 /* Deprecated */
932 {.compatible = "allwinner,sun4i-emac",}, 935 {.compatible = "allwinner,sun4i-emac",},
933 {}, 936 {},
934}; 937};
diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c
index e92ffd6e1c15..2e45f6ec1bf0 100644
--- a/drivers/net/ethernet/atheros/alx/main.c
+++ b/drivers/net/ethernet/atheros/alx/main.c
@@ -1292,6 +1292,7 @@ static int alx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1292 alx = netdev_priv(netdev); 1292 alx = netdev_priv(netdev);
1293 spin_lock_init(&alx->hw.mdio_lock); 1293 spin_lock_init(&alx->hw.mdio_lock);
1294 spin_lock_init(&alx->irq_lock); 1294 spin_lock_init(&alx->irq_lock);
1295 spin_lock_init(&alx->stats_lock);
1295 alx->dev = netdev; 1296 alx->dev = netdev;
1296 alx->hw.pdev = pdev; 1297 alx->hw.pdev = pdev;
1297 alx->msg_enable = NETIF_MSG_LINK | NETIF_MSG_HW | NETIF_MSG_IFUP | 1298 alx->msg_enable = NETIF_MSG_LINK | NETIF_MSG_HW | NETIF_MSG_IFUP |
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index 9d2dedadf2df..cda25ac45b47 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -85,7 +85,7 @@ MODULE_FIRMWARE(FW_RV2P_FILE_09_Ax);
85 85
86static int disable_msi = 0; 86static int disable_msi = 0;
87 87
88module_param(disable_msi, int, 0); 88module_param(disable_msi, int, S_IRUGO);
89MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)"); 89MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
90 90
91typedef enum { 91typedef enum {
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
index 17d1689aec6b..bfc58d488bb5 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
@@ -936,7 +936,7 @@ static inline int bnx2x_func_start(struct bnx2x *bp)
936 else /* CHIP_IS_E1X */ 936 else /* CHIP_IS_E1X */
937 start_params->network_cos_mode = FW_WRR; 937 start_params->network_cos_mode = FW_WRR;
938 938
939 start_params->gre_tunnel_mode = IPGRE_TUNNEL; 939 start_params->gre_tunnel_mode = L2GRE_TUNNEL;
940 start_params->gre_tunnel_rss = GRE_INNER_HEADERS_RSS; 940 start_params->gre_tunnel_rss = GRE_INNER_HEADERS_RSS;
941 941
942 return bnx2x_func_state_change(bp, &func_params); 942 return bnx2x_func_state_change(bp, &func_params);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index c9c445e7b4a5..7d4382286457 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -95,29 +95,29 @@ MODULE_FIRMWARE(FW_FILE_NAME_E1H);
95MODULE_FIRMWARE(FW_FILE_NAME_E2); 95MODULE_FIRMWARE(FW_FILE_NAME_E2);
96 96
97int bnx2x_num_queues; 97int bnx2x_num_queues;
98module_param_named(num_queues, bnx2x_num_queues, int, 0); 98module_param_named(num_queues, bnx2x_num_queues, int, S_IRUGO);
99MODULE_PARM_DESC(num_queues, 99MODULE_PARM_DESC(num_queues,
100 " Set number of queues (default is as a number of CPUs)"); 100 " Set number of queues (default is as a number of CPUs)");
101 101
102static int disable_tpa; 102static int disable_tpa;
103module_param(disable_tpa, int, 0); 103module_param(disable_tpa, int, S_IRUGO);
104MODULE_PARM_DESC(disable_tpa, " Disable the TPA (LRO) feature"); 104MODULE_PARM_DESC(disable_tpa, " Disable the TPA (LRO) feature");
105 105
106static int int_mode; 106static int int_mode;
107module_param(int_mode, int, 0); 107module_param(int_mode, int, S_IRUGO);
108MODULE_PARM_DESC(int_mode, " Force interrupt mode other than MSI-X " 108MODULE_PARM_DESC(int_mode, " Force interrupt mode other than MSI-X "
109 "(1 INT#x; 2 MSI)"); 109 "(1 INT#x; 2 MSI)");
110 110
111static int dropless_fc; 111static int dropless_fc;
112module_param(dropless_fc, int, 0); 112module_param(dropless_fc, int, S_IRUGO);
113MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring"); 113MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring");
114 114
115static int mrrs = -1; 115static int mrrs = -1;
116module_param(mrrs, int, 0); 116module_param(mrrs, int, S_IRUGO);
117MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)"); 117MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)");
118 118
119static int debug; 119static int debug;
120module_param(debug, int, 0); 120module_param(debug, int, S_IRUGO);
121MODULE_PARM_DESC(debug, " Default debug msglevel"); 121MODULE_PARM_DESC(debug, " Default debug msglevel");
122 122
123struct workqueue_struct *bnx2x_wq; 123struct workqueue_struct *bnx2x_wq;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index aec5ef2ed7ce..e42f48df6e94 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -1446,12 +1446,12 @@ static void bnx2x_vf_igu_reset(struct bnx2x *bp, struct bnx2x_virtf *vf)
1446 if (vf->cfg_flags & VF_CFG_INT_SIMD) 1446 if (vf->cfg_flags & VF_CFG_INT_SIMD)
1447 val |= IGU_VF_CONF_SINGLE_ISR_EN; 1447 val |= IGU_VF_CONF_SINGLE_ISR_EN;
1448 val &= ~IGU_VF_CONF_PARENT_MASK; 1448 val &= ~IGU_VF_CONF_PARENT_MASK;
1449 val |= BP_FUNC(bp) << IGU_VF_CONF_PARENT_SHIFT; /* parent PF */ 1449 val |= (BP_ABS_FUNC(bp) >> 1) << IGU_VF_CONF_PARENT_SHIFT;
1450 REG_WR(bp, IGU_REG_VF_CONFIGURATION, val); 1450 REG_WR(bp, IGU_REG_VF_CONFIGURATION, val);
1451 1451
1452 DP(BNX2X_MSG_IOV, 1452 DP(BNX2X_MSG_IOV,
1453 "value in IGU_REG_VF_CONFIGURATION of vf %d after write %x\n", 1453 "value in IGU_REG_VF_CONFIGURATION of vf %d after write is 0x%08x\n",
1454 vf->abs_vfid, REG_RD(bp, IGU_REG_VF_CONFIGURATION)); 1454 vf->abs_vfid, val);
1455 1455
1456 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp)); 1456 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
1457 1457
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index e2ca03e23dc1..3167ed6593b0 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -2609,13 +2609,14 @@ static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2609 2609
2610 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2610 tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2611 2611
2612 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) { 2612 err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2613 reg32 &= ~0x3000; 2613 if (err)
2614 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2614 return err;
2615 } else if (!err)
2616 err = -EBUSY;
2617 2615
2618 return err; 2616 reg32 &= ~0x3000;
2617 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2618
2619 return 0;
2619} 2620}
2620 2621
2621static void tg3_carrier_off(struct tg3 *tp) 2622static void tg3_carrier_off(struct tg3 *tp)
@@ -14113,12 +14114,12 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14113 14114
14114 tg3_netif_stop(tp); 14115 tg3_netif_stop(tp);
14115 14116
14117 tg3_set_mtu(dev, tp, new_mtu);
14118
14116 tg3_full_lock(tp, 1); 14119 tg3_full_lock(tp, 1);
14117 14120
14118 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 14121 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14119 14122
14120 tg3_set_mtu(dev, tp, new_mtu);
14121
14122 /* Reset PHY, otherwise the read DMA engine will be in a mode that 14123 /* Reset PHY, otherwise the read DMA engine will be in a mode that
14123 * breaks all requests to 256 bytes. 14124 * breaks all requests to 256 bytes.
14124 */ 14125 */
diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c
index 4de8cfd149cf..55e0fa03dc90 100644
--- a/drivers/net/ethernet/ethoc.c
+++ b/drivers/net/ethernet/ethoc.c
@@ -13,6 +13,7 @@
13 13
14#include <linux/dma-mapping.h> 14#include <linux/dma-mapping.h>
15#include <linux/etherdevice.h> 15#include <linux/etherdevice.h>
16#include <linux/clk.h>
16#include <linux/crc32.h> 17#include <linux/crc32.h>
17#include <linux/interrupt.h> 18#include <linux/interrupt.h>
18#include <linux/io.h> 19#include <linux/io.h>
@@ -51,6 +52,7 @@ MODULE_PARM_DESC(buffer_size, "DMA buffer allocation size");
51#define ETH_HASH0 0x48 52#define ETH_HASH0 0x48
52#define ETH_HASH1 0x4c 53#define ETH_HASH1 0x4c
53#define ETH_TXCTRL 0x50 54#define ETH_TXCTRL 0x50
55#define ETH_END 0x54
54 56
55/* mode register */ 57/* mode register */
56#define MODER_RXEN (1 << 0) /* receive enable */ 58#define MODER_RXEN (1 << 0) /* receive enable */
@@ -179,6 +181,7 @@ MODULE_PARM_DESC(buffer_size, "DMA buffer allocation size");
179 * @membase: pointer to buffer memory region 181 * @membase: pointer to buffer memory region
180 * @dma_alloc: dma allocated buffer size 182 * @dma_alloc: dma allocated buffer size
181 * @io_region_size: I/O memory region size 183 * @io_region_size: I/O memory region size
184 * @num_bd: number of buffer descriptors
182 * @num_tx: number of send buffers 185 * @num_tx: number of send buffers
183 * @cur_tx: last send buffer written 186 * @cur_tx: last send buffer written
184 * @dty_tx: last buffer actually sent 187 * @dty_tx: last buffer actually sent
@@ -199,6 +202,7 @@ struct ethoc {
199 int dma_alloc; 202 int dma_alloc;
200 resource_size_t io_region_size; 203 resource_size_t io_region_size;
201 204
205 unsigned int num_bd;
202 unsigned int num_tx; 206 unsigned int num_tx;
203 unsigned int cur_tx; 207 unsigned int cur_tx;
204 unsigned int dty_tx; 208 unsigned int dty_tx;
@@ -216,6 +220,7 @@ struct ethoc {
216 220
217 struct phy_device *phy; 221 struct phy_device *phy;
218 struct mii_bus *mdio; 222 struct mii_bus *mdio;
223 struct clk *clk;
219 s8 phy_id; 224 s8 phy_id;
220}; 225};
221 226
@@ -688,6 +693,11 @@ static int ethoc_mdio_probe(struct net_device *dev)
688 } 693 }
689 694
690 priv->phy = phy; 695 priv->phy = phy;
696 phy->advertising &= ~(ADVERTISED_1000baseT_Full |
697 ADVERTISED_1000baseT_Half);
698 phy->supported &= ~(SUPPORTED_1000baseT_Full |
699 SUPPORTED_1000baseT_Half);
700
691 return 0; 701 return 0;
692} 702}
693 703
@@ -890,6 +900,102 @@ out:
890 return NETDEV_TX_OK; 900 return NETDEV_TX_OK;
891} 901}
892 902
903static int ethoc_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
904{
905 struct ethoc *priv = netdev_priv(dev);
906 struct phy_device *phydev = priv->phy;
907
908 if (!phydev)
909 return -EOPNOTSUPP;
910
911 return phy_ethtool_gset(phydev, cmd);
912}
913
914static int ethoc_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
915{
916 struct ethoc *priv = netdev_priv(dev);
917 struct phy_device *phydev = priv->phy;
918
919 if (!phydev)
920 return -EOPNOTSUPP;
921
922 return phy_ethtool_sset(phydev, cmd);
923}
924
925static int ethoc_get_regs_len(struct net_device *netdev)
926{
927 return ETH_END;
928}
929
930static void ethoc_get_regs(struct net_device *dev, struct ethtool_regs *regs,
931 void *p)
932{
933 struct ethoc *priv = netdev_priv(dev);
934 u32 *regs_buff = p;
935 unsigned i;
936
937 regs->version = 0;
938 for (i = 0; i < ETH_END / sizeof(u32); ++i)
939 regs_buff[i] = ethoc_read(priv, i * sizeof(u32));
940}
941
942static void ethoc_get_ringparam(struct net_device *dev,
943 struct ethtool_ringparam *ring)
944{
945 struct ethoc *priv = netdev_priv(dev);
946
947 ring->rx_max_pending = priv->num_bd - 1;
948 ring->rx_mini_max_pending = 0;
949 ring->rx_jumbo_max_pending = 0;
950 ring->tx_max_pending = priv->num_bd - 1;
951
952 ring->rx_pending = priv->num_rx;
953 ring->rx_mini_pending = 0;
954 ring->rx_jumbo_pending = 0;
955 ring->tx_pending = priv->num_tx;
956}
957
958static int ethoc_set_ringparam(struct net_device *dev,
959 struct ethtool_ringparam *ring)
960{
961 struct ethoc *priv = netdev_priv(dev);
962
963 if (ring->tx_pending < 1 || ring->rx_pending < 1 ||
964 ring->tx_pending + ring->rx_pending > priv->num_bd)
965 return -EINVAL;
966 if (ring->rx_mini_pending || ring->rx_jumbo_pending)
967 return -EINVAL;
968
969 if (netif_running(dev)) {
970 netif_tx_disable(dev);
971 ethoc_disable_rx_and_tx(priv);
972 ethoc_disable_irq(priv, INT_MASK_TX | INT_MASK_RX);
973 synchronize_irq(dev->irq);
974 }
975
976 priv->num_tx = rounddown_pow_of_two(ring->tx_pending);
977 priv->num_rx = ring->rx_pending;
978 ethoc_init_ring(priv, dev->mem_start);
979
980 if (netif_running(dev)) {
981 ethoc_enable_irq(priv, INT_MASK_TX | INT_MASK_RX);
982 ethoc_enable_rx_and_tx(priv);
983 netif_wake_queue(dev);
984 }
985 return 0;
986}
987
988const struct ethtool_ops ethoc_ethtool_ops = {
989 .get_settings = ethoc_get_settings,
990 .set_settings = ethoc_set_settings,
991 .get_regs_len = ethoc_get_regs_len,
992 .get_regs = ethoc_get_regs,
993 .get_link = ethtool_op_get_link,
994 .get_ringparam = ethoc_get_ringparam,
995 .set_ringparam = ethoc_set_ringparam,
996 .get_ts_info = ethtool_op_get_ts_info,
997};
998
893static const struct net_device_ops ethoc_netdev_ops = { 999static const struct net_device_ops ethoc_netdev_ops = {
894 .ndo_open = ethoc_open, 1000 .ndo_open = ethoc_open,
895 .ndo_stop = ethoc_stop, 1001 .ndo_stop = ethoc_stop,
@@ -917,6 +1023,8 @@ static int ethoc_probe(struct platform_device *pdev)
917 int num_bd; 1023 int num_bd;
918 int ret = 0; 1024 int ret = 0;
919 bool random_mac = false; 1025 bool random_mac = false;
1026 struct ethoc_platform_data *pdata = dev_get_platdata(&pdev->dev);
1027 u32 eth_clkfreq = pdata ? pdata->eth_clkfreq : 0;
920 1028
921 /* allocate networking device */ 1029 /* allocate networking device */
922 netdev = alloc_etherdev(sizeof(struct ethoc)); 1030 netdev = alloc_etherdev(sizeof(struct ethoc));
@@ -1016,6 +1124,7 @@ static int ethoc_probe(struct platform_device *pdev)
1016 ret = -ENODEV; 1124 ret = -ENODEV;
1017 goto error; 1125 goto error;
1018 } 1126 }
1127 priv->num_bd = num_bd;
1019 /* num_tx must be a power of two */ 1128 /* num_tx must be a power of two */
1020 priv->num_tx = rounddown_pow_of_two(num_bd >> 1); 1129 priv->num_tx = rounddown_pow_of_two(num_bd >> 1);
1021 priv->num_rx = num_bd - priv->num_tx; 1130 priv->num_rx = num_bd - priv->num_tx;
@@ -1030,8 +1139,7 @@ static int ethoc_probe(struct platform_device *pdev)
1030 } 1139 }
1031 1140
1032 /* Allow the platform setup code to pass in a MAC address. */ 1141 /* Allow the platform setup code to pass in a MAC address. */
1033 if (dev_get_platdata(&pdev->dev)) { 1142 if (pdata) {
1034 struct ethoc_platform_data *pdata = dev_get_platdata(&pdev->dev);
1035 memcpy(netdev->dev_addr, pdata->hwaddr, IFHWADDRLEN); 1143 memcpy(netdev->dev_addr, pdata->hwaddr, IFHWADDRLEN);
1036 priv->phy_id = pdata->phy_id; 1144 priv->phy_id = pdata->phy_id;
1037 } else { 1145 } else {
@@ -1069,6 +1177,27 @@ static int ethoc_probe(struct platform_device *pdev)
1069 if (random_mac) 1177 if (random_mac)
1070 netdev->addr_assign_type = NET_ADDR_RANDOM; 1178 netdev->addr_assign_type = NET_ADDR_RANDOM;
1071 1179
1180 /* Allow the platform setup code to adjust MII management bus clock. */
1181 if (!eth_clkfreq) {
1182 struct clk *clk = devm_clk_get(&pdev->dev, NULL);
1183
1184 if (!IS_ERR(clk)) {
1185 priv->clk = clk;
1186 clk_prepare_enable(clk);
1187 eth_clkfreq = clk_get_rate(clk);
1188 }
1189 }
1190 if (eth_clkfreq) {
1191 u32 clkdiv = MIIMODER_CLKDIV(eth_clkfreq / 2500000 + 1);
1192
1193 if (!clkdiv)
1194 clkdiv = 2;
1195 dev_dbg(&pdev->dev, "setting MII clkdiv to %u\n", clkdiv);
1196 ethoc_write(priv, MIIMODER,
1197 (ethoc_read(priv, MIIMODER) & MIIMODER_NOPRE) |
1198 clkdiv);
1199 }
1200
1072 /* register MII bus */ 1201 /* register MII bus */
1073 priv->mdio = mdiobus_alloc(); 1202 priv->mdio = mdiobus_alloc();
1074 if (!priv->mdio) { 1203 if (!priv->mdio) {
@@ -1111,6 +1240,7 @@ static int ethoc_probe(struct platform_device *pdev)
1111 netdev->netdev_ops = &ethoc_netdev_ops; 1240 netdev->netdev_ops = &ethoc_netdev_ops;
1112 netdev->watchdog_timeo = ETHOC_TIMEOUT; 1241 netdev->watchdog_timeo = ETHOC_TIMEOUT;
1113 netdev->features |= 0; 1242 netdev->features |= 0;
1243 netdev->ethtool_ops = &ethoc_ethtool_ops;
1114 1244
1115 /* setup NAPI */ 1245 /* setup NAPI */
1116 netif_napi_add(netdev, &priv->napi, ethoc_poll, 64); 1246 netif_napi_add(netdev, &priv->napi, ethoc_poll, 64);
@@ -1133,6 +1263,8 @@ free_mdio:
1133 kfree(priv->mdio->irq); 1263 kfree(priv->mdio->irq);
1134 mdiobus_free(priv->mdio); 1264 mdiobus_free(priv->mdio);
1135free: 1265free:
1266 if (priv->clk)
1267 clk_disable_unprepare(priv->clk);
1136 free_netdev(netdev); 1268 free_netdev(netdev);
1137out: 1269out:
1138 return ret; 1270 return ret;
@@ -1157,6 +1289,8 @@ static int ethoc_remove(struct platform_device *pdev)
1157 kfree(priv->mdio->irq); 1289 kfree(priv->mdio->irq);
1158 mdiobus_free(priv->mdio); 1290 mdiobus_free(priv->mdio);
1159 } 1291 }
1292 if (priv->clk)
1293 clk_disable_unprepare(priv->clk);
1160 unregister_netdev(netdev); 1294 unregister_netdev(netdev);
1161 free_netdev(netdev); 1295 free_netdev(netdev);
1162 } 1296 }
diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index cbaba4442d4b..bf7a01ef9a57 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -3034,7 +3034,7 @@ static void __e100_shutdown(struct pci_dev *pdev, bool *enable_wake)
3034 *enable_wake = false; 3034 *enable_wake = false;
3035 } 3035 }
3036 3036
3037 pci_disable_device(pdev); 3037 pci_clear_master(pdev);
3038} 3038}
3039 3039
3040static int __e100_power_off(struct pci_dev *pdev, bool wake) 3040static int __e100_power_off(struct pci_dev *pdev, bool wake)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
index 157fe8df2c3e..8ff57e8e3e91 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
@@ -4,5 +4,5 @@
4 4
5config MLX5_CORE 5config MLX5_CORE
6 tristate 6 tristate
7 depends on PCI && X86 7 depends on PCI
8 default n 8 default n
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
index 1ded50ca1600..e46e8698e630 100644
--- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
+++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
@@ -726,9 +726,6 @@ static int vxge_learn_mac(struct vxgedev *vdev, u8 *mac_header)
726 int vpath_idx = 0; 726 int vpath_idx = 0;
727 enum vxge_hw_status status = VXGE_HW_OK; 727 enum vxge_hw_status status = VXGE_HW_OK;
728 struct vxge_vpath *vpath = NULL; 728 struct vxge_vpath *vpath = NULL;
729 struct __vxge_hw_device *hldev;
730
731 hldev = pci_get_drvdata(vdev->pdev);
732 729
733 mac_address = (u8 *)&mac_addr; 730 mac_address = (u8 *)&mac_addr;
734 memcpy(mac_address, mac_header, ETH_ALEN); 731 memcpy(mac_address, mac_header, ETH_ALEN);
@@ -2443,9 +2440,6 @@ static void vxge_rem_msix_isr(struct vxgedev *vdev)
2443 2440
2444static void vxge_rem_isr(struct vxgedev *vdev) 2441static void vxge_rem_isr(struct vxgedev *vdev)
2445{ 2442{
2446 struct __vxge_hw_device *hldev;
2447 hldev = pci_get_drvdata(vdev->pdev);
2448
2449#ifdef CONFIG_PCI_MSI 2443#ifdef CONFIG_PCI_MSI
2450 if (vdev->config.intr_type == MSI_X) { 2444 if (vdev->config.intr_type == MSI_X) {
2451 vxge_rem_msix_isr(vdev); 2445 vxge_rem_msix_isr(vdev);
diff --git a/drivers/net/ethernet/sfc/tx.c b/drivers/net/ethernet/sfc/tx.c
index c49d1fb16965..75d11fa4eb0a 100644
--- a/drivers/net/ethernet/sfc/tx.c
+++ b/drivers/net/ethernet/sfc/tx.c
@@ -429,7 +429,9 @@ netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb)
429 } 429 }
430 430
431 /* Transfer ownership of the skb to the final buffer */ 431 /* Transfer ownership of the skb to the final buffer */
432#ifdef EFX_USE_PIO
432finish_packet: 433finish_packet:
434#endif
433 buffer->skb = skb; 435 buffer->skb = skb;
434 buffer->flags = EFX_TX_BUF_SKB | dma_flags; 436 buffer->flags = EFX_TX_BUF_SKB | dma_flags;
435 437
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index bde63e3af96f..1d860ce914ed 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1878,8 +1878,18 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
1878 mdio_node = of_find_node_by_phandle(be32_to_cpup(parp)); 1878 mdio_node = of_find_node_by_phandle(be32_to_cpup(parp));
1879 phyid = be32_to_cpup(parp+1); 1879 phyid = be32_to_cpup(parp+1);
1880 mdio = of_find_device_by_node(mdio_node); 1880 mdio = of_find_device_by_node(mdio_node);
1881 snprintf(slave_data->phy_id, sizeof(slave_data->phy_id), 1881
1882 PHY_ID_FMT, mdio->name, phyid); 1882 if (strncmp(mdio->name, "gpio", 4) == 0) {
1883 /* GPIO bitbang MDIO driver attached */
1884 struct mii_bus *bus = dev_get_drvdata(&mdio->dev);
1885
1886 snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
1887 PHY_ID_FMT, bus->id, phyid);
1888 } else {
1889 /* davinci MDIO driver attached */
1890 snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
1891 PHY_ID_FMT, mdio->name, phyid);
1892 }
1883 1893
1884 mac_addr = of_get_mac_address(slave_node); 1894 mac_addr = of_get_mac_address(slave_node);
1885 if (mac_addr) 1895 if (mac_addr)
diff --git a/drivers/net/irda/Kconfig b/drivers/net/irda/Kconfig
index 2dc82f1d2e70..3da44d5d9149 100644
--- a/drivers/net/irda/Kconfig
+++ b/drivers/net/irda/Kconfig
@@ -210,13 +210,6 @@ config KINGSUN_DONGLE
210 To compile it as a module, choose M here: the module will be called 210 To compile it as a module, choose M here: the module will be called
211 kingsun-sir. 211 kingsun-sir.
212 212
213config EP7211_DONGLE
214 tristate "Cirrus Logic clps711x I/R support"
215 depends on IRTTY_SIR && ARCH_CLPS711X && IRDA
216 help
217 Say Y here if you want to build support for the Cirrus logic
218 EP7211 chipset's infrared module.
219
220config KSDAZZLE_DONGLE 213config KSDAZZLE_DONGLE
221 tristate "KingSun Dazzle IrDA-USB dongle" 214 tristate "KingSun Dazzle IrDA-USB dongle"
222 depends on IRDA && USB 215 depends on IRDA && USB
diff --git a/drivers/net/irda/Makefile b/drivers/net/irda/Makefile
index dfc64537f62f..be8ab5b9a4a2 100644
--- a/drivers/net/irda/Makefile
+++ b/drivers/net/irda/Makefile
@@ -35,7 +35,6 @@ obj-$(CONFIG_MCP2120_DONGLE) += mcp2120-sir.o
35obj-$(CONFIG_ACT200L_DONGLE) += act200l-sir.o 35obj-$(CONFIG_ACT200L_DONGLE) += act200l-sir.o
36obj-$(CONFIG_MA600_DONGLE) += ma600-sir.o 36obj-$(CONFIG_MA600_DONGLE) += ma600-sir.o
37obj-$(CONFIG_TOIM3232_DONGLE) += toim3232-sir.o 37obj-$(CONFIG_TOIM3232_DONGLE) += toim3232-sir.o
38obj-$(CONFIG_EP7211_DONGLE) += ep7211-sir.o
39obj-$(CONFIG_KINGSUN_DONGLE) += kingsun-sir.o 38obj-$(CONFIG_KINGSUN_DONGLE) += kingsun-sir.o
40obj-$(CONFIG_KSDAZZLE_DONGLE) += ksdazzle-sir.o 39obj-$(CONFIG_KSDAZZLE_DONGLE) += ksdazzle-sir.o
41obj-$(CONFIG_KS959_DONGLE) += ks959-sir.o 40obj-$(CONFIG_KS959_DONGLE) += ks959-sir.o
diff --git a/drivers/net/irda/ep7211-sir.c b/drivers/net/irda/ep7211-sir.c
deleted file mode 100644
index 5fe1f4dd3369..000000000000
--- a/drivers/net/irda/ep7211-sir.c
+++ /dev/null
@@ -1,70 +0,0 @@
1/*
2 * IR port driver for the Cirrus Logic CLPS711X processors
3 *
4 * Copyright 2001, Blue Mug Inc. All rights reserved.
5 * Copyright 2007, Samuel Ortiz <samuel@sortiz.org>
6 */
7
8#include <linux/module.h>
9#include <linux/platform_device.h>
10
11#include <mach/hardware.h>
12
13#include "sir-dev.h"
14
15static int clps711x_dongle_open(struct sir_dev *dev)
16{
17 unsigned int syscon;
18
19 /* Turn on the SIR encoder. */
20 syscon = clps_readl(SYSCON1);
21 syscon |= SYSCON1_SIREN;
22 clps_writel(syscon, SYSCON1);
23
24 return 0;
25}
26
27static int clps711x_dongle_close(struct sir_dev *dev)
28{
29 unsigned int syscon;
30
31 /* Turn off the SIR encoder. */
32 syscon = clps_readl(SYSCON1);
33 syscon &= ~SYSCON1_SIREN;
34 clps_writel(syscon, SYSCON1);
35
36 return 0;
37}
38
39static struct dongle_driver clps711x_dongle = {
40 .owner = THIS_MODULE,
41 .driver_name = "EP7211 IR driver",
42 .type = IRDA_EP7211_DONGLE,
43 .open = clps711x_dongle_open,
44 .close = clps711x_dongle_close,
45};
46
47static int clps711x_sir_probe(struct platform_device *pdev)
48{
49 return irda_register_dongle(&clps711x_dongle);
50}
51
52static int clps711x_sir_remove(struct platform_device *pdev)
53{
54 return irda_unregister_dongle(&clps711x_dongle);
55}
56
57static struct platform_driver clps711x_sir_driver = {
58 .driver = {
59 .name = "sir-clps711x",
60 .owner = THIS_MODULE,
61 },
62 .probe = clps711x_sir_probe,
63 .remove = clps711x_sir_remove,
64};
65module_platform_driver(clps711x_sir_driver);
66
67MODULE_AUTHOR("Samuel Ortiz <samuel@sortiz.org>");
68MODULE_DESCRIPTION("EP7211 IR dongle driver");
69MODULE_LICENSE("GPL");
70MODULE_ALIAS("irda-dongle-13"); /* IRDA_EP7211_DONGLE */
diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index 547725fa8671..9414fa272160 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -437,7 +437,10 @@ static int ptp_dp83640_enable(struct ptp_clock_info *ptp,
437 if (on) { 437 if (on) {
438 gpio_num = gpio_tab[EXTTS0_GPIO + index]; 438 gpio_num = gpio_tab[EXTTS0_GPIO + index];
439 evnt |= (gpio_num & EVNT_GPIO_MASK) << EVNT_GPIO_SHIFT; 439 evnt |= (gpio_num & EVNT_GPIO_MASK) << EVNT_GPIO_SHIFT;
440 evnt |= EVNT_RISE; 440 if (rq->extts.flags & PTP_FALLING_EDGE)
441 evnt |= EVNT_FALL;
442 else
443 evnt |= EVNT_RISE;
441 } 444 }
442 ext_write(0, phydev, PAGE5, PTP_EVNT, evnt); 445 ext_write(0, phydev, PAGE5, PTP_EVNT, evnt);
443 return 0; 446 return 0;
@@ -1058,6 +1061,13 @@ static void dp83640_remove(struct phy_device *phydev)
1058 kfree(dp83640); 1061 kfree(dp83640);
1059} 1062}
1060 1063
1064static int dp83640_config_init(struct phy_device *phydev)
1065{
1066 enable_status_frames(phydev, true);
1067 ext_write(0, phydev, PAGE4, PTP_CTL, PTP_ENABLE);
1068 return 0;
1069}
1070
1061static int dp83640_ack_interrupt(struct phy_device *phydev) 1071static int dp83640_ack_interrupt(struct phy_device *phydev)
1062{ 1072{
1063 int err = phy_read(phydev, MII_DP83640_MISR); 1073 int err = phy_read(phydev, MII_DP83640_MISR);
@@ -1195,11 +1205,6 @@ static int dp83640_hwtstamp(struct phy_device *phydev, struct ifreq *ifr)
1195 1205
1196 mutex_lock(&dp83640->clock->extreg_lock); 1206 mutex_lock(&dp83640->clock->extreg_lock);
1197 1207
1198 if (dp83640->hwts_tx_en || dp83640->hwts_rx_en) {
1199 enable_status_frames(phydev, true);
1200 ext_write(0, phydev, PAGE4, PTP_CTL, PTP_ENABLE);
1201 }
1202
1203 ext_write(0, phydev, PAGE5, PTP_TXCFG0, txcfg0); 1208 ext_write(0, phydev, PAGE5, PTP_TXCFG0, txcfg0);
1204 ext_write(0, phydev, PAGE5, PTP_RXCFG0, rxcfg0); 1209 ext_write(0, phydev, PAGE5, PTP_RXCFG0, rxcfg0);
1205 1210
@@ -1281,6 +1286,7 @@ static void dp83640_txtstamp(struct phy_device *phydev,
1281 } 1286 }
1282 /* fall through */ 1287 /* fall through */
1283 case HWTSTAMP_TX_ON: 1288 case HWTSTAMP_TX_ON:
1289 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
1284 skb_queue_tail(&dp83640->tx_queue, skb); 1290 skb_queue_tail(&dp83640->tx_queue, skb);
1285 schedule_work(&dp83640->ts_work); 1291 schedule_work(&dp83640->ts_work);
1286 break; 1292 break;
@@ -1330,6 +1336,7 @@ static struct phy_driver dp83640_driver = {
1330 .flags = PHY_HAS_INTERRUPT, 1336 .flags = PHY_HAS_INTERRUPT,
1331 .probe = dp83640_probe, 1337 .probe = dp83640_probe,
1332 .remove = dp83640_remove, 1338 .remove = dp83640_remove,
1339 .config_init = dp83640_config_init,
1333 .config_aneg = genphy_config_aneg, 1340 .config_aneg = genphy_config_aneg,
1334 .read_status = genphy_read_status, 1341 .read_status = genphy_read_status,
1335 .ack_interrupt = dp83640_ack_interrupt, 1342 .ack_interrupt = dp83640_ack_interrupt,
diff --git a/drivers/net/phy/mdio-sun4i.c b/drivers/net/phy/mdio-sun4i.c
index bb88bc7d81fb..9367acc84fbb 100644
--- a/drivers/net/phy/mdio-sun4i.c
+++ b/drivers/net/phy/mdio-sun4i.c
@@ -170,6 +170,9 @@ static int sun4i_mdio_remove(struct platform_device *pdev)
170} 170}
171 171
172static const struct of_device_id sun4i_mdio_dt_ids[] = { 172static const struct of_device_id sun4i_mdio_dt_ids[] = {
173 { .compatible = "allwinner,sun4i-a10-mdio" },
174
175 /* Deprecated */
173 { .compatible = "allwinner,sun4i-mdio" }, 176 { .compatible = "allwinner,sun4i-mdio" },
174 { } 177 { }
175}; 178};
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 4b03e63639b7..82514e72b3d8 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -719,7 +719,7 @@ int phy_resume(struct phy_device *phydev)
719static int genphy_config_advert(struct phy_device *phydev) 719static int genphy_config_advert(struct phy_device *phydev)
720{ 720{
721 u32 advertise; 721 u32 advertise;
722 int oldadv, adv; 722 int oldadv, adv, bmsr;
723 int err, changed = 0; 723 int err, changed = 0;
724 724
725 /* Only allow advertising what this PHY supports */ 725 /* Only allow advertising what this PHY supports */
@@ -744,26 +744,36 @@ static int genphy_config_advert(struct phy_device *phydev)
744 changed = 1; 744 changed = 1;
745 } 745 }
746 746
747 bmsr = phy_read(phydev, MII_BMSR);
748 if (bmsr < 0)
749 return bmsr;
750
751 /* Per 802.3-2008, Section 22.2.4.2.16 Extended status all
752 * 1000Mbits/sec capable PHYs shall have the BMSR_ESTATEN bit set to a
753 * logical 1.
754 */
755 if (!(bmsr & BMSR_ESTATEN))
756 return changed;
757
747 /* Configure gigabit if it's supported */ 758 /* Configure gigabit if it's supported */
759 adv = phy_read(phydev, MII_CTRL1000);
760 if (adv < 0)
761 return adv;
762
763 oldadv = adv;
764 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
765
748 if (phydev->supported & (SUPPORTED_1000baseT_Half | 766 if (phydev->supported & (SUPPORTED_1000baseT_Half |
749 SUPPORTED_1000baseT_Full)) { 767 SUPPORTED_1000baseT_Full)) {
750 adv = phy_read(phydev, MII_CTRL1000);
751 if (adv < 0)
752 return adv;
753
754 oldadv = adv;
755 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
756 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise); 768 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
757 769 if (adv != oldadv)
758 if (adv != oldadv) {
759 err = phy_write(phydev, MII_CTRL1000, adv);
760
761 if (err < 0)
762 return err;
763 changed = 1; 770 changed = 1;
764 }
765 } 771 }
766 772
773 err = phy_write(phydev, MII_CTRL1000, adv);
774 if (err < 0)
775 return err;
776
767 return changed; 777 return changed;
768} 778}
769 779
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 6b638a066c1d..409499fdb157 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -292,6 +292,22 @@ config USB_NET_SR9700
292 This option adds support for CoreChip-sz SR9700 based USB 1.1 292 This option adds support for CoreChip-sz SR9700 based USB 1.1
293 10/100 Ethernet adapters. 293 10/100 Ethernet adapters.
294 294
295config USB_NET_SR9800
296 tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
297 depends on USB_USBNET
298 select CRC32
299 default y
300 ---help---
301 Say Y if you want to use one of the following 100Mbps USB Ethernet
302 device based on the CoreChip-sz SR9800 chip.
303
304 This driver makes the adapter appear as a normal Ethernet interface,
305 typically on eth0, if it is the only ethernet device, or perhaps on
306 eth1, if you have a PCI or ISA ethernet card installed.
307
308 To compile this driver as a module, choose M here: the
309 module will be called sr9800.
310
295config USB_NET_SMSC75XX 311config USB_NET_SMSC75XX
296 tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices" 312 tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
297 depends on USB_USBNET 313 depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e88bbaf..433f0a00c683 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o r815x.o
15obj-$(CONFIG_USB_NET_CDC_EEM) += cdc_eem.o 15obj-$(CONFIG_USB_NET_CDC_EEM) += cdc_eem.o
16obj-$(CONFIG_USB_NET_DM9601) += dm9601.o 16obj-$(CONFIG_USB_NET_DM9601) += dm9601.o
17obj-$(CONFIG_USB_NET_SR9700) += sr9700.o 17obj-$(CONFIG_USB_NET_SR9700) += sr9700.o
18obj-$(CONFIG_USB_NET_SR9800) += sr9800.o
18obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o 19obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
19obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o 20obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
20obj-$(CONFIG_USB_NET_GL620A) += gl620a.o 21obj-$(CONFIG_USB_NET_GL620A) += gl620a.o
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 1a482344b3f5..660bd5ea9fc0 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -1201,16 +1201,18 @@ static void hso_std_serial_read_bulk_callback(struct urb *urb)
1201 struct hso_serial *serial = urb->context; 1201 struct hso_serial *serial = urb->context;
1202 int status = urb->status; 1202 int status = urb->status;
1203 1203
1204 D4("\n--- Got serial_read_bulk callback %02x ---", status);
1205
1204 /* sanity check */ 1206 /* sanity check */
1205 if (!serial) { 1207 if (!serial) {
1206 D1("serial == NULL"); 1208 D1("serial == NULL");
1207 return; 1209 return;
1208 } else if (status) { 1210 }
1211 if (status) {
1209 handle_usb_error(status, __func__, serial->parent); 1212 handle_usb_error(status, __func__, serial->parent);
1210 return; 1213 return;
1211 } 1214 }
1212 1215
1213 D4("\n--- Got serial_read_bulk callback %02x ---", status);
1214 D1("Actual length = %d\n", urb->actual_length); 1216 D1("Actual length = %d\n", urb->actual_length);
1215 DUMP1(urb->transfer_buffer, urb->actual_length); 1217 DUMP1(urb->transfer_buffer, urb->actual_length);
1216 1218
@@ -1218,25 +1220,13 @@ static void hso_std_serial_read_bulk_callback(struct urb *urb)
1218 if (serial->port.count == 0) 1220 if (serial->port.count == 0)
1219 return; 1221 return;
1220 1222
1221 if (status == 0) { 1223 if (serial->parent->port_spec & HSO_INFO_CRC_BUG)
1222 if (serial->parent->port_spec & HSO_INFO_CRC_BUG) 1224 fix_crc_bug(urb, serial->in_endp->wMaxPacketSize);
1223 fix_crc_bug(urb, serial->in_endp->wMaxPacketSize); 1225 /* Valid data, handle RX data */
1224 /* Valid data, handle RX data */ 1226 spin_lock(&serial->serial_lock);
1225 spin_lock(&serial->serial_lock); 1227 serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 1;
1226 serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 1; 1228 put_rxbuf_data_and_resubmit_bulk_urb(serial);
1227 put_rxbuf_data_and_resubmit_bulk_urb(serial); 1229 spin_unlock(&serial->serial_lock);
1228 spin_unlock(&serial->serial_lock);
1229 } else if (status == -ENOENT || status == -ECONNRESET) {
1230 /* Unlinked - check for throttled port. */
1231 D2("Port %d, successfully unlinked urb", serial->minor);
1232 spin_lock(&serial->serial_lock);
1233 serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 0;
1234 hso_resubmit_rx_bulk_urb(serial, urb);
1235 spin_unlock(&serial->serial_lock);
1236 } else {
1237 D2("Port %d, status = %d for read urb", serial->minor, status);
1238 return;
1239 }
1240} 1230}
1241 1231
1242/* 1232/*
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 23bdd5b9274d..ff5c87128ffe 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -712,6 +712,7 @@ static const struct usb_device_id products[] = {
712 {QMI_FIXED_INTF(0x19d2, 0x1255, 3)}, 712 {QMI_FIXED_INTF(0x19d2, 0x1255, 3)},
713 {QMI_FIXED_INTF(0x19d2, 0x1255, 4)}, 713 {QMI_FIXED_INTF(0x19d2, 0x1255, 4)},
714 {QMI_FIXED_INTF(0x19d2, 0x1256, 4)}, 714 {QMI_FIXED_INTF(0x19d2, 0x1256, 4)},
715 {QMI_FIXED_INTF(0x19d2, 0x1270, 5)}, /* ZTE MF667 */
715 {QMI_FIXED_INTF(0x19d2, 0x1401, 2)}, 716 {QMI_FIXED_INTF(0x19d2, 0x1401, 2)},
716 {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ 717 {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */
717 {QMI_FIXED_INTF(0x19d2, 0x1424, 2)}, 718 {QMI_FIXED_INTF(0x19d2, 0x1424, 2)},
@@ -723,6 +724,7 @@ static const struct usb_device_id products[] = {
723 {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */ 724 {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */
724 {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */ 725 {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */
725 {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */ 726 {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */
727 {QMI_FIXED_INTF(0x1199, 0x9051, 8)}, /* Netgear AirCard 340U */
726 {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */ 728 {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */
727 {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */ 729 {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
728 {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ 730 {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index e8fac732c6f1..d89dbe395ad2 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -2273,22 +2273,21 @@ static int rtl8152_open(struct net_device *netdev)
2273 struct r8152 *tp = netdev_priv(netdev); 2273 struct r8152 *tp = netdev_priv(netdev);
2274 int res = 0; 2274 int res = 0;
2275 2275
2276 rtl8152_set_speed(tp, AUTONEG_ENABLE,
2277 tp->mii.supports_gmii ? SPEED_1000 : SPEED_100,
2278 DUPLEX_FULL);
2279 tp->speed = 0;
2280 netif_carrier_off(netdev);
2281 netif_start_queue(netdev);
2282 set_bit(WORK_ENABLE, &tp->flags);
2276 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); 2283 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL);
2277 if (res) { 2284 if (res) {
2278 if (res == -ENODEV) 2285 if (res == -ENODEV)
2279 netif_device_detach(tp->netdev); 2286 netif_device_detach(tp->netdev);
2280 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", 2287 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n",
2281 res); 2288 res);
2282 return res;
2283 } 2289 }
2284 2290
2285 rtl8152_set_speed(tp, AUTONEG_ENABLE,
2286 tp->mii.supports_gmii ? SPEED_1000 : SPEED_100,
2287 DUPLEX_FULL);
2288 tp->speed = 0;
2289 netif_carrier_off(netdev);
2290 netif_start_queue(netdev);
2291 set_bit(WORK_ENABLE, &tp->flags);
2292 2291
2293 return res; 2292 return res;
2294} 2293}
@@ -2298,8 +2297,8 @@ static int rtl8152_close(struct net_device *netdev)
2298 struct r8152 *tp = netdev_priv(netdev); 2297 struct r8152 *tp = netdev_priv(netdev);
2299 int res = 0; 2298 int res = 0;
2300 2299
2301 usb_kill_urb(tp->intr_urb);
2302 clear_bit(WORK_ENABLE, &tp->flags); 2300 clear_bit(WORK_ENABLE, &tp->flags);
2301 usb_kill_urb(tp->intr_urb);
2303 cancel_delayed_work_sync(&tp->schedule); 2302 cancel_delayed_work_sync(&tp->schedule);
2304 netif_stop_queue(netdev); 2303 netif_stop_queue(netdev);
2305 tasklet_disable(&tp->tl); 2304 tasklet_disable(&tp->tl);
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000000000000..4175eb9fdeca
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,870 @@
1/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
2 *
3 * Author : Liu Junliang <liujunliang_ljl@163.com>
4 *
5 * Based on asix_common.c, asix_devices.c
6 *
7 * This file is licensed under the terms of the GNU General Public License
8 * version 2. This program is licensed "as is" without any warranty of any
9 * kind, whether express or implied.*
10 */
11
12#include <linux/module.h>
13#include <linux/kmod.h>
14#include <linux/init.h>
15#include <linux/netdevice.h>
16#include <linux/etherdevice.h>
17#include <linux/ethtool.h>
18#include <linux/workqueue.h>
19#include <linux/mii.h>
20#include <linux/usb.h>
21#include <linux/crc32.h>
22#include <linux/usb/usbnet.h>
23#include <linux/slab.h>
24#include <linux/if_vlan.h>
25
26#include "sr9800.h"
27
28static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
29 u16 size, void *data)
30{
31 int err;
32
33 err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
34 data, size);
35 if ((err != size) && (err >= 0))
36 err = -EINVAL;
37
38 return err;
39}
40
41static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
42 u16 size, void *data)
43{
44 int err;
45
46 err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
47 data, size);
48 if ((err != size) && (err >= 0))
49 err = -EINVAL;
50
51 return err;
52}
53
54static void
55sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
56 u16 size, void *data)
57{
58 usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
59 size);
60}
61
62static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
63{
64 int offset = 0;
65
66 while (offset + sizeof(u32) < skb->len) {
67 struct sk_buff *sr_skb;
68 u16 size;
69 u32 header = get_unaligned_le32(skb->data + offset);
70
71 offset += sizeof(u32);
72 /* get the packet length */
73 size = (u16) (header & 0x7ff);
74 if (size != ((~header >> 16) & 0x07ff)) {
75 netdev_err(dev->net, "%s : Bad Header Length\n",
76 __func__);
77 return 0;
78 }
79
80 if ((size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) ||
81 (size + offset > skb->len)) {
82 netdev_err(dev->net, "%s : Bad RX Length %d\n",
83 __func__, size);
84 return 0;
85 }
86 sr_skb = netdev_alloc_skb_ip_align(dev->net, size);
87 if (!sr_skb)
88 return 0;
89
90 skb_put(sr_skb, size);
91 memcpy(sr_skb->data, skb->data + offset, size);
92 usbnet_skb_return(dev, sr_skb);
93
94 offset += (size + 1) & 0xfffe;
95 }
96
97 if (skb->len != offset) {
98 netdev_err(dev->net, "%s : Bad SKB Length %d\n", __func__,
99 skb->len);
100 return 0;
101 }
102
103 return 1;
104}
105
106static struct sk_buff *sr_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
107 gfp_t flags)
108{
109 int headroom = skb_headroom(skb);
110 int tailroom = skb_tailroom(skb);
111 u32 padbytes = 0xffff0000;
112 u32 packet_len;
113 int padlen;
114
115 padlen = ((skb->len + 4) % (dev->maxpacket - 1)) ? 0 : 4;
116
117 if ((!skb_cloned(skb)) && ((headroom + tailroom) >= (4 + padlen))) {
118 if ((headroom < 4) || (tailroom < padlen)) {
119 skb->data = memmove(skb->head + 4, skb->data,
120 skb->len);
121 skb_set_tail_pointer(skb, skb->len);
122 }
123 } else {
124 struct sk_buff *skb2;
125 skb2 = skb_copy_expand(skb, 4, padlen, flags);
126 dev_kfree_skb_any(skb);
127 skb = skb2;
128 if (!skb)
129 return NULL;
130 }
131
132 skb_push(skb, 4);
133 packet_len = (((skb->len - 4) ^ 0x0000ffff) << 16) + (skb->len - 4);
134 cpu_to_le32s(&packet_len);
135 skb_copy_to_linear_data(skb, &packet_len, sizeof(packet_len));
136
137 if (padlen) {
138 cpu_to_le32s(&padbytes);
139 memcpy(skb_tail_pointer(skb), &padbytes, sizeof(padbytes));
140 skb_put(skb, sizeof(padbytes));
141 }
142
143 return skb;
144}
145
146static void sr_status(struct usbnet *dev, struct urb *urb)
147{
148 struct sr9800_int_data *event;
149 int link;
150
151 if (urb->actual_length < 8)
152 return;
153
154 event = urb->transfer_buffer;
155 link = event->link & 0x01;
156 if (netif_carrier_ok(dev->net) != link) {
157 usbnet_link_change(dev, link, 1);
158 netdev_dbg(dev->net, "Link Status is: %d\n", link);
159 }
160
161 return;
162}
163
164static inline int sr_set_sw_mii(struct usbnet *dev)
165{
166 int ret;
167
168 ret = sr_write_cmd(dev, SR_CMD_SET_SW_MII, 0x0000, 0, 0, NULL);
169 if (ret < 0)
170 netdev_err(dev->net, "Failed to enable software MII access\n");
171 return ret;
172}
173
174static inline int sr_set_hw_mii(struct usbnet *dev)
175{
176 int ret;
177
178 ret = sr_write_cmd(dev, SR_CMD_SET_HW_MII, 0x0000, 0, 0, NULL);
179 if (ret < 0)
180 netdev_err(dev->net, "Failed to enable hardware MII access\n");
181 return ret;
182}
183
184static inline int sr_get_phy_addr(struct usbnet *dev)
185{
186 u8 buf[2];
187 int ret;
188
189 ret = sr_read_cmd(dev, SR_CMD_READ_PHY_ID, 0, 0, 2, buf);
190 if (ret < 0) {
191 netdev_err(dev->net, "%s : Error reading PHYID register:%02x\n",
192 __func__, ret);
193 goto out;
194 }
195 netdev_dbg(dev->net, "%s : returning 0x%04x\n", __func__,
196 *((__le16 *)buf));
197
198 ret = buf[1];
199
200out:
201 return ret;
202}
203
204static int sr_sw_reset(struct usbnet *dev, u8 flags)
205{
206 int ret;
207
208 ret = sr_write_cmd(dev, SR_CMD_SW_RESET, flags, 0, 0, NULL);
209 if (ret < 0)
210 netdev_err(dev->net, "Failed to send software reset:%02x\n",
211 ret);
212
213 return ret;
214}
215
216static u16 sr_read_rx_ctl(struct usbnet *dev)
217{
218 __le16 v;
219 int ret;
220
221 ret = sr_read_cmd(dev, SR_CMD_READ_RX_CTL, 0, 0, 2, &v);
222 if (ret < 0) {
223 netdev_err(dev->net, "Error reading RX_CTL register:%02x\n",
224 ret);
225 goto out;
226 }
227
228 ret = le16_to_cpu(v);
229out:
230 return ret;
231}
232
233static int sr_write_rx_ctl(struct usbnet *dev, u16 mode)
234{
235 int ret;
236
237 netdev_dbg(dev->net, "%s : mode = 0x%04x\n", __func__, mode);
238 ret = sr_write_cmd(dev, SR_CMD_WRITE_RX_CTL, mode, 0, 0, NULL);
239 if (ret < 0)
240 netdev_err(dev->net,
241 "Failed to write RX_CTL mode to 0x%04x:%02x\n",
242 mode, ret);
243
244 return ret;
245}
246
247static u16 sr_read_medium_status(struct usbnet *dev)
248{
249 __le16 v;
250 int ret;
251
252 ret = sr_read_cmd(dev, SR_CMD_READ_MEDIUM_STATUS, 0, 0, 2, &v);
253 if (ret < 0) {
254 netdev_err(dev->net,
255 "Error reading Medium Status register:%02x\n", ret);
256 return ret; /* TODO: callers not checking for error ret */
257 }
258
259 return le16_to_cpu(v);
260}
261
262static int sr_write_medium_mode(struct usbnet *dev, u16 mode)
263{
264 int ret;
265
266 netdev_dbg(dev->net, "%s : mode = 0x%04x\n", __func__, mode);
267 ret = sr_write_cmd(dev, SR_CMD_WRITE_MEDIUM_MODE, mode, 0, 0, NULL);
268 if (ret < 0)
269 netdev_err(dev->net,
270 "Failed to write Medium Mode mode to 0x%04x:%02x\n",
271 mode, ret);
272 return ret;
273}
274
275static int sr_write_gpio(struct usbnet *dev, u16 value, int sleep)
276{
277 int ret;
278
279 netdev_dbg(dev->net, "%s : value = 0x%04x\n", __func__, value);
280 ret = sr_write_cmd(dev, SR_CMD_WRITE_GPIOS, value, 0, 0, NULL);
281 if (ret < 0)
282 netdev_err(dev->net, "Failed to write GPIO value 0x%04x:%02x\n",
283 value, ret);
284 if (sleep)
285 msleep(sleep);
286
287 return ret;
288}
289
290/* SR9800 have a 16-bit RX_CTL value */
291static void sr_set_multicast(struct net_device *net)
292{
293 struct usbnet *dev = netdev_priv(net);
294 struct sr_data *data = (struct sr_data *)&dev->data;
295 u16 rx_ctl = SR_DEFAULT_RX_CTL;
296
297 if (net->flags & IFF_PROMISC) {
298 rx_ctl |= SR_RX_CTL_PRO;
299 } else if (net->flags & IFF_ALLMULTI ||
300 netdev_mc_count(net) > SR_MAX_MCAST) {
301 rx_ctl |= SR_RX_CTL_AMALL;
302 } else if (netdev_mc_empty(net)) {
303 /* just broadcast and directed */
304 } else {
305 /* We use the 20 byte dev->data
306 * for our 8 byte filter buffer
307 * to avoid allocating memory that
308 * is tricky to free later
309 */
310 struct netdev_hw_addr *ha;
311 u32 crc_bits;
312
313 memset(data->multi_filter, 0, SR_MCAST_FILTER_SIZE);
314
315 /* Build the multicast hash filter. */
316 netdev_for_each_mc_addr(ha, net) {
317 crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26;
318 data->multi_filter[crc_bits >> 3] |=
319 1 << (crc_bits & 7);
320 }
321
322 sr_write_cmd_async(dev, SR_CMD_WRITE_MULTI_FILTER, 0, 0,
323 SR_MCAST_FILTER_SIZE, data->multi_filter);
324
325 rx_ctl |= SR_RX_CTL_AM;
326 }
327
328 sr_write_cmd_async(dev, SR_CMD_WRITE_RX_CTL, rx_ctl, 0, 0, NULL);
329}
330
331static int sr_mdio_read(struct net_device *net, int phy_id, int loc)
332{
333 struct usbnet *dev = netdev_priv(net);
334 __le16 res;
335
336 mutex_lock(&dev->phy_mutex);
337 sr_set_sw_mii(dev);
338 sr_read_cmd(dev, SR_CMD_READ_MII_REG, phy_id, (__u16)loc, 2, &res);
339 sr_set_hw_mii(dev);
340 mutex_unlock(&dev->phy_mutex);
341
342 netdev_dbg(dev->net,
343 "%s : phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n", __func__,
344 phy_id, loc, le16_to_cpu(res));
345
346 return le16_to_cpu(res);
347}
348
349static void
350sr_mdio_write(struct net_device *net, int phy_id, int loc, int val)
351{
352 struct usbnet *dev = netdev_priv(net);
353 __le16 res = cpu_to_le16(val);
354
355 netdev_dbg(dev->net,
356 "%s : phy_id=0x%02x, loc=0x%02x, val=0x%04x\n", __func__,
357 phy_id, loc, val);
358 mutex_lock(&dev->phy_mutex);
359 sr_set_sw_mii(dev);
360 sr_write_cmd(dev, SR_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, &res);
361 sr_set_hw_mii(dev);
362 mutex_unlock(&dev->phy_mutex);
363}
364
365/* Get the PHY Identifier from the PHYSID1 & PHYSID2 MII registers */
366static u32 sr_get_phyid(struct usbnet *dev)
367{
368 int phy_reg;
369 u32 phy_id;
370 int i;
371
372 /* Poll for the rare case the FW or phy isn't ready yet. */
373 for (i = 0; i < 100; i++) {
374 phy_reg = sr_mdio_read(dev->net, dev->mii.phy_id, MII_PHYSID1);
375 if (phy_reg != 0 && phy_reg != 0xFFFF)
376 break;
377 mdelay(1);
378 }
379
380 if (phy_reg <= 0 || phy_reg == 0xFFFF)
381 return 0;
382
383 phy_id = (phy_reg & 0xffff) << 16;
384
385 phy_reg = sr_mdio_read(dev->net, dev->mii.phy_id, MII_PHYSID2);
386 if (phy_reg < 0)
387 return 0;
388
389 phy_id |= (phy_reg & 0xffff);
390
391 return phy_id;
392}
393
394static void
395sr_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
396{
397 struct usbnet *dev = netdev_priv(net);
398 u8 opt;
399
400 if (sr_read_cmd(dev, SR_CMD_READ_MONITOR_MODE, 0, 0, 1, &opt) < 0) {
401 wolinfo->supported = 0;
402 wolinfo->wolopts = 0;
403 return;
404 }
405 wolinfo->supported = WAKE_PHY | WAKE_MAGIC;
406 wolinfo->wolopts = 0;
407 if (opt & SR_MONITOR_LINK)
408 wolinfo->wolopts |= WAKE_PHY;
409 if (opt & SR_MONITOR_MAGIC)
410 wolinfo->wolopts |= WAKE_MAGIC;
411}
412
413static int
414sr_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
415{
416 struct usbnet *dev = netdev_priv(net);
417 u8 opt = 0;
418
419 if (wolinfo->wolopts & WAKE_PHY)
420 opt |= SR_MONITOR_LINK;
421 if (wolinfo->wolopts & WAKE_MAGIC)
422 opt |= SR_MONITOR_MAGIC;
423
424 if (sr_write_cmd(dev, SR_CMD_WRITE_MONITOR_MODE,
425 opt, 0, 0, NULL) < 0)
426 return -EINVAL;
427
428 return 0;
429}
430
431static int sr_get_eeprom_len(struct net_device *net)
432{
433 struct usbnet *dev = netdev_priv(net);
434 struct sr_data *data = (struct sr_data *)&dev->data;
435
436 return data->eeprom_len;
437}
438
439static int sr_get_eeprom(struct net_device *net,
440 struct ethtool_eeprom *eeprom, u8 *data)
441{
442 struct usbnet *dev = netdev_priv(net);
443 __le16 *ebuf = (__le16 *)data;
444 int ret;
445 int i;
446
447 /* Crude hack to ensure that we don't overwrite memory
448 * if an odd length is supplied
449 */
450 if (eeprom->len % 2)
451 return -EINVAL;
452
453 eeprom->magic = SR_EEPROM_MAGIC;
454
455 /* sr9800 returns 2 bytes from eeprom on read */
456 for (i = 0; i < eeprom->len / 2; i++) {
457 ret = sr_read_cmd(dev, SR_CMD_READ_EEPROM, eeprom->offset + i,
458 0, 2, &ebuf[i]);
459 if (ret < 0)
460 return -EINVAL;
461 }
462 return 0;
463}
464
465static void sr_get_drvinfo(struct net_device *net,
466 struct ethtool_drvinfo *info)
467{
468 struct usbnet *dev = netdev_priv(net);
469 struct sr_data *data = (struct sr_data *)&dev->data;
470
471 /* Inherit standard device info */
472 usbnet_get_drvinfo(net, info);
473 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
474 strncpy(info->version, DRIVER_VERSION, sizeof(info->version));
475 info->eedump_len = data->eeprom_len;
476}
477
478static u32 sr_get_link(struct net_device *net)
479{
480 struct usbnet *dev = netdev_priv(net);
481
482 return mii_link_ok(&dev->mii);
483}
484
485static int sr_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
486{
487 struct usbnet *dev = netdev_priv(net);
488
489 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
490}
491
492static int sr_set_mac_address(struct net_device *net, void *p)
493{
494 struct usbnet *dev = netdev_priv(net);
495 struct sr_data *data = (struct sr_data *)&dev->data;
496 struct sockaddr *addr = p;
497
498 if (netif_running(net))
499 return -EBUSY;
500 if (!is_valid_ether_addr(addr->sa_data))
501 return -EADDRNOTAVAIL;
502
503 memcpy(net->dev_addr, addr->sa_data, ETH_ALEN);
504
505 /* We use the 20 byte dev->data
506 * for our 6 byte mac buffer
507 * to avoid allocating memory that
508 * is tricky to free later
509 */
510 memcpy(data->mac_addr, addr->sa_data, ETH_ALEN);
511 sr_write_cmd_async(dev, SR_CMD_WRITE_NODE_ID, 0, 0, ETH_ALEN,
512 data->mac_addr);
513
514 return 0;
515}
516
517static const struct ethtool_ops sr9800_ethtool_ops = {
518 .get_drvinfo = sr_get_drvinfo,
519 .get_link = sr_get_link,
520 .get_msglevel = usbnet_get_msglevel,
521 .set_msglevel = usbnet_set_msglevel,
522 .get_wol = sr_get_wol,
523 .set_wol = sr_set_wol,
524 .get_eeprom_len = sr_get_eeprom_len,
525 .get_eeprom = sr_get_eeprom,
526 .get_settings = usbnet_get_settings,
527 .set_settings = usbnet_set_settings,
528 .nway_reset = usbnet_nway_reset,
529};
530
531static int sr9800_link_reset(struct usbnet *dev)
532{
533 struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
534 u16 mode;
535
536 mii_check_media(&dev->mii, 1, 1);
537 mii_ethtool_gset(&dev->mii, &ecmd);
538 mode = SR9800_MEDIUM_DEFAULT;
539
540 if (ethtool_cmd_speed(&ecmd) != SPEED_100)
541 mode &= ~SR_MEDIUM_PS;
542
543 if (ecmd.duplex != DUPLEX_FULL)
544 mode &= ~SR_MEDIUM_FD;
545
546 netdev_dbg(dev->net, "%s : speed: %u duplex: %d mode: 0x%04x\n",
547 __func__, ethtool_cmd_speed(&ecmd), ecmd.duplex, mode);
548
549 sr_write_medium_mode(dev, mode);
550
551 return 0;
552}
553
554
555static int sr9800_set_default_mode(struct usbnet *dev)
556{
557 u16 rx_ctl;
558 int ret;
559
560 sr_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET);
561 sr_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE,
562 ADVERTISE_ALL | ADVERTISE_CSMA);
563 mii_nway_restart(&dev->mii);
564
565 ret = sr_write_medium_mode(dev, SR9800_MEDIUM_DEFAULT);
566 if (ret < 0)
567 goto out;
568
569 ret = sr_write_cmd(dev, SR_CMD_WRITE_IPG012,
570 SR9800_IPG0_DEFAULT | SR9800_IPG1_DEFAULT,
571 SR9800_IPG2_DEFAULT, 0, NULL);
572 if (ret < 0) {
573 netdev_dbg(dev->net, "Write IPG,IPG1,IPG2 failed: %d\n", ret);
574 goto out;
575 }
576
577 /* Set RX_CTL to default values with 2k buffer, and enable cactus */
578 ret = sr_write_rx_ctl(dev, SR_DEFAULT_RX_CTL);
579 if (ret < 0)
580 goto out;
581
582 rx_ctl = sr_read_rx_ctl(dev);
583 netdev_dbg(dev->net, "RX_CTL is 0x%04x after all initializations\n",
584 rx_ctl);
585
586 rx_ctl = sr_read_medium_status(dev);
587 netdev_dbg(dev->net, "Medium Status:0x%04x after all initializations\n",
588 rx_ctl);
589
590 return 0;
591out:
592 return ret;
593}
594
595static int sr9800_reset(struct usbnet *dev)
596{
597 struct sr_data *data = (struct sr_data *)&dev->data;
598 int ret, embd_phy;
599 u16 rx_ctl;
600
601 ret = sr_write_gpio(dev,
602 SR_GPIO_RSE | SR_GPIO_GPO_2 | SR_GPIO_GPO2EN, 5);
603 if (ret < 0)
604 goto out;
605
606 embd_phy = ((sr_get_phy_addr(dev) & 0x1f) == 0x10 ? 1 : 0);
607
608 ret = sr_write_cmd(dev, SR_CMD_SW_PHY_SELECT, embd_phy, 0, 0, NULL);
609 if (ret < 0) {
610 netdev_dbg(dev->net, "Select PHY #1 failed: %d\n", ret);
611 goto out;
612 }
613
614 ret = sr_sw_reset(dev, SR_SWRESET_IPPD | SR_SWRESET_PRL);
615 if (ret < 0)
616 goto out;
617
618 msleep(150);
619
620 ret = sr_sw_reset(dev, SR_SWRESET_CLEAR);
621 if (ret < 0)
622 goto out;
623
624 msleep(150);
625
626 if (embd_phy) {
627 ret = sr_sw_reset(dev, SR_SWRESET_IPRL);
628 if (ret < 0)
629 goto out;
630 } else {
631 ret = sr_sw_reset(dev, SR_SWRESET_PRTE);
632 if (ret < 0)
633 goto out;
634 }
635
636 msleep(150);
637 rx_ctl = sr_read_rx_ctl(dev);
638 netdev_dbg(dev->net, "RX_CTL is 0x%04x after software reset\n", rx_ctl);
639 ret = sr_write_rx_ctl(dev, 0x0000);
640 if (ret < 0)
641 goto out;
642
643 rx_ctl = sr_read_rx_ctl(dev);
644 netdev_dbg(dev->net, "RX_CTL is 0x%04x setting to 0x0000\n", rx_ctl);
645
646 ret = sr_sw_reset(dev, SR_SWRESET_PRL);
647 if (ret < 0)
648 goto out;
649
650 msleep(150);
651
652 ret = sr_sw_reset(dev, SR_SWRESET_IPRL | SR_SWRESET_PRL);
653 if (ret < 0)
654 goto out;
655
656 msleep(150);
657
658 ret = sr9800_set_default_mode(dev);
659 if (ret < 0)
660 goto out;
661
662 /* Rewrite MAC address */
663 memcpy(data->mac_addr, dev->net->dev_addr, ETH_ALEN);
664 ret = sr_write_cmd(dev, SR_CMD_WRITE_NODE_ID, 0, 0, ETH_ALEN,
665 data->mac_addr);
666 if (ret < 0)
667 goto out;
668
669 return 0;
670
671out:
672 return ret;
673}
674
675static const struct net_device_ops sr9800_netdev_ops = {
676 .ndo_open = usbnet_open,
677 .ndo_stop = usbnet_stop,
678 .ndo_start_xmit = usbnet_start_xmit,
679 .ndo_tx_timeout = usbnet_tx_timeout,
680 .ndo_change_mtu = usbnet_change_mtu,
681 .ndo_set_mac_address = sr_set_mac_address,
682 .ndo_validate_addr = eth_validate_addr,
683 .ndo_do_ioctl = sr_ioctl,
684 .ndo_set_rx_mode = sr_set_multicast,
685};
686
687static int sr9800_phy_powerup(struct usbnet *dev)
688{
689 int ret;
690
691 /* set the embedded Ethernet PHY in power-down state */
692 ret = sr_sw_reset(dev, SR_SWRESET_IPPD | SR_SWRESET_IPRL);
693 if (ret < 0) {
694 netdev_err(dev->net, "Failed to power down PHY : %d\n", ret);
695 return ret;
696 }
697 msleep(20);
698
699 /* set the embedded Ethernet PHY in power-up state */
700 ret = sr_sw_reset(dev, SR_SWRESET_IPRL);
701 if (ret < 0) {
702 netdev_err(dev->net, "Failed to reset PHY: %d\n", ret);
703 return ret;
704 }
705 msleep(600);
706
707 /* set the embedded Ethernet PHY in reset state */
708 ret = sr_sw_reset(dev, SR_SWRESET_CLEAR);
709 if (ret < 0) {
710 netdev_err(dev->net, "Failed to power up PHY: %d\n", ret);
711 return ret;
712 }
713 msleep(20);
714
715 /* set the embedded Ethernet PHY in power-up state */
716 ret = sr_sw_reset(dev, SR_SWRESET_IPRL);
717 if (ret < 0) {
718 netdev_err(dev->net, "Failed to reset PHY: %d\n", ret);
719 return ret;
720 }
721
722 return 0;
723}
724
725static int sr9800_bind(struct usbnet *dev, struct usb_interface *intf)
726{
727 struct sr_data *data = (struct sr_data *)&dev->data;
728 u16 led01_mux, led23_mux;
729 int ret, embd_phy;
730 u32 phyid;
731 u16 rx_ctl;
732
733 data->eeprom_len = SR9800_EEPROM_LEN;
734
735 usbnet_get_endpoints(dev, intf);
736
737 /* LED Setting Rule :
738 * AABB:CCDD
739 * AA : MFA0(LED0)
740 * BB : MFA1(LED1)
741 * CC : MFA2(LED2), Reserved for SR9800
742 * DD : MFA3(LED3), Reserved for SR9800
743 */
744 led01_mux = (SR_LED_MUX_LINK_ACTIVE << 8) | SR_LED_MUX_LINK;
745 led23_mux = (SR_LED_MUX_LINK_ACTIVE << 8) | SR_LED_MUX_TX_ACTIVE;
746 ret = sr_write_cmd(dev, SR_CMD_LED_MUX, led01_mux, led23_mux, 0, NULL);
747 if (ret < 0) {
748 netdev_err(dev->net, "set LINK LED failed : %d\n", ret);
749 goto out;
750 }
751
752 /* Get the MAC address */
753 ret = sr_read_cmd(dev, SR_CMD_READ_NODE_ID, 0, 0, ETH_ALEN,
754 dev->net->dev_addr);
755 if (ret < 0) {
756 netdev_dbg(dev->net, "Failed to read MAC address: %d\n", ret);
757 return ret;
758 }
759 netdev_dbg(dev->net, "mac addr : %pM\n", dev->net->dev_addr);
760
761 /* Initialize MII structure */
762 dev->mii.dev = dev->net;
763 dev->mii.mdio_read = sr_mdio_read;
764 dev->mii.mdio_write = sr_mdio_write;
765 dev->mii.phy_id_mask = 0x1f;
766 dev->mii.reg_num_mask = 0x1f;
767 dev->mii.phy_id = sr_get_phy_addr(dev);
768
769 dev->net->netdev_ops = &sr9800_netdev_ops;
770 dev->net->ethtool_ops = &sr9800_ethtool_ops;
771
772 embd_phy = ((dev->mii.phy_id & 0x1f) == 0x10 ? 1 : 0);
773 /* Reset the PHY to normal operation mode */
774 ret = sr_write_cmd(dev, SR_CMD_SW_PHY_SELECT, embd_phy, 0, 0, NULL);
775 if (ret < 0) {
776 netdev_dbg(dev->net, "Select PHY #1 failed: %d\n", ret);
777 return ret;
778 }
779
780 /* Init PHY routine */
781 ret = sr9800_phy_powerup(dev);
782 if (ret < 0)
783 goto out;
784
785 rx_ctl = sr_read_rx_ctl(dev);
786 netdev_dbg(dev->net, "RX_CTL is 0x%04x after software reset\n", rx_ctl);
787 ret = sr_write_rx_ctl(dev, 0x0000);
788 if (ret < 0)
789 goto out;
790
791 rx_ctl = sr_read_rx_ctl(dev);
792 netdev_dbg(dev->net, "RX_CTL is 0x%04x setting to 0x0000\n", rx_ctl);
793
794 /* Read PHYID register *AFTER* the PHY was reset properly */
795 phyid = sr_get_phyid(dev);
796 netdev_dbg(dev->net, "PHYID=0x%08x\n", phyid);
797
798 /* medium mode setting */
799 ret = sr9800_set_default_mode(dev);
800 if (ret < 0)
801 goto out;
802
803 if (dev->udev->speed == USB_SPEED_HIGH) {
804 ret = sr_write_cmd(dev, SR_CMD_BULKIN_SIZE,
805 SR9800_BULKIN_SIZE[SR9800_MAX_BULKIN_4K].byte_cnt,
806 SR9800_BULKIN_SIZE[SR9800_MAX_BULKIN_4K].threshold,
807 0, NULL);
808 if (ret < 0) {
809 netdev_err(dev->net, "Reset RX_CTL failed: %d\n", ret);
810 goto out;
811 }
812 dev->rx_urb_size =
813 SR9800_BULKIN_SIZE[SR9800_MAX_BULKIN_4K].size;
814 } else {
815 ret = sr_write_cmd(dev, SR_CMD_BULKIN_SIZE,
816 SR9800_BULKIN_SIZE[SR9800_MAX_BULKIN_2K].byte_cnt,
817 SR9800_BULKIN_SIZE[SR9800_MAX_BULKIN_2K].threshold,
818 0, NULL);
819 if (ret < 0) {
820 netdev_err(dev->net, "Reset RX_CTL failed: %d\n", ret);
821 goto out;
822 }
823 dev->rx_urb_size =
824 SR9800_BULKIN_SIZE[SR9800_MAX_BULKIN_2K].size;
825 }
826 netdev_dbg(dev->net, "%s : setting rx_urb_size with : %ld\n", __func__,
827 dev->rx_urb_size);
828 return 0;
829
830out:
831 return ret;
832}
833
834static const struct driver_info sr9800_driver_info = {
835 .description = "CoreChip SR9800 USB 2.0 Ethernet",
836 .bind = sr9800_bind,
837 .status = sr_status,
838 .link_reset = sr9800_link_reset,
839 .reset = sr9800_reset,
840 .flags = DRIVER_FLAG,
841 .rx_fixup = sr_rx_fixup,
842 .tx_fixup = sr_tx_fixup,
843};
844
845static const struct usb_device_id products[] = {
846 {
847 USB_DEVICE(0x0fe6, 0x9800), /* SR9800 Device */
848 .driver_info = (unsigned long) &sr9800_driver_info,
849 },
850 {}, /* END */
851};
852
853MODULE_DEVICE_TABLE(usb, products);
854
855static struct usb_driver sr_driver = {
856 .name = DRIVER_NAME,
857 .id_table = products,
858 .probe = usbnet_probe,
859 .suspend = usbnet_suspend,
860 .resume = usbnet_resume,
861 .disconnect = usbnet_disconnect,
862 .supports_autosuspend = 1,
863};
864
865module_usb_driver(sr_driver);
866
867MODULE_AUTHOR("Liu Junliang <liujunliang_ljl@163.com");
868MODULE_VERSION(DRIVER_VERSION);
869MODULE_DESCRIPTION("SR9800 USB 2.0 USB2NET Dev : http://www.corechip-sz.com");
870MODULE_LICENSE("GPL");
diff --git a/drivers/net/usb/sr9800.h b/drivers/net/usb/sr9800.h
new file mode 100644
index 000000000000..18f670251275
--- /dev/null
+++ b/drivers/net/usb/sr9800.h
@@ -0,0 +1,202 @@
1/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
2 *
3 * Author : Liu Junliang <liujunliang_ljl@163.com>
4 *
5 * This file is licensed under the terms of the GNU General Public License
6 * version 2. This program is licensed "as is" without any warranty of any
7 * kind, whether express or implied.
8 */
9
10#ifndef _SR9800_H
11#define _SR9800_H
12
13/* SR9800 spec. command table on Linux Platform */
14
15/* command : Software Station Management Control Reg */
16#define SR_CMD_SET_SW_MII 0x06
17/* command : PHY Read Reg */
18#define SR_CMD_READ_MII_REG 0x07
19/* command : PHY Write Reg */
20#define SR_CMD_WRITE_MII_REG 0x08
21/* command : Hardware Station Management Control Reg */
22#define SR_CMD_SET_HW_MII 0x0a
23/* command : SROM Read Reg */
24#define SR_CMD_READ_EEPROM 0x0b
25/* command : SROM Write Reg */
26#define SR_CMD_WRITE_EEPROM 0x0c
27/* command : SROM Write Enable Reg */
28#define SR_CMD_WRITE_ENABLE 0x0d
29/* command : SROM Write Disable Reg */
30#define SR_CMD_WRITE_DISABLE 0x0e
31/* command : RX Control Read Reg */
32#define SR_CMD_READ_RX_CTL 0x0f
33#define SR_RX_CTL_PRO (1 << 0)
34#define SR_RX_CTL_AMALL (1 << 1)
35#define SR_RX_CTL_SEP (1 << 2)
36#define SR_RX_CTL_AB (1 << 3)
37#define SR_RX_CTL_AM (1 << 4)
38#define SR_RX_CTL_AP (1 << 5)
39#define SR_RX_CTL_ARP (1 << 6)
40#define SR_RX_CTL_SO (1 << 7)
41#define SR_RX_CTL_RH1M (1 << 8)
42#define SR_RX_CTL_RH2M (1 << 9)
43#define SR_RX_CTL_RH3M (1 << 10)
44/* command : RX Control Write Reg */
45#define SR_CMD_WRITE_RX_CTL 0x10
46/* command : IPG0/IPG1/IPG2 Control Read Reg */
47#define SR_CMD_READ_IPG012 0x11
48/* command : IPG0/IPG1/IPG2 Control Write Reg */
49#define SR_CMD_WRITE_IPG012 0x12
50/* command : Node ID Read Reg */
51#define SR_CMD_READ_NODE_ID 0x13
52/* command : Node ID Write Reg */
53#define SR_CMD_WRITE_NODE_ID 0x14
54/* command : Multicast Filter Array Read Reg */
55#define SR_CMD_READ_MULTI_FILTER 0x15
56/* command : Multicast Filter Array Write Reg */
57#define SR_CMD_WRITE_MULTI_FILTER 0x16
58/* command : Eth/HomePNA PHY Address Reg */
59#define SR_CMD_READ_PHY_ID 0x19
60/* command : Medium Status Read Reg */
61#define SR_CMD_READ_MEDIUM_STATUS 0x1a
62#define SR_MONITOR_LINK (1 << 1)
63#define SR_MONITOR_MAGIC (1 << 2)
64#define SR_MONITOR_HSFS (1 << 4)
65/* command : Medium Status Write Reg */
66#define SR_CMD_WRITE_MEDIUM_MODE 0x1b
67#define SR_MEDIUM_GM (1 << 0)
68#define SR_MEDIUM_FD (1 << 1)
69#define SR_MEDIUM_AC (1 << 2)
70#define SR_MEDIUM_ENCK (1 << 3)
71#define SR_MEDIUM_RFC (1 << 4)
72#define SR_MEDIUM_TFC (1 << 5)
73#define SR_MEDIUM_JFE (1 << 6)
74#define SR_MEDIUM_PF (1 << 7)
75#define SR_MEDIUM_RE (1 << 8)
76#define SR_MEDIUM_PS (1 << 9)
77#define SR_MEDIUM_RSV (1 << 10)
78#define SR_MEDIUM_SBP (1 << 11)
79#define SR_MEDIUM_SM (1 << 12)
80/* command : Monitor Mode Status Read Reg */
81#define SR_CMD_READ_MONITOR_MODE 0x1c
82/* command : Monitor Mode Status Write Reg */
83#define SR_CMD_WRITE_MONITOR_MODE 0x1d
84/* command : GPIO Status Read Reg */
85#define SR_CMD_READ_GPIOS 0x1e
86#define SR_GPIO_GPO0EN (1 << 0) /* GPIO0 Output enable */
87#define SR_GPIO_GPO_0 (1 << 1) /* GPIO0 Output value */
88#define SR_GPIO_GPO1EN (1 << 2) /* GPIO1 Output enable */
89#define SR_GPIO_GPO_1 (1 << 3) /* GPIO1 Output value */
90#define SR_GPIO_GPO2EN (1 << 4) /* GPIO2 Output enable */
91#define SR_GPIO_GPO_2 (1 << 5) /* GPIO2 Output value */
92#define SR_GPIO_RESERVED (1 << 6) /* Reserved */
93#define SR_GPIO_RSE (1 << 7) /* Reload serial EEPROM */
94/* command : GPIO Status Write Reg */
95#define SR_CMD_WRITE_GPIOS 0x1f
96/* command : Eth PHY Power and Reset Control Reg */
97#define SR_CMD_SW_RESET 0x20
98#define SR_SWRESET_CLEAR 0x00
99#define SR_SWRESET_RR (1 << 0)
100#define SR_SWRESET_RT (1 << 1)
101#define SR_SWRESET_PRTE (1 << 2)
102#define SR_SWRESET_PRL (1 << 3)
103#define SR_SWRESET_BZ (1 << 4)
104#define SR_SWRESET_IPRL (1 << 5)
105#define SR_SWRESET_IPPD (1 << 6)
106/* command : Software Interface Selection Status Read Reg */
107#define SR_CMD_SW_PHY_STATUS 0x21
108/* command : Software Interface Selection Status Write Reg */
109#define SR_CMD_SW_PHY_SELECT 0x22
110/* command : BULK in Buffer Size Reg */
111#define SR_CMD_BULKIN_SIZE 0x2A
112/* command : LED_MUX Control Reg */
113#define SR_CMD_LED_MUX 0x70
114#define SR_LED_MUX_TX_ACTIVE (1 << 0)
115#define SR_LED_MUX_RX_ACTIVE (1 << 1)
116#define SR_LED_MUX_COLLISION (1 << 2)
117#define SR_LED_MUX_DUP_COL (1 << 3)
118#define SR_LED_MUX_DUP (1 << 4)
119#define SR_LED_MUX_SPEED (1 << 5)
120#define SR_LED_MUX_LINK_ACTIVE (1 << 6)
121#define SR_LED_MUX_LINK (1 << 7)
122
123/* Register Access Flags */
124#define SR_REQ_RD_REG (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE)
125#define SR_REQ_WR_REG (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE)
126
127/* Multicast Filter Array size & Max Number */
128#define SR_MCAST_FILTER_SIZE 8
129#define SR_MAX_MCAST 64
130
131/* IPG0/1/2 Default Value */
132#define SR9800_IPG0_DEFAULT 0x15
133#define SR9800_IPG1_DEFAULT 0x0c
134#define SR9800_IPG2_DEFAULT 0x12
135
136/* Medium Status Default Mode */
137#define SR9800_MEDIUM_DEFAULT \
138 (SR_MEDIUM_FD | SR_MEDIUM_RFC | \
139 SR_MEDIUM_TFC | SR_MEDIUM_PS | \
140 SR_MEDIUM_AC | SR_MEDIUM_RE)
141
142/* RX Control Default Setting */
143#define SR_DEFAULT_RX_CTL \
144 (SR_RX_CTL_SO | SR_RX_CTL_AB | SR_RX_CTL_RH1M)
145
146/* EEPROM Magic Number & EEPROM Size */
147#define SR_EEPROM_MAGIC 0xdeadbeef
148#define SR9800_EEPROM_LEN 0xff
149
150/* SR9800 Driver Version and Driver Name */
151#define DRIVER_VERSION "11-Nov-2013"
152#define DRIVER_NAME "CoreChips"
153#define DRIVER_FLAG \
154 (FLAG_ETHER | FLAG_FRAMING_AX | FLAG_LINK_INTR | FLAG_MULTI_PACKET)
155
156/* SR9800 BULKIN Buffer Size */
157#define SR9800_MAX_BULKIN_2K 0
158#define SR9800_MAX_BULKIN_4K 1
159#define SR9800_MAX_BULKIN_6K 2
160#define SR9800_MAX_BULKIN_8K 3
161#define SR9800_MAX_BULKIN_16K 4
162#define SR9800_MAX_BULKIN_20K 5
163#define SR9800_MAX_BULKIN_24K 6
164#define SR9800_MAX_BULKIN_32K 7
165
166struct {unsigned short size, byte_cnt, threshold; } SR9800_BULKIN_SIZE[] = {
167 /* 2k */
168 {2048, 0x8000, 0x8001},
169 /* 4k */
170 {4096, 0x8100, 0x8147},
171 /* 6k */
172 {6144, 0x8200, 0x81EB},
173 /* 8k */
174 {8192, 0x8300, 0x83D7},
175 /* 16 */
176 {16384, 0x8400, 0x851E},
177 /* 20k */
178 {20480, 0x8500, 0x8666},
179 /* 24k */
180 {24576, 0x8600, 0x87AE},
181 /* 32k */
182 {32768, 0x8700, 0x8A3D},
183};
184
185/* This structure cannot exceed sizeof(unsigned long [5]) AKA 20 bytes */
186struct sr_data {
187 u8 multi_filter[SR_MCAST_FILTER_SIZE];
188 u8 mac_addr[ETH_ALEN];
189 u8 phymode;
190 u8 ledmode;
191 u8 eeprom_len;
192};
193
194struct sr9800_int_data {
195 __le16 res1;
196 u8 link;
197 __le16 res2;
198 u8 status;
199 __le16 res3;
200} __packed;
201
202#endif /* _SR9800_H */
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 026a313c2d2d..b0f705c2378f 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -469,7 +469,6 @@ static inline struct hlist_head *vxlan_fdb_head(struct vxlan_dev *vxlan,
469/* Look up Ethernet address in forwarding table */ 469/* Look up Ethernet address in forwarding table */
470static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan, 470static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan,
471 const u8 *mac) 471 const u8 *mac)
472
473{ 472{
474 struct hlist_head *head = vxlan_fdb_head(vxlan, mac); 473 struct hlist_head *head = vxlan_fdb_head(vxlan, mac);
475 struct vxlan_fdb *f; 474 struct vxlan_fdb *f;
@@ -596,10 +595,8 @@ static struct sk_buff **vxlan_gro_receive(struct sk_buff **head, struct sk_buff
596 NAPI_GRO_CB(p)->same_flow = 0; 595 NAPI_GRO_CB(p)->same_flow = 0;
597 continue; 596 continue;
598 } 597 }
599 goto found;
600 } 598 }
601 599
602found:
603 type = eh->h_proto; 600 type = eh->h_proto;
604 601
605 rcu_read_lock(); 602 rcu_read_lock();
diff --git a/drivers/net/wan/dlci.c b/drivers/net/wan/dlci.c
index 0d1c7592efa0..19f7cb2cdef3 100644
--- a/drivers/net/wan/dlci.c
+++ b/drivers/net/wan/dlci.c
@@ -71,12 +71,9 @@ static int dlci_header(struct sk_buff *skb, struct net_device *dev,
71 const void *saddr, unsigned len) 71 const void *saddr, unsigned len)
72{ 72{
73 struct frhdr hdr; 73 struct frhdr hdr;
74 struct dlci_local *dlp;
75 unsigned int hlen; 74 unsigned int hlen;
76 char *dest; 75 char *dest;
77 76
78 dlp = netdev_priv(dev);
79
80 hdr.control = FRAD_I_UI; 77 hdr.control = FRAD_I_UI;
81 switch (type) 78 switch (type)
82 { 79 {
@@ -107,11 +104,9 @@ static int dlci_header(struct sk_buff *skb, struct net_device *dev,
107 104
108static void dlci_receive(struct sk_buff *skb, struct net_device *dev) 105static void dlci_receive(struct sk_buff *skb, struct net_device *dev)
109{ 106{
110 struct dlci_local *dlp;
111 struct frhdr *hdr; 107 struct frhdr *hdr;
112 int process, header; 108 int process, header;
113 109
114 dlp = netdev_priv(dev);
115 if (!pskb_may_pull(skb, sizeof(*hdr))) { 110 if (!pskb_may_pull(skb, sizeof(*hdr))) {
116 netdev_notice(dev, "invalid data no header\n"); 111 netdev_notice(dev, "invalid data no header\n");
117 dev->stats.rx_errors++; 112 dev->stats.rx_errors++;
diff --git a/drivers/net/wireless/ath/ar5523/ar5523.c b/drivers/net/wireless/ath/ar5523/ar5523.c
index 8aa20df55e50..507d9a9ee69a 100644
--- a/drivers/net/wireless/ath/ar5523/ar5523.c
+++ b/drivers/net/wireless/ath/ar5523/ar5523.c
@@ -1764,7 +1764,7 @@ static struct usb_device_id ar5523_id_table[] = {
1764 AR5523_DEVICE_UG(0x07d1, 0x3a07), /* D-Link / WUA-2340 rev A1 */ 1764 AR5523_DEVICE_UG(0x07d1, 0x3a07), /* D-Link / WUA-2340 rev A1 */
1765 AR5523_DEVICE_UG(0x1690, 0x0712), /* Gigaset / AR5523 */ 1765 AR5523_DEVICE_UG(0x1690, 0x0712), /* Gigaset / AR5523 */
1766 AR5523_DEVICE_UG(0x1690, 0x0710), /* Gigaset / SMCWUSBTG */ 1766 AR5523_DEVICE_UG(0x1690, 0x0710), /* Gigaset / SMCWUSBTG */
1767 AR5523_DEVICE_UG(0x129b, 0x160c), /* Gigaset / USB stick 108 1767 AR5523_DEVICE_UG(0x129b, 0x160b), /* Gigaset / USB stick 108
1768 (CyberTAN Technology) */ 1768 (CyberTAN Technology) */
1769 AR5523_DEVICE_UG(0x16ab, 0x7801), /* Globalsun / AR5523_1 */ 1769 AR5523_DEVICE_UG(0x16ab, 0x7801), /* Globalsun / AR5523_1 */
1770 AR5523_DEVICE_UX(0x16ab, 0x7811), /* Globalsun / AR5523_2 */ 1770 AR5523_DEVICE_UX(0x16ab, 0x7811), /* Globalsun / AR5523_2 */
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
index 25243cbc07f0..b8daff78b9d1 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
@@ -5065,6 +5065,10 @@ static u16 ar9003_hw_get_max_edge_power(struct ar9300_eeprom *eep,
5065 break; 5065 break;
5066 } 5066 }
5067 } 5067 }
5068
5069 if (is2GHz && !twiceMaxEdgePower)
5070 twiceMaxEdgePower = 60;
5071
5068 return twiceMaxEdgePower; 5072 return twiceMaxEdgePower;
5069} 5073}
5070 5074
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index 58da3468d1f0..99a203174f45 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -262,6 +262,8 @@ enum tid_aggr_state {
262struct ath9k_htc_sta { 262struct ath9k_htc_sta {
263 u8 index; 263 u8 index;
264 enum tid_aggr_state tid_state[ATH9K_HTC_MAX_TID]; 264 enum tid_aggr_state tid_state[ATH9K_HTC_MAX_TID];
265 struct work_struct rc_update_work;
266 struct ath9k_htc_priv *htc_priv;
265}; 267};
266 268
267#define ATH9K_HTC_RXBUF 256 269#define ATH9K_HTC_RXBUF 256
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index f4e1de20d99c..c57d6b859c04 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -34,6 +34,10 @@ static int ath9k_htc_btcoex_enable;
34module_param_named(btcoex_enable, ath9k_htc_btcoex_enable, int, 0444); 34module_param_named(btcoex_enable, ath9k_htc_btcoex_enable, int, 0444);
35MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); 35MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
36 36
37static int ath9k_ps_enable;
38module_param_named(ps_enable, ath9k_ps_enable, int, 0444);
39MODULE_PARM_DESC(ps_enable, "Enable WLAN PowerSave");
40
37#define CHAN2G(_freq, _idx) { \ 41#define CHAN2G(_freq, _idx) { \
38 .center_freq = (_freq), \ 42 .center_freq = (_freq), \
39 .hw_value = (_idx), \ 43 .hw_value = (_idx), \
@@ -725,12 +729,14 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
725 IEEE80211_HW_SPECTRUM_MGMT | 729 IEEE80211_HW_SPECTRUM_MGMT |
726 IEEE80211_HW_HAS_RATE_CONTROL | 730 IEEE80211_HW_HAS_RATE_CONTROL |
727 IEEE80211_HW_RX_INCLUDES_FCS | 731 IEEE80211_HW_RX_INCLUDES_FCS |
728 IEEE80211_HW_SUPPORTS_PS |
729 IEEE80211_HW_PS_NULLFUNC_STACK | 732 IEEE80211_HW_PS_NULLFUNC_STACK |
730 IEEE80211_HW_REPORTS_TX_ACK_STATUS | 733 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
731 IEEE80211_HW_MFP_CAPABLE | 734 IEEE80211_HW_MFP_CAPABLE |
732 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING; 735 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING;
733 736
737 if (ath9k_ps_enable)
738 hw->flags |= IEEE80211_HW_SUPPORTS_PS;
739
734 hw->wiphy->interface_modes = 740 hw->wiphy->interface_modes =
735 BIT(NL80211_IFTYPE_STATION) | 741 BIT(NL80211_IFTYPE_STATION) |
736 BIT(NL80211_IFTYPE_ADHOC) | 742 BIT(NL80211_IFTYPE_ADHOC) |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index 608d739d1378..c9254a61ca52 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1270,18 +1270,50 @@ static void ath9k_htc_configure_filter(struct ieee80211_hw *hw,
1270 mutex_unlock(&priv->mutex); 1270 mutex_unlock(&priv->mutex);
1271} 1271}
1272 1272
1273static void ath9k_htc_sta_rc_update_work(struct work_struct *work)
1274{
1275 struct ath9k_htc_sta *ista =
1276 container_of(work, struct ath9k_htc_sta, rc_update_work);
1277 struct ieee80211_sta *sta =
1278 container_of((void *)ista, struct ieee80211_sta, drv_priv);
1279 struct ath9k_htc_priv *priv = ista->htc_priv;
1280 struct ath_common *common = ath9k_hw_common(priv->ah);
1281 struct ath9k_htc_target_rate trate;
1282
1283 mutex_lock(&priv->mutex);
1284 ath9k_htc_ps_wakeup(priv);
1285
1286 memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
1287 ath9k_htc_setup_rate(priv, sta, &trate);
1288 if (!ath9k_htc_send_rate_cmd(priv, &trate))
1289 ath_dbg(common, CONFIG,
1290 "Supported rates for sta: %pM updated, rate caps: 0x%X\n",
1291 sta->addr, be32_to_cpu(trate.capflags));
1292 else
1293 ath_dbg(common, CONFIG,
1294 "Unable to update supported rates for sta: %pM\n",
1295 sta->addr);
1296
1297 ath9k_htc_ps_restore(priv);
1298 mutex_unlock(&priv->mutex);
1299}
1300
1273static int ath9k_htc_sta_add(struct ieee80211_hw *hw, 1301static int ath9k_htc_sta_add(struct ieee80211_hw *hw,
1274 struct ieee80211_vif *vif, 1302 struct ieee80211_vif *vif,
1275 struct ieee80211_sta *sta) 1303 struct ieee80211_sta *sta)
1276{ 1304{
1277 struct ath9k_htc_priv *priv = hw->priv; 1305 struct ath9k_htc_priv *priv = hw->priv;
1306 struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv;
1278 int ret; 1307 int ret;
1279 1308
1280 mutex_lock(&priv->mutex); 1309 mutex_lock(&priv->mutex);
1281 ath9k_htc_ps_wakeup(priv); 1310 ath9k_htc_ps_wakeup(priv);
1282 ret = ath9k_htc_add_station(priv, vif, sta); 1311 ret = ath9k_htc_add_station(priv, vif, sta);
1283 if (!ret) 1312 if (!ret) {
1313 INIT_WORK(&ista->rc_update_work, ath9k_htc_sta_rc_update_work);
1314 ista->htc_priv = priv;
1284 ath9k_htc_init_rate(priv, sta); 1315 ath9k_htc_init_rate(priv, sta);
1316 }
1285 ath9k_htc_ps_restore(priv); 1317 ath9k_htc_ps_restore(priv);
1286 mutex_unlock(&priv->mutex); 1318 mutex_unlock(&priv->mutex);
1287 1319
@@ -1293,12 +1325,13 @@ static int ath9k_htc_sta_remove(struct ieee80211_hw *hw,
1293 struct ieee80211_sta *sta) 1325 struct ieee80211_sta *sta)
1294{ 1326{
1295 struct ath9k_htc_priv *priv = hw->priv; 1327 struct ath9k_htc_priv *priv = hw->priv;
1296 struct ath9k_htc_sta *ista; 1328 struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv;
1297 int ret; 1329 int ret;
1298 1330
1331 cancel_work_sync(&ista->rc_update_work);
1332
1299 mutex_lock(&priv->mutex); 1333 mutex_lock(&priv->mutex);
1300 ath9k_htc_ps_wakeup(priv); 1334 ath9k_htc_ps_wakeup(priv);
1301 ista = (struct ath9k_htc_sta *) sta->drv_priv;
1302 htc_sta_drain(priv->htc, ista->index); 1335 htc_sta_drain(priv->htc, ista->index);
1303 ret = ath9k_htc_remove_station(priv, vif, sta); 1336 ret = ath9k_htc_remove_station(priv, vif, sta);
1304 ath9k_htc_ps_restore(priv); 1337 ath9k_htc_ps_restore(priv);
@@ -1311,28 +1344,12 @@ static void ath9k_htc_sta_rc_update(struct ieee80211_hw *hw,
1311 struct ieee80211_vif *vif, 1344 struct ieee80211_vif *vif,
1312 struct ieee80211_sta *sta, u32 changed) 1345 struct ieee80211_sta *sta, u32 changed)
1313{ 1346{
1314 struct ath9k_htc_priv *priv = hw->priv; 1347 struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv;
1315 struct ath_common *common = ath9k_hw_common(priv->ah);
1316 struct ath9k_htc_target_rate trate;
1317
1318 mutex_lock(&priv->mutex);
1319 ath9k_htc_ps_wakeup(priv);
1320 1348
1321 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) { 1349 if (!(changed & IEEE80211_RC_SUPP_RATES_CHANGED))
1322 memset(&trate, 0, sizeof(struct ath9k_htc_target_rate)); 1350 return;
1323 ath9k_htc_setup_rate(priv, sta, &trate);
1324 if (!ath9k_htc_send_rate_cmd(priv, &trate))
1325 ath_dbg(common, CONFIG,
1326 "Supported rates for sta: %pM updated, rate caps: 0x%X\n",
1327 sta->addr, be32_to_cpu(trate.capflags));
1328 else
1329 ath_dbg(common, CONFIG,
1330 "Unable to update supported rates for sta: %pM\n",
1331 sta->addr);
1332 }
1333 1351
1334 ath9k_htc_ps_restore(priv); 1352 schedule_work(&ista->rc_update_work);
1335 mutex_unlock(&priv->mutex);
1336} 1353}
1337 1354
1338static int ath9k_htc_conf_tx(struct ieee80211_hw *hw, 1355static int ath9k_htc_conf_tx(struct ieee80211_hw *hw,
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index fbf43c05713f..11eab9f01fd8 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1316,7 +1316,7 @@ static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
1316 if (AR_SREV_9300_20_OR_LATER(ah)) 1316 if (AR_SREV_9300_20_OR_LATER(ah))
1317 udelay(50); 1317 udelay(50);
1318 else if (AR_SREV_9100(ah)) 1318 else if (AR_SREV_9100(ah))
1319 udelay(10000); 1319 mdelay(10);
1320 else 1320 else
1321 udelay(100); 1321 udelay(100);
1322 1322
@@ -2051,9 +2051,8 @@ static bool ath9k_hw_set_power_awake(struct ath_hw *ah)
2051 2051
2052 REG_SET_BIT(ah, AR_RTC_FORCE_WAKE, 2052 REG_SET_BIT(ah, AR_RTC_FORCE_WAKE,
2053 AR_RTC_FORCE_WAKE_EN); 2053 AR_RTC_FORCE_WAKE_EN);
2054
2055 if (AR_SREV_9100(ah)) 2054 if (AR_SREV_9100(ah))
2056 udelay(10000); 2055 mdelay(10);
2057 else 2056 else
2058 udelay(50); 2057 udelay(50);
2059 2058
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index c36de303c8f3..1fc2e5a26b52 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -57,6 +57,10 @@ static int ath9k_bt_ant_diversity;
57module_param_named(bt_ant_diversity, ath9k_bt_ant_diversity, int, 0444); 57module_param_named(bt_ant_diversity, ath9k_bt_ant_diversity, int, 0444);
58MODULE_PARM_DESC(bt_ant_diversity, "Enable WLAN/BT RX antenna diversity"); 58MODULE_PARM_DESC(bt_ant_diversity, "Enable WLAN/BT RX antenna diversity");
59 59
60static int ath9k_ps_enable;
61module_param_named(ps_enable, ath9k_ps_enable, int, 0444);
62MODULE_PARM_DESC(ps_enable, "Enable WLAN PowerSave");
63
60bool is_ath9k_unloaded; 64bool is_ath9k_unloaded;
61/* We use the hw_value as an index into our private channel structure */ 65/* We use the hw_value as an index into our private channel structure */
62 66
@@ -903,13 +907,15 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
903 hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | 907 hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
904 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | 908 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
905 IEEE80211_HW_SIGNAL_DBM | 909 IEEE80211_HW_SIGNAL_DBM |
906 IEEE80211_HW_SUPPORTS_PS |
907 IEEE80211_HW_PS_NULLFUNC_STACK | 910 IEEE80211_HW_PS_NULLFUNC_STACK |
908 IEEE80211_HW_SPECTRUM_MGMT | 911 IEEE80211_HW_SPECTRUM_MGMT |
909 IEEE80211_HW_REPORTS_TX_ACK_STATUS | 912 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
910 IEEE80211_HW_SUPPORTS_RC_TABLE | 913 IEEE80211_HW_SUPPORTS_RC_TABLE |
911 IEEE80211_HW_SUPPORTS_HT_CCK_RATES; 914 IEEE80211_HW_SUPPORTS_HT_CCK_RATES;
912 915
916 if (ath9k_ps_enable)
917 hw->flags |= IEEE80211_HW_SUPPORTS_PS;
918
913 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) { 919 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
914 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION; 920 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
915 921
diff --git a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
index f06f4cbe1317..725e954d8475 100644
--- a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
+++ b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
@@ -182,6 +182,11 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg,
182 182
183 for (ch_idx = 0; ch_idx < IWL_NUM_CHANNELS; ch_idx++) { 183 for (ch_idx = 0; ch_idx < IWL_NUM_CHANNELS; ch_idx++) {
184 ch_flags = __le16_to_cpup(nvm_ch_flags + ch_idx); 184 ch_flags = __le16_to_cpup(nvm_ch_flags + ch_idx);
185
186 if (ch_idx >= NUM_2GHZ_CHANNELS &&
187 !data->sku_cap_band_52GHz_enable)
188 ch_flags &= ~NVM_CHANNEL_VALID;
189
185 if (!(ch_flags & NVM_CHANNEL_VALID)) { 190 if (!(ch_flags & NVM_CHANNEL_VALID)) {
186 IWL_DEBUG_EEPROM(dev, 191 IWL_DEBUG_EEPROM(dev,
187 "Ch. %d Flags %x [%sGHz] - No traffic\n", 192 "Ch. %d Flags %x [%sGHz] - No traffic\n",
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
index 73cbba7424f2..9426905de6b2 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
@@ -504,6 +504,7 @@ struct iwl_scan_offload_profile {
504 * @match_notify: clients waiting for match found notification 504 * @match_notify: clients waiting for match found notification
505 * @pass_match: clients waiting for the results 505 * @pass_match: clients waiting for the results
506 * @active_clients: active clients bitmap - enum scan_framework_client 506 * @active_clients: active clients bitmap - enum scan_framework_client
507 * @any_beacon_notify: clients waiting for match notification without match
507 */ 508 */
508struct iwl_scan_offload_profile_cfg { 509struct iwl_scan_offload_profile_cfg {
509 struct iwl_scan_offload_profile profiles[IWL_SCAN_MAX_PROFILES]; 510 struct iwl_scan_offload_profile profiles[IWL_SCAN_MAX_PROFILES];
@@ -512,7 +513,8 @@ struct iwl_scan_offload_profile_cfg {
512 u8 match_notify; 513 u8 match_notify;
513 u8 pass_match; 514 u8 pass_match;
514 u8 active_clients; 515 u8 active_clients;
515 u8 reserved[3]; 516 u8 any_beacon_notify;
517 u8 reserved[2];
516} __packed; 518} __packed;
517 519
518/** 520/**
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index c49b5073c251..6bf9766e5982 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -246,7 +246,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
246 else 246 else
247 hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; 247 hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
248 248
249 if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_SCHED_SCAN) { 249 if (0 && mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_SCHED_SCAN) {
250 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; 250 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
251 hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; 251 hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
252 hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; 252 hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c
index 0e0007960612..742afc429c94 100644
--- a/drivers/net/wireless/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/iwlwifi/mvm/scan.c
@@ -344,7 +344,8 @@ int iwl_mvm_scan_request(struct iwl_mvm *mvm,
344 344
345 iwl_mvm_scan_fill_ssids(cmd, req, basic_ssid ? 1 : 0); 345 iwl_mvm_scan_fill_ssids(cmd, req, basic_ssid ? 1 : 0);
346 346
347 cmd->tx_cmd.tx_flags = cpu_to_le32(TX_CMD_FLG_SEQ_CTL); 347 cmd->tx_cmd.tx_flags = cpu_to_le32(TX_CMD_FLG_SEQ_CTL |
348 TX_CMD_FLG_BT_DIS);
348 cmd->tx_cmd.sta_id = mvm->aux_sta.sta_id; 349 cmd->tx_cmd.sta_id = mvm->aux_sta.sta_id;
349 cmd->tx_cmd.life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE); 350 cmd->tx_cmd.life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
350 cmd->tx_cmd.rate_n_flags = 351 cmd->tx_cmd.rate_n_flags =
@@ -807,6 +808,8 @@ int iwl_mvm_config_sched_scan_profiles(struct iwl_mvm *mvm,
807 profile_cfg->active_clients = SCAN_CLIENT_SCHED_SCAN; 808 profile_cfg->active_clients = SCAN_CLIENT_SCHED_SCAN;
808 profile_cfg->pass_match = SCAN_CLIENT_SCHED_SCAN; 809 profile_cfg->pass_match = SCAN_CLIENT_SCHED_SCAN;
809 profile_cfg->match_notify = SCAN_CLIENT_SCHED_SCAN; 810 profile_cfg->match_notify = SCAN_CLIENT_SCHED_SCAN;
811 if (!req->n_match_sets || !req->match_sets[0].ssid.ssid_len)
812 profile_cfg->any_beacon_notify = SCAN_CLIENT_SCHED_SCAN;
810 813
811 for (i = 0; i < req->n_match_sets; i++) { 814 for (i = 0; i < req->n_match_sets; i++) {
812 profile = &profile_cfg->profiles[i]; 815 profile = &profile_cfg->profiles[i];
diff --git a/drivers/net/wireless/iwlwifi/mvm/sta.c b/drivers/net/wireless/iwlwifi/mvm/sta.c
index ec1812133235..3397f59cd4e4 100644
--- a/drivers/net/wireless/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/iwlwifi/mvm/sta.c
@@ -652,7 +652,7 @@ int iwl_mvm_send_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
652{ 652{
653 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); 653 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
654 static const u8 _baddr[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 654 static const u8 _baddr[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
655 static const u8 *baddr = _baddr; 655 const u8 *baddr = _baddr;
656 656
657 lockdep_assert_held(&mvm->mutex); 657 lockdep_assert_held(&mvm->mutex);
658 658
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
index 90378c217bc7..4df12fa9d336 100644
--- a/drivers/net/wireless/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
@@ -659,8 +659,14 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
659 rcu_read_lock(); 659 rcu_read_lock();
660 660
661 sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]); 661 sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
662 /*
663 * sta can't be NULL otherwise it'd mean that the sta has been freed in
664 * the firmware while we still have packets for it in the Tx queues.
665 */
666 if (WARN_ON_ONCE(!sta))
667 goto out;
662 668
663 if (!IS_ERR_OR_NULL(sta)) { 669 if (!IS_ERR(sta)) {
664 mvmsta = iwl_mvm_sta_from_mac80211(sta); 670 mvmsta = iwl_mvm_sta_from_mac80211(sta);
665 671
666 if (tid != IWL_TID_NON_QOS) { 672 if (tid != IWL_TID_NON_QOS) {
@@ -675,7 +681,6 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
675 spin_unlock_bh(&mvmsta->lock); 681 spin_unlock_bh(&mvmsta->lock);
676 } 682 }
677 } else { 683 } else {
678 sta = NULL;
679 mvmsta = NULL; 684 mvmsta = NULL;
680 } 685 }
681 686
@@ -683,42 +688,38 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
683 * If the txq is not an AMPDU queue, there is no chance we freed 688 * If the txq is not an AMPDU queue, there is no chance we freed
684 * several skbs. Check that out... 689 * several skbs. Check that out...
685 */ 690 */
686 if (txq_id < mvm->first_agg_queue && !WARN_ON(skb_freed > 1) && 691 if (txq_id >= mvm->first_agg_queue)
687 atomic_sub_and_test(skb_freed, &mvm->pending_frames[sta_id])) { 692 goto out;
688 if (mvmsta) { 693
689 /* 694 /* We can't free more than one frame at once on a shared queue */
690 * If there are no pending frames for this STA, notify 695 WARN_ON(skb_freed > 1);
691 * mac80211 that this station can go to sleep in its 696
692 * STA table. 697 /* If we have still frames from this STA nothing to do here */
693 */ 698 if (!atomic_sub_and_test(skb_freed, &mvm->pending_frames[sta_id]))
694 if (mvmsta->vif->type == NL80211_IFTYPE_AP) 699 goto out;
695 ieee80211_sta_block_awake(mvm->hw, sta, false); 700
696 /* 701 if (mvmsta && mvmsta->vif->type == NL80211_IFTYPE_AP) {
697 * We might very well have taken mvmsta pointer while 702 /*
698 * the station was being removed. The remove flow might 703 * If there are no pending frames for this STA, notify
699 * have seen a pending_frame (because we didn't take 704 * mac80211 that this station can go to sleep in its
700 * the lock) even if now the queues are drained. So make 705 * STA table.
701 * really sure now that this the station is not being 706 * If mvmsta is not NULL, sta is valid.
702 * removed. If it is, run the drain worker to remove it. 707 */
703 */ 708 ieee80211_sta_block_awake(mvm->hw, sta, false);
704 spin_lock_bh(&mvmsta->lock); 709 }
705 sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]); 710
706 if (!sta || PTR_ERR(sta) == -EBUSY) { 711 if (PTR_ERR(sta) == -EBUSY || PTR_ERR(sta) == -ENOENT) {
707 /* 712 /*
708 * Station disappeared in the meantime: 713 * We are draining and this was the last packet - pre_rcu_remove
709 * so we are draining. 714 * has been called already. We might be after the
710 */ 715 * synchronize_net already.
711 set_bit(sta_id, mvm->sta_drained); 716 * Don't rely on iwl_mvm_rm_sta to see the empty Tx queues.
712 schedule_work(&mvm->sta_drained_wk); 717 */
713 } 718 set_bit(sta_id, mvm->sta_drained);
714 spin_unlock_bh(&mvmsta->lock); 719 schedule_work(&mvm->sta_drained_wk);
715 } else if (!mvmsta && PTR_ERR(sta) == -EBUSY) {
716 /* Tx response without STA, so we are draining */
717 set_bit(sta_id, mvm->sta_drained);
718 schedule_work(&mvm->sta_drained_wk);
719 }
720 } 720 }
721 721
722out:
722 rcu_read_unlock(); 723 rcu_read_unlock();
723} 724}
724 725
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c
index a4a5e25623c3..86989df69356 100644
--- a/drivers/net/wireless/iwlwifi/mvm/utils.c
+++ b/drivers/net/wireless/iwlwifi/mvm/utils.c
@@ -411,6 +411,8 @@ void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm)
411 mvm->status, table.valid); 411 mvm->status, table.valid);
412 } 412 }
413 413
414 IWL_ERR(mvm, "Loaded firmware version: %s\n", mvm->fw->fw_version);
415
414 trace_iwlwifi_dev_ucode_error(trans->dev, table.error_id, table.tsf_low, 416 trace_iwlwifi_dev_ucode_error(trans->dev, table.error_id, table.tsf_low,
415 table.data1, table.data2, table.data3, 417 table.data1, table.data2, table.data3,
416 table.blink1, table.blink2, table.ilink1, 418 table.blink1, table.blink2, table.ilink1,
diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c
index 3040924f5f3c..f47bcbe2945a 100644
--- a/drivers/net/wireless/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
@@ -359,20 +359,25 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
359/* 7265 Series */ 359/* 7265 Series */
360 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)}, 360 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
361 {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)}, 361 {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)},
362 {IWL_PCI_DEVICE(0x095A, 0x5112, iwl7265_2ac_cfg)},
363 {IWL_PCI_DEVICE(0x095A, 0x5100, iwl7265_2ac_cfg)},
364 {IWL_PCI_DEVICE(0x095A, 0x510A, iwl7265_2ac_cfg)},
362 {IWL_PCI_DEVICE(0x095B, 0x5310, iwl7265_2ac_cfg)}, 365 {IWL_PCI_DEVICE(0x095B, 0x5310, iwl7265_2ac_cfg)},
363 {IWL_PCI_DEVICE(0x095B, 0x5302, iwl7265_2ac_cfg)}, 366 {IWL_PCI_DEVICE(0x095B, 0x5302, iwl7265_2ac_cfg)},
364 {IWL_PCI_DEVICE(0x095B, 0x5210, iwl7265_2ac_cfg)}, 367 {IWL_PCI_DEVICE(0x095B, 0x5210, iwl7265_2ac_cfg)},
365 {IWL_PCI_DEVICE(0x095A, 0x5012, iwl7265_2ac_cfg)}, 368 {IWL_PCI_DEVICE(0x095A, 0x5012, iwl7265_2ac_cfg)},
366 {IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2ac_cfg)},
367 {IWL_PCI_DEVICE(0x095A, 0x5410, iwl7265_2ac_cfg)}, 369 {IWL_PCI_DEVICE(0x095A, 0x5410, iwl7265_2ac_cfg)},
368 {IWL_PCI_DEVICE(0x095A, 0x5400, iwl7265_2ac_cfg)}, 370 {IWL_PCI_DEVICE(0x095A, 0x5400, iwl7265_2ac_cfg)},
369 {IWL_PCI_DEVICE(0x095A, 0x1010, iwl7265_2ac_cfg)}, 371 {IWL_PCI_DEVICE(0x095A, 0x1010, iwl7265_2ac_cfg)},
370 {IWL_PCI_DEVICE(0x095A, 0x5000, iwl7265_2n_cfg)}, 372 {IWL_PCI_DEVICE(0x095A, 0x5000, iwl7265_2n_cfg)},
373 {IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2n_cfg)},
371 {IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)}, 374 {IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)},
372 {IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)}, 375 {IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)},
373 {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)}, 376 {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
374 {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)}, 377 {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
378 {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)},
375 {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)}, 379 {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},
380 {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)},
376 {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)}, 381 {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
377 {IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)}, 382 {IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)},
378 {IWL_PCI_DEVICE(0x095A, 0x9310, iwl7265_2ac_cfg)}, 383 {IWL_PCI_DEVICE(0x095A, 0x9310, iwl7265_2ac_cfg)},
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index abc5f56f29fe..2f1cd929c6f6 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -1877,6 +1877,11 @@ static int rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
1877 EEPROM_MAC_ADDR_0)); 1877 EEPROM_MAC_ADDR_0));
1878 1878
1879 /* 1879 /*
1880 * Disable powersaving as default.
1881 */
1882 rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1883
1884 /*
1880 * Initialize hw_mode information. 1885 * Initialize hw_mode information.
1881 */ 1886 */
1882 spec->supported_bands = SUPPORT_BAND_2GHZ; 1887 spec->supported_bands = SUPPORT_BAND_2GHZ;
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 9f16824cd1bc..d849d590de25 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1706,6 +1706,11 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
1706 IEEE80211_HW_SUPPORTS_PS | 1706 IEEE80211_HW_SUPPORTS_PS |
1707 IEEE80211_HW_PS_NULLFUNC_STACK; 1707 IEEE80211_HW_PS_NULLFUNC_STACK;
1708 1708
1709 /*
1710 * Disable powersaving as default.
1711 */
1712 rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1713
1709 SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev); 1714 SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
1710 SET_IEEE80211_PERM_ADDR(rt2x00dev->hw, 1715 SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
1711 rt2x00_eeprom_addr(rt2x00dev, 1716 rt2x00_eeprom_addr(rt2x00dev,
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index b8f5b06006c4..7f8b5d156c8c 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -7458,10 +7458,9 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
7458 u32 reg; 7458 u32 reg;
7459 7459
7460 /* 7460 /*
7461 * Disable powersaving as default on PCI devices. 7461 * Disable powersaving as default.
7462 */ 7462 */
7463 if (rt2x00_is_pci(rt2x00dev) || rt2x00_is_soc(rt2x00dev)) 7463 rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
7464 rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
7465 7464
7466 /* 7465 /*
7467 * Initialize all hw fields. 7466 * Initialize all hw fields.
diff --git a/drivers/net/wireless/rtl818x/rtl8180/dev.c b/drivers/net/wireless/rtl818x/rtl8180/dev.c
index 8ec17aad0e52..3867d1470b36 100644
--- a/drivers/net/wireless/rtl818x/rtl8180/dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8180/dev.c
@@ -107,6 +107,7 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
107 struct rtl8180_priv *priv = dev->priv; 107 struct rtl8180_priv *priv = dev->priv;
108 unsigned int count = 32; 108 unsigned int count = 32;
109 u8 signal, agc, sq; 109 u8 signal, agc, sq;
110 dma_addr_t mapping;
110 111
111 while (count--) { 112 while (count--) {
112 struct rtl8180_rx_desc *entry = &priv->rx_ring[priv->rx_idx]; 113 struct rtl8180_rx_desc *entry = &priv->rx_ring[priv->rx_idx];
@@ -128,6 +129,17 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
128 if (unlikely(!new_skb)) 129 if (unlikely(!new_skb))
129 goto done; 130 goto done;
130 131
132 mapping = pci_map_single(priv->pdev,
133 skb_tail_pointer(new_skb),
134 MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
135
136 if (pci_dma_mapping_error(priv->pdev, mapping)) {
137 kfree_skb(new_skb);
138 dev_err(&priv->pdev->dev, "RX DMA map error\n");
139
140 goto done;
141 }
142
131 pci_unmap_single(priv->pdev, 143 pci_unmap_single(priv->pdev,
132 *((dma_addr_t *)skb->cb), 144 *((dma_addr_t *)skb->cb),
133 MAX_RX_SIZE, PCI_DMA_FROMDEVICE); 145 MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
@@ -158,9 +170,7 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
158 170
159 skb = new_skb; 171 skb = new_skb;
160 priv->rx_buf[priv->rx_idx] = skb; 172 priv->rx_buf[priv->rx_idx] = skb;
161 *((dma_addr_t *) skb->cb) = 173 *((dma_addr_t *) skb->cb) = mapping;
162 pci_map_single(priv->pdev, skb_tail_pointer(skb),
163 MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
164 } 174 }
165 175
166 done: 176 done:
@@ -266,6 +276,13 @@ static void rtl8180_tx(struct ieee80211_hw *dev,
266 mapping = pci_map_single(priv->pdev, skb->data, 276 mapping = pci_map_single(priv->pdev, skb->data,
267 skb->len, PCI_DMA_TODEVICE); 277 skb->len, PCI_DMA_TODEVICE);
268 278
279 if (pci_dma_mapping_error(priv->pdev, mapping)) {
280 kfree_skb(skb);
281 dev_err(&priv->pdev->dev, "TX DMA mapping error\n");
282 return;
283
284 }
285
269 tx_flags = RTL818X_TX_DESC_FLAG_OWN | RTL818X_TX_DESC_FLAG_FS | 286 tx_flags = RTL818X_TX_DESC_FLAG_OWN | RTL818X_TX_DESC_FLAG_FS |
270 RTL818X_TX_DESC_FLAG_LS | 287 RTL818X_TX_DESC_FLAG_LS |
271 (ieee80211_get_tx_rate(dev, info)->hw_value << 24) | 288 (ieee80211_get_tx_rate(dev, info)->hw_value << 24) |
diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
index 4c76bcb9a879..ae413a2cbee7 100644
--- a/drivers/net/xen-netback/common.h
+++ b/drivers/net/xen-netback/common.h
@@ -143,11 +143,7 @@ struct xenvif {
143 char rx_irq_name[IFNAMSIZ+4]; /* DEVNAME-rx */ 143 char rx_irq_name[IFNAMSIZ+4]; /* DEVNAME-rx */
144 struct xen_netif_rx_back_ring rx; 144 struct xen_netif_rx_back_ring rx;
145 struct sk_buff_head rx_queue; 145 struct sk_buff_head rx_queue;
146 bool rx_queue_stopped; 146 RING_IDX rx_last_skb_slots;
147 /* Set when the RX interrupt is triggered by the frontend.
148 * The worker thread may need to wake the queue.
149 */
150 bool rx_event;
151 147
152 /* This array is allocated seperately as it is large */ 148 /* This array is allocated seperately as it is large */
153 struct gnttab_copy *grant_copy_op; 149 struct gnttab_copy *grant_copy_op;
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index b9de31ea7fc4..7669d49a67e2 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -100,7 +100,6 @@ static irqreturn_t xenvif_rx_interrupt(int irq, void *dev_id)
100{ 100{
101 struct xenvif *vif = dev_id; 101 struct xenvif *vif = dev_id;
102 102
103 vif->rx_event = true;
104 xenvif_kick_thread(vif); 103 xenvif_kick_thread(vif);
105 104
106 return IRQ_HANDLED; 105 return IRQ_HANDLED;
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 6b62c3eb8e18..e5284bca2d90 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -476,7 +476,6 @@ static void xenvif_rx_action(struct xenvif *vif)
476 unsigned long offset; 476 unsigned long offset;
477 struct skb_cb_overlay *sco; 477 struct skb_cb_overlay *sco;
478 bool need_to_notify = false; 478 bool need_to_notify = false;
479 bool ring_full = false;
480 479
481 struct netrx_pending_operations npo = { 480 struct netrx_pending_operations npo = {
482 .copy = vif->grant_copy_op, 481 .copy = vif->grant_copy_op,
@@ -486,7 +485,7 @@ static void xenvif_rx_action(struct xenvif *vif)
486 skb_queue_head_init(&rxq); 485 skb_queue_head_init(&rxq);
487 486
488 while ((skb = skb_dequeue(&vif->rx_queue)) != NULL) { 487 while ((skb = skb_dequeue(&vif->rx_queue)) != NULL) {
489 int max_slots_needed; 488 RING_IDX max_slots_needed;
490 int i; 489 int i;
491 490
492 /* We need a cheap worse case estimate for the number of 491 /* We need a cheap worse case estimate for the number of
@@ -509,9 +508,10 @@ static void xenvif_rx_action(struct xenvif *vif)
509 if (!xenvif_rx_ring_slots_available(vif, max_slots_needed)) { 508 if (!xenvif_rx_ring_slots_available(vif, max_slots_needed)) {
510 skb_queue_head(&vif->rx_queue, skb); 509 skb_queue_head(&vif->rx_queue, skb);
511 need_to_notify = true; 510 need_to_notify = true;
512 ring_full = true; 511 vif->rx_last_skb_slots = max_slots_needed;
513 break; 512 break;
514 } 513 } else
514 vif->rx_last_skb_slots = 0;
515 515
516 sco = (struct skb_cb_overlay *)skb->cb; 516 sco = (struct skb_cb_overlay *)skb->cb;
517 sco->meta_slots_used = xenvif_gop_skb(skb, &npo); 517 sco->meta_slots_used = xenvif_gop_skb(skb, &npo);
@@ -522,8 +522,6 @@ static void xenvif_rx_action(struct xenvif *vif)
522 522
523 BUG_ON(npo.meta_prod > ARRAY_SIZE(vif->meta)); 523 BUG_ON(npo.meta_prod > ARRAY_SIZE(vif->meta));
524 524
525 vif->rx_queue_stopped = !npo.copy_prod && ring_full;
526
527 if (!npo.copy_prod) 525 if (!npo.copy_prod)
528 goto done; 526 goto done;
529 527
@@ -1473,8 +1471,8 @@ static struct xen_netif_rx_response *make_rx_response(struct xenvif *vif,
1473 1471
1474static inline int rx_work_todo(struct xenvif *vif) 1472static inline int rx_work_todo(struct xenvif *vif)
1475{ 1473{
1476 return (!skb_queue_empty(&vif->rx_queue) && !vif->rx_queue_stopped) || 1474 return !skb_queue_empty(&vif->rx_queue) &&
1477 vif->rx_event; 1475 xenvif_rx_ring_slots_available(vif, vif->rx_last_skb_slots);
1478} 1476}
1479 1477
1480static inline int tx_work_todo(struct xenvif *vif) 1478static inline int tx_work_todo(struct xenvif *vif)
@@ -1560,8 +1558,6 @@ int xenvif_kthread(void *data)
1560 if (!skb_queue_empty(&vif->rx_queue)) 1558 if (!skb_queue_empty(&vif->rx_queue))
1561 xenvif_rx_action(vif); 1559 xenvif_rx_action(vif);
1562 1560
1563 vif->rx_event = false;
1564
1565 if (skb_queue_empty(&vif->rx_queue) && 1561 if (skb_queue_empty(&vif->rx_queue) &&
1566 netif_queue_stopped(vif->dev)) 1562 netif_queue_stopped(vif->dev))
1567 xenvif_start_queue(vif); 1563 xenvif_start_queue(vif);
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index ff04d4f95baa..f9daa9e183f2 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -1832,7 +1832,6 @@ static void netback_changed(struct xenbus_device *dev,
1832 case XenbusStateReconfiguring: 1832 case XenbusStateReconfiguring:
1833 case XenbusStateReconfigured: 1833 case XenbusStateReconfigured:
1834 case XenbusStateUnknown: 1834 case XenbusStateUnknown:
1835 case XenbusStateClosed:
1836 break; 1835 break;
1837 1836
1838 case XenbusStateInitWait: 1837 case XenbusStateInitWait:
@@ -1847,6 +1846,10 @@ static void netback_changed(struct xenbus_device *dev,
1847 netdev_notify_peers(netdev); 1846 netdev_notify_peers(netdev);
1848 break; 1847 break;
1849 1848
1849 case XenbusStateClosed:
1850 if (dev->state == XenbusStateClosed)
1851 break;
1852 /* Missed the backend's CLOSING state -- fallthrough */
1850 case XenbusStateClosing: 1853 case XenbusStateClosing:
1851 xenbus_frontend_closed(dev); 1854 xenbus_frontend_closed(dev);
1852 break; 1855 break;
diff --git a/drivers/of/address.c b/drivers/of/address.c
index d3dd41c840f1..1a54f1ffaadb 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -99,11 +99,12 @@ static unsigned int of_bus_default_get_flags(const __be32 *addr)
99static int of_bus_pci_match(struct device_node *np) 99static int of_bus_pci_match(struct device_node *np)
100{ 100{
101 /* 101 /*
102 * "pciex" is PCI Express
102 * "vci" is for the /chaos bridge on 1st-gen PCI powermacs 103 * "vci" is for the /chaos bridge on 1st-gen PCI powermacs
103 * "ht" is hypertransport 104 * "ht" is hypertransport
104 */ 105 */
105 return !strcmp(np->type, "pci") || !strcmp(np->type, "vci") || 106 return !strcmp(np->type, "pci") || !strcmp(np->type, "pciex") ||
106 !strcmp(np->type, "ht"); 107 !strcmp(np->type, "vci") || !strcmp(np->type, "ht");
107} 108}
108 109
109static void of_bus_pci_count_cells(struct device_node *np, 110static void of_bus_pci_count_cells(struct device_node *np,
diff --git a/drivers/of/base.c b/drivers/of/base.c
index ff85450d5683..10b51106c854 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -730,46 +730,64 @@ out:
730} 730}
731EXPORT_SYMBOL(of_find_node_with_property); 731EXPORT_SYMBOL(of_find_node_with_property);
732 732
733static 733static const struct of_device_id *
734const struct of_device_id *__of_match_node(const struct of_device_id *matches, 734of_match_compatible(const struct of_device_id *matches,
735 const struct device_node *node) 735 const struct device_node *node)
736{ 736{
737 const char *cp; 737 const char *cp;
738 int cplen, l; 738 int cplen, l;
739 739 const struct of_device_id *m;
740 if (!matches)
741 return NULL;
742 740
743 cp = __of_get_property(node, "compatible", &cplen); 741 cp = __of_get_property(node, "compatible", &cplen);
744 do { 742 while (cp && (cplen > 0)) {
745 const struct of_device_id *m = matches; 743 m = matches;
746
747 /* Check against matches with current compatible string */
748 while (m->name[0] || m->type[0] || m->compatible[0]) { 744 while (m->name[0] || m->type[0] || m->compatible[0]) {
749 int match = 1; 745 /* Only match for the entries without type and name */
750 if (m->name[0]) 746 if (m->name[0] || m->type[0] ||
751 match &= node->name 747 of_compat_cmp(m->compatible, cp,
752 && !strcmp(m->name, node->name); 748 strlen(m->compatible)))
753 if (m->type[0]) 749 m++;
754 match &= node->type 750 else
755 && !strcmp(m->type, node->type);
756 if (m->compatible[0])
757 match &= cp
758 && !of_compat_cmp(m->compatible, cp,
759 strlen(m->compatible));
760 if (match)
761 return m; 751 return m;
762 m++;
763 } 752 }
764 753
765 /* Get node's next compatible string */ 754 /* Get node's next compatible string */
766 if (cp) { 755 l = strlen(cp) + 1;
767 l = strlen(cp) + 1; 756 cp += l;
768 cp += l; 757 cplen -= l;
769 cplen -= l; 758 }
770 } 759
771 } while (cp && (cplen > 0)); 760 return NULL;
761}
762
763static
764const struct of_device_id *__of_match_node(const struct of_device_id *matches,
765 const struct device_node *node)
766{
767 const struct of_device_id *m;
772 768
769 if (!matches)
770 return NULL;
771
772 m = of_match_compatible(matches, node);
773 if (m)
774 return m;
775
776 while (matches->name[0] || matches->type[0] || matches->compatible[0]) {
777 int match = 1;
778 if (matches->name[0])
779 match &= node->name
780 && !strcmp(matches->name, node->name);
781 if (matches->type[0])
782 match &= node->type
783 && !strcmp(matches->type, node->type);
784 if (matches->compatible[0])
785 match &= __of_device_is_compatible(node,
786 matches->compatible);
787 if (match)
788 return matches;
789 matches++;
790 }
773 return NULL; 791 return NULL;
774} 792}
775 793
@@ -778,10 +796,12 @@ const struct of_device_id *__of_match_node(const struct of_device_id *matches,
778 * @matches: array of of device match structures to search in 796 * @matches: array of of device match structures to search in
779 * @node: the of device structure to match against 797 * @node: the of device structure to match against
780 * 798 *
781 * Low level utility function used by device matching. Matching order 799 * Low level utility function used by device matching. We have two ways
782 * is to compare each of the node's compatibles with all given matches 800 * of matching:
783 * first. This implies node's compatible is sorted from specific to 801 * - Try to find the best compatible match by comparing each compatible
784 * generic while matches can be in any order. 802 * string of device node with all the given matches respectively.
803 * - If the above method failed, then try to match the compatible by using
804 * __of_device_is_compatible() besides the match in type and name.
785 */ 805 */
786const struct of_device_id *of_match_node(const struct of_device_id *matches, 806const struct of_device_id *of_match_node(const struct of_device_id *matches,
787 const struct device_node *node) 807 const struct device_node *node)
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index cd929aed3613..7c7a388c85ab 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -210,10 +210,29 @@ static void post_dock_fixups(acpi_handle not_used, u32 event, void *data)
210 } 210 }
211} 211}
212 212
213static void dock_event(acpi_handle handle, u32 type, void *data)
214{
215 struct acpiphp_context *context;
216
217 mutex_lock(&acpiphp_context_lock);
218 context = acpiphp_get_context(handle);
219 if (!context || WARN_ON(context->handle != handle)
220 || context->func.parent->is_going_away) {
221 mutex_unlock(&acpiphp_context_lock);
222 return;
223 }
224 get_bridge(context->func.parent);
225 acpiphp_put_context(context);
226 mutex_unlock(&acpiphp_context_lock);
227
228 hotplug_event(handle, type, data);
229
230 put_bridge(context->func.parent);
231}
213 232
214static const struct acpi_dock_ops acpiphp_dock_ops = { 233static const struct acpi_dock_ops acpiphp_dock_ops = {
215 .fixup = post_dock_fixups, 234 .fixup = post_dock_fixups,
216 .handler = hotplug_event, 235 .handler = dock_event,
217}; 236};
218 237
219/* Check whether the PCI device is managed by native PCIe hotplug driver */ 238/* Check whether the PCI device is managed by native PCIe hotplug driver */
@@ -441,7 +460,9 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
441 list_del(&bridge->list); 460 list_del(&bridge->list);
442 mutex_unlock(&bridge_mutex); 461 mutex_unlock(&bridge_mutex);
443 462
463 mutex_lock(&acpiphp_context_lock);
444 bridge->is_going_away = true; 464 bridge->is_going_away = true;
465 mutex_unlock(&acpiphp_context_lock);
445} 466}
446 467
447/** 468/**
@@ -709,6 +730,17 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
709 return (unsigned int)sta; 730 return (unsigned int)sta;
710} 731}
711 732
733static inline bool device_status_valid(unsigned int sta)
734{
735 /*
736 * ACPI spec says that _STA may return bit 0 clear with bit 3 set
737 * if the device is valid but does not require a device driver to be
738 * loaded (Section 6.3.7 of ACPI 5.0A).
739 */
740 unsigned int mask = ACPI_STA_DEVICE_ENABLED | ACPI_STA_DEVICE_FUNCTIONING;
741 return (sta & mask) == mask;
742}
743
712/** 744/**
713 * trim_stale_devices - remove PCI devices that are not responding. 745 * trim_stale_devices - remove PCI devices that are not responding.
714 * @dev: PCI device to start walking the hierarchy from. 746 * @dev: PCI device to start walking the hierarchy from.
@@ -724,7 +756,7 @@ static void trim_stale_devices(struct pci_dev *dev)
724 unsigned long long sta; 756 unsigned long long sta;
725 757
726 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); 758 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
727 alive = (ACPI_SUCCESS(status) && sta == ACPI_STA_ALL) 759 alive = (ACPI_SUCCESS(status) && device_status_valid(sta))
728 || acpiphp_no_hotplug(handle); 760 || acpiphp_no_hotplug(handle);
729 } 761 }
730 if (!alive) { 762 if (!alive) {
@@ -742,7 +774,7 @@ static void trim_stale_devices(struct pci_dev *dev)
742 774
743 /* The device is a bridge. so check the bus below it. */ 775 /* The device is a bridge. so check the bus below it. */
744 pm_runtime_get_sync(&dev->dev); 776 pm_runtime_get_sync(&dev->dev);
745 list_for_each_entry_safe(child, tmp, &bus->devices, bus_list) 777 list_for_each_entry_safe_reverse(child, tmp, &bus->devices, bus_list)
746 trim_stale_devices(child); 778 trim_stale_devices(child);
747 779
748 pm_runtime_put(&dev->dev); 780 pm_runtime_put(&dev->dev);
@@ -771,10 +803,10 @@ static void acpiphp_check_bridge(struct acpiphp_bridge *bridge)
771 mutex_lock(&slot->crit_sect); 803 mutex_lock(&slot->crit_sect);
772 if (slot_no_hotplug(slot)) { 804 if (slot_no_hotplug(slot)) {
773 ; /* do nothing */ 805 ; /* do nothing */
774 } else if (get_slot_status(slot) == ACPI_STA_ALL) { 806 } else if (device_status_valid(get_slot_status(slot))) {
775 /* remove stale devices if any */ 807 /* remove stale devices if any */
776 list_for_each_entry_safe(dev, tmp, &bus->devices, 808 list_for_each_entry_safe_reverse(dev, tmp,
777 bus_list) 809 &bus->devices, bus_list)
778 if (PCI_SLOT(dev->devfn) == slot->device) 810 if (PCI_SLOT(dev->devfn) == slot->device)
779 trim_stale_devices(dev); 811 trim_stale_devices(dev);
780 812
@@ -805,7 +837,7 @@ static void acpiphp_sanitize_bus(struct pci_bus *bus)
805 int i; 837 int i;
806 unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM; 838 unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
807 839
808 list_for_each_entry_safe(dev, tmp, &bus->devices, bus_list) { 840 list_for_each_entry_safe_reverse(dev, tmp, &bus->devices, bus_list) {
809 for (i=0; i<PCI_BRIDGE_RESOURCES; i++) { 841 for (i=0; i<PCI_BRIDGE_RESOURCES; i++) {
810 struct resource *res = &dev->resource[i]; 842 struct resource *res = &dev->resource[i];
811 if ((res->flags & type_mask) && !res->start && 843 if ((res->flags & type_mask) && !res->start &&
@@ -829,7 +861,11 @@ void acpiphp_check_host_bridge(acpi_handle handle)
829 861
830 bridge = acpiphp_handle_to_bridge(handle); 862 bridge = acpiphp_handle_to_bridge(handle);
831 if (bridge) { 863 if (bridge) {
864 pci_lock_rescan_remove();
865
832 acpiphp_check_bridge(bridge); 866 acpiphp_check_bridge(bridge);
867
868 pci_unlock_rescan_remove();
833 put_bridge(bridge); 869 put_bridge(bridge);
834 } 870 }
835} 871}
@@ -852,6 +888,7 @@ static void hotplug_event(acpi_handle handle, u32 type, void *data)
852 888
853 mutex_unlock(&acpiphp_context_lock); 889 mutex_unlock(&acpiphp_context_lock);
854 890
891 pci_lock_rescan_remove();
855 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); 892 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
856 893
857 switch (type) { 894 switch (type) {
@@ -905,6 +942,7 @@ static void hotplug_event(acpi_handle handle, u32 type, void *data)
905 break; 942 break;
906 } 943 }
907 944
945 pci_unlock_rescan_remove();
908 if (bridge) 946 if (bridge)
909 put_bridge(bridge); 947 put_bridge(bridge);
910} 948}
@@ -915,11 +953,9 @@ static void hotplug_event_work(void *data, u32 type)
915 acpi_handle handle = context->handle; 953 acpi_handle handle = context->handle;
916 954
917 acpi_scan_lock_acquire(); 955 acpi_scan_lock_acquire();
918 pci_lock_rescan_remove();
919 956
920 hotplug_event(handle, type, context); 957 hotplug_event(handle, type, context);
921 958
922 pci_unlock_rescan_remove();
923 acpi_scan_lock_release(); 959 acpi_scan_lock_release();
924 acpi_evaluate_hotplug_ost(handle, type, ACPI_OST_SC_SUCCESS, NULL); 960 acpi_evaluate_hotplug_ost(handle, type, ACPI_OST_SC_SUCCESS, NULL);
925 put_bridge(context->func.parent); 961 put_bridge(context->func.parent);
@@ -937,6 +973,7 @@ static void handle_hotplug_event(acpi_handle handle, u32 type, void *data)
937{ 973{
938 struct acpiphp_context *context; 974 struct acpiphp_context *context;
939 u32 ost_code = ACPI_OST_SC_SUCCESS; 975 u32 ost_code = ACPI_OST_SC_SUCCESS;
976 acpi_status status;
940 977
941 switch (type) { 978 switch (type) {
942 case ACPI_NOTIFY_BUS_CHECK: 979 case ACPI_NOTIFY_BUS_CHECK:
@@ -972,13 +1009,20 @@ static void handle_hotplug_event(acpi_handle handle, u32 type, void *data)
972 1009
973 mutex_lock(&acpiphp_context_lock); 1010 mutex_lock(&acpiphp_context_lock);
974 context = acpiphp_get_context(handle); 1011 context = acpiphp_get_context(handle);
975 if (context && !WARN_ON(context->handle != handle)) { 1012 if (!context || WARN_ON(context->handle != handle)
976 get_bridge(context->func.parent); 1013 || context->func.parent->is_going_away)
977 acpiphp_put_context(context); 1014 goto err_out;
978 acpi_hotplug_execute(hotplug_event_work, context, type); 1015
1016 get_bridge(context->func.parent);
1017 acpiphp_put_context(context);
1018 status = acpi_hotplug_execute(hotplug_event_work, context, type);
1019 if (ACPI_SUCCESS(status)) {
979 mutex_unlock(&acpiphp_context_lock); 1020 mutex_unlock(&acpiphp_context_lock);
980 return; 1021 return;
981 } 1022 }
1023 put_bridge(context->func.parent);
1024
1025 err_out:
982 mutex_unlock(&acpiphp_context_lock); 1026 mutex_unlock(&acpiphp_context_lock);
983 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; 1027 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
984 1028
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 645c867c1257..5f5b0f4be5be 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -162,6 +162,9 @@ int phy_init(struct phy *phy)
162{ 162{
163 int ret; 163 int ret;
164 164
165 if (!phy)
166 return 0;
167
165 ret = phy_pm_runtime_get_sync(phy); 168 ret = phy_pm_runtime_get_sync(phy);
166 if (ret < 0 && ret != -ENOTSUPP) 169 if (ret < 0 && ret != -ENOTSUPP)
167 return ret; 170 return ret;
@@ -187,6 +190,9 @@ int phy_exit(struct phy *phy)
187{ 190{
188 int ret; 191 int ret;
189 192
193 if (!phy)
194 return 0;
195
190 ret = phy_pm_runtime_get_sync(phy); 196 ret = phy_pm_runtime_get_sync(phy);
191 if (ret < 0 && ret != -ENOTSUPP) 197 if (ret < 0 && ret != -ENOTSUPP)
192 return ret; 198 return ret;
@@ -212,6 +218,9 @@ int phy_power_on(struct phy *phy)
212{ 218{
213 int ret; 219 int ret;
214 220
221 if (!phy)
222 return 0;
223
215 ret = phy_pm_runtime_get_sync(phy); 224 ret = phy_pm_runtime_get_sync(phy);
216 if (ret < 0 && ret != -ENOTSUPP) 225 if (ret < 0 && ret != -ENOTSUPP)
217 return ret; 226 return ret;
@@ -240,6 +249,9 @@ int phy_power_off(struct phy *phy)
240{ 249{
241 int ret; 250 int ret;
242 251
252 if (!phy)
253 return 0;
254
243 mutex_lock(&phy->mutex); 255 mutex_lock(&phy->mutex);
244 if (phy->power_count == 1 && phy->ops->power_off) { 256 if (phy->power_count == 1 && phy->ops->power_off) {
245 ret = phy->ops->power_off(phy); 257 ret = phy->ops->power_off(phy);
@@ -308,7 +320,7 @@ err0:
308 */ 320 */
309void phy_put(struct phy *phy) 321void phy_put(struct phy *phy)
310{ 322{
311 if (IS_ERR(phy)) 323 if (!phy || IS_ERR(phy))
312 return; 324 return;
313 325
314 module_put(phy->ops->owner); 326 module_put(phy->ops->owner);
@@ -328,6 +340,9 @@ void devm_phy_put(struct device *dev, struct phy *phy)
328{ 340{
329 int r; 341 int r;
330 342
343 if (!phy)
344 return;
345
331 r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy); 346 r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
332 dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n"); 347 dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
333} 348}
@@ -411,6 +426,27 @@ struct phy *phy_get(struct device *dev, const char *string)
411EXPORT_SYMBOL_GPL(phy_get); 426EXPORT_SYMBOL_GPL(phy_get);
412 427
413/** 428/**
429 * phy_optional_get() - lookup and obtain a reference to an optional phy.
430 * @dev: device that requests this phy
431 * @string: the phy name as given in the dt data or the name of the controller
432 * port for non-dt case
433 *
434 * Returns the phy driver, after getting a refcount to it; or
435 * NULL if there is no such phy. The caller is responsible for
436 * calling phy_put() to release that count.
437 */
438struct phy *phy_optional_get(struct device *dev, const char *string)
439{
440 struct phy *phy = phy_get(dev, string);
441
442 if (PTR_ERR(phy) == -ENODEV)
443 phy = NULL;
444
445 return phy;
446}
447EXPORT_SYMBOL_GPL(phy_optional_get);
448
449/**
414 * devm_phy_get() - lookup and obtain a reference to a phy. 450 * devm_phy_get() - lookup and obtain a reference to a phy.
415 * @dev: device that requests this phy 451 * @dev: device that requests this phy
416 * @string: the phy name as given in the dt data or phy device name 452 * @string: the phy name as given in the dt data or phy device name
@@ -441,6 +477,30 @@ struct phy *devm_phy_get(struct device *dev, const char *string)
441EXPORT_SYMBOL_GPL(devm_phy_get); 477EXPORT_SYMBOL_GPL(devm_phy_get);
442 478
443/** 479/**
480 * devm_phy_optional_get() - lookup and obtain a reference to an optional phy.
481 * @dev: device that requests this phy
482 * @string: the phy name as given in the dt data or phy device name
483 * for non-dt case
484 *
485 * Gets the phy using phy_get(), and associates a device with it using
486 * devres. On driver detach, release function is invoked on the devres
487 * data, then, devres data is freed. This differs to devm_phy_get() in
488 * that if the phy does not exist, it is not considered an error and
489 * -ENODEV will not be returned. Instead the NULL phy is returned,
490 * which can be passed to all other phy consumer calls.
491 */
492struct phy *devm_phy_optional_get(struct device *dev, const char *string)
493{
494 struct phy *phy = devm_phy_get(dev, string);
495
496 if (PTR_ERR(phy) == -ENODEV)
497 phy = NULL;
498
499 return phy;
500}
501EXPORT_SYMBOL_GPL(devm_phy_optional_get);
502
503/**
444 * phy_create() - create a new phy 504 * phy_create() - create a new phy
445 * @dev: device that is creating the new phy 505 * @dev: device that is creating the new phy
446 * @ops: function pointers for performing phy operations 506 * @ops: function pointers for performing phy operations
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 5ee61a470016..c0fe6091566a 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -851,7 +851,9 @@ static struct pinctrl *create_pinctrl(struct device *dev)
851 kref_init(&p->users); 851 kref_init(&p->users);
852 852
853 /* Add the pinctrl handle to the global list */ 853 /* Add the pinctrl handle to the global list */
854 mutex_lock(&pinctrl_list_mutex);
854 list_add_tail(&p->node, &pinctrl_list); 855 list_add_tail(&p->node, &pinctrl_list);
856 mutex_unlock(&pinctrl_list_mutex);
855 857
856 return p; 858 return p;
857} 859}
@@ -1642,8 +1644,10 @@ static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
1642 device_root, pctldev, &pinctrl_groups_ops); 1644 device_root, pctldev, &pinctrl_groups_ops);
1643 debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO, 1645 debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO,
1644 device_root, pctldev, &pinctrl_gpioranges_ops); 1646 device_root, pctldev, &pinctrl_gpioranges_ops);
1645 pinmux_init_device_debugfs(device_root, pctldev); 1647 if (pctldev->desc->pmxops)
1646 pinconf_init_device_debugfs(device_root, pctldev); 1648 pinmux_init_device_debugfs(device_root, pctldev);
1649 if (pctldev->desc->confops)
1650 pinconf_init_device_debugfs(device_root, pctldev);
1647} 1651}
1648 1652
1649static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) 1653static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev)
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 38c6f8b9790e..d990e33d8aa7 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -1286,22 +1286,22 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type)
1286 1286
1287 switch (type) { 1287 switch (type) {
1288 case IRQ_TYPE_EDGE_RISING: 1288 case IRQ_TYPE_EDGE_RISING:
1289 irq_set_handler(d->irq, handle_simple_irq); 1289 __irq_set_handler_locked(d->irq, handle_simple_irq);
1290 writel_relaxed(mask, pio + PIO_ESR); 1290 writel_relaxed(mask, pio + PIO_ESR);
1291 writel_relaxed(mask, pio + PIO_REHLSR); 1291 writel_relaxed(mask, pio + PIO_REHLSR);
1292 break; 1292 break;
1293 case IRQ_TYPE_EDGE_FALLING: 1293 case IRQ_TYPE_EDGE_FALLING:
1294 irq_set_handler(d->irq, handle_simple_irq); 1294 __irq_set_handler_locked(d->irq, handle_simple_irq);
1295 writel_relaxed(mask, pio + PIO_ESR); 1295 writel_relaxed(mask, pio + PIO_ESR);
1296 writel_relaxed(mask, pio + PIO_FELLSR); 1296 writel_relaxed(mask, pio + PIO_FELLSR);
1297 break; 1297 break;
1298 case IRQ_TYPE_LEVEL_LOW: 1298 case IRQ_TYPE_LEVEL_LOW:
1299 irq_set_handler(d->irq, handle_level_irq); 1299 __irq_set_handler_locked(d->irq, handle_level_irq);
1300 writel_relaxed(mask, pio + PIO_LSR); 1300 writel_relaxed(mask, pio + PIO_LSR);
1301 writel_relaxed(mask, pio + PIO_FELLSR); 1301 writel_relaxed(mask, pio + PIO_FELLSR);
1302 break; 1302 break;
1303 case IRQ_TYPE_LEVEL_HIGH: 1303 case IRQ_TYPE_LEVEL_HIGH:
1304 irq_set_handler(d->irq, handle_level_irq); 1304 __irq_set_handler_locked(d->irq, handle_level_irq);
1305 writel_relaxed(mask, pio + PIO_LSR); 1305 writel_relaxed(mask, pio + PIO_LSR);
1306 writel_relaxed(mask, pio + PIO_REHLSR); 1306 writel_relaxed(mask, pio + PIO_REHLSR);
1307 break; 1307 break;
@@ -1310,7 +1310,7 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type)
1310 * disable additional interrupt modes: 1310 * disable additional interrupt modes:
1311 * fall back to default behavior 1311 * fall back to default behavior
1312 */ 1312 */
1313 irq_set_handler(d->irq, handle_simple_irq); 1313 __irq_set_handler_locked(d->irq, handle_simple_irq);
1314 writel_relaxed(mask, pio + PIO_AIMDR); 1314 writel_relaxed(mask, pio + PIO_AIMDR);
1315 return 0; 1315 return 0;
1316 case IRQ_TYPE_NONE: 1316 case IRQ_TYPE_NONE:
diff --git a/drivers/pinctrl/pinctrl-imx1-core.c b/drivers/pinctrl/pinctrl-imx1-core.c
index 17aecde1b51d..815384b377b5 100644
--- a/drivers/pinctrl/pinctrl-imx1-core.c
+++ b/drivers/pinctrl/pinctrl-imx1-core.c
@@ -45,7 +45,7 @@ struct imx1_pinctrl {
45#define MX1_DDIR 0x00 45#define MX1_DDIR 0x00
46#define MX1_OCR 0x04 46#define MX1_OCR 0x04
47#define MX1_ICONFA 0x0c 47#define MX1_ICONFA 0x0c
48#define MX1_ICONFB 0x10 48#define MX1_ICONFB 0x14
49#define MX1_GIUS 0x20 49#define MX1_GIUS 0x20
50#define MX1_GPR 0x38 50#define MX1_GPR 0x38
51#define MX1_PUEN 0x40 51#define MX1_PUEN 0x40
@@ -97,13 +97,13 @@ static void imx1_write_2bit(struct imx1_pinctrl *ipctl, unsigned int pin_id,
97 u32 old_val; 97 u32 old_val;
98 u32 new_val; 98 u32 new_val;
99 99
100 dev_dbg(ipctl->dev, "write: register 0x%p offset %d value 0x%x\n",
101 reg, offset, value);
102
103 /* Use the next register if the pin's port pin number is >=16 */ 100 /* Use the next register if the pin's port pin number is >=16 */
104 if (pin_id % 32 >= 16) 101 if (pin_id % 32 >= 16)
105 reg += 0x04; 102 reg += 0x04;
106 103
104 dev_dbg(ipctl->dev, "write: register 0x%p offset %d value 0x%x\n",
105 reg, offset, value);
106
107 /* Get current state of pins */ 107 /* Get current state of pins */
108 old_val = readl(reg); 108 old_val = readl(reg);
109 old_val &= mask; 109 old_val &= mask;
@@ -139,7 +139,7 @@ static int imx1_read_2bit(struct imx1_pinctrl *ipctl, unsigned int pin_id,
139 u32 reg_offset) 139 u32 reg_offset)
140{ 140{
141 void __iomem *reg = imx1_mem(ipctl, pin_id) + reg_offset; 141 void __iomem *reg = imx1_mem(ipctl, pin_id) + reg_offset;
142 int offset = pin_id % 16; 142 int offset = (pin_id % 16) * 2;
143 143
144 /* Use the next register if the pin's port pin number is >=16 */ 144 /* Use the next register if the pin's port pin number is >=16 */
145 if (pin_id % 32 >= 16) 145 if (pin_id % 32 >= 16)
diff --git a/drivers/pinctrl/pinctrl-tegra.c b/drivers/pinctrl/pinctrl-tegra.c
index a2e93a2b5ff4..e767355ab0ad 100644
--- a/drivers/pinctrl/pinctrl-tegra.c
+++ b/drivers/pinctrl/pinctrl-tegra.c
@@ -645,7 +645,7 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
645 GFP_KERNEL); 645 GFP_KERNEL);
646 if (!pmx->regs) { 646 if (!pmx->regs) {
647 dev_err(&pdev->dev, "Can't alloc regs pointer\n"); 647 dev_err(&pdev->dev, "Can't alloc regs pointer\n");
648 return -ENODEV; 648 return -ENOMEM;
649 } 649 }
650 650
651 for (i = 0; i < pmx->nbanks; i++) { 651 for (i = 0; i < pmx->nbanks; i++) {
diff --git a/drivers/pinctrl/sirf/pinctrl-prima2.c b/drivers/pinctrl/sirf/pinctrl-prima2.c
index 37b42651d76a..dde0285544d6 100644
--- a/drivers/pinctrl/sirf/pinctrl-prima2.c
+++ b/drivers/pinctrl/sirf/pinctrl-prima2.c
@@ -413,7 +413,7 @@ static const struct sirfsoc_padmux ac97_padmux = {
413 .funcval = 0, 413 .funcval = 0,
414}; 414};
415 415
416static const unsigned ac97_pins[] = { 33, 34, 35, 36 }; 416static const unsigned ac97_pins[] = { 43, 44, 45, 46 };
417 417
418static const struct sirfsoc_muxmask spi1_muxmask[] = { 418static const struct sirfsoc_muxmask spi1_muxmask[] = {
419 { 419 {
diff --git a/drivers/pinctrl/vt8500/pinctrl-wmt.c b/drivers/pinctrl/vt8500/pinctrl-wmt.c
index b28d1af9c232..9802b67040cc 100644
--- a/drivers/pinctrl/vt8500/pinctrl-wmt.c
+++ b/drivers/pinctrl/vt8500/pinctrl-wmt.c
@@ -276,7 +276,20 @@ static int wmt_pctl_dt_node_to_map_pull(struct wmt_pinctrl_data *data,
276 if (!configs) 276 if (!configs)
277 return -ENOMEM; 277 return -ENOMEM;
278 278
279 configs[0] = pull; 279 switch (pull) {
280 case 0:
281 configs[0] = PIN_CONFIG_BIAS_DISABLE;
282 break;
283 case 1:
284 configs[0] = PIN_CONFIG_BIAS_PULL_DOWN;
285 break;
286 case 2:
287 configs[0] = PIN_CONFIG_BIAS_PULL_UP;
288 break;
289 default:
290 configs[0] = PIN_CONFIG_BIAS_DISABLE;
291 dev_err(data->dev, "invalid pull state %d - disabling\n", pull);
292 }
280 293
281 map->type = PIN_MAP_TYPE_CONFIGS_PIN; 294 map->type = PIN_MAP_TYPE_CONFIGS_PIN;
282 map->data.configs.group_or_pin = data->groups[group]; 295 map->data.configs.group_or_pin = data->groups[group];
diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
index 563174891c90..041f9b638d28 100644
--- a/drivers/power/ds2782_battery.c
+++ b/drivers/power/ds2782_battery.c
@@ -192,7 +192,7 @@ static int ds2786_get_voltage(struct ds278x_info *info, int *voltage_uV)
192 192
193 /* 193 /*
194 * Voltage is measured in units of 1.22mV. The voltage is stored as 194 * Voltage is measured in units of 1.22mV. The voltage is stored as
195 * a 10-bit number plus sign, in the upper bits of a 16-bit register 195 * a 12-bit number plus sign, in the upper bits of a 16-bit register
196 */ 196 */
197 err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw); 197 err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw);
198 if (err) 198 if (err)
diff --git a/drivers/power/isp1704_charger.c b/drivers/power/isp1704_charger.c
index 80edb7d8cb54..0b4cf9d63291 100644
--- a/drivers/power/isp1704_charger.c
+++ b/drivers/power/isp1704_charger.c
@@ -444,8 +444,6 @@ static int isp1704_charger_probe(struct platform_device *pdev)
444 ret = PTR_ERR(isp->phy); 444 ret = PTR_ERR(isp->phy);
445 goto fail0; 445 goto fail0;
446 } 446 }
447 if (!isp->phy)
448 goto fail0;
449 447
450 isp->dev = &pdev->dev; 448 isp->dev = &pdev->dev;
451 platform_set_drvdata(pdev, isp); 449 platform_set_drvdata(pdev, isp);
diff --git a/drivers/power/max17040_battery.c b/drivers/power/max17040_battery.c
index c7ff6d67f158..0fbac861080d 100644
--- a/drivers/power/max17040_battery.c
+++ b/drivers/power/max17040_battery.c
@@ -148,7 +148,7 @@ static void max17040_get_online(struct i2c_client *client)
148{ 148{
149 struct max17040_chip *chip = i2c_get_clientdata(client); 149 struct max17040_chip *chip = i2c_get_clientdata(client);
150 150
151 if (chip->pdata->battery_online) 151 if (chip->pdata && chip->pdata->battery_online)
152 chip->online = chip->pdata->battery_online(); 152 chip->online = chip->pdata->battery_online();
153 else 153 else
154 chip->online = 1; 154 chip->online = 1;
@@ -158,7 +158,8 @@ static void max17040_get_status(struct i2c_client *client)
158{ 158{
159 struct max17040_chip *chip = i2c_get_clientdata(client); 159 struct max17040_chip *chip = i2c_get_clientdata(client);
160 160
161 if (!chip->pdata->charger_online || !chip->pdata->charger_enable) { 161 if (!chip->pdata || !chip->pdata->charger_online
162 || !chip->pdata->charger_enable) {
162 chip->status = POWER_SUPPLY_STATUS_UNKNOWN; 163 chip->status = POWER_SUPPLY_STATUS_UNKNOWN;
163 return; 164 return;
164 } 165 }
diff --git a/drivers/regulator/ab3100.c b/drivers/regulator/ab3100.c
index 77b46d0b37a6..e10febe9ec34 100644
--- a/drivers/regulator/ab3100.c
+++ b/drivers/regulator/ab3100.c
@@ -498,7 +498,7 @@ static int ab3100_regulator_register(struct platform_device *pdev,
498 struct ab3100_platform_data *plfdata, 498 struct ab3100_platform_data *plfdata,
499 struct regulator_init_data *init_data, 499 struct regulator_init_data *init_data,
500 struct device_node *np, 500 struct device_node *np,
501 int id) 501 unsigned long id)
502{ 502{
503 struct regulator_desc *desc; 503 struct regulator_desc *desc;
504 struct ab3100_regulator *reg; 504 struct ab3100_regulator *reg;
@@ -646,7 +646,7 @@ ab3100_regulator_of_probe(struct platform_device *pdev, struct device_node *np)
646 err = ab3100_regulator_register( 646 err = ab3100_regulator_register(
647 pdev, NULL, ab3100_regulator_matches[i].init_data, 647 pdev, NULL, ab3100_regulator_matches[i].init_data,
648 ab3100_regulator_matches[i].of_node, 648 ab3100_regulator_matches[i].of_node,
649 (int) ab3100_regulator_matches[i].driver_data); 649 (unsigned long)ab3100_regulator_matches[i].driver_data);
650 if (err) { 650 if (err) {
651 ab3100_regulators_remove(pdev); 651 ab3100_regulators_remove(pdev);
652 return err; 652 return err;
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index b38a6b669e8c..16a309e5c024 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1272,6 +1272,8 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
1272 if (r->dev.parent && 1272 if (r->dev.parent &&
1273 node == r->dev.of_node) 1273 node == r->dev.of_node)
1274 return r; 1274 return r;
1275 *ret = -EPROBE_DEFER;
1276 return NULL;
1275 } else { 1277 } else {
1276 /* 1278 /*
1277 * If we couldn't even get the node then it's 1279 * If we couldn't even get the node then it's
@@ -1312,7 +1314,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
1312 struct regulator_dev *rdev; 1314 struct regulator_dev *rdev;
1313 struct regulator *regulator = ERR_PTR(-EPROBE_DEFER); 1315 struct regulator *regulator = ERR_PTR(-EPROBE_DEFER);
1314 const char *devname = NULL; 1316 const char *devname = NULL;
1315 int ret = -EPROBE_DEFER; 1317 int ret;
1316 1318
1317 if (id == NULL) { 1319 if (id == NULL) {
1318 pr_err("get() with no identifier\n"); 1320 pr_err("get() with no identifier\n");
@@ -1322,6 +1324,11 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
1322 if (dev) 1324 if (dev)
1323 devname = dev_name(dev); 1325 devname = dev_name(dev);
1324 1326
1327 if (have_full_constraints())
1328 ret = -ENODEV;
1329 else
1330 ret = -EPROBE_DEFER;
1331
1325 mutex_lock(&regulator_list_mutex); 1332 mutex_lock(&regulator_list_mutex);
1326 1333
1327 rdev = regulator_dev_lookup(dev, id, &ret); 1334 rdev = regulator_dev_lookup(dev, id, &ret);
diff --git a/drivers/regulator/da9055-regulator.c b/drivers/regulator/da9055-regulator.c
index 7f340206d329..b14ebdad5dd2 100644
--- a/drivers/regulator/da9055-regulator.c
+++ b/drivers/regulator/da9055-regulator.c
@@ -576,7 +576,9 @@ static int da9055_regulator_probe(struct platform_device *pdev)
576 /* Only LDO 5 and 6 has got the over current interrupt */ 576 /* Only LDO 5 and 6 has got the over current interrupt */
577 if (pdev->id == DA9055_ID_LDO5 || pdev->id == DA9055_ID_LDO6) { 577 if (pdev->id == DA9055_ID_LDO5 || pdev->id == DA9055_ID_LDO6) {
578 irq = platform_get_irq_byname(pdev, "REGULATOR"); 578 irq = platform_get_irq_byname(pdev, "REGULATOR");
579 irq = regmap_irq_get_virq(da9055->irq_data, irq); 579 if (irq < 0)
580 return irq;
581
580 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, 582 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
581 da9055_ldo5_6_oc_irq, 583 da9055_ldo5_6_oc_irq,
582 IRQF_TRIGGER_HIGH | 584 IRQF_TRIGGER_HIGH |
diff --git a/drivers/regulator/max14577.c b/drivers/regulator/max14577.c
index b1078ba3f393..186df8785a91 100644
--- a/drivers/regulator/max14577.c
+++ b/drivers/regulator/max14577.c
@@ -168,10 +168,11 @@ static int max14577_regulator_dt_parse_pdata(struct platform_device *pdev)
168 MAX14577_REG_MAX); 168 MAX14577_REG_MAX);
169 if (ret < 0) { 169 if (ret < 0) {
170 dev_err(&pdev->dev, "Error parsing regulator init data: %d\n", ret); 170 dev_err(&pdev->dev, "Error parsing regulator init data: %d\n", ret);
171 return ret;
172 } 171 }
173 172
174 return 0; 173 of_node_put(np);
174
175 return ret;
175} 176}
176 177
177static inline struct regulator_init_data *match_init_data(int index) 178static inline struct regulator_init_data *match_init_data(int index)
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index d9e557990577..cd0b9e35a56d 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -441,6 +441,7 @@ common_reg:
441 for (i = 0; i < S2MPS11_REGULATOR_MAX; i++) { 441 for (i = 0; i < S2MPS11_REGULATOR_MAX; i++) {
442 if (!reg_np) { 442 if (!reg_np) {
443 config.init_data = pdata->regulators[i].initdata; 443 config.init_data = pdata->regulators[i].initdata;
444 config.of_node = pdata->regulators[i].reg_node;
444 } else { 445 } else {
445 config.init_data = rdata[i].init_data; 446 config.init_data = rdata[i].init_data;
446 config.of_node = rdata[i].of_node; 447 config.of_node = rdata[i].of_node;
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index 309b8b342d9c..596374304532 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -24,7 +24,7 @@
24 24
25#include <mach/at91_rtt.h> 25#include <mach/at91_rtt.h>
26#include <mach/cpu.h> 26#include <mach/cpu.h>
27 27#include <mach/hardware.h>
28 28
29/* 29/*
30 * This driver uses two configurable hardware resources that live in the 30 * This driver uses two configurable hardware resources that live in the
diff --git a/drivers/rtc/rtc-pxa.c b/drivers/rtc/rtc-pxa.c
index a355f2b82bb8..cccbf9d89729 100644
--- a/drivers/rtc/rtc-pxa.c
+++ b/drivers/rtc/rtc-pxa.c
@@ -32,7 +32,6 @@
32 32
33#include <mach/hardware.h> 33#include <mach/hardware.h>
34 34
35#define TIMER_FREQ CLOCK_TICK_RATE
36#define RTC_DEF_DIVIDER (32768 - 1) 35#define RTC_DEF_DIVIDER (32768 - 1)
37#define RTC_DEF_TRIM 0 36#define RTC_DEF_TRIM 0
38#define MAXFREQ_PERIODIC 1000 37#define MAXFREQ_PERIODIC 1000
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c
index 88e35d85d205..8ee88c4ebd83 100644
--- a/drivers/s390/cio/cio.c
+++ b/drivers/s390/cio/cio.c
@@ -342,8 +342,9 @@ static int cio_check_config(struct subchannel *sch, struct schib *schib)
342 */ 342 */
343int cio_commit_config(struct subchannel *sch) 343int cio_commit_config(struct subchannel *sch)
344{ 344{
345 struct schib schib;
346 int ccode, retry, ret = 0; 345 int ccode, retry, ret = 0;
346 struct schib schib;
347 struct irb irb;
347 348
348 if (stsch_err(sch->schid, &schib) || !css_sch_is_valid(&schib)) 349 if (stsch_err(sch->schid, &schib) || !css_sch_is_valid(&schib))
349 return -ENODEV; 350 return -ENODEV;
@@ -367,7 +368,10 @@ int cio_commit_config(struct subchannel *sch)
367 ret = -EAGAIN; 368 ret = -EAGAIN;
368 break; 369 break;
369 case 1: /* status pending */ 370 case 1: /* status pending */
370 return -EBUSY; 371 ret = -EBUSY;
372 if (tsch(sch->schid, &irb))
373 return ret;
374 break;
371 case 2: /* busy */ 375 case 2: /* busy */
372 udelay(100); /* allow for recovery */ 376 udelay(100); /* allow for recovery */
373 ret = -EBUSY; 377 ret = -EBUSY;
@@ -403,7 +407,6 @@ EXPORT_SYMBOL_GPL(cio_update_schib);
403 */ 407 */
404int cio_enable_subchannel(struct subchannel *sch, u32 intparm) 408int cio_enable_subchannel(struct subchannel *sch, u32 intparm)
405{ 409{
406 int retry;
407 int ret; 410 int ret;
408 411
409 CIO_TRACE_EVENT(2, "ensch"); 412 CIO_TRACE_EVENT(2, "ensch");
@@ -418,20 +421,14 @@ int cio_enable_subchannel(struct subchannel *sch, u32 intparm)
418 sch->config.isc = sch->isc; 421 sch->config.isc = sch->isc;
419 sch->config.intparm = intparm; 422 sch->config.intparm = intparm;
420 423
421 for (retry = 0; retry < 3; retry++) { 424 ret = cio_commit_config(sch);
425 if (ret == -EIO) {
426 /*
427 * Got a program check in msch. Try without
428 * the concurrent sense bit the next time.
429 */
430 sch->config.csense = 0;
422 ret = cio_commit_config(sch); 431 ret = cio_commit_config(sch);
423 if (ret == -EIO) {
424 /*
425 * Got a program check in msch. Try without
426 * the concurrent sense bit the next time.
427 */
428 sch->config.csense = 0;
429 } else if (ret == -EBUSY) {
430 struct irb irb;
431 if (tsch(sch->schid, &irb) != 0)
432 break;
433 } else
434 break;
435 } 432 }
436 CIO_HEX_EVENT(2, &ret, sizeof(ret)); 433 CIO_HEX_EVENT(2, &ret, sizeof(ret));
437 return ret; 434 return ret;
@@ -444,7 +441,6 @@ EXPORT_SYMBOL_GPL(cio_enable_subchannel);
444 */ 441 */
445int cio_disable_subchannel(struct subchannel *sch) 442int cio_disable_subchannel(struct subchannel *sch)
446{ 443{
447 int retry;
448 int ret; 444 int ret;
449 445
450 CIO_TRACE_EVENT(2, "dissch"); 446 CIO_TRACE_EVENT(2, "dissch");
@@ -456,16 +452,8 @@ int cio_disable_subchannel(struct subchannel *sch)
456 return -ENODEV; 452 return -ENODEV;
457 453
458 sch->config.ena = 0; 454 sch->config.ena = 0;
455 ret = cio_commit_config(sch);
459 456
460 for (retry = 0; retry < 3; retry++) {
461 ret = cio_commit_config(sch);
462 if (ret == -EBUSY) {
463 struct irb irb;
464 if (tsch(sch->schid, &irb) != 0)
465 break;
466 } else
467 break;
468 }
469 CIO_HEX_EVENT(2, &ret, sizeof(ret)); 457 CIO_HEX_EVENT(2, &ret, sizeof(ret));
470 return ret; 458 return ret;
471} 459}
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
index 8acaae18bd11..a563e4c00590 100644
--- a/drivers/s390/cio/qdio.h
+++ b/drivers/s390/cio/qdio.h
@@ -359,14 +359,12 @@ static inline int multicast_outbound(struct qdio_q *q)
359#define need_siga_sync_out_after_pci(q) \ 359#define need_siga_sync_out_after_pci(q) \
360 (unlikely(q->irq_ptr->siga_flag.sync_out_after_pci)) 360 (unlikely(q->irq_ptr->siga_flag.sync_out_after_pci))
361 361
362#define for_each_input_queue(irq_ptr, q, i) \ 362#define for_each_input_queue(irq_ptr, q, i) \
363 for (i = 0, q = irq_ptr->input_qs[0]; \ 363 for (i = 0; i < irq_ptr->nr_input_qs && \
364 i < irq_ptr->nr_input_qs; \ 364 ({ q = irq_ptr->input_qs[i]; 1; }); i++)
365 q = irq_ptr->input_qs[++i]) 365#define for_each_output_queue(irq_ptr, q, i) \
366#define for_each_output_queue(irq_ptr, q, i) \ 366 for (i = 0; i < irq_ptr->nr_output_qs && \
367 for (i = 0, q = irq_ptr->output_qs[0]; \ 367 ({ q = irq_ptr->output_qs[i]; 1; }); i++)
368 i < irq_ptr->nr_output_qs; \
369 q = irq_ptr->output_qs[++i])
370 368
371#define prev_buf(bufnr) \ 369#define prev_buf(bufnr) \
372 ((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK) 370 ((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK)
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index c883a085c059..77466c4faabb 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -996,7 +996,7 @@ static void qdio_int_handler_pci(struct qdio_irq *irq_ptr)
996 } 996 }
997 } 997 }
998 998
999 if (!pci_out_supported(q)) 999 if (!(irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED))
1000 return; 1000 return;
1001 1001
1002 for_each_output_queue(irq_ptr, q, i) { 1002 for_each_output_queue(irq_ptr, q, i) {
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 9e80d61e5a3a..2eb97d7e8d12 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -2595,8 +2595,6 @@ static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha,
2595 return -ENOMEM; 2595 return -ENOMEM;
2596 } 2596 }
2597 2597
2598 INIT_LIST_HEAD(&cmd->cmd_list);
2599
2600 memcpy(&cmd->atio, atio, sizeof(*atio)); 2598 memcpy(&cmd->atio, atio, sizeof(*atio));
2601 cmd->state = QLA_TGT_STATE_NEW; 2599 cmd->state = QLA_TGT_STATE_NEW;
2602 cmd->tgt = vha->vha_tgt.qla_tgt; 2600 cmd->tgt = vha->vha_tgt.qla_tgt;
diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
index 1d10eecad499..66e755cdde57 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -855,7 +855,6 @@ struct qla_tgt_cmd {
855 uint16_t loop_id; /* to save extra sess dereferences */ 855 uint16_t loop_id; /* to save extra sess dereferences */
856 struct qla_tgt *tgt; /* to save extra sess dereferences */ 856 struct qla_tgt *tgt; /* to save extra sess dereferences */
857 struct scsi_qla_host *vha; 857 struct scsi_qla_host *vha;
858 struct list_head cmd_list;
859 858
860 struct atio_from_isp atio; 859 struct atio_from_isp atio;
861}; 860};
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index ba9310bc9acb..581ee2a8856b 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -376,10 +376,10 @@ config SPI_PXA2XX_PCI
376 def_tristate SPI_PXA2XX && PCI 376 def_tristate SPI_PXA2XX && PCI
377 377
378config SPI_RSPI 378config SPI_RSPI
379 tristate "Renesas RSPI controller" 379 tristate "Renesas RSPI/QSPI controller"
380 depends on (SUPERH && SH_DMAE_BASE) || ARCH_SHMOBILE 380 depends on (SUPERH && SH_DMAE_BASE) || ARCH_SHMOBILE
381 help 381 help
382 SPI driver for Renesas RSPI blocks. 382 SPI driver for Renesas RSPI and QSPI blocks.
383 383
384config SPI_S3C24XX 384config SPI_S3C24XX
385 tristate "Samsung S3C24XX series SPI" 385 tristate "Samsung S3C24XX series SPI"
diff --git a/drivers/spi/spi-nuc900.c b/drivers/spi/spi-nuc900.c
index 50406306bc20..bae97ffec4b9 100644
--- a/drivers/spi/spi-nuc900.c
+++ b/drivers/spi/spi-nuc900.c
@@ -361,6 +361,8 @@ static int nuc900_spi_probe(struct platform_device *pdev)
361 init_completion(&hw->done); 361 init_completion(&hw->done);
362 362
363 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; 363 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
364 if (hw->pdata->lsb)
365 master->mode_bits |= SPI_LSB_FIRST;
364 master->num_chipselect = hw->pdata->num_cs; 366 master->num_chipselect = hw->pdata->num_cs;
365 master->bus_num = hw->pdata->bus_num; 367 master->bus_num = hw->pdata->bus_num;
366 hw->bitbang.master = hw->master; 368 hw->bitbang.master = hw->master;
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 23756b0f9036..d0b28bba38be 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -755,9 +755,7 @@ static void spi_pump_messages(struct kthread_work *work)
755 ret = master->transfer_one_message(master, master->cur_msg); 755 ret = master->transfer_one_message(master, master->cur_msg);
756 if (ret) { 756 if (ret) {
757 dev_err(&master->dev, 757 dev_err(&master->dev,
758 "failed to transfer one message from queue: %d\n", ret); 758 "failed to transfer one message from queue\n");
759 master->cur_msg->status = ret;
760 spi_finalize_current_message(master);
761 return; 759 return;
762 } 760 }
763} 761}
diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
index 23948f167012..713a97226787 100644
--- a/drivers/staging/android/ashmem.c
+++ b/drivers/staging/android/ashmem.c
@@ -295,21 +295,29 @@ static ssize_t ashmem_read(struct file *file, char __user *buf,
295 295
296 /* If size is not set, or set to 0, always return EOF. */ 296 /* If size is not set, or set to 0, always return EOF. */
297 if (asma->size == 0) 297 if (asma->size == 0)
298 goto out; 298 goto out_unlock;
299 299
300 if (!asma->file) { 300 if (!asma->file) {
301 ret = -EBADF; 301 ret = -EBADF;
302 goto out; 302 goto out_unlock;
303 } 303 }
304 304
305 ret = asma->file->f_op->read(asma->file, buf, len, pos); 305 mutex_unlock(&ashmem_mutex);
306 if (ret < 0)
307 goto out;
308 306
309 /** Update backing file pos, since f_ops->read() doesn't */ 307 /*
310 asma->file->f_pos = *pos; 308 * asma and asma->file are used outside the lock here. We assume
309 * once asma->file is set it will never be changed, and will not
310 * be destroyed until all references to the file are dropped and
311 * ashmem_release is called.
312 */
313 ret = asma->file->f_op->read(asma->file, buf, len, pos);
314 if (ret >= 0) {
315 /** Update backing file pos, since f_ops->read() doesn't */
316 asma->file->f_pos = *pos;
317 }
318 return ret;
311 319
312out: 320out_unlock:
313 mutex_unlock(&ashmem_mutex); 321 mutex_unlock(&ashmem_mutex);
314 return ret; 322 return ret;
315} 323}
@@ -498,6 +506,7 @@ out:
498 506
499static int set_name(struct ashmem_area *asma, void __user *name) 507static int set_name(struct ashmem_area *asma, void __user *name)
500{ 508{
509 int len;
501 int ret = 0; 510 int ret = 0;
502 char local_name[ASHMEM_NAME_LEN]; 511 char local_name[ASHMEM_NAME_LEN];
503 512
@@ -510,21 +519,19 @@ static int set_name(struct ashmem_area *asma, void __user *name)
510 * variable that does not need protection and later copy the local 519 * variable that does not need protection and later copy the local
511 * variable to the structure member with lock held. 520 * variable to the structure member with lock held.
512 */ 521 */
513 if (copy_from_user(local_name, name, ASHMEM_NAME_LEN)) 522 len = strncpy_from_user(local_name, name, ASHMEM_NAME_LEN);
514 return -EFAULT; 523 if (len < 0)
515 524 return len;
525 if (len == ASHMEM_NAME_LEN)
526 local_name[ASHMEM_NAME_LEN - 1] = '\0';
516 mutex_lock(&ashmem_mutex); 527 mutex_lock(&ashmem_mutex);
517 /* cannot change an existing mapping's name */ 528 /* cannot change an existing mapping's name */
518 if (unlikely(asma->file)) { 529 if (unlikely(asma->file))
519 ret = -EINVAL; 530 ret = -EINVAL;
520 goto out; 531 else
521 } 532 strcpy(asma->name + ASHMEM_NAME_PREFIX_LEN, local_name);
522 memcpy(asma->name + ASHMEM_NAME_PREFIX_LEN,
523 local_name, ASHMEM_NAME_LEN);
524 asma->name[ASHMEM_FULL_NAME_LEN-1] = '\0';
525out:
526 mutex_unlock(&ashmem_mutex);
527 533
534 mutex_unlock(&ashmem_mutex);
528 return ret; 535 return ret;
529} 536}
530 537
diff --git a/drivers/staging/android/ion/compat_ion.c b/drivers/staging/android/ion/compat_ion.c
index af6cd370b30f..ee3a7380e53b 100644
--- a/drivers/staging/android/ion/compat_ion.c
+++ b/drivers/staging/android/ion/compat_ion.c
@@ -35,9 +35,14 @@ struct compat_ion_custom_data {
35 compat_ulong_t arg; 35 compat_ulong_t arg;
36}; 36};
37 37
38struct compat_ion_handle_data {
39 compat_int_t handle;
40};
41
38#define COMPAT_ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \ 42#define COMPAT_ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \
39 struct compat_ion_allocation_data) 43 struct compat_ion_allocation_data)
40#define COMPAT_ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) 44#define COMPAT_ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, \
45 struct compat_ion_handle_data)
41#define COMPAT_ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, \ 46#define COMPAT_ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, \
42 struct compat_ion_custom_data) 47 struct compat_ion_custom_data)
43 48
@@ -64,6 +69,19 @@ static int compat_get_ion_allocation_data(
64 return err; 69 return err;
65} 70}
66 71
72static int compat_get_ion_handle_data(
73 struct compat_ion_handle_data __user *data32,
74 struct ion_handle_data __user *data)
75{
76 compat_int_t i;
77 int err;
78
79 err = get_user(i, &data32->handle);
80 err |= put_user(i, &data->handle);
81
82 return err;
83}
84
67static int compat_put_ion_allocation_data( 85static int compat_put_ion_allocation_data(
68 struct compat_ion_allocation_data __user *data32, 86 struct compat_ion_allocation_data __user *data32,
69 struct ion_allocation_data __user *data) 87 struct ion_allocation_data __user *data)
@@ -132,8 +150,8 @@ long compat_ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
132 } 150 }
133 case COMPAT_ION_IOC_FREE: 151 case COMPAT_ION_IOC_FREE:
134 { 152 {
135 struct compat_ion_allocation_data __user *data32; 153 struct compat_ion_handle_data __user *data32;
136 struct ion_allocation_data __user *data; 154 struct ion_handle_data __user *data;
137 int err; 155 int err;
138 156
139 data32 = compat_ptr(arg); 157 data32 = compat_ptr(arg);
@@ -141,7 +159,7 @@ long compat_ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
141 if (data == NULL) 159 if (data == NULL)
142 return -EFAULT; 160 return -EFAULT;
143 161
144 err = compat_get_ion_allocation_data(data32, data); 162 err = compat_get_ion_handle_data(data32, data);
145 if (err) 163 if (err)
146 return err; 164 return err;
147 165
diff --git a/drivers/staging/android/ion/ion_dummy_driver.c b/drivers/staging/android/ion/ion_dummy_driver.c
index 55b2002753f2..01cdc8aee898 100644
--- a/drivers/staging/android/ion/ion_dummy_driver.c
+++ b/drivers/staging/android/ion/ion_dummy_driver.c
@@ -17,9 +17,11 @@
17#include <linux/err.h> 17#include <linux/err.h>
18#include <linux/platform_device.h> 18#include <linux/platform_device.h>
19#include <linux/slab.h> 19#include <linux/slab.h>
20#include <linux/init.h>
20#include <linux/bootmem.h> 21#include <linux/bootmem.h>
21#include <linux/memblock.h> 22#include <linux/memblock.h>
22#include <linux/sizes.h> 23#include <linux/sizes.h>
24#include <linux/io.h>
23#include "ion.h" 25#include "ion.h"
24#include "ion_priv.h" 26#include "ion_priv.h"
25 27
@@ -57,7 +59,7 @@ struct ion_platform_heap dummy_heaps[] = {
57}; 59};
58 60
59struct ion_platform_data dummy_ion_pdata = { 61struct ion_platform_data dummy_ion_pdata = {
60 .nr = 4, 62 .nr = ARRAY_SIZE(dummy_heaps),
61 .heaps = dummy_heaps, 63 .heaps = dummy_heaps,
62}; 64};
63 65
@@ -69,7 +71,7 @@ static int __init ion_dummy_init(void)
69 heaps = kzalloc(sizeof(struct ion_heap *) * dummy_ion_pdata.nr, 71 heaps = kzalloc(sizeof(struct ion_heap *) * dummy_ion_pdata.nr,
70 GFP_KERNEL); 72 GFP_KERNEL);
71 if (!heaps) 73 if (!heaps)
72 return PTR_ERR(heaps); 74 return -ENOMEM;
73 75
74 76
75 /* Allocate a dummy carveout heap */ 77 /* Allocate a dummy carveout heap */
@@ -128,6 +130,7 @@ err:
128 } 130 }
129 return err; 131 return err;
130} 132}
133device_initcall(ion_dummy_init);
131 134
132static void __exit ion_dummy_exit(void) 135static void __exit ion_dummy_exit(void)
133{ 136{
@@ -152,7 +155,4 @@ static void __exit ion_dummy_exit(void)
152 155
153 return; 156 return;
154} 157}
155 158__exitcall(ion_dummy_exit);
156module_init(ion_dummy_init);
157module_exit(ion_dummy_exit);
158
diff --git a/drivers/staging/android/ion/ion_heap.c b/drivers/staging/android/ion/ion_heap.c
index 296c74f98dc0..37e64d51394c 100644
--- a/drivers/staging/android/ion/ion_heap.c
+++ b/drivers/staging/android/ion/ion_heap.c
@@ -243,12 +243,12 @@ int ion_heap_init_deferred_free(struct ion_heap *heap)
243 init_waitqueue_head(&heap->waitqueue); 243 init_waitqueue_head(&heap->waitqueue);
244 heap->task = kthread_run(ion_heap_deferred_free, heap, 244 heap->task = kthread_run(ion_heap_deferred_free, heap,
245 "%s", heap->name); 245 "%s", heap->name);
246 sched_setscheduler(heap->task, SCHED_IDLE, &param);
247 if (IS_ERR(heap->task)) { 246 if (IS_ERR(heap->task)) {
248 pr_err("%s: creating thread for deferred free failed\n", 247 pr_err("%s: creating thread for deferred free failed\n",
249 __func__); 248 __func__);
250 return PTR_RET(heap->task); 249 return PTR_RET(heap->task);
251 } 250 }
251 sched_setscheduler(heap->task, SCHED_IDLE, &param);
252 return 0; 252 return 0;
253} 253}
254 254
diff --git a/drivers/staging/android/ion/ion_priv.h b/drivers/staging/android/ion/ion_priv.h
index d98673981cc4..fc2e4fccf69d 100644
--- a/drivers/staging/android/ion/ion_priv.h
+++ b/drivers/staging/android/ion/ion_priv.h
@@ -17,6 +17,7 @@
17#ifndef _ION_PRIV_H 17#ifndef _ION_PRIV_H
18#define _ION_PRIV_H 18#define _ION_PRIV_H
19 19
20#include <linux/device.h>
20#include <linux/dma-direction.h> 21#include <linux/dma-direction.h>
21#include <linux/kref.h> 22#include <linux/kref.h>
22#include <linux/mm_types.h> 23#include <linux/mm_types.h>
diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
index 7f0729130d65..9849f3963e75 100644
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ b/drivers/staging/android/ion/ion_system_heap.c
@@ -124,6 +124,7 @@ static struct page_info *alloc_largest_available(struct ion_system_heap *heap,
124 124
125 info->page = page; 125 info->page = page;
126 info->order = orders[i]; 126 info->order = orders[i];
127 INIT_LIST_HEAD(&info->list);
127 return info; 128 return info;
128 } 129 }
129 kfree(info); 130 kfree(info);
@@ -145,12 +146,15 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
145 struct list_head pages; 146 struct list_head pages;
146 struct page_info *info, *tmp_info; 147 struct page_info *info, *tmp_info;
147 int i = 0; 148 int i = 0;
148 long size_remaining = PAGE_ALIGN(size); 149 unsigned long size_remaining = PAGE_ALIGN(size);
149 unsigned int max_order = orders[0]; 150 unsigned int max_order = orders[0];
150 151
151 if (align > PAGE_SIZE) 152 if (align > PAGE_SIZE)
152 return -EINVAL; 153 return -EINVAL;
153 154
155 if (size / PAGE_SIZE > totalram_pages / 2)
156 return -ENOMEM;
157
154 INIT_LIST_HEAD(&pages); 158 INIT_LIST_HEAD(&pages);
155 while (size_remaining > 0) { 159 while (size_remaining > 0) {
156 info = alloc_largest_available(sys_heap, buffer, size_remaining, 160 info = alloc_largest_available(sys_heap, buffer, size_remaining,
diff --git a/drivers/staging/android/sw_sync.h b/drivers/staging/android/sw_sync.h
index 585040be5f18..5aaf71d6974b 100644
--- a/drivers/staging/android/sw_sync.h
+++ b/drivers/staging/android/sw_sync.h
@@ -35,10 +35,27 @@ struct sw_sync_pt {
35 u32 value; 35 u32 value;
36}; 36};
37 37
38#if IS_ENABLED(CONFIG_SW_SYNC)
38struct sw_sync_timeline *sw_sync_timeline_create(const char *name); 39struct sw_sync_timeline *sw_sync_timeline_create(const char *name);
39void sw_sync_timeline_inc(struct sw_sync_timeline *obj, u32 inc); 40void sw_sync_timeline_inc(struct sw_sync_timeline *obj, u32 inc);
40 41
41struct sync_pt *sw_sync_pt_create(struct sw_sync_timeline *obj, u32 value); 42struct sync_pt *sw_sync_pt_create(struct sw_sync_timeline *obj, u32 value);
43#else
44static inline struct sw_sync_timeline *sw_sync_timeline_create(const char *name)
45{
46 return NULL;
47}
48
49static inline void sw_sync_timeline_inc(struct sw_sync_timeline *obj, u32 inc)
50{
51}
52
53static inline struct sync_pt *sw_sync_pt_create(struct sw_sync_timeline *obj,
54 u32 value)
55{
56 return NULL;
57}
58#endif /* IS_ENABLED(CONFIG_SW_SYNC) */
42 59
43#endif /* __KERNEL __ */ 60#endif /* __KERNEL __ */
44 61
diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c
index 38e5d3b5ed9b..3d05f662110b 100644
--- a/drivers/staging/android/sync.c
+++ b/drivers/staging/android/sync.c
@@ -79,27 +79,27 @@ static void sync_timeline_free(struct kref *kref)
79 container_of(kref, struct sync_timeline, kref); 79 container_of(kref, struct sync_timeline, kref);
80 unsigned long flags; 80 unsigned long flags;
81 81
82 if (obj->ops->release_obj)
83 obj->ops->release_obj(obj);
84
85 spin_lock_irqsave(&sync_timeline_list_lock, flags); 82 spin_lock_irqsave(&sync_timeline_list_lock, flags);
86 list_del(&obj->sync_timeline_list); 83 list_del(&obj->sync_timeline_list);
87 spin_unlock_irqrestore(&sync_timeline_list_lock, flags); 84 spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
88 85
86 if (obj->ops->release_obj)
87 obj->ops->release_obj(obj);
88
89 kfree(obj); 89 kfree(obj);
90} 90}
91 91
92void sync_timeline_destroy(struct sync_timeline *obj) 92void sync_timeline_destroy(struct sync_timeline *obj)
93{ 93{
94 obj->destroyed = true; 94 obj->destroyed = true;
95 smp_wmb();
95 96
96 /* 97 /*
97 * If this is not the last reference, signal any children 98 * signal any children that their parent is going away.
98 * that their parent is going away.
99 */ 99 */
100 sync_timeline_signal(obj);
100 101
101 if (!kref_put(&obj->kref, sync_timeline_free)) 102 kref_put(&obj->kref, sync_timeline_free);
102 sync_timeline_signal(obj);
103} 103}
104EXPORT_SYMBOL(sync_timeline_destroy); 104EXPORT_SYMBOL(sync_timeline_destroy);
105 105
diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
index 246080316c90..5b15033a94bf 100644
--- a/drivers/staging/comedi/drivers.c
+++ b/drivers/staging/comedi/drivers.c
@@ -616,8 +616,6 @@ int comedi_auto_config(struct device *hardware_device,
616 ret = driver->auto_attach(dev, context); 616 ret = driver->auto_attach(dev, context);
617 if (ret >= 0) 617 if (ret >= 0)
618 ret = comedi_device_postconfig(dev); 618 ret = comedi_device_postconfig(dev);
619 if (ret < 0)
620 comedi_device_detach(dev);
621 mutex_unlock(&dev->mutex); 619 mutex_unlock(&dev->mutex);
622 620
623 if (ret < 0) { 621 if (ret < 0) {
diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c
index 593676cf706a..d9ad2c0fdda2 100644
--- a/drivers/staging/comedi/drivers/adv_pci1710.c
+++ b/drivers/staging/comedi/drivers/adv_pci1710.c
@@ -494,6 +494,7 @@ static int pci171x_insn_write_ao(struct comedi_device *dev,
494 struct comedi_insn *insn, unsigned int *data) 494 struct comedi_insn *insn, unsigned int *data)
495{ 495{
496 struct pci1710_private *devpriv = dev->private; 496 struct pci1710_private *devpriv = dev->private;
497 unsigned int val;
497 int n, chan, range, ofs; 498 int n, chan, range, ofs;
498 499
499 chan = CR_CHAN(insn->chanspec); 500 chan = CR_CHAN(insn->chanspec);
@@ -509,11 +510,14 @@ static int pci171x_insn_write_ao(struct comedi_device *dev,
509 outw(devpriv->da_ranges, dev->iobase + PCI171x_DAREF); 510 outw(devpriv->da_ranges, dev->iobase + PCI171x_DAREF);
510 ofs = PCI171x_DA1; 511 ofs = PCI171x_DA1;
511 } 512 }
513 val = devpriv->ao_data[chan];
512 514
513 for (n = 0; n < insn->n; n++) 515 for (n = 0; n < insn->n; n++) {
514 outw(data[n], dev->iobase + ofs); 516 val = data[n];
517 outw(val, dev->iobase + ofs);
518 }
515 519
516 devpriv->ao_data[chan] = data[n]; 520 devpriv->ao_data[chan] = val;
517 521
518 return n; 522 return n;
519 523
@@ -679,6 +683,7 @@ static int pci1720_insn_write_ao(struct comedi_device *dev,
679 struct comedi_insn *insn, unsigned int *data) 683 struct comedi_insn *insn, unsigned int *data)
680{ 684{
681 struct pci1710_private *devpriv = dev->private; 685 struct pci1710_private *devpriv = dev->private;
686 unsigned int val;
682 int n, rangereg, chan; 687 int n, rangereg, chan;
683 688
684 chan = CR_CHAN(insn->chanspec); 689 chan = CR_CHAN(insn->chanspec);
@@ -688,13 +693,15 @@ static int pci1720_insn_write_ao(struct comedi_device *dev,
688 outb(rangereg, dev->iobase + PCI1720_RANGE); 693 outb(rangereg, dev->iobase + PCI1720_RANGE);
689 devpriv->da_ranges = rangereg; 694 devpriv->da_ranges = rangereg;
690 } 695 }
696 val = devpriv->ao_data[chan];
691 697
692 for (n = 0; n < insn->n; n++) { 698 for (n = 0; n < insn->n; n++) {
693 outw(data[n], dev->iobase + PCI1720_DA0 + (chan << 1)); 699 val = data[n];
700 outw(val, dev->iobase + PCI1720_DA0 + (chan << 1));
694 outb(0, dev->iobase + PCI1720_SYNCOUT); /* update outputs */ 701 outb(0, dev->iobase + PCI1720_SYNCOUT); /* update outputs */
695 } 702 }
696 703
697 devpriv->ao_data[chan] = data[n]; 704 devpriv->ao_data[chan] = val;
698 705
699 return n; 706 return n;
700} 707}
diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c
index 3beeb1254152..88c60b6020c4 100644
--- a/drivers/staging/comedi/drivers/usbduxsigma.c
+++ b/drivers/staging/comedi/drivers/usbduxsigma.c
@@ -48,6 +48,7 @@
48#include <linux/usb.h> 48#include <linux/usb.h>
49#include <linux/fcntl.h> 49#include <linux/fcntl.h>
50#include <linux/compiler.h> 50#include <linux/compiler.h>
51#include <asm/unaligned.h>
51 52
52#include "comedi_fc.h" 53#include "comedi_fc.h"
53#include "../comedidev.h" 54#include "../comedidev.h"
@@ -792,7 +793,8 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev,
792 } 793 }
793 794
794 /* 32 bits big endian from the A/D converter */ 795 /* 32 bits big endian from the A/D converter */
795 val = be32_to_cpu(*((uint32_t *)((devpriv->insn_buf) + 1))); 796 val = be32_to_cpu(get_unaligned((uint32_t
797 *)(devpriv->insn_buf + 1)));
796 val &= 0x00ffffff; /* strip status byte */ 798 val &= 0x00ffffff; /* strip status byte */
797 val ^= 0x00800000; /* convert to unsigned */ 799 val ^= 0x00800000; /* convert to unsigned */
798 800
@@ -1357,7 +1359,7 @@ static int usbduxsigma_getstatusinfo(struct comedi_device *dev, int chan)
1357 return ret; 1359 return ret;
1358 1360
1359 /* 32 bits big endian from the A/D converter */ 1361 /* 32 bits big endian from the A/D converter */
1360 val = be32_to_cpu(*((uint32_t *)((devpriv->insn_buf)+1))); 1362 val = be32_to_cpu(get_unaligned((uint32_t *)(devpriv->insn_buf + 1)));
1361 val &= 0x00ffffff; /* strip status byte */ 1363 val &= 0x00ffffff; /* strip status byte */
1362 val ^= 0x00800000; /* convert to unsigned */ 1364 val ^= 0x00800000; /* convert to unsigned */
1363 1365
diff --git a/drivers/staging/dgrp/dgrp_net_ops.c b/drivers/staging/dgrp/dgrp_net_ops.c
index 1f61b89eca44..33ac7fb88cbd 100644
--- a/drivers/staging/dgrp/dgrp_net_ops.c
+++ b/drivers/staging/dgrp/dgrp_net_ops.c
@@ -2232,177 +2232,6 @@ done:
2232 return rtn; 2232 return rtn;
2233} 2233}
2234 2234
2235/*
2236 * Common Packet Handling code
2237 */
2238
2239static void handle_data_in_packet(struct nd_struct *nd, struct ch_struct *ch,
2240 long dlen, long plen, int n1, u8 *dbuf)
2241{
2242 char *error;
2243 long n;
2244 long remain;
2245 u8 *buf;
2246 u8 *b;
2247
2248 remain = nd->nd_remain;
2249 nd->nd_tx_work = 1;
2250
2251 /*
2252 * Otherwise data should appear only when we are
2253 * in the CS_READY state.
2254 */
2255
2256 if (ch->ch_state < CS_READY) {
2257 error = "Data received before RWIN established";
2258 nd->nd_remain = 0;
2259 nd->nd_state = NS_SEND_ERROR;
2260 nd->nd_error = error;
2261 }
2262
2263 /*
2264 * Assure that the data received is within the
2265 * allowable window.
2266 */
2267
2268 n = (ch->ch_s_rwin - ch->ch_s_rin) & 0xffff;
2269
2270 if (dlen > n) {
2271 error = "Receive data overrun";
2272 nd->nd_remain = 0;
2273 nd->nd_state = NS_SEND_ERROR;
2274 nd->nd_error = error;
2275 }
2276
2277 /*
2278 * If we received 3 or less characters,
2279 * assume it is a human typing, and set RTIME
2280 * to 10 milliseconds.
2281 *
2282 * If we receive 10 or more characters,
2283 * assume its not a human typing, and set RTIME
2284 * to 100 milliseconds.
2285 */
2286
2287 if (ch->ch_edelay != DGRP_RTIME) {
2288 if (ch->ch_rtime != ch->ch_edelay) {
2289 ch->ch_rtime = ch->ch_edelay;
2290 ch->ch_flag |= CH_PARAM;
2291 }
2292 } else if (dlen <= 3) {
2293 if (ch->ch_rtime != 10) {
2294 ch->ch_rtime = 10;
2295 ch->ch_flag |= CH_PARAM;
2296 }
2297 } else {
2298 if (ch->ch_rtime != DGRP_RTIME) {
2299 ch->ch_rtime = DGRP_RTIME;
2300 ch->ch_flag |= CH_PARAM;
2301 }
2302 }
2303
2304 /*
2305 * If a portion of the packet is outside the
2306 * buffer, shorten the effective length of the
2307 * data packet to be the amount of data received.
2308 */
2309
2310 if (remain < plen)
2311 dlen -= plen - remain;
2312
2313 /*
2314 * Detect if receive flush is now complete.
2315 */
2316
2317 if ((ch->ch_flag & CH_RX_FLUSH) != 0 &&
2318 ((ch->ch_flush_seq - nd->nd_seq_out) & SEQ_MASK) >=
2319 ((nd->nd_seq_in - nd->nd_seq_out) & SEQ_MASK)) {
2320 ch->ch_flag &= ~CH_RX_FLUSH;
2321 }
2322
2323 /*
2324 * If we are ready to receive, move the data into
2325 * the receive buffer.
2326 */
2327
2328 ch->ch_s_rin = (ch->ch_s_rin + dlen) & 0xffff;
2329
2330 if (ch->ch_state == CS_READY &&
2331 (ch->ch_tun.un_open_count != 0) &&
2332 (ch->ch_tun.un_flag & UN_CLOSING) == 0 &&
2333 (ch->ch_cflag & CF_CREAD) != 0 &&
2334 (ch->ch_flag & (CH_BAUD0 | CH_RX_FLUSH)) == 0 &&
2335 (ch->ch_send & RR_RX_FLUSH) == 0) {
2336
2337 if (ch->ch_rin + dlen >= RBUF_MAX) {
2338 n = RBUF_MAX - ch->ch_rin;
2339
2340 memcpy(ch->ch_rbuf + ch->ch_rin, dbuf, n);
2341
2342 ch->ch_rin = 0;
2343 dbuf += n;
2344 dlen -= n;
2345 }
2346
2347 memcpy(ch->ch_rbuf + ch->ch_rin, dbuf, dlen);
2348
2349 ch->ch_rin += dlen;
2350
2351
2352 /*
2353 * If we are not in fastcook mode, or
2354 * if there is a fastcook thread
2355 * waiting for data, send the data to
2356 * the line discipline.
2357 */
2358
2359 if ((ch->ch_flag & CH_FAST_READ) == 0 ||
2360 ch->ch_inwait != 0) {
2361 dgrp_input(ch);
2362 }
2363
2364 /*
2365 * If there is a read thread waiting
2366 * in select, and we are in fastcook
2367 * mode, wake him up.
2368 */
2369
2370 if (waitqueue_active(&ch->ch_tun.un_tty->read_wait) &&
2371 (ch->ch_flag & CH_FAST_READ) != 0)
2372 wake_up_interruptible(&ch->ch_tun.un_tty->read_wait);
2373
2374 /*
2375 * Wake any thread waiting in the
2376 * fastcook loop.
2377 */
2378
2379 if ((ch->ch_flag & CH_INPUT) != 0) {
2380 ch->ch_flag &= ~CH_INPUT;
2381 wake_up_interruptible(&ch->ch_flag_wait);
2382 }
2383 }
2384
2385 /*
2386 * Fabricate and insert a data packet header to
2387 * preced the remaining data when it comes in.
2388 */
2389
2390 if (remain < plen) {
2391 dlen = plen - remain;
2392 b = buf;
2393
2394 b[0] = 0x90 + n1;
2395 put_unaligned_be16(dlen, b + 1);
2396
2397 remain = 3;
2398 if (remain > 0 && b != buf)
2399 memcpy(buf, b, remain);
2400
2401 nd->nd_remain = remain;
2402 return;
2403 }
2404}
2405
2406/** 2235/**
2407 * dgrp_receive() -- decode data packets received from the remote PortServer. 2236 * dgrp_receive() -- decode data packets received from the remote PortServer.
2408 * @nd: pointer to a node structure 2237 * @nd: pointer to a node structure
@@ -2477,8 +2306,7 @@ static void dgrp_receive(struct nd_struct *nd)
2477 plen = dlen + 1; 2306 plen = dlen + 1;
2478 2307
2479 dbuf = b + 1; 2308 dbuf = b + 1;
2480 handle_data_in_packet(nd, ch, dlen, plen, n1, dbuf); 2309 goto data;
2481 break;
2482 2310
2483 /* 2311 /*
2484 * Process 2-byte header data packet. 2312 * Process 2-byte header data packet.
@@ -2492,8 +2320,7 @@ static void dgrp_receive(struct nd_struct *nd)
2492 plen = dlen + 2; 2320 plen = dlen + 2;
2493 2321
2494 dbuf = b + 2; 2322 dbuf = b + 2;
2495 handle_data_in_packet(nd, ch, dlen, plen, n1, dbuf); 2323 goto data;
2496 break;
2497 2324
2498 /* 2325 /*
2499 * Process 3-byte header data packet. 2326 * Process 3-byte header data packet.
@@ -2508,6 +2335,159 @@ static void dgrp_receive(struct nd_struct *nd)
2508 2335
2509 dbuf = b + 3; 2336 dbuf = b + 3;
2510 2337
2338 /*
2339 * Common packet handling code.
2340 */
2341
2342data:
2343 nd->nd_tx_work = 1;
2344
2345 /*
2346 * Otherwise data should appear only when we are
2347 * in the CS_READY state.
2348 */
2349
2350 if (ch->ch_state < CS_READY) {
2351 error = "Data received before RWIN established";
2352 goto prot_error;
2353 }
2354
2355 /*
2356 * Assure that the data received is within the
2357 * allowable window.
2358 */
2359
2360 n = (ch->ch_s_rwin - ch->ch_s_rin) & 0xffff;
2361
2362 if (dlen > n) {
2363 error = "Receive data overrun";
2364 goto prot_error;
2365 }
2366
2367 /*
2368 * If we received 3 or less characters,
2369 * assume it is a human typing, and set RTIME
2370 * to 10 milliseconds.
2371 *
2372 * If we receive 10 or more characters,
2373 * assume its not a human typing, and set RTIME
2374 * to 100 milliseconds.
2375 */
2376
2377 if (ch->ch_edelay != DGRP_RTIME) {
2378 if (ch->ch_rtime != ch->ch_edelay) {
2379 ch->ch_rtime = ch->ch_edelay;
2380 ch->ch_flag |= CH_PARAM;
2381 }
2382 } else if (dlen <= 3) {
2383 if (ch->ch_rtime != 10) {
2384 ch->ch_rtime = 10;
2385 ch->ch_flag |= CH_PARAM;
2386 }
2387 } else {
2388 if (ch->ch_rtime != DGRP_RTIME) {
2389 ch->ch_rtime = DGRP_RTIME;
2390 ch->ch_flag |= CH_PARAM;
2391 }
2392 }
2393
2394 /*
2395 * If a portion of the packet is outside the
2396 * buffer, shorten the effective length of the
2397 * data packet to be the amount of data received.
2398 */
2399
2400 if (remain < plen)
2401 dlen -= plen - remain;
2402
2403 /*
2404 * Detect if receive flush is now complete.
2405 */
2406
2407 if ((ch->ch_flag & CH_RX_FLUSH) != 0 &&
2408 ((ch->ch_flush_seq - nd->nd_seq_out) & SEQ_MASK) >=
2409 ((nd->nd_seq_in - nd->nd_seq_out) & SEQ_MASK)) {
2410 ch->ch_flag &= ~CH_RX_FLUSH;
2411 }
2412
2413 /*
2414 * If we are ready to receive, move the data into
2415 * the receive buffer.
2416 */
2417
2418 ch->ch_s_rin = (ch->ch_s_rin + dlen) & 0xffff;
2419
2420 if (ch->ch_state == CS_READY &&
2421 (ch->ch_tun.un_open_count != 0) &&
2422 (ch->ch_tun.un_flag & UN_CLOSING) == 0 &&
2423 (ch->ch_cflag & CF_CREAD) != 0 &&
2424 (ch->ch_flag & (CH_BAUD0 | CH_RX_FLUSH)) == 0 &&
2425 (ch->ch_send & RR_RX_FLUSH) == 0) {
2426
2427 if (ch->ch_rin + dlen >= RBUF_MAX) {
2428 n = RBUF_MAX - ch->ch_rin;
2429
2430 memcpy(ch->ch_rbuf + ch->ch_rin, dbuf, n);
2431
2432 ch->ch_rin = 0;
2433 dbuf += n;
2434 dlen -= n;
2435 }
2436
2437 memcpy(ch->ch_rbuf + ch->ch_rin, dbuf, dlen);
2438
2439 ch->ch_rin += dlen;
2440
2441
2442 /*
2443 * If we are not in fastcook mode, or
2444 * if there is a fastcook thread
2445 * waiting for data, send the data to
2446 * the line discipline.
2447 */
2448
2449 if ((ch->ch_flag & CH_FAST_READ) == 0 ||
2450 ch->ch_inwait != 0) {
2451 dgrp_input(ch);
2452 }
2453
2454 /*
2455 * If there is a read thread waiting
2456 * in select, and we are in fastcook
2457 * mode, wake him up.
2458 */
2459
2460 if (waitqueue_active(&ch->ch_tun.un_tty->read_wait) &&
2461 (ch->ch_flag & CH_FAST_READ) != 0)
2462 wake_up_interruptible(&ch->ch_tun.un_tty->read_wait);
2463
2464 /*
2465 * Wake any thread waiting in the
2466 * fastcook loop.
2467 */
2468
2469 if ((ch->ch_flag & CH_INPUT) != 0) {
2470 ch->ch_flag &= ~CH_INPUT;
2471
2472 wake_up_interruptible(&ch->ch_flag_wait);
2473 }
2474 }
2475
2476 /*
2477 * Fabricate and insert a data packet header to
2478 * preced the remaining data when it comes in.
2479 */
2480
2481 if (remain < plen) {
2482 dlen = plen - remain;
2483 b = buf;
2484
2485 b[0] = 0x90 + n1;
2486 put_unaligned_be16(dlen, b + 1);
2487
2488 remain = 3;
2489 goto done;
2490 }
2511 break; 2491 break;
2512 2492
2513 /* 2493 /*
diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c
index f8788bf0a7d3..cdeffe75496b 100644
--- a/drivers/staging/gdm72xx/gdm_usb.c
+++ b/drivers/staging/gdm72xx/gdm_usb.c
@@ -635,11 +635,14 @@ static int gdm_usb_probe(struct usb_interface *intf,
635#endif /* CONFIG_WIMAX_GDM72XX_USB_PM */ 635#endif /* CONFIG_WIMAX_GDM72XX_USB_PM */
636 636
637 ret = register_wimax_device(phy_dev, &intf->dev); 637 ret = register_wimax_device(phy_dev, &intf->dev);
638 if (ret)
639 release_usb(udev);
638 640
639out: 641out:
640 if (ret) { 642 if (ret) {
641 kfree(phy_dev); 643 kfree(phy_dev);
642 kfree(udev); 644 kfree(udev);
645 usb_put_dev(usbdev);
643 } else { 646 } else {
644 usb_set_intfdata(intf, phy_dev); 647 usb_set_intfdata(intf, phy_dev);
645 } 648 }
diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h
index 35154d60faf6..c9fedb79e3a2 100644
--- a/drivers/staging/iio/Documentation/iio_utils.h
+++ b/drivers/staging/iio/Documentation/iio_utils.h
@@ -77,7 +77,6 @@ struct iio_channel_info {
77 uint64_t mask; 77 uint64_t mask;
78 unsigned be; 78 unsigned be;
79 unsigned is_signed; 79 unsigned is_signed;
80 unsigned enabled;
81 unsigned location; 80 unsigned location;
82}; 81};
83 82
@@ -335,6 +334,7 @@ inline int build_channel_array(const char *device_dir,
335 while (ent = readdir(dp), ent != NULL) { 334 while (ent = readdir(dp), ent != NULL) {
336 if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_en"), 335 if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_en"),
337 "_en") == 0) { 336 "_en") == 0) {
337 int current_enabled = 0;
338 current = &(*ci_array)[count++]; 338 current = &(*ci_array)[count++];
339 ret = asprintf(&filename, 339 ret = asprintf(&filename,
340 "%s/%s", scan_el_dir, ent->d_name); 340 "%s/%s", scan_el_dir, ent->d_name);
@@ -350,10 +350,10 @@ inline int build_channel_array(const char *device_dir,
350 ret = -errno; 350 ret = -errno;
351 goto error_cleanup_array; 351 goto error_cleanup_array;
352 } 352 }
353 fscanf(sysfsfp, "%u", &current->enabled); 353 fscanf(sysfsfp, "%u", &current_enabled);
354 fclose(sysfsfp); 354 fclose(sysfsfp);
355 355
356 if (!current->enabled) { 356 if (!current_enabled) {
357 free(filename); 357 free(filename);
358 count--; 358 count--;
359 continue; 359 continue;
diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
index 5ea36410f716..5708ffc62aec 100644
--- a/drivers/staging/iio/adc/ad799x_core.c
+++ b/drivers/staging/iio/adc/ad799x_core.c
@@ -393,7 +393,7 @@ static const struct iio_event_spec ad799x_events[] = {
393 }, { 393 }, {
394 .type = IIO_EV_TYPE_THRESH, 394 .type = IIO_EV_TYPE_THRESH,
395 .dir = IIO_EV_DIR_FALLING, 395 .dir = IIO_EV_DIR_FALLING,
396 .mask_separate = BIT(IIO_EV_INFO_VALUE), 396 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
397 BIT(IIO_EV_INFO_ENABLE), 397 BIT(IIO_EV_INFO_ENABLE),
398 }, { 398 }, {
399 .type = IIO_EV_TYPE_THRESH, 399 .type = IIO_EV_TYPE_THRESH,
@@ -409,7 +409,13 @@ static const struct iio_event_spec ad799x_events[] = {
409 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 409 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
410 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ 410 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
411 .scan_index = (_index), \ 411 .scan_index = (_index), \
412 .scan_type = IIO_ST('u', _realbits, 16, 12 - (_realbits)), \ 412 .scan_type = { \
413 .sign = 'u', \
414 .realbits = (_realbits), \
415 .storagebits = 16, \
416 .shift = 12 - (_realbits), \
417 .endianness = IIO_BE, \
418 }, \
413 .event_spec = _ev_spec, \ 419 .event_spec = _ev_spec, \
414 .num_event_specs = _num_ev_spec, \ 420 .num_event_specs = _num_ev_spec, \
415} 421}
@@ -588,7 +594,8 @@ static int ad799x_probe(struct i2c_client *client,
588 return 0; 594 return 0;
589 595
590error_free_irq: 596error_free_irq:
591 free_irq(client->irq, indio_dev); 597 if (client->irq > 0)
598 free_irq(client->irq, indio_dev);
592error_cleanup_ring: 599error_cleanup_ring:
593 ad799x_ring_cleanup(indio_dev); 600 ad799x_ring_cleanup(indio_dev);
594error_disable_reg: 601error_disable_reg:
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
index df71669bb60e..7fc66a6a6e36 100644
--- a/drivers/staging/iio/adc/mxs-lradc.c
+++ b/drivers/staging/iio/adc/mxs-lradc.c
@@ -1035,8 +1035,6 @@ SHOW_SCALE_AVAILABLE_ATTR(4);
1035SHOW_SCALE_AVAILABLE_ATTR(5); 1035SHOW_SCALE_AVAILABLE_ATTR(5);
1036SHOW_SCALE_AVAILABLE_ATTR(6); 1036SHOW_SCALE_AVAILABLE_ATTR(6);
1037SHOW_SCALE_AVAILABLE_ATTR(7); 1037SHOW_SCALE_AVAILABLE_ATTR(7);
1038SHOW_SCALE_AVAILABLE_ATTR(8);
1039SHOW_SCALE_AVAILABLE_ATTR(9);
1040SHOW_SCALE_AVAILABLE_ATTR(10); 1038SHOW_SCALE_AVAILABLE_ATTR(10);
1041SHOW_SCALE_AVAILABLE_ATTR(11); 1039SHOW_SCALE_AVAILABLE_ATTR(11);
1042SHOW_SCALE_AVAILABLE_ATTR(12); 1040SHOW_SCALE_AVAILABLE_ATTR(12);
@@ -1053,8 +1051,6 @@ static struct attribute *mxs_lradc_attributes[] = {
1053 &iio_dev_attr_in_voltage5_scale_available.dev_attr.attr, 1051 &iio_dev_attr_in_voltage5_scale_available.dev_attr.attr,
1054 &iio_dev_attr_in_voltage6_scale_available.dev_attr.attr, 1052 &iio_dev_attr_in_voltage6_scale_available.dev_attr.attr,
1055 &iio_dev_attr_in_voltage7_scale_available.dev_attr.attr, 1053 &iio_dev_attr_in_voltage7_scale_available.dev_attr.attr,
1056 &iio_dev_attr_in_voltage8_scale_available.dev_attr.attr,
1057 &iio_dev_attr_in_voltage9_scale_available.dev_attr.attr,
1058 &iio_dev_attr_in_voltage10_scale_available.dev_attr.attr, 1054 &iio_dev_attr_in_voltage10_scale_available.dev_attr.attr,
1059 &iio_dev_attr_in_voltage11_scale_available.dev_attr.attr, 1055 &iio_dev_attr_in_voltage11_scale_available.dev_attr.attr,
1060 &iio_dev_attr_in_voltage12_scale_available.dev_attr.attr, 1056 &iio_dev_attr_in_voltage12_scale_available.dev_attr.attr,
@@ -1613,7 +1609,7 @@ static int mxs_lradc_probe(struct platform_device *pdev)
1613 * of the array. 1609 * of the array.
1614 */ 1610 */
1615 scale_uv = ((u64)lradc->vref_mv[i] * 100000000) >> 1611 scale_uv = ((u64)lradc->vref_mv[i] * 100000000) >>
1616 (iio->channels[i].scan_type.realbits - s); 1612 (LRADC_RESOLUTION - s);
1617 lradc->scale_avail[i][s].nano = 1613 lradc->scale_avail[i][s].nano =
1618 do_div(scale_uv, 100000000) * 10; 1614 do_div(scale_uv, 100000000) * 10;
1619 lradc->scale_avail[i][s].integer = scale_uv; 1615 lradc->scale_avail[i][s].integer = scale_uv;
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index 0a4298b744e6..2b96665da8a2 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -629,7 +629,7 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
629 struct iio_buffer *buffer; 629 struct iio_buffer *buffer;
630 630
631 buffer = iio_kfifo_allocate(indio_dev); 631 buffer = iio_kfifo_allocate(indio_dev);
632 if (buffer) 632 if (!buffer)
633 return -ENOMEM; 633 return -ENOMEM;
634 634
635 iio_device_attach_buffer(indio_dev, buffer); 635 iio_device_attach_buffer(indio_dev, buffer);
diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
index 09ef5fb8bae6..236ed66f116a 100644
--- a/drivers/staging/imx-drm/imx-drm-core.c
+++ b/drivers/staging/imx-drm/imx-drm-core.c
@@ -88,9 +88,9 @@ static int imx_drm_driver_unload(struct drm_device *drm)
88 88
89 imx_drm_device_put(); 89 imx_drm_device_put();
90 90
91 drm_vblank_cleanup(imxdrm->drm); 91 drm_vblank_cleanup(drm);
92 drm_kms_helper_poll_fini(imxdrm->drm); 92 drm_kms_helper_poll_fini(drm);
93 drm_mode_config_cleanup(imxdrm->drm); 93 drm_mode_config_cleanup(drm);
94 94
95 return 0; 95 return 0;
96} 96}
@@ -142,19 +142,19 @@ EXPORT_SYMBOL_GPL(imx_drm_crtc_panel_format);
142 142
143int imx_drm_crtc_vblank_get(struct imx_drm_crtc *imx_drm_crtc) 143int imx_drm_crtc_vblank_get(struct imx_drm_crtc *imx_drm_crtc)
144{ 144{
145 return drm_vblank_get(imx_drm_crtc->imxdrm->drm, imx_drm_crtc->pipe); 145 return drm_vblank_get(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe);
146} 146}
147EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_get); 147EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_get);
148 148
149void imx_drm_crtc_vblank_put(struct imx_drm_crtc *imx_drm_crtc) 149void imx_drm_crtc_vblank_put(struct imx_drm_crtc *imx_drm_crtc)
150{ 150{
151 drm_vblank_put(imx_drm_crtc->imxdrm->drm, imx_drm_crtc->pipe); 151 drm_vblank_put(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe);
152} 152}
153EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_put); 153EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_put);
154 154
155void imx_drm_handle_vblank(struct imx_drm_crtc *imx_drm_crtc) 155void imx_drm_handle_vblank(struct imx_drm_crtc *imx_drm_crtc)
156{ 156{
157 drm_handle_vblank(imx_drm_crtc->imxdrm->drm, imx_drm_crtc->pipe); 157 drm_handle_vblank(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe);
158} 158}
159EXPORT_SYMBOL_GPL(imx_drm_handle_vblank); 159EXPORT_SYMBOL_GPL(imx_drm_handle_vblank);
160 160
@@ -370,29 +370,6 @@ static void imx_drm_connector_unregister(
370} 370}
371 371
372/* 372/*
373 * register a crtc to the drm core
374 */
375static int imx_drm_crtc_register(struct imx_drm_crtc *imx_drm_crtc)
376{
377 struct imx_drm_device *imxdrm = __imx_drm_device();
378 int ret;
379
380 ret = drm_mode_crtc_set_gamma_size(imx_drm_crtc->crtc, 256);
381 if (ret)
382 return ret;
383
384 drm_crtc_helper_add(imx_drm_crtc->crtc,
385 imx_drm_crtc->imx_drm_helper_funcs.crtc_helper_funcs);
386
387 drm_crtc_init(imxdrm->drm, imx_drm_crtc->crtc,
388 imx_drm_crtc->imx_drm_helper_funcs.crtc_funcs);
389
390 drm_mode_group_reinit(imxdrm->drm);
391
392 return 0;
393}
394
395/*
396 * Called by the CRTC driver when all CRTCs are registered. This 373 * Called by the CRTC driver when all CRTCs are registered. This
397 * puts all the pieces together and initializes the driver. 374 * puts all the pieces together and initializes the driver.
398 * Once this is called no more CRTCs can be registered since 375 * Once this is called no more CRTCs can be registered since
@@ -424,15 +401,15 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags)
424 401
425 mutex_lock(&imxdrm->mutex); 402 mutex_lock(&imxdrm->mutex);
426 403
427 drm_kms_helper_poll_init(imxdrm->drm); 404 drm_kms_helper_poll_init(drm);
428 405
429 /* setup the grouping for the legacy output */ 406 /* setup the grouping for the legacy output */
430 ret = drm_mode_group_init_legacy_group(imxdrm->drm, 407 ret = drm_mode_group_init_legacy_group(drm,
431 &imxdrm->drm->primary->mode_group); 408 &drm->primary->mode_group);
432 if (ret) 409 if (ret)
433 goto err_kms; 410 goto err_kms;
434 411
435 ret = drm_vblank_init(imxdrm->drm, MAX_CRTC); 412 ret = drm_vblank_init(drm, MAX_CRTC);
436 if (ret) 413 if (ret)
437 goto err_kms; 414 goto err_kms;
438 415
@@ -441,7 +418,7 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags)
441 * by drm timer once a current process gives up ownership of 418 * by drm timer once a current process gives up ownership of
442 * vblank event.(after drm_vblank_put function is called) 419 * vblank event.(after drm_vblank_put function is called)
443 */ 420 */
444 imxdrm->drm->vblank_disable_allowed = true; 421 drm->vblank_disable_allowed = true;
445 422
446 if (!imx_drm_device_get()) { 423 if (!imx_drm_device_get()) {
447 ret = -EINVAL; 424 ret = -EINVAL;
@@ -536,10 +513,18 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
536 513
537 *new_crtc = imx_drm_crtc; 514 *new_crtc = imx_drm_crtc;
538 515
539 ret = imx_drm_crtc_register(imx_drm_crtc); 516 ret = drm_mode_crtc_set_gamma_size(imx_drm_crtc->crtc, 256);
540 if (ret) 517 if (ret)
541 goto err_register; 518 goto err_register;
542 519
520 drm_crtc_helper_add(crtc,
521 imx_drm_crtc->imx_drm_helper_funcs.crtc_helper_funcs);
522
523 drm_crtc_init(imxdrm->drm, crtc,
524 imx_drm_crtc->imx_drm_helper_funcs.crtc_funcs);
525
526 drm_mode_group_reinit(imxdrm->drm);
527
543 imx_drm_update_possible_crtcs(); 528 imx_drm_update_possible_crtcs();
544 529
545 mutex_unlock(&imxdrm->mutex); 530 mutex_unlock(&imxdrm->mutex);
diff --git a/drivers/staging/imx-drm/imx-hdmi.c b/drivers/staging/imx-drm/imx-hdmi.c
index f3a1f5e2e492..62ce0e86f14b 100644
--- a/drivers/staging/imx-drm/imx-hdmi.c
+++ b/drivers/staging/imx-drm/imx-hdmi.c
@@ -16,6 +16,7 @@
16#include <linux/delay.h> 16#include <linux/delay.h>
17#include <linux/err.h> 17#include <linux/err.h>
18#include <linux/clk.h> 18#include <linux/clk.h>
19#include <linux/hdmi.h>
19#include <linux/regmap.h> 20#include <linux/regmap.h>
20#include <linux/mfd/syscon.h> 21#include <linux/mfd/syscon.h>
21#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h> 22#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
@@ -52,11 +53,6 @@ enum hdmi_datamap {
52 YCbCr422_12B = 0x12, 53 YCbCr422_12B = 0x12,
53}; 54};
54 55
55enum hdmi_colorimetry {
56 ITU601,
57 ITU709,
58};
59
60enum imx_hdmi_devtype { 56enum imx_hdmi_devtype {
61 IMX6Q_HDMI, 57 IMX6Q_HDMI,
62 IMX6DL_HDMI, 58 IMX6DL_HDMI,
@@ -489,12 +485,12 @@ static void imx_hdmi_update_csc_coeffs(struct imx_hdmi *hdmi)
489 485
490 if (is_color_space_conversion(hdmi)) { 486 if (is_color_space_conversion(hdmi)) {
491 if (hdmi->hdmi_data.enc_out_format == RGB) { 487 if (hdmi->hdmi_data.enc_out_format == RGB) {
492 if (hdmi->hdmi_data.colorimetry == ITU601) 488 if (hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_601)
493 csc_coeff = &csc_coeff_rgb_out_eitu601; 489 csc_coeff = &csc_coeff_rgb_out_eitu601;
494 else 490 else
495 csc_coeff = &csc_coeff_rgb_out_eitu709; 491 csc_coeff = &csc_coeff_rgb_out_eitu709;
496 } else if (hdmi->hdmi_data.enc_in_format == RGB) { 492 } else if (hdmi->hdmi_data.enc_in_format == RGB) {
497 if (hdmi->hdmi_data.colorimetry == ITU601) 493 if (hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_601)
498 csc_coeff = &csc_coeff_rgb_in_eitu601; 494 csc_coeff = &csc_coeff_rgb_in_eitu601;
499 else 495 else
500 csc_coeff = &csc_coeff_rgb_in_eitu709; 496 csc_coeff = &csc_coeff_rgb_in_eitu709;
@@ -1140,16 +1136,16 @@ static void hdmi_config_AVI(struct imx_hdmi *hdmi)
1140 /* Set up colorimetry */ 1136 /* Set up colorimetry */
1141 if (hdmi->hdmi_data.enc_out_format == XVYCC444) { 1137 if (hdmi->hdmi_data.enc_out_format == XVYCC444) {
1142 colorimetry = HDMI_FC_AVICONF1_COLORIMETRY_EXTENDED_INFO; 1138 colorimetry = HDMI_FC_AVICONF1_COLORIMETRY_EXTENDED_INFO;
1143 if (hdmi->hdmi_data.colorimetry == ITU601) 1139 if (hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_601)
1144 ext_colorimetry = 1140 ext_colorimetry =
1145 HDMI_FC_AVICONF2_EXT_COLORIMETRY_XVYCC601; 1141 HDMI_FC_AVICONF2_EXT_COLORIMETRY_XVYCC601;
1146 else /* hdmi->hdmi_data.colorimetry == ITU709 */ 1142 else /*hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_709*/
1147 ext_colorimetry = 1143 ext_colorimetry =
1148 HDMI_FC_AVICONF2_EXT_COLORIMETRY_XVYCC709; 1144 HDMI_FC_AVICONF2_EXT_COLORIMETRY_XVYCC709;
1149 } else if (hdmi->hdmi_data.enc_out_format != RGB) { 1145 } else if (hdmi->hdmi_data.enc_out_format != RGB) {
1150 if (hdmi->hdmi_data.colorimetry == ITU601) 1146 if (hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_601)
1151 colorimetry = HDMI_FC_AVICONF1_COLORIMETRY_SMPTE; 1147 colorimetry = HDMI_FC_AVICONF1_COLORIMETRY_SMPTE;
1152 else /* hdmi->hdmi_data.colorimetry == ITU709 */ 1148 else /*hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_709*/
1153 colorimetry = HDMI_FC_AVICONF1_COLORIMETRY_ITUR; 1149 colorimetry = HDMI_FC_AVICONF1_COLORIMETRY_ITUR;
1154 ext_colorimetry = HDMI_FC_AVICONF2_EXT_COLORIMETRY_XVYCC601; 1150 ext_colorimetry = HDMI_FC_AVICONF2_EXT_COLORIMETRY_XVYCC601;
1155 } else { /* Carries no data */ 1151 } else { /* Carries no data */
@@ -1379,9 +1375,9 @@ static int imx_hdmi_setup(struct imx_hdmi *hdmi, struct drm_display_mode *mode)
1379 (hdmi->vic == 21) || (hdmi->vic == 22) || 1375 (hdmi->vic == 21) || (hdmi->vic == 22) ||
1380 (hdmi->vic == 2) || (hdmi->vic == 3) || 1376 (hdmi->vic == 2) || (hdmi->vic == 3) ||
1381 (hdmi->vic == 17) || (hdmi->vic == 18)) 1377 (hdmi->vic == 17) || (hdmi->vic == 18))
1382 hdmi->hdmi_data.colorimetry = ITU601; 1378 hdmi->hdmi_data.colorimetry = HDMI_COLORIMETRY_ITU_601;
1383 else 1379 else
1384 hdmi->hdmi_data.colorimetry = ITU709; 1380 hdmi->hdmi_data.colorimetry = HDMI_COLORIMETRY_ITU_709;
1385 1381
1386 if ((hdmi->vic == 10) || (hdmi->vic == 11) || 1382 if ((hdmi->vic == 10) || (hdmi->vic == 11) ||
1387 (hdmi->vic == 12) || (hdmi->vic == 13) || 1383 (hdmi->vic == 12) || (hdmi->vic == 13) ||
diff --git a/drivers/staging/lustre/TODO b/drivers/staging/lustre/TODO
index 22742d6d62a8..0a2b6cb3775e 100644
--- a/drivers/staging/lustre/TODO
+++ b/drivers/staging/lustre/TODO
@@ -9,5 +9,6 @@
9* Other minor misc cleanups... 9* Other minor misc cleanups...
10 10
11Please send any patches to Greg Kroah-Hartman <greg@kroah.com>, Andreas Dilger 11Please send any patches to Greg Kroah-Hartman <greg@kroah.com>, Andreas Dilger
12<andreas.dilger@intel.com> and Peng Tao <tao.peng@emc.com>. CCing 12<andreas.dilger@intel.com>, Oleg Drokin <oleg.drokin@intel.com> and
13hpdd-discuss <hpdd-discuss@lists.01.org> would be great too. 13Peng Tao <tao.peng@emc.com>. CCing hpdd-discuss <hpdd-discuss@lists.01.org>
14would be great too.
diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h
index 596a15fc8996..037ae8a6d531 100644
--- a/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h
+++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h
@@ -61,6 +61,8 @@ struct kuc_hdr {
61 __u16 kuc_msglen; /* Including header */ 61 __u16 kuc_msglen; /* Including header */
62} __attribute__((aligned(sizeof(__u64)))); 62} __attribute__((aligned(sizeof(__u64))));
63 63
64#define KUC_CHANGELOG_MSG_MAXSIZE (sizeof(struct kuc_hdr)+CR_MAXSIZE)
65
64#define KUC_MAGIC 0x191C /*Lustre9etLinC */ 66#define KUC_MAGIC 0x191C /*Lustre9etLinC */
65#define KUC_FL_BLOCK 0x01 /* Wait for send */ 67#define KUC_FL_BLOCK 0x01 /* Wait for send */
66 68
diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
index d0d942ced01a..dddccca120c9 100644
--- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
+++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
@@ -120,7 +120,7 @@ do { \
120do { \ 120do { \
121 LASSERT(!in_interrupt() || \ 121 LASSERT(!in_interrupt() || \
122 ((size) <= LIBCFS_VMALLOC_SIZE && \ 122 ((size) <= LIBCFS_VMALLOC_SIZE && \
123 ((mask) & GFP_ATOMIC)) != 0); \ 123 ((mask) & __GFP_WAIT) == 0)); \
124} while (0) 124} while (0)
125 125
126#define LIBCFS_ALLOC_POST(ptr, size) \ 126#define LIBCFS_ALLOC_POST(ptr, size) \
diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 93648632ba26..6f58ead20393 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -529,7 +529,7 @@ kiblnd_kvaddr_to_page (unsigned long vaddr)
529{ 529{
530 struct page *page; 530 struct page *page;
531 531
532 if (is_vmalloc_addr(vaddr)) { 532 if (is_vmalloc_addr((void *)vaddr)) {
533 page = vmalloc_to_page ((void *)vaddr); 533 page = vmalloc_to_page ((void *)vaddr);
534 LASSERT (page != NULL); 534 LASSERT (page != NULL);
535 return page; 535 return page;
diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
index 68a4f52ec998..b7b53b579c85 100644
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
@@ -924,7 +924,7 @@ ksocknal_launch_packet (lnet_ni_t *ni, ksock_tx_t *tx, lnet_process_id_t id)
924int 924int
925ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) 925ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
926{ 926{
927 int mpflag = 0; 927 int mpflag = 1;
928 int type = lntmsg->msg_type; 928 int type = lntmsg->msg_type;
929 lnet_process_id_t target = lntmsg->msg_target; 929 lnet_process_id_t target = lntmsg->msg_target;
930 unsigned int payload_niov = lntmsg->msg_niov; 930 unsigned int payload_niov = lntmsg->msg_niov;
@@ -993,8 +993,9 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
993 993
994 /* The first fragment will be set later in pro_pack */ 994 /* The first fragment will be set later in pro_pack */
995 rc = ksocknal_launch_packet(ni, tx, target); 995 rc = ksocknal_launch_packet(ni, tx, target);
996 if (lntmsg->msg_vmflush) 996 if (!mpflag)
997 cfs_memory_pressure_restore(mpflag); 997 cfs_memory_pressure_restore(mpflag);
998
998 if (rc == 0) 999 if (rc == 0)
999 return (0); 1000 return (0);
1000 1001
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index 6b6c0240e824..7893d83e131f 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
@@ -760,7 +760,8 @@ static inline void hsm_set_cl_error(int *flags, int error)
760 *flags |= (error << CLF_HSM_ERR_L); 760 *flags |= (error << CLF_HSM_ERR_L);
761} 761}
762 762
763#define CR_MAXSIZE cfs_size_round(2*NAME_MAX + 1 + sizeof(struct changelog_rec)) 763#define CR_MAXSIZE cfs_size_round(2*NAME_MAX + 1 + \
764 sizeof(struct changelog_ext_rec))
764 765
765struct changelog_rec { 766struct changelog_rec {
766 __u16 cr_namelen; 767 __u16 cr_namelen;
diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c
index 22d0acc95bc5..52b7731bcc38 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -1086,7 +1086,7 @@ static int quotactl_ioctl(struct ll_sb_info *sbi, struct if_quotactl *qctl)
1086 break; 1086 break;
1087 case Q_GETQUOTA: 1087 case Q_GETQUOTA:
1088 if (((type == USRQUOTA && 1088 if (((type == USRQUOTA &&
1089 uid_eq(current_euid(), make_kuid(&init_user_ns, id))) || 1089 !uid_eq(current_euid(), make_kuid(&init_user_ns, id))) ||
1090 (type == GRPQUOTA && 1090 (type == GRPQUOTA &&
1091 !in_egroup_p(make_kgid(&init_user_ns, id)))) && 1091 !in_egroup_p(make_kgid(&init_user_ns, id)))) &&
1092 (!cfs_capable(CFS_CAP_SYS_ADMIN) || 1092 (!cfs_capable(CFS_CAP_SYS_ADMIN) ||
diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c
index d1ad91c34ddc..83013927e131 100644
--- a/drivers/staging/lustre/lustre/mdc/mdc_request.c
+++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c
@@ -1430,7 +1430,7 @@ static struct kuc_hdr *changelog_kuc_hdr(char *buf, int len, int flags)
1430{ 1430{
1431 struct kuc_hdr *lh = (struct kuc_hdr *)buf; 1431 struct kuc_hdr *lh = (struct kuc_hdr *)buf;
1432 1432
1433 LASSERT(len <= CR_MAXSIZE); 1433 LASSERT(len <= KUC_CHANGELOG_MSG_MAXSIZE);
1434 1434
1435 lh->kuc_magic = KUC_MAGIC; 1435 lh->kuc_magic = KUC_MAGIC;
1436 lh->kuc_transport = KUC_TRANSPORT_CHANGELOG; 1436 lh->kuc_transport = KUC_TRANSPORT_CHANGELOG;
@@ -1503,7 +1503,7 @@ static int mdc_changelog_send_thread(void *csdata)
1503 CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n", 1503 CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
1504 cs->cs_fp, cs->cs_startrec); 1504 cs->cs_fp, cs->cs_startrec);
1505 1505
1506 OBD_ALLOC(cs->cs_buf, CR_MAXSIZE); 1506 OBD_ALLOC(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE);
1507 if (cs->cs_buf == NULL) 1507 if (cs->cs_buf == NULL)
1508 GOTO(out, rc = -ENOMEM); 1508 GOTO(out, rc = -ENOMEM);
1509 1509
@@ -1540,7 +1540,7 @@ out:
1540 if (ctxt) 1540 if (ctxt)
1541 llog_ctxt_put(ctxt); 1541 llog_ctxt_put(ctxt);
1542 if (cs->cs_buf) 1542 if (cs->cs_buf)
1543 OBD_FREE(cs->cs_buf, CR_MAXSIZE); 1543 OBD_FREE(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE);
1544 OBD_FREE_PTR(cs); 1544 OBD_FREE_PTR(cs);
1545 return rc; 1545 return rc;
1546} 1546}
diff --git a/drivers/staging/media/go7007/go7007-loader.c b/drivers/staging/media/go7007/go7007-loader.c
index 10bb41c2fb6d..eecb1f2a5574 100644
--- a/drivers/staging/media/go7007/go7007-loader.c
+++ b/drivers/staging/media/go7007/go7007-loader.c
@@ -59,7 +59,7 @@ static int go7007_loader_probe(struct usb_interface *interface,
59 59
60 if (usbdev->descriptor.bNumConfigurations != 1) { 60 if (usbdev->descriptor.bNumConfigurations != 1) {
61 dev_err(&interface->dev, "can't handle multiple config\n"); 61 dev_err(&interface->dev, "can't handle multiple config\n");
62 return -ENODEV; 62 goto failed2;
63 } 63 }
64 64
65 vendor = le16_to_cpu(usbdev->descriptor.idVendor); 65 vendor = le16_to_cpu(usbdev->descriptor.idVendor);
@@ -108,6 +108,7 @@ static int go7007_loader_probe(struct usb_interface *interface,
108 return 0; 108 return 0;
109 109
110failed2: 110failed2:
111 usb_put_dev(usbdev);
111 dev_err(&interface->dev, "probe failed\n"); 112 dev_err(&interface->dev, "probe failed\n");
112 return -ENODEV; 113 return -ENODEV;
113} 114}
@@ -115,6 +116,7 @@ failed2:
115static void go7007_loader_disconnect(struct usb_interface *interface) 116static void go7007_loader_disconnect(struct usb_interface *interface)
116{ 117{
117 dev_info(&interface->dev, "disconnect\n"); 118 dev_info(&interface->dev, "disconnect\n");
119 usb_put_dev(interface_to_usbdev(interface));
118 usb_set_intfdata(interface, NULL); 120 usb_set_intfdata(interface, NULL);
119} 121}
120 122
diff --git a/drivers/staging/netlogic/xlr_net.c b/drivers/staging/netlogic/xlr_net.c
index eedffed17e39..d8ea25486a33 100644
--- a/drivers/staging/netlogic/xlr_net.c
+++ b/drivers/staging/netlogic/xlr_net.c
@@ -892,6 +892,11 @@ static int xlr_setup_mdio(struct xlr_net_priv *priv,
892 priv->mii_bus->write = xlr_mii_write; 892 priv->mii_bus->write = xlr_mii_write;
893 priv->mii_bus->parent = &pdev->dev; 893 priv->mii_bus->parent = &pdev->dev;
894 priv->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL); 894 priv->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
895 if (priv->mii_bus->irq == NULL) {
896 pr_err("irq alloc failed\n");
897 mdiobus_free(priv->mii_bus);
898 return -ENOMEM;
899 }
895 priv->mii_bus->irq[priv->phy_addr] = priv->ndev->irq; 900 priv->mii_bus->irq[priv->phy_addr] = priv->ndev->irq;
896 901
897 /* Scan only the enabled address */ 902 /* Scan only the enabled address */
diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c
index 47e0a91238a1..5a001d9b4252 100644
--- a/drivers/staging/octeon-usb/octeon-hcd.c
+++ b/drivers/staging/octeon-usb/octeon-hcd.c
@@ -275,13 +275,6 @@ enum cvmx_usb_pipe_flags {
275 */ 275 */
276#define MAX_TRANSFER_PACKETS ((1<<10)-1) 276#define MAX_TRANSFER_PACKETS ((1<<10)-1)
277 277
278enum {
279 USB_CLOCK_TYPE_REF_12,
280 USB_CLOCK_TYPE_REF_24,
281 USB_CLOCK_TYPE_REF_48,
282 USB_CLOCK_TYPE_CRYSTAL_12,
283};
284
285/** 278/**
286 * Logical transactions may take numerous low level 279 * Logical transactions may take numerous low level
287 * transactions, especially when splits are concerned. This 280 * transactions, especially when splits are concerned. This
@@ -471,19 +464,6 @@ struct octeon_hcd {
471/* Returns the IO address to push/pop stuff data from the FIFOs */ 464/* Returns the IO address to push/pop stuff data from the FIFOs */
472#define USB_FIFO_ADDRESS(channel, usb_index) (CVMX_USBCX_GOTGCTL(usb_index) + ((channel)+1)*0x1000) 465#define USB_FIFO_ADDRESS(channel, usb_index) (CVMX_USBCX_GOTGCTL(usb_index) + ((channel)+1)*0x1000)
473 466
474static int octeon_usb_get_clock_type(void)
475{
476 switch (cvmx_sysinfo_get()->board_type) {
477 case CVMX_BOARD_TYPE_BBGW_REF:
478 case CVMX_BOARD_TYPE_LANAI2_A:
479 case CVMX_BOARD_TYPE_LANAI2_U:
480 case CVMX_BOARD_TYPE_LANAI2_G:
481 case CVMX_BOARD_TYPE_UBNT_E100:
482 return USB_CLOCK_TYPE_CRYSTAL_12;
483 }
484 return USB_CLOCK_TYPE_REF_48;
485}
486
487/** 467/**
488 * Read a USB 32bit CSR. It performs the necessary address swizzle 468 * Read a USB 32bit CSR. It performs the necessary address swizzle
489 * for 32bit CSRs and logs the value in a readable format if 469 * for 32bit CSRs and logs the value in a readable format if
@@ -582,37 +562,6 @@ static inline int __cvmx_usb_get_data_pid(struct cvmx_usb_pipe *pipe)
582 return 0; /* Data0 */ 562 return 0; /* Data0 */
583} 563}
584 564
585
586/**
587 * Return the number of USB ports supported by this Octeon
588 * chip. If the chip doesn't support USB, or is not supported
589 * by this API, a zero will be returned. Most Octeon chips
590 * support one usb port, but some support two ports.
591 * cvmx_usb_initialize() must be called on independent
592 * struct cvmx_usb_state.
593 *
594 * Returns: Number of port, zero if usb isn't supported
595 */
596static int cvmx_usb_get_num_ports(void)
597{
598 int arch_ports = 0;
599
600 if (OCTEON_IS_MODEL(OCTEON_CN56XX))
601 arch_ports = 1;
602 else if (OCTEON_IS_MODEL(OCTEON_CN52XX))
603 arch_ports = 2;
604 else if (OCTEON_IS_MODEL(OCTEON_CN50XX))
605 arch_ports = 1;
606 else if (OCTEON_IS_MODEL(OCTEON_CN31XX))
607 arch_ports = 1;
608 else if (OCTEON_IS_MODEL(OCTEON_CN30XX))
609 arch_ports = 1;
610 else
611 arch_ports = 0;
612
613 return arch_ports;
614}
615
616/** 565/**
617 * Initialize a USB port for use. This must be called before any 566 * Initialize a USB port for use. This must be called before any
618 * other access to the Octeon USB port is made. The port starts 567 * other access to the Octeon USB port is made. The port starts
@@ -628,41 +577,16 @@ static int cvmx_usb_get_num_ports(void)
628 * Returns: 0 or a negative error code. 577 * Returns: 0 or a negative error code.
629 */ 578 */
630static int cvmx_usb_initialize(struct cvmx_usb_state *usb, 579static int cvmx_usb_initialize(struct cvmx_usb_state *usb,
631 int usb_port_number) 580 int usb_port_number,
581 enum cvmx_usb_initialize_flags flags)
632{ 582{
633 union cvmx_usbnx_clk_ctl usbn_clk_ctl; 583 union cvmx_usbnx_clk_ctl usbn_clk_ctl;
634 union cvmx_usbnx_usbp_ctl_status usbn_usbp_ctl_status; 584 union cvmx_usbnx_usbp_ctl_status usbn_usbp_ctl_status;
635 enum cvmx_usb_initialize_flags flags = 0;
636 int i; 585 int i;
637 586
638 /* At first allow 0-1 for the usb port number */ 587 /* At first allow 0-1 for the usb port number */
639 if ((usb_port_number < 0) || (usb_port_number > 1)) 588 if ((usb_port_number < 0) || (usb_port_number > 1))
640 return -EINVAL; 589 return -EINVAL;
641 /* For all chips except 52XX there is only one port */
642 if (!OCTEON_IS_MODEL(OCTEON_CN52XX) && (usb_port_number > 0))
643 return -EINVAL;
644 /* Try to determine clock type automatically */
645 if (octeon_usb_get_clock_type() == USB_CLOCK_TYPE_CRYSTAL_12) {
646 /* Only 12 MHZ crystals are supported */
647 flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI;
648 } else {
649 flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND;
650
651 switch (octeon_usb_get_clock_type()) {
652 case USB_CLOCK_TYPE_REF_12:
653 flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ;
654 break;
655 case USB_CLOCK_TYPE_REF_24:
656 flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ;
657 break;
658 case USB_CLOCK_TYPE_REF_48:
659 flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ;
660 break;
661 default:
662 return -EINVAL;
663 break;
664 }
665 }
666 590
667 memset(usb, 0, sizeof(*usb)); 591 memset(usb, 0, sizeof(*usb));
668 usb->init_flags = flags; 592 usb->init_flags = flags;
@@ -3431,7 +3355,6 @@ static int octeon_usb_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
3431 return 0; 3355 return 0;
3432} 3356}
3433 3357
3434
3435static const struct hc_driver octeon_hc_driver = { 3358static const struct hc_driver octeon_hc_driver = {
3436 .description = "Octeon USB", 3359 .description = "Octeon USB",
3437 .product_desc = "Octeon Host Controller", 3360 .product_desc = "Octeon Host Controller",
@@ -3448,15 +3371,74 @@ static const struct hc_driver octeon_hc_driver = {
3448 .hub_control = octeon_usb_hub_control, 3371 .hub_control = octeon_usb_hub_control,
3449}; 3372};
3450 3373
3451 3374static int octeon_usb_probe(struct platform_device *pdev)
3452static int octeon_usb_driver_probe(struct device *dev)
3453{ 3375{
3454 int status; 3376 int status;
3455 int usb_num = to_platform_device(dev)->id; 3377 int initialize_flags;
3456 int irq = platform_get_irq(to_platform_device(dev), 0); 3378 int usb_num;
3379 struct resource *res_mem;
3380 struct device_node *usbn_node;
3381 int irq = platform_get_irq(pdev, 0);
3382 struct device *dev = &pdev->dev;
3457 struct octeon_hcd *priv; 3383 struct octeon_hcd *priv;
3458 struct usb_hcd *hcd; 3384 struct usb_hcd *hcd;
3459 unsigned long flags; 3385 unsigned long flags;
3386 u32 clock_rate = 48000000;
3387 bool is_crystal_clock = false;
3388 const char *clock_type;
3389 int i;
3390
3391 if (dev->of_node == NULL) {
3392 dev_err(dev, "Error: empty of_node\n");
3393 return -ENXIO;
3394 }
3395 usbn_node = dev->of_node->parent;
3396
3397 i = of_property_read_u32(usbn_node,
3398 "refclk-frequency", &clock_rate);
3399 if (i) {
3400 dev_err(dev, "No USBN \"refclk-frequency\"\n");
3401 return -ENXIO;
3402 }
3403 switch (clock_rate) {
3404 case 12000000:
3405 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ;
3406 break;
3407 case 24000000:
3408 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ;
3409 break;
3410 case 48000000:
3411 initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ;
3412 break;
3413 default:
3414 dev_err(dev, "Illebal USBN \"refclk-frequency\" %u\n", clock_rate);
3415 return -ENXIO;
3416
3417 }
3418
3419 i = of_property_read_string(usbn_node,
3420 "refclk-type", &clock_type);
3421
3422 if (!i && strcmp("crystal", clock_type) == 0)
3423 is_crystal_clock = true;
3424
3425 if (is_crystal_clock)
3426 initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI;
3427 else
3428 initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND;
3429
3430 res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3431 if (res_mem == NULL) {
3432 dev_err(dev, "found no memory resource\n");
3433 return -ENXIO;
3434 }
3435 usb_num = (res_mem->start >> 44) & 1;
3436
3437 if (irq < 0) {
3438 /* Defective device tree, but we know how to fix it. */
3439 irq_hw_number_t hwirq = usb_num ? (1 << 6) + 17 : 56;
3440 irq = irq_create_mapping(NULL, hwirq);
3441 }
3460 3442
3461 /* 3443 /*
3462 * Set the DMA mask to 64bits so we get buffers already translated for 3444 * Set the DMA mask to 64bits so we get buffers already translated for
@@ -3465,6 +3447,26 @@ static int octeon_usb_driver_probe(struct device *dev)
3465 dev->coherent_dma_mask = ~0; 3447 dev->coherent_dma_mask = ~0;
3466 dev->dma_mask = &dev->coherent_dma_mask; 3448 dev->dma_mask = &dev->coherent_dma_mask;
3467 3449
3450 /*
3451 * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
3452 * IOB priority registers. Under heavy network load USB
3453 * hardware can be starved by the IOB causing a crash. Give
3454 * it a priority boost if it has been waiting more than 400
3455 * cycles to avoid this situation.
3456 *
3457 * Testing indicates that a cnt_val of 8192 is not sufficient,
3458 * but no failures are seen with 4096. We choose a value of
3459 * 400 to give a safety factor of 10.
3460 */
3461 if (OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)) {
3462 union cvmx_iob_n2c_l2c_pri_cnt pri_cnt;
3463
3464 pri_cnt.u64 = 0;
3465 pri_cnt.s.cnt_enb = 1;
3466 pri_cnt.s.cnt_val = 400;
3467 cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
3468 }
3469
3468 hcd = usb_create_hcd(&octeon_hc_driver, dev, dev_name(dev)); 3470 hcd = usb_create_hcd(&octeon_hc_driver, dev, dev_name(dev));
3469 if (!hcd) { 3471 if (!hcd) {
3470 dev_dbg(dev, "Failed to allocate memory for HCD\n"); 3472 dev_dbg(dev, "Failed to allocate memory for HCD\n");
@@ -3478,7 +3480,7 @@ static int octeon_usb_driver_probe(struct device *dev)
3478 tasklet_init(&priv->dequeue_tasklet, octeon_usb_urb_dequeue_work, (unsigned long)priv); 3480 tasklet_init(&priv->dequeue_tasklet, octeon_usb_urb_dequeue_work, (unsigned long)priv);
3479 INIT_LIST_HEAD(&priv->dequeue_list); 3481 INIT_LIST_HEAD(&priv->dequeue_list);
3480 3482
3481 status = cvmx_usb_initialize(&priv->usb, usb_num); 3483 status = cvmx_usb_initialize(&priv->usb, usb_num, initialize_flags);
3482 if (status) { 3484 if (status) {
3483 dev_dbg(dev, "USB initialization failed with %d\n", status); 3485 dev_dbg(dev, "USB initialization failed with %d\n", status);
3484 kfree(hcd); 3486 kfree(hcd);
@@ -3492,7 +3494,7 @@ static int octeon_usb_driver_probe(struct device *dev)
3492 cvmx_usb_poll(&priv->usb); 3494 cvmx_usb_poll(&priv->usb);
3493 spin_unlock_irqrestore(&priv->lock, flags); 3495 spin_unlock_irqrestore(&priv->lock, flags);
3494 3496
3495 status = usb_add_hcd(hcd, irq, IRQF_SHARED); 3497 status = usb_add_hcd(hcd, irq, 0);
3496 if (status) { 3498 if (status) {
3497 dev_dbg(dev, "USB add HCD failed with %d\n", status); 3499 dev_dbg(dev, "USB add HCD failed with %d\n", status);
3498 kfree(hcd); 3500 kfree(hcd);
@@ -3500,14 +3502,15 @@ static int octeon_usb_driver_probe(struct device *dev)
3500 } 3502 }
3501 device_wakeup_enable(hcd->self.controller); 3503 device_wakeup_enable(hcd->self.controller);
3502 3504
3503 dev_dbg(dev, "Registered HCD for port %d on irq %d\n", usb_num, irq); 3505 dev_info(dev, "Registered HCD for port %d on irq %d\n", usb_num, irq);
3504 3506
3505 return 0; 3507 return 0;
3506} 3508}
3507 3509
3508static int octeon_usb_driver_remove(struct device *dev) 3510static int octeon_usb_remove(struct platform_device *pdev)
3509{ 3511{
3510 int status; 3512 int status;
3513 struct device *dev = &pdev->dev;
3511 struct usb_hcd *hcd = dev_get_drvdata(dev); 3514 struct usb_hcd *hcd = dev_get_drvdata(dev);
3512 struct octeon_hcd *priv = hcd_to_octeon(hcd); 3515 struct octeon_hcd *priv = hcd_to_octeon(hcd);
3513 unsigned long flags; 3516 unsigned long flags;
@@ -3525,85 +3528,41 @@ static int octeon_usb_driver_remove(struct device *dev)
3525 return 0; 3528 return 0;
3526} 3529}
3527 3530
3528static struct device_driver octeon_usb_driver = { 3531static struct of_device_id octeon_usb_match[] = {
3529 .name = "OcteonUSB", 3532 {
3530 .bus = &platform_bus_type, 3533 .compatible = "cavium,octeon-5750-usbc",
3531 .probe = octeon_usb_driver_probe, 3534 },
3532 .remove = octeon_usb_driver_remove, 3535 {},
3533}; 3536};
3534 3537
3538static struct platform_driver octeon_usb_driver = {
3539 .driver = {
3540 .name = "OcteonUSB",
3541 .owner = THIS_MODULE,
3542 .of_match_table = octeon_usb_match,
3543 },
3544 .probe = octeon_usb_probe,
3545 .remove = octeon_usb_remove,
3546};
3535 3547
3536#define MAX_USB_PORTS 10 3548static int __init octeon_usb_driver_init(void)
3537static struct platform_device *pdev_glob[MAX_USB_PORTS];
3538static int octeon_usb_registered;
3539static int __init octeon_usb_module_init(void)
3540{ 3549{
3541 int num_devices = cvmx_usb_get_num_ports(); 3550 if (usb_disabled())
3542 int device; 3551 return 0;
3543
3544 if (usb_disabled() || num_devices == 0)
3545 return -ENODEV;
3546
3547 if (driver_register(&octeon_usb_driver))
3548 return -ENOMEM;
3549
3550 octeon_usb_registered = 1;
3551
3552 /*
3553 * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
3554 * IOB priority registers. Under heavy network load USB
3555 * hardware can be starved by the IOB causing a crash. Give
3556 * it a priority boost if it has been waiting more than 400
3557 * cycles to avoid this situation.
3558 *
3559 * Testing indicates that a cnt_val of 8192 is not sufficient,
3560 * but no failures are seen with 4096. We choose a value of
3561 * 400 to give a safety factor of 10.
3562 */
3563 if (OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)) {
3564 union cvmx_iob_n2c_l2c_pri_cnt pri_cnt;
3565
3566 pri_cnt.u64 = 0;
3567 pri_cnt.s.cnt_enb = 1;
3568 pri_cnt.s.cnt_val = 400;
3569 cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
3570 }
3571
3572 for (device = 0; device < num_devices; device++) {
3573 struct resource irq_resource;
3574 struct platform_device *pdev;
3575 memset(&irq_resource, 0, sizeof(irq_resource));
3576 irq_resource.start = (device == 0) ? OCTEON_IRQ_USB0 : OCTEON_IRQ_USB1;
3577 irq_resource.end = irq_resource.start;
3578 irq_resource.flags = IORESOURCE_IRQ;
3579 pdev = platform_device_register_simple((char *)octeon_usb_driver. name, device, &irq_resource, 1);
3580 if (IS_ERR(pdev)) {
3581 driver_unregister(&octeon_usb_driver);
3582 octeon_usb_registered = 0;
3583 return PTR_ERR(pdev);
3584 }
3585 if (device < MAX_USB_PORTS)
3586 pdev_glob[device] = pdev;
3587 3552
3588 } 3553 return platform_driver_register(&octeon_usb_driver);
3589 return 0;
3590} 3554}
3555module_init(octeon_usb_driver_init);
3591 3556
3592static void __exit octeon_usb_module_cleanup(void) 3557static void __exit octeon_usb_driver_exit(void)
3593{ 3558{
3594 int i; 3559 if (usb_disabled())
3560 return;
3595 3561
3596 for (i = 0; i < MAX_USB_PORTS; i++) 3562 platform_driver_unregister(&octeon_usb_driver);
3597 if (pdev_glob[i]) {
3598 platform_device_unregister(pdev_glob[i]);
3599 pdev_glob[i] = NULL;
3600 }
3601 if (octeon_usb_registered)
3602 driver_unregister(&octeon_usb_driver);
3603} 3563}
3564module_exit(octeon_usb_driver_exit);
3604 3565
3605MODULE_LICENSE("GPL"); 3566MODULE_LICENSE("GPL");
3606MODULE_AUTHOR("Cavium Networks <support@caviumnetworks.com>"); 3567MODULE_AUTHOR("Cavium, Inc. <support@cavium.com>");
3607MODULE_DESCRIPTION("Cavium Networks Octeon USB Host driver."); 3568MODULE_DESCRIPTION("Cavium Inc. OCTEON USB Host driver.");
3608module_init(octeon_usb_module_init);
3609module_exit(octeon_usb_module_cleanup);
diff --git a/drivers/staging/ozwpan/ozproto.c b/drivers/staging/ozwpan/ozproto.c
index cb060364dfe7..5d965cf06d59 100644
--- a/drivers/staging/ozwpan/ozproto.c
+++ b/drivers/staging/ozwpan/ozproto.c
@@ -668,8 +668,8 @@ void oz_binding_add(const char *net_dev)
668 if (binding) { 668 if (binding) {
669 binding->ptype.type = __constant_htons(OZ_ETHERTYPE); 669 binding->ptype.type = __constant_htons(OZ_ETHERTYPE);
670 binding->ptype.func = oz_pkt_recv; 670 binding->ptype.func = oz_pkt_recv;
671 memcpy(binding->name, net_dev, OZ_MAX_BINDING_LEN);
672 if (net_dev && *net_dev) { 671 if (net_dev && *net_dev) {
672 memcpy(binding->name, net_dev, OZ_MAX_BINDING_LEN);
673 oz_dbg(ON, "Adding binding: %s\n", net_dev); 673 oz_dbg(ON, "Adding binding: %s\n", net_dev);
674 binding->ptype.dev = 674 binding->ptype.dev =
675 dev_get_by_name(&init_net, net_dev); 675 dev_get_by_name(&init_net, net_dev);
@@ -680,6 +680,7 @@ void oz_binding_add(const char *net_dev)
680 } 680 }
681 } else { 681 } else {
682 oz_dbg(ON, "Binding to all netcards\n"); 682 oz_dbg(ON, "Binding to all netcards\n");
683 memset(binding->name, 0, OZ_MAX_BINDING_LEN);
683 binding->ptype.dev = NULL; 684 binding->ptype.dev = NULL;
684 } 685 }
685 if (binding) { 686 if (binding) {
diff --git a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c
index 153ec61493ab..96df62f95b6b 100644
--- a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c
@@ -912,12 +912,12 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len)
912 unsigned char *pbuf; 912 unsigned char *pbuf;
913 u32 wpa_ielen = 0; 913 u32 wpa_ielen = 0;
914 u8 *pbssid = GetAddr3Ptr(pframe); 914 u8 *pbssid = GetAddr3Ptr(pframe);
915 u32 hidden_ssid = 0;
916 struct HT_info_element *pht_info = NULL; 915 struct HT_info_element *pht_info = NULL;
917 struct rtw_ieee80211_ht_cap *pht_cap = NULL; 916 struct rtw_ieee80211_ht_cap *pht_cap = NULL;
918 u32 bcn_channel; 917 u32 bcn_channel;
919 unsigned short ht_cap_info; 918 unsigned short ht_cap_info;
920 unsigned char ht_info_infos_0; 919 unsigned char ht_info_infos_0;
920 int ssid_len;
921 921
922 if (is_client_associated_to_ap(Adapter) == false) 922 if (is_client_associated_to_ap(Adapter) == false)
923 return true; 923 return true;
@@ -999,21 +999,15 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len)
999 } 999 }
1000 1000
1001 /* checking SSID */ 1001 /* checking SSID */
1002 ssid_len = 0;
1002 p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SSID_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_); 1003 p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SSID_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
1003 if (p == NULL) { 1004 if (p) {
1004 DBG_88E("%s marc: cannot find SSID for survey event\n", __func__); 1005 ssid_len = *(p + 1);
1005 hidden_ssid = true; 1006 if (ssid_len > NDIS_802_11_LENGTH_SSID)
1006 } else { 1007 ssid_len = 0;
1007 hidden_ssid = false;
1008 }
1009
1010 if ((NULL != p) && (false == hidden_ssid && (*(p + 1)))) {
1011 memcpy(bssid->Ssid.Ssid, (p + 2), *(p + 1));
1012 bssid->Ssid.SsidLength = *(p + 1);
1013 } else {
1014 bssid->Ssid.SsidLength = 0;
1015 bssid->Ssid.Ssid[0] = '\0';
1016 } 1008 }
1009 memcpy(bssid->Ssid.Ssid, (p + 2), ssid_len);
1010 bssid->Ssid.SsidLength = ssid_len;
1017 1011
1018 RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("%s bssid.Ssid.Ssid:%s bssid.Ssid.SsidLength:%d " 1012 RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("%s bssid.Ssid.Ssid:%s bssid.Ssid.SsidLength:%d "
1019 "cur_network->network.Ssid.Ssid:%s len:%d\n", __func__, bssid->Ssid.Ssid, 1013 "cur_network->network.Ssid.Ssid:%s len:%d\n", __func__, bssid->Ssid.Ssid,
diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
index dec992569476..4ad80ae1067f 100644
--- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
@@ -2500,7 +2500,7 @@ static int rtw_mp_ioctl_hdl(struct net_device *dev, struct iw_request_info *info
2500 ("rtw_mp_ioctl_hdl: subcode [%d], len[%d], buffer_len[%d]\r\n", 2500 ("rtw_mp_ioctl_hdl: subcode [%d], len[%d], buffer_len[%d]\r\n",
2501 poidparam->subcode, poidparam->len, len)); 2501 poidparam->subcode, poidparam->len, len));
2502 2502
2503 if (poidparam->subcode >= MAX_MP_IOCTL_SUBCODE) { 2503 if (poidparam->subcode >= ARRAY_SIZE(mp_ioctl_hdl)) {
2504 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("no matching drvext subcodes\r\n")); 2504 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("no matching drvext subcodes\r\n"));
2505 ret = -EINVAL; 2505 ret = -EINVAL;
2506 goto _rtw_mp_ioctl_hdl_exit; 2506 goto _rtw_mp_ioctl_hdl_exit;
@@ -3164,9 +3164,7 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev,
3164 u8 *p2pie; 3164 u8 *p2pie;
3165 uint p2pielen = 0, attr_contentlen = 0; 3165 uint p2pielen = 0, attr_contentlen = 0;
3166 u8 attr_content[100] = {0x00}; 3166 u8 attr_content[100] = {0x00};
3167 3167 u8 go_devadd_str[17 + 12] = {};
3168 u8 go_devadd_str[17 + 10] = {0x00};
3169 /* +10 is for the str "go_devadd =", we have to clear it at wrqu->data.pointer */
3170 3168
3171 /* Commented by Albert 20121209 */ 3169 /* Commented by Albert 20121209 */
3172 /* The input data is the GO's interface address which the application wants to know its device address. */ 3170 /* The input data is the GO's interface address which the application wants to know its device address. */
@@ -3223,12 +3221,12 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev,
3223 spin_unlock_bh(&pmlmepriv->scanned_queue.lock); 3221 spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
3224 3222
3225 if (!blnMatch) 3223 if (!blnMatch)
3226 sprintf(go_devadd_str, "\n\ndev_add = NULL"); 3224 snprintf(go_devadd_str, sizeof(go_devadd_str), "\n\ndev_add = NULL");
3227 else 3225 else
3228 sprintf(go_devadd_str, "\n\ndev_add =%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", 3226 snprintf(go_devadd_str, sizeof(go_devadd_str), "\n\ndev_add =%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
3229 attr_content[0], attr_content[1], attr_content[2], attr_content[3], attr_content[4], attr_content[5]); 3227 attr_content[0], attr_content[1], attr_content[2], attr_content[3], attr_content[4], attr_content[5]);
3230 3228
3231 if (copy_to_user(wrqu->data.pointer, go_devadd_str, 10 + 17)) 3229 if (copy_to_user(wrqu->data.pointer, go_devadd_str, sizeof(go_devadd_str)))
3232 return -EFAULT; 3230 return -EFAULT;
3233 return ret; 3231 return ret;
3234} 3232}
diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
index 0a341d6ec51f..a70dcef1419e 100644
--- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c
+++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
@@ -53,7 +53,7 @@ static struct usb_device_id rtw_usb_id_tbl[] = {
53 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */ 53 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
54 /*=== Customer ID ===*/ 54 /*=== Customer ID ===*/
55 /****** 8188EUS ********/ 55 /****** 8188EUS ********/
56 {USB_DEVICE(0x8179, 0x07B8)}, /* Abocom - Abocom */ 56 {USB_DEVICE(0x07b8, 0x8179)}, /* Abocom - Abocom */
57 {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */ 57 {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */
58 {} /* Terminating entry */ 58 {} /* Terminating entry */
59}; 59};
diff --git a/drivers/staging/rtl8821ae/Kconfig b/drivers/staging/rtl8821ae/Kconfig
index 2aa5dac2f1df..abccc9dabd65 100644
--- a/drivers/staging/rtl8821ae/Kconfig
+++ b/drivers/staging/rtl8821ae/Kconfig
@@ -1,6 +1,6 @@
1config R8821AE 1config R8821AE
2 tristate "RealTek RTL8821AE Wireless LAN NIC driver" 2 tristate "RealTek RTL8821AE Wireless LAN NIC driver"
3 depends on PCI && WLAN 3 depends on PCI && WLAN && MAC80211
4 depends on m 4 depends on m
5 select WIRELESS_EXT 5 select WIRELESS_EXT
6 select WEXT_PRIV 6 select WEXT_PRIV
diff --git a/drivers/staging/rtl8821ae/wifi.h b/drivers/staging/rtl8821ae/wifi.h
index cfe88a1efd55..76bef93ad70a 100644
--- a/drivers/staging/rtl8821ae/wifi.h
+++ b/drivers/staging/rtl8821ae/wifi.h
@@ -1414,7 +1414,7 @@ struct rtl_dm {
1414 1414
1415 1415
1416 /*88e tx power tracking*/ 1416 /*88e tx power tracking*/
1417 u8 bb_swing_idx_ofdm[2]; 1417 u8 bb_swing_idx_ofdm[MAX_RF_PATH];
1418 u8 bb_swing_idx_ofdm_current; 1418 u8 bb_swing_idx_ofdm_current;
1419 u8 bb_swing_idx_ofdm_base[MAX_RF_PATH]; 1419 u8 bb_swing_idx_ofdm_base[MAX_RF_PATH];
1420 bool bb_swing_flag_Ofdm; 1420 bool bb_swing_flag_Ofdm;
diff --git a/drivers/staging/usbip/userspace/libsrc/names.c b/drivers/staging/usbip/userspace/libsrc/names.c
index 3c8d28b771e0..81ff8522405c 100644
--- a/drivers/staging/usbip/userspace/libsrc/names.c
+++ b/drivers/staging/usbip/userspace/libsrc/names.c
@@ -169,14 +169,14 @@ static void *my_malloc(size_t size)
169 struct pool *p; 169 struct pool *p;
170 170
171 p = calloc(1, sizeof(struct pool)); 171 p = calloc(1, sizeof(struct pool));
172 if (!p) { 172 if (!p)
173 free(p);
174 return NULL; 173 return NULL;
175 }
176 174
177 p->mem = calloc(1, size); 175 p->mem = calloc(1, size);
178 if (!p->mem) 176 if (!p->mem) {
177 free(p);
179 return NULL; 178 return NULL;
179 }
180 180
181 p->next = pool_head; 181 p->next = pool_head;
182 pool_head = p; 182 pool_head = p;
diff --git a/drivers/staging/usbip/vhci_sysfs.c b/drivers/staging/usbip/vhci_sysfs.c
index 9b51586d11d9..0141bc34d5cc 100644
--- a/drivers/staging/usbip/vhci_sysfs.c
+++ b/drivers/staging/usbip/vhci_sysfs.c
@@ -149,7 +149,8 @@ static int valid_args(__u32 rhport, enum usb_device_speed speed)
149 case USB_SPEED_WIRELESS: 149 case USB_SPEED_WIRELESS:
150 break; 150 break;
151 default: 151 default:
152 pr_err("speed %d\n", speed); 152 pr_err("Failed attach request for unsupported USB speed: %s\n",
153 usb_speed_string(speed));
153 return -EINVAL; 154 return -EINVAL;
154 } 155 }
155 156
diff --git a/drivers/staging/wlags49_h2/wl_wext.c b/drivers/staging/wlags49_h2/wl_wext.c
index 4a1ddaf5e00f..187fc060de26 100644
--- a/drivers/staging/wlags49_h2/wl_wext.c
+++ b/drivers/staging/wlags49_h2/wl_wext.c
@@ -1061,7 +1061,7 @@ static int wireless_set_essid(struct net_device *dev, struct iw_request_info *in
1061 goto out; 1061 goto out;
1062 } 1062 }
1063 1063
1064 if (data->flags != 0 && data->length > HCF_MAX_NAME_LEN + 1) { 1064 if (data->flags != 0 && data->length > HCF_MAX_NAME_LEN) {
1065 ret = -EINVAL; 1065 ret = -EINVAL;
1066 goto out; 1066 goto out;
1067 } 1067 }
diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c
index e048d6439f4a..cda4d80cfaef 100644
--- a/drivers/target/iscsi/iscsi_target_erl1.c
+++ b/drivers/target/iscsi/iscsi_target_erl1.c
@@ -507,7 +507,9 @@ int iscsit_handle_status_snack(
507 u32 last_statsn; 507 u32 last_statsn;
508 int found_cmd; 508 int found_cmd;
509 509
510 if (conn->exp_statsn > begrun) { 510 if (!begrun) {
511 begrun = conn->exp_statsn;
512 } else if (conn->exp_statsn > begrun) {
511 pr_err("Got Status SNACK Begrun: 0x%08x, RunLength:" 513 pr_err("Got Status SNACK Begrun: 0x%08x, RunLength:"
512 " 0x%08x but already got ExpStatSN: 0x%08x on CID:" 514 " 0x%08x but already got ExpStatSN: 0x%08x on CID:"
513 " %hu.\n", begrun, runlength, conn->exp_statsn, 515 " %hu.\n", begrun, runlength, conn->exp_statsn,
diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
index 12da9b386169..c3d9df6aaf5f 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -500,7 +500,7 @@ static inline int core_alua_state_lba_dependent(
500 500
501 if (segment_mult) { 501 if (segment_mult) {
502 u64 tmp = lba; 502 u64 tmp = lba;
503 start_lba = sector_div(tmp, segment_size * segment_mult); 503 start_lba = do_div(tmp, segment_size * segment_mult);
504 504
505 last_lba = first_lba + segment_size - 1; 505 last_lba = first_lba + segment_size - 1;
506 if (start_lba >= first_lba && 506 if (start_lba >= first_lba &&
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 2f5d77932c80..3013287a2aaa 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -2009,7 +2009,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2009 struct t10_reservation *pr_tmpl = &dev->t10_pr; 2009 struct t10_reservation *pr_tmpl = &dev->t10_pr;
2010 unsigned char isid_buf[PR_REG_ISID_LEN], *isid_ptr = NULL; 2010 unsigned char isid_buf[PR_REG_ISID_LEN], *isid_ptr = NULL;
2011 sense_reason_t ret = TCM_NO_SENSE; 2011 sense_reason_t ret = TCM_NO_SENSE;
2012 int pr_holder = 0; 2012 int pr_holder = 0, type;
2013 2013
2014 if (!se_sess || !se_lun) { 2014 if (!se_sess || !se_lun) {
2015 pr_err("SPC-3 PR: se_sess || struct se_lun is NULL!\n"); 2015 pr_err("SPC-3 PR: se_sess || struct se_lun is NULL!\n");
@@ -2131,6 +2131,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2131 ret = TCM_RESERVATION_CONFLICT; 2131 ret = TCM_RESERVATION_CONFLICT;
2132 goto out; 2132 goto out;
2133 } 2133 }
2134 type = pr_reg->pr_res_type;
2134 2135
2135 spin_lock(&pr_tmpl->registration_lock); 2136 spin_lock(&pr_tmpl->registration_lock);
2136 /* 2137 /*
@@ -2161,6 +2162,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2161 * Release the calling I_T Nexus registration now.. 2162 * Release the calling I_T Nexus registration now..
2162 */ 2163 */
2163 __core_scsi3_free_registration(cmd->se_dev, pr_reg, NULL, 1); 2164 __core_scsi3_free_registration(cmd->se_dev, pr_reg, NULL, 1);
2165 pr_reg = NULL;
2164 2166
2165 /* 2167 /*
2166 * From spc4r17, section 5.7.11.3 Unregistering 2168 * From spc4r17, section 5.7.11.3 Unregistering
@@ -2174,8 +2176,8 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2174 * RESERVATIONS RELEASED. 2176 * RESERVATIONS RELEASED.
2175 */ 2177 */
2176 if (pr_holder && 2178 if (pr_holder &&
2177 (pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY || 2179 (type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY ||
2178 pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY)) { 2180 type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY)) {
2179 list_for_each_entry(pr_reg_p, 2181 list_for_each_entry(pr_reg_p,
2180 &pr_tmpl->registration_list, 2182 &pr_tmpl->registration_list,
2181 pr_reg_list) { 2183 pr_reg_list) {
@@ -2194,7 +2196,8 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2194 ret = core_scsi3_update_and_write_aptpl(dev, aptpl); 2196 ret = core_scsi3_update_and_write_aptpl(dev, aptpl);
2195 2197
2196out: 2198out:
2197 core_scsi3_put_pr_reg(pr_reg); 2199 if (pr_reg)
2200 core_scsi3_put_pr_reg(pr_reg);
2198 return ret; 2201 return ret;
2199} 2202}
2200 2203
diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
index fa3cae393e13..a4489444ffbc 100644
--- a/drivers/target/target_core_sbc.c
+++ b/drivers/target/target_core_sbc.c
@@ -1074,12 +1074,19 @@ sbc_dif_copy_prot(struct se_cmd *cmd, unsigned int sectors, bool read,
1074 struct scatterlist *psg; 1074 struct scatterlist *psg;
1075 void *paddr, *addr; 1075 void *paddr, *addr;
1076 unsigned int i, len, left; 1076 unsigned int i, len, left;
1077 unsigned int offset = 0;
1077 1078
1078 left = sectors * dev->prot_length; 1079 left = sectors * dev->prot_length;
1079 1080
1080 for_each_sg(cmd->t_prot_sg, psg, cmd->t_prot_nents, i) { 1081 for_each_sg(cmd->t_prot_sg, psg, cmd->t_prot_nents, i) {
1081 1082
1082 len = min(psg->length, left); 1083 len = min(psg->length, left);
1084 if (offset >= sg->length) {
1085 sg = sg_next(sg);
1086 offset = 0;
1087 sg_off = sg->offset;
1088 }
1089
1083 paddr = kmap_atomic(sg_page(psg)) + psg->offset; 1090 paddr = kmap_atomic(sg_page(psg)) + psg->offset;
1084 addr = kmap_atomic(sg_page(sg)) + sg_off; 1091 addr = kmap_atomic(sg_page(sg)) + sg_off;
1085 1092
@@ -1089,6 +1096,7 @@ sbc_dif_copy_prot(struct se_cmd *cmd, unsigned int sectors, bool read,
1089 memcpy(addr, paddr, len); 1096 memcpy(addr, paddr, len);
1090 1097
1091 left -= len; 1098 left -= len;
1099 offset += len;
1092 kunmap_atomic(paddr); 1100 kunmap_atomic(paddr);
1093 kunmap_atomic(addr); 1101 kunmap_atomic(addr);
1094 } 1102 }
diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index 43c5ca9878bc..3bebc71ea033 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -440,8 +440,8 @@ check_scsi_name:
440 padding = ((-scsi_target_len) & 3); 440 padding = ((-scsi_target_len) & 3);
441 if (padding) 441 if (padding)
442 scsi_target_len += padding; 442 scsi_target_len += padding;
443 if (scsi_name_len > 256) 443 if (scsi_target_len > 256)
444 scsi_name_len = 256; 444 scsi_target_len = 256;
445 445
446 buf[off-1] = scsi_target_len; 446 buf[off-1] = scsi_target_len;
447 off += scsi_target_len; 447 off += scsi_target_len;
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index c50fd9f11aab..24b4f65d8777 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -669,9 +669,6 @@ void target_complete_cmd(struct se_cmd *cmd, u8 scsi_status)
669 return; 669 return;
670 } 670 }
671 671
672 if (!success)
673 cmd->transport_state |= CMD_T_FAILED;
674
675 /* 672 /*
676 * Check for case where an explicit ABORT_TASK has been received 673 * Check for case where an explicit ABORT_TASK has been received
677 * and transport_wait_for_tasks() will be waiting for completion.. 674 * and transport_wait_for_tasks() will be waiting for completion..
@@ -681,7 +678,7 @@ void target_complete_cmd(struct se_cmd *cmd, u8 scsi_status)
681 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 678 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
682 complete(&cmd->t_transport_stop_comp); 679 complete(&cmd->t_transport_stop_comp);
683 return; 680 return;
684 } else if (cmd->transport_state & CMD_T_FAILED) { 681 } else if (!success) {
685 INIT_WORK(&cmd->work, target_complete_failure_work); 682 INIT_WORK(&cmd->work, target_complete_failure_work);
686 } else { 683 } else {
687 INIT_WORK(&cmd->work, target_complete_ok_work); 684 INIT_WORK(&cmd->work, target_complete_ok_work);
diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c
index 6496872e2e47..b01659bd4f7c 100644
--- a/drivers/tty/hvc/hvc_opal.c
+++ b/drivers/tty/hvc/hvc_opal.c
@@ -255,13 +255,7 @@ static int __init hvc_opal_init(void)
255 /* Register as a vio device to receive callbacks */ 255 /* Register as a vio device to receive callbacks */
256 return platform_driver_register(&hvc_opal_driver); 256 return platform_driver_register(&hvc_opal_driver);
257} 257}
258module_init(hvc_opal_init); 258device_initcall(hvc_opal_init);
259
260static void __exit hvc_opal_exit(void)
261{
262 platform_driver_unregister(&hvc_opal_driver);
263}
264module_exit(hvc_opal_exit);
265 259
266static void udbg_opal_putc(char c) 260static void udbg_opal_putc(char c)
267{ 261{
diff --git a/drivers/tty/hvc/hvc_rtas.c b/drivers/tty/hvc/hvc_rtas.c
index 0069bb86ba49..08c87920b74a 100644
--- a/drivers/tty/hvc/hvc_rtas.c
+++ b/drivers/tty/hvc/hvc_rtas.c
@@ -102,17 +102,7 @@ static int __init hvc_rtas_init(void)
102 102
103 return 0; 103 return 0;
104} 104}
105module_init(hvc_rtas_init); 105device_initcall(hvc_rtas_init);
106
107/* This will tear down the tty portion of the driver */
108static void __exit hvc_rtas_exit(void)
109{
110 /* Really the fun isn't over until the worker thread breaks down and
111 * the tty cleans up */
112 if (hvc_rtas_dev)
113 hvc_remove(hvc_rtas_dev);
114}
115module_exit(hvc_rtas_exit);
116 106
117/* This will happen prior to module init. There is no tty at this time? */ 107/* This will happen prior to module init. There is no tty at this time? */
118static int __init hvc_rtas_console_init(void) 108static int __init hvc_rtas_console_init(void)
diff --git a/drivers/tty/hvc/hvc_udbg.c b/drivers/tty/hvc/hvc_udbg.c
index 72228276fe31..9cf573d06a29 100644
--- a/drivers/tty/hvc/hvc_udbg.c
+++ b/drivers/tty/hvc/hvc_udbg.c
@@ -80,14 +80,7 @@ static int __init hvc_udbg_init(void)
80 80
81 return 0; 81 return 0;
82} 82}
83module_init(hvc_udbg_init); 83device_initcall(hvc_udbg_init);
84
85static void __exit hvc_udbg_exit(void)
86{
87 if (hvc_udbg_dev)
88 hvc_remove(hvc_udbg_dev);
89}
90module_exit(hvc_udbg_exit);
91 84
92static int __init hvc_udbg_console_init(void) 85static int __init hvc_udbg_console_init(void)
93{ 86{
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 636c9baad7a5..2dc2831840ca 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -561,18 +561,7 @@ static int __init xen_hvc_init(void)
561#endif 561#endif
562 return r; 562 return r;
563} 563}
564 564device_initcall(xen_hvc_init);
565static void __exit xen_hvc_fini(void)
566{
567 struct xencons_info *entry, *next;
568
569 if (list_empty(&xenconsoles))
570 return;
571
572 list_for_each_entry_safe(entry, next, &xenconsoles, list) {
573 xen_console_remove(entry);
574 }
575}
576 565
577static int xen_cons_init(void) 566static int xen_cons_init(void)
578{ 567{
@@ -598,10 +587,6 @@ static int xen_cons_init(void)
598 hvc_instantiate(HVC_COOKIE, 0, ops); 587 hvc_instantiate(HVC_COOKIE, 0, ops);
599 return 0; 588 return 0;
600} 589}
601
602
603module_init(xen_hvc_init);
604module_exit(xen_hvc_fini);
605console_initcall(xen_cons_init); 590console_initcall(xen_cons_init);
606 591
607#ifdef CONFIG_EARLY_PRINTK 592#ifdef CONFIG_EARLY_PRINTK
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index f34461c5f14e..2ebe47b78a3e 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -1090,6 +1090,7 @@ static void gsm_control_modem(struct gsm_mux *gsm, u8 *data, int clen)
1090{ 1090{
1091 unsigned int addr = 0; 1091 unsigned int addr = 0;
1092 unsigned int modem = 0; 1092 unsigned int modem = 0;
1093 unsigned int brk = 0;
1093 struct gsm_dlci *dlci; 1094 struct gsm_dlci *dlci;
1094 int len = clen; 1095 int len = clen;
1095 u8 *dp = data; 1096 u8 *dp = data;
@@ -1116,6 +1117,16 @@ static void gsm_control_modem(struct gsm_mux *gsm, u8 *data, int clen)
1116 if (len == 0) 1117 if (len == 0)
1117 return; 1118 return;
1118 } 1119 }
1120 len--;
1121 if (len > 0) {
1122 while (gsm_read_ea(&brk, *dp++) == 0) {
1123 len--;
1124 if (len == 0)
1125 return;
1126 }
1127 modem <<= 7;
1128 modem |= (brk & 0x7f);
1129 }
1119 tty = tty_port_tty_get(&dlci->port); 1130 tty = tty_port_tty_get(&dlci->port);
1120 gsm_process_modem(tty, dlci, modem, clen); 1131 gsm_process_modem(tty, dlci, modem, clen);
1121 if (tty) { 1132 if (tty) {
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index cb8017aa4434..d15624c1b751 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -817,8 +817,7 @@ static void process_echoes(struct tty_struct *tty)
817 struct n_tty_data *ldata = tty->disc_data; 817 struct n_tty_data *ldata = tty->disc_data;
818 size_t echoed; 818 size_t echoed;
819 819
820 if ((!L_ECHO(tty) && !L_ECHONL(tty)) || 820 if (ldata->echo_mark == ldata->echo_tail)
821 ldata->echo_mark == ldata->echo_tail)
822 return; 821 return;
823 822
824 mutex_lock(&ldata->output_lock); 823 mutex_lock(&ldata->output_lock);
@@ -1244,7 +1243,8 @@ n_tty_receive_signal_char(struct tty_struct *tty, int signal, unsigned char c)
1244 if (L_ECHO(tty)) { 1243 if (L_ECHO(tty)) {
1245 echo_char(c, tty); 1244 echo_char(c, tty);
1246 commit_echoes(tty); 1245 commit_echoes(tty);
1247 } 1246 } else
1247 process_echoes(tty);
1248 isig(signal, tty); 1248 isig(signal, tty);
1249 return; 1249 return;
1250} 1250}
@@ -1274,7 +1274,7 @@ n_tty_receive_char_special(struct tty_struct *tty, unsigned char c)
1274 if (I_IXON(tty)) { 1274 if (I_IXON(tty)) {
1275 if (c == START_CHAR(tty)) { 1275 if (c == START_CHAR(tty)) {
1276 start_tty(tty); 1276 start_tty(tty);
1277 commit_echoes(tty); 1277 process_echoes(tty);
1278 return 0; 1278 return 0;
1279 } 1279 }
1280 if (c == STOP_CHAR(tty)) { 1280 if (c == STOP_CHAR(tty)) {
@@ -1820,8 +1820,10 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
1820 * Fix tty hang when I_IXON(tty) is cleared, but the tty 1820 * Fix tty hang when I_IXON(tty) is cleared, but the tty
1821 * been stopped by STOP_CHAR(tty) before it. 1821 * been stopped by STOP_CHAR(tty) before it.
1822 */ 1822 */
1823 if (!I_IXON(tty) && old && (old->c_iflag & IXON) && !tty->flow_stopped) 1823 if (!I_IXON(tty) && old && (old->c_iflag & IXON) && !tty->flow_stopped) {
1824 start_tty(tty); 1824 start_tty(tty);
1825 process_echoes(tty);
1826 }
1825 1827
1826 /* The termios change make the tty ready for I/O */ 1828 /* The termios change make the tty ready for I/O */
1827 if (waitqueue_active(&tty->write_wait)) 1829 if (waitqueue_active(&tty->write_wait))
@@ -1896,7 +1898,7 @@ err:
1896static inline int input_available_p(struct tty_struct *tty, int poll) 1898static inline int input_available_p(struct tty_struct *tty, int poll)
1897{ 1899{
1898 struct n_tty_data *ldata = tty->disc_data; 1900 struct n_tty_data *ldata = tty->disc_data;
1899 int amt = poll && !TIME_CHAR(tty) ? MIN_CHAR(tty) : 1; 1901 int amt = poll && !TIME_CHAR(tty) && MIN_CHAR(tty) ? MIN_CHAR(tty) : 1;
1900 1902
1901 if (ldata->icanon && !L_EXTPROC(tty)) { 1903 if (ldata->icanon && !L_EXTPROC(tty)) {
1902 if (ldata->canon_head != ldata->read_tail) 1904 if (ldata->canon_head != ldata->read_tail)
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index 61ecd709a722..69932b7556cf 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -2433,6 +2433,24 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
2433 serial_dl_write(up, quot); 2433 serial_dl_write(up, quot);
2434 2434
2435 /* 2435 /*
2436 * XR17V35x UARTs have an extra fractional divisor register (DLD)
2437 *
2438 * We need to recalculate all of the registers, because DLM and DLL
2439 * are already rounded to a whole integer.
2440 *
2441 * When recalculating we use a 32x clock instead of a 16x clock to
2442 * allow 1-bit for rounding in the fractional part.
2443 */
2444 if (up->port.type == PORT_XR17V35X) {
2445 unsigned int baud_x32 = (port->uartclk * 2) / baud;
2446 u16 quot = baud_x32 / 32;
2447 u8 quot_frac = DIV_ROUND_CLOSEST(baud_x32 % 32, 2);
2448
2449 serial_dl_write(up, quot);
2450 serial_port_out(port, 0x2, quot_frac & 0xf);
2451 }
2452
2453 /*
2436 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR 2454 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
2437 * is written without DLAB set, this mode will be disabled. 2455 * is written without DLAB set, this mode will be disabled.
2438 */ 2456 */
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index faa64e646100..ed3113576740 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -391,7 +391,7 @@ static int dw8250_remove(struct platform_device *pdev)
391 return 0; 391 return 0;
392} 392}
393 393
394#ifdef CONFIG_PM 394#ifdef CONFIG_PM_SLEEP
395static int dw8250_suspend(struct device *dev) 395static int dw8250_suspend(struct device *dev)
396{ 396{
397 struct dw8250_data *data = dev_get_drvdata(dev); 397 struct dw8250_data *data = dev_get_drvdata(dev);
@@ -409,7 +409,7 @@ static int dw8250_resume(struct device *dev)
409 409
410 return 0; 410 return 0;
411} 411}
412#endif /* CONFIG_PM */ 412#endif /* CONFIG_PM_SLEEP */
413 413
414#ifdef CONFIG_PM_RUNTIME 414#ifdef CONFIG_PM_RUNTIME
415static int dw8250_runtime_suspend(struct device *dev) 415static int dw8250_runtime_suspend(struct device *dev)
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 50228eed3b6f..0ff3e3624d4c 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -783,7 +783,8 @@ static int pci_netmos_9900_setup(struct serial_private *priv,
783{ 783{
784 unsigned int bar; 784 unsigned int bar;
785 785
786 if ((priv->dev->subsystem_device & 0xff00) == 0x3000) { 786 if ((priv->dev->device != PCI_DEVICE_ID_NETMOS_9865) &&
787 (priv->dev->subsystem_device & 0xff00) == 0x3000) {
787 /* netmos apparently orders BARs by datasheet layout, so serial 788 /* netmos apparently orders BARs by datasheet layout, so serial
788 * ports get BARs 0 and 3 (or 1 and 4 for memmapped) 789 * ports get BARs 0 and 3 (or 1 and 4 for memmapped)
789 */ 790 */
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index a49f10d269b2..91c0d8839570 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -35,21 +35,18 @@
35#include <linux/platform_device.h> 35#include <linux/platform_device.h>
36#include <linux/of.h> 36#include <linux/of.h>
37#include <linux/of_device.h> 37#include <linux/of_device.h>
38#include <linux/of_gpio.h>
38#include <linux/dma-mapping.h> 39#include <linux/dma-mapping.h>
39#include <linux/atmel_pdc.h> 40#include <linux/atmel_pdc.h>
40#include <linux/atmel_serial.h> 41#include <linux/atmel_serial.h>
41#include <linux/uaccess.h> 42#include <linux/uaccess.h>
42#include <linux/platform_data/atmel.h> 43#include <linux/platform_data/atmel.h>
43#include <linux/timer.h> 44#include <linux/timer.h>
45#include <linux/gpio.h>
44 46
45#include <asm/io.h> 47#include <asm/io.h>
46#include <asm/ioctls.h> 48#include <asm/ioctls.h>
47 49
48#ifdef CONFIG_ARM
49#include <mach/cpu.h>
50#include <asm/gpio.h>
51#endif
52
53#define PDC_BUFFER_SIZE 512 50#define PDC_BUFFER_SIZE 512
54/* Revisit: We should calculate this based on the actual port settings */ 51/* Revisit: We should calculate this based on the actual port settings */
55#define PDC_RX_TIMEOUT (3 * 10) /* 3 bytes */ 52#define PDC_RX_TIMEOUT (3 * 10) /* 3 bytes */
@@ -168,6 +165,7 @@ struct atmel_uart_port {
168 struct circ_buf rx_ring; 165 struct circ_buf rx_ring;
169 166
170 struct serial_rs485 rs485; /* rs485 settings */ 167 struct serial_rs485 rs485; /* rs485 settings */
168 int rts_gpio; /* optional RTS GPIO */
171 unsigned int tx_done_mask; 169 unsigned int tx_done_mask;
172 bool is_usart; /* usart or uart */ 170 bool is_usart; /* usart or uart */
173 struct timer_list uart_timer; /* uart timer */ 171 struct timer_list uart_timer; /* uart timer */
@@ -301,20 +299,16 @@ static void atmel_set_mctrl(struct uart_port *port, u_int mctrl)
301 unsigned int mode; 299 unsigned int mode;
302 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); 300 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
303 301
304#ifdef CONFIG_ARCH_AT91RM9200 302 /*
305 if (cpu_is_at91rm9200()) { 303 * AT91RM9200 Errata #39: RTS0 is not internally connected
306 /* 304 * to PA21. We need to drive the pin as a GPIO.
307 * AT91RM9200 Errata #39: RTS0 is not internally connected 305 */
308 * to PA21. We need to drive the pin manually. 306 if (gpio_is_valid(atmel_port->rts_gpio)) {
309 */ 307 if (mctrl & TIOCM_RTS)
310 if (port->mapbase == AT91RM9200_BASE_US0) { 308 gpio_set_value(atmel_port->rts_gpio, 0);
311 if (mctrl & TIOCM_RTS) 309 else
312 at91_set_gpio_value(AT91_PIN_PA21, 0); 310 gpio_set_value(atmel_port->rts_gpio, 1);
313 else
314 at91_set_gpio_value(AT91_PIN_PA21, 1);
315 }
316 } 311 }
317#endif
318 312
319 if (mctrl & TIOCM_RTS) 313 if (mctrl & TIOCM_RTS)
320 control |= ATMEL_US_RTSEN; 314 control |= ATMEL_US_RTSEN;
@@ -2389,6 +2383,25 @@ static int atmel_serial_probe(struct platform_device *pdev)
2389 port = &atmel_ports[ret]; 2383 port = &atmel_ports[ret];
2390 port->backup_imr = 0; 2384 port->backup_imr = 0;
2391 port->uart.line = ret; 2385 port->uart.line = ret;
2386 port->rts_gpio = -EINVAL; /* Invalid, zero could be valid */
2387 if (pdata)
2388 port->rts_gpio = pdata->rts_gpio;
2389 else if (np)
2390 port->rts_gpio = of_get_named_gpio(np, "rts-gpios", 0);
2391
2392 if (gpio_is_valid(port->rts_gpio)) {
2393 ret = devm_gpio_request(&pdev->dev, port->rts_gpio, "RTS");
2394 if (ret) {
2395 dev_err(&pdev->dev, "error requesting RTS GPIO\n");
2396 goto err;
2397 }
2398 /* Default to 1 as RTS is active low */
2399 ret = gpio_direction_output(port->rts_gpio, 1);
2400 if (ret) {
2401 dev_err(&pdev->dev, "error setting up RTS GPIO\n");
2402 goto err;
2403 }
2404 }
2392 2405
2393 ret = atmel_init_port(port, pdev); 2406 ret = atmel_init_port(port, pdev);
2394 if (ret) 2407 if (ret)
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index fa511ebab67c..77f035158d6c 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -738,9 +738,6 @@ static int serial_omap_startup(struct uart_port *port)
738 return retval; 738 return retval;
739 } 739 }
740 disable_irq(up->wakeirq); 740 disable_irq(up->wakeirq);
741 } else {
742 dev_info(up->port.dev, "no wakeirq for uart%d\n",
743 up->port.line);
744 } 741 }
745 742
746 dev_dbg(up->port.dev, "serial_omap_startup+%d\n", up->port.line); 743 dev_dbg(up->port.dev, "serial_omap_startup+%d\n", up->port.line);
@@ -1604,8 +1601,11 @@ static int serial_omap_probe_rs485(struct uart_omap_port *up,
1604 flags & SER_RS485_RTS_AFTER_SEND); 1601 flags & SER_RS485_RTS_AFTER_SEND);
1605 if (ret < 0) 1602 if (ret < 0)
1606 return ret; 1603 return ret;
1607 } else 1604 } else if (up->rts_gpio == -EPROBE_DEFER) {
1605 return -EPROBE_DEFER;
1606 } else {
1608 up->rts_gpio = -EINVAL; 1607 up->rts_gpio = -EINVAL;
1608 }
1609 1609
1610 if (of_property_read_u32_array(np, "rs485-rts-delay", 1610 if (of_property_read_u32_array(np, "rs485-rts-delay",
1611 rs485_delay, 2) == 0) { 1611 rs485_delay, 2) == 0) {
@@ -1687,6 +1687,9 @@ static int serial_omap_probe(struct platform_device *pdev)
1687 up->port.iotype = UPIO_MEM; 1687 up->port.iotype = UPIO_MEM;
1688 up->port.irq = uartirq; 1688 up->port.irq = uartirq;
1689 up->wakeirq = wakeirq; 1689 up->wakeirq = wakeirq;
1690 if (!up->wakeirq)
1691 dev_info(up->port.dev, "no wakeirq for uart%d\n",
1692 up->port.line);
1690 1693
1691 up->port.regshift = 2; 1694 up->port.regshift = 2;
1692 up->port.fifosize = 64; 1695 up->port.fifosize = 64;
diff --git a/drivers/tty/serial/sirfsoc_uart.c b/drivers/tty/serial/sirfsoc_uart.c
index 49a2ffd101a7..b7bfe24d4ebc 100644
--- a/drivers/tty/serial/sirfsoc_uart.c
+++ b/drivers/tty/serial/sirfsoc_uart.c
@@ -542,8 +542,10 @@ static void sirfsoc_rx_tmo_process_tl(unsigned long param)
542 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, 542 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl,
543 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | 543 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) |
544 SIRFUART_IO_MODE); 544 SIRFUART_IO_MODE);
545 sirfsoc_uart_pio_rx_chars(port, 4 - sirfport->rx_io_count);
546 spin_unlock_irqrestore(&sirfport->rx_lock, flags); 545 spin_unlock_irqrestore(&sirfport->rx_lock, flags);
546 spin_lock(&port->lock);
547 sirfsoc_uart_pio_rx_chars(port, 4 - sirfport->rx_io_count);
548 spin_unlock(&port->lock);
547 if (sirfport->rx_io_count == 4) { 549 if (sirfport->rx_io_count == 4) {
548 spin_lock_irqsave(&sirfport->rx_lock, flags); 550 spin_lock_irqsave(&sirfport->rx_lock, flags);
549 sirfport->rx_io_count = 0; 551 sirfport->rx_io_count = 0;
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index c74a00ad7add..bd2715a9d8e5 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -1267,16 +1267,17 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
1267 * @p: output buffer of at least 7 bytes 1267 * @p: output buffer of at least 7 bytes
1268 * 1268 *
1269 * Generate a name from a driver reference and write it to the output 1269 * Generate a name from a driver reference and write it to the output
1270 * buffer. 1270 * buffer. Return the number of bytes written.
1271 * 1271 *
1272 * Locking: None 1272 * Locking: None
1273 */ 1273 */
1274static void tty_line_name(struct tty_driver *driver, int index, char *p) 1274static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1275{ 1275{
1276 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE) 1276 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1277 strcpy(p, driver->name); 1277 return sprintf(p, "%s", driver->name);
1278 else 1278 else
1279 sprintf(p, "%s%d", driver->name, index + driver->name_base); 1279 return sprintf(p, "%s%d", driver->name,
1280 index + driver->name_base);
1280} 1281}
1281 1282
1282/** 1283/**
@@ -3545,9 +3546,19 @@ static ssize_t show_cons_active(struct device *dev,
3545 if (i >= ARRAY_SIZE(cs)) 3546 if (i >= ARRAY_SIZE(cs))
3546 break; 3547 break;
3547 } 3548 }
3548 while (i--) 3549 while (i--) {
3549 count += sprintf(buf + count, "%s%d%c", 3550 struct tty_driver *driver;
3550 cs[i]->name, cs[i]->index, i ? ' ':'\n'); 3551 const char *name = cs[i]->name;
3552 int index = cs[i]->index;
3553
3554 driver = cs[i]->device(cs[i], &index);
3555 if (driver) {
3556 count += tty_line_name(driver, index, buf + count);
3557 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3558 } else
3559 count += sprintf(buf + count, "%s%d%c",
3560 name, index, i ? ' ':'\n');
3561 }
3551 console_unlock(); 3562 console_unlock();
3552 3563
3553 return count; 3564 return count;
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 61b1137d7e56..23b5d32954bf 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -1164,6 +1164,8 @@ static void csi_J(struct vc_data *vc, int vpar)
1164 scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char, 1164 scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char,
1165 vc->vc_screenbuf_size >> 1); 1165 vc->vc_screenbuf_size >> 1);
1166 set_origin(vc); 1166 set_origin(vc);
1167 if (CON_IS_VISIBLE(vc))
1168 update_screen(vc);
1167 /* fall through */ 1169 /* fall through */
1168 case 2: /* erase whole display */ 1170 case 2: /* erase whole display */
1169 count = vc->vc_cols * vc->vc_rows; 1171 count = vc->vc_cols * vc->vc_rows;
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 5d01558cef66..ab90a0156828 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -63,8 +63,10 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
63 dynid->id.idProduct = idProduct; 63 dynid->id.idProduct = idProduct;
64 dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE; 64 dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE;
65 if (fields > 2 && bInterfaceClass) { 65 if (fields > 2 && bInterfaceClass) {
66 if (bInterfaceClass > 255) 66 if (bInterfaceClass > 255) {
67 return -EINVAL; 67 retval = -EINVAL;
68 goto fail;
69 }
68 70
69 dynid->id.bInterfaceClass = (u8)bInterfaceClass; 71 dynid->id.bInterfaceClass = (u8)bInterfaceClass;
70 dynid->id.match_flags |= USB_DEVICE_ID_MATCH_INT_CLASS; 72 dynid->id.match_flags |= USB_DEVICE_ID_MATCH_INT_CLASS;
@@ -73,17 +75,21 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
73 if (fields > 4) { 75 if (fields > 4) {
74 const struct usb_device_id *id = id_table; 76 const struct usb_device_id *id = id_table;
75 77
76 if (!id) 78 if (!id) {
77 return -ENODEV; 79 retval = -ENODEV;
80 goto fail;
81 }
78 82
79 for (; id->match_flags; id++) 83 for (; id->match_flags; id++)
80 if (id->idVendor == refVendor && id->idProduct == refProduct) 84 if (id->idVendor == refVendor && id->idProduct == refProduct)
81 break; 85 break;
82 86
83 if (id->match_flags) 87 if (id->match_flags) {
84 dynid->id.driver_info = id->driver_info; 88 dynid->id.driver_info = id->driver_info;
85 else 89 } else {
86 return -ENODEV; 90 retval = -ENODEV;
91 goto fail;
92 }
87 } 93 }
88 94
89 spin_lock(&dynids->lock); 95 spin_lock(&dynids->lock);
@@ -95,6 +101,10 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
95 if (retval) 101 if (retval)
96 return retval; 102 return retval;
97 return count; 103 return count;
104
105fail:
106 kfree(dynid);
107 return retval;
98} 108}
99EXPORT_SYMBOL_GPL(usb_store_new_id); 109EXPORT_SYMBOL_GPL(usb_store_new_id);
100 110
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 199aaea6bfe0..2518c3250750 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1032,7 +1032,6 @@ static int register_root_hub(struct usb_hcd *hcd)
1032 dev_name(&usb_dev->dev), retval); 1032 dev_name(&usb_dev->dev), retval);
1033 return retval; 1033 return retval;
1034 } 1034 }
1035 usb_dev->lpm_capable = usb_device_supports_lpm(usb_dev);
1036 } 1035 }
1037 1036
1038 retval = usb_new_device (usb_dev); 1037 retval = usb_new_device (usb_dev);
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index babba885978d..64ea21971be2 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -128,7 +128,7 @@ struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
128 return usb_get_intfdata(hdev->actconfig->interface[0]); 128 return usb_get_intfdata(hdev->actconfig->interface[0]);
129} 129}
130 130
131int usb_device_supports_lpm(struct usb_device *udev) 131static int usb_device_supports_lpm(struct usb_device *udev)
132{ 132{
133 /* USB 2.1 (and greater) devices indicate LPM support through 133 /* USB 2.1 (and greater) devices indicate LPM support through
134 * their USB 2.0 Extended Capabilities BOS descriptor. 134 * their USB 2.0 Extended Capabilities BOS descriptor.
@@ -149,11 +149,6 @@ int usb_device_supports_lpm(struct usb_device *udev)
149 "Power management will be impacted.\n"); 149 "Power management will be impacted.\n");
150 return 0; 150 return 0;
151 } 151 }
152
153 /* udev is root hub */
154 if (!udev->parent)
155 return 1;
156
157 if (udev->parent->lpm_capable) 152 if (udev->parent->lpm_capable)
158 return 1; 153 return 1;
159 154
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
index c49383669cd8..823857767a16 100644
--- a/drivers/usb/core/usb.h
+++ b/drivers/usb/core/usb.h
@@ -35,7 +35,6 @@ extern int usb_get_device_descriptor(struct usb_device *dev,
35 unsigned int size); 35 unsigned int size);
36extern int usb_get_bos_descriptor(struct usb_device *dev); 36extern int usb_get_bos_descriptor(struct usb_device *dev);
37extern void usb_release_bos_descriptor(struct usb_device *dev); 37extern void usb_release_bos_descriptor(struct usb_device *dev);
38extern int usb_device_supports_lpm(struct usb_device *udev);
39extern char *usb_cache_string(struct usb_device *udev, int index); 38extern char *usb_cache_string(struct usb_device *udev, int index);
40extern int usb_set_configuration(struct usb_device *dev, int configuration); 39extern int usb_set_configuration(struct usb_device *dev, int configuration);
41extern int usb_choose_configuration(struct usb_device *udev); 40extern int usb_choose_configuration(struct usb_device *udev);
diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c
index 8565d87f94b4..1d129884cc39 100644
--- a/drivers/usb/dwc2/core.c
+++ b/drivers/usb/dwc2/core.c
@@ -216,7 +216,7 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
216 int retval = 0; 216 int retval = 0;
217 217
218 if (!select_phy) 218 if (!select_phy)
219 return -ENODEV; 219 return 0;
220 220
221 usbcfg = readl(hsotg->regs + GUSBCFG); 221 usbcfg = readl(hsotg->regs + GUSBCFG);
222 222
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index f59484d43b35..4d918ed8d343 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -2565,25 +2565,14 @@ static void _dwc2_hcd_endpoint_reset(struct usb_hcd *hcd,
2565 struct usb_host_endpoint *ep) 2565 struct usb_host_endpoint *ep)
2566{ 2566{
2567 struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); 2567 struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2568 int is_control = usb_endpoint_xfer_control(&ep->desc);
2569 int is_out = usb_endpoint_dir_out(&ep->desc);
2570 int epnum = usb_endpoint_num(&ep->desc);
2571 struct usb_device *udev;
2572 unsigned long flags; 2568 unsigned long flags;
2573 2569
2574 dev_dbg(hsotg->dev, 2570 dev_dbg(hsotg->dev,
2575 "DWC OTG HCD EP RESET: bEndpointAddress=0x%02x\n", 2571 "DWC OTG HCD EP RESET: bEndpointAddress=0x%02x\n",
2576 ep->desc.bEndpointAddress); 2572 ep->desc.bEndpointAddress);
2577 2573
2578 udev = to_usb_device(hsotg->dev);
2579
2580 spin_lock_irqsave(&hsotg->lock, flags); 2574 spin_lock_irqsave(&hsotg->lock, flags);
2581
2582 usb_settoggle(udev, epnum, is_out, 0);
2583 if (is_control)
2584 usb_settoggle(udev, epnum, !is_out, 0);
2585 dwc2_hcd_endpoint_reset(hsotg, ep); 2575 dwc2_hcd_endpoint_reset(hsotg, ep);
2586
2587 spin_unlock_irqrestore(&hsotg->lock, flags); 2576 spin_unlock_irqrestore(&hsotg->lock, flags);
2588} 2577}
2589 2578
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
index d01d0d3f2cf0..eaba547ce26b 100644
--- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c
@@ -124,6 +124,9 @@ static int dwc2_driver_probe(struct platform_device *dev)
124 int retval; 124 int retval;
125 int irq; 125 int irq;
126 126
127 if (usb_disabled())
128 return -ENODEV;
129
127 match = of_match_device(dwc2_of_match_table, &dev->dev); 130 match = of_match_device(dwc2_of_match_table, &dev->dev);
128 if (match && match->data) { 131 if (match && match->data) {
129 params = match->data; 132 params = match->data;
diff --git a/drivers/usb/host/xhci-dbg.c b/drivers/usb/host/xhci-dbg.c
index b016d38199f2..eb009a457fb5 100644
--- a/drivers/usb/host/xhci-dbg.c
+++ b/drivers/usb/host/xhci-dbg.c
@@ -203,12 +203,12 @@ void xhci_print_ir_set(struct xhci_hcd *xhci, int set_num)
203 addr, (unsigned int)temp); 203 addr, (unsigned int)temp);
204 204
205 addr = &ir_set->erst_base; 205 addr = &ir_set->erst_base;
206 temp_64 = readq(addr); 206 temp_64 = xhci_read_64(xhci, addr);
207 xhci_dbg(xhci, " %p: ir_set.erst_base = @%08llx\n", 207 xhci_dbg(xhci, " %p: ir_set.erst_base = @%08llx\n",
208 addr, temp_64); 208 addr, temp_64);
209 209
210 addr = &ir_set->erst_dequeue; 210 addr = &ir_set->erst_dequeue;
211 temp_64 = readq(addr); 211 temp_64 = xhci_read_64(xhci, addr);
212 xhci_dbg(xhci, " %p: ir_set.erst_dequeue = @%08llx\n", 212 xhci_dbg(xhci, " %p: ir_set.erst_dequeue = @%08llx\n",
213 addr, temp_64); 213 addr, temp_64);
214} 214}
@@ -412,7 +412,7 @@ void xhci_dbg_cmd_ptrs(struct xhci_hcd *xhci)
412{ 412{
413 u64 val; 413 u64 val;
414 414
415 val = readq(&xhci->op_regs->cmd_ring); 415 val = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
416 xhci_dbg(xhci, "// xHC command ring deq ptr low bits + flags = @%08x\n", 416 xhci_dbg(xhci, "// xHC command ring deq ptr low bits + flags = @%08x\n",
417 lower_32_bits(val)); 417 lower_32_bits(val));
418 xhci_dbg(xhci, "// xHC command ring deq ptr high bits = @%08x\n", 418 xhci_dbg(xhci, "// xHC command ring deq ptr high bits = @%08x\n",
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 873c272b3ef5..bce4391a0e7d 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -1958,7 +1958,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
1958 xhci_warn(xhci, "WARN something wrong with SW event ring " 1958 xhci_warn(xhci, "WARN something wrong with SW event ring "
1959 "dequeue ptr.\n"); 1959 "dequeue ptr.\n");
1960 /* Update HC event ring dequeue pointer */ 1960 /* Update HC event ring dequeue pointer */
1961 temp = readq(&xhci->ir_set->erst_dequeue); 1961 temp = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
1962 temp &= ERST_PTR_MASK; 1962 temp &= ERST_PTR_MASK;
1963 /* Don't clear the EHB bit (which is RW1C) because 1963 /* Don't clear the EHB bit (which is RW1C) because
1964 * there might be more events to service. 1964 * there might be more events to service.
@@ -1967,7 +1967,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
1967 xhci_dbg_trace(xhci, trace_xhci_dbg_init, 1967 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
1968 "// Write event ring dequeue pointer, " 1968 "// Write event ring dequeue pointer, "
1969 "preserving EHB bit"); 1969 "preserving EHB bit");
1970 writeq(((u64) deq & (u64) ~ERST_PTR_MASK) | temp, 1970 xhci_write_64(xhci, ((u64) deq & (u64) ~ERST_PTR_MASK) | temp,
1971 &xhci->ir_set->erst_dequeue); 1971 &xhci->ir_set->erst_dequeue);
1972} 1972}
1973 1973
@@ -2269,7 +2269,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2269 xhci_dbg_trace(xhci, trace_xhci_dbg_init, 2269 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
2270 "// Device context base array address = 0x%llx (DMA), %p (virt)", 2270 "// Device context base array address = 0x%llx (DMA), %p (virt)",
2271 (unsigned long long)xhci->dcbaa->dma, xhci->dcbaa); 2271 (unsigned long long)xhci->dcbaa->dma, xhci->dcbaa);
2272 writeq(dma, &xhci->op_regs->dcbaa_ptr); 2272 xhci_write_64(xhci, dma, &xhci->op_regs->dcbaa_ptr);
2273 2273
2274 /* 2274 /*
2275 * Initialize the ring segment pool. The ring must be a contiguous 2275 * Initialize the ring segment pool. The ring must be a contiguous
@@ -2312,13 +2312,13 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2312 (unsigned long long)xhci->cmd_ring->first_seg->dma); 2312 (unsigned long long)xhci->cmd_ring->first_seg->dma);
2313 2313
2314 /* Set the address in the Command Ring Control register */ 2314 /* Set the address in the Command Ring Control register */
2315 val_64 = readq(&xhci->op_regs->cmd_ring); 2315 val_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
2316 val_64 = (val_64 & (u64) CMD_RING_RSVD_BITS) | 2316 val_64 = (val_64 & (u64) CMD_RING_RSVD_BITS) |
2317 (xhci->cmd_ring->first_seg->dma & (u64) ~CMD_RING_RSVD_BITS) | 2317 (xhci->cmd_ring->first_seg->dma & (u64) ~CMD_RING_RSVD_BITS) |
2318 xhci->cmd_ring->cycle_state; 2318 xhci->cmd_ring->cycle_state;
2319 xhci_dbg_trace(xhci, trace_xhci_dbg_init, 2319 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
2320 "// Setting command ring address to 0x%x", val); 2320 "// Setting command ring address to 0x%x", val);
2321 writeq(val_64, &xhci->op_regs->cmd_ring); 2321 xhci_write_64(xhci, val_64, &xhci->op_regs->cmd_ring);
2322 xhci_dbg_cmd_ptrs(xhci); 2322 xhci_dbg_cmd_ptrs(xhci);
2323 2323
2324 xhci->lpm_command = xhci_alloc_command(xhci, true, true, flags); 2324 xhci->lpm_command = xhci_alloc_command(xhci, true, true, flags);
@@ -2396,10 +2396,10 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2396 xhci_dbg_trace(xhci, trace_xhci_dbg_init, 2396 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
2397 "// Set ERST base address for ir_set 0 = 0x%llx", 2397 "// Set ERST base address for ir_set 0 = 0x%llx",
2398 (unsigned long long)xhci->erst.erst_dma_addr); 2398 (unsigned long long)xhci->erst.erst_dma_addr);
2399 val_64 = readq(&xhci->ir_set->erst_base); 2399 val_64 = xhci_read_64(xhci, &xhci->ir_set->erst_base);
2400 val_64 &= ERST_PTR_MASK; 2400 val_64 &= ERST_PTR_MASK;
2401 val_64 |= (xhci->erst.erst_dma_addr & (u64) ~ERST_PTR_MASK); 2401 val_64 |= (xhci->erst.erst_dma_addr & (u64) ~ERST_PTR_MASK);
2402 writeq(val_64, &xhci->ir_set->erst_base); 2402 xhci_write_64(xhci, val_64, &xhci->ir_set->erst_base);
2403 2403
2404 /* Set the event ring dequeue address */ 2404 /* Set the event ring dequeue address */
2405 xhci_set_hc_event_deq(xhci); 2405 xhci_set_hc_event_deq(xhci);
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 3c898c12a06b..04f986d9234f 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -142,6 +142,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
142 "QUIRK: Resetting on resume"); 142 "QUIRK: Resetting on resume");
143 xhci->quirks |= XHCI_TRUST_TX_LENGTH; 143 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
144 } 144 }
145 if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
146 pdev->device == 0x0015 &&
147 pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG &&
148 pdev->subsystem_device == 0xc0cd)
149 xhci->quirks |= XHCI_RESET_ON_RESUME;
145 if (pdev->vendor == PCI_VENDOR_ID_VIA) 150 if (pdev->vendor == PCI_VENDOR_ID_VIA)
146 xhci->quirks |= XHCI_RESET_ON_RESUME; 151 xhci->quirks |= XHCI_RESET_ON_RESUME;
147} 152}
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index a0b248c34526..0ed64eb68e48 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -307,13 +307,14 @@ static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
307 return 0; 307 return 0;
308 } 308 }
309 309
310 temp_64 = readq(&xhci->op_regs->cmd_ring); 310 temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
311 if (!(temp_64 & CMD_RING_RUNNING)) { 311 if (!(temp_64 & CMD_RING_RUNNING)) {
312 xhci_dbg(xhci, "Command ring had been stopped\n"); 312 xhci_dbg(xhci, "Command ring had been stopped\n");
313 return 0; 313 return 0;
314 } 314 }
315 xhci->cmd_ring_state = CMD_RING_STATE_ABORTED; 315 xhci->cmd_ring_state = CMD_RING_STATE_ABORTED;
316 writeq(temp_64 | CMD_RING_ABORT, &xhci->op_regs->cmd_ring); 316 xhci_write_64(xhci, temp_64 | CMD_RING_ABORT,
317 &xhci->op_regs->cmd_ring);
317 318
318 /* Section 4.6.1.2 of xHCI 1.0 spec says software should 319 /* Section 4.6.1.2 of xHCI 1.0 spec says software should
319 * time the completion od all xHCI commands, including 320 * time the completion od all xHCI commands, including
@@ -2864,8 +2865,9 @@ hw_died:
2864 /* Clear the event handler busy flag (RW1C); 2865 /* Clear the event handler busy flag (RW1C);
2865 * the event ring should be empty. 2866 * the event ring should be empty.
2866 */ 2867 */
2867 temp_64 = readq(&xhci->ir_set->erst_dequeue); 2868 temp_64 = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
2868 writeq(temp_64 | ERST_EHB, &xhci->ir_set->erst_dequeue); 2869 xhci_write_64(xhci, temp_64 | ERST_EHB,
2870 &xhci->ir_set->erst_dequeue);
2869 spin_unlock(&xhci->lock); 2871 spin_unlock(&xhci->lock);
2870 2872
2871 return IRQ_HANDLED; 2873 return IRQ_HANDLED;
@@ -2877,7 +2879,7 @@ hw_died:
2877 */ 2879 */
2878 while (xhci_handle_event(xhci) > 0) {} 2880 while (xhci_handle_event(xhci) > 0) {}
2879 2881
2880 temp_64 = readq(&xhci->ir_set->erst_dequeue); 2882 temp_64 = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
2881 /* If necessary, update the HW's version of the event ring deq ptr. */ 2883 /* If necessary, update the HW's version of the event ring deq ptr. */
2882 if (event_ring_deq != xhci->event_ring->dequeue) { 2884 if (event_ring_deq != xhci->event_ring->dequeue) {
2883 deq = xhci_trb_virt_to_dma(xhci->event_ring->deq_seg, 2885 deq = xhci_trb_virt_to_dma(xhci->event_ring->deq_seg,
@@ -2892,7 +2894,7 @@ hw_died:
2892 2894
2893 /* Clear the event handler busy flag (RW1C); event ring is empty. */ 2895 /* Clear the event handler busy flag (RW1C); event ring is empty. */
2894 temp_64 |= ERST_EHB; 2896 temp_64 |= ERST_EHB;
2895 writeq(temp_64, &xhci->ir_set->erst_dequeue); 2897 xhci_write_64(xhci, temp_64, &xhci->ir_set->erst_dequeue);
2896 2898
2897 spin_unlock(&xhci->lock); 2899 spin_unlock(&xhci->lock);
2898 2900
@@ -2965,58 +2967,8 @@ static int prepare_ring(struct xhci_hcd *xhci, struct xhci_ring *ep_ring,
2965 } 2967 }
2966 2968
2967 while (1) { 2969 while (1) {
2968 if (room_on_ring(xhci, ep_ring, num_trbs)) { 2970 if (room_on_ring(xhci, ep_ring, num_trbs))
2969 union xhci_trb *trb = ep_ring->enqueue; 2971 break;
2970 unsigned int usable = ep_ring->enq_seg->trbs +
2971 TRBS_PER_SEGMENT - 1 - trb;
2972 u32 nop_cmd;
2973
2974 /*
2975 * Section 4.11.7.1 TD Fragments states that a link
2976 * TRB must only occur at the boundary between
2977 * data bursts (eg 512 bytes for 480M).
2978 * While it is possible to split a large fragment
2979 * we don't know the size yet.
2980 * Simplest solution is to fill the trb before the
2981 * LINK with nop commands.
2982 */
2983 if (num_trbs == 1 || num_trbs <= usable || usable == 0)
2984 break;
2985
2986 if (ep_ring->type != TYPE_BULK)
2987 /*
2988 * While isoc transfers might have a buffer that
2989 * crosses a 64k boundary it is unlikely.
2990 * Since we can't add NOPs without generating
2991 * gaps in the traffic just hope it never
2992 * happens at the end of the ring.
2993 * This could be fixed by writing a LINK TRB
2994 * instead of the first NOP - however the
2995 * TRB_TYPE_LINK_LE32() calls would all need
2996 * changing to check the ring length.
2997 */
2998 break;
2999
3000 if (num_trbs >= TRBS_PER_SEGMENT) {
3001 xhci_err(xhci, "Too many fragments %d, max %d\n",
3002 num_trbs, TRBS_PER_SEGMENT - 1);
3003 return -EINVAL;
3004 }
3005
3006 nop_cmd = cpu_to_le32(TRB_TYPE(TRB_TR_NOOP) |
3007 ep_ring->cycle_state);
3008 ep_ring->num_trbs_free -= usable;
3009 do {
3010 trb->generic.field[0] = 0;
3011 trb->generic.field[1] = 0;
3012 trb->generic.field[2] = 0;
3013 trb->generic.field[3] = nop_cmd;
3014 trb++;
3015 } while (--usable);
3016 ep_ring->enqueue = trb;
3017 if (room_on_ring(xhci, ep_ring, num_trbs))
3018 break;
3019 }
3020 2972
3021 if (ep_ring == xhci->cmd_ring) { 2973 if (ep_ring == xhci->cmd_ring) {
3022 xhci_err(xhci, "Do not support expand command ring\n"); 2974 xhci_err(xhci, "Do not support expand command ring\n");
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index ad364394885a..6fe577d46fa2 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -611,7 +611,7 @@ int xhci_run(struct usb_hcd *hcd)
611 xhci_dbg(xhci, "Event ring:\n"); 611 xhci_dbg(xhci, "Event ring:\n");
612 xhci_debug_ring(xhci, xhci->event_ring); 612 xhci_debug_ring(xhci, xhci->event_ring);
613 xhci_dbg_ring_ptrs(xhci, xhci->event_ring); 613 xhci_dbg_ring_ptrs(xhci, xhci->event_ring);
614 temp_64 = readq(&xhci->ir_set->erst_dequeue); 614 temp_64 = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
615 temp_64 &= ~ERST_PTR_MASK; 615 temp_64 &= ~ERST_PTR_MASK;
616 xhci_dbg_trace(xhci, trace_xhci_dbg_init, 616 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
617 "ERST deq = 64'h%0lx", (long unsigned int) temp_64); 617 "ERST deq = 64'h%0lx", (long unsigned int) temp_64);
@@ -756,11 +756,11 @@ static void xhci_save_registers(struct xhci_hcd *xhci)
756{ 756{
757 xhci->s3.command = readl(&xhci->op_regs->command); 757 xhci->s3.command = readl(&xhci->op_regs->command);
758 xhci->s3.dev_nt = readl(&xhci->op_regs->dev_notification); 758 xhci->s3.dev_nt = readl(&xhci->op_regs->dev_notification);
759 xhci->s3.dcbaa_ptr = readq(&xhci->op_regs->dcbaa_ptr); 759 xhci->s3.dcbaa_ptr = xhci_read_64(xhci, &xhci->op_regs->dcbaa_ptr);
760 xhci->s3.config_reg = readl(&xhci->op_regs->config_reg); 760 xhci->s3.config_reg = readl(&xhci->op_regs->config_reg);
761 xhci->s3.erst_size = readl(&xhci->ir_set->erst_size); 761 xhci->s3.erst_size = readl(&xhci->ir_set->erst_size);
762 xhci->s3.erst_base = readq(&xhci->ir_set->erst_base); 762 xhci->s3.erst_base = xhci_read_64(xhci, &xhci->ir_set->erst_base);
763 xhci->s3.erst_dequeue = readq(&xhci->ir_set->erst_dequeue); 763 xhci->s3.erst_dequeue = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
764 xhci->s3.irq_pending = readl(&xhci->ir_set->irq_pending); 764 xhci->s3.irq_pending = readl(&xhci->ir_set->irq_pending);
765 xhci->s3.irq_control = readl(&xhci->ir_set->irq_control); 765 xhci->s3.irq_control = readl(&xhci->ir_set->irq_control);
766} 766}
@@ -769,11 +769,11 @@ static void xhci_restore_registers(struct xhci_hcd *xhci)
769{ 769{
770 writel(xhci->s3.command, &xhci->op_regs->command); 770 writel(xhci->s3.command, &xhci->op_regs->command);
771 writel(xhci->s3.dev_nt, &xhci->op_regs->dev_notification); 771 writel(xhci->s3.dev_nt, &xhci->op_regs->dev_notification);
772 writeq(xhci->s3.dcbaa_ptr, &xhci->op_regs->dcbaa_ptr); 772 xhci_write_64(xhci, xhci->s3.dcbaa_ptr, &xhci->op_regs->dcbaa_ptr);
773 writel(xhci->s3.config_reg, &xhci->op_regs->config_reg); 773 writel(xhci->s3.config_reg, &xhci->op_regs->config_reg);
774 writel(xhci->s3.erst_size, &xhci->ir_set->erst_size); 774 writel(xhci->s3.erst_size, &xhci->ir_set->erst_size);
775 writeq(xhci->s3.erst_base, &xhci->ir_set->erst_base); 775 xhci_write_64(xhci, xhci->s3.erst_base, &xhci->ir_set->erst_base);
776 writeq(xhci->s3.erst_dequeue, &xhci->ir_set->erst_dequeue); 776 xhci_write_64(xhci, xhci->s3.erst_dequeue, &xhci->ir_set->erst_dequeue);
777 writel(xhci->s3.irq_pending, &xhci->ir_set->irq_pending); 777 writel(xhci->s3.irq_pending, &xhci->ir_set->irq_pending);
778 writel(xhci->s3.irq_control, &xhci->ir_set->irq_control); 778 writel(xhci->s3.irq_control, &xhci->ir_set->irq_control);
779} 779}
@@ -783,7 +783,7 @@ static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci)
783 u64 val_64; 783 u64 val_64;
784 784
785 /* step 2: initialize command ring buffer */ 785 /* step 2: initialize command ring buffer */
786 val_64 = readq(&xhci->op_regs->cmd_ring); 786 val_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
787 val_64 = (val_64 & (u64) CMD_RING_RSVD_BITS) | 787 val_64 = (val_64 & (u64) CMD_RING_RSVD_BITS) |
788 (xhci_trb_virt_to_dma(xhci->cmd_ring->deq_seg, 788 (xhci_trb_virt_to_dma(xhci->cmd_ring->deq_seg,
789 xhci->cmd_ring->dequeue) & 789 xhci->cmd_ring->dequeue) &
@@ -792,7 +792,7 @@ static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci)
792 xhci_dbg_trace(xhci, trace_xhci_dbg_init, 792 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
793 "// Setting command ring address to 0x%llx", 793 "// Setting command ring address to 0x%llx",
794 (long unsigned long) val_64); 794 (long unsigned long) val_64);
795 writeq(val_64, &xhci->op_regs->cmd_ring); 795 xhci_write_64(xhci, val_64, &xhci->op_regs->cmd_ring);
796} 796}
797 797
798/* 798/*
@@ -3842,7 +3842,7 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev,
3842 if (ret) { 3842 if (ret) {
3843 return ret; 3843 return ret;
3844 } 3844 }
3845 temp_64 = readq(&xhci->op_regs->dcbaa_ptr); 3845 temp_64 = xhci_read_64(xhci, &xhci->op_regs->dcbaa_ptr);
3846 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 3846 xhci_dbg_trace(xhci, trace_xhci_dbg_address,
3847 "Op regs DCBAA ptr = %#016llx", temp_64); 3847 "Op regs DCBAA ptr = %#016llx", temp_64);
3848 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 3848 xhci_dbg_trace(xhci, trace_xhci_dbg_address,
@@ -4730,11 +4730,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
4730 struct device *dev = hcd->self.controller; 4730 struct device *dev = hcd->self.controller;
4731 int retval; 4731 int retval;
4732 4732
4733 /* Limit the block layer scatter-gather lists to half a segment. */ 4733 /* Accept arbitrarily long scatter-gather lists */
4734 hcd->self.sg_tablesize = TRBS_PER_SEGMENT / 2; 4734 hcd->self.sg_tablesize = ~0;
4735
4736 /* support to build packet from discontinuous buffers */
4737 hcd->self.no_sg_constraint = 1;
4738 4735
4739 /* XHCI controllers don't stop the ep queue on short packets :| */ 4736 /* XHCI controllers don't stop the ep queue on short packets :| */
4740 hcd->self.no_stop_on_short = 1; 4737 hcd->self.no_stop_on_short = 1;
@@ -4760,6 +4757,14 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
4760 /* xHCI private pointer was set in xhci_pci_probe for the second 4757 /* xHCI private pointer was set in xhci_pci_probe for the second
4761 * registered roothub. 4758 * registered roothub.
4762 */ 4759 */
4760 xhci = hcd_to_xhci(hcd);
4761 /*
4762 * Support arbitrarily aligned sg-list entries on hosts without
4763 * TD fragment rules (which are currently unsupported).
4764 */
4765 if (xhci->hci_version < 0x100)
4766 hcd->self.no_sg_constraint = 1;
4767
4763 return 0; 4768 return 0;
4764 } 4769 }
4765 4770
@@ -4788,6 +4793,9 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
4788 if (xhci->hci_version > 0x96) 4793 if (xhci->hci_version > 0x96)
4789 xhci->quirks |= XHCI_SPURIOUS_SUCCESS; 4794 xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
4790 4795
4796 if (xhci->hci_version < 0x100)
4797 hcd->self.no_sg_constraint = 1;
4798
4791 /* Make sure the HC is halted. */ 4799 /* Make sure the HC is halted. */
4792 retval = xhci_halt(xhci); 4800 retval = xhci_halt(xhci);
4793 if (retval) 4801 if (retval)
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index f8416639bf31..58ed9d088e63 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -28,17 +28,6 @@
28#include <linux/kernel.h> 28#include <linux/kernel.h>
29#include <linux/usb/hcd.h> 29#include <linux/usb/hcd.h>
30 30
31/*
32 * Registers should always be accessed with double word or quad word accesses.
33 *
34 * Some xHCI implementations may support 64-bit address pointers. Registers
35 * with 64-bit address pointers should be written to with dword accesses by
36 * writing the low dword first (ptr[0]), then the high dword (ptr[1]) second.
37 * xHCI implementations that do not support 64-bit address pointers will ignore
38 * the high dword, and write order is irrelevant.
39 */
40#include <asm-generic/io-64-nonatomic-lo-hi.h>
41
42/* Code sharing between pci-quirks and xhci hcd */ 31/* Code sharing between pci-quirks and xhci hcd */
43#include "xhci-ext-caps.h" 32#include "xhci-ext-caps.h"
44#include "pci-quirks.h" 33#include "pci-quirks.h"
@@ -1279,7 +1268,7 @@ union xhci_trb {
1279 * since the command ring is 64-byte aligned. 1268 * since the command ring is 64-byte aligned.
1280 * It must also be greater than 16. 1269 * It must also be greater than 16.
1281 */ 1270 */
1282#define TRBS_PER_SEGMENT 256 1271#define TRBS_PER_SEGMENT 64
1283/* Allow two commands + a link TRB, along with any reserved command TRBs */ 1272/* Allow two commands + a link TRB, along with any reserved command TRBs */
1284#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3) 1273#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
1285#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16) 1274#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
@@ -1614,6 +1603,34 @@ static inline struct usb_hcd *xhci_to_hcd(struct xhci_hcd *xhci)
1614#define xhci_warn_ratelimited(xhci, fmt, args...) \ 1603#define xhci_warn_ratelimited(xhci, fmt, args...) \
1615 dev_warn_ratelimited(xhci_to_hcd(xhci)->self.controller , fmt , ## args) 1604 dev_warn_ratelimited(xhci_to_hcd(xhci)->self.controller , fmt , ## args)
1616 1605
1606/*
1607 * Registers should always be accessed with double word or quad word accesses.
1608 *
1609 * Some xHCI implementations may support 64-bit address pointers. Registers
1610 * with 64-bit address pointers should be written to with dword accesses by
1611 * writing the low dword first (ptr[0]), then the high dword (ptr[1]) second.
1612 * xHCI implementations that do not support 64-bit address pointers will ignore
1613 * the high dword, and write order is irrelevant.
1614 */
1615static inline u64 xhci_read_64(const struct xhci_hcd *xhci,
1616 __le64 __iomem *regs)
1617{
1618 __u32 __iomem *ptr = (__u32 __iomem *) regs;
1619 u64 val_lo = readl(ptr);
1620 u64 val_hi = readl(ptr + 1);
1621 return val_lo + (val_hi << 32);
1622}
1623static inline void xhci_write_64(struct xhci_hcd *xhci,
1624 const u64 val, __le64 __iomem *regs)
1625{
1626 __u32 __iomem *ptr = (__u32 __iomem *) regs;
1627 u32 val_lo = lower_32_bits(val);
1628 u32 val_hi = upper_32_bits(val);
1629
1630 writel(val_lo, ptr);
1631 writel(val_hi, ptr + 1);
1632}
1633
1617static inline int xhci_link_trb_quirk(struct xhci_hcd *xhci) 1634static inline int xhci_link_trb_quirk(struct xhci_hcd *xhci)
1618{ 1635{
1619 return xhci->quirks & XHCI_LINK_TRB_QUIRK; 1636 return xhci->quirks & XHCI_LINK_TRB_QUIRK;
diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c
index e6f61e4361df..8afa813d690b 100644
--- a/drivers/usb/phy/phy.c
+++ b/drivers/usb/phy/phy.c
@@ -130,7 +130,7 @@ struct usb_phy *usb_get_phy(enum usb_phy_type type)
130 130
131 phy = __usb_find_phy(&phy_list, type); 131 phy = __usb_find_phy(&phy_list, type);
132 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { 132 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
133 pr_err("unable to find transceiver of type %s\n", 133 pr_debug("PHY: unable to find transceiver of type %s\n",
134 usb_phy_type_string(type)); 134 usb_phy_type_string(type));
135 goto err0; 135 goto err0;
136 } 136 }
@@ -228,7 +228,7 @@ struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index)
228 228
229 phy = __usb_find_phy_dev(dev, &phy_bind_list, index); 229 phy = __usb_find_phy_dev(dev, &phy_bind_list, index);
230 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { 230 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
231 pr_err("unable to find transceiver\n"); 231 dev_dbg(dev, "unable to find transceiver\n");
232 goto err0; 232 goto err0;
233 } 233 }
234 234
@@ -424,10 +424,8 @@ int usb_bind_phy(const char *dev_name, u8 index,
424 unsigned long flags; 424 unsigned long flags;
425 425
426 phy_bind = kzalloc(sizeof(*phy_bind), GFP_KERNEL); 426 phy_bind = kzalloc(sizeof(*phy_bind), GFP_KERNEL);
427 if (!phy_bind) { 427 if (!phy_bind)
428 pr_err("phy_bind(): No memory for phy_bind");
429 return -ENOMEM; 428 return -ENOMEM;
430 }
431 429
432 phy_bind->dev_name = dev_name; 430 phy_bind->dev_name = dev_name;
433 phy_bind->phy_dev_name = phy_dev_name; 431 phy_bind->phy_dev_name = phy_dev_name;
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index ce0d7b0db012..ee1f00f03c43 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -152,6 +152,7 @@ static const struct usb_device_id id_table_combined[] = {
152 { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, 152 { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
153 { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, 153 { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
154 { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) }, 154 { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) },
155 { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) },
155 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, 156 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
156 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, 157 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
157 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, 158 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
@@ -191,6 +192,8 @@ static const struct usb_device_id id_table_combined[] = {
191 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, 192 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
192 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, 193 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
193 { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) }, 194 { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
195 { USB_DEVICE(FTDI_VID, FTDI_TAGSYS_LP101_PID) },
196 { USB_DEVICE(FTDI_VID, FTDI_TAGSYS_P200X_PID) },
194 { USB_DEVICE(FTDI_VID, FTDI_LENZ_LIUSB_PID) }, 197 { USB_DEVICE(FTDI_VID, FTDI_LENZ_LIUSB_PID) },
195 { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) }, 198 { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
196 { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) }, 199 { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
index a7019d1e3058..1e2d369df86e 100644
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -50,6 +50,7 @@
50#define TI_XDS100V2_PID 0xa6d0 50#define TI_XDS100V2_PID 0xa6d0
51 51
52#define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */ 52#define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */
53#define FTDI_EV3CON_PID 0xABB9 /* Mindstorms EV3 Console Adapter */
53 54
54/* US Interface Navigator (http://www.usinterface.com/) */ 55/* US Interface Navigator (http://www.usinterface.com/) */
55#define FTDI_USINT_CAT_PID 0xb810 /* Navigator CAT and 2nd PTT lines */ 56#define FTDI_USINT_CAT_PID 0xb810 /* Navigator CAT and 2nd PTT lines */
@@ -363,6 +364,12 @@
363/* Sprog II (Andrew Crosland's SprogII DCC interface) */ 364/* Sprog II (Andrew Crosland's SprogII DCC interface) */
364#define FTDI_SPROG_II 0xF0C8 365#define FTDI_SPROG_II 0xF0C8
365 366
367/*
368 * Two of the Tagsys RFID Readers
369 */
370#define FTDI_TAGSYS_LP101_PID 0xF0E9 /* Tagsys L-P101 RFID*/
371#define FTDI_TAGSYS_P200X_PID 0xF0EE /* Tagsys Medio P200x RFID*/
372
366/* an infrared receiver for user access control with IR tags */ 373/* an infrared receiver for user access control with IR tags */
367#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */ 374#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */
368 375
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 5c86f57e4afa..216d20affba8 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1362,7 +1362,8 @@ static const struct usb_device_id option_ids[] = {
1362 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1267, 0xff, 0xff, 0xff) }, 1362 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1267, 0xff, 0xff, 0xff) },
1363 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1268, 0xff, 0xff, 0xff) }, 1363 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1268, 0xff, 0xff, 0xff) },
1364 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1269, 0xff, 0xff, 0xff) }, 1364 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1269, 0xff, 0xff, 0xff) },
1365 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1270, 0xff, 0xff, 0xff) }, 1365 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1270, 0xff, 0xff, 0xff),
1366 .driver_info = (kernel_ulong_t)&net_intf5_blacklist },
1366 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1271, 0xff, 0xff, 0xff) }, 1367 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1271, 0xff, 0xff, 0xff) },
1367 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1272, 0xff, 0xff, 0xff) }, 1368 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1272, 0xff, 0xff, 0xff) },
1368 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1273, 0xff, 0xff, 0xff) }, 1369 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1273, 0xff, 0xff, 0xff) },
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index c65437cfd4a2..968a40201e5f 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -139,6 +139,9 @@ static const struct usb_device_id id_table[] = {
139 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */ 139 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */
140 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */ 140 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */
141 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */ 141 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */
142 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)}, /* Netgear AirCard 340U Device Management */
143 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)}, /* Netgear AirCard 340U NMEA */
144 {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)}, /* Netgear AirCard 340U Modem */
142 145
143 { } /* Terminating entry */ 146 { } /* Terminating entry */
144}; 147};
diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c
index f112b079ddfc..fb79775447b0 100644
--- a/drivers/usb/serial/usb-serial-simple.c
+++ b/drivers/usb/serial/usb-serial-simple.c
@@ -71,7 +71,8 @@ DEVICE(hp4x, HP4X_IDS);
71 71
72/* Suunto ANT+ USB Driver */ 72/* Suunto ANT+ USB Driver */
73#define SUUNTO_IDS() \ 73#define SUUNTO_IDS() \
74 { USB_DEVICE(0x0fcf, 0x1008) } 74 { USB_DEVICE(0x0fcf, 0x1008) }, \
75 { USB_DEVICE(0x0fcf, 0x1009) } /* Dynastream ANT USB-m Stick */
75DEVICE(suunto, SUUNTO_IDS); 76DEVICE(suunto, SUUNTO_IDS);
76 77
77/* Siemens USB/MPI adapter */ 78/* Siemens USB/MPI adapter */
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig
index 8470e1b114f2..1dd0604d1911 100644
--- a/drivers/usb/storage/Kconfig
+++ b/drivers/usb/storage/Kconfig
@@ -18,7 +18,9 @@ config USB_STORAGE
18 18
19 This option depends on 'SCSI' support being enabled, but you 19 This option depends on 'SCSI' support being enabled, but you
20 probably also need 'SCSI device support: SCSI disk support' 20 probably also need 'SCSI device support: SCSI disk support'
21 (BLK_DEV_SD) for most USB storage devices. 21 (BLK_DEV_SD) for most USB storage devices. Some devices also
22 will require 'Probe all LUNs on each SCSI device'
23 (SCSI_MULTI_LUN).
22 24
23 To compile this driver as a module, choose M here: the 25 To compile this driver as a module, choose M here: the
24 module will be called usb-storage. 26 module will be called usb-storage.
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 18509e6c21ab..9d38ddc8da49 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -78,6 +78,8 @@ static const char* host_info(struct Scsi_Host *host)
78 78
79static int slave_alloc (struct scsi_device *sdev) 79static int slave_alloc (struct scsi_device *sdev)
80{ 80{
81 struct us_data *us = host_to_us(sdev->host);
82
81 /* 83 /*
82 * Set the INQUIRY transfer length to 36. We don't use any of 84 * Set the INQUIRY transfer length to 36. We don't use any of
83 * the extra data and many devices choke if asked for more or 85 * the extra data and many devices choke if asked for more or
@@ -102,6 +104,10 @@ static int slave_alloc (struct scsi_device *sdev)
102 */ 104 */
103 blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1)); 105 blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1));
104 106
107 /* Tell the SCSI layer if we know there is more than one LUN */
108 if (us->protocol == USB_PR_BULK && us->max_lun > 0)
109 sdev->sdev_bflags |= BLIST_FORCELUN;
110
105 return 0; 111 return 0;
106} 112}
107 113
diff --git a/drivers/usb/storage/unusual_cypress.h b/drivers/usb/storage/unusual_cypress.h
index 65a6a75066a8..82e8ed0324e3 100644
--- a/drivers/usb/storage/unusual_cypress.h
+++ b/drivers/usb/storage/unusual_cypress.h
@@ -31,7 +31,7 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999,
31 "Cypress ISD-300LP", 31 "Cypress ISD-300LP",
32 USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0), 32 USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
33 33
34UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x0219, 34UNUSUAL_DEV( 0x14cd, 0x6116, 0x0160, 0x0160,
35 "Super Top", 35 "Super Top",
36 "USB 2.0 SATA BRIDGE", 36 "USB 2.0 SATA BRIDGE",
37 USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0), 37 USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index ad06255c2ade..adbeb255616a 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -1455,6 +1455,13 @@ UNUSUAL_DEV( 0x0f88, 0x042e, 0x0100, 0x0100,
1455 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 1455 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1456 US_FL_FIX_CAPACITY ), 1456 US_FL_FIX_CAPACITY ),
1457 1457
1458/* Reported by Moritz Moeller-Herrmann <moritz-kernel@moeller-herrmann.de> */
1459UNUSUAL_DEV( 0x0fca, 0x8004, 0x0201, 0x0201,
1460 "Research In Motion",
1461 "BlackBerry Bold 9000",
1462 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1463 US_FL_MAX_SECTORS_64 ),
1464
1458/* Reported by Michael Stattmann <michael@stattmann.com> */ 1465/* Reported by Michael Stattmann <michael@stattmann.com> */
1459UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, 1466UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000,
1460 "Sony Ericsson", 1467 "Sony Ericsson",
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 22262a3a0e2d..dade5b7699bc 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -364,7 +364,7 @@ config FB_SA1100
364 364
365config FB_IMX 365config FB_IMX
366 tristate "Freescale i.MX1/21/25/27 LCD support" 366 tristate "Freescale i.MX1/21/25/27 LCD support"
367 depends on FB && IMX_HAVE_PLATFORM_IMX_FB 367 depends on FB && ARCH_MXC
368 select FB_CFB_FILLRECT 368 select FB_CFB_FILLRECT
369 select FB_CFB_COPYAREA 369 select FB_CFB_COPYAREA
370 select FB_CFB_IMAGEBLIT 370 select FB_CFB_IMAGEBLIT
diff --git a/drivers/video/exynos/Kconfig b/drivers/video/exynos/Kconfig
index 1129d0e9e640..75c8a8e7efc0 100644
--- a/drivers/video/exynos/Kconfig
+++ b/drivers/video/exynos/Kconfig
@@ -22,7 +22,8 @@ config EXYNOS_MIPI_DSI
22 22
23config EXYNOS_LCD_S6E8AX0 23config EXYNOS_LCD_S6E8AX0
24 bool "S6E8AX0 MIPI AMOLED LCD Driver" 24 bool "S6E8AX0 MIPI AMOLED LCD Driver"
25 depends on (EXYNOS_MIPI_DSI && BACKLIGHT_CLASS_DEVICE && LCD_CLASS_DEVICE) 25 depends on EXYNOS_MIPI_DSI && BACKLIGHT_CLASS_DEVICE
26 depends on (LCD_CLASS_DEVICE = y)
26 default n 27 default n
27 help 28 help
28 If you have an S6E8AX0 MIPI AMOLED LCD Panel, say Y to enable its 29 If you have an S6E8AX0 MIPI AMOLED LCD Panel, say Y to enable its
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index bbeb8dd7f108..77d6221618f4 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -2160,8 +2160,8 @@ static int dispc_ovl_calc_scaling_24xx(unsigned long pclk, unsigned long lclk,
2160 *five_taps = false; 2160 *five_taps = false;
2161 2161
2162 do { 2162 do {
2163 in_height = DIV_ROUND_UP(height, *decim_y); 2163 in_height = height / *decim_y;
2164 in_width = DIV_ROUND_UP(width, *decim_x); 2164 in_width = width / *decim_x;
2165 *core_clk = dispc.feat->calc_core_clk(pclk, in_width, 2165 *core_clk = dispc.feat->calc_core_clk(pclk, in_width,
2166 in_height, out_width, out_height, mem_to_mem); 2166 in_height, out_width, out_height, mem_to_mem);
2167 error = (in_width > maxsinglelinewidth || !*core_clk || 2167 error = (in_width > maxsinglelinewidth || !*core_clk ||
@@ -2199,8 +2199,8 @@ static int dispc_ovl_calc_scaling_34xx(unsigned long pclk, unsigned long lclk,
2199 dss_feat_get_param_max(FEAT_PARAM_LINEWIDTH); 2199 dss_feat_get_param_max(FEAT_PARAM_LINEWIDTH);
2200 2200
2201 do { 2201 do {
2202 in_height = DIV_ROUND_UP(height, *decim_y); 2202 in_height = height / *decim_y;
2203 in_width = DIV_ROUND_UP(width, *decim_x); 2203 in_width = width / *decim_x;
2204 *five_taps = in_height > out_height; 2204 *five_taps = in_height > out_height;
2205 2205
2206 if (in_width > maxsinglelinewidth) 2206 if (in_width > maxsinglelinewidth)
@@ -2268,7 +2268,7 @@ static int dispc_ovl_calc_scaling_44xx(unsigned long pclk, unsigned long lclk,
2268{ 2268{
2269 u16 in_width, in_width_max; 2269 u16 in_width, in_width_max;
2270 int decim_x_min = *decim_x; 2270 int decim_x_min = *decim_x;
2271 u16 in_height = DIV_ROUND_UP(height, *decim_y); 2271 u16 in_height = height / *decim_y;
2272 const int maxsinglelinewidth = 2272 const int maxsinglelinewidth =
2273 dss_feat_get_param_max(FEAT_PARAM_LINEWIDTH); 2273 dss_feat_get_param_max(FEAT_PARAM_LINEWIDTH);
2274 const int maxdownscale = dss_feat_get_param_max(FEAT_PARAM_DOWNSCALE); 2274 const int maxdownscale = dss_feat_get_param_max(FEAT_PARAM_DOWNSCALE);
@@ -2287,7 +2287,7 @@ static int dispc_ovl_calc_scaling_44xx(unsigned long pclk, unsigned long lclk,
2287 return -EINVAL; 2287 return -EINVAL;
2288 2288
2289 do { 2289 do {
2290 in_width = DIV_ROUND_UP(width, *decim_x); 2290 in_width = width / *decim_x;
2291 } while (*decim_x <= *x_predecim && 2291 } while (*decim_x <= *x_predecim &&
2292 in_width > maxsinglelinewidth && ++*decim_x); 2292 in_width > maxsinglelinewidth && ++*decim_x);
2293 2293
@@ -2466,8 +2466,8 @@ static int dispc_ovl_setup_common(enum omap_plane plane,
2466 if (r) 2466 if (r)
2467 return r; 2467 return r;
2468 2468
2469 in_width = DIV_ROUND_UP(in_width, x_predecim); 2469 in_width = in_width / x_predecim;
2470 in_height = DIV_ROUND_UP(in_height, y_predecim); 2470 in_height = in_height / y_predecim;
2471 2471
2472 if (color_mode == OMAP_DSS_COLOR_YUV2 || 2472 if (color_mode == OMAP_DSS_COLOR_YUV2 ||
2473 color_mode == OMAP_DSS_COLOR_UYVY || 2473 color_mode == OMAP_DSS_COLOR_UYVY ||
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 7411f2674e16..23ef21ffc2c4 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -117,7 +117,7 @@ struct dpi_clk_calc_ctx {
117 /* outputs */ 117 /* outputs */
118 118
119 struct dsi_clock_info dsi_cinfo; 119 struct dsi_clock_info dsi_cinfo;
120 unsigned long long fck; 120 unsigned long fck;
121 struct dispc_clock_info dispc_cinfo; 121 struct dispc_clock_info dispc_cinfo;
122}; 122};
123 123
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index efb9ee9e3c96..ba806c9e7f54 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -46,7 +46,7 @@ static struct {
46struct sdi_clk_calc_ctx { 46struct sdi_clk_calc_ctx {
47 unsigned long pck_min, pck_max; 47 unsigned long pck_min, pck_max;
48 48
49 unsigned long long fck; 49 unsigned long fck;
50 struct dispc_clock_info dispc_cinfo; 50 struct dispc_clock_info dispc_cinfo;
51}; 51};
52 52
diff --git a/drivers/vme/bridges/vme_ca91cx42.c b/drivers/vme/bridges/vme_ca91cx42.c
index a06edbfa95ca..1b5d48c578e1 100644
--- a/drivers/vme/bridges/vme_ca91cx42.c
+++ b/drivers/vme/bridges/vme_ca91cx42.c
@@ -884,7 +884,7 @@ static ssize_t ca91cx42_master_read(struct vme_master_resource *image,
884 if (done == count) 884 if (done == count)
885 goto out; 885 goto out;
886 } 886 }
887 if ((uintptr_t)addr & 0x2) { 887 if ((uintptr_t)(addr + done) & 0x2) {
888 if ((count - done) < 2) { 888 if ((count - done) < 2) {
889 *(u8 *)(buf + done) = ioread8(addr + done); 889 *(u8 *)(buf + done) = ioread8(addr + done);
890 done += 1; 890 done += 1;
@@ -938,7 +938,7 @@ static ssize_t ca91cx42_master_write(struct vme_master_resource *image,
938 if (done == count) 938 if (done == count)
939 goto out; 939 goto out;
940 } 940 }
941 if ((uintptr_t)addr & 0x2) { 941 if ((uintptr_t)(addr + done) & 0x2) {
942 if ((count - done) < 2) { 942 if ((count - done) < 2) {
943 iowrite8(*(u8 *)(buf + done), addr + done); 943 iowrite8(*(u8 *)(buf + done), addr + done);
944 done += 1; 944 done += 1;
diff --git a/drivers/vme/bridges/vme_tsi148.c b/drivers/vme/bridges/vme_tsi148.c
index 16830d8b777c..9911cd5fddb5 100644
--- a/drivers/vme/bridges/vme_tsi148.c
+++ b/drivers/vme/bridges/vme_tsi148.c
@@ -1289,7 +1289,7 @@ static ssize_t tsi148_master_read(struct vme_master_resource *image, void *buf,
1289 if (done == count) 1289 if (done == count)
1290 goto out; 1290 goto out;
1291 } 1291 }
1292 if ((uintptr_t)addr & 0x2) { 1292 if ((uintptr_t)(addr + done) & 0x2) {
1293 if ((count - done) < 2) { 1293 if ((count - done) < 2) {
1294 *(u8 *)(buf + done) = ioread8(addr + done); 1294 *(u8 *)(buf + done) = ioread8(addr + done);
1295 done += 1; 1295 done += 1;
@@ -1371,7 +1371,7 @@ static ssize_t tsi148_master_write(struct vme_master_resource *image, void *buf,
1371 if (done == count) 1371 if (done == count)
1372 goto out; 1372 goto out;
1373 } 1373 }
1374 if ((uintptr_t)addr & 0x2) { 1374 if ((uintptr_t)(addr + done) & 0x2) {
1375 if ((count - done) < 2) { 1375 if ((count - done) < 2) {
1376 iowrite8(*(u8 *)(buf + done), addr + done); 1376 iowrite8(*(u8 *)(buf + done), addr + done);
1377 done += 1; 1377 done += 1;
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 4c4c566c52a3..79d25894343a 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -223,6 +223,7 @@ config SA1100_WATCHDOG
223 223
224config DW_WATCHDOG 224config DW_WATCHDOG
225 tristate "Synopsys DesignWare watchdog" 225 tristate "Synopsys DesignWare watchdog"
226 depends on HAS_IOMEM
226 help 227 help
227 Say Y here if to include support for the Synopsys DesignWare 228 Say Y here if to include support for the Synopsys DesignWare
228 watchdog timer found in many chips. 229 watchdog timer found in many chips.
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index d75c811bfa56..45e00afa7f2d 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -16,7 +16,6 @@ xen-pad-$(CONFIG_X86) += xen-acpi-pad.o
16dom0-$(CONFIG_X86) += pcpu.o 16dom0-$(CONFIG_X86) += pcpu.o
17obj-$(CONFIG_XEN_DOM0) += $(dom0-y) 17obj-$(CONFIG_XEN_DOM0) += $(dom0-y)
18obj-$(CONFIG_BLOCK) += biomerge.o 18obj-$(CONFIG_BLOCK) += biomerge.o
19obj-$(CONFIG_XEN_XENCOMM) += xencomm.o
20obj-$(CONFIG_XEN_BALLOON) += xen-balloon.o 19obj-$(CONFIG_XEN_BALLOON) += xen-balloon.o
21obj-$(CONFIG_XEN_SELFBALLOONING) += xen-selfballoon.o 20obj-$(CONFIG_XEN_SELFBALLOONING) += xen-selfballoon.o
22obj-$(CONFIG_XEN_DEV_EVTCHN) += xen-evtchn.o 21obj-$(CONFIG_XEN_DEV_EVTCHN) += xen-evtchn.o
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 4672e003c0ad..f4a9e3311297 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -862,6 +862,8 @@ int bind_evtchn_to_irq(unsigned int evtchn)
862 irq = ret; 862 irq = ret;
863 goto out; 863 goto out;
864 } 864 }
865 /* New interdomain events are bound to VCPU 0. */
866 bind_evtchn_to_cpu(evtchn, 0);
865 } else { 867 } else {
866 struct irq_info *info = info_for_irq(irq); 868 struct irq_info *info = info_for_irq(irq);
867 WARN_ON(info == NULL || info->type != IRQT_EVTCHN); 869 WARN_ON(info == NULL || info->type != IRQT_EVTCHN);
diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index 34a2704fbc88..073b4a19a8b0 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -284,10 +284,8 @@ static int map_grant_pages(struct grant_map *map)
284 } 284 }
285 285
286 pr_debug("map %d+%d\n", map->index, map->count); 286 pr_debug("map %d+%d\n", map->index, map->count);
287 err = gnttab_map_refs_userspace(map->map_ops, 287 err = gnttab_map_refs(map->map_ops, use_ptemod ? map->kmap_ops : NULL,
288 use_ptemod ? map->kmap_ops : NULL, 288 map->pages, map->count);
289 map->pages,
290 map->count);
291 if (err) 289 if (err)
292 return err; 290 return err;
293 291
@@ -317,10 +315,9 @@ static int __unmap_grant_pages(struct grant_map *map, int offset, int pages)
317 } 315 }
318 } 316 }
319 317
320 err = gnttab_unmap_refs_userspace(map->unmap_ops + offset, 318 err = gnttab_unmap_refs(map->unmap_ops + offset,
321 use_ptemod ? map->kmap_ops + offset : NULL, 319 use_ptemod ? map->kmap_ops + offset : NULL, map->pages + offset,
322 map->pages + offset, 320 pages);
323 pages);
324 if (err) 321 if (err)
325 return err; 322 return err;
326 323
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 8ee13e2e45e2..b84e3ab839aa 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -928,17 +928,15 @@ void gnttab_batch_copy(struct gnttab_copy *batch, unsigned count)
928} 928}
929EXPORT_SYMBOL_GPL(gnttab_batch_copy); 929EXPORT_SYMBOL_GPL(gnttab_batch_copy);
930 930
931int __gnttab_map_refs(struct gnttab_map_grant_ref *map_ops, 931int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
932 struct gnttab_map_grant_ref *kmap_ops, 932 struct gnttab_map_grant_ref *kmap_ops,
933 struct page **pages, unsigned int count, 933 struct page **pages, unsigned int count)
934 bool m2p_override)
935{ 934{
936 int i, ret; 935 int i, ret;
937 bool lazy = false; 936 bool lazy = false;
938 pte_t *pte; 937 pte_t *pte;
939 unsigned long mfn, pfn; 938 unsigned long mfn;
940 939
941 BUG_ON(kmap_ops && !m2p_override);
942 ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, map_ops, count); 940 ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, map_ops, count);
943 if (ret) 941 if (ret)
944 return ret; 942 return ret;
@@ -957,12 +955,10 @@ int __gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
957 set_phys_to_machine(map_ops[i].host_addr >> PAGE_SHIFT, 955 set_phys_to_machine(map_ops[i].host_addr >> PAGE_SHIFT,
958 map_ops[i].dev_bus_addr >> PAGE_SHIFT); 956 map_ops[i].dev_bus_addr >> PAGE_SHIFT);
959 } 957 }
960 return 0; 958 return ret;
961 } 959 }
962 960
963 if (m2p_override && 961 if (!in_interrupt() && paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE) {
964 !in_interrupt() &&
965 paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE) {
966 arch_enter_lazy_mmu_mode(); 962 arch_enter_lazy_mmu_mode();
967 lazy = true; 963 lazy = true;
968 } 964 }
@@ -979,20 +975,8 @@ int __gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
979 } else { 975 } else {
980 mfn = PFN_DOWN(map_ops[i].dev_bus_addr); 976 mfn = PFN_DOWN(map_ops[i].dev_bus_addr);
981 } 977 }
982 pfn = page_to_pfn(pages[i]); 978 ret = m2p_add_override(mfn, pages[i], kmap_ops ?
983 979 &kmap_ops[i] : NULL);
984 WARN_ON(PagePrivate(pages[i]));
985 SetPagePrivate(pages[i]);
986 set_page_private(pages[i], mfn);
987
988 pages[i]->index = pfn_to_mfn(pfn);
989 if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn)))) {
990 ret = -ENOMEM;
991 goto out;
992 }
993 if (m2p_override)
994 ret = m2p_add_override(mfn, pages[i], kmap_ops ?
995 &kmap_ops[i] : NULL);
996 if (ret) 980 if (ret)
997 goto out; 981 goto out;
998 } 982 }
@@ -1003,32 +987,15 @@ int __gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
1003 987
1004 return ret; 988 return ret;
1005} 989}
1006
1007int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
1008 struct page **pages, unsigned int count)
1009{
1010 return __gnttab_map_refs(map_ops, NULL, pages, count, false);
1011}
1012EXPORT_SYMBOL_GPL(gnttab_map_refs); 990EXPORT_SYMBOL_GPL(gnttab_map_refs);
1013 991
1014int gnttab_map_refs_userspace(struct gnttab_map_grant_ref *map_ops, 992int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
1015 struct gnttab_map_grant_ref *kmap_ops,
1016 struct page **pages, unsigned int count)
1017{
1018 return __gnttab_map_refs(map_ops, kmap_ops, pages, count, true);
1019}
1020EXPORT_SYMBOL_GPL(gnttab_map_refs_userspace);
1021
1022int __gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
1023 struct gnttab_map_grant_ref *kmap_ops, 993 struct gnttab_map_grant_ref *kmap_ops,
1024 struct page **pages, unsigned int count, 994 struct page **pages, unsigned int count)
1025 bool m2p_override)
1026{ 995{
1027 int i, ret; 996 int i, ret;
1028 bool lazy = false; 997 bool lazy = false;
1029 unsigned long pfn, mfn;
1030 998
1031 BUG_ON(kmap_ops && !m2p_override);
1032 ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap_ops, count); 999 ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap_ops, count);
1033 if (ret) 1000 if (ret)
1034 return ret; 1001 return ret;
@@ -1039,33 +1006,17 @@ int __gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
1039 set_phys_to_machine(unmap_ops[i].host_addr >> PAGE_SHIFT, 1006 set_phys_to_machine(unmap_ops[i].host_addr >> PAGE_SHIFT,
1040 INVALID_P2M_ENTRY); 1007 INVALID_P2M_ENTRY);
1041 } 1008 }
1042 return 0; 1009 return ret;
1043 } 1010 }
1044 1011
1045 if (m2p_override && 1012 if (!in_interrupt() && paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE) {
1046 !in_interrupt() &&
1047 paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE) {
1048 arch_enter_lazy_mmu_mode(); 1013 arch_enter_lazy_mmu_mode();
1049 lazy = true; 1014 lazy = true;
1050 } 1015 }
1051 1016
1052 for (i = 0; i < count; i++) { 1017 for (i = 0; i < count; i++) {
1053 pfn = page_to_pfn(pages[i]); 1018 ret = m2p_remove_override(pages[i], kmap_ops ?
1054 mfn = get_phys_to_machine(pfn); 1019 &kmap_ops[i] : NULL);
1055 if (mfn == INVALID_P2M_ENTRY || !(mfn & FOREIGN_FRAME_BIT)) {
1056 ret = -EINVAL;
1057 goto out;
1058 }
1059
1060 set_page_private(pages[i], INVALID_P2M_ENTRY);
1061 WARN_ON(!PagePrivate(pages[i]));
1062 ClearPagePrivate(pages[i]);
1063 set_phys_to_machine(pfn, pages[i]->index);
1064 if (m2p_override)
1065 ret = m2p_remove_override(pages[i],
1066 kmap_ops ?
1067 &kmap_ops[i] : NULL,
1068 mfn);
1069 if (ret) 1020 if (ret)
1070 goto out; 1021 goto out;
1071 } 1022 }
@@ -1076,22 +1027,8 @@ int __gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
1076 1027
1077 return ret; 1028 return ret;
1078} 1029}
1079
1080int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *map_ops,
1081 struct page **pages, unsigned int count)
1082{
1083 return __gnttab_unmap_refs(map_ops, NULL, pages, count, false);
1084}
1085EXPORT_SYMBOL_GPL(gnttab_unmap_refs); 1030EXPORT_SYMBOL_GPL(gnttab_unmap_refs);
1086 1031
1087int gnttab_unmap_refs_userspace(struct gnttab_unmap_grant_ref *map_ops,
1088 struct gnttab_map_grant_ref *kmap_ops,
1089 struct page **pages, unsigned int count)
1090{
1091 return __gnttab_unmap_refs(map_ops, kmap_ops, pages, count, true);
1092}
1093EXPORT_SYMBOL_GPL(gnttab_unmap_refs_userspace);
1094
1095static unsigned nr_status_frames(unsigned nr_grant_frames) 1032static unsigned nr_status_frames(unsigned nr_grant_frames)
1096{ 1033{
1097 BUG_ON(grefs_per_grant_frame == 0); 1034 BUG_ON(grefs_per_grant_frame == 0);
diff --git a/drivers/xen/xencomm.c b/drivers/xen/xencomm.c
deleted file mode 100644
index 4793fc594549..000000000000
--- a/drivers/xen/xencomm.c
+++ /dev/null
@@ -1,219 +0,0 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15 *
16 * Copyright (C) IBM Corp. 2006
17 *
18 * Authors: Hollis Blanchard <hollisb@us.ibm.com>
19 */
20
21#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
22
23#include <linux/mm.h>
24#include <linux/slab.h>
25#include <asm/page.h>
26#include <xen/xencomm.h>
27#include <xen/interface/xen.h>
28#include <asm/xen/xencomm.h> /* for xencomm_is_phys_contiguous() */
29
30static int xencomm_init(struct xencomm_desc *desc,
31 void *buffer, unsigned long bytes)
32{
33 unsigned long recorded = 0;
34 int i = 0;
35
36 while ((recorded < bytes) && (i < desc->nr_addrs)) {
37 unsigned long vaddr = (unsigned long)buffer + recorded;
38 unsigned long paddr;
39 int offset;
40 int chunksz;
41
42 offset = vaddr % PAGE_SIZE; /* handle partial pages */
43 chunksz = min(PAGE_SIZE - offset, bytes - recorded);
44
45 paddr = xencomm_vtop(vaddr);
46 if (paddr == ~0UL) {
47 printk(KERN_DEBUG "%s: couldn't translate vaddr %lx\n",
48 __func__, vaddr);
49 return -EINVAL;
50 }
51
52 desc->address[i++] = paddr;
53 recorded += chunksz;
54 }
55
56 if (recorded < bytes) {
57 printk(KERN_DEBUG
58 "%s: could only translate %ld of %ld bytes\n",
59 __func__, recorded, bytes);
60 return -ENOSPC;
61 }
62
63 /* mark remaining addresses invalid (just for safety) */
64 while (i < desc->nr_addrs)
65 desc->address[i++] = XENCOMM_INVALID;
66
67 desc->magic = XENCOMM_MAGIC;
68
69 return 0;
70}
71
72static struct xencomm_desc *xencomm_alloc(gfp_t gfp_mask,
73 void *buffer, unsigned long bytes)
74{
75 struct xencomm_desc *desc;
76 unsigned long buffer_ulong = (unsigned long)buffer;
77 unsigned long start = buffer_ulong & PAGE_MASK;
78 unsigned long end = (buffer_ulong + bytes) | ~PAGE_MASK;
79 unsigned long nr_addrs = (end - start + 1) >> PAGE_SHIFT;
80 unsigned long size = sizeof(*desc) +
81 sizeof(desc->address[0]) * nr_addrs;
82
83 /*
84 * slab allocator returns at least sizeof(void*) aligned pointer.
85 * When sizeof(*desc) > sizeof(void*), struct xencomm_desc might
86 * cross page boundary.
87 */
88 if (sizeof(*desc) > sizeof(void *)) {
89 unsigned long order = get_order(size);
90 desc = (struct xencomm_desc *)__get_free_pages(gfp_mask,
91 order);
92 if (desc == NULL)
93 return NULL;
94
95 desc->nr_addrs =
96 ((PAGE_SIZE << order) - sizeof(struct xencomm_desc)) /
97 sizeof(*desc->address);
98 } else {
99 desc = kmalloc(size, gfp_mask);
100 if (desc == NULL)
101 return NULL;
102
103 desc->nr_addrs = nr_addrs;
104 }
105 return desc;
106}
107
108void xencomm_free(struct xencomm_handle *desc)
109{
110 if (desc && !((ulong)desc & XENCOMM_INLINE_FLAG)) {
111 struct xencomm_desc *desc__ = (struct xencomm_desc *)desc;
112 if (sizeof(*desc__) > sizeof(void *)) {
113 unsigned long size = sizeof(*desc__) +
114 sizeof(desc__->address[0]) * desc__->nr_addrs;
115 unsigned long order = get_order(size);
116 free_pages((unsigned long)__va(desc), order);
117 } else
118 kfree(__va(desc));
119 }
120}
121
122static int xencomm_create(void *buffer, unsigned long bytes,
123 struct xencomm_desc **ret, gfp_t gfp_mask)
124{
125 struct xencomm_desc *desc;
126 int rc;
127
128 pr_debug("%s: %p[%ld]\n", __func__, buffer, bytes);
129
130 if (bytes == 0) {
131 /* don't create a descriptor; Xen recognizes NULL. */
132 BUG_ON(buffer != NULL);
133 *ret = NULL;
134 return 0;
135 }
136
137 BUG_ON(buffer == NULL); /* 'bytes' is non-zero */
138
139 desc = xencomm_alloc(gfp_mask, buffer, bytes);
140 if (!desc) {
141 printk(KERN_DEBUG "%s failure\n", "xencomm_alloc");
142 return -ENOMEM;
143 }
144
145 rc = xencomm_init(desc, buffer, bytes);
146 if (rc) {
147 printk(KERN_DEBUG "%s failure: %d\n", "xencomm_init", rc);
148 xencomm_free((struct xencomm_handle *)__pa(desc));
149 return rc;
150 }
151
152 *ret = desc;
153 return 0;
154}
155
156static struct xencomm_handle *xencomm_create_inline(void *ptr)
157{
158 unsigned long paddr;
159
160 BUG_ON(!xencomm_is_phys_contiguous((unsigned long)ptr));
161
162 paddr = (unsigned long)xencomm_pa(ptr);
163 BUG_ON(paddr & XENCOMM_INLINE_FLAG);
164 return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG);
165}
166
167/* "mini" routine, for stack-based communications: */
168static int xencomm_create_mini(void *buffer,
169 unsigned long bytes, struct xencomm_mini *xc_desc,
170 struct xencomm_desc **ret)
171{
172 int rc = 0;
173 struct xencomm_desc *desc;
174 BUG_ON(((unsigned long)xc_desc) % sizeof(*xc_desc) != 0);
175
176 desc = (void *)xc_desc;
177
178 desc->nr_addrs = XENCOMM_MINI_ADDRS;
179
180 rc = xencomm_init(desc, buffer, bytes);
181 if (!rc)
182 *ret = desc;
183
184 return rc;
185}
186
187struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes)
188{
189 int rc;
190 struct xencomm_desc *desc;
191
192 if (xencomm_is_phys_contiguous((unsigned long)ptr))
193 return xencomm_create_inline(ptr);
194
195 rc = xencomm_create(ptr, bytes, &desc, GFP_KERNEL);
196
197 if (rc || desc == NULL)
198 return NULL;
199
200 return xencomm_pa(desc);
201}
202
203struct xencomm_handle *__xencomm_map_no_alloc(void *ptr, unsigned long bytes,
204 struct xencomm_mini *xc_desc)
205{
206 int rc;
207 struct xencomm_desc *desc = NULL;
208
209 if (xencomm_is_phys_contiguous((unsigned long)ptr))
210 return xencomm_create_inline(ptr);
211
212 rc = xencomm_create_mini(ptr, bytes, xc_desc,
213 &desc);
214
215 if (rc)
216 return NULL;
217
218 return xencomm_pa(desc);
219}
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c
index 0bad24ddc2e7..0129b78a6908 100644
--- a/fs/bio-integrity.c
+++ b/fs/bio-integrity.c
@@ -114,6 +114,14 @@ void bio_integrity_free(struct bio *bio)
114} 114}
115EXPORT_SYMBOL(bio_integrity_free); 115EXPORT_SYMBOL(bio_integrity_free);
116 116
117static inline unsigned int bip_integrity_vecs(struct bio_integrity_payload *bip)
118{
119 if (bip->bip_slab == BIO_POOL_NONE)
120 return BIP_INLINE_VECS;
121
122 return bvec_nr_vecs(bip->bip_slab);
123}
124
117/** 125/**
118 * bio_integrity_add_page - Attach integrity metadata 126 * bio_integrity_add_page - Attach integrity metadata
119 * @bio: bio to update 127 * @bio: bio to update
@@ -129,7 +137,7 @@ int bio_integrity_add_page(struct bio *bio, struct page *page,
129 struct bio_integrity_payload *bip = bio->bi_integrity; 137 struct bio_integrity_payload *bip = bio->bi_integrity;
130 struct bio_vec *iv; 138 struct bio_vec *iv;
131 139
132 if (bip->bip_vcnt >= bvec_nr_vecs(bip->bip_slab)) { 140 if (bip->bip_vcnt >= bip_integrity_vecs(bip)) {
133 printk(KERN_ERR "%s: bip_vec full\n", __func__); 141 printk(KERN_ERR "%s: bip_vec full\n", __func__);
134 return 0; 142 return 0;
135 } 143 }
@@ -226,7 +234,8 @@ unsigned int bio_integrity_tag_size(struct bio *bio)
226} 234}
227EXPORT_SYMBOL(bio_integrity_tag_size); 235EXPORT_SYMBOL(bio_integrity_tag_size);
228 236
229int bio_integrity_tag(struct bio *bio, void *tag_buf, unsigned int len, int set) 237static int bio_integrity_tag(struct bio *bio, void *tag_buf, unsigned int len,
238 int set)
230{ 239{
231 struct bio_integrity_payload *bip = bio->bi_integrity; 240 struct bio_integrity_payload *bip = bio->bi_integrity;
232 struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev); 241 struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
diff --git a/fs/bio.c b/fs/bio.c
index 75c49a382239..8754e7b6eb49 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -611,7 +611,6 @@ EXPORT_SYMBOL(bio_clone_fast);
611struct bio *bio_clone_bioset(struct bio *bio_src, gfp_t gfp_mask, 611struct bio *bio_clone_bioset(struct bio *bio_src, gfp_t gfp_mask,
612 struct bio_set *bs) 612 struct bio_set *bs)
613{ 613{
614 unsigned nr_iovecs = 0;
615 struct bvec_iter iter; 614 struct bvec_iter iter;
616 struct bio_vec bv; 615 struct bio_vec bv;
617 struct bio *bio; 616 struct bio *bio;
@@ -638,10 +637,7 @@ struct bio *bio_clone_bioset(struct bio *bio_src, gfp_t gfp_mask,
638 * __bio_clone_fast() anyways. 637 * __bio_clone_fast() anyways.
639 */ 638 */
640 639
641 bio_for_each_segment(bv, bio_src, iter) 640 bio = bio_alloc_bioset(gfp_mask, bio_segments(bio_src), bs);
642 nr_iovecs++;
643
644 bio = bio_alloc_bioset(gfp_mask, nr_iovecs, bs);
645 if (!bio) 641 if (!bio)
646 return NULL; 642 return NULL;
647 643
@@ -650,9 +646,18 @@ struct bio *bio_clone_bioset(struct bio *bio_src, gfp_t gfp_mask,
650 bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; 646 bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector;
651 bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; 647 bio->bi_iter.bi_size = bio_src->bi_iter.bi_size;
652 648
649 if (bio->bi_rw & REQ_DISCARD)
650 goto integrity_clone;
651
652 if (bio->bi_rw & REQ_WRITE_SAME) {
653 bio->bi_io_vec[bio->bi_vcnt++] = bio_src->bi_io_vec[0];
654 goto integrity_clone;
655 }
656
653 bio_for_each_segment(bv, bio_src, iter) 657 bio_for_each_segment(bv, bio_src, iter)
654 bio->bi_io_vec[bio->bi_vcnt++] = bv; 658 bio->bi_io_vec[bio->bi_vcnt++] = bv;
655 659
660integrity_clone:
656 if (bio_integrity(bio_src)) { 661 if (bio_integrity(bio_src)) {
657 int ret; 662 int ret;
658 663
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
index 49a62b4dda3b..0e8388e72d8d 100644
--- a/fs/btrfs/check-integrity.c
+++ b/fs/btrfs/check-integrity.c
@@ -92,11 +92,11 @@
92#include <linux/slab.h> 92#include <linux/slab.h>
93#include <linux/buffer_head.h> 93#include <linux/buffer_head.h>
94#include <linux/mutex.h> 94#include <linux/mutex.h>
95#include <linux/crc32c.h>
96#include <linux/genhd.h> 95#include <linux/genhd.h>
97#include <linux/blkdev.h> 96#include <linux/blkdev.h>
98#include "ctree.h" 97#include "ctree.h"
99#include "disk-io.h" 98#include "disk-io.h"
99#include "hash.h"
100#include "transaction.h" 100#include "transaction.h"
101#include "extent_io.h" 101#include "extent_io.h"
102#include "volumes.h" 102#include "volumes.h"
@@ -1823,7 +1823,7 @@ static int btrfsic_test_for_metadata(struct btrfsic_state *state,
1823 size_t sublen = i ? PAGE_CACHE_SIZE : 1823 size_t sublen = i ? PAGE_CACHE_SIZE :
1824 (PAGE_CACHE_SIZE - BTRFS_CSUM_SIZE); 1824 (PAGE_CACHE_SIZE - BTRFS_CSUM_SIZE);
1825 1825
1826 crc = crc32c(crc, data, sublen); 1826 crc = btrfs_crc32c(crc, data, sublen);
1827 } 1827 }
1828 btrfs_csum_final(crc, csum); 1828 btrfs_csum_final(crc, csum);
1829 if (memcmp(csum, h->csum, state->csum_size)) 1829 if (memcmp(csum, h->csum, state->csum_size))
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index e2600cdb6c25..b01fb6c527e3 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -1010,6 +1010,8 @@ int btrfs_decompress_buf2page(char *buf, unsigned long buf_start,
1010 bytes = min(bytes, working_bytes); 1010 bytes = min(bytes, working_bytes);
1011 kaddr = kmap_atomic(page_out); 1011 kaddr = kmap_atomic(page_out);
1012 memcpy(kaddr + *pg_offset, buf + buf_offset, bytes); 1012 memcpy(kaddr + *pg_offset, buf + buf_offset, bytes);
1013 if (*pg_index == (vcnt - 1) && *pg_offset == 0)
1014 memset(kaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
1013 kunmap_atomic(kaddr); 1015 kunmap_atomic(kaddr);
1014 flush_dcache_page(page_out); 1016 flush_dcache_page(page_out);
1015 1017
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 0e69295d0031..81ea55314b1f 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -26,7 +26,6 @@
26#include <linux/workqueue.h> 26#include <linux/workqueue.h>
27#include <linux/kthread.h> 27#include <linux/kthread.h>
28#include <linux/freezer.h> 28#include <linux/freezer.h>
29#include <linux/crc32c.h>
30#include <linux/slab.h> 29#include <linux/slab.h>
31#include <linux/migrate.h> 30#include <linux/migrate.h>
32#include <linux/ratelimit.h> 31#include <linux/ratelimit.h>
@@ -35,6 +34,7 @@
35#include <asm/unaligned.h> 34#include <asm/unaligned.h>
36#include "ctree.h" 35#include "ctree.h"
37#include "disk-io.h" 36#include "disk-io.h"
37#include "hash.h"
38#include "transaction.h" 38#include "transaction.h"
39#include "btrfs_inode.h" 39#include "btrfs_inode.h"
40#include "volumes.h" 40#include "volumes.h"
@@ -244,7 +244,7 @@ out:
244 244
245u32 btrfs_csum_data(char *data, u32 seed, size_t len) 245u32 btrfs_csum_data(char *data, u32 seed, size_t len)
246{ 246{
247 return crc32c(seed, data, len); 247 return btrfs_crc32c(seed, data, len);
248} 248}
249 249
250void btrfs_csum_final(u32 crc, char *result) 250void btrfs_csum_final(u32 crc, char *result)
@@ -3839,7 +3839,6 @@ static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
3839 rb_erase(&ref->rb_node, &head->ref_root); 3839 rb_erase(&ref->rb_node, &head->ref_root);
3840 atomic_dec(&delayed_refs->num_entries); 3840 atomic_dec(&delayed_refs->num_entries);
3841 btrfs_put_delayed_ref(ref); 3841 btrfs_put_delayed_ref(ref);
3842 cond_resched_lock(&head->lock);
3843 } 3842 }
3844 if (head->must_insert_reserved) 3843 if (head->must_insert_reserved)
3845 pin_bytes = true; 3844 pin_bytes = true;
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 9c9ecc93ae2c..32312e09f0f5 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2385,6 +2385,7 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2385 spin_unlock(&delayed_refs->lock); 2385 spin_unlock(&delayed_refs->lock);
2386 locked_ref = NULL; 2386 locked_ref = NULL;
2387 cond_resched(); 2387 cond_resched();
2388 count++;
2388 continue; 2389 continue;
2389 } 2390 }
2390 2391
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 5c4ab9c18940..d3d44486290b 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2629,7 +2629,7 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)
2629 EXTENT_DEFRAG, 1, cached_state); 2629 EXTENT_DEFRAG, 1, cached_state);
2630 if (ret) { 2630 if (ret) {
2631 u64 last_snapshot = btrfs_root_last_snapshot(&root->root_item); 2631 u64 last_snapshot = btrfs_root_last_snapshot(&root->root_item);
2632 if (last_snapshot >= BTRFS_I(inode)->generation) 2632 if (0 && last_snapshot >= BTRFS_I(inode)->generation)
2633 /* the inode is shared */ 2633 /* the inode is shared */
2634 new = record_old_file_extents(inode, ordered_extent); 2634 new = record_old_file_extents(inode, ordered_extent);
2635 2635
@@ -5154,7 +5154,7 @@ static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
5154 return ERR_CAST(inode); 5154 return ERR_CAST(inode);
5155 } 5155 }
5156 5156
5157 return d_splice_alias(inode, dentry); 5157 return d_materialise_unique(dentry, inode);
5158} 5158}
5159 5159
5160unsigned char btrfs_filetype_table[] = { 5160unsigned char btrfs_filetype_table[] = {
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index b0134892dc70..a6d8efa46bfe 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3537,20 +3537,6 @@ out:
3537 return ret; 3537 return ret;
3538} 3538}
3539 3539
3540static long btrfs_ioctl_global_rsv(struct btrfs_root *root, void __user *arg)
3541{
3542 struct btrfs_block_rsv *block_rsv = &root->fs_info->global_block_rsv;
3543 u64 reserved;
3544
3545 spin_lock(&block_rsv->lock);
3546 reserved = block_rsv->reserved;
3547 spin_unlock(&block_rsv->lock);
3548
3549 if (arg && copy_to_user(arg, &reserved, sizeof(reserved)))
3550 return -EFAULT;
3551 return 0;
3552}
3553
3554/* 3540/*
3555 * there are many ways the trans_start and trans_end ioctls can lead 3541 * there are many ways the trans_start and trans_end ioctls can lead
3556 * to deadlocks. They should only be used by applications that 3542 * to deadlocks. They should only be used by applications that
@@ -4525,7 +4511,7 @@ static int btrfs_ioctl_set_fslabel(struct file *file, void __user *arg)
4525 spin_lock(&root->fs_info->super_lock); 4511 spin_lock(&root->fs_info->super_lock);
4526 strcpy(super_block->label, label); 4512 strcpy(super_block->label, label);
4527 spin_unlock(&root->fs_info->super_lock); 4513 spin_unlock(&root->fs_info->super_lock);
4528 ret = btrfs_end_transaction(trans, root); 4514 ret = btrfs_commit_transaction(trans, root);
4529 4515
4530out_unlock: 4516out_unlock:
4531 mnt_drop_write_file(file); 4517 mnt_drop_write_file(file);
@@ -4668,7 +4654,7 @@ static int btrfs_ioctl_set_features(struct file *file, void __user *arg)
4668 if (ret) 4654 if (ret)
4669 return ret; 4655 return ret;
4670 4656
4671 trans = btrfs_start_transaction(root, 1); 4657 trans = btrfs_start_transaction(root, 0);
4672 if (IS_ERR(trans)) 4658 if (IS_ERR(trans))
4673 return PTR_ERR(trans); 4659 return PTR_ERR(trans);
4674 4660
@@ -4689,7 +4675,7 @@ static int btrfs_ioctl_set_features(struct file *file, void __user *arg)
4689 btrfs_set_super_incompat_flags(super_block, newflags); 4675 btrfs_set_super_incompat_flags(super_block, newflags);
4690 spin_unlock(&root->fs_info->super_lock); 4676 spin_unlock(&root->fs_info->super_lock);
4691 4677
4692 return btrfs_end_transaction(trans, root); 4678 return btrfs_commit_transaction(trans, root);
4693} 4679}
4694 4680
4695long btrfs_ioctl(struct file *file, unsigned int 4681long btrfs_ioctl(struct file *file, unsigned int
@@ -4757,8 +4743,6 @@ long btrfs_ioctl(struct file *file, unsigned int
4757 return btrfs_ioctl_logical_to_ino(root, argp); 4743 return btrfs_ioctl_logical_to_ino(root, argp);
4758 case BTRFS_IOC_SPACE_INFO: 4744 case BTRFS_IOC_SPACE_INFO:
4759 return btrfs_ioctl_space_info(root, argp); 4745 return btrfs_ioctl_space_info(root, argp);
4760 case BTRFS_IOC_GLOBAL_RSV:
4761 return btrfs_ioctl_global_rsv(root, argp);
4762 case BTRFS_IOC_SYNC: { 4746 case BTRFS_IOC_SYNC: {
4763 int ret; 4747 int ret;
4764 4748
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index 730dce395858..9dde9717c1b9 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -24,12 +24,12 @@
24#include <linux/xattr.h> 24#include <linux/xattr.h>
25#include <linux/posix_acl_xattr.h> 25#include <linux/posix_acl_xattr.h>
26#include <linux/radix-tree.h> 26#include <linux/radix-tree.h>
27#include <linux/crc32c.h>
28#include <linux/vmalloc.h> 27#include <linux/vmalloc.h>
29#include <linux/string.h> 28#include <linux/string.h>
30 29
31#include "send.h" 30#include "send.h"
32#include "backref.h" 31#include "backref.h"
32#include "hash.h"
33#include "locking.h" 33#include "locking.h"
34#include "disk-io.h" 34#include "disk-io.h"
35#include "btrfs_inode.h" 35#include "btrfs_inode.h"
@@ -620,7 +620,7 @@ static int send_cmd(struct send_ctx *sctx)
620 hdr->len = cpu_to_le32(sctx->send_size - sizeof(*hdr)); 620 hdr->len = cpu_to_le32(sctx->send_size - sizeof(*hdr));
621 hdr->crc = 0; 621 hdr->crc = 0;
622 622
623 crc = crc32c(0, (unsigned char *)sctx->send_buf, sctx->send_size); 623 crc = btrfs_crc32c(0, (unsigned char *)sctx->send_buf, sctx->send_size);
624 hdr->crc = cpu_to_le32(crc); 624 hdr->crc = cpu_to_le32(crc);
625 625
626 ret = write_buf(sctx->send_filp, sctx->send_buf, sctx->send_size, 626 ret = write_buf(sctx->send_filp, sctx->send_buf, sctx->send_size,
@@ -1332,6 +1332,16 @@ verbose_printk(KERN_DEBUG "btrfs: find_extent_clone: data_offset=%llu, "
1332 } 1332 }
1333 1333
1334 if (cur_clone_root) { 1334 if (cur_clone_root) {
1335 if (compressed != BTRFS_COMPRESS_NONE) {
1336 /*
1337 * Offsets given by iterate_extent_inodes() are relative
1338 * to the start of the extent, we need to add logical
1339 * offset from the file extent item.
1340 * (See why at backref.c:check_extent_in_eb())
1341 */
1342 cur_clone_root->offset += btrfs_file_extent_offset(eb,
1343 fi);
1344 }
1335 *found = cur_clone_root; 1345 *found = cur_clone_root;
1336 ret = 0; 1346 ret = 0;
1337 } else { 1347 } else {
@@ -2774,8 +2784,6 @@ static int add_waiting_dir_move(struct send_ctx *sctx, u64 ino)
2774 return 0; 2784 return 0;
2775} 2785}
2776 2786
2777#ifdef CONFIG_BTRFS_ASSERT
2778
2779static int del_waiting_dir_move(struct send_ctx *sctx, u64 ino) 2787static int del_waiting_dir_move(struct send_ctx *sctx, u64 ino)
2780{ 2788{
2781 struct rb_node *n = sctx->waiting_dir_moves.rb_node; 2789 struct rb_node *n = sctx->waiting_dir_moves.rb_node;
@@ -2796,8 +2804,6 @@ static int del_waiting_dir_move(struct send_ctx *sctx, u64 ino)
2796 return -ENOENT; 2804 return -ENOENT;
2797} 2805}
2798 2806
2799#endif
2800
2801static int add_pending_dir_move(struct send_ctx *sctx, u64 parent_ino) 2807static int add_pending_dir_move(struct send_ctx *sctx, u64 parent_ino)
2802{ 2808{
2803 struct rb_node **p = &sctx->pending_dir_moves.rb_node; 2809 struct rb_node **p = &sctx->pending_dir_moves.rb_node;
@@ -2902,7 +2908,9 @@ static int apply_dir_move(struct send_ctx *sctx, struct pending_dir_move *pm)
2902 } 2908 }
2903 2909
2904 sctx->send_progress = sctx->cur_ino + 1; 2910 sctx->send_progress = sctx->cur_ino + 1;
2905 ASSERT(del_waiting_dir_move(sctx, pm->ino) == 0); 2911 ret = del_waiting_dir_move(sctx, pm->ino);
2912 ASSERT(ret == 0);
2913
2906 ret = get_cur_path(sctx, pm->ino, pm->gen, to_path); 2914 ret = get_cur_path(sctx, pm->ino, pm->gen, to_path);
2907 if (ret < 0) 2915 if (ret < 0)
2908 goto out; 2916 goto out;
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index c02f63356895..d04db817be5c 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -566,7 +566,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
566 kfree(num); 566 kfree(num);
567 567
568 if (info->max_inline) { 568 if (info->max_inline) {
569 info->max_inline = max_t(u64, 569 info->max_inline = min_t(u64,
570 info->max_inline, 570 info->max_inline,
571 root->sectorsize); 571 root->sectorsize);
572 } 572 }
@@ -855,6 +855,7 @@ static struct dentry *get_default_root(struct super_block *sb,
855 struct btrfs_path *path; 855 struct btrfs_path *path;
856 struct btrfs_key location; 856 struct btrfs_key location;
857 struct inode *inode; 857 struct inode *inode;
858 struct dentry *dentry;
858 u64 dir_id; 859 u64 dir_id;
859 int new = 0; 860 int new = 0;
860 861
@@ -925,7 +926,13 @@ setup_root:
925 return dget(sb->s_root); 926 return dget(sb->s_root);
926 } 927 }
927 928
928 return d_obtain_alias(inode); 929 dentry = d_obtain_alias(inode);
930 if (!IS_ERR(dentry)) {
931 spin_lock(&dentry->d_lock);
932 dentry->d_flags &= ~DCACHE_DISCONNECTED;
933 spin_unlock(&dentry->d_lock);
934 }
935 return dentry;
929} 936}
930 937
931static int btrfs_fill_super(struct super_block *sb, 938static int btrfs_fill_super(struct super_block *sb,
@@ -1996,7 +2003,7 @@ static void __exit exit_btrfs_fs(void)
1996 btrfs_hash_exit(); 2003 btrfs_hash_exit();
1997} 2004}
1998 2005
1999module_init(init_btrfs_fs) 2006late_initcall(init_btrfs_fs);
2000module_exit(exit_btrfs_fs) 2007module_exit(exit_btrfs_fs)
2001 2008
2002MODULE_LICENSE("GPL"); 2009MODULE_LICENSE("GPL");
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 782374d8fd19..865f4cf9a769 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -578,8 +578,14 @@ static int add_device_membership(struct btrfs_fs_info *fs_info)
578 return -ENOMEM; 578 return -ENOMEM;
579 579
580 list_for_each_entry(dev, &fs_devices->devices, dev_list) { 580 list_for_each_entry(dev, &fs_devices->devices, dev_list) {
581 struct hd_struct *disk = dev->bdev->bd_part; 581 struct hd_struct *disk;
582 struct kobject *disk_kobj = &part_to_dev(disk)->kobj; 582 struct kobject *disk_kobj;
583
584 if (!dev->bdev)
585 continue;
586
587 disk = dev->bdev->bd_part;
588 disk_kobj = &part_to_dev(disk)->kobj;
583 589
584 error = sysfs_create_link(fs_info->device_dir_kobj, 590 error = sysfs_create_link(fs_info->device_dir_kobj,
585 disk_kobj, disk_kobj->name); 591 disk_kobj, disk_kobj->name);
diff --git a/fs/buffer.c b/fs/buffer.c
index 651dba10b9c2..27265a8b43c1 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -654,14 +654,16 @@ EXPORT_SYMBOL(mark_buffer_dirty_inode);
654static void __set_page_dirty(struct page *page, 654static void __set_page_dirty(struct page *page,
655 struct address_space *mapping, int warn) 655 struct address_space *mapping, int warn)
656{ 656{
657 spin_lock_irq(&mapping->tree_lock); 657 unsigned long flags;
658
659 spin_lock_irqsave(&mapping->tree_lock, flags);
658 if (page->mapping) { /* Race with truncate? */ 660 if (page->mapping) { /* Race with truncate? */
659 WARN_ON_ONCE(warn && !PageUptodate(page)); 661 WARN_ON_ONCE(warn && !PageUptodate(page));
660 account_page_dirtied(page, mapping); 662 account_page_dirtied(page, mapping);
661 radix_tree_tag_set(&mapping->page_tree, 663 radix_tree_tag_set(&mapping->page_tree,
662 page_index(page), PAGECACHE_TAG_DIRTY); 664 page_index(page), PAGECACHE_TAG_DIRTY);
663 } 665 }
664 spin_unlock_irq(&mapping->tree_lock); 666 spin_unlock_irqrestore(&mapping->tree_lock, flags);
665 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); 667 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
666} 668}
667 669
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c
index 8f9b4f710d4a..c819b0bd491a 100644
--- a/fs/cifs/cifsacl.c
+++ b/fs/cifs/cifsacl.c
@@ -1043,15 +1043,30 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 nmode,
1043 __u32 secdesclen = 0; 1043 __u32 secdesclen = 0;
1044 struct cifs_ntsd *pntsd = NULL; /* acl obtained from server */ 1044 struct cifs_ntsd *pntsd = NULL; /* acl obtained from server */
1045 struct cifs_ntsd *pnntsd = NULL; /* modified acl to be sent to server */ 1045 struct cifs_ntsd *pnntsd = NULL; /* modified acl to be sent to server */
1046 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1047 struct tcon_link *tlink = cifs_sb_tlink(cifs_sb);
1048 struct cifs_tcon *tcon;
1049
1050 if (IS_ERR(tlink))
1051 return PTR_ERR(tlink);
1052 tcon = tlink_tcon(tlink);
1046 1053
1047 cifs_dbg(NOISY, "set ACL from mode for %s\n", path); 1054 cifs_dbg(NOISY, "set ACL from mode for %s\n", path);
1048 1055
1049 /* Get the security descriptor */ 1056 /* Get the security descriptor */
1050 pntsd = get_cifs_acl(CIFS_SB(inode->i_sb), inode, path, &secdesclen); 1057
1058 if (tcon->ses->server->ops->get_acl == NULL) {
1059 cifs_put_tlink(tlink);
1060 return -EOPNOTSUPP;
1061 }
1062
1063 pntsd = tcon->ses->server->ops->get_acl(cifs_sb, inode, path,
1064 &secdesclen);
1051 if (IS_ERR(pntsd)) { 1065 if (IS_ERR(pntsd)) {
1052 rc = PTR_ERR(pntsd); 1066 rc = PTR_ERR(pntsd);
1053 cifs_dbg(VFS, "%s: error %d getting sec desc\n", __func__, rc); 1067 cifs_dbg(VFS, "%s: error %d getting sec desc\n", __func__, rc);
1054 goto out; 1068 cifs_put_tlink(tlink);
1069 return rc;
1055 } 1070 }
1056 1071
1057 /* 1072 /*
@@ -1064,6 +1079,7 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 nmode,
1064 pnntsd = kmalloc(secdesclen, GFP_KERNEL); 1079 pnntsd = kmalloc(secdesclen, GFP_KERNEL);
1065 if (!pnntsd) { 1080 if (!pnntsd) {
1066 kfree(pntsd); 1081 kfree(pntsd);
1082 cifs_put_tlink(tlink);
1067 return -ENOMEM; 1083 return -ENOMEM;
1068 } 1084 }
1069 1085
@@ -1072,14 +1088,18 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 nmode,
1072 1088
1073 cifs_dbg(NOISY, "build_sec_desc rc: %d\n", rc); 1089 cifs_dbg(NOISY, "build_sec_desc rc: %d\n", rc);
1074 1090
1091 if (tcon->ses->server->ops->set_acl == NULL)
1092 rc = -EOPNOTSUPP;
1093
1075 if (!rc) { 1094 if (!rc) {
1076 /* Set the security descriptor */ 1095 /* Set the security descriptor */
1077 rc = set_cifs_acl(pnntsd, secdesclen, inode, path, aclflag); 1096 rc = tcon->ses->server->ops->set_acl(pnntsd, secdesclen, inode,
1097 path, aclflag);
1078 cifs_dbg(NOISY, "set_cifs_acl rc: %d\n", rc); 1098 cifs_dbg(NOISY, "set_cifs_acl rc: %d\n", rc);
1079 } 1099 }
1100 cifs_put_tlink(tlink);
1080 1101
1081 kfree(pnntsd); 1102 kfree(pnntsd);
1082 kfree(pntsd); 1103 kfree(pntsd);
1083out:
1084 return rc; 1104 return rc;
1085} 1105}
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index a245d1809ed8..86dc28c7aa5c 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -323,7 +323,8 @@ struct smb_version_operations {
323 /* async read from the server */ 323 /* async read from the server */
324 int (*async_readv)(struct cifs_readdata *); 324 int (*async_readv)(struct cifs_readdata *);
325 /* async write to the server */ 325 /* async write to the server */
326 int (*async_writev)(struct cifs_writedata *); 326 int (*async_writev)(struct cifs_writedata *,
327 void (*release)(struct kref *));
327 /* sync read from the server */ 328 /* sync read from the server */
328 int (*sync_read)(const unsigned int, struct cifsFileInfo *, 329 int (*sync_read)(const unsigned int, struct cifsFileInfo *,
329 struct cifs_io_parms *, unsigned int *, char **, 330 struct cifs_io_parms *, unsigned int *, char **,
@@ -395,6 +396,10 @@ struct smb_version_operations {
395 int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *, 396 int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *,
396 const char *, const void *, const __u16, 397 const char *, const void *, const __u16,
397 const struct nls_table *, int); 398 const struct nls_table *, int);
399 struct cifs_ntsd * (*get_acl)(struct cifs_sb_info *, struct inode *,
400 const char *, u32 *);
401 int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
402 int);
398}; 403};
399 404
400struct smb_version_values { 405struct smb_version_values {
@@ -1064,7 +1069,7 @@ struct cifs_writedata {
1064 unsigned int pagesz; 1069 unsigned int pagesz;
1065 unsigned int tailsz; 1070 unsigned int tailsz;
1066 unsigned int nr_pages; 1071 unsigned int nr_pages;
1067 struct page *pages[1]; 1072 struct page *pages[];
1068}; 1073};
1069 1074
1070/* 1075/*
diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
index 79e6e9a93a8c..d00e09dfc452 100644
--- a/fs/cifs/cifsproto.h
+++ b/fs/cifs/cifsproto.h
@@ -488,7 +488,8 @@ void cifs_readdata_release(struct kref *refcount);
488int cifs_async_readv(struct cifs_readdata *rdata); 488int cifs_async_readv(struct cifs_readdata *rdata);
489int cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid); 489int cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid);
490 490
491int cifs_async_writev(struct cifs_writedata *wdata); 491int cifs_async_writev(struct cifs_writedata *wdata,
492 void (*release)(struct kref *kref));
492void cifs_writev_complete(struct work_struct *work); 493void cifs_writev_complete(struct work_struct *work);
493struct cifs_writedata *cifs_writedata_alloc(unsigned int nr_pages, 494struct cifs_writedata *cifs_writedata_alloc(unsigned int nr_pages,
494 work_func_t complete); 495 work_func_t complete);
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
index 4d881c35eeca..f3264bd7a83d 100644
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -1910,7 +1910,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
1910 1910
1911 do { 1911 do {
1912 server = tlink_tcon(wdata->cfile->tlink)->ses->server; 1912 server = tlink_tcon(wdata->cfile->tlink)->ses->server;
1913 rc = server->ops->async_writev(wdata); 1913 rc = server->ops->async_writev(wdata, cifs_writedata_release);
1914 } while (rc == -EAGAIN); 1914 } while (rc == -EAGAIN);
1915 1915
1916 for (i = 0; i < wdata->nr_pages; i++) { 1916 for (i = 0; i < wdata->nr_pages; i++) {
@@ -1962,15 +1962,9 @@ cifs_writedata_alloc(unsigned int nr_pages, work_func_t complete)
1962{ 1962{
1963 struct cifs_writedata *wdata; 1963 struct cifs_writedata *wdata;
1964 1964
1965 /* this would overflow */
1966 if (nr_pages == 0) {
1967 cifs_dbg(VFS, "%s: called with nr_pages == 0!\n", __func__);
1968 return NULL;
1969 }
1970
1971 /* writedata + number of page pointers */ 1965 /* writedata + number of page pointers */
1972 wdata = kzalloc(sizeof(*wdata) + 1966 wdata = kzalloc(sizeof(*wdata) +
1973 sizeof(struct page *) * (nr_pages - 1), GFP_NOFS); 1967 sizeof(struct page *) * nr_pages, GFP_NOFS);
1974 if (wdata != NULL) { 1968 if (wdata != NULL) {
1975 kref_init(&wdata->refcount); 1969 kref_init(&wdata->refcount);
1976 INIT_LIST_HEAD(&wdata->list); 1970 INIT_LIST_HEAD(&wdata->list);
@@ -2031,7 +2025,8 @@ cifs_writev_callback(struct mid_q_entry *mid)
2031 2025
2032/* cifs_async_writev - send an async write, and set up mid to handle result */ 2026/* cifs_async_writev - send an async write, and set up mid to handle result */
2033int 2027int
2034cifs_async_writev(struct cifs_writedata *wdata) 2028cifs_async_writev(struct cifs_writedata *wdata,
2029 void (*release)(struct kref *kref))
2035{ 2030{
2036 int rc = -EACCES; 2031 int rc = -EACCES;
2037 WRITE_REQ *smb = NULL; 2032 WRITE_REQ *smb = NULL;
@@ -2105,7 +2100,7 @@ cifs_async_writev(struct cifs_writedata *wdata)
2105 if (rc == 0) 2100 if (rc == 0)
2106 cifs_stats_inc(&tcon->stats.cifs_stats.num_writes); 2101 cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
2107 else 2102 else
2108 kref_put(&wdata->refcount, cifs_writedata_release); 2103 kref_put(&wdata->refcount, release);
2109 2104
2110async_writev_out: 2105async_writev_out:
2111 cifs_small_buf_release(smb); 2106 cifs_small_buf_release(smb);
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 853d6d1cc822..755584684f6c 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -2043,7 +2043,8 @@ retry:
2043 } 2043 }
2044 wdata->pid = wdata->cfile->pid; 2044 wdata->pid = wdata->cfile->pid;
2045 server = tlink_tcon(wdata->cfile->tlink)->ses->server; 2045 server = tlink_tcon(wdata->cfile->tlink)->ses->server;
2046 rc = server->ops->async_writev(wdata); 2046 rc = server->ops->async_writev(wdata,
2047 cifs_writedata_release);
2047 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN); 2048 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN);
2048 2049
2049 for (i = 0; i < nr_pages; ++i) 2050 for (i = 0; i < nr_pages; ++i)
@@ -2331,9 +2332,20 @@ size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2331} 2332}
2332 2333
2333static void 2334static void
2334cifs_uncached_writev_complete(struct work_struct *work) 2335cifs_uncached_writedata_release(struct kref *refcount)
2335{ 2336{
2336 int i; 2337 int i;
2338 struct cifs_writedata *wdata = container_of(refcount,
2339 struct cifs_writedata, refcount);
2340
2341 for (i = 0; i < wdata->nr_pages; i++)
2342 put_page(wdata->pages[i]);
2343 cifs_writedata_release(refcount);
2344}
2345
2346static void
2347cifs_uncached_writev_complete(struct work_struct *work)
2348{
2337 struct cifs_writedata *wdata = container_of(work, 2349 struct cifs_writedata *wdata = container_of(work,
2338 struct cifs_writedata, work); 2350 struct cifs_writedata, work);
2339 struct inode *inode = wdata->cfile->dentry->d_inode; 2351 struct inode *inode = wdata->cfile->dentry->d_inode;
@@ -2347,12 +2359,7 @@ cifs_uncached_writev_complete(struct work_struct *work)
2347 2359
2348 complete(&wdata->done); 2360 complete(&wdata->done);
2349 2361
2350 if (wdata->result != -EAGAIN) { 2362 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2351 for (i = 0; i < wdata->nr_pages; i++)
2352 put_page(wdata->pages[i]);
2353 }
2354
2355 kref_put(&wdata->refcount, cifs_writedata_release);
2356} 2363}
2357 2364
2358/* attempt to send write to server, retry on any -EAGAIN errors */ 2365/* attempt to send write to server, retry on any -EAGAIN errors */
@@ -2370,7 +2377,8 @@ cifs_uncached_retry_writev(struct cifs_writedata *wdata)
2370 if (rc != 0) 2377 if (rc != 0)
2371 continue; 2378 continue;
2372 } 2379 }
2373 rc = server->ops->async_writev(wdata); 2380 rc = server->ops->async_writev(wdata,
2381 cifs_uncached_writedata_release);
2374 } while (rc == -EAGAIN); 2382 } while (rc == -EAGAIN);
2375 2383
2376 return rc; 2384 return rc;
@@ -2454,7 +2462,8 @@ cifs_iovec_write(struct file *file, const struct iovec *iov,
2454 wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE); 2462 wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE);
2455 rc = cifs_uncached_retry_writev(wdata); 2463 rc = cifs_uncached_retry_writev(wdata);
2456 if (rc) { 2464 if (rc) {
2457 kref_put(&wdata->refcount, cifs_writedata_release); 2465 kref_put(&wdata->refcount,
2466 cifs_uncached_writedata_release);
2458 break; 2467 break;
2459 } 2468 }
2460 2469
@@ -2496,7 +2505,7 @@ restart_loop:
2496 } 2505 }
2497 } 2506 }
2498 list_del_init(&wdata->list); 2507 list_del_init(&wdata->list);
2499 kref_put(&wdata->refcount, cifs_writedata_release); 2508 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2500 } 2509 }
2501 2510
2502 if (total_written > 0) 2511 if (total_written > 0)
@@ -2559,8 +2568,8 @@ cifs_writev(struct kiocb *iocb, const struct iovec *iov,
2559 if (rc > 0) { 2568 if (rc > 0) {
2560 ssize_t err; 2569 ssize_t err;
2561 2570
2562 err = generic_write_sync(file, pos, rc); 2571 err = generic_write_sync(file, iocb->ki_pos - rc, rc);
2563 if (err < 0 && rc > 0) 2572 if (err < 0)
2564 rc = err; 2573 rc = err;
2565 } 2574 }
2566 2575
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index 9cb9679d7357..be58b8fcdb3c 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -527,10 +527,15 @@ static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path,
527 return PTR_ERR(tlink); 527 return PTR_ERR(tlink);
528 tcon = tlink_tcon(tlink); 528 tcon = tlink_tcon(tlink);
529 529
530 rc = CIFSSMBQAllEAs(xid, tcon, path, "SETFILEBITS", 530 if (tcon->ses->server->ops->query_all_EAs == NULL) {
531 ea_value, 4 /* size of buf */, cifs_sb->local_nls, 531 cifs_put_tlink(tlink);
532 cifs_sb->mnt_cifs_flags & 532 return -EOPNOTSUPP;
533 CIFS_MOUNT_MAP_SPECIAL_CHR); 533 }
534
535 rc = tcon->ses->server->ops->query_all_EAs(xid, tcon, path,
536 "SETFILEBITS", ea_value, 4 /* size of buf */,
537 cifs_sb->local_nls,
538 cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
534 cifs_put_tlink(tlink); 539 cifs_put_tlink(tlink);
535 if (rc < 0) 540 if (rc < 0)
536 return (int)rc; 541 return (int)rc;
diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
index 9ac5bfc9cc56..bfd66d84831e 100644
--- a/fs/cifs/smb1ops.c
+++ b/fs/cifs/smb1ops.c
@@ -1067,6 +1067,14 @@ struct smb_version_operations smb1_operations = {
1067 .query_mf_symlink = cifs_query_mf_symlink, 1067 .query_mf_symlink = cifs_query_mf_symlink,
1068 .create_mf_symlink = cifs_create_mf_symlink, 1068 .create_mf_symlink = cifs_create_mf_symlink,
1069 .is_read_op = cifs_is_read_op, 1069 .is_read_op = cifs_is_read_op,
1070#ifdef CONFIG_CIFS_XATTR
1071 .query_all_EAs = CIFSSMBQAllEAs,
1072 .set_EA = CIFSSMBSetEA,
1073#endif /* CIFS_XATTR */
1074#ifdef CONFIG_CIFS_ACL
1075 .get_acl = get_cifs_acl,
1076 .set_acl = set_cifs_acl,
1077#endif /* CIFS_ACL */
1070}; 1078};
1071 1079
1072struct smb_version_values smb1_values = { 1080struct smb_version_values smb1_values = {
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 2013234b73ad..a3f7a9c3cc69 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -1890,7 +1890,8 @@ smb2_writev_callback(struct mid_q_entry *mid)
1890 1890
1891/* smb2_async_writev - send an async write, and set up mid to handle result */ 1891/* smb2_async_writev - send an async write, and set up mid to handle result */
1892int 1892int
1893smb2_async_writev(struct cifs_writedata *wdata) 1893smb2_async_writev(struct cifs_writedata *wdata,
1894 void (*release)(struct kref *kref))
1894{ 1895{
1895 int rc = -EACCES; 1896 int rc = -EACCES;
1896 struct smb2_write_req *req = NULL; 1897 struct smb2_write_req *req = NULL;
@@ -1938,7 +1939,7 @@ smb2_async_writev(struct cifs_writedata *wdata)
1938 smb2_writev_callback, wdata, 0); 1939 smb2_writev_callback, wdata, 0);
1939 1940
1940 if (rc) { 1941 if (rc) {
1941 kref_put(&wdata->refcount, cifs_writedata_release); 1942 kref_put(&wdata->refcount, release);
1942 cifs_stats_fail_inc(tcon, SMB2_WRITE_HE); 1943 cifs_stats_fail_inc(tcon, SMB2_WRITE_HE);
1943 } 1944 }
1944 1945
diff --git a/fs/cifs/smb2proto.h b/fs/cifs/smb2proto.h
index 93adc64666f3..0ce48db20a65 100644
--- a/fs/cifs/smb2proto.h
+++ b/fs/cifs/smb2proto.h
@@ -123,7 +123,8 @@ extern int SMB2_get_srv_num(const unsigned int xid, struct cifs_tcon *tcon,
123extern int smb2_async_readv(struct cifs_readdata *rdata); 123extern int smb2_async_readv(struct cifs_readdata *rdata);
124extern int SMB2_read(const unsigned int xid, struct cifs_io_parms *io_parms, 124extern int SMB2_read(const unsigned int xid, struct cifs_io_parms *io_parms,
125 unsigned int *nbytes, char **buf, int *buf_type); 125 unsigned int *nbytes, char **buf, int *buf_type);
126extern int smb2_async_writev(struct cifs_writedata *wdata); 126extern int smb2_async_writev(struct cifs_writedata *wdata,
127 void (*release)(struct kref *kref));
127extern int SMB2_write(const unsigned int xid, struct cifs_io_parms *io_parms, 128extern int SMB2_write(const unsigned int xid, struct cifs_io_parms *io_parms,
128 unsigned int *nbytes, struct kvec *iov, int n_vec); 129 unsigned int *nbytes, struct kvec *iov, int n_vec);
129extern int SMB2_echo(struct TCP_Server_Info *server); 130extern int SMB2_echo(struct TCP_Server_Info *server);
diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c
index 95c43bb20335..5ac836a86b18 100644
--- a/fs/cifs/xattr.c
+++ b/fs/cifs/xattr.c
@@ -176,8 +176,12 @@ int cifs_setxattr(struct dentry *direntry, const char *ea_name,
176 rc = -ENOMEM; 176 rc = -ENOMEM;
177 } else { 177 } else {
178 memcpy(pacl, ea_value, value_size); 178 memcpy(pacl, ea_value, value_size);
179 rc = set_cifs_acl(pacl, value_size, 179 if (pTcon->ses->server->ops->set_acl)
180 direntry->d_inode, full_path, CIFS_ACL_DACL); 180 rc = pTcon->ses->server->ops->set_acl(pacl,
181 value_size, direntry->d_inode,
182 full_path, CIFS_ACL_DACL);
183 else
184 rc = -EOPNOTSUPP;
181 if (rc == 0) /* force revalidate of the inode */ 185 if (rc == 0) /* force revalidate of the inode */
182 CIFS_I(direntry->d_inode)->time = 0; 186 CIFS_I(direntry->d_inode)->time = 0;
183 kfree(pacl); 187 kfree(pacl);
@@ -323,8 +327,11 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name,
323 u32 acllen; 327 u32 acllen;
324 struct cifs_ntsd *pacl; 328 struct cifs_ntsd *pacl;
325 329
326 pacl = get_cifs_acl(cifs_sb, direntry->d_inode, 330 if (pTcon->ses->server->ops->get_acl == NULL)
327 full_path, &acllen); 331 goto get_ea_exit; /* rc already EOPNOTSUPP */
332
333 pacl = pTcon->ses->server->ops->get_acl(cifs_sb,
334 direntry->d_inode, full_path, &acllen);
328 if (IS_ERR(pacl)) { 335 if (IS_ERR(pacl)) {
329 rc = PTR_ERR(pacl); 336 rc = PTR_ERR(pacl);
330 cifs_dbg(VFS, "%s: error %zd getting sec desc\n", 337 cifs_dbg(VFS, "%s: error %zd getting sec desc\n",
diff --git a/fs/exec.c b/fs/exec.c
index e1529b4c79b1..3d78fccdd723 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -748,11 +748,10 @@ EXPORT_SYMBOL(setup_arg_pages);
748 748
749#endif /* CONFIG_MMU */ 749#endif /* CONFIG_MMU */
750 750
751struct file *open_exec(const char *name) 751static struct file *do_open_exec(struct filename *name)
752{ 752{
753 struct file *file; 753 struct file *file;
754 int err; 754 int err;
755 struct filename tmp = { .name = name };
756 static const struct open_flags open_exec_flags = { 755 static const struct open_flags open_exec_flags = {
757 .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, 756 .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
758 .acc_mode = MAY_EXEC | MAY_OPEN, 757 .acc_mode = MAY_EXEC | MAY_OPEN,
@@ -760,7 +759,7 @@ struct file *open_exec(const char *name)
760 .lookup_flags = LOOKUP_FOLLOW, 759 .lookup_flags = LOOKUP_FOLLOW,
761 }; 760 };
762 761
763 file = do_filp_open(AT_FDCWD, &tmp, &open_exec_flags); 762 file = do_filp_open(AT_FDCWD, name, &open_exec_flags);
764 if (IS_ERR(file)) 763 if (IS_ERR(file))
765 goto out; 764 goto out;
766 765
@@ -784,6 +783,12 @@ exit:
784 fput(file); 783 fput(file);
785 return ERR_PTR(err); 784 return ERR_PTR(err);
786} 785}
786
787struct file *open_exec(const char *name)
788{
789 struct filename tmp = { .name = name };
790 return do_open_exec(&tmp);
791}
787EXPORT_SYMBOL(open_exec); 792EXPORT_SYMBOL(open_exec);
788 793
789int kernel_read(struct file *file, loff_t offset, 794int kernel_read(struct file *file, loff_t offset,
@@ -1162,7 +1167,7 @@ int prepare_bprm_creds(struct linux_binprm *bprm)
1162 return -ENOMEM; 1167 return -ENOMEM;
1163} 1168}
1164 1169
1165void free_bprm(struct linux_binprm *bprm) 1170static void free_bprm(struct linux_binprm *bprm)
1166{ 1171{
1167 free_arg_pages(bprm); 1172 free_arg_pages(bprm);
1168 if (bprm->cred) { 1173 if (bprm->cred) {
@@ -1432,7 +1437,7 @@ static int exec_binprm(struct linux_binprm *bprm)
1432/* 1437/*
1433 * sys_execve() executes a new program. 1438 * sys_execve() executes a new program.
1434 */ 1439 */
1435static int do_execve_common(const char *filename, 1440static int do_execve_common(struct filename *filename,
1436 struct user_arg_ptr argv, 1441 struct user_arg_ptr argv,
1437 struct user_arg_ptr envp) 1442 struct user_arg_ptr envp)
1438{ 1443{
@@ -1441,6 +1446,9 @@ static int do_execve_common(const char *filename,
1441 struct files_struct *displaced; 1446 struct files_struct *displaced;
1442 int retval; 1447 int retval;
1443 1448
1449 if (IS_ERR(filename))
1450 return PTR_ERR(filename);
1451
1444 /* 1452 /*
1445 * We move the actual failure in case of RLIMIT_NPROC excess from 1453 * We move the actual failure in case of RLIMIT_NPROC excess from
1446 * set*uid() to execve() because too many poorly written programs 1454 * set*uid() to execve() because too many poorly written programs
@@ -1473,7 +1481,7 @@ static int do_execve_common(const char *filename,
1473 check_unsafe_exec(bprm); 1481 check_unsafe_exec(bprm);
1474 current->in_execve = 1; 1482 current->in_execve = 1;
1475 1483
1476 file = open_exec(filename); 1484 file = do_open_exec(filename);
1477 retval = PTR_ERR(file); 1485 retval = PTR_ERR(file);
1478 if (IS_ERR(file)) 1486 if (IS_ERR(file))
1479 goto out_unmark; 1487 goto out_unmark;
@@ -1481,8 +1489,7 @@ static int do_execve_common(const char *filename,
1481 sched_exec(); 1489 sched_exec();
1482 1490
1483 bprm->file = file; 1491 bprm->file = file;
1484 bprm->filename = filename; 1492 bprm->filename = bprm->interp = filename->name;
1485 bprm->interp = filename;
1486 1493
1487 retval = bprm_mm_init(bprm); 1494 retval = bprm_mm_init(bprm);
1488 if (retval) 1495 if (retval)
@@ -1523,6 +1530,7 @@ static int do_execve_common(const char *filename,
1523 acct_update_integrals(current); 1530 acct_update_integrals(current);
1524 task_numa_free(current); 1531 task_numa_free(current);
1525 free_bprm(bprm); 1532 free_bprm(bprm);
1533 putname(filename);
1526 if (displaced) 1534 if (displaced)
1527 put_files_struct(displaced); 1535 put_files_struct(displaced);
1528 return retval; 1536 return retval;
@@ -1544,10 +1552,11 @@ out_files:
1544 if (displaced) 1552 if (displaced)
1545 reset_files_struct(displaced); 1553 reset_files_struct(displaced);
1546out_ret: 1554out_ret:
1555 putname(filename);
1547 return retval; 1556 return retval;
1548} 1557}
1549 1558
1550int do_execve(const char *filename, 1559int do_execve(struct filename *filename,
1551 const char __user *const __user *__argv, 1560 const char __user *const __user *__argv,
1552 const char __user *const __user *__envp) 1561 const char __user *const __user *__envp)
1553{ 1562{
@@ -1557,7 +1566,7 @@ int do_execve(const char *filename,
1557} 1566}
1558 1567
1559#ifdef CONFIG_COMPAT 1568#ifdef CONFIG_COMPAT
1560static int compat_do_execve(const char *filename, 1569static int compat_do_execve(struct filename *filename,
1561 const compat_uptr_t __user *__argv, 1570 const compat_uptr_t __user *__argv,
1562 const compat_uptr_t __user *__envp) 1571 const compat_uptr_t __user *__envp)
1563{ 1572{
@@ -1607,25 +1616,13 @@ SYSCALL_DEFINE3(execve,
1607 const char __user *const __user *, argv, 1616 const char __user *const __user *, argv,
1608 const char __user *const __user *, envp) 1617 const char __user *const __user *, envp)
1609{ 1618{
1610 struct filename *path = getname(filename); 1619 return do_execve(getname(filename), argv, envp);
1611 int error = PTR_ERR(path);
1612 if (!IS_ERR(path)) {
1613 error = do_execve(path->name, argv, envp);
1614 putname(path);
1615 }
1616 return error;
1617} 1620}
1618#ifdef CONFIG_COMPAT 1621#ifdef CONFIG_COMPAT
1619asmlinkage long compat_sys_execve(const char __user * filename, 1622asmlinkage long compat_sys_execve(const char __user * filename,
1620 const compat_uptr_t __user * argv, 1623 const compat_uptr_t __user * argv,
1621 const compat_uptr_t __user * envp) 1624 const compat_uptr_t __user * envp)
1622{ 1625{
1623 struct filename *path = getname(filename); 1626 return compat_do_execve(getname(filename), argv, envp);
1624 int error = PTR_ERR(path);
1625 if (!IS_ERR(path)) {
1626 error = compat_do_execve(path->name, argv, envp);
1627 putname(path);
1628 }
1629 return error;
1630} 1627}
1631#endif 1628#endif
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 43e64f6022eb..1a5073959f32 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -152,7 +152,7 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
152 if (ret > 0) { 152 if (ret > 0) {
153 ssize_t err; 153 ssize_t err;
154 154
155 err = generic_write_sync(file, pos, ret); 155 err = generic_write_sync(file, iocb->ki_pos - ret, ret);
156 if (err < 0 && ret > 0) 156 if (err < 0 && ret > 0)
157 ret = err; 157 ret = err;
158 } 158 }
diff --git a/fs/file.c b/fs/file.c
index 771578b33fb6..db25c2bdfe46 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -34,7 +34,7 @@ static void *alloc_fdmem(size_t size)
34 * vmalloc() if the allocation size will be considered "large" by the VM. 34 * vmalloc() if the allocation size will be considered "large" by the VM.
35 */ 35 */
36 if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) { 36 if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {
37 void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN); 37 void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN|__GFP_NORETRY);
38 if (data != NULL) 38 if (data != NULL)
39 return data; 39 return data;
40 } 40 }
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c
index 3bd5ee45f7b3..46325d5c34fc 100644
--- a/fs/jfs/xattr.c
+++ b/fs/jfs/xattr.c
@@ -854,9 +854,6 @@ int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
854 int rc; 854 int rc;
855 tid_t tid; 855 tid_t tid;
856 856
857 if ((rc = can_set_xattr(inode, name, value, value_len)))
858 return rc;
859
860 /* 857 /*
861 * If this is a request for a synthetic attribute in the system.* 858 * If this is a request for a synthetic attribute in the system.*
862 * namespace use the generic infrastructure to resolve a handler 859 * namespace use the generic infrastructure to resolve a handler
@@ -865,6 +862,9 @@ int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
865 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 862 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
866 return generic_setxattr(dentry, name, value, value_len, flags); 863 return generic_setxattr(dentry, name, value, value_len, flags);
867 864
865 if ((rc = can_set_xattr(inode, name, value, value_len)))
866 return rc;
867
868 if (value == NULL) { /* empty EA, do not remove */ 868 if (value == NULL) { /* empty EA, do not remove */
869 value = ""; 869 value = "";
870 value_len = 0; 870 value_len = 0;
@@ -1034,9 +1034,6 @@ int jfs_removexattr(struct dentry *dentry, const char *name)
1034 int rc; 1034 int rc;
1035 tid_t tid; 1035 tid_t tid;
1036 1036
1037 if ((rc = can_set_xattr(inode, name, NULL, 0)))
1038 return rc;
1039
1040 /* 1037 /*
1041 * If this is a request for a synthetic attribute in the system.* 1038 * If this is a request for a synthetic attribute in the system.*
1042 * namespace use the generic infrastructure to resolve a handler 1039 * namespace use the generic infrastructure to resolve a handler
@@ -1045,6 +1042,9 @@ int jfs_removexattr(struct dentry *dentry, const char *name)
1045 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 1042 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
1046 return generic_removexattr(dentry, name); 1043 return generic_removexattr(dentry, name);
1047 1044
1045 if ((rc = can_set_xattr(inode, name, NULL, 0)))
1046 return rc;
1047
1048 tid = txBegin(inode->i_sb, 0); 1048 tid = txBegin(inode->i_sb, 0);
1049 mutex_lock(&ji->commit_mutex); 1049 mutex_lock(&ji->commit_mutex);
1050 rc = __jfs_setxattr(tid, dentry->d_inode, name, NULL, 0, XATTR_REPLACE); 1050 rc = __jfs_setxattr(tid, dentry->d_inode, name, NULL, 0, XATTR_REPLACE);
@@ -1061,7 +1061,7 @@ int jfs_removexattr(struct dentry *dentry, const char *name)
1061 * attributes are handled directly. 1061 * attributes are handled directly.
1062 */ 1062 */
1063const struct xattr_handler *jfs_xattr_handlers[] = { 1063const struct xattr_handler *jfs_xattr_handlers[] = {
1064#ifdef JFS_POSIX_ACL 1064#ifdef CONFIG_JFS_POSIX_ACL
1065 &posix_acl_access_xattr_handler, 1065 &posix_acl_access_xattr_handler,
1066 &posix_acl_default_xattr_handler, 1066 &posix_acl_default_xattr_handler,
1067#endif 1067#endif
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index 5104cf5d25c5..bd6e18be6e1a 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -187,19 +187,23 @@ static void kernfs_deactivate(struct kernfs_node *kn)
187 187
188 kn->u.completion = (void *)&wait; 188 kn->u.completion = (void *)&wait;
189 189
190 rwsem_acquire(&kn->dep_map, 0, 0, _RET_IP_); 190 if (kn->flags & KERNFS_LOCKDEP)
191 rwsem_acquire(&kn->dep_map, 0, 0, _RET_IP_);
191 /* atomic_add_return() is a mb(), put_active() will always see 192 /* atomic_add_return() is a mb(), put_active() will always see
192 * the updated kn->u.completion. 193 * the updated kn->u.completion.
193 */ 194 */
194 v = atomic_add_return(KN_DEACTIVATED_BIAS, &kn->active); 195 v = atomic_add_return(KN_DEACTIVATED_BIAS, &kn->active);
195 196
196 if (v != KN_DEACTIVATED_BIAS) { 197 if (v != KN_DEACTIVATED_BIAS) {
197 lock_contended(&kn->dep_map, _RET_IP_); 198 if (kn->flags & KERNFS_LOCKDEP)
199 lock_contended(&kn->dep_map, _RET_IP_);
198 wait_for_completion(&wait); 200 wait_for_completion(&wait);
199 } 201 }
200 202
201 lock_acquired(&kn->dep_map, _RET_IP_); 203 if (kn->flags & KERNFS_LOCKDEP) {
202 rwsem_release(&kn->dep_map, 1, _RET_IP_); 204 lock_acquired(&kn->dep_map, _RET_IP_);
205 rwsem_release(&kn->dep_map, 1, _RET_IP_);
206 }
203} 207}
204 208
205/** 209/**
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index e066a3902973..ab798a88ec1d 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -779,6 +779,7 @@ nlmsvc_grant_blocked(struct nlm_block *block)
779 struct nlm_file *file = block->b_file; 779 struct nlm_file *file = block->b_file;
780 struct nlm_lock *lock = &block->b_call->a_args.lock; 780 struct nlm_lock *lock = &block->b_call->a_args.lock;
781 int error; 781 int error;
782 loff_t fl_start, fl_end;
782 783
783 dprintk("lockd: grant blocked lock %p\n", block); 784 dprintk("lockd: grant blocked lock %p\n", block);
784 785
@@ -796,9 +797,16 @@ nlmsvc_grant_blocked(struct nlm_block *block)
796 } 797 }
797 798
798 /* Try the lock operation again */ 799 /* Try the lock operation again */
800 /* vfs_lock_file() can mangle fl_start and fl_end, but we need
801 * them unchanged for the GRANT_MSG
802 */
799 lock->fl.fl_flags |= FL_SLEEP; 803 lock->fl.fl_flags |= FL_SLEEP;
804 fl_start = lock->fl.fl_start;
805 fl_end = lock->fl.fl_end;
800 error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL); 806 error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL);
801 lock->fl.fl_flags &= ~FL_SLEEP; 807 lock->fl.fl_flags &= ~FL_SLEEP;
808 lock->fl.fl_start = fl_start;
809 lock->fl.fl_end = fl_end;
802 810
803 switch (error) { 811 switch (error) {
804 case 0: 812 case 0:
diff --git a/fs/namei.c b/fs/namei.c
index d580df2e6804..385f7817bfcc 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -196,6 +196,7 @@ recopy:
196 goto error; 196 goto error;
197 197
198 result->uptr = filename; 198 result->uptr = filename;
199 result->aname = NULL;
199 audit_getname(result); 200 audit_getname(result);
200 return result; 201 return result;
201 202
@@ -210,6 +211,35 @@ getname(const char __user * filename)
210 return getname_flags(filename, 0, NULL); 211 return getname_flags(filename, 0, NULL);
211} 212}
212 213
214/*
215 * The "getname_kernel()" interface doesn't do pathnames longer
216 * than EMBEDDED_NAME_MAX. Deal with it - you're a kernel user.
217 */
218struct filename *
219getname_kernel(const char * filename)
220{
221 struct filename *result;
222 char *kname;
223 int len;
224
225 len = strlen(filename);
226 if (len >= EMBEDDED_NAME_MAX)
227 return ERR_PTR(-ENAMETOOLONG);
228
229 result = __getname();
230 if (unlikely(!result))
231 return ERR_PTR(-ENOMEM);
232
233 kname = (char *)result + sizeof(*result);
234 result->name = kname;
235 result->uptr = NULL;
236 result->aname = NULL;
237 result->separate = false;
238
239 strlcpy(kname, filename, EMBEDDED_NAME_MAX);
240 return result;
241}
242
213#ifdef CONFIG_AUDITSYSCALL 243#ifdef CONFIG_AUDITSYSCALL
214void putname(struct filename *name) 244void putname(struct filename *name)
215{ 245{
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index be38b573495a..4a48fe4b84b6 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -1846,6 +1846,11 @@ int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
1846 GFP_KERNEL)) { 1846 GFP_KERNEL)) {
1847 SetPageUptodate(page); 1847 SetPageUptodate(page);
1848 unlock_page(page); 1848 unlock_page(page);
1849 /*
1850 * add_to_page_cache_lru() grabs an extra page refcount.
1851 * Drop it here to avoid leaking this page later.
1852 */
1853 page_cache_release(page);
1849 } else 1854 } else
1850 __free_page(page); 1855 __free_page(page);
1851 1856
diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c
index 9a5ca03fa539..871d6eda8dba 100644
--- a/fs/nfs/nfs3acl.c
+++ b/fs/nfs/nfs3acl.c
@@ -80,7 +80,7 @@ struct posix_acl *nfs3_get_acl(struct inode *inode, int type)
80 } 80 }
81 81
82 if (res.acl_access != NULL) { 82 if (res.acl_access != NULL) {
83 if (posix_acl_equiv_mode(res.acl_access, NULL) || 83 if ((posix_acl_equiv_mode(res.acl_access, NULL) == 0) ||
84 res.acl_access->a_count == 0) { 84 res.acl_access->a_count == 0) {
85 posix_acl_release(res.acl_access); 85 posix_acl_release(res.acl_access);
86 res.acl_access = NULL; 86 res.acl_access = NULL;
@@ -113,7 +113,7 @@ getout:
113 return ERR_PTR(status); 113 return ERR_PTR(status);
114} 114}
115 115
116int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, 116static int __nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
117 struct posix_acl *dfacl) 117 struct posix_acl *dfacl)
118{ 118{
119 struct nfs_server *server = NFS_SERVER(inode); 119 struct nfs_server *server = NFS_SERVER(inode);
@@ -198,6 +198,15 @@ out:
198 return status; 198 return status;
199} 199}
200 200
201int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
202 struct posix_acl *dfacl)
203{
204 int ret;
205 ret = __nfs3_proc_setacls(inode, acl, dfacl);
206 return (ret == -EOPNOTSUPP) ? 0 : ret;
207
208}
209
201int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type) 210int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type)
202{ 211{
203 struct posix_acl *alloc = NULL, *dfacl = NULL; 212 struct posix_acl *alloc = NULL, *dfacl = NULL;
@@ -225,7 +234,7 @@ int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type)
225 if (IS_ERR(alloc)) 234 if (IS_ERR(alloc))
226 goto fail; 235 goto fail;
227 } 236 }
228 status = nfs3_proc_setacls(inode, acl, dfacl); 237 status = __nfs3_proc_setacls(inode, acl, dfacl);
229 posix_acl_release(alloc); 238 posix_acl_release(alloc);
230 return status; 239 return status;
231 240
@@ -233,25 +242,6 @@ fail:
233 return PTR_ERR(alloc); 242 return PTR_ERR(alloc);
234} 243}
235 244
236int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode,
237 umode_t mode)
238{
239 struct posix_acl *default_acl, *acl;
240 int error;
241
242 error = posix_acl_create(dir, &mode, &default_acl, &acl);
243 if (error)
244 return (error == -EOPNOTSUPP) ? 0 : error;
245
246 error = nfs3_proc_setacls(inode, acl, default_acl);
247
248 if (acl)
249 posix_acl_release(acl);
250 if (default_acl)
251 posix_acl_release(default_acl);
252 return error;
253}
254
255const struct xattr_handler *nfs3_xattr_handlers[] = { 245const struct xattr_handler *nfs3_xattr_handlers[] = {
256 &posix_acl_access_xattr_handler, 246 &posix_acl_access_xattr_handler,
257 &posix_acl_default_xattr_handler, 247 &posix_acl_default_xattr_handler,
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index dbb3e1f30c68..860ad26a5590 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -170,7 +170,7 @@ void nfs41_shutdown_client(struct nfs_client *clp)
170void nfs40_shutdown_client(struct nfs_client *clp) 170void nfs40_shutdown_client(struct nfs_client *clp)
171{ 171{
172 if (clp->cl_slot_tbl) { 172 if (clp->cl_slot_tbl) {
173 nfs4_release_slot_table(clp->cl_slot_tbl); 173 nfs4_shutdown_slot_table(clp->cl_slot_tbl);
174 kfree(clp->cl_slot_tbl); 174 kfree(clp->cl_slot_tbl);
175 } 175 }
176} 176}
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 42da6af77587..2da6a698b8f7 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1620,15 +1620,15 @@ static void nfs4_open_confirm_prepare(struct rpc_task *task, void *calldata)
1620{ 1620{
1621 struct nfs4_opendata *data = calldata; 1621 struct nfs4_opendata *data = calldata;
1622 1622
1623 nfs40_setup_sequence(data->o_arg.server, &data->o_arg.seq_args, 1623 nfs40_setup_sequence(data->o_arg.server, &data->c_arg.seq_args,
1624 &data->o_res.seq_res, task); 1624 &data->c_res.seq_res, task);
1625} 1625}
1626 1626
1627static void nfs4_open_confirm_done(struct rpc_task *task, void *calldata) 1627static void nfs4_open_confirm_done(struct rpc_task *task, void *calldata)
1628{ 1628{
1629 struct nfs4_opendata *data = calldata; 1629 struct nfs4_opendata *data = calldata;
1630 1630
1631 nfs40_sequence_done(task, &data->o_res.seq_res); 1631 nfs40_sequence_done(task, &data->c_res.seq_res);
1632 1632
1633 data->rpc_status = task->tk_status; 1633 data->rpc_status = task->tk_status;
1634 if (data->rpc_status == 0) { 1634 if (data->rpc_status == 0) {
@@ -1686,7 +1686,7 @@ static int _nfs4_proc_open_confirm(struct nfs4_opendata *data)
1686 }; 1686 };
1687 int status; 1687 int status;
1688 1688
1689 nfs4_init_sequence(&data->o_arg.seq_args, &data->o_res.seq_res, 1); 1689 nfs4_init_sequence(&data->c_arg.seq_args, &data->c_res.seq_res, 1);
1690 kref_get(&data->kref); 1690 kref_get(&data->kref);
1691 data->rpc_done = 0; 1691 data->rpc_done = 0;
1692 data->rpc_status = 0; 1692 data->rpc_status = 0;
diff --git a/fs/nfs/nfs4session.c b/fs/nfs/nfs4session.c
index cf883c7ae053..e799dc3c3b1d 100644
--- a/fs/nfs/nfs4session.c
+++ b/fs/nfs/nfs4session.c
@@ -231,14 +231,23 @@ out:
231 return ret; 231 return ret;
232} 232}
233 233
234/*
235 * nfs4_release_slot_table - release all slot table entries
236 */
237static void nfs4_release_slot_table(struct nfs4_slot_table *tbl)
238{
239 nfs4_shrink_slot_table(tbl, 0);
240}
241
234/** 242/**
235 * nfs4_release_slot_table - release resources attached to a slot table 243 * nfs4_shutdown_slot_table - release resources attached to a slot table
236 * @tbl: slot table to shut down 244 * @tbl: slot table to shut down
237 * 245 *
238 */ 246 */
239void nfs4_release_slot_table(struct nfs4_slot_table *tbl) 247void nfs4_shutdown_slot_table(struct nfs4_slot_table *tbl)
240{ 248{
241 nfs4_shrink_slot_table(tbl, 0); 249 nfs4_release_slot_table(tbl);
250 rpc_destroy_wait_queue(&tbl->slot_tbl_waitq);
242} 251}
243 252
244/** 253/**
@@ -422,7 +431,7 @@ void nfs41_update_target_slotid(struct nfs4_slot_table *tbl,
422 spin_unlock(&tbl->slot_tbl_lock); 431 spin_unlock(&tbl->slot_tbl_lock);
423} 432}
424 433
425static void nfs4_destroy_session_slot_tables(struct nfs4_session *session) 434static void nfs4_release_session_slot_tables(struct nfs4_session *session)
426{ 435{
427 nfs4_release_slot_table(&session->fc_slot_table); 436 nfs4_release_slot_table(&session->fc_slot_table);
428 nfs4_release_slot_table(&session->bc_slot_table); 437 nfs4_release_slot_table(&session->bc_slot_table);
@@ -450,7 +459,7 @@ int nfs4_setup_session_slot_tables(struct nfs4_session *ses)
450 if (status && tbl->slots == NULL) 459 if (status && tbl->slots == NULL)
451 /* Fore and back channel share a connection so get 460 /* Fore and back channel share a connection so get
452 * both slot tables or neither */ 461 * both slot tables or neither */
453 nfs4_destroy_session_slot_tables(ses); 462 nfs4_release_session_slot_tables(ses);
454 return status; 463 return status;
455} 464}
456 465
@@ -470,6 +479,12 @@ struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp)
470 return session; 479 return session;
471} 480}
472 481
482static void nfs4_destroy_session_slot_tables(struct nfs4_session *session)
483{
484 nfs4_shutdown_slot_table(&session->fc_slot_table);
485 nfs4_shutdown_slot_table(&session->bc_slot_table);
486}
487
473void nfs4_destroy_session(struct nfs4_session *session) 488void nfs4_destroy_session(struct nfs4_session *session)
474{ 489{
475 struct rpc_xprt *xprt; 490 struct rpc_xprt *xprt;
diff --git a/fs/nfs/nfs4session.h b/fs/nfs/nfs4session.h
index 232306100651..b34ada9bc6a2 100644
--- a/fs/nfs/nfs4session.h
+++ b/fs/nfs/nfs4session.h
@@ -74,7 +74,7 @@ enum nfs4_session_state {
74 74
75extern int nfs4_setup_slot_table(struct nfs4_slot_table *tbl, 75extern int nfs4_setup_slot_table(struct nfs4_slot_table *tbl,
76 unsigned int max_reqs, const char *queue); 76 unsigned int max_reqs, const char *queue);
77extern void nfs4_release_slot_table(struct nfs4_slot_table *tbl); 77extern void nfs4_shutdown_slot_table(struct nfs4_slot_table *tbl);
78extern struct nfs4_slot *nfs4_alloc_slot(struct nfs4_slot_table *tbl); 78extern struct nfs4_slot *nfs4_alloc_slot(struct nfs4_slot_table *tbl);
79extern void nfs4_free_slot(struct nfs4_slot_table *tbl, struct nfs4_slot *slot); 79extern void nfs4_free_slot(struct nfs4_slot_table *tbl, struct nfs4_slot *slot);
80extern void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl); 80extern void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl);
diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c
index d3a587144222..d190e33d0ec2 100644
--- a/fs/nfsd/nfs4acl.c
+++ b/fs/nfsd/nfs4acl.c
@@ -151,17 +151,15 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry,
151 pacl = posix_acl_from_mode(inode->i_mode, GFP_KERNEL); 151 pacl = posix_acl_from_mode(inode->i_mode, GFP_KERNEL);
152 if (IS_ERR(pacl)) 152 if (IS_ERR(pacl))
153 return PTR_ERR(pacl); 153 return PTR_ERR(pacl);
154 /* allocate for worst case: one (deny, allow) pair each: */
155 size += 2 * pacl->a_count;
156 } 154 }
155 /* allocate for worst case: one (deny, allow) pair each: */
156 size += 2 * pacl->a_count;
157 157
158 if (S_ISDIR(inode->i_mode)) { 158 if (S_ISDIR(inode->i_mode)) {
159 flags = NFS4_ACL_DIR; 159 flags = NFS4_ACL_DIR;
160 dpacl = get_acl(inode, ACL_TYPE_DEFAULT); 160 dpacl = get_acl(inode, ACL_TYPE_DEFAULT);
161 if (dpacl) 161 if (dpacl)
162 size += 2 * dpacl->a_count; 162 size += 2 * dpacl->a_count;
163 } else {
164 dpacl = NULL;
165 } 163 }
166 164
167 *acl = nfs4_acl_new(size); 165 *acl = nfs4_acl_new(size);
@@ -170,8 +168,7 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry,
170 goto out; 168 goto out;
171 } 169 }
172 170
173 if (pacl) 171 _posix_to_nfsv4_one(pacl, *acl, flags & ~NFS4_ACL_TYPE_DEFAULT);
174 _posix_to_nfsv4_one(pacl, *acl, flags & ~NFS4_ACL_TYPE_DEFAULT);
175 172
176 if (dpacl) 173 if (dpacl)
177 _posix_to_nfsv4_one(dpacl, *acl, flags | NFS4_ACL_TYPE_DEFAULT); 174 _posix_to_nfsv4_one(dpacl, *acl, flags | NFS4_ACL_TYPE_DEFAULT);
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c
index ea4ba9daeb47..db9bd8a31725 100644
--- a/fs/ntfs/file.c
+++ b/fs/ntfs/file.c
@@ -2134,7 +2134,7 @@ static ssize_t ntfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
2134 ret = ntfs_file_aio_write_nolock(iocb, iov, nr_segs, &iocb->ki_pos); 2134 ret = ntfs_file_aio_write_nolock(iocb, iov, nr_segs, &iocb->ki_pos);
2135 mutex_unlock(&inode->i_mutex); 2135 mutex_unlock(&inode->i_mutex);
2136 if (ret > 0) { 2136 if (ret > 0) {
2137 int err = generic_write_sync(file, pos, ret); 2137 int err = generic_write_sync(file, iocb->ki_pos - ret, ret);
2138 if (err < 0) 2138 if (err < 0)
2139 ret = err; 2139 ret = err;
2140 } 2140 }
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 8750ae1b8636..e2edff38be52 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -4742,6 +4742,7 @@ int ocfs2_add_clusters_in_btree(handle_t *handle,
4742 enum ocfs2_alloc_restarted *reason_ret) 4742 enum ocfs2_alloc_restarted *reason_ret)
4743{ 4743{
4744 int status = 0, err = 0; 4744 int status = 0, err = 0;
4745 int need_free = 0;
4745 int free_extents; 4746 int free_extents;
4746 enum ocfs2_alloc_restarted reason = RESTART_NONE; 4747 enum ocfs2_alloc_restarted reason = RESTART_NONE;
4747 u32 bit_off, num_bits; 4748 u32 bit_off, num_bits;
@@ -4796,7 +4797,8 @@ int ocfs2_add_clusters_in_btree(handle_t *handle,
4796 OCFS2_JOURNAL_ACCESS_WRITE); 4797 OCFS2_JOURNAL_ACCESS_WRITE);
4797 if (status < 0) { 4798 if (status < 0) {
4798 mlog_errno(status); 4799 mlog_errno(status);
4799 goto leave; 4800 need_free = 1;
4801 goto bail;
4800 } 4802 }
4801 4803
4802 block = ocfs2_clusters_to_blocks(osb->sb, bit_off); 4804 block = ocfs2_clusters_to_blocks(osb->sb, bit_off);
@@ -4807,7 +4809,8 @@ int ocfs2_add_clusters_in_btree(handle_t *handle,
4807 num_bits, flags, meta_ac); 4809 num_bits, flags, meta_ac);
4808 if (status < 0) { 4810 if (status < 0) {
4809 mlog_errno(status); 4811 mlog_errno(status);
4810 goto leave; 4812 need_free = 1;
4813 goto bail;
4811 } 4814 }
4812 4815
4813 ocfs2_journal_dirty(handle, et->et_root_bh); 4816 ocfs2_journal_dirty(handle, et->et_root_bh);
@@ -4821,6 +4824,19 @@ int ocfs2_add_clusters_in_btree(handle_t *handle,
4821 reason = RESTART_TRANS; 4824 reason = RESTART_TRANS;
4822 } 4825 }
4823 4826
4827bail:
4828 if (need_free) {
4829 if (data_ac->ac_which == OCFS2_AC_USE_LOCAL)
4830 ocfs2_free_local_alloc_bits(osb, handle, data_ac,
4831 bit_off, num_bits);
4832 else
4833 ocfs2_free_clusters(handle,
4834 data_ac->ac_inode,
4835 data_ac->ac_bh,
4836 ocfs2_clusters_to_blocks(osb->sb, bit_off),
4837 num_bits);
4838 }
4839
4824leave: 4840leave:
4825 if (reason_ret) 4841 if (reason_ret)
4826 *reason_ret = reason; 4842 *reason_ret = reason;
@@ -6805,6 +6821,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6805 struct buffer_head *di_bh) 6821 struct buffer_head *di_bh)
6806{ 6822{
6807 int ret, i, has_data, num_pages = 0; 6823 int ret, i, has_data, num_pages = 0;
6824 int need_free = 0;
6825 u32 bit_off, num;
6808 handle_t *handle; 6826 handle_t *handle;
6809 u64 uninitialized_var(block); 6827 u64 uninitialized_var(block);
6810 struct ocfs2_inode_info *oi = OCFS2_I(inode); 6828 struct ocfs2_inode_info *oi = OCFS2_I(inode);
@@ -6850,7 +6868,6 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6850 } 6868 }
6851 6869
6852 if (has_data) { 6870 if (has_data) {
6853 u32 bit_off, num;
6854 unsigned int page_end; 6871 unsigned int page_end;
6855 u64 phys; 6872 u64 phys;
6856 6873
@@ -6886,6 +6903,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6886 ret = ocfs2_grab_eof_pages(inode, 0, end, pages, &num_pages); 6903 ret = ocfs2_grab_eof_pages(inode, 0, end, pages, &num_pages);
6887 if (ret) { 6904 if (ret) {
6888 mlog_errno(ret); 6905 mlog_errno(ret);
6906 need_free = 1;
6889 goto out_commit; 6907 goto out_commit;
6890 } 6908 }
6891 6909
@@ -6896,6 +6914,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6896 ret = ocfs2_read_inline_data(inode, pages[0], di_bh); 6914 ret = ocfs2_read_inline_data(inode, pages[0], di_bh);
6897 if (ret) { 6915 if (ret) {
6898 mlog_errno(ret); 6916 mlog_errno(ret);
6917 need_free = 1;
6899 goto out_commit; 6918 goto out_commit;
6900 } 6919 }
6901 6920
@@ -6927,6 +6946,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6927 ret = ocfs2_insert_extent(handle, &et, 0, block, 1, 0, NULL); 6946 ret = ocfs2_insert_extent(handle, &et, 0, block, 1, 0, NULL);
6928 if (ret) { 6947 if (ret) {
6929 mlog_errno(ret); 6948 mlog_errno(ret);
6949 need_free = 1;
6930 goto out_commit; 6950 goto out_commit;
6931 } 6951 }
6932 6952
@@ -6938,6 +6958,18 @@ out_commit:
6938 dquot_free_space_nodirty(inode, 6958 dquot_free_space_nodirty(inode,
6939 ocfs2_clusters_to_bytes(osb->sb, 1)); 6959 ocfs2_clusters_to_bytes(osb->sb, 1));
6940 6960
6961 if (need_free) {
6962 if (data_ac->ac_which == OCFS2_AC_USE_LOCAL)
6963 ocfs2_free_local_alloc_bits(osb, handle, data_ac,
6964 bit_off, num);
6965 else
6966 ocfs2_free_clusters(handle,
6967 data_ac->ac_inode,
6968 data_ac->ac_bh,
6969 ocfs2_clusters_to_blocks(osb->sb, bit_off),
6970 num);
6971 }
6972
6941 ocfs2_commit_trans(osb, handle); 6973 ocfs2_commit_trans(osb, handle);
6942 6974
6943out_unlock: 6975out_unlock:
@@ -7126,7 +7158,7 @@ int ocfs2_truncate_inline(struct inode *inode, struct buffer_head *di_bh,
7126 if (end > i_size_read(inode)) 7158 if (end > i_size_read(inode))
7127 end = i_size_read(inode); 7159 end = i_size_read(inode);
7128 7160
7129 BUG_ON(start >= end); 7161 BUG_ON(start > end);
7130 7162
7131 if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) || 7163 if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) ||
7132 !(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL) || 7164 !(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL) ||
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index d77d71ead8d1..8450262bcf2a 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -185,6 +185,9 @@ static int ocfs2_sync_file(struct file *file, loff_t start, loff_t end,
185 file->f_path.dentry->d_name.name, 185 file->f_path.dentry->d_name.name,
186 (unsigned long long)datasync); 186 (unsigned long long)datasync);
187 187
188 if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
189 return -EROFS;
190
188 err = filemap_write_and_wait_range(inode->i_mapping, start, end); 191 err = filemap_write_and_wait_range(inode->i_mapping, start, end);
189 if (err) 192 if (err)
190 return err; 193 return err;
@@ -474,11 +477,6 @@ static int ocfs2_truncate_file(struct inode *inode,
474 goto bail; 477 goto bail;
475 } 478 }
476 479
477 /* lets handle the simple truncate cases before doing any more
478 * cluster locking. */
479 if (new_i_size == le64_to_cpu(fe->i_size))
480 goto bail;
481
482 down_write(&OCFS2_I(inode)->ip_alloc_sem); 480 down_write(&OCFS2_I(inode)->ip_alloc_sem);
483 481
484 ocfs2_resv_discard(&osb->osb_la_resmap, 482 ocfs2_resv_discard(&osb->osb_la_resmap,
@@ -718,7 +716,8 @@ leave:
718 * While a write will already be ordering the data, a truncate will not. 716 * While a write will already be ordering the data, a truncate will not.
719 * Thus, we need to explicitly order the zeroed pages. 717 * Thus, we need to explicitly order the zeroed pages.
720 */ 718 */
721static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode) 719static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode,
720 struct buffer_head *di_bh)
722{ 721{
723 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 722 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
724 handle_t *handle = NULL; 723 handle_t *handle = NULL;
@@ -735,7 +734,14 @@ static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode)
735 } 734 }
736 735
737 ret = ocfs2_jbd2_file_inode(handle, inode); 736 ret = ocfs2_jbd2_file_inode(handle, inode);
738 if (ret < 0) 737 if (ret < 0) {
738 mlog_errno(ret);
739 goto out;
740 }
741
742 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
743 OCFS2_JOURNAL_ACCESS_WRITE);
744 if (ret)
739 mlog_errno(ret); 745 mlog_errno(ret);
740 746
741out: 747out:
@@ -751,7 +757,7 @@ out:
751 * to be too fragile to do exactly what we need without us having to 757 * to be too fragile to do exactly what we need without us having to
752 * worry about recursive locking in ->write_begin() and ->write_end(). */ 758 * worry about recursive locking in ->write_begin() and ->write_end(). */
753static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, 759static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
754 u64 abs_to) 760 u64 abs_to, struct buffer_head *di_bh)
755{ 761{
756 struct address_space *mapping = inode->i_mapping; 762 struct address_space *mapping = inode->i_mapping;
757 struct page *page; 763 struct page *page;
@@ -759,6 +765,7 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
759 handle_t *handle = NULL; 765 handle_t *handle = NULL;
760 int ret = 0; 766 int ret = 0;
761 unsigned zero_from, zero_to, block_start, block_end; 767 unsigned zero_from, zero_to, block_start, block_end;
768 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
762 769
763 BUG_ON(abs_from >= abs_to); 770 BUG_ON(abs_from >= abs_to);
764 BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT)); 771 BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT));
@@ -801,7 +808,8 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
801 } 808 }
802 809
803 if (!handle) { 810 if (!handle) {
804 handle = ocfs2_zero_start_ordered_transaction(inode); 811 handle = ocfs2_zero_start_ordered_transaction(inode,
812 di_bh);
805 if (IS_ERR(handle)) { 813 if (IS_ERR(handle)) {
806 ret = PTR_ERR(handle); 814 ret = PTR_ERR(handle);
807 handle = NULL; 815 handle = NULL;
@@ -818,8 +826,22 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
818 ret = 0; 826 ret = 0;
819 } 827 }
820 828
821 if (handle) 829 if (handle) {
830 /*
831 * fs-writeback will release the dirty pages without page lock
832 * whose offset are over inode size, the release happens at
833 * block_write_full_page_endio().
834 */
835 i_size_write(inode, abs_to);
836 inode->i_blocks = ocfs2_inode_sector_count(inode);
837 di->i_size = cpu_to_le64((u64)i_size_read(inode));
838 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
839 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec);
840 di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
841 di->i_mtime_nsec = di->i_ctime_nsec;
842 ocfs2_journal_dirty(handle, di_bh);
822 ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); 843 ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
844 }
823 845
824out_unlock: 846out_unlock:
825 unlock_page(page); 847 unlock_page(page);
@@ -915,7 +937,7 @@ out:
915 * has made sure that the entire range needs zeroing. 937 * has made sure that the entire range needs zeroing.
916 */ 938 */
917static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start, 939static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start,
918 u64 range_end) 940 u64 range_end, struct buffer_head *di_bh)
919{ 941{
920 int rc = 0; 942 int rc = 0;
921 u64 next_pos; 943 u64 next_pos;
@@ -931,7 +953,7 @@ static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start,
931 next_pos = (zero_pos & PAGE_CACHE_MASK) + PAGE_CACHE_SIZE; 953 next_pos = (zero_pos & PAGE_CACHE_MASK) + PAGE_CACHE_SIZE;
932 if (next_pos > range_end) 954 if (next_pos > range_end)
933 next_pos = range_end; 955 next_pos = range_end;
934 rc = ocfs2_write_zero_page(inode, zero_pos, next_pos); 956 rc = ocfs2_write_zero_page(inode, zero_pos, next_pos, di_bh);
935 if (rc < 0) { 957 if (rc < 0) {
936 mlog_errno(rc); 958 mlog_errno(rc);
937 break; 959 break;
@@ -977,7 +999,7 @@ int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh,
977 range_end = zero_to_size; 999 range_end = zero_to_size;
978 1000
979 ret = ocfs2_zero_extend_range(inode, range_start, 1001 ret = ocfs2_zero_extend_range(inode, range_start,
980 range_end); 1002 range_end, di_bh);
981 if (ret) { 1003 if (ret) {
982 mlog_errno(ret); 1004 mlog_errno(ret);
983 break; 1005 break;
@@ -1145,14 +1167,14 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
1145 goto bail_unlock_rw; 1167 goto bail_unlock_rw;
1146 } 1168 }
1147 1169
1148 if (size_change && attr->ia_size != i_size_read(inode)) { 1170 if (size_change) {
1149 status = inode_newsize_ok(inode, attr->ia_size); 1171 status = inode_newsize_ok(inode, attr->ia_size);
1150 if (status) 1172 if (status)
1151 goto bail_unlock; 1173 goto bail_unlock;
1152 1174
1153 inode_dio_wait(inode); 1175 inode_dio_wait(inode);
1154 1176
1155 if (i_size_read(inode) > attr->ia_size) { 1177 if (i_size_read(inode) >= attr->ia_size) {
1156 if (ocfs2_should_order_data(inode)) { 1178 if (ocfs2_should_order_data(inode)) {
1157 status = ocfs2_begin_ordered_truncate(inode, 1179 status = ocfs2_begin_ordered_truncate(inode,
1158 attr->ia_size); 1180 attr->ia_size);
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
index cd5496b7a0a3..044013455621 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
@@ -781,6 +781,48 @@ bail:
781 return status; 781 return status;
782} 782}
783 783
784int ocfs2_free_local_alloc_bits(struct ocfs2_super *osb,
785 handle_t *handle,
786 struct ocfs2_alloc_context *ac,
787 u32 bit_off,
788 u32 num_bits)
789{
790 int status, start;
791 u32 clear_bits;
792 struct inode *local_alloc_inode;
793 void *bitmap;
794 struct ocfs2_dinode *alloc;
795 struct ocfs2_local_alloc *la;
796
797 BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL);
798
799 local_alloc_inode = ac->ac_inode;
800 alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
801 la = OCFS2_LOCAL_ALLOC(alloc);
802
803 bitmap = la->la_bitmap;
804 start = bit_off - le32_to_cpu(la->la_bm_off);
805 clear_bits = num_bits;
806
807 status = ocfs2_journal_access_di(handle,
808 INODE_CACHE(local_alloc_inode),
809 osb->local_alloc_bh,
810 OCFS2_JOURNAL_ACCESS_WRITE);
811 if (status < 0) {
812 mlog_errno(status);
813 goto bail;
814 }
815
816 while (clear_bits--)
817 ocfs2_clear_bit(start++, bitmap);
818
819 le32_add_cpu(&alloc->id1.bitmap1.i_used, -num_bits);
820 ocfs2_journal_dirty(handle, osb->local_alloc_bh);
821
822bail:
823 return status;
824}
825
784static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc) 826static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc)
785{ 827{
786 u32 count; 828 u32 count;
diff --git a/fs/ocfs2/localalloc.h b/fs/ocfs2/localalloc.h
index 1be9b5864460..44a7d1fb2dec 100644
--- a/fs/ocfs2/localalloc.h
+++ b/fs/ocfs2/localalloc.h
@@ -55,6 +55,12 @@ int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb,
55 u32 *bit_off, 55 u32 *bit_off,
56 u32 *num_bits); 56 u32 *num_bits);
57 57
58int ocfs2_free_local_alloc_bits(struct ocfs2_super *osb,
59 handle_t *handle,
60 struct ocfs2_alloc_context *ac,
61 u32 bit_off,
62 u32 num_bits);
63
58void ocfs2_local_alloc_seen_free_bits(struct ocfs2_super *osb, 64void ocfs2_local_alloc_seen_free_bits(struct ocfs2_super *osb,
59 unsigned int num_clusters); 65 unsigned int num_clusters);
60void ocfs2_la_enable_worker(struct work_struct *work); 66void ocfs2_la_enable_worker(struct work_struct *work);
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index f4d609be9400..3683643f3f0e 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -664,6 +664,7 @@ static int ocfs2_link(struct dentry *old_dentry,
664 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 664 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
665 struct ocfs2_dir_lookup_result lookup = { NULL, }; 665 struct ocfs2_dir_lookup_result lookup = { NULL, };
666 sigset_t oldset; 666 sigset_t oldset;
667 u64 old_de_ino;
667 668
668 trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno, 669 trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno,
669 old_dentry->d_name.len, old_dentry->d_name.name, 670 old_dentry->d_name.len, old_dentry->d_name.name,
@@ -686,6 +687,22 @@ static int ocfs2_link(struct dentry *old_dentry,
686 goto out; 687 goto out;
687 } 688 }
688 689
690 err = ocfs2_lookup_ino_from_name(dir, old_dentry->d_name.name,
691 old_dentry->d_name.len, &old_de_ino);
692 if (err) {
693 err = -ENOENT;
694 goto out;
695 }
696
697 /*
698 * Check whether another node removed the source inode while we
699 * were in the vfs.
700 */
701 if (old_de_ino != OCFS2_I(inode)->ip_blkno) {
702 err = -ENOENT;
703 goto out;
704 }
705
689 err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, 706 err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
690 dentry->d_name.len); 707 dentry->d_name.len);
691 if (err) 708 if (err)
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
index 38bae5a0ea25..11c54fd51e16 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -521,8 +521,11 @@ posix_acl_chmod(struct inode *inode, umode_t mode)
521 return -EOPNOTSUPP; 521 return -EOPNOTSUPP;
522 522
523 acl = get_acl(inode, ACL_TYPE_ACCESS); 523 acl = get_acl(inode, ACL_TYPE_ACCESS);
524 if (IS_ERR_OR_NULL(acl)) 524 if (IS_ERR_OR_NULL(acl)) {
525 if (acl == ERR_PTR(-EOPNOTSUPP))
526 return 0;
525 return PTR_ERR(acl); 527 return PTR_ERR(acl);
528 }
526 529
527 ret = __posix_acl_chmod(&acl, GFP_KERNEL, mode); 530 ret = __posix_acl_chmod(&acl, GFP_KERNEL, mode);
528 if (ret) 531 if (ret)
@@ -544,14 +547,15 @@ posix_acl_create(struct inode *dir, umode_t *mode,
544 goto no_acl; 547 goto no_acl;
545 548
546 p = get_acl(dir, ACL_TYPE_DEFAULT); 549 p = get_acl(dir, ACL_TYPE_DEFAULT);
547 if (IS_ERR(p)) 550 if (IS_ERR(p)) {
551 if (p == ERR_PTR(-EOPNOTSUPP))
552 goto apply_umask;
548 return PTR_ERR(p); 553 return PTR_ERR(p);
549
550 if (!p) {
551 *mode &= ~current_umask();
552 goto no_acl;
553 } 554 }
554 555
556 if (!p)
557 goto apply_umask;
558
555 *acl = posix_acl_clone(p, GFP_NOFS); 559 *acl = posix_acl_clone(p, GFP_NOFS);
556 if (!*acl) 560 if (!*acl)
557 return -ENOMEM; 561 return -ENOMEM;
@@ -575,6 +579,8 @@ posix_acl_create(struct inode *dir, umode_t *mode,
575 } 579 }
576 return 0; 580 return 0;
577 581
582apply_umask:
583 *mode &= ~current_umask();
578no_acl: 584no_acl:
579 *default_acl = NULL; 585 *default_acl = NULL;
580 *acl = NULL; 586 *acl = NULL;
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 2ca7ba047f04..88d4585b30f1 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -468,17 +468,24 @@ static int __init update_note_header_size_elf64(const Elf64_Ehdr *ehdr_ptr)
468 return rc; 468 return rc;
469 } 469 }
470 nhdr_ptr = notes_section; 470 nhdr_ptr = notes_section;
471 while (real_sz < max_sz) { 471 while (nhdr_ptr->n_namesz != 0) {
472 if (nhdr_ptr->n_namesz == 0)
473 break;
474 sz = sizeof(Elf64_Nhdr) + 472 sz = sizeof(Elf64_Nhdr) +
475 ((nhdr_ptr->n_namesz + 3) & ~3) + 473 ((nhdr_ptr->n_namesz + 3) & ~3) +
476 ((nhdr_ptr->n_descsz + 3) & ~3); 474 ((nhdr_ptr->n_descsz + 3) & ~3);
475 if ((real_sz + sz) > max_sz) {
476 pr_warn("Warning: Exceeded p_memsz, dropping PT_NOTE entry n_namesz=0x%x, n_descsz=0x%x\n",
477 nhdr_ptr->n_namesz, nhdr_ptr->n_descsz);
478 break;
479 }
477 real_sz += sz; 480 real_sz += sz;
478 nhdr_ptr = (Elf64_Nhdr*)((char*)nhdr_ptr + sz); 481 nhdr_ptr = (Elf64_Nhdr*)((char*)nhdr_ptr + sz);
479 } 482 }
480 kfree(notes_section); 483 kfree(notes_section);
481 phdr_ptr->p_memsz = real_sz; 484 phdr_ptr->p_memsz = real_sz;
485 if (real_sz == 0) {
486 pr_warn("Warning: Zero PT_NOTE entries found\n");
487 return -EINVAL;
488 }
482 } 489 }
483 490
484 return 0; 491 return 0;
@@ -648,17 +655,24 @@ static int __init update_note_header_size_elf32(const Elf32_Ehdr *ehdr_ptr)
648 return rc; 655 return rc;
649 } 656 }
650 nhdr_ptr = notes_section; 657 nhdr_ptr = notes_section;
651 while (real_sz < max_sz) { 658 while (nhdr_ptr->n_namesz != 0) {
652 if (nhdr_ptr->n_namesz == 0)
653 break;
654 sz = sizeof(Elf32_Nhdr) + 659 sz = sizeof(Elf32_Nhdr) +
655 ((nhdr_ptr->n_namesz + 3) & ~3) + 660 ((nhdr_ptr->n_namesz + 3) & ~3) +
656 ((nhdr_ptr->n_descsz + 3) & ~3); 661 ((nhdr_ptr->n_descsz + 3) & ~3);
662 if ((real_sz + sz) > max_sz) {
663 pr_warn("Warning: Exceeded p_memsz, dropping PT_NOTE entry n_namesz=0x%x, n_descsz=0x%x\n",
664 nhdr_ptr->n_namesz, nhdr_ptr->n_descsz);
665 break;
666 }
657 real_sz += sz; 667 real_sz += sz;
658 nhdr_ptr = (Elf32_Nhdr*)((char*)nhdr_ptr + sz); 668 nhdr_ptr = (Elf32_Nhdr*)((char*)nhdr_ptr + sz);
659 } 669 }
660 kfree(notes_section); 670 kfree(notes_section);
661 phdr_ptr->p_memsz = real_sz; 671 phdr_ptr->p_memsz = real_sz;
672 if (real_sz == 0) {
673 pr_warn("Warning: Zero PT_NOTE entries found\n");
674 return -EINVAL;
675 }
662 } 676 }
663 677
664 return 0; 678 return 0;
diff --git a/fs/sync.c b/fs/sync.c
index f15537452231..e8ba024a055b 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -222,23 +222,6 @@ SYSCALL_DEFINE1(fdatasync, unsigned int, fd)
222 return do_fsync(fd, 1); 222 return do_fsync(fd, 1);
223} 223}
224 224
225/**
226 * generic_write_sync - perform syncing after a write if file / inode is sync
227 * @file: file to which the write happened
228 * @pos: offset where the write started
229 * @count: length of the write
230 *
231 * This is just a simple wrapper about our general syncing function.
232 */
233int generic_write_sync(struct file *file, loff_t pos, loff_t count)
234{
235 if (!(file->f_flags & O_DSYNC) && !IS_SYNC(file->f_mapping->host))
236 return 0;
237 return vfs_fsync_range(file, pos, pos + count - 1,
238 (file->f_flags & __O_SYNC) ? 0 : 1);
239}
240EXPORT_SYMBOL(generic_write_sync);
241
242/* 225/*
243 * sys_sync_file_range() permits finely controlled syncing over a segment of 226 * sys_sync_file_range() permits finely controlled syncing over a segment of
244 * a file in the range offset .. (offset+nbytes-1) inclusive. If nbytes is 227 * a file in the range offset .. (offset+nbytes-1) inclusive. If nbytes is
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 2e7989e3a2d6..64b48eade91d 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -799,7 +799,7 @@ xfs_file_aio_write(
799 XFS_STATS_ADD(xs_write_bytes, ret); 799 XFS_STATS_ADD(xs_write_bytes, ret);
800 800
801 /* Handle various SYNC-type writes */ 801 /* Handle various SYNC-type writes */
802 err = generic_write_sync(file, pos, ret); 802 err = generic_write_sync(file, iocb->ki_pos - ret, ret);
803 if (err < 0) 803 if (err < 0)
804 ret = err; 804 ret = err;
805 } 805 }
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 04086c5be930..04a7f31301f8 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -199,6 +199,9 @@ int drm_err(const char *func, const char *format, ...);
199#define DRM_INFO(fmt, ...) \ 199#define DRM_INFO(fmt, ...) \
200 printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__) 200 printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
201 201
202#define DRM_INFO_ONCE(fmt, ...) \
203 printk_once(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
204
202/** 205/**
203 * Debug output. 206 * Debug output.
204 * 207 *
diff --git a/include/dt-bindings/pinctrl/am43xx.h b/include/dt-bindings/pinctrl/am43xx.h
index eb6c366adfba..9c2e4f82381e 100644
--- a/include/dt-bindings/pinctrl/am43xx.h
+++ b/include/dt-bindings/pinctrl/am43xx.h
@@ -13,6 +13,7 @@
13#define MUX_MODE5 5 13#define MUX_MODE5 5
14#define MUX_MODE6 6 14#define MUX_MODE6 6
15#define MUX_MODE7 7 15#define MUX_MODE7 7
16#define MUX_MODE8 8
16 17
17#define PULL_DISABLE (1 << 16) 18#define PULL_DISABLE (1 << 16)
18#define PULL_UP (1 << 17) 19#define PULL_UP (1 << 17)
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
index fd8bf3219ef7..b4a745d7d9a9 100644
--- a/include/linux/binfmts.h
+++ b/include/linux/binfmts.h
@@ -115,7 +115,6 @@ extern int copy_strings_kernel(int argc, const char *const *argv,
115extern int prepare_bprm_creds(struct linux_binprm *bprm); 115extern int prepare_bprm_creds(struct linux_binprm *bprm);
116extern void install_exec_creds(struct linux_binprm *bprm); 116extern void install_exec_creds(struct linux_binprm *bprm);
117extern void set_binfmt(struct linux_binfmt *new); 117extern void set_binfmt(struct linux_binfmt *new);
118extern void free_bprm(struct linux_binprm *);
119extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t); 118extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t);
120 119
121#endif /* _LINUX_BINFMTS_H */ 120#endif /* _LINUX_BINFMTS_H */
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 70654521dab6..5a4d39b4686b 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -250,6 +250,17 @@ static inline unsigned bio_segments(struct bio *bio)
250 struct bio_vec bv; 250 struct bio_vec bv;
251 struct bvec_iter iter; 251 struct bvec_iter iter;
252 252
253 /*
254 * We special case discard/write same, because they interpret bi_size
255 * differently:
256 */
257
258 if (bio->bi_rw & REQ_DISCARD)
259 return 1;
260
261 if (bio->bi_rw & REQ_WRITE_SAME)
262 return 1;
263
253 bio_for_each_segment(bv, bio, iter) 264 bio_for_each_segment(bv, bio, iter)
254 segs++; 265 segs++;
255 266
@@ -332,6 +343,7 @@ extern struct bio *bio_clone_fast(struct bio *, gfp_t, struct bio_set *);
332extern struct bio *bio_clone_bioset(struct bio *, gfp_t, struct bio_set *bs); 343extern struct bio *bio_clone_bioset(struct bio *, gfp_t, struct bio_set *bs);
333 344
334extern struct bio_set *fs_bio_set; 345extern struct bio_set *fs_bio_set;
346unsigned int bio_integrity_tag_size(struct bio *bio);
335 347
336static inline struct bio *bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs) 348static inline struct bio *bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
337{ 349{
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 161b23105b1e..18ba8a627f46 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -83,6 +83,8 @@ struct blk_mq_ops {
83 */ 83 */
84 rq_timed_out_fn *timeout; 84 rq_timed_out_fn *timeout;
85 85
86 softirq_done_fn *complete;
87
86 /* 88 /*
87 * Override for hctx allocations (should probably go) 89 * Override for hctx allocations (should probably go)
88 */ 90 */
@@ -119,11 +121,12 @@ void blk_mq_init_commands(struct request_queue *, void (*init)(void *data, struc
119 121
120void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule); 122void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule);
121 123
122void blk_mq_insert_request(struct request_queue *, struct request *, bool); 124void blk_mq_insert_request(struct request_queue *, struct request *,
125 bool, bool);
123void blk_mq_run_queues(struct request_queue *q, bool async); 126void blk_mq_run_queues(struct request_queue *q, bool async);
124void blk_mq_free_request(struct request *rq); 127void blk_mq_free_request(struct request *rq);
125bool blk_mq_can_queue(struct blk_mq_hw_ctx *); 128bool blk_mq_can_queue(struct blk_mq_hw_ctx *);
126struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp, bool reserved); 129struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp);
127struct request *blk_mq_alloc_reserved_request(struct request_queue *q, int rw, gfp_t gfp); 130struct request *blk_mq_alloc_reserved_request(struct request_queue *q, int rw, gfp_t gfp);
128struct request *blk_mq_rq_from_tag(struct request_queue *q, unsigned int tag); 131struct request *blk_mq_rq_from_tag(struct request_queue *q, unsigned int tag);
129 132
@@ -133,6 +136,8 @@ void blk_mq_free_single_hw_queue(struct blk_mq_hw_ctx *, unsigned int);
133 136
134void blk_mq_end_io(struct request *rq, int error); 137void blk_mq_end_io(struct request *rq, int error);
135 138
139void blk_mq_complete_request(struct request *rq);
140
136void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx); 141void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx);
137void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx); 142void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx);
138void blk_mq_stop_hw_queues(struct request_queue *q); 143void blk_mq_stop_hw_queues(struct request_queue *q);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 8678c4322b44..4afa4f8f6090 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -98,7 +98,7 @@ struct request {
98 struct list_head queuelist; 98 struct list_head queuelist;
99 union { 99 union {
100 struct call_single_data csd; 100 struct call_single_data csd;
101 struct work_struct mq_flush_data; 101 struct work_struct mq_flush_work;
102 }; 102 };
103 103
104 struct request_queue *q; 104 struct request_queue *q;
@@ -448,13 +448,8 @@ struct request_queue {
448 unsigned long flush_pending_since; 448 unsigned long flush_pending_since;
449 struct list_head flush_queue[2]; 449 struct list_head flush_queue[2];
450 struct list_head flush_data_in_flight; 450 struct list_head flush_data_in_flight;
451 union { 451 struct request *flush_rq;
452 struct request flush_rq; 452 spinlock_t mq_flush_lock;
453 struct {
454 spinlock_t mq_flush_lock;
455 struct work_struct mq_flush_work;
456 };
457 };
458 453
459 struct mutex sysfs_lock; 454 struct mutex sysfs_lock;
460 455
diff --git a/include/linux/can/skb.h b/include/linux/can/skb.h
index 2f0543f7510c..f9bbbb472663 100644
--- a/include/linux/can/skb.h
+++ b/include/linux/can/skb.h
@@ -11,7 +11,9 @@
11#define CAN_SKB_H 11#define CAN_SKB_H
12 12
13#include <linux/types.h> 13#include <linux/types.h>
14#include <linux/skbuff.h>
14#include <linux/can.h> 15#include <linux/can.h>
16#include <net/sock.h>
15 17
16/* 18/*
17 * The struct can_skb_priv is used to transport additional information along 19 * The struct can_skb_priv is used to transport additional information along
@@ -42,4 +44,40 @@ static inline void can_skb_reserve(struct sk_buff *skb)
42 skb_reserve(skb, sizeof(struct can_skb_priv)); 44 skb_reserve(skb, sizeof(struct can_skb_priv));
43} 45}
44 46
47static inline void can_skb_destructor(struct sk_buff *skb)
48{
49 sock_put(skb->sk);
50}
51
52static inline void can_skb_set_owner(struct sk_buff *skb, struct sock *sk)
53{
54 if (sk) {
55 sock_hold(sk);
56 skb->destructor = can_skb_destructor;
57 skb->sk = sk;
58 }
59}
60
61/*
62 * returns an unshared skb owned by the original sock to be echo'ed back
63 */
64static inline struct sk_buff *can_create_echo_skb(struct sk_buff *skb)
65{
66 if (skb_shared(skb)) {
67 struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
68
69 if (likely(nskb)) {
70 can_skb_set_owner(nskb, skb->sk);
71 consume_skb(skb);
72 return nskb;
73 } else {
74 kfree_skb(skb);
75 return NULL;
76 }
77 }
78
79 /* we can assume to have an unshared skb with proper owner */
80 return skb;
81}
82
45#endif /* CAN_SKB_H */ 83#endif /* CAN_SKB_H */
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
index ded429966c1f..2507fd2a1eb4 100644
--- a/include/linux/compiler-gcc4.h
+++ b/include/linux/compiler-gcc4.h
@@ -75,11 +75,7 @@
75 * 75 *
76 * (asm goto is automatically volatile - the naming reflects this.) 76 * (asm goto is automatically volatile - the naming reflects this.)
77 */ 77 */
78#if GCC_VERSION <= 40801 78#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
79# define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
80#else
81# define asm_volatile_goto(x...) do { asm goto(x); } while (0)
82#endif
83 79
84#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP 80#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
85#if GCC_VERSION >= 40400 81#if GCC_VERSION >= 40400
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 09f553c59813..60829565e552 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2079,6 +2079,7 @@ extern struct file * dentry_open(const struct path *, int, const struct cred *);
2079extern int filp_close(struct file *, fl_owner_t id); 2079extern int filp_close(struct file *, fl_owner_t id);
2080 2080
2081extern struct filename *getname(const char __user *); 2081extern struct filename *getname(const char __user *);
2082extern struct filename *getname_kernel(const char *);
2082 2083
2083enum { 2084enum {
2084 FILE_CREATED = 1, 2085 FILE_CREATED = 1,
@@ -2273,7 +2274,13 @@ extern int filemap_fdatawrite_range(struct address_space *mapping,
2273extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end, 2274extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end,
2274 int datasync); 2275 int datasync);
2275extern int vfs_fsync(struct file *file, int datasync); 2276extern int vfs_fsync(struct file *file, int datasync);
2276extern int generic_write_sync(struct file *file, loff_t pos, loff_t count); 2277static inline int generic_write_sync(struct file *file, loff_t pos, loff_t count)
2278{
2279 if (!(file->f_flags & O_DSYNC) && !IS_SYNC(file->f_mapping->host))
2280 return 0;
2281 return vfs_fsync_range(file, pos, pos + count - 1,
2282 (file->f_flags & __O_SYNC) ? 0 : 1);
2283}
2277extern void emergency_sync(void); 2284extern void emergency_sync(void);
2278extern void emergency_remount(void); 2285extern void emergency_remount(void);
2279#ifdef CONFIG_BLOCK 2286#ifdef CONFIG_BLOCK
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
index 4d34dbbbad4d..7a8144fef406 100644
--- a/include/linux/gpio/consumer.h
+++ b/include/linux/gpio/consumer.h
@@ -4,8 +4,6 @@
4#include <linux/err.h> 4#include <linux/err.h>
5#include <linux/kernel.h> 5#include <linux/kernel.h>
6 6
7#ifdef CONFIG_GPIOLIB
8
9struct device; 7struct device;
10struct gpio_chip; 8struct gpio_chip;
11 9
@@ -18,6 +16,8 @@ struct gpio_chip;
18 */ 16 */
19struct gpio_desc; 17struct gpio_desc;
20 18
19#ifdef CONFIG_GPIOLIB
20
21/* Acquire and dispose GPIOs */ 21/* Acquire and dispose GPIOs */
22struct gpio_desc *__must_check gpiod_get(struct device *dev, 22struct gpio_desc *__must_check gpiod_get(struct device *dev,
23 const char *con_id); 23 const char *con_id);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 15da677478dd..344883dce584 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -875,7 +875,7 @@ struct vmbus_channel_relid_released {
875struct vmbus_channel_initiate_contact { 875struct vmbus_channel_initiate_contact {
876 struct vmbus_channel_message_header header; 876 struct vmbus_channel_message_header header;
877 u32 vmbus_version_requested; 877 u32 vmbus_version_requested;
878 u32 padding2; 878 u32 target_vcpu; /* The VCPU the host should respond to */
879 u64 interrupt_page; 879 u64 interrupt_page;
880 u64 monitor_page1; 880 u64 monitor_page1;
881 u64 monitor_page2; 881 u64 monitor_page2;
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 0053adde0ed9..a2678d35b5a2 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -158,6 +158,11 @@ devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
158 devname, dev_id); 158 devname, dev_id);
159} 159}
160 160
161extern int __must_check
162devm_request_any_context_irq(struct device *dev, unsigned int irq,
163 irq_handler_t handler, unsigned long irqflags,
164 const char *devname, void *dev_id);
165
161extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id); 166extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
162 167
163/* 168/*
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h
index a86ca1406fb8..4e7fe7417fc9 100644
--- a/include/linux/mfd/abx500/ab8500.h
+++ b/include/linux/mfd/abx500/ab8500.h
@@ -347,7 +347,6 @@ struct ab8500 {
347 struct mutex lock; 347 struct mutex lock;
348 struct mutex irq_lock; 348 struct mutex irq_lock;
349 atomic_t transfer_ongoing; 349 atomic_t transfer_ongoing;
350 int irq_base;
351 int irq; 350 int irq;
352 struct irq_domain *domain; 351 struct irq_domain *domain;
353 enum ab8500_version version; 352 enum ab8500_version version;
@@ -378,7 +377,6 @@ struct ab8500_sysctrl_platform_data;
378 * @regulator: machine-specific constraints for regulators 377 * @regulator: machine-specific constraints for regulators
379 */ 378 */
380struct ab8500_platform_data { 379struct ab8500_platform_data {
381 int irq_base;
382 void (*init) (struct ab8500 *); 380 void (*init) (struct ab8500 *);
383 struct ab8500_regulator_platform_data *regulator; 381 struct ab8500_regulator_platform_data *regulator;
384 struct ab8500_codec_platform_data *codec; 382 struct ab8500_codec_platform_data *codec;
diff --git a/include/linux/mfd/dbx500-prcmu.h b/include/linux/mfd/dbx500-prcmu.h
index 060e11256fbc..bf5109d38a26 100644
--- a/include/linux/mfd/dbx500-prcmu.h
+++ b/include/linux/mfd/dbx500-prcmu.h
@@ -183,8 +183,6 @@ struct prcmu_pdata
183 bool enable_set_ddr_opp; 183 bool enable_set_ddr_opp;
184 bool enable_ape_opp_100_voltage; 184 bool enable_ape_opp_100_voltage;
185 struct ab8500_platform_data *ab_platdata; 185 struct ab8500_platform_data *ab_platdata;
186 int ab_irq;
187 int irq_base;
188 u32 version_offset; 186 u32 version_offset;
189 u32 legacy_offset; 187 u32 legacy_offset;
190 u32 adt_offset; 188 u32 adt_offset;
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index 554548cd3dd4..130bc8d77fa5 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -38,8 +38,10 @@
38#include <linux/pci.h> 38#include <linux/pci.h>
39#include <linux/spinlock_types.h> 39#include <linux/spinlock_types.h>
40#include <linux/semaphore.h> 40#include <linux/semaphore.h>
41#include <linux/slab.h>
41#include <linux/vmalloc.h> 42#include <linux/vmalloc.h>
42#include <linux/radix-tree.h> 43#include <linux/radix-tree.h>
44
43#include <linux/mlx5/device.h> 45#include <linux/mlx5/device.h>
44#include <linux/mlx5/doorbell.h> 46#include <linux/mlx5/doorbell.h>
45 47
@@ -227,6 +229,7 @@ struct mlx5_uuar_info {
227 * protect uuar allocation data structs 229 * protect uuar allocation data structs
228 */ 230 */
229 struct mutex lock; 231 struct mutex lock;
232 u32 ver;
230}; 233};
231 234
232struct mlx5_bf { 235struct mlx5_bf {
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 3ccfcecf8999..b2fb167b2e6d 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -379,12 +379,14 @@ struct nfs_openres {
379 * Arguments to the open_confirm call. 379 * Arguments to the open_confirm call.
380 */ 380 */
381struct nfs_open_confirmargs { 381struct nfs_open_confirmargs {
382 struct nfs4_sequence_args seq_args;
382 const struct nfs_fh * fh; 383 const struct nfs_fh * fh;
383 nfs4_stateid * stateid; 384 nfs4_stateid * stateid;
384 struct nfs_seqid * seqid; 385 struct nfs_seqid * seqid;
385}; 386};
386 387
387struct nfs_open_confirmres { 388struct nfs_open_confirmres {
389 struct nfs4_sequence_res seq_res;
388 nfs4_stateid stateid; 390 nfs4_stateid stateid;
389 struct nfs_seqid * seqid; 391 struct nfs_seqid * seqid;
390}; 392};
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
index 26ebcf41c213..69ae03f6eb15 100644
--- a/include/linux/nvme.h
+++ b/include/linux/nvme.h
@@ -80,13 +80,14 @@ struct nvme_dev {
80 struct dma_pool *prp_small_pool; 80 struct dma_pool *prp_small_pool;
81 int instance; 81 int instance;
82 int queue_count; 82 int queue_count;
83 int db_stride; 83 u32 db_stride;
84 u32 ctrl_config; 84 u32 ctrl_config;
85 struct msix_entry *entry; 85 struct msix_entry *entry;
86 struct nvme_bar __iomem *bar; 86 struct nvme_bar __iomem *bar;
87 struct list_head namespaces; 87 struct list_head namespaces;
88 struct kref kref; 88 struct kref kref;
89 struct miscdevice miscdev; 89 struct miscdevice miscdev;
90 struct work_struct reset_work;
90 char name[12]; 91 char name[12];
91 char serial[20]; 92 char serial[20];
92 char model[40]; 93 char model[40];
@@ -94,6 +95,8 @@ struct nvme_dev {
94 u32 max_hw_sectors; 95 u32 max_hw_sectors;
95 u32 stripe_size; 96 u32 stripe_size;
96 u16 oncs; 97 u16 oncs;
98 u16 abort_limit;
99 u8 initialized;
97}; 100};
98 101
99/* 102/*
@@ -165,6 +168,7 @@ int nvme_set_features(struct nvme_dev *dev, unsigned fid, unsigned dword11,
165struct sg_io_hdr; 168struct sg_io_hdr;
166 169
167int nvme_sg_io(struct nvme_ns *ns, struct sg_io_hdr __user *u_hdr); 170int nvme_sg_io(struct nvme_ns *ns, struct sg_io_hdr __user *u_hdr);
171int nvme_sg_io32(struct nvme_ns *ns, unsigned long arg);
168int nvme_sg_get_version_num(int __user *ip); 172int nvme_sg_get_version_num(int __user *ip);
169 173
170#endif /* _LINUX_NVME_H */ 174#endif /* _LINUX_NVME_H */
diff --git a/include/linux/of.h b/include/linux/of.h
index 70c64ba17fa5..435cb995904d 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -169,35 +169,15 @@ static inline const char *of_node_full_name(const struct device_node *np)
169 169
170extern struct device_node *of_find_node_by_name(struct device_node *from, 170extern struct device_node *of_find_node_by_name(struct device_node *from,
171 const char *name); 171 const char *name);
172#define for_each_node_by_name(dn, name) \
173 for (dn = of_find_node_by_name(NULL, name); dn; \
174 dn = of_find_node_by_name(dn, name))
175extern struct device_node *of_find_node_by_type(struct device_node *from, 172extern struct device_node *of_find_node_by_type(struct device_node *from,
176 const char *type); 173 const char *type);
177#define for_each_node_by_type(dn, type) \
178 for (dn = of_find_node_by_type(NULL, type); dn; \
179 dn = of_find_node_by_type(dn, type))
180extern struct device_node *of_find_compatible_node(struct device_node *from, 174extern struct device_node *of_find_compatible_node(struct device_node *from,
181 const char *type, const char *compat); 175 const char *type, const char *compat);
182#define for_each_compatible_node(dn, type, compatible) \
183 for (dn = of_find_compatible_node(NULL, type, compatible); dn; \
184 dn = of_find_compatible_node(dn, type, compatible))
185extern struct device_node *of_find_matching_node_and_match( 176extern struct device_node *of_find_matching_node_and_match(
186 struct device_node *from, 177 struct device_node *from,
187 const struct of_device_id *matches, 178 const struct of_device_id *matches,
188 const struct of_device_id **match); 179 const struct of_device_id **match);
189static inline struct device_node *of_find_matching_node( 180
190 struct device_node *from,
191 const struct of_device_id *matches)
192{
193 return of_find_matching_node_and_match(from, matches, NULL);
194}
195#define for_each_matching_node(dn, matches) \
196 for (dn = of_find_matching_node(NULL, matches); dn; \
197 dn = of_find_matching_node(dn, matches))
198#define for_each_matching_node_and_match(dn, matches, match) \
199 for (dn = of_find_matching_node_and_match(NULL, matches, match); \
200 dn; dn = of_find_matching_node_and_match(dn, matches, match))
201extern struct device_node *of_find_node_by_path(const char *path); 181extern struct device_node *of_find_node_by_path(const char *path);
202extern struct device_node *of_find_node_by_phandle(phandle handle); 182extern struct device_node *of_find_node_by_phandle(phandle handle);
203extern struct device_node *of_get_parent(const struct device_node *node); 183extern struct device_node *of_get_parent(const struct device_node *node);
@@ -209,43 +189,11 @@ extern struct device_node *of_get_next_available_child(
209 189
210extern struct device_node *of_get_child_by_name(const struct device_node *node, 190extern struct device_node *of_get_child_by_name(const struct device_node *node,
211 const char *name); 191 const char *name);
212#define for_each_child_of_node(parent, child) \
213 for (child = of_get_next_child(parent, NULL); child != NULL; \
214 child = of_get_next_child(parent, child))
215
216#define for_each_available_child_of_node(parent, child) \
217 for (child = of_get_next_available_child(parent, NULL); child != NULL; \
218 child = of_get_next_available_child(parent, child))
219
220static inline int of_get_child_count(const struct device_node *np)
221{
222 struct device_node *child;
223 int num = 0;
224
225 for_each_child_of_node(np, child)
226 num++;
227
228 return num;
229}
230
231static inline int of_get_available_child_count(const struct device_node *np)
232{
233 struct device_node *child;
234 int num = 0;
235
236 for_each_available_child_of_node(np, child)
237 num++;
238
239 return num;
240}
241 192
242/* cache lookup */ 193/* cache lookup */
243extern struct device_node *of_find_next_cache_node(const struct device_node *); 194extern struct device_node *of_find_next_cache_node(const struct device_node *);
244extern struct device_node *of_find_node_with_property( 195extern struct device_node *of_find_node_with_property(
245 struct device_node *from, const char *prop_name); 196 struct device_node *from, const char *prop_name);
246#define for_each_node_with_property(dn, prop_name) \
247 for (dn = of_find_node_with_property(NULL, prop_name); dn; \
248 dn = of_find_node_with_property(dn, prop_name))
249 197
250extern struct property *of_find_property(const struct device_node *np, 198extern struct property *of_find_property(const struct device_node *np,
251 const char *name, 199 const char *name,
@@ -367,42 +315,53 @@ static inline struct device_node *of_find_node_by_name(struct device_node *from,
367 return NULL; 315 return NULL;
368} 316}
369 317
370static inline struct device_node *of_get_parent(const struct device_node *node) 318static inline struct device_node *of_find_node_by_type(struct device_node *from,
319 const char *type)
371{ 320{
372 return NULL; 321 return NULL;
373} 322}
374 323
375static inline bool of_have_populated_dt(void) 324static inline struct device_node *of_find_matching_node_and_match(
325 struct device_node *from,
326 const struct of_device_id *matches,
327 const struct of_device_id **match)
376{ 328{
377 return false; 329 return NULL;
378} 330}
379 331
380/* Kill an unused variable warning on a device_node pointer */ 332static inline struct device_node *of_get_parent(const struct device_node *node)
381static inline void __of_use_dn(const struct device_node *np)
382{ 333{
334 return NULL;
383} 335}
384 336
385#define for_each_child_of_node(parent, child) \ 337static inline struct device_node *of_get_next_child(
386 while (__of_use_dn(parent), __of_use_dn(child), 0) 338 const struct device_node *node, struct device_node *prev)
339{
340 return NULL;
341}
387 342
388#define for_each_available_child_of_node(parent, child) \ 343static inline struct device_node *of_get_next_available_child(
389 while (0) 344 const struct device_node *node, struct device_node *prev)
345{
346 return NULL;
347}
390 348
391static inline struct device_node *of_get_child_by_name( 349static inline struct device_node *of_find_node_with_property(
392 const struct device_node *node, 350 struct device_node *from, const char *prop_name)
393 const char *name)
394{ 351{
395 return NULL; 352 return NULL;
396} 353}
397 354
398static inline int of_get_child_count(const struct device_node *np) 355static inline bool of_have_populated_dt(void)
399{ 356{
400 return 0; 357 return false;
401} 358}
402 359
403static inline int of_get_available_child_count(const struct device_node *np) 360static inline struct device_node *of_get_child_by_name(
361 const struct device_node *node,
362 const char *name)
404{ 363{
405 return 0; 364 return NULL;
406} 365}
407 366
408static inline int of_device_is_compatible(const struct device_node *device, 367static inline int of_device_is_compatible(const struct device_node *device,
@@ -569,6 +528,13 @@ extern int of_node_to_nid(struct device_node *np);
569static inline int of_node_to_nid(struct device_node *device) { return 0; } 528static inline int of_node_to_nid(struct device_node *device) { return 0; }
570#endif 529#endif
571 530
531static inline struct device_node *of_find_matching_node(
532 struct device_node *from,
533 const struct of_device_id *matches)
534{
535 return of_find_matching_node_and_match(from, matches, NULL);
536}
537
572/** 538/**
573 * of_property_read_bool - Findfrom a property 539 * of_property_read_bool - Findfrom a property
574 * @np: device node from which the property value is to be read. 540 * @np: device node from which the property value is to be read.
@@ -618,6 +584,55 @@ static inline int of_property_read_u32(const struct device_node *np,
618 s; \ 584 s; \
619 s = of_prop_next_string(prop, s)) 585 s = of_prop_next_string(prop, s))
620 586
587#define for_each_node_by_name(dn, name) \
588 for (dn = of_find_node_by_name(NULL, name); dn; \
589 dn = of_find_node_by_name(dn, name))
590#define for_each_node_by_type(dn, type) \
591 for (dn = of_find_node_by_type(NULL, type); dn; \
592 dn = of_find_node_by_type(dn, type))
593#define for_each_compatible_node(dn, type, compatible) \
594 for (dn = of_find_compatible_node(NULL, type, compatible); dn; \
595 dn = of_find_compatible_node(dn, type, compatible))
596#define for_each_matching_node(dn, matches) \
597 for (dn = of_find_matching_node(NULL, matches); dn; \
598 dn = of_find_matching_node(dn, matches))
599#define for_each_matching_node_and_match(dn, matches, match) \
600 for (dn = of_find_matching_node_and_match(NULL, matches, match); \
601 dn; dn = of_find_matching_node_and_match(dn, matches, match))
602
603#define for_each_child_of_node(parent, child) \
604 for (child = of_get_next_child(parent, NULL); child != NULL; \
605 child = of_get_next_child(parent, child))
606#define for_each_available_child_of_node(parent, child) \
607 for (child = of_get_next_available_child(parent, NULL); child != NULL; \
608 child = of_get_next_available_child(parent, child))
609
610#define for_each_node_with_property(dn, prop_name) \
611 for (dn = of_find_node_with_property(NULL, prop_name); dn; \
612 dn = of_find_node_with_property(dn, prop_name))
613
614static inline int of_get_child_count(const struct device_node *np)
615{
616 struct device_node *child;
617 int num = 0;
618
619 for_each_child_of_node(np, child)
620 num++;
621
622 return num;
623}
624
625static inline int of_get_available_child_count(const struct device_node *np)
626{
627 struct device_node *child;
628 int num = 0;
629
630 for_each_available_child_of_node(np, child)
631 num++;
632
633 return num;
634}
635
621#if defined(CONFIG_PROC_FS) && defined(CONFIG_PROC_DEVICETREE) 636#if defined(CONFIG_PROC_FS) && defined(CONFIG_PROC_DEVICETREE)
622extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *); 637extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *);
623extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop); 638extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop);
diff --git a/include/linux/of_device.h b/include/linux/of_device.h
index 8d7dd6768cb7..ef370210ffb2 100644
--- a/include/linux/of_device.h
+++ b/include/linux/of_device.h
@@ -78,11 +78,13 @@ static inline int of_device_uevent_modalias(struct device *dev,
78 78
79static inline void of_device_node_put(struct device *dev) { } 79static inline void of_device_node_put(struct device *dev) { }
80 80
81static inline const struct of_device_id *of_match_device( 81static inline const struct of_device_id *__of_match_device(
82 const struct of_device_id *matches, const struct device *dev) 82 const struct of_device_id *matches, const struct device *dev)
83{ 83{
84 return NULL; 84 return NULL;
85} 85}
86#define of_match_device(matches, dev) \
87 __of_match_device(of_match_ptr(matches), (dev))
86 88
87static inline struct device_node *of_cpu_device_node_get(int cpu) 89static inline struct device_node *of_cpu_device_node_get(int cpu)
88{ 90{
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index e464b4e987e8..d1fe1a761047 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -228,9 +228,9 @@ PAGEFLAG(OwnerPriv1, owner_priv_1) TESTCLEARFLAG(OwnerPriv1, owner_priv_1)
228TESTPAGEFLAG(Writeback, writeback) TESTSCFLAG(Writeback, writeback) 228TESTPAGEFLAG(Writeback, writeback) TESTSCFLAG(Writeback, writeback)
229PAGEFLAG(MappedToDisk, mappedtodisk) 229PAGEFLAG(MappedToDisk, mappedtodisk)
230 230
231/* PG_readahead is only used for file reads; PG_reclaim is only for writes */ 231/* PG_readahead is only used for reads; PG_reclaim is only for writes */
232PAGEFLAG(Reclaim, reclaim) TESTCLEARFLAG(Reclaim, reclaim) 232PAGEFLAG(Reclaim, reclaim) TESTCLEARFLAG(Reclaim, reclaim)
233PAGEFLAG(Readahead, reclaim) /* Reminder to do async read-ahead */ 233PAGEFLAG(Readahead, reclaim) TESTCLEARFLAG(Readahead, reclaim)
234 234
235#ifdef CONFIG_HIGHMEM 235#ifdef CONFIG_HIGHMEM
236/* 236/*
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index e273e5ac19c9..3f83459dbb20 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -146,7 +146,9 @@ static inline void phy_set_bus_width(struct phy *phy, int bus_width)
146 phy->attrs.bus_width = bus_width; 146 phy->attrs.bus_width = bus_width;
147} 147}
148struct phy *phy_get(struct device *dev, const char *string); 148struct phy *phy_get(struct device *dev, const char *string);
149struct phy *phy_optional_get(struct device *dev, const char *string);
149struct phy *devm_phy_get(struct device *dev, const char *string); 150struct phy *devm_phy_get(struct device *dev, const char *string);
151struct phy *devm_phy_optional_get(struct device *dev, const char *string);
150void phy_put(struct phy *phy); 152void phy_put(struct phy *phy);
151void devm_phy_put(struct device *dev, struct phy *phy); 153void devm_phy_put(struct device *dev, struct phy *phy);
152struct phy *of_phy_simple_xlate(struct device *dev, 154struct phy *of_phy_simple_xlate(struct device *dev,
@@ -232,11 +234,23 @@ static inline struct phy *phy_get(struct device *dev, const char *string)
232 return ERR_PTR(-ENOSYS); 234 return ERR_PTR(-ENOSYS);
233} 235}
234 236
237static inline struct phy *phy_optional_get(struct device *dev,
238 const char *string)
239{
240 return ERR_PTR(-ENOSYS);
241}
242
235static inline struct phy *devm_phy_get(struct device *dev, const char *string) 243static inline struct phy *devm_phy_get(struct device *dev, const char *string)
236{ 244{
237 return ERR_PTR(-ENOSYS); 245 return ERR_PTR(-ENOSYS);
238} 246}
239 247
248static inline struct phy *devm_phy_optional_get(struct device *dev,
249 const char *string)
250{
251 return ERR_PTR(-ENOSYS);
252}
253
240static inline void phy_put(struct phy *phy) 254static inline void phy_put(struct phy *phy)
241{ 255{
242} 256}
diff --git a/include/linux/platform_data/atmel.h b/include/linux/platform_data/atmel.h
index cea9f70133c5..e26b0c14edea 100644
--- a/include/linux/platform_data/atmel.h
+++ b/include/linux/platform_data/atmel.h
@@ -84,6 +84,7 @@ struct atmel_uart_data {
84 short use_dma_rx; /* use receive DMA? */ 84 short use_dma_rx; /* use receive DMA? */
85 void __iomem *regs; /* virt. base address, if any */ 85 void __iomem *regs; /* virt. base address, if any */
86 struct serial_rs485 rs485; /* rs485 settings */ 86 struct serial_rs485 rs485; /* rs485 settings */
87 int rts_gpio; /* optional RTS GPIO */
87}; 88};
88 89
89 /* Touchscreen Controller */ 90 /* Touchscreen Controller */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 68a0e84463a0..a781dec1cd0b 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -128,6 +128,7 @@ struct bio_list;
128struct fs_struct; 128struct fs_struct;
129struct perf_event_context; 129struct perf_event_context;
130struct blk_plug; 130struct blk_plug;
131struct filename;
131 132
132/* 133/*
133 * List of flags we want to share for kernel threads, 134 * List of flags we want to share for kernel threads,
@@ -2311,7 +2312,7 @@ extern void do_group_exit(int);
2311extern int allow_signal(int); 2312extern int allow_signal(int);
2312extern int disallow_signal(int); 2313extern int disallow_signal(int);
2313 2314
2314extern int do_execve(const char *, 2315extern int do_execve(struct filename *,
2315 const char __user * const __user *, 2316 const char __user * const __user *,
2316 const char __user * const __user *); 2317 const char __user * const __user *);
2317extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); 2318extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *);
diff --git a/include/linux/smp.h b/include/linux/smp.h
index 3834f43f9993..6ae004e437ea 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -188,6 +188,9 @@ static inline void kick_all_cpus_sync(void) { }
188 */ 188 */
189extern void arch_disable_smp_support(void); 189extern void arch_disable_smp_support(void);
190 190
191extern void arch_enable_nonboot_cpus_begin(void);
192extern void arch_enable_nonboot_cpus_end(void);
193
191void smp_setup_processor_id(void); 194void smp_setup_processor_id(void);
192 195
193#endif /* __LINUX_SMP_H */ 196#endif /* __LINUX_SMP_H */
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index a1d4ca290862..4203c66d8803 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -273,7 +273,7 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
273 * message while queuing transfers that arrive in the meantime. When the 273 * message while queuing transfers that arrive in the meantime. When the
274 * driver is finished with this message, it must call 274 * driver is finished with this message, it must call
275 * spi_finalize_current_message() so the subsystem can issue the next 275 * spi_finalize_current_message() so the subsystem can issue the next
276 * transfer 276 * message
277 * @unprepare_transfer_hardware: there are currently no more messages on the 277 * @unprepare_transfer_hardware: there are currently no more messages on the
278 * queue so the subsystem notifies the driver that it may relax the 278 * queue so the subsystem notifies the driver that it may relax the
279 * hardware by issuing this call 279 * hardware by issuing this call
@@ -287,7 +287,10 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
287 * - return 1 if the transfer is still in progress. When 287 * - return 1 if the transfer is still in progress. When
288 * the driver is finished with this transfer it must 288 * the driver is finished with this transfer it must
289 * call spi_finalize_current_transfer() so the subsystem 289 * call spi_finalize_current_transfer() so the subsystem
290 * can issue the next transfer 290 * can issue the next transfer. Note: transfer_one and
291 * transfer_one_message are mutually exclusive; when both
292 * are set, the generic subsystem does not call your
293 * transfer_one callback.
291 * @unprepare_message: undo any work done by prepare_message(). 294 * @unprepare_message: undo any work done by prepare_message().
292 * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS 295 * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS
293 * number. Any individual value may be -ENOENT for CS lines that 296 * number. Any individual value may be -ENOENT for CS lines that
diff --git a/include/linux/usb.h b/include/linux/usb.h
index c716da18c668..7f6eb859873e 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -1265,8 +1265,6 @@ typedef void (*usb_complete_t)(struct urb *);
1265 * @sg: scatter gather buffer list, the buffer size of each element in 1265 * @sg: scatter gather buffer list, the buffer size of each element in
1266 * the list (except the last) must be divisible by the endpoint's 1266 * the list (except the last) must be divisible by the endpoint's
1267 * max packet size if no_sg_constraint isn't set in 'struct usb_bus' 1267 * max packet size if no_sg_constraint isn't set in 'struct usb_bus'
1268 * (FIXME: scatter-gather under xHCI is broken for periodic transfers.
1269 * Do not use urb->sg for interrupt endpoints for now, only bulk.)
1270 * @num_mapped_sgs: (internal) number of mapped sg entries 1268 * @num_mapped_sgs: (internal) number of mapped sg entries
1271 * @num_sgs: number of entries in the sg list 1269 * @num_sgs: number of entries in the sg list
1272 * @transfer_buffer_length: How big is transfer_buffer. The transfer may 1270 * @transfer_buffer_length: How big is transfer_buffer. The transfer may
diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h
index c557c6d096de..3a712e2e7d76 100644
--- a/include/linux/vm_event_item.h
+++ b/include/linux/vm_event_item.h
@@ -71,12 +71,14 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
71 THP_ZERO_PAGE_ALLOC, 71 THP_ZERO_PAGE_ALLOC,
72 THP_ZERO_PAGE_ALLOC_FAILED, 72 THP_ZERO_PAGE_ALLOC_FAILED,
73#endif 73#endif
74#ifdef CONFIG_DEBUG_TLBFLUSH
74#ifdef CONFIG_SMP 75#ifdef CONFIG_SMP
75 NR_TLB_REMOTE_FLUSH, /* cpu tried to flush others' tlbs */ 76 NR_TLB_REMOTE_FLUSH, /* cpu tried to flush others' tlbs */
76 NR_TLB_REMOTE_FLUSH_RECEIVED,/* cpu received ipi for flush */ 77 NR_TLB_REMOTE_FLUSH_RECEIVED,/* cpu received ipi for flush */
77#endif 78#endif /* CONFIG_SMP */
78 NR_TLB_LOCAL_FLUSH_ALL, 79 NR_TLB_LOCAL_FLUSH_ALL,
79 NR_TLB_LOCAL_FLUSH_ONE, 80 NR_TLB_LOCAL_FLUSH_ONE,
81#endif /* CONFIG_DEBUG_TLBFLUSH */
80 NR_VM_EVENT_ITEMS 82 NR_VM_EVENT_ITEMS
81}; 83};
82 84
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
index a67b38415768..67ce70c8279b 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -83,6 +83,14 @@ static inline void vm_events_fold_cpu(int cpu)
83#define count_vm_numa_events(x, y) do { (void)(y); } while (0) 83#define count_vm_numa_events(x, y) do { (void)(y); } while (0)
84#endif /* CONFIG_NUMA_BALANCING */ 84#endif /* CONFIG_NUMA_BALANCING */
85 85
86#ifdef CONFIG_DEBUG_TLBFLUSH
87#define count_vm_tlb_event(x) count_vm_event(x)
88#define count_vm_tlb_events(x, y) count_vm_events(x, y)
89#else
90#define count_vm_tlb_event(x) do {} while (0)
91#define count_vm_tlb_events(x, y) do { (void)(y); } while (0)
92#endif
93
86#define __count_zone_vm_events(item, zone, delta) \ 94#define __count_zone_vm_events(item, zone, delta) \
87 __count_vm_events(item##_NORMAL - ZONE_NORMAL + \ 95 __count_vm_events(item##_NORMAL - ZONE_NORMAL + \
88 zone_idx(zone), delta) 96 zone_idx(zone), delta)
diff --git a/include/net/datalink.h b/include/net/datalink.h
index deb7ca75db48..93cb18f729b5 100644
--- a/include/net/datalink.h
+++ b/include/net/datalink.h
@@ -15,4 +15,6 @@ struct datalink_proto {
15 struct list_head node; 15 struct list_head node;
16}; 16};
17 17
18struct datalink_proto *make_EII_client(void);
19void destroy_EII_client(struct datalink_proto *dl);
18#endif 20#endif
diff --git a/include/net/dn.h b/include/net/dn.h
index ccc15588d108..913b73d239f5 100644
--- a/include/net/dn.h
+++ b/include/net/dn.h
@@ -200,6 +200,8 @@ static inline void dn_sk_ports_copy(struct flowidn *fld, struct dn_scp *scp)
200} 200}
201 201
202unsigned int dn_mss_from_pmtu(struct net_device *dev, int mtu); 202unsigned int dn_mss_from_pmtu(struct net_device *dev, int mtu);
203void dn_register_sysctl(void);
204void dn_unregister_sysctl(void);
203 205
204#define DN_MENUVER_ACC 0x01 206#define DN_MENUVER_ACC 0x01
205#define DN_MENUVER_USR 0x02 207#define DN_MENUVER_USR 0x02
diff --git a/include/net/dn_route.h b/include/net/dn_route.h
index b409ad6b8d7a..55df9939bca2 100644
--- a/include/net/dn_route.h
+++ b/include/net/dn_route.h
@@ -20,6 +20,8 @@ int dn_route_output_sock(struct dst_entry __rcu **pprt, struct flowidn *,
20 struct sock *sk, int flags); 20 struct sock *sk, int flags);
21int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb); 21int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb);
22void dn_rt_cache_flush(int delay); 22void dn_rt_cache_flush(int delay);
23int dn_route_rcv(struct sk_buff *skb, struct net_device *dev,
24 struct packet_type *pt, struct net_device *orig_dev);
23 25
24/* Masks for flags field */ 26/* Masks for flags field */
25#define DN_RT_F_PID 0x07 /* Mask for packet type */ 27#define DN_RT_F_PID 0x07 /* Mask for packet type */
diff --git a/include/net/ethoc.h b/include/net/ethoc.h
index 96f3789b27bc..2a2d6bb34eb8 100644
--- a/include/net/ethoc.h
+++ b/include/net/ethoc.h
@@ -16,6 +16,7 @@
16struct ethoc_platform_data { 16struct ethoc_platform_data {
17 u8 hwaddr[IFHWADDRLEN]; 17 u8 hwaddr[IFHWADDRLEN];
18 s8 phy_id; 18 s8 phy_id;
19 u32 eth_clkfreq;
19}; 20};
20 21
21#endif /* !LINUX_NET_ETHOC_H */ 22#endif /* !LINUX_NET_ETHOC_H */
diff --git a/include/net/ipx.h b/include/net/ipx.h
index 9e9e35465baf..0143180fecc9 100644
--- a/include/net/ipx.h
+++ b/include/net/ipx.h
@@ -140,6 +140,17 @@ static __inline__ void ipxitf_hold(struct ipx_interface *intrfc)
140} 140}
141 141
142void ipxitf_down(struct ipx_interface *intrfc); 142void ipxitf_down(struct ipx_interface *intrfc);
143struct ipx_interface *ipxitf_find_using_net(__be32 net);
144int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb, char *node);
145__be16 ipx_cksum(struct ipxhdr *packet, int length);
146int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc,
147 unsigned char *node);
148void ipxrtr_del_routes(struct ipx_interface *intrfc);
149int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx,
150 struct iovec *iov, size_t len, int noblock);
151int ipxrtr_route_skb(struct sk_buff *skb);
152struct ipx_route *ipxrtr_lookup(__be32 net);
153int ipxrtr_ioctl(unsigned int cmd, void __user *arg);
143 154
144static __inline__ void ipxitf_put(struct ipx_interface *intrfc) 155static __inline__ void ipxitf_put(struct ipx_interface *intrfc)
145{ 156{
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index da68c9a90ac5..991dcd94cbbf 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -162,6 +162,14 @@ extern struct list_head net_namespace_list;
162struct net *get_net_ns_by_pid(pid_t pid); 162struct net *get_net_ns_by_pid(pid_t pid);
163struct net *get_net_ns_by_fd(int pid); 163struct net *get_net_ns_by_fd(int pid);
164 164
165#ifdef CONFIG_SYSCTL
166void ipx_register_sysctl(void);
167void ipx_unregister_sysctl(void);
168#else
169#define ipx_register_sysctl()
170#define ipx_unregister_sysctl()
171#endif
172
165#ifdef CONFIG_NET_NS 173#ifdef CONFIG_NET_NS
166void __put_net(struct net *net); 174void __put_net(struct net *net);
167 175
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index 01ea6eed1bb1..b2ac6246b7e0 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -284,6 +284,8 @@ extern unsigned int nf_conntrack_max;
284extern unsigned int nf_conntrack_hash_rnd; 284extern unsigned int nf_conntrack_hash_rnd;
285void init_nf_conntrack_hash_rnd(void); 285void init_nf_conntrack_hash_rnd(void);
286 286
287void nf_conntrack_tmpl_insert(struct net *net, struct nf_conn *tmpl);
288
287#define NF_CT_STAT_INC(net, count) __this_cpu_inc((net)->ct.stat->count) 289#define NF_CT_STAT_INC(net, count) __this_cpu_inc((net)->ct.stat->count)
288#define NF_CT_STAT_INC_ATOMIC(net, count) this_cpu_inc((net)->ct.stat->count) 290#define NF_CT_STAT_INC_ATOMIC(net, count) this_cpu_inc((net)->ct.stat->count)
289 291
diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h
index 57c8ff7955df..e7e14ffe0f6a 100644
--- a/include/net/netfilter/nf_tables.h
+++ b/include/net/netfilter/nf_tables.h
@@ -252,6 +252,7 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
252 * @owner: module reference 252 * @owner: module reference
253 * @policy: netlink attribute policy 253 * @policy: netlink attribute policy
254 * @maxattr: highest netlink attribute number 254 * @maxattr: highest netlink attribute number
255 * @family: address family for AF-specific types
255 */ 256 */
256struct nft_expr_type { 257struct nft_expr_type {
257 const struct nft_expr_ops *(*select_ops)(const struct nft_ctx *, 258 const struct nft_expr_ops *(*select_ops)(const struct nft_ctx *,
@@ -262,6 +263,7 @@ struct nft_expr_type {
262 struct module *owner; 263 struct module *owner;
263 const struct nla_policy *policy; 264 const struct nla_policy *policy;
264 unsigned int maxattr; 265 unsigned int maxattr;
266 u8 family;
265}; 267};
266 268
267/** 269/**
@@ -320,7 +322,6 @@ static inline void *nft_expr_priv(const struct nft_expr *expr)
320 * struct nft_rule - nf_tables rule 322 * struct nft_rule - nf_tables rule
321 * 323 *
322 * @list: used internally 324 * @list: used internally
323 * @rcu_head: used internally for rcu
324 * @handle: rule handle 325 * @handle: rule handle
325 * @genmask: generation mask 326 * @genmask: generation mask
326 * @dlen: length of expression data 327 * @dlen: length of expression data
@@ -328,7 +329,6 @@ static inline void *nft_expr_priv(const struct nft_expr *expr)
328 */ 329 */
329struct nft_rule { 330struct nft_rule {
330 struct list_head list; 331 struct list_head list;
331 struct rcu_head rcu_head;
332 u64 handle:46, 332 u64 handle:46,
333 genmask:2, 333 genmask:2,
334 dlen:16; 334 dlen:16;
@@ -389,7 +389,6 @@ enum nft_chain_flags {
389 * 389 *
390 * @rules: list of rules in the chain 390 * @rules: list of rules in the chain
391 * @list: used internally 391 * @list: used internally
392 * @rcu_head: used internally
393 * @net: net namespace that this chain belongs to 392 * @net: net namespace that this chain belongs to
394 * @table: table that this chain belongs to 393 * @table: table that this chain belongs to
395 * @handle: chain handle 394 * @handle: chain handle
@@ -401,7 +400,6 @@ enum nft_chain_flags {
401struct nft_chain { 400struct nft_chain {
402 struct list_head rules; 401 struct list_head rules;
403 struct list_head list; 402 struct list_head list;
404 struct rcu_head rcu_head;
405 struct net *net; 403 struct net *net;
406 struct nft_table *table; 404 struct nft_table *table;
407 u64 handle; 405 u64 handle;
@@ -529,6 +527,9 @@ void nft_unregister_expr(struct nft_expr_type *);
529#define MODULE_ALIAS_NFT_CHAIN(family, name) \ 527#define MODULE_ALIAS_NFT_CHAIN(family, name) \
530 MODULE_ALIAS("nft-chain-" __stringify(family) "-" name) 528 MODULE_ALIAS("nft-chain-" __stringify(family) "-" name)
531 529
530#define MODULE_ALIAS_NFT_AF_EXPR(family, name) \
531 MODULE_ALIAS("nft-expr-" __stringify(family) "-" name)
532
532#define MODULE_ALIAS_NFT_EXPR(name) \ 533#define MODULE_ALIAS_NFT_EXPR(name) \
533 MODULE_ALIAS("nft-expr-" name) 534 MODULE_ALIAS("nft-expr-" name)
534 535
diff --git a/include/net/netfilter/nft_reject.h b/include/net/netfilter/nft_reject.h
new file mode 100644
index 000000000000..36b0da2d55bb
--- /dev/null
+++ b/include/net/netfilter/nft_reject.h
@@ -0,0 +1,25 @@
1#ifndef _NFT_REJECT_H_
2#define _NFT_REJECT_H_
3
4struct nft_reject {
5 enum nft_reject_types type:8;
6 u8 icmp_code;
7};
8
9extern const struct nla_policy nft_reject_policy[];
10
11int nft_reject_init(const struct nft_ctx *ctx,
12 const struct nft_expr *expr,
13 const struct nlattr * const tb[]);
14
15int nft_reject_dump(struct sk_buff *skb, const struct nft_expr *expr);
16
17void nft_reject_ipv4_eval(const struct nft_expr *expr,
18 struct nft_data data[NFT_REG_MAX + 1],
19 const struct nft_pktinfo *pkt);
20
21void nft_reject_ipv6_eval(const struct nft_expr *expr,
22 struct nft_data data[NFT_REG_MAX + 1],
23 const struct nft_pktinfo *pkt);
24
25#endif
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 8d4a1c06f7e4..6793f32ccb58 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -226,7 +226,8 @@ enum ib_port_cap_flags {
226 IB_PORT_CAP_MASK_NOTICE_SUP = 1 << 22, 226 IB_PORT_CAP_MASK_NOTICE_SUP = 1 << 22,
227 IB_PORT_BOOT_MGMT_SUP = 1 << 23, 227 IB_PORT_BOOT_MGMT_SUP = 1 << 23,
228 IB_PORT_LINK_LATENCY_SUP = 1 << 24, 228 IB_PORT_LINK_LATENCY_SUP = 1 << 24,
229 IB_PORT_CLIENT_REG_SUP = 1 << 25 229 IB_PORT_CLIENT_REG_SUP = 1 << 25,
230 IB_PORT_IP_BASED_GIDS = 1 << 26
230}; 231};
231 232
232enum ib_port_width { 233enum ib_port_width {
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index c9c791209cd1..1772fadcff62 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -525,7 +525,6 @@ struct se_cmd {
525#define CMD_T_COMPLETE (1 << 2) 525#define CMD_T_COMPLETE (1 << 2)
526#define CMD_T_SENT (1 << 4) 526#define CMD_T_SENT (1 << 4)
527#define CMD_T_STOP (1 << 5) 527#define CMD_T_STOP (1 << 5)
528#define CMD_T_FAILED (1 << 6)
529#define CMD_T_DEV_ACTIVE (1 << 7) 528#define CMD_T_DEV_ACTIVE (1 << 7)
530#define CMD_T_REQUEST_STOP (1 << 8) 529#define CMD_T_REQUEST_STOP (1 << 8)
531#define CMD_T_BUSY (1 << 9) 530#define CMD_T_BUSY (1 << 9)
diff --git a/include/trace/events/power.h b/include/trace/events/power.h
index 9e9475c85de5..e5bf9a76f169 100644
--- a/include/trace/events/power.h
+++ b/include/trace/events/power.h
@@ -42,7 +42,6 @@ TRACE_EVENT(pstate_sample,
42 u32 state, 42 u32 state,
43 u64 mperf, 43 u64 mperf,
44 u64 aperf, 44 u64 aperf,
45 u32 energy,
46 u32 freq 45 u32 freq
47 ), 46 ),
48 47
@@ -51,7 +50,6 @@ TRACE_EVENT(pstate_sample,
51 state, 50 state,
52 mperf, 51 mperf,
53 aperf, 52 aperf,
54 energy,
55 freq 53 freq
56 ), 54 ),
57 55
@@ -61,7 +59,6 @@ TRACE_EVENT(pstate_sample,
61 __field(u32, state) 59 __field(u32, state)
62 __field(u64, mperf) 60 __field(u64, mperf)
63 __field(u64, aperf) 61 __field(u64, aperf)
64 __field(u32, energy)
65 __field(u32, freq) 62 __field(u32, freq)
66 63
67 ), 64 ),
@@ -72,17 +69,15 @@ TRACE_EVENT(pstate_sample,
72 __entry->state = state; 69 __entry->state = state;
73 __entry->mperf = mperf; 70 __entry->mperf = mperf;
74 __entry->aperf = aperf; 71 __entry->aperf = aperf;
75 __entry->energy = energy;
76 __entry->freq = freq; 72 __entry->freq = freq;
77 ), 73 ),
78 74
79 TP_printk("core_busy=%lu scaled=%lu state=%lu mperf=%llu aperf=%llu energy=%lu freq=%lu ", 75 TP_printk("core_busy=%lu scaled=%lu state=%lu mperf=%llu aperf=%llu freq=%lu ",
80 (unsigned long)__entry->core_busy, 76 (unsigned long)__entry->core_busy,
81 (unsigned long)__entry->scaled_busy, 77 (unsigned long)__entry->scaled_busy,
82 (unsigned long)__entry->state, 78 (unsigned long)__entry->state,
83 (unsigned long long)__entry->mperf, 79 (unsigned long long)__entry->mperf,
84 (unsigned long long)__entry->aperf, 80 (unsigned long long)__entry->aperf,
85 (unsigned long)__entry->energy,
86 (unsigned long)__entry->freq 81 (unsigned long)__entry->freq
87 ) 82 )
88 83
diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h
index 1b8a0f4c9590..b4d69092fbdb 100644
--- a/include/uapi/linux/btrfs.h
+++ b/include/uapi/linux/btrfs.h
@@ -558,7 +558,6 @@ static inline char *btrfs_err_str(enum btrfs_err_code err_code)
558#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64) 558#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
559#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \ 559#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
560 struct btrfs_ioctl_space_args) 560 struct btrfs_ioctl_space_args)
561#define BTRFS_IOC_GLOBAL_RSV _IOR(BTRFS_IOCTL_MAGIC, 20, __u64)
562#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64) 561#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
563#define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64) 562#define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
564#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \ 563#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
diff --git a/include/uapi/linux/in6.h b/include/uapi/linux/in6.h
index 633b93cac1ed..e9a1d2d973b6 100644
--- a/include/uapi/linux/in6.h
+++ b/include/uapi/linux/in6.h
@@ -128,22 +128,13 @@ struct in6_flowlabel_req {
128 * IPV6 extension headers 128 * IPV6 extension headers
129 */ 129 */
130#if __UAPI_DEF_IPPROTO_V6 130#if __UAPI_DEF_IPPROTO_V6
131enum { 131#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */
132 IPPROTO_HOPOPTS = 0, /* IPv6 hop-by-hop options */ 132#define IPPROTO_ROUTING 43 /* IPv6 routing header */
133#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS 133#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */
134 IPPROTO_ROUTING = 43, /* IPv6 routing header */ 134#define IPPROTO_ICMPV6 58 /* ICMPv6 */
135#define IPPROTO_ROUTING IPPROTO_ROUTING 135#define IPPROTO_NONE 59 /* IPv6 no next header */
136 IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header */ 136#define IPPROTO_DSTOPTS 60 /* IPv6 destination options */
137#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT 137#define IPPROTO_MH 135 /* IPv6 mobility header */
138 IPPROTO_ICMPV6 = 58, /* ICMPv6 */
139#define IPPROTO_ICMPV6 IPPROTO_ICMPV6
140 IPPROTO_NONE = 59, /* IPv6 no next header */
141#define IPPROTO_NONE IPPROTO_NONE
142 IPPROTO_DSTOPTS = 60, /* IPv6 destination options */
143#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
144 IPPROTO_MH = 135, /* IPv6 mobility header */
145#define IPPROTO_MH IPPROTO_MH
146};
147#endif /* __UAPI_DEF_IPPROTO_V6 */ 138#endif /* __UAPI_DEF_IPPROTO_V6 */
148 139
149/* 140/*
diff --git a/include/uapi/linux/mic_ioctl.h b/include/uapi/linux/mic_ioctl.h
index 7fabba5059cf..feb0b4c0814c 100644
--- a/include/uapi/linux/mic_ioctl.h
+++ b/include/uapi/linux/mic_ioctl.h
@@ -39,7 +39,7 @@ struct mic_copy_desc {
39#else 39#else
40 struct iovec *iov; 40 struct iovec *iov;
41#endif 41#endif
42 int iovcnt; 42 __u32 iovcnt;
43 __u8 vr_idx; 43 __u8 vr_idx;
44 __u8 update_used; 44 __u8 update_used;
45 __u32 out_len; 45 __u32 out_len;
diff --git a/include/uapi/linux/nvme.h b/include/uapi/linux/nvme.h
index 989c04e0c563..e5ab62201119 100644
--- a/include/uapi/linux/nvme.h
+++ b/include/uapi/linux/nvme.h
@@ -350,6 +350,16 @@ struct nvme_delete_queue {
350 __u32 rsvd11[5]; 350 __u32 rsvd11[5];
351}; 351};
352 352
353struct nvme_abort_cmd {
354 __u8 opcode;
355 __u8 flags;
356 __u16 command_id;
357 __u32 rsvd1[9];
358 __le16 sqid;
359 __u16 cid;
360 __u32 rsvd11[5];
361};
362
353struct nvme_download_firmware { 363struct nvme_download_firmware {
354 __u8 opcode; 364 __u8 opcode;
355 __u8 flags; 365 __u8 flags;
@@ -384,6 +394,7 @@ struct nvme_command {
384 struct nvme_download_firmware dlfw; 394 struct nvme_download_firmware dlfw;
385 struct nvme_format_cmd format; 395 struct nvme_format_cmd format;
386 struct nvme_dsm_cmd dsm; 396 struct nvme_dsm_cmd dsm;
397 struct nvme_abort_cmd abort;
387 }; 398 };
388}; 399};
389 400
diff --git a/include/uapi/xen/Kbuild b/include/uapi/xen/Kbuild
index 61257cb14653..5c459628e8c7 100644
--- a/include/uapi/xen/Kbuild
+++ b/include/uapi/xen/Kbuild
@@ -1,3 +1,5 @@
1# UAPI Header export list 1# UAPI Header export list
2header-y += evtchn.h 2header-y += evtchn.h
3header-y += gntalloc.h
4header-y += gntdev.h
3header-y += privcmd.h 5header-y += privcmd.h
diff --git a/include/xen/gntalloc.h b/include/uapi/xen/gntalloc.h
index 76bd58065f4f..76bd58065f4f 100644
--- a/include/xen/gntalloc.h
+++ b/include/uapi/xen/gntalloc.h
diff --git a/include/xen/gntdev.h b/include/uapi/xen/gntdev.h
index 5304bd3c84c5..5304bd3c84c5 100644
--- a/include/xen/gntdev.h
+++ b/include/uapi/xen/gntdev.h
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h
index 7ad033dbc845..a5af2a26d94f 100644
--- a/include/xen/grant_table.h
+++ b/include/xen/grant_table.h
@@ -191,15 +191,11 @@ void gnttab_free_auto_xlat_frames(void);
191#define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) 191#define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr))
192 192
193int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops, 193int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
194 struct gnttab_map_grant_ref *kmap_ops,
194 struct page **pages, unsigned int count); 195 struct page **pages, unsigned int count);
195int gnttab_map_refs_userspace(struct gnttab_map_grant_ref *map_ops,
196 struct gnttab_map_grant_ref *kmap_ops,
197 struct page **pages, unsigned int count);
198int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops, 196int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
197 struct gnttab_map_grant_ref *kunmap_ops,
199 struct page **pages, unsigned int count); 198 struct page **pages, unsigned int count);
200int gnttab_unmap_refs_userspace(struct gnttab_unmap_grant_ref *unmap_ops,
201 struct gnttab_map_grant_ref *kunmap_ops,
202 struct page **pages, unsigned int count);
203 199
204/* Perform a batch of grant map/copy operations. Retry every batch slot 200/* Perform a batch of grant map/copy operations. Retry every batch slot
205 * for which the hypervisor returns GNTST_eagain. This is typically due 201 * for which the hypervisor returns GNTST_eagain. This is typically due
diff --git a/include/xen/interface/io/blkif.h b/include/xen/interface/io/blkif.h
index ae665ac59c36..32ec05a6572f 100644
--- a/include/xen/interface/io/blkif.h
+++ b/include/xen/interface/io/blkif.h
@@ -113,13 +113,13 @@ typedef uint64_t blkif_sector_t;
113 * it's less than the number provided by the backend. The indirect_grefs field 113 * it's less than the number provided by the backend. The indirect_grefs field
114 * in blkif_request_indirect should be filled by the frontend with the 114 * in blkif_request_indirect should be filled by the frontend with the
115 * grant references of the pages that are holding the indirect segments. 115 * grant references of the pages that are holding the indirect segments.
116 * This pages are filled with an array of blkif_request_segment_aligned 116 * These pages are filled with an array of blkif_request_segment that hold the
117 * that hold the information about the segments. The number of indirect 117 * information about the segments. The number of indirect pages to use is
118 * pages to use is determined by the maximum number of segments 118 * determined by the number of segments an indirect request contains. Every
119 * a indirect request contains. Every indirect page can contain a maximum 119 * indirect page can contain a maximum of
120 * of 512 segments (PAGE_SIZE/sizeof(blkif_request_segment_aligned)), 120 * (PAGE_SIZE / sizeof(struct blkif_request_segment)) segments, so to
121 * so to calculate the number of indirect pages to use we have to do 121 * calculate the number of indirect pages to use we have to do
122 * ceil(indirect_segments/512). 122 * ceil(indirect_segments / (PAGE_SIZE / sizeof(struct blkif_request_segment))).
123 * 123 *
124 * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not* 124 * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not*
125 * create the "feature-max-indirect-segments" node! 125 * create the "feature-max-indirect-segments" node!
@@ -135,13 +135,12 @@ typedef uint64_t blkif_sector_t;
135 135
136#define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8 136#define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8
137 137
138struct blkif_request_segment_aligned { 138struct blkif_request_segment {
139 grant_ref_t gref; /* reference to I/O buffer frame */ 139 grant_ref_t gref; /* reference to I/O buffer frame */
140 /* @first_sect: first sector in frame to transfer (inclusive). */ 140 /* @first_sect: first sector in frame to transfer (inclusive). */
141 /* @last_sect: last sector in frame to transfer (inclusive). */ 141 /* @last_sect: last sector in frame to transfer (inclusive). */
142 uint8_t first_sect, last_sect; 142 uint8_t first_sect, last_sect;
143 uint16_t _pad; /* padding to make it 8 bytes, so it's cache-aligned */ 143};
144} __attribute__((__packed__));
145 144
146struct blkif_request_rw { 145struct blkif_request_rw {
147 uint8_t nr_segments; /* number of segments */ 146 uint8_t nr_segments; /* number of segments */
@@ -151,12 +150,7 @@ struct blkif_request_rw {
151#endif 150#endif
152 uint64_t id; /* private guest value, echoed in resp */ 151 uint64_t id; /* private guest value, echoed in resp */
153 blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ 152 blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */
154 struct blkif_request_segment { 153 struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
155 grant_ref_t gref; /* reference to I/O buffer frame */
156 /* @first_sect: first sector in frame to transfer (inclusive). */
157 /* @last_sect: last sector in frame to transfer (inclusive). */
158 uint8_t first_sect, last_sect;
159 } seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
160} __attribute__((__packed__)); 154} __attribute__((__packed__));
161 155
162struct blkif_request_discard { 156struct blkif_request_discard {
diff --git a/include/xen/interface/xencomm.h b/include/xen/interface/xencomm.h
deleted file mode 100644
index ac45e0712afa..000000000000
--- a/include/xen/interface/xencomm.h
+++ /dev/null
@@ -1,41 +0,0 @@
1/*
2 * Permission is hereby granted, free of charge, to any person obtaining a copy
3 * of this software and associated documentation files (the "Software"), to
4 * deal in the Software without restriction, including without limitation the
5 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6 * sell copies of the Software, and to permit persons to whom the Software is
7 * furnished to do so, subject to the following conditions:
8 *
9 * The above copyright notice and this permission notice shall be included in
10 * all copies or substantial portions of the Software.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
18 * DEALINGS IN THE SOFTWARE.
19 *
20 * Copyright (C) IBM Corp. 2006
21 */
22
23#ifndef _XEN_XENCOMM_H_
24#define _XEN_XENCOMM_H_
25
26/* A xencomm descriptor is a scatter/gather list containing physical
27 * addresses corresponding to a virtually contiguous memory area. The
28 * hypervisor translates these physical addresses to machine addresses to copy
29 * to and from the virtually contiguous area.
30 */
31
32#define XENCOMM_MAGIC 0x58434F4D /* 'XCOM' */
33#define XENCOMM_INVALID (~0UL)
34
35struct xencomm_desc {
36 uint32_t magic;
37 uint32_t nr_addrs; /* the number of entries in address[] */
38 uint64_t address[0];
39};
40
41#endif /* _XEN_XENCOMM_H_ */
diff --git a/include/xen/xencomm.h b/include/xen/xencomm.h
deleted file mode 100644
index e43b039be112..000000000000
--- a/include/xen/xencomm.h
+++ /dev/null
@@ -1,77 +0,0 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15 *
16 * Copyright (C) IBM Corp. 2006
17 *
18 * Authors: Hollis Blanchard <hollisb@us.ibm.com>
19 * Jerone Young <jyoung5@us.ibm.com>
20 */
21
22#ifndef _LINUX_XENCOMM_H_
23#define _LINUX_XENCOMM_H_
24
25#include <xen/interface/xencomm.h>
26
27#define XENCOMM_MINI_ADDRS 3
28struct xencomm_mini {
29 struct xencomm_desc _desc;
30 uint64_t address[XENCOMM_MINI_ADDRS];
31};
32
33/* To avoid additionnal virt to phys conversion, an opaque structure is
34 presented. */
35struct xencomm_handle;
36
37extern void xencomm_free(struct xencomm_handle *desc);
38extern struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes);
39extern struct xencomm_handle *__xencomm_map_no_alloc(void *ptr,
40 unsigned long bytes, struct xencomm_mini *xc_area);
41
42#if 0
43#define XENCOMM_MINI_ALIGNED(xc_desc, n) \
44 struct xencomm_mini xc_desc ## _base[(n)] \
45 __attribute__((__aligned__(sizeof(struct xencomm_mini)))); \
46 struct xencomm_mini *xc_desc = &xc_desc ## _base[0];
47#else
48/*
49 * gcc bug workaround:
50 * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16660
51 * gcc doesn't handle properly stack variable with
52 * __attribute__((__align__(sizeof(struct xencomm_mini))))
53 */
54#define XENCOMM_MINI_ALIGNED(xc_desc, n) \
55 unsigned char xc_desc ## _base[((n) + 1 ) * \
56 sizeof(struct xencomm_mini)]; \
57 struct xencomm_mini *xc_desc = (struct xencomm_mini *) \
58 ((unsigned long)xc_desc ## _base + \
59 (sizeof(struct xencomm_mini) - \
60 ((unsigned long)xc_desc ## _base) % \
61 sizeof(struct xencomm_mini)));
62#endif
63#define xencomm_map_no_alloc(ptr, bytes) \
64 ({ XENCOMM_MINI_ALIGNED(xc_desc, 1); \
65 __xencomm_map_no_alloc(ptr, bytes, xc_desc); })
66
67/* provided by architecture code: */
68extern unsigned long xencomm_vtop(unsigned long vaddr);
69
70static inline void *xencomm_pa(void *ptr)
71{
72 return (void *)xencomm_vtop((unsigned long)ptr);
73}
74
75#define xen_guest_handle(hnd) ((hnd).p)
76
77#endif /* _LINUX_XENCOMM_H_ */
diff --git a/init/main.c b/init/main.c
index 2fd9cef70ee8..eb03090cdced 100644
--- a/init/main.c
+++ b/init/main.c
@@ -812,7 +812,7 @@ void __init load_default_modules(void)
812static int run_init_process(const char *init_filename) 812static int run_init_process(const char *init_filename)
813{ 813{
814 argv_init[0] = init_filename; 814 argv_init[0] = init_filename;
815 return do_execve(init_filename, 815 return do_execve(getname_kernel(init_filename),
816 (const char __user *const __user *)argv_init, 816 (const char __user *const __user *)argv_init,
817 (const char __user *const __user *)envp_init); 817 (const char __user *const __user *)envp_init);
818} 818}
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index 10176cd5956a..7aef2f4b6c64 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -1719,7 +1719,7 @@ void audit_putname(struct filename *name)
1719 struct audit_context *context = current->audit_context; 1719 struct audit_context *context = current->audit_context;
1720 1720
1721 BUG_ON(!context); 1721 BUG_ON(!context);
1722 if (!context->in_syscall) { 1722 if (!name->aname || !context->in_syscall) {
1723#if AUDIT_DEBUG == 2 1723#if AUDIT_DEBUG == 2
1724 printk(KERN_ERR "%s:%d(:%d): final_putname(%p)\n", 1724 printk(KERN_ERR "%s:%d(:%d): final_putname(%p)\n",
1725 __FILE__, __LINE__, context->serial, name); 1725 __FILE__, __LINE__, context->serial, name);
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig
index 4a1fef09f658..07cbdfea9ae2 100644
--- a/kernel/irq/Kconfig
+++ b/kernel/irq/Kconfig
@@ -40,6 +40,7 @@ config IRQ_EDGE_EOI_HANDLER
40# Generic configurable interrupt chip implementation 40# Generic configurable interrupt chip implementation
41config GENERIC_IRQ_CHIP 41config GENERIC_IRQ_CHIP
42 bool 42 bool
43 select IRQ_DOMAIN
43 44
44# Generic irq_domain hw <--> linux irq number translation 45# Generic irq_domain hw <--> linux irq number translation
45config IRQ_DOMAIN 46config IRQ_DOMAIN
diff --git a/kernel/irq/devres.c b/kernel/irq/devres.c
index bd8e788d71e0..1ef0606797c9 100644
--- a/kernel/irq/devres.c
+++ b/kernel/irq/devres.c
@@ -73,6 +73,51 @@ int devm_request_threaded_irq(struct device *dev, unsigned int irq,
73EXPORT_SYMBOL(devm_request_threaded_irq); 73EXPORT_SYMBOL(devm_request_threaded_irq);
74 74
75/** 75/**
76 * devm_request_any_context_irq - allocate an interrupt line for a managed device
77 * @dev: device to request interrupt for
78 * @irq: Interrupt line to allocate
79 * @handler: Function to be called when the IRQ occurs
80 * @thread_fn: function to be called in a threaded interrupt context. NULL
81 * for devices which handle everything in @handler
82 * @irqflags: Interrupt type flags
83 * @devname: An ascii name for the claiming device
84 * @dev_id: A cookie passed back to the handler function
85 *
86 * Except for the extra @dev argument, this function takes the
87 * same arguments and performs the same function as
88 * request_any_context_irq(). IRQs requested with this function will be
89 * automatically freed on driver detach.
90 *
91 * If an IRQ allocated with this function needs to be freed
92 * separately, devm_free_irq() must be used.
93 */
94int devm_request_any_context_irq(struct device *dev, unsigned int irq,
95 irq_handler_t handler, unsigned long irqflags,
96 const char *devname, void *dev_id)
97{
98 struct irq_devres *dr;
99 int rc;
100
101 dr = devres_alloc(devm_irq_release, sizeof(struct irq_devres),
102 GFP_KERNEL);
103 if (!dr)
104 return -ENOMEM;
105
106 rc = request_any_context_irq(irq, handler, irqflags, devname, dev_id);
107 if (rc) {
108 devres_free(dr);
109 return rc;
110 }
111
112 dr->irq = irq;
113 dr->dev_id = dev_id;
114 devres_add(dev, dr);
115
116 return 0;
117}
118EXPORT_SYMBOL(devm_request_any_context_irq);
119
120/**
76 * devm_free_irq - free an interrupt 121 * devm_free_irq - free an interrupt
77 * @dev: device to free interrupt for 122 * @dev: device to free interrupt for
78 * @irq: Interrupt line to free 123 * @irq: Interrupt line to free
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 192a302d6cfd..8ab8e9390297 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -274,6 +274,7 @@ struct irq_desc *irq_to_desc(unsigned int irq)
274{ 274{
275 return (irq < NR_IRQS) ? irq_desc + irq : NULL; 275 return (irq < NR_IRQS) ? irq_desc + irq : NULL;
276} 276}
277EXPORT_SYMBOL(irq_to_desc);
277 278
278static void free_desc(unsigned int irq) 279static void free_desc(unsigned int irq)
279{ 280{
diff --git a/kernel/kmod.c b/kernel/kmod.c
index b086006c59e7..6b375af4958d 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -239,7 +239,7 @@ static int ____call_usermodehelper(void *data)
239 239
240 commit_creds(new); 240 commit_creds(new);
241 241
242 retval = do_execve(sub_info->path, 242 retval = do_execve(getname_kernel(sub_info->path),
243 (const char __user *const __user *)sub_info->argv, 243 (const char __user *const __user *)sub_info->argv,
244 (const char __user *const __user *)sub_info->envp); 244 (const char __user *const __user *)sub_info->envp);
245 if (!retval) 245 if (!retval)
diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c
index 7a925ba456fb..a6a5bf53e86d 100644
--- a/kernel/time/jiffies.c
+++ b/kernel/time/jiffies.c
@@ -51,7 +51,13 @@
51 * HZ shrinks, so values greater than 8 overflow 32bits when 51 * HZ shrinks, so values greater than 8 overflow 32bits when
52 * HZ=100. 52 * HZ=100.
53 */ 53 */
54#if HZ < 34
55#define JIFFIES_SHIFT 6
56#elif HZ < 67
57#define JIFFIES_SHIFT 7
58#else
54#define JIFFIES_SHIFT 8 59#define JIFFIES_SHIFT 8
60#endif
55 61
56static cycle_t jiffies_read(struct clocksource *cs) 62static cycle_t jiffies_read(struct clocksource *cs)
57{ 63{
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index 43780ab5e279..98977a57ac72 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -756,6 +756,7 @@ out:
756static void tick_broadcast_clear_oneshot(int cpu) 756static void tick_broadcast_clear_oneshot(int cpu)
757{ 757{
758 cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask); 758 cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask);
759 cpumask_clear_cpu(cpu, tick_broadcast_pending_mask);
759} 760}
760 761
761static void tick_broadcast_init_next_event(struct cpumask *mask, 762static void tick_broadcast_init_next_event(struct cpumask *mask,
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 294b8a271a04..fc4da2d97f9b 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -2397,6 +2397,13 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
2397 write &= RB_WRITE_MASK; 2397 write &= RB_WRITE_MASK;
2398 tail = write - length; 2398 tail = write - length;
2399 2399
2400 /*
2401 * If this is the first commit on the page, then it has the same
2402 * timestamp as the page itself.
2403 */
2404 if (!tail)
2405 delta = 0;
2406
2400 /* See if we shot pass the end of this buffer page */ 2407 /* See if we shot pass the end of this buffer page */
2401 if (unlikely(write > BUF_PAGE_SIZE)) 2408 if (unlikely(write > BUF_PAGE_SIZE))
2402 return rb_move_tail(cpu_buffer, length, tail, 2409 return rb_move_tail(cpu_buffer, length, tail,
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index dbf94a7d25a8..a48abeac753f 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -119,7 +119,7 @@ menu "Compile-time checks and compiler options"
119 119
120config DEBUG_INFO 120config DEBUG_INFO
121 bool "Compile the kernel with debug info" 121 bool "Compile the kernel with debug info"
122 depends on DEBUG_KERNEL 122 depends on DEBUG_KERNEL && !COMPILE_TEST
123 help 123 help
124 If you say Y here the resulting kernel image will include 124 If you say Y here the resulting kernel image will include
125 debugging info resulting in a larger kernel image. 125 debugging info resulting in a larger kernel image.
diff --git a/lib/Makefile b/lib/Makefile
index 126b34f2eb16..48140e3ba73f 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -45,6 +45,7 @@ obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o
45obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o 45obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o
46obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o 46obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o
47 47
48GCOV_PROFILE_hweight.o := n
48CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS)) 49CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS))
49obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o 50obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o
50 51
diff --git a/lib/percpu_ida.c b/lib/percpu_ida.c
index 7be235f1a70b..93d145e5539c 100644
--- a/lib/percpu_ida.c
+++ b/lib/percpu_ida.c
@@ -54,9 +54,7 @@ static inline void move_tags(unsigned *dst, unsigned *dst_nr,
54/* 54/*
55 * Try to steal tags from a remote cpu's percpu freelist. 55 * Try to steal tags from a remote cpu's percpu freelist.
56 * 56 *
57 * We first check how many percpu freelists have tags - we don't steal tags 57 * We first check how many percpu freelists have tags
58 * unless enough percpu freelists have tags on them that it's possible more than
59 * half the total tags could be stuck on remote percpu freelists.
60 * 58 *
61 * Then we iterate through the cpus until we find some tags - we don't attempt 59 * Then we iterate through the cpus until we find some tags - we don't attempt
62 * to find the "best" cpu to steal from, to keep cacheline bouncing to a 60 * to find the "best" cpu to steal from, to keep cacheline bouncing to a
@@ -69,8 +67,7 @@ static inline void steal_tags(struct percpu_ida *pool,
69 struct percpu_ida_cpu *remote; 67 struct percpu_ida_cpu *remote;
70 68
71 for (cpus_have_tags = cpumask_weight(&pool->cpus_have_tags); 69 for (cpus_have_tags = cpumask_weight(&pool->cpus_have_tags);
72 cpus_have_tags * pool->percpu_max_size > pool->nr_tags / 2; 70 cpus_have_tags; cpus_have_tags--) {
73 cpus_have_tags--) {
74 cpu = cpumask_next(cpu, &pool->cpus_have_tags); 71 cpu = cpumask_next(cpu, &pool->cpus_have_tags);
75 72
76 if (cpu >= nr_cpu_ids) { 73 if (cpu >= nr_cpu_ids) {
diff --git a/mm/filemap.c b/mm/filemap.c
index d56d3c145b9f..7a13f6ac5421 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2553,8 +2553,8 @@ ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
2553 if (ret > 0) { 2553 if (ret > 0) {
2554 ssize_t err; 2554 ssize_t err;
2555 2555
2556 err = generic_write_sync(file, pos, ret); 2556 err = generic_write_sync(file, iocb->ki_pos - ret, ret);
2557 if (err < 0 && ret > 0) 2557 if (err < 0)
2558 ret = err; 2558 ret = err;
2559 } 2559 }
2560 return ret; 2560 return ret;
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 4f08a2d61487..2f2f34a4e77d 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -945,8 +945,10 @@ static int hwpoison_user_mappings(struct page *p, unsigned long pfn,
945 * to it. Similarly, page lock is shifted. 945 * to it. Similarly, page lock is shifted.
946 */ 946 */
947 if (hpage != p) { 947 if (hpage != p) {
948 put_page(hpage); 948 if (!(flags & MF_COUNT_INCREASED)) {
949 get_page(p); 949 put_page(hpage);
950 get_page(p);
951 }
950 lock_page(p); 952 lock_page(p);
951 unlock_page(hpage); 953 unlock_page(hpage);
952 *hpagep = p; 954 *hpagep = p;
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 2d30e2cfe804..7106cb1aca8e 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -2173,11 +2173,12 @@ int __set_page_dirty_nobuffers(struct page *page)
2173 if (!TestSetPageDirty(page)) { 2173 if (!TestSetPageDirty(page)) {
2174 struct address_space *mapping = page_mapping(page); 2174 struct address_space *mapping = page_mapping(page);
2175 struct address_space *mapping2; 2175 struct address_space *mapping2;
2176 unsigned long flags;
2176 2177
2177 if (!mapping) 2178 if (!mapping)
2178 return 1; 2179 return 1;
2179 2180
2180 spin_lock_irq(&mapping->tree_lock); 2181 spin_lock_irqsave(&mapping->tree_lock, flags);
2181 mapping2 = page_mapping(page); 2182 mapping2 = page_mapping(page);
2182 if (mapping2) { /* Race with truncate? */ 2183 if (mapping2) { /* Race with truncate? */
2183 BUG_ON(mapping2 != mapping); 2184 BUG_ON(mapping2 != mapping);
@@ -2186,7 +2187,7 @@ int __set_page_dirty_nobuffers(struct page *page)
2186 radix_tree_tag_set(&mapping->page_tree, 2187 radix_tree_tag_set(&mapping->page_tree,
2187 page_index(page), PAGECACHE_TAG_DIRTY); 2188 page_index(page), PAGECACHE_TAG_DIRTY);
2188 } 2189 }
2189 spin_unlock_irq(&mapping->tree_lock); 2190 spin_unlock_irqrestore(&mapping->tree_lock, flags);
2190 if (mapping->host) { 2191 if (mapping->host) {
2191 /* !PageAnon && !swapper_space */ 2192 /* !PageAnon && !swapper_space */
2192 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); 2193 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
diff --git a/mm/slub.c b/mm/slub.c
index 7e3e0458bce4..25f14ad8f817 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1004,21 +1004,19 @@ static inline void slab_free_hook(struct kmem_cache *s, void *x)
1004static void add_full(struct kmem_cache *s, 1004static void add_full(struct kmem_cache *s,
1005 struct kmem_cache_node *n, struct page *page) 1005 struct kmem_cache_node *n, struct page *page)
1006{ 1006{
1007 lockdep_assert_held(&n->list_lock);
1008
1009 if (!(s->flags & SLAB_STORE_USER)) 1007 if (!(s->flags & SLAB_STORE_USER))
1010 return; 1008 return;
1011 1009
1010 lockdep_assert_held(&n->list_lock);
1012 list_add(&page->lru, &n->full); 1011 list_add(&page->lru, &n->full);
1013} 1012}
1014 1013
1015static void remove_full(struct kmem_cache *s, struct kmem_cache_node *n, struct page *page) 1014static void remove_full(struct kmem_cache *s, struct kmem_cache_node *n, struct page *page)
1016{ 1015{
1017 lockdep_assert_held(&n->list_lock);
1018
1019 if (!(s->flags & SLAB_STORE_USER)) 1016 if (!(s->flags & SLAB_STORE_USER))
1020 return; 1017 return;
1021 1018
1019 lockdep_assert_held(&n->list_lock);
1022 list_del(&page->lru); 1020 list_del(&page->lru);
1023} 1021}
1024 1022
@@ -1520,11 +1518,9 @@ static void discard_slab(struct kmem_cache *s, struct page *page)
1520/* 1518/*
1521 * Management of partially allocated slabs. 1519 * Management of partially allocated slabs.
1522 */ 1520 */
1523static inline void add_partial(struct kmem_cache_node *n, 1521static inline void
1524 struct page *page, int tail) 1522__add_partial(struct kmem_cache_node *n, struct page *page, int tail)
1525{ 1523{
1526 lockdep_assert_held(&n->list_lock);
1527
1528 n->nr_partial++; 1524 n->nr_partial++;
1529 if (tail == DEACTIVATE_TO_TAIL) 1525 if (tail == DEACTIVATE_TO_TAIL)
1530 list_add_tail(&page->lru, &n->partial); 1526 list_add_tail(&page->lru, &n->partial);
@@ -1532,15 +1528,27 @@ static inline void add_partial(struct kmem_cache_node *n,
1532 list_add(&page->lru, &n->partial); 1528 list_add(&page->lru, &n->partial);
1533} 1529}
1534 1530
1535static inline void remove_partial(struct kmem_cache_node *n, 1531static inline void add_partial(struct kmem_cache_node *n,
1536 struct page *page) 1532 struct page *page, int tail)
1537{ 1533{
1538 lockdep_assert_held(&n->list_lock); 1534 lockdep_assert_held(&n->list_lock);
1535 __add_partial(n, page, tail);
1536}
1539 1537
1538static inline void
1539__remove_partial(struct kmem_cache_node *n, struct page *page)
1540{
1540 list_del(&page->lru); 1541 list_del(&page->lru);
1541 n->nr_partial--; 1542 n->nr_partial--;
1542} 1543}
1543 1544
1545static inline void remove_partial(struct kmem_cache_node *n,
1546 struct page *page)
1547{
1548 lockdep_assert_held(&n->list_lock);
1549 __remove_partial(n, page);
1550}
1551
1544/* 1552/*
1545 * Remove slab from the partial list, freeze it and 1553 * Remove slab from the partial list, freeze it and
1546 * return the pointer to the freelist. 1554 * return the pointer to the freelist.
@@ -2906,12 +2914,10 @@ static void early_kmem_cache_node_alloc(int node)
2906 inc_slabs_node(kmem_cache_node, node, page->objects); 2914 inc_slabs_node(kmem_cache_node, node, page->objects);
2907 2915
2908 /* 2916 /*
2909 * the lock is for lockdep's sake, not for any actual 2917 * No locks need to be taken here as it has just been
2910 * race protection 2918 * initialized and there is no concurrent access.
2911 */ 2919 */
2912 spin_lock(&n->list_lock); 2920 __add_partial(n, page, DEACTIVATE_TO_HEAD);
2913 add_partial(n, page, DEACTIVATE_TO_HEAD);
2914 spin_unlock(&n->list_lock);
2915} 2921}
2916 2922
2917static void free_kmem_cache_nodes(struct kmem_cache *s) 2923static void free_kmem_cache_nodes(struct kmem_cache *s)
@@ -3197,7 +3203,7 @@ static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n)
3197 3203
3198 list_for_each_entry_safe(page, h, &n->partial, lru) { 3204 list_for_each_entry_safe(page, h, &n->partial, lru) {
3199 if (!page->inuse) { 3205 if (!page->inuse) {
3200 remove_partial(n, page); 3206 __remove_partial(n, page);
3201 discard_slab(s, page); 3207 discard_slab(s, page);
3202 } else { 3208 } else {
3203 list_slab_objects(s, page, 3209 list_slab_objects(s, page,
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 98e85e9c2b2d..e76ace30d436 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -63,6 +63,8 @@ unsigned long total_swapcache_pages(void)
63 return ret; 63 return ret;
64} 64}
65 65
66static atomic_t swapin_readahead_hits = ATOMIC_INIT(4);
67
66void show_swap_cache_info(void) 68void show_swap_cache_info(void)
67{ 69{
68 printk("%lu pages in swap cache\n", total_swapcache_pages()); 70 printk("%lu pages in swap cache\n", total_swapcache_pages());
@@ -286,8 +288,11 @@ struct page * lookup_swap_cache(swp_entry_t entry)
286 288
287 page = find_get_page(swap_address_space(entry), entry.val); 289 page = find_get_page(swap_address_space(entry), entry.val);
288 290
289 if (page) 291 if (page) {
290 INC_CACHE_INFO(find_success); 292 INC_CACHE_INFO(find_success);
293 if (TestClearPageReadahead(page))
294 atomic_inc(&swapin_readahead_hits);
295 }
291 296
292 INC_CACHE_INFO(find_total); 297 INC_CACHE_INFO(find_total);
293 return page; 298 return page;
@@ -389,6 +394,50 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
389 return found_page; 394 return found_page;
390} 395}
391 396
397static unsigned long swapin_nr_pages(unsigned long offset)
398{
399 static unsigned long prev_offset;
400 unsigned int pages, max_pages, last_ra;
401 static atomic_t last_readahead_pages;
402
403 max_pages = 1 << ACCESS_ONCE(page_cluster);
404 if (max_pages <= 1)
405 return 1;
406
407 /*
408 * This heuristic has been found to work well on both sequential and
409 * random loads, swapping to hard disk or to SSD: please don't ask
410 * what the "+ 2" means, it just happens to work well, that's all.
411 */
412 pages = atomic_xchg(&swapin_readahead_hits, 0) + 2;
413 if (pages == 2) {
414 /*
415 * We can have no readahead hits to judge by: but must not get
416 * stuck here forever, so check for an adjacent offset instead
417 * (and don't even bother to check whether swap type is same).
418 */
419 if (offset != prev_offset + 1 && offset != prev_offset - 1)
420 pages = 1;
421 prev_offset = offset;
422 } else {
423 unsigned int roundup = 4;
424 while (roundup < pages)
425 roundup <<= 1;
426 pages = roundup;
427 }
428
429 if (pages > max_pages)
430 pages = max_pages;
431
432 /* Don't shrink readahead too fast */
433 last_ra = atomic_read(&last_readahead_pages) / 2;
434 if (pages < last_ra)
435 pages = last_ra;
436 atomic_set(&last_readahead_pages, pages);
437
438 return pages;
439}
440
392/** 441/**
393 * swapin_readahead - swap in pages in hope we need them soon 442 * swapin_readahead - swap in pages in hope we need them soon
394 * @entry: swap entry of this memory 443 * @entry: swap entry of this memory
@@ -412,11 +461,16 @@ struct page *swapin_readahead(swp_entry_t entry, gfp_t gfp_mask,
412 struct vm_area_struct *vma, unsigned long addr) 461 struct vm_area_struct *vma, unsigned long addr)
413{ 462{
414 struct page *page; 463 struct page *page;
415 unsigned long offset = swp_offset(entry); 464 unsigned long entry_offset = swp_offset(entry);
465 unsigned long offset = entry_offset;
416 unsigned long start_offset, end_offset; 466 unsigned long start_offset, end_offset;
417 unsigned long mask = (1UL << page_cluster) - 1; 467 unsigned long mask;
418 struct blk_plug plug; 468 struct blk_plug plug;
419 469
470 mask = swapin_nr_pages(offset) - 1;
471 if (!mask)
472 goto skip;
473
420 /* Read a page_cluster sized and aligned cluster around offset. */ 474 /* Read a page_cluster sized and aligned cluster around offset. */
421 start_offset = offset & ~mask; 475 start_offset = offset & ~mask;
422 end_offset = offset | mask; 476 end_offset = offset | mask;
@@ -430,10 +484,13 @@ struct page *swapin_readahead(swp_entry_t entry, gfp_t gfp_mask,
430 gfp_mask, vma, addr); 484 gfp_mask, vma, addr);
431 if (!page) 485 if (!page)
432 continue; 486 continue;
487 if (offset != entry_offset)
488 SetPageReadahead(page);
433 page_cache_release(page); 489 page_cache_release(page);
434 } 490 }
435 blk_finish_plug(&plug); 491 blk_finish_plug(&plug);
436 492
437 lru_add_drain(); /* Push any new pages onto the LRU now */ 493 lru_add_drain(); /* Push any new pages onto the LRU now */
494skip:
438 return read_swap_cache_async(entry, gfp_mask, vma, addr); 495 return read_swap_cache_async(entry, gfp_mask, vma, addr);
439} 496}
diff --git a/mm/swapfile.c b/mm/swapfile.c
index c6c13b050a58..4a7f7e6992b6 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -1923,7 +1923,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
1923 p->swap_map = NULL; 1923 p->swap_map = NULL;
1924 cluster_info = p->cluster_info; 1924 cluster_info = p->cluster_info;
1925 p->cluster_info = NULL; 1925 p->cluster_info = NULL;
1926 p->flags = 0;
1927 frontswap_map = frontswap_map_get(p); 1926 frontswap_map = frontswap_map_get(p);
1928 spin_unlock(&p->lock); 1927 spin_unlock(&p->lock);
1929 spin_unlock(&swap_lock); 1928 spin_unlock(&swap_lock);
@@ -1949,6 +1948,16 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
1949 mutex_unlock(&inode->i_mutex); 1948 mutex_unlock(&inode->i_mutex);
1950 } 1949 }
1951 filp_close(swap_file, NULL); 1950 filp_close(swap_file, NULL);
1951
1952 /*
1953 * Clear the SWP_USED flag after all resources are freed so that swapon
1954 * can reuse this swap_info in alloc_swap_info() safely. It is ok to
1955 * not hold p->lock after we cleared its SWP_WRITEOK.
1956 */
1957 spin_lock(&swap_lock);
1958 p->flags = 0;
1959 spin_unlock(&swap_lock);
1960
1952 err = 0; 1961 err = 0;
1953 atomic_inc(&proc_poll_event); 1962 atomic_inc(&proc_poll_event);
1954 wake_up_interruptible(&proc_poll_wait); 1963 wake_up_interruptible(&proc_poll_wait);
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 72496140ac08..def5dd2fbe61 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -851,12 +851,14 @@ const char * const vmstat_text[] = {
851 "thp_zero_page_alloc", 851 "thp_zero_page_alloc",
852 "thp_zero_page_alloc_failed", 852 "thp_zero_page_alloc_failed",
853#endif 853#endif
854#ifdef CONFIG_DEBUG_TLBFLUSH
854#ifdef CONFIG_SMP 855#ifdef CONFIG_SMP
855 "nr_tlb_remote_flush", 856 "nr_tlb_remote_flush",
856 "nr_tlb_remote_flush_received", 857 "nr_tlb_remote_flush_received",
857#endif 858#endif /* CONFIG_SMP */
858 "nr_tlb_local_flush_all", 859 "nr_tlb_local_flush_all",
859 "nr_tlb_local_flush_one", 860 "nr_tlb_local_flush_one",
861#endif /* CONFIG_DEBUG_TLBFLUSH */
860 862
861#endif /* CONFIG_VM_EVENTS_COUNTERS */ 863#endif /* CONFIG_VM_EVENTS_COUNTERS */
862}; 864};
diff --git a/net/9p/client.c b/net/9p/client.c
index a5e4d2dcb03e..9186550d77a6 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -204,7 +204,7 @@ free_and_return:
204 return ret; 204 return ret;
205} 205}
206 206
207struct p9_fcall *p9_fcall_alloc(int alloc_msize) 207static struct p9_fcall *p9_fcall_alloc(int alloc_msize)
208{ 208{
209 struct p9_fcall *fc; 209 struct p9_fcall *fc;
210 fc = kmalloc(sizeof(struct p9_fcall) + alloc_msize, GFP_NOFS); 210 fc = kmalloc(sizeof(struct p9_fcall) + alloc_msize, GFP_NOFS);
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index cd1e1ede73a4..ac2666c1d011 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -340,7 +340,10 @@ static int p9_get_mapped_pages(struct virtio_chan *chan,
340 int count = nr_pages; 340 int count = nr_pages;
341 while (nr_pages) { 341 while (nr_pages) {
342 s = rest_of_page(data); 342 s = rest_of_page(data);
343 pages[index++] = kmap_to_page(data); 343 if (is_vmalloc_addr(data))
344 pages[index++] = vmalloc_to_page(data);
345 else
346 pages[index++] = kmap_to_page(data);
344 data += s; 347 data += s;
345 nr_pages--; 348 nr_pages--;
346 } 349 }
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index e4401a531afb..63f0455c0bc3 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -187,8 +187,7 @@ static int br_set_mac_address(struct net_device *dev, void *p)
187 187
188 spin_lock_bh(&br->lock); 188 spin_lock_bh(&br->lock);
189 if (!ether_addr_equal(dev->dev_addr, addr->sa_data)) { 189 if (!ether_addr_equal(dev->dev_addr, addr->sa_data)) {
190 memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); 190 /* Mac address will be changed in br_stp_change_bridge_id(). */
191 br_fdb_change_mac_address(br, addr->sa_data);
192 br_stp_change_bridge_id(br, addr->sa_data); 191 br_stp_change_bridge_id(br, addr->sa_data);
193 } 192 }
194 spin_unlock_bh(&br->lock); 193 spin_unlock_bh(&br->lock);
@@ -226,6 +225,33 @@ static void br_netpoll_cleanup(struct net_device *dev)
226 br_netpoll_disable(p); 225 br_netpoll_disable(p);
227} 226}
228 227
228static int __br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
229{
230 struct netpoll *np;
231 int err;
232
233 np = kzalloc(sizeof(*p->np), gfp);
234 if (!np)
235 return -ENOMEM;
236
237 err = __netpoll_setup(np, p->dev, gfp);
238 if (err) {
239 kfree(np);
240 return err;
241 }
242
243 p->np = np;
244 return err;
245}
246
247int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
248{
249 if (!p->br->dev->npinfo)
250 return 0;
251
252 return __br_netpoll_enable(p, gfp);
253}
254
229static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni, 255static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni,
230 gfp_t gfp) 256 gfp_t gfp)
231{ 257{
@@ -236,7 +262,7 @@ static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni,
236 list_for_each_entry(p, &br->port_list, list) { 262 list_for_each_entry(p, &br->port_list, list) {
237 if (!p->dev) 263 if (!p->dev)
238 continue; 264 continue;
239 err = br_netpoll_enable(p, gfp); 265 err = __br_netpoll_enable(p, gfp);
240 if (err) 266 if (err)
241 goto fail; 267 goto fail;
242 } 268 }
@@ -249,28 +275,6 @@ fail:
249 goto out; 275 goto out;
250} 276}
251 277
252int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
253{
254 struct netpoll *np;
255 int err;
256
257 if (!p->br->dev->npinfo)
258 return 0;
259
260 np = kzalloc(sizeof(*p->np), gfp);
261 if (!np)
262 return -ENOMEM;
263
264 err = __netpoll_setup(np, p->dev, gfp);
265 if (err) {
266 kfree(np);
267 return err;
268 }
269
270 p->np = np;
271 return err;
272}
273
274void br_netpoll_disable(struct net_bridge_port *p) 278void br_netpoll_disable(struct net_bridge_port *p)
275{ 279{
276 struct netpoll *np = p->np; 280 struct netpoll *np = p->np;
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index c5f5a4a933f4..9203d5a1943f 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -27,6 +27,9 @@
27#include "br_private.h" 27#include "br_private.h"
28 28
29static struct kmem_cache *br_fdb_cache __read_mostly; 29static struct kmem_cache *br_fdb_cache __read_mostly;
30static struct net_bridge_fdb_entry *fdb_find(struct hlist_head *head,
31 const unsigned char *addr,
32 __u16 vid);
30static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source, 33static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
31 const unsigned char *addr, u16 vid); 34 const unsigned char *addr, u16 vid);
32static void fdb_notify(struct net_bridge *br, 35static void fdb_notify(struct net_bridge *br,
@@ -89,11 +92,57 @@ static void fdb_delete(struct net_bridge *br, struct net_bridge_fdb_entry *f)
89 call_rcu(&f->rcu, fdb_rcu_free); 92 call_rcu(&f->rcu, fdb_rcu_free);
90} 93}
91 94
95/* Delete a local entry if no other port had the same address. */
96static void fdb_delete_local(struct net_bridge *br,
97 const struct net_bridge_port *p,
98 struct net_bridge_fdb_entry *f)
99{
100 const unsigned char *addr = f->addr.addr;
101 u16 vid = f->vlan_id;
102 struct net_bridge_port *op;
103
104 /* Maybe another port has same hw addr? */
105 list_for_each_entry(op, &br->port_list, list) {
106 if (op != p && ether_addr_equal(op->dev->dev_addr, addr) &&
107 (!vid || nbp_vlan_find(op, vid))) {
108 f->dst = op;
109 f->added_by_user = 0;
110 return;
111 }
112 }
113
114 /* Maybe bridge device has same hw addr? */
115 if (p && ether_addr_equal(br->dev->dev_addr, addr) &&
116 (!vid || br_vlan_find(br, vid))) {
117 f->dst = NULL;
118 f->added_by_user = 0;
119 return;
120 }
121
122 fdb_delete(br, f);
123}
124
125void br_fdb_find_delete_local(struct net_bridge *br,
126 const struct net_bridge_port *p,
127 const unsigned char *addr, u16 vid)
128{
129 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
130 struct net_bridge_fdb_entry *f;
131
132 spin_lock_bh(&br->hash_lock);
133 f = fdb_find(head, addr, vid);
134 if (f && f->is_local && !f->added_by_user && f->dst == p)
135 fdb_delete_local(br, p, f);
136 spin_unlock_bh(&br->hash_lock);
137}
138
92void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr) 139void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr)
93{ 140{
94 struct net_bridge *br = p->br; 141 struct net_bridge *br = p->br;
95 bool no_vlan = (nbp_get_vlan_info(p) == NULL) ? true : false; 142 struct net_port_vlans *pv = nbp_get_vlan_info(p);
143 bool no_vlan = !pv;
96 int i; 144 int i;
145 u16 vid;
97 146
98 spin_lock_bh(&br->hash_lock); 147 spin_lock_bh(&br->hash_lock);
99 148
@@ -104,38 +153,34 @@ void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr)
104 struct net_bridge_fdb_entry *f; 153 struct net_bridge_fdb_entry *f;
105 154
106 f = hlist_entry(h, struct net_bridge_fdb_entry, hlist); 155 f = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
107 if (f->dst == p && f->is_local) { 156 if (f->dst == p && f->is_local && !f->added_by_user) {
108 /* maybe another port has same hw addr? */
109 struct net_bridge_port *op;
110 u16 vid = f->vlan_id;
111 list_for_each_entry(op, &br->port_list, list) {
112 if (op != p &&
113 ether_addr_equal(op->dev->dev_addr,
114 f->addr.addr) &&
115 nbp_vlan_find(op, vid)) {
116 f->dst = op;
117 goto insert;
118 }
119 }
120
121 /* delete old one */ 157 /* delete old one */
122 fdb_delete(br, f); 158 fdb_delete_local(br, p, f);
123insert:
124 /* insert new address, may fail if invalid
125 * address or dup.
126 */
127 fdb_insert(br, p, newaddr, vid);
128 159
129 /* if this port has no vlan information 160 /* if this port has no vlan information
130 * configured, we can safely be done at 161 * configured, we can safely be done at
131 * this point. 162 * this point.
132 */ 163 */
133 if (no_vlan) 164 if (no_vlan)
134 goto done; 165 goto insert;
135 } 166 }
136 } 167 }
137 } 168 }
138 169
170insert:
171 /* insert new address, may fail if invalid address or dup. */
172 fdb_insert(br, p, newaddr, 0);
173
174 if (no_vlan)
175 goto done;
176
177 /* Now add entries for every VLAN configured on the port.
178 * This function runs under RTNL so the bitmap will not change
179 * from under us.
180 */
181 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID)
182 fdb_insert(br, p, newaddr, vid);
183
139done: 184done:
140 spin_unlock_bh(&br->hash_lock); 185 spin_unlock_bh(&br->hash_lock);
141} 186}
@@ -146,10 +191,12 @@ void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr)
146 struct net_port_vlans *pv; 191 struct net_port_vlans *pv;
147 u16 vid = 0; 192 u16 vid = 0;
148 193
194 spin_lock_bh(&br->hash_lock);
195
149 /* If old entry was unassociated with any port, then delete it. */ 196 /* If old entry was unassociated with any port, then delete it. */
150 f = __br_fdb_get(br, br->dev->dev_addr, 0); 197 f = __br_fdb_get(br, br->dev->dev_addr, 0);
151 if (f && f->is_local && !f->dst) 198 if (f && f->is_local && !f->dst)
152 fdb_delete(br, f); 199 fdb_delete_local(br, NULL, f);
153 200
154 fdb_insert(br, NULL, newaddr, 0); 201 fdb_insert(br, NULL, newaddr, 0);
155 202
@@ -159,14 +206,16 @@ void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr)
159 */ 206 */
160 pv = br_get_vlan_info(br); 207 pv = br_get_vlan_info(br);
161 if (!pv) 208 if (!pv)
162 return; 209 goto out;
163 210
164 for_each_set_bit_from(vid, pv->vlan_bitmap, VLAN_N_VID) { 211 for_each_set_bit_from(vid, pv->vlan_bitmap, VLAN_N_VID) {
165 f = __br_fdb_get(br, br->dev->dev_addr, vid); 212 f = __br_fdb_get(br, br->dev->dev_addr, vid);
166 if (f && f->is_local && !f->dst) 213 if (f && f->is_local && !f->dst)
167 fdb_delete(br, f); 214 fdb_delete_local(br, NULL, f);
168 fdb_insert(br, NULL, newaddr, vid); 215 fdb_insert(br, NULL, newaddr, vid);
169 } 216 }
217out:
218 spin_unlock_bh(&br->hash_lock);
170} 219}
171 220
172void br_fdb_cleanup(unsigned long _data) 221void br_fdb_cleanup(unsigned long _data)
@@ -235,25 +284,11 @@ void br_fdb_delete_by_port(struct net_bridge *br,
235 284
236 if (f->is_static && !do_all) 285 if (f->is_static && !do_all)
237 continue; 286 continue;
238 /*
239 * if multiple ports all have the same device address
240 * then when one port is deleted, assign
241 * the local entry to other port
242 */
243 if (f->is_local) {
244 struct net_bridge_port *op;
245 list_for_each_entry(op, &br->port_list, list) {
246 if (op != p &&
247 ether_addr_equal(op->dev->dev_addr,
248 f->addr.addr)) {
249 f->dst = op;
250 goto skip_delete;
251 }
252 }
253 }
254 287
255 fdb_delete(br, f); 288 if (f->is_local)
256 skip_delete: ; 289 fdb_delete_local(br, p, f);
290 else
291 fdb_delete(br, f);
257 } 292 }
258 } 293 }
259 spin_unlock_bh(&br->hash_lock); 294 spin_unlock_bh(&br->hash_lock);
@@ -397,6 +432,7 @@ static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head,
397 fdb->vlan_id = vid; 432 fdb->vlan_id = vid;
398 fdb->is_local = 0; 433 fdb->is_local = 0;
399 fdb->is_static = 0; 434 fdb->is_static = 0;
435 fdb->added_by_user = 0;
400 fdb->updated = fdb->used = jiffies; 436 fdb->updated = fdb->used = jiffies;
401 hlist_add_head_rcu(&fdb->hlist, head); 437 hlist_add_head_rcu(&fdb->hlist, head);
402 } 438 }
@@ -447,7 +483,7 @@ int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
447} 483}
448 484
449void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, 485void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
450 const unsigned char *addr, u16 vid) 486 const unsigned char *addr, u16 vid, bool added_by_user)
451{ 487{
452 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)]; 488 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
453 struct net_bridge_fdb_entry *fdb; 489 struct net_bridge_fdb_entry *fdb;
@@ -473,13 +509,18 @@ void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
473 /* fastpath: update of existing entry */ 509 /* fastpath: update of existing entry */
474 fdb->dst = source; 510 fdb->dst = source;
475 fdb->updated = jiffies; 511 fdb->updated = jiffies;
512 if (unlikely(added_by_user))
513 fdb->added_by_user = 1;
476 } 514 }
477 } else { 515 } else {
478 spin_lock(&br->hash_lock); 516 spin_lock(&br->hash_lock);
479 if (likely(!fdb_find(head, addr, vid))) { 517 if (likely(!fdb_find(head, addr, vid))) {
480 fdb = fdb_create(head, source, addr, vid); 518 fdb = fdb_create(head, source, addr, vid);
481 if (fdb) 519 if (fdb) {
520 if (unlikely(added_by_user))
521 fdb->added_by_user = 1;
482 fdb_notify(br, fdb, RTM_NEWNEIGH); 522 fdb_notify(br, fdb, RTM_NEWNEIGH);
523 }
483 } 524 }
484 /* else we lose race and someone else inserts 525 /* else we lose race and someone else inserts
485 * it first, don't bother updating 526 * it first, don't bother updating
@@ -647,6 +688,7 @@ static int fdb_add_entry(struct net_bridge_port *source, const __u8 *addr,
647 688
648 modified = true; 689 modified = true;
649 } 690 }
691 fdb->added_by_user = 1;
650 692
651 fdb->used = jiffies; 693 fdb->used = jiffies;
652 if (modified) { 694 if (modified) {
@@ -664,7 +706,7 @@ static int __br_fdb_add(struct ndmsg *ndm, struct net_bridge_port *p,
664 706
665 if (ndm->ndm_flags & NTF_USE) { 707 if (ndm->ndm_flags & NTF_USE) {
666 rcu_read_lock(); 708 rcu_read_lock();
667 br_fdb_update(p->br, p, addr, vid); 709 br_fdb_update(p->br, p, addr, vid, true);
668 rcu_read_unlock(); 710 rcu_read_unlock();
669 } else { 711 } else {
670 spin_lock_bh(&p->br->hash_lock); 712 spin_lock_bh(&p->br->hash_lock);
@@ -749,8 +791,7 @@ out:
749 return err; 791 return err;
750} 792}
751 793
752int fdb_delete_by_addr(struct net_bridge *br, const u8 *addr, 794static int fdb_delete_by_addr(struct net_bridge *br, const u8 *addr, u16 vlan)
753 u16 vlan)
754{ 795{
755 struct hlist_head *head = &br->hash[br_mac_hash(addr, vlan)]; 796 struct hlist_head *head = &br->hash[br_mac_hash(addr, vlan)];
756 struct net_bridge_fdb_entry *fdb; 797 struct net_bridge_fdb_entry *fdb;
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index cffe1d666ba1..54d207d3a31c 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -389,6 +389,9 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
389 if (br->dev->needed_headroom < dev->needed_headroom) 389 if (br->dev->needed_headroom < dev->needed_headroom)
390 br->dev->needed_headroom = dev->needed_headroom; 390 br->dev->needed_headroom = dev->needed_headroom;
391 391
392 if (br_fdb_insert(br, p, dev->dev_addr, 0))
393 netdev_err(dev, "failed insert local address bridge forwarding table\n");
394
392 spin_lock_bh(&br->lock); 395 spin_lock_bh(&br->lock);
393 changed_addr = br_stp_recalculate_bridge_id(br); 396 changed_addr = br_stp_recalculate_bridge_id(br);
394 397
@@ -404,9 +407,6 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
404 407
405 dev_set_mtu(br->dev, br_min_mtu(br)); 408 dev_set_mtu(br->dev, br_min_mtu(br));
406 409
407 if (br_fdb_insert(br, p, dev->dev_addr, 0))
408 netdev_err(dev, "failed insert local address bridge forwarding table\n");
409
410 kobject_uevent(&p->kobj, KOBJ_ADD); 410 kobject_uevent(&p->kobj, KOBJ_ADD);
411 411
412 return 0; 412 return 0;
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index bf8dc7d308d6..28d544627422 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -77,7 +77,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
77 /* insert into forwarding database after filtering to avoid spoofing */ 77 /* insert into forwarding database after filtering to avoid spoofing */
78 br = p->br; 78 br = p->br;
79 if (p->flags & BR_LEARNING) 79 if (p->flags & BR_LEARNING)
80 br_fdb_update(br, p, eth_hdr(skb)->h_source, vid); 80 br_fdb_update(br, p, eth_hdr(skb)->h_source, vid, false);
81 81
82 if (!is_broadcast_ether_addr(dest) && is_multicast_ether_addr(dest) && 82 if (!is_broadcast_ether_addr(dest) && is_multicast_ether_addr(dest) &&
83 br_multicast_rcv(br, p, skb, vid)) 83 br_multicast_rcv(br, p, skb, vid))
@@ -148,7 +148,7 @@ static int br_handle_local_finish(struct sk_buff *skb)
148 148
149 br_vlan_get_tag(skb, &vid); 149 br_vlan_get_tag(skb, &vid);
150 if (p->flags & BR_LEARNING) 150 if (p->flags & BR_LEARNING)
151 br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid); 151 br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid, false);
152 return 0; /* process further */ 152 return 0; /* process further */
153} 153}
154 154
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index fcd12333c59b..3ba11bc99b65 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -104,6 +104,7 @@ struct net_bridge_fdb_entry
104 mac_addr addr; 104 mac_addr addr;
105 unsigned char is_local; 105 unsigned char is_local;
106 unsigned char is_static; 106 unsigned char is_static;
107 unsigned char added_by_user;
107 __u16 vlan_id; 108 __u16 vlan_id;
108}; 109};
109 110
@@ -370,6 +371,9 @@ static inline void br_netpoll_disable(struct net_bridge_port *p)
370int br_fdb_init(void); 371int br_fdb_init(void);
371void br_fdb_fini(void); 372void br_fdb_fini(void);
372void br_fdb_flush(struct net_bridge *br); 373void br_fdb_flush(struct net_bridge *br);
374void br_fdb_find_delete_local(struct net_bridge *br,
375 const struct net_bridge_port *p,
376 const unsigned char *addr, u16 vid);
373void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr); 377void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr);
374void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr); 378void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
375void br_fdb_cleanup(unsigned long arg); 379void br_fdb_cleanup(unsigned long arg);
@@ -383,8 +387,7 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count,
383int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source, 387int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
384 const unsigned char *addr, u16 vid); 388 const unsigned char *addr, u16 vid);
385void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, 389void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
386 const unsigned char *addr, u16 vid); 390 const unsigned char *addr, u16 vid, bool added_by_user);
387int fdb_delete_by_addr(struct net_bridge *br, const u8 *addr, u16 vid);
388 391
389int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], 392int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
390 struct net_device *dev, const unsigned char *addr); 393 struct net_device *dev, const unsigned char *addr);
@@ -584,6 +587,7 @@ struct sk_buff *br_handle_vlan(struct net_bridge *br,
584int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags); 587int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags);
585int br_vlan_delete(struct net_bridge *br, u16 vid); 588int br_vlan_delete(struct net_bridge *br, u16 vid);
586void br_vlan_flush(struct net_bridge *br); 589void br_vlan_flush(struct net_bridge *br);
590bool br_vlan_find(struct net_bridge *br, u16 vid);
587int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val); 591int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
588int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags); 592int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags);
589int nbp_vlan_delete(struct net_bridge_port *port, u16 vid); 593int nbp_vlan_delete(struct net_bridge_port *port, u16 vid);
@@ -665,6 +669,11 @@ static inline void br_vlan_flush(struct net_bridge *br)
665{ 669{
666} 670}
667 671
672static inline bool br_vlan_find(struct net_bridge *br, u16 vid)
673{
674 return false;
675}
676
668static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags) 677static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
669{ 678{
670 return -EOPNOTSUPP; 679 return -EOPNOTSUPP;
diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
index 656a6f3e40de..189ba1e7d851 100644
--- a/net/bridge/br_stp_if.c
+++ b/net/bridge/br_stp_if.c
@@ -194,6 +194,8 @@ void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *addr)
194 194
195 wasroot = br_is_root_bridge(br); 195 wasroot = br_is_root_bridge(br);
196 196
197 br_fdb_change_mac_address(br, addr);
198
197 memcpy(oldaddr, br->bridge_id.addr, ETH_ALEN); 199 memcpy(oldaddr, br->bridge_id.addr, ETH_ALEN);
198 memcpy(br->bridge_id.addr, addr, ETH_ALEN); 200 memcpy(br->bridge_id.addr, addr, ETH_ALEN);
199 memcpy(br->dev->dev_addr, addr, ETH_ALEN); 201 memcpy(br->dev->dev_addr, addr, ETH_ALEN);
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
index 4ca4d0a0151c..8249ca764c79 100644
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
@@ -275,9 +275,7 @@ int br_vlan_delete(struct net_bridge *br, u16 vid)
275 if (!pv) 275 if (!pv)
276 return -EINVAL; 276 return -EINVAL;
277 277
278 spin_lock_bh(&br->hash_lock); 278 br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid);
279 fdb_delete_by_addr(br, br->dev->dev_addr, vid);
280 spin_unlock_bh(&br->hash_lock);
281 279
282 __vlan_del(pv, vid); 280 __vlan_del(pv, vid);
283 return 0; 281 return 0;
@@ -295,6 +293,25 @@ void br_vlan_flush(struct net_bridge *br)
295 __vlan_flush(pv); 293 __vlan_flush(pv);
296} 294}
297 295
296bool br_vlan_find(struct net_bridge *br, u16 vid)
297{
298 struct net_port_vlans *pv;
299 bool found = false;
300
301 rcu_read_lock();
302 pv = rcu_dereference(br->vlan_info);
303
304 if (!pv)
305 goto out;
306
307 if (test_bit(vid, pv->vlan_bitmap))
308 found = true;
309
310out:
311 rcu_read_unlock();
312 return found;
313}
314
298int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val) 315int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
299{ 316{
300 if (!rtnl_trylock()) 317 if (!rtnl_trylock())
@@ -359,9 +376,7 @@ int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
359 if (!pv) 376 if (!pv)
360 return -EINVAL; 377 return -EINVAL;
361 378
362 spin_lock_bh(&port->br->hash_lock); 379 br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid);
363 fdb_delete_by_addr(port->br, port->dev->dev_addr, vid);
364 spin_unlock_bh(&port->br->hash_lock);
365 380
366 return __vlan_del(pv, vid); 381 return __vlan_del(pv, vid);
367} 382}
diff --git a/net/caif/caif_dev.c b/net/caif/caif_dev.c
index 4dca159435cf..edbca468fa73 100644
--- a/net/caif/caif_dev.c
+++ b/net/caif/caif_dev.c
@@ -22,6 +22,7 @@
22#include <net/pkt_sched.h> 22#include <net/pkt_sched.h>
23#include <net/caif/caif_device.h> 23#include <net/caif/caif_device.h>
24#include <net/caif/caif_layer.h> 24#include <net/caif/caif_layer.h>
25#include <net/caif/caif_dev.h>
25#include <net/caif/cfpkt.h> 26#include <net/caif/cfpkt.h>
26#include <net/caif/cfcnfg.h> 27#include <net/caif/cfcnfg.h>
27#include <net/caif/cfserl.h> 28#include <net/caif/cfserl.h>
diff --git a/net/caif/cfsrvl.c b/net/caif/cfsrvl.c
index 353f793d1b3b..a6e115463052 100644
--- a/net/caif/cfsrvl.c
+++ b/net/caif/cfsrvl.c
@@ -15,6 +15,7 @@
15#include <net/caif/caif_layer.h> 15#include <net/caif/caif_layer.h>
16#include <net/caif/cfsrvl.h> 16#include <net/caif/cfsrvl.h>
17#include <net/caif/cfpkt.h> 17#include <net/caif/cfpkt.h>
18#include <net/caif/caif_dev.h>
18 19
19#define SRVL_CTRL_PKT_SIZE 1 20#define SRVL_CTRL_PKT_SIZE 1
20#define SRVL_FLOW_OFF 0x81 21#define SRVL_FLOW_OFF 0x81
diff --git a/net/can/af_can.c b/net/can/af_can.c
index d249874a366d..a27f8aad9e99 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -57,6 +57,7 @@
57#include <linux/skbuff.h> 57#include <linux/skbuff.h>
58#include <linux/can.h> 58#include <linux/can.h>
59#include <linux/can/core.h> 59#include <linux/can/core.h>
60#include <linux/can/skb.h>
60#include <linux/ratelimit.h> 61#include <linux/ratelimit.h>
61#include <net/net_namespace.h> 62#include <net/net_namespace.h>
62#include <net/sock.h> 63#include <net/sock.h>
@@ -290,7 +291,7 @@ int can_send(struct sk_buff *skb, int loop)
290 return -ENOMEM; 291 return -ENOMEM;
291 } 292 }
292 293
293 newskb->sk = skb->sk; 294 can_skb_set_owner(newskb, skb->sk);
294 newskb->ip_summed = CHECKSUM_UNNECESSARY; 295 newskb->ip_summed = CHECKSUM_UNNECESSARY;
295 newskb->pkt_type = PACKET_BROADCAST; 296 newskb->pkt_type = PACKET_BROADCAST;
296 } 297 }
diff --git a/net/can/bcm.c b/net/can/bcm.c
index 3fc737b214c7..dcb75c0e66c1 100644
--- a/net/can/bcm.c
+++ b/net/can/bcm.c
@@ -268,7 +268,7 @@ static void bcm_can_tx(struct bcm_op *op)
268 268
269 /* send with loopback */ 269 /* send with loopback */
270 skb->dev = dev; 270 skb->dev = dev;
271 skb->sk = op->sk; 271 can_skb_set_owner(skb, op->sk);
272 can_send(skb, 1); 272 can_send(skb, 1);
273 273
274 /* update statistics */ 274 /* update statistics */
@@ -1223,7 +1223,7 @@ static int bcm_tx_send(struct msghdr *msg, int ifindex, struct sock *sk)
1223 1223
1224 can_skb_prv(skb)->ifindex = dev->ifindex; 1224 can_skb_prv(skb)->ifindex = dev->ifindex;
1225 skb->dev = dev; 1225 skb->dev = dev;
1226 skb->sk = sk; 1226 can_skb_set_owner(skb, sk);
1227 err = can_send(skb, 1); /* send with loopback */ 1227 err = can_send(skb, 1); /* send with loopback */
1228 dev_put(dev); 1228 dev_put(dev);
1229 1229
diff --git a/net/can/raw.c b/net/can/raw.c
index 07d72d852324..8be757cca2ec 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -715,6 +715,7 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
715 715
716 skb->dev = dev; 716 skb->dev = dev;
717 skb->sk = sk; 717 skb->sk = sk;
718 skb->priority = sk->sk_priority;
718 719
719 err = can_send(skb, ro->loopback); 720 err = can_send(skb, ro->loopback);
720 721
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 0e478a0f4204..30efc5c18622 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -840,9 +840,13 @@ static bool ceph_msg_data_bio_advance(struct ceph_msg_data_cursor *cursor,
840 840
841 if (!cursor->bvec_iter.bi_size) { 841 if (!cursor->bvec_iter.bi_size) {
842 bio = bio->bi_next; 842 bio = bio->bi_next;
843 cursor->bvec_iter = bio->bi_iter; 843 cursor->bio = bio;
844 if (bio)
845 cursor->bvec_iter = bio->bi_iter;
846 else
847 memset(&cursor->bvec_iter, 0,
848 sizeof(cursor->bvec_iter));
844 } 849 }
845 cursor->bio = bio;
846 850
847 if (!cursor->last_piece) { 851 if (!cursor->last_piece) {
848 BUG_ON(!cursor->resid); 852 BUG_ON(!cursor->resid);
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 010ff3bd58ad..0676f2b199d6 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -1427,6 +1427,40 @@ static void __send_queued(struct ceph_osd_client *osdc)
1427} 1427}
1428 1428
1429/* 1429/*
1430 * Caller should hold map_sem for read and request_mutex.
1431 */
1432static int __ceph_osdc_start_request(struct ceph_osd_client *osdc,
1433 struct ceph_osd_request *req,
1434 bool nofail)
1435{
1436 int rc;
1437
1438 __register_request(osdc, req);
1439 req->r_sent = 0;
1440 req->r_got_reply = 0;
1441 rc = __map_request(osdc, req, 0);
1442 if (rc < 0) {
1443 if (nofail) {
1444 dout("osdc_start_request failed map, "
1445 " will retry %lld\n", req->r_tid);
1446 rc = 0;
1447 } else {
1448 __unregister_request(osdc, req);
1449 }
1450 return rc;
1451 }
1452
1453 if (req->r_osd == NULL) {
1454 dout("send_request %p no up osds in pg\n", req);
1455 ceph_monc_request_next_osdmap(&osdc->client->monc);
1456 } else {
1457 __send_queued(osdc);
1458 }
1459
1460 return 0;
1461}
1462
1463/*
1430 * Timeout callback, called every N seconds when 1 or more osd 1464 * Timeout callback, called every N seconds when 1 or more osd
1431 * requests has been active for more than N seconds. When this 1465 * requests has been active for more than N seconds. When this
1432 * happens, we ping all OSDs with requests who have timed out to 1466 * happens, we ping all OSDs with requests who have timed out to
@@ -1653,6 +1687,7 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
1653 osdmap_epoch = ceph_decode_32(&p); 1687 osdmap_epoch = ceph_decode_32(&p);
1654 1688
1655 /* lookup */ 1689 /* lookup */
1690 down_read(&osdc->map_sem);
1656 mutex_lock(&osdc->request_mutex); 1691 mutex_lock(&osdc->request_mutex);
1657 req = __lookup_request(osdc, tid); 1692 req = __lookup_request(osdc, tid);
1658 if (req == NULL) { 1693 if (req == NULL) {
@@ -1709,7 +1744,6 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
1709 dout("redirect pool %lld\n", redir.oloc.pool); 1744 dout("redirect pool %lld\n", redir.oloc.pool);
1710 1745
1711 __unregister_request(osdc, req); 1746 __unregister_request(osdc, req);
1712 mutex_unlock(&osdc->request_mutex);
1713 1747
1714 req->r_target_oloc = redir.oloc; /* struct */ 1748 req->r_target_oloc = redir.oloc; /* struct */
1715 1749
@@ -1721,10 +1755,10 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
1721 * successfully. In the future we might want to follow 1755 * successfully. In the future we might want to follow
1722 * original request's nofail setting here. 1756 * original request's nofail setting here.
1723 */ 1757 */
1724 err = ceph_osdc_start_request(osdc, req, true); 1758 err = __ceph_osdc_start_request(osdc, req, true);
1725 BUG_ON(err); 1759 BUG_ON(err);
1726 1760
1727 goto done; 1761 goto out_unlock;
1728 } 1762 }
1729 1763
1730 already_completed = req->r_got_reply; 1764 already_completed = req->r_got_reply;
@@ -1742,8 +1776,7 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
1742 req->r_got_reply = 1; 1776 req->r_got_reply = 1;
1743 } else if ((flags & CEPH_OSD_FLAG_ONDISK) == 0) { 1777 } else if ((flags & CEPH_OSD_FLAG_ONDISK) == 0) {
1744 dout("handle_reply tid %llu dup ack\n", tid); 1778 dout("handle_reply tid %llu dup ack\n", tid);
1745 mutex_unlock(&osdc->request_mutex); 1779 goto out_unlock;
1746 goto done;
1747 } 1780 }
1748 1781
1749 dout("handle_reply tid %llu flags %d\n", tid, flags); 1782 dout("handle_reply tid %llu flags %d\n", tid, flags);
@@ -1758,6 +1791,7 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
1758 __unregister_request(osdc, req); 1791 __unregister_request(osdc, req);
1759 1792
1760 mutex_unlock(&osdc->request_mutex); 1793 mutex_unlock(&osdc->request_mutex);
1794 up_read(&osdc->map_sem);
1761 1795
1762 if (!already_completed) { 1796 if (!already_completed) {
1763 if (req->r_unsafe_callback && 1797 if (req->r_unsafe_callback &&
@@ -1775,10 +1809,14 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
1775 complete_request(req); 1809 complete_request(req);
1776 } 1810 }
1777 1811
1778done: 1812out:
1779 dout("req=%p req->r_linger=%d\n", req, req->r_linger); 1813 dout("req=%p req->r_linger=%d\n", req, req->r_linger);
1780 ceph_osdc_put_request(req); 1814 ceph_osdc_put_request(req);
1781 return; 1815 return;
1816out_unlock:
1817 mutex_unlock(&osdc->request_mutex);
1818 up_read(&osdc->map_sem);
1819 goto out;
1782 1820
1783bad_put: 1821bad_put:
1784 req->r_result = -EIO; 1822 req->r_result = -EIO;
@@ -1791,6 +1829,7 @@ bad_put:
1791 ceph_osdc_put_request(req); 1829 ceph_osdc_put_request(req);
1792bad_mutex: 1830bad_mutex:
1793 mutex_unlock(&osdc->request_mutex); 1831 mutex_unlock(&osdc->request_mutex);
1832 up_read(&osdc->map_sem);
1794bad: 1833bad:
1795 pr_err("corrupt osd_op_reply got %d %d\n", 1834 pr_err("corrupt osd_op_reply got %d %d\n",
1796 (int)msg->front.iov_len, le32_to_cpu(msg->hdr.front_len)); 1835 (int)msg->front.iov_len, le32_to_cpu(msg->hdr.front_len));
@@ -2351,34 +2390,16 @@ int ceph_osdc_start_request(struct ceph_osd_client *osdc,
2351 struct ceph_osd_request *req, 2390 struct ceph_osd_request *req,
2352 bool nofail) 2391 bool nofail)
2353{ 2392{
2354 int rc = 0; 2393 int rc;
2355 2394
2356 down_read(&osdc->map_sem); 2395 down_read(&osdc->map_sem);
2357 mutex_lock(&osdc->request_mutex); 2396 mutex_lock(&osdc->request_mutex);
2358 __register_request(osdc, req); 2397
2359 req->r_sent = 0; 2398 rc = __ceph_osdc_start_request(osdc, req, nofail);
2360 req->r_got_reply = 0; 2399
2361 rc = __map_request(osdc, req, 0);
2362 if (rc < 0) {
2363 if (nofail) {
2364 dout("osdc_start_request failed map, "
2365 " will retry %lld\n", req->r_tid);
2366 rc = 0;
2367 } else {
2368 __unregister_request(osdc, req);
2369 }
2370 goto out_unlock;
2371 }
2372 if (req->r_osd == NULL) {
2373 dout("send_request %p no up osds in pg\n", req);
2374 ceph_monc_request_next_osdmap(&osdc->client->monc);
2375 } else {
2376 __send_queued(osdc);
2377 }
2378 rc = 0;
2379out_unlock:
2380 mutex_unlock(&osdc->request_mutex); 2400 mutex_unlock(&osdc->request_mutex);
2381 up_read(&osdc->map_sem); 2401 up_read(&osdc->map_sem);
2402
2382 return rc; 2403 return rc;
2383} 2404}
2384EXPORT_SYMBOL(ceph_osdc_start_request); 2405EXPORT_SYMBOL(ceph_osdc_start_request);
@@ -2504,9 +2525,12 @@ int ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client)
2504 err = -ENOMEM; 2525 err = -ENOMEM;
2505 osdc->notify_wq = create_singlethread_workqueue("ceph-watch-notify"); 2526 osdc->notify_wq = create_singlethread_workqueue("ceph-watch-notify");
2506 if (!osdc->notify_wq) 2527 if (!osdc->notify_wq)
2507 goto out_msgpool; 2528 goto out_msgpool_reply;
2529
2508 return 0; 2530 return 0;
2509 2531
2532out_msgpool_reply:
2533 ceph_msgpool_destroy(&osdc->msgpool_op_reply);
2510out_msgpool: 2534out_msgpool:
2511 ceph_msgpool_destroy(&osdc->msgpool_op); 2535 ceph_msgpool_destroy(&osdc->msgpool_op);
2512out_mempool: 2536out_mempool:
diff --git a/net/core/dev.c b/net/core/dev.c
index 3721db716350..4ad1b78c9c77 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2803,7 +2803,7 @@ EXPORT_SYMBOL(dev_loopback_xmit);
2803 * the BH enable code must have IRQs enabled so that it will not deadlock. 2803 * the BH enable code must have IRQs enabled so that it will not deadlock.
2804 * --BLG 2804 * --BLG
2805 */ 2805 */
2806int __dev_queue_xmit(struct sk_buff *skb, void *accel_priv) 2806static int __dev_queue_xmit(struct sk_buff *skb, void *accel_priv)
2807{ 2807{
2808 struct net_device *dev = skb->dev; 2808 struct net_device *dev = skb->dev;
2809 struct netdev_queue *txq; 2809 struct netdev_queue *txq;
@@ -4637,7 +4637,7 @@ struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev)
4637} 4637}
4638EXPORT_SYMBOL(netdev_master_upper_dev_get_rcu); 4638EXPORT_SYMBOL(netdev_master_upper_dev_get_rcu);
4639 4639
4640int netdev_adjacent_sysfs_add(struct net_device *dev, 4640static int netdev_adjacent_sysfs_add(struct net_device *dev,
4641 struct net_device *adj_dev, 4641 struct net_device *adj_dev,
4642 struct list_head *dev_list) 4642 struct list_head *dev_list)
4643{ 4643{
@@ -4647,7 +4647,7 @@ int netdev_adjacent_sysfs_add(struct net_device *dev,
4647 return sysfs_create_link(&(dev->dev.kobj), &(adj_dev->dev.kobj), 4647 return sysfs_create_link(&(dev->dev.kobj), &(adj_dev->dev.kobj),
4648 linkname); 4648 linkname);
4649} 4649}
4650void netdev_adjacent_sysfs_del(struct net_device *dev, 4650static void netdev_adjacent_sysfs_del(struct net_device *dev,
4651 char *name, 4651 char *name,
4652 struct list_head *dev_list) 4652 struct list_head *dev_list)
4653{ 4653{
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
index f409e0bd35c0..185c341fafbd 100644
--- a/net/core/fib_rules.c
+++ b/net/core/fib_rules.c
@@ -745,6 +745,13 @@ static int fib_rules_event(struct notifier_block *this, unsigned long event,
745 attach_rules(&ops->rules_list, dev); 745 attach_rules(&ops->rules_list, dev);
746 break; 746 break;
747 747
748 case NETDEV_CHANGENAME:
749 list_for_each_entry(ops, &net->rules_ops, list) {
750 detach_rules(&ops->rules_list, dev);
751 attach_rules(&ops->rules_list, dev);
752 }
753 break;
754
748 case NETDEV_UNREGISTER: 755 case NETDEV_UNREGISTER:
749 list_for_each_entry(ops, &net->rules_ops, list) 756 list_for_each_entry(ops, &net->rules_ops, list)
750 detach_rules(&ops->rules_list, dev); 757 detach_rules(&ops->rules_list, dev);
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index c03f3dec4763..a664f7829a6d 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -948,6 +948,7 @@ int netpoll_parse_options(struct netpoll *np, char *opt)
948{ 948{
949 char *cur=opt, *delim; 949 char *cur=opt, *delim;
950 int ipv6; 950 int ipv6;
951 bool ipversion_set = false;
951 952
952 if (*cur != '@') { 953 if (*cur != '@') {
953 if ((delim = strchr(cur, '@')) == NULL) 954 if ((delim = strchr(cur, '@')) == NULL)
@@ -960,6 +961,7 @@ int netpoll_parse_options(struct netpoll *np, char *opt)
960 cur++; 961 cur++;
961 962
962 if (*cur != '/') { 963 if (*cur != '/') {
964 ipversion_set = true;
963 if ((delim = strchr(cur, '/')) == NULL) 965 if ((delim = strchr(cur, '/')) == NULL)
964 goto parse_failed; 966 goto parse_failed;
965 *delim = 0; 967 *delim = 0;
@@ -1002,7 +1004,7 @@ int netpoll_parse_options(struct netpoll *np, char *opt)
1002 ipv6 = netpoll_parse_ip_addr(cur, &np->remote_ip); 1004 ipv6 = netpoll_parse_ip_addr(cur, &np->remote_ip);
1003 if (ipv6 < 0) 1005 if (ipv6 < 0)
1004 goto parse_failed; 1006 goto parse_failed;
1005 else if (np->ipv6 != (bool)ipv6) 1007 else if (ipversion_set && np->ipv6 != (bool)ipv6)
1006 goto parse_failed; 1008 goto parse_failed;
1007 else 1009 else
1008 np->ipv6 = (bool)ipv6; 1010 np->ipv6 = (bool)ipv6;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 393b1bc9a618..048dc8d183aa 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -374,7 +374,7 @@ static size_t rtnl_link_get_slave_info_data_size(const struct net_device *dev)
374 if (!master_dev) 374 if (!master_dev)
375 return 0; 375 return 0;
376 ops = master_dev->rtnl_link_ops; 376 ops = master_dev->rtnl_link_ops;
377 if (!ops->get_slave_size) 377 if (!ops || !ops->get_slave_size)
378 return 0; 378 return 0;
379 /* IFLA_INFO_SLAVE_DATA + nested data */ 379 /* IFLA_INFO_SLAVE_DATA + nested data */
380 return nla_total_size(sizeof(struct nlattr)) + 380 return nla_total_size(sizeof(struct nlattr)) +
diff --git a/net/core/sock.c b/net/core/sock.c
index 0c127dcdf6a8..5b6a9431b017 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1775,7 +1775,9 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
1775 while (order) { 1775 while (order) {
1776 if (npages >= 1 << order) { 1776 if (npages >= 1 << order) {
1777 page = alloc_pages(sk->sk_allocation | 1777 page = alloc_pages(sk->sk_allocation |
1778 __GFP_COMP | __GFP_NOWARN, 1778 __GFP_COMP |
1779 __GFP_NOWARN |
1780 __GFP_NORETRY,
1779 order); 1781 order);
1780 if (page) 1782 if (page)
1781 goto fill_page; 1783 goto fill_page;
@@ -1845,7 +1847,7 @@ bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t prio)
1845 gfp_t gfp = prio; 1847 gfp_t gfp = prio;
1846 1848
1847 if (order) 1849 if (order)
1848 gfp |= __GFP_COMP | __GFP_NOWARN; 1850 gfp |= __GFP_COMP | __GFP_NOWARN | __GFP_NORETRY;
1849 pfrag->page = alloc_pages(gfp, order); 1851 pfrag->page = alloc_pages(gfp, order);
1850 if (likely(pfrag->page)) { 1852 if (likely(pfrag->page)) {
1851 pfrag->offset = 0; 1853 pfrag->offset = 0;
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
index 2954dcbca832..4c04848953bd 100644
--- a/net/decnet/af_decnet.c
+++ b/net/decnet/af_decnet.c
@@ -2104,8 +2104,6 @@ static struct notifier_block dn_dev_notifier = {
2104 .notifier_call = dn_device_event, 2104 .notifier_call = dn_device_event,
2105}; 2105};
2106 2106
2107extern int dn_route_rcv(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
2108
2109static struct packet_type dn_dix_packet_type __read_mostly = { 2107static struct packet_type dn_dix_packet_type __read_mostly = {
2110 .type = cpu_to_be16(ETH_P_DNA_RT), 2108 .type = cpu_to_be16(ETH_P_DNA_RT),
2111 .func = dn_route_rcv, 2109 .func = dn_route_rcv,
@@ -2353,9 +2351,6 @@ static const struct proto_ops dn_proto_ops = {
2353 .sendpage = sock_no_sendpage, 2351 .sendpage = sock_no_sendpage,
2354}; 2352};
2355 2353
2356void dn_register_sysctl(void);
2357void dn_unregister_sysctl(void);
2358
2359MODULE_DESCRIPTION("The Linux DECnet Network Protocol"); 2354MODULE_DESCRIPTION("The Linux DECnet Network Protocol");
2360MODULE_AUTHOR("Linux DECnet Project Team"); 2355MODULE_AUTHOR("Linux DECnet Project Team");
2361MODULE_LICENSE("GPL"); 2356MODULE_LICENSE("GPL");
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 48b25c0af4d0..8edfea5da572 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -106,7 +106,6 @@ static int lowpan_header_create(struct sk_buff *skb,
106 unsigned short type, const void *_daddr, 106 unsigned short type, const void *_daddr,
107 const void *_saddr, unsigned int len) 107 const void *_saddr, unsigned int len)
108{ 108{
109 struct ipv6hdr *hdr;
110 const u8 *saddr = _saddr; 109 const u8 *saddr = _saddr;
111 const u8 *daddr = _daddr; 110 const u8 *daddr = _daddr;
112 struct ieee802154_addr sa, da; 111 struct ieee802154_addr sa, da;
@@ -117,8 +116,6 @@ static int lowpan_header_create(struct sk_buff *skb,
117 if (type != ETH_P_IPV6) 116 if (type != ETH_P_IPV6)
118 return 0; 117 return 0;
119 118
120 hdr = ipv6_hdr(skb);
121
122 if (!saddr) 119 if (!saddr)
123 saddr = dev->dev_addr; 120 saddr = dev->dev_addr;
124 121
@@ -533,7 +530,27 @@ static struct header_ops lowpan_header_ops = {
533 .create = lowpan_header_create, 530 .create = lowpan_header_create,
534}; 531};
535 532
533static struct lock_class_key lowpan_tx_busylock;
534static struct lock_class_key lowpan_netdev_xmit_lock_key;
535
536static void lowpan_set_lockdep_class_one(struct net_device *dev,
537 struct netdev_queue *txq,
538 void *_unused)
539{
540 lockdep_set_class(&txq->_xmit_lock,
541 &lowpan_netdev_xmit_lock_key);
542}
543
544
545static int lowpan_dev_init(struct net_device *dev)
546{
547 netdev_for_each_tx_queue(dev, lowpan_set_lockdep_class_one, NULL);
548 dev->qdisc_tx_busylock = &lowpan_tx_busylock;
549 return 0;
550}
551
536static const struct net_device_ops lowpan_netdev_ops = { 552static const struct net_device_ops lowpan_netdev_ops = {
553 .ndo_init = lowpan_dev_init,
537 .ndo_start_xmit = lowpan_xmit, 554 .ndo_start_xmit = lowpan_xmit,
538 .ndo_set_mac_address = lowpan_set_address, 555 .ndo_set_mac_address = lowpan_set_address,
539}; 556};
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index ac2dff3c2c1c..bdbf68bb2e2d 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1443,7 +1443,8 @@ static size_t inet_nlmsg_size(void)
1443 + nla_total_size(4) /* IFA_LOCAL */ 1443 + nla_total_size(4) /* IFA_LOCAL */
1444 + nla_total_size(4) /* IFA_BROADCAST */ 1444 + nla_total_size(4) /* IFA_BROADCAST */
1445 + nla_total_size(IFNAMSIZ) /* IFA_LABEL */ 1445 + nla_total_size(IFNAMSIZ) /* IFA_LABEL */
1446 + nla_total_size(4); /* IFA_FLAGS */ 1446 + nla_total_size(4) /* IFA_FLAGS */
1447 + nla_total_size(sizeof(struct ifa_cacheinfo)); /* IFA_CACHEINFO */
1447} 1448}
1448 1449
1449static inline u32 cstamp_delta(unsigned long cstamp) 1450static inline u32 cstamp_delta(unsigned long cstamp)
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index bd28f386bd02..50228be5c17b 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -101,28 +101,22 @@ static void tunnel_dst_reset_all(struct ip_tunnel *t)
101 __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL); 101 __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
102} 102}
103 103
104static struct dst_entry *tunnel_dst_get(struct ip_tunnel *t) 104static struct rtable *tunnel_rtable_get(struct ip_tunnel *t, u32 cookie)
105{ 105{
106 struct dst_entry *dst; 106 struct dst_entry *dst;
107 107
108 rcu_read_lock(); 108 rcu_read_lock();
109 dst = rcu_dereference(this_cpu_ptr(t->dst_cache)->dst); 109 dst = rcu_dereference(this_cpu_ptr(t->dst_cache)->dst);
110 if (dst) 110 if (dst) {
111 if (dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
112 rcu_read_unlock();
113 tunnel_dst_reset(t);
114 return NULL;
115 }
111 dst_hold(dst); 116 dst_hold(dst);
112 rcu_read_unlock();
113 return dst;
114}
115
116static struct dst_entry *tunnel_dst_check(struct ip_tunnel *t, u32 cookie)
117{
118 struct dst_entry *dst = tunnel_dst_get(t);
119
120 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
121 tunnel_dst_reset(t);
122 return NULL;
123 } 117 }
124 118 rcu_read_unlock();
125 return dst; 119 return (struct rtable *)dst;
126} 120}
127 121
128/* Often modified stats are per cpu, other are shared (netdev->stats) */ 122/* Often modified stats are per cpu, other are shared (netdev->stats) */
@@ -584,7 +578,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
584 struct flowi4 fl4; 578 struct flowi4 fl4;
585 u8 tos, ttl; 579 u8 tos, ttl;
586 __be16 df; 580 __be16 df;
587 struct rtable *rt = NULL; /* Route to the other host */ 581 struct rtable *rt; /* Route to the other host */
588 unsigned int max_headroom; /* The extra header space needed */ 582 unsigned int max_headroom; /* The extra header space needed */
589 __be32 dst; 583 __be32 dst;
590 int err; 584 int err;
@@ -657,8 +651,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
657 init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr, 651 init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr,
658 tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link); 652 tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link);
659 653
660 if (connected) 654 rt = connected ? tunnel_rtable_get(tunnel, 0) : NULL;
661 rt = (struct rtable *)tunnel_dst_check(tunnel, 0);
662 655
663 if (!rt) { 656 if (!rt) {
664 rt = ip_route_output_key(tunnel->net, &fl4); 657 rt = ip_route_output_key(tunnel->net, &fl4);
diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig
index 81c6910cfa92..a26ce035e3fa 100644
--- a/net/ipv4/netfilter/Kconfig
+++ b/net/ipv4/netfilter/Kconfig
@@ -61,6 +61,11 @@ config NFT_CHAIN_NAT_IPV4
61 packet transformations such as the source, destination address and 61 packet transformations such as the source, destination address and
62 source and destination ports. 62 source and destination ports.
63 63
64config NFT_REJECT_IPV4
65 depends on NF_TABLES_IPV4
66 default NFT_REJECT
67 tristate
68
64config NF_TABLES_ARP 69config NF_TABLES_ARP
65 depends on NF_TABLES 70 depends on NF_TABLES
66 tristate "ARP nf_tables support" 71 tristate "ARP nf_tables support"
diff --git a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile
index c16be9d58420..90b82405331e 100644
--- a/net/ipv4/netfilter/Makefile
+++ b/net/ipv4/netfilter/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_NF_NAT_PROTO_GRE) += nf_nat_proto_gre.o
30obj-$(CONFIG_NF_TABLES_IPV4) += nf_tables_ipv4.o 30obj-$(CONFIG_NF_TABLES_IPV4) += nf_tables_ipv4.o
31obj-$(CONFIG_NFT_CHAIN_ROUTE_IPV4) += nft_chain_route_ipv4.o 31obj-$(CONFIG_NFT_CHAIN_ROUTE_IPV4) += nft_chain_route_ipv4.o
32obj-$(CONFIG_NFT_CHAIN_NAT_IPV4) += nft_chain_nat_ipv4.o 32obj-$(CONFIG_NFT_CHAIN_NAT_IPV4) += nft_chain_nat_ipv4.o
33obj-$(CONFIG_NFT_REJECT_IPV4) += nft_reject_ipv4.o
33obj-$(CONFIG_NF_TABLES_ARP) += nf_tables_arp.o 34obj-$(CONFIG_NF_TABLES_ARP) += nf_tables_arp.o
34 35
35# generic IP tables 36# generic IP tables
diff --git a/net/ipv4/netfilter/nf_nat_h323.c b/net/ipv4/netfilter/nf_nat_h323.c
index 9eea059dd621..574f7ebba0b6 100644
--- a/net/ipv4/netfilter/nf_nat_h323.c
+++ b/net/ipv4/netfilter/nf_nat_h323.c
@@ -229,7 +229,10 @@ static int nat_rtp_rtcp(struct sk_buff *skb, struct nf_conn *ct,
229 ret = nf_ct_expect_related(rtcp_exp); 229 ret = nf_ct_expect_related(rtcp_exp);
230 if (ret == 0) 230 if (ret == 0)
231 break; 231 break;
232 else if (ret != -EBUSY) { 232 else if (ret == -EBUSY) {
233 nf_ct_unexpect_related(rtp_exp);
234 continue;
235 } else if (ret < 0) {
233 nf_ct_unexpect_related(rtp_exp); 236 nf_ct_unexpect_related(rtp_exp);
234 nated_port = 0; 237 nated_port = 0;
235 break; 238 break;
diff --git a/net/ipv4/netfilter/nft_reject_ipv4.c b/net/ipv4/netfilter/nft_reject_ipv4.c
new file mode 100644
index 000000000000..e79718a382f2
--- /dev/null
+++ b/net/ipv4/netfilter/nft_reject_ipv4.c
@@ -0,0 +1,75 @@
1/*
2 * Copyright (c) 2008-2009 Patrick McHardy <kaber@trash.net>
3 * Copyright (c) 2013 Eric Leblond <eric@regit.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * Development of this code funded by Astaro AG (http://www.astaro.com/)
10 */
11
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/module.h>
15#include <linux/netlink.h>
16#include <linux/netfilter.h>
17#include <linux/netfilter/nf_tables.h>
18#include <net/netfilter/nf_tables.h>
19#include <net/icmp.h>
20#include <net/netfilter/ipv4/nf_reject.h>
21#include <net/netfilter/nft_reject.h>
22
23void nft_reject_ipv4_eval(const struct nft_expr *expr,
24 struct nft_data data[NFT_REG_MAX + 1],
25 const struct nft_pktinfo *pkt)
26{
27 struct nft_reject *priv = nft_expr_priv(expr);
28
29 switch (priv->type) {
30 case NFT_REJECT_ICMP_UNREACH:
31 nf_send_unreach(pkt->skb, priv->icmp_code);
32 break;
33 case NFT_REJECT_TCP_RST:
34 nf_send_reset(pkt->skb, pkt->ops->hooknum);
35 break;
36 }
37
38 data[NFT_REG_VERDICT].verdict = NF_DROP;
39}
40EXPORT_SYMBOL_GPL(nft_reject_ipv4_eval);
41
42static struct nft_expr_type nft_reject_ipv4_type;
43static const struct nft_expr_ops nft_reject_ipv4_ops = {
44 .type = &nft_reject_ipv4_type,
45 .size = NFT_EXPR_SIZE(sizeof(struct nft_reject)),
46 .eval = nft_reject_ipv4_eval,
47 .init = nft_reject_init,
48 .dump = nft_reject_dump,
49};
50
51static struct nft_expr_type nft_reject_ipv4_type __read_mostly = {
52 .family = NFPROTO_IPV4,
53 .name = "reject",
54 .ops = &nft_reject_ipv4_ops,
55 .policy = nft_reject_policy,
56 .maxattr = NFTA_REJECT_MAX,
57 .owner = THIS_MODULE,
58};
59
60static int __init nft_reject_ipv4_module_init(void)
61{
62 return nft_register_expr(&nft_reject_ipv4_type);
63}
64
65static void __exit nft_reject_ipv4_module_exit(void)
66{
67 nft_unregister_expr(&nft_reject_ipv4_type);
68}
69
70module_init(nft_reject_ipv4_module_init);
71module_exit(nft_reject_ipv4_module_exit);
72
73MODULE_LICENSE("GPL");
74MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
75MODULE_ALIAS_NFT_AF_EXPR(AF_INET, "reject");
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 4475b3bb494d..9f3a2db9109e 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -2229,7 +2229,7 @@ adjudge_to_death:
2229 /* This is a (useful) BSD violating of the RFC. There is a 2229 /* This is a (useful) BSD violating of the RFC. There is a
2230 * problem with TCP as specified in that the other end could 2230 * problem with TCP as specified in that the other end could
2231 * keep a socket open forever with no application left this end. 2231 * keep a socket open forever with no application left this end.
2232 * We use a 3 minute timeout (about the same as BSD) then kill 2232 * We use a 1 minute timeout (about the same as BSD) then kill
2233 * our end. If they send after that then tough - BUT: long enough 2233 * our end. If they send after that then tough - BUT: long enough
2234 * that we won't make the old 4*rto = almost no time - whoops 2234 * that we won't make the old 4*rto = almost no time - whoops
2235 * reset mistake. 2235 * reset mistake.
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 65cf90e063d5..227cba79fa6b 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -671,6 +671,7 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt)
671{ 671{
672 struct tcp_sock *tp = tcp_sk(sk); 672 struct tcp_sock *tp = tcp_sk(sk);
673 long m = mrtt; /* RTT */ 673 long m = mrtt; /* RTT */
674 u32 srtt = tp->srtt;
674 675
675 /* The following amusing code comes from Jacobson's 676 /* The following amusing code comes from Jacobson's
676 * article in SIGCOMM '88. Note that rtt and mdev 677 * article in SIGCOMM '88. Note that rtt and mdev
@@ -688,11 +689,9 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt)
688 * does not matter how to _calculate_ it. Seems, it was trap 689 * does not matter how to _calculate_ it. Seems, it was trap
689 * that VJ failed to avoid. 8) 690 * that VJ failed to avoid. 8)
690 */ 691 */
691 if (m == 0) 692 if (srtt != 0) {
692 m = 1; 693 m -= (srtt >> 3); /* m is now error in rtt est */
693 if (tp->srtt != 0) { 694 srtt += m; /* rtt = 7/8 rtt + 1/8 new */
694 m -= (tp->srtt >> 3); /* m is now error in rtt est */
695 tp->srtt += m; /* rtt = 7/8 rtt + 1/8 new */
696 if (m < 0) { 695 if (m < 0) {
697 m = -m; /* m is now abs(error) */ 696 m = -m; /* m is now abs(error) */
698 m -= (tp->mdev >> 2); /* similar update on mdev */ 697 m -= (tp->mdev >> 2); /* similar update on mdev */
@@ -723,11 +722,12 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt)
723 } 722 }
724 } else { 723 } else {
725 /* no previous measure. */ 724 /* no previous measure. */
726 tp->srtt = m << 3; /* take the measured time to be rtt */ 725 srtt = m << 3; /* take the measured time to be rtt */
727 tp->mdev = m << 1; /* make sure rto = 3*rtt */ 726 tp->mdev = m << 1; /* make sure rto = 3*rtt */
728 tp->mdev_max = tp->rttvar = max(tp->mdev, tcp_rto_min(sk)); 727 tp->mdev_max = tp->rttvar = max(tp->mdev, tcp_rto_min(sk));
729 tp->rtt_seq = tp->snd_nxt; 728 tp->rtt_seq = tp->snd_nxt;
730 } 729 }
730 tp->srtt = max(1U, srtt);
731} 731}
732 732
733/* Set the sk_pacing_rate to allow proper sizing of TSO packets. 733/* Set the sk_pacing_rate to allow proper sizing of TSO packets.
@@ -746,8 +746,10 @@ static void tcp_update_pacing_rate(struct sock *sk)
746 746
747 rate *= max(tp->snd_cwnd, tp->packets_out); 747 rate *= max(tp->snd_cwnd, tp->packets_out);
748 748
749 /* Correction for small srtt : minimum srtt being 8 (1 jiffy << 3), 749 /* Correction for small srtt and scheduling constraints.
750 * be conservative and assume srtt = 1 (125 us instead of 1.25 ms) 750 * For small rtt, consider noise is too high, and use
751 * the minimal value (srtt = 1 -> 125 us for HZ=1000)
752 *
751 * We probably need usec resolution in the future. 753 * We probably need usec resolution in the future.
752 * Note: This also takes care of possible srtt=0 case, 754 * Note: This also takes care of possible srtt=0 case,
753 * when tcp_rtt_estimator() was not yet called. 755 * when tcp_rtt_estimator() was not yet called.
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 03d26b85eab8..3be16727f058 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -698,7 +698,8 @@ static void tcp_tsq_handler(struct sock *sk)
698 if ((1 << sk->sk_state) & 698 if ((1 << sk->sk_state) &
699 (TCPF_ESTABLISHED | TCPF_FIN_WAIT1 | TCPF_CLOSING | 699 (TCPF_ESTABLISHED | TCPF_FIN_WAIT1 | TCPF_CLOSING |
700 TCPF_CLOSE_WAIT | TCPF_LAST_ACK)) 700 TCPF_CLOSE_WAIT | TCPF_LAST_ACK))
701 tcp_write_xmit(sk, tcp_current_mss(sk), 0, 0, GFP_ATOMIC); 701 tcp_write_xmit(sk, tcp_current_mss(sk), tcp_sk(sk)->nonagle,
702 0, GFP_ATOMIC);
702} 703}
703/* 704/*
704 * One tasklet per cpu tries to send more skbs. 705 * One tasklet per cpu tries to send more skbs.
@@ -1904,7 +1905,15 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
1904 1905
1905 if (atomic_read(&sk->sk_wmem_alloc) > limit) { 1906 if (atomic_read(&sk->sk_wmem_alloc) > limit) {
1906 set_bit(TSQ_THROTTLED, &tp->tsq_flags); 1907 set_bit(TSQ_THROTTLED, &tp->tsq_flags);
1907 break; 1908 /* It is possible TX completion already happened
1909 * before we set TSQ_THROTTLED, so we must
1910 * test again the condition.
1911 * We abuse smp_mb__after_clear_bit() because
1912 * there is no smp_mb__after_set_bit() yet
1913 */
1914 smp_mb__after_clear_bit();
1915 if (atomic_read(&sk->sk_wmem_alloc) > limit)
1916 break;
1908 } 1917 }
1909 1918
1910 limit = mss_now; 1919 limit = mss_now;
@@ -1977,7 +1986,7 @@ bool tcp_schedule_loss_probe(struct sock *sk)
1977 /* Schedule a loss probe in 2*RTT for SACK capable connections 1986 /* Schedule a loss probe in 2*RTT for SACK capable connections
1978 * in Open state, that are either limited by cwnd or application. 1987 * in Open state, that are either limited by cwnd or application.
1979 */ 1988 */
1980 if (sysctl_tcp_early_retrans < 3 || !rtt || !tp->packets_out || 1989 if (sysctl_tcp_early_retrans < 3 || !tp->srtt || !tp->packets_out ||
1981 !tcp_is_sack(tp) || inet_csk(sk)->icsk_ca_state != TCP_CA_Open) 1990 !tcp_is_sack(tp) || inet_csk(sk)->icsk_ca_state != TCP_CA_Open)
1982 return false; 1991 return false;
1983 1992
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index 25f5cee3a08a..88b4023ecfcf 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -17,6 +17,8 @@
17static DEFINE_SPINLOCK(udp_offload_lock); 17static DEFINE_SPINLOCK(udp_offload_lock);
18static struct udp_offload_priv __rcu *udp_offload_base __read_mostly; 18static struct udp_offload_priv __rcu *udp_offload_base __read_mostly;
19 19
20#define udp_deref_protected(X) rcu_dereference_protected(X, lockdep_is_held(&udp_offload_lock))
21
20struct udp_offload_priv { 22struct udp_offload_priv {
21 struct udp_offload *offload; 23 struct udp_offload *offload;
22 struct rcu_head rcu; 24 struct rcu_head rcu;
@@ -100,8 +102,7 @@ out:
100 102
101int udp_add_offload(struct udp_offload *uo) 103int udp_add_offload(struct udp_offload *uo)
102{ 104{
103 struct udp_offload_priv __rcu **head = &udp_offload_base; 105 struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_ATOMIC);
104 struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_KERNEL);
105 106
106 if (!new_offload) 107 if (!new_offload)
107 return -ENOMEM; 108 return -ENOMEM;
@@ -109,8 +110,8 @@ int udp_add_offload(struct udp_offload *uo)
109 new_offload->offload = uo; 110 new_offload->offload = uo;
110 111
111 spin_lock(&udp_offload_lock); 112 spin_lock(&udp_offload_lock);
112 rcu_assign_pointer(new_offload->next, rcu_dereference(*head)); 113 new_offload->next = udp_offload_base;
113 rcu_assign_pointer(*head, new_offload); 114 rcu_assign_pointer(udp_offload_base, new_offload);
114 spin_unlock(&udp_offload_lock); 115 spin_unlock(&udp_offload_lock);
115 116
116 return 0; 117 return 0;
@@ -130,12 +131,12 @@ void udp_del_offload(struct udp_offload *uo)
130 131
131 spin_lock(&udp_offload_lock); 132 spin_lock(&udp_offload_lock);
132 133
133 uo_priv = rcu_dereference(*head); 134 uo_priv = udp_deref_protected(*head);
134 for (; uo_priv != NULL; 135 for (; uo_priv != NULL;
135 uo_priv = rcu_dereference(*head)) { 136 uo_priv = udp_deref_protected(*head)) {
136
137 if (uo_priv->offload == uo) { 137 if (uo_priv->offload == uo) {
138 rcu_assign_pointer(*head, rcu_dereference(uo_priv->next)); 138 rcu_assign_pointer(*head,
139 udp_deref_protected(uo_priv->next));
139 goto unlock; 140 goto unlock;
140 } 141 }
141 head = &uo_priv->next; 142 head = &uo_priv->next;
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index f81f59686f21..f2610e157660 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -414,7 +414,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info)
414 addr_type = ipv6_addr_type(&hdr->daddr); 414 addr_type = ipv6_addr_type(&hdr->daddr);
415 415
416 if (ipv6_chk_addr(net, &hdr->daddr, skb->dev, 0) || 416 if (ipv6_chk_addr(net, &hdr->daddr, skb->dev, 0) ||
417 ipv6_anycast_destination(skb)) 417 ipv6_chk_acast_addr_src(net, skb->dev, &hdr->daddr))
418 saddr = &hdr->daddr; 418 saddr = &hdr->daddr;
419 419
420 /* 420 /*
diff --git a/net/ipv6/netfilter/Kconfig b/net/ipv6/netfilter/Kconfig
index 35750df744dc..4bff1f297e39 100644
--- a/net/ipv6/netfilter/Kconfig
+++ b/net/ipv6/netfilter/Kconfig
@@ -50,6 +50,11 @@ config NFT_CHAIN_NAT_IPV6
50 packet transformations such as the source, destination address and 50 packet transformations such as the source, destination address and
51 source and destination ports. 51 source and destination ports.
52 52
53config NFT_REJECT_IPV6
54 depends on NF_TABLES_IPV6
55 default NFT_REJECT
56 tristate
57
53config IP6_NF_IPTABLES 58config IP6_NF_IPTABLES
54 tristate "IP6 tables support (required for filtering)" 59 tristate "IP6 tables support (required for filtering)"
55 depends on INET && IPV6 60 depends on INET && IPV6
diff --git a/net/ipv6/netfilter/Makefile b/net/ipv6/netfilter/Makefile
index d1b4928f34f7..70d3dd66f2cd 100644
--- a/net/ipv6/netfilter/Makefile
+++ b/net/ipv6/netfilter/Makefile
@@ -27,6 +27,7 @@ obj-$(CONFIG_NF_DEFRAG_IPV6) += nf_defrag_ipv6.o
27obj-$(CONFIG_NF_TABLES_IPV6) += nf_tables_ipv6.o 27obj-$(CONFIG_NF_TABLES_IPV6) += nf_tables_ipv6.o
28obj-$(CONFIG_NFT_CHAIN_ROUTE_IPV6) += nft_chain_route_ipv6.o 28obj-$(CONFIG_NFT_CHAIN_ROUTE_IPV6) += nft_chain_route_ipv6.o
29obj-$(CONFIG_NFT_CHAIN_NAT_IPV6) += nft_chain_nat_ipv6.o 29obj-$(CONFIG_NFT_CHAIN_NAT_IPV6) += nft_chain_nat_ipv6.o
30obj-$(CONFIG_NFT_REJECT_IPV6) += nft_reject_ipv6.o
30 31
31# matches 32# matches
32obj-$(CONFIG_IP6_NF_MATCH_AH) += ip6t_ah.o 33obj-$(CONFIG_IP6_NF_MATCH_AH) += ip6t_ah.o
diff --git a/net/ipv6/netfilter/nft_reject_ipv6.c b/net/ipv6/netfilter/nft_reject_ipv6.c
new file mode 100644
index 000000000000..0bc19fa87821
--- /dev/null
+++ b/net/ipv6/netfilter/nft_reject_ipv6.c
@@ -0,0 +1,76 @@
1/*
2 * Copyright (c) 2008-2009 Patrick McHardy <kaber@trash.net>
3 * Copyright (c) 2013 Eric Leblond <eric@regit.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * Development of this code funded by Astaro AG (http://www.astaro.com/)
10 */
11
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/module.h>
15#include <linux/netlink.h>
16#include <linux/netfilter.h>
17#include <linux/netfilter/nf_tables.h>
18#include <net/netfilter/nf_tables.h>
19#include <net/netfilter/nft_reject.h>
20#include <net/netfilter/ipv6/nf_reject.h>
21
22void nft_reject_ipv6_eval(const struct nft_expr *expr,
23 struct nft_data data[NFT_REG_MAX + 1],
24 const struct nft_pktinfo *pkt)
25{
26 struct nft_reject *priv = nft_expr_priv(expr);
27 struct net *net = dev_net((pkt->in != NULL) ? pkt->in : pkt->out);
28
29 switch (priv->type) {
30 case NFT_REJECT_ICMP_UNREACH:
31 nf_send_unreach6(net, pkt->skb, priv->icmp_code,
32 pkt->ops->hooknum);
33 break;
34 case NFT_REJECT_TCP_RST:
35 nf_send_reset6(net, pkt->skb, pkt->ops->hooknum);
36 break;
37 }
38
39 data[NFT_REG_VERDICT].verdict = NF_DROP;
40}
41EXPORT_SYMBOL_GPL(nft_reject_ipv6_eval);
42
43static struct nft_expr_type nft_reject_ipv6_type;
44static const struct nft_expr_ops nft_reject_ipv6_ops = {
45 .type = &nft_reject_ipv6_type,
46 .size = NFT_EXPR_SIZE(sizeof(struct nft_reject)),
47 .eval = nft_reject_ipv6_eval,
48 .init = nft_reject_init,
49 .dump = nft_reject_dump,
50};
51
52static struct nft_expr_type nft_reject_ipv6_type __read_mostly = {
53 .family = NFPROTO_IPV6,
54 .name = "reject",
55 .ops = &nft_reject_ipv6_ops,
56 .policy = nft_reject_policy,
57 .maxattr = NFTA_REJECT_MAX,
58 .owner = THIS_MODULE,
59};
60
61static int __init nft_reject_ipv6_module_init(void)
62{
63 return nft_register_expr(&nft_reject_ipv6_type);
64}
65
66static void __exit nft_reject_ipv6_module_exit(void)
67{
68 nft_unregister_expr(&nft_reject_ipv6_type);
69}
70
71module_init(nft_reject_ipv6_module_init);
72module_exit(nft_reject_ipv6_module_exit);
73
74MODULE_LICENSE("GPL");
75MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
76MODULE_ALIAS_NFT_AF_EXPR(AF_INET6, "reject");
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
index 994e28bfb32e..00b2a6d1c009 100644
--- a/net/ipx/af_ipx.c
+++ b/net/ipx/af_ipx.c
@@ -52,18 +52,12 @@
52#include <net/p8022.h> 52#include <net/p8022.h>
53#include <net/psnap.h> 53#include <net/psnap.h>
54#include <net/sock.h> 54#include <net/sock.h>
55#include <net/datalink.h>
55#include <net/tcp_states.h> 56#include <net/tcp_states.h>
57#include <net/net_namespace.h>
56 58
57#include <asm/uaccess.h> 59#include <asm/uaccess.h>
58 60
59#ifdef CONFIG_SYSCTL
60extern void ipx_register_sysctl(void);
61extern void ipx_unregister_sysctl(void);
62#else
63#define ipx_register_sysctl()
64#define ipx_unregister_sysctl()
65#endif
66
67/* Configuration Variables */ 61/* Configuration Variables */
68static unsigned char ipxcfg_max_hops = 16; 62static unsigned char ipxcfg_max_hops = 16;
69static char ipxcfg_auto_select_primary; 63static char ipxcfg_auto_select_primary;
@@ -84,15 +78,6 @@ DEFINE_SPINLOCK(ipx_interfaces_lock);
84struct ipx_interface *ipx_primary_net; 78struct ipx_interface *ipx_primary_net;
85struct ipx_interface *ipx_internal_net; 79struct ipx_interface *ipx_internal_net;
86 80
87extern int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc,
88 unsigned char *node);
89extern void ipxrtr_del_routes(struct ipx_interface *intrfc);
90extern int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx,
91 struct iovec *iov, size_t len, int noblock);
92extern int ipxrtr_route_skb(struct sk_buff *skb);
93extern struct ipx_route *ipxrtr_lookup(__be32 net);
94extern int ipxrtr_ioctl(unsigned int cmd, void __user *arg);
95
96struct ipx_interface *ipx_interfaces_head(void) 81struct ipx_interface *ipx_interfaces_head(void)
97{ 82{
98 struct ipx_interface *rc = NULL; 83 struct ipx_interface *rc = NULL;
@@ -1986,9 +1971,6 @@ static struct notifier_block ipx_dev_notifier = {
1986 .notifier_call = ipxitf_device_event, 1971 .notifier_call = ipxitf_device_event,
1987}; 1972};
1988 1973
1989extern struct datalink_proto *make_EII_client(void);
1990extern void destroy_EII_client(struct datalink_proto *);
1991
1992static const unsigned char ipx_8022_type = 0xE0; 1974static const unsigned char ipx_8022_type = 0xE0;
1993static const unsigned char ipx_snap_id[5] = { 0x0, 0x0, 0x0, 0x81, 0x37 }; 1975static const unsigned char ipx_snap_id[5] = { 0x0, 0x0, 0x0, 0x81, 0x37 };
1994static const char ipx_EII_err_msg[] __initconst = 1976static const char ipx_EII_err_msg[] __initconst =
diff --git a/net/ipx/ipx_route.c b/net/ipx/ipx_route.c
index 30f4519b092f..c1f03185c5e1 100644
--- a/net/ipx/ipx_route.c
+++ b/net/ipx/ipx_route.c
@@ -20,15 +20,11 @@ DEFINE_RWLOCK(ipx_routes_lock);
20 20
21extern struct ipx_interface *ipx_internal_net; 21extern struct ipx_interface *ipx_internal_net;
22 22
23extern __be16 ipx_cksum(struct ipxhdr *packet, int length);
24extern struct ipx_interface *ipxitf_find_using_net(__be32 net); 23extern struct ipx_interface *ipxitf_find_using_net(__be32 net);
25extern int ipxitf_demux_socket(struct ipx_interface *intrfc, 24extern int ipxitf_demux_socket(struct ipx_interface *intrfc,
26 struct sk_buff *skb, int copy); 25 struct sk_buff *skb, int copy);
27extern int ipxitf_demux_socket(struct ipx_interface *intrfc, 26extern int ipxitf_demux_socket(struct ipx_interface *intrfc,
28 struct sk_buff *skb, int copy); 27 struct sk_buff *skb, int copy);
29extern int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb,
30 char *node);
31extern struct ipx_interface *ipxitf_find_using_net(__be32 net);
32 28
33struct ipx_route *ipxrtr_lookup(__be32 net) 29struct ipx_route *ipxrtr_lookup(__be32 net)
34{ 30{
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index f9ae9b85d4c1..453e974287d1 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1021,8 +1021,10 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
1021 IEEE80211_P2P_OPPPS_ENABLE_BIT; 1021 IEEE80211_P2P_OPPPS_ENABLE_BIT;
1022 1022
1023 err = ieee80211_assign_beacon(sdata, &params->beacon); 1023 err = ieee80211_assign_beacon(sdata, &params->beacon);
1024 if (err < 0) 1024 if (err < 0) {
1025 ieee80211_vif_release_channel(sdata);
1025 return err; 1026 return err;
1027 }
1026 changed |= err; 1028 changed |= err;
1027 1029
1028 err = drv_start_ap(sdata->local, sdata); 1030 err = drv_start_ap(sdata->local, sdata);
@@ -1032,6 +1034,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
1032 if (old) 1034 if (old)
1033 kfree_rcu(old, rcu_head); 1035 kfree_rcu(old, rcu_head);
1034 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL); 1036 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
1037 ieee80211_vif_release_channel(sdata);
1035 return err; 1038 return err;
1036 } 1039 }
1037 1040
@@ -1090,8 +1093,6 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
1090 kfree(sdata->u.ap.next_beacon); 1093 kfree(sdata->u.ap.next_beacon);
1091 sdata->u.ap.next_beacon = NULL; 1094 sdata->u.ap.next_beacon = NULL;
1092 1095
1093 cancel_work_sync(&sdata->u.ap.request_smps_work);
1094
1095 /* turn off carrier for this interface and dependent VLANs */ 1096 /* turn off carrier for this interface and dependent VLANs */
1096 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) 1097 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1097 netif_carrier_off(vlan->dev); 1098 netif_carrier_off(vlan->dev);
@@ -1103,6 +1104,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
1103 kfree_rcu(old_beacon, rcu_head); 1104 kfree_rcu(old_beacon, rcu_head);
1104 if (old_probe_resp) 1105 if (old_probe_resp)
1105 kfree_rcu(old_probe_resp, rcu_head); 1106 kfree_rcu(old_probe_resp, rcu_head);
1107 sdata->u.ap.driver_smps_mode = IEEE80211_SMPS_OFF;
1106 1108
1107 __sta_info_flush(sdata, true); 1109 __sta_info_flush(sdata, true);
1108 ieee80211_free_keys(sdata, true); 1110 ieee80211_free_keys(sdata, true);
@@ -2638,6 +2640,24 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
2638 INIT_DELAYED_WORK(&roc->work, ieee80211_sw_roc_work); 2640 INIT_DELAYED_WORK(&roc->work, ieee80211_sw_roc_work);
2639 INIT_LIST_HEAD(&roc->dependents); 2641 INIT_LIST_HEAD(&roc->dependents);
2640 2642
2643 /*
2644 * cookie is either the roc cookie (for normal roc)
2645 * or the SKB (for mgmt TX)
2646 */
2647 if (!txskb) {
2648 /* local->mtx protects this */
2649 local->roc_cookie_counter++;
2650 roc->cookie = local->roc_cookie_counter;
2651 /* wow, you wrapped 64 bits ... more likely a bug */
2652 if (WARN_ON(roc->cookie == 0)) {
2653 roc->cookie = 1;
2654 local->roc_cookie_counter++;
2655 }
2656 *cookie = roc->cookie;
2657 } else {
2658 *cookie = (unsigned long)txskb;
2659 }
2660
2641 /* if there's one pending or we're scanning, queue this one */ 2661 /* if there's one pending or we're scanning, queue this one */
2642 if (!list_empty(&local->roc_list) || 2662 if (!list_empty(&local->roc_list) ||
2643 local->scanning || local->radar_detect_enabled) 2663 local->scanning || local->radar_detect_enabled)
@@ -2772,24 +2792,6 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
2772 if (!queued) 2792 if (!queued)
2773 list_add_tail(&roc->list, &local->roc_list); 2793 list_add_tail(&roc->list, &local->roc_list);
2774 2794
2775 /*
2776 * cookie is either the roc cookie (for normal roc)
2777 * or the SKB (for mgmt TX)
2778 */
2779 if (!txskb) {
2780 /* local->mtx protects this */
2781 local->roc_cookie_counter++;
2782 roc->cookie = local->roc_cookie_counter;
2783 /* wow, you wrapped 64 bits ... more likely a bug */
2784 if (WARN_ON(roc->cookie == 0)) {
2785 roc->cookie = 1;
2786 local->roc_cookie_counter++;
2787 }
2788 *cookie = roc->cookie;
2789 } else {
2790 *cookie = (unsigned long)txskb;
2791 }
2792
2793 return 0; 2795 return 0;
2794} 2796}
2795 2797
diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c
index fab7b91923e0..70dd013de836 100644
--- a/net/mac80211/ht.c
+++ b/net/mac80211/ht.c
@@ -466,7 +466,9 @@ void ieee80211_request_smps_ap_work(struct work_struct *work)
466 u.ap.request_smps_work); 466 u.ap.request_smps_work);
467 467
468 sdata_lock(sdata); 468 sdata_lock(sdata);
469 __ieee80211_request_smps_ap(sdata, sdata->u.ap.driver_smps_mode); 469 if (sdata_dereference(sdata->u.ap.beacon, sdata))
470 __ieee80211_request_smps_ap(sdata,
471 sdata->u.ap.driver_smps_mode);
470 sdata_unlock(sdata); 472 sdata_unlock(sdata);
471} 473}
472 474
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index 771080ec7212..2796a198728f 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -695,12 +695,9 @@ static void ieee80211_ibss_disconnect(struct ieee80211_sub_if_data *sdata)
695 struct cfg80211_bss *cbss; 695 struct cfg80211_bss *cbss;
696 struct beacon_data *presp; 696 struct beacon_data *presp;
697 struct sta_info *sta; 697 struct sta_info *sta;
698 int active_ibss;
699 u16 capability; 698 u16 capability;
700 699
701 active_ibss = ieee80211_sta_active_ibss(sdata); 700 if (!is_zero_ether_addr(ifibss->bssid)) {
702
703 if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) {
704 capability = WLAN_CAPABILITY_IBSS; 701 capability = WLAN_CAPABILITY_IBSS;
705 702
706 if (ifibss->privacy) 703 if (ifibss->privacy)
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 3dfd20a453ab..d6d1f1df9119 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -418,20 +418,24 @@ int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
418 return ret; 418 return ret;
419 } 419 }
420 420
421 mutex_lock(&local->iflist_mtx);
422 rcu_assign_pointer(local->monitor_sdata, sdata);
423 mutex_unlock(&local->iflist_mtx);
424
421 mutex_lock(&local->mtx); 425 mutex_lock(&local->mtx);
422 ret = ieee80211_vif_use_channel(sdata, &local->monitor_chandef, 426 ret = ieee80211_vif_use_channel(sdata, &local->monitor_chandef,
423 IEEE80211_CHANCTX_EXCLUSIVE); 427 IEEE80211_CHANCTX_EXCLUSIVE);
424 mutex_unlock(&local->mtx); 428 mutex_unlock(&local->mtx);
425 if (ret) { 429 if (ret) {
430 mutex_lock(&local->iflist_mtx);
431 rcu_assign_pointer(local->monitor_sdata, NULL);
432 mutex_unlock(&local->iflist_mtx);
433 synchronize_net();
426 drv_remove_interface(local, sdata); 434 drv_remove_interface(local, sdata);
427 kfree(sdata); 435 kfree(sdata);
428 return ret; 436 return ret;
429 } 437 }
430 438
431 mutex_lock(&local->iflist_mtx);
432 rcu_assign_pointer(local->monitor_sdata, sdata);
433 mutex_unlock(&local->iflist_mtx);
434
435 return 0; 439 return 0;
436} 440}
437 441
@@ -770,12 +774,19 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
770 774
771 ieee80211_roc_purge(local, sdata); 775 ieee80211_roc_purge(local, sdata);
772 776
773 if (sdata->vif.type == NL80211_IFTYPE_STATION) 777 switch (sdata->vif.type) {
778 case NL80211_IFTYPE_STATION:
774 ieee80211_mgd_stop(sdata); 779 ieee80211_mgd_stop(sdata);
775 780 break;
776 if (sdata->vif.type == NL80211_IFTYPE_ADHOC) 781 case NL80211_IFTYPE_ADHOC:
777 ieee80211_ibss_stop(sdata); 782 ieee80211_ibss_stop(sdata);
778 783 break;
784 case NL80211_IFTYPE_AP:
785 cancel_work_sync(&sdata->u.ap.request_smps_work);
786 break;
787 default:
788 break;
789 }
779 790
780 /* 791 /*
781 * Remove all stations associated with this interface. 792 * Remove all stations associated with this interface.
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 27c990bf2320..97a02d3f7d87 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -878,7 +878,7 @@ static int ieee80211_fragment(struct ieee80211_tx_data *tx,
878 } 878 }
879 879
880 /* adjust first fragment's length */ 880 /* adjust first fragment's length */
881 skb->len = hdrlen + per_fragm; 881 skb_trim(skb, hdrlen + per_fragm);
882 return 0; 882 return 0;
883} 883}
884 884
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
index c37467562fd0..e9410d17619d 100644
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
@@ -513,7 +513,6 @@ config NFT_QUEUE
513 513
514config NFT_REJECT 514config NFT_REJECT
515 depends on NF_TABLES 515 depends on NF_TABLES
516 depends on NF_TABLES_IPV6 || !NF_TABLES_IPV6
517 default m if NETFILTER_ADVANCED=n 516 default m if NETFILTER_ADVANCED=n
518 tristate "Netfilter nf_tables reject support" 517 tristate "Netfilter nf_tables reject support"
519 help 518 help
@@ -521,6 +520,11 @@ config NFT_REJECT
521 explicitly deny and notify via TCP reset/ICMP informational errors 520 explicitly deny and notify via TCP reset/ICMP informational errors
522 unallowed traffic. 521 unallowed traffic.
523 522
523config NFT_REJECT_INET
524 depends on NF_TABLES_INET
525 default NFT_REJECT
526 tristate
527
524config NFT_COMPAT 528config NFT_COMPAT
525 depends on NF_TABLES 529 depends on NF_TABLES
526 depends on NETFILTER_XTABLES 530 depends on NETFILTER_XTABLES
diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
index ee9c4de5f8ed..bffdad774da7 100644
--- a/net/netfilter/Makefile
+++ b/net/netfilter/Makefile
@@ -79,6 +79,7 @@ obj-$(CONFIG_NFT_LIMIT) += nft_limit.o
79obj-$(CONFIG_NFT_NAT) += nft_nat.o 79obj-$(CONFIG_NFT_NAT) += nft_nat.o
80obj-$(CONFIG_NFT_QUEUE) += nft_queue.o 80obj-$(CONFIG_NFT_QUEUE) += nft_queue.o
81obj-$(CONFIG_NFT_REJECT) += nft_reject.o 81obj-$(CONFIG_NFT_REJECT) += nft_reject.o
82obj-$(CONFIG_NFT_REJECT_INET) += nft_reject_inet.o
82obj-$(CONFIG_NFT_RBTREE) += nft_rbtree.o 83obj-$(CONFIG_NFT_RBTREE) += nft_rbtree.o
83obj-$(CONFIG_NFT_HASH) += nft_hash.o 84obj-$(CONFIG_NFT_HASH) += nft_hash.o
84obj-$(CONFIG_NFT_COUNTER) += nft_counter.o 85obj-$(CONFIG_NFT_COUNTER) += nft_counter.o
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
index 59a1a85bcb3e..a8eb0a89326a 100644
--- a/net/netfilter/ipvs/ip_vs_conn.c
+++ b/net/netfilter/ipvs/ip_vs_conn.c
@@ -871,11 +871,11 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p,
871 cp->protocol = p->protocol; 871 cp->protocol = p->protocol;
872 ip_vs_addr_set(p->af, &cp->caddr, p->caddr); 872 ip_vs_addr_set(p->af, &cp->caddr, p->caddr);
873 cp->cport = p->cport; 873 cp->cport = p->cport;
874 ip_vs_addr_set(p->af, &cp->vaddr, p->vaddr); 874 /* proto should only be IPPROTO_IP if p->vaddr is a fwmark */
875 cp->vport = p->vport;
876 /* proto should only be IPPROTO_IP if d_addr is a fwmark */
877 ip_vs_addr_set(p->protocol == IPPROTO_IP ? AF_UNSPEC : p->af, 875 ip_vs_addr_set(p->protocol == IPPROTO_IP ? AF_UNSPEC : p->af,
878 &cp->daddr, daddr); 876 &cp->vaddr, p->vaddr);
877 cp->vport = p->vport;
878 ip_vs_addr_set(p->af, &cp->daddr, daddr);
879 cp->dport = dport; 879 cp->dport = dport;
880 cp->flags = flags; 880 cp->flags = flags;
881 cp->fwmark = fwmark; 881 cp->fwmark = fwmark;
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 8824ed0ccc9c..356bef519fe5 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -312,6 +312,21 @@ static void death_by_timeout(unsigned long ul_conntrack)
312 nf_ct_delete((struct nf_conn *)ul_conntrack, 0, 0); 312 nf_ct_delete((struct nf_conn *)ul_conntrack, 0, 0);
313} 313}
314 314
315static inline bool
316nf_ct_key_equal(struct nf_conntrack_tuple_hash *h,
317 const struct nf_conntrack_tuple *tuple,
318 u16 zone)
319{
320 struct nf_conn *ct = nf_ct_tuplehash_to_ctrack(h);
321
322 /* A conntrack can be recreated with the equal tuple,
323 * so we need to check that the conntrack is confirmed
324 */
325 return nf_ct_tuple_equal(tuple, &h->tuple) &&
326 nf_ct_zone(ct) == zone &&
327 nf_ct_is_confirmed(ct);
328}
329
315/* 330/*
316 * Warning : 331 * Warning :
317 * - Caller must take a reference on returned object 332 * - Caller must take a reference on returned object
@@ -333,8 +348,7 @@ ____nf_conntrack_find(struct net *net, u16 zone,
333 local_bh_disable(); 348 local_bh_disable();
334begin: 349begin:
335 hlist_nulls_for_each_entry_rcu(h, n, &net->ct.hash[bucket], hnnode) { 350 hlist_nulls_for_each_entry_rcu(h, n, &net->ct.hash[bucket], hnnode) {
336 if (nf_ct_tuple_equal(tuple, &h->tuple) && 351 if (nf_ct_key_equal(h, tuple, zone)) {
337 nf_ct_zone(nf_ct_tuplehash_to_ctrack(h)) == zone) {
338 NF_CT_STAT_INC(net, found); 352 NF_CT_STAT_INC(net, found);
339 local_bh_enable(); 353 local_bh_enable();
340 return h; 354 return h;
@@ -372,8 +386,7 @@ begin:
372 !atomic_inc_not_zero(&ct->ct_general.use))) 386 !atomic_inc_not_zero(&ct->ct_general.use)))
373 h = NULL; 387 h = NULL;
374 else { 388 else {
375 if (unlikely(!nf_ct_tuple_equal(tuple, &h->tuple) || 389 if (unlikely(!nf_ct_key_equal(h, tuple, zone))) {
376 nf_ct_zone(ct) != zone)) {
377 nf_ct_put(ct); 390 nf_ct_put(ct);
378 goto begin; 391 goto begin;
379 } 392 }
@@ -435,7 +448,9 @@ nf_conntrack_hash_check_insert(struct nf_conn *ct)
435 goto out; 448 goto out;
436 449
437 add_timer(&ct->timeout); 450 add_timer(&ct->timeout);
438 nf_conntrack_get(&ct->ct_general); 451 smp_wmb();
452 /* The caller holds a reference to this object */
453 atomic_set(&ct->ct_general.use, 2);
439 __nf_conntrack_hash_insert(ct, hash, repl_hash); 454 __nf_conntrack_hash_insert(ct, hash, repl_hash);
440 NF_CT_STAT_INC(net, insert); 455 NF_CT_STAT_INC(net, insert);
441 spin_unlock_bh(&nf_conntrack_lock); 456 spin_unlock_bh(&nf_conntrack_lock);
@@ -449,6 +464,21 @@ out:
449} 464}
450EXPORT_SYMBOL_GPL(nf_conntrack_hash_check_insert); 465EXPORT_SYMBOL_GPL(nf_conntrack_hash_check_insert);
451 466
467/* deletion from this larval template list happens via nf_ct_put() */
468void nf_conntrack_tmpl_insert(struct net *net, struct nf_conn *tmpl)
469{
470 __set_bit(IPS_TEMPLATE_BIT, &tmpl->status);
471 __set_bit(IPS_CONFIRMED_BIT, &tmpl->status);
472 nf_conntrack_get(&tmpl->ct_general);
473
474 spin_lock_bh(&nf_conntrack_lock);
475 /* Overload tuple linked list to put us in template list. */
476 hlist_nulls_add_head_rcu(&tmpl->tuplehash[IP_CT_DIR_ORIGINAL].hnnode,
477 &net->ct.tmpl);
478 spin_unlock_bh(&nf_conntrack_lock);
479}
480EXPORT_SYMBOL_GPL(nf_conntrack_tmpl_insert);
481
452/* Confirm a connection given skb; places it in hash table */ 482/* Confirm a connection given skb; places it in hash table */
453int 483int
454__nf_conntrack_confirm(struct sk_buff *skb) 484__nf_conntrack_confirm(struct sk_buff *skb)
@@ -720,11 +750,10 @@ __nf_conntrack_alloc(struct net *net, u16 zone,
720 nf_ct_zone->id = zone; 750 nf_ct_zone->id = zone;
721 } 751 }
722#endif 752#endif
723 /* 753 /* Because we use RCU lookups, we set ct_general.use to zero before
724 * changes to lookup keys must be done before setting refcnt to 1 754 * this is inserted in any list.
725 */ 755 */
726 smp_wmb(); 756 atomic_set(&ct->ct_general.use, 0);
727 atomic_set(&ct->ct_general.use, 1);
728 return ct; 757 return ct;
729 758
730#ifdef CONFIG_NF_CONNTRACK_ZONES 759#ifdef CONFIG_NF_CONNTRACK_ZONES
@@ -748,6 +777,11 @@ void nf_conntrack_free(struct nf_conn *ct)
748{ 777{
749 struct net *net = nf_ct_net(ct); 778 struct net *net = nf_ct_net(ct);
750 779
780 /* A freed object has refcnt == 0, that's
781 * the golden rule for SLAB_DESTROY_BY_RCU
782 */
783 NF_CT_ASSERT(atomic_read(&ct->ct_general.use) == 0);
784
751 nf_ct_ext_destroy(ct); 785 nf_ct_ext_destroy(ct);
752 nf_ct_ext_free(ct); 786 nf_ct_ext_free(ct);
753 kmem_cache_free(net->ct.nf_conntrack_cachep, ct); 787 kmem_cache_free(net->ct.nf_conntrack_cachep, ct);
@@ -843,6 +877,9 @@ init_conntrack(struct net *net, struct nf_conn *tmpl,
843 NF_CT_STAT_INC(net, new); 877 NF_CT_STAT_INC(net, new);
844 } 878 }
845 879
880 /* Now it is inserted into the unconfirmed list, bump refcount */
881 nf_conntrack_get(&ct->ct_general);
882
846 /* Overload tuple linked list to put us in unconfirmed list. */ 883 /* Overload tuple linked list to put us in unconfirmed list. */
847 hlist_nulls_add_head_rcu(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode, 884 hlist_nulls_add_head_rcu(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode,
848 &net->ct.unconfirmed); 885 &net->ct.unconfirmed);
diff --git a/net/netfilter/nf_synproxy_core.c b/net/netfilter/nf_synproxy_core.c
index 9858e3e51a3a..52e20c9a46a5 100644
--- a/net/netfilter/nf_synproxy_core.c
+++ b/net/netfilter/nf_synproxy_core.c
@@ -363,9 +363,8 @@ static int __net_init synproxy_net_init(struct net *net)
363 goto err2; 363 goto err2;
364 if (!nfct_synproxy_ext_add(ct)) 364 if (!nfct_synproxy_ext_add(ct))
365 goto err2; 365 goto err2;
366 __set_bit(IPS_TEMPLATE_BIT, &ct->status);
367 __set_bit(IPS_CONFIRMED_BIT, &ct->status);
368 366
367 nf_conntrack_tmpl_insert(net, ct);
369 snet->tmpl = ct; 368 snet->tmpl = ct;
370 369
371 snet->stats = alloc_percpu(struct synproxy_stats); 370 snet->stats = alloc_percpu(struct synproxy_stats);
@@ -390,7 +389,7 @@ static void __net_exit synproxy_net_exit(struct net *net)
390{ 389{
391 struct synproxy_net *snet = synproxy_pernet(net); 390 struct synproxy_net *snet = synproxy_pernet(net);
392 391
393 nf_conntrack_free(snet->tmpl); 392 nf_ct_put(snet->tmpl);
394 synproxy_proc_exit(net); 393 synproxy_proc_exit(net);
395 free_percpu(snet->stats); 394 free_percpu(snet->stats);
396} 395}
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 117bbaaddde6..adce01e8bb57 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -1008,10 +1008,8 @@ notify:
1008 return 0; 1008 return 0;
1009} 1009}
1010 1010
1011static void nf_tables_rcu_chain_destroy(struct rcu_head *head) 1011static void nf_tables_chain_destroy(struct nft_chain *chain)
1012{ 1012{
1013 struct nft_chain *chain = container_of(head, struct nft_chain, rcu_head);
1014
1015 BUG_ON(chain->use > 0); 1013 BUG_ON(chain->use > 0);
1016 1014
1017 if (chain->flags & NFT_BASE_CHAIN) { 1015 if (chain->flags & NFT_BASE_CHAIN) {
@@ -1045,7 +1043,7 @@ static int nf_tables_delchain(struct sock *nlsk, struct sk_buff *skb,
1045 if (IS_ERR(chain)) 1043 if (IS_ERR(chain))
1046 return PTR_ERR(chain); 1044 return PTR_ERR(chain);
1047 1045
1048 if (!list_empty(&chain->rules)) 1046 if (!list_empty(&chain->rules) || chain->use > 0)
1049 return -EBUSY; 1047 return -EBUSY;
1050 1048
1051 list_del(&chain->list); 1049 list_del(&chain->list);
@@ -1059,7 +1057,9 @@ static int nf_tables_delchain(struct sock *nlsk, struct sk_buff *skb,
1059 family); 1057 family);
1060 1058
1061 /* Make sure all rule references are gone before this is released */ 1059 /* Make sure all rule references are gone before this is released */
1062 call_rcu(&chain->rcu_head, nf_tables_rcu_chain_destroy); 1060 synchronize_rcu();
1061
1062 nf_tables_chain_destroy(chain);
1063 return 0; 1063 return 0;
1064} 1064}
1065 1065
@@ -1114,35 +1114,45 @@ void nft_unregister_expr(struct nft_expr_type *type)
1114} 1114}
1115EXPORT_SYMBOL_GPL(nft_unregister_expr); 1115EXPORT_SYMBOL_GPL(nft_unregister_expr);
1116 1116
1117static const struct nft_expr_type *__nft_expr_type_get(struct nlattr *nla) 1117static const struct nft_expr_type *__nft_expr_type_get(u8 family,
1118 struct nlattr *nla)
1118{ 1119{
1119 const struct nft_expr_type *type; 1120 const struct nft_expr_type *type;
1120 1121
1121 list_for_each_entry(type, &nf_tables_expressions, list) { 1122 list_for_each_entry(type, &nf_tables_expressions, list) {
1122 if (!nla_strcmp(nla, type->name)) 1123 if (!nla_strcmp(nla, type->name) &&
1124 (!type->family || type->family == family))
1123 return type; 1125 return type;
1124 } 1126 }
1125 return NULL; 1127 return NULL;
1126} 1128}
1127 1129
1128static const struct nft_expr_type *nft_expr_type_get(struct nlattr *nla) 1130static const struct nft_expr_type *nft_expr_type_get(u8 family,
1131 struct nlattr *nla)
1129{ 1132{
1130 const struct nft_expr_type *type; 1133 const struct nft_expr_type *type;
1131 1134
1132 if (nla == NULL) 1135 if (nla == NULL)
1133 return ERR_PTR(-EINVAL); 1136 return ERR_PTR(-EINVAL);
1134 1137
1135 type = __nft_expr_type_get(nla); 1138 type = __nft_expr_type_get(family, nla);
1136 if (type != NULL && try_module_get(type->owner)) 1139 if (type != NULL && try_module_get(type->owner))
1137 return type; 1140 return type;
1138 1141
1139#ifdef CONFIG_MODULES 1142#ifdef CONFIG_MODULES
1140 if (type == NULL) { 1143 if (type == NULL) {
1141 nfnl_unlock(NFNL_SUBSYS_NFTABLES); 1144 nfnl_unlock(NFNL_SUBSYS_NFTABLES);
1145 request_module("nft-expr-%u-%.*s", family,
1146 nla_len(nla), (char *)nla_data(nla));
1147 nfnl_lock(NFNL_SUBSYS_NFTABLES);
1148 if (__nft_expr_type_get(family, nla))
1149 return ERR_PTR(-EAGAIN);
1150
1151 nfnl_unlock(NFNL_SUBSYS_NFTABLES);
1142 request_module("nft-expr-%.*s", 1152 request_module("nft-expr-%.*s",
1143 nla_len(nla), (char *)nla_data(nla)); 1153 nla_len(nla), (char *)nla_data(nla));
1144 nfnl_lock(NFNL_SUBSYS_NFTABLES); 1154 nfnl_lock(NFNL_SUBSYS_NFTABLES);
1145 if (__nft_expr_type_get(nla)) 1155 if (__nft_expr_type_get(family, nla))
1146 return ERR_PTR(-EAGAIN); 1156 return ERR_PTR(-EAGAIN);
1147 } 1157 }
1148#endif 1158#endif
@@ -1193,7 +1203,7 @@ static int nf_tables_expr_parse(const struct nft_ctx *ctx,
1193 if (err < 0) 1203 if (err < 0)
1194 return err; 1204 return err;
1195 1205
1196 type = nft_expr_type_get(tb[NFTA_EXPR_NAME]); 1206 type = nft_expr_type_get(ctx->afi->family, tb[NFTA_EXPR_NAME]);
1197 if (IS_ERR(type)) 1207 if (IS_ERR(type))
1198 return PTR_ERR(type); 1208 return PTR_ERR(type);
1199 1209
@@ -1521,9 +1531,8 @@ err:
1521 return err; 1531 return err;
1522} 1532}
1523 1533
1524static void nf_tables_rcu_rule_destroy(struct rcu_head *head) 1534static void nf_tables_rule_destroy(struct nft_rule *rule)
1525{ 1535{
1526 struct nft_rule *rule = container_of(head, struct nft_rule, rcu_head);
1527 struct nft_expr *expr; 1536 struct nft_expr *expr;
1528 1537
1529 /* 1538 /*
@@ -1538,11 +1547,6 @@ static void nf_tables_rcu_rule_destroy(struct rcu_head *head)
1538 kfree(rule); 1547 kfree(rule);
1539} 1548}
1540 1549
1541static void nf_tables_rule_destroy(struct nft_rule *rule)
1542{
1543 call_rcu(&rule->rcu_head, nf_tables_rcu_rule_destroy);
1544}
1545
1546#define NFT_RULE_MAXEXPRS 128 1550#define NFT_RULE_MAXEXPRS 128
1547 1551
1548static struct nft_expr_info *info; 1552static struct nft_expr_info *info;
@@ -1809,9 +1813,6 @@ static int nf_tables_commit(struct sk_buff *skb)
1809 synchronize_rcu(); 1813 synchronize_rcu();
1810 1814
1811 list_for_each_entry_safe(rupd, tmp, &net->nft.commit_list, list) { 1815 list_for_each_entry_safe(rupd, tmp, &net->nft.commit_list, list) {
1812 /* Delete this rule from the dirty list */
1813 list_del(&rupd->list);
1814
1815 /* This rule was inactive in the past and just became active. 1816 /* This rule was inactive in the past and just became active.
1816 * Clear the next bit of the genmask since its meaning has 1817 * Clear the next bit of the genmask since its meaning has
1817 * changed, now it is the future. 1818 * changed, now it is the future.
@@ -1822,6 +1823,7 @@ static int nf_tables_commit(struct sk_buff *skb)
1822 rupd->chain, rupd->rule, 1823 rupd->chain, rupd->rule,
1823 NFT_MSG_NEWRULE, 0, 1824 NFT_MSG_NEWRULE, 0,
1824 rupd->family); 1825 rupd->family);
1826 list_del(&rupd->list);
1825 kfree(rupd); 1827 kfree(rupd);
1826 continue; 1828 continue;
1827 } 1829 }
@@ -1831,7 +1833,15 @@ static int nf_tables_commit(struct sk_buff *skb)
1831 nf_tables_rule_notify(skb, rupd->nlh, rupd->table, rupd->chain, 1833 nf_tables_rule_notify(skb, rupd->nlh, rupd->table, rupd->chain,
1832 rupd->rule, NFT_MSG_DELRULE, 0, 1834 rupd->rule, NFT_MSG_DELRULE, 0,
1833 rupd->family); 1835 rupd->family);
1836 }
1837
1838 /* Make sure we don't see any packet traversing old rules */
1839 synchronize_rcu();
1840
1841 /* Now we can safely release unused old rules */
1842 list_for_each_entry_safe(rupd, tmp, &net->nft.commit_list, list) {
1834 nf_tables_rule_destroy(rupd->rule); 1843 nf_tables_rule_destroy(rupd->rule);
1844 list_del(&rupd->list);
1835 kfree(rupd); 1845 kfree(rupd);
1836 } 1846 }
1837 1847
@@ -1844,20 +1854,26 @@ static int nf_tables_abort(struct sk_buff *skb)
1844 struct nft_rule_trans *rupd, *tmp; 1854 struct nft_rule_trans *rupd, *tmp;
1845 1855
1846 list_for_each_entry_safe(rupd, tmp, &net->nft.commit_list, list) { 1856 list_for_each_entry_safe(rupd, tmp, &net->nft.commit_list, list) {
1847 /* Delete all rules from the dirty list */
1848 list_del(&rupd->list);
1849
1850 if (!nft_rule_is_active_next(net, rupd->rule)) { 1857 if (!nft_rule_is_active_next(net, rupd->rule)) {
1851 nft_rule_clear(net, rupd->rule); 1858 nft_rule_clear(net, rupd->rule);
1859 list_del(&rupd->list);
1852 kfree(rupd); 1860 kfree(rupd);
1853 continue; 1861 continue;
1854 } 1862 }
1855 1863
1856 /* This rule is inactive, get rid of it */ 1864 /* This rule is inactive, get rid of it */
1857 list_del_rcu(&rupd->rule->list); 1865 list_del_rcu(&rupd->rule->list);
1866 }
1867
1868 /* Make sure we don't see any packet accessing aborted rules */
1869 synchronize_rcu();
1870
1871 list_for_each_entry_safe(rupd, tmp, &net->nft.commit_list, list) {
1858 nf_tables_rule_destroy(rupd->rule); 1872 nf_tables_rule_destroy(rupd->rule);
1873 list_del(&rupd->list);
1859 kfree(rupd); 1874 kfree(rupd);
1860 } 1875 }
1876
1861 return 0; 1877 return 0;
1862} 1878}
1863 1879
@@ -1943,6 +1959,9 @@ static int nft_ctx_init_from_setattr(struct nft_ctx *ctx,
1943 } 1959 }
1944 1960
1945 if (nla[NFTA_SET_TABLE] != NULL) { 1961 if (nla[NFTA_SET_TABLE] != NULL) {
1962 if (afi == NULL)
1963 return -EAFNOSUPPORT;
1964
1946 table = nf_tables_table_lookup(afi, nla[NFTA_SET_TABLE]); 1965 table = nf_tables_table_lookup(afi, nla[NFTA_SET_TABLE]);
1947 if (IS_ERR(table)) 1966 if (IS_ERR(table))
1948 return PTR_ERR(table); 1967 return PTR_ERR(table);
@@ -1989,13 +2008,13 @@ static int nf_tables_set_alloc_name(struct nft_ctx *ctx, struct nft_set *set,
1989 2008
1990 if (!sscanf(i->name, name, &tmp)) 2009 if (!sscanf(i->name, name, &tmp))
1991 continue; 2010 continue;
1992 if (tmp < 0 || tmp > BITS_PER_LONG * PAGE_SIZE) 2011 if (tmp < 0 || tmp >= BITS_PER_BYTE * PAGE_SIZE)
1993 continue; 2012 continue;
1994 2013
1995 set_bit(tmp, inuse); 2014 set_bit(tmp, inuse);
1996 } 2015 }
1997 2016
1998 n = find_first_zero_bit(inuse, BITS_PER_LONG * PAGE_SIZE); 2017 n = find_first_zero_bit(inuse, BITS_PER_BYTE * PAGE_SIZE);
1999 free_page((unsigned long)inuse); 2018 free_page((unsigned long)inuse);
2000 } 2019 }
2001 2020
@@ -2428,6 +2447,8 @@ static int nf_tables_delset(struct sock *nlsk, struct sk_buff *skb,
2428 struct nft_ctx ctx; 2447 struct nft_ctx ctx;
2429 int err; 2448 int err;
2430 2449
2450 if (nfmsg->nfgen_family == NFPROTO_UNSPEC)
2451 return -EAFNOSUPPORT;
2431 if (nla[NFTA_SET_TABLE] == NULL) 2452 if (nla[NFTA_SET_TABLE] == NULL)
2432 return -EINVAL; 2453 return -EINVAL;
2433 2454
@@ -2435,9 +2456,6 @@ static int nf_tables_delset(struct sock *nlsk, struct sk_buff *skb,
2435 if (err < 0) 2456 if (err < 0)
2436 return err; 2457 return err;
2437 2458
2438 if (nfmsg->nfgen_family == NFPROTO_UNSPEC)
2439 return -EAFNOSUPPORT;
2440
2441 set = nf_tables_set_lookup(ctx.table, nla[NFTA_SET_NAME]); 2459 set = nf_tables_set_lookup(ctx.table, nla[NFTA_SET_NAME]);
2442 if (IS_ERR(set)) 2460 if (IS_ERR(set))
2443 return PTR_ERR(set); 2461 return PTR_ERR(set);
@@ -2723,6 +2741,9 @@ static int nft_add_set_elem(const struct nft_ctx *ctx, struct nft_set *set,
2723 if (nla[NFTA_SET_ELEM_DATA] == NULL && 2741 if (nla[NFTA_SET_ELEM_DATA] == NULL &&
2724 !(elem.flags & NFT_SET_ELEM_INTERVAL_END)) 2742 !(elem.flags & NFT_SET_ELEM_INTERVAL_END))
2725 return -EINVAL; 2743 return -EINVAL;
2744 if (nla[NFTA_SET_ELEM_DATA] != NULL &&
2745 elem.flags & NFT_SET_ELEM_INTERVAL_END)
2746 return -EINVAL;
2726 } else { 2747 } else {
2727 if (nla[NFTA_SET_ELEM_DATA] != NULL) 2748 if (nla[NFTA_SET_ELEM_DATA] != NULL)
2728 return -EINVAL; 2749 return -EINVAL;
@@ -2977,6 +2998,9 @@ static int nf_tables_loop_check_setelem(const struct nft_ctx *ctx,
2977 const struct nft_set_iter *iter, 2998 const struct nft_set_iter *iter,
2978 const struct nft_set_elem *elem) 2999 const struct nft_set_elem *elem)
2979{ 3000{
3001 if (elem->flags & NFT_SET_ELEM_INTERVAL_END)
3002 return 0;
3003
2980 switch (elem->data.verdict) { 3004 switch (elem->data.verdict) {
2981 case NFT_JUMP: 3005 case NFT_JUMP:
2982 case NFT_GOTO: 3006 case NFT_GOTO:
diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c
index 0d879fcb8763..90998a6ff8b9 100644
--- a/net/netfilter/nf_tables_core.c
+++ b/net/netfilter/nf_tables_core.c
@@ -103,9 +103,9 @@ static struct nf_loginfo trace_loginfo = {
103 }, 103 },
104}; 104};
105 105
106static inline void nft_trace_packet(const struct nft_pktinfo *pkt, 106static void nft_trace_packet(const struct nft_pktinfo *pkt,
107 const struct nft_chain *chain, 107 const struct nft_chain *chain,
108 int rulenum, enum nft_trace type) 108 int rulenum, enum nft_trace type)
109{ 109{
110 struct net *net = dev_net(pkt->in ? pkt->in : pkt->out); 110 struct net *net = dev_net(pkt->in ? pkt->in : pkt->out);
111 111
diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c
index 917052e20602..46e275403838 100644
--- a/net/netfilter/nft_ct.c
+++ b/net/netfilter/nft_ct.c
@@ -226,6 +226,7 @@ static int nft_ct_init_validate_get(const struct nft_expr *expr,
226 if (tb[NFTA_CT_DIRECTION] != NULL) 226 if (tb[NFTA_CT_DIRECTION] != NULL)
227 return -EINVAL; 227 return -EINVAL;
228 break; 228 break;
229 case NFT_CT_L3PROTOCOL:
229 case NFT_CT_PROTOCOL: 230 case NFT_CT_PROTOCOL:
230 case NFT_CT_SRC: 231 case NFT_CT_SRC:
231 case NFT_CT_DST: 232 case NFT_CT_DST:
@@ -311,8 +312,19 @@ static int nft_ct_get_dump(struct sk_buff *skb, const struct nft_expr *expr)
311 goto nla_put_failure; 312 goto nla_put_failure;
312 if (nla_put_be32(skb, NFTA_CT_KEY, htonl(priv->key))) 313 if (nla_put_be32(skb, NFTA_CT_KEY, htonl(priv->key)))
313 goto nla_put_failure; 314 goto nla_put_failure;
314 if (nla_put_u8(skb, NFTA_CT_DIRECTION, priv->dir)) 315
315 goto nla_put_failure; 316 switch (priv->key) {
317 case NFT_CT_PROTOCOL:
318 case NFT_CT_SRC:
319 case NFT_CT_DST:
320 case NFT_CT_PROTO_SRC:
321 case NFT_CT_PROTO_DST:
322 if (nla_put_u8(skb, NFTA_CT_DIRECTION, priv->dir))
323 goto nla_put_failure;
324 default:
325 break;
326 }
327
316 return 0; 328 return 0;
317 329
318nla_put_failure: 330nla_put_failure:
diff --git a/net/netfilter/nft_log.c b/net/netfilter/nft_log.c
index 5af790123ad8..26c5154e05f3 100644
--- a/net/netfilter/nft_log.c
+++ b/net/netfilter/nft_log.c
@@ -23,7 +23,6 @@ static const char *nft_log_null_prefix = "";
23struct nft_log { 23struct nft_log {
24 struct nf_loginfo loginfo; 24 struct nf_loginfo loginfo;
25 char *prefix; 25 char *prefix;
26 int family;
27}; 26};
28 27
29static void nft_log_eval(const struct nft_expr *expr, 28static void nft_log_eval(const struct nft_expr *expr,
@@ -33,7 +32,7 @@ static void nft_log_eval(const struct nft_expr *expr,
33 const struct nft_log *priv = nft_expr_priv(expr); 32 const struct nft_log *priv = nft_expr_priv(expr);
34 struct net *net = dev_net(pkt->in ? pkt->in : pkt->out); 33 struct net *net = dev_net(pkt->in ? pkt->in : pkt->out);
35 34
36 nf_log_packet(net, priv->family, pkt->ops->hooknum, pkt->skb, pkt->in, 35 nf_log_packet(net, pkt->ops->pf, pkt->ops->hooknum, pkt->skb, pkt->in,
37 pkt->out, &priv->loginfo, "%s", priv->prefix); 36 pkt->out, &priv->loginfo, "%s", priv->prefix);
38} 37}
39 38
@@ -52,8 +51,6 @@ static int nft_log_init(const struct nft_ctx *ctx,
52 struct nf_loginfo *li = &priv->loginfo; 51 struct nf_loginfo *li = &priv->loginfo;
53 const struct nlattr *nla; 52 const struct nlattr *nla;
54 53
55 priv->family = ctx->afi->family;
56
57 nla = tb[NFTA_LOG_PREFIX]; 54 nla = tb[NFTA_LOG_PREFIX];
58 if (nla != NULL) { 55 if (nla != NULL) {
59 priv->prefix = kmalloc(nla_len(nla) + 1, GFP_KERNEL); 56 priv->prefix = kmalloc(nla_len(nla) + 1, GFP_KERNEL);
diff --git a/net/netfilter/nft_lookup.c b/net/netfilter/nft_lookup.c
index 8a6116b75b5a..bb4ef4cccb6e 100644
--- a/net/netfilter/nft_lookup.c
+++ b/net/netfilter/nft_lookup.c
@@ -16,6 +16,7 @@
16#include <linux/netfilter.h> 16#include <linux/netfilter.h>
17#include <linux/netfilter/nf_tables.h> 17#include <linux/netfilter/nf_tables.h>
18#include <net/netfilter/nf_tables.h> 18#include <net/netfilter/nf_tables.h>
19#include <net/netfilter/nf_tables_core.h>
19 20
20struct nft_lookup { 21struct nft_lookup {
21 struct nft_set *set; 22 struct nft_set *set;
diff --git a/net/netfilter/nft_queue.c b/net/netfilter/nft_queue.c
index cbea473d69e9..e8ae2f6bf232 100644
--- a/net/netfilter/nft_queue.c
+++ b/net/netfilter/nft_queue.c
@@ -25,7 +25,6 @@ struct nft_queue {
25 u16 queuenum; 25 u16 queuenum;
26 u16 queues_total; 26 u16 queues_total;
27 u16 flags; 27 u16 flags;
28 u8 family;
29}; 28};
30 29
31static void nft_queue_eval(const struct nft_expr *expr, 30static void nft_queue_eval(const struct nft_expr *expr,
@@ -43,7 +42,7 @@ static void nft_queue_eval(const struct nft_expr *expr,
43 queue = priv->queuenum + cpu % priv->queues_total; 42 queue = priv->queuenum + cpu % priv->queues_total;
44 } else { 43 } else {
45 queue = nfqueue_hash(pkt->skb, queue, 44 queue = nfqueue_hash(pkt->skb, queue,
46 priv->queues_total, priv->family, 45 priv->queues_total, pkt->ops->pf,
47 jhash_initval); 46 jhash_initval);
48 } 47 }
49 } 48 }
@@ -71,7 +70,6 @@ static int nft_queue_init(const struct nft_ctx *ctx,
71 return -EINVAL; 70 return -EINVAL;
72 71
73 init_hashrandom(&jhash_initval); 72 init_hashrandom(&jhash_initval);
74 priv->family = ctx->afi->family;
75 priv->queuenum = ntohs(nla_get_be16(tb[NFTA_QUEUE_NUM])); 73 priv->queuenum = ntohs(nla_get_be16(tb[NFTA_QUEUE_NUM]));
76 74
77 if (tb[NFTA_QUEUE_TOTAL] != NULL) 75 if (tb[NFTA_QUEUE_TOTAL] != NULL)
diff --git a/net/netfilter/nft_rbtree.c b/net/netfilter/nft_rbtree.c
index ca0c1b231bfe..e21d69d13506 100644
--- a/net/netfilter/nft_rbtree.c
+++ b/net/netfilter/nft_rbtree.c
@@ -69,8 +69,10 @@ static void nft_rbtree_elem_destroy(const struct nft_set *set,
69 struct nft_rbtree_elem *rbe) 69 struct nft_rbtree_elem *rbe)
70{ 70{
71 nft_data_uninit(&rbe->key, NFT_DATA_VALUE); 71 nft_data_uninit(&rbe->key, NFT_DATA_VALUE);
72 if (set->flags & NFT_SET_MAP) 72 if (set->flags & NFT_SET_MAP &&
73 !(rbe->flags & NFT_SET_ELEM_INTERVAL_END))
73 nft_data_uninit(rbe->data, set->dtype); 74 nft_data_uninit(rbe->data, set->dtype);
75
74 kfree(rbe); 76 kfree(rbe);
75} 77}
76 78
@@ -108,7 +110,8 @@ static int nft_rbtree_insert(const struct nft_set *set,
108 int err; 110 int err;
109 111
110 size = sizeof(*rbe); 112 size = sizeof(*rbe);
111 if (set->flags & NFT_SET_MAP) 113 if (set->flags & NFT_SET_MAP &&
114 !(elem->flags & NFT_SET_ELEM_INTERVAL_END))
112 size += sizeof(rbe->data[0]); 115 size += sizeof(rbe->data[0]);
113 116
114 rbe = kzalloc(size, GFP_KERNEL); 117 rbe = kzalloc(size, GFP_KERNEL);
@@ -117,7 +120,8 @@ static int nft_rbtree_insert(const struct nft_set *set,
117 120
118 rbe->flags = elem->flags; 121 rbe->flags = elem->flags;
119 nft_data_copy(&rbe->key, &elem->key); 122 nft_data_copy(&rbe->key, &elem->key);
120 if (set->flags & NFT_SET_MAP) 123 if (set->flags & NFT_SET_MAP &&
124 !(rbe->flags & NFT_SET_ELEM_INTERVAL_END))
121 nft_data_copy(rbe->data, &elem->data); 125 nft_data_copy(rbe->data, &elem->data);
122 126
123 err = __nft_rbtree_insert(set, rbe); 127 err = __nft_rbtree_insert(set, rbe);
@@ -153,7 +157,8 @@ static int nft_rbtree_get(const struct nft_set *set, struct nft_set_elem *elem)
153 parent = parent->rb_right; 157 parent = parent->rb_right;
154 else { 158 else {
155 elem->cookie = rbe; 159 elem->cookie = rbe;
156 if (set->flags & NFT_SET_MAP) 160 if (set->flags & NFT_SET_MAP &&
161 !(rbe->flags & NFT_SET_ELEM_INTERVAL_END))
157 nft_data_copy(&elem->data, rbe->data); 162 nft_data_copy(&elem->data, rbe->data);
158 elem->flags = rbe->flags; 163 elem->flags = rbe->flags;
159 return 0; 164 return 0;
@@ -177,7 +182,8 @@ static void nft_rbtree_walk(const struct nft_ctx *ctx,
177 182
178 rbe = rb_entry(node, struct nft_rbtree_elem, node); 183 rbe = rb_entry(node, struct nft_rbtree_elem, node);
179 nft_data_copy(&elem.key, &rbe->key); 184 nft_data_copy(&elem.key, &rbe->key);
180 if (set->flags & NFT_SET_MAP) 185 if (set->flags & NFT_SET_MAP &&
186 !(rbe->flags & NFT_SET_ELEM_INTERVAL_END))
181 nft_data_copy(&elem.data, rbe->data); 187 nft_data_copy(&elem.data, rbe->data);
182 elem.flags = rbe->flags; 188 elem.flags = rbe->flags;
183 189
diff --git a/net/netfilter/nft_reject.c b/net/netfilter/nft_reject.c
index 5e204711d704..f3448c296446 100644
--- a/net/netfilter/nft_reject.c
+++ b/net/netfilter/nft_reject.c
@@ -16,65 +16,23 @@
16#include <linux/netfilter.h> 16#include <linux/netfilter.h>
17#include <linux/netfilter/nf_tables.h> 17#include <linux/netfilter/nf_tables.h>
18#include <net/netfilter/nf_tables.h> 18#include <net/netfilter/nf_tables.h>
19#include <net/icmp.h> 19#include <net/netfilter/nft_reject.h>
20#include <net/netfilter/ipv4/nf_reject.h>
21 20
22#if IS_ENABLED(CONFIG_NF_TABLES_IPV6) 21const struct nla_policy nft_reject_policy[NFTA_REJECT_MAX + 1] = {
23#include <net/netfilter/ipv6/nf_reject.h>
24#endif
25
26struct nft_reject {
27 enum nft_reject_types type:8;
28 u8 icmp_code;
29 u8 family;
30};
31
32static void nft_reject_eval(const struct nft_expr *expr,
33 struct nft_data data[NFT_REG_MAX + 1],
34 const struct nft_pktinfo *pkt)
35{
36 struct nft_reject *priv = nft_expr_priv(expr);
37#if IS_ENABLED(CONFIG_NF_TABLES_IPV6)
38 struct net *net = dev_net((pkt->in != NULL) ? pkt->in : pkt->out);
39#endif
40 switch (priv->type) {
41 case NFT_REJECT_ICMP_UNREACH:
42 if (priv->family == NFPROTO_IPV4)
43 nf_send_unreach(pkt->skb, priv->icmp_code);
44#if IS_ENABLED(CONFIG_NF_TABLES_IPV6)
45 else if (priv->family == NFPROTO_IPV6)
46 nf_send_unreach6(net, pkt->skb, priv->icmp_code,
47 pkt->ops->hooknum);
48#endif
49 break;
50 case NFT_REJECT_TCP_RST:
51 if (priv->family == NFPROTO_IPV4)
52 nf_send_reset(pkt->skb, pkt->ops->hooknum);
53#if IS_ENABLED(CONFIG_NF_TABLES_IPV6)
54 else if (priv->family == NFPROTO_IPV6)
55 nf_send_reset6(net, pkt->skb, pkt->ops->hooknum);
56#endif
57 break;
58 }
59
60 data[NFT_REG_VERDICT].verdict = NF_DROP;
61}
62
63static const struct nla_policy nft_reject_policy[NFTA_REJECT_MAX + 1] = {
64 [NFTA_REJECT_TYPE] = { .type = NLA_U32 }, 22 [NFTA_REJECT_TYPE] = { .type = NLA_U32 },
65 [NFTA_REJECT_ICMP_CODE] = { .type = NLA_U8 }, 23 [NFTA_REJECT_ICMP_CODE] = { .type = NLA_U8 },
66}; 24};
25EXPORT_SYMBOL_GPL(nft_reject_policy);
67 26
68static int nft_reject_init(const struct nft_ctx *ctx, 27int nft_reject_init(const struct nft_ctx *ctx,
69 const struct nft_expr *expr, 28 const struct nft_expr *expr,
70 const struct nlattr * const tb[]) 29 const struct nlattr * const tb[])
71{ 30{
72 struct nft_reject *priv = nft_expr_priv(expr); 31 struct nft_reject *priv = nft_expr_priv(expr);
73 32
74 if (tb[NFTA_REJECT_TYPE] == NULL) 33 if (tb[NFTA_REJECT_TYPE] == NULL)
75 return -EINVAL; 34 return -EINVAL;
76 35
77 priv->family = ctx->afi->family;
78 priv->type = ntohl(nla_get_be32(tb[NFTA_REJECT_TYPE])); 36 priv->type = ntohl(nla_get_be32(tb[NFTA_REJECT_TYPE]));
79 switch (priv->type) { 37 switch (priv->type) {
80 case NFT_REJECT_ICMP_UNREACH: 38 case NFT_REJECT_ICMP_UNREACH:
@@ -89,8 +47,9 @@ static int nft_reject_init(const struct nft_ctx *ctx,
89 47
90 return 0; 48 return 0;
91} 49}
50EXPORT_SYMBOL_GPL(nft_reject_init);
92 51
93static int nft_reject_dump(struct sk_buff *skb, const struct nft_expr *expr) 52int nft_reject_dump(struct sk_buff *skb, const struct nft_expr *expr)
94{ 53{
95 const struct nft_reject *priv = nft_expr_priv(expr); 54 const struct nft_reject *priv = nft_expr_priv(expr);
96 55
@@ -109,37 +68,7 @@ static int nft_reject_dump(struct sk_buff *skb, const struct nft_expr *expr)
109nla_put_failure: 68nla_put_failure:
110 return -1; 69 return -1;
111} 70}
112 71EXPORT_SYMBOL_GPL(nft_reject_dump);
113static struct nft_expr_type nft_reject_type;
114static const struct nft_expr_ops nft_reject_ops = {
115 .type = &nft_reject_type,
116 .size = NFT_EXPR_SIZE(sizeof(struct nft_reject)),
117 .eval = nft_reject_eval,
118 .init = nft_reject_init,
119 .dump = nft_reject_dump,
120};
121
122static struct nft_expr_type nft_reject_type __read_mostly = {
123 .name = "reject",
124 .ops = &nft_reject_ops,
125 .policy = nft_reject_policy,
126 .maxattr = NFTA_REJECT_MAX,
127 .owner = THIS_MODULE,
128};
129
130static int __init nft_reject_module_init(void)
131{
132 return nft_register_expr(&nft_reject_type);
133}
134
135static void __exit nft_reject_module_exit(void)
136{
137 nft_unregister_expr(&nft_reject_type);
138}
139
140module_init(nft_reject_module_init);
141module_exit(nft_reject_module_exit);
142 72
143MODULE_LICENSE("GPL"); 73MODULE_LICENSE("GPL");
144MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>"); 74MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
145MODULE_ALIAS_NFT_EXPR("reject");
diff --git a/net/netfilter/nft_reject_inet.c b/net/netfilter/nft_reject_inet.c
new file mode 100644
index 000000000000..8a310f239c93
--- /dev/null
+++ b/net/netfilter/nft_reject_inet.c
@@ -0,0 +1,63 @@
1/*
2 * Copyright (c) 2014 Patrick McHardy <kaber@trash.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/kernel.h>
10#include <linux/init.h>
11#include <linux/module.h>
12#include <linux/netlink.h>
13#include <linux/netfilter.h>
14#include <linux/netfilter/nf_tables.h>
15#include <net/netfilter/nf_tables.h>
16#include <net/netfilter/nft_reject.h>
17
18static void nft_reject_inet_eval(const struct nft_expr *expr,
19 struct nft_data data[NFT_REG_MAX + 1],
20 const struct nft_pktinfo *pkt)
21{
22 switch (pkt->ops->pf) {
23 case NFPROTO_IPV4:
24 nft_reject_ipv4_eval(expr, data, pkt);
25 case NFPROTO_IPV6:
26 nft_reject_ipv6_eval(expr, data, pkt);
27 }
28}
29
30static struct nft_expr_type nft_reject_inet_type;
31static const struct nft_expr_ops nft_reject_inet_ops = {
32 .type = &nft_reject_inet_type,
33 .size = NFT_EXPR_SIZE(sizeof(struct nft_reject)),
34 .eval = nft_reject_inet_eval,
35 .init = nft_reject_init,
36 .dump = nft_reject_dump,
37};
38
39static struct nft_expr_type nft_reject_inet_type __read_mostly = {
40 .family = NFPROTO_INET,
41 .name = "reject",
42 .ops = &nft_reject_inet_ops,
43 .policy = nft_reject_policy,
44 .maxattr = NFTA_REJECT_MAX,
45 .owner = THIS_MODULE,
46};
47
48static int __init nft_reject_inet_module_init(void)
49{
50 return nft_register_expr(&nft_reject_inet_type);
51}
52
53static void __exit nft_reject_inet_module_exit(void)
54{
55 nft_unregister_expr(&nft_reject_inet_type);
56}
57
58module_init(nft_reject_inet_module_init);
59module_exit(nft_reject_inet_module_exit);
60
61MODULE_LICENSE("GPL");
62MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
63MODULE_ALIAS_NFT_AF_EXPR(1, "reject");
diff --git a/net/netfilter/xt_CT.c b/net/netfilter/xt_CT.c
index 5929be622c5c..75747aecdebe 100644
--- a/net/netfilter/xt_CT.c
+++ b/net/netfilter/xt_CT.c
@@ -228,12 +228,7 @@ static int xt_ct_tg_check(const struct xt_tgchk_param *par,
228 goto err3; 228 goto err3;
229 } 229 }
230 230
231 __set_bit(IPS_TEMPLATE_BIT, &ct->status); 231 nf_conntrack_tmpl_insert(par->net, ct);
232 __set_bit(IPS_CONFIRMED_BIT, &ct->status);
233
234 /* Overload tuple linked list to put us in template list. */
235 hlist_nulls_add_head_rcu(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode,
236 &par->net->ct.tmpl);
237out: 232out:
238 info->ct = ct; 233 info->ct = ct;
239 return 0; 234 return 0;
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index df4692826ead..e9a48baf8551 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -55,6 +55,7 @@
55 55
56#include "datapath.h" 56#include "datapath.h"
57#include "flow.h" 57#include "flow.h"
58#include "flow_table.h"
58#include "flow_netlink.h" 59#include "flow_netlink.h"
59#include "vport-internal_dev.h" 60#include "vport-internal_dev.h"
60#include "vport-netdev.h" 61#include "vport-netdev.h"
@@ -160,7 +161,6 @@ static void destroy_dp_rcu(struct rcu_head *rcu)
160{ 161{
161 struct datapath *dp = container_of(rcu, struct datapath, rcu); 162 struct datapath *dp = container_of(rcu, struct datapath, rcu);
162 163
163 ovs_flow_tbl_destroy(&dp->table);
164 free_percpu(dp->stats_percpu); 164 free_percpu(dp->stats_percpu);
165 release_net(ovs_dp_get_net(dp)); 165 release_net(ovs_dp_get_net(dp));
166 kfree(dp->ports); 166 kfree(dp->ports);
@@ -466,6 +466,14 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb,
466 466
467 skb_zerocopy(user_skb, skb, skb->len, hlen); 467 skb_zerocopy(user_skb, skb, skb->len, hlen);
468 468
469 /* Pad OVS_PACKET_ATTR_PACKET if linear copy was performed */
470 if (!(dp->user_features & OVS_DP_F_UNALIGNED)) {
471 size_t plen = NLA_ALIGN(user_skb->len) - user_skb->len;
472
473 if (plen > 0)
474 memset(skb_put(user_skb, plen), 0, plen);
475 }
476
469 ((struct nlmsghdr *) user_skb->data)->nlmsg_len = user_skb->len; 477 ((struct nlmsghdr *) user_skb->data)->nlmsg_len = user_skb->len;
470 478
471 err = genlmsg_unicast(ovs_dp_get_net(dp), user_skb, upcall_info->portid); 479 err = genlmsg_unicast(ovs_dp_get_net(dp), user_skb, upcall_info->portid);
@@ -852,11 +860,8 @@ static int ovs_flow_cmd_new_or_set(struct sk_buff *skb, struct genl_info *info)
852 goto err_unlock_ovs; 860 goto err_unlock_ovs;
853 861
854 /* The unmasked key has to be the same for flow updates. */ 862 /* The unmasked key has to be the same for flow updates. */
855 error = -EINVAL; 863 if (!ovs_flow_cmp_unmasked_key(flow, &match))
856 if (!ovs_flow_cmp_unmasked_key(flow, &match)) {
857 OVS_NLERR("Flow modification message rejected, unmasked key does not match.\n");
858 goto err_unlock_ovs; 864 goto err_unlock_ovs;
859 }
860 865
861 /* Update actions. */ 866 /* Update actions. */
862 old_acts = ovsl_dereference(flow->sf_acts); 867 old_acts = ovsl_dereference(flow->sf_acts);
@@ -1079,6 +1084,7 @@ static size_t ovs_dp_cmd_msg_size(void)
1079 msgsize += nla_total_size(IFNAMSIZ); 1084 msgsize += nla_total_size(IFNAMSIZ);
1080 msgsize += nla_total_size(sizeof(struct ovs_dp_stats)); 1085 msgsize += nla_total_size(sizeof(struct ovs_dp_stats));
1081 msgsize += nla_total_size(sizeof(struct ovs_dp_megaflow_stats)); 1086 msgsize += nla_total_size(sizeof(struct ovs_dp_megaflow_stats));
1087 msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_USER_FEATURES */
1082 1088
1083 return msgsize; 1089 return msgsize;
1084} 1090}
@@ -1279,7 +1285,7 @@ err_destroy_ports_array:
1279err_destroy_percpu: 1285err_destroy_percpu:
1280 free_percpu(dp->stats_percpu); 1286 free_percpu(dp->stats_percpu);
1281err_destroy_table: 1287err_destroy_table:
1282 ovs_flow_tbl_destroy(&dp->table); 1288 ovs_flow_tbl_destroy(&dp->table, false);
1283err_free_dp: 1289err_free_dp:
1284 release_net(ovs_dp_get_net(dp)); 1290 release_net(ovs_dp_get_net(dp));
1285 kfree(dp); 1291 kfree(dp);
@@ -1306,10 +1312,13 @@ static void __dp_destroy(struct datapath *dp)
1306 list_del_rcu(&dp->list_node); 1312 list_del_rcu(&dp->list_node);
1307 1313
1308 /* OVSP_LOCAL is datapath internal port. We need to make sure that 1314 /* OVSP_LOCAL is datapath internal port. We need to make sure that
1309 * all port in datapath are destroyed first before freeing datapath. 1315 * all ports in datapath are destroyed first before freeing datapath.
1310 */ 1316 */
1311 ovs_dp_detach_port(ovs_vport_ovsl(dp, OVSP_LOCAL)); 1317 ovs_dp_detach_port(ovs_vport_ovsl(dp, OVSP_LOCAL));
1312 1318
1319 /* RCU destroy the flow table */
1320 ovs_flow_tbl_destroy(&dp->table, true);
1321
1313 call_rcu(&dp->rcu, destroy_dp_rcu); 1322 call_rcu(&dp->rcu, destroy_dp_rcu);
1314} 1323}
1315 1324
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index c58a0fe3c889..3c268b3d71c3 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -153,29 +153,29 @@ static void rcu_free_flow_callback(struct rcu_head *rcu)
153 flow_free(flow); 153 flow_free(flow);
154} 154}
155 155
156static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred)
157{
158 if (!mask)
159 return;
160
161 BUG_ON(!mask->ref_count);
162 mask->ref_count--;
163
164 if (!mask->ref_count) {
165 list_del_rcu(&mask->list);
166 if (deferred)
167 kfree_rcu(mask, rcu);
168 else
169 kfree(mask);
170 }
171}
172
173void ovs_flow_free(struct sw_flow *flow, bool deferred) 156void ovs_flow_free(struct sw_flow *flow, bool deferred)
174{ 157{
175 if (!flow) 158 if (!flow)
176 return; 159 return;
177 160
178 flow_mask_del_ref(flow->mask, deferred); 161 if (flow->mask) {
162 struct sw_flow_mask *mask = flow->mask;
163
164 /* ovs-lock is required to protect mask-refcount and
165 * mask list.
166 */
167 ASSERT_OVSL();
168 BUG_ON(!mask->ref_count);
169 mask->ref_count--;
170
171 if (!mask->ref_count) {
172 list_del_rcu(&mask->list);
173 if (deferred)
174 kfree_rcu(mask, rcu);
175 else
176 kfree(mask);
177 }
178 }
179 179
180 if (deferred) 180 if (deferred)
181 call_rcu(&flow->rcu, rcu_free_flow_callback); 181 call_rcu(&flow->rcu, rcu_free_flow_callback);
@@ -188,26 +188,9 @@ static void free_buckets(struct flex_array *buckets)
188 flex_array_free(buckets); 188 flex_array_free(buckets);
189} 189}
190 190
191
191static void __table_instance_destroy(struct table_instance *ti) 192static void __table_instance_destroy(struct table_instance *ti)
192{ 193{
193 int i;
194
195 if (ti->keep_flows)
196 goto skip_flows;
197
198 for (i = 0; i < ti->n_buckets; i++) {
199 struct sw_flow *flow;
200 struct hlist_head *head = flex_array_get(ti->buckets, i);
201 struct hlist_node *n;
202 int ver = ti->node_ver;
203
204 hlist_for_each_entry_safe(flow, n, head, hash_node[ver]) {
205 hlist_del(&flow->hash_node[ver]);
206 ovs_flow_free(flow, false);
207 }
208 }
209
210skip_flows:
211 free_buckets(ti->buckets); 194 free_buckets(ti->buckets);
212 kfree(ti); 195 kfree(ti);
213} 196}
@@ -258,20 +241,38 @@ static void flow_tbl_destroy_rcu_cb(struct rcu_head *rcu)
258 241
259static void table_instance_destroy(struct table_instance *ti, bool deferred) 242static void table_instance_destroy(struct table_instance *ti, bool deferred)
260{ 243{
244 int i;
245
261 if (!ti) 246 if (!ti)
262 return; 247 return;
263 248
249 if (ti->keep_flows)
250 goto skip_flows;
251
252 for (i = 0; i < ti->n_buckets; i++) {
253 struct sw_flow *flow;
254 struct hlist_head *head = flex_array_get(ti->buckets, i);
255 struct hlist_node *n;
256 int ver = ti->node_ver;
257
258 hlist_for_each_entry_safe(flow, n, head, hash_node[ver]) {
259 hlist_del_rcu(&flow->hash_node[ver]);
260 ovs_flow_free(flow, deferred);
261 }
262 }
263
264skip_flows:
264 if (deferred) 265 if (deferred)
265 call_rcu(&ti->rcu, flow_tbl_destroy_rcu_cb); 266 call_rcu(&ti->rcu, flow_tbl_destroy_rcu_cb);
266 else 267 else
267 __table_instance_destroy(ti); 268 __table_instance_destroy(ti);
268} 269}
269 270
270void ovs_flow_tbl_destroy(struct flow_table *table) 271void ovs_flow_tbl_destroy(struct flow_table *table, bool deferred)
271{ 272{
272 struct table_instance *ti = ovsl_dereference(table->ti); 273 struct table_instance *ti = ovsl_dereference(table->ti);
273 274
274 table_instance_destroy(ti, false); 275 table_instance_destroy(ti, deferred);
275} 276}
276 277
277struct sw_flow *ovs_flow_tbl_dump_next(struct table_instance *ti, 278struct sw_flow *ovs_flow_tbl_dump_next(struct table_instance *ti,
@@ -504,16 +505,11 @@ static struct sw_flow_mask *mask_alloc(void)
504 505
505 mask = kmalloc(sizeof(*mask), GFP_KERNEL); 506 mask = kmalloc(sizeof(*mask), GFP_KERNEL);
506 if (mask) 507 if (mask)
507 mask->ref_count = 0; 508 mask->ref_count = 1;
508 509
509 return mask; 510 return mask;
510} 511}
511 512
512static void mask_add_ref(struct sw_flow_mask *mask)
513{
514 mask->ref_count++;
515}
516
517static bool mask_equal(const struct sw_flow_mask *a, 513static bool mask_equal(const struct sw_flow_mask *a,
518 const struct sw_flow_mask *b) 514 const struct sw_flow_mask *b)
519{ 515{
@@ -554,9 +550,11 @@ static int flow_mask_insert(struct flow_table *tbl, struct sw_flow *flow,
554 mask->key = new->key; 550 mask->key = new->key;
555 mask->range = new->range; 551 mask->range = new->range;
556 list_add_rcu(&mask->list, &tbl->mask_list); 552 list_add_rcu(&mask->list, &tbl->mask_list);
553 } else {
554 BUG_ON(!mask->ref_count);
555 mask->ref_count++;
557 } 556 }
558 557
559 mask_add_ref(mask);
560 flow->mask = mask; 558 flow->mask = mask;
561 return 0; 559 return 0;
562} 560}
diff --git a/net/openvswitch/flow_table.h b/net/openvswitch/flow_table.h
index 1996e34c0fd8..baaeb101924d 100644
--- a/net/openvswitch/flow_table.h
+++ b/net/openvswitch/flow_table.h
@@ -60,7 +60,7 @@ void ovs_flow_free(struct sw_flow *, bool deferred);
60 60
61int ovs_flow_tbl_init(struct flow_table *); 61int ovs_flow_tbl_init(struct flow_table *);
62int ovs_flow_tbl_count(struct flow_table *table); 62int ovs_flow_tbl_count(struct flow_table *table);
63void ovs_flow_tbl_destroy(struct flow_table *table); 63void ovs_flow_tbl_destroy(struct flow_table *table, bool deferred);
64int ovs_flow_tbl_flush(struct flow_table *flow_table); 64int ovs_flow_tbl_flush(struct flow_table *flow_table);
65 65
66int ovs_flow_tbl_insert(struct flow_table *table, struct sw_flow *flow, 66int ovs_flow_tbl_insert(struct flow_table *table, struct sw_flow *flow,
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index 0f6259a6a932..2b1738ef9394 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -662,6 +662,8 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
662 */ 662 */
663 sctp_v6_to_sk_daddr(&asoc->peer.primary_addr, newsk); 663 sctp_v6_to_sk_daddr(&asoc->peer.primary_addr, newsk);
664 664
665 newsk->sk_v6_rcv_saddr = sk->sk_v6_rcv_saddr;
666
665 sk_refcnt_debug_inc(newsk); 667 sk_refcnt_debug_inc(newsk);
666 668
667 if (newsk->sk_prot->init(newsk)) { 669 if (newsk->sk_prot->init(newsk)) {
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
index 80a6640f329b..06c6ff0cb911 100644
--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -571,7 +571,7 @@ static void svc_check_conn_limits(struct svc_serv *serv)
571 } 571 }
572} 572}
573 573
574int svc_alloc_arg(struct svc_rqst *rqstp) 574static int svc_alloc_arg(struct svc_rqst *rqstp)
575{ 575{
576 struct svc_serv *serv = rqstp->rq_server; 576 struct svc_serv *serv = rqstp->rq_server;
577 struct xdr_buf *arg; 577 struct xdr_buf *arg;
@@ -612,7 +612,7 @@ int svc_alloc_arg(struct svc_rqst *rqstp)
612 return 0; 612 return 0;
613} 613}
614 614
615struct svc_xprt *svc_get_next_xprt(struct svc_rqst *rqstp, long timeout) 615static struct svc_xprt *svc_get_next_xprt(struct svc_rqst *rqstp, long timeout)
616{ 616{
617 struct svc_xprt *xprt; 617 struct svc_xprt *xprt;
618 struct svc_pool *pool = rqstp->rq_pool; 618 struct svc_pool *pool = rqstp->rq_pool;
@@ -691,7 +691,7 @@ struct svc_xprt *svc_get_next_xprt(struct svc_rqst *rqstp, long timeout)
691 return xprt; 691 return xprt;
692} 692}
693 693
694void svc_add_new_temp_xprt(struct svc_serv *serv, struct svc_xprt *newxpt) 694static void svc_add_new_temp_xprt(struct svc_serv *serv, struct svc_xprt *newxpt)
695{ 695{
696 spin_lock_bh(&serv->sv_lock); 696 spin_lock_bh(&serv->sv_lock);
697 set_bit(XPT_TEMP, &newxpt->xpt_flags); 697 set_bit(XPT_TEMP, &newxpt->xpt_flags);
diff --git a/net/wireless/core.c b/net/wireless/core.c
index d89dee2259b5..010892b81a06 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -203,8 +203,11 @@ void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev,
203 203
204 rdev->opencount--; 204 rdev->opencount--;
205 205
206 WARN_ON(rdev->scan_req && rdev->scan_req->wdev == wdev && 206 if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
207 !rdev->scan_req->notified); 207 if (WARN_ON(!rdev->scan_req->notified))
208 rdev->scan_req->aborted = true;
209 ___cfg80211_scan_done(rdev, false);
210 }
208} 211}
209 212
210static int cfg80211_rfkill_set_block(void *data, bool blocked) 213static int cfg80211_rfkill_set_block(void *data, bool blocked)
@@ -440,9 +443,6 @@ int wiphy_register(struct wiphy *wiphy)
440 int i; 443 int i;
441 u16 ifmodes = wiphy->interface_modes; 444 u16 ifmodes = wiphy->interface_modes;
442 445
443 /* support for 5/10 MHz is broken due to nl80211 API mess - disable */
444 wiphy->flags &= ~WIPHY_FLAG_SUPPORTS_5_10_MHZ;
445
446 /* 446 /*
447 * There are major locking problems in nl80211/mac80211 for CSA, 447 * There are major locking problems in nl80211/mac80211 for CSA,
448 * disable for all drivers until this has been reworked. 448 * disable for all drivers until this has been reworked.
@@ -859,8 +859,11 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
859 break; 859 break;
860 case NETDEV_DOWN: 860 case NETDEV_DOWN:
861 cfg80211_update_iface_num(rdev, wdev->iftype, -1); 861 cfg80211_update_iface_num(rdev, wdev->iftype, -1);
862 WARN_ON(rdev->scan_req && rdev->scan_req->wdev == wdev && 862 if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
863 !rdev->scan_req->notified); 863 if (WARN_ON(!rdev->scan_req->notified))
864 rdev->scan_req->aborted = true;
865 ___cfg80211_scan_done(rdev, false);
866 }
864 867
865 if (WARN_ON(rdev->sched_scan_req && 868 if (WARN_ON(rdev->sched_scan_req &&
866 rdev->sched_scan_req->dev == wdev->netdev)) { 869 rdev->sched_scan_req->dev == wdev->netdev)) {
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 37ec16d7bb1a..f1d193b557b6 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -62,6 +62,7 @@ struct cfg80211_registered_device {
62 struct rb_root bss_tree; 62 struct rb_root bss_tree;
63 u32 bss_generation; 63 u32 bss_generation;
64 struct cfg80211_scan_request *scan_req; /* protected by RTNL */ 64 struct cfg80211_scan_request *scan_req; /* protected by RTNL */
65 struct sk_buff *scan_msg;
65 struct cfg80211_sched_scan_request *sched_scan_req; 66 struct cfg80211_sched_scan_request *sched_scan_req;
66 unsigned long suspend_at; 67 unsigned long suspend_at;
67 struct work_struct scan_done_wk; 68 struct work_struct scan_done_wk;
@@ -361,7 +362,8 @@ int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev,
361 struct key_params *params, int key_idx, 362 struct key_params *params, int key_idx,
362 bool pairwise, const u8 *mac_addr); 363 bool pairwise, const u8 *mac_addr);
363void __cfg80211_scan_done(struct work_struct *wk); 364void __cfg80211_scan_done(struct work_struct *wk);
364void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev); 365void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev,
366 bool send_message);
365void __cfg80211_sched_scan_results(struct work_struct *wk); 367void __cfg80211_sched_scan_results(struct work_struct *wk);
366int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, 368int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev,
367 bool driver_initiated); 369 bool driver_initiated);
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 7a742594916e..4fe2e6e2bc76 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1719,9 +1719,10 @@ static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb)
1719 * We can then retry with the larger buffer. 1719 * We can then retry with the larger buffer.
1720 */ 1720 */
1721 if ((ret == -ENOBUFS || ret == -EMSGSIZE) && 1721 if ((ret == -ENOBUFS || ret == -EMSGSIZE) &&
1722 !skb->len && 1722 !skb->len && !state->split &&
1723 cb->min_dump_alloc < 4096) { 1723 cb->min_dump_alloc < 4096) {
1724 cb->min_dump_alloc = 4096; 1724 cb->min_dump_alloc = 4096;
1725 state->split_start = 0;
1725 rtnl_unlock(); 1726 rtnl_unlock();
1726 return 1; 1727 return 1;
1727 } 1728 }
@@ -5244,7 +5245,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
5244 if (!rdev->ops->scan) 5245 if (!rdev->ops->scan)
5245 return -EOPNOTSUPP; 5246 return -EOPNOTSUPP;
5246 5247
5247 if (rdev->scan_req) { 5248 if (rdev->scan_req || rdev->scan_msg) {
5248 err = -EBUSY; 5249 err = -EBUSY;
5249 goto unlock; 5250 goto unlock;
5250 } 5251 }
@@ -10011,40 +10012,31 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
10011 NL80211_MCGRP_SCAN, GFP_KERNEL); 10012 NL80211_MCGRP_SCAN, GFP_KERNEL);
10012} 10013}
10013 10014
10014void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, 10015struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev,
10015 struct wireless_dev *wdev) 10016 struct wireless_dev *wdev, bool aborted)
10016{ 10017{
10017 struct sk_buff *msg; 10018 struct sk_buff *msg;
10018 10019
10019 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); 10020 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
10020 if (!msg) 10021 if (!msg)
10021 return; 10022 return NULL;
10022 10023
10023 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, 10024 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
10024 NL80211_CMD_NEW_SCAN_RESULTS) < 0) { 10025 aborted ? NL80211_CMD_SCAN_ABORTED :
10026 NL80211_CMD_NEW_SCAN_RESULTS) < 0) {
10025 nlmsg_free(msg); 10027 nlmsg_free(msg);
10026 return; 10028 return NULL;
10027 } 10029 }
10028 10030
10029 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, 10031 return msg;
10030 NL80211_MCGRP_SCAN, GFP_KERNEL);
10031} 10032}
10032 10033
10033void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, 10034void nl80211_send_scan_result(struct cfg80211_registered_device *rdev,
10034 struct wireless_dev *wdev) 10035 struct sk_buff *msg)
10035{ 10036{
10036 struct sk_buff *msg;
10037
10038 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
10039 if (!msg) 10037 if (!msg)
10040 return; 10038 return;
10041 10039
10042 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0,
10043 NL80211_CMD_SCAN_ABORTED) < 0) {
10044 nlmsg_free(msg);
10045 return;
10046 }
10047
10048 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, 10040 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
10049 NL80211_MCGRP_SCAN, GFP_KERNEL); 10041 NL80211_MCGRP_SCAN, GFP_KERNEL);
10050} 10042}
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h
index b1b231324e10..75799746d845 100644
--- a/net/wireless/nl80211.h
+++ b/net/wireless/nl80211.h
@@ -8,10 +8,10 @@ void nl80211_exit(void);
8void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev); 8void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev);
9void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, 9void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
10 struct wireless_dev *wdev); 10 struct wireless_dev *wdev);
11void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, 11struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev,
12 struct wireless_dev *wdev); 12 struct wireless_dev *wdev, bool aborted);
13void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, 13void nl80211_send_scan_result(struct cfg80211_registered_device *rdev,
14 struct wireless_dev *wdev); 14 struct sk_buff *msg);
15void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, 15void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
16 struct net_device *netdev, u32 cmd); 16 struct net_device *netdev, u32 cmd);
17void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, 17void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index b528e31da2cf..d1ed4aebbbb7 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -161,18 +161,25 @@ static void __cfg80211_bss_expire(struct cfg80211_registered_device *dev,
161 dev->bss_generation++; 161 dev->bss_generation++;
162} 162}
163 163
164void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev) 164void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev,
165 bool send_message)
165{ 166{
166 struct cfg80211_scan_request *request; 167 struct cfg80211_scan_request *request;
167 struct wireless_dev *wdev; 168 struct wireless_dev *wdev;
169 struct sk_buff *msg;
168#ifdef CONFIG_CFG80211_WEXT 170#ifdef CONFIG_CFG80211_WEXT
169 union iwreq_data wrqu; 171 union iwreq_data wrqu;
170#endif 172#endif
171 173
172 ASSERT_RTNL(); 174 ASSERT_RTNL();
173 175
174 request = rdev->scan_req; 176 if (rdev->scan_msg) {
177 nl80211_send_scan_result(rdev, rdev->scan_msg);
178 rdev->scan_msg = NULL;
179 return;
180 }
175 181
182 request = rdev->scan_req;
176 if (!request) 183 if (!request)
177 return; 184 return;
178 185
@@ -186,18 +193,16 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev)
186 if (wdev->netdev) 193 if (wdev->netdev)
187 cfg80211_sme_scan_done(wdev->netdev); 194 cfg80211_sme_scan_done(wdev->netdev);
188 195
189 if (request->aborted) { 196 if (!request->aborted &&
190 nl80211_send_scan_aborted(rdev, wdev); 197 request->flags & NL80211_SCAN_FLAG_FLUSH) {
191 } else { 198 /* flush entries from previous scans */
192 if (request->flags & NL80211_SCAN_FLAG_FLUSH) { 199 spin_lock_bh(&rdev->bss_lock);
193 /* flush entries from previous scans */ 200 __cfg80211_bss_expire(rdev, request->scan_start);
194 spin_lock_bh(&rdev->bss_lock); 201 spin_unlock_bh(&rdev->bss_lock);
195 __cfg80211_bss_expire(rdev, request->scan_start);
196 spin_unlock_bh(&rdev->bss_lock);
197 }
198 nl80211_send_scan_done(rdev, wdev);
199 } 202 }
200 203
204 msg = nl80211_build_scan_msg(rdev, wdev, request->aborted);
205
201#ifdef CONFIG_CFG80211_WEXT 206#ifdef CONFIG_CFG80211_WEXT
202 if (wdev->netdev && !request->aborted) { 207 if (wdev->netdev && !request->aborted) {
203 memset(&wrqu, 0, sizeof(wrqu)); 208 memset(&wrqu, 0, sizeof(wrqu));
@@ -211,6 +216,11 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev)
211 216
212 rdev->scan_req = NULL; 217 rdev->scan_req = NULL;
213 kfree(request); 218 kfree(request);
219
220 if (!send_message)
221 rdev->scan_msg = msg;
222 else
223 nl80211_send_scan_result(rdev, msg);
214} 224}
215 225
216void __cfg80211_scan_done(struct work_struct *wk) 226void __cfg80211_scan_done(struct work_struct *wk)
@@ -221,7 +231,7 @@ void __cfg80211_scan_done(struct work_struct *wk)
221 scan_done_wk); 231 scan_done_wk);
222 232
223 rtnl_lock(); 233 rtnl_lock();
224 ___cfg80211_scan_done(rdev); 234 ___cfg80211_scan_done(rdev, true);
225 rtnl_unlock(); 235 rtnl_unlock();
226} 236}
227 237
@@ -1079,7 +1089,7 @@ int cfg80211_wext_siwscan(struct net_device *dev,
1079 if (IS_ERR(rdev)) 1089 if (IS_ERR(rdev))
1080 return PTR_ERR(rdev); 1090 return PTR_ERR(rdev);
1081 1091
1082 if (rdev->scan_req) { 1092 if (rdev->scan_req || rdev->scan_msg) {
1083 err = -EBUSY; 1093 err = -EBUSY;
1084 goto out; 1094 goto out;
1085 } 1095 }
@@ -1481,7 +1491,7 @@ int cfg80211_wext_giwscan(struct net_device *dev,
1481 if (IS_ERR(rdev)) 1491 if (IS_ERR(rdev))
1482 return PTR_ERR(rdev); 1492 return PTR_ERR(rdev);
1483 1493
1484 if (rdev->scan_req) 1494 if (rdev->scan_req || rdev->scan_msg)
1485 return -EAGAIN; 1495 return -EAGAIN;
1486 1496
1487 res = ieee80211_scan_results(rdev, info, extra, data->length); 1497 res = ieee80211_scan_results(rdev, info, extra, data->length);
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index a63509118508..f04d4c32e96e 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -67,7 +67,7 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
67 ASSERT_RDEV_LOCK(rdev); 67 ASSERT_RDEV_LOCK(rdev);
68 ASSERT_WDEV_LOCK(wdev); 68 ASSERT_WDEV_LOCK(wdev);
69 69
70 if (rdev->scan_req) 70 if (rdev->scan_req || rdev->scan_msg)
71 return -EBUSY; 71 return -EBUSY;
72 72
73 if (wdev->conn->params.channel) 73 if (wdev->conn->params.channel)
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 0ea2a1e24ade..464dcef79b35 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -471,7 +471,7 @@ sub seed_camelcase_includes {
471 471
472 $camelcase_seeded = 1; 472 $camelcase_seeded = 1;
473 473
474 if (-d ".git") { 474 if (-e ".git") {
475 my $git_last_include_commit = `git log --no-merges --pretty=format:"%h%n" -1 -- include`; 475 my $git_last_include_commit = `git log --no-merges --pretty=format:"%h%n" -1 -- include`;
476 chomp $git_last_include_commit; 476 chomp $git_last_include_commit;
477 $camelcase_cache = ".checkpatch-camelcase.git.$git_last_include_commit"; 477 $camelcase_cache = ".checkpatch-camelcase.git.$git_last_include_commit";
@@ -499,7 +499,7 @@ sub seed_camelcase_includes {
499 return; 499 return;
500 } 500 }
501 501
502 if (-d ".git") { 502 if (-e ".git") {
503 $files = `git ls-files "include/*.h"`; 503 $files = `git ls-files "include/*.h"`;
504 @include_files = split('\n', $files); 504 @include_files = split('\n', $files);
505 } 505 }
diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index 9c3986f4140c..41987885bd31 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -95,7 +95,7 @@ my %VCS_cmds;
95 95
96my %VCS_cmds_git = ( 96my %VCS_cmds_git = (
97 "execute_cmd" => \&git_execute_cmd, 97 "execute_cmd" => \&git_execute_cmd,
98 "available" => '(which("git") ne "") && (-d ".git")', 98 "available" => '(which("git") ne "") && (-e ".git")',
99 "find_signers_cmd" => 99 "find_signers_cmd" =>
100 "git log --no-color --follow --since=\$email_git_since " . 100 "git log --no-color --follow --since=\$email_git_since " .
101 '--numstat --no-merges ' . 101 '--numstat --no-merges ' .
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 23708636b05c..25e5cb0aaef6 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -210,8 +210,8 @@ static void do_usb_entry(void *symval,
210 range_lo < 0x9 ? "[%X-9" : "[%X", 210 range_lo < 0x9 ? "[%X-9" : "[%X",
211 range_lo); 211 range_lo);
212 sprintf(alias + strlen(alias), 212 sprintf(alias + strlen(alias),
213 range_hi > 0xA ? "a-%X]" : "%X]", 213 range_hi > 0xA ? "A-%X]" : "%X]",
214 range_lo); 214 range_hi);
215 } 215 }
216 } 216 }
217 if (bcdDevice_initial_digits < (sizeof(bcdDevice_lo) * 2 - 1)) 217 if (bcdDevice_initial_digits < (sizeof(bcdDevice_lo) * 2 - 1))
diff --git a/security/Kconfig b/security/Kconfig
index e9c6ac724fef..beb86b500adf 100644
--- a/security/Kconfig
+++ b/security/Kconfig
@@ -103,7 +103,7 @@ config INTEL_TXT
103config LSM_MMAP_MIN_ADDR 103config LSM_MMAP_MIN_ADDR
104 int "Low address space for LSM to protect from user allocation" 104 int "Low address space for LSM to protect from user allocation"
105 depends on SECURITY && SECURITY_SELINUX 105 depends on SECURITY && SECURITY_SELINUX
106 default 32768 if ARM 106 default 32768 if ARM || (ARM64 && COMPAT)
107 default 65536 107 default 65536
108 help 108 help
109 This is the portion of low virtual memory which should be protected 109 This is the portion of low virtual memory which should be protected
diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
index 332ac8a80cf5..2df7b900e259 100644
--- a/security/selinux/nlmsgtab.c
+++ b/security/selinux/nlmsgtab.c
@@ -17,6 +17,7 @@
17#include <linux/inet_diag.h> 17#include <linux/inet_diag.h>
18#include <linux/xfrm.h> 18#include <linux/xfrm.h>
19#include <linux/audit.h> 19#include <linux/audit.h>
20#include <linux/sock_diag.h>
20 21
21#include "flask.h" 22#include "flask.h"
22#include "av_permissions.h" 23#include "av_permissions.h"
@@ -78,6 +79,7 @@ static struct nlmsg_perm nlmsg_tcpdiag_perms[] =
78{ 79{
79 { TCPDIAG_GETSOCK, NETLINK_TCPDIAG_SOCKET__NLMSG_READ }, 80 { TCPDIAG_GETSOCK, NETLINK_TCPDIAG_SOCKET__NLMSG_READ },
80 { DCCPDIAG_GETSOCK, NETLINK_TCPDIAG_SOCKET__NLMSG_READ }, 81 { DCCPDIAG_GETSOCK, NETLINK_TCPDIAG_SOCKET__NLMSG_READ },
82 { SOCK_DIAG_BY_FAMILY, NETLINK_TCPDIAG_SOCKET__NLMSG_READ },
81}; 83};
82 84
83static struct nlmsg_perm nlmsg_xfrm_perms[] = 85static struct nlmsg_perm nlmsg_xfrm_perms[] =
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index c93c21127f0c..5d0144ee8ed6 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -1232,6 +1232,10 @@ static int security_context_to_sid_core(const char *scontext, u32 scontext_len,
1232 struct context context; 1232 struct context context;
1233 int rc = 0; 1233 int rc = 0;
1234 1234
1235 /* An empty security context is never valid. */
1236 if (!scontext_len)
1237 return -EINVAL;
1238
1235 if (!ss_initialized) { 1239 if (!ss_initialized) {
1236 int i; 1240 int i;
1237 1241
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index ec4536c8d8d4..dafcf82139e2 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -932,7 +932,7 @@ int snd_hda_bus_new(struct snd_card *card,
932} 932}
933EXPORT_SYMBOL_GPL(snd_hda_bus_new); 933EXPORT_SYMBOL_GPL(snd_hda_bus_new);
934 934
935#ifdef CONFIG_SND_HDA_GENERIC 935#if IS_ENABLED(CONFIG_SND_HDA_GENERIC)
936#define is_generic_config(codec) \ 936#define is_generic_config(codec) \
937 (codec->modelname && !strcmp(codec->modelname, "generic")) 937 (codec->modelname && !strcmp(codec->modelname, "generic"))
938#else 938#else
@@ -1339,23 +1339,15 @@ get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
1339/* 1339/*
1340 * Dynamic symbol binding for the codec parsers 1340 * Dynamic symbol binding for the codec parsers
1341 */ 1341 */
1342#ifdef MODULE
1343#define load_parser_sym(sym) ((int (*)(struct hda_codec *))symbol_request(sym))
1344#define unload_parser_addr(addr) symbol_put_addr(addr)
1345#else
1346#define load_parser_sym(sym) (sym)
1347#define unload_parser_addr(addr) do {} while (0)
1348#endif
1349 1342
1350#define load_parser(codec, sym) \ 1343#define load_parser(codec, sym) \
1351 ((codec)->parser = load_parser_sym(sym)) 1344 ((codec)->parser = (int (*)(struct hda_codec *))symbol_request(sym))
1352 1345
1353static void unload_parser(struct hda_codec *codec) 1346static void unload_parser(struct hda_codec *codec)
1354{ 1347{
1355 if (codec->parser) { 1348 if (codec->parser)
1356 unload_parser_addr(codec->parser); 1349 symbol_put_addr(codec->parser);
1357 codec->parser = NULL; 1350 codec->parser = NULL;
1358 }
1359} 1351}
1360 1352
1361/* 1353/*
@@ -1570,7 +1562,7 @@ int snd_hda_codec_update_widgets(struct hda_codec *codec)
1570EXPORT_SYMBOL_GPL(snd_hda_codec_update_widgets); 1562EXPORT_SYMBOL_GPL(snd_hda_codec_update_widgets);
1571 1563
1572 1564
1573#ifdef CONFIG_SND_HDA_CODEC_HDMI 1565#if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
1574/* if all audio out widgets are digital, let's assume the codec as a HDMI/DP */ 1566/* if all audio out widgets are digital, let's assume the codec as a HDMI/DP */
1575static bool is_likely_hdmi_codec(struct hda_codec *codec) 1567static bool is_likely_hdmi_codec(struct hda_codec *codec)
1576{ 1568{
@@ -1620,12 +1612,20 @@ int snd_hda_codec_configure(struct hda_codec *codec)
1620 patch = codec->preset->patch; 1612 patch = codec->preset->patch;
1621 if (!patch) { 1613 if (!patch) {
1622 unload_parser(codec); /* to be sure */ 1614 unload_parser(codec); /* to be sure */
1623 if (is_likely_hdmi_codec(codec)) 1615 if (is_likely_hdmi_codec(codec)) {
1616#if IS_MODULE(CONFIG_SND_HDA_CODEC_HDMI)
1624 patch = load_parser(codec, snd_hda_parse_hdmi_codec); 1617 patch = load_parser(codec, snd_hda_parse_hdmi_codec);
1625#ifdef CONFIG_SND_HDA_GENERIC 1618#elif IS_BUILTIN(CONFIG_SND_HDA_CODEC_HDMI)
1626 if (!patch) 1619 patch = snd_hda_parse_hdmi_codec;
1620#endif
1621 }
1622 if (!patch) {
1623#if IS_MODULE(CONFIG_SND_HDA_GENERIC)
1627 patch = load_parser(codec, snd_hda_parse_generic_codec); 1624 patch = load_parser(codec, snd_hda_parse_generic_codec);
1625#elif IS_BUILTIN(CONFIG_SND_HDA_GENERIC)
1626 patch = snd_hda_parse_generic_codec;
1628#endif 1627#endif
1628 }
1629 if (!patch) { 1629 if (!patch) {
1630 printk(KERN_ERR "hda-codec: No codec parser is available\n"); 1630 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1631 return -ENODEV; 1631 return -ENODEV;
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index 8321a97d5c05..d9a09bdd09db 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -3269,7 +3269,7 @@ static int cap_put_caller(struct snd_kcontrol *kcontrol,
3269 mutex_unlock(&codec->control_mutex); 3269 mutex_unlock(&codec->control_mutex);
3270 snd_hda_codec_flush_cache(codec); /* flush the updates */ 3270 snd_hda_codec_flush_cache(codec); /* flush the updates */
3271 if (err >= 0 && spec->cap_sync_hook) 3271 if (err >= 0 && spec->cap_sync_hook)
3272 spec->cap_sync_hook(codec, ucontrol); 3272 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3273 return err; 3273 return err;
3274} 3274}
3275 3275
@@ -3390,7 +3390,7 @@ static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3390 return ret; 3390 return ret;
3391 3391
3392 if (spec->cap_sync_hook) 3392 if (spec->cap_sync_hook)
3393 spec->cap_sync_hook(codec, ucontrol); 3393 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3394 3394
3395 return ret; 3395 return ret;
3396} 3396}
@@ -3795,7 +3795,7 @@ static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3795 return 0; 3795 return 0;
3796 snd_hda_activate_path(codec, path, true, false); 3796 snd_hda_activate_path(codec, path, true, false);
3797 if (spec->cap_sync_hook) 3797 if (spec->cap_sync_hook)
3798 spec->cap_sync_hook(codec, NULL); 3798 spec->cap_sync_hook(codec, NULL, NULL);
3799 path_power_down_sync(codec, old_path); 3799 path_power_down_sync(codec, old_path);
3800 return 1; 3800 return 1;
3801} 3801}
@@ -5270,7 +5270,7 @@ static void init_input_src(struct hda_codec *codec)
5270 } 5270 }
5271 5271
5272 if (spec->cap_sync_hook) 5272 if (spec->cap_sync_hook)
5273 spec->cap_sync_hook(codec, NULL); 5273 spec->cap_sync_hook(codec, NULL, NULL);
5274} 5274}
5275 5275
5276/* set right pin controls for digital I/O */ 5276/* set right pin controls for digital I/O */
diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
index 07f767231c9f..c908afbe4d94 100644
--- a/sound/pci/hda/hda_generic.h
+++ b/sound/pci/hda/hda_generic.h
@@ -274,6 +274,7 @@ struct hda_gen_spec {
274 void (*init_hook)(struct hda_codec *codec); 274 void (*init_hook)(struct hda_codec *codec);
275 void (*automute_hook)(struct hda_codec *codec); 275 void (*automute_hook)(struct hda_codec *codec);
276 void (*cap_sync_hook)(struct hda_codec *codec, 276 void (*cap_sync_hook)(struct hda_codec *codec,
277 struct snd_kcontrol *kcontrol,
277 struct snd_ctl_elem_value *ucontrol); 278 struct snd_ctl_elem_value *ucontrol);
278 279
279 /* PCM hooks */ 280 /* PCM hooks */
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index fa2879a21a50..e354ab1ec20f 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -198,7 +198,7 @@ MODULE_DESCRIPTION("Intel HDA driver");
198#endif 198#endif
199 199
200#if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO) 200#if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
201#ifdef CONFIG_SND_HDA_CODEC_HDMI 201#if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
202#define SUPPORT_VGA_SWITCHEROO 202#define SUPPORT_VGA_SWITCHEROO
203#endif 203#endif
204#endif 204#endif
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 7a426ed491f2..df3652ad15ef 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -244,6 +244,19 @@ static void ad_fixup_inv_jack_detect(struct hda_codec *codec,
244 } 244 }
245} 245}
246 246
247/* Toshiba Satellite L40 implements EAPD in a standard way unlike others */
248static void ad1986a_fixup_eapd(struct hda_codec *codec,
249 const struct hda_fixup *fix, int action)
250{
251 struct ad198x_spec *spec = codec->spec;
252
253 if (action == HDA_FIXUP_ACT_PRE_PROBE) {
254 codec->inv_eapd = 0;
255 spec->gen.keep_eapd_on = 1;
256 spec->eapd_nid = 0x1b;
257 }
258}
259
247enum { 260enum {
248 AD1986A_FIXUP_INV_JACK_DETECT, 261 AD1986A_FIXUP_INV_JACK_DETECT,
249 AD1986A_FIXUP_ULTRA, 262 AD1986A_FIXUP_ULTRA,
@@ -251,6 +264,7 @@ enum {
251 AD1986A_FIXUP_3STACK, 264 AD1986A_FIXUP_3STACK,
252 AD1986A_FIXUP_LAPTOP, 265 AD1986A_FIXUP_LAPTOP,
253 AD1986A_FIXUP_LAPTOP_IMIC, 266 AD1986A_FIXUP_LAPTOP_IMIC,
267 AD1986A_FIXUP_EAPD,
254}; 268};
255 269
256static const struct hda_fixup ad1986a_fixups[] = { 270static const struct hda_fixup ad1986a_fixups[] = {
@@ -311,6 +325,10 @@ static const struct hda_fixup ad1986a_fixups[] = {
311 .chained_before = 1, 325 .chained_before = 1,
312 .chain_id = AD1986A_FIXUP_LAPTOP, 326 .chain_id = AD1986A_FIXUP_LAPTOP,
313 }, 327 },
328 [AD1986A_FIXUP_EAPD] = {
329 .type = HDA_FIXUP_FUNC,
330 .v.func = ad1986a_fixup_eapd,
331 },
314}; 332};
315 333
316static const struct snd_pci_quirk ad1986a_fixup_tbl[] = { 334static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
@@ -318,6 +336,7 @@ static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
318 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK), 336 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
319 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK), 337 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK),
320 SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_FIXUP_3STACK), 338 SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_FIXUP_3STACK),
339 SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba Satellite L40", AD1986A_FIXUP_EAPD),
321 SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP), 340 SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP),
322 SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG), 341 SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG),
323 SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA), 342 SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA),
@@ -472,6 +491,8 @@ static int ad1983_add_spdif_mux_ctl(struct hda_codec *codec)
472static int patch_ad1983(struct hda_codec *codec) 491static int patch_ad1983(struct hda_codec *codec)
473{ 492{
474 struct ad198x_spec *spec; 493 struct ad198x_spec *spec;
494 static hda_nid_t conn_0c[] = { 0x08 };
495 static hda_nid_t conn_0d[] = { 0x09 };
475 int err; 496 int err;
476 497
477 err = alloc_ad_spec(codec); 498 err = alloc_ad_spec(codec);
@@ -479,8 +500,14 @@ static int patch_ad1983(struct hda_codec *codec)
479 return err; 500 return err;
480 spec = codec->spec; 501 spec = codec->spec;
481 502
503 spec->gen.mixer_nid = 0x0e;
482 spec->gen.beep_nid = 0x10; 504 spec->gen.beep_nid = 0x10;
483 set_beep_amp(spec, 0x10, 0, HDA_OUTPUT); 505 set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
506
507 /* limit the loopback routes not to confuse the parser */
508 snd_hda_override_conn_list(codec, 0x0c, ARRAY_SIZE(conn_0c), conn_0c);
509 snd_hda_override_conn_list(codec, 0x0d, ARRAY_SIZE(conn_0d), conn_0d);
510
484 err = ad198x_parse_auto_config(codec, false); 511 err = ad198x_parse_auto_config(codec, false);
485 if (err < 0) 512 if (err < 0)
486 goto error; 513 goto error;
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 4e0ec146553d..bcf91bea3317 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -3291,7 +3291,8 @@ static void cxt_update_headset_mode(struct hda_codec *codec)
3291} 3291}
3292 3292
3293static void cxt_update_headset_mode_hook(struct hda_codec *codec, 3293static void cxt_update_headset_mode_hook(struct hda_codec *codec,
3294 struct snd_ctl_elem_value *ucontrol) 3294 struct snd_kcontrol *kcontrol,
3295 struct snd_ctl_elem_value *ucontrol)
3295{ 3296{
3296 cxt_update_headset_mode(codec); 3297 cxt_update_headset_mode(codec);
3297} 3298}
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 56a8f1876603..a9a83b85517a 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -708,7 +708,8 @@ static void alc_inv_dmic_sync(struct hda_codec *codec, bool force)
708} 708}
709 709
710static void alc_inv_dmic_hook(struct hda_codec *codec, 710static void alc_inv_dmic_hook(struct hda_codec *codec,
711 struct snd_ctl_elem_value *ucontrol) 711 struct snd_kcontrol *kcontrol,
712 struct snd_ctl_elem_value *ucontrol)
712{ 713{
713 alc_inv_dmic_sync(codec, false); 714 alc_inv_dmic_sync(codec, false);
714} 715}
@@ -1821,6 +1822,7 @@ enum {
1821 ALC889_FIXUP_IMAC91_VREF, 1822 ALC889_FIXUP_IMAC91_VREF,
1822 ALC889_FIXUP_MBA11_VREF, 1823 ALC889_FIXUP_MBA11_VREF,
1823 ALC889_FIXUP_MBA21_VREF, 1824 ALC889_FIXUP_MBA21_VREF,
1825 ALC889_FIXUP_MP11_VREF,
1824 ALC882_FIXUP_INV_DMIC, 1826 ALC882_FIXUP_INV_DMIC,
1825 ALC882_FIXUP_NO_PRIMARY_HP, 1827 ALC882_FIXUP_NO_PRIMARY_HP,
1826 ALC887_FIXUP_ASUS_BASS, 1828 ALC887_FIXUP_ASUS_BASS,
@@ -2190,6 +2192,12 @@ static const struct hda_fixup alc882_fixups[] = {
2190 .chained = true, 2192 .chained = true,
2191 .chain_id = ALC889_FIXUP_MBP_VREF, 2193 .chain_id = ALC889_FIXUP_MBP_VREF,
2192 }, 2194 },
2195 [ALC889_FIXUP_MP11_VREF] = {
2196 .type = HDA_FIXUP_FUNC,
2197 .v.func = alc889_fixup_mba11_vref,
2198 .chained = true,
2199 .chain_id = ALC885_FIXUP_MACPRO_GPIO,
2200 },
2193 [ALC882_FIXUP_INV_DMIC] = { 2201 [ALC882_FIXUP_INV_DMIC] = {
2194 .type = HDA_FIXUP_FUNC, 2202 .type = HDA_FIXUP_FUNC,
2195 .v.func = alc_fixup_inv_dmic_0x12, 2203 .v.func = alc_fixup_inv_dmic_0x12,
@@ -2253,7 +2261,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
2253 SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF), 2261 SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
2254 SND_PCI_QUIRK(0x106b, 0x00a1, "Macbook", ALC889_FIXUP_MBP_VREF), 2262 SND_PCI_QUIRK(0x106b, 0x00a1, "Macbook", ALC889_FIXUP_MBP_VREF),
2255 SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF), 2263 SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
2256 SND_PCI_QUIRK(0x106b, 0x0c00, "Mac Pro", ALC885_FIXUP_MACPRO_GPIO), 2264 SND_PCI_QUIRK(0x106b, 0x0c00, "Mac Pro", ALC889_FIXUP_MP11_VREF),
2257 SND_PCI_QUIRK(0x106b, 0x1000, "iMac 24", ALC885_FIXUP_MACPRO_GPIO), 2265 SND_PCI_QUIRK(0x106b, 0x1000, "iMac 24", ALC885_FIXUP_MACPRO_GPIO),
2258 SND_PCI_QUIRK(0x106b, 0x2800, "AppleTV", ALC885_FIXUP_MACPRO_GPIO), 2266 SND_PCI_QUIRK(0x106b, 0x2800, "AppleTV", ALC885_FIXUP_MACPRO_GPIO),
2259 SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC889_FIXUP_MBP_VREF), 2267 SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC889_FIXUP_MBP_VREF),
@@ -3211,7 +3219,8 @@ static void alc269_fixup_hp_gpio_mute_hook(void *private_data, int enabled)
3211 3219
3212/* turn on/off mic-mute LED per capture hook */ 3220/* turn on/off mic-mute LED per capture hook */
3213static void alc269_fixup_hp_gpio_mic_mute_hook(struct hda_codec *codec, 3221static void alc269_fixup_hp_gpio_mic_mute_hook(struct hda_codec *codec,
3214 struct snd_ctl_elem_value *ucontrol) 3222 struct snd_kcontrol *kcontrol,
3223 struct snd_ctl_elem_value *ucontrol)
3215{ 3224{
3216 struct alc_spec *spec = codec->spec; 3225 struct alc_spec *spec = codec->spec;
3217 unsigned int oldval = spec->gpio_led; 3226 unsigned int oldval = spec->gpio_led;
@@ -3521,7 +3530,8 @@ static void alc_update_headset_mode(struct hda_codec *codec)
3521} 3530}
3522 3531
3523static void alc_update_headset_mode_hook(struct hda_codec *codec, 3532static void alc_update_headset_mode_hook(struct hda_codec *codec,
3524 struct snd_ctl_elem_value *ucontrol) 3533 struct snd_kcontrol *kcontrol,
3534 struct snd_ctl_elem_value *ucontrol)
3525{ 3535{
3526 alc_update_headset_mode(codec); 3536 alc_update_headset_mode(codec);
3527} 3537}
@@ -4322,6 +4332,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4322 SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), 4332 SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
4323 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), 4333 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
4324 SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101), 4334 SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101),
4335 SND_PCI_QUIRK(0x104d, 0x90b5, "Sony VAIO Pro 11", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
4325 SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE), 4336 SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
4326 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), 4337 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
4327 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 4338 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
@@ -5096,6 +5107,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
5096 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), 5107 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
5097 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), 5108 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5098 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), 5109 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5110 SND_PCI_QUIRK(0x1028, 0x060a, "Dell XPS 13", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5099 SND_PCI_QUIRK(0x1028, 0x0623, "Dell", ALC668_FIXUP_AUTO_MUTE), 5111 SND_PCI_QUIRK(0x1028, 0x0623, "Dell", ALC668_FIXUP_AUTO_MUTE),
5100 SND_PCI_QUIRK(0x1028, 0x0624, "Dell", ALC668_FIXUP_AUTO_MUTE), 5112 SND_PCI_QUIRK(0x1028, 0x0624, "Dell", ALC668_FIXUP_AUTO_MUTE),
5101 SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), 5113 SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 6998cf29b9bc..7311badf6a94 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -194,7 +194,7 @@ struct sigmatel_spec {
194 int default_polarity; 194 int default_polarity;
195 195
196 unsigned int mic_mute_led_gpio; /* capture mute LED GPIO */ 196 unsigned int mic_mute_led_gpio; /* capture mute LED GPIO */
197 bool mic_mute_led_on; /* current mic mute state */ 197 unsigned int mic_enabled; /* current mic mute state (bitmask) */
198 198
199 /* stream */ 199 /* stream */
200 unsigned int stream_delay; 200 unsigned int stream_delay;
@@ -324,19 +324,26 @@ static void stac_gpio_set(struct hda_codec *codec, unsigned int mask,
324 324
325/* hook for controlling mic-mute LED GPIO */ 325/* hook for controlling mic-mute LED GPIO */
326static void stac_capture_led_hook(struct hda_codec *codec, 326static void stac_capture_led_hook(struct hda_codec *codec,
327 struct snd_ctl_elem_value *ucontrol) 327 struct snd_kcontrol *kcontrol,
328 struct snd_ctl_elem_value *ucontrol)
328{ 329{
329 struct sigmatel_spec *spec = codec->spec; 330 struct sigmatel_spec *spec = codec->spec;
330 bool mute; 331 unsigned int mask;
332 bool cur_mute, prev_mute;
331 333
332 if (!ucontrol) 334 if (!kcontrol || !ucontrol)
333 return; 335 return;
334 336
335 mute = !(ucontrol->value.integer.value[0] || 337 mask = 1U << snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
336 ucontrol->value.integer.value[1]); 338 prev_mute = !spec->mic_enabled;
337 if (spec->mic_mute_led_on != mute) { 339 if (ucontrol->value.integer.value[0] ||
338 spec->mic_mute_led_on = mute; 340 ucontrol->value.integer.value[1])
339 if (mute) 341 spec->mic_enabled |= mask;
342 else
343 spec->mic_enabled &= ~mask;
344 cur_mute = !spec->mic_enabled;
345 if (cur_mute != prev_mute) {
346 if (cur_mute)
340 spec->gpio_data |= spec->mic_mute_led_gpio; 347 spec->gpio_data |= spec->mic_mute_led_gpio;
341 else 348 else
342 spec->gpio_data &= ~spec->mic_mute_led_gpio; 349 spec->gpio_data &= ~spec->mic_mute_led_gpio;
@@ -4462,7 +4469,7 @@ static void stac_setup_gpio(struct hda_codec *codec)
4462 if (spec->mic_mute_led_gpio) { 4469 if (spec->mic_mute_led_gpio) {
4463 spec->gpio_mask |= spec->mic_mute_led_gpio; 4470 spec->gpio_mask |= spec->mic_mute_led_gpio;
4464 spec->gpio_dir |= spec->mic_mute_led_gpio; 4471 spec->gpio_dir |= spec->mic_mute_led_gpio;
4465 spec->mic_mute_led_on = true; 4472 spec->mic_enabled = 0;
4466 spec->gpio_data |= spec->mic_mute_led_gpio; 4473 spec->gpio_data |= spec->mic_mute_led_gpio;
4467 4474
4468 spec->gen.cap_sync_hook = stac_capture_led_hook; 4475 spec->gen.cap_sync_hook = stac_capture_led_hook;
diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c
index 5799fbc24c28..8fe3b8c18ed4 100644
--- a/sound/pci/hda/thinkpad_helper.c
+++ b/sound/pci/hda/thinkpad_helper.c
@@ -39,6 +39,7 @@ static void update_tpacpi_mute_led(void *private_data, int enabled)
39} 39}
40 40
41static void update_tpacpi_micmute_led(struct hda_codec *codec, 41static void update_tpacpi_micmute_led(struct hda_codec *codec,
42 struct snd_kcontrol *kcontrol,
42 struct snd_ctl_elem_value *ucontrol) 43 struct snd_ctl_elem_value *ucontrol)
43{ 44{
44 if (!ucontrol || !led_set_func) 45 if (!ucontrol || !led_set_func)
diff --git a/sound/usb/Kconfig b/sound/usb/Kconfig
index de9408b83f75..e05a86b7c0da 100644
--- a/sound/usb/Kconfig
+++ b/sound/usb/Kconfig
@@ -14,6 +14,7 @@ config SND_USB_AUDIO
14 select SND_HWDEP 14 select SND_HWDEP
15 select SND_RAWMIDI 15 select SND_RAWMIDI
16 select SND_PCM 16 select SND_PCM
17 select BITREVERSE
17 help 18 help
18 Say Y here to include support for USB audio and USB MIDI 19 Say Y here to include support for USB audio and USB MIDI
19 devices. 20 devices.
diff --git a/tools/perf/builtin-buildid-cache.c b/tools/perf/builtin-buildid-cache.c
index cfede86161d8..b22dbb16f877 100644
--- a/tools/perf/builtin-buildid-cache.c
+++ b/tools/perf/builtin-buildid-cache.c
@@ -63,11 +63,35 @@ static int build_id_cache__kcore_dir(char *dir, size_t sz)
63 return 0; 63 return 0;
64} 64}
65 65
66static bool same_kallsyms_reloc(const char *from_dir, char *to_dir)
67{
68 char from[PATH_MAX];
69 char to[PATH_MAX];
70 const char *name;
71 u64 addr1 = 0, addr2 = 0;
72 int i;
73
74 scnprintf(from, sizeof(from), "%s/kallsyms", from_dir);
75 scnprintf(to, sizeof(to), "%s/kallsyms", to_dir);
76
77 for (i = 0; (name = ref_reloc_sym_names[i]) != NULL; i++) {
78 addr1 = kallsyms__get_function_start(from, name);
79 if (addr1)
80 break;
81 }
82
83 if (name)
84 addr2 = kallsyms__get_function_start(to, name);
85
86 return addr1 == addr2;
87}
88
66static int build_id_cache__kcore_existing(const char *from_dir, char *to_dir, 89static int build_id_cache__kcore_existing(const char *from_dir, char *to_dir,
67 size_t to_dir_sz) 90 size_t to_dir_sz)
68{ 91{
69 char from[PATH_MAX]; 92 char from[PATH_MAX];
70 char to[PATH_MAX]; 93 char to[PATH_MAX];
94 char to_subdir[PATH_MAX];
71 struct dirent *dent; 95 struct dirent *dent;
72 int ret = -1; 96 int ret = -1;
73 DIR *d; 97 DIR *d;
@@ -86,10 +110,11 @@ static int build_id_cache__kcore_existing(const char *from_dir, char *to_dir,
86 continue; 110 continue;
87 scnprintf(to, sizeof(to), "%s/%s/modules", to_dir, 111 scnprintf(to, sizeof(to), "%s/%s/modules", to_dir,
88 dent->d_name); 112 dent->d_name);
89 if (!compare_proc_modules(from, to)) { 113 scnprintf(to_subdir, sizeof(to_subdir), "%s/%s",
90 scnprintf(to, sizeof(to), "%s/%s", to_dir, 114 to_dir, dent->d_name);
91 dent->d_name); 115 if (!compare_proc_modules(from, to) &&
92 strlcpy(to_dir, to, to_dir_sz); 116 same_kallsyms_reloc(from_dir, to_subdir)) {
117 strlcpy(to_dir, to_subdir, to_dir_sz);
93 ret = 0; 118 ret = 0;
94 break; 119 break;
95 } 120 }
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 3c394bf16fa8..af47531b82ec 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -287,10 +287,7 @@ static void perf_event__synthesize_guest_os(struct machine *machine, void *data)
287 * have no _text sometimes. 287 * have no _text sometimes.
288 */ 288 */
289 err = perf_event__synthesize_kernel_mmap(tool, process_synthesized_event, 289 err = perf_event__synthesize_kernel_mmap(tool, process_synthesized_event,
290 machine, "_text"); 290 machine);
291 if (err < 0)
292 err = perf_event__synthesize_kernel_mmap(tool, process_synthesized_event,
293 machine, "_stext");
294 if (err < 0) 291 if (err < 0)
295 pr_err("Couldn't record guest kernel [%d]'s reference" 292 pr_err("Couldn't record guest kernel [%d]'s reference"
296 " relocation symbol.\n", machine->pid); 293 " relocation symbol.\n", machine->pid);
@@ -457,10 +454,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
457 } 454 }
458 455
459 err = perf_event__synthesize_kernel_mmap(tool, process_synthesized_event, 456 err = perf_event__synthesize_kernel_mmap(tool, process_synthesized_event,
460 machine, "_text"); 457 machine);
461 if (err < 0)
462 err = perf_event__synthesize_kernel_mmap(tool, process_synthesized_event,
463 machine, "_stext");
464 if (err < 0) 458 if (err < 0)
465 pr_err("Couldn't record kernel reference relocation symbol\n" 459 pr_err("Couldn't record kernel reference relocation symbol\n"
466 "Symbol resolution may be skewed if relocation was used (e.g. kexec).\n" 460 "Symbol resolution may be skewed if relocation was used (e.g. kexec).\n"
diff --git a/tools/perf/design.txt b/tools/perf/design.txt
index 67e5d0cace85..63a0e6f04a01 100644
--- a/tools/perf/design.txt
+++ b/tools/perf/design.txt
@@ -454,7 +454,6 @@ So to start with, in order to add HAVE_PERF_EVENTS to your Kconfig, you
454will need at least this: 454will need at least this:
455 - asm/perf_event.h - a basic stub will suffice at first 455 - asm/perf_event.h - a basic stub will suffice at first
456 - support for atomic64 types (and associated helper functions) 456 - support for atomic64 types (and associated helper functions)
457 - set_perf_event_pending() implemented
458 457
459If your architecture does have hardware capabilities, you can override the 458If your architecture does have hardware capabilities, you can override the
460weak stub hw_perf_event_init() to register hardware counters. 459weak stub hw_perf_event_init() to register hardware counters.
diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index 7daa806d9050..e84fa26bc1be 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -100,8 +100,8 @@
100 100
101#ifdef __aarch64__ 101#ifdef __aarch64__
102#define mb() asm volatile("dmb ish" ::: "memory") 102#define mb() asm volatile("dmb ish" ::: "memory")
103#define wmb() asm volatile("dmb ishld" ::: "memory") 103#define wmb() asm volatile("dmb ishst" ::: "memory")
104#define rmb() asm volatile("dmb ishst" ::: "memory") 104#define rmb() asm volatile("dmb ishld" ::: "memory")
105#define cpu_relax() asm volatile("yield" ::: "memory") 105#define cpu_relax() asm volatile("yield" ::: "memory")
106#endif 106#endif
107 107
diff --git a/tools/perf/tests/vmlinux-kallsyms.c b/tools/perf/tests/vmlinux-kallsyms.c
index 2bd13edcbc17..3d9088003a5b 100644
--- a/tools/perf/tests/vmlinux-kallsyms.c
+++ b/tools/perf/tests/vmlinux-kallsyms.c
@@ -26,7 +26,6 @@ int test__vmlinux_matches_kallsyms(void)
26 struct map *kallsyms_map, *vmlinux_map; 26 struct map *kallsyms_map, *vmlinux_map;
27 struct machine kallsyms, vmlinux; 27 struct machine kallsyms, vmlinux;
28 enum map_type type = MAP__FUNCTION; 28 enum map_type type = MAP__FUNCTION;
29 struct ref_reloc_sym ref_reloc_sym = { .name = "_stext", };
30 u64 mem_start, mem_end; 29 u64 mem_start, mem_end;
31 30
32 /* 31 /*
@@ -70,14 +69,6 @@ int test__vmlinux_matches_kallsyms(void)
70 */ 69 */
71 kallsyms_map = machine__kernel_map(&kallsyms, type); 70 kallsyms_map = machine__kernel_map(&kallsyms, type);
72 71
73 sym = map__find_symbol_by_name(kallsyms_map, ref_reloc_sym.name, NULL);
74 if (sym == NULL) {
75 pr_debug("dso__find_symbol_by_name ");
76 goto out;
77 }
78
79 ref_reloc_sym.addr = UM(sym->start);
80
81 /* 72 /*
82 * Step 5: 73 * Step 5:
83 * 74 *
@@ -89,7 +80,6 @@ int test__vmlinux_matches_kallsyms(void)
89 } 80 }
90 81
91 vmlinux_map = machine__kernel_map(&vmlinux, type); 82 vmlinux_map = machine__kernel_map(&vmlinux, type);
92 map__kmap(vmlinux_map)->ref_reloc_sym = &ref_reloc_sym;
93 83
94 /* 84 /*
95 * Step 6: 85 * Step 6:
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index 1fc1c2f04772..b0f3ca850e9e 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -470,23 +470,32 @@ static int find_symbol_cb(void *arg, const char *name, char type,
470 return 1; 470 return 1;
471} 471}
472 472
473u64 kallsyms__get_function_start(const char *kallsyms_filename,
474 const char *symbol_name)
475{
476 struct process_symbol_args args = { .name = symbol_name, };
477
478 if (kallsyms__parse(kallsyms_filename, &args, find_symbol_cb) <= 0)
479 return 0;
480
481 return args.start;
482}
483
473int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, 484int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
474 perf_event__handler_t process, 485 perf_event__handler_t process,
475 struct machine *machine, 486 struct machine *machine)
476 const char *symbol_name)
477{ 487{
478 size_t size; 488 size_t size;
479 const char *filename, *mmap_name; 489 const char *mmap_name;
480 char path[PATH_MAX];
481 char name_buff[PATH_MAX]; 490 char name_buff[PATH_MAX];
482 struct map *map; 491 struct map *map;
492 struct kmap *kmap;
483 int err; 493 int err;
484 /* 494 /*
485 * We should get this from /sys/kernel/sections/.text, but till that is 495 * We should get this from /sys/kernel/sections/.text, but till that is
486 * available use this, and after it is use this as a fallback for older 496 * available use this, and after it is use this as a fallback for older
487 * kernels. 497 * kernels.
488 */ 498 */
489 struct process_symbol_args args = { .name = symbol_name, };
490 union perf_event *event = zalloc((sizeof(event->mmap) + 499 union perf_event *event = zalloc((sizeof(event->mmap) +
491 machine->id_hdr_size)); 500 machine->id_hdr_size));
492 if (event == NULL) { 501 if (event == NULL) {
@@ -502,30 +511,19 @@ int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
502 * see kernel/perf_event.c __perf_event_mmap 511 * see kernel/perf_event.c __perf_event_mmap
503 */ 512 */
504 event->header.misc = PERF_RECORD_MISC_KERNEL; 513 event->header.misc = PERF_RECORD_MISC_KERNEL;
505 filename = "/proc/kallsyms";
506 } else { 514 } else {
507 event->header.misc = PERF_RECORD_MISC_GUEST_KERNEL; 515 event->header.misc = PERF_RECORD_MISC_GUEST_KERNEL;
508 if (machine__is_default_guest(machine))
509 filename = (char *) symbol_conf.default_guest_kallsyms;
510 else {
511 sprintf(path, "%s/proc/kallsyms", machine->root_dir);
512 filename = path;
513 }
514 }
515
516 if (kallsyms__parse(filename, &args, find_symbol_cb) <= 0) {
517 free(event);
518 return -ENOENT;
519 } 516 }
520 517
521 map = machine->vmlinux_maps[MAP__FUNCTION]; 518 map = machine->vmlinux_maps[MAP__FUNCTION];
519 kmap = map__kmap(map);
522 size = snprintf(event->mmap.filename, sizeof(event->mmap.filename), 520 size = snprintf(event->mmap.filename, sizeof(event->mmap.filename),
523 "%s%s", mmap_name, symbol_name) + 1; 521 "%s%s", mmap_name, kmap->ref_reloc_sym->name) + 1;
524 size = PERF_ALIGN(size, sizeof(u64)); 522 size = PERF_ALIGN(size, sizeof(u64));
525 event->mmap.header.type = PERF_RECORD_MMAP; 523 event->mmap.header.type = PERF_RECORD_MMAP;
526 event->mmap.header.size = (sizeof(event->mmap) - 524 event->mmap.header.size = (sizeof(event->mmap) -
527 (sizeof(event->mmap.filename) - size) + machine->id_hdr_size); 525 (sizeof(event->mmap.filename) - size) + machine->id_hdr_size);
528 event->mmap.pgoff = args.start; 526 event->mmap.pgoff = kmap->ref_reloc_sym->addr;
529 event->mmap.start = map->start; 527 event->mmap.start = map->start;
530 event->mmap.len = map->end - event->mmap.start; 528 event->mmap.len = map->end - event->mmap.start;
531 event->mmap.pid = machine->pid; 529 event->mmap.pid = machine->pid;
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
index faf6e219be21..851fa06f4a42 100644
--- a/tools/perf/util/event.h
+++ b/tools/perf/util/event.h
@@ -214,8 +214,7 @@ int perf_event__synthesize_threads(struct perf_tool *tool,
214 struct machine *machine, bool mmap_data); 214 struct machine *machine, bool mmap_data);
215int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, 215int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
216 perf_event__handler_t process, 216 perf_event__handler_t process,
217 struct machine *machine, 217 struct machine *machine);
218 const char *symbol_name);
219 218
220int perf_event__synthesize_modules(struct perf_tool *tool, 219int perf_event__synthesize_modules(struct perf_tool *tool,
221 perf_event__handler_t process, 220 perf_event__handler_t process,
@@ -279,4 +278,7 @@ size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp);
279size_t perf_event__fprintf_task(union perf_event *event, FILE *fp); 278size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
280size_t perf_event__fprintf(union perf_event *event, FILE *fp); 279size_t perf_event__fprintf(union perf_event *event, FILE *fp);
281 280
281u64 kallsyms__get_function_start(const char *kallsyms_filename,
282 const char *symbol_name);
283
282#endif /* __PERF_RECORD_H */ 284#endif /* __PERF_RECORD_H */
diff --git a/tools/perf/util/include/asm/hash.h b/tools/perf/util/include/asm/hash.h
new file mode 100644
index 000000000000..d82b170bb216
--- /dev/null
+++ b/tools/perf/util/include/asm/hash.h
@@ -0,0 +1,6 @@
1#ifndef __ASM_GENERIC_HASH_H
2#define __ASM_GENERIC_HASH_H
3
4/* Stub */
5
6#endif /* __ASM_GENERIC_HASH_H */
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index ded74590b92f..c872991e0f65 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -496,19 +496,22 @@ static int symbol__in_kernel(void *arg, const char *name,
496 return 1; 496 return 1;
497} 497}
498 498
499static void machine__get_kallsyms_filename(struct machine *machine, char *buf,
500 size_t bufsz)
501{
502 if (machine__is_default_guest(machine))
503 scnprintf(buf, bufsz, "%s", symbol_conf.default_guest_kallsyms);
504 else
505 scnprintf(buf, bufsz, "%s/proc/kallsyms", machine->root_dir);
506}
507
499/* Figure out the start address of kernel map from /proc/kallsyms */ 508/* Figure out the start address of kernel map from /proc/kallsyms */
500static u64 machine__get_kernel_start_addr(struct machine *machine) 509static u64 machine__get_kernel_start_addr(struct machine *machine)
501{ 510{
502 const char *filename; 511 char filename[PATH_MAX];
503 char path[PATH_MAX];
504 struct process_args args; 512 struct process_args args;
505 513
506 if (machine__is_default_guest(machine)) 514 machine__get_kallsyms_filename(machine, filename, PATH_MAX);
507 filename = (char *)symbol_conf.default_guest_kallsyms;
508 else {
509 sprintf(path, "%s/proc/kallsyms", machine->root_dir);
510 filename = path;
511 }
512 515
513 if (symbol__restricted_filename(filename, "/proc/kallsyms")) 516 if (symbol__restricted_filename(filename, "/proc/kallsyms"))
514 return 0; 517 return 0;
@@ -829,9 +832,25 @@ static int machine__create_modules(struct machine *machine)
829 return 0; 832 return 0;
830} 833}
831 834
835const char *ref_reloc_sym_names[] = {"_text", "_stext", NULL};
836
832int machine__create_kernel_maps(struct machine *machine) 837int machine__create_kernel_maps(struct machine *machine)
833{ 838{
834 struct dso *kernel = machine__get_kernel(machine); 839 struct dso *kernel = machine__get_kernel(machine);
840 char filename[PATH_MAX];
841 const char *name;
842 u64 addr = 0;
843 int i;
844
845 machine__get_kallsyms_filename(machine, filename, PATH_MAX);
846
847 for (i = 0; (name = ref_reloc_sym_names[i]) != NULL; i++) {
848 addr = kallsyms__get_function_start(filename, name);
849 if (addr)
850 break;
851 }
852 if (!addr)
853 return -1;
835 854
836 if (kernel == NULL || 855 if (kernel == NULL ||
837 __machine__create_kernel_maps(machine, kernel) < 0) 856 __machine__create_kernel_maps(machine, kernel) < 0)
@@ -850,6 +869,13 @@ int machine__create_kernel_maps(struct machine *machine)
850 * Now that we have all the maps created, just set the ->end of them: 869 * Now that we have all the maps created, just set the ->end of them:
851 */ 870 */
852 map_groups__fixup_end(&machine->kmaps); 871 map_groups__fixup_end(&machine->kmaps);
872
873 if (maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name,
874 addr)) {
875 machine__destroy_kernel_maps(machine);
876 return -1;
877 }
878
853 return 0; 879 return 0;
854} 880}
855 881
diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h
index 477133015440..f77e91e483dc 100644
--- a/tools/perf/util/machine.h
+++ b/tools/perf/util/machine.h
@@ -18,6 +18,8 @@ union perf_event;
18#define HOST_KERNEL_ID (-1) 18#define HOST_KERNEL_ID (-1)
19#define DEFAULT_GUEST_KERNEL_ID (0) 19#define DEFAULT_GUEST_KERNEL_ID (0)
20 20
21extern const char *ref_reloc_sym_names[];
22
21struct machine { 23struct machine {
22 struct rb_node rb_node; 24 struct rb_node rb_node;
23 pid_t pid; 25 pid_t pid;
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index 3b97513f0e77..39cd2d0faff6 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -39,6 +39,7 @@ void map__init(struct map *map, enum map_type type,
39 map->start = start; 39 map->start = start;
40 map->end = end; 40 map->end = end;
41 map->pgoff = pgoff; 41 map->pgoff = pgoff;
42 map->reloc = 0;
42 map->dso = dso; 43 map->dso = dso;
43 map->map_ip = map__map_ip; 44 map->map_ip = map__map_ip;
44 map->unmap_ip = map__unmap_ip; 45 map->unmap_ip = map__unmap_ip;
@@ -288,7 +289,7 @@ u64 map__rip_2objdump(struct map *map, u64 rip)
288 if (map->dso->rel) 289 if (map->dso->rel)
289 return rip - map->pgoff; 290 return rip - map->pgoff;
290 291
291 return map->unmap_ip(map, rip); 292 return map->unmap_ip(map, rip) - map->reloc;
292} 293}
293 294
294/** 295/**
@@ -311,7 +312,7 @@ u64 map__objdump_2mem(struct map *map, u64 ip)
311 if (map->dso->rel) 312 if (map->dso->rel)
312 return map->unmap_ip(map, ip + map->pgoff); 313 return map->unmap_ip(map, ip + map->pgoff);
313 314
314 return ip; 315 return ip + map->reloc;
315} 316}
316 317
317void map_groups__init(struct map_groups *mg) 318void map_groups__init(struct map_groups *mg)
diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h
index 18068c6b71c1..257e513205ce 100644
--- a/tools/perf/util/map.h
+++ b/tools/perf/util/map.h
@@ -36,6 +36,7 @@ struct map {
36 bool erange_warned; 36 bool erange_warned;
37 u32 priv; 37 u32 priv;
38 u64 pgoff; 38 u64 pgoff;
39 u64 reloc;
39 u32 maj, min; /* only valid for MMAP2 record */ 40 u32 maj, min; /* only valid for MMAP2 record */
40 u64 ino; /* only valid for MMAP2 record */ 41 u64 ino; /* only valid for MMAP2 record */
41 u64 ino_generation;/* only valid for MMAP2 record */ 42 u64 ino_generation;/* only valid for MMAP2 record */
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index 759456728703..3e9f336740fa 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -751,6 +751,8 @@ int dso__load_sym(struct dso *dso, struct map *map,
751 if (strcmp(elf_name, kmap->ref_reloc_sym->name)) 751 if (strcmp(elf_name, kmap->ref_reloc_sym->name))
752 continue; 752 continue;
753 kmap->ref_reloc_sym->unrelocated_addr = sym.st_value; 753 kmap->ref_reloc_sym->unrelocated_addr = sym.st_value;
754 map->reloc = kmap->ref_reloc_sym->addr -
755 kmap->ref_reloc_sym->unrelocated_addr;
754 break; 756 break;
755 } 757 }
756 } 758 }
@@ -922,6 +924,7 @@ int dso__load_sym(struct dso *dso, struct map *map,
922 (u64)shdr.sh_offset); 924 (u64)shdr.sh_offset);
923 sym.st_value -= shdr.sh_addr - shdr.sh_offset; 925 sym.st_value -= shdr.sh_addr - shdr.sh_offset;
924 } 926 }
927new_symbol:
925 /* 928 /*
926 * We need to figure out if the object was created from C++ sources 929 * We need to figure out if the object was created from C++ sources
927 * DWARF DW_compile_unit has this, but we don't always have access 930 * DWARF DW_compile_unit has this, but we don't always have access
@@ -933,7 +936,6 @@ int dso__load_sym(struct dso *dso, struct map *map,
933 if (demangled != NULL) 936 if (demangled != NULL)
934 elf_name = demangled; 937 elf_name = demangled;
935 } 938 }
936new_symbol:
937 f = symbol__new(sym.st_value, sym.st_size, 939 f = symbol__new(sym.st_value, sym.st_size,
938 GELF_ST_BIND(sym.st_info), elf_name); 940 GELF_ST_BIND(sym.st_info), elf_name);
939 free(demangled); 941 free(demangled);
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 39ce9adbaaf0..a9d758a3b371 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -627,7 +627,7 @@ static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map,
627 * kernel range is broken in several maps, named [kernel].N, as we don't have 627 * kernel range is broken in several maps, named [kernel].N, as we don't have
628 * the original ELF section names vmlinux have. 628 * the original ELF section names vmlinux have.
629 */ 629 */
630static int dso__split_kallsyms(struct dso *dso, struct map *map, 630static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta,
631 symbol_filter_t filter) 631 symbol_filter_t filter)
632{ 632{
633 struct map_groups *kmaps = map__kmap(map)->kmaps; 633 struct map_groups *kmaps = map__kmap(map)->kmaps;
@@ -692,6 +692,12 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map,
692 char dso_name[PATH_MAX]; 692 char dso_name[PATH_MAX];
693 struct dso *ndso; 693 struct dso *ndso;
694 694
695 if (delta) {
696 /* Kernel was relocated at boot time */
697 pos->start -= delta;
698 pos->end -= delta;
699 }
700
695 if (count == 0) { 701 if (count == 0) {
696 curr_map = map; 702 curr_map = map;
697 goto filter_symbol; 703 goto filter_symbol;
@@ -721,6 +727,10 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map,
721 curr_map->map_ip = curr_map->unmap_ip = identity__map_ip; 727 curr_map->map_ip = curr_map->unmap_ip = identity__map_ip;
722 map_groups__insert(kmaps, curr_map); 728 map_groups__insert(kmaps, curr_map);
723 ++kernel_range; 729 ++kernel_range;
730 } else if (delta) {
731 /* Kernel was relocated at boot time */
732 pos->start -= delta;
733 pos->end -= delta;
724 } 734 }
725filter_symbol: 735filter_symbol:
726 if (filter && filter(curr_map, pos)) { 736 if (filter && filter(curr_map, pos)) {
@@ -976,6 +986,23 @@ static int validate_kcore_modules(const char *kallsyms_filename,
976 return 0; 986 return 0;
977} 987}
978 988
989static int validate_kcore_addresses(const char *kallsyms_filename,
990 struct map *map)
991{
992 struct kmap *kmap = map__kmap(map);
993
994 if (kmap->ref_reloc_sym && kmap->ref_reloc_sym->name) {
995 u64 start;
996
997 start = kallsyms__get_function_start(kallsyms_filename,
998 kmap->ref_reloc_sym->name);
999 if (start != kmap->ref_reloc_sym->addr)
1000 return -EINVAL;
1001 }
1002
1003 return validate_kcore_modules(kallsyms_filename, map);
1004}
1005
979struct kcore_mapfn_data { 1006struct kcore_mapfn_data {
980 struct dso *dso; 1007 struct dso *dso;
981 enum map_type type; 1008 enum map_type type;
@@ -1019,8 +1046,8 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
1019 kallsyms_filename)) 1046 kallsyms_filename))
1020 return -EINVAL; 1047 return -EINVAL;
1021 1048
1022 /* All modules must be present at their original addresses */ 1049 /* Modules and kernel must be present at their original addresses */
1023 if (validate_kcore_modules(kallsyms_filename, map)) 1050 if (validate_kcore_addresses(kallsyms_filename, map))
1024 return -EINVAL; 1051 return -EINVAL;
1025 1052
1026 md.dso = dso; 1053 md.dso = dso;
@@ -1113,15 +1140,41 @@ out_err:
1113 return -EINVAL; 1140 return -EINVAL;
1114} 1141}
1115 1142
1143/*
1144 * If the kernel is relocated at boot time, kallsyms won't match. Compute the
1145 * delta based on the relocation reference symbol.
1146 */
1147static int kallsyms__delta(struct map *map, const char *filename, u64 *delta)
1148{
1149 struct kmap *kmap = map__kmap(map);
1150 u64 addr;
1151
1152 if (!kmap->ref_reloc_sym || !kmap->ref_reloc_sym->name)
1153 return 0;
1154
1155 addr = kallsyms__get_function_start(filename,
1156 kmap->ref_reloc_sym->name);
1157 if (!addr)
1158 return -1;
1159
1160 *delta = addr - kmap->ref_reloc_sym->addr;
1161 return 0;
1162}
1163
1116int dso__load_kallsyms(struct dso *dso, const char *filename, 1164int dso__load_kallsyms(struct dso *dso, const char *filename,
1117 struct map *map, symbol_filter_t filter) 1165 struct map *map, symbol_filter_t filter)
1118{ 1166{
1167 u64 delta = 0;
1168
1119 if (symbol__restricted_filename(filename, "/proc/kallsyms")) 1169 if (symbol__restricted_filename(filename, "/proc/kallsyms"))
1120 return -1; 1170 return -1;
1121 1171
1122 if (dso__load_all_kallsyms(dso, filename, map) < 0) 1172 if (dso__load_all_kallsyms(dso, filename, map) < 0)
1123 return -1; 1173 return -1;
1124 1174
1175 if (kallsyms__delta(map, filename, &delta))
1176 return -1;
1177
1125 symbols__fixup_duplicate(&dso->symbols[map->type]); 1178 symbols__fixup_duplicate(&dso->symbols[map->type]);
1126 symbols__fixup_end(&dso->symbols[map->type]); 1179 symbols__fixup_end(&dso->symbols[map->type]);
1127 1180
@@ -1133,7 +1186,7 @@ int dso__load_kallsyms(struct dso *dso, const char *filename,
1133 if (!dso__load_kcore(dso, map, filename)) 1186 if (!dso__load_kcore(dso, map, filename))
1134 return dso__split_kallsyms_for_kcore(dso, map, filter); 1187 return dso__split_kallsyms_for_kcore(dso, map, filter);
1135 else 1188 else
1136 return dso__split_kallsyms(dso, map, filter); 1189 return dso__split_kallsyms(dso, map, delta, filter);
1137} 1190}
1138 1191
1139static int dso__load_perf_map(struct dso *dso, struct map *map, 1192static int dso__load_perf_map(struct dso *dso, struct map *map,
@@ -1424,7 +1477,7 @@ static int find_matching_kcore(struct map *map, char *dir, size_t dir_sz)
1424 continue; 1477 continue;
1425 scnprintf(kallsyms_filename, sizeof(kallsyms_filename), 1478 scnprintf(kallsyms_filename, sizeof(kallsyms_filename),
1426 "%s/%s/kallsyms", dir, dent->d_name); 1479 "%s/%s/kallsyms", dir, dent->d_name);
1427 if (!validate_kcore_modules(kallsyms_filename, map)) { 1480 if (!validate_kcore_addresses(kallsyms_filename, map)) {
1428 strlcpy(dir, kallsyms_filename, dir_sz); 1481 strlcpy(dir, kallsyms_filename, dir_sz);
1429 ret = 0; 1482 ret = 0;
1430 break; 1483 break;
@@ -1479,7 +1532,7 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
1479 if (fd != -1) { 1532 if (fd != -1) {
1480 close(fd); 1533 close(fd);
1481 /* If module maps match go with /proc/kallsyms */ 1534 /* If module maps match go with /proc/kallsyms */
1482 if (!validate_kcore_modules("/proc/kallsyms", map)) 1535 if (!validate_kcore_addresses("/proc/kallsyms", map))
1483 goto proc_kallsyms; 1536 goto proc_kallsyms;
1484 } 1537 }
1485 1538
diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
index be456ce264d0..8ca405cd7c1a 100644
--- a/virt/kvm/arm/vgic.c
+++ b/virt/kvm/arm/vgic.c
@@ -24,6 +24,7 @@
24#include <linux/of.h> 24#include <linux/of.h>
25#include <linux/of_address.h> 25#include <linux/of_address.h>
26#include <linux/of_irq.h> 26#include <linux/of_irq.h>
27#include <linux/uaccess.h>
27 28
28#include <linux/irqchip/arm-gic.h> 29#include <linux/irqchip/arm-gic.h>
29 30
diff --git a/virt/kvm/coalesced_mmio.c b/virt/kvm/coalesced_mmio.c
index 88b2fe3ddf42..00d86427af0f 100644
--- a/virt/kvm/coalesced_mmio.c
+++ b/virt/kvm/coalesced_mmio.c
@@ -154,17 +154,13 @@ int kvm_vm_ioctl_register_coalesced_mmio(struct kvm *kvm,
154 list_add_tail(&dev->list, &kvm->coalesced_zones); 154 list_add_tail(&dev->list, &kvm->coalesced_zones);
155 mutex_unlock(&kvm->slots_lock); 155 mutex_unlock(&kvm->slots_lock);
156 156
157 return ret; 157 return 0;
158 158
159out_free_dev: 159out_free_dev:
160 mutex_unlock(&kvm->slots_lock); 160 mutex_unlock(&kvm->slots_lock);
161
162 kfree(dev); 161 kfree(dev);
163 162
164 if (dev == NULL) 163 return ret;
165 return -ENXIO;
166
167 return 0;
168} 164}
169 165
170int kvm_vm_ioctl_unregister_coalesced_mmio(struct kvm *kvm, 166int kvm_vm_ioctl_unregister_coalesced_mmio(struct kvm *kvm,