Merge tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Jul 2013 20:43:38 +0000 (13:43 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Jul 2013 20:43:38 +0000 (13:43 -0700)
Pull ARM SoC specific changes from Arnd Bergmann:
 "These changes are all to SoC-specific code, a total of 33 branches on
  17 platforms were pulled into this.  Like last time, Renesas sh-mobile
  is now the platform with the most changes, followed by OMAP and
  EXYNOS.

  Two new platforms, TI Keystone and Rockchips RK3xxx are added in this
  branch, both containing almost no platform specific code at all, since
  they are using generic subsystem interfaces for clocks, pinctrl,
  interrupts etc.  The device drivers are getting merged through the
  respective subsystem maintainer trees.

  One more SoC (u300) is now multiplatform capable and several others
  (shmobile, exynos, msm, integrator, kirkwood, clps711x) are moving
  towards that goal with this series but need more work.

  Also noteworthy is the work on PCI here, which is traditionally part
  of the SoC specific code.  With the changes done by Thomas Petazzoni,
  we can now more easily have PCI host controller drivers as loadable
  modules and keep them separate from the platform code in
  drivers/pci/host.  This has already led to the discovery that three
  platforms (exynos, spear and imx) are actually using an identical PCIe
  host controller and will be able to share a driver once support for
  spear and imx is added."

* tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (480 commits)
  ARM: integrator: let pciv3 use mem/premem from device tree
  ARM: integrator: set local side PCI addresses right
  ARM: dts: Add pcie controller node for exynos5440-ssdk5440
  ARM: dts: Add pcie controller node for Samsung EXYNOS5440 SoC
  ARM: EXYNOS: Enable PCIe support for Exynos5440
  pci: Add PCIe driver for Samsung Exynos
  ARM: OMAP5: voltagedomain data: remove temporary OMAP4 voltage data
  ARM: keystone: Move CPU bringup code to dedicated asm file
  ARM: multiplatform: always pick one CPU type
  ARM: imx: select syscon for IMX6SL
  ARM: keystone: select ARM_ERRATA_798181 only for SMP
  ARM: imx: Synertronixx scb9328 needs to select SOC_IMX1
  ARM: OMAP2+: AM43x: resolve SMP related build error
  dmaengine: edma: enable build for AM33XX
  ARM: edma: Add EDMA crossbar event mux support
  ARM: edma: Add DT and runtime PM support to the private EDMA API
  dmaengine: edma: Add TI EDMA device tree binding
  arm: add basic support for Rockchip RK3066a boards
  arm: add debug uarts for rockchip rk29xx and rk3xxx series
  arm: Add basic clocks for Rockchip rk3066a SoCs
  ...

485 files changed:
Documentation/arm/sunxi/README
Documentation/devicetree/bindings/arm/cci.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/keystone/keystone.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/rtsm-dcscb.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/ste-u300.txt [new file with mode: 0644]
Documentation/devicetree/bindings/clock/imx5-clock.txt
Documentation/devicetree/bindings/clock/imx6q-clock.txt
Documentation/devicetree/bindings/clock/imx6sl-clock.txt [new file with mode: 0644]
Documentation/devicetree/bindings/clock/ste-u300-syscon-clock.txt [new file with mode: 0644]
Documentation/devicetree/bindings/clock/vf610-clock.txt [new file with mode: 0644]
Documentation/devicetree/bindings/clock/zynq-7000.txt
Documentation/devicetree/bindings/dma/ste-coh901318.txt [new file with mode: 0644]
Documentation/devicetree/bindings/dma/ti-edma.txt [new file with mode: 0644]
Documentation/devicetree/bindings/gpio/gpio-clps711x.txt [new file with mode: 0644]
Documentation/devicetree/bindings/gpio/gpio-stericsson-coh901.txt [new file with mode: 0644]
Documentation/devicetree/bindings/i2c/i2c-st-ddci2c.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pci/designware-pcie.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pci/mvebu-pci.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pci/pci.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pci/v3-v360epc-pci.txt [new file with mode: 0644]
Documentation/devicetree/bindings/rtc/dw-apb.txt
Documentation/devicetree/bindings/timer/stericsson-u300-apptimer.txt [new file with mode: 0644]
Documentation/devicetree/bindings/vendor-prefixes.txt
Documentation/devicetree/bindings/watchdog/stericsson-coh901327.txt [new file with mode: 0644]
arch/arm/Kconfig
arch/arm/Kconfig-nommu
arch/arm/Kconfig.debug
arch/arm/Makefile
arch/arm/boot/compressed/head-shmobile.S
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/exynos5440-ssdk5440.dts
arch/arm/boot/dts/exynos5440.dtsi
arch/arm/boot/dts/integratorap.dts
arch/arm/boot/dts/keystone.dts [new file with mode: 0644]
arch/arm/boot/dts/kirkwood-6281.dtsi
arch/arm/boot/dts/kirkwood-6282.dtsi
arch/arm/boot/dts/kirkwood-db-88f6281.dts [new file with mode: 0644]
arch/arm/boot/dts/kirkwood-db-88f6282.dts [new file with mode: 0644]
arch/arm/boot/dts/kirkwood-db.dtsi [new file with mode: 0644]
arch/arm/boot/dts/kirkwood-iconnect.dts
arch/arm/boot/dts/kirkwood-mplcec4.dts
arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts
arch/arm/boot/dts/kirkwood-nsa310.dts
arch/arm/boot/dts/kirkwood-ts219-6281.dts
arch/arm/boot/dts/kirkwood-ts219-6282.dts
arch/arm/boot/dts/kirkwood-ts219.dtsi
arch/arm/boot/dts/kirkwood.dtsi
arch/arm/boot/dts/rk3066a-clocks.dtsi [new file with mode: 0644]
arch/arm/boot/dts/rk3066a.dtsi [new file with mode: 0644]
arch/arm/boot/dts/ste-u300.dts [new file with mode: 0644]
arch/arm/boot/dts/zynq-7000.dtsi
arch/arm/boot/dts/zynq-zc702.dts
arch/arm/common/Kconfig
arch/arm/common/Makefile
arch/arm/common/edma.c [new file with mode: 0644]
arch/arm/configs/ap4evb_defconfig [deleted file]
arch/arm/configs/bonito_defconfig [deleted file]
arch/arm/configs/clps711x_defconfig
arch/arm/configs/exynos_defconfig
arch/arm/configs/imx_v6_v7_defconfig
arch/arm/configs/keystone_defconfig [new file with mode: 0644]
arch/arm/configs/kirkwood_defconfig
arch/arm/configs/multi_v7_defconfig
arch/arm/configs/mvebu_defconfig
arch/arm/configs/u300_defconfig
arch/arm/include/asm/assembler.h
arch/arm/include/asm/cp15.h
arch/arm/include/asm/cputype.h
arch/arm/include/asm/glue-cache.h
arch/arm/include/asm/glue-df.h
arch/arm/include/asm/glue-proc.h
arch/arm/include/asm/hardware/pci_v3.h [deleted file]
arch/arm/include/asm/irqflags.h
arch/arm/include/asm/mach/arch.h
arch/arm/include/asm/mach/pci.h
arch/arm/include/asm/psci.h
arch/arm/include/asm/ptrace.h
arch/arm/include/asm/system_info.h
arch/arm/include/asm/v7m.h [new file with mode: 0644]
arch/arm/include/debug/imx-uart.h
arch/arm/include/debug/keystone.S [new file with mode: 0644]
arch/arm/include/debug/mvebu.S
arch/arm/include/debug/rockchip.S [new file with mode: 0644]
arch/arm/include/debug/u300.S [new file with mode: 0644]
arch/arm/include/uapi/asm/ptrace.h
arch/arm/kernel/Makefile
arch/arm/kernel/bios32.c
arch/arm/kernel/entry-common.S
arch/arm/kernel/entry-header.S
arch/arm/kernel/entry-v7m.S [new file with mode: 0644]
arch/arm/kernel/head-nommu.S
arch/arm/kernel/psci.c
arch/arm/kernel/psci_smp.c [new file with mode: 0644]
arch/arm/kernel/setup.c
arch/arm/kernel/traps.c
arch/arm/mach-clps711x/Kconfig
arch/arm/mach-clps711x/Makefile
arch/arm/mach-clps711x/board-autcpu12.c
arch/arm/mach-clps711x/board-cdb89712.c
arch/arm/mach-clps711x/board-clep7312.c
arch/arm/mach-clps711x/board-edb7211.c
arch/arm/mach-clps711x/board-fortunet.c
arch/arm/mach-clps711x/board-p720t.c
arch/arm/mach-clps711x/common.c
arch/arm/mach-clps711x/common.h
arch/arm/mach-clps711x/devices.c [new file with mode: 0644]
arch/arm/mach-clps711x/devices.h [new file with mode: 0644]
arch/arm/mach-clps711x/include/mach/autcpu12.h [deleted file]
arch/arm/mach-clps711x/include/mach/clps711x.h
arch/arm/mach-clps711x/include/mach/hardware.h
arch/arm/mach-clps711x/include/mach/memory.h [deleted file]
arch/arm/mach-clps711x/include/mach/syspld.h [deleted file]
arch/arm/mach-davinci/Makefile
arch/arm/mach-davinci/board-tnetv107x-evm.c
arch/arm/mach-davinci/davinci.h
arch/arm/mach-davinci/devices-da8xx.c
arch/arm/mach-davinci/devices-tnetv107x.c
arch/arm/mach-davinci/devices.c
arch/arm/mach-davinci/dm355.c
arch/arm/mach-davinci/dm365.c
arch/arm/mach-davinci/dm644x.c
arch/arm/mach-davinci/dm646x.c
arch/arm/mach-davinci/dma.c [deleted file]
arch/arm/mach-davinci/include/mach/cp_intc.h
arch/arm/mach-davinci/include/mach/da8xx.h
arch/arm/mach-davinci/include/mach/edma.h [deleted file]
arch/arm/mach-davinci/include/mach/tnetv107x.h
arch/arm/mach-dove/Kconfig
arch/arm/mach-dove/board-dt.c
arch/arm/mach-dove/common.c
arch/arm/mach-exynos/Kconfig
arch/arm/mach-exynos/Makefile
arch/arm/mach-exynos/common.c
arch/arm/mach-exynos/common.h
arch/arm/mach-exynos/dev-ahci.c [deleted file]
arch/arm/mach-exynos/dev-audio.c [deleted file]
arch/arm/mach-exynos/dev-ohci.c [deleted file]
arch/arm/mach-exynos/dev-uart.c [deleted file]
arch/arm/mach-exynos/dma.c [deleted file]
arch/arm/mach-exynos/firmware.c
arch/arm/mach-exynos/include/mach/gpio.h [deleted file]
arch/arm/mach-exynos/include/mach/irqs.h [deleted file]
arch/arm/mach-exynos/include/mach/map.h
arch/arm/mach-exynos/include/mach/pm-core.h
arch/arm/mach-exynos/include/mach/regs-gpio.h [deleted file]
arch/arm/mach-exynos/include/mach/regs-usb-phy.h [deleted file]
arch/arm/mach-exynos/mach-armlex4210.c [deleted file]
arch/arm/mach-exynos/mach-exynos4-dt.c
arch/arm/mach-exynos/mach-exynos5-dt.c
arch/arm/mach-exynos/mach-nuri.c [deleted file]
arch/arm/mach-exynos/mach-origen.c [deleted file]
arch/arm/mach-exynos/mach-smdk4x12.c [deleted file]
arch/arm/mach-exynos/mach-smdkv310.c [deleted file]
arch/arm/mach-exynos/mach-universal_c210.c [deleted file]
arch/arm/mach-exynos/platsmp.c
arch/arm/mach-exynos/pm.c
arch/arm/mach-exynos/pm_domains.c
arch/arm/mach-exynos/setup-fimc.c [deleted file]
arch/arm/mach-exynos/setup-fimd0.c [deleted file]
arch/arm/mach-exynos/setup-i2c0.c [deleted file]
arch/arm/mach-exynos/setup-i2c1.c [deleted file]
arch/arm/mach-exynos/setup-i2c2.c [deleted file]
arch/arm/mach-exynos/setup-i2c3.c [deleted file]
arch/arm/mach-exynos/setup-i2c4.c [deleted file]
arch/arm/mach-exynos/setup-i2c5.c [deleted file]
arch/arm/mach-exynos/setup-i2c6.c [deleted file]
arch/arm/mach-exynos/setup-i2c7.c [deleted file]
arch/arm/mach-exynos/setup-keypad.c [deleted file]
arch/arm/mach-exynos/setup-sdhci-gpio.c [deleted file]
arch/arm/mach-exynos/setup-spi.c [deleted file]
arch/arm/mach-exynos/setup-usb-phy.c [deleted file]
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/clk-imx51-imx53.c
arch/arm/mach-imx/clk-imx6q.c
arch/arm/mach-imx/clk-imx6sl.c [new file with mode: 0644]
arch/arm/mach-imx/clk-pllv3.c
arch/arm/mach-imx/clk-vf610.c [new file with mode: 0644]
arch/arm/mach-imx/clk.c
arch/arm/mach-imx/clk.h
arch/arm/mach-imx/common.h
arch/arm/mach-imx/hardware.h
arch/arm/mach-imx/imx25-dt.c
arch/arm/mach-imx/imx27-dt.c
arch/arm/mach-imx/imx31-dt.c
arch/arm/mach-imx/imx51-dt.c
arch/arm/mach-imx/irq-common.c
arch/arm/mach-imx/mach-imx53.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-imx/mach-imx6sl.c [new file with mode: 0644]
arch/arm/mach-imx/mach-pca100.c
arch/arm/mach-imx/mach-vf610.c [new file with mode: 0644]
arch/arm/mach-imx/mm-imx1.c
arch/arm/mach-imx/mm-imx21.c
arch/arm/mach-imx/mm-imx25.c
arch/arm/mach-imx/mm-imx27.c
arch/arm/mach-imx/mm-imx3.c
arch/arm/mach-imx/mm-imx5.c
arch/arm/mach-imx/system.c
arch/arm/mach-imx/ulpi.c [deleted file]
arch/arm/mach-imx/ulpi.h
arch/arm/mach-integrator/Makefile
arch/arm/mach-integrator/include/mach/platform.h
arch/arm/mach-integrator/integrator_ap.c
arch/arm/mach-integrator/pci.c [deleted file]
arch/arm/mach-integrator/pci_v3.c
arch/arm/mach-integrator/pci_v3.h [new file with mode: 0644]
arch/arm/mach-keystone/Kconfig [new file with mode: 0644]
arch/arm/mach-keystone/Makefile [new file with mode: 0644]
arch/arm/mach-keystone/Makefile.boot [new file with mode: 0644]
arch/arm/mach-keystone/keystone.c [new file with mode: 0644]
arch/arm/mach-keystone/keystone.h [new file with mode: 0644]
arch/arm/mach-keystone/platsmp.c [new file with mode: 0644]
arch/arm/mach-keystone/smc.S [new file with mode: 0644]
arch/arm/mach-kirkwood/Kconfig
arch/arm/mach-kirkwood/Makefile
arch/arm/mach-kirkwood/board-db88f628x-bp.c [new file with mode: 0644]
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-kirkwood/board-iconnect.c
arch/arm/mach-kirkwood/board-mplcec4.c
arch/arm/mach-kirkwood/board-nsa310.c [deleted file]
arch/arm/mach-kirkwood/board-readynas.c
arch/arm/mach-kirkwood/common.c
arch/arm/mach-kirkwood/common.h
arch/arm/mach-kirkwood/db88f6281-bp-setup.c [deleted file]
arch/arm/mach-kirkwood/include/mach/bridge-regs.h
arch/arm/mach-kirkwood/pcie.c
arch/arm/mach-mvebu/Kconfig
arch/arm/mach-mvebu/armada-370-xp.c
arch/arm/mach-mvebu/armada-370-xp.h
arch/arm/mach-mvebu/coherency.c
arch/arm/mach-mvebu/coherency.h
arch/arm/mach-mvebu/common.h
arch/arm/mach-mvebu/headsmp.S
arch/arm/mach-mvebu/platsmp.c
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/am33xx.h
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/cclock33xx_data.c
arch/arm/mach-omap2/cclock3xxx_data.c
arch/arm/mach-omap2/clockdomain.h
arch/arm/mach-omap2/clockdomains54xx_data.c [new file with mode: 0644]
arch/arm/mach-omap2/cm-regbits-54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/cm1_44xx.h
arch/arm/mach-omap2/cm1_54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/cm2_44xx.h
arch/arm/mach-omap2/cm2_54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/cm33xx.h
arch/arm/mach-omap2/cm_44xx_54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/common.h
arch/arm/mach-omap2/control.h
arch/arm/mach-omap2/id.c
arch/arm/mach-omap2/io.c
arch/arm/mach-omap2/omap-headsmp.S
arch/arm/mach-omap2/omap-mpuss-lowpower.c
arch/arm/mach-omap2/omap-smp.c
arch/arm/mach-omap2/omap4-common.c
arch/arm/mach-omap2/omap4-restart.c [new file with mode: 0644]
arch/arm/mach-omap2/omap_hwmod.h
arch/arm/mach-omap2/omap_hwmod_33xx_data.c
arch/arm/mach-omap2/omap_hwmod_54xx_data.c [new file with mode: 0644]
arch/arm/mach-omap2/pm44xx.c
arch/arm/mach-omap2/powerdomain.h
arch/arm/mach-omap2/powerdomains3xxx_data.c
arch/arm/mach-omap2/powerdomains54xx_data.c [new file with mode: 0644]
arch/arm/mach-omap2/prcm-common.h
arch/arm/mach-omap2/prcm44xx.h
arch/arm/mach-omap2/prcm_mpu44xx.h
arch/arm/mach-omap2/prcm_mpu54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/prcm_mpu_44xx_54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/prm-regbits-54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/prm44xx.h
arch/arm/mach-omap2/prm44xx_54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/prm54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/scrm54xx.h [new file with mode: 0644]
arch/arm/mach-omap2/soc.h
arch/arm/mach-omap2/sram.c
arch/arm/mach-omap2/timer.c
arch/arm/mach-omap2/voltage.h
arch/arm/mach-omap2/voltagedomains54xx_data.c [new file with mode: 0644]
arch/arm/mach-picoxcell/Kconfig
arch/arm/mach-picoxcell/common.c
arch/arm/mach-rockchip/Kconfig [new file with mode: 0644]
arch/arm/mach-rockchip/Makefile [new file with mode: 0644]
arch/arm/mach-rockchip/rockchip.c [new file with mode: 0644]
arch/arm/mach-s3c24xx/dma-s3c2412.c
arch/arm/mach-s3c24xx/dma-s3c2443.c
arch/arm/mach-s3c24xx/dma.c
arch/arm/mach-shmobile/Kconfig
arch/arm/mach-shmobile/Makefile
arch/arm/mach-shmobile/Makefile.boot
arch/arm/mach-shmobile/board-ap4evb.c [deleted file]
arch/arm/mach-shmobile/board-armadillo800eva.c
arch/arm/mach-shmobile/board-bockw.c
arch/arm/mach-shmobile/board-bonito.c [deleted file]
arch/arm/mach-shmobile/board-kzm9g-reference.c
arch/arm/mach-shmobile/board-kzm9g.c
arch/arm/mach-shmobile/board-lager.c
arch/arm/mach-shmobile/board-mackerel.c
arch/arm/mach-shmobile/board-marzen.c
arch/arm/mach-shmobile/clock-r8a73a4.c
arch/arm/mach-shmobile/clock-r8a7740.c
arch/arm/mach-shmobile/clock-r8a7778.c
arch/arm/mach-shmobile/clock-r8a7779.c
arch/arm/mach-shmobile/clock-r8a7790.c
arch/arm/mach-shmobile/clock-sh73a0.c
arch/arm/mach-shmobile/headsmp-scu.S
arch/arm/mach-shmobile/headsmp.S
arch/arm/mach-shmobile/include/mach/clock.h
arch/arm/mach-shmobile/include/mach/common.h
arch/arm/mach-shmobile/include/mach/head-ap4evb.txt [deleted file]
arch/arm/mach-shmobile/include/mach/irqs.h
arch/arm/mach-shmobile/include/mach/memory.h [deleted file]
arch/arm/mach-shmobile/include/mach/mmc-ap4eb.h [deleted file]
arch/arm/mach-shmobile/include/mach/mmc.h
arch/arm/mach-shmobile/include/mach/r8a7740.h
arch/arm/mach-shmobile/include/mach/r8a7778.h
arch/arm/mach-shmobile/include/mach/r8a7779.h
arch/arm/mach-shmobile/include/mach/sh7372.h
arch/arm/mach-shmobile/include/mach/zboot.h
arch/arm/mach-shmobile/pm-sh7372.c
arch/arm/mach-shmobile/setup-r8a7740.c
arch/arm/mach-shmobile/setup-r8a7778.c
arch/arm/mach-shmobile/setup-r8a7779.c
arch/arm/mach-shmobile/setup-r8a7790.c
arch/arm/mach-shmobile/setup-sh73a0.c
arch/arm/mach-shmobile/sleep-sh7372.S
arch/arm/mach-shmobile/smp-emev2.c
arch/arm/mach-shmobile/smp-r8a7779.c
arch/arm/mach-shmobile/smp-sh73a0.c
arch/arm/mach-socfpga/Kconfig
arch/arm/mach-socfpga/socfpga.c
arch/arm/mach-sunxi/sunxi.c
arch/arm/mach-tegra/Makefile
arch/arm/mach-tegra/common.c
arch/arm/mach-tegra/common.h
arch/arm/mach-tegra/cpuidle-tegra20.c
arch/arm/mach-tegra/cpuidle-tegra30.c
arch/arm/mach-tegra/cpuidle.c
arch/arm/mach-tegra/cpuidle.h
arch/arm/mach-tegra/flowctrl.h
arch/arm/mach-tegra/fuse.h
arch/arm/mach-tegra/hotplug.c
arch/arm/mach-tegra/platsmp.c
arch/arm/mach-tegra/pm.c
arch/arm/mach-tegra/pm.h
arch/arm/mach-tegra/reset-handler.S
arch/arm/mach-tegra/sleep-tegra30.S
arch/arm/mach-tegra/sleep.S
arch/arm/mach-tegra/sleep.h
arch/arm/mach-tegra/tegra2_emc.c
arch/arm/mach-u300/Kconfig
arch/arm/mach-u300/Makefile
arch/arm/mach-u300/core.c
arch/arm/mach-u300/dummyspichip.c
arch/arm/mach-u300/i2c.c [deleted file]
arch/arm/mach-u300/i2c.h [deleted file]
arch/arm/mach-u300/include/mach/debug-macro.S [deleted file]
arch/arm/mach-u300/include/mach/hardware.h [deleted file]
arch/arm/mach-u300/include/mach/irqs.h [deleted file]
arch/arm/mach-u300/include/mach/syscon.h [deleted file]
arch/arm/mach-u300/include/mach/timex.h [deleted file]
arch/arm/mach-u300/include/mach/u300-regs.h [deleted file]
arch/arm/mach-u300/include/mach/uncompress.h [deleted file]
arch/arm/mach-u300/regulator.c
arch/arm/mach-u300/spi.c [deleted file]
arch/arm/mach-u300/spi.h [deleted file]
arch/arm/mach-u300/timer.c
arch/arm/mach-u300/timer.h [deleted file]
arch/arm/mach-u300/u300-gpio.h [deleted file]
arch/arm/mach-vexpress/Kconfig
arch/arm/mach-vexpress/Makefile
arch/arm/mach-vexpress/core.h
arch/arm/mach-vexpress/dcscb.c [new file with mode: 0644]
arch/arm/mach-vexpress/dcscb_setup.S [new file with mode: 0644]
arch/arm/mach-vexpress/platsmp.c
arch/arm/mach-vexpress/v2m.c
arch/arm/mach-virt/Makefile
arch/arm/mach-virt/platsmp.c [deleted file]
arch/arm/mach-virt/virt.c
arch/arm/mach-zynq/slcr.c
arch/arm/mm/Kconfig
arch/arm/mm/Makefile
arch/arm/mm/cache-nop.S [new file with mode: 0644]
arch/arm/mm/nommu.c
arch/arm/mm/proc-v7m.S [new file with mode: 0644]
arch/arm/plat-samsung/Kconfig
arch/arm/plat-samsung/Makefile
arch/arm/plat-samsung/include/plat/dma-s3c24xx.h
arch/arm/plat-samsung/include/plat/pm.h
arch/arm/plat-samsung/init.c
arch/arm/plat-samsung/pm-gpio.c
arch/arm/plat-samsung/pm.c
arch/arm/plat-samsung/s5p-dev-mfc.c
drivers/bus/Kconfig
drivers/bus/Makefile
drivers/bus/arm-cci.c [new file with mode: 0644]
drivers/clk/Makefile
drivers/clk/clk-u300.c
drivers/clk/clk-zynq.c [deleted file]
drivers/clk/mvebu/Kconfig
drivers/clk/mvebu/Makefile
drivers/clk/mvebu/armada-370.c [new file with mode: 0644]
drivers/clk/mvebu/armada-xp.c [new file with mode: 0644]
drivers/clk/mvebu/clk-core.c [deleted file]
drivers/clk/mvebu/clk-core.h [deleted file]
drivers/clk/mvebu/clk-gating-ctrl.c [deleted file]
drivers/clk/mvebu/clk-gating-ctrl.h [deleted file]
drivers/clk/mvebu/clk.c [deleted file]
drivers/clk/mvebu/common.c [new file with mode: 0644]
drivers/clk/mvebu/common.h [new file with mode: 0644]
drivers/clk/mvebu/dove.c [new file with mode: 0644]
drivers/clk/mvebu/kirkwood.c [new file with mode: 0644]
drivers/clk/socfpga/clk.c
drivers/clk/tegra/clk-tegra114.c
drivers/clk/zynq/Makefile [new file with mode: 0644]
drivers/clk/zynq/clkc.c [new file with mode: 0644]
drivers/clk/zynq/pll.c [new file with mode: 0644]
drivers/clocksource/Kconfig
drivers/clocksource/cadence_ttc_timer.c
drivers/clocksource/dw_apb_timer_of.c
drivers/cpuidle/cpuidle-calxeda.c
drivers/dma/Kconfig
drivers/dma/coh901318.c
drivers/dma/edma.c
drivers/gpio/Kconfig
drivers/gpio/Makefile
drivers/gpio/gpio-clps711x.c
drivers/gpio/gpio-rcar.c
drivers/i2c/busses/i2c-stu300.c
drivers/media/platform/Kconfig
drivers/media/platform/exynos4-is/Kconfig
drivers/media/platform/s5p-tv/Kconfig
drivers/mfd/syscon.c
drivers/mmc/host/davinci_mmc.c
drivers/mtd/maps/Kconfig
drivers/mtd/maps/Makefile
drivers/mtd/maps/autcpu12-nvram.c [deleted file]
drivers/pci/Kconfig
drivers/pci/Makefile
drivers/pci/host/Kconfig [new file with mode: 0644]
drivers/pci/host/Makefile [new file with mode: 0644]
drivers/pci/host/pci-mvebu.c [new file with mode: 0644]
drivers/pci/host/pcie-designware.c [new file with mode: 0644]
drivers/pinctrl/Kconfig
drivers/pinctrl/pinctrl-coh901.c
drivers/pinctrl/pinctrl-u300.c
drivers/pinctrl/sh-pfc/Kconfig
drivers/pinctrl/sh-pfc/Makefile
drivers/pinctrl/sh-pfc/core.c
drivers/pinctrl/sh-pfc/core.h
drivers/pinctrl/sh-pfc/pfc-r8a7740.c
drivers/pinctrl/sh-pfc/pfc-r8a7778.c [new file with mode: 0644]
drivers/pinctrl/sh-pfc/pfc-r8a7779.c
drivers/pinctrl/sh-pfc/pfc-r8a7790.c [new file with mode: 0644]
drivers/pinctrl/sh-pfc/pfc-sh7372.c
drivers/pinctrl/sh-pfc/pfc-sh73a0.c
drivers/pinctrl/sh-pfc/sh_pfc.h
drivers/rtc/rtc-coh901331.c
drivers/spi/spi-pl022.c
drivers/thermal/exynos_thermal.c
drivers/tty/serial/xilinx_uartps.c
drivers/usb/host/Kconfig
drivers/usb/host/ehci-platform.c
drivers/usb/phy/Kconfig
drivers/usb/phy/phy-rcar-usb.c
drivers/watchdog/coh901327_wdt.c
include/dt-bindings/clock/imx6sl-clock.h [new file with mode: 0644]
include/dt-bindings/clock/vf610-clock.h [new file with mode: 0644]
include/linux/arm-cci.h [new file with mode: 0644]
include/linux/clk/mvebu.h [deleted file]
include/linux/clk/zynq.h
include/linux/dw_apb_timer.h
include/linux/mfd/davinci_voicecodec.h
include/linux/mfd/syscon/clps711x.h [new file with mode: 0644]
include/linux/platform_data/edma.h [new file with mode: 0644]
include/linux/platform_data/gpio-rcar.h
include/linux/platform_data/pinctrl-coh901.h [deleted file]
include/linux/platform_data/spi-davinci.h
include/linux/platform_data/usb-rcar-phy.h [new file with mode: 0644]
include/linux/usb/ehci_pdriver.h
sound/soc/davinci/davinci-evm.c
sound/soc/davinci/davinci-pcm.c
sound/soc/davinci/davinci-pcm.h

index d9a372d06e77cf1ed73e850b1e226d9f4db84047..e3f93fb9224e9495b3683264d334619b259869ce 100644 (file)
@@ -17,6 +17,10 @@ SunXi family
        + User Manual
          http://dl.linux-sunxi.org/A10/A10%20User%20Manual%20-%20v1.20%20%282012-04-09%2c%20DECRYPTED%29.pdf
 
+      - Allwinner A10s (sun5i)
+        + Datasheet
+          http://dl.linux-sunxi.org/A10s/A10s%20Datasheet%20-%20v1.20%20%282012-03-27%29.pdf
+
       - Allwinner A13 (sun5i)
         + Datasheet
          http://dl.linux-sunxi.org/A13/A13%20Datasheet%20-%20v1.12%20%282012-03-29%29.pdf
diff --git a/Documentation/devicetree/bindings/arm/cci.txt b/Documentation/devicetree/bindings/arm/cci.txt
new file mode 100644 (file)
index 0000000..92d36e2
--- /dev/null
@@ -0,0 +1,172 @@
+=======================================================
+ARM CCI cache coherent interconnect binding description
+=======================================================
+
+ARM multi-cluster systems maintain intra-cluster coherency through a
+cache coherent interconnect (CCI) that is capable of monitoring bus
+transactions and manage coherency, TLB invalidations and memory barriers.
+
+It allows snooping and distributed virtual memory message broadcast across
+clusters, through memory mapped interface, with a global control register
+space and multiple sets of interface control registers, one per slave
+interface.
+
+Bindings for the CCI node follow the ePAPR standard, available from:
+
+www.power.org/documentation/epapr-version-1-1/
+
+with the addition of the bindings described in this document which are
+specific to ARM.
+
+* CCI interconnect node
+
+       Description: Describes a CCI cache coherent Interconnect component
+
+       Node name must be "cci".
+       Node's parent must be the root node /, and the address space visible
+       through the CCI interconnect is the same as the one seen from the
+       root node (ie from CPUs perspective as per DT standard).
+       Every CCI node has to define the following properties:
+
+       - compatible
+               Usage: required
+               Value type: <string>
+               Definition: must be set to
+                           "arm,cci-400"
+
+       - reg
+               Usage: required
+               Value type: <prop-encoded-array>
+               Definition: A standard property. Specifies base physical
+                           address of CCI control registers common to all
+                           interfaces.
+
+       - ranges:
+               Usage: required
+               Value type: <prop-encoded-array>
+               Definition: A standard property. Follow rules in the ePAPR for
+                           hierarchical bus addressing. CCI interfaces
+                           addresses refer to the parent node addressing
+                           scheme to declare their register bases.
+
+       CCI interconnect node can define the following child nodes:
+
+       - CCI control interface nodes
+
+               Node name must be "slave-if".
+               Parent node must be CCI interconnect node.
+
+               A CCI control interface node must contain the following
+               properties:
+
+               - compatible
+                       Usage: required
+                       Value type: <string>
+                       Definition: must be set to
+                                   "arm,cci-400-ctrl-if"
+
+               - interface-type:
+                       Usage: required
+                       Value type: <string>
+                       Definition: must be set to one of {"ace", "ace-lite"}
+                                   depending on the interface type the node
+                                   represents.
+
+               - reg:
+                       Usage: required
+                       Value type: <prop-encoded-array>
+                       Definition: the base address and size of the
+                                   corresponding interface programming
+                                   registers.
+
+* CCI interconnect bus masters
+
+       Description: masters in the device tree connected to a CCI port
+                    (inclusive of CPUs and their cpu nodes).
+
+       A CCI interconnect bus master node must contain the following
+       properties:
+
+       - cci-control-port:
+               Usage: required
+               Value type: <phandle>
+               Definition: a phandle containing the CCI control interface node
+                           the master is connected to.
+
+Example:
+
+       cpus {
+               #size-cells = <0>;
+               #address-cells = <1>;
+
+               CPU0: cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a15";
+                       cci-control-port = <&cci_control1>;
+                       reg = <0x0>;
+               };
+
+               CPU1: cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a15";
+                       cci-control-port = <&cci_control1>;
+                       reg = <0x1>;
+               };
+
+               CPU2: cpu@100 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a7";
+                       cci-control-port = <&cci_control2>;
+                       reg = <0x100>;
+               };
+
+               CPU3: cpu@101 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a7";
+                       cci-control-port = <&cci_control2>;
+                       reg = <0x101>;
+               };
+
+       };
+
+       dma0: dma@3000000 {
+               compatible = "arm,pl330", "arm,primecell";
+               cci-control-port = <&cci_control0>;
+               reg = <0x0 0x3000000 0x0 0x1000>;
+               interrupts = <10>;
+               #dma-cells = <1>;
+               #dma-channels = <8>;
+               #dma-requests = <32>;
+       };
+
+       cci@2c090000 {
+               compatible = "arm,cci-400";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               reg = <0x0 0x2c090000 0 0x1000>;
+               ranges = <0x0 0x0 0x2c090000 0x6000>;
+
+               cci_control0: slave-if@1000 {
+                       compatible = "arm,cci-400-ctrl-if";
+                       interface-type = "ace-lite";
+                       reg = <0x1000 0x1000>;
+               };
+
+               cci_control1: slave-if@4000 {
+                       compatible = "arm,cci-400-ctrl-if";
+                       interface-type = "ace";
+                       reg = <0x4000 0x1000>;
+               };
+
+               cci_control2: slave-if@5000 {
+                       compatible = "arm,cci-400-ctrl-if";
+                       interface-type = "ace";
+                       reg = <0x5000 0x1000>;
+               };
+       };
+
+This CCI node corresponds to a CCI component whose control registers sits
+at address 0x000000002c090000.
+CCI slave interface @0x000000002c091000 is connected to dma controller dma0.
+CCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1};
+CCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3};
diff --git a/Documentation/devicetree/bindings/arm/keystone/keystone.txt b/Documentation/devicetree/bindings/arm/keystone/keystone.txt
new file mode 100644 (file)
index 0000000..63c0e6a
--- /dev/null
@@ -0,0 +1,10 @@
+TI Keystone Platforms Device Tree Bindings
+-----------------------------------------------
+
+Boards with Keystone2 based devices (TCI66xxK2H) SOC shall have the
+following properties.
+
+Required properties:
+ - compatible: All TI specific devices present in Keystone SOC should be in
+   the form "ti,keystone-*". Generic devices like gic, arch_timers, ns16550
+   type UART should use the specified compatible for those devices.
diff --git a/Documentation/devicetree/bindings/arm/rtsm-dcscb.txt b/Documentation/devicetree/bindings/arm/rtsm-dcscb.txt
new file mode 100644 (file)
index 0000000..3b8fbf3
--- /dev/null
@@ -0,0 +1,19 @@
+ARM Dual Cluster System Configuration Block
+-------------------------------------------
+
+The Dual Cluster System Configuration Block (DCSCB) provides basic
+functionality for controlling clocks, resets and configuration pins in
+the Dual Cluster System implemented by the Real-Time System Model (RTSM).
+
+Required properties:
+
+- compatible : should be "arm,rtsm,dcscb"
+
+- reg : physical base address and the size of the registers window
+
+Example:
+
+       dcscb@60000000 {
+               compatible = "arm,rtsm,dcscb";
+               reg = <0x60000000 0x1000>;
+       };
diff --git a/Documentation/devicetree/bindings/arm/ste-u300.txt b/Documentation/devicetree/bindings/arm/ste-u300.txt
new file mode 100644 (file)
index 0000000..69b5ab0
--- /dev/null
@@ -0,0 +1,46 @@
+ST-Ericsson U300 Device Tree Bindings
+
+For various board the "board" node may contain specific properties
+that pertain to this particular board, such as board-specific GPIOs
+or board power regulator supplies.
+
+Required root node property:
+
+compatible="stericsson,u300";
+
+Required node: syscon
+This contains the system controller.
+- compatible: must be "stericsson,u300-syscon".
+- reg: the base address and size of the system controller.
+
+Boards with the U300 SoC include:
+
+S365 "Small Board U365":
+
+Required node: s365
+This contains the board-specific information.
+- compatible: must be "stericsson,s365".
+- vana15-supply: the regulator supplying the 1.5V to drive the
+  board.
+- syscon: a pointer to the syscon node so we can acccess the
+  syscon registers to set the board as self-powered.
+
+Example:
+
+/ {
+       model = "ST-Ericsson U300";
+       compatible = "stericsson,u300";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       s365 {
+               compatible = "stericsson,s365";
+               vana15-supply = <&ab3100_ldo_d_reg>;
+               syscon = <&syscon>;
+       };
+
+       syscon: syscon@c0011000 {
+               compatible = "stericsson,u300-syscon";
+               reg = <0xc0011000 0x1000>;
+       };
+};
index d71b4b2c077daa410a53951893229ecbac59a892..f46f5625d8ada4e907474d304a0ebd541f269acc 100644 (file)
@@ -184,6 +184,19 @@ clocks and IDs.
        cko2                    170
        srtc_gate               171
        pata_gate               172
+       sata_gate               173
+       spdif_xtal_sel          174
+       spdif0_sel              175
+       spdif1_sel              176
+       spdif0_pred             177
+       spdif0_podf             178
+       spdif1_pred             179
+       spdif1_podf             180
+       spdif0_com_sel          181
+       spdif1_com_sel          182
+       spdif0_gate             183
+       spdif1_gate             184
+       spdif_ipg_gate          185
 
 Examples (for mx53):
 
index 6deb6fd1c7cd07d718c94c81c13a6ec01f641151..a0e104f0527e058843c1f01a33997ff64d8f37cb 100644 (file)
@@ -208,6 +208,7 @@ clocks and IDs.
        pll4_post_div           193
        pll5_post_div           194
        pll5_video_div          195
+       eim_slow                196
 
 Examples:
 
diff --git a/Documentation/devicetree/bindings/clock/imx6sl-clock.txt b/Documentation/devicetree/bindings/clock/imx6sl-clock.txt
new file mode 100644 (file)
index 0000000..15e40bd
--- /dev/null
@@ -0,0 +1,10 @@
+* Clock bindings for Freescale i.MX6 SoloLite
+
+Required properties:
+- compatible: Should be "fsl,imx6sl-ccm"
+- reg: Address and length of the register set
+- #clock-cells: Should be <1>
+
+The clock consumer should specify the desired clock by having the clock
+ID in its "clocks" phandle cell.  See include/dt-bindings/clock/imx6sl-clock.h
+for the full list of i.MX6 SoloLite clock IDs.
diff --git a/Documentation/devicetree/bindings/clock/ste-u300-syscon-clock.txt b/Documentation/devicetree/bindings/clock/ste-u300-syscon-clock.txt
new file mode 100644 (file)
index 0000000..7cafcb9
--- /dev/null
@@ -0,0 +1,80 @@
+Clock bindings for ST-Ericsson U300 System Controller Clocks
+
+Bindings for the gated system controller clocks:
+
+Required properties:
+- compatible: must be "stericsson,u300-syscon-clk"
+- #clock-cells: must be <0>
+- clock-type: specifies the type of clock:
+  0 = slow clock
+  1 = fast clock
+  2 = rest/remaining clock
+- clock-id: specifies the clock in the type range
+
+Optional properties:
+- clocks: parent clock(s)
+
+The available clocks per type are as follows:
+
+Type:  ID:   Clock:
+-------------------
+0      0     Slow peripheral bridge clock
+0      1     UART0 clock
+0      4     GPIO clock
+0      6     RTC clock
+0      7     Application timer clock
+0      8     Access timer clock
+
+1      0     Fast peripheral bridge clock
+1      1     I2C bus 0 clock
+1      2     I2C bus 1 clock
+1      5     MMC interface peripheral (silicon) clock
+1      6     SPI clock
+
+2      3     CPU clock
+2      4     DMA controller clock
+2      5     External Memory Interface (EMIF) clock
+2      6     NAND flask interface clock
+2      8     XGAM graphics engine clock
+2      9     Shared External Memory Interface (SEMI) clock
+2      10    AHB Subsystem Bridge clock
+2      12    Interrupt controller clock
+
+Example:
+
+gpio_clk: gpio_clk@13M {
+       #clock-cells = <0>;
+       compatible = "stericsson,u300-syscon-clk";
+       clock-type = <0>; /* Slow */
+       clock-id = <4>;
+       clocks = <&slow_clk>;
+};
+
+gpio: gpio@c0016000 {
+       compatible = "stericsson,gpio-coh901";
+       (...)
+       clocks = <&gpio_clk>;
+};
+
+
+Bindings for the MMC/SD card clock:
+
+Required properties:
+- compatible: must be "stericsson,u300-syscon-mclk"
+- #clock-cells: must be <0>
+
+Optional properties:
+- clocks: parent clock(s)
+
+mmc_mclk: mmc_mclk {
+       #clock-cells = <0>;
+       compatible = "stericsson,u300-syscon-mclk";
+       clocks = <&mmc_pclk>;
+};
+
+mmcsd: mmcsd@c0001000 {
+       compatible = "arm,pl18x", "arm,primecell";
+       clocks = <&mmc_pclk>, <&mmc_mclk>;
+       clock-names = "apb_pclk", "mclk";
+       (...)
+};
diff --git a/Documentation/devicetree/bindings/clock/vf610-clock.txt b/Documentation/devicetree/bindings/clock/vf610-clock.txt
new file mode 100644 (file)
index 0000000..c80863d
--- /dev/null
@@ -0,0 +1,26 @@
+* Clock bindings for Freescale Vybrid VF610 SOC
+
+Required properties:
+- compatible: Should be "fsl,vf610-ccm"
+- reg: Address and length of the register set
+- #clock-cells: Should be <1>
+
+The clock consumer should specify the desired clock by having the clock
+ID in its "clocks" phandle cell. See include/dt-bindings/clock/vf610-clock.h
+for the full list of VF610 clock IDs.
+
+Examples:
+
+clks: ccm@4006b000 {
+       compatible = "fsl,vf610-ccm";
+       reg = <0x4006b000 0x1000>;
+       #clock-cells = <1>;
+};
+
+uart1: serial@40028000 {
+       compatible = "fsl,vf610-uart";
+       reg = <0x40028000 0x1000>;
+       interrupts = <0 62 0x04>;
+       clocks = <&clks VF610_CLK_UART1>;
+       clock-names = "ipg";
+};
index 23ae1db1bc13c5a359f9d8a8556d06f49a4a616e..d99af878f5d7db6f59d6160f251edec22d902ed8 100644 (file)
@@ -6,50 +6,99 @@ The purpose of this document is to document their usage.
 See clock_bindings.txt for more information on the generic clock bindings.
 See Chapter 25 of Zynq TRM for more information about Zynq clocks.
 
-== PLLs ==
-
-Used to describe the ARM_PLL, DDR_PLL, and IO_PLL.
+== Clock Controller ==
+The clock controller is a logical abstraction of Zynq's clock tree. It reads
+required input clock frequencies from the devicetree and acts as clock provider
+for all clock consumers of PS clocks.
 
 Required properties:
-- #clock-cells : shall be 0 (only one clock is output from this node)
-- compatible : "xlnx,zynq-pll"
-- reg : pair of u32 values, which are the address offsets within the SLCR
-        of the relevant PLL_CTRL register and PLL_CFG register respectively
-- clocks : phandle for parent clock.  should be the phandle for ps_clk
+ - #clock-cells : Must be 1
+ - compatible : "xlnx,ps7-clkc"
+ - ps-clk-frequency : Frequency of the oscillator providing ps_clk in HZ
+                     (usually 33 MHz oscillators are used for Zynq platforms)
+ - clock-output-names : List of strings used to name the clock outputs. Shall be
+                       a list of the outputs given below.
 
 Optional properties:
-- clock-output-names : name of the output clock
-
-Example:
-       armpll: armpll {
-               #clock-cells = <0>;
-               compatible = "xlnx,zynq-pll";
-               clocks = <&ps_clk>;
-               reg = <0x100 0x110>;
-               clock-output-names = "armpll";
-       };
-
-== Peripheral clocks ==
+ - clocks : as described in the clock bindings
+ - clock-names : as described in the clock bindings
 
-Describes clock node for the SDIO, SMC, SPI, QSPI, and UART clocks.
+Clock inputs:
+The following strings are optional parameters to the 'clock-names' property in
+order to provide an optional (E)MIO clock source.
+ - swdt_ext_clk
+ - gem0_emio_clk
+ - gem1_emio_clk
+ - mio_clk_XX          # with XX = 00..53
+...
 
-Required properties:
-- #clock-cells : shall be 1
-- compatible : "xlnx,zynq-periph-clock"
-- reg : a single u32 value, describing the offset within the SLCR where
-        the CLK_CTRL register is found for this peripheral
-- clocks : phandle for parent clocks.  should hold phandles for
-           the IO_PLL, ARM_PLL, and DDR_PLL in order
-- clock-output-names : names of the output clock(s).  For peripherals that have
-                       two output clocks (for example, the UART), two clocks
-                       should be listed.
+Clock outputs:
+ 0:  armpll
+ 1:  ddrpll
+ 2:  iopll
+ 3:  cpu_6or4x
+ 4:  cpu_3or2x
+ 5:  cpu_2x
+ 6:  cpu_1x
+ 7:  ddr2x
+ 8:  ddr3x
+ 9:  dci
+ 10: lqspi
+ 11: smc
+ 12: pcap
+ 13: gem0
+ 14: gem1
+ 15: fclk0
+ 16: fclk1
+ 17: fclk2
+ 18: fclk3
+ 19: can0
+ 20: can1
+ 21: sdio0
+ 22: sdio1
+ 23: uart0
+ 24: uart1
+ 25: spi0
+ 26: spi1
+ 27: dma
+ 28: usb0_aper
+ 29: usb1_aper
+ 30: gem0_aper
+ 31: gem1_aper
+ 32: sdio0_aper
+ 33: sdio1_aper
+ 34: spi0_aper
+ 35: spi1_aper
+ 36: can0_aper
+ 37: can1_aper
+ 38: i2c0_aper
+ 39: i2c1_aper
+ 40: uart0_aper
+ 41: uart1_aper
+ 42: gpio_aper
+ 43: lqspi_aper
+ 44: smc_aper
+ 45: swdt
+ 46: dbg_trc
+ 47: dbg_apb
 
 Example:
-       uart_clk: uart_clk {
+       clkc: clkc {
                #clock-cells = <1>;
-               compatible = "xlnx,zynq-periph-clock";
-               clocks = <&iopll &armpll &ddrpll>;
-               reg = <0x154>;
-               clock-output-names = "uart0_ref_clk",
-                                    "uart1_ref_clk";
+               compatible = "xlnx,ps7-clkc";
+               ps-clk-frequency = <33333333>;
+               clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
+                               "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
+                               "dci", "lqspi", "smc", "pcap", "gem0", "gem1",
+                               "fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1",
+                               "sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1",
+                               "dma", "usb0_aper", "usb1_aper", "gem0_aper",
+                               "gem1_aper", "sdio0_aper", "sdio1_aper",
+                               "spi0_aper", "spi1_aper", "can0_aper", "can1_aper",
+                               "i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper",
+                               "gpio_aper", "lqspi_aper", "smc_aper", "swdt",
+                               "dbg_trc", "dbg_apb";
+               # optional props
+               clocks = <&clkc 16>, <&clk_foo>;
+               clock-names = "gem1_emio_clk", "can_mio_clk_23";
        };
diff --git a/Documentation/devicetree/bindings/dma/ste-coh901318.txt b/Documentation/devicetree/bindings/dma/ste-coh901318.txt
new file mode 100644 (file)
index 0000000..091ad05
--- /dev/null
@@ -0,0 +1,32 @@
+ST-Ericsson COH 901 318 DMA Controller
+
+This is a DMA controller which has begun as a fork of the
+ARM PL08x PrimeCell VHDL code.
+
+Required properties:
+- compatible: should be "stericsson,coh901318"
+- reg: register locations and length
+- interrupts: the single DMA IRQ
+- #dma-cells: must be set to <1>, as the channels on the
+  COH 901 318 are simple and identified by a single number
+- dma-channels: the number of DMA channels handled
+
+Example:
+
+dmac: dma-controller@c00020000 {
+       compatible = "stericsson,coh901318";
+       reg = <0xc0020000 0x1000>;
+       interrupt-parent = <&vica>;
+       interrupts = <2>;
+       #dma-cells = <1>;
+       dma-channels = <40>;
+};
+
+Consumers example:
+
+uart0: serial@c0013000 {
+       compatible = "...";
+       (...)
+       dmas = <&dmac 17 &dmac 18>;
+       dma-names = "tx", "rx";
+};
diff --git a/Documentation/devicetree/bindings/dma/ti-edma.txt b/Documentation/devicetree/bindings/dma/ti-edma.txt
new file mode 100644 (file)
index 0000000..9fbbdb7
--- /dev/null
@@ -0,0 +1,34 @@
+TI EDMA
+
+Required properties:
+- compatible : "ti,edma3"
+- ti,edma-regions: Number of regions
+- ti,edma-slots: Number of slots
+- #dma-cells: Should be set to <1>
+              Clients should use a single channel number per DMA request.
+- dma-channels: Specify total DMA channels per CC
+- reg: Memory map for accessing module
+- interrupt-parent: Interrupt controller the interrupt is routed through
+- interrupts: Exactly 3 interrupts need to be specified in the order:
+              1. Transfer completion interrupt.
+              2. Memory protection interrupt.
+              3. Error interrupt.
+Optional properties:
+- ti,hwmods: Name of the hwmods associated to the EDMA
+- ti,edma-xbar-event-map: Crossbar event to channel map
+
+Example:
+
+edma: edma@49000000 {
+       reg = <0x49000000 0x10000>;
+       interrupt-parent = <&intc>;
+       interrupts = <12 13 14>;
+       compatible = "ti,edma3";
+       ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
+       #dma-cells = <1>;
+       dma-channels = <64>;
+       ti,edma-regions = <4>;
+       ti,edma-slots = <256>;
+       ti,edma-xbar-event-map = <1 12
+                                 2 13>;
+};
diff --git a/Documentation/devicetree/bindings/gpio/gpio-clps711x.txt b/Documentation/devicetree/bindings/gpio/gpio-clps711x.txt
new file mode 100644 (file)
index 0000000..e0d0446
--- /dev/null
@@ -0,0 +1,28 @@
+Cirrus Logic CLPS711X GPIO controller
+
+Required properties:
+- compatible: Should be "cirrus,clps711x-gpio"
+- reg: Physical base GPIO controller registers location and length.
+  There should be two registers, first is DATA register, the second
+  is DIRECTION.
+- gpio-controller: Marks the device node as a gpio controller.
+- #gpio-cells: Should be two. The first cell is the pin number and
+  the second cell is used to specify the gpio polarity:
+    0 = active high
+    1 = active low
+
+Note: Each GPIO port should have an alias correctly numbered in "aliases"
+node.
+
+Example:
+
+aliases {
+       gpio0 = &porta;
+};
+
+porta: gpio@80000000 {
+       compatible = "cirrus,clps711x-gpio";
+       reg = <0x80000000 0x1>, <0x80000040 0x1>;
+       gpio-controller;
+       #gpio-cells = <2>;
+};
diff --git a/Documentation/devicetree/bindings/gpio/gpio-stericsson-coh901.txt b/Documentation/devicetree/bindings/gpio/gpio-stericsson-coh901.txt
new file mode 100644 (file)
index 0000000..fd665b4
--- /dev/null
@@ -0,0 +1,7 @@
+ST-Ericsson COH 901 571/3 GPIO controller
+
+Required properties:
+- compatible: Compatible property value should be "stericsson,gpio-coh901"
+- reg: Physical base address of the controller and length of memory mapped
+  region.
+- interrupts: the 0...n interrupts assigned to the different GPIO ports/banks.
diff --git a/Documentation/devicetree/bindings/i2c/i2c-st-ddci2c.txt b/Documentation/devicetree/bindings/i2c/i2c-st-ddci2c.txt
new file mode 100644 (file)
index 0000000..bd81a48
--- /dev/null
@@ -0,0 +1,15 @@
+ST Microelectronics DDC I2C
+
+Required properties :
+- compatible : Must be "st,ddci2c"
+- reg: physical base address of the controller and length of memory mapped
+     region.
+- interrupts: interrupt number to the cpu.
+- #address-cells = <1>;
+- #size-cells = <0>;
+
+Optional properties:
+- Child nodes conforming to i2c bus binding
+
+Examples :
+
diff --git a/Documentation/devicetree/bindings/pci/designware-pcie.txt b/Documentation/devicetree/bindings/pci/designware-pcie.txt
new file mode 100644 (file)
index 0000000..e2371f5
--- /dev/null
@@ -0,0 +1,73 @@
+* Synopsis Designware PCIe interface
+
+Required properties:
+- compatible: should contain "snps,dw-pcie" to identify the
+       core, plus an identifier for the specific instance, such
+       as "samsung,exynos5440-pcie".
+- reg: base addresses and lengths of the pcie controller,
+       the phy controller, additional register for the phy controller.
+- interrupts: interrupt values for level interrupt,
+       pulse interrupt, special interrupt.
+- clocks: from common clock binding: handle to pci clock.
+- clock-names: from common clock binding: should be "pcie" and "pcie_bus".
+- #address-cells: set to <3>
+- #size-cells: set to <2>
+- device_type: set to "pci"
+- ranges: ranges for the PCI memory and I/O regions
+- #interrupt-cells: set to <1>
+- interrupt-map-mask and interrupt-map: standard PCI properties
+       to define the mapping of the PCIe interface to interrupt
+       numbers.
+- reset-gpio: gpio pin number of power good signal
+
+Example:
+
+SoC specific DT Entry:
+
+       pcie@290000 {
+               compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
+               reg = <0x290000 0x1000
+                       0x270000 0x1000
+                       0x271000 0x40>;
+               interrupts = <0 20 0>, <0 21 0>, <0 22 0>;
+               clocks = <&clock 28>, <&clock 27>;
+               clock-names = "pcie", "pcie_bus";
+               #address-cells = <3>;
+               #size-cells = <2>;
+               device_type = "pci";
+               ranges = <0x00000800 0 0x40000000 0x40000000 0 0x00001000   /* configuration space */
+                         0x81000000 0 0          0x40001000 0 0x00010000   /* downstream I/O */
+                         0x82000000 0 0x40011000 0x40011000 0 0x1ffef000>; /* non-prefetchable memory */
+               #interrupt-cells = <1>;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0x0 0 &gic 53>;
+       };
+
+       pcie@2a0000 {
+               compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
+               reg = <0x2a0000 0x1000
+                       0x272000 0x1000
+                       0x271040 0x40>;
+               interrupts = <0 23 0>, <0 24 0>, <0 25 0>;
+               clocks = <&clock 29>, <&clock 27>;
+               clock-names = "pcie", "pcie_bus";
+               #address-cells = <3>;
+               #size-cells = <2>;
+               device_type = "pci";
+               ranges = <0x00000800 0 0x60000000 0x60000000 0 0x00001000   /* configuration space */
+                         0x81000000 0 0          0x60001000 0 0x00010000   /* downstream I/O */
+                         0x82000000 0 0x60011000 0x60011000 0 0x1ffef000>; /* non-prefetchable memory */
+               #interrupt-cells = <1>;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0x0 0 &gic 56>;
+       };
+
+Board specific DT Entry:
+
+       pcie@290000 {
+               reset-gpio = <&pin_ctrl 5 0>;
+       };
+
+       pcie@2a0000 {
+               reset-gpio = <&pin_ctrl 22 0>;
+       };
diff --git a/Documentation/devicetree/bindings/pci/mvebu-pci.txt b/Documentation/devicetree/bindings/pci/mvebu-pci.txt
new file mode 100644 (file)
index 0000000..f8d4058
--- /dev/null
@@ -0,0 +1,221 @@
+* Marvell EBU PCIe interfaces
+
+Mandatory properties:
+- compatible: one of the following values:
+    marvell,armada-370-pcie
+    marvell,armada-xp-pcie
+    marvell,kirkwood-pcie
+- #address-cells, set to <3>
+- #size-cells, set to <2>
+- #interrupt-cells, set to <1>
+- bus-range: PCI bus numbers covered
+- device_type, set to "pci"
+- ranges: ranges for the PCI memory and I/O regions, as well as the
+  MMIO registers to control the PCIe interfaces.
+
+In addition, the Device Tree node must have sub-nodes describing each
+PCIe interface, having the following mandatory properties:
+- reg: used only for interrupt mapping, so only the first four bytes
+  are used to refer to the correct bus number and device number.
+- assigned-addresses: reference to the MMIO registers used to control
+  this PCIe interface.
+- clocks: the clock associated to this PCIe interface
+- marvell,pcie-port: the physical PCIe port number
+- status: either "disabled" or "okay"
+- device_type, set to "pci"
+- #address-cells, set to <3>
+- #size-cells, set to <2>
+- #interrupt-cells, set to <1>
+- ranges, empty property.
+- interrupt-map-mask and interrupt-map, standard PCI properties to
+  define the mapping of the PCIe interface to interrupt numbers.
+
+and the following optional properties:
+- marvell,pcie-lane: the physical PCIe lane number, for ports having
+  multiple lanes. If this property is not found, we assume that the
+  value is 0.
+
+Example:
+
+pcie-controller {
+       compatible = "marvell,armada-xp-pcie";
+       status = "disabled";
+       device_type = "pci";
+
+       #address-cells = <3>;
+       #size-cells = <2>;
+
+       bus-range = <0x00 0xff>;
+
+       ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000   /* Port 0.0 registers */
+                 0x82000000 0 0xd0042000 0xd0042000 0 0x00002000   /* Port 2.0 registers */
+                 0x82000000 0 0xd0044000 0xd0044000 0 0x00002000   /* Port 0.1 registers */
+                 0x82000000 0 0xd0048000 0xd0048000 0 0x00002000   /* Port 0.2 registers */
+                 0x82000000 0 0xd004c000 0xd004c000 0 0x00002000   /* Port 0.3 registers */
+                 0x82000000 0 0xd0080000 0xd0080000 0 0x00002000   /* Port 1.0 registers */
+                 0x82000000 0 0xd0082000 0xd0082000 0 0x00002000   /* Port 3.0 registers */
+                 0x82000000 0 0xd0084000 0xd0084000 0 0x00002000   /* Port 1.1 registers */
+                 0x82000000 0 0xd0088000 0xd0088000 0 0x00002000   /* Port 1.2 registers */
+                 0x82000000 0 0xd008c000 0xd008c000 0 0x00002000   /* Port 1.3 registers */
+                 0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */
+                 0x81000000 0 0          0xe8000000 0 0x00100000>; /* downstream I/O */
+
+       pcie@1,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>;
+               reg = <0x0800 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 58>;
+               marvell,pcie-port = <0>;
+               marvell,pcie-lane = <0>;
+               clocks = <&gateclk 5>;
+               status = "disabled";
+       };
+
+       pcie@2,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82001000 0 0xd0044000 0 0x2000>;
+               reg = <0x1000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 59>;
+               marvell,pcie-port = <0>;
+               marvell,pcie-lane = <1>;
+               clocks = <&gateclk 6>;
+               status = "disabled";
+       };
+
+       pcie@3,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82001800 0 0xd0048000 0 0x2000>;
+               reg = <0x1800 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 60>;
+               marvell,pcie-port = <0>;
+               marvell,pcie-lane = <2>;
+               clocks = <&gateclk 7>;
+               status = "disabled";
+       };
+
+       pcie@4,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82002000 0 0xd004c000 0 0x2000>;
+               reg = <0x2000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 61>;
+               marvell,pcie-port = <0>;
+               marvell,pcie-lane = <3>;
+               clocks = <&gateclk 8>;
+               status = "disabled";
+       };
+
+       pcie@5,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82002800 0 0xd0080000 0 0x2000>;
+               reg = <0x2800 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 62>;
+               marvell,pcie-port = <1>;
+               marvell,pcie-lane = <0>;
+               clocks = <&gateclk 9>;
+               status = "disabled";
+       };
+
+       pcie@6,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82003000 0 0xd0084000 0 0x2000>;
+               reg = <0x3000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 63>;
+               marvell,pcie-port = <1>;
+               marvell,pcie-lane = <1>;
+               clocks = <&gateclk 10>;
+               status = "disabled";
+       };
+
+       pcie@7,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82003800 0 0xd0088000 0 0x2000>;
+               reg = <0x3800 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 64>;
+               marvell,pcie-port = <1>;
+               marvell,pcie-lane = <2>;
+               clocks = <&gateclk 11>;
+               status = "disabled";
+       };
+
+       pcie@8,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82004000 0 0xd008c000 0 0x2000>;
+               reg = <0x4000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 65>;
+               marvell,pcie-port = <1>;
+               marvell,pcie-lane = <3>;
+               clocks = <&gateclk 12>;
+               status = "disabled";
+       };
+       pcie@9,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82004800 0 0xd0042000 0 0x2000>;
+               reg = <0x4800 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 99>;
+               marvell,pcie-port = <2>;
+               marvell,pcie-lane = <0>;
+               clocks = <&gateclk 26>;
+               status = "disabled";
+       };
+
+       pcie@10,0 {
+               device_type = "pci";
+               assigned-addresses = <0x82005000 0 0xd0082000 0 0x2000>;
+               reg = <0x5000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               #interrupt-cells = <1>;
+               ranges;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0 0 0 0 &mpic 103>;
+               marvell,pcie-port = <3>;
+               marvell,pcie-lane = <0>;
+               clocks = <&gateclk 27>;
+               status = "disabled";
+       };
+};
diff --git a/Documentation/devicetree/bindings/pci/pci.txt b/Documentation/devicetree/bindings/pci/pci.txt
new file mode 100644 (file)
index 0000000..41aeed3
--- /dev/null
@@ -0,0 +1,9 @@
+PCI bus bridges have standardized Device Tree bindings:
+
+PCI Bus Binding to: IEEE Std 1275-1994
+http://www.openfirmware.org/ofwg/bindings/pci/pci2_1.pdf
+
+And for the interrupt mapping part:
+
+Open Firmware Recommended Practice: Interrupt Mapping
+http://www.openfirmware.org/1275/practice/imap/imap0_9d.pdf
diff --git a/Documentation/devicetree/bindings/pci/v3-v360epc-pci.txt b/Documentation/devicetree/bindings/pci/v3-v360epc-pci.txt
new file mode 100644 (file)
index 0000000..30b364e
--- /dev/null
@@ -0,0 +1,15 @@
+V3 Semiconductor V360 EPC PCI bridge
+
+This bridge is found in the ARM Integrator/AP (Application Platform)
+
+Integrator-specific notes:
+
+- syscon: should contain a link to the syscon device node (since
+  on the Integrator, some registers in the syscon are required to
+  operate the V3).
+
+V360 EPC specific notes:
+
+- reg: should contain the base address of the V3 adapter.
+- interrupts: should contain a reference to the V3 error interrupt
+  as routed on the system.
index 93e2b0f048e6128a28a6e523dab251cb41df01d6..eb2327b2bdb3143ba126089536402d113719a6c8 100644 (file)
@@ -5,9 +5,20 @@ Required properties:
 - reg: physical base address of the controller and length of memory mapped
   region.
 - interrupts: IRQ line for the timer.
+- either clocks+clock-names or clock-frequency properties
+
+Optional properties:
+- clocks       : list of clock specifiers, corresponding to entries in
+                 the clock-names property;
+- clock-names  : should contain "timer" and "pclk" entries, matching entries
+                 in the clocks property.
 - clock-frequency: The frequency in HZ of the timer.
 - clock-freq: For backwards compatibility with picoxcell
 
+If using the clock specifiers, the pclk clock is optional, as not all
+systems may use one.
+
+
 Example:
 
                timer1: timer@ffc09000 {
@@ -23,3 +34,11 @@ Example:
                                clock-frequency = <200000000>;
                                reg = <0xffd00000 0x1000>;
                        };
+
+               timer3: timer@ffe00000 {
+                               compatible = "snps,dw-apb-timer-osc";
+                               interrupts = <0 170 4>;
+                               reg = <0xffe00000 0x1000>;
+                               clocks = <&timer_clk>, <&timer_pclk>;
+                               clock-names = "timer", "pclk";
+                       };
diff --git a/Documentation/devicetree/bindings/timer/stericsson-u300-apptimer.txt b/Documentation/devicetree/bindings/timer/stericsson-u300-apptimer.txt
new file mode 100644 (file)
index 0000000..9499bc8
--- /dev/null
@@ -0,0 +1,18 @@
+ST-Ericsson U300 apptimer
+
+Required properties:
+
+- compatible : should be "stericsson,u300-apptimer"
+- reg : Specifies base physical address and size of the registers.
+- interrupts : A list of 4 interrupts; one for each subtimer. These
+  are, in order: OS (operating system), DD (device driver) both
+  adopted for EPOC/Symbian with two specific IRQs for these tasks,
+  then GP1 and GP2, which are general-purpose timers.
+
+Example:
+
+timer {
+       compatible = "stericsson,u300-apptimer";
+       reg = <0xc0014000 0x1000>;
+       interrupts = <24 25 26 27>;
+};
index 6931c4348d240ed9f8bf6b21a0d75f9c520edf1d..d247d1003987b2ee1901103446035643587faa47 100644 (file)
@@ -59,6 +59,7 @@ ste   ST-Ericsson
 stericsson     ST-Ericsson
 ti     Texas Instruments
 toshiba        Toshiba Corporation
+v3     V3 Semiconductor
 via    VIA Technologies, Inc.
 wlf    Wolfson Microelectronics
 wm     Wondermedia Technologies, Inc.
diff --git a/Documentation/devicetree/bindings/watchdog/stericsson-coh901327.txt b/Documentation/devicetree/bindings/watchdog/stericsson-coh901327.txt
new file mode 100644 (file)
index 0000000..8ffb88e
--- /dev/null
@@ -0,0 +1,19 @@
+ST-Ericsson COH 901 327 Watchdog timer
+
+Required properties:
+- compatible: must be "stericsson,coh901327".
+- reg: physical base address of the controller and length of memory mapped
+  region.
+- interrupts: the interrupt used for the watchdog timeout warning.
+
+Optional properties:
+- timeout-sec: contains the watchdog timeout in seconds.
+
+Example:
+
+watchdog: watchdog@c0012000 {
+       compatible = "stericsson,coh901327";
+       reg = <0xc0012000 0x1000>;
+       interrupts = <3>;
+       timeout-sec = <60>;
+};
index 941dbb86a4d68e3fa424cf82f0813a1a4b3a3e12..7a13c2cd7a86f31e8fcd53cbf22a0a29a40eb9b2 100644 (file)
@@ -9,7 +9,7 @@ config ARM
        select BUILDTIME_EXTABLE_SORT if MMU
        select CPU_PM if (SUSPEND || CPU_IDLE)
        select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU
-       select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI)
+       select GENERIC_ATOMIC64 if (CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI)
        select GENERIC_CLOCKEVENTS_BROADCAST if SMP
        select GENERIC_IRQ_PROBE
        select GENERIC_IRQ_SHOW
@@ -366,11 +366,12 @@ config ARCH_CLPS711X
        select ARCH_REQUIRE_GPIOLIB
        select AUTO_ZRELADDR
        select CLKDEV_LOOKUP
+       select CLKSRC_MMIO
        select COMMON_CLK
        select CPU_ARM720T
        select GENERIC_CLOCKEVENTS
+       select MFD_SYSCON
        select MULTI_IRQ_HANDLER
-       select NEED_MACH_MEMORY_H
        select SPARSE_IRQ
        help
          Support for Cirrus Logic 711x/721x/731x based boards.
@@ -502,6 +503,7 @@ config ARCH_DOVE
 
 config ARCH_KIRKWOOD
        bool "Marvell Kirkwood"
+       select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
@@ -634,6 +636,7 @@ config ARCH_MSM
 
 config ARCH_SHMOBILE
        bool "Renesas SH-Mobile / R-Mobile"
+       select ARM_PATCH_PHYS_VIRT
        select CLKDEV_LOOKUP
        select GENERIC_CLOCKEVENTS
        select HAVE_ARM_SCU if SMP
@@ -643,9 +646,8 @@ config ARCH_SHMOBILE
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
        select MULTI_IRQ_HANDLER
-       select NEED_MACH_MEMORY_H
        select NO_IOPORT
-       select PINCTRL if ARCH_WANT_OPTIONAL_GPIOLIB
+       select PINCTRL
        select PM_GENERIC_DOMAINS if PM
        select SPARSE_IRQ
        help
@@ -695,6 +697,7 @@ config ARCH_S3C24XX
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS
+       select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
@@ -702,6 +705,7 @@ config ARCH_S3C24XX
        select MULTI_IRQ_HANDLER
        select NEED_MACH_GPIO_H
        select NEED_MACH_IO_H
+       select SAMSUNG_ATAGS
        help
          Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443
          and S3C2450 SoCs based systems, such as the Simtec Electronics BAST
@@ -717,6 +721,7 @@ config ARCH_S3C64XX
        select CLKSRC_MMIO
        select CPU_V6
        select GENERIC_CLOCKEVENTS
+       select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
@@ -726,6 +731,7 @@ config ARCH_S3C64XX
        select PLAT_SAMSUNG
        select S3C_DEV_NAND
        select S3C_GPIO_TRACK
+       select SAMSUNG_ATAGS
        select SAMSUNG_CLKSRC
        select SAMSUNG_GPIOLIB_4BIT
        select SAMSUNG_IRQ_VIC_TIMER
@@ -740,12 +746,14 @@ config ARCH_S5P64X0
        select CLKSRC_MMIO
        select CPU_V6
        select GENERIC_CLOCKEVENTS
+       select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
        select SAMSUNG_WDT_RESET
+       select SAMSUNG_ATAGS
        help
          Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
          SMDK6450.
@@ -757,12 +765,14 @@ config ARCH_S5PC100
        select CLKSRC_MMIO
        select CPU_V7
        select GENERIC_CLOCKEVENTS
+       select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
        select SAMSUNG_WDT_RESET
+       select SAMSUNG_ATAGS
        help
          Samsung S5PC100 series based systems
 
@@ -775,12 +785,14 @@ config ARCH_S5PV210
        select CLKSRC_MMIO
        select CPU_V7
        select GENERIC_CLOCKEVENTS
+       select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
        select NEED_MACH_MEMORY_H
+       select SAMSUNG_ATAGS
        help
          Samsung S5PV210/S5PC110 series based systems
 
@@ -788,7 +800,9 @@ config ARCH_EXYNOS
        bool "Samsung EXYNOS"
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_HOLES_MEMORYMODEL
+       select ARCH_REQUIRE_GPIOLIB
        select ARCH_SPARSEMEM_ENABLE
+       select ARM_GIC
        select CLKDEV_LOOKUP
        select COMMON_CLK
        select CPU_V7
@@ -797,8 +811,9 @@ config ARCH_EXYNOS
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
-       select NEED_MACH_GPIO_H
        select NEED_MACH_MEMORY_H
+       select SPARSE_IRQ
+       select USE_OF
        help
          Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
 
@@ -816,23 +831,6 @@ config ARCH_SHARK
          Support for the StrongARM based Digital DNARD machine, also known
          as "Shark" (<http://www.shark-linux.de/shark.html>).
 
-config ARCH_U300
-       bool "ST-Ericsson U300 Series"
-       depends on MMU
-       select ARCH_REQUIRE_GPIOLIB
-       select ARM_AMBA
-       select ARM_PATCH_PHYS_VIRT
-       select ARM_VIC
-       select CLKDEV_LOOKUP
-       select CLKSRC_MMIO
-       select COMMON_CLK
-       select CPU_ARM926T
-       select GENERIC_CLOCKEVENTS
-       select HAVE_TCM
-       select SPARSE_IRQ
-       help
-         Support for ST-Ericsson U300 series mobile platforms.
-
 config ARCH_DAVINCI
        bool "TI DaVinci"
        select ARCH_HAS_HOLES_MEMORYMODEL
@@ -843,6 +841,7 @@ config ARCH_DAVINCI
        select GENERIC_IRQ_CHIP
        select HAVE_IDE
        select NEED_MACH_GPIO_H
+       select TI_PRIV_EDMA
        select USE_OF
        select ZONE_DMA
        help
@@ -874,20 +873,21 @@ menu "Multiple platform selection"
 
 comment "CPU Core family selection"
 
-config ARCH_MULTI_V4
-       bool "ARMv4 based platforms (FA526, StrongARM)"
-       depends on !ARCH_MULTI_V6_V7
-       select ARCH_MULTI_V4_V5
-
 config ARCH_MULTI_V4T
        bool "ARMv4T based platforms (ARM720T, ARM920T, ...)"
        depends on !ARCH_MULTI_V6_V7
        select ARCH_MULTI_V4_V5
+       select CPU_ARM920T if !(CPU_ARM7TDMI || CPU_ARM720T || \
+               CPU_ARM740T || CPU_ARM9TDMI || CPU_ARM922T || \
+               CPU_ARM925T || CPU_ARM940T)
 
 config ARCH_MULTI_V5
        bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
        depends on !ARCH_MULTI_V6_V7
        select ARCH_MULTI_V4_V5
+       select CPU_ARM926T if (!CPU_ARM946E || CPU_ARM1020 || \
+               CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
+               CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
 
 config ARCH_MULTI_V4_V5
        bool
@@ -951,6 +951,8 @@ source "arch/arm/mach-iop13xx/Kconfig"
 
 source "arch/arm/mach-ixp4xx/Kconfig"
 
+source "arch/arm/mach-keystone/Kconfig"
+
 source "arch/arm/mach-kirkwood/Kconfig"
 
 source "arch/arm/mach-ks8695/Kconfig"
@@ -984,6 +986,8 @@ source "arch/arm/mach-mmp/Kconfig"
 
 source "arch/arm/mach-realview/Kconfig"
 
+source "arch/arm/mach-rockchip/Kconfig"
+
 source "arch/arm/mach-sa1100/Kconfig"
 
 source "arch/arm/plat-samsung/Kconfig"
@@ -1420,6 +1424,7 @@ config PCI_HOST_ITE8152
        select DMABOUNCE
 
 source "drivers/pci/Kconfig"
+source "drivers/pci/pcie/Kconfig"
 
 source "drivers/pcmcia/Kconfig"
 
@@ -1587,6 +1592,7 @@ config ARCH_NR_GPIO
        int
        default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
        default 512 if SOC_OMAP5
+       default 512 if ARCH_KEYSTONE
        default 392 if ARCH_U8500
        default 352 if ARCH_VT8500
        default 288 if ARCH_SUNXI
@@ -1612,7 +1618,7 @@ config SCHED_HRTICK
 
 config THUMB2_KERNEL
        bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY
-       depends on CPU_V7 && !CPU_V6 && !CPU_V6K
+       depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K
        default y if CPU_THUMBONLY
        select AEABI
        select ARM_ASM_UNIFIED
@@ -2067,7 +2073,7 @@ config CRASH_DUMP
 
 config AUTO_ZRELADDR
        bool "Auto calculation of the decompressed kernel image address"
-       depends on !ZBOOT_ROM && !ARCH_U300
+       depends on !ZBOOT_ROM
        help
          ZRELADDR is the physical address where the decompressed kernel
          image will be placed. If AUTO_ZRELADDR is selected, the address
index 2cef8e13f9f83012c224c23802c383e4715a135f..c859495da48046e7b0427845ed265535f3f2aa3d 100644 (file)
@@ -28,7 +28,7 @@ config FLASH_SIZE
 config PROCESSOR_ID
        hex 'Hard wire the processor ID'
        default 0x00007700
-       depends on !CPU_CP15
+       depends on !(CPU_CP15 || CPU_V7M)
        help
          If processor has no CP15 register, this processor ID is
          used instead of the auto-probing which utilizes the register.
index 1d41908d5cda0644a31a9048c882369f21db235b..ab95f07e154131adb2faf54e5b72f8d1b8495c9a 100644 (file)
@@ -251,6 +251,27 @@ choice
                  Say Y here if you want kernel low-level debugging support
                  on i.MX6Q/DL.
 
+       config DEBUG_IMX6SL_UART
+               bool "i.MX6SL Debug UART"
+               depends on SOC_IMX6SL
+               help
+                 Say Y here if you want kernel low-level debugging support
+                 on i.MX6SL.
+
+       config DEBUG_KEYSTONE_UART0
+               bool "Kernel low-level debugging on KEYSTONE2 using UART0"
+               depends on ARCH_KEYSTONE
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to UART0 serial port on KEYSTONE2 devices.
+
+       config DEBUG_KEYSTONE_UART1
+               bool "Kernel low-level debugging on KEYSTONE2 using UART1"
+               depends on ARCH_KEYSTONE
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to UART1 serial port on KEYSTONE2 devices.
+
        config DEBUG_MMP_UART2
                bool "Kernel low-level debugging message via MMP UART2"
                depends on ARCH_MMP
@@ -303,12 +324,37 @@ choice
                  their output to the serial port on MSM 8960 devices.
 
        config DEBUG_MVEBU_UART
-               bool "Kernel low-level debugging messages via MVEBU UART"
+               bool "Kernel low-level debugging messages via MVEBU UART (old bootloaders)"
                depends on ARCH_MVEBU
                help
                  Say Y here if you want kernel low-level debugging support
                  on MVEBU based platforms.
 
+                 This option should be used with the old bootloaders
+                 that left the internal registers mapped at
+                 0xd0000000. As of today, this is the case on
+                 platforms such as the Globalscale Mirabox or the
+                 Plathome OpenBlocks AX3, when using the original
+                 bootloader.
+
+                 If the wrong DEBUG_MVEBU_UART* option is selected,
+                 when u-boot hands over to the kernel, the system
+                 silently crashes, with no serial output at all.
+
+       config DEBUG_MVEBU_UART_ALTERNATE
+               bool "Kernel low-level debugging messages via MVEBU UART (new bootloaders)"
+               depends on ARCH_MVEBU
+               help
+                 Say Y here if you want kernel low-level debugging support
+                 on MVEBU based platforms.
+
+                 This option should be used with the new bootloaders
+                 that remap the internal registers at 0xf1000000.
+
+                 If the wrong DEBUG_MVEBU_UART* option is selected,
+                 when u-boot hands over to the kernel, the system
+                 silently crashes, with no serial output at all.
+
        config DEBUG_NOMADIK_UART
                bool "Kernel low-level debugging messages via NOMADIK UART"
                depends on ARCH_NOMADIK
@@ -353,6 +399,13 @@ choice
                  their output to the standard serial port on the RealView
                  PB1176 platform.
 
+       config DEBUG_ROCKCHIP_UART
+               bool "Kernel low-level debugging messages via Rockchip UART"
+               depends on ARCH_ROCKCHIP
+               help
+                 Say Y here if you want kernel low-level debugging support
+                 on Rockchip based platforms.
+
        config DEBUG_S3C_UART0
                depends on PLAT_SAMSUNG
                select DEBUG_EXYNOS_UART if ARCH_EXYNOS
@@ -443,6 +496,13 @@ choice
                  Say Y here if you want the debug print routines to direct
                  their output to the uart1 port on SiRFmarco devices.
 
+       config DEBUG_U300_UART
+               bool "Kernel low-level debugging messages via U300 UART0"
+               depends on ARCH_U300
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the uart port on U300 devices.
+
        config DEBUG_UX500_UART
                depends on ARCH_U8500
                bool "Use Ux500 UART for low-level debug"
@@ -532,7 +592,8 @@ config DEBUG_IMX_UART_PORT
                                                DEBUG_IMX35_UART || \
                                                DEBUG_IMX51_UART || \
                                                DEBUG_IMX53_UART || \
-                                               DEBUG_IMX6Q_UART
+                                               DEBUG_IMX6Q_UART || \
+                                               DEBUG_IMX6SL_UART
        default 1
        depends on ARCH_MXC
        help
@@ -587,6 +648,32 @@ choice
                bool "Zoom2/3 UART"
 endchoice
 
+choice
+       prompt "Low-level debug console UART"
+       depends on DEBUG_ROCKCHIP_UART
+
+       config DEBUG_RK29_UART0
+               bool "RK29 UART0"
+
+       config DEBUG_RK29_UART1
+               bool "RK29 UART1"
+
+       config DEBUG_RK29_UART2
+               bool "RK29 UART2"
+
+       config DEBUG_RK3X_UART0
+               bool "RK3X UART0"
+
+       config DEBUG_RK3X_UART1
+               bool "RK3X UART1"
+
+       config DEBUG_RK3X_UART2
+               bool "RK3X UART2"
+
+       config DEBUG_RK3X_UART3
+               bool "RK3X UART3"
+endchoice
+
 choice
        prompt "Low-level debug console UART"
        depends on DEBUG_LL && DEBUG_TEGRA_UART
@@ -631,18 +718,24 @@ config DEBUG_LL_INCLUDE
                                 DEBUG_IMX35_UART || \
                                 DEBUG_IMX51_UART || \
                                 DEBUG_IMX53_UART ||\
-                                DEBUG_IMX6Q_UART
-       default "debug/mvebu.S" if DEBUG_MVEBU_UART
+                                DEBUG_IMX6Q_UART || \
+                                DEBUG_IMX6SL_UART
+       default "debug/keystone.S" if DEBUG_KEYSTONE_UART0 || \
+                                     DEBUG_KEYSTONE_UART1
+       default "debug/mvebu.S" if DEBUG_MVEBU_UART || \
+                                  DEBUG_MVEBU_UART_ALTERNATE
        default "debug/mxs.S" if DEBUG_IMX23_UART || DEBUG_IMX28_UART
        default "debug/nomadik.S" if DEBUG_NOMADIK_UART
        default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART
        default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART
        default "debug/pxa.S" if DEBUG_PXA_UART1 || DEBUG_MMP_UART2 || \
                                 DEBUG_MMP_UART3
+       default "debug/rockchip.S" if DEBUG_ROCKCHIP_UART
        default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
        default "debug/socfpga.S" if DEBUG_SOCFPGA_UART
        default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1
        default "debug/tegra.S" if DEBUG_TEGRA_UART
+       default "debug/u300.S" if DEBUG_U300_UART
        default "debug/ux500.S" if DEBUG_UX500_UART
        default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
                DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1
index 7ea15176d1099e20c99f0f5372306621e237d2d5..c01e4a728554a79540041ec872df72af5154fc77 100644 (file)
@@ -59,6 +59,7 @@ comma = ,
 # Note that GCC does not numerically define an architecture version
 # macro, but instead defines a whole series of macros which makes
 # testing for a specific architecture or later rather impossible.
+arch-$(CONFIG_CPU_32v7M)       :=-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
 arch-$(CONFIG_CPU_32v7)                :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
 arch-$(CONFIG_CPU_32v6)                :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
 # Only override the compiler option if ARMv6. The ARMv6K extensions are
@@ -171,6 +172,7 @@ machine-$(CONFIG_ARCH_PICOXCELL)    += picoxcell
 machine-$(CONFIG_ARCH_SIRF)            += prima2
 machine-$(CONFIG_ARCH_PXA)             += pxa
 machine-$(CONFIG_ARCH_REALVIEW)                += realview
+machine-$(CONFIG_ARCH_ROCKCHIP)                += rockchip
 machine-$(CONFIG_ARCH_RPC)             += rpc
 machine-$(CONFIG_ARCH_S3C24XX)         += s3c24xx
 machine-$(CONFIG_ARCH_S3C64XX)         += s3c64xx
@@ -194,9 +196,11 @@ machine-$(CONFIG_PLAT_SPEAR)               += spear
 machine-$(CONFIG_ARCH_VIRT)            += virt
 machine-$(CONFIG_ARCH_ZYNQ)            += zynq
 machine-$(CONFIG_ARCH_SUNXI)           += sunxi
+machine-$(CONFIG_ARCH_KEYSTONE)                += keystone
 
 # Platform directory name.  This list is sorted alphanumerically
 # by CONFIG_* macro name.
+plat-$(CONFIG_ARCH_EXYNOS)     += samsung
 plat-$(CONFIG_ARCH_OMAP)       += omap
 plat-$(CONFIG_ARCH_S3C64XX)    += samsung
 plat-$(CONFIG_PLAT_IOP)                += iop
index fe3719b516fd47370ba089b624ddd123de6a5750..e2d636336b7c783634747a6433e57eebc56b6d6c 100644 (file)
@@ -46,7 +46,7 @@ __image_start:
 __image_end:
        .long   _got_end
 __load_base:
-       .long   CONFIG_MEMORY_START + 0x02000000 @ Load at 32Mb into SDRAM
+       .long   MEMORY_START + 0x02000000 @ Load at 32Mb into SDRAM
 __loaded:
        .long   __continue
        .align
@@ -55,26 +55,9 @@ __tmp_stack:
 __continue:
 #endif /* CONFIG_ZBOOT_ROM_MMC || CONFIG_ZBOOT_ROM_SH_MOBILE_SDHI */
 
-       b       1f
-__atags:@ tag #1
-       .long   12                      @ tag->hdr.size = tag_size(tag_core);
-       .long   0x54410001              @ tag->hdr.tag = ATAG_CORE;
-       .long   0                       @ tag->u.core.flags = 0;
-       .long   0                       @ tag->u.core.pagesize = 0;
-       .long   0                       @ tag->u.core.rootdev = 0;
-       @ tag #2
-       .long   8                       @ tag->hdr.size = tag_size(tag_mem32);
-       .long   0x54410002              @ tag->hdr.tag = ATAG_MEM;
-       .long   CONFIG_MEMORY_SIZE      @ tag->u.mem.size = CONFIG_MEMORY_SIZE;
-       .long   CONFIG_MEMORY_START     @ @ tag->u.mem.start = CONFIG_MEMORY_START;
-       @ tag #3
-       .long   0                       @ tag->hdr.size = 0
-       .long   0                       @ tag->hdr.tag = ATAG_NONE;
-1:
-
        /* Set board ID necessary for boot */
        ldr     r7, 1f                          @ Set machine type register
-       adr     r8, __atags                     @ Set atag register
+       mov     r8, #0                          @ pass null pointer as atag
        b       2f
 
 1 :    .long MACH_TYPE
index f0895c581a89be8668a99db10e6873ae94be0cef..f9eae2f0ae5d6fa32d62f3d71f22cee7967471b3 100644 (file)
@@ -64,6 +64,8 @@ dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
        integratorcp.dtb
 dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb
 dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \
+       kirkwood-db-88f6281.dtb \
+       kirkwood-db-88f6282.dtb \
        kirkwood-dns320.dtb \
        kirkwood-dns325.dtb \
        kirkwood-dockstar.dtb \
@@ -199,6 +201,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
        tegra114-pluto.dtb
 dtb-$(CONFIG_ARCH_VERSATILE) += versatile-ab.dtb \
        versatile-pb.dtb
+dtb-$(CONFIG_ARCH_U300) += ste-u300.dtb
 dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \
        vexpress-v2p-ca9.dtb \
        vexpress-v2p-ca15-tc1.dtb \
index d55042beb5c55f29739a5b8082a6bbed53e89d80..f96de398c965d51989188941e3cfa32f6b4a6562 100644 (file)
                        clock-frequency = <50000000>;
                };
        };
+
+       pcie@290000 {
+               reset-gpio = <&pin_ctrl 5 0>;
+       };
+
+       pcie@2a0000 {
+               reset-gpio = <&pin_ctrl 22 0>;
+       };
 };
index f6b1c8973845821913215a7d59cca615ae23f482..b7ffc4dfe2196ab7faca0a81552ab8b67160f559 100644 (file)
                clock-names = "spi", "spi_busclk0";
        };
 
-       pinctrl {
+       pin_ctrl: pinctrl {
                compatible = "samsung,exynos5440-pinctrl";
                reg = <0xE0000 0x1000>;
                interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>,
                clock-names = "rtc";
                status = "disabled";
        };
+
+       pcie@290000 {
+               compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
+               reg = <0x290000 0x1000
+                       0x270000 0x1000
+                       0x271000 0x40>;
+               interrupts = <0 20 0>, <0 21 0>, <0 22 0>;
+               clocks = <&clock 28>, <&clock 27>;
+               clock-names = "pcie", "pcie_bus";
+               #address-cells = <3>;
+               #size-cells = <2>;
+               device_type = "pci";
+               ranges = <0x00000800 0 0x40000000 0x40000000 0 0x00001000   /* configuration space */
+                         0x81000000 0 0          0x40001000 0 0x00010000   /* downstream I/O */
+                         0x82000000 0 0x40011000 0x40011000 0 0x1ffef000>; /* non-prefetchable memory */
+               #interrupt-cells = <1>;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0x0 0 &gic 53>;
+       };
+
+       pcie@2a0000 {
+               compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
+               reg = <0x2a0000 0x1000
+                       0x272000 0x1000
+                       0x271040 0x40>;
+               interrupts = <0 23 0>, <0 24 0>, <0 25 0>;
+               clocks = <&clock 29>, <&clock 27>;
+               clock-names = "pcie", "pcie_bus";
+               #address-cells = <3>;
+               #size-cells = <2>;
+               device_type = "pci";
+               ranges = <0x00000800 0 0x60000000 0x60000000 0 0x00001000   /* configuration space */
+                         0x81000000 0 0          0x60001000 0 0x00010000   /* downstream I/O */
+                         0x82000000 0 0x60011000 0x60011000 0 0x1ffef000>; /* non-prefetchable memory */
+               #interrupt-cells = <1>;
+               interrupt-map-mask = <0 0 0 0>;
+               interrupt-map = <0x0 0 &gic 56>;
+       };
 };
index c9c3fa344647de9f012d1a14f44c36910bdf8dd0..b6b82eca8d1e8f2ecd2869aa90b4fd58f8da9afa 100644 (file)
                valid-mask = <0x003fffff>;
        };
 
+       pci: pciv3@62000000 {
+               compatible = "v3,v360epc-pci";
+               #interrupt-cells = <1>;
+               #size-cells = <2>;
+               #address-cells = <3>;
+               reg = <0x62000000 0x10000>;
+               interrupt-parent = <&pic>;
+               interrupts = <17>; /* Bus error IRQ */
+               ranges = <0x00000000 0 0x61000000 /* config space */
+                       0x61000000 0 0x00100000 /* 16 MiB @ 61000000 */
+                       0x01000000 0 0x0 /* I/O space */
+                       0x60000000 0 0x00100000 /* 16 MiB @ 60000000 */
+                       0x02000000 0 0x00000000 /* non-prefectable memory */
+                       0x40000000 0 0x10000000 /* 256 MiB @ 40000000 */
+                       0x42000000 0 0x10000000 /* prefetchable memory */
+                       0x50000000 0 0x10000000>; /* 256 MiB @ 50000000 */
+               interrupt-map-mask = <0xf800 0 0 0x7>;
+               interrupt-map = <
+               /* IDSEL 9 */
+               0x4800 0 0 1 &pic 13 /* INT A on slot 9 is irq 13 */
+               0x4800 0 0 2 &pic 14 /* INT B on slot 9 is irq 14 */
+               0x4800 0 0 3 &pic 15 /* INT C on slot 9 is irq 15 */
+               0x4800 0 0 4 &pic 16 /* INT D on slot 9 is irq 16 */
+               /* IDSEL 10 */
+               0x5000 0 0 1 &pic 14 /* INT A on slot 10 is irq 14 */
+               0x5000 0 0 2 &pic 15 /* INT B on slot 10 is irq 15 */
+               0x5000 0 0 3 &pic 16 /* INT C on slot 10 is irq 16 */
+               0x5000 0 0 4 &pic 13 /* INT D on slot 10 is irq 13 */
+               /* IDSEL 11 */
+               0x5800 0 0 1 &pic 15 /* INT A on slot 11 is irq 15 */
+               0x5800 0 0 2 &pic 16 /* INT B on slot 11 is irq 16 */
+               0x5800 0 0 3 &pic 13 /* INT C on slot 11 is irq 13 */
+               0x5800 0 0 4 &pic 14 /* INT D on slot 11 is irq 14 */
+               /* IDSEL 12 */
+               0x6000 0 0 1 &pic 16 /* INT A on slot 12 is irq 16 */
+               0x6000 0 0 2 &pic 13 /* INT B on slot 12 is irq 13 */
+               0x6000 0 0 3 &pic 14 /* INT C on slot 12 is irq 14 */
+               0x6000 0 0 4 &pic 15 /* INT D on slot 12 is irq 15 */
+               >;
+       };
+
        fpga {
                /*
                 * The Integator/AP predates the idea to have magic numbers
diff --git a/arch/arm/boot/dts/keystone.dts b/arch/arm/boot/dts/keystone.dts
new file mode 100644 (file)
index 0000000..1334b42
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2013 Texas Instruments, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/dts-v1/;
+/include/ "skeleton.dtsi"
+
+/ {
+       model = "Texas Instruments Keystone 2 SoC";
+       compatible =  "ti,keystone-evm";
+       #address-cells = <2>;
+       #size-cells = <2>;
+       interrupt-parent = <&gic>;
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       memory {
+               reg = <0x00000000 0x80000000 0x00000000 0x40000000>;
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               interrupt-parent = <&gic>;
+
+               cpu@0 {
+                       compatible = "arm,cortex-a15";
+                       device_type = "cpu";
+                       reg = <0>;
+               };
+
+               cpu@1 {
+                       compatible = "arm,cortex-a15";
+                       device_type = "cpu";
+                       reg = <1>;
+               };
+
+               cpu@2 {
+                       compatible = "arm,cortex-a15";
+                       device_type = "cpu";
+                       reg = <2>;
+               };
+
+               cpu@3 {
+                       compatible = "arm,cortex-a15";
+                       device_type = "cpu";
+                       reg = <3>;
+               };
+       };
+
+       gic: interrupt-controller {
+               compatible = "arm,cortex-a15-gic";
+               #interrupt-cells = <3>;
+               #size-cells = <0>;
+               #address-cells = <1>;
+               interrupt-controller;
+               reg = <0x0 0x02561000 0x0 0x1000>,
+                     <0x0 0x02562000 0x0 0x2000>;
+       };
+
+       timer {
+               compatible = "arm,armv7-timer";
+               interrupts = <1 13 0xf08>,
+                            <1 14 0xf08>,
+                            <1 11 0xf08>,
+                            <1 10 0x308>;
+       };
+
+       pmu {
+               compatible = "arm,cortex-a15-pmu";
+               interrupts = <0 20 0xf01>,
+                            <0 21 0xf01>,
+                            <0 22 0xf01>,
+                            <0 23 0xf01>;
+       };
+
+       soc {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "ti,keystone","simple-bus";
+               interrupt-parent = <&gic>;
+               ranges = <0x0 0x0 0x0 0xc0000000>;
+
+               rstctrl: reset-controller {
+                       compatible = "ti,keystone-reset";
+                       reg = <0x023100e8 4>;   /* pll reset control reg */
+               };
+
+               uart0: serial@02530c00 {
+                       compatible = "ns16550a";
+                       current-speed = <115200>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       reg = <0x02530c00 0x100>;
+                       clock-frequency = <133120000>;
+                       interrupts = <0 277 0xf01>;
+               };
+
+               uart1:  serial@02531000 {
+                       compatible = "ns16550a";
+                       current-speed = <115200>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       reg = <0x02531000 0x100>;
+                       clock-frequency = <133120000>;
+                       interrupts = <0 280 0xf01>;
+               };
+
+       };
+};
index d6c9d65cbaeb5bba44c0f91504bc53c38f82bad8..51376683dbcdd2875b2c77aa7bfa85fd5374980d 100644 (file)
                                marvell,function = "sdio";
                        };
                };
+
+               pcie-controller {
+                       compatible = "marvell,kirkwood-pcie";
+                       status = "disabled";
+                       device_type = "pci";
+
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+
+                       bus-range = <0x00 0xff>;
+
+                       ranges = <0x82000000 0 0x00040000 0x00040000 0 0x00002000   /* Port 0.0 registers */
+                                 0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */
+                                 0x81000000 0 0          0xe8000000 0 0x00100000>; /* downstream I/O */
+
+                       pcie@1,0 {
+                               device_type = "pci";
+                               assigned-addresses = <0x82000800 0 0x00040000 0 0x2000>;
+                               reg = <0x0800 0 0 0 0>;
+                               #address-cells = <3>;
+                               #size-cells = <2>;
+                               #interrupt-cells = <1>;
+                               ranges;
+                               interrupt-map-mask = <0 0 0 0>;
+                               interrupt-map = <0 0 0 0 &intc 9>;
+                               marvell,pcie-port = <0>;
+                               marvell,pcie-lane = <0>;
+                               clocks = <&gate_clk 2>;
+                               status = "disabled";
+                       };
+               };
        };
 };
index 23991e45bc55f946609e84cc319c81aeed6d0122..66a751ab5516bd8a72de4738f874e68e275eb788 100644 (file)
                        clocks = <&gate_clk 7>;
                        status = "disabled";
                };
+
+               pcie-controller {
+                       compatible = "marvell,kirkwood-pcie";
+                       status = "disabled";
+                       device_type = "pci";
+
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+
+                       bus-range = <0x00 0xff>;
+
+                       ranges = <0x82000000 0 0x00040000 0x00040000 0 0x00002000   /* Port 0.0 registers */
+                                 0x82000000 0 0x00044000 0x00044000 0 0x00002000   /* Port 1.0 registers */
+                                 0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */
+                                 0x81000000 0 0          0xe8000000 0 0x00100000>; /* downstream I/O */
+
+                       pcie@1,0 {
+                               device_type = "pci";
+                               assigned-addresses = <0x82000800 0 0x00040000 0 0x2000>;
+                               reg = <0x0800 0 0 0 0>;
+                               #address-cells = <3>;
+                               #size-cells = <2>;
+                               #interrupt-cells = <1>;
+                               ranges;
+                               interrupt-map-mask = <0 0 0 0>;
+                               interrupt-map = <0 0 0 0 &intc 9>;
+                               marvell,pcie-port = <0>;
+                               marvell,pcie-lane = <0>;
+                               clocks = <&gate_clk 2>;
+                               status = "disabled";
+                       };
+
+                       pcie@2,0 {
+                               device_type = "pci";
+                               assigned-addresses = <0x82001000 0 0x00044000 0 0x2000>;
+                               reg = <0x1000 0 0 0 0>;
+                               #address-cells = <3>;
+                               #size-cells = <2>;
+                               #interrupt-cells = <1>;
+                               ranges;
+                               interrupt-map-mask = <0 0 0 0>;
+                               interrupt-map = <0 0 0 0 &intc 10>;
+                               marvell,pcie-port = <1>;
+                               marvell,pcie-lane = <0>;
+                               clocks = <&gate_clk 18>;
+                               status = "disabled";
+                       };
+               };
        };
 };
diff --git a/arch/arm/boot/dts/kirkwood-db-88f6281.dts b/arch/arm/boot/dts/kirkwood-db-88f6281.dts
new file mode 100644 (file)
index 0000000..9d777ed
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Marvell DB-88F6281-BP Development Board Setup
+ *
+ * Saeed Bishara <saeed@marvell.com>
+ * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+/dts-v1/;
+
+/include/ "kirkwood-db.dtsi"
+/include/ "kirkwood-6281.dtsi"
+
+/ {
+       model = "Marvell DB-88F6281-BP Development Board";
+       compatible = "marvell,db-88f6281-bp", "marvell,kirkwood-88f6281", "marvell,kirkwood";
+
+       ocp@f1000000 {
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/kirkwood-db-88f6282.dts b/arch/arm/boot/dts/kirkwood-db-88f6282.dts
new file mode 100644 (file)
index 0000000..f4c8528
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Marvell DB-88F6282-BP Development Board Setup
+ *
+ * Saeed Bishara <saeed@marvell.com>
+ * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+/dts-v1/;
+
+/include/ "kirkwood-db.dtsi"
+/include/ "kirkwood-6282.dtsi"
+
+/ {
+       model = "Marvell DB-88F6282-BP Development Board";
+       compatible = "marvell,db-88f6282-bp", "marvell,kirkwood-88f6282", "marvell,kirkwood";
+
+       ocp@f1000000 {
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+
+                       pcie@2,0 {
+                               status = "okay";
+                       };
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/kirkwood-db.dtsi b/arch/arm/boot/dts/kirkwood-db.dtsi
new file mode 100644 (file)
index 0000000..c87cfb8
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Marvell DB-{88F6281,88F6282}-BP Development Board Setup
+ *
+ * Saeed Bishara <saeed@marvell.com>
+ * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ *
+ * This file contains the definitions that are common between the 6281
+ * and 6282 variants of the Marvell Kirkwood Development Board.
+ */
+
+/include/ "kirkwood.dtsi"
+
+/ {
+       memory {
+               device_type = "memory";
+               reg = <0x00000000 0x20000000>; /* 512 MB */
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8 earlyprintk";
+       };
+
+       ocp@f1000000 {
+               pinctrl@10000 {
+                       pmx_sdio_gpios: pmx-sdio-gpios {
+                               marvell,pins = "mpp37", "mpp38";
+                               marvell,function = "gpio";
+                       };
+               };
+
+               serial@12000 {
+                       pinctrl-0 = <&pmx_uart0>;
+                       pinctrl-names = "default";
+                       clock-frequency = <200000000>;
+                       status = "ok";
+               };
+
+               nand@3000000 {
+                       pinctrl-0 = <&pmx_nand>;
+                       pinctrl-names = "default";
+                       chip-delay = <25>;
+                       status = "okay";
+
+                       partition@0 {
+                               label = "uboot";
+                               reg = <0x0 0x100000>;
+                       };
+
+                       partition@100000 {
+                               label = "uImage";
+                               reg = <0x100000 0x400000>;
+                       };
+
+                       partition@500000 {
+                               label = "root";
+                               reg = <0x500000 0x1fb00000>;
+                       };
+               };
+
+               sata@80000 {
+                       nr-ports = <2>;
+                       status = "okay";
+               };
+
+               ehci@50000 {
+                       status = "okay";
+               };
+
+               mvsdio@90000 {
+                       pinctrl-0 = <&pmx_sdio_gpios>;
+                       pinctrl-names = "default";
+                       wp-gpios = <&gpio1 5 0>;
+                       cd-gpios = <&gpio1 6 0>;
+                       status = "okay";
+               };
+
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
+       };
+};
index 12ccf74ac3c417e6de31fa5c33a2ab731f136220..e591d5df769f11af23c0358035ebbd9786628c64 100644 (file)
                                reg = <0x980000 0x1f400000>;
                        };
                };
+
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
        };
 
        gpio-leds {
index 758824118a9a8e22041817183449839f1c9c072e..90501cf129bbee8b648fa9d808c45cfb5a58a93e 100644 (file)
                        cd-gpios = <&gpio1 15 0>;
                        /* No WP GPIO */
                };
+
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
        };
 
        gpio-leds {
index 1ca66ab83ad671933da073be7f1f7f58694a9396..0f852b40f5c1111fbad856e8388dfebf4e590e96 100644 (file)
                        status = "okay";
                        nr-ports = <2>;
                };
+
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
        };
 
        gpio-leds {
index a7412b937a8add0c3f0ccfbc165c0a5c3325f50d..9ddf218f2cbd5fbca848b390d68e756c12140954 100644 (file)
                                reg = <0x5040000 0x2fc0000>;
                        };
                };
+
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
        };
 
        gpio_keys {
index 8295c833887ff6851322f52abac570b25ab9aa08..42648ab77c617f306c34f92befd45eea1b3e23c0 100644 (file)
@@ -1,7 +1,8 @@
 /dts-v1/;
 
-/include/ "kirkwood-ts219.dtsi"
+/include/ "kirkwood.dtsi"
 /include/ "kirkwood-6281.dtsi"
+/include/ "kirkwood-ts219.dtsi"
 
 / {
        ocp@f1000000 {
index df3f95dfba3341d07628a3ce212d63cc27f0f3ba..95ceeb93ba5ada0ce4a6823a06b786287fb42cdb 100644 (file)
@@ -1,7 +1,8 @@
 /dts-v1/;
 
-/include/ "kirkwood-ts219.dtsi"
+/include/ "kirkwood.dtsi"
 /include/ "kirkwood-6282.dtsi"
+/include/ "kirkwood-ts219.dtsi"
 
 / {
        ocp@f1000000 {
index 64ea27cb329851eb1fd242a8b016f619bb860ce4..7c022fd4aef79c8da3f57a0114bb62f23234a418 100644 (file)
@@ -1,5 +1,3 @@
-/include/ "kirkwood.dtsi"
-
 / {
        model = "QNAP TS219 family";
        compatible = "qnap,ts219", "marvell,kirkwood";
                        status = "okay";
                        nr-ports = <2>;
                };
+               pcie-controller {
+                       status = "okay";
+
+                       pcie@1,0 {
+                               status = "okay";
+                       };
+               };
        };
 };
index fada7e6d24d8543fd956ef18d7981aa12b9b9ee6..7eef88f00fea9532d91f81648554f97a9cb5f11d 100644 (file)
@@ -19,6 +19,7 @@
        ocp@f1000000 {
                compatible = "simple-bus";
                ranges = <0x00000000 0xf1000000 0x4000000
+                         0xe0000000 0xe0000000 0x8100000 /* PCIE */
                          0xf5000000 0xf5000000 0x0000400>;
                #address-cells = <1>;
                #size-cells = <1>;
diff --git a/arch/arm/boot/dts/rk3066a-clocks.dtsi b/arch/arm/boot/dts/rk3066a-clocks.dtsi
new file mode 100644 (file)
index 0000000..6e307fc
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 2013 MundoReader S.L.
+ * Author: Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+/ {
+       clocks {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               /*
+                * This is a dummy clock, to be used as placeholder on
+                * other mux clocks when a specific parent clock is not
+                * yet implemented. It should be dropped when the driver
+                * is complete.
+                */
+               dummy: dummy {
+                       compatible = "fixed-clock";
+                       clock-frequency = <0>;
+                       #clock-cells = <0>;
+               };
+
+               xin24m: xin24m {
+                       compatible = "fixed-clock";
+                       clock-frequency = <24000000>;
+                       #clock-cells = <0>;
+               };
+
+               dummy48m: dummy48m {
+                       compatible = "fixed-clock";
+                       clock-frequency = <48000000>;
+                       #clock-cells = <0>;
+               };
+
+               dummy150m: dummy150m {
+                       compatible = "fixed-clock";
+                       clock-frequency = <150000000>;
+                       #clock-cells = <0>;
+               };
+
+               clk_gates0: gate-clk@200000d0 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000d0 0x4>;
+                       clocks = <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>;
+
+                       clock-output-names =
+                               "gate_core_periph", "gate_cpu_gpll",
+                               "gate_ddrphy", "gate_aclk_cpu",
+                               "gate_hclk_cpu", "gate_pclk_cpu",
+                               "gate_atclk_cpu", "gate_i2s0",
+                               "gate_i2s0_frac", "gate_i2s1",
+                               "gate_i2s1_frac", "gate_i2s2",
+                               "gate_i2s2_frac", "gate_spdif",
+                               "gate_spdif_frac", "gate_testclk";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates1: gate-clk@200000d4 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000d4 0x4>;
+                       clocks = <&xin24m>, <&xin24m>,
+                                <&xin24m>, <&dummy>,
+                                <&dummy>, <&xin24m>,
+                                <&xin24m>, <&dummy>,
+                                <&xin24m>, <&dummy>,
+                                <&xin24m>, <&dummy>,
+                                <&xin24m>, <&dummy>,
+                                <&xin24m>, <&dummy>;
+
+                       clock-output-names =
+                               "gate_timer0", "gate_timer1",
+                               "gate_timer2", "gate_jtag",
+                               "gate_aclk_lcdc1_src", "gate_otgphy0",
+                               "gate_otgphy1", "gate_ddr_gpll",
+                               "gate_uart0", "gate_frac_uart0",
+                               "gate_uart1", "gate_frac_uart1",
+                               "gate_uart2", "gate_frac_uart2",
+                               "gate_uart3", "gate_frac_uart3";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates2: gate-clk@200000d8 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000d8 0x4>;
+                       clocks = <&clk_gates2 1>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&clk_gates2 3>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy48m>,
+                                <&dummy>, <&dummy48m>,
+                                <&dummy>, <&dummy>;
+
+                       clock-output-names =
+                               "gate_periph_src", "gate_aclk_periph",
+                               "gate_hclk_periph", "gate_pclk_periph",
+                               "gate_smc", "gate_mac",
+                               "gate_hsadc", "gate_hsadc_frac",
+                               "gate_saradc", "gate_spi0",
+                               "gate_spi1", "gate_mmc0",
+                               "gate_mac_lbtest", "gate_mmc1",
+                               "gate_emmc", "gate_tsadc";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates3: gate-clk@200000dc {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000dc 0x4>;
+                       clocks = <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&dummy>;
+
+                       clock-output-names =
+                               "gate_aclk_lcdc0_src", "gate_dclk_lcdc0",
+                               "gate_dclk_lcdc1", "gate_pclkin_cif0",
+                               "gate_pclkin_cif1", "reserved",
+                               "reserved", "gate_cif0_out",
+                               "gate_cif1_out", "gate_aclk_vepu",
+                               "gate_hclk_vepu", "gate_aclk_vdpu",
+                               "gate_hclk_vdpu", "gate_gpu_src",
+                               "reserved", "gate_xin27m";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates4: gate-clk@200000e0 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000e0 0x4>;
+                       clocks = <&clk_gates2 2>, <&clk_gates2 3>,
+                                <&clk_gates2 1>, <&clk_gates2 1>,
+                                <&clk_gates2 1>, <&clk_gates2 2>,
+                                <&clk_gates2 2>, <&clk_gates2 2>,
+                                <&clk_gates0 4>, <&clk_gates0 4>,
+                                <&clk_gates0 3>, <&clk_gates0 3>,
+                                <&clk_gates0 3>, <&clk_gates2 3>,
+                                <&clk_gates0 4>;
+
+                       clock-output-names =
+                               "gate_hclk_peri_axi_matrix", "gate_pclk_peri_axi_matrix",
+                               "gate_aclk_cpu_peri", "gate_aclk_peri_axi_matrix",
+                               "gate_aclk_pei_niu", "gate_hclk_usb_peri",
+                               "gate_hclk_peri_ahb_arbi", "gate_hclk_emem_peri",
+                               "gate_hclk_cpubus", "gate_hclk_ahb2apb",
+                               "gate_aclk_strc_sys", "gate_aclk_l2mem_con",
+                               "gate_aclk_intmem", "gate_pclk_tsadc",
+                               "gate_hclk_hdmi";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates5: gate-clk@200000e4 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000e4 0x4>;
+                       clocks = <&clk_gates0 3>, <&clk_gates2 1>,
+                                <&clk_gates0 5>, <&clk_gates0 5>,
+                                <&clk_gates0 5>, <&clk_gates0 5>,
+                                <&clk_gates0 4>, <&clk_gates0 5>,
+                                <&clk_gates2 1>, <&clk_gates2 2>,
+                                <&clk_gates2 2>, <&clk_gates2 2>,
+                                <&clk_gates2 2>, <&clk_gates4 5>,
+                                <&clk_gates4 5>, <&dummy>;
+
+                       clock-output-names =
+                               "gate_aclk_dmac1", "gate_aclk_dmac2",
+                               "gate_pclk_efuse", "gate_pclk_tzpc",
+                               "gate_pclk_grf", "gate_pclk_pmu",
+                               "gate_hclk_rom", "gate_pclk_ddrupctl",
+                               "gate_aclk_smc", "gate_hclk_nandc",
+                               "gate_hclk_mmc0", "gate_hclk_mmc1",
+                               "gate_hclk_emmc", "gate_hclk_otg0",
+                               "gate_hclk_otg1", "gate_aclk_gpu";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates6: gate-clk@200000e8 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000e8 0x4>;
+                       clocks = <&clk_gates3 0>, <&clk_gates0 4>,
+                                <&clk_gates0 4>, <&clk_gates1 4>,
+                                <&clk_gates0 4>, <&clk_gates3 0>,
+                                <&clk_gates0 4>, <&clk_gates1 4>,
+                                <&clk_gates3 0>, <&clk_gates0 4>,
+                                <&clk_gates0 4>, <&clk_gates1 4>,
+                                <&clk_gates0 4>, <&clk_gates3 0>,
+                                <&dummy>, <&dummy>;
+
+                       clock-output-names =
+                               "gate_aclk_lcdc0", "gate_hclk_lcdc0",
+                               "gate_hclk_lcdc1", "gate_aclk_lcdc1",
+                               "gate_hclk_cif0", "gate_aclk_cif0",
+                               "gate_hclk_cif1", "gate_aclk_cif1",
+                               "gate_aclk_ipp", "gate_hclk_ipp",
+                               "gate_hclk_rga", "gate_aclk_rga",
+                               "gate_hclk_vio_bus", "gate_aclk_vio0",
+                               "gate_aclk_vcodec", "gate_shclk_vio_h2h";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates7: gate-clk@200000ec {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000ec 0x4>;
+                       clocks = <&clk_gates2 2>, <&clk_gates0 4>,
+                                <&clk_gates0 4>, <&clk_gates0 4>,
+                                <&clk_gates0 4>, <&clk_gates2 2>,
+                                <&clk_gates2 2>, <&clk_gates0 5>,
+                                <&clk_gates0 5>, <&clk_gates0 5>,
+                                <&clk_gates0 5>, <&clk_gates2 3>,
+                                <&clk_gates2 3>, <&clk_gates2 3>,
+                                <&clk_gates2 3>, <&clk_gates2 3>;
+
+                       clock-output-names =
+                               "gate_hclk_emac", "gate_hclk_spdif",
+                               "gate_hclk_i2s0_2ch", "gate_hclk_i2s1_2ch",
+                               "gate_hclk_i2s_8ch", "gate_hclk_hsadc",
+                               "gate_hclk_pidf", "gate_pclk_timer0",
+                               "gate_pclk_timer1", "gate_pclk_timer2",
+                               "gate_pclk_pwm01", "gate_pclk_pwm23",
+                               "gate_pclk_spi0", "gate_pclk_spi1",
+                               "gate_pclk_saradc", "gate_pclk_wdt";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates8: gate-clk@200000f0 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000f0 0x4>;
+                       clocks = <&clk_gates0 5>, <&clk_gates0 5>,
+                                <&clk_gates2 3>, <&clk_gates2 3>,
+                                <&clk_gates0 5>, <&clk_gates0 5>,
+                                <&clk_gates2 3>, <&clk_gates2 3>,
+                                <&clk_gates2 3>, <&clk_gates0 5>,
+                                <&clk_gates0 5>, <&clk_gates0 5>,
+                                <&clk_gates2 3>, <&clk_gates2 3>,
+                                <&dummy>, <&clk_gates0 5>;
+
+                       clock-output-names =
+                               "gate_pclk_uart0", "gate_pclk_uart1",
+                               "gate_pclk_uart2", "gate_pclk_uart3",
+                               "gate_pclk_i2c0", "gate_pclk_i2c1",
+                               "gate_pclk_i2c2", "gate_pclk_i2c3",
+                               "gate_pclk_i2c4", "gate_pclk_gpio0",
+                               "gate_pclk_gpio1", "gate_pclk_gpio2",
+                               "gate_pclk_gpio3", "gate_pclk_gpio4",
+                               "reserved", "gate_pclk_gpio6";
+
+                       #clock-cells = <1>;
+               };
+
+               clk_gates9: gate-clk@200000f4 {
+                       compatible = "rockchip,rk2928-gate-clk";
+                       reg = <0x200000f4 0x4>;
+                       clocks = <&dummy>, <&clk_gates0 5>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>, <&clk_gates1 4>,
+                                <&clk_gates0 5>, <&dummy>,
+                                <&dummy>, <&dummy>,
+                                <&dummy>;
+
+                       clock-output-names =
+                               "gate_clk_core_dbg", "gate_pclk_dbg",
+                               "gate_clk_trace", "gate_atclk",
+                               "gate_clk_l2c", "gate_aclk_vio1",
+                               "gate_pclk_publ", "gate_aclk_intmem0",
+                               "gate_aclk_intmem1", "gate_aclk_intmem2",
+                               "gate_aclk_intmem3";
+
+                       #clock-cells = <1>;
+               };
+       };
+
+};
diff --git a/arch/arm/boot/dts/rk3066a.dtsi b/arch/arm/boot/dts/rk3066a.dtsi
new file mode 100644 (file)
index 0000000..56bfac9
--- /dev/null
@@ -0,0 +1,390 @@
+/*
+ * Copyright (c) 2013 MundoReader S.L.
+ * Author: Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/pinctrl/rockchip.h>
+#include "skeleton.dtsi"
+#include "rk3066a-clocks.dtsi"
+
+/ {
+       compatible = "rockchip,rk3066a";
+       interrupt-parent = <&gic>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a9";
+                       next-level-cache = <&L2>;
+                       reg = <0x0>;
+               };
+               cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a9";
+                       next-level-cache = <&L2>;
+                       reg = <0x1>;
+               };
+       };
+
+       soc {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "simple-bus";
+               ranges;
+
+               gic: interrupt-controller@1013d000 {
+                       compatible = "arm,cortex-a9-gic";
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       reg = <0x1013d000 0x1000>,
+                             <0x1013c100 0x0100>;
+               };
+
+               L2: l2-cache-controller@10138000 {
+                       compatible = "arm,pl310-cache";
+                       reg = <0x10138000 0x1000>;
+                       cache-unified;
+                       cache-level = <2>;
+               };
+
+               local-timer@1013c600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x1013c600 0x20>;
+                       interrupts = <GIC_PPI 13 0x304>;
+                       clocks = <&dummy150m>;
+               };
+
+               timer@20038000 {
+                       compatible = "snps,dw-apb-timer-osc";
+                       reg = <0x20038000 0x100>;
+                       interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clk_gates1 0>, <&clk_gates7 7>;
+                       clock-names = "timer", "pclk";
+               };
+
+               timer@2003a000 {
+                       compatible = "snps,dw-apb-timer-osc";
+                       reg = <0x2003a000 0x100>;
+                       interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clk_gates1 1>, <&clk_gates7 8>;
+                       clock-names = "timer", "pclk";
+               };
+
+               timer@2000e000 {
+                       compatible = "snps,dw-apb-timer-osc";
+                       reg = <0x2000e000 0x100>;
+                       interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clk_gates1 2>, <&clk_gates7 9>;
+                       clock-names = "timer", "pclk";
+               };
+
+               pinctrl@20008000 {
+                       compatible = "rockchip,rk3066a-pinctrl";
+                       reg = <0x20008000 0x150>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       gpio0: gpio0@20034000 {
+                               compatible = "rockchip,gpio-bank";
+                               reg = <0x20034000 0x100>;
+                               interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk_gates8 9>;
+
+                               gpio-controller;
+                               #gpio-cells = <2>;
+
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                       };
+
+                       gpio1: gpio1@2003c000 {
+                               compatible = "rockchip,gpio-bank";
+                               reg = <0x2003c000 0x100>;
+                               interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk_gates8 10>;
+
+                               gpio-controller;
+                               #gpio-cells = <2>;
+
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                       };
+
+                       gpio2: gpio2@2003e000 {
+                               compatible = "rockchip,gpio-bank";
+                               reg = <0x2003e000 0x100>;
+                               interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk_gates8 11>;
+
+                               gpio-controller;
+                               #gpio-cells = <2>;
+
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                       };
+
+                       gpio3: gpio3@20080000 {
+                               compatible = "rockchip,gpio-bank";
+                               reg = <0x20080000 0x100>;
+                               interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk_gates8 12>;
+
+                               gpio-controller;
+                               #gpio-cells = <2>;
+
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                       };
+
+                       gpio4: gpio4@20084000 {
+                               compatible = "rockchip,gpio-bank";
+                               reg = <0x20084000 0x100>;
+                               interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk_gates8 13>;
+
+                               gpio-controller;
+                               #gpio-cells = <2>;
+
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                       };
+
+                       gpio6: gpio6@2000a000 {
+                               compatible = "rockchip,gpio-bank";
+                               reg = <0x2000a000 0x100>;
+                               interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk_gates8 15>;
+
+                               gpio-controller;
+                               #gpio-cells = <2>;
+
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                       };
+
+                       pcfg_pull_default: pcfg_pull_default {
+                               bias-pull-pin-default;
+                       };
+
+                       pcfg_pull_none: pcfg_pull_none {
+                               bias-disable;
+                       };
+
+                       uart0 {
+                               uart0_xfer: uart0-xfer {
+                                       rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO1 1 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               uart0_cts: uart0-cts {
+                                       rockchip,pins = <RK_GPIO1 2 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               uart0_rts: uart0-rts {
+                                       rockchip,pins = <RK_GPIO1 3 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+                       };
+
+                       uart1 {
+                               uart1_xfer: uart1-xfer {
+                                       rockchip,pins = <RK_GPIO1 4 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO1 5 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               uart1_cts: uart1-cts {
+                                       rockchip,pins = <RK_GPIO1 6 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               uart1_rts: uart1-rts {
+                                       rockchip,pins = <RK_GPIO1 7 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+                       };
+
+                       uart2 {
+                               uart2_xfer: uart2-xfer {
+                                       rockchip,pins = <RK_GPIO1 8 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO1 9 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+                               /* no rts / cts for uart2 */
+                       };
+
+                       uart3 {
+                               uart3_xfer: uart3-xfer {
+                                       rockchip,pins = <RK_GPIO3 27 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 28 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               uart3_cts: uart3-cts {
+                                       rockchip,pins = <RK_GPIO3 29 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               uart3_rts: uart3-rts {
+                                       rockchip,pins = <RK_GPIO3 30 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+                       };
+
+                       sd0 {
+                               sd0_clk: sd0-clk {
+                                       rockchip,pins = <RK_GPIO3 8 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd0_cmd: sd0-cmd {
+                                       rockchip,pins = <RK_GPIO3 9 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd0_cd: sd0-cd {
+                                       rockchip,pins = <RK_GPIO3 14 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd0_wp: sd0-wp {
+                                       rockchip,pins = <RK_GPIO3 15 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd0_bus1: sd0-bus-width1 {
+                                       rockchip,pins = <RK_GPIO3 10 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd0_bus4: sd0-bus-width4 {
+                                       rockchip,pins = <RK_GPIO3 10 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 11 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 12 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 13 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+                       };
+
+                       sd1 {
+                               sd1_clk: sd1-clk {
+                                       rockchip,pins = <RK_GPIO3 21 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd1_cmd: sd1-cmd {
+                                       rockchip,pins = <RK_GPIO3 16 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd1_cd: sd1-cd {
+                                       rockchip,pins = <RK_GPIO3 22 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd1_wp: sd1-wp {
+                                       rockchip,pins = <RK_GPIO3 23 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd1_bus1: sd1-bus-width1 {
+                                       rockchip,pins = <RK_GPIO3 17 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+
+                               sd1_bus4: sd1-bus-width4 {
+                                       rockchip,pins = <RK_GPIO3 17 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 18 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 19 RK_FUNC_1 &pcfg_pull_default>,
+                                                       <RK_GPIO3 20 RK_FUNC_1 &pcfg_pull_default>;
+                                       rockchip,config = <&pcfg_pull_default>;
+                               };
+                       };
+               };
+
+               uart0: serial@10124000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x10124000 0x400>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <1>;
+                       clocks = <&clk_gates1 8>;
+                       status = "disabled";
+               };
+
+               uart1: serial@10126000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x10126000 0x400>;
+                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <1>;
+                       clocks = <&clk_gates1 10>;
+                       status = "disabled";
+               };
+
+               uart2: serial@20064000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x20064000 0x400>;
+                       interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <1>;
+                       clocks = <&clk_gates1 12>;
+                       status = "disabled";
+               };
+
+               uart3: serial@20068000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x20068000 0x400>;
+                       interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
+                       reg-shift = <2>;
+                       reg-io-width = <1>;
+                       clocks = <&clk_gates1 14>;
+                       status = "disabled";
+               };
+
+               dwmmc@10214000 {
+                       compatible = "rockchip,rk2928-dw-mshc";
+                       reg = <0x10214000 0x1000>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       clocks = <&clk_gates5 10>, <&clk_gates2 11>;
+                       clock-names = "biu", "ciu";
+
+                       status = "disabled";
+               };
+
+               dwmmc@10218000 {
+                       compatible = "rockchip,rk2928-dw-mshc";
+                       reg = <0x10218000 0x1000>;
+                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       clocks = <&clk_gates5 11>, <&clk_gates2 13>;
+                       clock-names = "biu", "ciu";
+
+                       status = "disabled";
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/ste-u300.dts b/arch/arm/boot/dts/ste-u300.dts
new file mode 100644 (file)
index 0000000..8a1032c
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * Device Tree for the ST-Ericsson U300 Machine and SoC
+ */
+
+/dts-v1/;
+/include/ "skeleton.dtsi"
+
+/ {
+       model = "ST-Ericsson U300";
+       compatible = "stericsson,u300";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       chosen {
+               bootargs = "root=/dev/ram0 console=ttyAMA0,115200n8 earlyprintk";
+       };
+
+       aliases {
+               serial0 = &uart0;
+               serial1 = &uart1;
+        };
+
+       memory {
+               reg = <0x48000000 0x03c00000>;
+       };
+
+       s365 {
+               compatible = "stericsson,s365";
+               vana15-supply = <&ab3100_ldo_d_reg>;
+               syscon = <&syscon>;
+       };
+
+       syscon: syscon@c0011000 {
+               compatible = "stericsson,u300-syscon", "syscon";
+               reg = <0xc0011000 0x1000>;
+               clk32: app_32_clk@32k {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <32768>;
+               };
+               pll13: pll13@13M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <13000000>;
+               };
+               /* Slow bridge clocks under PLL13 */
+               slow_clk: slow_clk@13M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <0>; /* Slow */
+                       clock-id = <0>;
+                       clocks = <&pll13>;
+               };
+               uart0_clk: uart0_clk@13M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <0>; /* Slow */
+                       clock-id = <1>;
+                       clocks = <&slow_clk>;
+               };
+               gpio_clk: gpio_clk@13M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <0>; /* Slow */
+                       clock-id = <4>;
+                       clocks = <&slow_clk>;
+               };
+               rtc_clk: rtc_clk@13M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <0>; /* Slow */
+                       clock-id = <6>;
+                       clocks = <&slow_clk>;
+               };
+               apptimer_clk: app_tmr_clk@13M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <0>; /* Slow */
+                       clock-id = <7>;
+                       clocks = <&slow_clk>;
+               };
+               acc_tmr_clk@13M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <0>; /* Slow */
+                       clock-id = <8>;
+                       clocks = <&slow_clk>;
+               };
+               pll208: pll208@208M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <208000000>;
+               };
+               app208: app_208_clk@208M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-factor-clock";
+                       clock-div = <1>;
+                       clock-mult = <1>;
+                       clocks = <&pll208>;
+               };
+               cpu_clk@208M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <3>;
+                       clocks = <&app208>;
+               };
+               app104: app_104_clk@104M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-factor-clock";
+                       clock-div = <2>;
+                       clock-mult = <1>;
+                       clocks = <&pll208>;
+               };
+               semi_clk@104M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <9>;
+                       clocks = <&app104>;
+               };
+               app52: app_52_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-factor-clock";
+                       clock-div = <4>;
+                       clock-mult = <1>;
+                       clocks = <&pll208>;
+               };
+               /* AHB subsystem clocks */
+               ahb_clk: ahb_subsys_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <10>;
+                       clocks = <&app52>;
+               };
+               intcon_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <12>;
+                       clocks = <&ahb_clk>;
+               };
+               emif_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <5>;
+                       clocks = <&ahb_clk>;
+               };
+               dmac_clk: dmac_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <4>;
+                       clocks = <&app52>;
+               };
+               fsmc_clk: fsmc_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <6>;
+                       clocks = <&app52>;
+               };
+               xgam_clk: xgam_clk@52M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <2>; /* Rest */
+                       clock-id = <8>;
+                       clocks = <&app52>;
+               };
+               app26: app_26_clk@26M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-factor-clock";
+                       clock-div = <2>;
+                       clock-mult = <1>;
+                       clocks = <&app52>;
+               };
+               /* Fast bridge  clocks */
+               fast_clk: fast_clk@26M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <1>; /* Fast */
+                       clock-id = <0>;
+                       clocks = <&app26>;
+               };
+               i2c0_clk: i2c0_clk@26M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <1>; /* Fast */
+                       clock-id = <1>;
+                       clocks = <&fast_clk>;
+               };
+               i2c1_clk: i2c1_clk@26M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <1>; /* Fast */
+                       clock-id = <2>;
+                       clocks = <&fast_clk>;
+               };
+               mmc_pclk: mmc_p_clk@26M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <1>; /* Fast */
+                       clock-id = <5>;
+                       clocks = <&fast_clk>;
+               };
+               mmc_mclk: mmc_mclk {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-mclk";
+                       clocks = <&mmc_pclk>;
+               };
+               spi_clk: spi_p_clk@26M {
+                       #clock-cells = <0>;
+                       compatible = "stericsson,u300-syscon-clk";
+                       clock-type = <1>; /* Fast */
+                       clock-id = <6>;
+                       clocks = <&fast_clk>;
+               };
+       };
+
+       timer: timer@c0014000 {
+               compatible = "stericsson,u300-apptimer";
+               reg = <0xc0014000 0x1000>;
+               interrupt-parent = <&vica>;
+               interrupts = <24 25 26 27>;
+               clocks = <&apptimer_clk>;
+       };
+
+       gpio: gpio@c0016000 {
+               compatible = "stericsson,gpio-coh901";
+               reg = <0xc0016000 0x1000>;
+               interrupt-parent = <&vicb>;
+               interrupts = <0 1 2 18 21 22 23>;
+               clocks = <&gpio_clk>;
+               interrupt-names = "gpio0", "gpio1", "gpio2", "gpio3",
+                               "gpio4", "gpio5", "gpio6";
+               interrupt-controller;
+               #interrupt-cells = <2>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       pinctrl: pinctrl@c0011000 {
+               compatible = "stericsson,pinctrl-u300";
+               reg = <0xc0011000 0x1000>;
+       };
+
+       watchdog: watchdog@c0012000 {
+               compatible = "stericsson,coh901327";
+               reg = <0xc0012000 0x1000>;
+               interrupt-parent = <&vicb>;
+               interrupts = <3>;
+               clocks = <&clk32>;
+       };
+
+       rtc: rtc@c0017000 {
+               compatible = "stericsson,coh901331";
+               reg = <0xc0017000 0x1000>;
+               interrupt-parent = <&vicb>;
+               interrupts = <10>;
+               clocks = <&rtc_clk>;
+       };
+
+       dmac: dma-controller@c00020000 {
+               compatible = "stericsson,coh901318";
+               reg = <0xc0020000 0x1000>;
+               interrupt-parent = <&vica>;
+               interrupts = <2>;
+               #dma-cells = <1>;
+               dma-channels = <40>;
+               clocks = <&dmac_clk>;
+       };
+
+       /* A NAND flash of 128 MiB */
+       fsmc: flash@40000000 {
+               compatible = "stericsson,fsmc-nand";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               reg = <0x9f800000 0x1000>,      /* FSMC Register*/
+                       <0x80000000 0x4000>,    /* NAND Base DATA */
+                       <0x80020000 0x4000>,    /* NAND Base ADDR */
+                       <0x80010000 0x4000>;    /* NAND Base CMD */
+               reg-names = "fsmc_regs", "nand_data", "nand_addr", "nand_cmd";
+               nand-skip-bbtscan;
+               clocks = <&fsmc_clk>;
+
+               partition@0 {
+               label = "boot records";
+                       reg = <0x0 0x20000>;
+               };
+               partition@20000 {
+                       label = "free";
+                       reg = <0x20000 0x7e0000>;
+               };
+               partition@800000 {
+                       label = "platform";
+                       reg = <0x800000 0xf800000>;
+               };
+       };
+
+       i2c0: i2c@c0004000 {
+               compatible = "st,ddci2c";
+               reg = <0xc0004000 0x1000>;
+               interrupt-parent = <&vicb>;
+               interrupts = <8>;
+               clocks = <&i2c0_clk>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+               ab3100: ab3100@0x48 {
+                       compatible = "stericsson,ab3100";
+                       reg = <0x48>;
+                       interrupt-parent = <&vica>;
+                       interrupts = <0>; /* EXT0 IRQ */
+                       ab3100-regulators {
+                               compatible = "stericsson,ab3100-regulators";
+                               ab3100_ldo_a_reg: ab3100_ldo_a {
+                                       regulator-compatible = "ab3100_ldo_a";
+                                       startup-delay-us = <200>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+                               ab3100_ldo_c_reg: ab3100_ldo_c {
+                                       regulator-compatible = "ab3100_ldo_c";
+                                       startup-delay-us = <200>;
+                               };
+                               ab3100_ldo_d_reg: ab3100_ldo_d {
+                                       regulator-compatible = "ab3100_ldo_d";
+                                       startup-delay-us = <200>;
+                               };
+                               ab3100_ldo_e_reg: ab3100_ldo_e {
+                                       regulator-compatible = "ab3100_ldo_e";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                                       startup-delay-us = <200>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+                               ab3100_ldo_f_reg: ab3100_ldo_f {
+                                       regulator-compatible = "ab3100_ldo_f";
+                                       regulator-min-microvolt = <2500000>;
+                                       regulator-max-microvolt = <2500000>;
+                                       startup-delay-us = <600>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+                               ab3100_ldo_g_reg: ab3100_ldo_g {
+                                       regulator-compatible = "ab3100_ldo_g";
+                                       regulator-min-microvolt = <1500000>;
+                                       regulator-max-microvolt = <2850000>;
+                                       startup-delay-us = <400>;
+                               };
+                               ab3100_ldo_h_reg: ab3100_ldo_h {
+                                       regulator-compatible = "ab3100_ldo_h";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <2750000>;
+                                       startup-delay-us = <200>;
+                               };
+                               ab3100_ldo_k_reg: ab3100_ldo_k {
+                                       regulator-compatible = "ab3100_ldo_k";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <2750000>;
+                                       startup-delay-us = <200>;
+                               };
+                               ab3100_ext_reg: ab3100_ext {
+                                       regulator-compatible = "ab3100_ext";
+                               };
+                               ab3100_buck_reg: ab3100_buck {
+                                       regulator-compatible = "ab3100_buck";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1800000>;
+                                       startup-delay-us = <1000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+                       };
+               };
+       };
+
+       i2c1: i2c@c0005000 {
+               compatible = "st,ddci2c";
+               reg = <0xc0005000 0x1000>;
+               interrupt-parent = <&vicb>;
+               interrupts = <9>;
+               clocks = <&i2c1_clk>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+               fwcam0: fwcam@0x10 {
+                       reg = <0x10>;
+               };
+               fwcam1: fwcam@0x5d {
+                       reg = <0x5d>;
+               };
+       };
+
+       amba {
+               compatible = "arm,amba-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               vica: interrupt-controller@a0001000 {
+                       compatible = "arm,versatile-vic";
+                       interrupt-controller;
+                       #interrupt-cells = <1>;
+                       reg = <0xa0001000 0x20>;
+               };
+
+               vicb: interrupt-controller@a0002000 {
+                       compatible = "arm,versatile-vic";
+                       interrupt-controller;
+                       #interrupt-cells = <1>;
+                       reg = <0xa0002000 0x20>;
+               };
+
+               uart0: serial@c0013000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0xc0013000 0x1000>;
+                       interrupt-parent = <&vica>;
+                       interrupts = <22>;
+                       clocks = <&uart0_clk>, <&uart0_clk>;
+                       clock-names = "apb_pclk", "uart0_clk";
+                       dmas = <&dmac 17 &dmac 18>;
+                       dma-names = "tx", "rx";
+               };
+
+               uart1: serial@c0007000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0xc0007000 0x1000>;
+                       interrupt-parent = <&vicb>;
+                       interrupts = <20>;
+                       dmas = <&dmac 38 &dmac 39>;
+                       dma-names = "tx", "rx";
+               };
+
+               mmcsd: mmcsd@c0001000 {
+                       compatible = "arm,pl18x", "arm,primecell";
+                       reg = <0xc0001000 0x1000>;
+                       interrupt-parent = <&vicb>;
+                       interrupts = <6 7>;
+                       clocks = <&mmc_pclk>, <&mmc_mclk>;
+                       clock-names = "apb_pclk", "mclk";
+                       max-frequency = <24000000>;
+                       bus-width = <4>; // SD-card slot
+                       mmc-cap-mmc-highspeed;
+                       mmc-cap-sd-highspeed;
+                       cd-gpios = <&gpio 12 0x4>;
+                       cd-inverted;
+                       vmmc-supply = <&ab3100_ldo_g_reg>;
+                       dmas = <&dmac 14>;
+                       dma-names = "rx";
+               };
+
+               spi: ssp@c0006000 {
+                       compatible = "arm,pl022", "arm,primecell";
+                       reg = <0xc0006000 0x1000>;
+                       interrupt-parent = <&vica>;
+                       interrupts = <23>;
+                       clocks = <&spi_clk>, <&spi_clk>;
+                       clock-names = "apb_pclk", "spi_clk";
+                       dmas = <&dmac 27 &dmac 28>;
+                       dma-names = "tx", "rx";
+                       num-cs = <3>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       spi-dummy@1 {
+                               compatible = "arm,pl022-dummy";
+                               reg = <1>;
+                               spi-max-frequency = <20000000>;
+                       };
+               };
+       };
+};
index 14fb2e609babcc881deeff1c59ea8d39090ff90f..0dbee2c239057dd627b5e79eea6c18dacaa84086 100644 (file)
 
                uart0: uart@e0000000 {
                        compatible = "xlnx,xuartps";
+                       clocks = <&clkc 23>, <&clkc 40>;
+                       clock-names = "ref_clk", "aper_clk";
                        reg = <0xE0000000 0x1000>;
                        interrupts = <0 27 4>;
-                       clocks = <&uart_clk 0>;
                };
 
                uart1: uart@e0001000 {
                        compatible = "xlnx,xuartps";
+                       clocks = <&clkc 24>, <&clkc 41>;
+                       clock-names = "ref_clk", "aper_clk";
                        reg = <0xE0001000 0x1000>;
                        interrupts = <0 50 4>;
-                       clocks = <&uart_clk 1>;
                };
 
                slcr: slcr@f8000000 {
                                #address-cells = <1>;
                                #size-cells = <0>;
 
-                               ps_clk: ps_clk {
-                                       #clock-cells = <0>;
-                                       compatible = "fixed-clock";
-                                       /* clock-frequency set in board-specific file */
-                                       clock-output-names = "ps_clk";
-                               };
-                               armpll: armpll {
-                                       #clock-cells = <0>;
-                                       compatible = "xlnx,zynq-pll";
-                                       clocks = <&ps_clk>;
-                                       reg = <0x100 0x110>;
-                                       clock-output-names = "armpll";
-                               };
-                               ddrpll: ddrpll {
-                                       #clock-cells = <0>;
-                                       compatible = "xlnx,zynq-pll";
-                                       clocks = <&ps_clk>;
-                                       reg = <0x104 0x114>;
-                                       clock-output-names = "ddrpll";
-                               };
-                               iopll: iopll {
-                                       #clock-cells = <0>;
-                                       compatible = "xlnx,zynq-pll";
-                                       clocks = <&ps_clk>;
-                                       reg = <0x108 0x118>;
-                                       clock-output-names = "iopll";
-                               };
-                               uart_clk: uart_clk {
-                                       #clock-cells = <1>;
-                                       compatible = "xlnx,zynq-periph-clock";
-                                       clocks = <&iopll &armpll &ddrpll>;
-                                       reg = <0x154>;
-                                       clock-output-names = "uart0_ref_clk",
-                                                            "uart1_ref_clk";
-                               };
-                               cpu_clk: cpu_clk {
+                               clkc: clkc {
                                        #clock-cells = <1>;
-                                       compatible = "xlnx,zynq-cpu-clock";
-                                       clocks = <&iopll &armpll &ddrpll>;
-                                       reg = <0x120 0x1C4>;
-                                       clock-output-names = "cpu_6x4x",
-                                                            "cpu_3x2x",
-                                                            "cpu_2x",
-                                                            "cpu_1x";
+                                       compatible = "xlnx,ps7-clkc";
+                                       ps-clk-frequency = <33333333>;
+                                       clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
+                                                       "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
+                                                       "dci", "lqspi", "smc", "pcap", "gem0", "gem1",
+                                                       "fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1",
+                                                       "sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1",
+                                                       "dma", "usb0_aper", "usb1_aper", "gem0_aper",
+                                                       "gem1_aper", "sdio0_aper", "sdio1_aper",
+                                                       "spi0_aper", "spi1_aper", "can0_aper", "can1_aper",
+                                                       "i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper",
+                                                       "gpio_aper", "lqspi_aper", "smc_aper", "swdt",
+                                                       "dbg_trc", "dbg_apb";
                                };
                        };
                };
                        interrupt-parent = <&intc>;
                        interrupts = < 0 10 4 0 11 4 0 12 4 >;
                        compatible = "cdns,ttc";
+                       clocks = <&clkc 6>;
                        reg = <0xF8001000 0x1000>;
-                       clocks = <&cpu_clk 3>;
-                       clock-names = "cpu_1x";
                        clock-ranges;
                };
 
                        interrupt-parent = <&intc>;
                        interrupts = < 0 37 4 0 38 4 0 39 4 >;
                        compatible = "cdns,ttc";
+                       clocks = <&clkc 6>;
                        reg = <0xF8002000 0x1000>;
-                       clocks = <&cpu_clk 3>;
-                       clock-names = "cpu_1x";
                        clock-ranges;
                };
                scutimer: scutimer@f8f00600 {
                        interrupts = < 1 13 0x301 >;
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = < 0xf8f00600 0x20 >;
-                       clocks = <&cpu_clk 1>;
+                       clocks = <&clkc 4>;
                } ;
        };
 };
index 86f44d5b0265bf8fe3b7c6da4370d409e7f9b7d0..e25a307438ad27776f5994ba81ea99e46266dc9e 100644 (file)
@@ -28,7 +28,3 @@
        };
 
 };
-
-&ps_clk {
-       clock-frequency = <33333330>;
-};
index 9353184d730dfda864c85ec180b906b9ed575681..c3a4e9ceba34e3a71b1248874f27f888268255fa 100644 (file)
@@ -17,3 +17,6 @@ config SHARP_PARAM
 
 config SHARP_SCOOP
        bool
+
+config TI_PRIV_EDMA
+       bool
index 48434cbe3e89090d18d7bc3e4a799713631c8ac3..8c60f473e97625cb8c0bb068375da7368d1ff6fe 100644 (file)
@@ -16,3 +16,4 @@ obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o
 obj-$(CONFIG_MCPM)             += mcpm_head.o mcpm_entry.o mcpm_platsmp.o vlock.o
 AFLAGS_mcpm_head.o             := -march=armv7-a
 AFLAGS_vlock.o                 := -march=armv7-a
+obj-$(CONFIG_TI_PRIV_EDMA)     += edma.o
diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
new file mode 100644 (file)
index 0000000..a432e6c
--- /dev/null
@@ -0,0 +1,1767 @@
+/*
+ * EDMA3 support for DaVinci
+ *
+ * Copyright (C) 2006-2009 Texas Instruments.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/interrupt.h>
+#include <linux/platform_device.h>
+#include <linux/io.h>
+#include <linux/slab.h>
+#include <linux/edma.h>
+#include <linux/err.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/of_dma.h>
+#include <linux/of_irq.h>
+#include <linux/pm_runtime.h>
+
+#include <linux/platform_data/edma.h>
+
+/* Offsets matching "struct edmacc_param" */
+#define PARM_OPT               0x00
+#define PARM_SRC               0x04
+#define PARM_A_B_CNT           0x08
+#define PARM_DST               0x0c
+#define PARM_SRC_DST_BIDX      0x10
+#define PARM_LINK_BCNTRLD      0x14
+#define PARM_SRC_DST_CIDX      0x18
+#define PARM_CCNT              0x1c
+
+#define PARM_SIZE              0x20
+
+/* Offsets for EDMA CC global channel registers and their shadows */
+#define SH_ER          0x00    /* 64 bits */
+#define SH_ECR         0x08    /* 64 bits */
+#define SH_ESR         0x10    /* 64 bits */
+#define SH_CER         0x18    /* 64 bits */
+#define SH_EER         0x20    /* 64 bits */
+#define SH_EECR                0x28    /* 64 bits */
+#define SH_EESR                0x30    /* 64 bits */
+#define SH_SER         0x38    /* 64 bits */
+#define SH_SECR                0x40    /* 64 bits */
+#define SH_IER         0x50    /* 64 bits */
+#define SH_IECR                0x58    /* 64 bits */
+#define SH_IESR                0x60    /* 64 bits */
+#define SH_IPR         0x68    /* 64 bits */
+#define SH_ICR         0x70    /* 64 bits */
+#define SH_IEVAL       0x78
+#define SH_QER         0x80
+#define SH_QEER                0x84
+#define SH_QEECR       0x88
+#define SH_QEESR       0x8c
+#define SH_QSER                0x90
+#define SH_QSECR       0x94
+#define SH_SIZE                0x200
+
+/* Offsets for EDMA CC global registers */
+#define EDMA_REV       0x0000
+#define EDMA_CCCFG     0x0004
+#define EDMA_QCHMAP    0x0200  /* 8 registers */
+#define EDMA_DMAQNUM   0x0240  /* 8 registers (4 on OMAP-L1xx) */
+#define EDMA_QDMAQNUM  0x0260
+#define EDMA_QUETCMAP  0x0280
+#define EDMA_QUEPRI    0x0284
+#define EDMA_EMR       0x0300  /* 64 bits */
+#define EDMA_EMCR      0x0308  /* 64 bits */
+#define EDMA_QEMR      0x0310
+#define EDMA_QEMCR     0x0314
+#define EDMA_CCERR     0x0318
+#define EDMA_CCERRCLR  0x031c
+#define EDMA_EEVAL     0x0320
+#define EDMA_DRAE      0x0340  /* 4 x 64 bits*/
+#define EDMA_QRAE      0x0380  /* 4 registers */
+#define EDMA_QUEEVTENTRY       0x0400  /* 2 x 16 registers */
+#define EDMA_QSTAT     0x0600  /* 2 registers */
+#define EDMA_QWMTHRA   0x0620
+#define EDMA_QWMTHRB   0x0624
+#define EDMA_CCSTAT    0x0640
+
+#define EDMA_M         0x1000  /* global channel registers */
+#define EDMA_ECR       0x1008
+#define EDMA_ECRH      0x100C
+#define EDMA_SHADOW0   0x2000  /* 4 regions shadowing global channels */
+#define EDMA_PARM      0x4000  /* 128 param entries */
+
+#define PARM_OFFSET(param_no)  (EDMA_PARM + ((param_no) << 5))
+
+#define EDMA_DCHMAP    0x0100  /* 64 registers */
+#define CHMAP_EXIST    BIT(24)
+
+#define EDMA_MAX_DMACH           64
+#define EDMA_MAX_PARAMENTRY     512
+
+/*****************************************************************************/
+
+static void __iomem *edmacc_regs_base[EDMA_MAX_CC];
+
+static inline unsigned int edma_read(unsigned ctlr, int offset)
+{
+       return (unsigned int)__raw_readl(edmacc_regs_base[ctlr] + offset);
+}
+
+static inline void edma_write(unsigned ctlr, int offset, int val)
+{
+       __raw_writel(val, edmacc_regs_base[ctlr] + offset);
+}
+static inline void edma_modify(unsigned ctlr, int offset, unsigned and,
+               unsigned or)
+{
+       unsigned val = edma_read(ctlr, offset);
+       val &= and;
+       val |= or;
+       edma_write(ctlr, offset, val);
+}
+static inline void edma_and(unsigned ctlr, int offset, unsigned and)
+{
+       unsigned val = edma_read(ctlr, offset);
+       val &= and;
+       edma_write(ctlr, offset, val);
+}
+static inline void edma_or(unsigned ctlr, int offset, unsigned or)
+{
+       unsigned val = edma_read(ctlr, offset);
+       val |= or;
+       edma_write(ctlr, offset, val);
+}
+static inline unsigned int edma_read_array(unsigned ctlr, int offset, int i)
+{
+       return edma_read(ctlr, offset + (i << 2));
+}
+static inline void edma_write_array(unsigned ctlr, int offset, int i,
+               unsigned val)
+{
+       edma_write(ctlr, offset + (i << 2), val);
+}
+static inline void edma_modify_array(unsigned ctlr, int offset, int i,
+               unsigned and, unsigned or)
+{
+       edma_modify(ctlr, offset + (i << 2), and, or);
+}
+static inline void edma_or_array(unsigned ctlr, int offset, int i, unsigned or)
+{
+       edma_or(ctlr, offset + (i << 2), or);
+}
+static inline void edma_or_array2(unsigned ctlr, int offset, int i, int j,
+               unsigned or)
+{
+       edma_or(ctlr, offset + ((i*2 + j) << 2), or);
+}
+static inline void edma_write_array2(unsigned ctlr, int offset, int i, int j,
+               unsigned val)
+{
+       edma_write(ctlr, offset + ((i*2 + j) << 2), val);
+}
+static inline unsigned int edma_shadow0_read(unsigned ctlr, int offset)
+{
+       return edma_read(ctlr, EDMA_SHADOW0 + offset);
+}
+static inline unsigned int edma_shadow0_read_array(unsigned ctlr, int offset,
+               int i)
+{
+       return edma_read(ctlr, EDMA_SHADOW0 + offset + (i << 2));
+}
+static inline void edma_shadow0_write(unsigned ctlr, int offset, unsigned val)
+{
+       edma_write(ctlr, EDMA_SHADOW0 + offset, val);
+}
+static inline void edma_shadow0_write_array(unsigned ctlr, int offset, int i,
+               unsigned val)
+{
+       edma_write(ctlr, EDMA_SHADOW0 + offset + (i << 2), val);
+}
+static inline unsigned int edma_parm_read(unsigned ctlr, int offset,
+               int param_no)
+{
+       return edma_read(ctlr, EDMA_PARM + offset + (param_no << 5));
+}
+static inline void edma_parm_write(unsigned ctlr, int offset, int param_no,
+               unsigned val)
+{
+       edma_write(ctlr, EDMA_PARM + offset + (param_no << 5), val);
+}
+static inline void edma_parm_modify(unsigned ctlr, int offset, int param_no,
+               unsigned and, unsigned or)
+{
+       edma_modify(ctlr, EDMA_PARM + offset + (param_no << 5), and, or);
+}
+static inline void edma_parm_and(unsigned ctlr, int offset, int param_no,
+               unsigned and)
+{
+       edma_and(ctlr, EDMA_PARM + offset + (param_no << 5), and);
+}
+static inline void edma_parm_or(unsigned ctlr, int offset, int param_no,
+               unsigned or)
+{
+       edma_or(ctlr, EDMA_PARM + offset + (param_no << 5), or);
+}
+
+static inline void set_bits(int offset, int len, unsigned long *p)
+{
+       for (; len > 0; len--)
+               set_bit(offset + (len - 1), p);
+}
+
+static inline void clear_bits(int offset, int len, unsigned long *p)
+{
+       for (; len > 0; len--)
+               clear_bit(offset + (len - 1), p);
+}
+
+/*****************************************************************************/
+
+/* actual number of DMA channels and slots on this silicon */
+struct edma {
+       /* how many dma resources of each type */
+       unsigned        num_channels;
+       unsigned        num_region;
+       unsigned        num_slots;
+       unsigned        num_tc;
+       unsigned        num_cc;
+       enum dma_event_q        default_queue;
+
+       /* list of channels with no even trigger; terminated by "-1" */
+       const s8        *noevent;
+
+       /* The edma_inuse bit for each PaRAM slot is clear unless the
+        * channel is in use ... by ARM or DSP, for QDMA, or whatever.
+        */
+       DECLARE_BITMAP(edma_inuse, EDMA_MAX_PARAMENTRY);
+
+       /* The edma_unused bit for each channel is clear unless
+        * it is not being used on this platform. It uses a bit
+        * of SOC-specific initialization code.
+        */
+       DECLARE_BITMAP(edma_unused, EDMA_MAX_DMACH);
+
+       unsigned        irq_res_start;
+       unsigned        irq_res_end;
+
+       struct dma_interrupt_data {
+               void (*callback)(unsigned channel, unsigned short ch_status,
+                               void *data);
+               void *data;
+       } intr_data[EDMA_MAX_DMACH];
+};
+
+static struct edma *edma_cc[EDMA_MAX_CC];
+static int arch_num_cc;
+
+/* dummy param set used to (re)initialize parameter RAM slots */
+static const struct edmacc_param dummy_paramset = {
+       .link_bcntrld = 0xffff,
+       .ccnt = 1,
+};
+
+/*****************************************************************************/
+
+static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
+               enum dma_event_q queue_no)
+{
+       int bit = (ch_no & 0x7) * 4;
+
+       /* default to low priority queue */
+       if (queue_no == EVENTQ_DEFAULT)
+               queue_no = edma_cc[ctlr]->default_queue;
+
+       queue_no &= 7;
+       edma_modify_array(ctlr, EDMA_DMAQNUM, (ch_no >> 3),
+                       ~(0x7 << bit), queue_no << bit);
+}
+
+static void __init map_queue_tc(unsigned ctlr, int queue_no, int tc_no)
+{
+       int bit = queue_no * 4;
+       edma_modify(ctlr, EDMA_QUETCMAP, ~(0x7 << bit), ((tc_no & 0x7) << bit));
+}
+
+static void __init assign_priority_to_queue(unsigned ctlr, int queue_no,
+               int priority)
+{
+       int bit = queue_no * 4;
+       edma_modify(ctlr, EDMA_QUEPRI, ~(0x7 << bit),
+                       ((priority & 0x7) << bit));
+}
+
+/**
+ * map_dmach_param - Maps channel number to param entry number
+ *
+ * This maps the dma channel number to param entry numberter. In
+ * other words using the DMA channel mapping registers a param entry
+ * can be mapped to any channel
+ *
+ * Callers are responsible for ensuring the channel mapping logic is
+ * included in that particular EDMA variant (Eg : dm646x)
+ *
+ */
+static void __init map_dmach_param(unsigned ctlr)
+{
+       int i;
+       for (i = 0; i < EDMA_MAX_DMACH; i++)
+               edma_write_array(ctlr, EDMA_DCHMAP , i , (i << 5));
+}
+
+static inline void
+setup_dma_interrupt(unsigned lch,
+       void (*callback)(unsigned channel, u16 ch_status, void *data),
+       void *data)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(lch);
+       lch = EDMA_CHAN_SLOT(lch);
+
+       if (!callback)
+               edma_shadow0_write_array(ctlr, SH_IECR, lch >> 5,
+                               BIT(lch & 0x1f));
+
+       edma_cc[ctlr]->intr_data[lch].callback = callback;
+       edma_cc[ctlr]->intr_data[lch].data = data;
+
+       if (callback) {
+               edma_shadow0_write_array(ctlr, SH_ICR, lch >> 5,
+                               BIT(lch & 0x1f));
+               edma_shadow0_write_array(ctlr, SH_IESR, lch >> 5,
+                               BIT(lch & 0x1f));
+       }
+}
+
+static int irq2ctlr(int irq)
+{
+       if (irq >= edma_cc[0]->irq_res_start && irq <= edma_cc[0]->irq_res_end)
+               return 0;
+       else if (irq >= edma_cc[1]->irq_res_start &&
+               irq <= edma_cc[1]->irq_res_end)
+               return 1;
+
+       return -1;
+}
+
+/******************************************************************************
+ *
+ * DMA interrupt handler
+ *
+ *****************************************************************************/
+static irqreturn_t dma_irq_handler(int irq, void *data)
+{
+       int ctlr;
+       u32 sh_ier;
+       u32 sh_ipr;
+       u32 bank;
+
+       ctlr = irq2ctlr(irq);
+       if (ctlr < 0)
+               return IRQ_NONE;
+
+       dev_dbg(data, "dma_irq_handler\n");
+
+       sh_ipr = edma_shadow0_read_array(ctlr, SH_IPR, 0);
+       if (!sh_ipr) {
+               sh_ipr = edma_shadow0_read_array(ctlr, SH_IPR, 1);
+               if (!sh_ipr)
+                       return IRQ_NONE;
+               sh_ier = edma_shadow0_read_array(ctlr, SH_IER, 1);
+               bank = 1;
+       } else {
+               sh_ier = edma_shadow0_read_array(ctlr, SH_IER, 0);
+               bank = 0;
+       }
+
+       do {
+               u32 slot;
+               u32 channel;
+
+               dev_dbg(data, "IPR%d %08x\n", bank, sh_ipr);
+
+               slot = __ffs(sh_ipr);
+               sh_ipr &= ~(BIT(slot));
+
+               if (sh_ier & BIT(slot)) {
+                       channel = (bank << 5) | slot;
+                       /* Clear the corresponding IPR bits */
+                       edma_shadow0_write_array(ctlr, SH_ICR, bank,
+                                       BIT(slot));
+                       if (edma_cc[ctlr]->intr_data[channel].callback)
+                               edma_cc[ctlr]->intr_data[channel].callback(
+                                       channel, DMA_COMPLETE,
+                                       edma_cc[ctlr]->intr_data[channel].data);
+               }
+       } while (sh_ipr);
+
+       edma_shadow0_write(ctlr, SH_IEVAL, 1);
+       return IRQ_HANDLED;
+}
+
+/******************************************************************************
+ *
+ * DMA error interrupt handler
+ *
+ *****************************************************************************/
+static irqreturn_t dma_ccerr_handler(int irq, void *data)
+{
+       int i;
+       int ctlr;
+       unsigned int cnt = 0;
+
+       ctlr = irq2ctlr(irq);
+       if (ctlr < 0)
+               return IRQ_NONE;
+
+       dev_dbg(data, "dma_ccerr_handler\n");
+
+       if ((edma_read_array(ctlr, EDMA_EMR, 0) == 0) &&
+           (edma_read_array(ctlr, EDMA_EMR, 1) == 0) &&
+           (edma_read(ctlr, EDMA_QEMR) == 0) &&
+           (edma_read(ctlr, EDMA_CCERR) == 0))
+               return IRQ_NONE;
+
+       while (1) {
+               int j = -1;
+               if (edma_read_array(ctlr, EDMA_EMR, 0))
+                       j = 0;
+               else if (edma_read_array(ctlr, EDMA_EMR, 1))
+                       j = 1;
+               if (j >= 0) {
+                       dev_dbg(data, "EMR%d %08x\n", j,
+                                       edma_read_array(ctlr, EDMA_EMR, j));
+                       for (i = 0; i < 32; i++) {
+                               int k = (j << 5) + i;
+                               if (edma_read_array(ctlr, EDMA_EMR, j) &
+                                                       BIT(i)) {
+                                       /* Clear the corresponding EMR bits */
+                                       edma_write_array(ctlr, EDMA_EMCR, j,
+                                                       BIT(i));
+                                       /* Clear any SER */
+                                       edma_shadow0_write_array(ctlr, SH_SECR,
+                                                               j, BIT(i));
+                                       if (edma_cc[ctlr]->intr_data[k].
+                                                               callback) {
+                                               edma_cc[ctlr]->intr_data[k].
+                                               callback(k,
+                                               DMA_CC_ERROR,
+                                               edma_cc[ctlr]->intr_data
+                                               [k].data);
+                                       }
+                               }
+                       }
+               } else if (edma_read(ctlr, EDMA_QEMR)) {
+                       dev_dbg(data, "QEMR %02x\n",
+                               edma_read(ctlr, EDMA_QEMR));
+                       for (i = 0; i < 8; i++) {
+                               if (edma_read(ctlr, EDMA_QEMR) & BIT(i)) {
+                                       /* Clear the corresponding IPR bits */
+                                       edma_write(ctlr, EDMA_QEMCR, BIT(i));
+                                       edma_shadow0_write(ctlr, SH_QSECR,
+                                                               BIT(i));
+
+                                       /* NOTE:  not reported!! */
+                               }
+                       }
+               } else if (edma_read(ctlr, EDMA_CCERR)) {
+                       dev_dbg(data, "CCERR %08x\n",
+                               edma_read(ctlr, EDMA_CCERR));
+                       /* FIXME:  CCERR.BIT(16) ignored!  much better
+                        * to just write CCERRCLR with CCERR value...
+                        */
+                       for (i = 0; i < 8; i++) {
+                               if (edma_read(ctlr, EDMA_CCERR) & BIT(i)) {
+                                       /* Clear the corresponding IPR bits */
+                                       edma_write(ctlr, EDMA_CCERRCLR, BIT(i));
+
+                                       /* NOTE:  not reported!! */
+                               }
+                       }
+               }
+               if ((edma_read_array(ctlr, EDMA_EMR, 0) == 0) &&
+                   (edma_read_array(ctlr, EDMA_EMR, 1) == 0) &&
+                   (edma_read(ctlr, EDMA_QEMR) == 0) &&
+                   (edma_read(ctlr, EDMA_CCERR) == 0))
+                       break;
+               cnt++;
+               if (cnt > 10)
+                       break;
+       }
+       edma_write(ctlr, EDMA_EEVAL, 1);
+       return IRQ_HANDLED;
+}
+
+static int reserve_contiguous_slots(int ctlr, unsigned int id,
+                                    unsigned int num_slots,
+                                    unsigned int start_slot)
+{
+       int i, j;
+       unsigned int count = num_slots;
+       int stop_slot = start_slot;
+       DECLARE_BITMAP(tmp_inuse, EDMA_MAX_PARAMENTRY);
+
+       for (i = start_slot; i < edma_cc[ctlr]->num_slots; ++i) {
+               j = EDMA_CHAN_SLOT(i);
+               if (!test_and_set_bit(j, edma_cc[ctlr]->edma_inuse)) {
+                       /* Record our current beginning slot */
+                       if (count == num_slots)
+                               stop_slot = i;
+
+                       count--;
+                       set_bit(j, tmp_inuse);
+
+                       if (count == 0)
+                               break;
+               } else {
+                       clear_bit(j, tmp_inuse);
+
+                       if (id == EDMA_CONT_PARAMS_FIXED_EXACT) {
+                               stop_slot = i;
+                               break;
+                       } else {
+                               count = num_slots;
+                       }
+               }
+       }
+
+       /*
+        * We have to clear any bits that we set
+        * if we run out parameter RAM slots, i.e we do find a set
+        * of contiguous parameter RAM slots but do not find the exact number
+        * requested as we may reach the total number of parameter RAM slots
+        */
+       if (i == edma_cc[ctlr]->num_slots)
+               stop_slot = i;
+
+       j = start_slot;
+       for_each_set_bit_from(j, tmp_inuse, stop_slot)
+               clear_bit(j, edma_cc[ctlr]->edma_inuse);
+
+       if (count)
+               return -EBUSY;
+
+       for (j = i - num_slots + 1; j <= i; ++j)
+               memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(j),
+                       &dummy_paramset, PARM_SIZE);
+
+       return EDMA_CTLR_CHAN(ctlr, i - num_slots + 1);
+}
+
+static int prepare_unused_channel_list(struct device *dev, void *data)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       int i, ctlr;
+
+       for (i = 0; i < pdev->num_resources; i++) {
+               if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
+                               (int)pdev->resource[i].start >= 0) {
+                       ctlr = EDMA_CTLR(pdev->resource[i].start);
+                       clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
+                                       edma_cc[ctlr]->edma_unused);
+               }
+       }
+
+       return 0;
+}
+
+/*-----------------------------------------------------------------------*/
+
+static bool unused_chan_list_done;
+
+/* Resource alloc/free:  dma channels, parameter RAM slots */
+
+/**
+ * edma_alloc_channel - allocate DMA channel and paired parameter RAM
+ * @channel: specific channel to allocate; negative for "any unmapped channel"
+ * @callback: optional; to be issued on DMA completion or errors
+ * @data: passed to callback
+ * @eventq_no: an EVENTQ_* constant, used to choose which Transfer
+ *     Controller (TC) executes requests using this channel.  Use
+ *     EVENTQ_DEFAULT unless you really need a high priority queue.
+ *
+ * This allocates a DMA channel and its associated parameter RAM slot.
+ * The parameter RAM is initialized to hold a dummy transfer.
+ *
+ * Normal use is to pass a specific channel number as @channel, to make
+ * use of hardware events mapped to that channel.  When the channel will
+ * be used only for software triggering or event chaining, channels not
+ * mapped to hardware events (or mapped to unused events) are preferable.
+ *
+ * DMA transfers start from a channel using edma_start(), or by
+ * chaining.  When the transfer described in that channel's parameter RAM
+ * slot completes, that slot's data may be reloaded through a link.
+ *
+ * DMA errors are only reported to the @callback associated with the
+ * channel driving that transfer, but transfer completion callbacks can
+ * be sent to another channel under control of the TCC field in
+ * the option word of the transfer's parameter RAM set.  Drivers must not
+ * use DMA transfer completion callbacks for channels they did not allocate.
+ * (The same applies to TCC codes used in transfer chaining.)
+ *
+ * Returns the number of the channel, else negative errno.
+ */
+int edma_alloc_channel(int channel,
+               void (*callback)(unsigned channel, u16 ch_status, void *data),
+               void *data,
+               enum dma_event_q eventq_no)
+{
+       unsigned i, done = 0, ctlr = 0;
+       int ret = 0;
+
+       if (!unused_chan_list_done) {
+               /*
+                * Scan all the platform devices to find out the EDMA channels
+                * used and clear them in the unused list, making the rest
+                * available for ARM usage.
+                */
+               ret = bus_for_each_dev(&platform_bus_type, NULL, NULL,
+                               prepare_unused_channel_list);
+               if (ret < 0)
+                       return ret;
+
+               unused_chan_list_done = true;
+       }
+
+       if (channel >= 0) {
+               ctlr = EDMA_CTLR(channel);
+               channel = EDMA_CHAN_SLOT(channel);
+       }
+
+       if (channel < 0) {
+               for (i = 0; i < arch_num_cc; i++) {
+                       channel = 0;
+                       for (;;) {
+                               channel = find_next_bit(edma_cc[i]->edma_unused,
+                                               edma_cc[i]->num_channels,
+                                               channel);
+                               if (channel == edma_cc[i]->num_channels)
+                                       break;
+                               if (!test_and_set_bit(channel,
+                                               edma_cc[i]->edma_inuse)) {
+                                       done = 1;
+                                       ctlr = i;
+                                       break;
+                               }
+                               channel++;
+                       }
+                       if (done)
+                               break;
+               }
+               if (!done)
+                       return -ENOMEM;
+       } else if (channel >= edma_cc[ctlr]->num_channels) {
+               return -EINVAL;
+       } else if (test_and_set_bit(channel, edma_cc[ctlr]->edma_inuse)) {
+               return -EBUSY;
+       }
+
+       /* ensure access through shadow region 0 */
+       edma_or_array2(ctlr, EDMA_DRAE, 0, channel >> 5, BIT(channel & 0x1f));
+
+       /* ensure no events are pending */
+       edma_stop(EDMA_CTLR_CHAN(ctlr, channel));
+       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(channel),
+                       &dummy_paramset, PARM_SIZE);
+
+       if (callback)
+               setup_dma_interrupt(EDMA_CTLR_CHAN(ctlr, channel),
+                                       callback, data);
+
+       map_dmach_queue(ctlr, channel, eventq_no);
+
+       return EDMA_CTLR_CHAN(ctlr, channel);
+}
+EXPORT_SYMBOL(edma_alloc_channel);
+
+
+/**
+ * edma_free_channel - deallocate DMA channel
+ * @channel: dma channel returned from edma_alloc_channel()
+ *
+ * This deallocates the DMA channel and associated parameter RAM slot
+ * allocated by edma_alloc_channel().
+ *
+ * Callers are responsible for ensuring the channel is inactive, and
+ * will not be reactivated by linking, chaining, or software calls to
+ * edma_start().
+ */
+void edma_free_channel(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel >= edma_cc[ctlr]->num_channels)
+               return;
+
+       setup_dma_interrupt(channel, NULL, NULL);
+       /* REVISIT should probably take out of shadow region 0 */
+
+       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(channel),
+                       &dummy_paramset, PARM_SIZE);
+       clear_bit(channel, edma_cc[ctlr]->edma_inuse);
+}
+EXPORT_SYMBOL(edma_free_channel);
+
+/**
+ * edma_alloc_slot - allocate DMA parameter RAM
+ * @slot: specific slot to allocate; negative for "any unused slot"
+ *
+ * This allocates a parameter RAM slot, initializing it to hold a
+ * dummy transfer.  Slots allocated using this routine have not been
+ * mapped to a hardware DMA channel, and will normally be used by
+ * linking to them from a slot associated with a DMA channel.
+ *
+ * Normal use is to pass EDMA_SLOT_ANY as the @slot, but specific
+ * slots may be allocated on behalf of DSP firmware.
+ *
+ * Returns the number of the slot, else negative errno.
+ */
+int edma_alloc_slot(unsigned ctlr, int slot)
+{
+       if (!edma_cc[ctlr])
+               return -EINVAL;
+
+       if (slot >= 0)
+               slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < 0) {
+               slot = edma_cc[ctlr]->num_channels;
+               for (;;) {
+                       slot = find_next_zero_bit(edma_cc[ctlr]->edma_inuse,
+                                       edma_cc[ctlr]->num_slots, slot);
+                       if (slot == edma_cc[ctlr]->num_slots)
+                               return -ENOMEM;
+                       if (!test_and_set_bit(slot, edma_cc[ctlr]->edma_inuse))
+                               break;
+               }
+       } else if (slot < edma_cc[ctlr]->num_channels ||
+                       slot >= edma_cc[ctlr]->num_slots) {
+               return -EINVAL;
+       } else if (test_and_set_bit(slot, edma_cc[ctlr]->edma_inuse)) {
+               return -EBUSY;
+       }
+
+       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
+                       &dummy_paramset, PARM_SIZE);
+
+       return EDMA_CTLR_CHAN(ctlr, slot);
+}
+EXPORT_SYMBOL(edma_alloc_slot);
+
+/**
+ * edma_free_slot - deallocate DMA parameter RAM
+ * @slot: parameter RAM slot returned from edma_alloc_slot()
+ *
+ * This deallocates the parameter RAM slot allocated by edma_alloc_slot().
+ * Callers are responsible for ensuring the slot is inactive, and will
+ * not be activated.
+ */
+void edma_free_slot(unsigned slot)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_channels ||
+               slot >= edma_cc[ctlr]->num_slots)
+               return;
+
+       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
+                       &dummy_paramset, PARM_SIZE);
+       clear_bit(slot, edma_cc[ctlr]->edma_inuse);
+}
+EXPORT_SYMBOL(edma_free_slot);
+
+
+/**
+ * edma_alloc_cont_slots- alloc contiguous parameter RAM slots
+ * The API will return the starting point of a set of
+ * contiguous parameter RAM slots that have been requested
+ *
+ * @id: can only be EDMA_CONT_PARAMS_ANY or EDMA_CONT_PARAMS_FIXED_EXACT
+ * or EDMA_CONT_PARAMS_FIXED_NOT_EXACT
+ * @count: number of contiguous Paramter RAM slots
+ * @slot  - the start value of Parameter RAM slot that should be passed if id
+ * is EDMA_CONT_PARAMS_FIXED_EXACT or EDMA_CONT_PARAMS_FIXED_NOT_EXACT
+ *
+ * If id is EDMA_CONT_PARAMS_ANY then the API starts looking for a set of
+ * contiguous Parameter RAM slots from parameter RAM 64 in the case of
+ * DaVinci SOCs and 32 in the case of DA8xx SOCs.
+ *
+ * If id is EDMA_CONT_PARAMS_FIXED_EXACT then the API starts looking for a
+ * set of contiguous parameter RAM slots from the "slot" that is passed as an
+ * argument to the API.
+ *
+ * If id is EDMA_CONT_PARAMS_FIXED_NOT_EXACT then the API initially tries
+ * starts looking for a set of contiguous parameter RAMs from the "slot"
+ * that is passed as an argument to the API. On failure the API will try to
+ * find a set of contiguous Parameter RAM slots from the remaining Parameter
+ * RAM slots
+ */
+int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count)
+{
+       /*
+        * The start slot requested should be greater than
+        * the number of channels and lesser than the total number
+        * of slots
+        */
+       if ((id != EDMA_CONT_PARAMS_ANY) &&
+               (slot < edma_cc[ctlr]->num_channels ||
+               slot >= edma_cc[ctlr]->num_slots))
+               return -EINVAL;
+
+       /*
+        * The number of parameter RAM slots requested cannot be less than 1
+        * and cannot be more than the number of slots minus the number of
+        * channels
+        */
+       if (count < 1 || count >
+               (edma_cc[ctlr]->num_slots - edma_cc[ctlr]->num_channels))
+               return -EINVAL;
+
+       switch (id) {
+       case EDMA_CONT_PARAMS_ANY:
+               return reserve_contiguous_slots(ctlr, id, count,
+                                                edma_cc[ctlr]->num_channels);
+       case EDMA_CONT_PARAMS_FIXED_EXACT:
+       case EDMA_CONT_PARAMS_FIXED_NOT_EXACT:
+               return reserve_contiguous_slots(ctlr, id, count, slot);
+       default:
+               return -EINVAL;
+       }
+
+}
+EXPORT_SYMBOL(edma_alloc_cont_slots);
+
+/**
+ * edma_free_cont_slots - deallocate DMA parameter RAM slots
+ * @slot: first parameter RAM of a set of parameter RAM slots to be freed
+ * @count: the number of contiguous parameter RAM slots to be freed
+ *
+ * This deallocates the parameter RAM slots allocated by
+ * edma_alloc_cont_slots.
+ * Callers/applications need to keep track of sets of contiguous
+ * parameter RAM slots that have been allocated using the edma_alloc_cont_slots
+ * API.
+ * Callers are responsible for ensuring the slots are inactive, and will
+ * not be activated.
+ */
+int edma_free_cont_slots(unsigned slot, int count)
+{
+       unsigned ctlr, slot_to_free;
+       int i;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_channels ||
+               slot >= edma_cc[ctlr]->num_slots ||
+               count < 1)
+               return -EINVAL;
+
+       for (i = slot; i < slot + count; ++i) {
+               ctlr = EDMA_CTLR(i);
+               slot_to_free = EDMA_CHAN_SLOT(i);
+
+               memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot_to_free),
+                       &dummy_paramset, PARM_SIZE);
+               clear_bit(slot_to_free, edma_cc[ctlr]->edma_inuse);
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL(edma_free_cont_slots);
+
+/*-----------------------------------------------------------------------*/
+
+/* Parameter RAM operations (i) -- read/write partial slots */
+
+/**
+ * edma_set_src - set initial DMA source address in parameter RAM slot
+ * @slot: parameter RAM slot being configured
+ * @src_port: physical address of source (memory, controller FIFO, etc)
+ * @addressMode: INCR, except in very rare cases
+ * @fifoWidth: ignored unless @addressMode is FIFO, else specifies the
+ *     width to use when addressing the fifo (e.g. W8BIT, W32BIT)
+ *
+ * Note that the source address is modified during the DMA transfer
+ * according to edma_set_src_index().
+ */
+void edma_set_src(unsigned slot, dma_addr_t src_port,
+                               enum address_mode mode, enum fifo_width width)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_slots) {
+               unsigned int i = edma_parm_read(ctlr, PARM_OPT, slot);
+
+               if (mode) {
+                       /* set SAM and program FWID */
+                       i = (i & ~(EDMA_FWID)) | (SAM | ((width & 0x7) << 8));
+               } else {
+                       /* clear SAM */
+                       i &= ~SAM;
+               }
+               edma_parm_write(ctlr, PARM_OPT, slot, i);
+
+               /* set the source port address
+                  in source register of param structure */
+               edma_parm_write(ctlr, PARM_SRC, slot, src_port);
+       }
+}
+EXPORT_SYMBOL(edma_set_src);
+
+/**
+ * edma_set_dest - set initial DMA destination address in parameter RAM slot
+ * @slot: parameter RAM slot being configured
+ * @dest_port: physical address of destination (memory, controller FIFO, etc)
+ * @addressMode: INCR, except in very rare cases
+ * @fifoWidth: ignored unless @addressMode is FIFO, else specifies the
+ *     width to use when addressing the fifo (e.g. W8BIT, W32BIT)
+ *
+ * Note that the destination address is modified during the DMA transfer
+ * according to edma_set_dest_index().
+ */
+void edma_set_dest(unsigned slot, dma_addr_t dest_port,
+                                enum address_mode mode, enum fifo_width width)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_slots) {
+               unsigned int i = edma_parm_read(ctlr, PARM_OPT, slot);
+
+               if (mode) {
+                       /* set DAM and program FWID */
+                       i = (i & ~(EDMA_FWID)) | (DAM | ((width & 0x7) << 8));
+               } else {
+                       /* clear DAM */
+                       i &= ~DAM;
+               }
+               edma_parm_write(ctlr, PARM_OPT, slot, i);
+               /* set the destination port address
+                  in dest register of param structure */
+               edma_parm_write(ctlr, PARM_DST, slot, dest_port);
+       }
+}
+EXPORT_SYMBOL(edma_set_dest);
+
+/**
+ * edma_get_position - returns the current transfer points
+ * @slot: parameter RAM slot being examined
+ * @src: pointer to source port position
+ * @dst: pointer to destination port position
+ *
+ * Returns current source and destination addresses for a particular
+ * parameter RAM slot.  Its channel should not be active when this is called.
+ */
+void edma_get_position(unsigned slot, dma_addr_t *src, dma_addr_t *dst)
+{
+       struct edmacc_param temp;
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       edma_read_slot(EDMA_CTLR_CHAN(ctlr, slot), &temp);
+       if (src != NULL)
+               *src = temp.src;
+       if (dst != NULL)
+               *dst = temp.dst;
+}
+EXPORT_SYMBOL(edma_get_position);
+
+/**
+ * edma_set_src_index - configure DMA source address indexing
+ * @slot: parameter RAM slot being configured
+ * @src_bidx: byte offset between source arrays in a frame
+ * @src_cidx: byte offset between source frames in a block
+ *
+ * Offsets are specified to support either contiguous or discontiguous
+ * memory transfers, or repeated access to a hardware register, as needed.
+ * When accessing hardware registers, both offsets are normally zero.
+ */
+void edma_set_src_index(unsigned slot, s16 src_bidx, s16 src_cidx)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_slots) {
+               edma_parm_modify(ctlr, PARM_SRC_DST_BIDX, slot,
+                               0xffff0000, src_bidx);
+               edma_parm_modify(ctlr, PARM_SRC_DST_CIDX, slot,
+                               0xffff0000, src_cidx);
+       }
+}
+EXPORT_SYMBOL(edma_set_src_index);
+
+/**
+ * edma_set_dest_index - configure DMA destination address indexing
+ * @slot: parameter RAM slot being configured
+ * @dest_bidx: byte offset between destination arrays in a frame
+ * @dest_cidx: byte offset between destination frames in a block
+ *
+ * Offsets are specified to support either contiguous or discontiguous
+ * memory transfers, or repeated access to a hardware register, as needed.
+ * When accessing hardware registers, both offsets are normally zero.
+ */
+void edma_set_dest_index(unsigned slot, s16 dest_bidx, s16 dest_cidx)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_slots) {
+               edma_parm_modify(ctlr, PARM_SRC_DST_BIDX, slot,
+                               0x0000ffff, dest_bidx << 16);
+               edma_parm_modify(ctlr, PARM_SRC_DST_CIDX, slot,
+                               0x0000ffff, dest_cidx << 16);
+       }
+}
+EXPORT_SYMBOL(edma_set_dest_index);
+
+/**
+ * edma_set_transfer_params - configure DMA transfer parameters
+ * @slot: parameter RAM slot being configured
+ * @acnt: how many bytes per array (at least one)
+ * @bcnt: how many arrays per frame (at least one)
+ * @ccnt: how many frames per block (at least one)
+ * @bcnt_rld: used only for A-Synchronized transfers; this specifies
+ *     the value to reload into bcnt when it decrements to zero
+ * @sync_mode: ASYNC or ABSYNC
+ *
+ * See the EDMA3 documentation to understand how to configure and link
+ * transfers using the fields in PaRAM slots.  If you are not doing it
+ * all at once with edma_write_slot(), you will use this routine
+ * plus two calls each for source and destination, setting the initial
+ * address and saying how to index that address.
+ *
+ * An example of an A-Synchronized transfer is a serial link using a
+ * single word shift register.  In that case, @acnt would be equal to
+ * that word size; the serial controller issues a DMA synchronization
+ * event to transfer each word, and memory access by the DMA transfer
+ * controller will be word-at-a-time.
+ *
+ * An example of an AB-Synchronized transfer is a device using a FIFO.
+ * In that case, @acnt equals the FIFO width and @bcnt equals its depth.
+ * The controller with the FIFO issues DMA synchronization events when
+ * the FIFO threshold is reached, and the DMA transfer controller will
+ * transfer one frame to (or from) the FIFO.  It will probably use
+ * efficient burst modes to access memory.
+ */
+void edma_set_transfer_params(unsigned slot,
+               u16 acnt, u16 bcnt, u16 ccnt,
+               u16 bcnt_rld, enum sync_dimension sync_mode)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot < edma_cc[ctlr]->num_slots) {
+               edma_parm_modify(ctlr, PARM_LINK_BCNTRLD, slot,
+                               0x0000ffff, bcnt_rld << 16);
+               if (sync_mode == ASYNC)
+                       edma_parm_and(ctlr, PARM_OPT, slot, ~SYNCDIM);
+               else
+                       edma_parm_or(ctlr, PARM_OPT, slot, SYNCDIM);
+               /* Set the acount, bcount, ccount registers */
+               edma_parm_write(ctlr, PARM_A_B_CNT, slot, (bcnt << 16) | acnt);
+               edma_parm_write(ctlr, PARM_CCNT, slot, ccnt);
+       }
+}
+EXPORT_SYMBOL(edma_set_transfer_params);
+
+/**
+ * edma_link - link one parameter RAM slot to another
+ * @from: parameter RAM slot originating the link
+ * @to: parameter RAM slot which is the link target
+ *
+ * The originating slot should not be part of any active DMA transfer.
+ */
+void edma_link(unsigned from, unsigned to)
+{
+       unsigned ctlr_from, ctlr_to;
+
+       ctlr_from = EDMA_CTLR(from);
+       from = EDMA_CHAN_SLOT(from);
+       ctlr_to = EDMA_CTLR(to);
+       to = EDMA_CHAN_SLOT(to);
+
+       if (from >= edma_cc[ctlr_from]->num_slots)
+               return;
+       if (to >= edma_cc[ctlr_to]->num_slots)
+               return;
+       edma_parm_modify(ctlr_from, PARM_LINK_BCNTRLD, from, 0xffff0000,
+                               PARM_OFFSET(to));
+}
+EXPORT_SYMBOL(edma_link);
+
+/**
+ * edma_unlink - cut link from one parameter RAM slot
+ * @from: parameter RAM slot originating the link
+ *
+ * The originating slot should not be part of any active DMA transfer.
+ * Its link is set to 0xffff.
+ */
+void edma_unlink(unsigned from)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(from);
+       from = EDMA_CHAN_SLOT(from);
+
+       if (from >= edma_cc[ctlr]->num_slots)
+               return;
+       edma_parm_or(ctlr, PARM_LINK_BCNTRLD, from, 0xffff);
+}
+EXPORT_SYMBOL(edma_unlink);
+
+/*-----------------------------------------------------------------------*/
+
+/* Parameter RAM operations (ii) -- read/write whole parameter sets */
+
+/**
+ * edma_write_slot - write parameter RAM data for slot
+ * @slot: number of parameter RAM slot being modified
+ * @param: data to be written into parameter RAM slot
+ *
+ * Use this to assign all parameters of a transfer at once.  This
+ * allows more efficient setup of transfers than issuing multiple
+ * calls to set up those parameters in small pieces, and provides
+ * complete control over all transfer options.
+ */
+void edma_write_slot(unsigned slot, const struct edmacc_param *param)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot >= edma_cc[ctlr]->num_slots)
+               return;
+       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot), param,
+                       PARM_SIZE);
+}
+EXPORT_SYMBOL(edma_write_slot);
+
+/**
+ * edma_read_slot - read parameter RAM data from slot
+ * @slot: number of parameter RAM slot being copied
+ * @param: where to store copy of parameter RAM data
+ *
+ * Use this to read data from a parameter RAM slot, perhaps to
+ * save them as a template for later reuse.
+ */
+void edma_read_slot(unsigned slot, struct edmacc_param *param)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(slot);
+       slot = EDMA_CHAN_SLOT(slot);
+
+       if (slot >= edma_cc[ctlr]->num_slots)
+               return;
+       memcpy_fromio(param, edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
+                       PARM_SIZE);
+}
+EXPORT_SYMBOL(edma_read_slot);
+
+/*-----------------------------------------------------------------------*/
+
+/* Various EDMA channel control operations */
+
+/**
+ * edma_pause - pause dma on a channel
+ * @channel: on which edma_start() has been called
+ *
+ * This temporarily disables EDMA hardware events on the specified channel,
+ * preventing them from triggering new transfers on its behalf
+ */
+void edma_pause(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel < edma_cc[ctlr]->num_channels) {
+               unsigned int mask = BIT(channel & 0x1f);
+
+               edma_shadow0_write_array(ctlr, SH_EECR, channel >> 5, mask);
+       }
+}
+EXPORT_SYMBOL(edma_pause);
+
+/**
+ * edma_resume - resumes dma on a paused channel
+ * @channel: on which edma_pause() has been called
+ *
+ * This re-enables EDMA hardware events on the specified channel.
+ */
+void edma_resume(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel < edma_cc[ctlr]->num_channels) {
+               unsigned int mask = BIT(channel & 0x1f);
+
+               edma_shadow0_write_array(ctlr, SH_EESR, channel >> 5, mask);
+       }
+}
+EXPORT_SYMBOL(edma_resume);
+
+/**
+ * edma_start - start dma on a channel
+ * @channel: channel being activated
+ *
+ * Channels with event associations will be triggered by their hardware
+ * events, and channels without such associations will be triggered by
+ * software.  (At this writing there is no interface for using software
+ * triggers except with channels that don't support hardware triggers.)
+ *
+ * Returns zero on success, else negative errno.
+ */
+int edma_start(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel < edma_cc[ctlr]->num_channels) {
+               int j = channel >> 5;
+               unsigned int mask = BIT(channel & 0x1f);
+
+               /* EDMA channels without event association */
+               if (test_bit(channel, edma_cc[ctlr]->edma_unused)) {
+                       pr_debug("EDMA: ESR%d %08x\n", j,
+                               edma_shadow0_read_array(ctlr, SH_ESR, j));
+                       edma_shadow0_write_array(ctlr, SH_ESR, j, mask);
+                       return 0;
+               }
+
+               /* EDMA channel with event association */
+               pr_debug("EDMA: ER%d %08x\n", j,
+                       edma_shadow0_read_array(ctlr, SH_ER, j));
+               /* Clear any pending event or error */
+               edma_write_array(ctlr, EDMA_ECR, j, mask);
+               edma_write_array(ctlr, EDMA_EMCR, j, mask);
+               /* Clear any SER */
+               edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
+               edma_shadow0_write_array(ctlr, SH_EESR, j, mask);
+               pr_debug("EDMA: EER%d %08x\n", j,
+                       edma_shadow0_read_array(ctlr, SH_EER, j));
+               return 0;
+       }
+
+       return -EINVAL;
+}
+EXPORT_SYMBOL(edma_start);
+
+/**
+ * edma_stop - stops dma on the channel passed
+ * @channel: channel being deactivated
+ *
+ * When @lch is a channel, any active transfer is paused and
+ * all pending hardware events are cleared.  The current transfer
+ * may not be resumed, and the channel's Parameter RAM should be
+ * reinitialized before being reused.
+ */
+void edma_stop(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel < edma_cc[ctlr]->num_channels) {
+               int j = channel >> 5;
+               unsigned int mask = BIT(channel & 0x1f);
+
+               edma_shadow0_write_array(ctlr, SH_EECR, j, mask);
+               edma_shadow0_write_array(ctlr, SH_ECR, j, mask);
+               edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
+               edma_write_array(ctlr, EDMA_EMCR, j, mask);
+
+               pr_debug("EDMA: EER%d %08x\n", j,
+                               edma_shadow0_read_array(ctlr, SH_EER, j));
+
+               /* REVISIT:  consider guarding against inappropriate event
+                * chaining by overwriting with dummy_paramset.
+                */
+       }
+}
+EXPORT_SYMBOL(edma_stop);
+
+/******************************************************************************
+ *
+ * It cleans ParamEntry qand bring back EDMA to initial state if media has
+ * been removed before EDMA has finished.It is usedful for removable media.
+ * Arguments:
+ *      ch_no     - channel no
+ *
+ * Return: zero on success, or corresponding error no on failure
+ *
+ * FIXME this should not be needed ... edma_stop() should suffice.
+ *
+ *****************************************************************************/
+
+void edma_clean_channel(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel < edma_cc[ctlr]->num_channels) {
+               int j = (channel >> 5);
+               unsigned int mask = BIT(channel & 0x1f);
+
+               pr_debug("EDMA: EMR%d %08x\n", j,
+                               edma_read_array(ctlr, EDMA_EMR, j));
+               edma_shadow0_write_array(ctlr, SH_ECR, j, mask);
+               /* Clear the corresponding EMR bits */
+               edma_write_array(ctlr, EDMA_EMCR, j, mask);
+               /* Clear any SER */
+               edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
+               edma_write(ctlr, EDMA_CCERRCLR, BIT(16) | BIT(1) | BIT(0));
+       }
+}
+EXPORT_SYMBOL(edma_clean_channel);
+
+/*
+ * edma_clear_event - clear an outstanding event on the DMA channel
+ * Arguments:
+ *     channel - channel number
+ */
+void edma_clear_event(unsigned channel)
+{
+       unsigned ctlr;
+
+       ctlr = EDMA_CTLR(channel);
+       channel = EDMA_CHAN_SLOT(channel);
+
+       if (channel >= edma_cc[ctlr]->num_channels)
+               return;
+       if (channel < 32)
+               edma_write(ctlr, EDMA_ECR, BIT(channel));
+       else
+               edma_write(ctlr, EDMA_ECRH, BIT(channel - 32));
+}
+EXPORT_SYMBOL(edma_clear_event);
+
+#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DMADEVICES)
+
+static int edma_of_read_u32_to_s16_array(const struct device_node *np,
+                                        const char *propname, s16 *out_values,
+                                        size_t sz)
+{
+       int ret;
+
+       ret = of_property_read_u16_array(np, propname, out_values, sz);
+       if (ret)
+               return ret;
+
+       /* Terminate it */
+       *out_values++ = -1;
+       *out_values++ = -1;
+
+       return 0;
+}
+
+static int edma_xbar_event_map(struct device *dev,
+                              struct device_node *node,
+                              struct edma_soc_info *pdata, int len)
+{
+       int ret, i;
+       struct resource res;
+       void __iomem *xbar;
+       const s16 (*xbar_chans)[2];
+       u32 shift, offset, mux;
+
+       xbar_chans = devm_kzalloc(dev,
+                                 len/sizeof(s16) + 2*sizeof(s16),
+                                 GFP_KERNEL);
+       if (!xbar_chans)
+               return -ENOMEM;
+
+       ret = of_address_to_resource(node, 1, &res);
+       if (ret)
+               return -EIO;
+
+       xbar = devm_ioremap(dev, res.start, resource_size(&res));
+       if (!xbar)
+               return -ENOMEM;
+
+       ret = edma_of_read_u32_to_s16_array(node,
+                                           "ti,edma-xbar-event-map",
+                                           (s16 *)xbar_chans,
+                                           len/sizeof(u32));
+       if (ret)
+               return -EIO;
+
+       for (i = 0; xbar_chans[i][0] != -1; i++) {
+               shift = (xbar_chans[i][1] & 0x03) << 3;
+               offset = xbar_chans[i][1] & 0xfffffffc;
+               mux = readl(xbar + offset);
+               mux &= ~(0xff << shift);
+               mux |= xbar_chans[i][0] << shift;
+               writel(mux, (xbar + offset));
+       }
+
+       pdata->xbar_chans = xbar_chans;
+
+       return 0;
+}
+
+static int edma_of_parse_dt(struct device *dev,
+                           struct device_node *node,
+                           struct edma_soc_info *pdata)
+{
+       int ret = 0, i;
+       u32 value;
+       struct property *prop;
+       size_t sz;
+       struct edma_rsv_info *rsv_info;
+       s8 (*queue_tc_map)[2], (*queue_priority_map)[2];
+
+       memset(pdata, 0, sizeof(struct edma_soc_info));
+
+       ret = of_property_read_u32(node, "dma-channels", &value);
+       if (ret < 0)
+               return ret;
+       pdata->n_channel = value;
+
+       ret = of_property_read_u32(node, "ti,edma-regions", &value);
+       if (ret < 0)
+               return ret;
+       pdata->n_region = value;
+
+       ret = of_property_read_u32(node, "ti,edma-slots", &value);
+       if (ret < 0)
+               return ret;
+       pdata->n_slot = value;
+
+       pdata->n_cc = 1;
+
+       rsv_info = devm_kzalloc(dev, sizeof(struct edma_rsv_info), GFP_KERNEL);
+       if (!rsv_info)
+               return -ENOMEM;
+       pdata->rsv = rsv_info;
+
+       queue_tc_map = devm_kzalloc(dev, 8*sizeof(s8), GFP_KERNEL);
+       if (!queue_tc_map)
+               return -ENOMEM;
+
+       for (i = 0; i < 3; i++) {
+               queue_tc_map[i][0] = i;
+               queue_tc_map[i][1] = i;
+       }
+       queue_tc_map[i][0] = -1;
+       queue_tc_map[i][1] = -1;
+
+       pdata->queue_tc_mapping = queue_tc_map;
+
+       queue_priority_map = devm_kzalloc(dev, 8*sizeof(s8), GFP_KERNEL);
+       if (!queue_priority_map)
+               return -ENOMEM;
+
+       for (i = 0; i < 3; i++) {
+               queue_priority_map[i][0] = i;
+               queue_priority_map[i][1] = i;
+       }
+       queue_priority_map[i][0] = -1;
+       queue_priority_map[i][1] = -1;
+
+       pdata->queue_priority_mapping = queue_priority_map;
+
+       pdata->default_queue = 0;
+
+       prop = of_find_property(node, "ti,edma-xbar-event-map", &sz);
+       if (prop)
+               ret = edma_xbar_event_map(dev, node, pdata, sz);
+
+       return ret;
+}
+
+static struct of_dma_filter_info edma_filter_info = {
+       .filter_fn = edma_filter_fn,
+};
+
+static struct edma_soc_info *edma_setup_info_from_dt(struct device *dev,
+                                                     struct device_node *node)
+{
+       struct edma_soc_info *info;
+       int ret;
+
+       info = devm_kzalloc(dev, sizeof(struct edma_soc_info), GFP_KERNEL);
+       if (!info)
+               return ERR_PTR(-ENOMEM);
+
+       ret = edma_of_parse_dt(dev, node, info);
+       if (ret)
+               return ERR_PTR(ret);
+
+       dma_cap_set(DMA_SLAVE, edma_filter_info.dma_cap);
+       of_dma_controller_register(dev->of_node, of_dma_simple_xlate,
+                                  &edma_filter_info);
+
+       return info;
+}
+#else
+static struct edma_soc_info *edma_setup_info_from_dt(struct device *dev,
+                                                     struct device_node *node)
+{
+       return ERR_PTR(-ENOSYS);
+}
+#endif
+
+static int edma_probe(struct platform_device *pdev)
+{
+       struct edma_soc_info    **info = pdev->dev.platform_data;
+       struct edma_soc_info    *ninfo[EDMA_MAX_CC] = {NULL};
+       s8              (*queue_priority_mapping)[2];
+       s8              (*queue_tc_mapping)[2];
+       int                     i, j, off, ln, found = 0;
+       int                     status = -1;
+       const s16               (*rsv_chans)[2];
+       const s16               (*rsv_slots)[2];
+       const s16               (*xbar_chans)[2];
+       int                     irq[EDMA_MAX_CC] = {0, 0};
+       int                     err_irq[EDMA_MAX_CC] = {0, 0};
+       struct resource         *r[EDMA_MAX_CC] = {NULL};
+       struct resource         res[EDMA_MAX_CC];
+       char                    res_name[10];
+       char                    irq_name[10];
+       struct device_node      *node = pdev->dev.of_node;
+       struct device           *dev = &pdev->dev;
+       int                     ret;
+
+       if (node) {
+               /* Check if this is a second instance registered */
+               if (arch_num_cc) {
+                       dev_err(dev, "only one EDMA instance is supported via DT\n");
+                       return -ENODEV;
+               }
+
+               ninfo[0] = edma_setup_info_from_dt(dev, node);
+               if (IS_ERR(ninfo[0])) {
+                       dev_err(dev, "failed to get DT data\n");
+                       return PTR_ERR(ninfo[0]);
+               }
+
+               info = ninfo;
+       }
+
+       if (!info)
+               return -ENODEV;
+
+       pm_runtime_enable(dev);
+       ret = pm_runtime_get_sync(dev);
+       if (ret < 0) {
+               dev_err(dev, "pm_runtime_get_sync() failed\n");
+               return ret;
+       }
+
+       for (j = 0; j < EDMA_MAX_CC; j++) {
+               if (!info[j]) {
+                       if (!found)
+                               return -ENODEV;
+                       break;
+               }
+               if (node) {
+                       ret = of_address_to_resource(node, j, &res[j]);
+                       if (!ret)
+                               r[j] = &res[j];
+               } else {
+                       sprintf(res_name, "edma_cc%d", j);
+                       r[j] = platform_get_resource_byname(pdev,
+                                               IORESOURCE_MEM,
+                                               res_name);
+               }
+               if (!r[j]) {
+                       if (found)
+                               break;
+                       else
+                               return -ENODEV;
+               } else {
+                       found = 1;
+               }
+
+               edmacc_regs_base[j] = devm_ioremap_resource(&pdev->dev, r[j]);
+               if (IS_ERR(edmacc_regs_base[j]))
+                       return PTR_ERR(edmacc_regs_base[j]);
+
+               edma_cc[j] = devm_kzalloc(&pdev->dev, sizeof(struct edma),
+                                         GFP_KERNEL);
+               if (!edma_cc[j])
+                       return -ENOMEM;
+
+               edma_cc[j]->num_channels = min_t(unsigned, info[j]->n_channel,
+                                                       EDMA_MAX_DMACH);
+               edma_cc[j]->num_slots = min_t(unsigned, info[j]->n_slot,
+                                                       EDMA_MAX_PARAMENTRY);
+               edma_cc[j]->num_cc = min_t(unsigned, info[j]->n_cc,
+                                                       EDMA_MAX_CC);
+
+               edma_cc[j]->default_queue = info[j]->default_queue;
+
+               dev_dbg(&pdev->dev, "DMA REG BASE ADDR=%p\n",
+                       edmacc_regs_base[j]);
+
+               for (i = 0; i < edma_cc[j]->num_slots; i++)
+                       memcpy_toio(edmacc_regs_base[j] + PARM_OFFSET(i),
+                                       &dummy_paramset, PARM_SIZE);
+
+               /* Mark all channels as unused */
+               memset(edma_cc[j]->edma_unused, 0xff,
+                       sizeof(edma_cc[j]->edma_unused));
+
+               if (info[j]->rsv) {
+
+                       /* Clear the reserved channels in unused list */
+                       rsv_chans = info[j]->rsv->rsv_chans;
+                       if (rsv_chans) {
+                               for (i = 0; rsv_chans[i][0] != -1; i++) {
+                                       off = rsv_chans[i][0];
+                                       ln = rsv_chans[i][1];
+                                       clear_bits(off, ln,
+                                                 edma_cc[j]->edma_unused);
+                               }
+                       }
+
+                       /* Set the reserved slots in inuse list */
+                       rsv_slots = info[j]->rsv->rsv_slots;
+                       if (rsv_slots) {
+                               for (i = 0; rsv_slots[i][0] != -1; i++) {
+                                       off = rsv_slots[i][0];
+                                       ln = rsv_slots[i][1];
+                                       set_bits(off, ln,
+                                               edma_cc[j]->edma_inuse);
+                               }
+                       }
+               }
+
+               /* Clear the xbar mapped channels in unused list */
+               xbar_chans = info[j]->xbar_chans;
+               if (xbar_chans) {
+                       for (i = 0; xbar_chans[i][1] != -1; i++) {
+                               off = xbar_chans[i][1];
+                               clear_bits(off, 1,
+                                          edma_cc[j]->edma_unused);
+                       }
+               }
+
+               if (node) {
+                       irq[j] = irq_of_parse_and_map(node, 0);
+               } else {
+                       sprintf(irq_name, "edma%d", j);
+                       irq[j] = platform_get_irq_byname(pdev, irq_name);
+               }
+               edma_cc[j]->irq_res_start = irq[j];
+               status = devm_request_irq(&pdev->dev, irq[j],
+                                         dma_irq_handler, 0, "edma",
+                                         &pdev->dev);
+               if (status < 0) {
+                       dev_dbg(&pdev->dev,
+                               "devm_request_irq %d failed --> %d\n",
+                               irq[j], status);
+                       return status;
+               }
+
+               if (node) {
+                       err_irq[j] = irq_of_parse_and_map(node, 2);
+               } else {
+                       sprintf(irq_name, "edma%d_err", j);
+                       err_irq[j] = platform_get_irq_byname(pdev, irq_name);
+               }
+               edma_cc[j]->irq_res_end = err_irq[j];
+               status = devm_request_irq(&pdev->dev, err_irq[j],
+                                         dma_ccerr_handler, 0,
+                                         "edma_error", &pdev->dev);
+               if (status < 0) {
+                       dev_dbg(&pdev->dev,
+                               "devm_request_irq %d failed --> %d\n",
+                               err_irq[j], status);
+                       return status;
+               }
+
+               for (i = 0; i < edma_cc[j]->num_channels; i++)
+                       map_dmach_queue(j, i, info[j]->default_queue);
+
+               queue_tc_mapping = info[j]->queue_tc_mapping;
+               queue_priority_mapping = info[j]->queue_priority_mapping;
+
+               /* Event queue to TC mapping */
+               for (i = 0; queue_tc_mapping[i][0] != -1; i++)
+                       map_queue_tc(j, queue_tc_mapping[i][0],
+                                       queue_tc_mapping[i][1]);
+
+               /* Event queue priority mapping */
+               for (i = 0; queue_priority_mapping[i][0] != -1; i++)
+                       assign_priority_to_queue(j,
+                                               queue_priority_mapping[i][0],
+                                               queue_priority_mapping[i][1]);
+
+               /* Map the channel to param entry if channel mapping logic
+                * exist
+                */
+               if (edma_read(j, EDMA_CCCFG) & CHMAP_EXIST)
+                       map_dmach_param(j);
+
+               for (i = 0; i < info[j]->n_region; i++) {
+                       edma_write_array2(j, EDMA_DRAE, i, 0, 0x0);
+                       edma_write_array2(j, EDMA_DRAE, i, 1, 0x0);
+                       edma_write_array(j, EDMA_QRAE, i, 0x0);
+               }
+               arch_num_cc++;
+       }
+
+       return 0;
+}
+
+static const struct of_device_id edma_of_ids[] = {
+       { .compatible = "ti,edma3", },
+       {}
+};
+
+static struct platform_driver edma_driver = {
+       .driver = {
+               .name   = "edma",
+               .of_match_table = edma_of_ids,
+       },
+       .probe = edma_probe,
+};
+
+static int __init edma_init(void)
+{
+       return platform_driver_probe(&edma_driver, edma_probe);
+}
+arch_initcall(edma_init);
+
diff --git a/arch/arm/configs/ap4evb_defconfig b/arch/arm/configs/ap4evb_defconfig
deleted file mode 100644 (file)
index 66894f7..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-CONFIG_EXPERIMENTAL=y
-CONFIG_SYSVIPC=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_SLAB=y
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_ARCH_SHMOBILE=y
-CONFIG_ARCH_SH7372=y
-CONFIG_MACH_AP4EVB=y
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=sh-sci.0,115200"
-CONFIG_KEXEC=y
-CONFIG_PM=y
-# CONFIG_SUSPEND is not set
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-CONFIG_MTD=y
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CFI_INTELEXT=y
-CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_NAND=y
-# CONFIG_BLK_DEV is not set
-# CONFIG_MISC_DEVICES is not set
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_SERIO is not set
-CONFIG_SERIAL_SH_SCI=y
-CONFIG_SERIAL_SH_SCI_NR_UARTS=8
-CONFIG_SERIAL_SH_SCI_CONSOLE=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_HWMON is not set
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_DNOTIFY is not set
-CONFIG_TMPFS=y
-# CONFIG_MISC_FILESYSTEMS is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_FTRACE is not set
-# CONFIG_CRC32 is not set
diff --git a/arch/arm/configs/bonito_defconfig b/arch/arm/configs/bonito_defconfig
deleted file mode 100644 (file)
index 5457108..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-CONFIG_EXPERIMENTAL=y
-CONFIG_SYSVIPC=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-# CONFIG_UTS_NS is not set
-# CONFIG_IPC_NS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SLAB=y
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_ARCH_SHMOBILE=y
-CONFIG_ARCH_R8A7740=y
-CONFIG_MACH_BONITO=y
-# CONFIG_SH_TIMER_TMU is not set
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-CONFIG_FORCE_MAX_ZONEORDER=12
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttySC5,115200 earlyprintk=sh-sci.5,115200 ignore_loglevel"
-CONFIG_KEXEC=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_SUSPEND is not set
-CONFIG_PM_RUNTIME=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-CONFIG_MTD=y
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_INTELEXT=y
-CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_ARM_INTEGRATOR=y
-CONFIG_MTD_BLOCK2MTD=y
-CONFIG_SCSI=y
-CONFIG_BLK_DEV_SD=y
-# CONFIG_SCSI_LOWLEVEL is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_SERIAL_SH_SCI=y
-CONFIG_SERIAL_SH_SCI_NR_UARTS=9
-CONFIG_SERIAL_SH_SCI_CONSOLE=y
-# CONFIG_HW_RANDOM is not set
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_SH_MOBILE=y
-CONFIG_GPIO_SYSFS=y
-# CONFIG_HWMON is not set
-# CONFIG_MFD_SUPPORT is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
-CONFIG_UIO=y
-CONFIG_UIO_PDRV=y
-CONFIG_UIO_PDRV_GENIRQ=y
-# CONFIG_DNOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-CONFIG_TMPFS=y
-# CONFIG_MISC_FILESYSTEMS is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-# CONFIG_ARM_UNWIND is not set
index 1cd94c36321f90f13fee4eb8c197838fb8073ad1..9e8c8316d6b074004686ab7f86cb133c59729767 100644 (file)
@@ -31,21 +31,18 @@ CONFIG_EP7211_DONGLE=y
 # CONFIG_WIRELESS is not set
 CONFIG_MTD=y
 CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_CHAR=y
 CONFIG_MTD_BLOCK=y
 CONFIG_MTD_CFI=y
 CONFIG_MTD_JEDECPROBE=y
 CONFIG_MTD_CFI_INTELEXT=y
 CONFIG_MTD_CFI_AMDSTD=y
 CONFIG_MTD_CFI_STAA=y
-CONFIG_MTD_AUTCPU12=y
 CONFIG_MTD_PLATRAM=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_GPIO=y
 CONFIG_NETDEVICES=y
 # CONFIG_NET_CADENCE is not set
 # CONFIG_NET_VENDOR_BROADCOM is not set
-# CONFIG_NET_VENDOR_CHELSIO is not set
 CONFIG_CS89x0=y
 CONFIG_CS89x0_PLATFORM=y
 # CONFIG_NET_VENDOR_FARADAY is not set
@@ -63,7 +60,11 @@ CONFIG_CS89x0_PLATFORM=y
 # CONFIG_VT is not set
 CONFIG_SERIAL_CLPS711X_CONSOLE=y
 # CONFIG_HW_RANDOM is not set
+CONFIG_I2C=y
+CONFIG_I2C_GPIO=y
 CONFIG_SPI=y
+CONFIG_SPI_CLPS711X=y
+CONFIG_GPIO_CLPS711X=y
 CONFIG_GPIO_GENERIC_PLATFORM=y
 # CONFIG_HWMON is not set
 CONFIG_FB=y
@@ -87,4 +88,3 @@ CONFIG_DEBUG_LL=y
 CONFIG_EARLY_PRINTK=y
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
 # CONFIG_CRYPTO_HW is not set
-# CONFIG_CRC32 is not set
index 227abf9cc6018fe2a53ed6146cff8a2d69ee0f97..ad7dfbbafa453422fc5c986e2f749d3eaf609a0c 100644 (file)
@@ -50,6 +50,7 @@ CONFIG_USB_USBNET=y
 CONFIG_USB_NET_SMSC75XX=y
 CONFIG_USB_NET_SMSC95XX=y
 CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
 CONFIG_KEYBOARD_CROS_EC=y
 # CONFIG_MOUSE_PS2 is not set
 CONFIG_MOUSE_CYAPA=y
@@ -104,6 +105,8 @@ CONFIG_MMC_SDHCI_S3C=y
 CONFIG_MMC_DW=y
 CONFIG_MMC_DW_IDMAC=y
 CONFIG_MMC_DW_EXYNOS=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_S3C=y
 CONFIG_COMMON_CLK_MAX77686=y
 CONFIG_EXT2_FS=y
 CONFIG_EXT3_FS=y
index 6ec010f248b5b54a73cea23d06691c207e3ea468..06686e7303a95d8e739fea7f635438e0bf91bc6a 100644 (file)
@@ -37,6 +37,8 @@ CONFIG_MACH_IMX51_DT=y
 CONFIG_MACH_EUKREA_CPUIMX51SD=y
 CONFIG_SOC_IMX53=y
 CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6SL=y
+CONFIG_SOC_VF610=y
 CONFIG_MXC_PWM=y
 CONFIG_SMP=y
 CONFIG_VMSPLIT_2G=y
@@ -47,6 +49,7 @@ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
 CONFIG_VFP=y
 CONFIG_NEON=y
 CONFIG_BINFMT_MISC=m
+CONFIG_PM_RUNTIME=y
 CONFIG_PM_DEBUG=y
 CONFIG_PM_TEST_SUSPEND=y
 CONFIG_NET=y
@@ -170,6 +173,7 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_LCD_CLASS_DEVICE=y
 CONFIG_LCD_L4F00242T03=y
 CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_PWM=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 CONFIG_FONTS=y
@@ -182,6 +186,7 @@ CONFIG_SND_SOC=y
 CONFIG_SND_IMX_SOC=y
 CONFIG_SND_SOC_PHYCORE_AC97=y
 CONFIG_SND_SOC_EUKREA_TLV320=y
+CONFIG_SND_SOC_IMX_WM8962=y
 CONFIG_SND_SOC_IMX_SGTL5000=y
 CONFIG_SND_SOC_IMX_MC13783=y
 CONFIG_USB=y
@@ -208,10 +213,15 @@ CONFIG_IMX_SDMA=y
 CONFIG_MXS_DMA=y
 CONFIG_STAGING=y
 CONFIG_DRM_IMX=y
+CONFIG_DRM_IMX_TVE=y
+CONFIG_DRM_IMX_FB_HELPER=y
+CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
 CONFIG_DRM_IMX_IPUV3_CORE=y
 CONFIG_DRM_IMX_IPUV3=y
 CONFIG_COMMON_CLK_DEBUG=y
 # CONFIG_IOMMU_SUPPORT is not set
+CONFIG_PWM=y
+CONFIG_PWM_IMX=y
 CONFIG_EXT2_FS=y
 CONFIG_EXT2_FS_XATTR=y
 CONFIG_EXT2_FS_POSIX_ACL=y
diff --git a/arch/arm/configs/keystone_defconfig b/arch/arm/configs/keystone_defconfig
new file mode 100644 (file)
index 0000000..62e968c
--- /dev/null
@@ -0,0 +1,157 @@
+# CONFIG_SWAP is not set
+CONFIG_POSIX_MQUEUE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS_ALL=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_EMBEDDED=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+CONFIG_KPROBES=y
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_ARCH_KEYSTONE=y
+CONFIG_ARM_LPAE=y
+CONFIG_SMP=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+CONFIG_HIGHMEM=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+# CONFIG_SUSPEND is not set
+CONFIG_PM_RUNTIME=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_UNIX_DIAG=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_SUB_POLICY=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPGRE=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_INET_AH=y
+CONFIG_INET_IPCOMP=y
+CONFIG_IPV6=y
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_PIMSM_V2=y
+CONFIG_NETFILTER=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_CPU=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NF_CONNTRACK_IPV4=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_AH=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_ULOG=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_CLUSTERIP=y
+CONFIG_IP_NF_TARGET_ECN=y
+CONFIG_IP_NF_TARGET_TTL=y
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP_SCTP=y
+CONFIG_VLAN_8021Q=y
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_CMA=y
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_PLATRAM=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_UBI=y
+CONFIG_PROC_DEVICETREE=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_EEPROM_AT24=y
+CONFIG_NETDEVICES=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_HW_RANDOM is not set
+CONFIG_I2C=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+CONFIG_SPI=y
+CONFIG_SPI_SPIDEV=y
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+# CONFIG_USB_SUPPORT is not set
+CONFIG_DMADEVICES=y
+CONFIG_COMMON_CLK_DEBUG=y
+CONFIG_MEMORY=y
+CONFIG_TMPFS=y
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_WBUF_VERIFY=y
+CONFIG_UBIFS_FS=y
+CONFIG_CRAMFS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_ROOT_NFS=y
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_SHIRQ=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_USER=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_NULL=y
+CONFIG_CRYPTO_AUTHENC=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_USER_API_HASH=y
+CONFIG_CRYPTO_USER_API_SKCIPHER=y
index a1d8252e9ec75339454611c5b1d8f0073b674544..0f2aa61911a33361c5cad2210135a791f80d4259 100644 (file)
@@ -1,4 +1,3 @@
-CONFIG_EXPERIMENTAL=y
 CONFIG_SYSVIPC=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
@@ -31,6 +30,7 @@ CONFIG_MACH_T5325=y
 CONFIG_MACH_TS219=y
 CONFIG_MACH_TS41X=y
 CONFIG_MACH_CLOUDBOX_DT=y
+CONFIG_MACH_DB88F628X_BP_DT=y
 CONFIG_MACH_DLINK_KIRKWOOD_DT=y
 CONFIG_MACH_DOCKSTAR_DT=y
 CONFIG_MACH_DREAMPLUG_DT=y
@@ -50,14 +50,19 @@ CONFIG_MACH_NETSPACE_V2_DT=y
 CONFIG_MACH_NSA310_DT=y
 CONFIG_MACH_OPENBLOCKS_A6_DT=y
 CONFIG_MACH_READYNAS_DT=y
+CONFIG_MACH_SHEEVAPLUG_DT=y
 CONFIG_MACH_TOPKICK_DT=y
 CONFIG_MACH_TS219_DT=y
 # CONFIG_CPU_FEROCEON_OLD_ID is not set
+CONFIG_PCI_MVEBU=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
 # CONFIG_OABI_COMPAT is not set
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 CONFIG_CPU_IDLE=y
 CONFIG_NET=y
 CONFIG_PACKET=y
@@ -68,14 +73,12 @@ CONFIG_IP_PNP=y
 CONFIG_IP_PNP_DHCP=y
 CONFIG_IP_PNP_BOOTP=y
 # CONFIG_IPV6 is not set
-CONFIG_NET_DSA=y
 CONFIG_NET_PKTGEN=m
 CONFIG_CFG80211=y
 CONFIG_MAC80211=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_MTD=y
 CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_CHAR=y
 CONFIG_MTD_BLOCK=y
 CONFIG_MTD_CFI=y
 CONFIG_MTD_JEDECPROBE=y
@@ -140,6 +143,7 @@ CONFIG_HID_TOPSEED=y
 CONFIG_HID_THRUSTMASTER=y
 CONFIG_HID_ZEROPLUS=y
 CONFIG_USB=y
+CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_PRINTER=m
index 2e67a272df70b2a98cc13ebcad3176e63e7adb50..4aa640106611606a81a18b0909e2aa51547df273 100644 (file)
@@ -31,10 +31,12 @@ CONFIG_SATA_HIGHBANK=y
 CONFIG_SATA_MV=y
 CONFIG_SATA_AHCI_PLATFORM=y
 CONFIG_NETDEVICES=y
+CONFIG_SUN4I_EMAC=y
 CONFIG_NET_CALXEDA_XGMAC=y
 CONFIG_SMSC911X=y
 CONFIG_STMMAC_ETH=y
 CONFIG_SERIO_AMBAKMI=y
+CONFIG_MDIO_SUN4I=y
 CONFIG_SERIAL_8250=y
 CONFIG_SERIAL_8250_CONSOLE=y
 CONFIG_SERIAL_8250_DW=y
index f3e8ae001ff15d6ee00a14260937b6008af2ee71..731814e2c189eeae25c80e27464e000aa18d8cd2 100644 (file)
@@ -13,6 +13,8 @@ CONFIG_MACH_ARMADA_370=y
 CONFIG_MACH_ARMADA_XP=y
 # CONFIG_CACHE_L2X0 is not set
 # CONFIG_SWP_EMULATE is not set
+CONFIG_PCI=y
+CONFIG_PCI_MVEBU=y
 CONFIG_SMP=y
 CONFIG_AEABI=y
 CONFIG_HIGHMEM=y
@@ -60,6 +62,8 @@ CONFIG_USB_SUPPORT=y
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_XHCI_HCD=y
 CONFIG_MMC=y
 CONFIG_MMC_MVSDIO=y
 CONFIG_NEW_LEDS=y
@@ -96,5 +100,3 @@ CONFIG_TIMER_STATS=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_LL=y
-CONFIG_EARLY_PRINTK=y
index 374000ec4e4e9a66bbf07304abd75dced85a0b66..fd81a1b99cce5a0971315fb17bfb7f1c87f67773 100644 (file)
@@ -1,7 +1,8 @@
-CONFIG_EXPERIMENTAL=y
 # CONFIG_LOCALVERSION_AUTO is not set
 # CONFIG_SWAP is not set
 CONFIG_SYSVIPC=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_EXPERT=y
 # CONFIG_AIO is not set
@@ -11,12 +12,9 @@ CONFIG_MODULE_UNLOAD=y
 # CONFIG_LBDAF is not set
 # CONFIG_BLK_DEV_BSG is not set
 # CONFIG_IOSCHED_CFQ is not set
+# CONFIG_ARCH_MULTI_V7 is not set
 CONFIG_ARCH_U300=y
-CONFIG_MACH_U300=y
-CONFIG_MACH_U300_BS335=y
 CONFIG_MACH_U300_SPIDUMMY=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
 CONFIG_ZBOOT_ROM_TEXT=0x0
@@ -44,14 +42,15 @@ CONFIG_I2C=y
 # CONFIG_HWMON is not set
 CONFIG_WATCHDOG=y
 CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
 CONFIG_FB=y
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 # CONFIG_LCD_CLASS_DEVICE is not set
 CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_HID_SUPPORT is not set
 # CONFIG_USB_SUPPORT is not set
 CONFIG_MMC=y
-CONFIG_MMC_CLKGATE=y
+CONFIG_MMC_UNSAFE_RESUME=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
 CONFIG_MMC_ARMMMCI=y
 CONFIG_RTC_CLASS=y
 # CONFIG_RTC_HCTOSYS is not set
@@ -70,4 +69,3 @@ CONFIG_DEBUG_FS=y
 CONFIG_TIMER_STATS=y
 # CONFIG_DEBUG_PREEMPT is not set
 CONFIG_DEBUG_INFO=y
-# CONFIG_CRC32 is not set
index 05ee9eebad6b3feb7da31a225f64d10b297d897b..a5fef710af3225b70a35c733335418dcbd3dc830 100644 (file)
  * assumes FIQs are enabled, and that the processor is in SVC mode.
  */
        .macro  save_and_disable_irqs, oldcpsr
+#ifdef CONFIG_CPU_V7M
+       mrs     \oldcpsr, primask
+#else
        mrs     \oldcpsr, cpsr
+#endif
        disable_irq
        .endm
 
  * guarantee that this will preserve the flags.
  */
        .macro  restore_irqs_notrace, oldcpsr
+#ifdef CONFIG_CPU_V7M
+       msr     primask, \oldcpsr
+#else
        msr     cpsr_c, \oldcpsr
+#endif
        .endm
 
        .macro restore_irqs, oldcpsr
 #endif
        .endm
 
-#ifdef CONFIG_THUMB2_KERNEL
+#if defined(CONFIG_CPU_V7M)
+       /*
+        * setmode is used to assert to be in svc mode during boot. For v7-M
+        * this is done in __v7m_setup, so setmode can be empty here.
+        */
+       .macro  setmode, mode, reg
+       .endm
+#elif defined(CONFIG_THUMB2_KERNEL)
        .macro  setmode, mode, reg
        mov     \reg, #\mode
        msr     cpsr_c, \reg
index 1f3262e99d81e6e7be2bf3864b6649d32a39b0da..cedd3721318b2f1a4251717ab383ee865e2aef7c 100644 (file)
@@ -61,6 +61,20 @@ static inline void set_cr(unsigned int val)
        isb();
 }
 
+static inline unsigned int get_auxcr(void)
+{
+       unsigned int val;
+       asm("mrc p15, 0, %0, c1, c0, 1  @ get AUXCR" : "=r" (val));
+       return val;
+}
+
+static inline void set_auxcr(unsigned int val)
+{
+       asm volatile("mcr p15, 0, %0, c1, c0, 1 @ set AUXCR"
+         : : "r" (val));
+       isb();
+}
+
 #ifndef CONFIG_SMP
 extern void adjust_cr(unsigned long mask, unsigned long set);
 #endif
index dba62cb1ad080f4a84202b68b2c53b873c68394c..d7deb62554c906d136de542c8aa278fb814d5bb5 100644 (file)
 #define CPUID_TLBTYPE  3
 #define CPUID_MPIDR    5
 
+#ifdef CONFIG_CPU_V7M
+#define CPUID_EXT_PFR0 0x40
+#define CPUID_EXT_PFR1 0x44
+#define CPUID_EXT_DFR0 0x48
+#define CPUID_EXT_AFR0 0x4c
+#define CPUID_EXT_MMFR0        0x50
+#define CPUID_EXT_MMFR1        0x54
+#define CPUID_EXT_MMFR2        0x58
+#define CPUID_EXT_MMFR3        0x5c
+#define CPUID_EXT_ISAR0        0x60
+#define CPUID_EXT_ISAR1        0x64
+#define CPUID_EXT_ISAR2        0x68
+#define CPUID_EXT_ISAR3        0x6c
+#define CPUID_EXT_ISAR4        0x70
+#define CPUID_EXT_ISAR5        0x74
+#else
 #define CPUID_EXT_PFR0 "c1, 0"
 #define CPUID_EXT_PFR1 "c1, 1"
 #define CPUID_EXT_DFR0 "c1, 2"
@@ -24,6 +40,7 @@
 #define CPUID_EXT_ISAR3        "c2, 3"
 #define CPUID_EXT_ISAR4        "c2, 4"
 #define CPUID_EXT_ISAR5        "c2, 5"
+#endif
 
 #define MPIDR_SMP_BITMASK (0x3 << 30)
 #define MPIDR_SMP_VALUE (0x2 << 30)
@@ -81,7 +98,23 @@ extern unsigned int processor_id;
                __val;                                                  \
        })
 
-#else /* ifdef CONFIG_CPU_CP15 */
+#elif defined(CONFIG_CPU_V7M)
+
+#include <asm/io.h>
+#include <asm/v7m.h>
+
+#define read_cpuid(reg)                                                        \
+       ({                                                              \
+               WARN_ON_ONCE(1);                                        \
+               0;                                                      \
+       })
+
+static inline unsigned int __attribute_const__ read_cpuid_ext(unsigned offset)
+{
+       return readl(BASEADDR_V7M_SCB + offset);
+}
+
+#else /* ifdef CONFIG_CPU_CP15 / elif defined (CONFIG_CPU_V7M) */
 
 /*
  * read_cpuid and read_cpuid_ext should only ever be called on machines that
@@ -108,7 +141,14 @@ static inline unsigned int __attribute_const__ read_cpuid_id(void)
        return read_cpuid(CPUID_ID);
 }
 
-#else /* ifdef CONFIG_CPU_CP15 */
+#elif defined(CONFIG_CPU_V7M)
+
+static inline unsigned int __attribute_const__ read_cpuid_id(void)
+{
+       return readl(BASEADDR_V7M_SCB + V7M_SCB_CPUID);
+}
+
+#else /* ifdef CONFIG_CPU_CP15 / elif defined(CONFIG_CPU_V7M) */
 
 static inline unsigned int __attribute_const__ read_cpuid_id(void)
 {
index ea289e1435e742807f48550200582de5630bf817..c81adc08b3fba5268b0acc81588203b9ef06aeae 100644 (file)
 # endif
 #endif
 
+#if defined(CONFIG_CPU_V7M)
+# ifdef _CACHE
+#  define MULTI_CACHE 1
+# else
+#  define _CACHE nop
+# endif
+#endif
+
 #if !defined(_CACHE) && !defined(MULTI_CACHE)
 #error Unknown cache maintenance model
 #endif
 
+#ifndef __ASSEMBLER__
+extern inline void nop_flush_icache_all(void) { }
+extern inline void nop_flush_kern_cache_all(void) { }
+extern inline void nop_flush_kern_cache_louis(void) { }
+extern inline void nop_flush_user_cache_all(void) { }
+extern inline void nop_flush_user_cache_range(unsigned long a,
+               unsigned long b, unsigned int c) { }
+
+extern inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { }
+extern inline int nop_coherent_user_range(unsigned long a,
+               unsigned long b) { return 0; }
+extern inline void nop_flush_kern_dcache_area(void *a, size_t s) { }
+
+extern inline void nop_dma_flush_range(const void *a, const void *b) { }
+
+extern inline void nop_dma_map_area(const void *s, size_t l, int f) { }
+extern inline void nop_dma_unmap_area(const void *s, size_t l, int f) { }
+#endif
+
 #ifndef MULTI_CACHE
 #define __cpuc_flush_icache_all                __glue(_CACHE,_flush_icache_all)
 #define __cpuc_flush_kern_all          __glue(_CACHE,_flush_kern_cache_all)
index b6e9f2c108b5d726659938961684dc3374dfe5f0..6b70f1b46a6e3198296d452b36f11dda4b6d6617 100644 (file)
 # endif
 #endif
 
+#ifdef CONFIG_CPU_ABRT_NOMMU
+# ifdef CPU_DABORT_HANDLER
+#  define MULTI_DABORT 1
+# else
+#  define CPU_DABORT_HANDLER nommu_early_abort
+# endif
+#endif
+
 #ifndef CPU_DABORT_HANDLER
 #error Unknown data abort handler type
 #endif
index 8017e94acc5e0883082212e9714e68cebf40f52b..e6168c0c18e923e4764031ef7e18f384f1f704ba 100644 (file)
 # endif
 #endif
 
+#ifdef CONFIG_CPU_V7M
+# ifdef CPU_NAME
+#  undef  MULTI_CPU
+#  define MULTI_CPU
+# else
+#  define CPU_NAME cpu_v7m
+# endif
+#endif
+
 #ifndef MULTI_CPU
 #define cpu_proc_init                  __glue(CPU_NAME,_proc_init)
 #define cpu_proc_fin                   __glue(CPU_NAME,_proc_fin)
diff --git a/arch/arm/include/asm/hardware/pci_v3.h b/arch/arm/include/asm/hardware/pci_v3.h
deleted file mode 100644 (file)
index 2811c7e..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- *  arch/arm/include/asm/hardware/pci_v3.h
- *
- *  Internal header file PCI V3 chip
- *
- *  Copyright (C) ARM Limited
- *  Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef ASM_ARM_HARDWARE_PCI_V3_H
-#define ASM_ARM_HARDWARE_PCI_V3_H
-
-/* -------------------------------------------------------------------------------
- *  V3 Local Bus to PCI Bridge definitions
- * -------------------------------------------------------------------------------
- *  Registers (these are taken from page 129 of the EPC User's Manual Rev 1.04
- *  All V3 register names are prefaced by V3_ to avoid clashing with any other
- *  PCI definitions.  Their names match the user's manual.
- * 
- *  I'm assuming that I20 is disabled.
- * 
- */
-#define V3_PCI_VENDOR                   0x00000000
-#define V3_PCI_DEVICE                   0x00000002
-#define V3_PCI_CMD                      0x00000004
-#define V3_PCI_STAT                     0x00000006
-#define V3_PCI_CC_REV                   0x00000008
-#define V3_PCI_HDR_CFG                  0x0000000C
-#define V3_PCI_IO_BASE                  0x00000010
-#define V3_PCI_BASE0                    0x00000014
-#define V3_PCI_BASE1                    0x00000018
-#define V3_PCI_SUB_VENDOR               0x0000002C
-#define V3_PCI_SUB_ID                   0x0000002E
-#define V3_PCI_ROM                      0x00000030
-#define V3_PCI_BPARAM                   0x0000003C
-#define V3_PCI_MAP0                     0x00000040
-#define V3_PCI_MAP1                     0x00000044
-#define V3_PCI_INT_STAT                 0x00000048
-#define V3_PCI_INT_CFG                  0x0000004C 
-#define V3_LB_BASE0                     0x00000054
-#define V3_LB_BASE1                     0x00000058
-#define V3_LB_MAP0                      0x0000005E
-#define V3_LB_MAP1                      0x00000062
-#define V3_LB_BASE2                     0x00000064
-#define V3_LB_MAP2                      0x00000066
-#define V3_LB_SIZE                      0x00000068
-#define V3_LB_IO_BASE                   0x0000006E
-#define V3_FIFO_CFG                     0x00000070
-#define V3_FIFO_PRIORITY                0x00000072
-#define V3_FIFO_STAT                    0x00000074
-#define V3_LB_ISTAT                     0x00000076
-#define V3_LB_IMASK                     0x00000077
-#define V3_SYSTEM                       0x00000078
-#define V3_LB_CFG                       0x0000007A
-#define V3_PCI_CFG                      0x0000007C
-#define V3_DMA_PCI_ADR0                 0x00000080
-#define V3_DMA_PCI_ADR1                 0x00000090
-#define V3_DMA_LOCAL_ADR0               0x00000084
-#define V3_DMA_LOCAL_ADR1               0x00000094
-#define V3_DMA_LENGTH0                  0x00000088
-#define V3_DMA_LENGTH1                  0x00000098
-#define V3_DMA_CSR0                     0x0000008B
-#define V3_DMA_CSR1                     0x0000009B
-#define V3_DMA_CTLB_ADR0                0x0000008C
-#define V3_DMA_CTLB_ADR1                0x0000009C
-#define V3_DMA_DELAY                    0x000000E0
-#define V3_MAIL_DATA                    0x000000C0
-#define V3_PCI_MAIL_IEWR                0x000000D0
-#define V3_PCI_MAIL_IERD                0x000000D2
-#define V3_LB_MAIL_IEWR                 0x000000D4
-#define V3_LB_MAIL_IERD                 0x000000D6
-#define V3_MAIL_WR_STAT                 0x000000D8
-#define V3_MAIL_RD_STAT                 0x000000DA
-#define V3_QBA_MAP                      0x000000DC
-
-/*  PCI COMMAND REGISTER bits
- */
-#define V3_COMMAND_M_FBB_EN             (1 << 9)
-#define V3_COMMAND_M_SERR_EN            (1 << 8)
-#define V3_COMMAND_M_PAR_EN             (1 << 6)
-#define V3_COMMAND_M_MASTER_EN          (1 << 2)
-#define V3_COMMAND_M_MEM_EN             (1 << 1)
-#define V3_COMMAND_M_IO_EN              (1 << 0)
-
-/*  SYSTEM REGISTER bits
- */
-#define V3_SYSTEM_M_RST_OUT             (1 << 15)
-#define V3_SYSTEM_M_LOCK                (1 << 14)
-
-/*  PCI_CFG bits
- */
-#define V3_PCI_CFG_M_I2O_EN            (1 << 15)
-#define V3_PCI_CFG_M_IO_REG_DIS                (1 << 14)
-#define V3_PCI_CFG_M_IO_DIS            (1 << 13)
-#define V3_PCI_CFG_M_EN3V              (1 << 12)
-#define V3_PCI_CFG_M_RETRY_EN           (1 << 10)
-#define V3_PCI_CFG_M_AD_LOW1            (1 << 9)
-#define V3_PCI_CFG_M_AD_LOW0            (1 << 8)
-
-/*  PCI_BASE register bits (PCI -> Local Bus)
- */
-#define V3_PCI_BASE_M_ADR_BASE          0xFFF00000
-#define V3_PCI_BASE_M_ADR_BASEL         0x000FFF00
-#define V3_PCI_BASE_M_PREFETCH          (1 << 3)
-#define V3_PCI_BASE_M_TYPE              (3 << 1)
-#define V3_PCI_BASE_M_IO                (1 << 0)
-
-/*  PCI MAP register bits (PCI -> Local bus)
- */
-#define V3_PCI_MAP_M_MAP_ADR            0xFFF00000
-#define V3_PCI_MAP_M_RD_POST_INH        (1 << 15)
-#define V3_PCI_MAP_M_ROM_SIZE           (3 << 10)
-#define V3_PCI_MAP_M_SWAP               (3 << 8)
-#define V3_PCI_MAP_M_ADR_SIZE           0x000000F0
-#define V3_PCI_MAP_M_REG_EN             (1 << 1)
-#define V3_PCI_MAP_M_ENABLE             (1 << 0)
-
-/*
- *  LB_BASE0,1 register bits (Local bus -> PCI)
- */
-#define V3_LB_BASE_ADR_BASE            0xfff00000
-#define V3_LB_BASE_SWAP                        (3 << 8)
-#define V3_LB_BASE_ADR_SIZE            (15 << 4)
-#define V3_LB_BASE_PREFETCH            (1 << 3)
-#define V3_LB_BASE_ENABLE              (1 << 0)
-
-#define V3_LB_BASE_ADR_SIZE_1MB                (0 << 4)
-#define V3_LB_BASE_ADR_SIZE_2MB                (1 << 4)
-#define V3_LB_BASE_ADR_SIZE_4MB                (2 << 4)
-#define V3_LB_BASE_ADR_SIZE_8MB                (3 << 4)
-#define V3_LB_BASE_ADR_SIZE_16MB       (4 << 4)
-#define V3_LB_BASE_ADR_SIZE_32MB       (5 << 4)
-#define V3_LB_BASE_ADR_SIZE_64MB       (6 << 4)
-#define V3_LB_BASE_ADR_SIZE_128MB      (7 << 4)
-#define V3_LB_BASE_ADR_SIZE_256MB      (8 << 4)
-#define V3_LB_BASE_ADR_SIZE_512MB      (9 << 4)
-#define V3_LB_BASE_ADR_SIZE_1GB                (10 << 4)
-#define V3_LB_BASE_ADR_SIZE_2GB                (11 << 4)
-
-#define v3_addr_to_lb_base(a)  ((a) & V3_LB_BASE_ADR_BASE)
-
-/*
- *  LB_MAP0,1 register bits (Local bus -> PCI)
- */
-#define V3_LB_MAP_MAP_ADR              0xfff0
-#define V3_LB_MAP_TYPE                 (7 << 1)
-#define V3_LB_MAP_AD_LOW_EN            (1 << 0)
-
-#define V3_LB_MAP_TYPE_IACK            (0 << 1)
-#define V3_LB_MAP_TYPE_IO              (1 << 1)
-#define V3_LB_MAP_TYPE_MEM             (3 << 1)
-#define V3_LB_MAP_TYPE_CONFIG          (5 << 1)
-#define V3_LB_MAP_TYPE_MEM_MULTIPLE    (6 << 1)
-
-#define v3_addr_to_lb_map(a)   (((a) >> 16) & V3_LB_MAP_MAP_ADR)
-
-/*
- *  LB_BASE2 register bits (Local bus -> PCI IO)
- */
-#define V3_LB_BASE2_ADR_BASE           0xff00
-#define V3_LB_BASE2_SWAP               (3 << 6)
-#define V3_LB_BASE2_ENABLE             (1 << 0)
-
-#define v3_addr_to_lb_base2(a) (((a) >> 16) & V3_LB_BASE2_ADR_BASE)
-
-/*
- *  LB_MAP2 register bits (Local bus -> PCI IO)
- */
-#define V3_LB_MAP2_MAP_ADR             0xff00
-
-#define v3_addr_to_lb_map2(a)  (((a) >> 16) & V3_LB_MAP2_MAP_ADR)
-
-#endif
index 1e6cca55c750486b98ef85ca5a04c9af471d64ea..3b763d6652a0aee4ba7a81bc591715c2084d1b10 100644 (file)
@@ -8,6 +8,16 @@
 /*
  * CPU interrupt mask handling.
  */
+#ifdef CONFIG_CPU_V7M
+#define IRQMASK_REG_NAME_R "primask"
+#define IRQMASK_REG_NAME_W "primask"
+#define IRQMASK_I_BIT  1
+#else
+#define IRQMASK_REG_NAME_R "cpsr"
+#define IRQMASK_REG_NAME_W "cpsr_c"
+#define IRQMASK_I_BIT  PSR_I_BIT
+#endif
+
 #if __LINUX_ARM_ARCH__ >= 6
 
 static inline unsigned long arch_local_irq_save(void)
@@ -15,7 +25,7 @@ static inline unsigned long arch_local_irq_save(void)
        unsigned long flags;
 
        asm volatile(
-               "       mrs     %0, cpsr        @ arch_local_irq_save\n"
+               "       mrs     %0, " IRQMASK_REG_NAME_R "      @ arch_local_irq_save\n"
                "       cpsid   i"
                : "=r" (flags) : : "memory", "cc");
        return flags;
@@ -129,7 +139,7 @@ static inline unsigned long arch_local_save_flags(void)
 {
        unsigned long flags;
        asm volatile(
-               "       mrs     %0, cpsr        @ local_save_flags"
+               "       mrs     %0, " IRQMASK_REG_NAME_R "      @ local_save_flags"
                : "=r" (flags) : : "memory", "cc");
        return flags;
 }
@@ -140,7 +150,7 @@ static inline unsigned long arch_local_save_flags(void)
 static inline void arch_local_irq_restore(unsigned long flags)
 {
        asm volatile(
-               "       msr     cpsr_c, %0      @ local_irq_restore"
+               "       msr     " IRQMASK_REG_NAME_W ", %0      @ local_irq_restore"
                :
                : "r" (flags)
                : "memory", "cc");
@@ -148,8 +158,8 @@ static inline void arch_local_irq_restore(unsigned long flags)
 
 static inline int arch_irqs_disabled_flags(unsigned long flags)
 {
-       return flags & PSR_I_BIT;
+       return flags & IRQMASK_I_BIT;
 }
 
-#endif
-#endif
+#endif /* ifdef __KERNEL__ */
+#endif /* ifndef __ASM_ARM_IRQFLAGS_H */
index 308ad7d6f98b77098dd3c831b8831f9731f49211..75bf07910b8189314d276d5e7ee7ad5c1fe5c782 100644 (file)
@@ -8,6 +8,8 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/types.h>
+
 #ifndef __ASSEMBLY__
 
 struct tag;
@@ -16,8 +18,10 @@ struct pt_regs;
 struct smp_operations;
 #ifdef CONFIG_SMP
 #define smp_ops(ops) (&(ops))
+#define smp_init_ops(ops) (&(ops))
 #else
 #define smp_ops(ops) (struct smp_operations *)NULL
+#define smp_init_ops(ops) (bool (*)(void))NULL
 #endif
 
 struct machine_desc {
@@ -41,6 +45,7 @@ struct machine_desc {
        unsigned char           reserve_lp2 :1; /* never has lp2        */
        char                    restart_mode;   /* default restart mode */
        struct smp_operations   *smp;           /* SMP operations       */
+       bool                    (*smp_init)(void);
        void                    (*fixup)(struct tag *, char **,
                                         struct meminfo *);
        void                    (*reserve)(void);/* reserve mem blocks  */
index 7d2c3c8438014a40158e62347915a097d7174cce..a1c90d7feb0e904cde2c17c527da7158ac0a3585 100644 (file)
@@ -16,6 +16,7 @@
 struct pci_sys_data;
 struct pci_ops;
 struct pci_bus;
+struct device;
 
 struct hw_pci {
 #ifdef CONFIG_PCI_DOMAINS
@@ -68,7 +69,16 @@ struct pci_sys_data {
 /*
  * Call this with your hw_pci struct to initialise the PCI system.
  */
-void pci_common_init(struct hw_pci *);
+void pci_common_init_dev(struct device *, struct hw_pci *);
+
+/*
+ * Compatibility wrapper for older platforms that do not care about
+ * passing the parent device.
+ */
+static inline void pci_common_init(struct hw_pci *hw)
+{
+       pci_common_init_dev(NULL, hw);
+}
 
 /*
  * Setup early fixed I/O mapping.
@@ -96,9 +106,4 @@ extern struct pci_ops via82c505_ops;
 extern int via82c505_setup(int nr, struct pci_sys_data *);
 extern void via82c505_init(void *sysdata);
 
-extern struct pci_ops pci_v3_ops;
-extern int pci_v3_setup(int nr, struct pci_sys_data *);
-extern void pci_v3_preinit(void);
-extern void pci_v3_postinit(void);
-
 #endif /* __ASM_MACH_PCI_H */
index ce0dbe7c1625d296b165794ab75165a7452ecbfe..c4ae171850f8326bef2c3b991693771ae2f13d69 100644 (file)
@@ -32,5 +32,14 @@ struct psci_operations {
 };
 
 extern struct psci_operations psci_ops;
+extern struct smp_operations psci_smp_ops;
+
+#ifdef CONFIG_ARM_PSCI
+void psci_init(void);
+bool psci_smp_available(void);
+#else
+static inline void psci_init(void) { }
+static inline bool psci_smp_available(void) { return false; }
+#endif
 
 #endif /* __ASM_ARM_PSCI_H */
index 3d52ee1bfb3113e113f231807dba71bc739ceac0..04c99f36ff7f902208c475066e28cbf67077f606 100644 (file)
@@ -45,6 +45,7 @@ struct pt_regs {
  */
 static inline int valid_user_regs(struct pt_regs *regs)
 {
+#ifndef CONFIG_CPU_V7M
        unsigned long mode = regs->ARM_cpsr & MODE_MASK;
 
        /*
@@ -67,6 +68,9 @@ static inline int valid_user_regs(struct pt_regs *regs)
                regs->ARM_cpsr |= USR_MODE;
 
        return 0;
+#else /* ifndef CONFIG_CPU_V7M */
+       return 1;
+#endif
 }
 
 static inline long regs_return_value(struct pt_regs *regs)
index dfd386d0c022189ad0b9574c21db22039122d405..720ea0320a6d58a28189911ed714a4e3262569e2 100644 (file)
@@ -11,6 +11,7 @@
 #define CPU_ARCH_ARMv5TEJ      7
 #define CPU_ARCH_ARMv6         8
 #define CPU_ARCH_ARMv7         9
+#define CPU_ARCH_ARMv7M                10
 
 #ifndef __ASSEMBLY__
 
diff --git a/arch/arm/include/asm/v7m.h b/arch/arm/include/asm/v7m.h
new file mode 100644 (file)
index 0000000..fa88d09
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Common defines for v7m cpus
+ */
+#define V7M_SCS_ICTR                   IOMEM(0xe000e004)
+#define V7M_SCS_ICTR_INTLINESNUM_MASK          0x0000000f
+
+#define BASEADDR_V7M_SCB               IOMEM(0xe000ed00)
+
+#define V7M_SCB_CPUID                  0x00
+
+#define V7M_SCB_ICSR                   0x04
+#define V7M_SCB_ICSR_PENDSVSET                 (1 << 28)
+#define V7M_SCB_ICSR_PENDSVCLR                 (1 << 27)
+#define V7M_SCB_ICSR_RETTOBASE                 (1 << 11)
+
+#define V7M_SCB_VTOR                   0x08
+
+#define V7M_SCB_SCR                    0x10
+#define V7M_SCB_SCR_SLEEPDEEP                  (1 << 2)
+
+#define V7M_SCB_CCR                    0x14
+#define V7M_SCB_CCR_STKALIGN                   (1 << 9)
+
+#define V7M_SCB_SHPR2                  0x1c
+#define V7M_SCB_SHPR3                  0x20
+
+#define V7M_SCB_SHCSR                  0x24
+#define V7M_SCB_SHCSR_USGFAULTENA              (1 << 18)
+#define V7M_SCB_SHCSR_BUSFAULTENA              (1 << 17)
+#define V7M_SCB_SHCSR_MEMFAULTENA              (1 << 16)
+
+#define V7M_xPSR_FRAMEPTRALIGN                 0x00000200
+#define V7M_xPSR_EXCEPTIONNO                   0x000001ff
+
+/*
+ * When branching to an address that has bits [31:28] == 0xf an exception return
+ * occurs. Bits [27:5] are reserved (SBOP). If the processor implements the FP
+ * extension Bit [4] defines if the exception frame has space allocated for FP
+ * state information, SBOP otherwise. Bit [3] defines the mode that is returned
+ * to (0 -> handler mode; 1 -> thread mode). Bit [2] defines which sp is used
+ * (0 -> msp; 1 -> psp). Bits [1:0] are fixed to 0b01.
+ */
+#define EXC_RET_STACK_MASK                     0x00000004
+#define EXC_RET_THREADMODE_PROCESSSTACK                0xfffffffd
index 91d38e38a0b4a0d1fcbb2eae7c4cb064abf68293..29da84e183f4a7939ff9e9bb69c96f1b93f68538 100644 (file)
 #define IMX6Q_UART_BASE_ADDR(n)        IMX6Q_UART##n##_BASE_ADDR
 #define IMX6Q_UART_BASE(n)     IMX6Q_UART_BASE_ADDR(n)
 
+#define IMX6SL_UART1_BASE_ADDR 0x02020000
+#define IMX6SL_UART2_BASE_ADDR 0x02024000
+#define IMX6SL_UART3_BASE_ADDR 0x02034000
+#define IMX6SL_UART4_BASE_ADDR 0x02038000
+#define IMX6SL_UART5_BASE_ADDR 0x02018000
+#define IMX6SL_UART_BASE_ADDR(n) IMX6SL_UART##n##_BASE_ADDR
+#define IMX6SL_UART_BASE(n)    IMX6SL_UART_BASE_ADDR(n)
+
 #define IMX_DEBUG_UART_BASE(soc) soc##_UART_BASE(CONFIG_DEBUG_IMX_UART_PORT)
 
 #ifdef CONFIG_DEBUG_IMX1_UART
@@ -83,6 +91,8 @@
 #define UART_PADDR     IMX_DEBUG_UART_BASE(IMX53)
 #elif defined(CONFIG_DEBUG_IMX6Q_UART)
 #define UART_PADDR     IMX_DEBUG_UART_BASE(IMX6Q)
+#elif defined(CONFIG_DEBUG_IMX6SL_UART)
+#define UART_PADDR     IMX_DEBUG_UART_BASE(IMX6SL)
 #endif
 
 #endif /* __DEBUG_IMX_UART_H */
diff --git a/arch/arm/include/debug/keystone.S b/arch/arm/include/debug/keystone.S
new file mode 100644 (file)
index 0000000..9aef9ba
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Early serial debug output macro for Keystone SOCs
+ *
+ * Copyright 2013 Texas Instruments, Inc.
+ *     Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *
+ * Based on RMKs low level debug code.
+ *  Copyright (C) 1994-1999 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/serial_reg.h>
+
+#define UART_SHIFT 2
+#if defined(CONFIG_DEBUG_KEYSTONE_UART0)
+#define UART_PHYS              0x02530c00
+#define UART_VIRT              0xfeb30c00
+#elif defined(CONFIG_DEBUG_KEYSTONE_UART1)
+#define UART_PHYS              0x02531000
+#define UART_VIRT              0xfeb31000
+#endif
+
+       .macro  addruart, rp, rv, tmp
+       ldr     \rv, =UART_VIRT                 @ physical base address
+       ldr     \rp, =UART_PHYS                 @ virtual base address
+       .endm
+
+       .macro  senduart,rd,rx
+       str     \rd, [\rx, #UART_TX << UART_SHIFT]
+       .endm
+
+       .macro  busyuart,rd,rx
+1002:  ldr     \rd, [\rx, #UART_LSR << UART_SHIFT]
+       and     \rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE
+       teq     \rd, #UART_LSR_TEMT | UART_LSR_THRE
+       bne     1002b
+       .endm
+
+       .macro  waituart,rd,rx
+       .endm
index df191afa3be14b1338481e05ae00cf35ddbb0cd5..6517311a1c915bfbb92c7e0b293e2adffa15b973 100644 (file)
  * published by the Free Software Foundation.
 */
 
+#ifdef CONFIG_DEBUG_MVEBU_UART_ALTERNATE
+#define ARMADA_370_XP_REGS_PHYS_BASE   0xf1000000
+#else
 #define ARMADA_370_XP_REGS_PHYS_BASE   0xd0000000
+#endif
+
 #define ARMADA_370_XP_REGS_VIRT_BASE   0xfec00000
 
        .macro  addruart, rp, rv, tmp
diff --git a/arch/arm/include/debug/rockchip.S b/arch/arm/include/debug/rockchip.S
new file mode 100644 (file)
index 0000000..cfd883e
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Early serial output macro for Rockchip SoCs
+ *
+ * Copyright (C) 2012 Maxime Ripard
+ *
+ * Maxime Ripard <maxime.ripard@free-electrons.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#if defined(CONFIG_DEBUG_RK29_UART0)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20060000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed60000
+#elif defined(CONFIG_DEBUG_RK29_UART1)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20064000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed64000
+#elif defined(CONFIG_DEBUG_RK29_UART2)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20068000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed68000
+#elif defined(CONFIG_DEBUG_RK3X_UART0)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x10124000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfeb24000
+#elif defined(CONFIG_DEBUG_RK3X_UART1)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x10126000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfeb26000
+#elif defined(CONFIG_DEBUG_RK3X_UART2)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20064000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed64000
+#elif defined(CONFIG_DEBUG_RK3X_UART3)
+#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20068000
+#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed68000
+#endif
+
+       .macro  addruart, rp, rv, tmp
+       ldr     \rp, =ROCKCHIP_UART_DEBUG_PHYS_BASE
+       ldr     \rv, =ROCKCHIP_UART_DEBUG_VIRT_BASE
+       .endm
+
+#define UART_SHIFT     2
+#include <asm/hardware/debug-8250.S>
diff --git a/arch/arm/include/debug/u300.S b/arch/arm/include/debug/u300.S
new file mode 100644 (file)
index 0000000..6f04f08
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2006-2013 ST-Ericsson AB
+ * License terms: GNU General Public License (GPL) version 2
+ * Debugging macro include header.
+ * Author: Linus Walleij <linus.walleij@stericsson.com>
+ */
+#define U300_SLOW_PER_PHYS_BASE                0xc0010000
+#define U300_SLOW_PER_VIRT_BASE                0xff000000
+
+       .macro  addruart, rp, rv, tmp
+       /* If we move the address using MMU, use this. */
+       ldr     \rp,      = U300_SLOW_PER_PHYS_BASE @ MMU off, physical address
+       ldr     \rv,      = U300_SLOW_PER_VIRT_BASE @ MMU on, virtual address
+       orr     \rp, \rp, #0x00003000
+       orr     \rv, \rv, #0x00003000
+       .endm
+
+#include <asm/hardware/debug-pl01x.S>
index 96ee0929790f5d5ad2156f2262c9efb809f7cc3e..5af0ed1b825a2aa95dc0626c9e1a685924979e24 100644 (file)
 
 /*
  * PSR bits
+ * Note on V7M there is no mode contained in the PSR
  */
 #define USR26_MODE     0x00000000
 #define FIQ26_MODE     0x00000001
 #define IRQ26_MODE     0x00000002
 #define SVC26_MODE     0x00000003
+#if defined(__KERNEL__) && defined(CONFIG_CPU_V7M)
+/*
+ * Use 0 here to get code right that creates a userspace
+ * or kernel space thread.
+ */
+#define USR_MODE       0x00000000
+#define SVC_MODE       0x00000000
+#else
 #define USR_MODE       0x00000010
+#define SVC_MODE       0x00000013
+#endif
 #define FIQ_MODE       0x00000011
 #define IRQ_MODE       0x00000012
-#define SVC_MODE       0x00000013
 #define ABT_MODE       0x00000017
 #define HYP_MODE       0x0000001a
 #define UND_MODE       0x0000001b
 #define SYSTEM_MODE    0x0000001f
 #define MODE32_BIT     0x00000010
 #define MODE_MASK      0x0000001f
-#define PSR_T_BIT      0x00000020
-#define PSR_F_BIT      0x00000040
-#define PSR_I_BIT      0x00000080
-#define PSR_A_BIT      0x00000100
-#define PSR_E_BIT      0x00000200
-#define PSR_J_BIT      0x01000000
-#define PSR_Q_BIT      0x08000000
+
+#define V4_PSR_T_BIT   0x00000020      /* >= V4T, but not V7M */
+#define V7M_PSR_T_BIT  0x01000000
+#if defined(__KERNEL__) && defined(CONFIG_CPU_V7M)
+#define PSR_T_BIT      V7M_PSR_T_BIT
+#else
+/* for compatibility */
+#define PSR_T_BIT      V4_PSR_T_BIT
+#endif
+
+#define PSR_F_BIT      0x00000040      /* >= V4, but not V7M */
+#define PSR_I_BIT      0x00000080      /* >= V4, but not V7M */
+#define PSR_A_BIT      0x00000100      /* >= V6, but not V7M */
+#define PSR_E_BIT      0x00000200      /* >= V6, but not V7M */
+#define PSR_J_BIT      0x01000000      /* >= V5J, but not V7M */
+#define PSR_Q_BIT      0x08000000      /* >= V5E, including V7M */
 #define PSR_V_BIT      0x10000000
 #define PSR_C_BIT      0x20000000
 #define PSR_Z_BIT      0x40000000
index 5f3338eacad21024a75d7b1e7480f3fc58e804b8..f4285b5ffb05aba08a3e3b87cdae8c0c5e476b26 100644 (file)
@@ -15,7 +15,7 @@ CFLAGS_REMOVE_return_address.o = -pg
 
 # Object file lists.
 
-obj-y          := elf.o entry-armv.o entry-common.o irq.o opcodes.o \
+obj-y          := elf.o entry-common.o irq.o opcodes.o \
                   process.o ptrace.o return_address.o sched_clock.o \
                   setup.o signal.o stacktrace.o sys_arm.o time.o traps.o
 
@@ -23,6 +23,12 @@ obj-$(CONFIG_ATAGS)          += atags_parse.o
 obj-$(CONFIG_ATAGS_PROC)       += atags_proc.o
 obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o
 
+ifeq ($(CONFIG_CPU_V7M),y)
+obj-y          += entry-v7m.o
+else
+obj-y          += entry-armv.o
+endif
+
 obj-$(CONFIG_OC_ETM)           += etm.o
 obj-$(CONFIG_CPU_IDLE)         += cpuidle.o
 obj-$(CONFIG_ISA_DMA_API)      += dma.o
@@ -82,6 +88,9 @@ obj-$(CONFIG_DEBUG_LL)        += debug.o
 obj-$(CONFIG_EARLY_PRINTK)     += early_printk.o
 
 obj-$(CONFIG_ARM_VIRT_EXT)     += hyp-stub.o
-obj-$(CONFIG_ARM_PSCI)         += psci.o
+ifeq ($(CONFIG_ARM_PSCI),y)
+obj-y                          += psci.o
+obj-$(CONFIG_SMP)              += psci_smp.o
+endif
 
 extra-y := $(head-y) vmlinux.lds
index b2ed73c454892ba8c7a7c06d66ef93881b6c2126..261fcc8261698391937343d0f24ae4b72a93c0e7 100644 (file)
@@ -445,7 +445,8 @@ static int pcibios_init_resources(int busnr, struct pci_sys_data *sys)
        return 0;
 }
 
-static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
+static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
+                           struct list_head *head)
 {
        struct pci_sys_data *sys = NULL;
        int ret;
@@ -480,7 +481,7 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
                        if (hw->scan)
                                sys->bus = hw->scan(nr, sys);
                        else
-                               sys->bus = pci_scan_root_bus(NULL, sys->busnr,
+                               sys->bus = pci_scan_root_bus(parent, sys->busnr,
                                                hw->ops, sys, &sys->resources);
 
                        if (!sys->bus)
@@ -497,7 +498,7 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
        }
 }
 
-void pci_common_init(struct hw_pci *hw)
+void pci_common_init_dev(struct device *parent, struct hw_pci *hw)
 {
        struct pci_sys_data *sys;
        LIST_HEAD(head);
@@ -505,7 +506,7 @@ void pci_common_init(struct hw_pci *hw)
        pci_add_flags(PCI_REASSIGN_ALL_RSRC);
        if (hw->preinit)
                hw->preinit();
-       pcibios_init_hw(hw, &head);
+       pcibios_init_hw(parent, hw, &head);
        if (hw->postinit)
                hw->postinit();
 
index bc5bc0a971319674c552b578367a19a5a464d798..85a72b0809ca11c445352c4f49b54a5b0638ba48 100644 (file)
@@ -350,6 +350,9 @@ ENDPROC(ftrace_stub)
 
        .align  5
 ENTRY(vector_swi)
+#ifdef CONFIG_CPU_V7M
+       v7m_exception_entry
+#else
        sub     sp, sp, #S_FRAME_SIZE
        stmia   sp, {r0 - r12}                  @ Calling r0 - r12
  ARM(  add     r8, sp, #S_PC           )
@@ -360,6 +363,7 @@ ENTRY(vector_swi)
        str     lr, [sp, #S_PC]                 @ Save calling PC
        str     r8, [sp, #S_PSR]                @ Save CPSR
        str     r0, [sp, #S_OLD_R0]             @ Save OLD_R0
+#endif
        zero_fp
 
        /*
index 160f3376ba6da8f1a697ef62cb9180795a0576e6..de23a9beed1333d86d1143a7b31613ff7376440d 100644 (file)
@@ -5,6 +5,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/errno.h>
 #include <asm/thread_info.h>
+#include <asm/v7m.h>
 
 @ Bad Abort numbers
 @ -----------------
 #endif
        .endm
 
+#ifdef CONFIG_CPU_V7M
+/*
+ * ARMv7-M exception entry/exit macros.
+ *
+ * xPSR, ReturnAddress(), LR (R14), R12, R3, R2, R1, and R0 are
+ * automatically saved on the current stack (32 words) before
+ * switching to the exception stack (SP_main).
+ *
+ * If exception is taken while in user mode, SP_main is
+ * empty. Otherwise, SP_main is aligned to 64 bit automatically
+ * (CCR.STKALIGN set).
+ *
+ * Linux assumes that the interrupts are disabled when entering an
+ * exception handler and it may BUG if this is not the case. Interrupts
+ * are disabled during entry and reenabled in the exit macro.
+ *
+ * v7m_exception_slow_exit is used when returning from SVC or PendSV.
+ * When returning to kernel mode, we don't return from exception.
+ */
+       .macro  v7m_exception_entry
+       @ determine the location of the registers saved by the core during
+       @ exception entry. Depending on the mode the cpu was in when the
+       @ exception happend that is either on the main or the process stack.
+       @ Bit 2 of EXC_RETURN stored in the lr register specifies which stack
+       @ was used.
+       tst     lr, #EXC_RET_STACK_MASK
+       mrsne   r12, psp
+       moveq   r12, sp
+
+       @ we cannot rely on r0-r3 and r12 matching the value saved in the
+       @ exception frame because of tail-chaining. So these have to be
+       @ reloaded.
+       ldmia   r12!, {r0-r3}
+
+       @ Linux expects to have irqs off. Do it here before taking stack space
+       cpsid   i
+
+       sub     sp, #S_FRAME_SIZE-S_IP
+       stmdb   sp!, {r0-r11}
+
+       @ load saved r12, lr, return address and xPSR.
+       @ r0-r7 are used for signals and never touched from now on. Clobbering
+       @ r8-r12 is OK.
+       mov     r9, r12
+       ldmia   r9!, {r8, r10-r12}
+
+       @ calculate the original stack pointer value.
+       @ r9 currently points to the memory location just above the auto saved
+       @ xPSR.
+       @ The cpu might automatically 8-byte align the stack. Bit 9
+       @ of the saved xPSR specifies if stack aligning took place. In this case
+       @ another 32-bit value is included in the stack.
+
+       tst     r12, V7M_xPSR_FRAMEPTRALIGN
+       addne   r9, r9, #4
+
+       @ store saved r12 using str to have a register to hold the base for stm
+       str     r8, [sp, #S_IP]
+       add     r8, sp, #S_SP
+       @ store r13-r15, xPSR
+       stmia   r8!, {r9-r12}
+       @ store old_r0
+       str     r0, [r8]
+       .endm
+
+        /*
+        * PENDSV and SVCALL are configured to have the same exception
+        * priorities. As a kernel thread runs at SVCALL execution priority it
+        * can never be preempted and so we will never have to return to a
+        * kernel thread here.
+         */
+       .macro  v7m_exception_slow_exit ret_r0
+       cpsid   i
+       ldr     lr, =EXC_RET_THREADMODE_PROCESSSTACK
+
+       @ read original r12, sp, lr, pc and xPSR
+       add     r12, sp, #S_IP
+       ldmia   r12, {r1-r5}
+
+       @ an exception frame is always 8-byte aligned. To tell the hardware if
+       @ the sp to be restored is aligned or not set bit 9 of the saved xPSR
+       @ accordingly.
+       tst     r2, #4
+       subne   r2, r2, #4
+       orrne   r5, V7M_xPSR_FRAMEPTRALIGN
+       biceq   r5, V7M_xPSR_FRAMEPTRALIGN
+
+       @ write basic exception frame
+       stmdb   r2!, {r1, r3-r5}
+       ldmia   sp, {r1, r3-r5}
+       .if     \ret_r0
+       stmdb   r2!, {r0, r3-r5}
+       .else
+       stmdb   r2!, {r1, r3-r5}
+       .endif
+
+       @ restore process sp
+       msr     psp, r2
+
+       @ restore original r4-r11
+       ldmia   sp!, {r0-r11}
+
+       @ restore main sp
+       add     sp, sp, #S_FRAME_SIZE-S_IP
+
+       cpsie   i
+       bx      lr
+       .endm
+#endif /* CONFIG_CPU_V7M */
+
        @
        @ Store/load the USER SP and LR registers by switching to the SYS
        @ mode. Useful in Thumb-2 mode where "stm/ldm rd, {sp, lr}^" is not
        rfeia   sp!
        .endm
 
+#ifdef CONFIG_CPU_V7M
+       /*
+        * Note we don't need to do clrex here as clearing the local monitor is
+        * part of each exception entry and exit sequence.
+        */
+       .macro  restore_user_regs, fast = 0, offset = 0
+       .if     \offset
+       add     sp, #\offset
+       .endif
+       v7m_exception_slow_exit ret_r0 = \fast
+       .endm
+#else  /* ifdef CONFIG_CPU_V7M */
        .macro  restore_user_regs, fast = 0, offset = 0
        clrex                                   @ clear the exclusive monitor
        mov     r2, sp
        add     sp, sp, #S_FRAME_SIZE - S_SP
        movs    pc, lr                          @ return & move spsr_svc into cpsr
        .endm
+#endif /* ifdef CONFIG_CPU_V7M / else */
 
        .macro  get_thread_info, rd
        mov     \rd, sp
diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
new file mode 100644 (file)
index 0000000..e00621f
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * linux/arch/arm/kernel/entry-v7m.S
+ *
+ * Copyright (C) 2008 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Low-level vector interface routines for the ARMv7-M architecture
+ */
+#include <asm/memory.h>
+#include <asm/glue.h>
+#include <asm/thread_notify.h>
+#include <asm/v7m.h>
+
+#include <mach/entry-macro.S>
+
+#include "entry-header.S"
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+#error "CONFIG_TRACE_IRQFLAGS not supported on the current ARMv7M implementation"
+#endif
+
+__invalid_entry:
+       v7m_exception_entry
+       adr     r0, strerr
+       mrs     r1, ipsr
+       mov     r2, lr
+       bl      printk
+       mov     r0, sp
+       bl      show_regs
+1:     b       1b
+ENDPROC(__invalid_entry)
+
+strerr:        .asciz  "\nUnhandled exception: IPSR = %08lx LR = %08lx\n"
+
+       .align  2
+__irq_entry:
+       v7m_exception_entry
+
+       @
+       @ Invoke the IRQ handler
+       @
+       mrs     r0, ipsr
+       ldr     r1, =V7M_xPSR_EXCEPTIONNO
+       and     r0, r1
+       sub     r0, #16
+       mov     r1, sp
+       stmdb   sp!, {lr}
+       @ routine called with r0 = irq number, r1 = struct pt_regs *
+       bl      nvic_do_IRQ
+
+       pop     {lr}
+       @
+       @ Check for any pending work if returning to user
+       @
+       ldr     r1, =BASEADDR_V7M_SCB
+       ldr     r0, [r1, V7M_SCB_ICSR]
+       tst     r0, V7M_SCB_ICSR_RETTOBASE
+       beq     2f
+
+       get_thread_info tsk
+       ldr     r2, [tsk, #TI_FLAGS]
+       tst     r2, #_TIF_WORK_MASK
+       beq     2f                      @ no work pending
+       mov     r0, #V7M_SCB_ICSR_PENDSVSET
+       str     r0, [r1, V7M_SCB_ICSR]  @ raise PendSV
+
+2:
+       @ registers r0-r3 and r12 are automatically restored on exception
+       @ return. r4-r7 were not clobbered in v7m_exception_entry so for
+       @ correctness they don't need to be restored. So only r8-r11 must be
+       @ restored here. The easiest way to do so is to restore r0-r7, too.
+       ldmia   sp!, {r0-r11}
+       add     sp, #S_FRAME_SIZE-S_IP
+       cpsie   i
+       bx      lr
+ENDPROC(__irq_entry)
+
+__pendsv_entry:
+       v7m_exception_entry
+
+       ldr     r1, =BASEADDR_V7M_SCB
+       mov     r0, #V7M_SCB_ICSR_PENDSVCLR
+       str     r0, [r1, V7M_SCB_ICSR]  @ clear PendSV
+
+       @ execute the pending work, including reschedule
+       get_thread_info tsk
+       mov     why, #0
+       b       ret_to_user
+ENDPROC(__pendsv_entry)
+
+/*
+ * Register switch for ARMv7-M processors.
+ * r0 = previous task_struct, r1 = previous thread_info, r2 = next thread_info
+ * previous and next are guaranteed not to be the same.
+ */
+ENTRY(__switch_to)
+       .fnstart
+       .cantunwind
+       add     ip, r1, #TI_CPU_SAVE
+       stmia   ip!, {r4 - r11}         @ Store most regs on stack
+       str     sp, [ip], #4
+       str     lr, [ip], #4
+       mov     r5, r0
+       add     r4, r2, #TI_CPU_SAVE
+       ldr     r0, =thread_notify_head
+       mov     r1, #THREAD_NOTIFY_SWITCH
+       bl      atomic_notifier_call_chain
+       mov     ip, r4
+       mov     r0, r5
+       ldmia   ip!, {r4 - r11}         @ Load all regs saved previously
+       ldr     sp, [ip]
+       ldr     pc, [ip, #4]!
+       .fnend
+ENDPROC(__switch_to)
+
+       .data
+       .align  8
+/*
+ * Vector table (64 words => 256 bytes natural alignment)
+ */
+ENTRY(vector_table)
+       .long   0                       @ 0 - Reset stack pointer
+       .long   __invalid_entry         @ 1 - Reset
+       .long   __invalid_entry         @ 2 - NMI
+       .long   __invalid_entry         @ 3 - HardFault
+       .long   __invalid_entry         @ 4 - MemManage
+       .long   __invalid_entry         @ 5 - BusFault
+       .long   __invalid_entry         @ 6 - UsageFault
+       .long   __invalid_entry         @ 7 - Reserved
+       .long   __invalid_entry         @ 8 - Reserved
+       .long   __invalid_entry         @ 9 - Reserved
+       .long   __invalid_entry         @ 10 - Reserved
+       .long   vector_swi              @ 11 - SVCall
+       .long   __invalid_entry         @ 12 - Debug Monitor
+       .long   __invalid_entry         @ 13 - Reserved
+       .long   __pendsv_entry          @ 14 - PendSV
+       .long   __invalid_entry         @ 15 - SysTick
+       .rept   64 - 16
+       .long   __irq_entry             @ 16..64 - External Interrupts
+       .endr
index 6a2e09c952c715862cb32907af2438e39d5b9788..8812ce88f7a1f289e64e8c787efc5a4db3df0ec9 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/cp15.h>
 #include <asm/thread_info.h>
+#include <asm/v7m.h>
 
 /*
  * Kernel startup entry point.
@@ -50,10 +51,13 @@ ENTRY(stext)
 
        setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
                                                @ and irqs disabled
-#ifndef CONFIG_CPU_CP15
-       ldr     r9, =CONFIG_PROCESSOR_ID
-#else
+#if defined(CONFIG_CPU_CP15)
        mrc     p15, 0, r9, c0, c0              @ get processor id
+#elif defined(CONFIG_CPU_V7M)
+       ldr     r9, =BASEADDR_V7M_SCB
+       ldr     r9, [r9, V7M_SCB_CPUID]
+#else
+       ldr     r9, =CONFIG_PROCESSOR_ID
 #endif
        bl      __lookup_processor_type         @ r5=procinfo r9=cpuid
        movs    r10, r5                         @ invalid processor (r5=0)?
index 36531643cc2c01e3d8e997e32e2ffaa9a8b9ce12..46931880093dc1bb2382b893743a5da4168f87a0 100644 (file)
@@ -158,7 +158,7 @@ static const struct of_device_id psci_of_match[] __initconst = {
        {},
 };
 
-static int __init psci_init(void)
+void __init psci_init(void)
 {
        struct device_node *np;
        const char *method;
@@ -166,7 +166,7 @@ static int __init psci_init(void)
 
        np = of_find_matching_node(NULL, psci_of_match);
        if (!np)
-               return 0;
+               return;
 
        pr_info("probing function IDs from device-tree\n");
 
@@ -206,6 +206,5 @@ static int __init psci_init(void)
 
 out_put_node:
        of_node_put(np);
-       return 0;
+       return;
 }
-early_initcall(psci_init);
diff --git a/arch/arm/kernel/psci_smp.c b/arch/arm/kernel/psci_smp.c
new file mode 100644 (file)
index 0000000..23a1142
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * Copyright (C) 2012 ARM Limited
+ *
+ * Author: Will Deacon <will.deacon@arm.com>
+ */
+
+#include <linux/init.h>
+#include <linux/irqchip/arm-gic.h>
+#include <linux/smp.h>
+#include <linux/of.h>
+
+#include <asm/psci.h>
+#include <asm/smp_plat.h>
+
+/*
+ * psci_smp assumes that the following is true about PSCI:
+ *
+ * cpu_suspend   Suspend the execution on a CPU
+ * @state        we don't currently describe affinity levels, so just pass 0.
+ * @entry_point  the first instruction to be executed on return
+ * returns 0  success, < 0 on failure
+ *
+ * cpu_off       Power down a CPU
+ * @state        we don't currently describe affinity levels, so just pass 0.
+ * no return on successful call
+ *
+ * cpu_on        Power up a CPU
+ * @cpuid        cpuid of target CPU, as from MPIDR
+ * @entry_point  the first instruction to be executed on return
+ * returns 0  success, < 0 on failure
+ *
+ * migrate       Migrate the context to a different CPU
+ * @cpuid        cpuid of target CPU, as from MPIDR
+ * returns 0  success, < 0 on failure
+ *
+ */
+
+extern void secondary_startup(void);
+
+static int __cpuinit psci_boot_secondary(unsigned int cpu,
+                                        struct task_struct *idle)
+{
+       if (psci_ops.cpu_on)
+               return psci_ops.cpu_on(cpu_logical_map(cpu),
+                                      __pa(secondary_startup));
+       return -ENODEV;
+}
+
+#ifdef CONFIG_HOTPLUG_CPU
+void __ref psci_cpu_die(unsigned int cpu)
+{
+       const struct psci_power_state ps = {
+               .type = PSCI_POWER_STATE_TYPE_POWER_DOWN,
+       };
+
+       if (psci_ops.cpu_off)
+               psci_ops.cpu_off(ps);
+
+       /* We should never return */
+       panic("psci: cpu %d failed to shutdown\n", cpu);
+}
+#else
+#define psci_cpu_die NULL
+#endif
+
+bool __init psci_smp_available(void)
+{
+       /* is cpu_on available at least? */
+       return (psci_ops.cpu_on != NULL);
+}
+
+struct smp_operations __initdata psci_smp_ops = {
+       .smp_boot_secondary     = psci_boot_secondary,
+       .cpu_die                = psci_cpu_die,
+};
index b4b1d397592b3d6435c0a503541c37d3fffcc016..1c8278de6c46c65e76d72962c76031d5457ea1bf 100644 (file)
@@ -37,6 +37,7 @@
 #include <asm/cputype.h>
 #include <asm/elf.h>
 #include <asm/procinfo.h>
+#include <asm/psci.h>
 #include <asm/sections.h>
 #include <asm/setup.h>
 #include <asm/smp_plat.h>
@@ -128,7 +129,9 @@ struct stack {
        u32 und[3];
 } ____cacheline_aligned;
 
+#ifndef CONFIG_CPU_V7M
 static struct stack stacks[NR_CPUS];
+#endif
 
 char elf_platform[ELF_PLATFORM_SIZE];
 EXPORT_SYMBOL(elf_platform);
@@ -207,7 +210,7 @@ static const char *proc_arch[] = {
        "5TEJ",
        "6TEJ",
        "7",
-       "?(11)",
+       "7M",
        "?(12)",
        "?(13)",
        "?(14)",
@@ -216,6 +219,12 @@ static const char *proc_arch[] = {
        "?(17)",
 };
 
+#ifdef CONFIG_CPU_V7M
+static int __get_cpu_architecture(void)
+{
+       return CPU_ARCH_ARMv7M;
+}
+#else
 static int __get_cpu_architecture(void)
 {
        int cpu_arch;
@@ -248,6 +257,7 @@ static int __get_cpu_architecture(void)
 
        return cpu_arch;
 }
+#endif
 
 int __pure cpu_architecture(void)
 {
@@ -293,7 +303,9 @@ static void __init cacheid_init(void)
 {
        unsigned int arch = cpu_architecture();
 
-       if (arch >= CPU_ARCH_ARMv6) {
+       if (arch == CPU_ARCH_ARMv7M) {
+               cacheid = 0;
+       } else if (arch >= CPU_ARCH_ARMv6) {
                unsigned int cachetype = read_cpuid_cachetype();
                if ((cachetype & (7 << 29)) == 4 << 29) {
                        /* ARMv7 register format */
@@ -392,6 +404,7 @@ static void __init feat_v6_fixup(void)
  */
 void notrace cpu_init(void)
 {
+#ifndef CONFIG_CPU_V7M
        unsigned int cpu = smp_processor_id();
        struct stack *stk = &stacks[cpu];
 
@@ -442,6 +455,7 @@ void notrace cpu_init(void)
              "I" (offsetof(struct stack, und[0])),
              PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
            : "r14");
+#endif
 }
 
 u32 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID };
@@ -796,9 +810,15 @@ void __init setup_arch(char **cmdline_p)
        unflatten_device_tree();
 
        arm_dt_init_cpu_maps();
+       psci_init();
 #ifdef CONFIG_SMP
        if (is_smp()) {
-               smp_set_ops(mdesc->smp);
+               if (!mdesc->smp_init || !mdesc->smp_init()) {
+                       if (psci_smp_available())
+                               smp_set_ops(&psci_smp_ops);
+                       else if (mdesc->smp)
+                               smp_set_ops(mdesc->smp);
+               }
                smp_init_cpus();
        }
 #endif
index 18b32e8e4497f4c1966f43ac6fbb4963315fb968..486e12a0f26a1bc2a7a7339e3a507a9708f64dc1 100644 (file)
@@ -812,6 +812,7 @@ static void __init kuser_get_tls_init(unsigned long vectors)
 
 void __init early_trap_init(void *vectors_base)
 {
+#ifndef CONFIG_CPU_V7M
        unsigned long vectors = (unsigned long)vectors_base;
        extern char __stubs_start[], __stubs_end[];
        extern char __vectors_start[], __vectors_end[];
@@ -843,4 +844,11 @@ void __init early_trap_init(void *vectors_base)
 
        flush_icache_range(vectors, vectors + PAGE_SIZE);
        modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
+#else /* ifndef CONFIG_CPU_V7M */
+       /*
+        * on V7-M there is no need to copy the vector table to a dedicated
+        * memory area. The address is configurable and so a table in the kernel
+        * image can be used.
+        */
+#endif
 }
index 2d00165e85ec9e7ef9dc3a7d9b9909bddd04326f..01ad4d41e728f3a6dac994a99706bc42aa195de2 100644 (file)
@@ -22,8 +22,7 @@ config ARCH_CLEP7312
 
 config ARCH_EDB7211
        bool "EDB7211"
-       select ARCH_SELECT_MEMORY_MODEL
-       select ARCH_SPARSEMEM_ENABLE
+       select ARCH_HAS_HOLES_MEMORYMODEL
        help
          Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211
          evaluation board.
index 992995af666a58e9b0f4af3c4127dff55476eba4..f30ed2b496fba6caf98a6c633d70af4ca43ff1ab 100644 (file)
@@ -4,10 +4,7 @@
 
 # Object file lists.
 
-obj-y                  := common.o
-obj-m                  :=
-obj-n                  :=
-obj-                   :=
+obj-y                          := common.o devices.o
 
 obj-$(CONFIG_ARCH_AUTCPU12)    += board-autcpu12.o
 obj-$(CONFIG_ARCH_CDB89712)    += board-cdb89712.o
index f38584709df7738ce629de8b3e063317909f6363..5867aebd8d0cde6bb497c9c797a7360b81781643 100644 (file)
@@ -26,6 +26,8 @@
 #include <linux/gpio.h>
 #include <linux/ioport.h>
 #include <linux/interrupt.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/plat-ram.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/nand-gpio.h>
 #include <linux/platform_device.h>
 #include <asm/page.h>
 
 #include <asm/mach/map.h>
-#include <mach/autcpu12.h>
 
 #include "common.h"
+#include "devices.h"
 
-#define AUTCPU12_CS8900_BASE   (CS2_PHYS_BASE + 0x300)
-#define AUTCPU12_CS8900_IRQ    (IRQ_EINT3)
+/* NOR flash */
+#define AUTCPU12_FLASH_BASE    (CS0_PHYS_BASE)
+
+/* Board specific hardware definitions */
+#define AUTCPU12_CHAR_LCD_BASE (CS1_PHYS_BASE + 0x00000000)
+#define AUTCPU12_CSAUX1_BASE   (CS1_PHYS_BASE + 0x04000000)
+#define AUTCPU12_CAN_BASE      (CS1_PHYS_BASE + 0x08000000)
+#define AUTCPU12_TOUCH_BASE    (CS1_PHYS_BASE + 0x0a000000)
+#define AUTCPU12_IO_BASE       (CS1_PHYS_BASE + 0x0c000000)
+#define AUTCPU12_LPT_BASE      (CS1_PHYS_BASE + 0x0e000000)
+
+/* NVRAM */
+#define AUTCPU12_NVRAM_BASE    (CS1_PHYS_BASE + 0x02000000)
 
+/* SmartMedia flash */
 #define AUTCPU12_SMC_BASE      (CS1_PHYS_BASE + 0x06000000)
 #define AUTCPU12_SMC_SEL_BASE  (AUTCPU12_SMC_BASE + 0x10)
 
+/* Ethernet */
+#define AUTCPU12_CS8900_BASE   (CS2_PHYS_BASE + 0x300)
+#define AUTCPU12_CS8900_IRQ    (IRQ_EINT3)
+
+/* NAND flash */
 #define AUTCPU12_MMGPIO_BASE   (CLPS711X_NR_GPIO)
 #define AUTCPU12_SMC_NCE       (AUTCPU12_MMGPIO_BASE + 0) /* Bit 0 */
 #define AUTCPU12_SMC_RDY       CLPS711X_GPIO(1, 2)
 #define AUTCPU12_SMC_ALE       CLPS711X_GPIO(1, 3)
 #define AUTCPU12_SMC_CLE       CLPS711X_GPIO(1, 3)
 
+/* LCD contrast digital potentiometer */
+#define AUTCPU12_DPOT_CS       CLPS711X_GPIO(4, 0)
+#define AUTCPU12_DPOT_CLK      CLPS711X_GPIO(4, 1)
+#define AUTCPU12_DPOT_UD       CLPS711X_GPIO(4, 2)
+
 static struct resource autcpu12_cs8900_resource[] __initdata = {
        DEFINE_RES_MEM(AUTCPU12_CS8900_BASE, SZ_1K),
        DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ),
 };
 
-static struct resource autcpu12_nvram_resource[] __initdata = {
-       DEFINE_RES_MEM_NAMED(AUTCPU12_PHYS_NVRAM, SZ_128K, "SRAM"),
-};
-
-static struct platform_device autcpu12_nvram_pdev __initdata = {
-       .name           = "autcpu12_nvram",
-       .id             = -1,
-       .resource       = autcpu12_nvram_resource,
-       .num_resources  = ARRAY_SIZE(autcpu12_nvram_resource),
-};
-
 static struct resource autcpu12_nand_resource[] __initdata = {
        DEFINE_RES_MEM(AUTCPU12_SMC_BASE, SZ_16),
 };
@@ -147,17 +160,106 @@ static struct platform_device autcpu12_mmgpio_pdev __initdata = {
        },
 };
 
+static const struct gpio autcpu12_gpios[] __initconst = {
+       { AUTCPU12_DPOT_CS,     GPIOF_OUT_INIT_HIGH,    "DPOT CS" },
+       { AUTCPU12_DPOT_CLK,    GPIOF_OUT_INIT_LOW,     "DPOT CLK" },
+       { AUTCPU12_DPOT_UD,     GPIOF_OUT_INIT_LOW,     "DPOT UD" },
+};
+
+static struct mtd_partition autcpu12_flash_partitions[] = {
+       {
+               .name   = "NOR.0",
+               .offset = 0,
+               .size   = MTDPART_SIZ_FULL,
+       },
+};
+
+static struct physmap_flash_data autcpu12_flash_pdata = {
+       .width          = 4,
+       .parts          = autcpu12_flash_partitions,
+       .nr_parts       = ARRAY_SIZE(autcpu12_flash_partitions),
+};
+
+static struct resource autcpu12_flash_resources[] __initdata = {
+       DEFINE_RES_MEM(AUTCPU12_FLASH_BASE, SZ_8M),
+};
+
+static struct platform_device autcpu12_flash_pdev __initdata = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .resource       = autcpu12_flash_resources,
+       .num_resources  = ARRAY_SIZE(autcpu12_flash_resources),
+       .dev            = {
+               .platform_data  = &autcpu12_flash_pdata,
+       },
+};
+
+static struct resource autcpu12_nvram_resource[] __initdata = {
+       DEFINE_RES_MEM(AUTCPU12_NVRAM_BASE, 0),
+};
+
+static struct platdata_mtd_ram autcpu12_nvram_pdata = {
+       .bankwidth      = 4,
+};
+
+static struct platform_device autcpu12_nvram_pdev __initdata = {
+       .name           = "mtd-ram",
+       .id             = 0,
+       .resource       = autcpu12_nvram_resource,
+       .num_resources  = ARRAY_SIZE(autcpu12_nvram_resource),
+       .dev            = {
+               .platform_data  = &autcpu12_nvram_pdata,
+       },
+};
+
+static void __init autcpu12_nvram_init(void)
+{
+       void __iomem *nvram;
+       unsigned int save[2];
+       resource_size_t nvram_size = SZ_128K;
+
+       /*
+        * Check for 32K/128K
+        * Read ofs 0K
+        * Read ofs 64K
+        * Write complement to ofs 64K
+        * Read and check result on ofs 0K
+        * Restore contents
+        */
+       nvram = ioremap(autcpu12_nvram_resource[0].start, SZ_128K);
+       if (nvram) {
+               save[0] = readl(nvram + 0);
+               save[1] = readl(nvram + SZ_64K);
+               writel(~save[0], nvram + SZ_64K);
+               if (readl(nvram + 0) != save[0]) {
+                       writel(save[0], nvram + 0);
+                       nvram_size = SZ_32K;
+               } else
+                       writel(save[1], nvram + SZ_64K);
+               iounmap(nvram);
+
+               autcpu12_nvram_resource[0].end =
+                       autcpu12_nvram_resource[0].start + nvram_size - 1;
+               platform_device_register(&autcpu12_nvram_pdev);
+       } else
+               pr_err("Failed to remap NVRAM resource\n");
+}
+
 static void __init autcpu12_init(void)
 {
+       clps711x_devices_init();
+       platform_device_register(&autcpu12_flash_pdev);
        platform_device_register_simple("video-clps711x", 0, NULL, 0);
        platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource,
                                        ARRAY_SIZE(autcpu12_cs8900_resource));
        platform_device_register(&autcpu12_mmgpio_pdev);
-       platform_device_register(&autcpu12_nvram_pdev);
+       autcpu12_nvram_init();
 }
 
 static void __init autcpu12_init_late(void)
 {
+       gpio_request_array(autcpu12_gpios, ARRAY_SIZE(autcpu12_gpios));
+
        if (IS_ENABLED(MTD_NAND_GPIO) && IS_ENABLED(GPIO_GENERIC_PLATFORM)) {
                /* We are need both drivers to handle NAND */
                platform_device_register(&autcpu12_nand_pdev);
@@ -169,6 +271,7 @@ MACHINE_START(AUTCPU12, "autronix autcpu12")
        .atag_offset    = 0x20000,
        .nr_irqs        = CLPS711X_NR_IRQS,
        .map_io         = clps711x_map_io,
+       .init_early     = clps711x_init_early,
        .init_irq       = clps711x_init_irq,
        .init_time      = clps711x_timer_init,
        .init_machine   = autcpu12_init,
index baab7da33c9b62b1351d43ae9be6e953c8fb7446..a9e38c6bcfb4169339b103a9a4df00e55e70f8af 100644 (file)
@@ -39,6 +39,7 @@
 #include <asm/mach/map.h>
 
 #include "common.h"
+#include "devices.h"
 
 #define CDB89712_CS8900_BASE   (CS2_PHYS_BASE + 0x300)
 #define CDB89712_CS8900_IRQ    (IRQ_EINT3)
@@ -127,6 +128,7 @@ static struct platform_device cdb89712_sram_pdev __initdata = {
 
 static void __init cdb89712_init(void)
 {
+       clps711x_devices_init();
        platform_device_register(&cdb89712_flash_pdev);
        platform_device_register(&cdb89712_bootrom_pdev);
        platform_device_register(&cdb89712_sram_pdev);
@@ -139,6 +141,7 @@ MACHINE_START(CDB89712, "Cirrus-CDB89712")
        .atag_offset    = 0x100,
        .nr_irqs        = CLPS711X_NR_IRQS,
        .map_io         = clps711x_map_io,
+       .init_early     = clps711x_init_early,
        .init_irq       = clps711x_init_irq,
        .init_time      = clps711x_timer_init,
        .init_machine   = cdb89712_init,
index 014aa3c19a033856aeb4ffa867cc0ed35512169b..b4764246d0f85deb15c4c127ed48a7faaff7aa63 100644 (file)
@@ -39,6 +39,7 @@ MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312")
        .nr_irqs        = CLPS711X_NR_IRQS,
        .fixup          = fixup_clep7312,
        .map_io         = clps711x_map_io,
+       .init_early     = clps711x_init_early,
        .init_irq       = clps711x_init_irq,
        .init_time      = clps711x_timer_init,
        .handle_irq     = clps711x_handle_irq,
index 5f928e9ed2efdfd5e665eac6f8e0224dc1c3e3a1..9dfb990f08013060f72df49f81a29831a4be4cc5 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/delay.h>
 #include <linux/memblock.h>
 #include <linux/types.h>
+#include <linux/i2c-gpio.h>
 #include <linux/interrupt.h>
 #include <linux/backlight.h>
 #include <linux/platform_device.h>
@@ -29,6 +30,7 @@
 #include <mach/hardware.h>
 
 #include "common.h"
+#include "devices.h"
 
 #define VIDEORAM_SIZE          SZ_128K
 
 #define EDB7211_LCDEN          CLPS711X_GPIO(3, 2)
 #define EDB7211_LCDBL          CLPS711X_GPIO(3, 3)
 
+#define EDB7211_I2C_SDA                CLPS711X_GPIO(3, 4)
+#define EDB7211_I2C_SCL                CLPS711X_GPIO(3, 5)
+
 #define EDB7211_FLASH0_BASE    (CS0_PHYS_BASE)
 #define EDB7211_FLASH1_BASE    (CS1_PHYS_BASE)
+
 #define EDB7211_CS8900_BASE    (CS2_PHYS_BASE + 0x300)
 #define EDB7211_CS8900_IRQ     (IRQ_EINT3)
 
+/* The extra 8 lines of the keyboard matrix */
+#define EDB7211_EXTKBD_BASE    (CS3_PHYS_BASE)
+
+static struct i2c_gpio_platform_data edb7211_i2c_pdata __initdata = {
+       .sda_pin        = EDB7211_I2C_SDA,
+       .scl_pin        = EDB7211_I2C_SCL,
+       .scl_is_output_only = 1,
+};
+
 static struct resource edb7211_cs8900_resource[] __initdata = {
        DEFINE_RES_MEM(EDB7211_CS8900_BASE, SZ_1K),
        DEFINE_RES_IRQ(EDB7211_CS8900_IRQ),
@@ -94,13 +109,14 @@ static struct plat_lcd_data edb7211_lcd_power_pdata = {
 
 static void edb7211_lcd_backlight_set_intensity(int intensity)
 {
-       gpio_set_value(EDB7211_LCDBL, intensity);
+       gpio_set_value(EDB7211_LCDBL, !!intensity);
+       clps_writel((clps_readl(PMPCON) & 0xf0ff) | (intensity << 8), PMPCON);
 }
 
 static struct generic_bl_info edb7211_lcd_backlight_pdata = {
        .name                   = "lcd-backlight.0",
        .default_intensity      = 0x01,
-       .max_intensity          = 0x01,
+       .max_intensity          = 0x0f,
        .set_bl_intensity       = edb7211_lcd_backlight_set_intensity,
 };
 
@@ -112,8 +128,8 @@ static struct gpio edb7211_gpios[] __initconst = {
 
 static struct map_desc edb7211_io_desc[] __initdata = {
        {       /* Memory-mapped extra keyboard row */
-               .virtual        = IO_ADDRESS(EP7211_PHYS_EXTKBD),
-               .pfn            = __phys_to_pfn(EP7211_PHYS_EXTKBD),
+               .virtual        = IO_ADDRESS(EDB7211_EXTKBD_BASE),
+               .pfn            = __phys_to_pfn(EDB7211_EXTKBD_BASE),
                .length         = SZ_1M,
                .type           = MT_DEVICE,
        },
@@ -150,6 +166,11 @@ fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)
 }
 
 static void __init edb7211_init(void)
+{
+       clps711x_devices_init();
+}
+
+static void __init edb7211_init_late(void)
 {
        gpio_request_array(edb7211_gpios, ARRAY_SIZE(edb7211_gpios));
 
@@ -163,6 +184,9 @@ static void __init edb7211_init(void)
        platform_device_register_simple("video-clps711x", 0, NULL, 0);
        platform_device_register_simple("cs89x0", 0, edb7211_cs8900_resource,
                                        ARRAY_SIZE(edb7211_cs8900_resource));
+       platform_device_register_data(&platform_bus, "i2c-gpio", 0,
+                                     &edb7211_i2c_pdata,
+                                     sizeof(edb7211_i2c_pdata));
 }
 
 MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
@@ -172,9 +196,11 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
        .fixup          = fixup_edb7211,
        .reserve        = edb7211_reserve,
        .map_io         = edb7211_map_io,
+       .init_early     = clps711x_init_early,
        .init_irq       = clps711x_init_irq,
        .init_time      = clps711x_timer_init,
        .init_machine   = edb7211_init,
+       .init_late      = edb7211_init_late,
        .handle_irq     = clps711x_handle_irq,
        .restart        = clps711x_restart,
 MACHINE_END
index c5675efc8c6a0d98cc9834cc20059ec57709c326..b1561e3d7c5c325e7250156396306a9c629af9a6 100644 (file)
@@ -77,6 +77,7 @@ MACHINE_START(FORTUNET, "ARM-FortuNet")
        .nr_irqs        = CLPS711X_NR_IRQS,
        .fixup          = fortunet_fixup,
        .map_io         = clps711x_map_io,
+       .init_early     = clps711x_init_early,
        .init_irq       = clps711x_init_irq,
        .init_time      = clps711x_timer_init,
        .handle_irq     = clps711x_handle_irq,
index 8d3ee67711356c6da73c701c0e52c47540f370a2..dd81b06f68fed749e38c16f743ec65fb0ef78164 100644 (file)
 #include <linux/string.h>
 #include <linux/mm.h>
 #include <linux/io.h>
+#include <linux/gpio.h>
 #include <linux/slab.h>
 #include <linux/leds.h>
 #include <linux/sizes.h>
 #include <linux/backlight.h>
+#include <linux/basic_mmio_gpio.h>
 #include <linux/platform_device.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/nand-gpio.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
-#include <mach/syspld.h>
 
 #include <video/platform_lcd.h>
 
 #include "common.h"
+#include "devices.h"
 
 #define P720T_USERLED          CLPS711X_GPIO(3, 0)
 #define P720T_NAND_CLE         CLPS711X_GPIO(4, 0)
 
 #define P720T_NAND_BASE                (CLPS711X_SDRAM1_BASE)
 
+#define P720T_MMGPIO_BASE      (CLPS711X_NR_GPIO)
+
+#define SYSPLD_PHYS_BASE       IOMEM(CS1_PHYS_BASE)
+
+#define PLD_INT                        (SYSPLD_PHYS_BASE + 0x000000)
+#define PLD_INT_MMGPIO_BASE    (P720T_MMGPIO_BASE + 0)
+#define PLD_INT_PENIRQ         (PLD_INT_MMGPIO_BASE + 5)
+#define PLD_INT_UCB_IRQ                (PLD_INT_MMGPIO_BASE + 1)
+#define PLD_INT_KBD_ATN                (PLD_INT_MMGPIO_BASE + 0) /* EINT1 */
+
+#define PLD_PWR                        (SYSPLD_PHYS_BASE + 0x000004)
+#define PLD_PWR_MMGPIO_BASE    (P720T_MMGPIO_BASE + 8)
+#define PLD_PWR_EXT            (PLD_PWR_MMGPIO_BASE + 5)
+#define PLD_PWR_MODE           (PLD_PWR_MMGPIO_BASE + 4) /* 1 = PWM, 0 = PFM */
+#define PLD_S4_ON              (PLD_PWR_MMGPIO_BASE + 3) /* LCD bias voltage enable */
+#define PLD_S3_ON              (PLD_PWR_MMGPIO_BASE + 2) /* LCD backlight enable */
+#define PLD_S2_ON              (PLD_PWR_MMGPIO_BASE + 1) /* LCD 3V3 supply enable */
+#define PLD_S1_ON              (PLD_PWR_MMGPIO_BASE + 0) /* LCD 3V supply enable */
+
+#define PLD_KBD                        (SYSPLD_PHYS_BASE + 0x000008)
+#define PLD_KBD_MMGPIO_BASE    (P720T_MMGPIO_BASE + 16)
+#define PLD_KBD_WAKE           (PLD_KBD_MMGPIO_BASE + 1)
+#define PLD_KBD_EN             (PLD_KBD_MMGPIO_BASE + 0)
+
+#define PLD_SPI                        (SYSPLD_PHYS_BASE + 0x00000c)
+#define PLD_SPI_MMGPIO_BASE    (P720T_MMGPIO_BASE + 24)
+#define PLD_SPI_EN             (PLD_SPI_MMGPIO_BASE + 0)
+
+#define PLD_IO                 (SYSPLD_PHYS_BASE + 0x000010)
+#define PLD_IO_MMGPIO_BASE     (P720T_MMGPIO_BASE + 32)
+#define PLD_IO_BOOTSEL         (PLD_IO_MMGPIO_BASE + 6) /* Boot sel switch */
+#define PLD_IO_USER            (PLD_IO_MMGPIO_BASE + 5) /* User defined switch */
+#define PLD_IO_LED3            (PLD_IO_MMGPIO_BASE + 4)
+#define PLD_IO_LED2            (PLD_IO_MMGPIO_BASE + 3)
+#define PLD_IO_LED1            (PLD_IO_MMGPIO_BASE + 2)
+#define PLD_IO_LED0            (PLD_IO_MMGPIO_BASE + 1)
+#define PLD_IO_LEDEN           (PLD_IO_MMGPIO_BASE + 0)
+
+#define PLD_IRDA               (SYSPLD_PHYS_BASE + 0x000014)
+#define PLD_IRDA_MMGPIO_BASE   (P720T_MMGPIO_BASE + 40)
+#define PLD_IRDA_EN            (PLD_IRDA_MMGPIO_BASE + 0)
+
+#define PLD_COM2               (SYSPLD_PHYS_BASE + 0x000018)
+#define PLD_COM2_MMGPIO_BASE   (P720T_MMGPIO_BASE + 48)
+#define PLD_COM2_EN            (PLD_COM2_MMGPIO_BASE + 0)
+
+#define PLD_COM1               (SYSPLD_PHYS_BASE + 0x00001c)
+#define PLD_COM1_MMGPIO_BASE   (P720T_MMGPIO_BASE + 56)
+#define PLD_COM1_EN            (PLD_COM1_MMGPIO_BASE + 0)
+
+#define PLD_AUD                        (SYSPLD_PHYS_BASE + 0x000020)
+#define PLD_AUD_MMGPIO_BASE    (P720T_MMGPIO_BASE + 64)
+#define PLD_AUD_DIV1           (PLD_AUD_MMGPIO_BASE + 6)
+#define PLD_AUD_DIV0           (PLD_AUD_MMGPIO_BASE + 5)
+#define PLD_AUD_CLK_SEL1       (PLD_AUD_MMGPIO_BASE + 4)
+#define PLD_AUD_CLK_SEL0       (PLD_AUD_MMGPIO_BASE + 3)
+#define PLD_AUD_MIC_PWR                (PLD_AUD_MMGPIO_BASE + 2)
+#define PLD_AUD_MIC_GAIN       (PLD_AUD_MMGPIO_BASE + 1)
+#define PLD_AUD_CODEC_EN       (PLD_AUD_MMGPIO_BASE + 0)
+
+#define PLD_CF                 (SYSPLD_PHYS_BASE + 0x000024)
+#define PLD_CF_MMGPIO_BASE     (P720T_MMGPIO_BASE + 72)
+#define PLD_CF2_SLEEP          (PLD_CF_MMGPIO_BASE + 5)
+#define PLD_CF1_SLEEP          (PLD_CF_MMGPIO_BASE + 4)
+#define PLD_CF2_nPDREQ         (PLD_CF_MMGPIO_BASE + 3)
+#define PLD_CF1_nPDREQ         (PLD_CF_MMGPIO_BASE + 2)
+#define PLD_CF2_nIRQ           (PLD_CF_MMGPIO_BASE + 1)
+#define PLD_CF1_nIRQ           (PLD_CF_MMGPIO_BASE + 0)
+
+#define PLD_SDC                        (SYSPLD_PHYS_BASE + 0x000028)
+#define PLD_SDC_MMGPIO_BASE    (P720T_MMGPIO_BASE + 80)
+#define PLD_SDC_INT_EN         (PLD_SDC_MMGPIO_BASE + 2)
+#define PLD_SDC_WP             (PLD_SDC_MMGPIO_BASE + 1)
+#define PLD_SDC_CD             (PLD_SDC_MMGPIO_BASE + 0)
+
+#define PLD_CODEC              (SYSPLD_PHYS_BASE + 0x400000)
+#define PLD_CODEC_MMGPIO_BASE  (P720T_MMGPIO_BASE + 88)
+#define PLD_CODEC_IRQ3         (PLD_CODEC_MMGPIO_BASE + 4)
+#define PLD_CODEC_IRQ2         (PLD_CODEC_MMGPIO_BASE + 3)
+#define PLD_CODEC_IRQ1         (PLD_CODEC_MMGPIO_BASE + 2)
+#define PLD_CODEC_EN           (PLD_CODEC_MMGPIO_BASE + 0)
+
+#define PLD_BRITE              (SYSPLD_PHYS_BASE + 0x400004)
+#define PLD_BRITE_MMGPIO_BASE  (P720T_MMGPIO_BASE + 96)
+#define PLD_BRITE_UP           (PLD_BRITE_MMGPIO_BASE + 1)
+#define PLD_BRITE_DN           (PLD_BRITE_MMGPIO_BASE + 0)
+
+#define PLD_LCDEN              (SYSPLD_PHYS_BASE + 0x400008)
+#define PLD_LCDEN_MMGPIO_BASE  (P720T_MMGPIO_BASE + 104)
+#define PLD_LCDEN_EN           (PLD_LCDEN_MMGPIO_BASE + 0)
+
+#define PLD_TCH                        (SYSPLD_PHYS_BASE + 0x400010)
+#define PLD_TCH_MMGPIO_BASE    (P720T_MMGPIO_BASE + 112)
+#define PLD_TCH_PENIRQ         (PLD_TCH_MMGPIO_BASE + 1)
+#define PLD_TCH_EN             (PLD_TCH_MMGPIO_BASE + 0)
+
+#define PLD_GPIO               (SYSPLD_PHYS_BASE + 0x400014)
+#define PLD_GPIO_MMGPIO_BASE   (P720T_MMGPIO_BASE + 120)
+#define PLD_GPIO2              (PLD_GPIO_MMGPIO_BASE + 2)
+#define PLD_GPIO1              (PLD_GPIO_MMGPIO_BASE + 1)
+#define PLD_GPIO0              (PLD_GPIO_MMGPIO_BASE + 0)
+
+static struct gpio p720t_gpios[] __initconst = {
+       { PLD_S1_ON,    GPIOF_OUT_INIT_LOW,     "PLD_S1_ON" },
+       { PLD_S2_ON,    GPIOF_OUT_INIT_LOW,     "PLD_S2_ON" },
+       { PLD_S3_ON,    GPIOF_OUT_INIT_LOW,     "PLD_S3_ON" },
+       { PLD_S4_ON,    GPIOF_OUT_INIT_LOW,     "PLD_S4_ON" },
+       { PLD_KBD_EN,   GPIOF_OUT_INIT_LOW,     "PLD_KBD_EN" },
+       { PLD_SPI_EN,   GPIOF_OUT_INIT_LOW,     "PLD_SPI_EN" },
+       { PLD_IO_USER,  GPIOF_OUT_INIT_LOW,     "PLD_IO_USER" },
+       { PLD_IO_LED0,  GPIOF_OUT_INIT_LOW,     "PLD_IO_LED0" },
+       { PLD_IO_LED1,  GPIOF_OUT_INIT_LOW,     "PLD_IO_LED1" },
+       { PLD_IO_LED2,  GPIOF_OUT_INIT_LOW,     "PLD_IO_LED2" },
+       { PLD_IO_LED3,  GPIOF_OUT_INIT_LOW,     "PLD_IO_LED3" },
+       { PLD_IO_LEDEN, GPIOF_OUT_INIT_LOW,     "PLD_IO_LEDEN" },
+       { PLD_IRDA_EN,  GPIOF_OUT_INIT_LOW,     "PLD_IRDA_EN" },
+       { PLD_COM1_EN,  GPIOF_OUT_INIT_HIGH,    "PLD_COM1_EN" },
+       { PLD_COM2_EN,  GPIOF_OUT_INIT_HIGH,    "PLD_COM2_EN" },
+       { PLD_CODEC_EN, GPIOF_OUT_INIT_LOW,     "PLD_CODEC_EN" },
+       { PLD_LCDEN_EN, GPIOF_OUT_INIT_LOW,     "PLD_LCDEN_EN" },
+       { PLD_TCH_EN,   GPIOF_OUT_INIT_LOW,     "PLD_TCH_EN" },
+       { P720T_USERLED,GPIOF_OUT_INIT_LOW,     "USER_LED" },
+};
+
+static struct resource p720t_mmgpio_resource[] __initdata = {
+       DEFINE_RES_MEM_NAMED(0, 4, "dat"),
+};
+
+static struct bgpio_pdata p720t_mmgpio_pdata = {
+       .ngpio  = 8,
+};
+
+static struct platform_device p720t_mmgpio __initdata = {
+       .name           = "basic-mmio-gpio",
+       .id             = -1,
+       .resource       = p720t_mmgpio_resource,
+       .num_resources  = ARRAY_SIZE(p720t_mmgpio_resource),
+       .dev            = {
+               .platform_data  = &p720t_mmgpio_pdata,
+       },
+};
+
+static void __init p720t_mmgpio_init(void __iomem *addrbase, int gpiobase)
+{
+       p720t_mmgpio_resource[0].start = (unsigned long)addrbase;
+       p720t_mmgpio_pdata.base = gpiobase;
+
+       platform_device_register(&p720t_mmgpio);
+}
+
+static struct {
+       void __iomem    *addrbase;
+       int             gpiobase;
+} mmgpios[] __initconst = {
+       { PLD_INT,      PLD_INT_MMGPIO_BASE },
+       { PLD_PWR,      PLD_PWR_MMGPIO_BASE },
+       { PLD_KBD,      PLD_KBD_MMGPIO_BASE },
+       { PLD_SPI,      PLD_SPI_MMGPIO_BASE },
+       { PLD_IO,       PLD_IO_MMGPIO_BASE },
+       { PLD_IRDA,     PLD_IRDA_MMGPIO_BASE },
+       { PLD_COM2,     PLD_COM2_MMGPIO_BASE },
+       { PLD_COM1,     PLD_COM1_MMGPIO_BASE },
+       { PLD_AUD,      PLD_AUD_MMGPIO_BASE },
+       { PLD_CF,       PLD_CF_MMGPIO_BASE },
+       { PLD_SDC,      PLD_SDC_MMGPIO_BASE },
+       { PLD_CODEC,    PLD_CODEC_MMGPIO_BASE },
+       { PLD_BRITE,    PLD_BRITE_MMGPIO_BASE },
+       { PLD_LCDEN,    PLD_LCDEN_MMGPIO_BASE },
+       { PLD_TCH,      PLD_TCH_MMGPIO_BASE },
+       { PLD_GPIO,     PLD_GPIO_MMGPIO_BASE },
+};
+
 static struct resource p720t_nand_resource[] __initdata = {
        DEFINE_RES_MEM(P720T_NAND_BASE, SZ_4),
 };
@@ -92,11 +266,15 @@ static struct platform_device p720t_nand_pdev __initdata = {
 static void p720t_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
 {
        if (power) {
-               PLD_LCDEN = PLD_LCDEN_EN;
-               PLD_PWR |= PLD_S4_ON | PLD_S2_ON | PLD_S1_ON;
+               gpio_set_value(PLD_LCDEN_EN, 1);
+               gpio_set_value(PLD_S1_ON, 1);
+               gpio_set_value(PLD_S2_ON, 1);
+               gpio_set_value(PLD_S4_ON, 1);
        } else {
-               PLD_PWR &= ~(PLD_S4_ON | PLD_S2_ON | PLD_S1_ON);
-               PLD_LCDEN = 0;
+               gpio_set_value(PLD_S1_ON, 0);
+               gpio_set_value(PLD_S2_ON, 0);
+               gpio_set_value(PLD_S4_ON, 0);
+               gpio_set_value(PLD_LCDEN_EN, 0);
        }
 }
 
@@ -106,10 +284,7 @@ static struct plat_lcd_data p720t_lcd_power_pdata = {
 
 static void p720t_lcd_backlight_set_intensity(int intensity)
 {
-       if (intensity)
-               PLD_PWR |= PLD_S3_ON;
-       else
-               PLD_PWR = 0;
+       gpio_set_value(PLD_S3_ON, intensity);
 }
 
 static struct generic_bl_info p720t_lcd_backlight_pdata = {
@@ -119,19 +294,6 @@ static struct generic_bl_info p720t_lcd_backlight_pdata = {
        .set_bl_intensity       = p720t_lcd_backlight_set_intensity,
 };
 
-/*
- * Map the P720T system PLD. It occupies two address spaces:
- * 0x10000000 and 0x10400000. We map both regions as one.
- */
-static struct map_desc p720t_io_desc[] __initdata = {
-       {
-               .virtual        = SYSPLD_VIRT_BASE,
-               .pfn            = __phys_to_pfn(SYSPLD_PHYS_BASE),
-               .length         = SZ_8M,
-               .type           = MT_DEVICE,
-       },
-};
-
 static void __init
 fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi)
 {
@@ -157,33 +319,6 @@ fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi)
        }
 }
 
-static void __init p720t_map_io(void)
-{
-       clps711x_map_io();
-       iotable_init(p720t_io_desc, ARRAY_SIZE(p720t_io_desc));
-}
-
-static void __init p720t_init_early(void)
-{
-       /*
-        * Power down as much as possible in case we don't
-        * have the drivers loaded.
-        */
-       PLD_LCDEN = 0;
-       PLD_PWR  &= ~(PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON);
-
-       PLD_KBD   = 0;
-       PLD_IO    = 0;
-       PLD_IRDA  = 0;
-       PLD_CODEC = 0;
-       PLD_TCH   = 0;
-       PLD_SPI   = 0;
-       if (!IS_ENABLED(CONFIG_DEBUG_LL)) {
-               PLD_COM2 = 0;
-               PLD_COM1 = 0;
-       }
-}
-
 static struct gpio_led p720t_gpio_leds[] = {
        {
                .name                   = "User LED",
@@ -199,7 +334,20 @@ static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {
 
 static void __init p720t_init(void)
 {
+       int i;
+
+       clps711x_devices_init();
+
+       for (i = 0; i < ARRAY_SIZE(mmgpios); i++)
+               p720t_mmgpio_init(mmgpios[i].addrbase, mmgpios[i].gpiobase);
+
        platform_device_register(&p720t_nand_pdev);
+}
+
+static void __init p720t_init_late(void)
+{
+       WARN_ON(gpio_request_array(p720t_gpios, ARRAY_SIZE(p720t_gpios)));
+
        platform_device_register_data(&platform_bus, "platform-lcd", 0,
                                      &p720t_lcd_power_pdata,
                                      sizeof(p720t_lcd_power_pdata));
@@ -207,10 +355,6 @@ static void __init p720t_init(void)
                                      &p720t_lcd_backlight_pdata,
                                      sizeof(p720t_lcd_backlight_pdata));
        platform_device_register_simple("video-clps711x", 0, NULL, 0);
-}
-
-static void __init p720t_init_late(void)
-{
        platform_device_register_data(&platform_bus, "leds-gpio", 0,
                                      &p720t_gpio_led_pdata,
                                      sizeof(p720t_gpio_led_pdata));
@@ -221,8 +365,8 @@ MACHINE_START(P720T, "ARM-Prospector720T")
        .atag_offset    = 0x100,
        .nr_irqs        = CLPS711X_NR_IRQS,
        .fixup          = fixup_p720t,
-       .map_io         = p720t_map_io,
-       .init_early     = p720t_init_early,
+       .map_io         = clps711x_map_io,
+       .init_early     = clps711x_init_early,
        .init_irq       = clps711x_init_irq,
        .init_time      = clps711x_timer_init,
        .init_machine   = p720t_init,
index 20ff50f3ccf04afb34361e4e84edbbbfed371601..f6d1746366d4cf3b6d55be25c505dea4f0279b7d 100644 (file)
 #include <linux/clk.h>
 #include <linux/clkdev.h>
 #include <linux/clockchips.h>
+#include <linux/clocksource.h>
 #include <linux/clk-provider.h>
 
 #include <asm/exception.h>
 #include <asm/mach/irq.h>
 #include <asm/mach/map.h>
 #include <asm/mach/time.h>
+#include <asm/sched_clock.h>
 #include <asm/system_misc.h>
 
 #include <mach/hardware.h>
@@ -213,7 +215,7 @@ void __init clps711x_init_irq(void)
        }
 }
 
-inline u32 fls16(u32 x)
+static inline u32 fls16(u32 x)
 {
        u32 r = 15;
 
@@ -237,27 +239,52 @@ inline u32 fls16(u32 x)
 
 asmlinkage void __exception_irq_entry clps711x_handle_irq(struct pt_regs *regs)
 {
-       u32 irqstat;
-       void __iomem *base = CLPS711X_VIRT_BASE;
-
-       irqstat = readl_relaxed(base + INTSR1) & readl_relaxed(base + INTMR1);
-       if (irqstat) {
-               handle_IRQ(fls16(irqstat), regs);
-               return;
-       }
+       do {
+               u32 irqstat;
+               void __iomem *base = CLPS711X_VIRT_BASE;
+
+               irqstat = readw_relaxed(base + INTSR1) &
+                         readw_relaxed(base + INTMR1);
+               if (irqstat)
+                       handle_IRQ(fls16(irqstat), regs);
+
+               irqstat = readw_relaxed(base + INTSR2) &
+                         readw_relaxed(base + INTMR2);
+               if (irqstat) {
+                       handle_IRQ(fls16(irqstat) + 16, regs);
+                       continue;
+               }
+
+               break;
+       } while (1);
+}
 
-       irqstat = readl_relaxed(base + INTSR2) & readl_relaxed(base + INTMR2);
-       if (likely(irqstat))
-               handle_IRQ(fls16(irqstat) + 16, regs);
+static u32 notrace clps711x_sched_clock_read(void)
+{
+       return ~readw_relaxed(CLPS711X_VIRT_BASE + TC1D);
 }
 
 static void clps711x_clockevent_set_mode(enum clock_event_mode mode,
                                         struct clock_event_device *evt)
 {
+       disable_irq(IRQ_TC2OI);
+
+       switch (mode) {
+       case CLOCK_EVT_MODE_PERIODIC:
+               enable_irq(IRQ_TC2OI);
+               break;
+       case CLOCK_EVT_MODE_ONESHOT:
+               /* Not supported */
+       case CLOCK_EVT_MODE_SHUTDOWN:
+       case CLOCK_EVT_MODE_UNUSED:
+       case CLOCK_EVT_MODE_RESUME:
+               /* Left event sources disabled, no more interrupts appear */
+               break;
+       }
 }
 
 static struct clock_event_device clockevent_clps711x = {
-       .name           = "CLPS711x Clockevents",
+       .name           = "clps711x-clockevent",
        .rating         = 300,
        .features       = CLOCK_EVT_FEAT_PERIODIC,
        .set_mode       = clps711x_clockevent_set_mode,
@@ -271,8 +298,8 @@ static irqreturn_t clps711x_timer_interrupt(int irq, void *dev_id)
 }
 
 static struct irqaction clps711x_timer_irq = {
-       .name           = "CLPS711x Timer Tick",
-       .flags          = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
+       .name           = "clps711x-timer",
+       .flags          = IRQF_TIMER | IRQF_IRQPOLL,
        .handler        = clps711x_timer_interrupt,
 };
 
@@ -301,6 +328,7 @@ void __init clps711x_timer_init(void)
                cpu = ext;
                bus = cpu;
                spi = 135400;
+               pll = 0;
        } else {
                cpu = pll;
                if (cpu >= 36864000)
@@ -319,9 +347,9 @@ void __init clps711x_timer_init(void)
                else
                        timh = 541440;
        } else
-               timh = cpu / 144;
+               timh = DIV_ROUND_CLOSEST(cpu, 144);
 
-       timl = timh / 256;
+       timl = DIV_ROUND_CLOSEST(timh, 256);
 
        /* All clocks are fixed */
        add_fixed_clk(clk_pll, "pll", pll);
@@ -334,13 +362,24 @@ void __init clps711x_timer_init(void)
 
        pr_info("CPU frequency set at %i Hz.\n", cpu);
 
+       /* Start Timer1 in free running mode (Low frequency) */
+       tmp = clps_readl(SYSCON1) & ~(SYSCON1_TC1S | SYSCON1_TC1M);
+       clps_writel(tmp, SYSCON1);
+
+       setup_sched_clock(clps711x_sched_clock_read, 16, timl);
+
+       clocksource_mmio_init(CLPS711X_VIRT_BASE + TC1D,
+                             "clps711x_clocksource", timl, 300, 16,
+                             clocksource_mmio_readw_down);
+
+       /* Set Timer2 prescaler */
        clps_writew(DIV_ROUND_CLOSEST(timh, HZ), TC2D);
 
-       tmp = clps_readl(SYSCON1);
-       tmp |= SYSCON1_TC2S | SYSCON1_TC2M;
+       /* Start Timer2 in prescale mode (High frequency)*/
+       tmp = clps_readl(SYSCON1) | SYSCON1_TC2M | SYSCON1_TC2S;
        clps_writel(tmp, SYSCON1);
 
-       clockevents_config_and_register(&clockevent_clps711x, timh, 1, 0xffff);
+       clockevents_config_and_register(&clockevent_clps711x, timh, 0, 0);
 
        setup_irq(IRQ_TC2OI, &clps711x_timer_irq);
 }
@@ -353,15 +392,11 @@ void clps711x_restart(char mode, const char *cmd)
 static void clps711x_idle(void)
 {
        clps_writel(1, HALT);
-       __asm__ __volatile__(
-       "mov    r0, r0\n\
-       mov     r0, r0");
+       asm("mov r0, r0");
+       asm("mov r0, r0");
 }
 
-static int __init clps711x_idle_init(void)
+void __init clps711x_init_early(void)
 {
        arm_pm_idle = clps711x_idle;
-       return 0;
 }
-
-arch_initcall(clps711x_idle_init);
index f84a7292c70e4a77dc64eeda432266c1a6b7ac4b..2a22f4c6cc757cadddce7a17f080eb83f577b6e6 100644 (file)
@@ -13,3 +13,4 @@ extern void clps711x_init_irq(void);
 extern void clps711x_timer_init(void);
 extern void clps711x_handle_irq(struct pt_regs *regs);
 extern void clps711x_restart(char mode, const char *cmd);
+extern void clps711x_init_early(void);
diff --git a/arch/arm/mach-clps711x/devices.c b/arch/arm/mach-clps711x/devices.c
new file mode 100644 (file)
index 0000000..856b81c
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ *  CLPS711X common devices definitions
+ *
+ *  Author: Alexander Shiyan <shc_work@mail.ru>, 2013
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/sizes.h>
+
+#include <mach/hardware.h>
+
+static const phys_addr_t clps711x_gpios[][2] __initconst = {
+       { PADR, PADDR },
+       { PBDR, PBDDR },
+       { PCDR, PCDDR },
+       { PDDR, PDDDR },
+       { PEDR, PEDDR },
+};
+
+static void __init clps711x_add_gpio(void)
+{
+       unsigned i;
+       struct resource gpio_res[2];
+
+       memset(gpio_res, 0, sizeof(gpio_res));
+
+       gpio_res[0].flags = IORESOURCE_MEM;
+       gpio_res[1].flags = IORESOURCE_MEM;
+
+       for (i = 0; i < ARRAY_SIZE(clps711x_gpios); i++) {
+               gpio_res[0].start = CLPS711X_PHYS_BASE + clps711x_gpios[i][0];
+               gpio_res[0].end = gpio_res[0].start;
+               gpio_res[1].start = CLPS711X_PHYS_BASE + clps711x_gpios[i][1];
+               gpio_res[1].end = gpio_res[1].start;
+
+               platform_device_register_simple("clps711x-gpio", i,
+                                               gpio_res, ARRAY_SIZE(gpio_res));
+       }
+}
+
+const struct resource clps711x_syscon_res[] __initconst = {
+       /* SYSCON1, SYSFLG1 */
+       DEFINE_RES_MEM(CLPS711X_PHYS_BASE + SYSCON1, SZ_128),
+       /* SYSCON2, SYSFLG2 */
+       DEFINE_RES_MEM(CLPS711X_PHYS_BASE + SYSCON2, SZ_128),
+       /* SYSCON3 */
+       DEFINE_RES_MEM(CLPS711X_PHYS_BASE + SYSCON3, SZ_64),
+};
+
+static void __init clps711x_add_syscon(void)
+{
+       unsigned i;
+
+       for (i = 0; i < ARRAY_SIZE(clps711x_syscon_res); i++)
+               platform_device_register_simple("clps711x-syscon", i + 1,
+                                               &clps711x_syscon_res[i], 1);
+}
+
+void __init clps711x_devices_init(void)
+{
+       clps711x_add_gpio();
+       clps711x_add_syscon();
+}
diff --git a/arch/arm/mach-clps711x/devices.h b/arch/arm/mach-clps711x/devices.h
new file mode 100644 (file)
index 0000000..a5efc17
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ *  CLPS711X common devices definitions
+ *
+ *  Copyright (C) 2013 Alexander Shiyan <shc_work@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+void clps711x_devices_init(void);
diff --git a/arch/arm/mach-clps711x/include/mach/autcpu12.h b/arch/arm/mach-clps711x/include/mach/autcpu12.h
deleted file mode 100644 (file)
index 0452f5f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * AUTCPU12 specific defines
- *
- * (c) 2001 Thomas Gleixner, autronix automation <gleixner@autronix.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef __ASM_ARCH_AUTCPU12_H
-#define __ASM_ARCH_AUTCPU12_H
-
-/*
- * The flash bank is wired to chip select 0
- */
-#define AUTCPU12_PHYS_FLASH            CS0_PHYS_BASE           /* physical */
-
-/* offset for device specific information structure */
-#define AUTCPU12_LCDINFO_OFFS          (0x00010000)    
-
-/* Videomemory in the internal SRAM (CS 6) */
-#define AUTCPU12_PHYS_VIDEO            CS6_PHYS_BASE
-
-/*
-* All special IO's are tied to CS1
-*/
-#define AUTCPU12_PHYS_CHAR_LCD                 CS1_PHYS_BASE +0x00000000  /* physical */
-
-#define AUTCPU12_PHYS_NVRAM                    CS1_PHYS_BASE +0x02000000  /* physical */
-
-#define AUTCPU12_PHYS_CSAUX1                   CS1_PHYS_BASE +0x04000000  /* physical */
-
-#define AUTCPU12_PHYS_CAN                      CS1_PHYS_BASE +0x08000000  /* physical */
-
-#define AUTCPU12_PHYS_TOUCH                    CS1_PHYS_BASE +0x0A000000  /* physical */
-
-#define AUTCPU12_PHYS_IO                       CS1_PHYS_BASE +0x0C000000  /* physical */
-
-#define AUTCPU12_PHYS_LPT                      CS1_PHYS_BASE +0x0E000000  /* physical */
-
-/*
-* defines for lcd contrast 
-*/
-#define AUTCPU12_DPOT_PORT_OFFSET      PEDR
-#define        AUTCPU12_DPOT_CS                (1<<0)
-#define AUTCPU12_DPOT_CLK              (1<<1)
-#define        AUTCPU12_DPOT_UD                (1<<2)
-
-#endif
index 01d1b95597109b8ef4b8f9e105717a7c347e3df0..0286f4bf994544da39253d05aae17594f091fb49 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef __MACH_CLPS711X_H
 #define __MACH_CLPS711X_H
 
+#include <linux/mfd/syscon/clps711x.h>
+
 #define CLPS711X_PHYS_BASE     (0x80000000)
 
 #define PADR           (0x0000)
 #define RANDID2                (0x2708)
 #define RANDID3                (0x270c)
 
-/* common bits: SYSCON1 / SYSCON2 */
-#define SYSCON_UARTEN          (1 << 8)
-
-#define SYSCON1_KBDSCAN(x)     ((x) & 15)
-#define SYSCON1_KBDSCANMASK    (15)
-#define SYSCON1_TC1M           (1 << 4)
-#define SYSCON1_TC1S           (1 << 5)
-#define SYSCON1_TC2M           (1 << 6)
-#define SYSCON1_TC2S           (1 << 7)
-#define SYSCON1_UART1EN                SYSCON_UARTEN
-#define SYSCON1_BZTOG          (1 << 9)
-#define SYSCON1_BZMOD          (1 << 10)
-#define SYSCON1_DBGEN          (1 << 11)
-#define SYSCON1_LCDEN          (1 << 12)
-#define SYSCON1_CDENTX         (1 << 13)
-#define SYSCON1_CDENRX         (1 << 14)
-#define SYSCON1_SIREN          (1 << 15)
-#define SYSCON1_ADCKSEL(x)     (((x) & 3) << 16)
-#define SYSCON1_ADCKSEL_MASK   (3 << 16)
-#define SYSCON1_EXCKEN         (1 << 18)
-#define SYSCON1_WAKEDIS                (1 << 19)
-#define SYSCON1_IRTXM          (1 << 20)
-
-/* common bits: SYSFLG1 / SYSFLG2 */
-#define SYSFLG_UBUSY           (1 << 11)
-#define SYSFLG_URXFE           (1 << 22)
-#define SYSFLG_UTXFF           (1 << 23)
-
-#define SYSFLG1_MCDR           (1 << 0)
-#define SYSFLG1_DCDET          (1 << 1)
-#define SYSFLG1_WUDR           (1 << 2)
-#define SYSFLG1_WUON           (1 << 3)
-#define SYSFLG1_CTS            (1 << 8)
-#define SYSFLG1_DSR            (1 << 9)
-#define SYSFLG1_DCD            (1 << 10)
-#define SYSFLG1_UBUSY          SYSFLG_UBUSY
-#define SYSFLG1_NBFLG          (1 << 12)
-#define SYSFLG1_RSTFLG         (1 << 13)
-#define SYSFLG1_PFFLG          (1 << 14)
-#define SYSFLG1_CLDFLG         (1 << 15)
-#define SYSFLG1_URXFE          SYSFLG_URXFE
-#define SYSFLG1_UTXFF          SYSFLG_UTXFF
-#define SYSFLG1_CRXFE          (1 << 24)
-#define SYSFLG1_CTXFF          (1 << 25)
-#define SYSFLG1_SSIBUSY                (1 << 26)
-#define SYSFLG1_ID             (1 << 29)
-#define SYSFLG1_VERID(x)       (((x) >> 30) & 3)
-#define SYSFLG1_VERID_MASK     (3 << 30)
-
-#define SYSFLG2_SSRXOF         (1 << 0)
-#define SYSFLG2_RESVAL         (1 << 1)
-#define SYSFLG2_RESFRM         (1 << 2)
-#define SYSFLG2_SS2RXFE                (1 << 3)
-#define SYSFLG2_SS2TXFF                (1 << 4)
-#define SYSFLG2_SS2TXUF                (1 << 5)
-#define SYSFLG2_CKMODE         (1 << 6)
-#define SYSFLG2_UBUSY          SYSFLG_UBUSY
-#define SYSFLG2_URXFE          SYSFLG_URXFE
-#define SYSFLG2_UTXFF          SYSFLG_UTXFF
-
 #define LCDCON_GSEN            (1 << 30)
 #define LCDCON_GSMD            (1 << 31)
 
-#define SYSCON2_SERSEL         (1 << 0)
-#define SYSCON2_KBD6           (1 << 1)
-#define SYSCON2_DRAMZ          (1 << 2)
-#define SYSCON2_KBWEN          (1 << 3)
-#define SYSCON2_SS2TXEN                (1 << 4)
-#define SYSCON2_PCCARD1                (1 << 5)
-#define SYSCON2_PCCARD2                (1 << 6)
-#define SYSCON2_SS2RXEN                (1 << 7)
-#define SYSCON2_UART2EN                SYSCON_UARTEN
-#define SYSCON2_SS2MAEN                (1 << 9)
-#define SYSCON2_OSTB           (1 << 12)
-#define SYSCON2_CLKENSL                (1 << 13)
-#define SYSCON2_BUZFREQ                (1 << 14)
-
 /* common bits: UARTDR1 / UARTDR2 */
 #define UARTDR_FRMERR          (1 << 8)
 #define UARTDR_PARERR          (1 << 9)
 #define DAI64FS_MCLK256EN      (1 << 3)
 #define DAI64FS_LOOPBACK       (1 << 5)
 
-#define SYSCON3_ADCCON         (1 << 0)
-#define SYSCON3_CLKCTL0                (1 << 1)
-#define SYSCON3_CLKCTL1                (1 << 2)
-#define SYSCON3_DAISEL         (1 << 3)
-#define SYSCON3_ADCCKNSEN      (1 << 4)
-#define SYSCON3_VERSN(x)       (((x) >> 5) & 7)
-#define SYSCON3_VERSN_MASK     (7 << 5)
-#define SYSCON3_FASTWAKE       (1 << 8)
-#define SYSCON3_DAIEN          (1 << 9)
-#define SYSCON3_128FS          SYSCON3_DAIEN
-#define SYSCON3_ENPD67         (1 << 10)
-
 #define SDCONF_ACTIVE          (1 << 10)
 #define SDCONF_CLKCTL          (1 << 9)
 #define SDCONF_WIDTH_4         (0 << 7)
index 2f23dd5d73e4f0c9b2911e3239cbf0e4d22f5d70..c5a8ea6839ef4b870cacd1766f00207f8e8fba51 100644 (file)
 #define CLPS711X_SDRAM0_BASE   (0xc0000000)
 #define CLPS711X_SDRAM1_BASE   (0xd0000000)
 
-#if defined (CONFIG_ARCH_EDB7211)
-
-/* The extra 8 lines of the keyboard matrix are wired to chip select 3 */
-#define EP7211_PHYS_EXTKBD     CS3_PHYS_BASE
-
-#endif /* CONFIG_ARCH_EDB7211 */
-
 #endif
diff --git a/arch/arm/mach-clps711x/include/mach/memory.h b/arch/arm/mach-clps711x/include/mach/memory.h
deleted file mode 100644 (file)
index fc0e028..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  arch/arm/mach-clps711x/include/mach/memory.h
- *
- *  Copyright (C) 1999 ARM Limited
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef __ASM_ARCH_MEMORY_H
-#define __ASM_ARCH_MEMORY_H
-
-/*
- * Physical DRAM offset.
- */
-#define PLAT_PHYS_OFFSET       UL(0xc0000000)
-
-/*
- * The PS7211 allows up to 256MB max per DRAM bank, but the EDB7211
- * uses only one of the two banks (bank #1).  However, even within
- * bank #1, memory is discontiguous.
- *
- * The EDB7211 has two 8MB DRAM areas with 8MB of empty space between
- * them, so we use 24 for the node max shift to get 16MB node sizes.
- */
-
-#define SECTION_SIZE_BITS      24
-#define MAX_PHYSMEM_BITS       32
-
-#endif
-
diff --git a/arch/arm/mach-clps711x/include/mach/syspld.h b/arch/arm/mach-clps711x/include/mach/syspld.h
deleted file mode 100644 (file)
index 9a43315..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  arch/arm/mach-clps711x/include/mach/syspld.h
- *
- *  System Control PLD register definitions.
- *
- *  Copyright (C) 2000 Deep Blue Solutions Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef __ASM_ARCH_SYSPLD_H
-#define __ASM_ARCH_SYSPLD_H
-
-#define SYSPLD_PHYS_BASE       (0x10000000)
-#define SYSPLD_VIRT_BASE       IO_ADDRESS(SYSPLD_PHYS_BASE)
-
-#define SYSPLD_REG(type, off)  (*(volatile type *)(SYSPLD_VIRT_BASE + (off)))
-
-#define PLD_INT                SYSPLD_REG(u32, 0x000000)
-#define PLD_INT_PENIRQ         (1 << 5)
-#define PLD_INT_UCB_IRQ                (1 << 1)
-#define PLD_INT_KBD_ATN                (1 << 0)        /* EINT1 */
-
-#define PLD_PWR                SYSPLD_REG(u32, 0x000004)
-#define PLD_PWR_EXT            (1 << 5)
-#define PLD_PWR_MODE           (1 << 4)        /* 1 = PWM, 0 = PFM */
-#define PLD_S4_ON              (1 << 3)        /* LCD bias voltage enable */
-#define PLD_S3_ON              (1 << 2)        /* LCD backlight enable */
-#define PLD_S2_ON              (1 << 1)        /* LCD 3V3 supply enable */
-#define PLD_S1_ON              (1 << 0)        /* LCD 3V supply enable */
-
-#define PLD_KBD                SYSPLD_REG(u32, 0x000008)
-#define PLD_KBD_WAKE           (1 << 1)
-#define PLD_KBD_EN             (1 << 0)
-
-#define PLD_SPI                SYSPLD_REG(u32, 0x00000c)
-#define PLD_SPI_EN             (1 << 0)
-
-#define PLD_IO         SYSPLD_REG(u32, 0x000010)
-#define PLD_IO_BOOTSEL         (1 << 6)        /* boot sel switch */
-#define PLD_IO_USER            (1 << 5)        /* user defined switch */
-#define PLD_IO_LED3            (1 << 4)
-#define PLD_IO_LED2            (1 << 3)
-#define PLD_IO_LED1            (1 << 2)
-#define PLD_IO_LED0            (1 << 1)
-#define PLD_IO_LEDEN           (1 << 0)
-
-#define PLD_IRDA       SYSPLD_REG(u32, 0x000014)
-#define PLD_IRDA_EN            (1 << 0)
-
-#define PLD_COM2       SYSPLD_REG(u32, 0x000018)
-#define PLD_COM2_EN            (1 << 0)
-
-#define PLD_COM1       SYSPLD_REG(u32, 0x00001c)
-#define PLD_COM1_EN            (1 << 0)
-
-#define PLD_AUD                SYSPLD_REG(u32, 0x000020)
-#define PLD_AUD_DIV1           (1 << 6)
-#define PLD_AUD_DIV0           (1 << 5)
-#define PLD_AUD_CLK_SEL1       (1 << 4)
-#define PLD_AUD_CLK_SEL0       (1 << 3)
-#define PLD_AUD_MIC_PWR                (1 << 2)
-#define PLD_AUD_MIC_GAIN       (1 << 1)
-#define PLD_AUD_CODEC_EN       (1 << 0)
-
-#define PLD_CF         SYSPLD_REG(u32, 0x000024)
-#define PLD_CF2_SLEEP          (1 << 5)
-#define PLD_CF1_SLEEP          (1 << 4)
-#define PLD_CF2_nPDREQ         (1 << 3)
-#define PLD_CF1_nPDREQ         (1 << 2)
-#define PLD_CF2_nIRQ           (1 << 1)
-#define PLD_CF1_nIRQ           (1 << 0)
-
-#define PLD_SDC                SYSPLD_REG(u32, 0x000028)
-#define PLD_SDC_INT_EN         (1 << 2)
-#define PLD_SDC_WP             (1 << 1)
-#define PLD_SDC_CD             (1 << 0)
-
-#define PLD_FPGA       SYSPLD_REG(u32, 0x00002c)
-
-#define PLD_CODEC      SYSPLD_REG(u32, 0x400000)
-#define PLD_CODEC_IRQ3         (1 << 4)
-#define PLD_CODEC_IRQ2         (1 << 3)
-#define PLD_CODEC_IRQ1         (1 << 2)
-#define PLD_CODEC_EN           (1 << 0)
-
-#define PLD_BRITE      SYSPLD_REG(u32, 0x400004)
-#define PLD_BRITE_UP           (1 << 1)
-#define PLD_BRITE_DN           (1 << 0)
-
-#define PLD_LCDEN      SYSPLD_REG(u32, 0x400008)
-#define PLD_LCDEN_EN           (1 << 0)
-
-#define PLD_ID         SYSPLD_REG(u32, 0x40000c)
-
-#define PLD_TCH                SYSPLD_REG(u32, 0x400010)
-#define PLD_TCH_PENIRQ         (1 << 1)
-#define PLD_TCH_EN             (1 << 0)
-
-#define PLD_GPIO       SYSPLD_REG(u32, 0x400014)
-#define PLD_GPIO2              (1 << 2)
-#define PLD_GPIO1              (1 << 1)
-#define PLD_GPIO0              (1 << 0)
-
-#endif
index dd1ffccc75e988bef291fec7e6fe9f2fd019420f..63997a1128e68ce008e977c42b9d4e849101203a 100644 (file)
@@ -5,7 +5,7 @@
 
 # Common objects
 obj-y                  := time.o clock.o serial.o psc.o \
-                          dma.o usb.o common.o sram.o aemif.o
+                          usb.o common.o sram.o aemif.o
 
 obj-$(CONFIG_DAVINCI_MUX)              += mux.o
 
index ba798370fc96d1b8f338a20903bd5e0891280b80..78ea395d2aca81167a8df7584231fbcd1448e0a2 100644 (file)
 #include <linux/input.h>
 #include <linux/input/matrix_keypad.h>
 #include <linux/spi/spi.h>
+#include <linux/platform_data/edma.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach-types.h>
 
 #include <mach/irqs.h>
-#include <mach/edma.h>
 #include <mach/mux.h>
 #include <mach/cp_intc.h>
 #include <mach/tnetv107x.h>
index 1ab3df423dacc2998711e31b5aad6c8e78d94249..a883043d0820c7afe14db5f2b7f00f101606d662 100644 (file)
@@ -23,9 +23,9 @@
 #include <linux/platform_device.h>
 #include <linux/spi/spi.h>
 #include <linux/platform_data/davinci_asp.h>
+#include <linux/platform_data/edma.h>
 #include <linux/platform_data/keyscan-davinci.h>
 #include <mach/hardware.h>
-#include <mach/edma.h>
 
 #include <media/davinci/vpfe_capture.h>
 #include <media/davinci/vpif_types.h>
@@ -77,32 +77,32 @@ void davinci_map_sysmod(void);
 #define DM646X_ASYNC_EMIF_CS2_SPACE_BASE 0x42000000
 
 /* DM355 function declarations */
-void __init dm355_init(void);
+void dm355_init(void);
 void dm355_init_spi0(unsigned chipselect_mask,
                const struct spi_board_info *info, unsigned len);
-void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata);
+void dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata);
 int dm355_init_video(struct vpfe_config *, struct vpbe_config *);
 
 /* DM365 function declarations */
-void __init dm365_init(void);
-void __init dm365_init_asp(struct snd_platform_data *pdata);
-void __init dm365_init_vc(struct snd_platform_data *pdata);
-void __init dm365_init_ks(struct davinci_ks_platform_data *pdata);
-void __init dm365_init_rtc(void);
+void dm365_init(void);
+void dm365_init_asp(struct snd_platform_data *pdata);
+void dm365_init_vc(struct snd_platform_data *pdata);
+void dm365_init_ks(struct davinci_ks_platform_data *pdata);
+void dm365_init_rtc(void);
 void dm365_init_spi0(unsigned chipselect_mask,
                        const struct spi_board_info *info, unsigned len);
 int dm365_init_video(struct vpfe_config *, struct vpbe_config *);
 
 /* DM644x function declarations */
-void __init dm644x_init(void);
-void __init dm644x_init_asp(struct snd_platform_data *pdata);
-int __init dm644x_init_video(struct vpfe_config *, struct vpbe_config *);
+void dm644x_init(void);
+void dm644x_init_asp(struct snd_platform_data *pdata);
+int dm644x_init_video(struct vpfe_config *, struct vpbe_config *);
 
 /* DM646x function declarations */
-void __init dm646x_init(void);
-void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
-void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
-int __init dm646x_init_edma(struct edma_rsv_info *rsv);
+void dm646x_init(void);
+void dm646x_init_mcasp0(struct snd_platform_data *pdata);
+void dm646x_init_mcasp1(struct snd_platform_data *pdata);
+int dm646x_init_edma(struct edma_rsv_info *rsv);
 void dm646x_video_init(void);
 void dm646x_setup_vpif(struct vpif_display_config *,
                       struct vpif_capture_config *);
index bf572525175d44896813c3f03d9f2833e1352b54..eb254fe861aca30a959ea680664287f15be7b184 100644 (file)
@@ -105,27 +105,27 @@ struct platform_device da8xx_serial_device = {
        },
 };
 
-static const s8 da8xx_queue_tc_mapping[][2] = {
+static s8 da8xx_queue_tc_mapping[][2] = {
        /* {event queue no, TC no} */
        {0, 0},
        {1, 1},
        {-1, -1}
 };
 
-static const s8 da8xx_queue_priority_mapping[][2] = {
+static s8 da8xx_queue_priority_mapping[][2] = {
        /* {event queue no, Priority} */
        {0, 3},
        {1, 7},
        {-1, -1}
 };
 
-static const s8 da850_queue_tc_mapping[][2] = {
+static s8 da850_queue_tc_mapping[][2] = {
        /* {event queue no, TC no} */
        {0, 0},
        {-1, -1}
 };
 
-static const s8 da850_queue_priority_mapping[][2] = {
+static s8 da850_queue_priority_mapping[][2] = {
        /* {event queue no, Priority} */
        {0, 3},
        {-1, -1}
index cfb194df18edb7f72deaf907858905781bac210f..128cb9ae80f4c7d368c190ea380d6a4698053490 100644 (file)
 #include <linux/dma-mapping.h>
 #include <linux/clk.h>
 #include <linux/slab.h>
+#include <linux/platform_data/edma.h>
 
 #include <mach/common.h>
 #include <mach/irqs.h>
-#include <mach/edma.h>
 #include <mach/tnetv107x.h>
 
 #include "clock.h"
 #define TNETV107X_DMACH_SDIO1_RX               28
 #define TNETV107X_DMACH_SDIO1_TX               29
 
-static const s8 edma_tc_mapping[][2] = {
+static s8 edma_tc_mapping[][2] = {
        /* event queue no       TC no   */
        {        0,              0      },
        {        1,              1      },
        {       -1,             -1      }
 };
 
-static const s8 edma_priority_mapping[][2] = {
+static s8 edma_priority_mapping[][2] = {
        /* event queue no       Prio    */
        {        0,              3      },
        {        1,              7      },
index a7068a3aa9d39e2e5bd519f93a6c06ee06e0b1a9..90b83d00fe2b399758a8fe7fece8f60fd8fd5092 100644 (file)
 #include <mach/irqs.h>
 #include <mach/cputype.h>
 #include <mach/mux.h>
-#include <mach/edma.h>
 #include <linux/platform_data/mmc-davinci.h>
 #include <mach/time.h>
+#include <linux/platform_data/edma.h>
+
 
 #include "davinci.h"
 #include "clock.h"
@@ -34,6 +35,9 @@
 #define DM365_MMCSD0_BASE           0x01D11000
 #define DM365_MMCSD1_BASE           0x01D00000
 
+#define DAVINCI_DMA_MMCRXEVT   26
+#define DAVINCI_DMA_MMCTXEVT   27
+
 void __iomem  *davinci_sysmod_base;
 
 void davinci_map_sysmod(void)
index a11034a358f19977131f96645fbaa558e51d4712..42ef53f62c6ce44344a42ac49b71f2b8e34f6ecf 100644 (file)
@@ -19,7 +19,6 @@
 #include <asm/mach/map.h>
 
 #include <mach/cputype.h>
-#include <mach/edma.h>
 #include <mach/psc.h>
 #include <mach/mux.h>
 #include <mach/irqs.h>
@@ -28,6 +27,7 @@
 #include <mach/common.h>
 #include <linux/platform_data/spi-davinci.h>
 #include <mach/gpio-davinci.h>
+#include <linux/platform_data/edma.h>
 
 #include "davinci.h"
 #include "clock.h"
@@ -569,7 +569,7 @@ static u8 dm355_default_priorities[DAVINCI_N_AINTC_IRQ] = {
 
 /*----------------------------------------------------------------------*/
 
-static const s8
+static s8
 queue_tc_mapping[][2] = {
        /* {event queue no, TC no} */
        {0, 0},
@@ -577,7 +577,7 @@ queue_tc_mapping[][2] = {
        {-1, -1},
 };
 
-static const s8
+static s8
 queue_priority_mapping[][2] = {
        /* {event queue no, Priority} */
        {0, 3},
index 40fa4fee93313b578f06d0c16b8a32c726ccee45..fa7af5eda52d1bcf17a6120e3a603251e2b6de7f 100644 (file)
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 #include <linux/spi/spi.h>
+#include <linux/platform_data/edma.h>
 
 #include <asm/mach/map.h>
 
 #include <mach/cputype.h>
-#include <mach/edma.h>
 #include <mach/psc.h>
 #include <mach/mux.h>
 #include <mach/irqs.h>
@@ -826,7 +826,7 @@ static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = {
 };
 
 /* Four Transfer Controllers on DM365 */
-static const s8
+static s8
 dm365_queue_tc_mapping[][2] = {
        /* {event queue no, TC no} */
        {0, 0},
@@ -836,7 +836,7 @@ dm365_queue_tc_mapping[][2] = {
        {-1, -1},
 };
 
-static const s8
+static s8
 dm365_queue_priority_mapping[][2] = {
        /* {event queue no, Priority} */
        {0, 7},
index 4d37d3e2a193df25555c7408483d9c98e08d5da7..a49d18246fe9f2e841b51d0ace2c16a4623bb069 100644 (file)
 #include <linux/clk.h>
 #include <linux/serial_8250.h>
 #include <linux/platform_device.h>
+#include <linux/platform_data/edma.h>
 
 #include <asm/mach/map.h>
 
 #include <mach/cputype.h>
-#include <mach/edma.h>
 #include <mach/irqs.h>
 #include <mach/psc.h>
 #include <mach/mux.h>
@@ -497,7 +497,7 @@ static u8 dm644x_default_priorities[DAVINCI_N_AINTC_IRQ] = {
 
 /*----------------------------------------------------------------------*/
 
-static const s8
+static s8
 queue_tc_mapping[][2] = {
        /* {event queue no, TC no} */
        {0, 0},
@@ -505,7 +505,7 @@ queue_tc_mapping[][2] = {
        {-1, -1},
 };
 
-static const s8
+static s8
 queue_priority_mapping[][2] = {
        /* {event queue no, Priority} */
        {0, 3},
index ac7b431c4c8eb93bd21feee28cc9fe8dd251d1ea..d1259e80141b0d7b85bd95cedca24fdad3e98010 100644 (file)
 #include <linux/clk.h>
 #include <linux/serial_8250.h>
 #include <linux/platform_device.h>
+#include <linux/platform_data/edma.h>
 
 #include <asm/mach/map.h>
 
 #include <mach/cputype.h>
-#include <mach/edma.h>
 #include <mach/irqs.h>
 #include <mach/psc.h>
 #include <mach/mux.h>
@@ -531,7 +531,7 @@ static u8 dm646x_default_priorities[DAVINCI_N_AINTC_IRQ] = {
 /*----------------------------------------------------------------------*/
 
 /* Four Transfer Controllers on DM646x */
-static const s8
+static s8
 dm646x_queue_tc_mapping[][2] = {
        /* {event queue no, TC no} */
        {0, 0},
@@ -541,7 +541,7 @@ dm646x_queue_tc_mapping[][2] = {
        {-1, -1},
 };
 
-static const s8
+static s8
 dm646x_queue_priority_mapping[][2] = {
        /* {event queue no, Priority} */
        {0, 4},
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c
deleted file mode 100644 (file)
index 45b7c71..0000000
+++ /dev/null
@@ -1,1591 +0,0 @@
-/*
- * EDMA3 support for DaVinci
- *
- * Copyright (C) 2006-2009 Texas Instruments.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/interrupt.h>
-#include <linux/platform_device.h>
-#include <linux/io.h>
-#include <linux/slab.h>
-
-#include <mach/edma.h>
-
-/* Offsets matching "struct edmacc_param" */
-#define PARM_OPT               0x00
-#define PARM_SRC               0x04
-#define PARM_A_B_CNT           0x08
-#define PARM_DST               0x0c
-#define PARM_SRC_DST_BIDX      0x10
-#define PARM_LINK_BCNTRLD      0x14
-#define PARM_SRC_DST_CIDX      0x18
-#define PARM_CCNT              0x1c
-
-#define PARM_SIZE              0x20
-
-/* Offsets for EDMA CC global channel registers and their shadows */
-#define SH_ER          0x00    /* 64 bits */
-#define SH_ECR         0x08    /* 64 bits */
-#define SH_ESR         0x10    /* 64 bits */
-#define SH_CER         0x18    /* 64 bits */
-#define SH_EER         0x20    /* 64 bits */
-#define SH_EECR                0x28    /* 64 bits */
-#define SH_EESR                0x30    /* 64 bits */
-#define SH_SER         0x38    /* 64 bits */
-#define SH_SECR                0x40    /* 64 bits */
-#define SH_IER         0x50    /* 64 bits */
-#define SH_IECR                0x58    /* 64 bits */
-#define SH_IESR                0x60    /* 64 bits */
-#define SH_IPR         0x68    /* 64 bits */
-#define SH_ICR         0x70    /* 64 bits */
-#define SH_IEVAL       0x78
-#define SH_QER         0x80
-#define SH_QEER                0x84
-#define SH_QEECR       0x88
-#define SH_QEESR       0x8c
-#define SH_QSER                0x90
-#define SH_QSECR       0x94
-#define SH_SIZE                0x200
-
-/* Offsets for EDMA CC global registers */
-#define EDMA_REV       0x0000
-#define EDMA_CCCFG     0x0004
-#define EDMA_QCHMAP    0x0200  /* 8 registers */
-#define EDMA_DMAQNUM   0x0240  /* 8 registers (4 on OMAP-L1xx) */
-#define EDMA_QDMAQNUM  0x0260
-#define EDMA_QUETCMAP  0x0280
-#define EDMA_QUEPRI    0x0284
-#define EDMA_EMR       0x0300  /* 64 bits */
-#define EDMA_EMCR      0x0308  /* 64 bits */
-#define EDMA_QEMR      0x0310
-#define EDMA_QEMCR     0x0314
-#define EDMA_CCERR     0x0318
-#define EDMA_CCERRCLR  0x031c
-#define EDMA_EEVAL     0x0320
-#define EDMA_DRAE      0x0340  /* 4 x 64 bits*/
-#define EDMA_QRAE      0x0380  /* 4 registers */
-#define EDMA_QUEEVTENTRY       0x0400  /* 2 x 16 registers */
-#define EDMA_QSTAT     0x0600  /* 2 registers */
-#define EDMA_QWMTHRA   0x0620
-#define EDMA_QWMTHRB   0x0624
-#define EDMA_CCSTAT    0x0640
-
-#define EDMA_M         0x1000  /* global channel registers */
-#define EDMA_ECR       0x1008
-#define EDMA_ECRH      0x100C
-#define EDMA_SHADOW0   0x2000  /* 4 regions shadowing global channels */
-#define EDMA_PARM      0x4000  /* 128 param entries */
-
-#define PARM_OFFSET(param_no)  (EDMA_PARM + ((param_no) << 5))
-
-#define EDMA_DCHMAP    0x0100  /* 64 registers */
-#define CHMAP_EXIST    BIT(24)
-
-#define EDMA_MAX_DMACH           64
-#define EDMA_MAX_PARAMENTRY     512
-
-/*****************************************************************************/
-
-static void __iomem *edmacc_regs_base[EDMA_MAX_CC];
-
-static inline unsigned int edma_read(unsigned ctlr, int offset)
-{
-       return (unsigned int)__raw_readl(edmacc_regs_base[ctlr] + offset);
-}
-
-static inline void edma_write(unsigned ctlr, int offset, int val)
-{
-       __raw_writel(val, edmacc_regs_base[ctlr] + offset);
-}
-static inline void edma_modify(unsigned ctlr, int offset, unsigned and,
-               unsigned or)
-{
-       unsigned val = edma_read(ctlr, offset);
-       val &= and;
-       val |= or;
-       edma_write(ctlr, offset, val);
-}
-static inline void edma_and(unsigned ctlr, int offset, unsigned and)
-{
-       unsigned val = edma_read(ctlr, offset);
-       val &= and;
-       edma_write(ctlr, offset, val);
-}
-static inline void edma_or(unsigned ctlr, int offset, unsigned or)
-{
-       unsigned val = edma_read(ctlr, offset);
-       val |= or;
-       edma_write(ctlr, offset, val);
-}
-static inline unsigned int edma_read_array(unsigned ctlr, int offset, int i)
-{
-       return edma_read(ctlr, offset + (i << 2));
-}
-static inline void edma_write_array(unsigned ctlr, int offset, int i,
-               unsigned val)
-{
-       edma_write(ctlr, offset + (i << 2), val);
-}
-static inline void edma_modify_array(unsigned ctlr, int offset, int i,
-               unsigned and, unsigned or)
-{
-       edma_modify(ctlr, offset + (i << 2), and, or);
-}
-static inline void edma_or_array(unsigned ctlr, int offset, int i, unsigned or)
-{
-       edma_or(ctlr, offset + (i << 2), or);
-}
-static inline void edma_or_array2(unsigned ctlr, int offset, int i, int j,
-               unsigned or)
-{
-       edma_or(ctlr, offset + ((i*2 + j) << 2), or);
-}
-static inline void edma_write_array2(unsigned ctlr, int offset, int i, int j,
-               unsigned val)
-{
-       edma_write(ctlr, offset + ((i*2 + j) << 2), val);
-}
-static inline unsigned int edma_shadow0_read(unsigned ctlr, int offset)
-{
-       return edma_read(ctlr, EDMA_SHADOW0 + offset);
-}
-static inline unsigned int edma_shadow0_read_array(unsigned ctlr, int offset,
-               int i)
-{
-       return edma_read(ctlr, EDMA_SHADOW0 + offset + (i << 2));
-}
-static inline void edma_shadow0_write(unsigned ctlr, int offset, unsigned val)
-{
-       edma_write(ctlr, EDMA_SHADOW0 + offset, val);
-}
-static inline void edma_shadow0_write_array(unsigned ctlr, int offset, int i,
-               unsigned val)
-{
-       edma_write(ctlr, EDMA_SHADOW0 + offset + (i << 2), val);
-}
-static inline unsigned int edma_parm_read(unsigned ctlr, int offset,
-               int param_no)
-{
-       return edma_read(ctlr, EDMA_PARM + offset + (param_no << 5));
-}
-static inline void edma_parm_write(unsigned ctlr, int offset, int param_no,
-               unsigned val)
-{
-       edma_write(ctlr, EDMA_PARM + offset + (param_no << 5), val);
-}
-static inline void edma_parm_modify(unsigned ctlr, int offset, int param_no,
-               unsigned and, unsigned or)
-{
-       edma_modify(ctlr, EDMA_PARM + offset + (param_no << 5), and, or);
-}
-static inline void edma_parm_and(unsigned ctlr, int offset, int param_no,
-               unsigned and)
-{
-       edma_and(ctlr, EDMA_PARM + offset + (param_no << 5), and);
-}
-static inline void edma_parm_or(unsigned ctlr, int offset, int param_no,
-               unsigned or)
-{
-       edma_or(ctlr, EDMA_PARM + offset + (param_no << 5), or);
-}
-
-static inline void set_bits(int offset, int len, unsigned long *p)
-{
-       for (; len > 0; len--)
-               set_bit(offset + (len - 1), p);
-}
-
-static inline void clear_bits(int offset, int len, unsigned long *p)
-{
-       for (; len > 0; len--)
-               clear_bit(offset + (len - 1), p);
-}
-
-/*****************************************************************************/
-
-/* actual number of DMA channels and slots on this silicon */
-struct edma {
-       /* how many dma resources of each type */
-       unsigned        num_channels;
-       unsigned        num_region;
-       unsigned        num_slots;
-       unsigned        num_tc;
-       unsigned        num_cc;
-       enum dma_event_q        default_queue;
-
-       /* list of channels with no even trigger; terminated by "-1" */
-       const s8        *noevent;
-
-       /* The edma_inuse bit for each PaRAM slot is clear unless the
-        * channel is in use ... by ARM or DSP, for QDMA, or whatever.
-        */
-       DECLARE_BITMAP(edma_inuse, EDMA_MAX_PARAMENTRY);
-
-       /* The edma_unused bit for each channel is clear unless
-        * it is not being used on this platform. It uses a bit
-        * of SOC-specific initialization code.
-        */
-       DECLARE_BITMAP(edma_unused, EDMA_MAX_DMACH);
-
-       unsigned        irq_res_start;
-       unsigned        irq_res_end;
-
-       struct dma_interrupt_data {
-               void (*callback)(unsigned channel, unsigned short ch_status,
-                               void *data);
-               void *data;
-       } intr_data[EDMA_MAX_DMACH];
-};
-
-static struct edma *edma_cc[EDMA_MAX_CC];
-static int arch_num_cc;
-
-/* dummy param set used to (re)initialize parameter RAM slots */
-static const struct edmacc_param dummy_paramset = {
-       .link_bcntrld = 0xffff,
-       .ccnt = 1,
-};
-
-/*****************************************************************************/
-
-static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
-               enum dma_event_q queue_no)
-{
-       int bit = (ch_no & 0x7) * 4;
-
-       /* default to low priority queue */
-       if (queue_no == EVENTQ_DEFAULT)
-               queue_no = edma_cc[ctlr]->default_queue;
-
-       queue_no &= 7;
-       edma_modify_array(ctlr, EDMA_DMAQNUM, (ch_no >> 3),
-                       ~(0x7 << bit), queue_no << bit);
-}
-
-static void __init map_queue_tc(unsigned ctlr, int queue_no, int tc_no)
-{
-       int bit = queue_no * 4;
-       edma_modify(ctlr, EDMA_QUETCMAP, ~(0x7 << bit), ((tc_no & 0x7) << bit));
-}
-
-static void __init assign_priority_to_queue(unsigned ctlr, int queue_no,
-               int priority)
-{
-       int bit = queue_no * 4;
-       edma_modify(ctlr, EDMA_QUEPRI, ~(0x7 << bit),
-                       ((priority & 0x7) << bit));
-}
-
-/**
- * map_dmach_param - Maps channel number to param entry number
- *
- * This maps the dma channel number to param entry numberter. In
- * other words using the DMA channel mapping registers a param entry
- * can be mapped to any channel
- *
- * Callers are responsible for ensuring the channel mapping logic is
- * included in that particular EDMA variant (Eg : dm646x)
- *
- */
-static void __init map_dmach_param(unsigned ctlr)
-{
-       int i;
-       for (i = 0; i < EDMA_MAX_DMACH; i++)
-               edma_write_array(ctlr, EDMA_DCHMAP , i , (i << 5));
-}
-
-static inline void
-setup_dma_interrupt(unsigned lch,
-       void (*callback)(unsigned channel, u16 ch_status, void *data),
-       void *data)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(lch);
-       lch = EDMA_CHAN_SLOT(lch);
-
-       if (!callback)
-               edma_shadow0_write_array(ctlr, SH_IECR, lch >> 5,
-                               BIT(lch & 0x1f));
-
-       edma_cc[ctlr]->intr_data[lch].callback = callback;
-       edma_cc[ctlr]->intr_data[lch].data = data;
-
-       if (callback) {
-               edma_shadow0_write_array(ctlr, SH_ICR, lch >> 5,
-                               BIT(lch & 0x1f));
-               edma_shadow0_write_array(ctlr, SH_IESR, lch >> 5,
-                               BIT(lch & 0x1f));
-       }
-}
-
-static int irq2ctlr(int irq)
-{
-       if (irq >= edma_cc[0]->irq_res_start && irq <= edma_cc[0]->irq_res_end)
-               return 0;
-       else if (irq >= edma_cc[1]->irq_res_start &&
-               irq <= edma_cc[1]->irq_res_end)
-               return 1;
-
-       return -1;
-}
-
-/******************************************************************************
- *
- * DMA interrupt handler
- *
- *****************************************************************************/
-static irqreturn_t dma_irq_handler(int irq, void *data)
-{
-       int ctlr;
-       u32 sh_ier;
-       u32 sh_ipr;
-       u32 bank;
-
-       ctlr = irq2ctlr(irq);
-       if (ctlr < 0)
-               return IRQ_NONE;
-
-       dev_dbg(data, "dma_irq_handler\n");
-
-       sh_ipr = edma_shadow0_read_array(ctlr, SH_IPR, 0);
-       if (!sh_ipr) {
-               sh_ipr = edma_shadow0_read_array(ctlr, SH_IPR, 1);
-               if (!sh_ipr)
-                       return IRQ_NONE;
-               sh_ier = edma_shadow0_read_array(ctlr, SH_IER, 1);
-               bank = 1;
-       } else {
-               sh_ier = edma_shadow0_read_array(ctlr, SH_IER, 0);
-               bank = 0;
-       }
-
-       do {
-               u32 slot;
-               u32 channel;
-
-               dev_dbg(data, "IPR%d %08x\n", bank, sh_ipr);
-
-               slot = __ffs(sh_ipr);
-               sh_ipr &= ~(BIT(slot));
-
-               if (sh_ier & BIT(slot)) {
-                       channel = (bank << 5) | slot;
-                       /* Clear the corresponding IPR bits */
-                       edma_shadow0_write_array(ctlr, SH_ICR, bank,
-                                       BIT(slot));
-                       if (edma_cc[ctlr]->intr_data[channel].callback)
-                               edma_cc[ctlr]->intr_data[channel].callback(
-                                       channel, DMA_COMPLETE,
-                                       edma_cc[ctlr]->intr_data[channel].data);
-               }
-       } while (sh_ipr);
-
-       edma_shadow0_write(ctlr, SH_IEVAL, 1);
-       return IRQ_HANDLED;
-}
-
-/******************************************************************************
- *
- * DMA error interrupt handler
- *
- *****************************************************************************/
-static irqreturn_t dma_ccerr_handler(int irq, void *data)
-{
-       int i;
-       int ctlr;
-       unsigned int cnt = 0;
-
-       ctlr = irq2ctlr(irq);
-       if (ctlr < 0)
-               return IRQ_NONE;
-
-       dev_dbg(data, "dma_ccerr_handler\n");
-
-       if ((edma_read_array(ctlr, EDMA_EMR, 0) == 0) &&
-           (edma_read_array(ctlr, EDMA_EMR, 1) == 0) &&
-           (edma_read(ctlr, EDMA_QEMR) == 0) &&
-           (edma_read(ctlr, EDMA_CCERR) == 0))
-               return IRQ_NONE;
-
-       while (1) {
-               int j = -1;
-               if (edma_read_array(ctlr, EDMA_EMR, 0))
-                       j = 0;
-               else if (edma_read_array(ctlr, EDMA_EMR, 1))
-                       j = 1;
-               if (j >= 0) {
-                       dev_dbg(data, "EMR%d %08x\n", j,
-                                       edma_read_array(ctlr, EDMA_EMR, j));
-                       for (i = 0; i < 32; i++) {
-                               int k = (j << 5) + i;
-                               if (edma_read_array(ctlr, EDMA_EMR, j) &
-                                                       BIT(i)) {
-                                       /* Clear the corresponding EMR bits */
-                                       edma_write_array(ctlr, EDMA_EMCR, j,
-                                                       BIT(i));
-                                       /* Clear any SER */
-                                       edma_shadow0_write_array(ctlr, SH_SECR,
-                                                               j, BIT(i));
-                                       if (edma_cc[ctlr]->intr_data[k].
-                                                               callback) {
-                                               edma_cc[ctlr]->intr_data[k].
-                                               callback(k,
-                                               DMA_CC_ERROR,
-                                               edma_cc[ctlr]->intr_data
-                                               [k].data);
-                                       }
-                               }
-                       }
-               } else if (edma_read(ctlr, EDMA_QEMR)) {
-                       dev_dbg(data, "QEMR %02x\n",
-                               edma_read(ctlr, EDMA_QEMR));
-                       for (i = 0; i < 8; i++) {
-                               if (edma_read(ctlr, EDMA_QEMR) & BIT(i)) {
-                                       /* Clear the corresponding IPR bits */
-                                       edma_write(ctlr, EDMA_QEMCR, BIT(i));
-                                       edma_shadow0_write(ctlr, SH_QSECR,
-                                                               BIT(i));
-
-                                       /* NOTE:  not reported!! */
-                               }
-                       }
-               } else if (edma_read(ctlr, EDMA_CCERR)) {
-                       dev_dbg(data, "CCERR %08x\n",
-                               edma_read(ctlr, EDMA_CCERR));
-                       /* FIXME:  CCERR.BIT(16) ignored!  much better
-                        * to just write CCERRCLR with CCERR value...
-                        */
-                       for (i = 0; i < 8; i++) {
-                               if (edma_read(ctlr, EDMA_CCERR) & BIT(i)) {
-                                       /* Clear the corresponding IPR bits */
-                                       edma_write(ctlr, EDMA_CCERRCLR, BIT(i));
-
-                                       /* NOTE:  not reported!! */
-                               }
-                       }
-               }
-               if ((edma_read_array(ctlr, EDMA_EMR, 0) == 0) &&
-                   (edma_read_array(ctlr, EDMA_EMR, 1) == 0) &&
-                   (edma_read(ctlr, EDMA_QEMR) == 0) &&
-                   (edma_read(ctlr, EDMA_CCERR) == 0))
-                       break;
-               cnt++;
-               if (cnt > 10)
-                       break;
-       }
-       edma_write(ctlr, EDMA_EEVAL, 1);
-       return IRQ_HANDLED;
-}
-
-/******************************************************************************
- *
- * Transfer controller error interrupt handlers
- *
- *****************************************************************************/
-
-#define tc_errs_handled        false   /* disabled as long as they're NOPs */
-
-static irqreturn_t dma_tc0err_handler(int irq, void *data)
-{
-       dev_dbg(data, "dma_tc0err_handler\n");
-       return IRQ_HANDLED;
-}
-
-static irqreturn_t dma_tc1err_handler(int irq, void *data)
-{
-       dev_dbg(data, "dma_tc1err_handler\n");
-       return IRQ_HANDLED;
-}
-
-static int reserve_contiguous_slots(int ctlr, unsigned int id,
-                                    unsigned int num_slots,
-                                    unsigned int start_slot)
-{
-       int i, j;
-       unsigned int count = num_slots;
-       int stop_slot = start_slot;
-       DECLARE_BITMAP(tmp_inuse, EDMA_MAX_PARAMENTRY);
-
-       for (i = start_slot; i < edma_cc[ctlr]->num_slots; ++i) {
-               j = EDMA_CHAN_SLOT(i);
-               if (!test_and_set_bit(j, edma_cc[ctlr]->edma_inuse)) {
-                       /* Record our current beginning slot */
-                       if (count == num_slots)
-                               stop_slot = i;
-
-                       count--;
-                       set_bit(j, tmp_inuse);
-
-                       if (count == 0)
-                               break;
-               } else {
-                       clear_bit(j, tmp_inuse);
-
-                       if (id == EDMA_CONT_PARAMS_FIXED_EXACT) {
-                               stop_slot = i;
-                               break;
-                       } else {
-                               count = num_slots;
-                       }
-               }
-       }
-
-       /*
-        * We have to clear any bits that we set
-        * if we run out parameter RAM slots, i.e we do find a set
-        * of contiguous parameter RAM slots but do not find the exact number
-        * requested as we may reach the total number of parameter RAM slots
-        */
-       if (i == edma_cc[ctlr]->num_slots)
-               stop_slot = i;
-
-       j = start_slot;
-       for_each_set_bit_from(j, tmp_inuse, stop_slot)
-               clear_bit(j, edma_cc[ctlr]->edma_inuse);
-
-       if (count)
-               return -EBUSY;
-
-       for (j = i - num_slots + 1; j <= i; ++j)
-               memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(j),
-                       &dummy_paramset, PARM_SIZE);
-
-       return EDMA_CTLR_CHAN(ctlr, i - num_slots + 1);
-}
-
-static int prepare_unused_channel_list(struct device *dev, void *data)
-{
-       struct platform_device *pdev = to_platform_device(dev);
-       int i, ctlr;
-
-       for (i = 0; i < pdev->num_resources; i++) {
-               if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
-                               (int)pdev->resource[i].start >= 0) {
-                       ctlr = EDMA_CTLR(pdev->resource[i].start);
-                       clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
-                                       edma_cc[ctlr]->edma_unused);
-               }
-       }
-
-       return 0;
-}
-
-/*-----------------------------------------------------------------------*/
-
-static bool unused_chan_list_done;
-
-/* Resource alloc/free:  dma channels, parameter RAM slots */
-
-/**
- * edma_alloc_channel - allocate DMA channel and paired parameter RAM
- * @channel: specific channel to allocate; negative for "any unmapped channel"
- * @callback: optional; to be issued on DMA completion or errors
- * @data: passed to callback
- * @eventq_no: an EVENTQ_* constant, used to choose which Transfer
- *     Controller (TC) executes requests using this channel.  Use
- *     EVENTQ_DEFAULT unless you really need a high priority queue.
- *
- * This allocates a DMA channel and its associated parameter RAM slot.
- * The parameter RAM is initialized to hold a dummy transfer.
- *
- * Normal use is to pass a specific channel number as @channel, to make
- * use of hardware events mapped to that channel.  When the channel will
- * be used only for software triggering or event chaining, channels not
- * mapped to hardware events (or mapped to unused events) are preferable.
- *
- * DMA transfers start from a channel using edma_start(), or by
- * chaining.  When the transfer described in that channel's parameter RAM
- * slot completes, that slot's data may be reloaded through a link.
- *
- * DMA errors are only reported to the @callback associated with the
- * channel driving that transfer, but transfer completion callbacks can
- * be sent to another channel under control of the TCC field in
- * the option word of the transfer's parameter RAM set.  Drivers must not
- * use DMA transfer completion callbacks for channels they did not allocate.
- * (The same applies to TCC codes used in transfer chaining.)
- *
- * Returns the number of the channel, else negative errno.
- */
-int edma_alloc_channel(int channel,
-               void (*callback)(unsigned channel, u16 ch_status, void *data),
-               void *data,
-               enum dma_event_q eventq_no)
-{
-       unsigned i, done = 0, ctlr = 0;
-       int ret = 0;
-
-       if (!unused_chan_list_done) {
-               /*
-                * Scan all the platform devices to find out the EDMA channels
-                * used and clear them in the unused list, making the rest
-                * available for ARM usage.
-                */
-               ret = bus_for_each_dev(&platform_bus_type, NULL, NULL,
-                               prepare_unused_channel_list);
-               if (ret < 0)
-                       return ret;
-
-               unused_chan_list_done = true;
-       }
-
-       if (channel >= 0) {
-               ctlr = EDMA_CTLR(channel);
-               channel = EDMA_CHAN_SLOT(channel);
-       }
-
-       if (channel < 0) {
-               for (i = 0; i < arch_num_cc; i++) {
-                       channel = 0;
-                       for (;;) {
-                               channel = find_next_bit(edma_cc[i]->edma_unused,
-                                               edma_cc[i]->num_channels,
-                                               channel);
-                               if (channel == edma_cc[i]->num_channels)
-                                       break;
-                               if (!test_and_set_bit(channel,
-                                               edma_cc[i]->edma_inuse)) {
-                                       done = 1;
-                                       ctlr = i;
-                                       break;
-                               }
-                               channel++;
-                       }
-                       if (done)
-                               break;
-               }
-               if (!done)
-                       return -ENOMEM;
-       } else if (channel >= edma_cc[ctlr]->num_channels) {
-               return -EINVAL;
-       } else if (test_and_set_bit(channel, edma_cc[ctlr]->edma_inuse)) {
-               return -EBUSY;
-       }
-
-       /* ensure access through shadow region 0 */
-       edma_or_array2(ctlr, EDMA_DRAE, 0, channel >> 5, BIT(channel & 0x1f));
-
-       /* ensure no events are pending */
-       edma_stop(EDMA_CTLR_CHAN(ctlr, channel));
-       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(channel),
-                       &dummy_paramset, PARM_SIZE);
-
-       if (callback)
-               setup_dma_interrupt(EDMA_CTLR_CHAN(ctlr, channel),
-                                       callback, data);
-
-       map_dmach_queue(ctlr, channel, eventq_no);
-
-       return EDMA_CTLR_CHAN(ctlr, channel);
-}
-EXPORT_SYMBOL(edma_alloc_channel);
-
-
-/**
- * edma_free_channel - deallocate DMA channel
- * @channel: dma channel returned from edma_alloc_channel()
- *
- * This deallocates the DMA channel and associated parameter RAM slot
- * allocated by edma_alloc_channel().
- *
- * Callers are responsible for ensuring the channel is inactive, and
- * will not be reactivated by linking, chaining, or software calls to
- * edma_start().
- */
-void edma_free_channel(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel >= edma_cc[ctlr]->num_channels)
-               return;
-
-       setup_dma_interrupt(channel, NULL, NULL);
-       /* REVISIT should probably take out of shadow region 0 */
-
-       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(channel),
-                       &dummy_paramset, PARM_SIZE);
-       clear_bit(channel, edma_cc[ctlr]->edma_inuse);
-}
-EXPORT_SYMBOL(edma_free_channel);
-
-/**
- * edma_alloc_slot - allocate DMA parameter RAM
- * @slot: specific slot to allocate; negative for "any unused slot"
- *
- * This allocates a parameter RAM slot, initializing it to hold a
- * dummy transfer.  Slots allocated using this routine have not been
- * mapped to a hardware DMA channel, and will normally be used by
- * linking to them from a slot associated with a DMA channel.
- *
- * Normal use is to pass EDMA_SLOT_ANY as the @slot, but specific
- * slots may be allocated on behalf of DSP firmware.
- *
- * Returns the number of the slot, else negative errno.
- */
-int edma_alloc_slot(unsigned ctlr, int slot)
-{
-       if (!edma_cc[ctlr])
-               return -EINVAL;
-
-       if (slot >= 0)
-               slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < 0) {
-               slot = edma_cc[ctlr]->num_channels;
-               for (;;) {
-                       slot = find_next_zero_bit(edma_cc[ctlr]->edma_inuse,
-                                       edma_cc[ctlr]->num_slots, slot);
-                       if (slot == edma_cc[ctlr]->num_slots)
-                               return -ENOMEM;
-                       if (!test_and_set_bit(slot, edma_cc[ctlr]->edma_inuse))
-                               break;
-               }
-       } else if (slot < edma_cc[ctlr]->num_channels ||
-                       slot >= edma_cc[ctlr]->num_slots) {
-               return -EINVAL;
-       } else if (test_and_set_bit(slot, edma_cc[ctlr]->edma_inuse)) {
-               return -EBUSY;
-       }
-
-       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
-                       &dummy_paramset, PARM_SIZE);
-
-       return EDMA_CTLR_CHAN(ctlr, slot);
-}
-EXPORT_SYMBOL(edma_alloc_slot);
-
-/**
- * edma_free_slot - deallocate DMA parameter RAM
- * @slot: parameter RAM slot returned from edma_alloc_slot()
- *
- * This deallocates the parameter RAM slot allocated by edma_alloc_slot().
- * Callers are responsible for ensuring the slot is inactive, and will
- * not be activated.
- */
-void edma_free_slot(unsigned slot)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_channels ||
-               slot >= edma_cc[ctlr]->num_slots)
-               return;
-
-       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
-                       &dummy_paramset, PARM_SIZE);
-       clear_bit(slot, edma_cc[ctlr]->edma_inuse);
-}
-EXPORT_SYMBOL(edma_free_slot);
-
-
-/**
- * edma_alloc_cont_slots- alloc contiguous parameter RAM slots
- * The API will return the starting point of a set of
- * contiguous parameter RAM slots that have been requested
- *
- * @id: can only be EDMA_CONT_PARAMS_ANY or EDMA_CONT_PARAMS_FIXED_EXACT
- * or EDMA_CONT_PARAMS_FIXED_NOT_EXACT
- * @count: number of contiguous Paramter RAM slots
- * @slot  - the start value of Parameter RAM slot that should be passed if id
- * is EDMA_CONT_PARAMS_FIXED_EXACT or EDMA_CONT_PARAMS_FIXED_NOT_EXACT
- *
- * If id is EDMA_CONT_PARAMS_ANY then the API starts looking for a set of
- * contiguous Parameter RAM slots from parameter RAM 64 in the case of
- * DaVinci SOCs and 32 in the case of DA8xx SOCs.
- *
- * If id is EDMA_CONT_PARAMS_FIXED_EXACT then the API starts looking for a
- * set of contiguous parameter RAM slots from the "slot" that is passed as an
- * argument to the API.
- *
- * If id is EDMA_CONT_PARAMS_FIXED_NOT_EXACT then the API initially tries
- * starts looking for a set of contiguous parameter RAMs from the "slot"
- * that is passed as an argument to the API. On failure the API will try to
- * find a set of contiguous Parameter RAM slots from the remaining Parameter
- * RAM slots
- */
-int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count)
-{
-       /*
-        * The start slot requested should be greater than
-        * the number of channels and lesser than the total number
-        * of slots
-        */
-       if ((id != EDMA_CONT_PARAMS_ANY) &&
-               (slot < edma_cc[ctlr]->num_channels ||
-               slot >= edma_cc[ctlr]->num_slots))
-               return -EINVAL;
-
-       /*
-        * The number of parameter RAM slots requested cannot be less than 1
-        * and cannot be more than the number of slots minus the number of
-        * channels
-        */
-       if (count < 1 || count >
-               (edma_cc[ctlr]->num_slots - edma_cc[ctlr]->num_channels))
-               return -EINVAL;
-
-       switch (id) {
-       case EDMA_CONT_PARAMS_ANY:
-               return reserve_contiguous_slots(ctlr, id, count,
-                                                edma_cc[ctlr]->num_channels);
-       case EDMA_CONT_PARAMS_FIXED_EXACT:
-       case EDMA_CONT_PARAMS_FIXED_NOT_EXACT:
-               return reserve_contiguous_slots(ctlr, id, count, slot);
-       default:
-               return -EINVAL;
-       }
-
-}
-EXPORT_SYMBOL(edma_alloc_cont_slots);
-
-/**
- * edma_free_cont_slots - deallocate DMA parameter RAM slots
- * @slot: first parameter RAM of a set of parameter RAM slots to be freed
- * @count: the number of contiguous parameter RAM slots to be freed
- *
- * This deallocates the parameter RAM slots allocated by
- * edma_alloc_cont_slots.
- * Callers/applications need to keep track of sets of contiguous
- * parameter RAM slots that have been allocated using the edma_alloc_cont_slots
- * API.
- * Callers are responsible for ensuring the slots are inactive, and will
- * not be activated.
- */
-int edma_free_cont_slots(unsigned slot, int count)
-{
-       unsigned ctlr, slot_to_free;
-       int i;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_channels ||
-               slot >= edma_cc[ctlr]->num_slots ||
-               count < 1)
-               return -EINVAL;
-
-       for (i = slot; i < slot + count; ++i) {
-               ctlr = EDMA_CTLR(i);
-               slot_to_free = EDMA_CHAN_SLOT(i);
-
-               memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot_to_free),
-                       &dummy_paramset, PARM_SIZE);
-               clear_bit(slot_to_free, edma_cc[ctlr]->edma_inuse);
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL(edma_free_cont_slots);
-
-/*-----------------------------------------------------------------------*/
-
-/* Parameter RAM operations (i) -- read/write partial slots */
-
-/**
- * edma_set_src - set initial DMA source address in parameter RAM slot
- * @slot: parameter RAM slot being configured
- * @src_port: physical address of source (memory, controller FIFO, etc)
- * @addressMode: INCR, except in very rare cases
- * @fifoWidth: ignored unless @addressMode is FIFO, else specifies the
- *     width to use when addressing the fifo (e.g. W8BIT, W32BIT)
- *
- * Note that the source address is modified during the DMA transfer
- * according to edma_set_src_index().
- */
-void edma_set_src(unsigned slot, dma_addr_t src_port,
-                               enum address_mode mode, enum fifo_width width)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_slots) {
-               unsigned int i = edma_parm_read(ctlr, PARM_OPT, slot);
-
-               if (mode) {
-                       /* set SAM and program FWID */
-                       i = (i & ~(EDMA_FWID)) | (SAM | ((width & 0x7) << 8));
-               } else {
-                       /* clear SAM */
-                       i &= ~SAM;
-               }
-               edma_parm_write(ctlr, PARM_OPT, slot, i);
-
-               /* set the source port address
-                  in source register of param structure */
-               edma_parm_write(ctlr, PARM_SRC, slot, src_port);
-       }
-}
-EXPORT_SYMBOL(edma_set_src);
-
-/**
- * edma_set_dest - set initial DMA destination address in parameter RAM slot
- * @slot: parameter RAM slot being configured
- * @dest_port: physical address of destination (memory, controller FIFO, etc)
- * @addressMode: INCR, except in very rare cases
- * @fifoWidth: ignored unless @addressMode is FIFO, else specifies the
- *     width to use when addressing the fifo (e.g. W8BIT, W32BIT)
- *
- * Note that the destination address is modified during the DMA transfer
- * according to edma_set_dest_index().
- */
-void edma_set_dest(unsigned slot, dma_addr_t dest_port,
-                                enum address_mode mode, enum fifo_width width)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_slots) {
-               unsigned int i = edma_parm_read(ctlr, PARM_OPT, slot);
-
-               if (mode) {
-                       /* set DAM and program FWID */
-                       i = (i & ~(EDMA_FWID)) | (DAM | ((width & 0x7) << 8));
-               } else {
-                       /* clear DAM */
-                       i &= ~DAM;
-               }
-               edma_parm_write(ctlr, PARM_OPT, slot, i);
-               /* set the destination port address
-                  in dest register of param structure */
-               edma_parm_write(ctlr, PARM_DST, slot, dest_port);
-       }
-}
-EXPORT_SYMBOL(edma_set_dest);
-
-/**
- * edma_get_position - returns the current transfer points
- * @slot: parameter RAM slot being examined
- * @src: pointer to source port position
- * @dst: pointer to destination port position
- *
- * Returns current source and destination addresses for a particular
- * parameter RAM slot.  Its channel should not be active when this is called.
- */
-void edma_get_position(unsigned slot, dma_addr_t *src, dma_addr_t *dst)
-{
-       struct edmacc_param temp;
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       edma_read_slot(EDMA_CTLR_CHAN(ctlr, slot), &temp);
-       if (src != NULL)
-               *src = temp.src;
-       if (dst != NULL)
-               *dst = temp.dst;
-}
-EXPORT_SYMBOL(edma_get_position);
-
-/**
- * edma_set_src_index - configure DMA source address indexing
- * @slot: parameter RAM slot being configured
- * @src_bidx: byte offset between source arrays in a frame
- * @src_cidx: byte offset between source frames in a block
- *
- * Offsets are specified to support either contiguous or discontiguous
- * memory transfers, or repeated access to a hardware register, as needed.
- * When accessing hardware registers, both offsets are normally zero.
- */
-void edma_set_src_index(unsigned slot, s16 src_bidx, s16 src_cidx)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_slots) {
-               edma_parm_modify(ctlr, PARM_SRC_DST_BIDX, slot,
-                               0xffff0000, src_bidx);
-               edma_parm_modify(ctlr, PARM_SRC_DST_CIDX, slot,
-                               0xffff0000, src_cidx);
-       }
-}
-EXPORT_SYMBOL(edma_set_src_index);
-
-/**
- * edma_set_dest_index - configure DMA destination address indexing
- * @slot: parameter RAM slot being configured
- * @dest_bidx: byte offset between destination arrays in a frame
- * @dest_cidx: byte offset between destination frames in a block
- *
- * Offsets are specified to support either contiguous or discontiguous
- * memory transfers, or repeated access to a hardware register, as needed.
- * When accessing hardware registers, both offsets are normally zero.
- */
-void edma_set_dest_index(unsigned slot, s16 dest_bidx, s16 dest_cidx)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_slots) {
-               edma_parm_modify(ctlr, PARM_SRC_DST_BIDX, slot,
-                               0x0000ffff, dest_bidx << 16);
-               edma_parm_modify(ctlr, PARM_SRC_DST_CIDX, slot,
-                               0x0000ffff, dest_cidx << 16);
-       }
-}
-EXPORT_SYMBOL(edma_set_dest_index);
-
-/**
- * edma_set_transfer_params - configure DMA transfer parameters
- * @slot: parameter RAM slot being configured
- * @acnt: how many bytes per array (at least one)
- * @bcnt: how many arrays per frame (at least one)
- * @ccnt: how many frames per block (at least one)
- * @bcnt_rld: used only for A-Synchronized transfers; this specifies
- *     the value to reload into bcnt when it decrements to zero
- * @sync_mode: ASYNC or ABSYNC
- *
- * See the EDMA3 documentation to understand how to configure and link
- * transfers using the fields in PaRAM slots.  If you are not doing it
- * all at once with edma_write_slot(), you will use this routine
- * plus two calls each for source and destination, setting the initial
- * address and saying how to index that address.
- *
- * An example of an A-Synchronized transfer is a serial link using a
- * single word shift register.  In that case, @acnt would be equal to
- * that word size; the serial controller issues a DMA synchronization
- * event to transfer each word, and memory access by the DMA transfer
- * controller will be word-at-a-time.
- *
- * An example of an AB-Synchronized transfer is a device using a FIFO.
- * In that case, @acnt equals the FIFO width and @bcnt equals its depth.
- * The controller with the FIFO issues DMA synchronization events when
- * the FIFO threshold is reached, and the DMA transfer controller will
- * transfer one frame to (or from) the FIFO.  It will probably use
- * efficient burst modes to access memory.
- */
-void edma_set_transfer_params(unsigned slot,
-               u16 acnt, u16 bcnt, u16 ccnt,
-               u16 bcnt_rld, enum sync_dimension sync_mode)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot < edma_cc[ctlr]->num_slots) {
-               edma_parm_modify(ctlr, PARM_LINK_BCNTRLD, slot,
-                               0x0000ffff, bcnt_rld << 16);
-               if (sync_mode == ASYNC)
-                       edma_parm_and(ctlr, PARM_OPT, slot, ~SYNCDIM);
-               else
-                       edma_parm_or(ctlr, PARM_OPT, slot, SYNCDIM);
-               /* Set the acount, bcount, ccount registers */
-               edma_parm_write(ctlr, PARM_A_B_CNT, slot, (bcnt << 16) | acnt);
-               edma_parm_write(ctlr, PARM_CCNT, slot, ccnt);
-       }
-}
-EXPORT_SYMBOL(edma_set_transfer_params);
-
-/**
- * edma_link - link one parameter RAM slot to another
- * @from: parameter RAM slot originating the link
- * @to: parameter RAM slot which is the link target
- *
- * The originating slot should not be part of any active DMA transfer.
- */
-void edma_link(unsigned from, unsigned to)
-{
-       unsigned ctlr_from, ctlr_to;
-
-       ctlr_from = EDMA_CTLR(from);
-       from = EDMA_CHAN_SLOT(from);
-       ctlr_to = EDMA_CTLR(to);
-       to = EDMA_CHAN_SLOT(to);
-
-       if (from >= edma_cc[ctlr_from]->num_slots)
-               return;
-       if (to >= edma_cc[ctlr_to]->num_slots)
-               return;
-       edma_parm_modify(ctlr_from, PARM_LINK_BCNTRLD, from, 0xffff0000,
-                               PARM_OFFSET(to));
-}
-EXPORT_SYMBOL(edma_link);
-
-/**
- * edma_unlink - cut link from one parameter RAM slot
- * @from: parameter RAM slot originating the link
- *
- * The originating slot should not be part of any active DMA transfer.
- * Its link is set to 0xffff.
- */
-void edma_unlink(unsigned from)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(from);
-       from = EDMA_CHAN_SLOT(from);
-
-       if (from >= edma_cc[ctlr]->num_slots)
-               return;
-       edma_parm_or(ctlr, PARM_LINK_BCNTRLD, from, 0xffff);
-}
-EXPORT_SYMBOL(edma_unlink);
-
-/*-----------------------------------------------------------------------*/
-
-/* Parameter RAM operations (ii) -- read/write whole parameter sets */
-
-/**
- * edma_write_slot - write parameter RAM data for slot
- * @slot: number of parameter RAM slot being modified
- * @param: data to be written into parameter RAM slot
- *
- * Use this to assign all parameters of a transfer at once.  This
- * allows more efficient setup of transfers than issuing multiple
- * calls to set up those parameters in small pieces, and provides
- * complete control over all transfer options.
- */
-void edma_write_slot(unsigned slot, const struct edmacc_param *param)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot >= edma_cc[ctlr]->num_slots)
-               return;
-       memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot), param,
-                       PARM_SIZE);
-}
-EXPORT_SYMBOL(edma_write_slot);
-
-/**
- * edma_read_slot - read parameter RAM data from slot
- * @slot: number of parameter RAM slot being copied
- * @param: where to store copy of parameter RAM data
- *
- * Use this to read data from a parameter RAM slot, perhaps to
- * save them as a template for later reuse.
- */
-void edma_read_slot(unsigned slot, struct edmacc_param *param)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(slot);
-       slot = EDMA_CHAN_SLOT(slot);
-
-       if (slot >= edma_cc[ctlr]->num_slots)
-               return;
-       memcpy_fromio(param, edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
-                       PARM_SIZE);
-}
-EXPORT_SYMBOL(edma_read_slot);
-
-/*-----------------------------------------------------------------------*/
-
-/* Various EDMA channel control operations */
-
-/**
- * edma_pause - pause dma on a channel
- * @channel: on which edma_start() has been called
- *
- * This temporarily disables EDMA hardware events on the specified channel,
- * preventing them from triggering new transfers on its behalf
- */
-void edma_pause(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel < edma_cc[ctlr]->num_channels) {
-               unsigned int mask = BIT(channel & 0x1f);
-
-               edma_shadow0_write_array(ctlr, SH_EECR, channel >> 5, mask);
-       }
-}
-EXPORT_SYMBOL(edma_pause);
-
-/**
- * edma_resume - resumes dma on a paused channel
- * @channel: on which edma_pause() has been called
- *
- * This re-enables EDMA hardware events on the specified channel.
- */
-void edma_resume(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel < edma_cc[ctlr]->num_channels) {
-               unsigned int mask = BIT(channel & 0x1f);
-
-               edma_shadow0_write_array(ctlr, SH_EESR, channel >> 5, mask);
-       }
-}
-EXPORT_SYMBOL(edma_resume);
-
-/**
- * edma_start - start dma on a channel
- * @channel: channel being activated
- *
- * Channels with event associations will be triggered by their hardware
- * events, and channels without such associations will be triggered by
- * software.  (At this writing there is no interface for using software
- * triggers except with channels that don't support hardware triggers.)
- *
- * Returns zero on success, else negative errno.
- */
-int edma_start(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel < edma_cc[ctlr]->num_channels) {
-               int j = channel >> 5;
-               unsigned int mask = BIT(channel & 0x1f);
-
-               /* EDMA channels without event association */
-               if (test_bit(channel, edma_cc[ctlr]->edma_unused)) {
-                       pr_debug("EDMA: ESR%d %08x\n", j,
-                               edma_shadow0_read_array(ctlr, SH_ESR, j));
-                       edma_shadow0_write_array(ctlr, SH_ESR, j, mask);
-                       return 0;
-               }
-
-               /* EDMA channel with event association */
-               pr_debug("EDMA: ER%d %08x\n", j,
-                       edma_shadow0_read_array(ctlr, SH_ER, j));
-               /* Clear any pending event or error */
-               edma_write_array(ctlr, EDMA_ECR, j, mask);
-               edma_write_array(ctlr, EDMA_EMCR, j, mask);
-               /* Clear any SER */
-               edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
-               edma_shadow0_write_array(ctlr, SH_EESR, j, mask);
-               pr_debug("EDMA: EER%d %08x\n", j,
-                       edma_shadow0_read_array(ctlr, SH_EER, j));
-               return 0;
-       }
-
-       return -EINVAL;
-}
-EXPORT_SYMBOL(edma_start);
-
-/**
- * edma_stop - stops dma on the channel passed
- * @channel: channel being deactivated
- *
- * When @lch is a channel, any active transfer is paused and
- * all pending hardware events are cleared.  The current transfer
- * may not be resumed, and the channel's Parameter RAM should be
- * reinitialized before being reused.
- */
-void edma_stop(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel < edma_cc[ctlr]->num_channels) {
-               int j = channel >> 5;
-               unsigned int mask = BIT(channel & 0x1f);
-
-               edma_shadow0_write_array(ctlr, SH_EECR, j, mask);
-               edma_shadow0_write_array(ctlr, SH_ECR, j, mask);
-               edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
-               edma_write_array(ctlr, EDMA_EMCR, j, mask);
-
-               pr_debug("EDMA: EER%d %08x\n", j,
-                               edma_shadow0_read_array(ctlr, SH_EER, j));
-
-               /* REVISIT:  consider guarding against inappropriate event
-                * chaining by overwriting with dummy_paramset.
-                */
-       }
-}
-EXPORT_SYMBOL(edma_stop);
-
-/******************************************************************************
- *
- * It cleans ParamEntry qand bring back EDMA to initial state if media has
- * been removed before EDMA has finished.It is usedful for removable media.
- * Arguments:
- *      ch_no     - channel no
- *
- * Return: zero on success, or corresponding error no on failure
- *
- * FIXME this should not be needed ... edma_stop() should suffice.
- *
- *****************************************************************************/
-
-void edma_clean_channel(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel < edma_cc[ctlr]->num_channels) {
-               int j = (channel >> 5);
-               unsigned int mask = BIT(channel & 0x1f);
-
-               pr_debug("EDMA: EMR%d %08x\n", j,
-                               edma_read_array(ctlr, EDMA_EMR, j));
-               edma_shadow0_write_array(ctlr, SH_ECR, j, mask);
-               /* Clear the corresponding EMR bits */
-               edma_write_array(ctlr, EDMA_EMCR, j, mask);
-               /* Clear any SER */
-               edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
-               edma_write(ctlr, EDMA_CCERRCLR, BIT(16) | BIT(1) | BIT(0));
-       }
-}
-EXPORT_SYMBOL(edma_clean_channel);
-
-/*
- * edma_clear_event - clear an outstanding event on the DMA channel
- * Arguments:
- *     channel - channel number
- */
-void edma_clear_event(unsigned channel)
-{
-       unsigned ctlr;
-
-       ctlr = EDMA_CTLR(channel);
-       channel = EDMA_CHAN_SLOT(channel);
-
-       if (channel >= edma_cc[ctlr]->num_channels)
-               return;
-       if (channel < 32)
-               edma_write(ctlr, EDMA_ECR, BIT(channel));
-       else
-               edma_write(ctlr, EDMA_ECRH, BIT(channel - 32));
-}
-EXPORT_SYMBOL(edma_clear_event);
-
-/*-----------------------------------------------------------------------*/
-
-static int __init edma_probe(struct platform_device *pdev)
-{
-       struct edma_soc_info    **info = pdev->dev.platform_data;
-       const s8                (*queue_priority_mapping)[2];
-       const s8                (*queue_tc_mapping)[2];
-       int                     i, j, off, ln, found = 0;
-       int                     status = -1;
-       const s16               (*rsv_chans)[2];
-       const s16               (*rsv_slots)[2];
-       int                     irq[EDMA_MAX_CC] = {0, 0};
-       int                     err_irq[EDMA_MAX_CC] = {0, 0};
-       struct resource         *r[EDMA_MAX_CC] = {NULL};
-       resource_size_t         len[EDMA_MAX_CC];
-       char                    res_name[10];
-       char                    irq_name[10];
-
-       if (!info)
-               return -ENODEV;
-
-       for (j = 0; j < EDMA_MAX_CC; j++) {
-               sprintf(res_name, "edma_cc%d", j);
-               r[j] = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-                                               res_name);
-               if (!r[j] || !info[j]) {
-                       if (found)
-                               break;
-                       else
-                               return -ENODEV;
-               } else {
-                       found = 1;
-               }
-
-               len[j] = resource_size(r[j]);
-
-               r[j] = request_mem_region(r[j]->start, len[j],
-                       dev_name(&pdev->dev));
-               if (!r[j]) {
-                       status = -EBUSY;
-                       goto fail1;
-               }
-
-               edmacc_regs_base[j] = ioremap(r[j]->start, len[j]);
-               if (!edmacc_regs_base[j]) {
-                       status = -EBUSY;
-                       goto fail1;
-               }
-
-               edma_cc[j] = kzalloc(sizeof(struct edma), GFP_KERNEL);
-               if (!edma_cc[j]) {
-                       status = -ENOMEM;
-                       goto fail1;
-               }
-
-               edma_cc[j]->num_channels = min_t(unsigned, info[j]->n_channel,
-                                                       EDMA_MAX_DMACH);
-               edma_cc[j]->num_slots = min_t(unsigned, info[j]->n_slot,
-                                                       EDMA_MAX_PARAMENTRY);
-               edma_cc[j]->num_cc = min_t(unsigned, info[j]->n_cc,
-                                                       EDMA_MAX_CC);
-
-               edma_cc[j]->default_queue = info[j]->default_queue;
-
-               dev_dbg(&pdev->dev, "DMA REG BASE ADDR=%p\n",
-                       edmacc_regs_base[j]);
-
-               for (i = 0; i < edma_cc[j]->num_slots; i++)
-                       memcpy_toio(edmacc_regs_base[j] + PARM_OFFSET(i),
-                                       &dummy_paramset, PARM_SIZE);
-
-               /* Mark all channels as unused */
-               memset(edma_cc[j]->edma_unused, 0xff,
-                       sizeof(edma_cc[j]->edma_unused));
-
-               if (info[j]->rsv) {
-
-                       /* Clear the reserved channels in unused list */
-                       rsv_chans = info[j]->rsv->rsv_chans;
-                       if (rsv_chans) {
-                               for (i = 0; rsv_chans[i][0] != -1; i++) {
-                                       off = rsv_chans[i][0];
-                                       ln = rsv_chans[i][1];
-                                       clear_bits(off, ln,
-                                               edma_cc[j]->edma_unused);
-                               }
-                       }
-
-                       /* Set the reserved slots in inuse list */
-                       rsv_slots = info[j]->rsv->rsv_slots;
-                       if (rsv_slots) {
-                               for (i = 0; rsv_slots[i][0] != -1; i++) {
-                                       off = rsv_slots[i][0];
-                                       ln = rsv_slots[i][1];
-                                       set_bits(off, ln,
-                                               edma_cc[j]->edma_inuse);
-                               }
-                       }
-               }
-
-               sprintf(irq_name, "edma%d", j);
-               irq[j] = platform_get_irq_byname(pdev, irq_name);
-               edma_cc[j]->irq_res_start = irq[j];
-               status = request_irq(irq[j], dma_irq_handler, 0, "edma",
-                                       &pdev->dev);
-               if (status < 0) {
-                       dev_dbg(&pdev->dev, "request_irq %d failed --> %d\n",
-                               irq[j], status);
-                       goto fail;
-               }
-
-               sprintf(irq_name, "edma%d_err", j);
-               err_irq[j] = platform_get_irq_byname(pdev, irq_name);
-               edma_cc[j]->irq_res_end = err_irq[j];
-               status = request_irq(err_irq[j], dma_ccerr_handler, 0,
-                                       "edma_error", &pdev->dev);
-               if (status < 0) {
-                       dev_dbg(&pdev->dev, "request_irq %d failed --> %d\n",
-                               err_irq[j], status);
-                       goto fail;
-               }
-
-               for (i = 0; i < edma_cc[j]->num_channels; i++)
-                       map_dmach_queue(j, i, info[j]->default_queue);
-
-               queue_tc_mapping = info[j]->queue_tc_mapping;
-               queue_priority_mapping = info[j]->queue_priority_mapping;
-
-               /* Event queue to TC mapping */
-               for (i = 0; queue_tc_mapping[i][0] != -1; i++)
-                       map_queue_tc(j, queue_tc_mapping[i][0],
-                                       queue_tc_mapping[i][1]);
-
-               /* Event queue priority mapping */
-               for (i = 0; queue_priority_mapping[i][0] != -1; i++)
-                       assign_priority_to_queue(j,
-                                               queue_priority_mapping[i][0],
-                                               queue_priority_mapping[i][1]);
-
-               /* Map the channel to param entry if channel mapping logic
-                * exist
-                */
-               if (edma_read(j, EDMA_CCCFG) & CHMAP_EXIST)
-                       map_dmach_param(j);
-
-               for (i = 0; i < info[j]->n_region; i++) {
-                       edma_write_array2(j, EDMA_DRAE, i, 0, 0x0);
-                       edma_write_array2(j, EDMA_DRAE, i, 1, 0x0);
-                       edma_write_array(j, EDMA_QRAE, i, 0x0);
-               }
-               arch_num_cc++;
-       }
-
-       if (tc_errs_handled) {
-               status = request_irq(IRQ_TCERRINT0, dma_tc0err_handler, 0,
-                                       "edma_tc0", &pdev->dev);
-               if (status < 0) {
-                       dev_dbg(&pdev->dev, "request_irq %d failed --> %d\n",
-                               IRQ_TCERRINT0, status);
-                       return status;
-               }
-               status = request_irq(IRQ_TCERRINT, dma_tc1err_handler, 0,
-                                       "edma_tc1", &pdev->dev);
-               if (status < 0) {
-                       dev_dbg(&pdev->dev, "request_irq %d --> %d\n",
-                               IRQ_TCERRINT, status);
-                       return status;
-               }
-       }
-
-       return 0;
-
-fail:
-       for (i = 0; i < EDMA_MAX_CC; i++) {
-               if (err_irq[i])
-                       free_irq(err_irq[i], &pdev->dev);
-               if (irq[i])
-                       free_irq(irq[i], &pdev->dev);
-       }
-fail1:
-       for (i = 0; i < EDMA_MAX_CC; i++) {
-               if (r[i])
-                       release_mem_region(r[i]->start, len[i]);
-               if (edmacc_regs_base[i])
-                       iounmap(edmacc_regs_base[i]);
-               kfree(edma_cc[i]);
-       }
-       return status;
-}
-
-
-static struct platform_driver edma_driver = {
-       .driver.name    = "edma",
-};
-
-static int __init edma_init(void)
-{
-       return platform_driver_probe(&edma_driver, edma_probe);
-}
-arch_initcall(edma_init);
-
index d13d8dfa2b0d6c6d871c80a5ebdbb19f237476b7..827bbe9baed4416e419e703766755e68130e17b3 100644 (file)
@@ -51,7 +51,7 @@
 #define CP_INTC_HOST_PRIO_VECTOR(n)    (0x1600 + (n << 2))
 #define CP_INTC_VECTOR_ADDR(n)         (0x2000 + (n << 2))
 
-void __init cp_intc_init(void);
-int __init cp_intc_of_init(struct device_node *, struct device_node *);
+void cp_intc_init(void);
+int cp_intc_of_init(struct device_node *, struct device_node *);
 
 #endif /* __ASM_HARDWARE_CP_INTC_H */
index 2e1c9eae0a5846932bf237d9b35a9155397e3744..3c797e2272f8432b4191bd7fdc74d763c6002b72 100644 (file)
@@ -20,8 +20,8 @@
 #include <linux/videodev2.h>
 
 #include <mach/serial.h>
-#include <mach/edma.h>
 #include <mach/pm.h>
+#include <linux/platform_data/edma.h>
 #include <linux/platform_data/i2c-davinci.h>
 #include <linux/platform_data/mmc-davinci.h>
 #include <linux/platform_data/usb-davinci.h>
@@ -79,8 +79,8 @@ extern unsigned int da850_max_speed;
 #define DA8XX_SHARED_RAM_BASE  0x80000000
 #define DA8XX_ARM_RAM_BASE     0xffff0000
 
-void __init da830_init(void);
-void __init da850_init(void);
+void da830_init(void);
+void da850_init(void);
 
 int da830_register_edma(struct edma_rsv_info *rsv);
 int da850_register_edma(struct edma_rsv_info *rsv[2]);
@@ -94,17 +94,17 @@ int da8xx_register_uio_pruss(void);
 int da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata);
 int da8xx_register_mmcsd0(struct davinci_mmc_config *config);
 int da850_register_mmcsd1(struct davinci_mmc_config *config);
-void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata);
+void da8xx_register_mcasp(int id, struct snd_platform_data *pdata);
 int da8xx_register_rtc(void);
 int da850_register_cpufreq(char *async_clk);
 int da8xx_register_cpuidle(void);
-void __iomem * __init da8xx_get_mem_ctlr(void);
+void __iomem *da8xx_get_mem_ctlr(void);
 int da850_register_pm(struct platform_device *pdev);
-int __init da850_register_sata(unsigned long refclkpn);
-int __init da850_register_vpif(void);
-int __init da850_register_vpif_display
+int da850_register_sata(unsigned long refclkpn);
+int da850_register_vpif(void);
+int da850_register_vpif_display
                        (struct vpif_display_config *display_config);
-int __init da850_register_vpif_capture
+int da850_register_vpif_capture
                        (struct vpif_capture_config *capture_config);
 void da8xx_restart(char mode, const char *cmd);
 void da8xx_rproc_reserve_cma(void);
diff --git a/arch/arm/mach-davinci/include/mach/edma.h b/arch/arm/mach-davinci/include/mach/edma.h
deleted file mode 100644 (file)
index 7e84c90..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- *  TI DAVINCI dma definitions
- *
- *  Copyright (C) 2006-2009 Texas Instruments.
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
- *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
- *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
- *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
- *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
- *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-/*
- * This EDMA3 programming framework exposes two basic kinds of resource:
- *
- *  Channel    Triggers transfers, usually from a hardware event but
- *             also manually or by "chaining" from DMA completions.
- *             Each channel is coupled to a Parameter RAM (PaRAM) slot.
- *
- *  Slot       Each PaRAM slot holds a DMA transfer descriptor (PaRAM
- *             "set"), source and destination addresses, a link to a
- *             next PaRAM slot (if any), options for the transfer, and
- *             instructions for updating those addresses.  There are
- *             more than twice as many slots as event channels.
- *
- * Each PaRAM set describes a sequence of transfers, either for one large
- * buffer or for several discontiguous smaller buffers.  An EDMA transfer
- * is driven only from a channel, which performs the transfers specified
- * in its PaRAM slot until there are no more transfers.  When that last
- * transfer completes, the "link" field may be used to reload the channel's
- * PaRAM slot with a new transfer descriptor.
- *
- * The EDMA Channel Controller (CC) maps requests from channels into physical
- * Transfer Controller (TC) requests when the channel triggers (by hardware
- * or software events, or by chaining).  The two physical DMA channels provided
- * by the TCs are thus shared by many logical channels.
- *
- * DaVinci hardware also has a "QDMA" mechanism which is not currently
- * supported through this interface.  (DSP firmware uses it though.)
- */
-
-#ifndef EDMA_H_
-#define EDMA_H_
-
-/* PaRAM slots are laid out like this */
-struct edmacc_param {
-       unsigned int opt;
-       unsigned int src;
-       unsigned int a_b_cnt;
-       unsigned int dst;
-       unsigned int src_dst_bidx;
-       unsigned int link_bcntrld;
-       unsigned int src_dst_cidx;
-       unsigned int ccnt;
-};
-
-#define CCINT0_INTERRUPT     16
-#define CCERRINT_INTERRUPT   17
-#define TCERRINT0_INTERRUPT   18
-#define TCERRINT1_INTERRUPT   19
-
-/* fields in edmacc_param.opt */
-#define SAM            BIT(0)
-#define DAM            BIT(1)
-#define SYNCDIM                BIT(2)
-#define STATIC         BIT(3)
-#define EDMA_FWID      (0x07 << 8)
-#define TCCMODE                BIT(11)
-#define EDMA_TCC(t)    ((t) << 12)
-#define TCINTEN                BIT(20)
-#define ITCINTEN       BIT(21)
-#define TCCHEN         BIT(22)
-#define ITCCHEN                BIT(23)
-
-#define TRWORD (0x7<<2)
-#define PAENTRY (0x1ff<<5)
-
-/* Drivers should avoid using these symbolic names for dm644x
- * channels, and use platform_device IORESOURCE_DMA resources
- * instead.  (Other DaVinci chips have different peripherals
- * and thus have different DMA channel mappings.)
- */
-#define DAVINCI_DMA_MCBSP_TX              2
-#define DAVINCI_DMA_MCBSP_RX              3
-#define DAVINCI_DMA_VPSS_HIST             4
-#define DAVINCI_DMA_VPSS_H3A              5
-#define DAVINCI_DMA_VPSS_PRVU             6
-#define DAVINCI_DMA_VPSS_RSZ              7
-#define DAVINCI_DMA_IMCOP_IMXINT          8
-#define DAVINCI_DMA_IMCOP_VLCDINT         9
-#define DAVINCI_DMA_IMCO_PASQINT         10
-#define DAVINCI_DMA_IMCOP_DSQINT         11
-#define DAVINCI_DMA_SPI_SPIX             16
-#define DAVINCI_DMA_SPI_SPIR             17
-#define DAVINCI_DMA_UART0_URXEVT0        18
-#define DAVINCI_DMA_UART0_UTXEVT0        19
-#define DAVINCI_DMA_UART1_URXEVT1        20
-#define DAVINCI_DMA_UART1_UTXEVT1        21
-#define DAVINCI_DMA_UART2_URXEVT2        22
-#define DAVINCI_DMA_UART2_UTXEVT2        23
-#define DAVINCI_DMA_MEMSTK_MSEVT         24
-#define DAVINCI_DMA_MMCRXEVT             26
-#define DAVINCI_DMA_MMCTXEVT             27
-#define DAVINCI_DMA_I2C_ICREVT           28
-#define DAVINCI_DMA_I2C_ICXEVT           29
-#define DAVINCI_DMA_GPIO_GPINT0          32
-#define DAVINCI_DMA_GPIO_GPINT1          33
-#define DAVINCI_DMA_GPIO_GPINT2          34
-#define DAVINCI_DMA_GPIO_GPINT3          35
-#define DAVINCI_DMA_GPIO_GPINT4          36
-#define DAVINCI_DMA_GPIO_GPINT5          37
-#define DAVINCI_DMA_GPIO_GPINT6          38
-#define DAVINCI_DMA_GPIO_GPINT7          39
-#define DAVINCI_DMA_GPIO_GPBNKINT0       40
-#define DAVINCI_DMA_GPIO_GPBNKINT1       41
-#define DAVINCI_DMA_GPIO_GPBNKINT2       42
-#define DAVINCI_DMA_GPIO_GPBNKINT3       43
-#define DAVINCI_DMA_GPIO_GPBNKINT4       44
-#define DAVINCI_DMA_TIMER0_TINT0         48
-#define DAVINCI_DMA_TIMER1_TINT1         49
-#define DAVINCI_DMA_TIMER2_TINT2         50
-#define DAVINCI_DMA_TIMER3_TINT3         51
-#define DAVINCI_DMA_PWM0                 52
-#define DAVINCI_DMA_PWM1                 53
-#define DAVINCI_DMA_PWM2                 54
-
-/* DA830 specific EDMA3 information */
-#define EDMA_DA830_NUM_DMACH           32
-#define EDMA_DA830_NUM_TCC             32
-#define EDMA_DA830_NUM_PARAMENTRY      128
-#define EDMA_DA830_NUM_EVQUE           2
-#define EDMA_DA830_NUM_TC              2
-#define EDMA_DA830_CHMAP_EXIST         0
-#define EDMA_DA830_NUM_REGIONS         4
-#define DA830_DMACH2EVENT_MAP0         0x000FC03Fu
-#define DA830_DMACH2EVENT_MAP1         0x00000000u
-#define DA830_EDMA_ARM_OWN             0x30FFCCFFu
-
-/*ch_status paramater of callback function possible values*/
-#define DMA_COMPLETE 1
-#define DMA_CC_ERROR 2
-#define DMA_TC1_ERROR 3
-#define DMA_TC2_ERROR 4
-
-enum address_mode {
-       INCR = 0,
-       FIFO = 1
-};
-
-enum fifo_width {
-       W8BIT = 0,
-       W16BIT = 1,
-       W32BIT = 2,
-       W64BIT = 3,
-       W128BIT = 4,
-       W256BIT = 5
-};
-
-enum dma_event_q {
-       EVENTQ_0 = 0,
-       EVENTQ_1 = 1,
-       EVENTQ_2 = 2,
-       EVENTQ_3 = 3,
-       EVENTQ_DEFAULT = -1
-};
-
-enum sync_dimension {
-       ASYNC = 0,
-       ABSYNC = 1
-};
-
-#define EDMA_CTLR_CHAN(ctlr, chan)     (((ctlr) << 16) | (chan))
-#define EDMA_CTLR(i)                   ((i) >> 16)
-#define EDMA_CHAN_SLOT(i)              ((i) & 0xffff)
-
-#define EDMA_CHANNEL_ANY               -1      /* for edma_alloc_channel() */
-#define EDMA_SLOT_ANY                  -1      /* for edma_alloc_slot() */
-#define EDMA_CONT_PARAMS_ANY            1001
-#define EDMA_CONT_PARAMS_FIXED_EXACT    1002
-#define EDMA_CONT_PARAMS_FIXED_NOT_EXACT 1003
-
-#define EDMA_MAX_CC               2
-
-/* alloc/free DMA channels and their dedicated parameter RAM slots */
-int edma_alloc_channel(int channel,
-       void (*callback)(unsigned channel, u16 ch_status, void *data),
-       void *data, enum dma_event_q);
-void edma_free_channel(unsigned channel);
-
-/* alloc/free parameter RAM slots */
-int edma_alloc_slot(unsigned ctlr, int slot);
-void edma_free_slot(unsigned slot);
-
-/* alloc/free a set of contiguous parameter RAM slots */
-int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count);
-int edma_free_cont_slots(unsigned slot, int count);
-
-/* calls that operate on part of a parameter RAM slot */
-void edma_set_src(unsigned slot, dma_addr_t src_port,
-                               enum address_mode mode, enum fifo_width);
-void edma_set_dest(unsigned slot, dma_addr_t dest_port,
-                                enum address_mode mode, enum fifo_width);
-void edma_get_position(unsigned slot, dma_addr_t *src, dma_addr_t *dst);
-void edma_set_src_index(unsigned slot, s16 src_bidx, s16 src_cidx);
-void edma_set_dest_index(unsigned slot, s16 dest_bidx, s16 dest_cidx);
-void edma_set_transfer_params(unsigned slot, u16 acnt, u16 bcnt, u16 ccnt,
-               u16 bcnt_rld, enum sync_dimension sync_mode);
-void edma_link(unsigned from, unsigned to);
-void edma_unlink(unsigned from);
-
-/* calls that operate on an entire parameter RAM slot */
-void edma_write_slot(unsigned slot, const struct edmacc_param *params);
-void edma_read_slot(unsigned slot, struct edmacc_param *params);
-
-/* channel control operations */
-int edma_start(unsigned channel);
-void edma_stop(unsigned channel);
-void edma_clean_channel(unsigned channel);
-void edma_clear_event(unsigned channel);
-void edma_pause(unsigned channel);
-void edma_resume(unsigned channel);
-
-struct edma_rsv_info {
-
-       const s16       (*rsv_chans)[2];
-       const s16       (*rsv_slots)[2];
-};
-
-/* platform_data for EDMA driver */
-struct edma_soc_info {
-
-       /* how many dma resources of each type */
-       unsigned        n_channel;
-       unsigned        n_region;
-       unsigned        n_slot;
-       unsigned        n_tc;
-       unsigned        n_cc;
-       /*
-        * Default queue is expected to be a low-priority queue.
-        * This way, long transfers on the default queue started
-        * by the codec engine will not cause audio defects.
-        */
-       enum dma_event_q        default_queue;
-
-       /* Resource reservation for other cores */
-       struct edma_rsv_info    *rsv;
-
-       const s8        (*queue_tc_mapping)[2];
-       const s8        (*queue_priority_mapping)[2];
-};
-
-#endif
index 1656a02e3edaf036026ce7c7d6e624982dd2d840..366e975effa80b1e9e1a2b0428814db718522863 100644 (file)
@@ -51,9 +51,9 @@ struct tnetv107x_device_info {
 extern struct platform_device tnetv107x_wdt_device;
 extern struct platform_device tnetv107x_serial_device;
 
-extern void __init tnetv107x_init(void);
-extern void __init tnetv107x_devices_init(struct tnetv107x_device_info *);
-extern void __init tnetv107x_irq_init(void);
+extern void tnetv107x_init(void);
+extern void tnetv107x_devices_init(struct tnetv107x_device_info *);
+extern void tnetv107x_irq_init(void);
 void tnetv107x_restart(char mode, const char *cmd);
 
 #endif
index 36469d813951dc65e76f2e94acb1960706d6d600..dff7b2fd4e203cb14a74bb93f4da12eb7133a033 100644 (file)
@@ -22,8 +22,7 @@ config MACH_CM_A510
 
 config MACH_DOVE_DT
        bool "Marvell Dove Flattened Device Tree"
-       select MVEBU_CLK_CORE
-       select MVEBU_CLK_GATING
+       select DOVE_CLK
        select REGULATOR
        select REGULATOR_FIXED_VOLTAGE
        select USE_OF
index 0b142803b2e17301d837659ca1f4eae085f36015..f3755ac81148761866df71104a0e356c2be72ed6 100644 (file)
@@ -10,7 +10,6 @@
 
 #include <linux/init.h>
 #include <linux/clk-provider.h>
-#include <linux/clk/mvebu.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/platform_data/usb-ehci-orion.h>
@@ -49,7 +48,7 @@ static void __init dove_legacy_clk_init(void)
 
 static void __init dove_of_clk_init(void)
 {
-       mvebu_clocks_init();
+       of_clk_init(NULL);
        dove_legacy_clk_init();
 }
 
index e2b5da031f964c013478eb735a988bcb9ff12d0d..2a9443d04d924be4c5a30cd8f964eeacf51b0759 100644 (file)
@@ -9,7 +9,6 @@
  */
 
 #include <linux/clk-provider.h>
-#include <linux/clk/mvebu.h>
 #include <linux/dma-mapping.h>
 #include <linux/init.h>
 #include <linux/of.h>
index ff18fc2ea46f092bc68786065bcdd985da325c7e..0ecd5af20545976eaef6791da4c9ea12ebf3856e 100644 (file)
@@ -14,9 +14,11 @@ menu "SAMSUNG EXYNOS SoCs Support"
 config ARCH_EXYNOS4
        bool "SAMSUNG EXYNOS4"
        default y
+       select GIC_NON_BANKED
        select HAVE_ARM_SCU if SMP
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
+       select PINCTRL
        help
          Samsung EXYNOS4 SoCs based systems
 
@@ -24,6 +26,7 @@ config ARCH_EXYNOS5
        bool "SAMSUNG EXYNOS5"
        select HAVE_ARM_SCU if SMP
        select HAVE_SMP
+       select PINCTRL
        help
          Samsung EXYNOS5 (Cortex-A15) SoC based systems
 
@@ -34,6 +37,7 @@ config CPU_EXYNOS4210
        default y
        depends on ARCH_EXYNOS4
        select ARM_CPU_SUSPEND if PM
+       select PINCTRL_EXYNOS
        select PM_GENERIC_DOMAINS
        select S5P_PM if PM
        select S5P_SLEEP if PM
@@ -45,6 +49,7 @@ config SOC_EXYNOS4212
        bool "SAMSUNG EXYNOS4212"
        default y
        depends on ARCH_EXYNOS4
+       select PINCTRL_EXYNOS
        select S5P_PM if PM
        select S5P_SLEEP if PM
        select SAMSUNG_DMADEV
@@ -55,6 +60,7 @@ config SOC_EXYNOS4412
        bool "SAMSUNG EXYNOS4412"
        default y
        depends on ARCH_EXYNOS4
+       select PINCTRL_EXYNOS
        select SAMSUNG_DMADEV
        help
          Enable EXYNOS4412 SoC support
@@ -63,6 +69,7 @@ config SOC_EXYNOS5250
        bool "SAMSUNG EXYNOS5250"
        default y
        depends on ARCH_EXYNOS5
+       select PINCTRL_EXYNOS
        select PM_GENERIC_DOMAINS if PM
        select S5P_PM if PM
        select S5P_SLEEP if PM
@@ -78,345 +85,25 @@ config SOC_EXYNOS5440
        select ARCH_HAS_OPP
        select ARM_ARCH_TIMER
        select AUTO_ZRELADDR
-       select PINCTRL
+       select MIGHT_HAVE_PCI
+       select PCI_DOMAINS if PCI
        select PINCTRL_EXYNOS5440
        select PM_OPP
        help
          Enable EXYNOS5440 SoC support
 
-config EXYNOS_ATAGS
-       bool "ATAGS based boot for EXYNOS (deprecated)"
-       depends on !ARCH_MULTIPLATFORM
-       depends on ATAGS
-       default y
-       help
-         The EXYNOS platform is moving towards being completely probed
-         through device tree. This enables support for board files using
-         the traditional ATAGS boot format.
-         Note that this option is not available for multiplatform builds.
-
-if EXYNOS_ATAGS
-
-config EXYNOS_DEV_DMA
-       bool
-       help
-         Compile in amba device definitions for DMA controller
-
-config EXYNOS4_DEV_AHCI
-       bool
-       help
-         Compile in platform device definitions for AHCI
-
-config EXYNOS4_SETUP_FIMD0
-       bool
-       help
-         Common setup code for FIMD0.
-
-config EXYNOS4_DEV_USB_OHCI
-       bool
-       help
-         Compile in platform device definition for USB OHCI
-
-config EXYNOS4_SETUP_I2C1
-       bool
-       help
-         Common setup code for i2c bus 1.
-
-config EXYNOS4_SETUP_I2C2
-       bool
-       help
-         Common setup code for i2c bus 2.
-
-config EXYNOS4_SETUP_I2C3
-       bool
-       help
-         Common setup code for i2c bus 3.
-
-config EXYNOS4_SETUP_I2C4
-       bool
-       help
-         Common setup code for i2c bus 4.
-
-config EXYNOS4_SETUP_I2C5
-       bool
-       help
-         Common setup code for i2c bus 5.
-
-config EXYNOS4_SETUP_I2C6
-       bool
-       help
-         Common setup code for i2c bus 6.
-
-config EXYNOS4_SETUP_I2C7
-       bool
-       help
-         Common setup code for i2c bus 7.
-
-config EXYNOS4_SETUP_KEYPAD
-       bool
-       help
-         Common setup code for keypad.
-
-config EXYNOS4_SETUP_SDHCI
-       bool
-       select EXYNOS4_SETUP_SDHCI_GPIO
-       help
-         Internal helper functions for EXYNOS4 based SDHCI systems.
-
-config EXYNOS4_SETUP_SDHCI_GPIO
-       bool
-       help
-         Common setup code for SDHCI gpio.
-
-config EXYNOS4_SETUP_FIMC
-       bool
-       help
-         Common setup code for the camera interfaces.
-
-config EXYNOS4_SETUP_USB_PHY
-       bool
-       help
-         Common setup code for USB PHY controller
-
-config EXYNOS_SETUP_SPI
-       bool
-       help
-         Common setup code for SPI GPIO configurations.
-
-# machine support
-
-if ARCH_EXYNOS4
-
-comment "EXYNOS4210 Boards"
-
-config MACH_SMDKC210
-       bool "SMDKC210"
-       select MACH_SMDKV310
-       help
-         Machine support for Samsung SMDKC210
-
-config MACH_SMDKV310
-       bool "SMDKV310"
-       select CPU_EXYNOS4210
-       select EXYNOS4_DEV_AHCI
-       select EXYNOS4_DEV_USB_OHCI
-       select EXYNOS4_SETUP_FIMD0
-       select EXYNOS4_SETUP_I2C1
-       select EXYNOS4_SETUP_KEYPAD
-       select EXYNOS4_SETUP_SDHCI
-       select EXYNOS4_SETUP_USB_PHY
-       select EXYNOS_DEV_DMA
-       select EXYNOS_DEV_SYSMMU
-       select S3C24XX_PWM
-       select S3C_DEV_HSMMC
-       select S3C_DEV_HSMMC1
-       select S3C_DEV_HSMMC2
-       select S3C_DEV_HSMMC3
-       select S3C_DEV_I2C1
-       select S3C_DEV_RTC
-       select S3C_DEV_USB_HSOTG
-       select S3C_DEV_WDT
-       select S5P_DEV_FIMC0
-       select S5P_DEV_FIMC1
-       select S5P_DEV_FIMC2
-       select S5P_DEV_FIMC3
-       select S5P_DEV_FIMD0
-       select S5P_DEV_G2D
-       select S5P_DEV_I2C_HDMIPHY
-       select S5P_DEV_JPEG
-       select S5P_DEV_MFC
-       select S5P_DEV_TV
-       select S5P_DEV_USB_EHCI
-       select SAMSUNG_DEV_BACKLIGHT
-       select SAMSUNG_DEV_KEYPAD
-       select SAMSUNG_DEV_PWM
-       help
-         Machine support for Samsung SMDKV310
-
-config MACH_ARMLEX4210
-       bool "ARMLEX4210"
-       select CPU_EXYNOS4210
-       select EXYNOS4_DEV_AHCI
-       select EXYNOS4_SETUP_SDHCI
-       select EXYNOS_DEV_DMA
-       select S3C_DEV_HSMMC
-       select S3C_DEV_HSMMC2
-       select S3C_DEV_HSMMC3
-       select S3C_DEV_RTC
-       select S3C_DEV_WDT
-       help
-         Machine support for Samsung ARMLEX4210 based on EXYNOS4210
-
-config MACH_UNIVERSAL_C210
-       bool "Mobile UNIVERSAL_C210 Board"
-       select CLKSRC_MMIO
-       select CLKSRC_SAMSUNG_PWM
-       select CPU_EXYNOS4210
-       select EXYNOS4_SETUP_FIMC
-       select EXYNOS4_SETUP_FIMD0
-       select EXYNOS4_SETUP_I2C1
-       select EXYNOS4_SETUP_I2C3
-       select EXYNOS4_SETUP_I2C5
-       select EXYNOS4_SETUP_SDHCI
-       select EXYNOS4_SETUP_USB_PHY
-       select EXYNOS_DEV_DMA
-       select EXYNOS_DEV_SYSMMU
-       select S3C_DEV_HSMMC
-       select S3C_DEV_HSMMC2
-       select S3C_DEV_HSMMC3
-       select S3C_DEV_I2C1
-       select S3C_DEV_I2C3
-       select S3C_DEV_I2C5
-       select S3C_DEV_USB_HSOTG
-       select S5P_DEV_CSIS0
-       select S5P_DEV_FIMC0
-       select S5P_DEV_FIMC1
-       select S5P_DEV_FIMC2
-       select S5P_DEV_FIMC3
-       select S5P_DEV_FIMD0
-       select S5P_DEV_G2D
-       select S5P_DEV_I2C_HDMIPHY
-       select S5P_DEV_JPEG
-       select S5P_DEV_MFC
-       select S5P_DEV_ONENAND
-       select S5P_DEV_TV
-       select S5P_GPIO_INT
-       select S5P_SETUP_MIPIPHY
-       help
-         Machine support for Samsung Mobile Universal S5PC210 Reference
-         Board.
-
-config MACH_NURI
-       bool "Mobile NURI Board"
-       select CPU_EXYNOS4210
-       select EXYNOS4_SETUP_FIMC
-       select EXYNOS4_SETUP_FIMD0
-       select EXYNOS4_SETUP_I2C1
-       select EXYNOS4_SETUP_I2C3
-       select EXYNOS4_SETUP_I2C5
-       select EXYNOS4_SETUP_I2C6
-       select EXYNOS4_SETUP_SDHCI
-       select EXYNOS4_SETUP_USB_PHY
-       select EXYNOS_DEV_DMA
-       select S3C_DEV_HSMMC
-       select S3C_DEV_HSMMC2
-       select S3C_DEV_HSMMC3
-       select S3C_DEV_I2C1
-       select S3C_DEV_I2C3
-       select S3C_DEV_I2C5
-       select S3C_DEV_I2C6
-       select S3C_DEV_RTC
-       select S3C_DEV_USB_HSOTG
-       select S3C_DEV_WDT
-       select S5P_DEV_CSIS0
-       select S5P_DEV_FIMC0
-       select S5P_DEV_FIMC1
-       select S5P_DEV_FIMC2
-       select S5P_DEV_FIMC3
-       select S5P_DEV_FIMD0
-       select S5P_DEV_G2D
-       select S5P_DEV_JPEG
-       select S5P_DEV_MFC
-       select S5P_DEV_USB_EHCI
-       select S5P_GPIO_INT
-       select S5P_SETUP_MIPIPHY
-       select SAMSUNG_DEV_ADC
-       select SAMSUNG_DEV_PWM
-       help
-         Machine support for Samsung Mobile NURI Board.
-
-config MACH_ORIGEN
-       bool "ORIGEN"
-       select CPU_EXYNOS4210
-       select EXYNOS4_DEV_USB_OHCI
-       select EXYNOS4_SETUP_FIMD0
-       select EXYNOS4_SETUP_SDHCI
-       select EXYNOS4_SETUP_USB_PHY
-       select EXYNOS_DEV_DMA
-       select EXYNOS_DEV_SYSMMU
-       select S3C24XX_PWM
-       select S3C_DEV_HSMMC
-       select S3C_DEV_HSMMC2
-       select S3C_DEV_RTC
-       select S3C_DEV_USB_HSOTG
-       select S3C_DEV_WDT
-       select S5P_DEV_FIMC0
-       select S5P_DEV_FIMC1
-       select S5P_DEV_FIMC2
-       select S5P_DEV_FIMC3
-       select S5P_DEV_FIMD0
-       select S5P_DEV_G2D
-       select S5P_DEV_I2C_HDMIPHY
-       select S5P_DEV_JPEG
-       select S5P_DEV_MFC
-       select S5P_DEV_TV
-       select S5P_DEV_USB_EHCI
-       select SAMSUNG_DEV_BACKLIGHT
-       select SAMSUNG_DEV_PWM
-       help
-         Machine support for ORIGEN based on Samsung EXYNOS4210
-
-comment "EXYNOS4212 Boards"
-
-config MACH_SMDK4212
-       bool "SMDK4212"
-       select EXYNOS4_SETUP_FIMD0
-       select EXYNOS4_SETUP_I2C1
-       select EXYNOS4_SETUP_I2C3
-       select EXYNOS4_SETUP_I2C7
-       select EXYNOS4_SETUP_KEYPAD
-       select EXYNOS4_SETUP_SDHCI
-       select EXYNOS4_SETUP_USB_PHY
-       select EXYNOS_DEV_DMA
-       select EXYNOS_DEV_SYSMMU
-       select S3C24XX_PWM
-       select S3C_DEV_HSMMC2
-       select S3C_DEV_HSMMC3
-       select S3C_DEV_I2C1
-       select S3C_DEV_I2C3
-       select S3C_DEV_I2C7
-       select S3C_DEV_RTC
-       select S3C_DEV_USB_HSOTG
-       select S3C_DEV_WDT
-       select S5P_DEV_FIMC0
-       select S5P_DEV_FIMC1
-       select S5P_DEV_FIMC2
-       select S5P_DEV_FIMC3
-       select S5P_DEV_FIMD0
-       select S5P_DEV_MFC
-       select SAMSUNG_DEV_BACKLIGHT
-       select SAMSUNG_DEV_KEYPAD
-       select SAMSUNG_DEV_PWM
-       select SOC_EXYNOS4212
-       help
-         Machine support for Samsung SMDK4212
-
-comment "EXYNOS4412 Boards"
-
-config MACH_SMDK4412
-       bool "SMDK4412"
-       select MACH_SMDK4212
-       select SOC_EXYNOS4412
-       help
-         Machine support for Samsung SMDK4412
-endif
-
-endif
-
 comment "Flattened Device Tree based board for EXYNOS SoCs"
 
 config MACH_EXYNOS4_DT
        bool "Samsung Exynos4 Machine using device tree"
+       default y
        depends on ARCH_EXYNOS4
        select ARM_AMBA
        select CLKSRC_OF
        select CLKSRC_SAMSUNG_PWM if CPU_EXYNOS4210
        select CPU_EXYNOS4210
        select KEYBOARD_SAMSUNG if INPUT_KEYBOARD
-       select PINCTRL
-       select PINCTRL_EXYNOS
        select S5P_DEV_MFC
-       select USE_OF
        help
          Machine support for Samsung Exynos4 machine with device tree enabled.
          Select this if a fdt blob is available for the Exynos4 SoC based board.
@@ -429,28 +116,11 @@ config MACH_EXYNOS5_DT
        depends on ARCH_EXYNOS5
        select ARM_AMBA
        select CLKSRC_OF
-       select USE_OF
+       select USB_ARCH_HAS_XHCI
        help
          Machine support for Samsung EXYNOS5 machine with device tree enabled.
          Select this if a fdt blob is available for the EXYNOS5 SoC based board.
 
-if ARCH_EXYNOS4
-
-comment "Configuration for HSMMC 8-bit bus width"
-
-config EXYNOS4_SDHCI_CH0_8BIT
-       bool "Channel 0 with 8-bit bus"
-       help
-         Support HSMMC Channel 0 8-bit bus.
-         If selected, Channel 1 is disabled.
-
-config EXYNOS4_SDHCI_CH2_8BIT
-       bool "Channel 2 with 8-bit bus"
-       help
-         Support HSMMC Channel 2 8-bit bus.
-         If selected, Channel 3 is disabled.
-endif
-
 endmenu
 
 endif
index b09b027178f3dbda46e923d2ba7c21516f153ae9..e970a7a4e278c137f6dffc358811f55cfea1c45d 100644 (file)
@@ -32,38 +32,5 @@ AFLAGS_exynos-smc.o          :=-Wa,-march=armv7-a$(plus_sec)
 
 # machine support
 
-obj-$(CONFIG_MACH_SMDKC210)            += mach-smdkv310.o
-obj-$(CONFIG_MACH_SMDKV310)            += mach-smdkv310.o
-obj-$(CONFIG_MACH_ARMLEX4210)          += mach-armlex4210.o
-obj-$(CONFIG_MACH_UNIVERSAL_C210)      += mach-universal_c210.o
-obj-$(CONFIG_MACH_NURI)                        += mach-nuri.o
-obj-$(CONFIG_MACH_ORIGEN)              += mach-origen.o
-
-obj-$(CONFIG_MACH_SMDK4212)            += mach-smdk4x12.o
-obj-$(CONFIG_MACH_SMDK4412)            += mach-smdk4x12.o
-
 obj-$(CONFIG_MACH_EXYNOS4_DT)          += mach-exynos4-dt.o
 obj-$(CONFIG_MACH_EXYNOS5_DT)          += mach-exynos5-dt.o
-
-# device support
-
-obj-y                                  += dev-uart.o
-obj-$(CONFIG_ARCH_EXYNOS4)             += dev-audio.o
-obj-$(CONFIG_EXYNOS4_DEV_AHCI)         += dev-ahci.o
-obj-$(CONFIG_EXYNOS_DEV_DMA)           += dma.o
-obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI)     += dev-ohci.o
-
-obj-$(CONFIG_ARCH_EXYNOS)              += setup-i2c0.o
-obj-$(CONFIG_EXYNOS4_SETUP_FIMC)       += setup-fimc.o
-obj-$(CONFIG_EXYNOS4_SETUP_FIMD0)      += setup-fimd0.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C1)       += setup-i2c1.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C2)       += setup-i2c2.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C3)       += setup-i2c3.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C4)       += setup-i2c4.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C5)       += setup-i2c5.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C6)       += setup-i2c6.o
-obj-$(CONFIG_EXYNOS4_SETUP_I2C7)       += setup-i2c7.o
-obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD)     += setup-keypad.o
-obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
-obj-$(CONFIG_EXYNOS4_SETUP_USB_PHY)    += setup-usb-phy.o
-obj-$(CONFIG_EXYNOS_SETUP_SPI)         += setup-spi.o
index f7e504b7874d05e01ff13f4dce35d98c9cbec80a..81e6320ca09185e6fdd1acc9505e2ebca56d8638 100644 (file)
 
 #include <mach/regs-irq.h>
 #include <mach/regs-pmu.h>
-#include <mach/regs-gpio.h>
-#include <mach/irqs.h>
 
 #include <plat/cpu.h>
-#include <plat/devs.h>
 #include <plat/pm.h>
-#include <plat/sdhci.h>
-#include <plat/gpio-cfg.h>
-#include <plat/adc-core.h>
-#include <plat/fb-core.h>
-#include <plat/fimc-core.h>
-#include <plat/iic-core.h>
-#include <plat/tv-core.h>
-#include <plat/spi-core.h>
 #include <plat/regs-serial.h>
 
 #include "common.h"
@@ -69,31 +58,25 @@ static const char name_exynos5440[] = "EXYNOS5440";
 static void exynos4_map_io(void);
 static void exynos5_map_io(void);
 static void exynos5440_map_io(void);
-static void exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no);
 static int exynos_init(void);
 
-unsigned long xxti_f = 0, xusbxti_f = 0;
-
 static struct cpu_table cpu_ids[] __initdata = {
        {
                .idcode         = EXYNOS4210_CPU_ID,
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
-               .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4210,
        }, {
                .idcode         = EXYNOS4212_CPU_ID,
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
-               .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4212,
        }, {
                .idcode         = EXYNOS4412_CPU_ID,
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
-               .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4412,
        }, {
@@ -113,15 +96,6 @@ static struct cpu_table cpu_ids[] __initdata = {
 
 /* Initial IO mappings */
 
-static struct map_desc exynos_iodesc[] __initdata = {
-       {
-               .virtual        = (unsigned long)S5P_VA_CHIPID,
-               .pfn            = __phys_to_pfn(EXYNOS_PA_CHIPID),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE,
-       },
-};
-
 static struct map_desc exynos4_iodesc[] __initdata = {
        {
                .virtual        = (unsigned long)S3C_VA_SYS,
@@ -304,13 +278,6 @@ static struct map_desc exynos5440_iodesc0[] __initdata = {
        },
 };
 
-static struct samsung_pwm_variant exynos4_pwm_variant = {
-       .bits           = 32,
-       .div_base       = 0,
-       .has_tint_cstat = true,
-       .tclk_mask      = 0,
-};
-
 void exynos4_restart(char mode, const char *cmd)
 {
        __raw_writel(0x1, S5P_SWRESET);
@@ -353,8 +320,7 @@ void __init exynos_init_late(void)
        exynos_pm_late_initcall();
 }
 
-#ifdef CONFIG_OF
-int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
+static int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
                                        int depth, void *data)
 {
        struct map_desc iodesc;
@@ -376,7 +342,6 @@ int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
        iotable_init(&iodesc, 1);
        return 1;
 }
-#endif
 
 /*
  * exynos_map_io
@@ -384,19 +349,11 @@ int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
  * register the standard cpu IO areas
  */
 
-void __init exynos_init_io(struct map_desc *mach_desc, int size)
+void __init exynos_init_io(void)
 {
        debug_ll_io_init();
 
-#ifdef CONFIG_OF
-       if (initial_boot_params)
-               of_scan_flat_dt(exynos_fdt_map_chipid, NULL);
-       else
-#endif
-               iotable_init(exynos_iodesc, ARRAY_SIZE(exynos_iodesc));
-
-       if (mach_desc)
-               iotable_init(mach_desc, size);
+       of_scan_flat_dt(exynos_fdt_map_chipid, NULL);
 
        /* detect cpu id and rev. */
        s5p_init_cpu(S5P_VA_CHIPID);
@@ -417,34 +374,6 @@ static void __init exynos4_map_io(void)
                iotable_init(exynos4210_iodesc, ARRAY_SIZE(exynos4210_iodesc));
        if (soc_is_exynos4212() || soc_is_exynos4412())
                iotable_init(exynos4x12_iodesc, ARRAY_SIZE(exynos4x12_iodesc));
-
-       /* initialize device information early */
-       exynos4_default_sdhci0();
-       exynos4_default_sdhci1();
-       exynos4_default_sdhci2();
-       exynos4_default_sdhci3();
-
-       s3c_adc_setname("samsung-adc-v3");
-
-       s3c_fimc_setname(0, "exynos4-fimc");
-       s3c_fimc_setname(1, "exynos4-fimc");
-       s3c_fimc_setname(2, "exynos4-fimc");
-       s3c_fimc_setname(3, "exynos4-fimc");
-
-       s3c_sdhci_setname(0, "exynos4-sdhci");
-       s3c_sdhci_setname(1, "exynos4-sdhci");
-       s3c_sdhci_setname(2, "exynos4-sdhci");
-       s3c_sdhci_setname(3, "exynos4-sdhci");
-
-       /* The I2C bus controllers are directly compatible with s3c2440 */
-       s3c_i2c0_setname("s3c2440-i2c");
-       s3c_i2c1_setname("s3c2440-i2c");
-       s3c_i2c2_setname("s3c2440-i2c");
-
-       s5p_fb_setname(0, "exynos4-fb");
-       s5p_hdmi_setname("exynos4-hdmi");
-
-       s3c64xx_spi_setname("exynos4210-spi");
 }
 
 static void __init exynos5_map_io(void)
@@ -460,81 +389,10 @@ static void __init exynos5440_map_io(void)
        iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0));
 }
 
-void __init exynos_set_timer_source(u8 channels)
-{
-       exynos4_pwm_variant.output_mask = BIT(SAMSUNG_PWM_NUM) - 1;
-       exynos4_pwm_variant.output_mask &= ~channels;
-}
-
 void __init exynos_init_time(void)
 {
-       unsigned int timer_irqs[SAMSUNG_PWM_NUM] = {
-               EXYNOS4_IRQ_TIMER0_VIC, EXYNOS4_IRQ_TIMER1_VIC,
-               EXYNOS4_IRQ_TIMER2_VIC, EXYNOS4_IRQ_TIMER3_VIC,
-               EXYNOS4_IRQ_TIMER4_VIC,
-       };
-
-       if (of_have_populated_dt()) {
-#ifdef CONFIG_OF
-               of_clk_init(NULL);
-               clocksource_of_init();
-#endif
-       } else {
-               /* todo: remove after migrating legacy E4 platforms to dt */
-#ifdef CONFIG_ARCH_EXYNOS4
-               exynos4_clk_init(NULL, !soc_is_exynos4210(), S5P_VA_CMU, readl(S5P_VA_CHIPID + 8) & 1);
-               exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f);
-#endif
-#ifdef CONFIG_CLKSRC_SAMSUNG_PWM
-               if (soc_is_exynos4210() && samsung_rev() == EXYNOS4210_REV_0)
-                       samsung_pwm_clocksource_init(S3C_VA_TIMER,
-                                       timer_irqs, &exynos4_pwm_variant);
-               else
-#endif
-                       mct_init(S5P_VA_SYSTIMER, EXYNOS4_IRQ_MCT_G0,
-                                       EXYNOS4_IRQ_MCT_L0, EXYNOS4_IRQ_MCT_L1);
-       }
-}
-
-static unsigned int max_combiner_nr(void)
-{
-       if (soc_is_exynos5250())
-               return EXYNOS5_MAX_COMBINER_NR;
-       else if (soc_is_exynos4412())
-               return EXYNOS4412_MAX_COMBINER_NR;
-       else if (soc_is_exynos4212())
-               return EXYNOS4212_MAX_COMBINER_NR;
-       else
-               return EXYNOS4210_MAX_COMBINER_NR;
-}
-
-
-void __init exynos4_init_irq(void)
-{
-       unsigned int gic_bank_offset;
-
-       gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000;
-
-       if (!of_have_populated_dt())
-               gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset, NULL);
-#ifdef CONFIG_OF
-       else
-               irqchip_init();
-#endif
-
-       if (!of_have_populated_dt())
-               combiner_init(S5P_VA_COMBINER_BASE, NULL,
-                             max_combiner_nr(), COMBINER_IRQ(0, 0));
-
-       gic_arch_extn.irq_set_wake = s3c_irq_wake;
-}
-
-void __init exynos5_init_irq(void)
-{
-#ifdef CONFIG_OF
-       irqchip_init();
-#endif
-       gic_arch_extn.irq_set_wake = s3c_irq_wake;
+       of_clk_init(NULL);
+       clocksource_of_init();
 }
 
 struct bus_type exynos_subsys = {
@@ -552,59 +410,19 @@ static int __init exynos_core_init(void)
 }
 core_initcall(exynos_core_init);
 
-#ifdef CONFIG_CACHE_L2X0
 static int __init exynos4_l2x0_cache_init(void)
 {
        int ret;
 
-       if (soc_is_exynos5250() || soc_is_exynos5440())
-               return 0;
-
        ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK);
-       if (!ret) {
-               l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
-               clean_dcache_area(&l2x0_regs_phys, sizeof(unsigned long));
-               return 0;
-       }
-
-       if (!(__raw_readl(S5P_VA_L2CC + L2X0_CTRL) & 0x1)) {
-               l2x0_saved_regs.phy_base = EXYNOS4_PA_L2CC;
-               /* TAG, Data Latency Control: 2 cycles */
-               l2x0_saved_regs.tag_latency = 0x110;
-
-               if (soc_is_exynos4212() || soc_is_exynos4412())
-                       l2x0_saved_regs.data_latency = 0x120;
-               else
-                       l2x0_saved_regs.data_latency = 0x110;
-
-               l2x0_saved_regs.prefetch_ctrl = 0x30000007;
-               l2x0_saved_regs.pwr_ctrl =
-                       (L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN);
-
-               l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
+       if (ret)
+               return ret;
 
-               __raw_writel(l2x0_saved_regs.tag_latency,
-                               S5P_VA_L2CC + L2X0_TAG_LATENCY_CTRL);
-               __raw_writel(l2x0_saved_regs.data_latency,
-                               S5P_VA_L2CC + L2X0_DATA_LATENCY_CTRL);
-
-               /* L2X0 Prefetch Control */
-               __raw_writel(l2x0_saved_regs.prefetch_ctrl,
-                               S5P_VA_L2CC + L2X0_PREFETCH_CTRL);
-
-               /* L2X0 Power Control */
-               __raw_writel(l2x0_saved_regs.pwr_ctrl,
-                               S5P_VA_L2CC + L2X0_POWER_CTRL);
-
-               clean_dcache_area(&l2x0_regs_phys, sizeof(unsigned long));
-               clean_dcache_area(&l2x0_saved_regs, sizeof(struct l2x0_regs));
-       }
-
-       l2x0_init(S5P_VA_L2CC, L2_AUX_VAL, L2_AUX_MASK);
+       l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
+       clean_dcache_area(&l2x0_regs_phys, sizeof(unsigned long));
        return 0;
 }
 early_initcall(exynos4_l2x0_cache_init);
-#endif
 
 static int __init exynos_init(void)
 {
@@ -612,350 +430,3 @@ static int __init exynos_init(void)
 
        return device_register(&exynos4_dev);
 }
-
-/* uart registration process */
-
-static void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no)
-{
-       struct s3c2410_uartcfg *tcfg = cfg;
-       u32 ucnt;
-
-       for (ucnt = 0; ucnt < no; ucnt++, tcfg++)
-               tcfg->has_fracval = 1;
-
-       s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);
-}
-
-static void __iomem *exynos_eint_base;
-
-static DEFINE_SPINLOCK(eint_lock);
-
-static unsigned int eint0_15_data[16];
-
-static inline int exynos4_irq_to_gpio(unsigned int irq)
-{
-       if (irq < IRQ_EINT(0))
-               return -EINVAL;
-
-       irq -= IRQ_EINT(0);
-       if (irq < 8)
-               return EXYNOS4_GPX0(irq);
-
-       irq -= 8;
-       if (irq < 8)
-               return EXYNOS4_GPX1(irq);
-
-       irq -= 8;
-       if (irq < 8)
-               return EXYNOS4_GPX2(irq);
-
-       irq -= 8;
-       if (irq < 8)
-               return EXYNOS4_GPX3(irq);
-
-       return -EINVAL;
-}
-
-static inline int exynos5_irq_to_gpio(unsigned int irq)
-{
-       if (irq < IRQ_EINT(0))
-               return -EINVAL;
-
-       irq -= IRQ_EINT(0);
-       if (irq < 8)
-               return EXYNOS5_GPX0(irq);
-
-       irq -= 8;
-       if (irq < 8)
-               return EXYNOS5_GPX1(irq);
-
-       irq -= 8;
-       if (irq < 8)
-               return EXYNOS5_GPX2(irq);
-
-       irq -= 8;
-       if (irq < 8)
-               return EXYNOS5_GPX3(irq);
-
-       return -EINVAL;
-}
-
-static unsigned int exynos4_eint0_15_src_int[16] = {
-       EXYNOS4_IRQ_EINT0,
-       EXYNOS4_IRQ_EINT1,
-       EXYNOS4_IRQ_EINT2,
-       EXYNOS4_IRQ_EINT3,
-       EXYNOS4_IRQ_EINT4,
-       EXYNOS4_IRQ_EINT5,
-       EXYNOS4_IRQ_EINT6,
-       EXYNOS4_IRQ_EINT7,
-       EXYNOS4_IRQ_EINT8,
-       EXYNOS4_IRQ_EINT9,
-       EXYNOS4_IRQ_EINT10,
-       EXYNOS4_IRQ_EINT11,
-       EXYNOS4_IRQ_EINT12,
-       EXYNOS4_IRQ_EINT13,
-       EXYNOS4_IRQ_EINT14,
-       EXYNOS4_IRQ_EINT15,
-};
-
-static unsigned int exynos5_eint0_15_src_int[16] = {
-       EXYNOS5_IRQ_EINT0,
-       EXYNOS5_IRQ_EINT1,
-       EXYNOS5_IRQ_EINT2,
-       EXYNOS5_IRQ_EINT3,
-       EXYNOS5_IRQ_EINT4,
-       EXYNOS5_IRQ_EINT5,
-       EXYNOS5_IRQ_EINT6,
-       EXYNOS5_IRQ_EINT7,
-       EXYNOS5_IRQ_EINT8,
-       EXYNOS5_IRQ_EINT9,
-       EXYNOS5_IRQ_EINT10,
-       EXYNOS5_IRQ_EINT11,
-       EXYNOS5_IRQ_EINT12,
-       EXYNOS5_IRQ_EINT13,
-       EXYNOS5_IRQ_EINT14,
-       EXYNOS5_IRQ_EINT15,
-};
-static inline void exynos_irq_eint_mask(struct irq_data *data)
-{
-       u32 mask;
-
-       spin_lock(&eint_lock);
-       mask = __raw_readl(EINT_MASK(exynos_eint_base, data->irq));
-       mask |= EINT_OFFSET_BIT(data->irq);
-       __raw_writel(mask, EINT_MASK(exynos_eint_base, data->irq));
-       spin_unlock(&eint_lock);
-}
-
-static void exynos_irq_eint_unmask(struct irq_data *data)
-{
-       u32 mask;
-
-       spin_lock(&eint_lock);
-       mask = __raw_readl(EINT_MASK(exynos_eint_base, data->irq));
-       mask &= ~(EINT_OFFSET_BIT(data->irq));
-       __raw_writel(mask, EINT_MASK(exynos_eint_base, data->irq));
-       spin_unlock(&eint_lock);
-}
-
-static inline void exynos_irq_eint_ack(struct irq_data *data)
-{
-       __raw_writel(EINT_OFFSET_BIT(data->irq),
-                    EINT_PEND(exynos_eint_base, data->irq));
-}
-
-static void exynos_irq_eint_maskack(struct irq_data *data)
-{
-       exynos_irq_eint_mask(data);
-       exynos_irq_eint_ack(data);
-}
-
-static int exynos_irq_eint_set_type(struct irq_data *data, unsigned int type)
-{
-       int offs = EINT_OFFSET(data->irq);
-       int shift;
-       u32 ctrl, mask;
-       u32 newvalue = 0;
-
-       switch (type) {
-       case IRQ_TYPE_EDGE_RISING:
-               newvalue = S5P_IRQ_TYPE_EDGE_RISING;
-               break;
-
-       case IRQ_TYPE_EDGE_FALLING:
-               newvalue = S5P_IRQ_TYPE_EDGE_FALLING;
-               break;
-
-       case IRQ_TYPE_EDGE_BOTH:
-               newvalue = S5P_IRQ_TYPE_EDGE_BOTH;
-               break;
-
-       case IRQ_TYPE_LEVEL_LOW:
-               newvalue = S5P_IRQ_TYPE_LEVEL_LOW;
-               break;
-
-       case IRQ_TYPE_LEVEL_HIGH:
-               newvalue = S5P_IRQ_TYPE_LEVEL_HIGH;
-               break;
-
-       default:
-               printk(KERN_ERR "No such irq type %d", type);
-               return -EINVAL;
-       }
-
-       shift = (offs & 0x7) * 4;
-       mask = 0x7 << shift;
-
-       spin_lock(&eint_lock);
-       ctrl = __raw_readl(EINT_CON(exynos_eint_base, data->irq));
-       ctrl &= ~mask;
-       ctrl |= newvalue << shift;
-       __raw_writel(ctrl, EINT_CON(exynos_eint_base, data->irq));
-       spin_unlock(&eint_lock);
-
-       if (soc_is_exynos5250())
-               s3c_gpio_cfgpin(exynos5_irq_to_gpio(data->irq), S3C_GPIO_SFN(0xf));
-       else
-               s3c_gpio_cfgpin(exynos4_irq_to_gpio(data->irq), S3C_GPIO_SFN(0xf));
-
-       return 0;
-}
-
-static struct irq_chip exynos_irq_eint = {
-       .name           = "exynos-eint",
-       .irq_mask       = exynos_irq_eint_mask,
-       .irq_unmask     = exynos_irq_eint_unmask,
-       .irq_mask_ack   = exynos_irq_eint_maskack,
-       .irq_ack        = exynos_irq_eint_ack,
-       .irq_set_type   = exynos_irq_eint_set_type,
-#ifdef CONFIG_PM
-       .irq_set_wake   = s3c_irqext_wake,
-#endif
-};
-
-/*
- * exynos4_irq_demux_eint
- *
- * This function demuxes the IRQ from from EINTs 16 to 31.
- * It is designed to be inlined into the specific handler
- * s5p_irq_demux_eintX_Y.
- *
- * Each EINT pend/mask registers handle eight of them.
- */
-static inline void exynos_irq_demux_eint(unsigned int start)
-{
-       unsigned int irq;
-
-       u32 status = __raw_readl(EINT_PEND(exynos_eint_base, start));
-       u32 mask = __raw_readl(EINT_MASK(exynos_eint_base, start));
-
-       status &= ~mask;
-       status &= 0xff;
-
-       while (status) {
-               irq = fls(status) - 1;
-               generic_handle_irq(irq + start);
-               status &= ~(1 << irq);
-       }
-}
-
-static void exynos_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
-{
-       struct irq_chip *chip = irq_get_chip(irq);
-       chained_irq_enter(chip, desc);
-       exynos_irq_demux_eint(IRQ_EINT(16));
-       exynos_irq_demux_eint(IRQ_EINT(24));
-       chained_irq_exit(chip, desc);
-}
-
-static void exynos_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
-{
-       u32 *irq_data = irq_get_handler_data(irq);
-       struct irq_chip *chip = irq_get_chip(irq);
-
-       chained_irq_enter(chip, desc);
-       generic_handle_irq(*irq_data);
-       chained_irq_exit(chip, desc);
-}
-
-static int __init exynos_init_irq_eint(void)
-{
-       int irq;
-
-#ifdef CONFIG_PINCTRL_SAMSUNG
-       /*
-        * The Samsung pinctrl driver provides an integrated gpio/pinmux/pinconf
-        * functionality along with support for external gpio and wakeup
-        * interrupts. If the samsung pinctrl driver is enabled and includes
-        * the wakeup interrupt support, then the setting up external wakeup
-        * interrupts here can be skipped. This check here is temporary to
-        * allow exynos4 platforms that do not use Samsung pinctrl driver to
-        * co-exist with platforms that do. When all of the Samsung Exynos4
-        * platforms switch over to using the pinctrl driver, the wakeup
-        * interrupt support code here can be completely removed.
-        */
-       static const struct of_device_id exynos_pinctrl_ids[] = {
-               { .compatible = "samsung,exynos4210-pinctrl", },
-               { .compatible = "samsung,exynos4x12-pinctrl", },
-               { .compatible = "samsung,exynos5250-pinctrl", },
-       };
-       struct device_node *pctrl_np, *wkup_np;
-       const char *wkup_compat = "samsung,exynos4210-wakeup-eint";
-
-       for_each_matching_node(pctrl_np, exynos_pinctrl_ids) {
-               if (of_device_is_available(pctrl_np)) {
-                       wkup_np = of_find_compatible_node(pctrl_np, NULL,
-                                                       wkup_compat);
-                       if (wkup_np)
-                               return -ENODEV;
-               }
-       }
-#endif
-       if (soc_is_exynos5440())
-               return 0;
-
-       if (soc_is_exynos5250())
-               exynos_eint_base = ioremap(EXYNOS5_PA_GPIO1, SZ_4K);
-       else
-               exynos_eint_base = ioremap(EXYNOS4_PA_GPIO2, SZ_4K);
-
-       if (exynos_eint_base == NULL) {
-               pr_err("unable to ioremap for EINT base address\n");
-               return -ENOMEM;
-       }
-
-       for (irq = 0 ; irq <= 31 ; irq++) {
-               irq_set_chip_and_handler(IRQ_EINT(irq), &exynos_irq_eint,
-                                        handle_level_irq);
-               set_irq_flags(IRQ_EINT(irq), IRQF_VALID);
-       }
-
-       irq_set_chained_handler(EXYNOS_IRQ_EINT16_31, exynos_irq_demux_eint16_31);
-
-       for (irq = 0 ; irq <= 15 ; irq++) {
-               eint0_15_data[irq] = IRQ_EINT(irq);
-
-               if (soc_is_exynos5250()) {
-                       irq_set_handler_data(exynos5_eint0_15_src_int[irq],
-                                            &eint0_15_data[irq]);
-                       irq_set_chained_handler(exynos5_eint0_15_src_int[irq],
-                                               exynos_irq_eint0_15);
-               } else {
-                       irq_set_handler_data(exynos4_eint0_15_src_int[irq],
-                                            &eint0_15_data[irq]);
-                       irq_set_chained_handler(exynos4_eint0_15_src_int[irq],
-                                               exynos_irq_eint0_15);
-               }
-       }
-
-       return 0;
-}
-arch_initcall(exynos_init_irq_eint);
-
-static struct resource exynos4_pmu_resource[] = {
-       DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU),
-       DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU_CPU1),
-#if defined(CONFIG_SOC_EXYNOS4412)
-       DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU_CPU2),
-       DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU_CPU3),
-#endif
-};
-
-static struct platform_device exynos4_device_pmu = {
-       .name           = "arm-pmu",
-       .num_resources  = ARRAY_SIZE(exynos4_pmu_resource),
-       .resource       = exynos4_pmu_resource,
-};
-
-static int __init exynos_armpmu_init(void)
-{
-       if (!of_have_populated_dt()) {
-               if (soc_is_exynos4210() || soc_is_exynos4212())
-                       exynos4_device_pmu.num_resources = 2;
-               platform_device_register(&exynos4_device_pmu);
-       }
-
-       return 0;
-}
-arch_initcall(exynos_armpmu_init);
index 11fc1e29819bb58b2fc4271b78a8ba3e3a8b9776..38d45fd23be406c3c6e819a21efbcda006287b8e 100644 (file)
@@ -19,9 +19,7 @@ void exynos_init_time(void);
 extern unsigned long xxti_f, xusbxti_f;
 
 struct map_desc;
-void exynos_init_io(struct map_desc *mach_desc, int size);
-void exynos4_init_irq(void);
-void exynos5_init_irq(void);
+void exynos_init_io(void);
 void exynos4_restart(char mode, const char *cmd);
 void exynos5_restart(char mode, const char *cmd);
 void exynos_init_late(void);
diff --git a/arch/arm/mach-exynos/dev-ahci.c b/arch/arm/mach-exynos/dev-ahci.c
deleted file mode 100644 (file)
index ce1aad3..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/* linux/arch/arm/mach-exynos4/dev-ahci.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * EXYNOS4 - AHCI support
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/clk.h>
-#include <linux/delay.h>
-#include <linux/dma-mapping.h>
-#include <linux/platform_device.h>
-#include <linux/ahci_platform.h>
-
-#include <plat/cpu.h>
-
-#include <mach/irqs.h>
-#include <mach/map.h>
-#include <mach/regs-pmu.h>
-
-/* PHY Control Register */
-#define SATA_CTRL0             0x0
-/* PHY Link Control Register */
-#define SATA_CTRL1             0x4
-/* PHY Status Register */
-#define SATA_PHY_STATUS                0x8
-
-#define SATA_CTRL0_RX_DATA_VALID(x)    (x << 27)
-#define SATA_CTRL0_SPEED_MODE          (1 << 26)
-#define SATA_CTRL0_M_PHY_CAL           (1 << 19)
-#define SATA_CTRL0_PHY_CMU_RST_N       (1 << 10)
-#define SATA_CTRL0_M_PHY_LN_RST_N      (1 << 9)
-#define SATA_CTRL0_PHY_POR_N           (1 << 8)
-
-#define SATA_CTRL1_RST_PMALIVE_N       (1 << 8)
-#define SATA_CTRL1_RST_RXOOB_N         (1 << 7)
-#define SATA_CTRL1_RST_RX_N            (1 << 6)
-#define SATA_CTRL1_RST_TX_N            (1 << 5)
-
-#define SATA_PHY_STATUS_CMU_OK         (1 << 18)
-#define SATA_PHY_STATUS_LANE_OK                (1 << 16)
-
-#define LANE0          0x200
-#define COM_LANE       0xA00
-
-#define HOST_PORTS_IMPL        0xC
-#define SCLK_SATA_FREQ (67 * MHZ)
-
-static void __iomem *phy_base, *phy_ctrl;
-
-struct phy_reg {
-       u8      reg;
-       u8      val;
-};
-
-/* SATA PHY setup */
-static const struct phy_reg exynos4_sataphy_cmu[] = {
-       { 0x00, 0x06 }, { 0x02, 0x80 }, { 0x22, 0xa0 }, { 0x23, 0x42 },
-       { 0x2e, 0x04 }, { 0x2f, 0x50 }, { 0x30, 0x70 }, { 0x31, 0x02 },
-       { 0x32, 0x25 }, { 0x33, 0x40 }, { 0x34, 0x01 }, { 0x35, 0x40 },
-       { 0x61, 0x2e }, { 0x63, 0x5e }, { 0x65, 0x42 }, { 0x66, 0xd1 },
-       { 0x67, 0x20 }, { 0x68, 0x28 }, { 0x69, 0x78 }, { 0x6a, 0x04 },
-       { 0x6b, 0xc8 }, { 0x6c, 0x06 },
-};
-
-static const struct phy_reg exynos4_sataphy_lane[] = {
-       { 0x00, 0x02 }, { 0x05, 0x10 }, { 0x06, 0x84 }, { 0x07, 0x04 },
-       { 0x08, 0xe0 }, { 0x10, 0x23 }, { 0x13, 0x05 }, { 0x14, 0x30 },
-       { 0x15, 0x00 }, { 0x17, 0x70 }, { 0x18, 0xf2 }, { 0x19, 0x1e },
-       { 0x1a, 0x18 }, { 0x1b, 0x0d }, { 0x1c, 0x08 }, { 0x50, 0x60 },
-       { 0x51, 0x0f },
-};
-
-static const struct phy_reg exynos4_sataphy_comlane[] = {
-       { 0x01, 0x20 }, { 0x03, 0x40 }, { 0x04, 0x3c }, { 0x05, 0x7d },
-       { 0x06, 0x1d }, { 0x07, 0xcf }, { 0x08, 0x05 }, { 0x09, 0x63 },
-       { 0x0a, 0x29 }, { 0x0b, 0xc4 }, { 0x0c, 0x01 }, { 0x0d, 0x03 },
-       { 0x0e, 0x28 }, { 0x0f, 0x98 }, { 0x10, 0x19 }, { 0x13, 0x80 },
-       { 0x14, 0xf0 }, { 0x15, 0xd0 }, { 0x39, 0xa0 }, { 0x3a, 0xa0 },
-       { 0x3b, 0xa0 }, { 0x3c, 0xa0 }, { 0x3d, 0xa0 }, { 0x3e, 0xa0 },
-       { 0x3f, 0xa0 }, { 0x40, 0x42 }, { 0x42, 0x80 }, { 0x43, 0x58 },
-       { 0x45, 0x44 }, { 0x46, 0x5c }, { 0x47, 0x86 }, { 0x48, 0x8d },
-       { 0x49, 0xd0 }, { 0x4a, 0x09 }, { 0x4b, 0x90 }, { 0x4c, 0x07 },
-       { 0x4d, 0x40 }, { 0x51, 0x20 }, { 0x52, 0x32 }, { 0x7f, 0xd8 },
-       { 0x80, 0x1a }, { 0x81, 0xff }, { 0x82, 0x11 }, { 0x83, 0x00 },
-       { 0x87, 0xf0 }, { 0x87, 0xff }, { 0x87, 0xff }, { 0x87, 0xff },
-       { 0x87, 0xff }, { 0x8c, 0x1c }, { 0x8d, 0xc2 }, { 0x8e, 0xc3 },
-       { 0x8f, 0x3f }, { 0x90, 0x0a }, { 0x96, 0xf8 },
-};
-
-static int wait_for_phy_ready(void __iomem *reg, unsigned long bit)
-{
-       unsigned long timeout;
-
-       /* wait for maximum of 3 sec */
-       timeout = jiffies + msecs_to_jiffies(3000);
-       while (!(__raw_readl(reg) & bit)) {
-               if (time_after(jiffies, timeout))
-                       return -1;
-               cpu_relax();
-       }
-       return 0;
-}
-
-static int ahci_phy_init(void __iomem *mmio)
-{
-       int i, ctrl0;
-
-       for (i = 0; i < ARRAY_SIZE(exynos4_sataphy_cmu); i++)
-               __raw_writeb(exynos4_sataphy_cmu[i].val,
-               phy_base + (exynos4_sataphy_cmu[i].reg * 4));
-
-       for (i = 0; i < ARRAY_SIZE(exynos4_sataphy_lane); i++)
-               __raw_writeb(exynos4_sataphy_lane[i].val,
-               phy_base + (LANE0 + exynos4_sataphy_lane[i].reg) * 4);
-
-       for (i = 0; i < ARRAY_SIZE(exynos4_sataphy_comlane); i++)
-               __raw_writeb(exynos4_sataphy_comlane[i].val,
-               phy_base + (COM_LANE + exynos4_sataphy_comlane[i].reg) * 4);
-
-       __raw_writeb(0x07, phy_base);
-
-       ctrl0 = __raw_readl(phy_ctrl + SATA_CTRL0);
-       ctrl0 |= SATA_CTRL0_PHY_CMU_RST_N;
-       __raw_writel(ctrl0, phy_ctrl + SATA_CTRL0);
-
-       if (wait_for_phy_ready(phy_ctrl + SATA_PHY_STATUS,
-                               SATA_PHY_STATUS_CMU_OK) < 0) {
-               printk(KERN_ERR "PHY CMU not ready\n");
-               return -EBUSY;
-       }
-
-       __raw_writeb(0x03, phy_base + (COM_LANE * 4));
-
-       ctrl0 = __raw_readl(phy_ctrl + SATA_CTRL0);
-       ctrl0 |= SATA_CTRL0_M_PHY_LN_RST_N;
-       __raw_writel(ctrl0, phy_ctrl + SATA_CTRL0);
-
-       if (wait_for_phy_ready(phy_ctrl + SATA_PHY_STATUS,
-                               SATA_PHY_STATUS_LANE_OK) < 0) {
-               printk(KERN_ERR "PHY LANE not ready\n");
-               return -EBUSY;
-       }
-
-       ctrl0 = __raw_readl(phy_ctrl + SATA_CTRL0);
-       ctrl0 |= SATA_CTRL0_M_PHY_CAL;
-       __raw_writel(ctrl0, phy_ctrl + SATA_CTRL0);
-
-       return 0;
-}
-
-static int exynos4_ahci_init(struct device *dev, void __iomem *mmio)
-{
-       struct clk *clk_sata, *clk_sataphy, *clk_sclk_sata;
-       int val, ret;
-
-       phy_base = ioremap(EXYNOS4_PA_SATAPHY, SZ_64K);
-       if (!phy_base) {
-               dev_err(dev, "failed to allocate memory for SATA PHY\n");
-               return -ENOMEM;
-       }
-
-       phy_ctrl = ioremap(EXYNOS4_PA_SATAPHY_CTRL, SZ_16);
-       if (!phy_ctrl) {
-               dev_err(dev, "failed to allocate memory for SATA PHY CTRL\n");
-               ret = -ENOMEM;
-               goto err1;
-       }
-
-       clk_sata = clk_get(dev, "sata");
-       if (IS_ERR(clk_sata)) {
-               dev_err(dev, "failed to get sata clock\n");
-               ret = PTR_ERR(clk_sata);
-               clk_sata = NULL;
-               goto err2;
-
-       }
-       clk_enable(clk_sata);
-
-       clk_sataphy = clk_get(dev, "sataphy");
-       if (IS_ERR(clk_sataphy)) {
-               dev_err(dev, "failed to get sataphy clock\n");
-               ret = PTR_ERR(clk_sataphy);
-               clk_sataphy = NULL;
-               goto err3;
-       }
-       clk_enable(clk_sataphy);
-
-       clk_sclk_sata = clk_get(dev, "sclk_sata");
-       if (IS_ERR(clk_sclk_sata)) {
-               dev_err(dev, "failed to get sclk_sata\n");
-               ret = PTR_ERR(clk_sclk_sata);
-               clk_sclk_sata = NULL;
-               goto err4;
-       }
-       clk_enable(clk_sclk_sata);
-       clk_set_rate(clk_sclk_sata, SCLK_SATA_FREQ);
-
-       __raw_writel(S5P_PMU_SATA_PHY_CONTROL_EN, S5P_PMU_SATA_PHY_CONTROL);
-
-       /* Enable PHY link control */
-       val = SATA_CTRL1_RST_PMALIVE_N | SATA_CTRL1_RST_RXOOB_N |
-                       SATA_CTRL1_RST_RX_N | SATA_CTRL1_RST_TX_N;
-       __raw_writel(val, phy_ctrl + SATA_CTRL1);
-
-       /* Set communication speed as 3Gbps and enable PHY power */
-       val = SATA_CTRL0_RX_DATA_VALID(3) | SATA_CTRL0_SPEED_MODE |
-                       SATA_CTRL0_PHY_POR_N;
-       __raw_writel(val, phy_ctrl + SATA_CTRL0);
-
-       /* Port0 is available */
-       __raw_writel(0x1, mmio + HOST_PORTS_IMPL);
-
-       return ahci_phy_init(mmio);
-
-err4:
-       clk_disable(clk_sataphy);
-       clk_put(clk_sataphy);
-err3:
-       clk_disable(clk_sata);
-       clk_put(clk_sata);
-err2:
-       iounmap(phy_ctrl);
-err1:
-       iounmap(phy_base);
-
-       return ret;
-}
-
-static struct ahci_platform_data exynos4_ahci_pdata = {
-       .init = exynos4_ahci_init,
-};
-
-static struct resource exynos4_ahci_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_SATA, SZ_64K),
-       [1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_SATA),
-};
-
-static u64 exynos4_ahci_dmamask = DMA_BIT_MASK(32);
-
-struct platform_device exynos4_device_ahci = {
-       .name           = "ahci",
-       .id             = -1,
-       .resource       = exynos4_ahci_resource,
-       .num_resources  = ARRAY_SIZE(exynos4_ahci_resource),
-       .dev            = {
-               .platform_data          = &exynos4_ahci_pdata,
-               .dma_mask               = &exynos4_ahci_dmamask,
-               .coherent_dma_mask      = DMA_BIT_MASK(32),
-       },
-};
diff --git a/arch/arm/mach-exynos/dev-audio.c b/arch/arm/mach-exynos/dev-audio.c
deleted file mode 100644 (file)
index c662c89..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-/* linux/arch/arm/mach-exynos4/dev-audio.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * Copyright (c) 2010 Samsung Electronics Co. Ltd
- *     Jaswinder Singh <jassi.brar@samsung.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/platform_device.h>
-#include <linux/dma-mapping.h>
-#include <linux/gpio.h>
-#include <linux/platform_data/asoc-s3c.h>
-
-#include <plat/gpio-cfg.h>
-
-#include <mach/map.h>
-#include <mach/dma.h>
-#include <mach/irqs.h>
-
-#define EXYNOS4_AUDSS_INT_MEM  (0x03000000)
-
-static int exynos4_cfg_i2s(struct platform_device *pdev)
-{
-       /* configure GPIO for i2s port */
-       switch (pdev->id) {
-       case 0:
-               s3c_gpio_cfgpin_range(EXYNOS4_GPZ(0), 7, S3C_GPIO_SFN(2));
-               break;
-       case 1:
-               s3c_gpio_cfgpin_range(EXYNOS4_GPC0(0), 5, S3C_GPIO_SFN(2));
-               break;
-       case 2:
-               s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 5, S3C_GPIO_SFN(4));
-               break;
-       default:
-               printk(KERN_ERR "Invalid Device %d\n", pdev->id);
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static struct s3c_audio_pdata i2sv5_pdata = {
-       .cfg_gpio = exynos4_cfg_i2s,
-       .type = {
-               .i2s = {
-                       .quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI
-                                        | QUIRK_NEED_RSTCLR,
-                       .idma_addr = EXYNOS4_AUDSS_INT_MEM,
-               },
-       },
-};
-
-static struct resource exynos4_i2s0_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_I2S0, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_I2S0_TX),
-       [2] = DEFINE_RES_DMA(DMACH_I2S0_RX),
-       [3] = DEFINE_RES_DMA(DMACH_I2S0S_TX),
-};
-
-struct platform_device exynos4_device_i2s0 = {
-       .name = "samsung-i2s",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(exynos4_i2s0_resource),
-       .resource = exynos4_i2s0_resource,
-       .dev = {
-               .platform_data = &i2sv5_pdata,
-       },
-};
-
-static struct s3c_audio_pdata i2sv3_pdata = {
-       .cfg_gpio = exynos4_cfg_i2s,
-       .type = {
-               .i2s = {
-                       .quirks = QUIRK_NO_MUXPSR,
-               },
-       },
-};
-
-static struct resource exynos4_i2s1_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_I2S1, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_I2S1_TX),
-       [2] = DEFINE_RES_DMA(DMACH_I2S1_RX),
-};
-
-struct platform_device exynos4_device_i2s1 = {
-       .name = "samsung-i2s",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(exynos4_i2s1_resource),
-       .resource = exynos4_i2s1_resource,
-       .dev = {
-               .platform_data = &i2sv3_pdata,
-       },
-};
-
-static struct resource exynos4_i2s2_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_I2S2, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_I2S2_TX),
-       [2] = DEFINE_RES_DMA(DMACH_I2S2_RX),
-};
-
-struct platform_device exynos4_device_i2s2 = {
-       .name = "samsung-i2s",
-       .id = 2,
-       .num_resources = ARRAY_SIZE(exynos4_i2s2_resource),
-       .resource = exynos4_i2s2_resource,
-       .dev = {
-               .platform_data = &i2sv3_pdata,
-       },
-};
-
-/* PCM Controller platform_devices */
-
-static int exynos4_pcm_cfg_gpio(struct platform_device *pdev)
-{
-       switch (pdev->id) {
-       case 0:
-               s3c_gpio_cfgpin_range(EXYNOS4_GPZ(0), 5, S3C_GPIO_SFN(3));
-               break;
-       case 1:
-               s3c_gpio_cfgpin_range(EXYNOS4_GPC0(0), 5, S3C_GPIO_SFN(3));
-               break;
-       case 2:
-               s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 5, S3C_GPIO_SFN(3));
-               break;
-       default:
-               printk(KERN_DEBUG "Invalid PCM Controller number!");
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static struct s3c_audio_pdata s3c_pcm_pdata = {
-       .cfg_gpio = exynos4_pcm_cfg_gpio,
-};
-
-static struct resource exynos4_pcm0_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_PCM0, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_PCM0_TX),
-       [2] = DEFINE_RES_DMA(DMACH_PCM0_RX),
-};
-
-struct platform_device exynos4_device_pcm0 = {
-       .name = "samsung-pcm",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(exynos4_pcm0_resource),
-       .resource = exynos4_pcm0_resource,
-       .dev = {
-               .platform_data = &s3c_pcm_pdata,
-       },
-};
-
-static struct resource exynos4_pcm1_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_PCM1, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_PCM1_TX),
-       [2] = DEFINE_RES_DMA(DMACH_PCM1_RX),
-};
-
-struct platform_device exynos4_device_pcm1 = {
-       .name = "samsung-pcm",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(exynos4_pcm1_resource),
-       .resource = exynos4_pcm1_resource,
-       .dev = {
-               .platform_data = &s3c_pcm_pdata,
-       },
-};
-
-static struct resource exynos4_pcm2_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_PCM2, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_PCM2_TX),
-       [2] = DEFINE_RES_DMA(DMACH_PCM2_RX),
-};
-
-struct platform_device exynos4_device_pcm2 = {
-       .name = "samsung-pcm",
-       .id = 2,
-       .num_resources = ARRAY_SIZE(exynos4_pcm2_resource),
-       .resource = exynos4_pcm2_resource,
-       .dev = {
-               .platform_data = &s3c_pcm_pdata,
-       },
-};
-
-/* AC97 Controller platform devices */
-
-static int exynos4_ac97_cfg_gpio(struct platform_device *pdev)
-{
-       return s3c_gpio_cfgpin_range(EXYNOS4_GPC0(0), 5, S3C_GPIO_SFN(4));
-}
-
-static struct resource exynos4_ac97_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_AC97, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_AC97_PCMOUT),
-       [2] = DEFINE_RES_DMA(DMACH_AC97_PCMIN),
-       [3] = DEFINE_RES_DMA(DMACH_AC97_MICIN),
-       [4] = DEFINE_RES_IRQ(EXYNOS4_IRQ_AC97),
-};
-
-static struct s3c_audio_pdata s3c_ac97_pdata = {
-       .cfg_gpio = exynos4_ac97_cfg_gpio,
-};
-
-static u64 exynos4_ac97_dmamask = DMA_BIT_MASK(32);
-
-struct platform_device exynos4_device_ac97 = {
-       .name = "samsung-ac97",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(exynos4_ac97_resource),
-       .resource = exynos4_ac97_resource,
-       .dev = {
-               .platform_data = &s3c_ac97_pdata,
-               .dma_mask = &exynos4_ac97_dmamask,
-               .coherent_dma_mask = DMA_BIT_MASK(32),
-       },
-};
-
-/* S/PDIF Controller platform_device */
-
-static int exynos4_spdif_cfg_gpio(struct platform_device *pdev)
-{
-       s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 2, S3C_GPIO_SFN(4));
-
-       return 0;
-}
-
-static struct resource exynos4_spdif_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_SPDIF, SZ_256),
-       [1] = DEFINE_RES_DMA(DMACH_SPDIF),
-};
-
-static struct s3c_audio_pdata samsung_spdif_pdata = {
-       .cfg_gpio = exynos4_spdif_cfg_gpio,
-};
-
-static u64 exynos4_spdif_dmamask = DMA_BIT_MASK(32);
-
-struct platform_device exynos4_device_spdif = {
-       .name = "samsung-spdif",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(exynos4_spdif_resource),
-       .resource = exynos4_spdif_resource,
-       .dev = {
-               .platform_data = &samsung_spdif_pdata,
-               .dma_mask = &exynos4_spdif_dmamask,
-               .coherent_dma_mask = DMA_BIT_MASK(32),
-       },
-};
diff --git a/arch/arm/mach-exynos/dev-ohci.c b/arch/arm/mach-exynos/dev-ohci.c
deleted file mode 100644 (file)
index d5bc129..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* linux/arch/arm/mach-exynos/dev-ohci.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * EXYNOS - OHCI support
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/dma-mapping.h>
-#include <linux/platform_device.h>
-#include <linux/platform_data/usb-ohci-exynos.h>
-
-#include <mach/irqs.h>
-#include <mach/map.h>
-
-#include <plat/devs.h>
-#include <plat/usb-phy.h>
-
-static struct resource exynos4_ohci_resource[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_OHCI, SZ_256),
-       [1] = DEFINE_RES_IRQ(IRQ_USB_HOST),
-};
-
-static u64 exynos4_ohci_dma_mask = DMA_BIT_MASK(32);
-
-struct platform_device exynos4_device_ohci = {
-       .name           = "exynos-ohci",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(exynos4_ohci_resource),
-       .resource       = exynos4_ohci_resource,
-       .dev            = {
-               .dma_mask               = &exynos4_ohci_dma_mask,
-               .coherent_dma_mask      = DMA_BIT_MASK(32),
-       }
-};
-
-void __init exynos4_ohci_set_platdata(struct exynos4_ohci_platdata *pd)
-{
-       struct exynos4_ohci_platdata *npd;
-
-       npd = s3c_set_platdata(pd, sizeof(struct exynos4_ohci_platdata),
-                       &exynos4_device_ohci);
-
-       if (!npd->phy_init)
-               npd->phy_init = s5p_usb_phy_init;
-       if (!npd->phy_exit)
-               npd->phy_exit = s5p_usb_phy_exit;
-}
diff --git a/arch/arm/mach-exynos/dev-uart.c b/arch/arm/mach-exynos/dev-uart.c
deleted file mode 100644 (file)
index c48aff0..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * Base EXYNOS UART resource and device definitions
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/interrupt.h>
-#include <linux/list.h>
-#include <linux/ioport.h>
-#include <linux/platform_device.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach/irq.h>
-#include <mach/hardware.h>
-#include <mach/map.h>
-#include <mach/irqs.h>
-
-#include <plat/devs.h>
-
-#define EXYNOS_UART_RESOURCE(_series, _nr)     \
-static struct resource exynos##_series##_uart##_nr##_resource[] = {    \
-       [0] = DEFINE_RES_MEM(EXYNOS##_series##_PA_UART##_nr, EXYNOS##_series##_SZ_UART),        \
-       [1] = DEFINE_RES_IRQ(EXYNOS##_series##_IRQ_UART##_nr),  \
-};
-
-EXYNOS_UART_RESOURCE(4, 0)
-EXYNOS_UART_RESOURCE(4, 1)
-EXYNOS_UART_RESOURCE(4, 2)
-EXYNOS_UART_RESOURCE(4, 3)
-
-struct s3c24xx_uart_resources exynos4_uart_resources[] __initdata = {
-       [0] = {
-               .resources      = exynos4_uart0_resource,
-               .nr_resources   = ARRAY_SIZE(exynos4_uart0_resource),
-       },
-       [1] = {
-               .resources      = exynos4_uart1_resource,
-               .nr_resources   = ARRAY_SIZE(exynos4_uart1_resource),
-       },
-       [2] = {
-               .resources      = exynos4_uart2_resource,
-               .nr_resources   = ARRAY_SIZE(exynos4_uart2_resource),
-       },
-       [3] = {
-               .resources      = exynos4_uart3_resource,
-               .nr_resources   = ARRAY_SIZE(exynos4_uart3_resource),
-       },
-};
diff --git a/arch/arm/mach-exynos/dma.c b/arch/arm/mach-exynos/dma.c
deleted file mode 100644 (file)
index 87e07d6..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/* linux/arch/arm/mach-exynos4/dma.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * Copyright (C) 2010 Samsung Electronics Co. Ltd.
- *     Jaswinder Singh <jassi.brar@samsung.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/dma-mapping.h>
-#include <linux/amba/bus.h>
-#include <linux/amba/pl330.h>
-#include <linux/of.h>
-
-#include <asm/irq.h>
-#include <plat/devs.h>
-#include <plat/irqs.h>
-#include <plat/cpu.h>
-
-#include <mach/map.h>
-#include <mach/irqs.h>
-#include <mach/dma.h>
-
-static u8 exynos4210_pdma0_peri[] = {
-       DMACH_PCM0_RX,
-       DMACH_PCM0_TX,
-       DMACH_PCM2_RX,
-       DMACH_PCM2_TX,
-       DMACH_MSM_REQ0,
-       DMACH_MSM_REQ2,
-       DMACH_SPI0_RX,
-       DMACH_SPI0_TX,
-       DMACH_SPI2_RX,
-       DMACH_SPI2_TX,
-       DMACH_I2S0S_TX,
-       DMACH_I2S0_RX,
-       DMACH_I2S0_TX,
-       DMACH_I2S2_RX,
-       DMACH_I2S2_TX,
-       DMACH_UART0_RX,
-       DMACH_UART0_TX,
-       DMACH_UART2_RX,
-       DMACH_UART2_TX,
-       DMACH_UART4_RX,
-       DMACH_UART4_TX,
-       DMACH_SLIMBUS0_RX,
-       DMACH_SLIMBUS0_TX,
-       DMACH_SLIMBUS2_RX,
-       DMACH_SLIMBUS2_TX,
-       DMACH_SLIMBUS4_RX,
-       DMACH_SLIMBUS4_TX,
-       DMACH_AC97_MICIN,
-       DMACH_AC97_PCMIN,
-       DMACH_AC97_PCMOUT,
-};
-
-static u8 exynos4212_pdma0_peri[] = {
-       DMACH_PCM0_RX,
-       DMACH_PCM0_TX,
-       DMACH_PCM2_RX,
-       DMACH_PCM2_TX,
-       DMACH_MIPI_HSI0,
-       DMACH_MIPI_HSI1,
-       DMACH_SPI0_RX,
-       DMACH_SPI0_TX,
-       DMACH_SPI2_RX,
-       DMACH_SPI2_TX,
-       DMACH_I2S0S_TX,
-       DMACH_I2S0_RX,
-       DMACH_I2S0_TX,
-       DMACH_I2S2_RX,
-       DMACH_I2S2_TX,
-       DMACH_UART0_RX,
-       DMACH_UART0_TX,
-       DMACH_UART2_RX,
-       DMACH_UART2_TX,
-       DMACH_UART4_RX,
-       DMACH_UART4_TX,
-       DMACH_SLIMBUS0_RX,
-       DMACH_SLIMBUS0_TX,
-       DMACH_SLIMBUS2_RX,
-       DMACH_SLIMBUS2_TX,
-       DMACH_SLIMBUS4_RX,
-       DMACH_SLIMBUS4_TX,
-       DMACH_AC97_MICIN,
-       DMACH_AC97_PCMIN,
-       DMACH_AC97_PCMOUT,
-       DMACH_MIPI_HSI4,
-       DMACH_MIPI_HSI5,
-};
-
-static u8 exynos5250_pdma0_peri[] = {
-       DMACH_PCM0_RX,
-       DMACH_PCM0_TX,
-       DMACH_PCM2_RX,
-       DMACH_PCM2_TX,
-       DMACH_SPI0_RX,
-       DMACH_SPI0_TX,
-       DMACH_SPI2_RX,
-       DMACH_SPI2_TX,
-       DMACH_I2S0S_TX,
-       DMACH_I2S0_RX,
-       DMACH_I2S0_TX,
-       DMACH_I2S2_RX,
-       DMACH_I2S2_TX,
-       DMACH_UART0_RX,
-       DMACH_UART0_TX,
-       DMACH_UART2_RX,
-       DMACH_UART2_TX,
-       DMACH_UART4_RX,
-       DMACH_UART4_TX,
-       DMACH_SLIMBUS0_RX,
-       DMACH_SLIMBUS0_TX,
-       DMACH_SLIMBUS2_RX,
-       DMACH_SLIMBUS2_TX,
-       DMACH_SLIMBUS4_RX,
-       DMACH_SLIMBUS4_TX,
-       DMACH_AC97_MICIN,
-       DMACH_AC97_PCMIN,
-       DMACH_AC97_PCMOUT,
-       DMACH_MIPI_HSI0,
-       DMACH_MIPI_HSI2,
-       DMACH_MIPI_HSI4,
-       DMACH_MIPI_HSI6,
-};
-
-static struct dma_pl330_platdata exynos_pdma0_pdata;
-
-static AMBA_AHB_DEVICE(exynos_pdma0, "dma-pl330.0", 0x00041330,
-       EXYNOS4_PA_PDMA0, {EXYNOS4_IRQ_PDMA0}, &exynos_pdma0_pdata);
-
-static u8 exynos4210_pdma1_peri[] = {
-       DMACH_PCM0_RX,
-       DMACH_PCM0_TX,
-       DMACH_PCM1_RX,
-       DMACH_PCM1_TX,
-       DMACH_MSM_REQ1,
-       DMACH_MSM_REQ3,
-       DMACH_SPI1_RX,
-       DMACH_SPI1_TX,
-       DMACH_I2S0S_TX,
-       DMACH_I2S0_RX,
-       DMACH_I2S0_TX,
-       DMACH_I2S1_RX,
-       DMACH_I2S1_TX,
-       DMACH_UART0_RX,
-       DMACH_UART0_TX,
-       DMACH_UART1_RX,
-       DMACH_UART1_TX,
-       DMACH_UART3_RX,
-       DMACH_UART3_TX,
-       DMACH_SLIMBUS1_RX,
-       DMACH_SLIMBUS1_TX,
-       DMACH_SLIMBUS3_RX,
-       DMACH_SLIMBUS3_TX,
-       DMACH_SLIMBUS5_RX,
-       DMACH_SLIMBUS5_TX,
-};
-
-static u8 exynos4212_pdma1_peri[] = {
-       DMACH_PCM0_RX,
-       DMACH_PCM0_TX,
-       DMACH_PCM1_RX,
-       DMACH_PCM1_TX,
-       DMACH_MIPI_HSI2,
-       DMACH_MIPI_HSI3,
-       DMACH_SPI1_RX,
-       DMACH_SPI1_TX,
-       DMACH_I2S0S_TX,
-       DMACH_I2S0_RX,
-       DMACH_I2S0_TX,
-       DMACH_I2S1_RX,
-       DMACH_I2S1_TX,
-       DMACH_UART0_RX,
-       DMACH_UART0_TX,
-       DMACH_UART1_RX,
-       DMACH_UART1_TX,
-       DMACH_UART3_RX,
-       DMACH_UART3_TX,
-       DMACH_SLIMBUS1_RX,
-       DMACH_SLIMBUS1_TX,
-       DMACH_SLIMBUS3_RX,
-       DMACH_SLIMBUS3_TX,
-       DMACH_SLIMBUS5_RX,
-       DMACH_SLIMBUS5_TX,
-       DMACH_SLIMBUS0AUX_RX,
-       DMACH_SLIMBUS0AUX_TX,
-       DMACH_SPDIF,
-       DMACH_MIPI_HSI6,
-       DMACH_MIPI_HSI7,
-};
-
-static u8 exynos5250_pdma1_peri[] = {
-       DMACH_PCM0_RX,
-       DMACH_PCM0_TX,
-       DMACH_PCM1_RX,
-       DMACH_PCM1_TX,
-       DMACH_SPI1_RX,
-       DMACH_SPI1_TX,
-       DMACH_PWM,
-       DMACH_SPDIF,
-       DMACH_I2S0S_TX,
-       DMACH_I2S0_RX,
-       DMACH_I2S0_TX,
-       DMACH_I2S1_RX,
-       DMACH_I2S1_TX,
-       DMACH_UART0_RX,
-       DMACH_UART0_TX,
-       DMACH_UART1_RX,
-       DMACH_UART1_TX,
-       DMACH_UART3_RX,
-       DMACH_UART3_TX,
-       DMACH_SLIMBUS1_RX,
-       DMACH_SLIMBUS1_TX,
-       DMACH_SLIMBUS3_RX,
-       DMACH_SLIMBUS3_TX,
-       DMACH_SLIMBUS5_RX,
-       DMACH_SLIMBUS5_TX,
-       DMACH_SLIMBUS0AUX_RX,
-       DMACH_SLIMBUS0AUX_TX,
-       DMACH_DISP1,
-       DMACH_MIPI_HSI1,
-       DMACH_MIPI_HSI3,
-       DMACH_MIPI_HSI5,
-       DMACH_MIPI_HSI7,
-};
-
-static struct dma_pl330_platdata exynos_pdma1_pdata;
-
-static AMBA_AHB_DEVICE(exynos_pdma1,  "dma-pl330.1", 0x00041330,
-       EXYNOS4_PA_PDMA1, {EXYNOS4_IRQ_PDMA1}, &exynos_pdma1_pdata);
-
-static u8 mdma_peri[] = {
-       DMACH_MTOM_0,
-       DMACH_MTOM_1,
-       DMACH_MTOM_2,
-       DMACH_MTOM_3,
-       DMACH_MTOM_4,
-       DMACH_MTOM_5,
-       DMACH_MTOM_6,
-       DMACH_MTOM_7,
-};
-
-static struct dma_pl330_platdata exynos_mdma1_pdata = {
-       .nr_valid_peri = ARRAY_SIZE(mdma_peri),
-       .peri_id = mdma_peri,
-};
-
-static AMBA_AHB_DEVICE(exynos_mdma1,  "dma-pl330.2", 0x00041330,
-       EXYNOS4_PA_MDMA1, {EXYNOS4_IRQ_MDMA1}, &exynos_mdma1_pdata);
-
-static int __init exynos_dma_init(void)
-{
-       if (of_have_populated_dt())
-               return 0;
-
-       if (soc_is_exynos4210()) {
-               exynos_pdma0_pdata.nr_valid_peri =
-                       ARRAY_SIZE(exynos4210_pdma0_peri);
-               exynos_pdma0_pdata.peri_id = exynos4210_pdma0_peri;
-               exynos_pdma1_pdata.nr_valid_peri =
-                       ARRAY_SIZE(exynos4210_pdma1_peri);
-               exynos_pdma1_pdata.peri_id = exynos4210_pdma1_peri;
-
-               if (samsung_rev() == EXYNOS4210_REV_0)
-                       exynos_mdma1_device.res.start = EXYNOS4_PA_S_MDMA1;
-       } else if (soc_is_exynos4212() || soc_is_exynos4412()) {
-               exynos_pdma0_pdata.nr_valid_peri =
-                       ARRAY_SIZE(exynos4212_pdma0_peri);
-               exynos_pdma0_pdata.peri_id = exynos4212_pdma0_peri;
-               exynos_pdma1_pdata.nr_valid_peri =
-                       ARRAY_SIZE(exynos4212_pdma1_peri);
-               exynos_pdma1_pdata.peri_id = exynos4212_pdma1_peri;
-       } else if (soc_is_exynos5250()) {
-               exynos_pdma0_pdata.nr_valid_peri =
-                       ARRAY_SIZE(exynos5250_pdma0_peri);
-               exynos_pdma0_pdata.peri_id = exynos5250_pdma0_peri;
-               exynos_pdma1_pdata.nr_valid_peri =
-                       ARRAY_SIZE(exynos5250_pdma1_peri);
-               exynos_pdma1_pdata.peri_id = exynos5250_pdma1_peri;
-
-               exynos_pdma0_device.res.start = EXYNOS5_PA_PDMA0;
-               exynos_pdma0_device.res.end = EXYNOS5_PA_PDMA0 + SZ_4K;
-               exynos_pdma0_device.irq[0] = EXYNOS5_IRQ_PDMA0;
-               exynos_pdma1_device.res.start = EXYNOS5_PA_PDMA1;
-               exynos_pdma1_device.res.end = EXYNOS5_PA_PDMA1 + SZ_4K;
-               exynos_pdma0_device.irq[0] = EXYNOS5_IRQ_PDMA1;
-               exynos_mdma1_device.res.start = EXYNOS5_PA_MDMA1;
-               exynos_mdma1_device.res.end = EXYNOS5_PA_MDMA1 + SZ_4K;
-               exynos_pdma0_device.irq[0] = EXYNOS5_IRQ_MDMA1;
-       }
-
-       dma_cap_set(DMA_SLAVE, exynos_pdma0_pdata.cap_mask);
-       dma_cap_set(DMA_CYCLIC, exynos_pdma0_pdata.cap_mask);
-       dma_cap_set(DMA_PRIVATE, exynos_pdma0_pdata.cap_mask);
-       amba_device_register(&exynos_pdma0_device, &iomem_resource);
-
-       dma_cap_set(DMA_SLAVE, exynos_pdma1_pdata.cap_mask);
-       dma_cap_set(DMA_CYCLIC, exynos_pdma1_pdata.cap_mask);
-       dma_cap_set(DMA_PRIVATE, exynos_pdma1_pdata.cap_mask);
-       amba_device_register(&exynos_pdma1_device, &iomem_resource);
-
-       dma_cap_set(DMA_MEMCPY, exynos_mdma1_pdata.cap_mask);
-       amba_device_register(&exynos_mdma1_device, &iomem_resource);
-
-       return 0;
-}
-arch_initcall(exynos_dma_init);
index ed11f100d479ab26cb7c6e74ef153502a6ab88e6..932129ef26c66054a2bdeecaef9c0af1a9bba788 100644 (file)
@@ -48,20 +48,18 @@ static const struct firmware_ops exynos_firmware_ops = {
 
 void __init exynos_firmware_init(void)
 {
-       if (of_have_populated_dt()) {
-               struct device_node *nd;
-               const __be32 *addr;
+       struct device_node *nd;
+       const __be32 *addr;
 
-               nd = of_find_compatible_node(NULL, NULL,
-                                               "samsung,secure-firmware");
-               if (!nd)
-                       return;
+       nd = of_find_compatible_node(NULL, NULL,
+                                       "samsung,secure-firmware");
+       if (!nd)
+               return;
 
-               addr = of_get_address(nd, 0, NULL, NULL);
-               if (!addr) {
-                       pr_err("%s: No address specified.\n", __func__);
-                       return;
-               }
+       addr = of_get_address(nd, 0, NULL, NULL);
+       if (!addr) {
+               pr_err("%s: No address specified.\n", __func__);
+               return;
        }
 
        pr_info("Running under secure firmware.\n");
diff --git a/arch/arm/mach-exynos/include/mach/gpio.h b/arch/arm/mach-exynos/include/mach/gpio.h
deleted file mode 100644 (file)
index eb24f1e..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * EXYNOS - GPIO lib support
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#ifndef __ASM_ARCH_GPIO_H
-#define __ASM_ARCH_GPIO_H __FILE__
-
-/* Macro for EXYNOS GPIO numbering */
-
-#define EXYNOS_GPIO_NEXT(__gpio) \
-       ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1)
-
-/* EXYNOS4 GPIO bank sizes */
-
-#define EXYNOS4_GPIO_A0_NR     (8)
-#define EXYNOS4_GPIO_A1_NR     (6)
-#define EXYNOS4_GPIO_B_NR      (8)
-#define EXYNOS4_GPIO_C0_NR     (5)
-#define EXYNOS4_GPIO_C1_NR     (5)
-#define EXYNOS4_GPIO_D0_NR     (4)
-#define EXYNOS4_GPIO_D1_NR     (4)
-#define EXYNOS4_GPIO_E0_NR     (5)
-#define EXYNOS4_GPIO_E1_NR     (8)
-#define EXYNOS4_GPIO_E2_NR     (6)
-#define EXYNOS4_GPIO_E3_NR     (8)
-#define EXYNOS4_GPIO_E4_NR     (8)
-#define EXYNOS4_GPIO_F0_NR     (8)
-#define EXYNOS4_GPIO_F1_NR     (8)
-#define EXYNOS4_GPIO_F2_NR     (8)
-#define EXYNOS4_GPIO_F3_NR     (6)
-#define EXYNOS4_GPIO_J0_NR     (8)
-#define EXYNOS4_GPIO_J1_NR     (5)
-#define EXYNOS4_GPIO_K0_NR     (7)
-#define EXYNOS4_GPIO_K1_NR     (7)
-#define EXYNOS4_GPIO_K2_NR     (7)
-#define EXYNOS4_GPIO_K3_NR     (7)
-#define EXYNOS4_GPIO_L0_NR     (8)
-#define EXYNOS4_GPIO_L1_NR     (3)
-#define EXYNOS4_GPIO_L2_NR     (8)
-#define EXYNOS4_GPIO_X0_NR     (8)
-#define EXYNOS4_GPIO_X1_NR     (8)
-#define EXYNOS4_GPIO_X2_NR     (8)
-#define EXYNOS4_GPIO_X3_NR     (8)
-#define EXYNOS4_GPIO_Y0_NR     (6)
-#define EXYNOS4_GPIO_Y1_NR     (4)
-#define EXYNOS4_GPIO_Y2_NR     (6)
-#define EXYNOS4_GPIO_Y3_NR     (8)
-#define EXYNOS4_GPIO_Y4_NR     (8)
-#define EXYNOS4_GPIO_Y5_NR     (8)
-#define EXYNOS4_GPIO_Y6_NR     (8)
-#define EXYNOS4_GPIO_Z_NR      (7)
-
-/* EXYNOS4 GPIO bank numbers */
-
-enum exynos4_gpio_number {
-       EXYNOS4_GPIO_A0_START   = 0,
-       EXYNOS4_GPIO_A1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A0),
-       EXYNOS4_GPIO_B_START    = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A1),
-       EXYNOS4_GPIO_C0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_B),
-       EXYNOS4_GPIO_C1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C0),
-       EXYNOS4_GPIO_D0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C1),
-       EXYNOS4_GPIO_D1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D0),
-       EXYNOS4_GPIO_E0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D1),
-       EXYNOS4_GPIO_E1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E0),
-       EXYNOS4_GPIO_E2_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E1),
-       EXYNOS4_GPIO_E3_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E2),
-       EXYNOS4_GPIO_E4_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E3),
-       EXYNOS4_GPIO_F0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E4),
-       EXYNOS4_GPIO_F1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F0),
-       EXYNOS4_GPIO_F2_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F1),
-       EXYNOS4_GPIO_F3_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F2),
-       EXYNOS4_GPIO_J0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F3),
-       EXYNOS4_GPIO_J1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J0),
-       EXYNOS4_GPIO_K0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J1),
-       EXYNOS4_GPIO_K1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K0),
-       EXYNOS4_GPIO_K2_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K1),
-       EXYNOS4_GPIO_K3_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K2),
-       EXYNOS4_GPIO_L0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K3),
-       EXYNOS4_GPIO_L1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L0),
-       EXYNOS4_GPIO_L2_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L1),
-       EXYNOS4_GPIO_X0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L2),
-       EXYNOS4_GPIO_X1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X0),
-       EXYNOS4_GPIO_X2_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X1),
-       EXYNOS4_GPIO_X3_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X2),
-       EXYNOS4_GPIO_Y0_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X3),
-       EXYNOS4_GPIO_Y1_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y0),
-       EXYNOS4_GPIO_Y2_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y1),
-       EXYNOS4_GPIO_Y3_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y2),
-       EXYNOS4_GPIO_Y4_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y3),
-       EXYNOS4_GPIO_Y5_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y4),
-       EXYNOS4_GPIO_Y6_START   = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y5),
-       EXYNOS4_GPIO_Z_START    = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y6),
-};
-
-/* EXYNOS4 GPIO number definitions */
-
-#define EXYNOS4_GPA0(_nr)      (EXYNOS4_GPIO_A0_START + (_nr))
-#define EXYNOS4_GPA1(_nr)      (EXYNOS4_GPIO_A1_START + (_nr))
-#define EXYNOS4_GPB(_nr)       (EXYNOS4_GPIO_B_START + (_nr))
-#define EXYNOS4_GPC0(_nr)      (EXYNOS4_GPIO_C0_START + (_nr))
-#define EXYNOS4_GPC1(_nr)      (EXYNOS4_GPIO_C1_START + (_nr))
-#define EXYNOS4_GPD0(_nr)      (EXYNOS4_GPIO_D0_START + (_nr))
-#define EXYNOS4_GPD1(_nr)      (EXYNOS4_GPIO_D1_START + (_nr))
-#define EXYNOS4_GPE0(_nr)      (EXYNOS4_GPIO_E0_START + (_nr))
-#define EXYNOS4_GPE1(_nr)      (EXYNOS4_GPIO_E1_START + (_nr))
-#define EXYNOS4_GPE2(_nr)      (EXYNOS4_GPIO_E2_START + (_nr))
-#define EXYNOS4_GPE3(_nr)      (EXYNOS4_GPIO_E3_START + (_nr))
-#define EXYNOS4_GPE4(_nr)      (EXYNOS4_GPIO_E4_START + (_nr))
-#define EXYNOS4_GPF0(_nr)      (EXYNOS4_GPIO_F0_START + (_nr))
-#define EXYNOS4_GPF1(_nr)      (EXYNOS4_GPIO_F1_START + (_nr))
-#define EXYNOS4_GPF2(_nr)      (EXYNOS4_GPIO_F2_START + (_nr))
-#define EXYNOS4_GPF3(_nr)      (EXYNOS4_GPIO_F3_START + (_nr))
-#define EXYNOS4_GPJ0(_nr)      (EXYNOS4_GPIO_J0_START + (_nr))
-#define EXYNOS4_GPJ1(_nr)      (EXYNOS4_GPIO_J1_START + (_nr))
-#define EXYNOS4_GPK0(_nr)      (EXYNOS4_GPIO_K0_START + (_nr))
-#define EXYNOS4_GPK1(_nr)      (EXYNOS4_GPIO_K1_START + (_nr))
-#define EXYNOS4_GPK2(_nr)      (EXYNOS4_GPIO_K2_START + (_nr))
-#define EXYNOS4_GPK3(_nr)      (EXYNOS4_GPIO_K3_START + (_nr))
-#define EXYNOS4_GPL0(_nr)      (EXYNOS4_GPIO_L0_START + (_nr))
-#define EXYNOS4_GPL1(_nr)      (EXYNOS4_GPIO_L1_START + (_nr))
-#define EXYNOS4_GPL2(_nr)      (EXYNOS4_GPIO_L2_START + (_nr))
-#define EXYNOS4_GPX0(_nr)      (EXYNOS4_GPIO_X0_START + (_nr))
-#define EXYNOS4_GPX1(_nr)      (EXYNOS4_GPIO_X1_START + (_nr))
-#define EXYNOS4_GPX2(_nr)      (EXYNOS4_GPIO_X2_START + (_nr))
-#define EXYNOS4_GPX3(_nr)      (EXYNOS4_GPIO_X3_START + (_nr))
-#define EXYNOS4_GPY0(_nr)      (EXYNOS4_GPIO_Y0_START + (_nr))
-#define EXYNOS4_GPY1(_nr)      (EXYNOS4_GPIO_Y1_START + (_nr))
-#define EXYNOS4_GPY2(_nr)      (EXYNOS4_GPIO_Y2_START + (_nr))
-#define EXYNOS4_GPY3(_nr)      (EXYNOS4_GPIO_Y3_START + (_nr))
-#define EXYNOS4_GPY4(_nr)      (EXYNOS4_GPIO_Y4_START + (_nr))
-#define EXYNOS4_GPY5(_nr)      (EXYNOS4_GPIO_Y5_START + (_nr))
-#define EXYNOS4_GPY6(_nr)      (EXYNOS4_GPIO_Y6_START + (_nr))
-#define EXYNOS4_GPZ(_nr)       (EXYNOS4_GPIO_Z_START + (_nr))
-
-/* the end of the EXYNOS4 specific gpios */
-
-#define EXYNOS4_GPIO_END       (EXYNOS4_GPZ(EXYNOS4_GPIO_Z_NR) + 1)
-
-/* EXYNOS5 GPIO bank sizes */
-
-#define EXYNOS5_GPIO_A0_NR     (8)
-#define EXYNOS5_GPIO_A1_NR     (6)
-#define EXYNOS5_GPIO_A2_NR     (8)
-#define EXYNOS5_GPIO_B0_NR     (5)
-#define EXYNOS5_GPIO_B1_NR     (5)
-#define EXYNOS5_GPIO_B2_NR     (4)
-#define EXYNOS5_GPIO_B3_NR     (4)
-#define EXYNOS5_GPIO_C0_NR     (7)
-#define EXYNOS5_GPIO_C1_NR     (4)
-#define EXYNOS5_GPIO_C2_NR     (7)
-#define EXYNOS5_GPIO_C3_NR     (7)
-#define EXYNOS5_GPIO_C4_NR     (7)
-#define EXYNOS5_GPIO_D0_NR     (4)
-#define EXYNOS5_GPIO_D1_NR     (8)
-#define EXYNOS5_GPIO_Y0_NR     (6)
-#define EXYNOS5_GPIO_Y1_NR     (4)
-#define EXYNOS5_GPIO_Y2_NR     (6)
-#define EXYNOS5_GPIO_Y3_NR     (8)
-#define EXYNOS5_GPIO_Y4_NR     (8)
-#define EXYNOS5_GPIO_Y5_NR     (8)
-#define EXYNOS5_GPIO_Y6_NR     (8)
-#define EXYNOS5_GPIO_X0_NR     (8)
-#define EXYNOS5_GPIO_X1_NR     (8)
-#define EXYNOS5_GPIO_X2_NR     (8)
-#define EXYNOS5_GPIO_X3_NR     (8)
-#define EXYNOS5_GPIO_E0_NR     (8)
-#define EXYNOS5_GPIO_E1_NR     (2)
-#define EXYNOS5_GPIO_F0_NR     (4)
-#define EXYNOS5_GPIO_F1_NR     (4)
-#define EXYNOS5_GPIO_G0_NR     (8)
-#define EXYNOS5_GPIO_G1_NR     (8)
-#define EXYNOS5_GPIO_G2_NR     (2)
-#define EXYNOS5_GPIO_H0_NR     (4)
-#define EXYNOS5_GPIO_H1_NR     (8)
-#define EXYNOS5_GPIO_V0_NR     (8)
-#define EXYNOS5_GPIO_V1_NR     (8)
-#define EXYNOS5_GPIO_V2_NR     (8)
-#define EXYNOS5_GPIO_V3_NR     (8)
-#define EXYNOS5_GPIO_V4_NR     (2)
-#define EXYNOS5_GPIO_Z_NR      (7)
-
-/* EXYNOS5 GPIO bank numbers */
-
-enum exynos5_gpio_number {
-       EXYNOS5_GPIO_A0_START           = 0,
-       EXYNOS5_GPIO_A1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A0),
-       EXYNOS5_GPIO_A2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A1),
-       EXYNOS5_GPIO_B0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A2),
-       EXYNOS5_GPIO_B1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B0),
-       EXYNOS5_GPIO_B2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B1),
-       EXYNOS5_GPIO_B3_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B2),
-       EXYNOS5_GPIO_C0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B3),
-       EXYNOS5_GPIO_C1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C0),
-       EXYNOS5_GPIO_C2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C1),
-       EXYNOS5_GPIO_C3_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C2),
-       EXYNOS5_GPIO_C4_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C3),
-       EXYNOS5_GPIO_D0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C4),
-       EXYNOS5_GPIO_D1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_D0),
-       EXYNOS5_GPIO_Y0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_D1),
-       EXYNOS5_GPIO_Y1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y0),
-       EXYNOS5_GPIO_Y2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y1),
-       EXYNOS5_GPIO_Y3_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y2),
-       EXYNOS5_GPIO_Y4_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y3),
-       EXYNOS5_GPIO_Y5_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y4),
-       EXYNOS5_GPIO_Y6_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y5),
-       EXYNOS5_GPIO_X0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y6),
-       EXYNOS5_GPIO_X1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X0),
-       EXYNOS5_GPIO_X2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X1),
-       EXYNOS5_GPIO_X3_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X2),
-       EXYNOS5_GPIO_E0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X3),
-       EXYNOS5_GPIO_E1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_E0),
-       EXYNOS5_GPIO_F0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_E1),
-       EXYNOS5_GPIO_F1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_F0),
-       EXYNOS5_GPIO_G0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_F1),
-       EXYNOS5_GPIO_G1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G0),
-       EXYNOS5_GPIO_G2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G1),
-       EXYNOS5_GPIO_H0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G2),
-       EXYNOS5_GPIO_H1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_H0),
-       EXYNOS5_GPIO_V0_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_H1),
-       EXYNOS5_GPIO_V1_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V0),
-       EXYNOS5_GPIO_V2_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V1),
-       EXYNOS5_GPIO_V3_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V2),
-       EXYNOS5_GPIO_V4_START           = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V3),
-       EXYNOS5_GPIO_Z_START            = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V4),
-};
-
-/* EXYNOS5 GPIO number definitions */
-
-#define EXYNOS5_GPA0(_nr)      (EXYNOS5_GPIO_A0_START + (_nr))
-#define EXYNOS5_GPA1(_nr)      (EXYNOS5_GPIO_A1_START + (_nr))
-#define EXYNOS5_GPA2(_nr)      (EXYNOS5_GPIO_A2_START + (_nr))
-#define EXYNOS5_GPB0(_nr)      (EXYNOS5_GPIO_B0_START + (_nr))
-#define EXYNOS5_GPB1(_nr)      (EXYNOS5_GPIO_B1_START + (_nr))
-#define EXYNOS5_GPB2(_nr)      (EXYNOS5_GPIO_B2_START + (_nr))
-#define EXYNOS5_GPB3(_nr)      (EXYNOS5_GPIO_B3_START + (_nr))
-#define EXYNOS5_GPC0(_nr)      (EXYNOS5_GPIO_C0_START + (_nr))
-#define EXYNOS5_GPC1(_nr)      (EXYNOS5_GPIO_C1_START + (_nr))
-#define EXYNOS5_GPC2(_nr)      (EXYNOS5_GPIO_C2_START + (_nr))
-#define EXYNOS5_GPC3(_nr)      (EXYNOS5_GPIO_C3_START + (_nr))
-#define EXYNOS5_GPC4(_nr)      (EXYNOS5_GPIO_C4_START + (_nr))
-#define EXYNOS5_GPD0(_nr)      (EXYNOS5_GPIO_D0_START + (_nr))
-#define EXYNOS5_GPD1(_nr)      (EXYNOS5_GPIO_D1_START + (_nr))
-#define EXYNOS5_GPY0(_nr)      (EXYNOS5_GPIO_Y0_START + (_nr))
-#define EXYNOS5_GPY1(_nr)      (EXYNOS5_GPIO_Y1_START + (_nr))
-#define EXYNOS5_GPY2(_nr)      (EXYNOS5_GPIO_Y2_START + (_nr))
-#define EXYNOS5_GPY3(_nr)      (EXYNOS5_GPIO_Y3_START + (_nr))
-#define EXYNOS5_GPY4(_nr)      (EXYNOS5_GPIO_Y4_START + (_nr))
-#define EXYNOS5_GPY5(_nr)      (EXYNOS5_GPIO_Y5_START + (_nr))
-#define EXYNOS5_GPY6(_nr)      (EXYNOS5_GPIO_Y6_START + (_nr))
-#define EXYNOS5_GPX0(_nr)      (EXYNOS5_GPIO_X0_START + (_nr))
-#define EXYNOS5_GPX1(_nr)      (EXYNOS5_GPIO_X1_START + (_nr))
-#define EXYNOS5_GPX2(_nr)      (EXYNOS5_GPIO_X2_START + (_nr))
-#define EXYNOS5_GPX3(_nr)      (EXYNOS5_GPIO_X3_START + (_nr))
-#define EXYNOS5_GPE0(_nr)      (EXYNOS5_GPIO_E0_START + (_nr))
-#define EXYNOS5_GPE1(_nr)      (EXYNOS5_GPIO_E1_START + (_nr))
-#define EXYNOS5_GPF0(_nr)      (EXYNOS5_GPIO_F0_START + (_nr))
-#define EXYNOS5_GPF1(_nr)      (EXYNOS5_GPIO_F1_START + (_nr))
-#define EXYNOS5_GPG0(_nr)      (EXYNOS5_GPIO_G0_START + (_nr))
-#define EXYNOS5_GPG1(_nr)      (EXYNOS5_GPIO_G1_START + (_nr))
-#define EXYNOS5_GPG2(_nr)      (EXYNOS5_GPIO_G2_START + (_nr))
-#define EXYNOS5_GPH0(_nr)      (EXYNOS5_GPIO_H0_START + (_nr))
-#define EXYNOS5_GPH1(_nr)      (EXYNOS5_GPIO_H1_START + (_nr))
-#define EXYNOS5_GPV0(_nr)      (EXYNOS5_GPIO_V0_START + (_nr))
-#define EXYNOS5_GPV1(_nr)      (EXYNOS5_GPIO_V1_START + (_nr))
-#define EXYNOS5_GPV2(_nr)      (EXYNOS5_GPIO_V2_START + (_nr))
-#define EXYNOS5_GPV3(_nr)      (EXYNOS5_GPIO_V3_START + (_nr))
-#define EXYNOS5_GPV4(_nr)      (EXYNOS5_GPIO_V4_START + (_nr))
-#define EXYNOS5_GPZ(_nr)       (EXYNOS5_GPIO_Z_START + (_nr))
-
-/* the end of the EXYNOS5 specific gpios */
-
-#define EXYNOS5_GPIO_END       (EXYNOS5_GPZ(EXYNOS5_GPIO_Z_NR) + 1)
-
-/* actually, EXYNOS5_GPIO_END is bigger than EXYNOS4 */
-
-#define S3C_GPIO_END           (EXYNOS5_GPIO_END)
-
-/* define the number of gpios */
-
-#define ARCH_NR_GPIOS          (CONFIG_SAMSUNG_GPIO_EXTRA + S3C_GPIO_END)
-
-#endif /* __ASM_ARCH_GPIO_H */
diff --git a/arch/arm/mach-exynos/include/mach/irqs.h b/arch/arm/mach-exynos/include/mach/irqs.h
deleted file mode 100644 (file)
index c72f59d..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * EXYNOS - IRQ definitions
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#ifndef __ASM_ARCH_IRQS_H
-#define __ASM_ARCH_IRQS_H __FILE__
-
-#include <plat/irqs.h>
-
-/* PPI: Private Peripheral Interrupt */
-
-#define IRQ_PPI(x)                     (x + 16)
-
-/* SPI: Shared Peripheral Interrupt */
-
-#define IRQ_SPI(x)                     (x + 32)
-
-/* COMBINER */
-
-#define MAX_IRQ_IN_COMBINER            8
-#define COMBINER_GROUP(x)              ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(128))
-#define COMBINER_IRQ(x, y)             (COMBINER_GROUP(x) + y)
-
-/* For EXYNOS4 and EXYNOS5 */
-
-#define EXYNOS_IRQ_EINT16_31           IRQ_SPI(32)
-
-/* For EXYNOS4 SoCs */
-
-#define EXYNOS4_IRQ_EINT0              IRQ_SPI(16)
-#define EXYNOS4_IRQ_EINT1              IRQ_SPI(17)
-#define EXYNOS4_IRQ_EINT2              IRQ_SPI(18)
-#define EXYNOS4_IRQ_EINT3              IRQ_SPI(19)
-#define EXYNOS4_IRQ_EINT4              IRQ_SPI(20)
-#define EXYNOS4_IRQ_EINT5              IRQ_SPI(21)
-#define EXYNOS4_IRQ_EINT6              IRQ_SPI(22)
-#define EXYNOS4_IRQ_EINT7              IRQ_SPI(23)
-#define EXYNOS4_IRQ_EINT8              IRQ_SPI(24)
-#define EXYNOS4_IRQ_EINT9              IRQ_SPI(25)
-#define EXYNOS4_IRQ_EINT10             IRQ_SPI(26)
-#define EXYNOS4_IRQ_EINT11             IRQ_SPI(27)
-#define EXYNOS4_IRQ_EINT12             IRQ_SPI(28)
-#define EXYNOS4_IRQ_EINT13             IRQ_SPI(29)
-#define EXYNOS4_IRQ_EINT14             IRQ_SPI(30)
-#define EXYNOS4_IRQ_EINT15             IRQ_SPI(31)
-
-#define EXYNOS4_IRQ_MDMA0              IRQ_SPI(33)
-#define EXYNOS4_IRQ_MDMA1              IRQ_SPI(34)
-#define EXYNOS4_IRQ_PDMA0              IRQ_SPI(35)
-#define EXYNOS4_IRQ_PDMA1              IRQ_SPI(36)
-#define EXYNOS4_IRQ_TIMER0_VIC         IRQ_SPI(37)
-#define EXYNOS4_IRQ_TIMER1_VIC         IRQ_SPI(38)
-#define EXYNOS4_IRQ_TIMER2_VIC         IRQ_SPI(39)
-#define EXYNOS4_IRQ_TIMER3_VIC         IRQ_SPI(40)
-#define EXYNOS4_IRQ_TIMER4_VIC         IRQ_SPI(41)
-#define EXYNOS4_IRQ_MCT_L0             IRQ_SPI(42)
-#define EXYNOS4_IRQ_WDT                        IRQ_SPI(43)
-#define EXYNOS4_IRQ_RTC_ALARM          IRQ_SPI(44)
-#define EXYNOS4_IRQ_RTC_TIC            IRQ_SPI(45)
-#define EXYNOS4_IRQ_GPIO_XB            IRQ_SPI(46)
-#define EXYNOS4_IRQ_GPIO_XA            IRQ_SPI(47)
-#define EXYNOS4_IRQ_MCT_L1             IRQ_SPI(48)
-
-#define EXYNOS4_IRQ_UART0              IRQ_SPI(52)
-#define EXYNOS4_IRQ_UART1              IRQ_SPI(53)
-#define EXYNOS4_IRQ_UART2              IRQ_SPI(54)
-#define EXYNOS4_IRQ_UART3              IRQ_SPI(55)
-#define EXYNOS4_IRQ_UART4              IRQ_SPI(56)
-#define EXYNOS4_IRQ_MCT_G0             IRQ_SPI(57)
-#define EXYNOS4_IRQ_IIC                        IRQ_SPI(58)
-#define EXYNOS4_IRQ_IIC1               IRQ_SPI(59)
-#define EXYNOS4_IRQ_IIC2               IRQ_SPI(60)
-#define EXYNOS4_IRQ_IIC3               IRQ_SPI(61)
-#define EXYNOS4_IRQ_IIC4               IRQ_SPI(62)
-#define EXYNOS4_IRQ_IIC5               IRQ_SPI(63)
-#define EXYNOS4_IRQ_IIC6               IRQ_SPI(64)
-#define EXYNOS4_IRQ_IIC7               IRQ_SPI(65)
-#define EXYNOS4_IRQ_SPI0               IRQ_SPI(66)
-#define EXYNOS4_IRQ_SPI1               IRQ_SPI(67)
-#define EXYNOS4_IRQ_SPI2               IRQ_SPI(68)
-
-#define EXYNOS4_IRQ_USB_HOST           IRQ_SPI(70)
-#define EXYNOS4_IRQ_USB_HSOTG          IRQ_SPI(71)
-#define EXYNOS4_IRQ_MODEM_IF           IRQ_SPI(72)
-#define EXYNOS4_IRQ_HSMMC0             IRQ_SPI(73)
-#define EXYNOS4_IRQ_HSMMC1             IRQ_SPI(74)
-#define EXYNOS4_IRQ_HSMMC2             IRQ_SPI(75)
-#define EXYNOS4_IRQ_HSMMC3             IRQ_SPI(76)
-#define EXYNOS4_IRQ_DWMCI              IRQ_SPI(77)
-
-#define EXYNOS4_IRQ_MIPI_CSIS0         IRQ_SPI(78)
-#define EXYNOS4_IRQ_MIPI_CSIS1         IRQ_SPI(80)
-
-#define EXYNOS4_IRQ_ONENAND_AUDI       IRQ_SPI(82)
-#define EXYNOS4_IRQ_ROTATOR            IRQ_SPI(83)
-#define EXYNOS4_IRQ_FIMC0              IRQ_SPI(84)
-#define EXYNOS4_IRQ_FIMC1              IRQ_SPI(85)
-#define EXYNOS4_IRQ_FIMC2              IRQ_SPI(86)
-#define EXYNOS4_IRQ_FIMC3              IRQ_SPI(87)
-#define EXYNOS4_IRQ_JPEG               IRQ_SPI(88)
-#define EXYNOS4_IRQ_2D                 IRQ_SPI(89)
-#define EXYNOS4_IRQ_PCIE               IRQ_SPI(90)
-
-#define EXYNOS4_IRQ_MIXER              IRQ_SPI(91)
-#define EXYNOS4_IRQ_HDMI               IRQ_SPI(92)
-#define EXYNOS4_IRQ_IIC_HDMIPHY                IRQ_SPI(93)
-#define EXYNOS4_IRQ_MFC                        IRQ_SPI(94)
-#define EXYNOS4_IRQ_SDO                        IRQ_SPI(95)
-
-#define EXYNOS4_IRQ_AUDIO_SS           IRQ_SPI(96)
-#define EXYNOS4_IRQ_I2S0               IRQ_SPI(97)
-#define EXYNOS4_IRQ_I2S1               IRQ_SPI(98)
-#define EXYNOS4_IRQ_I2S2               IRQ_SPI(99)
-#define EXYNOS4_IRQ_AC97               IRQ_SPI(100)
-
-#define EXYNOS4_IRQ_SPDIF              IRQ_SPI(104)
-#define EXYNOS4_IRQ_ADC0               IRQ_SPI(105)
-#define EXYNOS4_IRQ_PEN0               IRQ_SPI(106)
-#define EXYNOS4_IRQ_ADC1               IRQ_SPI(107)
-#define EXYNOS4_IRQ_PEN1               IRQ_SPI(108)
-#define EXYNOS4_IRQ_KEYPAD             IRQ_SPI(109)
-#define EXYNOS4_IRQ_POWER_PMU          IRQ_SPI(110)
-#define EXYNOS4_IRQ_GPS                        IRQ_SPI(111)
-#define EXYNOS4_IRQ_INTFEEDCTRL_SSS    IRQ_SPI(112)
-#define EXYNOS4_IRQ_SLIMBUS            IRQ_SPI(113)
-
-#define EXYNOS4_IRQ_TSI                        IRQ_SPI(115)
-#define EXYNOS4_IRQ_SATA               IRQ_SPI(116)
-
-#define EXYNOS4_IRQ_PMU                        COMBINER_IRQ(2, 2)
-#define EXYNOS4_IRQ_PMU_CPU1           COMBINER_IRQ(3, 2)
-#define EXYNOS4_IRQ_PMU_CPU2           COMBINER_IRQ(18, 2)
-#define EXYNOS4_IRQ_PMU_CPU3           COMBINER_IRQ(19, 2)
-
-#define EXYNOS4_IRQ_TMU_TRIG0          COMBINER_IRQ(2, 4)
-#define EXYNOS4_IRQ_TMU_TRIG1          COMBINER_IRQ(3, 4)
-
-#define EXYNOS4_IRQ_SYSMMU_MDMA0_0     COMBINER_IRQ(4, 0)
-#define EXYNOS4_IRQ_SYSMMU_SSS_0       COMBINER_IRQ(4, 1)
-#define EXYNOS4_IRQ_SYSMMU_FIMC0_0     COMBINER_IRQ(4, 2)
-#define EXYNOS4_IRQ_SYSMMU_FIMC1_0     COMBINER_IRQ(4, 3)
-#define EXYNOS4_IRQ_SYSMMU_FIMC2_0     COMBINER_IRQ(4, 4)
-#define EXYNOS4_IRQ_SYSMMU_FIMC3_0     COMBINER_IRQ(4, 5)
-#define EXYNOS4_IRQ_SYSMMU_JPEG_0      COMBINER_IRQ(4, 6)
-#define EXYNOS4_IRQ_SYSMMU_2D_0                COMBINER_IRQ(4, 7)
-
-#define EXYNOS4_IRQ_SYSMMU_ROTATOR_0   COMBINER_IRQ(5, 0)
-#define EXYNOS4_IRQ_SYSMMU_MDMA1_0     COMBINER_IRQ(5, 1)
-#define EXYNOS4_IRQ_SYSMMU_LCD0_M0_0   COMBINER_IRQ(5, 2)
-#define EXYNOS4_IRQ_SYSMMU_LCD1_M1_0   COMBINER_IRQ(5, 3)
-#define EXYNOS4_IRQ_SYSMMU_TV_M0_0     COMBINER_IRQ(5, 4)
-#define EXYNOS4_IRQ_SYSMMU_MFC_M0_0    COMBINER_IRQ(5, 5)
-#define EXYNOS4_IRQ_SYSMMU_MFC_M1_0    COMBINER_IRQ(5, 6)
-#define EXYNOS4_IRQ_SYSMMU_PCIE_0      COMBINER_IRQ(5, 7)
-
-#define EXYNOS4_IRQ_SYSMMU_FIMC_LITE0_0        COMBINER_IRQ(16, 0)
-#define EXYNOS4_IRQ_SYSMMU_FIMC_LITE1_0        COMBINER_IRQ(16, 1)
-#define EXYNOS4_IRQ_SYSMMU_FIMC_ISP_0  COMBINER_IRQ(16, 2)
-#define EXYNOS4_IRQ_SYSMMU_FIMC_DRC_0  COMBINER_IRQ(16, 3)
-#define EXYNOS4_IRQ_SYSMMU_FIMC_FD_0   COMBINER_IRQ(16, 4)
-#define EXYNOS4_IRQ_SYSMMU_FIMC_CX_0   COMBINER_IRQ(16, 5)
-
-#define EXYNOS4_IRQ_FIMD0_FIFO         COMBINER_IRQ(11, 0)
-#define EXYNOS4_IRQ_FIMD0_VSYNC                COMBINER_IRQ(11, 1)
-#define EXYNOS4_IRQ_FIMD0_SYSTEM       COMBINER_IRQ(11, 2)
-
-#define EXYNOS4210_MAX_COMBINER_NR     16
-#define EXYNOS4212_MAX_COMBINER_NR     18
-#define EXYNOS4412_MAX_COMBINER_NR     20
-#define EXYNOS4_MAX_COMBINER_NR                EXYNOS4412_MAX_COMBINER_NR
-
-#define EXYNOS4_IRQ_GPIO1_NR_GROUPS    16
-#define EXYNOS4_IRQ_GPIO2_NR_GROUPS    9
-
-/*
- * For Compatibility:
- * the default is for EXYNOS4, and
- * for exynos5, should be re-mapped at function
- */
-
-#define IRQ_TIMER0_VIC                 EXYNOS4_IRQ_TIMER0_VIC
-#define IRQ_TIMER1_VIC                 EXYNOS4_IRQ_TIMER1_VIC
-#define IRQ_TIMER2_VIC                 EXYNOS4_IRQ_TIMER2_VIC
-#define IRQ_TIMER3_VIC                 EXYNOS4_IRQ_TIMER3_VIC
-#define IRQ_TIMER4_VIC                 EXYNOS4_IRQ_TIMER4_VIC
-
-#define IRQ_WDT                                EXYNOS4_IRQ_WDT
-#define IRQ_RTC_ALARM                  EXYNOS4_IRQ_RTC_ALARM
-#define IRQ_RTC_TIC                    EXYNOS4_IRQ_RTC_TIC
-#define IRQ_GPIO_XB                    EXYNOS4_IRQ_GPIO_XB
-#define IRQ_GPIO_XA                    EXYNOS4_IRQ_GPIO_XA
-
-#define IRQ_IIC                                EXYNOS4_IRQ_IIC
-#define IRQ_IIC1                       EXYNOS4_IRQ_IIC1
-#define IRQ_IIC3                       EXYNOS4_IRQ_IIC3
-#define IRQ_IIC5                       EXYNOS4_IRQ_IIC5
-#define IRQ_IIC6                       EXYNOS4_IRQ_IIC6
-#define IRQ_IIC7                       EXYNOS4_IRQ_IIC7
-
-#define IRQ_SPI0                       EXYNOS4_IRQ_SPI0
-#define IRQ_SPI1                       EXYNOS4_IRQ_SPI1
-#define IRQ_SPI2                       EXYNOS4_IRQ_SPI2
-
-#define IRQ_USB_HOST                   EXYNOS4_IRQ_USB_HOST
-#define IRQ_OTG                                EXYNOS4_IRQ_USB_HSOTG
-
-#define IRQ_HSMMC0                     EXYNOS4_IRQ_HSMMC0
-#define IRQ_HSMMC1                     EXYNOS4_IRQ_HSMMC1
-#define IRQ_HSMMC2                     EXYNOS4_IRQ_HSMMC2
-#define IRQ_HSMMC3                     EXYNOS4_IRQ_HSMMC3
-
-#define IRQ_MIPI_CSIS0                 EXYNOS4_IRQ_MIPI_CSIS0
-
-#define IRQ_ONENAND_AUDI               EXYNOS4_IRQ_ONENAND_AUDI
-
-#define IRQ_FIMC0                      EXYNOS4_IRQ_FIMC0
-#define IRQ_FIMC1                      EXYNOS4_IRQ_FIMC1
-#define IRQ_FIMC2                      EXYNOS4_IRQ_FIMC2
-#define IRQ_FIMC3                      EXYNOS4_IRQ_FIMC3
-#define IRQ_JPEG                       EXYNOS4_IRQ_JPEG
-#define IRQ_2D                         EXYNOS4_IRQ_2D
-
-#define IRQ_MIXER                      EXYNOS4_IRQ_MIXER
-#define IRQ_HDMI                       EXYNOS4_IRQ_HDMI
-#define IRQ_IIC_HDMIPHY                        EXYNOS4_IRQ_IIC_HDMIPHY
-#define IRQ_MFC                                EXYNOS4_IRQ_MFC
-#define IRQ_SDO                                EXYNOS4_IRQ_SDO
-
-#define IRQ_I2S0                       EXYNOS4_IRQ_I2S0
-
-#define IRQ_ADC                                EXYNOS4_IRQ_ADC0
-#define IRQ_TC                         EXYNOS4_IRQ_PEN0
-
-#define IRQ_KEYPAD                     EXYNOS4_IRQ_KEYPAD
-
-#define IRQ_FIMD0_FIFO                 EXYNOS4_IRQ_FIMD0_FIFO
-#define IRQ_FIMD0_VSYNC                        EXYNOS4_IRQ_FIMD0_VSYNC
-#define IRQ_FIMD0_SYSTEM               EXYNOS4_IRQ_FIMD0_SYSTEM
-
-#define IRQ_GPIO1_NR_GROUPS            EXYNOS4_IRQ_GPIO1_NR_GROUPS
-#define IRQ_GPIO2_NR_GROUPS            EXYNOS4_IRQ_GPIO2_NR_GROUPS
-
-/* For EXYNOS5 SoCs */
-
-#define EXYNOS5_IRQ_MDMA0              IRQ_SPI(33)
-#define EXYNOS5_IRQ_PDMA0              IRQ_SPI(34)
-#define EXYNOS5_IRQ_PDMA1              IRQ_SPI(35)
-#define EXYNOS5_IRQ_TIMER0_VIC         IRQ_SPI(36)
-#define EXYNOS5_IRQ_TIMER1_VIC         IRQ_SPI(37)
-#define EXYNOS5_IRQ_TIMER2_VIC         IRQ_SPI(38)
-#define EXYNOS5_IRQ_TIMER3_VIC         IRQ_SPI(39)
-#define EXYNOS5_IRQ_TIMER4_VIC         IRQ_SPI(40)
-#define EXYNOS5_IRQ_RTIC               IRQ_SPI(41)
-#define EXYNOS5_IRQ_WDT                        IRQ_SPI(42)
-#define EXYNOS5_IRQ_RTC_ALARM          IRQ_SPI(43)
-#define EXYNOS5_IRQ_RTC_TIC            IRQ_SPI(44)
-#define EXYNOS5_IRQ_GPIO_XB            IRQ_SPI(45)
-#define EXYNOS5_IRQ_GPIO_XA            IRQ_SPI(46)
-#define EXYNOS5_IRQ_GPIO               IRQ_SPI(47)
-#define EXYNOS5_IRQ_IEM_IEC            IRQ_SPI(48)
-#define EXYNOS5_IRQ_IEM_APC            IRQ_SPI(49)
-#define EXYNOS5_IRQ_GPIO_C2C           IRQ_SPI(50)
-#define EXYNOS5_IRQ_IIC                        IRQ_SPI(56)
-#define EXYNOS5_IRQ_IIC1               IRQ_SPI(57)
-#define EXYNOS5_IRQ_IIC2               IRQ_SPI(58)
-#define EXYNOS5_IRQ_IIC3               IRQ_SPI(59)
-#define EXYNOS5_IRQ_IIC4               IRQ_SPI(60)
-#define EXYNOS5_IRQ_IIC5               IRQ_SPI(61)
-#define EXYNOS5_IRQ_IIC6               IRQ_SPI(62)
-#define EXYNOS5_IRQ_IIC7               IRQ_SPI(63)
-#define EXYNOS5_IRQ_IIC_HDMIPHY                IRQ_SPI(64)
-#define EXYNOS5_IRQ_TMU                        IRQ_SPI(65)
-#define EXYNOS5_IRQ_FIQ_0              IRQ_SPI(66)
-#define EXYNOS5_IRQ_FIQ_1              IRQ_SPI(67)
-#define EXYNOS5_IRQ_SPI0               IRQ_SPI(68)
-#define EXYNOS5_IRQ_SPI1               IRQ_SPI(69)
-#define EXYNOS5_IRQ_SPI2               IRQ_SPI(70)
-#define EXYNOS5_IRQ_USB_HOST           IRQ_SPI(71)
-#define EXYNOS5_IRQ_USB3_DRD           IRQ_SPI(72)
-#define EXYNOS5_IRQ_MIPI_HSI           IRQ_SPI(73)
-#define EXYNOS5_IRQ_USB_HSOTG          IRQ_SPI(74)
-#define EXYNOS5_IRQ_HSMMC0             IRQ_SPI(75)
-#define EXYNOS5_IRQ_HSMMC1             IRQ_SPI(76)
-#define EXYNOS5_IRQ_HSMMC2             IRQ_SPI(77)
-#define EXYNOS5_IRQ_HSMMC3             IRQ_SPI(78)
-#define EXYNOS5_IRQ_MIPICSI0           IRQ_SPI(79)
-#define EXYNOS5_IRQ_MIPICSI1           IRQ_SPI(80)
-#define EXYNOS5_IRQ_EFNFCON_DMA_ABORT  IRQ_SPI(81)
-#define EXYNOS5_IRQ_MIPIDSI0           IRQ_SPI(82)
-#define EXYNOS5_IRQ_WDT_IOP            IRQ_SPI(83)
-#define EXYNOS5_IRQ_ROTATOR            IRQ_SPI(84)
-#define EXYNOS5_IRQ_GSC0               IRQ_SPI(85)
-#define EXYNOS5_IRQ_GSC1               IRQ_SPI(86)
-#define EXYNOS5_IRQ_GSC2               IRQ_SPI(87)
-#define EXYNOS5_IRQ_GSC3               IRQ_SPI(88)
-#define EXYNOS5_IRQ_JPEG               IRQ_SPI(89)
-#define EXYNOS5_IRQ_EFNFCON_DMA                IRQ_SPI(90)
-#define EXYNOS5_IRQ_2D                 IRQ_SPI(91)
-#define EXYNOS5_IRQ_EFNFCON_0          IRQ_SPI(92)
-#define EXYNOS5_IRQ_EFNFCON_1          IRQ_SPI(93)
-#define EXYNOS5_IRQ_MIXER              IRQ_SPI(94)
-#define EXYNOS5_IRQ_HDMI               IRQ_SPI(95)
-#define EXYNOS5_IRQ_MFC                        IRQ_SPI(96)
-#define EXYNOS5_IRQ_AUDIO_SS           IRQ_SPI(97)
-#define EXYNOS5_IRQ_I2S0               IRQ_SPI(98)
-#define EXYNOS5_IRQ_I2S1               IRQ_SPI(99)
-#define EXYNOS5_IRQ_I2S2               IRQ_SPI(100)
-#define EXYNOS5_IRQ_AC97               IRQ_SPI(101)
-#define EXYNOS5_IRQ_PCM0               IRQ_SPI(102)
-#define EXYNOS5_IRQ_PCM1               IRQ_SPI(103)
-#define EXYNOS5_IRQ_PCM2               IRQ_SPI(104)
-#define EXYNOS5_IRQ_SPDIF              IRQ_SPI(105)
-#define EXYNOS5_IRQ_ADC0               IRQ_SPI(106)
-#define EXYNOS5_IRQ_ADC1               IRQ_SPI(107)
-#define EXYNOS5_IRQ_SATA_PHY           IRQ_SPI(108)
-#define EXYNOS5_IRQ_SATA_PMEMREQ       IRQ_SPI(109)
-#define EXYNOS5_IRQ_CAM_C              IRQ_SPI(110)
-#define EXYNOS5_IRQ_EAGLE_PMU          IRQ_SPI(111)
-#define EXYNOS5_IRQ_INTFEEDCTRL_SSS    IRQ_SPI(112)
-#define EXYNOS5_IRQ_DP1_INTP1          IRQ_SPI(113)
-#define EXYNOS5_IRQ_CEC                        IRQ_SPI(114)
-#define EXYNOS5_IRQ_SATA               IRQ_SPI(115)
-
-#define EXYNOS5_IRQ_MMC44              IRQ_SPI(123)
-#define EXYNOS5_IRQ_MDMA1              IRQ_SPI(124)
-#define EXYNOS5_IRQ_FIMC_LITE0         IRQ_SPI(125)
-#define EXYNOS5_IRQ_FIMC_LITE1         IRQ_SPI(126)
-#define EXYNOS5_IRQ_RP_TIMER           IRQ_SPI(127)
-
-/* EXYNOS5440 */
-
-#define EXYNOS5440_IRQ_UART0           IRQ_SPI(2)
-#define EXYNOS5440_IRQ_UART1           IRQ_SPI(3)
-
-#define EXYNOS5_IRQ_PMU                        COMBINER_IRQ(1, 2)
-
-#define EXYNOS5_IRQ_SYSMMU_GSC0_0      COMBINER_IRQ(2, 0)
-#define EXYNOS5_IRQ_SYSMMU_GSC0_1      COMBINER_IRQ(2, 1)
-#define EXYNOS5_IRQ_SYSMMU_GSC1_0      COMBINER_IRQ(2, 2)
-#define EXYNOS5_IRQ_SYSMMU_GSC1_1      COMBINER_IRQ(2, 3)
-#define EXYNOS5_IRQ_SYSMMU_GSC2_0      COMBINER_IRQ(2, 4)
-#define EXYNOS5_IRQ_SYSMMU_GSC2_1      COMBINER_IRQ(2, 5)
-#define EXYNOS5_IRQ_SYSMMU_GSC3_0      COMBINER_IRQ(2, 6)
-#define EXYNOS5_IRQ_SYSMMU_GSC3_1      COMBINER_IRQ(2, 7)
-
-#define EXYNOS5_IRQ_SYSMMU_LITE2_0     COMBINER_IRQ(3, 0)
-#define EXYNOS5_IRQ_SYSMMU_LITE2_1     COMBINER_IRQ(3, 1)
-#define EXYNOS5_IRQ_SYSMMU_FIMD1_0     COMBINER_IRQ(3, 2)
-#define EXYNOS5_IRQ_SYSMMU_FIMD1_1     COMBINER_IRQ(3, 3)
-#define EXYNOS5_IRQ_SYSMMU_LITE0_0     COMBINER_IRQ(3, 4)
-#define EXYNOS5_IRQ_SYSMMU_LITE0_1     COMBINER_IRQ(3, 5)
-#define EXYNOS5_IRQ_SYSMMU_SCALERPISP_0        COMBINER_IRQ(3, 6)
-#define EXYNOS5_IRQ_SYSMMU_SCALERPISP_1        COMBINER_IRQ(3, 7)
-
-#define EXYNOS5_IRQ_SYSMMU_ROTATOR_0   COMBINER_IRQ(4, 0)
-#define EXYNOS5_IRQ_SYSMMU_ROTATOR_1   COMBINER_IRQ(4, 1)
-#define EXYNOS5_IRQ_SYSMMU_JPEG_0      COMBINER_IRQ(4, 2)
-#define EXYNOS5_IRQ_SYSMMU_JPEG_1      COMBINER_IRQ(4, 3)
-
-#define EXYNOS5_IRQ_SYSMMU_FD_0                COMBINER_IRQ(5, 0)
-#define EXYNOS5_IRQ_SYSMMU_FD_1                COMBINER_IRQ(5, 1)
-#define EXYNOS5_IRQ_SYSMMU_SCALERCISP_0        COMBINER_IRQ(5, 2)
-#define EXYNOS5_IRQ_SYSMMU_SCALERCISP_1        COMBINER_IRQ(5, 3)
-#define EXYNOS5_IRQ_SYSMMU_MCUISP_0    COMBINER_IRQ(5, 4)
-#define EXYNOS5_IRQ_SYSMMU_MCUISP_1    COMBINER_IRQ(5, 5)
-#define EXYNOS5_IRQ_SYSMMU_3DNR_0      COMBINER_IRQ(5, 6)
-#define EXYNOS5_IRQ_SYSMMU_3DNR_1      COMBINER_IRQ(5, 7)
-
-#define EXYNOS5_IRQ_SYSMMU_ARM_0       COMBINER_IRQ(6, 0)
-#define EXYNOS5_IRQ_SYSMMU_ARM_1       COMBINER_IRQ(6, 1)
-#define EXYNOS5_IRQ_SYSMMU_MFC_R_0     COMBINER_IRQ(6, 2)
-#define EXYNOS5_IRQ_SYSMMU_MFC_R_1     COMBINER_IRQ(6, 3)
-#define EXYNOS5_IRQ_SYSMMU_RTIC_0      COMBINER_IRQ(6, 4)
-#define EXYNOS5_IRQ_SYSMMU_RTIC_1      COMBINER_IRQ(6, 5)
-#define EXYNOS5_IRQ_SYSMMU_SSS_0       COMBINER_IRQ(6, 6)
-#define EXYNOS5_IRQ_SYSMMU_SSS_1       COMBINER_IRQ(6, 7)
-
-#define EXYNOS5_IRQ_SYSMMU_MDMA0_0     COMBINER_IRQ(7, 0)
-#define EXYNOS5_IRQ_SYSMMU_MDMA0_1     COMBINER_IRQ(7, 1)
-#define EXYNOS5_IRQ_SYSMMU_MDMA1_0     COMBINER_IRQ(7, 2)
-#define EXYNOS5_IRQ_SYSMMU_MDMA1_1     COMBINER_IRQ(7, 3)
-#define EXYNOS5_IRQ_SYSMMU_TV_0                COMBINER_IRQ(7, 4)
-#define EXYNOS5_IRQ_SYSMMU_TV_1                COMBINER_IRQ(7, 5)
-
-#define EXYNOS5_IRQ_SYSMMU_MFC_L_0     COMBINER_IRQ(8, 5)
-#define EXYNOS5_IRQ_SYSMMU_MFC_L_1     COMBINER_IRQ(8, 6)
-
-#define EXYNOS5_IRQ_SYSMMU_DIS1_0      COMBINER_IRQ(9, 4)
-#define EXYNOS5_IRQ_SYSMMU_DIS1_1      COMBINER_IRQ(9, 5)
-
-#define EXYNOS5_IRQ_DP                 COMBINER_IRQ(10, 3)
-#define EXYNOS5_IRQ_SYSMMU_DIS0_0      COMBINER_IRQ(10, 4)
-#define EXYNOS5_IRQ_SYSMMU_DIS0_1      COMBINER_IRQ(10, 5)
-#define EXYNOS5_IRQ_SYSMMU_ISP_0       COMBINER_IRQ(10, 6)
-#define EXYNOS5_IRQ_SYSMMU_ISP_1       COMBINER_IRQ(10, 7)
-
-#define EXYNOS5_IRQ_SYSMMU_ODC_0       COMBINER_IRQ(11, 0)
-#define EXYNOS5_IRQ_SYSMMU_ODC_1       COMBINER_IRQ(11, 1)
-#define EXYNOS5_IRQ_SYSMMU_DRC_0       COMBINER_IRQ(11, 6)
-#define EXYNOS5_IRQ_SYSMMU_DRC_1       COMBINER_IRQ(11, 7)
-
-#define EXYNOS5_IRQ_MDMA1_ABORT                COMBINER_IRQ(13, 1)
-
-#define EXYNOS5_IRQ_MDMA0_ABORT                COMBINER_IRQ(15, 3)
-
-#define EXYNOS5_IRQ_FIMD1_FIFO         COMBINER_IRQ(18, 4)
-#define EXYNOS5_IRQ_FIMD1_VSYNC                COMBINER_IRQ(18, 5)
-#define EXYNOS5_IRQ_FIMD1_SYSTEM       COMBINER_IRQ(18, 6)
-
-#define EXYNOS5_IRQ_ARMIOP_GIC         COMBINER_IRQ(19, 0)
-#define EXYNOS5_IRQ_ARMISP_GIC         COMBINER_IRQ(19, 1)
-#define EXYNOS5_IRQ_IOP_GIC            COMBINER_IRQ(19, 3)
-#define EXYNOS5_IRQ_ISP_GIC            COMBINER_IRQ(19, 4)
-
-#define EXYNOS5_IRQ_PMU_CPU1           COMBINER_IRQ(22, 4)
-
-#define EXYNOS5_IRQ_EINT0              COMBINER_IRQ(23, 0)
-
-#define EXYNOS5_IRQ_EINT1              COMBINER_IRQ(24, 0)
-#define EXYNOS5_IRQ_SYSMMU_LITE1_0     COMBINER_IRQ(24, 1)
-#define EXYNOS5_IRQ_SYSMMU_LITE1_1     COMBINER_IRQ(24, 2)
-#define EXYNOS5_IRQ_SYSMMU_2D_0                COMBINER_IRQ(24, 5)
-#define EXYNOS5_IRQ_SYSMMU_2D_1                COMBINER_IRQ(24, 6)
-
-#define EXYNOS5_IRQ_EINT2              COMBINER_IRQ(25, 0)
-#define EXYNOS5_IRQ_EINT3              COMBINER_IRQ(25, 1)
-
-#define EXYNOS5_IRQ_EINT4              COMBINER_IRQ(26, 0)
-#define EXYNOS5_IRQ_EINT5              COMBINER_IRQ(26, 1)
-
-#define EXYNOS5_IRQ_EINT6              COMBINER_IRQ(27, 0)
-#define EXYNOS5_IRQ_EINT7              COMBINER_IRQ(27, 1)
-
-#define EXYNOS5_IRQ_EINT8              COMBINER_IRQ(28, 0)
-#define EXYNOS5_IRQ_EINT9              COMBINER_IRQ(28, 1)
-
-#define EXYNOS5_IRQ_EINT10             COMBINER_IRQ(29, 0)
-#define EXYNOS5_IRQ_EINT11             COMBINER_IRQ(29, 1)
-
-#define EXYNOS5_IRQ_EINT12             COMBINER_IRQ(30, 0)
-#define EXYNOS5_IRQ_EINT13             COMBINER_IRQ(30, 1)
-
-#define EXYNOS5_IRQ_EINT14             COMBINER_IRQ(31, 0)
-#define EXYNOS5_IRQ_EINT15             COMBINER_IRQ(31, 1)
-
-#define EXYNOS5_MAX_COMBINER_NR                32
-
-#define EXYNOS5_IRQ_GPIO1_NR_GROUPS    14
-#define EXYNOS5_IRQ_GPIO2_NR_GROUPS    9
-#define EXYNOS5_IRQ_GPIO3_NR_GROUPS    5
-#define EXYNOS5_IRQ_GPIO4_NR_GROUPS    1
-
-#define MAX_COMBINER_NR                        (EXYNOS4_MAX_COMBINER_NR > EXYNOS5_MAX_COMBINER_NR ? \
-                                       EXYNOS4_MAX_COMBINER_NR : EXYNOS5_MAX_COMBINER_NR)
-
-#define S5P_EINT_BASE1                 COMBINER_IRQ(MAX_COMBINER_NR, 0)
-#define S5P_EINT_BASE2                 (S5P_EINT_BASE1 + 16)
-#define S5P_GPIOINT_BASE               (S5P_EINT_BASE1 + 32)
-#define IRQ_GPIO_END                   (S5P_GPIOINT_BASE + S5P_GPIOINT_COUNT)
-#define IRQ_TIMER_BASE                 (IRQ_GPIO_END + 64)
-
-/* Set the default NR_IRQS */
-#define EXYNOS_NR_IRQS                 (IRQ_TIMER_BASE + IRQ_TIMER_COUNT)
-
-#ifndef CONFIG_SPARSE_IRQ
-#define NR_IRQS                                EXYNOS_NR_IRQS
-#endif
-
-#endif /* __ASM_ARCH_IRQS_H */
index 92b29bb583cbb560a1b25e576ee5cb0b7095f88a..7b046b59d9ecc8829a98699ed84a6ffcbad4a8f5 100644 (file)
 #define EXYNOS4x12_PA_SYSRAM_NS                0x0204F000
 #define EXYNOS5250_PA_SYSRAM_NS                0x0204F000
 
-#define EXYNOS4_PA_FIMC0               0x11800000
-#define EXYNOS4_PA_FIMC1               0x11810000
-#define EXYNOS4_PA_FIMC2               0x11820000
-#define EXYNOS4_PA_FIMC3               0x11830000
-
-#define EXYNOS4_PA_JPEG                        0x11840000
-
-/* x = 0...1 */
-#define EXYNOS4_PA_FIMC_LITE(x)                (0x12390000 + ((x) * 0x10000))
-
-#define EXYNOS4_PA_G2D                 0x12800000
-
-#define EXYNOS4_PA_I2S0                        0x03830000
-#define EXYNOS4_PA_I2S1                        0xE3100000
-#define EXYNOS4_PA_I2S2                        0xE2A00000
-
-#define EXYNOS4_PA_PCM0                        0x03840000
-#define EXYNOS4_PA_PCM1                        0x13980000
-#define EXYNOS4_PA_PCM2                        0x13990000
-
-#define EXYNOS4_PA_SROM_BANK(x)                (0x04000000 + ((x) * 0x01000000))
-
-#define EXYNOS4_PA_ONENAND             0x0C000000
-#define EXYNOS4_PA_ONENAND_DMA         0x0C600000
-
 #define EXYNOS_PA_CHIPID               0x10000000
 
 #define EXYNOS4_PA_SYSCON              0x10010000
 #define EXYNOS4_PA_WATCHDOG            0x10060000
 #define EXYNOS5_PA_WATCHDOG            0x101D0000
 
-#define EXYNOS4_PA_RTC                 0x10070000
-
-#define EXYNOS4_PA_KEYPAD              0x100A0000
-
 #define EXYNOS4_PA_DMC0                        0x10400000
 #define EXYNOS4_PA_DMC1                        0x10410000
 
 #define EXYNOS5_PA_GIC_DIST            0x10481000
 
 #define EXYNOS4_PA_COREPERI            0x10500000
-#define EXYNOS4_PA_TWD                 0x10500600
 #define EXYNOS4_PA_L2CC                        0x10502000
 
-#define EXYNOS4_PA_TMU                 0x100C0000
-
-#define EXYNOS4_PA_MDMA0               0x10810000
-#define EXYNOS4_PA_MDMA1               0x12850000
-#define EXYNOS4_PA_S_MDMA1             0x12840000
-#define EXYNOS4_PA_PDMA0               0x12680000
-#define EXYNOS4_PA_PDMA1               0x12690000
-#define EXYNOS5_PA_MDMA0               0x10800000
-#define EXYNOS5_PA_MDMA1               0x11C10000
-#define EXYNOS5_PA_PDMA0               0x121A0000
-#define EXYNOS5_PA_PDMA1               0x121B0000
-
-#define EXYNOS4_PA_SYSMMU_MDMA         0x10A40000
-#define EXYNOS4_PA_SYSMMU_2D_ACP       0x10A40000
-#define EXYNOS4_PA_SYSMMU_SSS          0x10A50000
-#define EXYNOS4_PA_SYSMMU_FIMC0                0x11A20000
-#define EXYNOS4_PA_SYSMMU_FIMC1                0x11A30000
-#define EXYNOS4_PA_SYSMMU_FIMC2                0x11A40000
-#define EXYNOS4_PA_SYSMMU_FIMC3                0x11A50000
-#define EXYNOS4_PA_SYSMMU_JPEG         0x11A60000
-#define EXYNOS4_PA_SYSMMU_FIMD0                0x11E20000
-#define EXYNOS4_PA_SYSMMU_FIMD1                0x12220000
-#define EXYNOS4_PA_SYSMMU_FIMC_ISP     0x12260000
-#define EXYNOS4_PA_SYSMMU_FIMC_DRC     0x12270000
-#define EXYNOS4_PA_SYSMMU_FIMC_FD      0x122A0000
-#define EXYNOS4_PA_SYSMMU_ISPCPU       0x122B0000
-#define EXYNOS4_PA_SYSMMU_FIMC_LITE0   0x123B0000
-#define EXYNOS4_PA_SYSMMU_FIMC_LITE1   0x123C0000
-#define EXYNOS4_PA_SYSMMU_PCIe         0x12620000
-#define EXYNOS4_PA_SYSMMU_G2D          0x12A20000
-#define EXYNOS4_PA_SYSMMU_ROTATOR      0x12A30000
-#define EXYNOS4_PA_SYSMMU_MDMA2                0x12A40000
-#define EXYNOS4_PA_SYSMMU_TV           0x12E20000
-#define EXYNOS4_PA_SYSMMU_MFC_L                0x13620000
-#define EXYNOS4_PA_SYSMMU_MFC_R                0x13630000
-
-#define EXYNOS5_PA_GSC0                        0x13E00000
-#define EXYNOS5_PA_GSC1                        0x13E10000
-#define EXYNOS5_PA_GSC2                        0x13E20000
-#define EXYNOS5_PA_GSC3                        0x13E30000
-
-#define EXYNOS5_PA_SYSMMU_MDMA1                0x10A40000
-#define EXYNOS5_PA_SYSMMU_SSS          0x10A50000
-#define EXYNOS5_PA_SYSMMU_2D           0x10A60000
-#define EXYNOS5_PA_SYSMMU_MFC_L                0x11200000
-#define EXYNOS5_PA_SYSMMU_MFC_R                0x11210000
-#define EXYNOS5_PA_SYSMMU_ROTATOR      0x11D40000
-#define EXYNOS5_PA_SYSMMU_MDMA2                0x11D50000
-#define EXYNOS5_PA_SYSMMU_JPEG         0x11F20000
-#define EXYNOS5_PA_SYSMMU_IOP          0x12360000
-#define EXYNOS5_PA_SYSMMU_RTIC         0x12370000
-#define EXYNOS5_PA_SYSMMU_ISP          0x13260000
-#define EXYNOS5_PA_SYSMMU_DRC          0x12370000
-#define EXYNOS5_PA_SYSMMU_SCALERC      0x13280000
-#define EXYNOS5_PA_SYSMMU_SCALERP      0x13290000
-#define EXYNOS5_PA_SYSMMU_FD           0x132A0000
-#define EXYNOS5_PA_SYSMMU_ISPCPU       0x132B0000
-#define EXYNOS5_PA_SYSMMU_ODC          0x132C0000
-#define EXYNOS5_PA_SYSMMU_DIS0         0x132D0000
-#define EXYNOS5_PA_SYSMMU_DIS1         0x132E0000
-#define EXYNOS5_PA_SYSMMU_3DNR         0x132F0000
-#define EXYNOS5_PA_SYSMMU_LITE0                0x13C40000
-#define EXYNOS5_PA_SYSMMU_LITE1                0x13C50000
-#define EXYNOS5_PA_SYSMMU_GSC0         0x13E80000
-#define EXYNOS5_PA_SYSMMU_GSC1         0x13E90000
-#define EXYNOS5_PA_SYSMMU_GSC2         0x13EA0000
-#define EXYNOS5_PA_SYSMMU_GSC3         0x13EB0000
-#define EXYNOS5_PA_SYSMMU_FIMD1                0x14640000
-#define EXYNOS5_PA_SYSMMU_TV           0x14650000
-
-#define EXYNOS4_PA_SPI0                        0x13920000
-#define EXYNOS4_PA_SPI1                        0x13930000
-#define EXYNOS4_PA_SPI2                        0x13940000
-#define EXYNOS5_PA_SPI0                        0x12D20000
-#define EXYNOS5_PA_SPI1                        0x12D30000
-#define EXYNOS5_PA_SPI2                        0x12D40000
-
-#define EXYNOS4_PA_GPIO1               0x11400000
-#define EXYNOS4_PA_GPIO2               0x11000000
-#define EXYNOS4_PA_GPIO3               0x03860000
-#define EXYNOS5_PA_GPIO1               0x11400000
-#define EXYNOS5_PA_GPIO2               0x13400000
-#define EXYNOS5_PA_GPIO3               0x10D10000
-#define EXYNOS5_PA_GPIO4               0x03860000
-
-#define EXYNOS4_PA_MIPI_CSIS0          0x11880000
-#define EXYNOS4_PA_MIPI_CSIS1          0x11890000
-
-#define EXYNOS4_PA_FIMD0               0x11C00000
-
-#define EXYNOS4_PA_HSMMC(x)            (0x12510000 + ((x) * 0x10000))
-#define EXYNOS4_PA_DWMCI               0x12550000
-#define EXYNOS5_PA_DWMCI0              0x12200000
-#define EXYNOS5_PA_DWMCI1              0x12210000
-#define EXYNOS5_PA_DWMCI2              0x12220000
-#define EXYNOS5_PA_DWMCI3              0x12230000
-
-#define EXYNOS4_PA_HSOTG               0x12480000
-#define EXYNOS4_PA_USB_HSPHY           0x125B0000
-
-#define EXYNOS4_PA_SATA                        0x12560000
-#define EXYNOS4_PA_SATAPHY             0x125D0000
-#define EXYNOS4_PA_SATAPHY_CTRL                0x126B0000
-
 #define EXYNOS4_PA_SROMC               0x12570000
 #define EXYNOS5_PA_SROMC               0x12250000
 
-#define EXYNOS4_PA_EHCI                        0x12580000
-#define EXYNOS4_PA_OHCI                        0x12590000
 #define EXYNOS4_PA_HSPHY               0x125B0000
-#define EXYNOS4_PA_MFC                 0x13400000
 
 #define EXYNOS4_PA_UART                        0x13800000
 #define EXYNOS5_PA_UART                        0x12C00000
 
-#define EXYNOS4_PA_VP                  0x12C00000
-#define EXYNOS4_PA_MIXER               0x12C10000
-#define EXYNOS4_PA_SDO                 0x12C20000
-#define EXYNOS4_PA_HDMI                        0x12D00000
-#define EXYNOS4_PA_IIC_HDMIPHY         0x138E0000
-
-#define EXYNOS4_PA_IIC(x)              (0x13860000 + ((x) * 0x10000))
-#define EXYNOS5_PA_IIC(x)              (0x12C60000 + ((x) * 0x10000))
-
-#define EXYNOS4_PA_ADC                 0x13910000
-#define EXYNOS4_PA_ADC1                        0x13911000
-
-#define EXYNOS4_PA_AC97                        0x139A0000
-
-#define EXYNOS4_PA_SPDIF               0x139B0000
-
 #define EXYNOS4_PA_TIMER               0x139D0000
 #define EXYNOS5_PA_TIMER               0x12DD0000
 
-#define EXYNOS4_PA_SDRAM               0x40000000
-#define EXYNOS5_PA_SDRAM               0x40000000
-
-/* Compatibiltiy Defines */
-
-#define S3C_PA_HSMMC0                  EXYNOS4_PA_HSMMC(0)
-#define S3C_PA_HSMMC1                  EXYNOS4_PA_HSMMC(1)
-#define S3C_PA_HSMMC2                  EXYNOS4_PA_HSMMC(2)
-#define S3C_PA_HSMMC3                  EXYNOS4_PA_HSMMC(3)
-#define S3C_PA_IIC                     EXYNOS4_PA_IIC(0)
-#define S3C_PA_IIC1                    EXYNOS4_PA_IIC(1)
-#define S3C_PA_IIC2                    EXYNOS4_PA_IIC(2)
-#define S3C_PA_IIC3                    EXYNOS4_PA_IIC(3)
-#define S3C_PA_IIC4                    EXYNOS4_PA_IIC(4)
-#define S3C_PA_IIC5                    EXYNOS4_PA_IIC(5)
-#define S3C_PA_IIC6                    EXYNOS4_PA_IIC(6)
-#define S3C_PA_IIC7                    EXYNOS4_PA_IIC(7)
-#define S3C_PA_RTC                     EXYNOS4_PA_RTC
-#define S3C_PA_WDT                     EXYNOS4_PA_WATCHDOG
-#define S3C_PA_SPI0                    EXYNOS4_PA_SPI0
-#define S3C_PA_SPI1                    EXYNOS4_PA_SPI1
-#define S3C_PA_SPI2                    EXYNOS4_PA_SPI2
-#define S3C_PA_USB_HSOTG               EXYNOS4_PA_HSOTG
-
-#define S5P_PA_EHCI                    EXYNOS4_PA_EHCI
-#define S5P_PA_FIMC0                   EXYNOS4_PA_FIMC0
-#define S5P_PA_FIMC1                   EXYNOS4_PA_FIMC1
-#define S5P_PA_FIMC2                   EXYNOS4_PA_FIMC2
-#define S5P_PA_FIMC3                   EXYNOS4_PA_FIMC3
-#define S5P_PA_JPEG                    EXYNOS4_PA_JPEG
-#define S5P_PA_G2D                     EXYNOS4_PA_G2D
-#define S5P_PA_FIMD0                   EXYNOS4_PA_FIMD0
-#define S5P_PA_HDMI                    EXYNOS4_PA_HDMI
-#define S5P_PA_IIC_HDMIPHY             EXYNOS4_PA_IIC_HDMIPHY
-#define S5P_PA_MFC                     EXYNOS4_PA_MFC
-#define S5P_PA_MIPI_CSIS0              EXYNOS4_PA_MIPI_CSIS0
-#define S5P_PA_MIPI_CSIS1              EXYNOS4_PA_MIPI_CSIS1
-#define S5P_PA_MIXER                   EXYNOS4_PA_MIXER
-#define S5P_PA_ONENAND                 EXYNOS4_PA_ONENAND
-#define S5P_PA_ONENAND_DMA             EXYNOS4_PA_ONENAND_DMA
-#define S5P_PA_SDO                     EXYNOS4_PA_SDO
-#define S5P_PA_SDRAM                   EXYNOS4_PA_SDRAM
-#define S5P_PA_VP                      EXYNOS4_PA_VP
-
-#define SAMSUNG_PA_ADC                 EXYNOS4_PA_ADC
-#define SAMSUNG_PA_ADC1                        EXYNOS4_PA_ADC1
-#define SAMSUNG_PA_KEYPAD              EXYNOS4_PA_KEYPAD
-
 /* Compatibility UART */
 
-#define EXYNOS4_PA_UART0               0x13800000
-#define EXYNOS4_PA_UART1               0x13810000
-#define EXYNOS4_PA_UART2               0x13820000
-#define EXYNOS4_PA_UART3               0x13830000
-#define EXYNOS4_SZ_UART                        SZ_256
-
-#define EXYNOS5_PA_UART0               0x12C00000
-#define EXYNOS5_PA_UART1               0x12C10000
-#define EXYNOS5_PA_UART2               0x12C20000
-#define EXYNOS5_PA_UART3               0x12C30000
-
 #define EXYNOS5440_PA_UART0            0x000B0000
-#define EXYNOS5440_PA_UART1            0x000C0000
-#define EXYNOS5440_SZ_UART             SZ_256
 
 #define S3C_VA_UARTx(x)                        (S3C_VA_UART + ((x) * S3C_UART_OFFSET))
 
index 296090e7f423cc72952ccfefd6a4a60be25a044f..2b00833b6641d862ace121280d06da577ddd4a97 100644 (file)
@@ -34,12 +34,7 @@ static inline void s3c_pm_debug_init_uart(void)
 
 static inline void s3c_pm_arch_prepare_irqs(void)
 {
-       u32 eintmask = s3c_irqwake_eintmask;
-
-       if (of_have_populated_dt())
-               eintmask = exynos_get_eint_wake_mask();
-
-       __raw_writel(eintmask, S5P_EINT_WAKEUP_MASK);
+       __raw_writel(exynos_get_eint_wake_mask(), S5P_EINT_WAKEUP_MASK);
        __raw_writel(s3c_irqwake_intmask & ~(1 << 31), S5P_WAKEUP_MASK);
 }
 
@@ -69,4 +64,9 @@ static inline void samsung_pm_saved_gpios(void)
        /* nothing here yet */
 }
 
+/* Compatibility definitions to make plat-samsung/pm.c compile */
+#define IRQ_EINT_BIT(x)                1
+#define s3c_irqwake_intallow   0
+#define s3c_irqwake_eintallow  0
+
 #endif /* __ASM_ARCH_PM_CORE_H */
diff --git a/arch/arm/mach-exynos/include/mach/regs-gpio.h b/arch/arm/mach-exynos/include/mach/regs-gpio.h
deleted file mode 100644 (file)
index e4b5b60..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* linux/arch/arm/mach-exynos4/include/mach/regs-gpio.h
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * EXYNOS4 - GPIO (including EINT) register definitions
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#ifndef __ASM_ARCH_REGS_GPIO_H
-#define __ASM_ARCH_REGS_GPIO_H __FILE__
-
-#include <mach/map.h>
-#include <mach/irqs.h>
-
-#define EINT_REG_NR(x)                 (EINT_OFFSET(x) >> 3)
-#define EINT_CON(b, x)                 (b + 0xE00 + (EINT_REG_NR(x) * 4))
-#define EINT_FLTCON(b, x)              (b + 0xE80 + (EINT_REG_NR(x) * 4))
-#define EINT_MASK(b, x)                        (b + 0xF00 + (EINT_REG_NR(x) * 4))
-#define EINT_PEND(b, x)                        (b + 0xF40 + (EINT_REG_NR(x) * 4))
-
-#define EINT_OFFSET_BIT(x)             (1 << (EINT_OFFSET(x) & 0x7))
-
-/* compatibility for plat-s5p/irq-pm.c */
-#define EXYNOS4_EINT40CON              (S5P_VA_GPIO2 + 0xE00)
-#define S5P_EINT_CON(x)                        (EXYNOS4_EINT40CON + ((x) * 0x4))
-
-#define EXYNOS4_EINT40FLTCON0          (S5P_VA_GPIO2 + 0xE80)
-#define S5P_EINT_FLTCON(x)             (EXYNOS4_EINT40FLTCON0 + ((x) * 0x4))
-
-#define EXYNOS4_EINT40MASK             (S5P_VA_GPIO2 + 0xF00)
-#define S5P_EINT_MASK(x)               (EXYNOS4_EINT40MASK + ((x) * 0x4))
-
-#define EXYNOS4_EINT40PEND             (S5P_VA_GPIO2 + 0xF40)
-#define S5P_EINT_PEND(x)               (EXYNOS4_EINT40PEND + ((x) * 0x4))
-
-#endif /* __ASM_ARCH_REGS_GPIO_H */
diff --git a/arch/arm/mach-exynos/include/mach/regs-usb-phy.h b/arch/arm/mach-exynos/include/mach/regs-usb-phy.h
deleted file mode 100644 (file)
index 0727773..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics Co.Ltd
- * Author: Joonyoung Shim <jy0922.shim@samsung.com>
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
- */
-
-#ifndef __PLAT_S5P_REGS_USB_PHY_H
-#define __PLAT_S5P_REGS_USB_PHY_H
-
-#define EXYNOS4_HSOTG_PHYREG(x)                ((x) + S3C_VA_USB_HSPHY)
-
-#define EXYNOS4_PHYPWR                 EXYNOS4_HSOTG_PHYREG(0x00)
-#define PHY1_HSIC_NORMAL_MASK          (0xf << 9)
-#define PHY1_HSIC1_SLEEP               (1 << 12)
-#define PHY1_HSIC1_FORCE_SUSPEND       (1 << 11)
-#define PHY1_HSIC0_SLEEP               (1 << 10)
-#define PHY1_HSIC0_FORCE_SUSPEND       (1 << 9)
-
-#define PHY1_STD_NORMAL_MASK           (0x7 << 6)
-#define PHY1_STD_SLEEP                 (1 << 8)
-#define PHY1_STD_ANALOG_POWERDOWN      (1 << 7)
-#define PHY1_STD_FORCE_SUSPEND         (1 << 6)
-
-#define PHY0_NORMAL_MASK               (0x39 << 0)
-#define PHY0_SLEEP                     (1 << 5)
-#define PHY0_OTG_DISABLE               (1 << 4)
-#define PHY0_ANALOG_POWERDOWN          (1 << 3)
-#define PHY0_FORCE_SUSPEND             (1 << 0)
-
-#define EXYNOS4_PHYCLK                 EXYNOS4_HSOTG_PHYREG(0x04)
-#define PHY1_COMMON_ON_N               (1 << 7)
-#define PHY0_COMMON_ON_N               (1 << 4)
-#define PHY0_ID_PULLUP                 (1 << 2)
-
-#define EXYNOS4_CLKSEL_SHIFT           (0)
-
-#define EXYNOS4210_CLKSEL_MASK         (0x3 << 0)
-#define EXYNOS4210_CLKSEL_48M          (0x0 << 0)
-#define EXYNOS4210_CLKSEL_12M          (0x2 << 0)
-#define EXYNOS4210_CLKSEL_24M          (0x3 << 0)
-
-#define EXYNOS4X12_CLKSEL_MASK         (0x7 << 0)
-#define EXYNOS4X12_CLKSEL_9600K                (0x0 << 0)
-#define EXYNOS4X12_CLKSEL_10M          (0x1 << 0)
-#define EXYNOS4X12_CLKSEL_12M          (0x2 << 0)
-#define EXYNOS4X12_CLKSEL_19200K       (0x3 << 0)
-#define EXYNOS4X12_CLKSEL_20M          (0x4 << 0)
-#define EXYNOS4X12_CLKSEL_24M          (0x5 << 0)
-
-#define EXYNOS4_RSTCON                 EXYNOS4_HSOTG_PHYREG(0x08)
-#define HOST_LINK_PORT_SWRST_MASK      (0xf << 6)
-#define HOST_LINK_PORT2_SWRST          (1 << 9)
-#define HOST_LINK_PORT1_SWRST          (1 << 8)
-#define HOST_LINK_PORT0_SWRST          (1 << 7)
-#define HOST_LINK_ALL_SWRST            (1 << 6)
-
-#define PHY1_SWRST_MASK                        (0x7 << 3)
-#define PHY1_HSIC_SWRST                        (1 << 5)
-#define PHY1_STD_SWRST                 (1 << 4)
-#define PHY1_ALL_SWRST                 (1 << 3)
-
-#define PHY0_SWRST_MASK                        (0x7 << 0)
-#define PHY0_PHYLINK_SWRST             (1 << 2)
-#define PHY0_HLINK_SWRST               (1 << 1)
-#define PHY0_SWRST                     (1 << 0)
-
-#define EXYNOS4_PHY1CON                        EXYNOS4_HSOTG_PHYREG(0x34)
-#define FPENABLEN                      (1 << 0)
-
-#endif /* __PLAT_S5P_REGS_USB_PHY_H */
diff --git a/arch/arm/mach-exynos/mach-armlex4210.c b/arch/arm/mach-exynos/mach-armlex4210.c
deleted file mode 100644 (file)
index 5f0f557..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/* linux/arch/arm/mach-exynos4/mach-armlex4210.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/gpio.h>
-#include <linux/io.h>
-#include <linux/mmc/host.h>
-#include <linux/platform_device.h>
-#include <linux/serial_core.h>
-#include <linux/smsc911x.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <plat/cpu.h>
-#include <plat/devs.h>
-#include <plat/gpio-cfg.h>
-#include <plat/regs-serial.h>
-#include <plat/regs-srom.h>
-#include <plat/sdhci.h>
-
-#include <mach/irqs.h>
-#include <mach/map.h>
-
-#include "common.h"
-
-/* Following are default values for UCON, ULCON and UFCON UART registers */
-#define ARMLEX4210_UCON_DEFAULT        (S3C2410_UCON_TXILEVEL |        \
-                                S3C2410_UCON_RXILEVEL |        \
-                                S3C2410_UCON_TXIRQMODE |       \
-                                S3C2410_UCON_RXIRQMODE |       \
-                                S3C2410_UCON_RXFIFO_TOI |      \
-                                S3C2443_UCON_RXERR_IRQEN)
-
-#define ARMLEX4210_ULCON_DEFAULT       S3C2410_LCON_CS8
-
-#define ARMLEX4210_UFCON_DEFAULT       (S3C2410_UFCON_FIFOMODE |       \
-                                S5PV210_UFCON_TXTRIG4 |        \
-                                S5PV210_UFCON_RXTRIG4)
-
-static struct s3c2410_uartcfg armlex4210_uartcfgs[] __initdata = {
-       [0] = {
-               .hwport         = 0,
-               .flags          = 0,
-               .ucon           = ARMLEX4210_UCON_DEFAULT,
-               .ulcon          = ARMLEX4210_ULCON_DEFAULT,
-               .ufcon          = ARMLEX4210_UFCON_DEFAULT,
-       },
-       [1] = {
-               .hwport         = 1,
-               .flags          = 0,
-               .ucon           = ARMLEX4210_UCON_DEFAULT,
-               .ulcon          = ARMLEX4210_ULCON_DEFAULT,
-               .ufcon          = ARMLEX4210_UFCON_DEFAULT,
-       },
-       [2] = {
-               .hwport         = 2,
-               .flags          = 0,
-               .ucon           = ARMLEX4210_UCON_DEFAULT,
-               .ulcon          = ARMLEX4210_ULCON_DEFAULT,
-               .ufcon          = ARMLEX4210_UFCON_DEFAULT,
-       },
-       [3] = {
-               .hwport         = 3,
-               .flags          = 0,
-               .ucon           = ARMLEX4210_UCON_DEFAULT,
-               .ulcon          = ARMLEX4210_ULCON_DEFAULT,
-               .ufcon          = ARMLEX4210_UFCON_DEFAULT,
-       },
-};
-
-static struct s3c_sdhci_platdata armlex4210_hsmmc0_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_PERMANENT,
-#ifdef CONFIG_EXYNOS4_SDHCI_CH0_8BIT
-       .max_width              = 8,
-       .host_caps              = MMC_CAP_8_BIT_DATA,
-#endif
-};
-
-static struct s3c_sdhci_platdata armlex4210_hsmmc2_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_GPIO,
-       .ext_cd_gpio            = EXYNOS4_GPX2(5),
-       .ext_cd_gpio_invert     = 1,
-       .max_width              = 4,
-};
-
-static struct s3c_sdhci_platdata armlex4210_hsmmc3_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_PERMANENT,
-       .max_width              = 4,
-};
-
-static void __init armlex4210_sdhci_init(void)
-{
-       s3c_sdhci0_set_platdata(&armlex4210_hsmmc0_pdata);
-       s3c_sdhci2_set_platdata(&armlex4210_hsmmc2_pdata);
-       s3c_sdhci3_set_platdata(&armlex4210_hsmmc3_pdata);
-}
-
-static void __init armlex4210_wlan_init(void)
-{
-       /* enable */
-       s3c_gpio_cfgpin(EXYNOS4_GPX2(0), S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(EXYNOS4_GPX2(0), S3C_GPIO_PULL_UP);
-
-       /* reset */
-       s3c_gpio_cfgpin(EXYNOS4_GPX1(6), S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(EXYNOS4_GPX1(6), S3C_GPIO_PULL_UP);
-
-       /* wakeup */
-       s3c_gpio_cfgpin(EXYNOS4_GPX1(5), S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(EXYNOS4_GPX1(5), S3C_GPIO_PULL_UP);
-}
-
-static struct resource armlex4210_smsc911x_resources[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_SROM_BANK(3), SZ_64K),
-       [1] = DEFINE_RES_NAMED(IRQ_EINT(27), 1, NULL, IORESOURCE_IRQ \
-                                       | IRQF_TRIGGER_HIGH),
-};
-
-static struct smsc911x_platform_config smsc9215_config = {
-       .irq_polarity   = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH,
-       .irq_type       = SMSC911X_IRQ_TYPE_PUSH_PULL,
-       .flags          = SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
-       .phy_interface  = PHY_INTERFACE_MODE_MII,
-       .mac            = {0x00, 0x80, 0x00, 0x23, 0x45, 0x67},
-};
-
-static struct platform_device armlex4210_smsc911x = {
-       .name           = "smsc911x",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(armlex4210_smsc911x_resources),
-       .resource       = armlex4210_smsc911x_resources,
-       .dev            = {
-               .platform_data  = &smsc9215_config,
-       },
-};
-
-static struct platform_device *armlex4210_devices[] __initdata = {
-       &s3c_device_hsmmc0,
-       &s3c_device_hsmmc2,
-       &s3c_device_hsmmc3,
-       &s3c_device_rtc,
-       &s3c_device_wdt,
-       &armlex4210_smsc911x,
-       &exynos4_device_ahci,
-};
-
-static void __init armlex4210_smsc911x_init(void)
-{
-       u32 cs1;
-
-       /* configure nCS1 width to 16 bits */
-       cs1 = __raw_readl(S5P_SROM_BW) &
-               ~(S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS1__SHIFT);
-       cs1 |= ((1 << S5P_SROM_BW__DATAWIDTH__SHIFT) |
-               (0 << S5P_SROM_BW__WAITENABLE__SHIFT) |
-               (1 << S5P_SROM_BW__ADDRMODE__SHIFT) |
-               (1 << S5P_SROM_BW__BYTEENABLE__SHIFT)) <<
-               S5P_SROM_BW__NCS1__SHIFT;
-       __raw_writel(cs1, S5P_SROM_BW);
-
-       /* set timing for nCS1 suitable for ethernet chip */
-       __raw_writel((0x1 << S5P_SROM_BCX__PMC__SHIFT) |
-                    (0x9 << S5P_SROM_BCX__TACP__SHIFT) |
-                    (0xc << S5P_SROM_BCX__TCAH__SHIFT) |
-                    (0x1 << S5P_SROM_BCX__TCOH__SHIFT) |
-                    (0x6 << S5P_SROM_BCX__TACC__SHIFT) |
-                    (0x1 << S5P_SROM_BCX__TCOS__SHIFT) |
-                    (0x1 << S5P_SROM_BCX__TACS__SHIFT), S5P_SROM_BC1);
-}
-
-static void __init armlex4210_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-       s3c24xx_init_uarts(armlex4210_uartcfgs,
-                          ARRAY_SIZE(armlex4210_uartcfgs));
-}
-
-static void __init armlex4210_machine_init(void)
-{
-       armlex4210_smsc911x_init();
-
-       armlex4210_sdhci_init();
-
-       armlex4210_wlan_init();
-
-       platform_add_devices(armlex4210_devices,
-                            ARRAY_SIZE(armlex4210_devices));
-}
-
-MACHINE_START(ARMLEX4210, "ARMLEX4210")
-       /* Maintainer: Alim Akhtar <alim.akhtar@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = armlex4210_map_io,
-       .init_machine   = armlex4210_machine_init,
-       .init_late      = exynos_init_late,
-       .init_time      = exynos_init_time,
-       .restart        = exynos4_restart,
-MACHINE_END
index b9ed834a7eeef53a97b5cd76470b1b3a852e29fd..0099c6c13bbaa9504dccd6fa760c21273de41d3f 100644 (file)
 
 #include "common.h"
 
-static void __init exynos4_dt_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-}
-
 static void __init exynos4_dt_machine_init(void)
 {
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
@@ -55,8 +50,7 @@ static void __init exynos4_reserve(void)
 DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)")
        /* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */
        .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = exynos4_dt_map_io,
+       .map_io         = exynos_init_io,
        .init_early     = exynos_firmware_init,
        .init_machine   = exynos4_dt_machine_init,
        .init_late      = exynos_init_late,
index 753b94f3fca7e3ba4c3895582f638e6c395e60fd..d5c8afdeaa39c489d6205e26746609eadb91fb49 100644 (file)
 
 #include "common.h"
 
-static void __init exynos5_dt_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-}
-
 static void __init exynos5_dt_machine_init(void)
 {
        struct device_node *i2c_np;
@@ -76,9 +71,8 @@ static void __init exynos5_reserve(void)
 
 DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
        /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
-       .init_irq       = exynos5_init_irq,
        .smp            = smp_ops(exynos_smp_ops),
-       .map_io         = exynos5_dt_map_io,
+       .map_io         = exynos_init_io,
        .init_machine   = exynos5_dt_machine_init,
        .init_late      = exynos_init_late,
        .init_time      = exynos_init_time,
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
deleted file mode 100644 (file)
index 5c8b287..0000000
+++ /dev/null
@@ -1,1388 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/mach-nuri.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/platform_device.h>
-#include <linux/serial_core.h>
-#include <linux/input.h>
-#include <linux/i2c.h>
-#include <linux/i2c/atmel_mxt_ts.h>
-#include <linux/i2c-gpio.h>
-#include <linux/gpio_keys.h>
-#include <linux/gpio.h>
-#include <linux/power/max8903_charger.h>
-#include <linux/power/max17042_battery.h>
-#include <linux/regulator/machine.h>
-#include <linux/regulator/fixed.h>
-#include <linux/mfd/max8997.h>
-#include <linux/mfd/max8997-private.h>
-#include <linux/mmc/host.h>
-#include <linux/fb.h>
-#include <linux/pwm_backlight.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <linux/platform_data/mipi-csis.h>
-#include <linux/platform_data/s3c-hsotg.h>
-#include <linux/platform_data/usb-ehci-s5p.h>
-#include <drm/exynos_drm.h>
-
-#include <video/platform_lcd.h>
-#include <video/samsung_fimd.h>
-#include <media/m5mols.h>
-#include <media/s5k6aa.h>
-#include <media/s5p_fimc.h>
-#include <media/v4l2-mediabus.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <plat/adc.h>
-#include <plat/regs-serial.h>
-#include <plat/cpu.h>
-#include <plat/devs.h>
-#include <plat/fb.h>
-#include <plat/sdhci.h>
-#include <plat/clock.h>
-#include <plat/gpio-cfg.h>
-#include <plat/mfc.h>
-#include <plat/fimc-core.h>
-#include <plat/camport.h>
-
-#include <mach/irqs.h>
-#include <mach/map.h>
-
-#include "common.h"
-
-/* Following are default values for UCON, ULCON and UFCON UART registers */
-#define NURI_UCON_DEFAULT      (S3C2410_UCON_TXILEVEL |        \
-                                S3C2410_UCON_RXILEVEL |        \
-                                S3C2410_UCON_TXIRQMODE |       \
-                                S3C2410_UCON_RXIRQMODE |       \
-                                S3C2410_UCON_RXFIFO_TOI |      \
-                                S3C2443_UCON_RXERR_IRQEN)
-
-#define NURI_ULCON_DEFAULT     S3C2410_LCON_CS8
-
-#define NURI_UFCON_DEFAULT     (S3C2410_UFCON_FIFOMODE |       \
-                                S5PV210_UFCON_TXTRIG256 |      \
-                                S5PV210_UFCON_RXTRIG256)
-
-enum fixed_regulator_id {
-       FIXED_REG_ID_MMC = 0,
-       FIXED_REG_ID_MAX8903,
-       FIXED_REG_ID_CAM_A28V,
-       FIXED_REG_ID_CAM_12V,
-       FIXED_REG_ID_CAM_VT_15V,
-};
-
-static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
-       {
-               .hwport         = 0,
-               .ucon           = NURI_UCON_DEFAULT,
-               .ulcon          = NURI_ULCON_DEFAULT,
-               .ufcon          = NURI_UFCON_DEFAULT,
-       },
-       {
-               .hwport         = 1,
-               .ucon           = NURI_UCON_DEFAULT,
-               .ulcon          = NURI_ULCON_DEFAULT,
-               .ufcon          = NURI_UFCON_DEFAULT,
-       },
-       {
-               .hwport         = 2,
-               .ucon           = NURI_UCON_DEFAULT,
-               .ulcon          = NURI_ULCON_DEFAULT,
-               .ufcon          = NURI_UFCON_DEFAULT,
-       },
-       {
-               .hwport         = 3,
-               .ucon           = NURI_UCON_DEFAULT,
-               .ulcon          = NURI_ULCON_DEFAULT,
-               .ufcon          = NURI_UFCON_DEFAULT,
-       },
-};
-
-/* eMMC */
-static struct s3c_sdhci_platdata nuri_hsmmc0_data __initdata = {
-       .max_width              = 8,
-       .host_caps              = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |
-                               MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
-                               MMC_CAP_ERASE),
-       .cd_type                = S3C_SDHCI_CD_PERMANENT,
-};
-
-static struct regulator_consumer_supply emmc_supplies[] = {
-       REGULATOR_SUPPLY("vmmc", "exynos4-sdhci.0"),
-       REGULATOR_SUPPLY("vmmc", "dw_mmc"),
-};
-
-static struct regulator_init_data emmc_fixed_voltage_init_data = {
-       .constraints            = {
-               .name           = "VMEM_VDD_2.8V",
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(emmc_supplies),
-       .consumer_supplies      = emmc_supplies,
-};
-
-static struct fixed_voltage_config emmc_fixed_voltage_config = {
-       .supply_name            = "MASSMEMORY_EN (inverted)",
-       .microvolts             = 2800000,
-       .gpio                   = EXYNOS4_GPL1(1),
-       .enable_high            = false,
-       .init_data              = &emmc_fixed_voltage_init_data,
-};
-
-static struct platform_device emmc_fixed_voltage = {
-       .name                   = "reg-fixed-voltage",
-       .id                     = FIXED_REG_ID_MMC,
-       .dev                    = {
-               .platform_data  = &emmc_fixed_voltage_config,
-       },
-};
-
-/* SD */
-static struct s3c_sdhci_platdata nuri_hsmmc2_data __initdata = {
-       .max_width              = 4,
-       .host_caps              = MMC_CAP_4_BIT_DATA |
-                               MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .ext_cd_gpio            = EXYNOS4_GPX3(3),      /* XEINT_27 */
-       .ext_cd_gpio_invert     = 1,
-       .cd_type                = S3C_SDHCI_CD_GPIO,
-};
-
-/* WLAN */
-static struct s3c_sdhci_platdata nuri_hsmmc3_data __initdata = {
-       .max_width              = 4,
-       .host_caps              = MMC_CAP_4_BIT_DATA |
-                               MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .cd_type                = S3C_SDHCI_CD_EXTERNAL,
-};
-
-static void __init nuri_sdhci_init(void)
-{
-       s3c_sdhci0_set_platdata(&nuri_hsmmc0_data);
-       s3c_sdhci2_set_platdata(&nuri_hsmmc2_data);
-       s3c_sdhci3_set_platdata(&nuri_hsmmc3_data);
-}
-
-/* GPIO KEYS */
-static struct gpio_keys_button nuri_gpio_keys_tables[] = {
-       {
-               .code                   = KEY_VOLUMEUP,
-               .gpio                   = EXYNOS4_GPX2(0),      /* XEINT16 */
-               .desc                   = "gpio-keys: KEY_VOLUMEUP",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_VOLUMEDOWN,
-               .gpio                   = EXYNOS4_GPX2(1),      /* XEINT17 */
-               .desc                   = "gpio-keys: KEY_VOLUMEDOWN",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_POWER,
-               .gpio                   = EXYNOS4_GPX2(7),      /* XEINT23 */
-               .desc                   = "gpio-keys: KEY_POWER",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .wakeup                 = 1,
-               .debounce_interval      = 1,
-       },
-};
-
-static struct gpio_keys_platform_data nuri_gpio_keys_data = {
-       .buttons                = nuri_gpio_keys_tables,
-       .nbuttons               = ARRAY_SIZE(nuri_gpio_keys_tables),
-};
-
-static struct platform_device nuri_gpio_keys = {
-       .name                   = "gpio-keys",
-       .dev                    = {
-               .platform_data  = &nuri_gpio_keys_data,
-       },
-};
-
-#ifdef CONFIG_DRM_EXYNOS
-static struct exynos_drm_fimd_pdata drm_fimd_pdata = {
-       .panel = {
-               .timing = {
-                       .xres           = 1024,
-                       .yres           = 600,
-                       .hsync_len      = 40,
-                       .left_margin    = 79,
-                       .right_margin   = 200,
-                       .vsync_len      = 10,
-                       .upper_margin   = 10,
-                       .lower_margin   = 11,
-                       .refresh        = 60,
-               },
-       },
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
-                         VIDCON0_CLKSEL_LCD,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .default_win    = 3,
-       .bpp            = 32,
-};
-
-#else
-/* Frame Buffer */
-static struct s3c_fb_pd_win nuri_fb_win0 = {
-       .max_bpp        = 24,
-       .default_bpp    = 16,
-       .xres           = 1024,
-       .yres           = 600,
-       .virtual_x      = 1024,
-       .virtual_y      = 2 * 600,
-};
-
-static struct fb_videomode nuri_lcd_timing = {
-       .left_margin    = 64,
-       .right_margin   = 16,
-       .upper_margin   = 64,
-       .lower_margin   = 1,
-       .hsync_len      = 48,
-       .vsync_len      = 3,
-       .xres           = 1024,
-       .yres           = 600,
-       .refresh        = 60,
-};
-
-static struct s3c_fb_platdata nuri_fb_pdata __initdata = {
-       .win[0]         = &nuri_fb_win0,
-       .vtiming        = &nuri_lcd_timing,
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
-                         VIDCON0_CLKSEL_LCD,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
-};
-#endif
-
-static void nuri_lcd_power_on(struct plat_lcd_data *pd, unsigned int power)
-{
-       int gpio = EXYNOS4_GPE1(5);
-
-       gpio_request(gpio, "LVDS_nSHDN");
-       gpio_direction_output(gpio, power);
-       gpio_free(gpio);
-}
-
-static int nuri_bl_init(struct device *dev)
-{
-       return gpio_request_one(EXYNOS4_GPE2(3), GPIOF_OUT_INIT_LOW,
-                               "LCD_LD0_EN");
-}
-
-static int nuri_bl_notify(struct device *dev, int brightness)
-{
-       if (brightness < 1)
-               brightness = 0;
-
-       gpio_set_value(EXYNOS4_GPE2(3), 1);
-
-       return brightness;
-}
-
-static void nuri_bl_exit(struct device *dev)
-{
-       gpio_free(EXYNOS4_GPE2(3));
-}
-
-/* nuri pwm backlight */
-static struct platform_pwm_backlight_data nuri_backlight_data = {
-       .pwm_id                 = 0,
-       .pwm_period_ns          = 30000,
-       .max_brightness         = 100,
-       .dft_brightness         = 50,
-       .init                   = nuri_bl_init,
-       .notify                 = nuri_bl_notify,
-       .exit                   = nuri_bl_exit,
-};
-
-static struct platform_device nuri_backlight_device = {
-       .name                   = "pwm-backlight",
-       .id                     = -1,
-       .dev                    = {
-               .parent         = &s3c_device_timer[0].dev,
-               .platform_data  = &nuri_backlight_data,
-       },
-};
-
-static struct plat_lcd_data nuri_lcd_platform_data = {
-       .set_power              = nuri_lcd_power_on,
-};
-
-static struct platform_device nuri_lcd_device = {
-       .name                   = "platform-lcd",
-       .id                     = -1,
-       .dev                    = {
-               .platform_data  = &nuri_lcd_platform_data,
-       },
-};
-
-/* I2C1 */
-static struct i2c_board_info i2c1_devs[] __initdata = {
-       /* Gyro, To be updated */
-};
-
-/* TSP */
-static struct mxt_platform_data mxt_platform_data = {
-       .x_line                 = 18,
-       .y_line                 = 11,
-       .x_size                 = 1024,
-       .y_size                 = 600,
-       .blen                   = 0x1,
-       .threshold              = 0x28,
-       .voltage                = 2800000,              /* 2.8V */
-       .orient                 = MXT_DIAGONAL_COUNTER,
-       .irqflags               = IRQF_TRIGGER_FALLING,
-};
-
-static struct s3c2410_platform_i2c i2c3_data __initdata = {
-       .flags          = 0,
-       .bus_num        = 3,
-       .slave_addr     = 0x10,
-       .frequency      = 400 * 1000,
-       .sda_delay      = 100,
-};
-
-static struct i2c_board_info i2c3_devs[] __initdata = {
-       {
-               I2C_BOARD_INFO("atmel_mxt_ts", 0x4a),
-               .platform_data  = &mxt_platform_data,
-               .irq            = IRQ_EINT(4),
-       },
-};
-
-static void __init nuri_tsp_init(void)
-{
-       int gpio;
-
-       /* TOUCH_INT: XEINT_4 */
-       gpio = EXYNOS4_GPX0(4);
-       gpio_request(gpio, "TOUCH_INT");
-       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-}
-
-static struct regulator_consumer_supply __initdata max8997_ldo1_[] = {
-       REGULATOR_SUPPLY("vdd", "s5p-adc"), /* Used by CPU's ADC drv */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo3_[] = {
-       REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"), /* USB */
-       REGULATOR_SUPPLY("vddcore", "s5p-mipi-csis.0"), /* MIPI */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo4_[] = {
-       REGULATOR_SUPPLY("vddio", "s5p-mipi-csis.0"), /* MIPI */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo5_[] = {
-       REGULATOR_SUPPLY("vhsic", "modemctl"), /* MODEM */
-};
-static struct regulator_consumer_supply nuri_max8997_ldo6_consumer[] = {
-       REGULATOR_SUPPLY("vdd_reg", "6-003c"), /* S5K6AA camera */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo7_[] = {
-       REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo8_[] = {
-       REGULATOR_SUPPLY("vusb_a", "s3c-hsotg"), /* USB */
-       REGULATOR_SUPPLY("vdac", NULL), /* Used by CPU */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo11_[] = {
-       REGULATOR_SUPPLY("vcc", "platform-lcd"), /* U804 LVDS */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo12_[] = {
-       REGULATOR_SUPPLY("vddio", "6-003c"), /* HDC802 */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo13_[] = {
-       REGULATOR_SUPPLY("vmmc", "exynos4-sdhci.2"), /* TFLASH */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo14_[] = {
-       REGULATOR_SUPPLY("inmotor", "max8997-haptic"),
-};
-static struct regulator_consumer_supply __initdata max8997_ldo15_[] = {
-       REGULATOR_SUPPLY("avdd", "3-004a"), /* Touch Screen */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo16_[] = {
-       REGULATOR_SUPPLY("d_sensor", "0-001f"), /* HDC803 */
-};
-static struct regulator_consumer_supply __initdata max8997_ldo18_[] = {
-       REGULATOR_SUPPLY("vdd", "3-004a"), /* Touch Screen */
-};
-static struct regulator_consumer_supply __initdata max8997_buck1_[] = {
-       REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
-};
-static struct regulator_consumer_supply __initdata max8997_buck2_[] = {
-       REGULATOR_SUPPLY("vdd_int", "exynos4210-busfreq.0"), /* CPUFREQ */
-};
-static struct regulator_consumer_supply __initdata max8997_buck3_[] = {
-       REGULATOR_SUPPLY("vdd", "mali_dev.0"), /* G3D of Exynos 4 */
-};
-static struct regulator_consumer_supply __initdata max8997_buck4_[] = {
-       REGULATOR_SUPPLY("core", "0-001f"), /* HDC803 */
-};
-static struct regulator_consumer_supply __initdata max8997_buck6_[] = {
-       REGULATOR_SUPPLY("dig_28", "0-001f"), /* pin "7" of HDC803 */
-};
-static struct regulator_consumer_supply __initdata max8997_esafeout1_[] = {
-       REGULATOR_SUPPLY("usb_vbus", NULL), /* CPU's USB OTG */
-};
-static struct regulator_consumer_supply __initdata max8997_esafeout2_[] = {
-       REGULATOR_SUPPLY("usb_vbus", "modemctl"), /* VBUS of Modem */
-};
-
-static struct regulator_consumer_supply __initdata max8997_charger_[] = {
-       REGULATOR_SUPPLY("vinchg1", "charger-manager.0"),
-};
-static struct regulator_consumer_supply __initdata max8997_chg_toff_[] = {
-       REGULATOR_SUPPLY("vinchg_stop", NULL), /* for jack interrupt handlers */
-};
-
-static struct regulator_consumer_supply __initdata max8997_32khz_ap_[] = {
-       REGULATOR_SUPPLY("gps_clk", "bcm4751"),
-       REGULATOR_SUPPLY("bt_clk", "bcm4330-b1"),
-       REGULATOR_SUPPLY("wifi_clk", "bcm433-b1"),
-};
-
-static struct regulator_init_data __initdata max8997_ldo1_data = {
-       .constraints    = {
-               .name           = "VADC_3.3V_C210",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo1_),
-       .consumer_supplies      = max8997_ldo1_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo2_data = {
-       .constraints    = {
-               .name           = "VALIVE_1.1V_C210",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo3_data = {
-       .constraints    = {
-               .name           = "VUSB_1.1V_C210",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo3_),
-       .consumer_supplies      = max8997_ldo3_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo4_data = {
-       .constraints    = {
-               .name           = "VMIPI_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo4_),
-       .consumer_supplies      = max8997_ldo4_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo5_data = {
-       .constraints    = {
-               .name           = "VHSIC_1.2V_C210",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo5_),
-       .consumer_supplies      = max8997_ldo5_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo6_data = {
-       .constraints    = {
-               .name           = "VCC_1.8V_PDA",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(nuri_max8997_ldo6_consumer),
-       .consumer_supplies      = nuri_max8997_ldo6_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo7_data = {
-       .constraints    = {
-               .name           = "CAM_ISP_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo7_),
-       .consumer_supplies      = max8997_ldo7_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo8_data = {
-       .constraints    = {
-               .name           = "VUSB+VDAC_3.3V_C210",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo8_),
-       .consumer_supplies      = max8997_ldo8_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo9_data = {
-       .constraints    = {
-               .name           = "VCC_2.8V_PDA",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo10_data = {
-       .constraints    = {
-               .name           = "VPLL_1.1V_C210",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo11_data = {
-       .constraints    = {
-               .name           = "LVDS_VDD3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .boot_on        = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo11_),
-       .consumer_supplies      = max8997_ldo11_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo12_data = {
-       .constraints    = {
-               .name           = "VT_CAM_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo12_),
-       .consumer_supplies      = max8997_ldo12_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo13_data = {
-       .constraints    = {
-               .name           = "VTF_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo13_),
-       .consumer_supplies      = max8997_ldo13_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo14_data = {
-       .constraints    = {
-               .name           = "VCC_3.0V_MOTOR",
-               .min_uV         = 3000000,
-               .max_uV         = 3000000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo14_),
-       .consumer_supplies      = max8997_ldo14_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo15_data = {
-       .constraints    = {
-               .name           = "VTOUCH_ADVV2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo15_),
-       .consumer_supplies      = max8997_ldo15_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo16_data = {
-       .constraints    = {
-               .name           = "CAM_SENSOR_IO_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo16_),
-       .consumer_supplies      = max8997_ldo16_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo18_data = {
-       .constraints    = {
-               .name           = "VTOUCH_VDD2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_ldo18_),
-       .consumer_supplies      = max8997_ldo18_,
-};
-
-static struct regulator_init_data __initdata max8997_ldo21_data = {
-       .constraints    = {
-               .name           = "VDDQ_M1M2_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_buck1_data = {
-       .constraints    = {
-               .name           = "VARM_1.2V_C210",
-               .min_uV         = 900000,
-               .max_uV         = 1350000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(max8997_buck1_),
-       .consumer_supplies = max8997_buck1_,
-};
-
-static struct regulator_init_data __initdata max8997_buck2_data = {
-       .constraints    = {
-               .name           = "VINT_1.1V_C210",
-               .min_uV         = 900000,
-               .max_uV         = 1200000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(max8997_buck2_),
-       .consumer_supplies = max8997_buck2_,
-};
-
-static struct regulator_init_data __initdata max8997_buck3_data = {
-       .constraints    = {
-               .name           = "VG3D_1.1V_C210",
-               .min_uV         = 900000,
-               .max_uV         = 1100000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                 REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(max8997_buck3_),
-       .consumer_supplies = max8997_buck3_,
-};
-
-static struct regulator_init_data __initdata max8997_buck4_data = {
-       .constraints    = {
-               .name           = "CAM_ISP_CORE_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(max8997_buck4_),
-       .consumer_supplies = max8997_buck4_,
-};
-
-static struct regulator_init_data __initdata max8997_buck5_data = {
-       .constraints    = {
-               .name           = "VMEM_1.2V_C210",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_buck6_data = {
-       .constraints    = {
-               .name           = "CAM_AF_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(max8997_buck6_),
-       .consumer_supplies = max8997_buck6_,
-};
-
-static struct regulator_init_data __initdata max8997_buck7_data = {
-       .constraints    = {
-               .name           = "VCC_SUB_2.0V",
-               .min_uV         = 2000000,
-               .max_uV         = 2000000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_32khz_ap_data = {
-       .constraints    = {
-               .name           = "32KHz AP",
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(max8997_32khz_ap_),
-       .consumer_supplies = max8997_32khz_ap_,
-};
-
-static struct regulator_init_data __initdata max8997_32khz_cp_data = {
-       .constraints    = {
-               .name           = "32KHz CP",
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_vichg_data = {
-       .constraints    = {
-               .name           = "VICHG",
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_esafeout1_data = {
-       .constraints    = {
-               .name           = "SAFEOUT1",
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_esafeout1_),
-       .consumer_supplies      = max8997_esafeout1_,
-};
-
-static struct regulator_init_data __initdata max8997_esafeout2_data = {
-       .constraints    = {
-               .name           = "SAFEOUT2",
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_esafeout2_),
-       .consumer_supplies      = max8997_esafeout2_,
-};
-
-static struct regulator_init_data __initdata max8997_charger_cv_data = {
-       .constraints    = {
-               .name           = "CHARGER_CV",
-               .min_uV         = 4200000,
-               .max_uV         = 4200000,
-               .apply_uV       = 1,
-       },
-};
-
-static struct regulator_init_data __initdata max8997_charger_data = {
-       .constraints    = {
-               .name           = "CHARGER",
-               .min_uA         = 200000,
-               .max_uA         = 950000,
-               .boot_on        = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS |
-                               REGULATOR_CHANGE_CURRENT,
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_charger_),
-       .consumer_supplies      = max8997_charger_,
-};
-
-static struct regulator_init_data __initdata max8997_charger_topoff_data = {
-       .constraints    = {
-               .name           = "CHARGER TOPOFF",
-               .min_uA         = 50000,
-               .max_uA         = 200000,
-               .valid_ops_mask = REGULATOR_CHANGE_CURRENT,
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(max8997_chg_toff_),
-       .consumer_supplies      = max8997_chg_toff_,
-};
-
-static struct max8997_regulator_data __initdata nuri_max8997_regulators[] = {
-       { MAX8997_LDO1, &max8997_ldo1_data },
-       { MAX8997_LDO2, &max8997_ldo2_data },
-       { MAX8997_LDO3, &max8997_ldo3_data },
-       { MAX8997_LDO4, &max8997_ldo4_data },
-       { MAX8997_LDO5, &max8997_ldo5_data },
-       { MAX8997_LDO6, &max8997_ldo6_data },
-       { MAX8997_LDO7, &max8997_ldo7_data },
-       { MAX8997_LDO8, &max8997_ldo8_data },
-       { MAX8997_LDO9, &max8997_ldo9_data },
-       { MAX8997_LDO10, &max8997_ldo10_data },
-       { MAX8997_LDO11, &max8997_ldo11_data },
-       { MAX8997_LDO12, &max8997_ldo12_data },
-       { MAX8997_LDO13, &max8997_ldo13_data },
-       { MAX8997_LDO14, &max8997_ldo14_data },
-       { MAX8997_LDO15, &max8997_ldo15_data },
-       { MAX8997_LDO16, &max8997_ldo16_data },
-
-       { MAX8997_LDO18, &max8997_ldo18_data },
-       { MAX8997_LDO21, &max8997_ldo21_data },
-
-       { MAX8997_BUCK1, &max8997_buck1_data },
-       { MAX8997_BUCK2, &max8997_buck2_data },
-       { MAX8997_BUCK3, &max8997_buck3_data },
-       { MAX8997_BUCK4, &max8997_buck4_data },
-       { MAX8997_BUCK5, &max8997_buck5_data },
-       { MAX8997_BUCK6, &max8997_buck6_data },
-       { MAX8997_BUCK7, &max8997_buck7_data },
-
-       { MAX8997_EN32KHZ_AP, &max8997_32khz_ap_data },
-       { MAX8997_EN32KHZ_CP, &max8997_32khz_cp_data },
-
-       { MAX8997_ENVICHG, &max8997_vichg_data },
-       { MAX8997_ESAFEOUT1, &max8997_esafeout1_data },
-       { MAX8997_ESAFEOUT2, &max8997_esafeout2_data },
-       { MAX8997_CHARGER_CV, &max8997_charger_cv_data },
-       { MAX8997_CHARGER, &max8997_charger_data },
-       { MAX8997_CHARGER_TOPOFF, &max8997_charger_topoff_data },
-};
-
-static struct max8997_platform_data __initdata nuri_max8997_pdata = {
-       .wakeup                 = 1,
-
-       .num_regulators         = ARRAY_SIZE(nuri_max8997_regulators),
-       .regulators             = nuri_max8997_regulators,
-
-       .buck125_gpios = { EXYNOS4_GPX0(5), EXYNOS4_GPX0(6), EXYNOS4_GPL0(0) },
-
-       .buck1_voltage[0] = 1350000, /* 1.35V */
-       .buck1_voltage[1] = 1300000, /* 1.3V */
-       .buck1_voltage[2] = 1250000, /* 1.25V */
-       .buck1_voltage[3] = 1200000, /* 1.2V */
-       .buck1_voltage[4] = 1150000, /* 1.15V */
-       .buck1_voltage[5] = 1100000, /* 1.1V */
-       .buck1_voltage[6] = 1000000, /* 1.0V */
-       .buck1_voltage[7] = 950000, /* 0.95V */
-
-       .buck2_voltage[0] = 1100000, /* 1.1V */
-       .buck2_voltage[1] = 1000000, /* 1.0V */
-       .buck2_voltage[2] = 950000, /* 0.95V */
-       .buck2_voltage[3] = 900000, /* 0.9V */
-       .buck2_voltage[4] = 1100000, /* 1.1V */
-       .buck2_voltage[5] = 1000000, /* 1.0V */
-       .buck2_voltage[6] = 950000, /* 0.95V */
-       .buck2_voltage[7] = 900000, /* 0.9V */
-
-       .buck5_voltage[0] = 1200000, /* 1.2V */
-       .buck5_voltage[1] = 1200000, /* 1.2V */
-       .buck5_voltage[2] = 1200000, /* 1.2V */
-       .buck5_voltage[3] = 1200000, /* 1.2V */
-       .buck5_voltage[4] = 1200000, /* 1.2V */
-       .buck5_voltage[5] = 1200000, /* 1.2V */
-       .buck5_voltage[6] = 1200000, /* 1.2V */
-       .buck5_voltage[7] = 1200000, /* 1.2V */
-};
-
-/* GPIO I2C 5 (PMIC) */
-enum { I2C5_MAX8997 };
-static struct i2c_board_info i2c5_devs[] __initdata = {
-       [I2C5_MAX8997] = {
-               I2C_BOARD_INFO("max8997", 0xCC >> 1),
-               .platform_data  = &nuri_max8997_pdata,
-       },
-};
-
-static struct max17042_platform_data nuri_battery_platform_data = {
-};
-
-/* GPIO I2C 9 (Fuel Gauge) */
-static struct i2c_gpio_platform_data i2c9_gpio_data = {
-       .sda_pin                = EXYNOS4_GPY4(0),      /* XM0ADDR_8 */
-       .scl_pin                = EXYNOS4_GPY4(1),      /* XM0ADDR_9 */
-};
-static struct platform_device i2c9_gpio = {
-       .name                   = "i2c-gpio",
-       .id                     = 9,
-       .dev                    = {
-               .platform_data  = &i2c9_gpio_data,
-       },
-};
-enum { I2C9_MAX17042};
-static struct i2c_board_info i2c9_devs[] __initdata = {
-       [I2C9_MAX17042] = {
-               I2C_BOARD_INFO("max17042", 0x36),
-               .platform_data = &nuri_battery_platform_data,
-       },
-};
-
-/* MAX8903 Secondary Charger */
-static struct regulator_consumer_supply supplies_max8903[] = {
-       REGULATOR_SUPPLY("vinchg2", "charger-manager.0"),
-};
-
-static struct regulator_init_data max8903_charger_en_data = {
-       .constraints = {
-               .name           = "VOUT_CHARGER",
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .boot_on        = 1,
-       },
-       .num_consumer_supplies = ARRAY_SIZE(supplies_max8903),
-       .consumer_supplies = supplies_max8903,
-};
-
-static struct fixed_voltage_config max8903_charger_en = {
-       .supply_name = "VOUT_CHARGER",
-       .microvolts = 5000000, /* Assume 5VDC */
-       .gpio = EXYNOS4_GPY4(5), /* TA_EN negaged */
-       .enable_high = 0, /* Enable = Low */
-       .enabled_at_boot = 1,
-       .init_data = &max8903_charger_en_data,
-};
-
-static struct platform_device max8903_fixed_reg_dev = {
-       .name = "reg-fixed-voltage",
-       .id = FIXED_REG_ID_MAX8903,
-       .dev = { .platform_data = &max8903_charger_en },
-};
-
-static struct max8903_pdata nuri_max8903 = {
-       /*
-        * cen: don't control with the driver, let it be
-        * controlled by regulator above
-        */
-       .dok = EXYNOS4_GPX1(4), /* TA_nCONNECTED */
-       /* uok, usus: not connected */
-       .chg = EXYNOS4_GPE2(0), /* TA_nCHG */
-       /* flt: vcc_1.8V_pda */
-       .dcm = EXYNOS4_GPL0(1), /* CURR_ADJ */
-
-       .dc_valid = true,
-       .usb_valid = false, /* USB is not wired to MAX8903 */
-};
-
-static struct platform_device nuri_max8903_device = {
-       .name                   = "max8903-charger",
-       .dev                    = {
-               .platform_data  = &nuri_max8903,
-       },
-};
-
-static void __init nuri_power_init(void)
-{
-       int gpio;
-       int ta_en = 0;
-
-       gpio = EXYNOS4_GPX0(7);
-       gpio_request(gpio, "AP_PMIC_IRQ");
-       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-
-       gpio = EXYNOS4_GPX2(3);
-       gpio_request(gpio, "FUEL_ALERT");
-       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-
-       gpio = nuri_max8903.dok;
-       gpio_request(gpio, "TA_nCONNECTED");
-       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-       ta_en = gpio_get_value(gpio) ? 0 : 1;
-
-       gpio = nuri_max8903.chg;
-       gpio_request(gpio, "TA_nCHG");
-       gpio_direction_input(gpio);
-
-       gpio = nuri_max8903.dcm;
-       gpio_request(gpio, "CURR_ADJ");
-       gpio_direction_output(gpio, ta_en);
-}
-
-/* USB EHCI */
-static struct s5p_ehci_platdata nuri_ehci_pdata;
-
-static void __init nuri_ehci_init(void)
-{
-       struct s5p_ehci_platdata *pdata = &nuri_ehci_pdata;
-
-       s5p_ehci_set_platdata(pdata);
-}
-
-/* USB OTG */
-static struct s3c_hsotg_plat nuri_hsotg_pdata;
-
-/* CAMERA */
-static struct regulator_consumer_supply cam_vt_cam15_supply =
-       REGULATOR_SUPPLY("vdd_core", "6-003c");
-
-static struct regulator_init_data cam_vt_cam15_reg_init_data = {
-       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &cam_vt_cam15_supply,
-};
-
-static struct fixed_voltage_config cam_vt_cam15_fixed_voltage_cfg = {
-       .supply_name    = "VT_CAM_1.5V",
-       .microvolts     = 1500000,
-       .gpio           = EXYNOS4_GPE2(2), /* VT_CAM_1.5V_EN */
-       .enable_high    = 1,
-       .init_data      = &cam_vt_cam15_reg_init_data,
-};
-
-static struct platform_device cam_vt_cam15_fixed_rdev = {
-       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_15V,
-       .dev = { .platform_data = &cam_vt_cam15_fixed_voltage_cfg },
-};
-
-static struct regulator_consumer_supply cam_vdda_supply[] = {
-       REGULATOR_SUPPLY("vdda", "6-003c"),
-       REGULATOR_SUPPLY("a_sensor", "0-001f"),
-};
-
-static struct regulator_init_data cam_vdda_reg_init_data = {
-       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
-       .num_consumer_supplies = ARRAY_SIZE(cam_vdda_supply),
-       .consumer_supplies = cam_vdda_supply,
-};
-
-static struct fixed_voltage_config cam_vdda_fixed_voltage_cfg = {
-       .supply_name    = "CAM_IO_EN",
-       .microvolts     = 2800000,
-       .gpio           = EXYNOS4_GPE2(1), /* CAM_IO_EN */
-       .enable_high    = 1,
-       .init_data      = &cam_vdda_reg_init_data,
-};
-
-static struct platform_device cam_vdda_fixed_rdev = {
-       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_A28V,
-       .dev = { .platform_data = &cam_vdda_fixed_voltage_cfg },
-};
-
-static struct regulator_consumer_supply camera_8m_12v_supply =
-       REGULATOR_SUPPLY("dig_12", "0-001f");
-
-static struct regulator_init_data cam_8m_12v_reg_init_data = {
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &camera_8m_12v_supply,
-       .constraints = {
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS
-       },
-};
-
-static struct fixed_voltage_config cam_8m_12v_fixed_voltage_cfg = {
-       .supply_name    = "8M_1.2V",
-       .microvolts     = 1200000,
-       .gpio           = EXYNOS4_GPE2(5), /* 8M_1.2V_EN */
-       .enable_high    = 1,
-       .init_data      = &cam_8m_12v_reg_init_data,
-};
-
-static struct platform_device cam_8m_12v_fixed_rdev = {
-       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_12V,
-       .dev = { .platform_data = &cam_8m_12v_fixed_voltage_cfg },
-};
-
-static struct s5p_platform_mipi_csis mipi_csis_platdata = {
-       .clk_rate       = 166000000UL,
-       .lanes          = 2,
-       .hs_settle      = 12,
-};
-
-#define GPIO_CAM_MEGA_RST      EXYNOS4_GPY3(7) /* ISP_RESET */
-#define GPIO_CAM_8M_ISP_INT    EXYNOS4_GPL2(5)
-#define GPIO_CAM_VT_NSTBY      EXYNOS4_GPL2(0)
-#define GPIO_CAM_VT_NRST       EXYNOS4_GPL2(1)
-
-static struct s5k6aa_platform_data s5k6aa_pldata = {
-       .mclk_frequency = 24000000UL,
-       .gpio_reset     = { GPIO_CAM_VT_NRST, 0 },
-       .gpio_stby      = { GPIO_CAM_VT_NSTBY, 0 },
-       .bus_type       = V4L2_MBUS_PARALLEL,
-       .horiz_flip     = 1,
-};
-
-static struct i2c_board_info s5k6aa_board_info = {
-       I2C_BOARD_INFO("S5K6AA", 0x3c),
-       .platform_data = &s5k6aa_pldata,
-};
-
-static struct m5mols_platform_data m5mols_platdata = {
-       .gpio_reset = GPIO_CAM_MEGA_RST,
-};
-
-static struct i2c_board_info m5mols_board_info = {
-       I2C_BOARD_INFO("M5MOLS", 0x1F),
-       .platform_data  = &m5mols_platdata,
-};
-
-static struct fimc_source_info nuri_camera_sensors[] = {
-       {
-               .flags          = V4L2_MBUS_PCLK_SAMPLE_RISING |
-                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
-               .fimc_bus_type  = FIMC_BUS_TYPE_ITU_601,
-               .board_info     = &s5k6aa_board_info,
-               .clk_frequency  = 24000000UL,
-               .i2c_bus_num    = 6,
-       }, {
-               .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
-                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
-               .fimc_bus_type  = FIMC_BUS_TYPE_MIPI_CSI2,
-               .board_info     = &m5mols_board_info,
-               .clk_frequency  = 24000000UL,
-       },
-};
-
-static struct s5p_platform_fimc fimc_md_platdata = {
-       .source_info    = nuri_camera_sensors,
-       .num_clients    = ARRAY_SIZE(nuri_camera_sensors),
-};
-
-static struct gpio nuri_camera_gpios[] = {
-       { GPIO_CAM_VT_NSTBY,    GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" },
-       { GPIO_CAM_VT_NRST,     GPIOF_OUT_INIT_LOW, "CAM_VGA_NRST"  },
-       { GPIO_CAM_8M_ISP_INT,  GPIOF_IN,           "8M_ISP_INT"  },
-       { GPIO_CAM_MEGA_RST,    GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" },
-};
-
-static void __init nuri_camera_init(void)
-{
-       s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
-                        &s5p_device_mipi_csis0);
-       s3c_set_platdata(&fimc_md_platdata,  sizeof(fimc_md_platdata),
-                        &s5p_device_fimc_md);
-
-       if (gpio_request_array(nuri_camera_gpios,
-                              ARRAY_SIZE(nuri_camera_gpios))) {
-               pr_err("%s: GPIO request failed\n", __func__);
-               return;
-       }
-
-       m5mols_board_info.irq = s5p_register_gpio_interrupt(GPIO_CAM_8M_ISP_INT);
-       if (m5mols_board_info.irq >= 0)
-               s3c_gpio_cfgpin(GPIO_CAM_8M_ISP_INT, S3C_GPIO_SFN(0xF));
-       else
-               pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__);
-
-       /* Free GPIOs controlled directly by the sensor drivers. */
-       gpio_free(GPIO_CAM_VT_NRST);
-       gpio_free(GPIO_CAM_VT_NSTBY);
-       gpio_free(GPIO_CAM_MEGA_RST);
-
-       if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) {
-               pr_err("%s: Camera port A setup failed\n", __func__);
-               return;
-       }
-       /* Increase drive strength of the sensor clock output */
-       s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4);
-}
-
-static struct s3c2410_platform_i2c nuri_i2c6_platdata __initdata = {
-       .frequency      = 400000U,
-       .sda_delay      = 200,
-       .bus_num        = 6,
-};
-
-static struct s3c2410_platform_i2c nuri_i2c0_platdata __initdata = {
-       .frequency      = 400000U,
-       .sda_delay      = 200,
-};
-
-/* DEVFREQ controlling memory/bus */
-static struct platform_device exynos4_bus_devfreq = {
-       .name                   = "exynos4210-busfreq",
-};
-
-static struct platform_device *nuri_devices[] __initdata = {
-       /* Samsung Platform Devices */
-       &s3c_device_i2c5, /* PMIC should initialize first */
-       &s3c_device_i2c0,
-       &s3c_device_i2c6,
-       &emmc_fixed_voltage,
-       &s5p_device_mipi_csis0,
-       &s5p_device_fimc0,
-       &s5p_device_fimc1,
-       &s5p_device_fimc2,
-       &s5p_device_fimc3,
-       &s5p_device_fimd0,
-       &s3c_device_hsmmc0,
-       &s3c_device_hsmmc2,
-       &s3c_device_hsmmc3,
-       &s3c_device_wdt,
-       &s3c_device_timer[0],
-       &s5p_device_ehci,
-       &s3c_device_i2c3,
-       &i2c9_gpio,
-       &s3c_device_adc,
-       &s5p_device_g2d,
-       &s5p_device_jpeg,
-       &s3c_device_rtc,
-       &s5p_device_mfc,
-       &s5p_device_mfc_l,
-       &s5p_device_mfc_r,
-       &s5p_device_fimc_md,
-       &s3c_device_usb_hsotg,
-
-       /* NURI Devices */
-       &nuri_gpio_keys,
-       &nuri_lcd_device,
-       &nuri_backlight_device,
-       &max8903_fixed_reg_dev,
-       &nuri_max8903_device,
-       &cam_vt_cam15_fixed_rdev,
-       &cam_vdda_fixed_rdev,
-       &cam_8m_12v_fixed_rdev,
-       &exynos4_bus_devfreq,
-};
-
-static void __init nuri_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-       s3c24xx_init_uarts(nuri_uartcfgs, ARRAY_SIZE(nuri_uartcfgs));
-       xxti_f = 0;
-       xusbxti_f = 24000000;
-}
-
-static void __init nuri_reserve(void)
-{
-       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
-}
-
-static void __init nuri_machine_init(void)
-{
-       nuri_sdhci_init();
-       nuri_tsp_init();
-       nuri_power_init();
-
-       s3c_i2c0_set_platdata(&nuri_i2c0_platdata);
-       i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
-       s3c_i2c3_set_platdata(&i2c3_data);
-       i2c_register_board_info(3, i2c3_devs, ARRAY_SIZE(i2c3_devs));
-       s3c_i2c5_set_platdata(NULL);
-       i2c5_devs[I2C5_MAX8997].irq = gpio_to_irq(EXYNOS4_GPX0(7));
-       i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
-       i2c9_devs[I2C9_MAX17042].irq = gpio_to_irq(EXYNOS4_GPX2(3));
-       i2c_register_board_info(9, i2c9_devs, ARRAY_SIZE(i2c9_devs));
-       s3c_i2c6_set_platdata(&nuri_i2c6_platdata);
-
-#ifdef CONFIG_DRM_EXYNOS
-       s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
-       exynos4_fimd0_gpio_setup_24bpp();
-#else
-       s5p_fimd0_set_platdata(&nuri_fb_pdata);
-#endif
-
-       nuri_camera_init();
-
-       nuri_ehci_init();
-       s3c_hsotg_set_platdata(&nuri_hsotg_pdata);
-
-       /* Last */
-       platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
-}
-
-MACHINE_START(NURI, "NURI")
-       /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = nuri_map_io,
-       .init_machine   = nuri_machine_init,
-       .init_late      = exynos_init_late,
-       .init_time      = exynos_init_time,
-       .reserve        = &nuri_reserve,
-       .restart        = exynos4_restart,
-MACHINE_END
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
deleted file mode 100644 (file)
index 27f03ed..0000000
+++ /dev/null
@@ -1,823 +0,0 @@
-/* linux/arch/arm/mach-exynos4/mach-origen.c
- *
- * Copyright (c) 2011 Insignal Co., Ltd.
- *             http://www.insignal.co.kr/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/serial_core.h>
-#include <linux/leds.h>
-#include <linux/gpio.h>
-#include <linux/mmc/host.h>
-#include <linux/platform_device.h>
-#include <linux/io.h>
-#include <linux/input.h>
-#include <linux/pwm.h>
-#include <linux/pwm_backlight.h>
-#include <linux/gpio_keys.h>
-#include <linux/i2c.h>
-#include <linux/regulator/machine.h>
-#include <linux/mfd/max8997.h>
-#include <linux/lcd.h>
-#include <linux/rfkill-gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <linux/platform_data/s3c-hsotg.h>
-#include <linux/platform_data/usb-ehci-s5p.h>
-#include <linux/platform_data/usb-ohci-exynos.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <video/platform_lcd.h>
-#include <video/samsung_fimd.h>
-
-#include <plat/regs-serial.h>
-#include <plat/cpu.h>
-#include <plat/devs.h>
-#include <plat/sdhci.h>
-#include <plat/clock.h>
-#include <plat/gpio-cfg.h>
-#include <plat/backlight.h>
-#include <plat/fb.h>
-#include <plat/mfc.h>
-#include <plat/hdmi.h>
-
-#include <mach/map.h>
-#include <mach/irqs.h>
-
-#include <drm/exynos_drm.h>
-#include "common.h"
-
-/* Following are default values for UCON, ULCON and UFCON UART registers */
-#define ORIGEN_UCON_DEFAULT    (S3C2410_UCON_TXILEVEL |        \
-                                S3C2410_UCON_RXILEVEL |        \
-                                S3C2410_UCON_TXIRQMODE |       \
-                                S3C2410_UCON_RXIRQMODE |       \
-                                S3C2410_UCON_RXFIFO_TOI |      \
-                                S3C2443_UCON_RXERR_IRQEN)
-
-#define ORIGEN_ULCON_DEFAULT   S3C2410_LCON_CS8
-
-#define ORIGEN_UFCON_DEFAULT   (S3C2410_UFCON_FIFOMODE |       \
-                                S5PV210_UFCON_TXTRIG4 |        \
-                                S5PV210_UFCON_RXTRIG4)
-
-static struct s3c2410_uartcfg origen_uartcfgs[] __initdata = {
-       [0] = {
-               .hwport         = 0,
-               .flags          = 0,
-               .ucon           = ORIGEN_UCON_DEFAULT,
-               .ulcon          = ORIGEN_ULCON_DEFAULT,
-               .ufcon          = ORIGEN_UFCON_DEFAULT,
-       },
-       [1] = {
-               .hwport         = 1,
-               .flags          = 0,
-               .ucon           = ORIGEN_UCON_DEFAULT,
-               .ulcon          = ORIGEN_ULCON_DEFAULT,
-               .ufcon          = ORIGEN_UFCON_DEFAULT,
-       },
-       [2] = {
-               .hwport         = 2,
-               .flags          = 0,
-               .ucon           = ORIGEN_UCON_DEFAULT,
-               .ulcon          = ORIGEN_ULCON_DEFAULT,
-               .ufcon          = ORIGEN_UFCON_DEFAULT,
-       },
-       [3] = {
-               .hwport         = 3,
-               .flags          = 0,
-               .ucon           = ORIGEN_UCON_DEFAULT,
-               .ulcon          = ORIGEN_ULCON_DEFAULT,
-               .ufcon          = ORIGEN_UFCON_DEFAULT,
-       },
-};
-
-static struct regulator_consumer_supply __initdata ldo3_consumer[] = {
-       REGULATOR_SUPPLY("vddcore", "s5p-mipi-csis.0"), /* MIPI */
-       REGULATOR_SUPPLY("vdd", "exynos4-hdmi"), /* HDMI */
-       REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"), /* HDMI */
-       REGULATOR_SUPPLY("vusb_a", "s3c-hsotg"), /* OTG */
-};
-static struct regulator_consumer_supply __initdata ldo6_consumer[] = {
-       REGULATOR_SUPPLY("vddio", "s5p-mipi-csis.0"), /* MIPI */
-};
-static struct regulator_consumer_supply __initdata ldo7_consumer[] = {
-       REGULATOR_SUPPLY("avdd", "alc5625"), /* Realtek ALC5625 */
-};
-static struct regulator_consumer_supply __initdata ldo8_consumer[] = {
-       REGULATOR_SUPPLY("vdd", "s5p-adc"), /* ADC */
-       REGULATOR_SUPPLY("vdd_osc", "exynos4-hdmi"), /* HDMI */
-       REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"), /* OTG */
-};
-static struct regulator_consumer_supply __initdata ldo9_consumer[] = {
-       REGULATOR_SUPPLY("dvdd", "swb-a31"), /* AR6003 WLAN & CSR 8810 BT */
-};
-static struct regulator_consumer_supply __initdata ldo11_consumer[] = {
-       REGULATOR_SUPPLY("dvdd", "alc5625"), /* Realtek ALC5625 */
-};
-static struct regulator_consumer_supply __initdata ldo14_consumer[] = {
-       REGULATOR_SUPPLY("avdd18", "swb-a31"), /* AR6003 WLAN & CSR 8810 BT */
-};
-static struct regulator_consumer_supply __initdata ldo17_consumer[] = {
-       REGULATOR_SUPPLY("vdd33", "swb-a31"), /* AR6003 WLAN & CSR 8810 BT */
-};
-static struct regulator_consumer_supply __initdata buck1_consumer[] = {
-       REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
-};
-static struct regulator_consumer_supply __initdata buck2_consumer[] = {
-       REGULATOR_SUPPLY("vdd_int", NULL), /* CPUFREQ */
-};
-static struct regulator_consumer_supply __initdata buck3_consumer[] = {
-       REGULATOR_SUPPLY("vdd_g3d", "mali_drm"), /* G3D */
-};
-static struct regulator_consumer_supply __initdata buck7_consumer[] = {
-       REGULATOR_SUPPLY("vcc", "platform-lcd"), /* LCD */
-};
-
-static struct regulator_init_data __initdata max8997_ldo1_data = {
-       .constraints    = {
-               .name           = "VDD_ABB_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo2_data = {
-       .constraints    = {
-               .name           = "VDD_ALIVE_1.1V",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo3_data = {
-       .constraints    = {
-               .name           = "VMIPI_1.1V",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo3_consumer),
-       .consumer_supplies      = ldo3_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo4_data = {
-       .constraints    = {
-               .name           = "VDD_RTC_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo6_data = {
-       .constraints    = {
-               .name           = "VMIPI_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo6_consumer),
-       .consumer_supplies      = ldo6_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo7_data = {
-       .constraints    = {
-               .name           = "VDD_AUD_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo7_consumer),
-       .consumer_supplies      = ldo7_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo8_data = {
-       .constraints    = {
-               .name           = "VADC_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo8_consumer),
-       .consumer_supplies      = ldo8_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo9_data = {
-       .constraints    = {
-               .name           = "DVDD_SWB_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo9_consumer),
-       .consumer_supplies      = ldo9_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo10_data = {
-       .constraints    = {
-               .name           = "VDD_PLL_1.1V",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_ldo11_data = {
-       .constraints    = {
-               .name           = "VDD_AUD_3V",
-               .min_uV         = 3000000,
-               .max_uV         = 3000000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo11_consumer),
-       .consumer_supplies      = ldo11_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo14_data = {
-       .constraints    = {
-               .name           = "AVDD18_SWB_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo14_consumer),
-       .consumer_supplies      = ldo14_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo17_data = {
-       .constraints    = {
-               .name           = "VDD_SWB_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(ldo17_consumer),
-       .consumer_supplies      = ldo17_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_ldo21_data = {
-       .constraints    = {
-               .name           = "VDD_MIF_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_buck1_data = {
-       .constraints    = {
-               .name           = "VDD_ARM_1.2V",
-               .min_uV         = 950000,
-               .max_uV         = 1350000,
-               .always_on      = 1,
-               .boot_on        = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(buck1_consumer),
-       .consumer_supplies      = buck1_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_buck2_data = {
-       .constraints    = {
-               .name           = "VDD_INT_1.1V",
-               .min_uV         = 900000,
-               .max_uV         = 1100000,
-               .always_on      = 1,
-               .boot_on        = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(buck2_consumer),
-       .consumer_supplies      = buck2_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_buck3_data = {
-       .constraints    = {
-               .name           = "VDD_G3D_1.1V",
-               .min_uV         = 900000,
-               .max_uV         = 1100000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                       REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(buck3_consumer),
-       .consumer_supplies      = buck3_consumer,
-};
-
-static struct regulator_init_data __initdata max8997_buck5_data = {
-       .constraints    = {
-               .name           = "VDDQ_M1M2_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data __initdata max8997_buck7_data = {
-       .constraints    = {
-               .name           = "VDD_LCD_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .boot_on        = 1,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(buck7_consumer),
-       .consumer_supplies      = buck7_consumer,
-};
-
-static struct max8997_regulator_data __initdata origen_max8997_regulators[] = {
-       { MAX8997_LDO1,         &max8997_ldo1_data },
-       { MAX8997_LDO2,         &max8997_ldo2_data },
-       { MAX8997_LDO3,         &max8997_ldo3_data },
-       { MAX8997_LDO4,         &max8997_ldo4_data },
-       { MAX8997_LDO6,         &max8997_ldo6_data },
-       { MAX8997_LDO7,         &max8997_ldo7_data },
-       { MAX8997_LDO8,         &max8997_ldo8_data },
-       { MAX8997_LDO9,         &max8997_ldo9_data },
-       { MAX8997_LDO10,        &max8997_ldo10_data },
-       { MAX8997_LDO11,        &max8997_ldo11_data },
-       { MAX8997_LDO14,        &max8997_ldo14_data },
-       { MAX8997_LDO17,        &max8997_ldo17_data },
-       { MAX8997_LDO21,        &max8997_ldo21_data },
-       { MAX8997_BUCK1,        &max8997_buck1_data },
-       { MAX8997_BUCK2,        &max8997_buck2_data },
-       { MAX8997_BUCK3,        &max8997_buck3_data },
-       { MAX8997_BUCK5,        &max8997_buck5_data },
-       { MAX8997_BUCK7,        &max8997_buck7_data },
-};
-
-static struct max8997_platform_data __initdata origen_max8997_pdata = {
-       .num_regulators = ARRAY_SIZE(origen_max8997_regulators),
-       .regulators     = origen_max8997_regulators,
-
-       .wakeup = true,
-       .buck1_gpiodvs  = false,
-       .buck2_gpiodvs  = false,
-       .buck5_gpiodvs  = false,
-
-       .ignore_gpiodvs_side_effect = true,
-       .buck125_default_idx = 0x0,
-
-       .buck125_gpios[0]       = EXYNOS4_GPX0(0),
-       .buck125_gpios[1]       = EXYNOS4_GPX0(1),
-       .buck125_gpios[2]       = EXYNOS4_GPX0(2),
-
-       .buck1_voltage[0]       = 1350000,
-       .buck1_voltage[1]       = 1300000,
-       .buck1_voltage[2]       = 1250000,
-       .buck1_voltage[3]       = 1200000,
-       .buck1_voltage[4]       = 1150000,
-       .buck1_voltage[5]       = 1100000,
-       .buck1_voltage[6]       = 1000000,
-       .buck1_voltage[7]       = 950000,
-
-       .buck2_voltage[0]       = 1100000,
-       .buck2_voltage[1]       = 1100000,
-       .buck2_voltage[2]       = 1100000,
-       .buck2_voltage[3]       = 1100000,
-       .buck2_voltage[4]       = 1000000,
-       .buck2_voltage[5]       = 1000000,
-       .buck2_voltage[6]       = 1000000,
-       .buck2_voltage[7]       = 1000000,
-
-       .buck5_voltage[0]       = 1200000,
-       .buck5_voltage[1]       = 1200000,
-       .buck5_voltage[2]       = 1200000,
-       .buck5_voltage[3]       = 1200000,
-       .buck5_voltage[4]       = 1200000,
-       .buck5_voltage[5]       = 1200000,
-       .buck5_voltage[6]       = 1200000,
-       .buck5_voltage[7]       = 1200000,
-};
-
-/* I2C0 */
-static struct i2c_board_info i2c0_devs[] __initdata = {
-       {
-               I2C_BOARD_INFO("max8997", (0xCC >> 1)),
-               .platform_data  = &origen_max8997_pdata,
-               .irq            = IRQ_EINT(4),
-       },
-};
-
-static struct s3c_sdhci_platdata origen_hsmmc0_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_INTERNAL,
-};
-
-static struct s3c_sdhci_platdata origen_hsmmc2_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_INTERNAL,
-};
-
-/* USB EHCI */
-static struct s5p_ehci_platdata origen_ehci_pdata;
-
-static void __init origen_ehci_init(void)
-{
-       struct s5p_ehci_platdata *pdata = &origen_ehci_pdata;
-
-       s5p_ehci_set_platdata(pdata);
-}
-
-/* USB OHCI */
-static struct exynos4_ohci_platdata origen_ohci_pdata;
-
-static void __init origen_ohci_init(void)
-{
-       struct exynos4_ohci_platdata *pdata = &origen_ohci_pdata;
-
-       exynos4_ohci_set_platdata(pdata);
-}
-
-/* USB OTG */
-static struct s3c_hsotg_plat origen_hsotg_pdata;
-
-static struct gpio_led origen_gpio_leds[] = {
-       {
-               .name                   = "origen::status1",
-               .default_trigger        = "heartbeat",
-               .gpio                   = EXYNOS4_GPX1(3),
-               .active_low             = 1,
-       },
-       {
-               .name                   = "origen::status2",
-               .default_trigger        = "mmc0",
-               .gpio                   = EXYNOS4_GPX1(4),
-               .active_low             = 1,
-       },
-};
-
-static struct gpio_led_platform_data origen_gpio_led_info = {
-       .leds           = origen_gpio_leds,
-       .num_leds       = ARRAY_SIZE(origen_gpio_leds),
-};
-
-static struct platform_device origen_leds_gpio = {
-       .name   = "leds-gpio",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &origen_gpio_led_info,
-       },
-};
-
-static struct gpio_keys_button origen_gpio_keys_table[] = {
-       {
-               .code                   = KEY_MENU,
-               .gpio                   = EXYNOS4_GPX1(5),
-               .desc                   = "gpio-keys: KEY_MENU",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .wakeup                 = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_HOME,
-               .gpio                   = EXYNOS4_GPX1(6),
-               .desc                   = "gpio-keys: KEY_HOME",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .wakeup                 = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_BACK,
-               .gpio                   = EXYNOS4_GPX1(7),
-               .desc                   = "gpio-keys: KEY_BACK",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .wakeup                 = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_UP,
-               .gpio                   = EXYNOS4_GPX2(0),
-               .desc                   = "gpio-keys: KEY_UP",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .wakeup                 = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_DOWN,
-               .gpio                   = EXYNOS4_GPX2(1),
-               .desc                   = "gpio-keys: KEY_DOWN",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .wakeup                 = 1,
-               .debounce_interval      = 1,
-       },
-};
-
-static struct gpio_keys_platform_data origen_gpio_keys_data = {
-       .buttons        = origen_gpio_keys_table,
-       .nbuttons       = ARRAY_SIZE(origen_gpio_keys_table),
-};
-
-static struct platform_device origen_device_gpiokeys = {
-       .name           = "gpio-keys",
-       .dev            = {
-               .platform_data  = &origen_gpio_keys_data,
-       },
-};
-
-static void lcd_hv070wsa_set_power(struct plat_lcd_data *pd, unsigned int power)
-{
-       int ret;
-
-       if (power)
-               ret = gpio_request_one(EXYNOS4_GPE3(4),
-                                       GPIOF_OUT_INIT_HIGH, "GPE3_4");
-       else
-               ret = gpio_request_one(EXYNOS4_GPE3(4),
-                                       GPIOF_OUT_INIT_LOW, "GPE3_4");
-
-       gpio_free(EXYNOS4_GPE3(4));
-
-       if (ret)
-               pr_err("failed to request gpio for LCD power: %d\n", ret);
-}
-
-static struct plat_lcd_data origen_lcd_hv070wsa_data = {
-       .set_power = lcd_hv070wsa_set_power,
-};
-
-static struct platform_device origen_lcd_hv070wsa = {
-       .name                   = "platform-lcd",
-       .dev.parent             = &s5p_device_fimd0.dev,
-       .dev.platform_data      = &origen_lcd_hv070wsa_data,
-};
-
-static struct pwm_lookup origen_pwm_lookup[] = {
-       PWM_LOOKUP("s3c24xx-pwm.0", 0, "pwm-backlight.0", NULL),
-};
-
-#ifdef CONFIG_DRM_EXYNOS_FIMD
-static struct exynos_drm_fimd_pdata drm_fimd_pdata = {
-       .panel  = {
-               .timing = {
-                       .left_margin    = 64,
-                       .right_margin   = 16,
-                       .upper_margin   = 64,
-                       .lower_margin   = 16,
-                       .hsync_len      = 48,
-                       .vsync_len      = 3,
-                       .xres           = 1024,
-                       .yres           = 600,
-               },
-       },
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
-                               VIDCON1_INV_VCLK,
-       .default_win    = 0,
-       .bpp            = 32,
-};
-#else
-static struct s3c_fb_pd_win origen_fb_win0 = {
-       .xres                   = 1024,
-       .yres                   = 600,
-       .max_bpp                = 32,
-       .default_bpp            = 24,
-       .virtual_x              = 1024,
-       .virtual_y              = 2 * 600,
-};
-
-static struct fb_videomode origen_lcd_timing = {
-       .left_margin    = 64,
-       .right_margin   = 16,
-       .upper_margin   = 64,
-       .lower_margin   = 16,
-       .hsync_len      = 48,
-       .vsync_len      = 3,
-       .xres           = 1024,
-       .yres           = 600,
-};
-
-static struct s3c_fb_platdata origen_lcd_pdata __initdata = {
-       .win[0]         = &origen_fb_win0,
-       .vtiming        = &origen_lcd_timing,
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
-                               VIDCON1_INV_VCLK,
-       .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
-};
-#endif
-
-/* Bluetooth rfkill gpio platform data */
-static struct rfkill_gpio_platform_data origen_bt_pdata = {
-       .reset_gpio     = EXYNOS4_GPX2(2),
-       .shutdown_gpio  = -1,
-       .type           = RFKILL_TYPE_BLUETOOTH,
-       .name           = "origen-bt",
-};
-
-/* Bluetooth Platform device */
-static struct platform_device origen_device_bluetooth = {
-       .name           = "rfkill_gpio",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &origen_bt_pdata,
-       },
-};
-
-static struct platform_device *origen_devices[] __initdata = {
-       &s3c_device_hsmmc2,
-       &s3c_device_hsmmc0,
-       &s3c_device_i2c0,
-       &s3c_device_rtc,
-       &s3c_device_usb_hsotg,
-       &s3c_device_wdt,
-       &s5p_device_ehci,
-       &s5p_device_fimc0,
-       &s5p_device_fimc1,
-       &s5p_device_fimc2,
-       &s5p_device_fimc3,
-       &s5p_device_fimc_md,
-       &s5p_device_fimd0,
-       &s5p_device_g2d,
-       &s5p_device_hdmi,
-       &s5p_device_i2c_hdmiphy,
-       &s5p_device_jpeg,
-       &s5p_device_mfc,
-       &s5p_device_mfc_l,
-       &s5p_device_mfc_r,
-       &s5p_device_mixer,
-       &exynos4_device_ohci,
-       &origen_device_gpiokeys,
-       &origen_lcd_hv070wsa,
-       &origen_leds_gpio,
-       &origen_device_bluetooth,
-};
-
-/* LCD Backlight data */
-static struct samsung_bl_gpio_info origen_bl_gpio_info = {
-       .no             = EXYNOS4_GPD0(0),
-       .func           = S3C_GPIO_SFN(2),
-};
-
-static struct platform_pwm_backlight_data origen_bl_data = {
-       .pwm_id         = 0,
-       .pwm_period_ns  = 1000,
-};
-
-static void __init origen_bt_setup(void)
-{
-       gpio_request(EXYNOS4_GPA0(0), "GPIO BT_UART");
-       /* 4 UART Pins configuration */
-       s3c_gpio_cfgrange_nopull(EXYNOS4_GPA0(0), 4, S3C_GPIO_SFN(2));
-       /* Setup BT Reset, this gpio will be requesed by rfkill-gpio */
-       s3c_gpio_cfgpin(EXYNOS4_GPX2(2), S3C_GPIO_OUTPUT);
-       s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE);
-}
-
-/* I2C module and id for HDMIPHY */
-static struct i2c_board_info hdmiphy_info = {
-       I2C_BOARD_INFO("hdmiphy-exynos4210", 0x38),
-};
-
-static void s5p_tv_setup(void)
-{
-       /* Direct HPD to HDMI chip */
-       gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug");
-       s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
-       s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
-}
-
-static void __init origen_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-       s3c24xx_init_uarts(origen_uartcfgs, ARRAY_SIZE(origen_uartcfgs));
-       xxti_f = 0;
-       xusbxti_f = 24000000;
-}
-
-static void __init origen_power_init(void)
-{
-       gpio_request(EXYNOS4_GPX0(4), "PMIC_IRQ");
-       s3c_gpio_cfgpin(EXYNOS4_GPX0(4), S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(EXYNOS4_GPX0(4), S3C_GPIO_PULL_NONE);
-}
-
-static void __init origen_reserve(void)
-{
-       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
-}
-
-static void __init origen_machine_init(void)
-{
-       origen_power_init();
-
-       s3c_i2c0_set_platdata(NULL);
-       i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs));
-
-       /*
-        * Since sdhci instance 2 can contain a bootable media,
-        * sdhci instance 0 is registered after instance 2.
-        */
-       s3c_sdhci2_set_platdata(&origen_hsmmc2_pdata);
-       s3c_sdhci0_set_platdata(&origen_hsmmc0_pdata);
-
-       origen_ehci_init();
-       origen_ohci_init();
-       s3c_hsotg_set_platdata(&origen_hsotg_pdata);
-
-       s5p_tv_setup();
-       s5p_i2c_hdmiphy_set_platdata(NULL);
-       s5p_hdmi_set_platdata(&hdmiphy_info, NULL, 0);
-
-#ifdef CONFIG_DRM_EXYNOS_FIMD
-       s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
-       exynos4_fimd0_gpio_setup_24bpp();
-#else
-       s5p_fimd0_set_platdata(&origen_lcd_pdata);
-#endif
-
-       platform_add_devices(origen_devices, ARRAY_SIZE(origen_devices));
-
-       pwm_add_table(origen_pwm_lookup, ARRAY_SIZE(origen_pwm_lookup));
-       samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data);
-
-       origen_bt_setup();
-}
-
-MACHINE_START(ORIGEN, "ORIGEN")
-       /* Maintainer: JeongHyeon Kim <jhkim@insignal.co.kr> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = origen_map_io,
-       .init_machine   = origen_machine_init,
-       .init_late      = exynos_init_late,
-       .init_time      = exynos_init_time,
-       .reserve        = &origen_reserve,
-       .restart        = exynos4_restart,
-MACHINE_END
diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c
deleted file mode 100644 (file)
index 2c8af96..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/mach-smdk4x12.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/gpio.h>
-#include <linux/i2c.h>
-#include <linux/input.h>
-#include <linux/io.h>
-#include <linux/lcd.h>
-#include <linux/mfd/max8997.h>
-#include <linux/mmc/host.h>
-#include <linux/platform_device.h>
-#include <linux/pwm.h>
-#include <linux/pwm_backlight.h>
-#include <linux/regulator/machine.h>
-#include <linux/serial_core.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <linux/platform_data/s3c-hsotg.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <video/samsung_fimd.h>
-#include <plat/backlight.h>
-#include <plat/clock.h>
-#include <plat/cpu.h>
-#include <plat/devs.h>
-#include <plat/fb.h>
-#include <plat/gpio-cfg.h>
-#include <plat/keypad.h>
-#include <plat/mfc.h>
-#include <plat/regs-serial.h>
-#include <plat/sdhci.h>
-
-#include <mach/irqs.h>
-#include <mach/map.h>
-
-#include <drm/exynos_drm.h>
-#include "common.h"
-
-/* Following are default values for UCON, ULCON and UFCON UART registers */
-#define SMDK4X12_UCON_DEFAULT  (S3C2410_UCON_TXILEVEL |        \
-                                S3C2410_UCON_RXILEVEL |        \
-                                S3C2410_UCON_TXIRQMODE |       \
-                                S3C2410_UCON_RXIRQMODE |       \
-                                S3C2410_UCON_RXFIFO_TOI |      \
-                                S3C2443_UCON_RXERR_IRQEN)
-
-#define SMDK4X12_ULCON_DEFAULT S3C2410_LCON_CS8
-
-#define SMDK4X12_UFCON_DEFAULT (S3C2410_UFCON_FIFOMODE |       \
-                                S5PV210_UFCON_TXTRIG4 |        \
-                                S5PV210_UFCON_RXTRIG4)
-
-static struct s3c2410_uartcfg smdk4x12_uartcfgs[] __initdata = {
-       [0] = {
-               .hwport         = 0,
-               .flags          = 0,
-               .ucon           = SMDK4X12_UCON_DEFAULT,
-               .ulcon          = SMDK4X12_ULCON_DEFAULT,
-               .ufcon          = SMDK4X12_UFCON_DEFAULT,
-       },
-       [1] = {
-               .hwport         = 1,
-               .flags          = 0,
-               .ucon           = SMDK4X12_UCON_DEFAULT,
-               .ulcon          = SMDK4X12_ULCON_DEFAULT,
-               .ufcon          = SMDK4X12_UFCON_DEFAULT,
-       },
-       [2] = {
-               .hwport         = 2,
-               .flags          = 0,
-               .ucon           = SMDK4X12_UCON_DEFAULT,
-               .ulcon          = SMDK4X12_ULCON_DEFAULT,
-               .ufcon          = SMDK4X12_UFCON_DEFAULT,
-       },
-       [3] = {
-               .hwport         = 3,
-               .flags          = 0,
-               .ucon           = SMDK4X12_UCON_DEFAULT,
-               .ulcon          = SMDK4X12_ULCON_DEFAULT,
-               .ufcon          = SMDK4X12_UFCON_DEFAULT,
-       },
-};
-
-static struct s3c_sdhci_platdata smdk4x12_hsmmc2_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_INTERNAL,
-#ifdef CONFIG_EXYNOS4_SDHCI_CH2_8BIT
-       .max_width              = 8,
-       .host_caps              = MMC_CAP_8_BIT_DATA,
-#endif
-};
-
-static struct s3c_sdhci_platdata smdk4x12_hsmmc3_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_INTERNAL,
-};
-
-static struct regulator_consumer_supply max8997_buck1 =
-       REGULATOR_SUPPLY("vdd_arm", NULL);
-
-static struct regulator_consumer_supply max8997_buck2 =
-       REGULATOR_SUPPLY("vdd_int", NULL);
-
-static struct regulator_consumer_supply max8997_buck3 =
-       REGULATOR_SUPPLY("vdd_g3d", NULL);
-
-static struct regulator_init_data max8997_buck1_data = {
-       .constraints    = {
-               .name           = "VDD_ARM_SMDK4X12",
-               .min_uV         = 925000,
-               .max_uV         = 1350000,
-               .always_on      = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &max8997_buck1,
-};
-
-static struct regulator_init_data max8997_buck2_data = {
-       .constraints    = {
-               .name           = "VDD_INT_SMDK4X12",
-               .min_uV         = 950000,
-               .max_uV         = 1150000,
-               .always_on      = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &max8997_buck2,
-};
-
-static struct regulator_init_data max8997_buck3_data = {
-       .constraints    = {
-               .name           = "VDD_G3D_SMDK4X12",
-               .min_uV         = 950000,
-               .max_uV         = 1150000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                 REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &max8997_buck3,
-};
-
-static struct max8997_regulator_data smdk4x12_max8997_regulators[] = {
-       { MAX8997_BUCK1, &max8997_buck1_data },
-       { MAX8997_BUCK2, &max8997_buck2_data },
-       { MAX8997_BUCK3, &max8997_buck3_data },
-};
-
-static struct max8997_platform_data smdk4x12_max8997_pdata = {
-       .num_regulators = ARRAY_SIZE(smdk4x12_max8997_regulators),
-       .regulators     = smdk4x12_max8997_regulators,
-
-       .buck1_voltage[0] = 1100000,    /* 1.1V */
-       .buck1_voltage[1] = 1100000,    /* 1.1V */
-       .buck1_voltage[2] = 1100000,    /* 1.1V */
-       .buck1_voltage[3] = 1100000,    /* 1.1V */
-       .buck1_voltage[4] = 1100000,    /* 1.1V */
-       .buck1_voltage[5] = 1100000,    /* 1.1V */
-       .buck1_voltage[6] = 1000000,    /* 1.0V */
-       .buck1_voltage[7] = 950000,     /* 0.95V */
-
-       .buck2_voltage[0] = 1100000,    /* 1.1V */
-       .buck2_voltage[1] = 1000000,    /* 1.0V */
-       .buck2_voltage[2] = 950000,     /* 0.95V */
-       .buck2_voltage[3] = 900000,     /* 0.9V */
-       .buck2_voltage[4] = 1100000,    /* 1.1V */
-       .buck2_voltage[5] = 1000000,    /* 1.0V */
-       .buck2_voltage[6] = 950000,     /* 0.95V */
-       .buck2_voltage[7] = 900000,     /* 0.9V */
-
-       .buck5_voltage[0] = 1100000,    /* 1.1V */
-       .buck5_voltage[1] = 1100000,    /* 1.1V */
-       .buck5_voltage[2] = 1100000,    /* 1.1V */
-       .buck5_voltage[3] = 1100000,    /* 1.1V */
-       .buck5_voltage[4] = 1100000,    /* 1.1V */
-       .buck5_voltage[5] = 1100000,    /* 1.1V */
-       .buck5_voltage[6] = 1100000,    /* 1.1V */
-       .buck5_voltage[7] = 1100000,    /* 1.1V */
-};
-
-static struct i2c_board_info smdk4x12_i2c_devs0[] __initdata = {
-       {
-               I2C_BOARD_INFO("max8997", 0x66),
-               .platform_data  = &smdk4x12_max8997_pdata,
-       }
-};
-
-static struct i2c_board_info smdk4x12_i2c_devs1[] __initdata = {
-       { I2C_BOARD_INFO("wm8994", 0x1a), }
-};
-
-static struct i2c_board_info smdk4x12_i2c_devs3[] __initdata = {
-       /* nothing here yet */
-};
-
-static struct i2c_board_info smdk4x12_i2c_devs7[] __initdata = {
-       /* nothing here yet */
-};
-
-static struct samsung_bl_gpio_info smdk4x12_bl_gpio_info = {
-       .no = EXYNOS4_GPD0(1),
-       .func = S3C_GPIO_SFN(2),
-};
-
-static struct platform_pwm_backlight_data smdk4x12_bl_data = {
-       .pwm_id = 1,
-       .pwm_period_ns  = 1000,
-};
-
-static struct pwm_lookup smdk4x12_pwm_lookup[] = {
-       PWM_LOOKUP("s3c24xx-pwm.1", 0, "pwm-backlight.0", NULL),
-};
-
-static uint32_t smdk4x12_keymap[] __initdata = {
-       /* KEY(row, col, keycode) */
-       KEY(1, 3, KEY_1), KEY(1, 4, KEY_2), KEY(1, 5, KEY_3),
-       KEY(1, 6, KEY_4), KEY(1, 7, KEY_5),
-       KEY(2, 5, KEY_D), KEY(2, 6, KEY_A), KEY(2, 7, KEY_B),
-       KEY(0, 7, KEY_E), KEY(0, 5, KEY_C)
-};
-
-static struct matrix_keymap_data smdk4x12_keymap_data __initdata = {
-       .keymap         = smdk4x12_keymap,
-       .keymap_size    = ARRAY_SIZE(smdk4x12_keymap),
-};
-
-static struct samsung_keypad_platdata smdk4x12_keypad_data __initdata = {
-       .keymap_data    = &smdk4x12_keymap_data,
-       .rows           = 3,
-       .cols           = 8,
-};
-
-#ifdef CONFIG_DRM_EXYNOS_FIMD
-static struct exynos_drm_fimd_pdata drm_fimd_pdata = {
-       .panel  = {
-               .timing = {
-                       .left_margin    = 8,
-                       .right_margin   = 8,
-                       .upper_margin   = 6,
-                       .lower_margin   = 6,
-                       .hsync_len      = 6,
-                       .vsync_len      = 4,
-                       .xres           = 480,
-                       .yres           = 800,
-               },
-       },
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .default_win    = 0,
-       .bpp            = 32,
-};
-#else
-static struct s3c_fb_pd_win smdk4x12_fb_win0 = {
-       .xres           = 480,
-       .yres           = 800,
-       .virtual_x      = 480,
-       .virtual_y      = 800 * 2,
-       .max_bpp        = 32,
-       .default_bpp    = 24,
-};
-
-static struct fb_videomode smdk4x12_lcd_timing = {
-       .left_margin    = 8,
-       .right_margin   = 8,
-       .upper_margin   = 6,
-       .lower_margin   = 6,
-       .hsync_len      = 6,
-       .vsync_len      = 4,
-       .xres           = 480,
-       .yres           = 800,
-};
-
-static struct s3c_fb_platdata smdk4x12_lcd_pdata __initdata = {
-       .win[0]         = &smdk4x12_fb_win0,
-       .vtiming        = &smdk4x12_lcd_timing,
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
-};
-#endif
-
-/* USB OTG */
-static struct s3c_hsotg_plat smdk4x12_hsotg_pdata;
-
-static struct platform_device *smdk4x12_devices[] __initdata = {
-       &s3c_device_hsmmc2,
-       &s3c_device_hsmmc3,
-       &s3c_device_i2c0,
-       &s3c_device_i2c1,
-       &s3c_device_i2c3,
-       &s3c_device_i2c7,
-       &s3c_device_rtc,
-       &s3c_device_usb_hsotg,
-       &s3c_device_wdt,
-       &s5p_device_fimc0,
-       &s5p_device_fimc1,
-       &s5p_device_fimc2,
-       &s5p_device_fimc3,
-       &s5p_device_fimc_md,
-       &s5p_device_fimd0,
-       &s5p_device_mfc,
-       &s5p_device_mfc_l,
-       &s5p_device_mfc_r,
-       &samsung_device_keypad,
-};
-
-static void __init smdk4x12_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-       s3c24xx_init_uarts(smdk4x12_uartcfgs, ARRAY_SIZE(smdk4x12_uartcfgs));
-}
-
-static void __init smdk4x12_reserve(void)
-{
-       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
-}
-
-static void __init smdk4x12_machine_init(void)
-{
-       s3c_i2c0_set_platdata(NULL);
-       i2c_register_board_info(0, smdk4x12_i2c_devs0,
-                               ARRAY_SIZE(smdk4x12_i2c_devs0));
-
-       s3c_i2c1_set_platdata(NULL);
-       i2c_register_board_info(1, smdk4x12_i2c_devs1,
-                               ARRAY_SIZE(smdk4x12_i2c_devs1));
-
-       s3c_i2c3_set_platdata(NULL);
-       i2c_register_board_info(3, smdk4x12_i2c_devs3,
-                               ARRAY_SIZE(smdk4x12_i2c_devs3));
-
-       s3c_i2c7_set_platdata(NULL);
-       i2c_register_board_info(7, smdk4x12_i2c_devs7,
-                               ARRAY_SIZE(smdk4x12_i2c_devs7));
-
-       samsung_bl_set(&smdk4x12_bl_gpio_info, &smdk4x12_bl_data);
-       pwm_add_table(smdk4x12_pwm_lookup, ARRAY_SIZE(smdk4x12_pwm_lookup));
-
-       samsung_keypad_set_platdata(&smdk4x12_keypad_data);
-
-       s3c_sdhci2_set_platdata(&smdk4x12_hsmmc2_pdata);
-       s3c_sdhci3_set_platdata(&smdk4x12_hsmmc3_pdata);
-
-       s3c_hsotg_set_platdata(&smdk4x12_hsotg_pdata);
-
-#ifdef CONFIG_DRM_EXYNOS_FIMD
-       s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
-       exynos4_fimd0_gpio_setup_24bpp();
-#else
-       s5p_fimd0_set_platdata(&smdk4x12_lcd_pdata);
-#endif
-
-       platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices));
-}
-
-MACHINE_START(SMDK4212, "SMDK4212")
-       /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = smdk4x12_map_io,
-       .init_machine   = smdk4x12_machine_init,
-       .init_time      = exynos_init_time,
-       .restart        = exynos4_restart,
-       .reserve        = &smdk4x12_reserve,
-MACHINE_END
-
-MACHINE_START(SMDK4412, "SMDK4412")
-       /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
-       /* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = smdk4x12_map_io,
-       .init_machine   = smdk4x12_machine_init,
-       .init_late      = exynos_init_late,
-       .init_time      = exynos_init_time,
-       .restart        = exynos4_restart,
-       .reserve        = &smdk4x12_reserve,
-MACHINE_END
diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c
deleted file mode 100644 (file)
index d95b8cf..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/* linux/arch/arm/mach-exynos4/mach-smdkv310.c
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/serial_core.h>
-#include <linux/delay.h>
-#include <linux/gpio.h>
-#include <linux/lcd.h>
-#include <linux/mmc/host.h>
-#include <linux/platform_device.h>
-#include <linux/smsc911x.h>
-#include <linux/io.h>
-#include <linux/i2c.h>
-#include <linux/input.h>
-#include <linux/pwm.h>
-#include <linux/pwm_backlight.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <linux/platform_data/s3c-hsotg.h>
-#include <linux/platform_data/usb-ehci-s5p.h>
-#include <linux/platform_data/usb-ohci-exynos.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <video/platform_lcd.h>
-#include <video/samsung_fimd.h>
-#include <plat/regs-serial.h>
-#include <plat/regs-srom.h>
-#include <plat/cpu.h>
-#include <plat/devs.h>
-#include <plat/fb.h>
-#include <plat/keypad.h>
-#include <plat/sdhci.h>
-#include <plat/gpio-cfg.h>
-#include <plat/backlight.h>
-#include <plat/mfc.h>
-#include <plat/clock.h>
-#include <plat/hdmi.h>
-
-#include <mach/irqs.h>
-#include <mach/map.h>
-
-#include <drm/exynos_drm.h>
-#include "common.h"
-
-/* Following are default values for UCON, ULCON and UFCON UART registers */
-#define SMDKV310_UCON_DEFAULT  (S3C2410_UCON_TXILEVEL |        \
-                                S3C2410_UCON_RXILEVEL |        \
-                                S3C2410_UCON_TXIRQMODE |       \
-                                S3C2410_UCON_RXIRQMODE |       \
-                                S3C2410_UCON_RXFIFO_TOI |      \
-                                S3C2443_UCON_RXERR_IRQEN)
-
-#define SMDKV310_ULCON_DEFAULT S3C2410_LCON_CS8
-
-#define SMDKV310_UFCON_DEFAULT (S3C2410_UFCON_FIFOMODE |       \
-                                S5PV210_UFCON_TXTRIG4 |        \
-                                S5PV210_UFCON_RXTRIG4)
-
-static struct s3c2410_uartcfg smdkv310_uartcfgs[] __initdata = {
-       [0] = {
-               .hwport         = 0,
-               .flags          = 0,
-               .ucon           = SMDKV310_UCON_DEFAULT,
-               .ulcon          = SMDKV310_ULCON_DEFAULT,
-               .ufcon          = SMDKV310_UFCON_DEFAULT,
-       },
-       [1] = {
-               .hwport         = 1,
-               .flags          = 0,
-               .ucon           = SMDKV310_UCON_DEFAULT,
-               .ulcon          = SMDKV310_ULCON_DEFAULT,
-               .ufcon          = SMDKV310_UFCON_DEFAULT,
-       },
-       [2] = {
-               .hwport         = 2,
-               .flags          = 0,
-               .ucon           = SMDKV310_UCON_DEFAULT,
-               .ulcon          = SMDKV310_ULCON_DEFAULT,
-               .ufcon          = SMDKV310_UFCON_DEFAULT,
-       },
-       [3] = {
-               .hwport         = 3,
-               .flags          = 0,
-               .ucon           = SMDKV310_UCON_DEFAULT,
-               .ulcon          = SMDKV310_ULCON_DEFAULT,
-               .ufcon          = SMDKV310_UFCON_DEFAULT,
-       },
-};
-
-static struct s3c_sdhci_platdata smdkv310_hsmmc0_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_INTERNAL,
-#ifdef CONFIG_EXYNOS4_SDHCI_CH0_8BIT
-       .max_width              = 8,
-       .host_caps              = MMC_CAP_8_BIT_DATA,
-#endif
-};
-
-static struct s3c_sdhci_platdata smdkv310_hsmmc1_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_GPIO,
-       .ext_cd_gpio            = EXYNOS4_GPK0(2),
-       .ext_cd_gpio_invert     = 1,
-};
-
-static struct s3c_sdhci_platdata smdkv310_hsmmc2_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_INTERNAL,
-#ifdef CONFIG_EXYNOS4_SDHCI_CH2_8BIT
-       .max_width              = 8,
-       .host_caps              = MMC_CAP_8_BIT_DATA,
-#endif
-};
-
-static struct s3c_sdhci_platdata smdkv310_hsmmc3_pdata __initdata = {
-       .cd_type                = S3C_SDHCI_CD_GPIO,
-       .ext_cd_gpio            = EXYNOS4_GPK2(2),
-       .ext_cd_gpio_invert     = 1,
-};
-
-static void lcd_lte480wv_set_power(struct plat_lcd_data *pd,
-                                  unsigned int power)
-{
-       if (power) {
-#if !defined(CONFIG_BACKLIGHT_PWM)
-               gpio_request_one(EXYNOS4_GPD0(1), GPIOF_OUT_INIT_HIGH, "GPD0");
-               gpio_free(EXYNOS4_GPD0(1));
-#endif
-               /* fire nRESET on power up */
-               gpio_request_one(EXYNOS4_GPX0(6), GPIOF_OUT_INIT_HIGH, "GPX0");
-               mdelay(100);
-
-               gpio_set_value(EXYNOS4_GPX0(6), 0);
-               mdelay(10);
-
-               gpio_set_value(EXYNOS4_GPX0(6), 1);
-               mdelay(10);
-
-               gpio_free(EXYNOS4_GPX0(6));
-       } else {
-#if !defined(CONFIG_BACKLIGHT_PWM)
-               gpio_request_one(EXYNOS4_GPD0(1), GPIOF_OUT_INIT_LOW, "GPD0");
-               gpio_free(EXYNOS4_GPD0(1));
-#endif
-       }
-}
-
-static struct plat_lcd_data smdkv310_lcd_lte480wv_data = {
-       .set_power              = lcd_lte480wv_set_power,
-};
-
-static struct platform_device smdkv310_lcd_lte480wv = {
-       .name                   = "platform-lcd",
-       .dev.parent             = &s5p_device_fimd0.dev,
-       .dev.platform_data      = &smdkv310_lcd_lte480wv_data,
-};
-
-#ifdef CONFIG_DRM_EXYNOS_FIMD
-static struct exynos_drm_fimd_pdata drm_fimd_pdata = {
-       .panel  = {
-               .timing = {
-                       .left_margin    = 13,
-                       .right_margin   = 8,
-                       .upper_margin   = 7,
-                       .lower_margin   = 5,
-                       .hsync_len      = 3,
-                       .vsync_len      = 1,
-                       .xres           = 800,
-                       .yres           = 480,
-               },
-       },
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .default_win    = 0,
-       .bpp            = 32,
-};
-#else
-static struct s3c_fb_pd_win smdkv310_fb_win0 = {
-       .max_bpp        = 32,
-       .default_bpp    = 24,
-       .xres           = 800,
-       .yres           = 480,
-};
-
-static struct fb_videomode smdkv310_lcd_timing = {
-       .left_margin    = 13,
-       .right_margin   = 8,
-       .upper_margin   = 7,
-       .lower_margin   = 5,
-       .hsync_len      = 3,
-       .vsync_len      = 1,
-       .xres           = 800,
-       .yres           = 480,
-};
-
-static struct s3c_fb_platdata smdkv310_lcd0_pdata __initdata = {
-       .win[0]         = &smdkv310_fb_win0,
-       .vtiming        = &smdkv310_lcd_timing,
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
-};
-#endif
-
-static struct resource smdkv310_smsc911x_resources[] = {
-       [0] = DEFINE_RES_MEM(EXYNOS4_PA_SROM_BANK(1), SZ_64K),
-       [1] = DEFINE_RES_NAMED(IRQ_EINT(5), 1, NULL, IORESOURCE_IRQ \
-                                               | IRQF_TRIGGER_LOW),
-};
-
-static struct smsc911x_platform_config smsc9215_config = {
-       .irq_polarity   = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
-       .irq_type       = SMSC911X_IRQ_TYPE_PUSH_PULL,
-       .flags          = SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
-       .phy_interface  = PHY_INTERFACE_MODE_MII,
-       .mac            = {0x00, 0x80, 0x00, 0x23, 0x45, 0x67},
-};
-
-static struct platform_device smdkv310_smsc911x = {
-       .name           = "smsc911x",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(smdkv310_smsc911x_resources),
-       .resource       = smdkv310_smsc911x_resources,
-       .dev            = {
-               .platform_data  = &smsc9215_config,
-       },
-};
-
-static uint32_t smdkv310_keymap[] __initdata = {
-       /* KEY(row, col, keycode) */
-       KEY(0, 3, KEY_1), KEY(0, 4, KEY_2), KEY(0, 5, KEY_3),
-       KEY(0, 6, KEY_4), KEY(0, 7, KEY_5),
-       KEY(1, 3, KEY_A), KEY(1, 4, KEY_B), KEY(1, 5, KEY_C),
-       KEY(1, 6, KEY_D), KEY(1, 7, KEY_E)
-};
-
-static struct matrix_keymap_data smdkv310_keymap_data __initdata = {
-       .keymap         = smdkv310_keymap,
-       .keymap_size    = ARRAY_SIZE(smdkv310_keymap),
-};
-
-static struct samsung_keypad_platdata smdkv310_keypad_data __initdata = {
-       .keymap_data    = &smdkv310_keymap_data,
-       .rows           = 2,
-       .cols           = 8,
-};
-
-static struct i2c_board_info i2c_devs1[] __initdata = {
-       {I2C_BOARD_INFO("wm8994", 0x1a),},
-};
-
-/* USB EHCI */
-static struct s5p_ehci_platdata smdkv310_ehci_pdata;
-
-static void __init smdkv310_ehci_init(void)
-{
-       struct s5p_ehci_platdata *pdata = &smdkv310_ehci_pdata;
-
-       s5p_ehci_set_platdata(pdata);
-}
-
-/* USB OHCI */
-static struct exynos4_ohci_platdata smdkv310_ohci_pdata;
-
-static void __init smdkv310_ohci_init(void)
-{
-       struct exynos4_ohci_platdata *pdata = &smdkv310_ohci_pdata;
-
-       exynos4_ohci_set_platdata(pdata);
-}
-
-/* USB OTG */
-static struct s3c_hsotg_plat smdkv310_hsotg_pdata;
-
-/* Audio device */
-static struct platform_device smdkv310_device_audio = {
-       .name = "smdk-audio",
-       .id = -1,
-};
-
-static struct platform_device *smdkv310_devices[] __initdata = {
-       &s3c_device_hsmmc0,
-       &s3c_device_hsmmc1,
-       &s3c_device_hsmmc2,
-       &s3c_device_hsmmc3,
-       &s3c_device_i2c1,
-       &s5p_device_i2c_hdmiphy,
-       &s3c_device_rtc,
-       &s3c_device_usb_hsotg,
-       &s3c_device_wdt,
-       &s5p_device_ehci,
-       &s5p_device_fimc0,
-       &s5p_device_fimc1,
-       &s5p_device_fimc2,
-       &s5p_device_fimc3,
-       &s5p_device_fimc_md,
-       &s5p_device_g2d,
-       &s5p_device_jpeg,
-       &exynos4_device_ac97,
-       &exynos4_device_i2s0,
-       &exynos4_device_ohci,
-       &samsung_device_keypad,
-       &s5p_device_mfc,
-       &s5p_device_mfc_l,
-       &s5p_device_mfc_r,
-       &exynos4_device_spdif,
-       &samsung_asoc_idma,
-       &s5p_device_fimd0,
-       &smdkv310_device_audio,
-       &smdkv310_lcd_lte480wv,
-       &smdkv310_smsc911x,
-       &exynos4_device_ahci,
-       &s5p_device_hdmi,
-       &s5p_device_mixer,
-};
-
-static void __init smdkv310_smsc911x_init(void)
-{
-       u32 cs1;
-
-       /* configure nCS1 width to 16 bits */
-       cs1 = __raw_readl(S5P_SROM_BW) &
-               ~(S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS1__SHIFT);
-       cs1 |= ((1 << S5P_SROM_BW__DATAWIDTH__SHIFT) |
-               (1 << S5P_SROM_BW__WAITENABLE__SHIFT) |
-               (1 << S5P_SROM_BW__BYTEENABLE__SHIFT)) <<
-               S5P_SROM_BW__NCS1__SHIFT;
-       __raw_writel(cs1, S5P_SROM_BW);
-
-       /* set timing for nCS1 suitable for ethernet chip */
-       __raw_writel((0x1 << S5P_SROM_BCX__PMC__SHIFT) |
-                    (0x9 << S5P_SROM_BCX__TACP__SHIFT) |
-                    (0xc << S5P_SROM_BCX__TCAH__SHIFT) |
-                    (0x1 << S5P_SROM_BCX__TCOH__SHIFT) |
-                    (0x6 << S5P_SROM_BCX__TACC__SHIFT) |
-                    (0x1 << S5P_SROM_BCX__TCOS__SHIFT) |
-                    (0x1 << S5P_SROM_BCX__TACS__SHIFT), S5P_SROM_BC1);
-}
-
-/* LCD Backlight data */
-static struct samsung_bl_gpio_info smdkv310_bl_gpio_info = {
-       .no = EXYNOS4_GPD0(1),
-       .func = S3C_GPIO_SFN(2),
-};
-
-static struct platform_pwm_backlight_data smdkv310_bl_data = {
-       .pwm_id = 1,
-       .pwm_period_ns  = 1000,
-};
-
-/* I2C module and id for HDMIPHY */
-static struct i2c_board_info hdmiphy_info = {
-       I2C_BOARD_INFO("hdmiphy-exynos4210", 0x38),
-};
-
-static struct pwm_lookup smdkv310_pwm_lookup[] = {
-       PWM_LOOKUP("s3c24xx-pwm.1", 0, "pwm-backlight.0", NULL),
-};
-
-static void s5p_tv_setup(void)
-{
-       /* direct HPD to HDMI chip */
-       WARN_ON(gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug"));
-       s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
-       s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
-}
-
-static void __init smdkv310_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-       s3c24xx_init_uarts(smdkv310_uartcfgs, ARRAY_SIZE(smdkv310_uartcfgs));
-       xxti_f = 12000000;
-       xusbxti_f = 24000000;
-}
-
-static void __init smdkv310_reserve(void)
-{
-       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
-}
-
-static void __init smdkv310_machine_init(void)
-{
-       s3c_i2c1_set_platdata(NULL);
-       i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
-
-       smdkv310_smsc911x_init();
-
-       s3c_sdhci0_set_platdata(&smdkv310_hsmmc0_pdata);
-       s3c_sdhci1_set_platdata(&smdkv310_hsmmc1_pdata);
-       s3c_sdhci2_set_platdata(&smdkv310_hsmmc2_pdata);
-       s3c_sdhci3_set_platdata(&smdkv310_hsmmc3_pdata);
-
-       s5p_tv_setup();
-       s5p_i2c_hdmiphy_set_platdata(NULL);
-       s5p_hdmi_set_platdata(&hdmiphy_info, NULL, 0);
-
-       samsung_keypad_set_platdata(&smdkv310_keypad_data);
-
-       samsung_bl_set(&smdkv310_bl_gpio_info, &smdkv310_bl_data);
-       pwm_add_table(smdkv310_pwm_lookup, ARRAY_SIZE(smdkv310_pwm_lookup));
-
-#ifdef CONFIG_DRM_EXYNOS_FIMD
-       s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
-       exynos4_fimd0_gpio_setup_24bpp();
-#else
-       s5p_fimd0_set_platdata(&smdkv310_lcd0_pdata);
-#endif
-
-       smdkv310_ehci_init();
-       smdkv310_ohci_init();
-       s3c_hsotg_set_platdata(&smdkv310_hsotg_pdata);
-
-       platform_add_devices(smdkv310_devices, ARRAY_SIZE(smdkv310_devices));
-}
-
-MACHINE_START(SMDKV310, "SMDKV310")
-       /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
-       /* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = smdkv310_map_io,
-       .init_machine   = smdkv310_machine_init,
-       .init_time      = exynos_init_time,
-       .reserve        = &smdkv310_reserve,
-       .restart        = exynos4_restart,
-MACHINE_END
-
-MACHINE_START(SMDKC210, "SMDKC210")
-       /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = smdkv310_map_io,
-       .init_machine   = smdkv310_machine_init,
-       .init_late      = exynos_init_late,
-       .init_time      = exynos_init_time,
-       .reserve        = &smdkv310_reserve,
-       .restart        = exynos4_restart,
-MACHINE_END
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
deleted file mode 100644 (file)
index 74ddb2b..0000000
+++ /dev/null
@@ -1,1159 +0,0 @@
-/* linux/arch/arm/mach-exynos4/mach-universal_c210.c
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/platform_device.h>
-#include <linux/serial_core.h>
-#include <linux/input.h>
-#include <linux/i2c.h>
-#include <linux/gpio_keys.h>
-#include <linux/gpio.h>
-#include <linux/interrupt.h>
-#include <linux/fb.h>
-#include <linux/mfd/max8998.h>
-#include <linux/regulator/machine.h>
-#include <linux/regulator/fixed.h>
-#include <linux/regulator/max8952.h>
-#include <linux/mmc/host.h>
-#include <linux/i2c-gpio.h>
-#include <linux/i2c/mcs.h>
-#include <linux/i2c/atmel_mxt_ts.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <linux/platform_data/mipi-csis.h>
-#include <linux/platform_data/s3c-hsotg.h>
-#include <drm/exynos_drm.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <video/samsung_fimd.h>
-#include <plat/regs-serial.h>
-#include <plat/clock.h>
-#include <plat/cpu.h>
-#include <plat/devs.h>
-#include <plat/gpio-cfg.h>
-#include <plat/fb.h>
-#include <plat/mfc.h>
-#include <plat/sdhci.h>
-#include <plat/fimc-core.h>
-#include <plat/camport.h>
-
-#include <mach/map.h>
-
-#include <media/v4l2-mediabus.h>
-#include <media/s5p_fimc.h>
-#include <media/m5mols.h>
-#include <media/s5k6aa.h>
-
-#include "common.h"
-
-/* Following are default values for UCON, ULCON and UFCON UART registers */
-#define UNIVERSAL_UCON_DEFAULT (S3C2410_UCON_TXILEVEL |        \
-                                S3C2410_UCON_RXILEVEL |        \
-                                S3C2410_UCON_TXIRQMODE |       \
-                                S3C2410_UCON_RXIRQMODE |       \
-                                S3C2410_UCON_RXFIFO_TOI |      \
-                                S3C2443_UCON_RXERR_IRQEN)
-
-#define UNIVERSAL_ULCON_DEFAULT        S3C2410_LCON_CS8
-
-#define UNIVERSAL_UFCON_DEFAULT        (S3C2410_UFCON_FIFOMODE |       \
-                                S5PV210_UFCON_TXTRIG256 |      \
-                                S5PV210_UFCON_RXTRIG256)
-
-static struct s3c2410_uartcfg universal_uartcfgs[] __initdata = {
-       [0] = {
-               .hwport         = 0,
-               .ucon           = UNIVERSAL_UCON_DEFAULT,
-               .ulcon          = UNIVERSAL_ULCON_DEFAULT,
-               .ufcon          = UNIVERSAL_UFCON_DEFAULT,
-       },
-       [1] = {
-               .hwport         = 1,
-               .ucon           = UNIVERSAL_UCON_DEFAULT,
-               .ulcon          = UNIVERSAL_ULCON_DEFAULT,
-               .ufcon          = UNIVERSAL_UFCON_DEFAULT,
-       },
-       [2] = {
-               .hwport         = 2,
-               .ucon           = UNIVERSAL_UCON_DEFAULT,
-               .ulcon          = UNIVERSAL_ULCON_DEFAULT,
-               .ufcon          = UNIVERSAL_UFCON_DEFAULT,
-       },
-       [3] = {
-               .hwport         = 3,
-               .ucon           = UNIVERSAL_UCON_DEFAULT,
-               .ulcon          = UNIVERSAL_ULCON_DEFAULT,
-               .ufcon          = UNIVERSAL_UFCON_DEFAULT,
-       },
-};
-
-static struct regulator_consumer_supply max8952_consumer =
-       REGULATOR_SUPPLY("vdd_arm", NULL);
-
-static struct regulator_init_data universal_max8952_reg_data = {
-       .constraints    = {
-               .name           = "VARM_1.2V",
-               .min_uV         = 770000,
-               .max_uV         = 1400000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
-               .always_on      = 1,
-               .boot_on        = 1,
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &max8952_consumer,
-};
-
-static struct max8952_platform_data universal_max8952_pdata __initdata = {
-       .gpio_vid0      = EXYNOS4_GPX0(3),
-       .gpio_vid1      = EXYNOS4_GPX0(4),
-       .gpio_en        = -1, /* Not controllable, set "Always High" */
-       .default_mode   = 0, /* vid0 = 0, vid1 = 0 */
-       .dvs_mode       = { 48, 32, 28, 18 }, /* 1.25, 1.20, 1.05, 0.95V */
-       .sync_freq      = 0, /* default: fastest */
-       .ramp_speed     = 0, /* default: fastest */
-       .reg_data       = &universal_max8952_reg_data,
-};
-
-static struct regulator_consumer_supply lp3974_buck1_consumer =
-       REGULATOR_SUPPLY("vdd_int", NULL);
-
-static struct regulator_consumer_supply lp3974_buck2_consumer =
-       REGULATOR_SUPPLY("vddg3d", NULL);
-
-static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
-       REGULATOR_SUPPLY("vdet", "s5p-sdo"),
-       REGULATOR_SUPPLY("vdd_reg", "0-003c"),
-};
-
-static struct regulator_init_data lp3974_buck1_data = {
-       .constraints    = {
-               .name           = "VINT_1.1V",
-               .min_uV         = 750000,
-               .max_uV         = 1500000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                       REGULATOR_CHANGE_STATUS,
-               .boot_on        = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &lp3974_buck1_consumer,
-};
-
-static struct regulator_init_data lp3974_buck2_data = {
-       .constraints    = {
-               .name           = "VG3D_1.1V",
-               .min_uV         = 750000,
-               .max_uV         = 1500000,
-               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                       REGULATOR_CHANGE_STATUS,
-               .boot_on        = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &lp3974_buck2_consumer,
-};
-
-static struct regulator_init_data lp3974_buck3_data = {
-       .constraints    = {
-               .name           = "VCC_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
-       .consumer_supplies = lp3974_buck3_consumer,
-};
-
-static struct regulator_init_data lp3974_buck4_data = {
-       .constraints    = {
-               .name           = "VMEM_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .apply_uV       = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_ldo2_data = {
-       .constraints    = {
-               .name           = "VALIVE_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_consumer_supply lp3974_ldo3_consumer[] = {
-       REGULATOR_SUPPLY("vusb_a", "s3c-hsotg"),
-       REGULATOR_SUPPLY("vdd", "exynos4-hdmi"),
-       REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"),
-       REGULATOR_SUPPLY("vddcore", "s5p-mipi-csis.0"),
-};
-
-static struct regulator_init_data lp3974_ldo3_data = {
-       .constraints    = {
-               .name           = "VUSB+MIPI_1.1V",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo3_consumer),
-       .consumer_supplies = lp3974_ldo3_consumer,
-};
-
-static struct regulator_consumer_supply lp3974_ldo4_consumer[] = {
-       REGULATOR_SUPPLY("vdd_osc", "exynos4-hdmi"),
-};
-
-static struct regulator_init_data lp3974_ldo4_data = {
-       .constraints    = {
-               .name           = "VADC_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo4_consumer),
-       .consumer_supplies = lp3974_ldo4_consumer,
-};
-
-static struct regulator_init_data lp3974_ldo5_data = {
-       .constraints    = {
-               .name           = "VTF_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_ldo6_data = {
-       .constraints    = {
-               .name           = "LDO6",
-               .min_uV         = 2000000,
-               .max_uV         = 2000000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_consumer_supply lp3974_ldo7_consumer[] = {
-       REGULATOR_SUPPLY("vddio", "s5p-mipi-csis.0"),
-};
-
-static struct regulator_init_data lp3974_ldo7_data = {
-       .constraints    = {
-               .name           = "VLCD+VMIPI_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(lp3974_ldo7_consumer),
-       .consumer_supplies      = lp3974_ldo7_consumer,
-};
-
-static struct regulator_consumer_supply lp3974_ldo8_consumer[] = {
-       REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"),
-       REGULATOR_SUPPLY("vdd33a_dac", "s5p-sdo"),
-};
-
-static struct regulator_init_data lp3974_ldo8_data = {
-       .constraints    = {
-               .name           = "VUSB+VDAC_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo8_consumer),
-       .consumer_supplies = lp3974_ldo8_consumer,
-};
-
-static struct regulator_consumer_supply lp3974_ldo9_consumer =
-       REGULATOR_SUPPLY("vddio", "0-003c");
-
-static struct regulator_init_data lp3974_ldo9_data = {
-       .constraints    = {
-               .name           = "VCC_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &lp3974_ldo9_consumer,
-};
-
-static struct regulator_init_data lp3974_ldo10_data = {
-       .constraints    = {
-               .name           = "VPLL_1.1V",
-               .min_uV         = 1100000,
-               .max_uV         = 1100000,
-               .boot_on        = 1,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_consumer_supply lp3974_ldo11_consumer =
-       REGULATOR_SUPPLY("dig_28", "0-001f");
-
-static struct regulator_init_data lp3974_ldo11_data = {
-       .constraints    = {
-               .name           = "CAM_AF_3.3V",
-               .min_uV         = 3300000,
-               .max_uV         = 3300000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &lp3974_ldo11_consumer,
-};
-
-static struct regulator_init_data lp3974_ldo12_data = {
-       .constraints    = {
-               .name           = "PS_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_ldo13_data = {
-       .constraints    = {
-               .name           = "VHIC_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_consumer_supply lp3974_ldo14_consumer =
-       REGULATOR_SUPPLY("dig_18", "0-001f");
-
-static struct regulator_init_data lp3974_ldo14_data = {
-       .constraints    = {
-               .name           = "CAM_I_HOST_1.8V",
-               .min_uV         = 1800000,
-               .max_uV         = 1800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &lp3974_ldo14_consumer,
-};
-
-
-static struct regulator_consumer_supply lp3974_ldo15_consumer =
-       REGULATOR_SUPPLY("dig_12", "0-001f");
-
-static struct regulator_init_data lp3974_ldo15_data = {
-       .constraints    = {
-               .name           = "CAM_S_DIG+FM33_CORE_1.2V",
-               .min_uV         = 1200000,
-               .max_uV         = 1200000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &lp3974_ldo15_consumer,
-};
-
-static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
-       REGULATOR_SUPPLY("vdda", "0-003c"),
-       REGULATOR_SUPPLY("a_sensor", "0-001f"),
-};
-
-static struct regulator_init_data lp3974_ldo16_data = {
-       .constraints    = {
-               .name           = "CAM_S_ANA_2.8V",
-               .min_uV         = 2800000,
-               .max_uV         = 2800000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(lp3974_ldo16_consumer),
-       .consumer_supplies      = lp3974_ldo16_consumer,
-};
-
-static struct regulator_init_data lp3974_ldo17_data = {
-       .constraints    = {
-               .name           = "VCC_3.0V_LCD",
-               .min_uV         = 3000000,
-               .max_uV         = 3000000,
-               .apply_uV       = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .boot_on        = 1,
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_32khz_ap_data = {
-       .constraints    = {
-               .name           = "32KHz AP",
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_32khz_cp_data = {
-       .constraints    = {
-               .name           = "32KHz CP",
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_vichg_data = {
-       .constraints    = {
-               .name           = "VICHG",
-               .state_mem      = {
-                       .disabled       = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_esafeout1_data = {
-       .constraints    = {
-               .name           = "SAFEOUT1",
-               .min_uV         = 4800000,
-               .max_uV         = 4800000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .always_on      = 1,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct regulator_init_data lp3974_esafeout2_data = {
-       .constraints    = {
-               .name           = "SAFEOUT2",
-               .boot_on        = 1,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               .state_mem      = {
-                       .enabled        = 1,
-               },
-       },
-};
-
-static struct max8998_regulator_data lp3974_regulators[] = {
-       { MAX8998_LDO2,  &lp3974_ldo2_data },
-       { MAX8998_LDO3,  &lp3974_ldo3_data },
-       { MAX8998_LDO4,  &lp3974_ldo4_data },
-       { MAX8998_LDO5,  &lp3974_ldo5_data },
-       { MAX8998_LDO6,  &lp3974_ldo6_data },
-       { MAX8998_LDO7,  &lp3974_ldo7_data },
-       { MAX8998_LDO8,  &lp3974_ldo8_data },
-       { MAX8998_LDO9,  &lp3974_ldo9_data },
-       { MAX8998_LDO10, &lp3974_ldo10_data },
-       { MAX8998_LDO11, &lp3974_ldo11_data },
-       { MAX8998_LDO12, &lp3974_ldo12_data },
-       { MAX8998_LDO13, &lp3974_ldo13_data },
-       { MAX8998_LDO14, &lp3974_ldo14_data },
-       { MAX8998_LDO15, &lp3974_ldo15_data },
-       { MAX8998_LDO16, &lp3974_ldo16_data },
-       { MAX8998_LDO17, &lp3974_ldo17_data },
-       { MAX8998_BUCK1, &lp3974_buck1_data },
-       { MAX8998_BUCK2, &lp3974_buck2_data },
-       { MAX8998_BUCK3, &lp3974_buck3_data },
-       { MAX8998_BUCK4, &lp3974_buck4_data },
-       { MAX8998_EN32KHZ_AP, &lp3974_32khz_ap_data },
-       { MAX8998_EN32KHZ_CP, &lp3974_32khz_cp_data },
-       { MAX8998_ENVICHG, &lp3974_vichg_data },
-       { MAX8998_ESAFEOUT1, &lp3974_esafeout1_data },
-       { MAX8998_ESAFEOUT2, &lp3974_esafeout2_data },
-};
-
-static struct max8998_platform_data universal_lp3974_pdata = {
-       .num_regulators         = ARRAY_SIZE(lp3974_regulators),
-       .regulators             = lp3974_regulators,
-       .buck1_voltage1         = 1100000,      /* INT */
-       .buck1_voltage2         = 1000000,
-       .buck1_voltage3         = 1100000,
-       .buck1_voltage4         = 1000000,
-       .buck1_set1             = EXYNOS4_GPX0(5),
-       .buck1_set2             = EXYNOS4_GPX0(6),
-       .buck2_voltage1         = 1200000,      /* G3D */
-       .buck2_voltage2         = 1100000,
-       .buck1_default_idx      = 0,
-       .buck2_set3             = EXYNOS4_GPE2(0),
-       .buck2_default_idx      = 0,
-       .wakeup                 = true,
-};
-
-
-enum fixed_regulator_id {
-       FIXED_REG_ID_MMC0,
-       FIXED_REG_ID_HDMI_5V,
-       FIXED_REG_ID_CAM_S_IF,
-       FIXED_REG_ID_CAM_I_CORE,
-       FIXED_REG_ID_CAM_VT_DIO,
-};
-
-static struct regulator_consumer_supply hdmi_fixed_consumer =
-       REGULATOR_SUPPLY("hdmi-en", "exynos4-hdmi");
-
-static struct regulator_init_data hdmi_fixed_voltage_init_data = {
-       .constraints            = {
-               .name           = "HDMI_5V",
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-       },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &hdmi_fixed_consumer,
-};
-
-static struct fixed_voltage_config hdmi_fixed_voltage_config = {
-       .supply_name            = "HDMI_EN1",
-       .microvolts             = 5000000,
-       .gpio                   = EXYNOS4_GPE0(1),
-       .enable_high            = true,
-       .init_data              = &hdmi_fixed_voltage_init_data,
-};
-
-static struct platform_device hdmi_fixed_voltage = {
-       .name                   = "reg-fixed-voltage",
-       .id                     = FIXED_REG_ID_HDMI_5V,
-       .dev                    = {
-               .platform_data  = &hdmi_fixed_voltage_config,
-       },
-};
-
-/* GPIO I2C 5 (PMIC) */
-static struct i2c_board_info i2c5_devs[] __initdata = {
-       {
-               I2C_BOARD_INFO("max8952", 0xC0 >> 1),
-               .platform_data  = &universal_max8952_pdata,
-       }, {
-               I2C_BOARD_INFO("lp3974", 0xCC >> 1),
-               .platform_data  = &universal_lp3974_pdata,
-       },
-};
-
-/* I2C3 (TSP) */
-static struct mxt_platform_data qt602240_platform_data = {
-       .x_line         = 19,
-       .y_line         = 11,
-       .x_size         = 800,
-       .y_size         = 480,
-       .blen           = 0x11,
-       .threshold      = 0x28,
-       .voltage        = 2800000,              /* 2.8V */
-       .orient         = MXT_DIAGONAL,
-       .irqflags       = IRQF_TRIGGER_FALLING,
-};
-
-static struct i2c_board_info i2c3_devs[] __initdata = {
-       {
-               I2C_BOARD_INFO("qt602240_ts", 0x4a),
-               .platform_data = &qt602240_platform_data,
-       },
-};
-
-static void __init universal_tsp_init(void)
-{
-       int gpio;
-
-       /* TSP_LDO_ON: XMDMADDR_11 */
-       gpio = EXYNOS4_GPE2(3);
-       gpio_request_one(gpio, GPIOF_OUT_INIT_HIGH, "TSP_LDO_ON");
-       gpio_export(gpio, 0);
-
-       /* TSP_INT: XMDMADDR_7 */
-       gpio = EXYNOS4_GPE1(7);
-       gpio_request(gpio, "TSP_INT");
-
-       s5p_register_gpio_interrupt(gpio);
-       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
-       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-       i2c3_devs[0].irq = gpio_to_irq(gpio);
-}
-
-
-/* GPIO I2C 12 (3 Touchkey) */
-static uint32_t touchkey_keymap[] = {
-       /* MCS_KEY_MAP(value, keycode) */
-       MCS_KEY_MAP(0, KEY_MENU),               /* KEY_SEND */
-       MCS_KEY_MAP(1, KEY_BACK),               /* KEY_END */
-};
-
-static struct mcs_platform_data touchkey_data = {
-       .keymap         = touchkey_keymap,
-       .keymap_size    = ARRAY_SIZE(touchkey_keymap),
-       .key_maxval     = 2,
-};
-
-/* GPIO I2C 3_TOUCH 2.8V */
-#define I2C_GPIO_BUS_12                12
-static struct i2c_gpio_platform_data i2c_gpio12_data = {
-       .sda_pin        = EXYNOS4_GPE4(0),      /* XMDMDATA_8 */
-       .scl_pin        = EXYNOS4_GPE4(1),      /* XMDMDATA_9 */
-};
-
-static struct platform_device i2c_gpio12 = {
-       .name           = "i2c-gpio",
-       .id             = I2C_GPIO_BUS_12,
-       .dev            = {
-               .platform_data  = &i2c_gpio12_data,
-       },
-};
-
-static struct i2c_board_info i2c_gpio12_devs[] __initdata = {
-       {
-               I2C_BOARD_INFO("mcs5080_touchkey", 0x20),
-               .platform_data = &touchkey_data,
-       },
-};
-
-static void __init universal_touchkey_init(void)
-{
-       int gpio;
-
-       gpio = EXYNOS4_GPE3(7);                 /* XMDMDATA_7 */
-       gpio_request(gpio, "3_TOUCH_INT");
-       s5p_register_gpio_interrupt(gpio);
-       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
-       i2c_gpio12_devs[0].irq = gpio_to_irq(gpio);
-
-       gpio = EXYNOS4_GPE3(3);                 /* XMDMDATA_3 */
-       gpio_request_one(gpio, GPIOF_OUT_INIT_HIGH, "3_TOUCH_EN");
-}
-
-static struct s3c2410_platform_i2c universal_i2c0_platdata __initdata = {
-       .frequency      = 300 * 1000,
-       .sda_delay      = 200,
-};
-
-/* GPIO KEYS */
-static struct gpio_keys_button universal_gpio_keys_tables[] = {
-       {
-               .code                   = KEY_VOLUMEUP,
-               .gpio                   = EXYNOS4_GPX2(0),      /* XEINT16 */
-               .desc                   = "gpio-keys: KEY_VOLUMEUP",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_VOLUMEDOWN,
-               .gpio                   = EXYNOS4_GPX2(1),      /* XEINT17 */
-               .desc                   = "gpio-keys: KEY_VOLUMEDOWN",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_CONFIG,
-               .gpio                   = EXYNOS4_GPX2(2),      /* XEINT18 */
-               .desc                   = "gpio-keys: KEY_CONFIG",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_CAMERA,
-               .gpio                   = EXYNOS4_GPX2(3),      /* XEINT19 */
-               .desc                   = "gpio-keys: KEY_CAMERA",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       }, {
-               .code                   = KEY_OK,
-               .gpio                   = EXYNOS4_GPX3(5),      /* XEINT29 */
-               .desc                   = "gpio-keys: KEY_OK",
-               .type                   = EV_KEY,
-               .active_low             = 1,
-               .debounce_interval      = 1,
-       },
-};
-
-static struct gpio_keys_platform_data universal_gpio_keys_data = {
-       .buttons        = universal_gpio_keys_tables,
-       .nbuttons       = ARRAY_SIZE(universal_gpio_keys_tables),
-};
-
-static struct platform_device universal_gpio_keys = {
-       .name                   = "gpio-keys",
-       .dev                    = {
-               .platform_data  = &universal_gpio_keys_data,
-       },
-};
-
-/* eMMC */
-static struct s3c_sdhci_platdata universal_hsmmc0_data __initdata = {
-       .max_width              = 8,
-       .host_caps              = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |
-                               MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
-       .cd_type                = S3C_SDHCI_CD_PERMANENT,
-};
-
-static struct regulator_consumer_supply mmc0_supplies[] = {
-       REGULATOR_SUPPLY("vmmc", "exynos4-sdhci.0"),
-};
-
-static struct regulator_init_data mmc0_fixed_voltage_init_data = {
-       .constraints            = {
-               .name           = "VMEM_VDD_2.8V",
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-       },
-       .num_consumer_supplies  = ARRAY_SIZE(mmc0_supplies),
-       .consumer_supplies      = mmc0_supplies,
-};
-
-static struct fixed_voltage_config mmc0_fixed_voltage_config = {
-       .supply_name            = "MASSMEMORY_EN",
-       .microvolts             = 2800000,
-       .gpio                   = EXYNOS4_GPE1(3),
-       .enable_high            = true,
-       .init_data              = &mmc0_fixed_voltage_init_data,
-};
-
-static struct platform_device mmc0_fixed_voltage = {
-       .name                   = "reg-fixed-voltage",
-       .id                     = FIXED_REG_ID_MMC0,
-       .dev                    = {
-               .platform_data  = &mmc0_fixed_voltage_config,
-       },
-};
-
-/* SD */
-static struct s3c_sdhci_platdata universal_hsmmc2_data __initdata = {
-       .max_width              = 4,
-       .host_caps              = MMC_CAP_4_BIT_DATA |
-                               MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .ext_cd_gpio            = EXYNOS4_GPX3(4),      /* XEINT_28 */
-       .ext_cd_gpio_invert     = 1,
-       .cd_type                = S3C_SDHCI_CD_GPIO,
-};
-
-/* WiFi */
-static struct s3c_sdhci_platdata universal_hsmmc3_data __initdata = {
-       .max_width              = 4,
-       .host_caps              = MMC_CAP_4_BIT_DATA |
-                               MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .cd_type                = S3C_SDHCI_CD_EXTERNAL,
-};
-
-static void __init universal_sdhci_init(void)
-{
-       s3c_sdhci0_set_platdata(&universal_hsmmc0_data);
-       s3c_sdhci2_set_platdata(&universal_hsmmc2_data);
-       s3c_sdhci3_set_platdata(&universal_hsmmc3_data);
-}
-
-/* I2C1 */
-static struct i2c_board_info i2c1_devs[] __initdata = {
-       /* Gyro, To be updated */
-};
-
-#ifdef CONFIG_DRM_EXYNOS
-static struct exynos_drm_fimd_pdata drm_fimd_pdata = {
-       .panel = {
-               .timing = {
-                       .left_margin    = 16,
-                       .right_margin   = 16,
-                       .upper_margin   = 2,
-                       .lower_margin   = 28,
-                       .hsync_len      = 2,
-                       .vsync_len      = 1,
-                       .xres           = 480,
-                       .yres           = 800,
-                       .refresh        = 55,
-               },
-       },
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
-                         VIDCON0_CLKSEL_LCD,
-       .vidcon1        = VIDCON1_INV_VCLK | VIDCON1_INV_VDEN
-                         | VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .default_win    = 3,
-       .bpp            = 32,
-};
-#else
-/* Frame Buffer */
-static struct s3c_fb_pd_win universal_fb_win0 = {
-       .max_bpp        = 32,
-       .default_bpp    = 16,
-       .xres           = 480,
-       .yres           = 800,
-       .virtual_x      = 480,
-       .virtual_y      = 2 * 800,
-};
-
-static struct fb_videomode universal_lcd_timing = {
-       .left_margin    = 16,
-       .right_margin   = 16,
-       .upper_margin   = 2,
-       .lower_margin   = 28,
-       .hsync_len      = 2,
-       .vsync_len      = 1,
-       .xres           = 480,
-       .yres           = 800,
-       .refresh        = 55,
-};
-
-static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
-       .win[0]         = &universal_fb_win0,
-       .vtiming        = &universal_lcd_timing,
-       .vidcon0        = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
-                         VIDCON0_CLKSEL_LCD,
-       .vidcon1        = VIDCON1_INV_VCLK | VIDCON1_INV_VDEN
-                         | VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
-       .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
-};
-#endif
-
-static struct regulator_consumer_supply cam_vt_dio_supply =
-       REGULATOR_SUPPLY("vdd_core", "0-003c");
-
-static struct regulator_init_data cam_vt_dio_reg_init_data = {
-       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &cam_vt_dio_supply,
-};
-
-static struct fixed_voltage_config cam_vt_dio_fixed_voltage_cfg = {
-       .supply_name    = "CAM_VT_D_IO",
-       .microvolts     = 2800000,
-       .gpio           = EXYNOS4_GPE2(1), /* CAM_PWR_EN2 */
-       .enable_high    = 1,
-       .init_data      = &cam_vt_dio_reg_init_data,
-};
-
-static struct platform_device cam_vt_dio_fixed_reg_dev = {
-       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_DIO,
-       .dev = { .platform_data = &cam_vt_dio_fixed_voltage_cfg },
-};
-
-static struct regulator_consumer_supply cam_i_core_supply =
-       REGULATOR_SUPPLY("core", "0-001f");
-
-static struct regulator_init_data cam_i_core_reg_init_data = {
-       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &cam_i_core_supply,
-};
-
-static struct fixed_voltage_config cam_i_core_fixed_voltage_cfg = {
-       .supply_name    = "CAM_I_CORE_1.2V",
-       .microvolts     = 1200000,
-       .gpio           = EXYNOS4_GPE2(2),      /* CAM_8M_CORE_EN */
-       .enable_high    = 1,
-       .init_data      = &cam_i_core_reg_init_data,
-};
-
-static struct platform_device cam_i_core_fixed_reg_dev = {
-       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_I_CORE,
-       .dev = { .platform_data = &cam_i_core_fixed_voltage_cfg },
-};
-
-static struct regulator_consumer_supply cam_s_if_supply =
-       REGULATOR_SUPPLY("d_sensor", "0-001f");
-
-static struct regulator_init_data cam_s_if_reg_init_data = {
-       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &cam_s_if_supply,
-};
-
-static struct fixed_voltage_config cam_s_if_fixed_voltage_cfg = {
-       .supply_name    = "CAM_S_IF_1.8V",
-       .microvolts     = 1800000,
-       .gpio           = EXYNOS4_GPE3(0),      /* CAM_PWR_EN1 */
-       .enable_high    = 1,
-       .init_data      = &cam_s_if_reg_init_data,
-};
-
-static struct platform_device cam_s_if_fixed_reg_dev = {
-       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_S_IF,
-       .dev = { .platform_data = &cam_s_if_fixed_voltage_cfg },
-};
-
-static struct s5p_platform_mipi_csis mipi_csis_platdata = {
-       .clk_rate       = 166000000UL,
-       .lanes          = 2,
-       .hs_settle      = 12,
-};
-
-#define GPIO_CAM_LEVEL_EN(n)   EXYNOS4_GPE4(n + 3)
-#define GPIO_CAM_8M_ISP_INT    EXYNOS4_GPX1(5) /* XEINT_13 */
-#define GPIO_CAM_MEGA_nRST     EXYNOS4_GPE2(5)
-#define GPIO_CAM_VGA_NRST      EXYNOS4_GPE4(7)
-#define GPIO_CAM_VGA_NSTBY     EXYNOS4_GPE4(6)
-
-static int s5k6aa_set_power(int on)
-{
-       gpio_set_value(GPIO_CAM_LEVEL_EN(2), !!on);
-       return 0;
-}
-
-static struct s5k6aa_platform_data s5k6aa_platdata = {
-       .mclk_frequency = 21600000UL,
-       .gpio_reset     = { GPIO_CAM_VGA_NRST, 0 },
-       .gpio_stby      = { GPIO_CAM_VGA_NSTBY, 0 },
-       .bus_type       = V4L2_MBUS_PARALLEL,
-       .horiz_flip     = 1,
-       .set_power      = s5k6aa_set_power,
-};
-
-static struct i2c_board_info s5k6aa_board_info = {
-       I2C_BOARD_INFO("S5K6AA", 0x3C),
-       .platform_data = &s5k6aa_platdata,
-};
-
-static int m5mols_set_power(struct device *dev, int on)
-{
-       gpio_set_value(GPIO_CAM_LEVEL_EN(1), !on);
-       gpio_set_value(GPIO_CAM_LEVEL_EN(2), !!on);
-       return 0;
-}
-
-static struct m5mols_platform_data m5mols_platdata = {
-       .gpio_reset     = GPIO_CAM_MEGA_nRST,
-       .reset_polarity = 0,
-       .set_power      = m5mols_set_power,
-};
-
-static struct i2c_board_info m5mols_board_info = {
-       I2C_BOARD_INFO("M5MOLS", 0x1F),
-       .platform_data = &m5mols_platdata,
-};
-
-static struct fimc_source_info universal_camera_sensors[] = {
-       {
-               .mux_id         = 0,
-               .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
-                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
-               .fimc_bus_type  = FIMC_BUS_TYPE_ITU_601,
-               .board_info     = &s5k6aa_board_info,
-               .i2c_bus_num    = 0,
-               .clk_frequency  = 24000000UL,
-       }, {
-               .mux_id         = 0,
-               .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
-                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
-               .fimc_bus_type  = FIMC_BUS_TYPE_MIPI_CSI2,
-               .board_info     = &m5mols_board_info,
-               .i2c_bus_num    = 0,
-               .clk_frequency  = 24000000UL,
-       },
-};
-
-static struct s5p_platform_fimc fimc_md_platdata = {
-       .source_info    = universal_camera_sensors,
-       .num_clients    = ARRAY_SIZE(universal_camera_sensors),
-};
-
-static struct gpio universal_camera_gpios[] = {
-       { GPIO_CAM_LEVEL_EN(1), GPIOF_OUT_INIT_HIGH, "CAM_LVL_EN1" },
-       { GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW,  "CAM_LVL_EN2" },
-       { GPIO_CAM_8M_ISP_INT,  GPIOF_IN,            "8M_ISP_INT"  },
-       { GPIO_CAM_MEGA_nRST,   GPIOF_OUT_INIT_LOW,  "CAM_8M_NRST" },
-       { GPIO_CAM_VGA_NRST,    GPIOF_OUT_INIT_LOW,  "CAM_VGA_NRST"  },
-       { GPIO_CAM_VGA_NSTBY,   GPIOF_OUT_INIT_LOW,  "CAM_VGA_NSTBY" },
-};
-
-/* USB OTG */
-static struct s3c_hsotg_plat universal_hsotg_pdata;
-
-static void __init universal_camera_init(void)
-{
-       s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
-                        &s5p_device_mipi_csis0);
-       s3c_set_platdata(&fimc_md_platdata,  sizeof(fimc_md_platdata),
-                        &s5p_device_fimc_md);
-
-       if (gpio_request_array(universal_camera_gpios,
-                              ARRAY_SIZE(universal_camera_gpios))) {
-               pr_err("%s: GPIO request failed\n", __func__);
-               return;
-       }
-
-       if (!s3c_gpio_cfgpin(GPIO_CAM_8M_ISP_INT, S3C_GPIO_SFN(0xf)))
-               m5mols_board_info.irq = gpio_to_irq(GPIO_CAM_8M_ISP_INT);
-       else
-               pr_err("Failed to configure 8M_ISP_INT GPIO\n");
-
-       /* Free GPIOs controlled directly by the sensor drivers. */
-       gpio_free(GPIO_CAM_MEGA_nRST);
-       gpio_free(GPIO_CAM_8M_ISP_INT);
-       gpio_free(GPIO_CAM_VGA_NRST);
-       gpio_free(GPIO_CAM_VGA_NSTBY);
-
-       if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A))
-               pr_err("Camera port A setup failed\n");
-}
-
-static struct platform_device *universal_devices[] __initdata = {
-       /* Samsung Platform Devices */
-       &s5p_device_mipi_csis0,
-       &s5p_device_fimc0,
-       &s5p_device_fimc1,
-       &s5p_device_fimc2,
-       &s5p_device_fimc3,
-       &s5p_device_g2d,
-       &mmc0_fixed_voltage,
-       &s3c_device_hsmmc0,
-       &s3c_device_hsmmc2,
-       &s3c_device_hsmmc3,
-       &s3c_device_i2c0,
-       &s3c_device_i2c3,
-       &s3c_device_i2c5,
-       &s5p_device_i2c_hdmiphy,
-       &hdmi_fixed_voltage,
-       &s5p_device_hdmi,
-       &s5p_device_sdo,
-       &s5p_device_mixer,
-
-       /* Universal Devices */
-       &i2c_gpio12,
-       &universal_gpio_keys,
-       &s5p_device_onenand,
-       &s5p_device_fimd0,
-       &s5p_device_jpeg,
-       &s3c_device_usb_hsotg,
-       &s5p_device_mfc,
-       &s5p_device_mfc_l,
-       &s5p_device_mfc_r,
-       &cam_vt_dio_fixed_reg_dev,
-       &cam_i_core_fixed_reg_dev,
-       &cam_s_if_fixed_reg_dev,
-       &s5p_device_fimc_md,
-};
-
-static void __init universal_map_io(void)
-{
-       exynos_init_io(NULL, 0);
-       s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
-       exynos_set_timer_source(BIT(2) | BIT(4));
-       xxti_f = 0;
-       xusbxti_f = 24000000;
-}
-
-static void s5p_tv_setup(void)
-{
-       /* direct HPD to HDMI chip */
-       gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug");
-       s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
-       s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
-}
-
-static void __init universal_reserve(void)
-{
-       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
-}
-
-static void __init universal_machine_init(void)
-{
-       universal_sdhci_init();
-       s5p_tv_setup();
-
-       s3c_i2c0_set_platdata(&universal_i2c0_platdata);
-       i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
-
-       universal_tsp_init();
-       s3c_i2c3_set_platdata(NULL);
-       i2c_register_board_info(3, i2c3_devs, ARRAY_SIZE(i2c3_devs));
-
-       s3c_i2c5_set_platdata(NULL);
-       s5p_i2c_hdmiphy_set_platdata(NULL);
-       i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
-
-#ifdef CONFIG_DRM_EXYNOS
-       s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
-       exynos4_fimd0_gpio_setup_24bpp();
-#else
-       s5p_fimd0_set_platdata(&universal_lcd_pdata);
-#endif
-
-       universal_touchkey_init();
-       i2c_register_board_info(I2C_GPIO_BUS_12, i2c_gpio12_devs,
-                       ARRAY_SIZE(i2c_gpio12_devs));
-
-       s3c_hsotg_set_platdata(&universal_hsotg_pdata);
-       universal_camera_init();
-
-       /* Last */
-       platform_add_devices(universal_devices, ARRAY_SIZE(universal_devices));
-}
-
-MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210")
-       /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
-       .atag_offset    = 0x100,
-       .smp            = smp_ops(exynos_smp_ops),
-       .init_irq       = exynos4_init_irq,
-       .map_io         = universal_map_io,
-       .init_machine   = universal_machine_init,
-       .init_late      = exynos_init_late,
-       .init_time      = exynos_init_time,
-       .reserve        = &universal_reserve,
-       .restart        = exynos4_restart,
-MACHINE_END
index a0e8ff7758a4c055e16323364167cfeb8fcfe2ab..d9c6d0ab6a0ca62a9f7d8678709d0fa4baf5c4fa 100644 (file)
@@ -200,7 +200,7 @@ static void __init exynos_smp_prepare_cpus(unsigned int max_cpus)
 {
        int i;
 
-       if (!(soc_is_exynos5250() || soc_is_exynos5440()))
+       if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
                scu_enable(scu_base_addr());
 
        /*
index e3faaa812016848ae81e7bef29c4aa556a1565a8..41c20692a13f0f189c1acaf011831048b6944a0a 100644 (file)
@@ -30,7 +30,6 @@
 #include <plat/regs-srom.h>
 
 #include <mach/regs-irq.h>
-#include <mach/regs-gpio.h>
 #include <mach/regs-clock.h>
 #include <mach/regs-pmu.h>
 #include <mach/pm-core.h>
index 9f1351de52f7533a731f6d2d2d26bb644c639c09..1703593e366ccd82452c080bc76c8ba56d6ada27 100644 (file)
@@ -74,17 +74,6 @@ static int exynos_pd_power_off(struct generic_pm_domain *domain)
        return exynos_pd_power(domain, false);
 }
 
-#define EXYNOS_GPD(PD, BASE, NAME)                     \
-static struct exynos_pm_domain PD = {                  \
-       .base = (void __iomem *)BASE,                   \
-       .name = NAME,                                   \
-       .pd = {                                         \
-               .power_off = exynos_pd_power_off,       \
-               .power_on = exynos_pd_power_on, \
-       },                                              \
-}
-
-#ifdef CONFIG_OF
 static void exynos_add_device_to_domain(struct exynos_pm_domain *pd,
                                         struct device *dev)
 {
@@ -157,7 +146,7 @@ static struct notifier_block platform_nb = {
        .notifier_call = exynos_pm_notifier_call,
 };
 
-static __init int exynos_pm_dt_parse_domains(void)
+static __init int exynos4_pm_init_power_domain(void)
 {
        struct platform_device *pdev;
        struct device_node *np;
@@ -193,94 +182,6 @@ static __init int exynos_pm_dt_parse_domains(void)
 
        return 0;
 }
-#else
-static __init int exynos_pm_dt_parse_domains(void)
-{
-       return 0;
-}
-#endif /* CONFIG_OF */
-
-static __init __maybe_unused void exynos_pm_add_dev_to_genpd(struct platform_device *pdev,
-                                               struct exynos_pm_domain *pd)
-{
-       if (pdev->dev.bus) {
-               if (!pm_genpd_add_device(&pd->pd, &pdev->dev))
-                       pm_genpd_dev_need_restore(&pdev->dev, true);
-               else
-                       pr_info("%s: error in adding %s device to %s power"
-                               "domain\n", __func__, dev_name(&pdev->dev),
-                               pd->name);
-       }
-}
-
-EXYNOS_GPD(exynos4_pd_mfc, S5P_PMU_MFC_CONF, "pd-mfc");
-EXYNOS_GPD(exynos4_pd_g3d, S5P_PMU_G3D_CONF, "pd-g3d");
-EXYNOS_GPD(exynos4_pd_lcd0, S5P_PMU_LCD0_CONF, "pd-lcd0");
-EXYNOS_GPD(exynos4_pd_lcd1, S5P_PMU_LCD1_CONF, "pd-lcd1");
-EXYNOS_GPD(exynos4_pd_tv, S5P_PMU_TV_CONF, "pd-tv");
-EXYNOS_GPD(exynos4_pd_cam, S5P_PMU_CAM_CONF, "pd-cam");
-EXYNOS_GPD(exynos4_pd_gps, S5P_PMU_GPS_CONF, "pd-gps");
-
-static struct exynos_pm_domain *exynos4_pm_domains[] = {
-       &exynos4_pd_mfc,
-       &exynos4_pd_g3d,
-       &exynos4_pd_lcd0,
-       &exynos4_pd_lcd1,
-       &exynos4_pd_tv,
-       &exynos4_pd_cam,
-       &exynos4_pd_gps,
-};
-
-static __init int exynos4_pm_init_power_domain(void)
-{
-       int idx;
-
-       if (of_have_populated_dt())
-               return exynos_pm_dt_parse_domains();
-
-       for (idx = 0; idx < ARRAY_SIZE(exynos4_pm_domains); idx++) {
-               struct exynos_pm_domain *pd = exynos4_pm_domains[idx];
-               int on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
-
-               pm_genpd_init(&pd->pd, NULL, !on);
-       }
-
-#ifdef CONFIG_S5P_DEV_FIMD0
-       exynos_pm_add_dev_to_genpd(&s5p_device_fimd0, &exynos4_pd_lcd0);
-#endif
-#ifdef CONFIG_S5P_DEV_TV
-       exynos_pm_add_dev_to_genpd(&s5p_device_hdmi, &exynos4_pd_tv);
-       exynos_pm_add_dev_to_genpd(&s5p_device_mixer, &exynos4_pd_tv);
-#endif
-#ifdef CONFIG_S5P_DEV_MFC
-       exynos_pm_add_dev_to_genpd(&s5p_device_mfc, &exynos4_pd_mfc);
-#endif
-#ifdef CONFIG_S5P_DEV_FIMC0
-       exynos_pm_add_dev_to_genpd(&s5p_device_fimc0, &exynos4_pd_cam);
-#endif
-#ifdef CONFIG_S5P_DEV_FIMC1
-       exynos_pm_add_dev_to_genpd(&s5p_device_fimc1, &exynos4_pd_cam);
-#endif
-#ifdef CONFIG_S5P_DEV_FIMC2
-       exynos_pm_add_dev_to_genpd(&s5p_device_fimc2, &exynos4_pd_cam);
-#endif
-#ifdef CONFIG_S5P_DEV_FIMC3
-       exynos_pm_add_dev_to_genpd(&s5p_device_fimc3, &exynos4_pd_cam);
-#endif
-#ifdef CONFIG_S5P_DEV_CSIS0
-       exynos_pm_add_dev_to_genpd(&s5p_device_mipi_csis0, &exynos4_pd_cam);
-#endif
-#ifdef CONFIG_S5P_DEV_CSIS1
-       exynos_pm_add_dev_to_genpd(&s5p_device_mipi_csis1, &exynos4_pd_cam);
-#endif
-#ifdef CONFIG_S5P_DEV_G2D
-       exynos_pm_add_dev_to_genpd(&s5p_device_g2d, &exynos4_pd_lcd0);
-#endif
-#ifdef CONFIG_S5P_DEV_JPEG
-       exynos_pm_add_dev_to_genpd(&s5p_device_jpeg, &exynos4_pd_cam);
-#endif
-       return 0;
-}
 arch_initcall(exynos4_pm_init_power_domain);
 
 int __init exynos_pm_late_initcall(void)
diff --git a/arch/arm/mach-exynos/setup-fimc.c b/arch/arm/mach-exynos/setup-fimc.c
deleted file mode 100644 (file)
index 6a45078..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics Co., Ltd.
- *
- * Exynos4 camera interface GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/gpio.h>
-#include <plat/gpio-cfg.h>
-#include <plat/camport.h>
-
-int exynos4_fimc_setup_gpio(enum s5p_camport_id id)
-{
-       u32 gpio8, gpio5;
-       u32 sfn;
-       int ret;
-
-       switch (id) {
-       case S5P_CAMPORT_A:
-               gpio8 = EXYNOS4_GPJ0(0); /* PCLK, VSYNC, HREF, DATA[0:4] */
-               gpio5 = EXYNOS4_GPJ1(0); /* DATA[5:7], CLKOUT, FIELD */
-               sfn = S3C_GPIO_SFN(2);
-               break;
-
-       case S5P_CAMPORT_B:
-               gpio8 = EXYNOS4_GPE0(0); /* DATA[0:7] */
-               gpio5 = EXYNOS4_GPE1(0); /* PCLK, VSYNC, HREF, CLKOUT, FIELD */
-               sfn = S3C_GPIO_SFN(3);
-               break;
-
-       default:
-               WARN(1, "Wrong camport id: %d\n", id);
-               return -EINVAL;
-       }
-
-       ret = s3c_gpio_cfgall_range(gpio8, 8, sfn, S3C_GPIO_PULL_UP);
-       if (ret)
-               return ret;
-
-       return s3c_gpio_cfgall_range(gpio5, 5, sfn, S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-fimd0.c b/arch/arm/mach-exynos/setup-fimd0.c
deleted file mode 100644 (file)
index 5665bb4..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* linux/arch/arm/mach-exynos4/setup-fimd0.c
- *
- * Copyright (c) 2009-2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * Base Exynos4 FIMD 0 configuration
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/fb.h>
-#include <linux/gpio.h>
-
-#include <video/samsung_fimd.h>
-#include <plat/gpio-cfg.h>
-
-#include <mach/map.h>
-
-void exynos4_fimd0_gpio_setup_24bpp(void)
-{
-       unsigned int reg;
-
-       s3c_gpio_cfgrange_nopull(EXYNOS4_GPF0(0), 8, S3C_GPIO_SFN(2));
-       s3c_gpio_cfgrange_nopull(EXYNOS4_GPF1(0), 8, S3C_GPIO_SFN(2));
-       s3c_gpio_cfgrange_nopull(EXYNOS4_GPF2(0), 8, S3C_GPIO_SFN(2));
-       s3c_gpio_cfgrange_nopull(EXYNOS4_GPF3(0), 4, S3C_GPIO_SFN(2));
-
-       /*
-        * Set DISPLAY_CONTROL register for Display path selection.
-        *
-        * DISPLAY_CONTROL[1:0]
-        * ---------------------
-        *  00 | MIE
-        *  01 | MDINE
-        *  10 | FIMD : selected
-        *  11 | FIMD
-        */
-       reg = __raw_readl(S3C_VA_SYS + 0x0210);
-       reg |= (1 << 1);
-       __raw_writel(reg, S3C_VA_SYS + 0x0210);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c0.c b/arch/arm/mach-exynos/setup-i2c0.c
deleted file mode 100644 (file)
index e2d9dfb..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2009-2012 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com/
- *
- * I2C0 GPIO configuration.
- *
- * Based on plat-s3c64xx/setup-i2c0.c
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-#include <plat/cpu.h>
-
-void s3c_i2c0_cfg_gpio(struct platform_device *dev)
-{
-       if (soc_is_exynos5250() || soc_is_exynos5440())
-               /* will be implemented with gpio function */
-               return;
-
-       s3c_gpio_cfgall_range(EXYNOS4_GPD1(0), 2,
-                             S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c1.c b/arch/arm/mach-exynos/setup-i2c1.c
deleted file mode 100644 (file)
index 8d2279c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c1.c
- *
- * Copyright (C) 2010 Samsung Electronics Co., Ltd.
- *
- * I2C1 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c1_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPD1(2), 2,
-                             S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c2.c b/arch/arm/mach-exynos/setup-i2c2.c
deleted file mode 100644 (file)
index 0ed62fc..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c2.c
- *
- * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
- *
- * I2C2 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c2_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPA0(6), 2,
-                             S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c3.c b/arch/arm/mach-exynos/setup-i2c3.c
deleted file mode 100644 (file)
index 7787fd2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c3.c
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *
- * I2C3 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c3_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPA1(2), 2,
-                             S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c4.c b/arch/arm/mach-exynos/setup-i2c4.c
deleted file mode 100644 (file)
index edc847f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c4.c
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *
- * I2C4 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c4_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPB(2), 2,
-                             S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c5.c b/arch/arm/mach-exynos/setup-i2c5.c
deleted file mode 100644 (file)
index d88af7f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c5.c
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *
- * I2C5 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c5_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPB(6), 2,
-                             S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c6.c b/arch/arm/mach-exynos/setup-i2c6.c
deleted file mode 100644 (file)
index c590286..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c6.c
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *
- * I2C6 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c6_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPC1(3), 2,
-                             S3C_GPIO_SFN(4), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-i2c7.c b/arch/arm/mach-exynos/setup-i2c7.c
deleted file mode 100644 (file)
index 1bba755..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * linux/arch/arm/mach-exynos4/setup-i2c7.c
- *
- * Copyright (c) 2010 Samsung Electronics Co., Ltd.
- *
- * I2C7 GPIO configuration.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-struct platform_device; /* don't need the contents */
-
-#include <linux/gpio.h>
-#include <linux/platform_data/i2c-s3c2410.h>
-#include <plat/gpio-cfg.h>
-
-void s3c_i2c7_cfg_gpio(struct platform_device *dev)
-{
-       s3c_gpio_cfgall_range(EXYNOS4_GPD0(2), 2,
-                             S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
-}
diff --git a/arch/arm/mach-exynos/setup-keypad.c b/arch/arm/mach-exynos/setup-keypad.c
deleted file mode 100644 (file)
index 7862bfb..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* linux/arch/arm/mach-exynos4/setup-keypad.c
- *
- * Copyright (c) 2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * GPIO configuration for Exynos4 KeyPad device
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/gpio.h>
-#include <plat/gpio-cfg.h>
-
-void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
-{
-       /* Keypads can be of various combinations, Just making sure */
-
-       if (rows > 8) {
-               /* Set all the necessary GPX2 pins: KP_ROW[0~7] */
-               s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), 8, S3C_GPIO_SFN(3),
-                                       S3C_GPIO_PULL_UP);
-
-               /* Set all the necessary GPX3 pins: KP_ROW[8~] */
-               s3c_gpio_cfgall_range(EXYNOS4_GPX3(0), (rows - 8),
-                                        S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
-       } else {
-               /* Set all the necessary GPX2 pins: KP_ROW[x] */
-               s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), rows, S3C_GPIO_SFN(3),
-                                       S3C_GPIO_PULL_UP);
-       }
-
-       /* Set all the necessary GPX1 pins to special-function 3: KP_COL[x] */
-       s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(0), cols, S3C_GPIO_SFN(3));
-}
diff --git a/arch/arm/mach-exynos/setup-sdhci-gpio.c b/arch/arm/mach-exynos/setup-sdhci-gpio.c
deleted file mode 100644 (file)
index d5b98c8..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* linux/arch/arm/mach-exynos4/setup-sdhci-gpio.c
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * EXYNOS4 - Helper functions for setting up SDHCI device(s) GPIO (HSMMC)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/interrupt.h>
-#include <linux/platform_device.h>
-#include <linux/io.h>
-#include <linux/gpio.h>
-#include <linux/mmc/host.h>
-#include <linux/mmc/card.h>
-
-#include <mach/gpio.h>
-#include <plat/gpio-cfg.h>
-#include <plat/sdhci.h>
-
-void exynos4_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width)
-{
-       struct s3c_sdhci_platdata *pdata = dev->dev.platform_data;
-       unsigned int gpio;
-
-       /* Set all the necessary GPK0[0:1] pins to special-function 2 */
-       for (gpio = EXYNOS4_GPK0(0); gpio < EXYNOS4_GPK0(2); gpio++) {
-               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-
-       switch (width) {
-       case 8:
-               for (gpio = EXYNOS4_GPK1(3); gpio <= EXYNOS4_GPK1(6); gpio++) {
-                       /* Data pin GPK1[3:6] to special-function 3 */
-                       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3));
-                       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-                       s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-               }
-       case 4:
-               for (gpio = EXYNOS4_GPK0(3); gpio <= EXYNOS4_GPK0(6); gpio++) {
-                       /* Data pin GPK0[3:6] to special-function 2 */
-                       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-                       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-                       s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-               }
-       default:
-               break;
-       }
-
-       if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) {
-               s3c_gpio_cfgpin(EXYNOS4_GPK0(2), S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(EXYNOS4_GPK0(2), S3C_GPIO_PULL_UP);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-}
-
-void exynos4_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width)
-{
-       struct s3c_sdhci_platdata *pdata = dev->dev.platform_data;
-       unsigned int gpio;
-
-       /* Set all the necessary GPK1[0:1] pins to special-function 2 */
-       for (gpio = EXYNOS4_GPK1(0); gpio < EXYNOS4_GPK1(2); gpio++) {
-               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-
-       for (gpio = EXYNOS4_GPK1(3); gpio <= EXYNOS4_GPK1(6); gpio++) {
-               /* Data pin GPK1[3:6] to special-function 2 */
-               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-
-       if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) {
-               s3c_gpio_cfgpin(EXYNOS4_GPK1(2), S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(EXYNOS4_GPK1(2), S3C_GPIO_PULL_UP);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-}
-
-void exynos4_setup_sdhci2_cfg_gpio(struct platform_device *dev, int width)
-{
-       struct s3c_sdhci_platdata *pdata = dev->dev.platform_data;
-       unsigned int gpio;
-
-       /* Set all the necessary GPK2[0:1] pins to special-function 2 */
-       for (gpio = EXYNOS4_GPK2(0); gpio < EXYNOS4_GPK2(2); gpio++) {
-               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-
-       switch (width) {
-       case 8:
-               for (gpio = EXYNOS4_GPK3(3); gpio <= EXYNOS4_GPK3(6); gpio++) {
-                       /* Data pin GPK3[3:6] to special-function 3 */
-                       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3));
-                       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-                       s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-               }
-       case 4:
-               for (gpio = EXYNOS4_GPK2(3); gpio <= EXYNOS4_GPK2(6); gpio++) {
-                       /* Data pin GPK2[3:6] to special-function 2 */
-                       s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-                       s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-                       s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-               }
-       default:
-               break;
-       }
-
-       if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) {
-               s3c_gpio_cfgpin(EXYNOS4_GPK2(2), S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(EXYNOS4_GPK2(2), S3C_GPIO_PULL_UP);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-}
-
-void exynos4_setup_sdhci3_cfg_gpio(struct platform_device *dev, int width)
-{
-       struct s3c_sdhci_platdata *pdata = dev->dev.platform_data;
-       unsigned int gpio;
-
-       /* Set all the necessary GPK3[0:1] pins to special-function 2 */
-       for (gpio = EXYNOS4_GPK3(0); gpio < EXYNOS4_GPK3(2); gpio++) {
-               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-
-       for (gpio = EXYNOS4_GPK3(3); gpio <= EXYNOS4_GPK3(6); gpio++) {
-               /* Data pin GPK3[3:6] to special-function 2 */
-               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-
-       if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) {
-               s3c_gpio_cfgpin(EXYNOS4_GPK3(2), S3C_GPIO_SFN(2));
-               s3c_gpio_setpull(EXYNOS4_GPK3(2), S3C_GPIO_PULL_UP);
-               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
-       }
-}
diff --git a/arch/arm/mach-exynos/setup-spi.c b/arch/arm/mach-exynos/setup-spi.c
deleted file mode 100644 (file)
index 4999829..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* linux/arch/arm/mach-exynos4/setup-spi.c
- *
- * Copyright (C) 2011 Samsung Electronics Ltd.
- *             http://www.samsung.com/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/gpio.h>
-#include <plat/gpio-cfg.h>
-
-#ifdef CONFIG_S3C64XX_DEV_SPI0
-int s3c64xx_spi0_cfg_gpio(void)
-{
-       s3c_gpio_cfgpin(EXYNOS4_GPB(0), S3C_GPIO_SFN(2));
-       s3c_gpio_setpull(EXYNOS4_GPB(0), S3C_GPIO_PULL_UP);
-       s3c_gpio_cfgall_range(EXYNOS4_GPB(2), 2,
-                             S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP);
-       return 0;
-}
-#endif
-
-#ifdef CONFIG_S3C64XX_DEV_SPI1
-int s3c64xx_spi1_cfg_gpio(void)
-{
-       s3c_gpio_cfgpin(EXYNOS4_GPB(4), S3C_GPIO_SFN(2));
-       s3c_gpio_setpull(EXYNOS4_GPB(4), S3C_GPIO_PULL_UP);
-       s3c_gpio_cfgall_range(EXYNOS4_GPB(6), 2,
-                             S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP);
-       return 0;
-}
-#endif
-
-#ifdef CONFIG_S3C64XX_DEV_SPI2
-int s3c64xx_spi2_cfg_gpio(void)
-{
-       s3c_gpio_cfgpin(EXYNOS4_GPC1(1), S3C_GPIO_SFN(5));
-       s3c_gpio_setpull(EXYNOS4_GPC1(1), S3C_GPIO_PULL_UP);
-       s3c_gpio_cfgall_range(EXYNOS4_GPC1(3), 2,
-                             S3C_GPIO_SFN(5), S3C_GPIO_PULL_UP);
-       return 0;
-}
-#endif
diff --git a/arch/arm/mach-exynos/setup-usb-phy.c b/arch/arm/mach-exynos/setup-usb-phy.c
deleted file mode 100644 (file)
index 6af4066..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics Co.Ltd
- * Author: Joonyoung Shim <jy0922.shim@samsung.com>
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- */
-
-#include <linux/clk.h>
-#include <linux/delay.h>
-#include <linux/err.h>
-#include <linux/io.h>
-#include <linux/platform_device.h>
-#include <mach/regs-pmu.h>
-#include <mach/regs-usb-phy.h>
-#include <plat/cpu.h>
-#include <plat/usb-phy.h>
-
-static atomic_t host_usage;
-
-static int exynos4_usb_host_phy_is_on(void)
-{
-       return (readl(EXYNOS4_PHYPWR) & PHY1_STD_ANALOG_POWERDOWN) ? 0 : 1;
-}
-
-static void exynos4210_usb_phy_clkset(struct platform_device *pdev)
-{
-       struct clk *xusbxti_clk;
-       u32 phyclk;
-
-       xusbxti_clk = clk_get(&pdev->dev, "xusbxti");
-       if (xusbxti_clk && !IS_ERR(xusbxti_clk)) {
-               if (soc_is_exynos4210()) {
-                       /* set clock frequency for PLL */
-                       phyclk = readl(EXYNOS4_PHYCLK) & ~EXYNOS4210_CLKSEL_MASK;
-
-                       switch (clk_get_rate(xusbxti_clk)) {
-                       case 12 * MHZ:
-                               phyclk |= EXYNOS4210_CLKSEL_12M;
-                               break;
-                       case 48 * MHZ:
-                               phyclk |= EXYNOS4210_CLKSEL_48M;
-                               break;
-                       default:
-                       case 24 * MHZ:
-                               phyclk |= EXYNOS4210_CLKSEL_24M;
-                               break;
-                       }
-                       writel(phyclk, EXYNOS4_PHYCLK);
-               } else if (soc_is_exynos4212() || soc_is_exynos4412()) {
-                       /* set clock frequency for PLL */
-                       phyclk = readl(EXYNOS4_PHYCLK) & ~EXYNOS4X12_CLKSEL_MASK;
-
-                       switch (clk_get_rate(xusbxti_clk)) {
-                       case 9600 * KHZ:
-                               phyclk |= EXYNOS4X12_CLKSEL_9600K;
-                               break;
-                       case 10 * MHZ:
-                               phyclk |= EXYNOS4X12_CLKSEL_10M;
-                               break;
-                       case 12 * MHZ:
-                               phyclk |= EXYNOS4X12_CLKSEL_12M;
-                               break;
-                       case 19200 * KHZ:
-                               phyclk |= EXYNOS4X12_CLKSEL_19200K;
-                               break;
-                       case 20 * MHZ:
-                               phyclk |= EXYNOS4X12_CLKSEL_20M;
-                               break;
-                       default:
-                       case 24 * MHZ:
-                               /* default reference clock */
-                               phyclk |= EXYNOS4X12_CLKSEL_24M;
-                               break;
-                       }
-                       writel(phyclk, EXYNOS4_PHYCLK);
-               }
-               clk_put(xusbxti_clk);
-       }
-}
-
-static int exynos4210_usb_phy0_init(struct platform_device *pdev)
-{
-       u32 rstcon;
-
-       writel(readl(S5P_USBDEVICE_PHY_CONTROL) | S5P_USBDEVICE_PHY_ENABLE,
-                       S5P_USBDEVICE_PHY_CONTROL);
-
-       exynos4210_usb_phy_clkset(pdev);
-
-       /* set to normal PHY0 */
-       writel((readl(EXYNOS4_PHYPWR) & ~PHY0_NORMAL_MASK), EXYNOS4_PHYPWR);
-
-       /* reset PHY0 and Link */
-       rstcon = readl(EXYNOS4_RSTCON) | PHY0_SWRST_MASK;
-       writel(rstcon, EXYNOS4_RSTCON);
-       udelay(10);
-
-       rstcon &= ~PHY0_SWRST_MASK;
-       writel(rstcon, EXYNOS4_RSTCON);
-
-       return 0;
-}
-
-static int exynos4210_usb_phy0_exit(struct platform_device *pdev)
-{
-       writel((readl(EXYNOS4_PHYPWR) | PHY0_ANALOG_POWERDOWN |
-                               PHY0_OTG_DISABLE), EXYNOS4_PHYPWR);
-
-       writel(readl(S5P_USBDEVICE_PHY_CONTROL) & ~S5P_USBDEVICE_PHY_ENABLE,
-                       S5P_USBDEVICE_PHY_CONTROL);
-
-       return 0;
-}
-
-static int exynos4210_usb_phy1_init(struct platform_device *pdev)
-{
-       struct clk *otg_clk;
-       u32 rstcon;
-       int err;
-
-       atomic_inc(&host_usage);
-
-       otg_clk = clk_get(&pdev->dev, "otg");
-       if (IS_ERR(otg_clk)) {
-               dev_err(&pdev->dev, "Failed to get otg clock\n");
-               return PTR_ERR(otg_clk);
-       }
-
-       err = clk_enable(otg_clk);
-       if (err) {
-               clk_put(otg_clk);
-               return err;
-       }
-
-       if (exynos4_usb_host_phy_is_on())
-               return 0;
-
-       writel(readl(S5P_USBHOST_PHY_CONTROL) | S5P_USBHOST_PHY_ENABLE,
-                       S5P_USBHOST_PHY_CONTROL);
-
-       exynos4210_usb_phy_clkset(pdev);
-
-       /* floating prevention logic: disable */
-       writel((readl(EXYNOS4_PHY1CON) | FPENABLEN), EXYNOS4_PHY1CON);
-
-       /* set to normal HSIC 0 and 1 of PHY1 */
-       writel((readl(EXYNOS4_PHYPWR) & ~PHY1_HSIC_NORMAL_MASK),
-                       EXYNOS4_PHYPWR);
-
-       /* set to normal standard USB of PHY1 */
-       writel((readl(EXYNOS4_PHYPWR) & ~PHY1_STD_NORMAL_MASK), EXYNOS4_PHYPWR);
-
-       /* reset all ports of both PHY and Link */
-       rstcon = readl(EXYNOS4_RSTCON) | HOST_LINK_PORT_SWRST_MASK |
-               PHY1_SWRST_MASK;
-       writel(rstcon, EXYNOS4_RSTCON);
-       udelay(10);
-
-       rstcon &= ~(HOST_LINK_PORT_SWRST_MASK | PHY1_SWRST_MASK);
-       writel(rstcon, EXYNOS4_RSTCON);
-       udelay(80);
-
-       clk_disable(otg_clk);
-       clk_put(otg_clk);
-
-       return 0;
-}
-
-static int exynos4210_usb_phy1_exit(struct platform_device *pdev)
-{
-       struct clk *otg_clk;
-       int err;
-
-       if (atomic_dec_return(&host_usage) > 0)
-               return 0;
-
-       otg_clk = clk_get(&pdev->dev, "otg");
-       if (IS_ERR(otg_clk)) {
-               dev_err(&pdev->dev, "Failed to get otg clock\n");
-               return PTR_ERR(otg_clk);
-       }
-
-       err = clk_enable(otg_clk);
-       if (err) {
-               clk_put(otg_clk);
-               return err;
-       }
-
-       writel((readl(EXYNOS4_PHYPWR) | PHY1_STD_ANALOG_POWERDOWN),
-                       EXYNOS4_PHYPWR);
-
-       writel(readl(S5P_USBHOST_PHY_CONTROL) & ~S5P_USBHOST_PHY_ENABLE,
-                       S5P_USBHOST_PHY_CONTROL);
-
-       clk_disable(otg_clk);
-       clk_put(otg_clk);
-
-       return 0;
-}
-
-int s5p_usb_phy_init(struct platform_device *pdev, int type)
-{
-       if (type == USB_PHY_TYPE_DEVICE)
-               return exynos4210_usb_phy0_init(pdev);
-       else if (type == USB_PHY_TYPE_HOST)
-               return exynos4210_usb_phy1_init(pdev);
-
-       return -EINVAL;
-}
-
-int s5p_usb_phy_exit(struct platform_device *pdev, int type)
-{
-       if (type == USB_PHY_TYPE_DEVICE)
-               return exynos4210_usb_phy0_exit(pdev);
-       else if (type == USB_PHY_TYPE_HOST)
-               return exynos4210_usb_phy1_exit(pdev);
-
-       return -EINVAL;
-}
index ba44328464f37c0cdce9eb9039fcfce8ad8dc743..60661a4b0e248fbac0455ec200641c2620ffe551 100644 (file)
@@ -56,9 +56,6 @@ config MXC_USE_EPIT
          uses the same clocks as the GPT. Anyway, on some systems the GPT
          may be in use for other purposes.
 
-config MXC_ULPI
-       bool
-
 config ARCH_HAS_RNGA
        bool
 
@@ -176,6 +173,7 @@ config ARCH_MX1ADS
 config MACH_SCB9328
        bool "Synertronixx scb9328"
        select IMX_HAVE_PLATFORM_IMX_UART
+       select SOC_IMX1
        help
          Say Y here if you are using a Synertronixx scb9328 board
 
@@ -233,7 +231,7 @@ config MACH_EUKREA_CPUIMX25SD
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX25
 
 choice
@@ -284,7 +282,7 @@ config MACH_PCM038
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_MXC_W1
        select IMX_HAVE_PLATFORM_SPI_IMX
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX27
        help
          Include support for phyCORE-i.MX27 (aka pcm038) platform. This
@@ -314,7 +312,7 @@ config MACH_CPUIMX27
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_MXC_W1
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX27
        help
          Include support for Eukrea CPUIMX27 platform. This includes
@@ -369,7 +367,7 @@ config MACH_MX27_3DS
        select IMX_HAVE_PLATFORM_MXC_MMC
        select IMX_HAVE_PLATFORM_SPI_IMX
        select MXC_DEBUG_BOARD
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX27
        help
          Include support for MX27PDK platform. This includes specific
@@ -414,7 +412,7 @@ config MACH_PCA100
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_MXC_W1
        select IMX_HAVE_PLATFORM_SPI_IMX
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX27
        help
          Include support for phyCARD-s (aka pca100) platform. This
@@ -481,7 +479,7 @@ config MACH_MX31LILLY
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_MMC
        select IMX_HAVE_PLATFORM_SPI_IMX
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX31
        help
          Include support for mx31 based LILLY1131 modules. This includes
@@ -497,7 +495,7 @@ config MACH_MX31LITE
        select IMX_HAVE_PLATFORM_MXC_RTC
        select IMX_HAVE_PLATFORM_SPI_IMX
        select LEDS_GPIO_REGISTER
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX31
        help
          Include support for MX31 LITEKIT platform. This includes specific
@@ -514,7 +512,7 @@ config MACH_PCM037
        select IMX_HAVE_PLATFORM_MXC_MMC
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_MXC_W1
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX31
        help
          Include support for Phytec pcm037 platform. This includes
@@ -544,7 +542,7 @@ config MACH_MX31_3DS
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_SPI_IMX
        select MXC_DEBUG_BOARD
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX31
        help
          Include support for MX31PDK (3DS) platform. This includes specific
@@ -571,7 +569,7 @@ config MACH_MX31MOBOARD
        select IMX_HAVE_PLATFORM_MXC_MMC
        select IMX_HAVE_PLATFORM_SPI_IMX
        select LEDS_GPIO_REGISTER
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX31
        help
          Include support for mx31moboard platform. This includes specific
@@ -595,7 +593,7 @@ config MACH_ARMADILLO5X0
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_MMC
        select IMX_HAVE_PLATFORM_MXC_NAND
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX31
        help
          Include support for Atmark Armadillo-500 platform. This includes
@@ -639,7 +637,7 @@ config MACH_PCM043
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX35
        help
          Include support for Phytec pcm043 platform. This includes
@@ -673,7 +671,7 @@ config MACH_EUKREA_CPUIMX35SD
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
-       select MXC_ULPI if USB_ULPI
+       select USB_ULPI_VIEWPORT if USB_ULPI
        select SOC_IMX35
        help
          Include support for Eukrea CPUIMX35 platform. This includes
@@ -816,6 +814,41 @@ config SOC_IMX6Q
        help
          This enables support for Freescale i.MX6 Quad processor.
 
+config SOC_IMX6SL
+       bool "i.MX6 SoloLite support"
+       select ARM_ERRATA_754322
+       select ARM_ERRATA_775420
+       select ARM_GIC
+       select CPU_V7
+       select HAVE_IMX_ANATOP
+       select HAVE_IMX_GPC
+       select HAVE_IMX_MMDC
+       select HAVE_IMX_SRC
+       select MFD_SYSCON
+       select PINCTRL
+       select PINCTRL_IMX6SL
+       select PL310_ERRATA_588369 if CACHE_PL310
+       select PL310_ERRATA_727915 if CACHE_PL310
+       select PL310_ERRATA_769419 if CACHE_PL310
+
+       help
+         This enables support for Freescale i.MX6 SoloLite processor.
+
+config SOC_VF610
+       bool "Vybrid Family VF610 support"
+       select CPU_V7
+       select ARM_GIC
+       select CLKSRC_OF
+       select PINCTRL
+       select PINCTRL_VF610
+       select VF_PIT_TIMER
+       select PL310_ERRATA_588369 if CACHE_PL310
+       select PL310_ERRATA_727915 if CACHE_PL310
+       select PL310_ERRATA_769419 if CACHE_PL310
+
+       help
+         This enable support for Freescale Vybrid VF610 processor.
+
 endif
 
 source "arch/arm/mach-imx/devices/Kconfig"
index 70ae7c490ac0428ce637e7921a26203ede04e1ac..e20f22d58fd8f00618dd57732e5e9a17a25d88c3 100644 (file)
@@ -23,7 +23,6 @@ obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o
 obj-$(CONFIG_MXC_TZIC) += tzic.o
 obj-$(CONFIG_MXC_AVIC) += avic.o
 
-obj-$(CONFIG_MXC_ULPI) += ulpi.o
 obj-$(CONFIG_MXC_USE_EPIT) += epit.o
 obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o
 
@@ -98,6 +97,7 @@ AFLAGS_headsmp.o :=-Wa,-march=armv7-a
 obj-$(CONFIG_SMP) += headsmp.o platsmp.o
 obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
 obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o
+obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o mach-imx6sl.o
 
 ifeq ($(CONFIG_PM),y)
 obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o headsmp.o
@@ -111,4 +111,6 @@ obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd51-baseboard.o
 obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o
 obj-$(CONFIG_SOC_IMX53) += mach-imx53.o
 
+obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o
+
 obj-y += devices/
index 6fc486b6a3c68f7a5bd6a5457680cd895f41dc76..04b1bad68350f3df315a758bca09c7dbd0c4c823 100644 (file)
@@ -73,6 +73,12 @@ static const char *mx53_cko2_sel[] = {
        "tve_sel", "lp_apm",
        "uart_root", "dummy"/* spdif0_clk_root */,
        "dummy", "dummy", };
+static const char *mx51_spdif_xtal_sel[] = { "osc", "ckih", "ckih2", };
+static const char *mx53_spdif_xtal_sel[] = { "osc", "ckih", "ckih2", "pll4_sw", };
+static const char *spdif_sel[] = { "pll1_sw", "pll2_sw", "pll3_sw", "spdif_xtal_sel", };
+static const char *spdif0_com_sel[] = { "spdif0_podf", "ssi1_root_gate", };
+static const char *mx51_spdif1_com_sel[] = { "spdif1_podf", "ssi2_root_gate", };
+
 
 enum imx5_clks {
        dummy, ckil, osc, ckih1, ckih2, ahb, ipg, axi_a, axi_b, uart_pred,
@@ -110,7 +116,9 @@ enum imx5_clks {
        owire_gate, gpu3d_s, gpu2d_s, gpu3d_gate, gpu2d_gate, garb_gate,
        cko1_sel, cko1_podf, cko1,
        cko2_sel, cko2_podf, cko2,
-       srtc_gate, pata_gate,
+       srtc_gate, pata_gate, sata_gate, spdif_xtal_sel, spdif0_sel,
+       spdif1_sel, spdif0_pred, spdif0_podf, spdif1_pred, spdif1_podf,
+       spdif0_com_s, spdif1_com_sel, spdif0_gate, spdif1_gate, spdif_ipg_gate,
        clk_max
 };
 
@@ -123,11 +131,13 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
 {
        int i;
 
+       of_clk_init(NULL);
+
        clk[dummy] = imx_clk_fixed("dummy", 0);
-       clk[ckil] = imx_clk_fixed("ckil", rate_ckil);
-       clk[osc] = imx_clk_fixed("osc", rate_osc);
-       clk[ckih1] = imx_clk_fixed("ckih1", rate_ckih1);
-       clk[ckih2] = imx_clk_fixed("ckih2", rate_ckih2);
+       clk[ckil] = imx_obtain_fixed_clock("ckil", rate_ckil);
+       clk[osc] = imx_obtain_fixed_clock("osc", rate_osc);
+       clk[ckih1] = imx_obtain_fixed_clock("ckih1", rate_ckih1);
+       clk[ckih2] = imx_obtain_fixed_clock("ckih2", rate_ckih2);
 
        clk[lp_apm] = imx_clk_mux("lp_apm", MXC_CCM_CCSR, 9, 1,
                                lp_apm_sel, ARRAY_SIZE(lp_apm_sel));
@@ -267,6 +277,13 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
        clk[owire_gate] = imx_clk_gate2("owire_gate", "per_root", MXC_CCM_CCGR2, 22);
        clk[srtc_gate] = imx_clk_gate2("srtc_gate", "per_root", MXC_CCM_CCGR4, 28);
        clk[pata_gate] = imx_clk_gate2("pata_gate", "ipg", MXC_CCM_CCGR4, 0);
+       clk[spdif0_sel] = imx_clk_mux("spdif0_sel", MXC_CCM_CSCMR2, 0, 2, spdif_sel, ARRAY_SIZE(spdif_sel));
+       clk[spdif0_pred] = imx_clk_divider("spdif0_pred", "spdif0_sel", MXC_CCM_CDCDR, 25, 3);
+       clk[spdif0_podf] = imx_clk_divider("spdif0_podf", "spdif0_pred", MXC_CCM_CDCDR, 19, 6);
+       clk[spdif0_com_s] = imx_clk_mux_flags("spdif0_com_sel", MXC_CCM_CSCMR2, 4, 1,
+                               spdif0_com_sel, ARRAY_SIZE(spdif0_com_sel), CLK_SET_RATE_PARENT);
+       clk[spdif0_gate] = imx_clk_gate2("spdif0_gate", "spdif0_com_sel", MXC_CCM_CCGR5, 26);
+       clk[spdif_ipg_gate] = imx_clk_gate2("spdif_ipg_gate", "ipg", MXC_CCM_CCGR5, 30);
 
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
@@ -378,6 +395,15 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
        clk[mipi_hsc2_gate] = imx_clk_gate2("mipi_hsc2_gate", "ipg", MXC_CCM_CCGR4, 8);
        clk[mipi_esc_gate] = imx_clk_gate2("mipi_esc_gate", "ipg", MXC_CCM_CCGR4, 10);
        clk[mipi_hsp_gate] = imx_clk_gate2("mipi_hsp_gate", "ipg", MXC_CCM_CCGR4, 12);
+       clk[spdif_xtal_sel] = imx_clk_mux("spdif_xtal_sel", MXC_CCM_CSCMR1, 2, 2,
+                               mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel));
+       clk[spdif1_sel] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2,
+                               spdif_sel, ARRAY_SIZE(spdif_sel));
+       clk[spdif1_pred] = imx_clk_divider("spdif1_podf", "spdif1_sel", MXC_CCM_CDCDR, 16, 3);
+       clk[spdif1_podf] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6);
+       clk[spdif1_com_sel] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1,
+                               mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel));
+       clk[spdif1_gate] = imx_clk_gate2("spdif1_gate", "spdif1_com_sel", MXC_CCM_CCGR5, 28);
 
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
@@ -485,6 +511,7 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
        clk[can2_serial_gate] = imx_clk_gate2("can2_serial_gate", "can_sel", MXC_CCM_CCGR4, 8);
        clk[can2_ipg_gate] = imx_clk_gate2("can2_ipg_gate", "ipg", MXC_CCM_CCGR4, 6);
        clk[i2c3_gate] = imx_clk_gate2("i2c3_gate", "per_root", MXC_CCM_CCGR1, 22);
+       clk[sata_gate] = imx_clk_gate2("sata_gate", "ipg", MXC_CCM_CCGR4, 2);
 
        clk[cko1_sel] = imx_clk_mux("cko1_sel", MXC_CCM_CCOSR, 0, 4,
                                mx53_cko1_sel, ARRAY_SIZE(mx53_cko1_sel));
@@ -495,6 +522,8 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
                                mx53_cko2_sel, ARRAY_SIZE(mx53_cko2_sel));
        clk[cko2_podf] = imx_clk_divider("cko2_podf", "cko2_sel", MXC_CCM_CCOSR, 21, 3);
        clk[cko2] = imx_clk_gate2("cko2", "cko2_podf", MXC_CCM_CCOSR, 24);
+       clk[spdif_xtal_sel] = imx_clk_mux("spdif_xtal_sel", MXC_CCM_CSCMR1, 2, 2,
+                               mx53_spdif_xtal_sel, ARRAY_SIZE(mx53_spdif_xtal_sel));
 
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
@@ -542,42 +571,12 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
        return 0;
 }
 
-#ifdef CONFIG_OF
-static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc,
-                                  unsigned long *ckih1, unsigned long *ckih2)
-{
-       struct device_node *np;
-
-       /* retrieve the freqency of fixed clocks from device tree */
-       for_each_compatible_node(np, NULL, "fixed-clock") {
-               u32 rate;
-               if (of_property_read_u32(np, "clock-frequency", &rate))
-                       continue;
-
-               if (of_device_is_compatible(np, "fsl,imx-ckil"))
-                       *ckil = rate;
-               else if (of_device_is_compatible(np, "fsl,imx-osc"))
-                       *osc = rate;
-               else if (of_device_is_compatible(np, "fsl,imx-ckih1"))
-                       *ckih1 = rate;
-               else if (of_device_is_compatible(np, "fsl,imx-ckih2"))
-                       *ckih2 = rate;
-       }
-}
-
 int __init mx51_clocks_init_dt(void)
 {
-       unsigned long ckil, osc, ckih1, ckih2;
-
-       clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
-       return mx51_clocks_init(ckil, osc, ckih1, ckih2);
+       return mx51_clocks_init(0, 0, 0, 0);
 }
 
 int __init mx53_clocks_init_dt(void)
 {
-       unsigned long ckil, osc, ckih1, ckih2;
-
-       clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
-       return mx53_clocks_init(ckil, osc, ckih1, ckih2);
+       return mx53_clocks_init(0, 0, 0, 0);
 }
-#endif
index 4e3148ce852dfe20faa2a820c19b083746ff8257..4282e99f5ca1803254a44449aee835c653429c6b 100644 (file)
@@ -238,7 +238,7 @@ enum mx6q_clks {
        pll4_audio, pll5_video, pll8_mlb, pll7_usb_host, pll6_enet, ssi1_ipg,
        ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5,
        sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, usbphy1_gate,
-       usbphy2_gate, pll4_post_div, pll5_post_div, pll5_video_div, clk_max
+       usbphy2_gate, pll4_post_div, pll5_post_div, pll5_video_div, eim_slow, clk_max
 };
 
 static struct clk *clk[clk_max];
@@ -270,27 +270,16 @@ static struct clk_div_table video_div_table[] = {
        { }
 };
 
-int __init mx6q_clocks_init(void)
+static void __init imx6q_clocks_init(struct device_node *ccm_node)
 {
        struct device_node *np;
        void __iomem *base;
        int i, irq;
 
        clk[dummy] = imx_clk_fixed("dummy", 0);
-
-       /* retrieve the freqency of fixed clocks from device tree */
-       for_each_compatible_node(np, NULL, "fixed-clock") {
-               u32 rate;
-               if (of_property_read_u32(np, "clock-frequency", &rate))
-                       continue;
-
-               if (of_device_is_compatible(np, "fsl,imx-ckil"))
-                       clk[ckil] = imx_clk_fixed("ckil", rate);
-               else if (of_device_is_compatible(np, "fsl,imx-ckih1"))
-                       clk[ckih] = imx_clk_fixed("ckih", rate);
-               else if (of_device_is_compatible(np, "fsl,imx-osc"))
-                       clk[osc] = imx_clk_fixed("osc", rate);
-       }
+       clk[ckil] = imx_obtain_fixed_clock("ckil", 0);
+       clk[ckih] = imx_obtain_fixed_clock("ckih1", 0);
+       clk[osc] = imx_obtain_fixed_clock("osc", 0);
 
        np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop");
        base = of_iomap(np, 0);
@@ -312,7 +301,6 @@ int __init mx6q_clocks_init(void)
        clk[pll5_video]    = imx_clk_pllv3(IMX_PLLV3_AV,        "pll5_video",   "osc", base + 0xa0, 0x7f);
        clk[pll6_enet]     = imx_clk_pllv3(IMX_PLLV3_ENET,      "pll6_enet",    "osc", base + 0xe0, 0x3);
        clk[pll7_usb_host] = imx_clk_pllv3(IMX_PLLV3_USB,       "pll7_usb_host","osc", base + 0x20, 0x3);
-       clk[pll8_mlb]      = imx_clk_pllv3(IMX_PLLV3_MLB,       "pll8_mlb",     "osc", base + 0xd0, 0x0);
 
        /*
         * Bit 20 is the reserved and read-only bit, we do this only for:
@@ -360,7 +348,7 @@ int __init mx6q_clocks_init(void)
        clk[pll5_post_div] = clk_register_divider_table(NULL, "pll5_post_div", "pll5_video", CLK_SET_RATE_PARENT, base + 0xa0, 19, 2, 0, post_div_table, &imx_ccm_lock);
        clk[pll5_video_div] = clk_register_divider_table(NULL, "pll5_video_div", "pll5_post_div", CLK_SET_RATE_PARENT, base + 0x170, 30, 2, 0, video_div_table, &imx_ccm_lock);
 
-       np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-ccm");
+       np = ccm_node;
        base = of_iomap(np, 0);
        WARN_ON(!base);
        ccm_base = base;
@@ -481,7 +469,14 @@ int __init mx6q_clocks_init(void)
        clk[esai]         = imx_clk_gate2("esai",          "esai_podf",         base + 0x6c, 16);
        clk[gpt_ipg]      = imx_clk_gate2("gpt_ipg",       "ipg",               base + 0x6c, 20);
        clk[gpt_ipg_per]  = imx_clk_gate2("gpt_ipg_per",   "ipg_per",           base + 0x6c, 22);
-       clk[gpu2d_core]   = imx_clk_gate2("gpu2d_core",    "gpu2d_core_podf",   base + 0x6c, 24);
+       if (cpu_is_imx6dl())
+               /*
+                * The multiplexer and divider of imx6q clock gpu3d_shader get
+                * redefined/reused as gpu2d_core_sel and gpu2d_core_podf on imx6dl.
+                */
+               clk[gpu2d_core] = imx_clk_gate2("gpu2d_core", "gpu3d_shader", base + 0x6c, 24);
+       else
+               clk[gpu2d_core] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24);
        clk[gpu3d_core]   = imx_clk_gate2("gpu3d_core",    "gpu3d_core_podf",   base + 0x6c, 26);
        clk[hdmi_iahb]    = imx_clk_gate2("hdmi_iahb",     "ahb",               base + 0x70, 0);
        clk[hdmi_isfr]    = imx_clk_gate2("hdmi_isfr",     "pll3_pfd1_540m",    base + 0x70, 4);
@@ -499,7 +494,14 @@ int __init mx6q_clocks_init(void)
        clk[ldb_di1]      = imx_clk_gate2("ldb_di1",       "ldb_di1_podf",      base + 0x74, 14);
        clk[ipu2_di1]     = imx_clk_gate2("ipu2_di1",      "ipu2_di1_sel",      base + 0x74, 10);
        clk[hsi_tx]       = imx_clk_gate2("hsi_tx",        "hsi_tx_podf",       base + 0x74, 16);
-       clk[mlb]          = imx_clk_gate2("mlb",           "axi",               base + 0x74, 18);
+       if (cpu_is_imx6dl())
+               /*
+                * The multiplexer and divider of the imx6q clock gpu2d get
+                * redefined/reused as mlb_sys_sel and mlb_sys_clk_podf on imx6dl.
+                */
+               clk[mlb] = imx_clk_gate2("mlb",            "gpu2d_core_podf",   base + 0x74, 18);
+       else
+               clk[mlb] = imx_clk_gate2("mlb",            "axi",               base + 0x74, 18);
        clk[mmdc_ch0_axi] = imx_clk_gate2("mmdc_ch0_axi",  "mmdc_ch0_axi_podf", base + 0x74, 20);
        clk[mmdc_ch1_axi] = imx_clk_gate2("mmdc_ch1_axi",  "mmdc_ch1_axi_podf", base + 0x74, 22);
        clk[ocram]        = imx_clk_gate2("ocram",         "ahb",               base + 0x74, 28);
@@ -528,6 +530,7 @@ int __init mx6q_clocks_init(void)
        clk[usdhc2]       = imx_clk_gate2("usdhc2",        "usdhc2_podf",       base + 0x80, 4);
        clk[usdhc3]       = imx_clk_gate2("usdhc3",        "usdhc3_podf",       base + 0x80, 6);
        clk[usdhc4]       = imx_clk_gate2("usdhc4",        "usdhc4_podf",       base + 0x80, 8);
+       clk[eim_slow]     = imx_clk_gate2("eim_slow",      "emi_slow_podf",     base + 0x80, 10);
        clk[vdo_axi]      = imx_clk_gate2("vdo_axi",       "vdo_axi_sel",       base + 0x80, 12);
        clk[vpu_axi]      = imx_clk_gate2("vpu_axi",       "vpu_axi_podf",      base + 0x80, 14);
        clk[cko1]         = imx_clk_gate("cko1",           "cko1_podf",         base + 0x60, 7);
@@ -547,6 +550,8 @@ int __init mx6q_clocks_init(void)
        clk_register_clkdev(clk[ahb], "ahb", NULL);
        clk_register_clkdev(clk[cko1], "cko1", NULL);
        clk_register_clkdev(clk[arm], NULL, "cpu0");
+       clk_register_clkdev(clk[pll4_post_div], "pll4_post_div", NULL);
+       clk_register_clkdev(clk[pll4_audio], "pll4_audio", NULL);
 
        if (imx6q_revision() != IMX_CHIP_REVISION_1_0) {
                clk_set_parent(clk[ldb_di0_sel], clk[pll5_video_div]);
@@ -576,6 +581,5 @@ int __init mx6q_clocks_init(void)
        WARN_ON(!base);
        irq = irq_of_parse_and_map(np, 0);
        mxc_timer_init(base, irq);
-
-       return 0;
 }
+CLK_OF_DECLARE(imx6q, "fsl,imx6q-ccm", imx6q_clocks_init);
diff --git a/arch/arm/mach-imx/clk-imx6sl.c b/arch/arm/mach-imx/clk-imx6sl.c
new file mode 100644 (file)
index 0000000..a307ac2
--- /dev/null
@@ -0,0 +1,267 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/clk.h>
+#include <linux/clkdev.h>
+#include <linux/err.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <dt-bindings/clock/imx6sl-clock.h>
+
+#include "clk.h"
+#include "common.h"
+
+static const char const *step_sels[]           = { "osc", "pll2_pfd2", };
+static const char const *pll1_sw_sels[]                = { "pll1_sys", "step", };
+static const char const *ocram_alt_sels[]      = { "pll2_pfd2", "pll3_pfd1", };
+static const char const *ocram_sels[]          = { "periph", "ocram_alt_sels", };
+static const char const *pre_periph_sels[]     = { "pll2_bus", "pll2_pfd2", "pll2_pfd0", "pll2_198m", };
+static const char const *periph_clk2_sels[]    = { "pll3_usb_otg", "osc", "osc", "dummy", };
+static const char const *periph2_clk2_sels[]   = { "pll3_usb_otg", "pll2_bus", };
+static const char const *periph_sels[]         = { "pre_periph_sel", "periph_clk2_podf", };
+static const char const *periph2_sels[]                = { "pre_periph2_sel", "periph2_clk2_podf", };
+static const char const *csi_lcdif_sels[]      = { "mmdc", "pll2_pfd2", "pll3_120m", "pll3_pfd1", };
+static const char const *usdhc_sels[]          = { "pll2_pfd2", "pll2_pfd0", };
+static const char const *ssi_sels[]            = { "pll3_pfd2", "pll3_pfd3", "pll4_post_div", "dummy", };
+static const char const *perclk_sels[]         = { "ipg", "osc", };
+static const char const *epdc_pxp_sels[]       = { "mmdc", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll2_pfd2", "pll3_pfd1", };
+static const char const *gpu2d_ovg_sels[]      = { "pll3_pfd1", "pll3_usb_otg", "pll2_bus", "pll2_pfd2", };
+static const char const *gpu2d_sels[]          = { "pll2_pfd2", "pll3_usb_otg", "pll3_pfd1", "pll2_bus", };
+static const char const *lcdif_pix_sels[]      = { "pll2_bus", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll3_pfd0", "pll3_pfd1", };
+static const char const *epdc_pix_sels[]       = { "pll2_bus", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll2_pfd1", "pll3_pfd1", };
+static const char const *audio_sels[]          = { "pll4_post_div", "pll3_pfd2", "pll3_pfd3", "pll3_usb_otg", };
+static const char const *ecspi_sels[]          = { "pll3_60m", "osc", };
+static const char const *uart_sels[]           = { "pll3_80m", "osc", };
+
+static struct clk_div_table clk_enet_ref_table[] = {
+       { .val = 0, .div = 20, },
+       { .val = 1, .div = 10, },
+       { .val = 2, .div = 5, },
+       { .val = 3, .div = 4, },
+       { }
+};
+
+static struct clk_div_table post_div_table[] = {
+       { .val = 2, .div = 1, },
+       { .val = 1, .div = 2, },
+       { .val = 0, .div = 4, },
+       { }
+};
+
+static struct clk_div_table video_div_table[] = {
+       { .val = 0, .div = 1, },
+       { .val = 1, .div = 2, },
+       { .val = 2, .div = 1, },
+       { .val = 3, .div = 4, },
+       { }
+};
+
+static struct clk *clks[IMX6SL_CLK_CLK_END];
+static struct clk_onecell_data clk_data;
+
+static void __init imx6sl_clocks_init(struct device_node *ccm_node)
+{
+       struct device_node *np;
+       void __iomem *base;
+       int irq;
+       int i;
+
+       clks[IMX6SL_CLK_DUMMY] = imx_clk_fixed("dummy", 0);
+       clks[IMX6SL_CLK_CKIL] = imx_obtain_fixed_clock("ckil", 0);
+       clks[IMX6SL_CLK_OSC] = imx_obtain_fixed_clock("osc", 0);
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-anatop");
+       base = of_iomap(np, 0);
+       WARN_ON(!base);
+
+       /*                                             type               name            parent  base         div_mask */
+       clks[IMX6SL_CLK_PLL1_SYS]      = imx_clk_pllv3(IMX_PLLV3_SYS,     "pll1_sys",      "osc", base,        0x7f);
+       clks[IMX6SL_CLK_PLL2_BUS]      = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2_bus",      "osc", base + 0x30, 0x1);
+       clks[IMX6SL_CLK_PLL3_USB_OTG]  = imx_clk_pllv3(IMX_PLLV3_USB,     "pll3_usb_otg",  "osc", base + 0x10, 0x3);
+       clks[IMX6SL_CLK_PLL4_AUDIO]    = imx_clk_pllv3(IMX_PLLV3_AV,      "pll4_audio",    "osc", base + 0x70, 0x7f);
+       clks[IMX6SL_CLK_PLL5_VIDEO]    = imx_clk_pllv3(IMX_PLLV3_AV,      "pll5_video",    "osc", base + 0xa0, 0x7f);
+       clks[IMX6SL_CLK_PLL6_ENET]     = imx_clk_pllv3(IMX_PLLV3_ENET,    "pll6_enet",     "osc", base + 0xe0, 0x3);
+       clks[IMX6SL_CLK_PLL7_USB_HOST] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll7_usb_host", "osc", base + 0x20, 0x3);
+
+       /*
+        * usbphy1 and usbphy2 are implemented as dummy gates using reserve
+        * bit 20.  They are used by phy driver to keep the refcount of
+        * parent PLL correct. usbphy1_gate and usbphy2_gate only needs to be
+        * turned on during boot, and software will not need to control it
+        * anymore after that.
+        */
+       clks[IMX6SL_CLK_USBPHY1]      = imx_clk_gate("usbphy1",      "pll3_usb_otg",  base + 0x10, 20);
+       clks[IMX6SL_CLK_USBPHY2]      = imx_clk_gate("usbphy2",      "pll7_usb_host", base + 0x20, 20);
+       clks[IMX6SL_CLK_USBPHY1_GATE] = imx_clk_gate("usbphy1_gate", "dummy",         base + 0x10, 6);
+       clks[IMX6SL_CLK_USBPHY2_GATE] = imx_clk_gate("usbphy2_gate", "dummy",         base + 0x20, 6);
+
+       /*                                                           dev   name              parent_name      flags                reg        shift width div: flags, div_table lock */
+       clks[IMX6SL_CLK_PLL4_POST_DIV]  = clk_register_divider_table(NULL, "pll4_post_div",  "pll4_audio",    CLK_SET_RATE_PARENT, base + 0x70,  19, 2,   0, post_div_table, &imx_ccm_lock);
+       clks[IMX6SL_CLK_PLL5_POST_DIV]  = clk_register_divider_table(NULL, "pll5_post_div",  "pll5_video",    CLK_SET_RATE_PARENT, base + 0xa0,  19, 2,   0, post_div_table, &imx_ccm_lock);
+       clks[IMX6SL_CLK_PLL5_VIDEO_DIV] = clk_register_divider_table(NULL, "pll5_video_div", "pll5_post_div", CLK_SET_RATE_PARENT, base + 0x170, 30, 2,   0, video_div_table, &imx_ccm_lock);
+       clks[IMX6SL_CLK_ENET_REF]       = clk_register_divider_table(NULL, "enet_ref",       "pll6_enet",     0,                   base + 0xe0,  0,  2,   0, clk_enet_ref_table, &imx_ccm_lock);
+
+       /*                                       name         parent_name     reg           idx */
+       clks[IMX6SL_CLK_PLL2_PFD0] = imx_clk_pfd("pll2_pfd0", "pll2_bus",     base + 0x100, 0);
+       clks[IMX6SL_CLK_PLL2_PFD1] = imx_clk_pfd("pll2_pfd1", "pll2_bus",     base + 0x100, 1);
+       clks[IMX6SL_CLK_PLL2_PFD2] = imx_clk_pfd("pll2_pfd2", "pll2_bus",     base + 0x100, 2);
+       clks[IMX6SL_CLK_PLL3_PFD0] = imx_clk_pfd("pll3_pfd0", "pll3_usb_otg", base + 0xf0,  0);
+       clks[IMX6SL_CLK_PLL3_PFD1] = imx_clk_pfd("pll3_pfd1", "pll3_usb_otg", base + 0xf0,  1);
+       clks[IMX6SL_CLK_PLL3_PFD2] = imx_clk_pfd("pll3_pfd2", "pll3_usb_otg", base + 0xf0,  2);
+       clks[IMX6SL_CLK_PLL3_PFD3] = imx_clk_pfd("pll3_pfd3", "pll3_usb_otg", base + 0xf0,  3);
+
+       /*                                                name         parent_name     mult div */
+       clks[IMX6SL_CLK_PLL2_198M] = imx_clk_fixed_factor("pll2_198m", "pll2_pfd2",      1, 2);
+       clks[IMX6SL_CLK_PLL3_120M] = imx_clk_fixed_factor("pll3_120m", "pll3_usb_otg",   1, 4);
+       clks[IMX6SL_CLK_PLL3_80M]  = imx_clk_fixed_factor("pll3_80m",  "pll3_usb_otg",   1, 6);
+       clks[IMX6SL_CLK_PLL3_60M]  = imx_clk_fixed_factor("pll3_60m",  "pll3_usb_otg",   1, 8);
+
+       np = ccm_node;
+       base = of_iomap(np, 0);
+       WARN_ON(!base);
+
+       /*                                              name                reg       shift width parent_names     num_parents */
+       clks[IMX6SL_CLK_STEP]             = imx_clk_mux("step",             base + 0xc,  8,  1, step_sels,         ARRAY_SIZE(step_sels));
+       clks[IMX6SL_CLK_PLL1_SW]          = imx_clk_mux("pll1_sw",          base + 0xc,  2,  1, pll1_sw_sels,      ARRAY_SIZE(pll1_sw_sels));
+       clks[IMX6SL_CLK_OCRAM_ALT_SEL]    = imx_clk_mux("ocram_alt_sel",    base + 0x14, 7,  1, ocram_alt_sels,    ARRAY_SIZE(ocram_alt_sels));
+       clks[IMX6SL_CLK_OCRAM_SEL]        = imx_clk_mux("ocram_sel",        base + 0x14, 6,  1, ocram_sels,        ARRAY_SIZE(ocram_sels));
+       clks[IMX6SL_CLK_PRE_PERIPH2_SEL]  = imx_clk_mux("pre_periph2_sel",  base + 0x18, 21, 2, pre_periph_sels,   ARRAY_SIZE(pre_periph_sels));
+       clks[IMX6SL_CLK_PRE_PERIPH_SEL]   = imx_clk_mux("pre_periph_sel",   base + 0x18, 18, 2, pre_periph_sels,   ARRAY_SIZE(pre_periph_sels));
+       clks[IMX6SL_CLK_PERIPH2_CLK2_SEL] = imx_clk_mux("periph2_clk2_sel", base + 0x18, 20, 1, periph2_clk2_sels, ARRAY_SIZE(periph2_clk2_sels));
+       clks[IMX6SL_CLK_PERIPH_CLK2_SEL]  = imx_clk_mux("periph_clk2_sel",  base + 0x18, 12, 2, periph_clk2_sels,  ARRAY_SIZE(periph_clk2_sels));
+       clks[IMX6SL_CLK_CSI_SEL]          = imx_clk_mux("csi_sel",          base + 0x3c, 9,  2, csi_lcdif_sels,    ARRAY_SIZE(csi_lcdif_sels));
+       clks[IMX6SL_CLK_LCDIF_AXI_SEL]    = imx_clk_mux("lcdif_axi_sel",    base + 0x3c, 14, 2, csi_lcdif_sels,    ARRAY_SIZE(csi_lcdif_sels));
+       clks[IMX6SL_CLK_USDHC1_SEL]       = imx_clk_mux("usdhc1_sel",       base + 0x1c, 16, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels));
+       clks[IMX6SL_CLK_USDHC2_SEL]       = imx_clk_mux("usdhc2_sel",       base + 0x1c, 17, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels));
+       clks[IMX6SL_CLK_USDHC3_SEL]       = imx_clk_mux("usdhc3_sel",       base + 0x1c, 18, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels));
+       clks[IMX6SL_CLK_USDHC4_SEL]       = imx_clk_mux("usdhc4_sel",       base + 0x1c, 19, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels));
+       clks[IMX6SL_CLK_SSI1_SEL]         = imx_clk_mux("ssi1_sel",         base + 0x1c, 10, 2, ssi_sels,          ARRAY_SIZE(ssi_sels));
+       clks[IMX6SL_CLK_SSI2_SEL]         = imx_clk_mux("ssi2_sel",         base + 0x1c, 12, 2, ssi_sels,          ARRAY_SIZE(ssi_sels));
+       clks[IMX6SL_CLK_SSI3_SEL]         = imx_clk_mux("ssi3_sel",         base + 0x1c, 14, 2, ssi_sels,          ARRAY_SIZE(ssi_sels));
+       clks[IMX6SL_CLK_PERCLK_SEL]       = imx_clk_mux("perclk_sel",       base + 0x1c, 6,  1, perclk_sels,       ARRAY_SIZE(perclk_sels));
+       clks[IMX6SL_CLK_PXP_AXI_SEL]      = imx_clk_mux("pxp_axi_sel",      base + 0x34, 6,  3, epdc_pxp_sels,     ARRAY_SIZE(epdc_pxp_sels));
+       clks[IMX6SL_CLK_EPDC_AXI_SEL]     = imx_clk_mux("epdc_axi_sel",     base + 0x34, 15, 3, epdc_pxp_sels,     ARRAY_SIZE(epdc_pxp_sels));
+       clks[IMX6SL_CLK_GPU2D_OVG_SEL]    = imx_clk_mux("gpu2d_ovg_sel",    base + 0x18, 4,  2, gpu2d_ovg_sels,    ARRAY_SIZE(gpu2d_ovg_sels));
+       clks[IMX6SL_CLK_GPU2D_SEL]        = imx_clk_mux("gpu2d_sel",        base + 0x18, 8,  2, gpu2d_sels,        ARRAY_SIZE(gpu2d_sels));
+       clks[IMX6SL_CLK_LCDIF_PIX_SEL]    = imx_clk_mux("lcdif_pix_sel",    base + 0x38, 6,  3, lcdif_pix_sels,    ARRAY_SIZE(lcdif_pix_sels));
+       clks[IMX6SL_CLK_EPDC_PIX_SEL]     = imx_clk_mux("epdc_pix_sel",     base + 0x38, 15, 3, epdc_pix_sels,     ARRAY_SIZE(epdc_pix_sels));
+       clks[IMX6SL_CLK_SPDIF0_SEL]       = imx_clk_mux("spdif0_sel",       base + 0x30, 20, 2, audio_sels,        ARRAY_SIZE(audio_sels));
+       clks[IMX6SL_CLK_SPDIF1_SEL]       = imx_clk_mux("spdif1_sel",       base + 0x30, 7,  2, audio_sels,        ARRAY_SIZE(audio_sels));
+       clks[IMX6SL_CLK_EXTERN_AUDIO_SEL] = imx_clk_mux("extern_audio_sel", base + 0x20, 19, 2, audio_sels,        ARRAY_SIZE(audio_sels));
+       clks[IMX6SL_CLK_ECSPI_SEL]        = imx_clk_mux("ecspi_sel",        base + 0x38, 18, 1, ecspi_sels,        ARRAY_SIZE(ecspi_sels));
+       clks[IMX6SL_CLK_UART_SEL]         = imx_clk_mux("uart_sel",         base + 0x24, 6,  1, uart_sels,         ARRAY_SIZE(uart_sels));
+
+       /*                                          name       reg        shift width busy: reg, shift parent_names  num_parents */
+       clks[IMX6SL_CLK_PERIPH]  = imx_clk_busy_mux("periph",  base + 0x14, 25,  1,   base + 0x48, 5,  periph_sels,  ARRAY_SIZE(periph_sels));
+       clks[IMX6SL_CLK_PERIPH2] = imx_clk_busy_mux("periph2", base + 0x14, 26,  1,   base + 0x48, 3,  periph2_sels, ARRAY_SIZE(periph2_sels));
+
+       /*                                                   name                 parent_name          reg       shift width */
+       clks[IMX6SL_CLK_OCRAM_PODF]        = imx_clk_divider("ocram_podf",        "ocram_sel",         base + 0x14, 16, 3);
+       clks[IMX6SL_CLK_PERIPH_CLK2_PODF]  = imx_clk_divider("periph_clk2_podf",  "periph_clk2_sel",   base + 0x14, 27, 3);
+       clks[IMX6SL_CLK_PERIPH2_CLK2_PODF] = imx_clk_divider("periph2_clk2_podf", "periph2_clk2_sel",  base + 0x14, 0,  3);
+       clks[IMX6SL_CLK_IPG]               = imx_clk_divider("ipg",               "ahb",               base + 0x14, 8,  2);
+       clks[IMX6SL_CLK_CSI_PODF]          = imx_clk_divider("csi_podf",          "csi_sel",           base + 0x3c, 11, 3);
+       clks[IMX6SL_CLK_LCDIF_AXI_PODF]    = imx_clk_divider("lcdif_axi_podf",    "lcdif_axi_sel",     base + 0x3c, 16, 3);
+       clks[IMX6SL_CLK_USDHC1_PODF]       = imx_clk_divider("usdhc1_podf",       "usdhc1_sel",        base + 0x24, 11, 3);
+       clks[IMX6SL_CLK_USDHC2_PODF]       = imx_clk_divider("usdhc2_podf",       "usdhc2_sel",        base + 0x24, 16, 3);
+       clks[IMX6SL_CLK_USDHC3_PODF]       = imx_clk_divider("usdhc3_podf",       "usdhc3_sel",        base + 0x24, 19, 3);
+       clks[IMX6SL_CLK_USDHC4_PODF]       = imx_clk_divider("usdhc4_podf",       "usdhc4_sel",        base + 0x24, 22, 3);
+       clks[IMX6SL_CLK_SSI1_PRED]         = imx_clk_divider("ssi1_pred",         "ssi1_sel",          base + 0x28, 6,  3);
+       clks[IMX6SL_CLK_SSI1_PODF]         = imx_clk_divider("ssi1_podf",         "ssi1_pred",         base + 0x28, 0,  6);
+       clks[IMX6SL_CLK_SSI2_PRED]         = imx_clk_divider("ssi2_pred",         "ssi2_sel",          base + 0x2c, 6,  3);
+       clks[IMX6SL_CLK_SSI2_PODF]         = imx_clk_divider("ssi2_podf",         "ssi2_pred",         base + 0x2c, 0,  6);
+       clks[IMX6SL_CLK_SSI3_PRED]         = imx_clk_divider("ssi3_pred",         "ssi3_sel",          base + 0x28, 22, 3);
+       clks[IMX6SL_CLK_SSI3_PODF]         = imx_clk_divider("ssi3_podf",         "ssi3_pred",         base + 0x28, 16, 6);
+       clks[IMX6SL_CLK_PERCLK]            = imx_clk_divider("perclk",            "perclk_sel",        base + 0x1c, 0,  6);
+       clks[IMX6SL_CLK_PXP_AXI_PODF]      = imx_clk_divider("pxp_axi_podf",      "pxp_axi_sel",       base + 0x34, 3,  3);
+       clks[IMX6SL_CLK_EPDC_AXI_PODF]     = imx_clk_divider("epdc_axi_podf",     "epdc_axi_sel",      base + 0x34, 12, 3);
+       clks[IMX6SL_CLK_GPU2D_OVG_PODF]    = imx_clk_divider("gpu2d_ovg_podf",    "gpu2d_ovg_sel",     base + 0x18, 26, 3);
+       clks[IMX6SL_CLK_GPU2D_PODF]        = imx_clk_divider("gpu2d_podf",        "gpu2d_sel",         base + 0x18, 29, 3);
+       clks[IMX6SL_CLK_LCDIF_PIX_PRED]    = imx_clk_divider("lcdif_pix_pred",    "lcdif_pix_sel",     base + 0x38, 3,  3);
+       clks[IMX6SL_CLK_EPDC_PIX_PRED]     = imx_clk_divider("epdc_pix_pred",     "epdc_pix_sel",      base + 0x38, 12, 3);
+       clks[IMX6SL_CLK_LCDIF_PIX_PODF]    = imx_clk_divider("lcdif_pix_podf",    "lcdif_pix_pred",    base + 0x1c, 20, 3);
+       clks[IMX6SL_CLK_EPDC_PIX_PODF]     = imx_clk_divider("epdc_pix_podf",     "epdc_pix_pred",     base + 0x18, 23, 3);
+       clks[IMX6SL_CLK_SPDIF0_PRED]       = imx_clk_divider("spdif0_pred",       "spdif0_sel",        base + 0x30, 25, 3);
+       clks[IMX6SL_CLK_SPDIF0_PODF]       = imx_clk_divider("spdif0_podf",       "spdif0_pred",       base + 0x30, 22, 3);
+       clks[IMX6SL_CLK_SPDIF1_PRED]       = imx_clk_divider("spdif1_pred",       "spdif1_sel",        base + 0x30, 12, 3);
+       clks[IMX6SL_CLK_SPDIF1_PODF]       = imx_clk_divider("spdif1_podf",       "spdif1_pred",       base + 0x30, 9,  3);
+       clks[IMX6SL_CLK_EXTERN_AUDIO_PRED] = imx_clk_divider("extern_audio_pred", "extern_audio_sel",  base + 0x28, 9,  3);
+       clks[IMX6SL_CLK_EXTERN_AUDIO_PODF] = imx_clk_divider("extern_audio_podf", "extern_audio_pred", base + 0x28, 25, 3);
+       clks[IMX6SL_CLK_ECSPI_ROOT]        = imx_clk_divider("ecspi_root",        "ecspi_sel",         base + 0x38, 19, 6);
+       clks[IMX6SL_CLK_UART_ROOT]         = imx_clk_divider("uart_root",         "uart_sel",          base + 0x24, 0,  6);
+
+       /*                                                name         parent_name reg       shift width busy: reg, shift */
+       clks[IMX6SL_CLK_AHB]       = imx_clk_busy_divider("ahb",       "periph",  base + 0x14, 10, 3,    base + 0x48, 1);
+       clks[IMX6SL_CLK_MMDC_ROOT] = imx_clk_busy_divider("mmdc",      "periph2", base + 0x14, 3,  3,    base + 0x48, 2);
+       clks[IMX6SL_CLK_ARM]       = imx_clk_busy_divider("arm",       "pll1_sw", base + 0x10, 0,  3,    base + 0x48, 16);
+
+       /*                                            name            parent_name          reg         shift */
+       clks[IMX6SL_CLK_ECSPI1]       = imx_clk_gate2("ecspi1",       "ecspi_root",        base + 0x6c, 0);
+       clks[IMX6SL_CLK_ECSPI2]       = imx_clk_gate2("ecspi2",       "ecspi_root",        base + 0x6c, 2);
+       clks[IMX6SL_CLK_ECSPI3]       = imx_clk_gate2("ecspi3",       "ecspi_root",        base + 0x6c, 4);
+       clks[IMX6SL_CLK_ECSPI4]       = imx_clk_gate2("ecspi4",       "ecspi_root",        base + 0x6c, 6);
+       clks[IMX6SL_CLK_EPIT1]        = imx_clk_gate2("epit1",        "perclk",            base + 0x6c, 12);
+       clks[IMX6SL_CLK_EPIT2]        = imx_clk_gate2("epit2",        "perclk",            base + 0x6c, 14);
+       clks[IMX6SL_CLK_EXTERN_AUDIO] = imx_clk_gate2("extern_audio", "extern_audio_podf", base + 0x6c, 16);
+       clks[IMX6SL_CLK_GPT]          = imx_clk_gate2("gpt",          "perclk",            base + 0x6c, 20);
+       clks[IMX6SL_CLK_GPT_SERIAL]   = imx_clk_gate2("gpt_serial",   "perclk",            base + 0x6c, 22);
+       clks[IMX6SL_CLK_GPU2D_OVG]    = imx_clk_gate2("gpu2d_ovg",    "gpu2d_ovg_podf",    base + 0x6c, 26);
+       clks[IMX6SL_CLK_I2C1]         = imx_clk_gate2("i2c1",         "perclk",            base + 0x70, 6);
+       clks[IMX6SL_CLK_I2C2]         = imx_clk_gate2("i2c2",         "perclk",            base + 0x70, 8);
+       clks[IMX6SL_CLK_I2C3]         = imx_clk_gate2("i2c3",         "perclk",            base + 0x70, 10);
+       clks[IMX6SL_CLK_OCOTP]        = imx_clk_gate2("ocotp",        "ipg",               base + 0x70, 12);
+       clks[IMX6SL_CLK_CSI]          = imx_clk_gate2("csi",          "csi_podf",          base + 0x74, 0);
+       clks[IMX6SL_CLK_PXP_AXI]      = imx_clk_gate2("pxp_axi",      "pxp_axi_podf",      base + 0x74, 2);
+       clks[IMX6SL_CLK_EPDC_AXI]     = imx_clk_gate2("epdc_axi",     "epdc_axi_podf",     base + 0x74, 4);
+       clks[IMX6SL_CLK_LCDIF_AXI]    = imx_clk_gate2("lcdif_axi",    "lcdif_axi_podf",    base + 0x74, 6);
+       clks[IMX6SL_CLK_LCDIF_PIX]    = imx_clk_gate2("lcdif_pix",    "lcdif_pix_podf",    base + 0x74, 8);
+       clks[IMX6SL_CLK_EPDC_PIX]     = imx_clk_gate2("epdc_pix",     "epdc_pix_podf",     base + 0x74, 10);
+       clks[IMX6SL_CLK_OCRAM]        = imx_clk_gate2("ocram",        "ocram_podf",        base + 0x74, 28);
+       clks[IMX6SL_CLK_PWM1]         = imx_clk_gate2("pwm1",         "perclk",            base + 0x78, 16);
+       clks[IMX6SL_CLK_PWM2]         = imx_clk_gate2("pwm2",         "perclk",            base + 0x78, 18);
+       clks[IMX6SL_CLK_PWM3]         = imx_clk_gate2("pwm3",         "perclk",            base + 0x78, 20);
+       clks[IMX6SL_CLK_PWM4]         = imx_clk_gate2("pwm4",         "perclk",            base + 0x78, 22);
+       clks[IMX6SL_CLK_SDMA]         = imx_clk_gate2("sdma",         "ipg",               base + 0x7c, 6);
+       clks[IMX6SL_CLK_SPDIF]        = imx_clk_gate2("spdif",        "spdif0_podf",       base + 0x7c, 14);
+       clks[IMX6SL_CLK_SSI1]         = imx_clk_gate2("ssi1",         "ssi1_podf",         base + 0x7c, 18);
+       clks[IMX6SL_CLK_SSI2]         = imx_clk_gate2("ssi2",         "ssi2_podf",         base + 0x7c, 20);
+       clks[IMX6SL_CLK_SSI3]         = imx_clk_gate2("ssi3",         "ssi3_podf",         base + 0x7c, 22);
+       clks[IMX6SL_CLK_UART]         = imx_clk_gate2("uart",         "ipg",               base + 0x7c, 24);
+       clks[IMX6SL_CLK_UART_SERIAL]  = imx_clk_gate2("uart_serial",  "uart_root",         base + 0x7c, 26);
+       clks[IMX6SL_CLK_USBOH3]       = imx_clk_gate2("usboh3",       "ipg",               base + 0x80, 0);
+       clks[IMX6SL_CLK_USDHC1]       = imx_clk_gate2("usdhc1",       "usdhc1_podf",       base + 0x80, 2);
+       clks[IMX6SL_CLK_USDHC2]       = imx_clk_gate2("usdhc2",       "usdhc2_podf",       base + 0x80, 4);
+       clks[IMX6SL_CLK_USDHC3]       = imx_clk_gate2("usdhc3",       "usdhc3_podf",       base + 0x80, 6);
+       clks[IMX6SL_CLK_USDHC4]       = imx_clk_gate2("usdhc4",       "usdhc4_podf",       base + 0x80, 8);
+
+       for (i = 0; i < ARRAY_SIZE(clks); i++)
+               if (IS_ERR(clks[i]))
+                       pr_err("i.MX6SL clk %d: register failed with %ld\n",
+                               i, PTR_ERR(clks[i]));
+
+       clk_data.clks = clks;
+       clk_data.clk_num = ARRAY_SIZE(clks);
+       of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+
+       clk_register_clkdev(clks[IMX6SL_CLK_GPT], "ipg", "imx-gpt.0");
+       clk_register_clkdev(clks[IMX6SL_CLK_GPT_SERIAL], "per", "imx-gpt.0");
+
+       if (IS_ENABLED(CONFIG_USB_MXS_PHY)) {
+               clk_prepare_enable(clks[IMX6SL_CLK_USBPHY1_GATE]);
+               clk_prepare_enable(clks[IMX6SL_CLK_USBPHY2_GATE]);
+       }
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt");
+       base = of_iomap(np, 0);
+       WARN_ON(!base);
+       irq = irq_of_parse_and_map(np, 0);
+       mxc_timer_init(base, irq);
+}
+CLK_OF_DECLARE(imx6sl, "fsl,imx6sl-ccm", imx6sl_clocks_init);
index d09bc3df9a7a69bc7a4d63c7abeb7b078077a1f0..a9fad5f8d340b50fb50e2348a6e761623be50911 100644 (file)
@@ -296,13 +296,6 @@ static const struct clk_ops clk_pllv3_enet_ops = {
        .recalc_rate    = clk_pllv3_enet_recalc_rate,
 };
 
-static const struct clk_ops clk_pllv3_mlb_ops = {
-       .prepare        = clk_pllv3_prepare,
-       .unprepare      = clk_pllv3_unprepare,
-       .enable         = clk_pllv3_enable,
-       .disable        = clk_pllv3_disable,
-};
-
 struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
                          const char *parent_name, void __iomem *base,
                          u32 div_mask)
@@ -330,9 +323,6 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
        case IMX_PLLV3_ENET:
                ops = &clk_pllv3_enet_ops;
                break;
-       case IMX_PLLV3_MLB:
-               ops = &clk_pllv3_mlb_ops;
-               break;
        default:
                ops = &clk_pllv3_ops;
        }
diff --git a/arch/arm/mach-imx/clk-vf610.c b/arch/arm/mach-imx/clk-vf610.c
new file mode 100644 (file)
index 0000000..d617c0b
--- /dev/null
@@ -0,0 +1,319 @@
+/*
+ * Copyright 2012-2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#include <linux/of_address.h>
+#include <linux/clk.h>
+#include <dt-bindings/clock/vf610-clock.h>
+
+#include "clk.h"
+
+#define CCM_CCR                        (ccm_base + 0x00)
+#define CCM_CSR                        (ccm_base + 0x04)
+#define CCM_CCSR               (ccm_base + 0x08)
+#define CCM_CACRR              (ccm_base + 0x0c)
+#define CCM_CSCMR1             (ccm_base + 0x10)
+#define CCM_CSCDR1             (ccm_base + 0x14)
+#define CCM_CSCDR2             (ccm_base + 0x18)
+#define CCM_CSCDR3             (ccm_base + 0x1c)
+#define CCM_CSCMR2             (ccm_base + 0x20)
+#define CCM_CSCDR4             (ccm_base + 0x24)
+#define CCM_CLPCR              (ccm_base + 0x2c)
+#define CCM_CISR               (ccm_base + 0x30)
+#define CCM_CIMR               (ccm_base + 0x34)
+#define CCM_CGPR               (ccm_base + 0x3c)
+#define CCM_CCGR0              (ccm_base + 0x40)
+#define CCM_CCGR1              (ccm_base + 0x44)
+#define CCM_CCGR2              (ccm_base + 0x48)
+#define CCM_CCGR3              (ccm_base + 0x4c)
+#define CCM_CCGR4              (ccm_base + 0x50)
+#define CCM_CCGR5              (ccm_base + 0x54)
+#define CCM_CCGR6              (ccm_base + 0x58)
+#define CCM_CCGR7              (ccm_base + 0x5c)
+#define CCM_CCGR8              (ccm_base + 0x60)
+#define CCM_CCGR9              (ccm_base + 0x64)
+#define CCM_CCGR10             (ccm_base + 0x68)
+#define CCM_CCGR11             (ccm_base + 0x6c)
+#define CCM_CMEOR0             (ccm_base + 0x70)
+#define CCM_CMEOR1             (ccm_base + 0x74)
+#define CCM_CMEOR2             (ccm_base + 0x78)
+#define CCM_CMEOR3             (ccm_base + 0x7c)
+#define CCM_CMEOR4             (ccm_base + 0x80)
+#define CCM_CMEOR5             (ccm_base + 0x84)
+#define CCM_CPPDSR             (ccm_base + 0x88)
+#define CCM_CCOWR              (ccm_base + 0x8c)
+#define CCM_CCPGR0             (ccm_base + 0x90)
+#define CCM_CCPGR1             (ccm_base + 0x94)
+#define CCM_CCPGR2             (ccm_base + 0x98)
+#define CCM_CCPGR3             (ccm_base + 0x9c)
+
+#define CCM_CCGRx_CGn(n)       ((n) * 2)
+
+#define PFD_PLL1_BASE          (anatop_base + 0x2b0)
+#define PFD_PLL2_BASE          (anatop_base + 0x100)
+#define PFD_PLL3_BASE          (anatop_base + 0xf0)
+
+static void __iomem *anatop_base;
+static void __iomem *ccm_base;
+
+/* sources for multiplexer clocks, this is used multiple times */
+static const char const *fast_sels[]   = { "firc", "fxosc", };
+static const char const *slow_sels[]   = { "sirc_32k", "sxosc", };
+static const char const *pll1_sels[]   = { "pll1_main", "pll1_pfd1", "pll1_pfd2", "pll1_pfd3", "pll1_pfd4", };
+static const char const *pll2_sels[]   = { "pll2_main", "pll2_pfd1", "pll2_pfd2", "pll2_pfd3", "pll2_pfd4", };
+static const char const *sys_sels[]    = { "fast_clk_sel", "slow_clk_sel", "pll2_pfd_sel", "pll2_main", "pll1_pfd_sel", "pll3_main", };
+static const char const *ddr_sels[]    = { "pll2_pfd2", "sys_sel", };
+static const char const *rmii_sels[]   = { "enet_ext", "audio_ext", "enet_50m", "enet_25m", };
+static const char const *enet_ts_sels[]        = { "enet_ext", "fxosc", "audio_ext", "usb", "enet_ts", "enet_25m", "enet_50m", };
+static const char const *esai_sels[]   = { "audio_ext", "mlb", "spdif_rx", "pll4_main_div", };
+static const char const *sai_sels[]    = { "audio_ext", "mlb", "spdif_rx", "pll4_main_div", };
+static const char const *nfc_sels[]    = { "platform_bus", "pll1_pfd1", "pll3_pfd1", "pll3_pfd3", };
+static const char const *qspi_sels[]   = { "pll3_main", "pll3_pfd4", "pll2_pfd4", "pll1_pfd4", };
+static const char const *esdhc_sels[]  = { "pll3_main", "pll3_pfd3", "pll1_pfd3", "platform_bus", };
+static const char const *dcu_sels[]    = { "pll1_pfd2", "pll3_main", };
+static const char const *gpu_sels[]    = { "pll2_pfd2", "pll3_pfd2", };
+static const char const *vadc_sels[]   = { "pll6_main_div", "pll3_main_div", "pll3_main", };
+/* FTM counter clock source, not module clock */
+static const char const *ftm_ext_sels[]        = {"sirc_128k", "sxosc", "fxosc_half", "audio_ext", };
+static const char const *ftm_fix_sels[]        = { "sxosc", "ipg_bus", };
+
+static struct clk_div_table pll4_main_div_table[] = {
+       { .val = 0, .div = 1 },
+       { .val = 1, .div = 2 },
+       { .val = 2, .div = 6 },
+       { .val = 3, .div = 8 },
+       { .val = 4, .div = 10 },
+       { .val = 5, .div = 12 },
+       { .val = 6, .div = 14 },
+       { .val = 7, .div = 16 },
+       { }
+};
+
+static struct clk *clk[VF610_CLK_END];
+static struct clk_onecell_data clk_data;
+
+static void __init vf610_clocks_init(struct device_node *ccm_node)
+{
+       struct device_node *np;
+
+       clk[VF610_CLK_DUMMY] = imx_clk_fixed("dummy", 0);
+       clk[VF610_CLK_SIRC_128K] = imx_clk_fixed("sirc_128k", 128000);
+       clk[VF610_CLK_SIRC_32K] = imx_clk_fixed("sirc_32k", 32000);
+       clk[VF610_CLK_FIRC] = imx_clk_fixed("firc", 24000000);
+
+       clk[VF610_CLK_SXOSC] = imx_obtain_fixed_clock("sxosc", 0);
+       clk[VF610_CLK_FXOSC] = imx_obtain_fixed_clock("fxosc", 0);
+       clk[VF610_CLK_AUDIO_EXT] = imx_obtain_fixed_clock("audio_ext", 0);
+       clk[VF610_CLK_ENET_EXT] = imx_obtain_fixed_clock("enet_ext", 0);
+
+       clk[VF610_CLK_FXOSC_HALF] = imx_clk_fixed_factor("fxosc_half", "fxosc", 1, 2);
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,vf610-anatop");
+       anatop_base = of_iomap(np, 0);
+       BUG_ON(!anatop_base);
+
+       np = ccm_node;
+       ccm_base = of_iomap(np, 0);
+       BUG_ON(!ccm_base);
+
+       clk[VF610_CLK_SLOW_CLK_SEL] = imx_clk_mux("slow_clk_sel", CCM_CCSR, 4, 1, slow_sels, ARRAY_SIZE(slow_sels));
+       clk[VF610_CLK_FASK_CLK_SEL] = imx_clk_mux("fast_clk_sel", CCM_CCSR, 5, 1, fast_sels, ARRAY_SIZE(fast_sels));
+
+       clk[VF610_CLK_PLL1_MAIN] = imx_clk_fixed_factor("pll1_main", "fast_clk_sel", 22, 1);
+       clk[VF610_CLK_PLL1_PFD1] = imx_clk_pfd("pll1_pfd1", "pll1_main", PFD_PLL1_BASE, 0);
+       clk[VF610_CLK_PLL1_PFD2] = imx_clk_pfd("pll1_pfd2", "pll1_main", PFD_PLL1_BASE, 1);
+       clk[VF610_CLK_PLL1_PFD3] = imx_clk_pfd("pll1_pfd3", "pll1_main", PFD_PLL1_BASE, 2);
+       clk[VF610_CLK_PLL1_PFD4] = imx_clk_pfd("pll1_pfd4", "pll1_main", PFD_PLL1_BASE, 3);
+
+       clk[VF610_CLK_PLL2_MAIN] = imx_clk_fixed_factor("pll2_main", "fast_clk_sel", 22, 1);
+       clk[VF610_CLK_PLL2_PFD1] = imx_clk_pfd("pll2_pfd1", "pll2_main", PFD_PLL2_BASE, 0);
+       clk[VF610_CLK_PLL2_PFD2] = imx_clk_pfd("pll2_pfd2", "pll2_main", PFD_PLL2_BASE, 1);
+       clk[VF610_CLK_PLL2_PFD3] = imx_clk_pfd("pll2_pfd3", "pll2_main", PFD_PLL2_BASE, 2);
+       clk[VF610_CLK_PLL2_PFD4] = imx_clk_pfd("pll2_pfd4", "pll2_main", PFD_PLL2_BASE, 3);
+
+       clk[VF610_CLK_PLL3_MAIN] = imx_clk_fixed_factor("pll3_main", "fast_clk_sel", 20, 1);
+       clk[VF610_CLK_PLL3_PFD1] = imx_clk_pfd("pll3_pfd1", "pll3_main", PFD_PLL3_BASE, 0);
+       clk[VF610_CLK_PLL3_PFD2] = imx_clk_pfd("pll3_pfd2", "pll3_main", PFD_PLL3_BASE, 1);
+       clk[VF610_CLK_PLL3_PFD3] = imx_clk_pfd("pll3_pfd3", "pll3_main", PFD_PLL3_BASE, 2);
+       clk[VF610_CLK_PLL3_PFD4] = imx_clk_pfd("pll3_pfd4", "pll3_main", PFD_PLL3_BASE, 3);
+
+       clk[VF610_CLK_PLL4_MAIN] = imx_clk_fixed_factor("pll4_main", "fast_clk_sel", 25, 1);
+       /* Enet pll: fixed 50Mhz */
+       clk[VF610_CLK_PLL5_MAIN] = imx_clk_fixed_factor("pll5_main", "fast_clk_sel", 125, 6);
+       /* pll6: default 960Mhz */
+       clk[VF610_CLK_PLL6_MAIN] = imx_clk_fixed_factor("pll6_main", "fast_clk_sel", 40, 1);
+       clk[VF610_CLK_PLL1_PFD_SEL] = imx_clk_mux("pll1_pfd_sel", CCM_CCSR, 16, 3, pll1_sels, 5);
+       clk[VF610_CLK_PLL2_PFD_SEL] = imx_clk_mux("pll2_pfd_sel", CCM_CCSR, 19, 3, pll2_sels, 5);
+       clk[VF610_CLK_SYS_SEL] = imx_clk_mux("sys_sel", CCM_CCSR, 0, 3, sys_sels, ARRAY_SIZE(sys_sels));
+       clk[VF610_CLK_DDR_SEL] = imx_clk_mux("ddr_sel", CCM_CCSR, 6, 1, ddr_sels, ARRAY_SIZE(ddr_sels));
+       clk[VF610_CLK_SYS_BUS] = imx_clk_divider("sys_bus", "sys_sel", CCM_CACRR, 0, 3);
+       clk[VF610_CLK_PLATFORM_BUS] = imx_clk_divider("platform_bus", "sys_bus", CCM_CACRR, 3, 3);
+       clk[VF610_CLK_IPG_BUS] = imx_clk_divider("ipg_bus", "platform_bus", CCM_CACRR, 11, 2);
+
+       clk[VF610_CLK_PLL3_MAIN_DIV] = imx_clk_divider("pll3_main_div", "pll3_main", CCM_CACRR, 20, 1);
+       clk[VF610_CLK_PLL4_MAIN_DIV] = clk_register_divider_table(NULL, "pll4_main_div", "pll4_main", 0, CCM_CACRR, 6, 3, 0, pll4_main_div_table, &imx_ccm_lock);
+       clk[VF610_CLK_PLL6_MAIN_DIV] = imx_clk_divider("pll6_main_div", "pll6_main", CCM_CACRR, 21, 1);
+
+       clk[VF610_CLK_USBC0] = imx_clk_gate2("usbc0", "pll3_main", CCM_CCGR1, CCM_CCGRx_CGn(4));
+       clk[VF610_CLK_USBC1] = imx_clk_gate2("usbc1", "pll3_main", CCM_CCGR7, CCM_CCGRx_CGn(4));
+
+       clk[VF610_CLK_QSPI0_SEL] = imx_clk_mux("qspi0_sel", CCM_CSCMR1, 22, 2, qspi_sels, 4);
+       clk[VF610_CLK_QSPI0_EN] = imx_clk_gate("qspi0_en", "qspi0_sel", CCM_CSCDR3, 4);
+       clk[VF610_CLK_QSPI0_X4_DIV] = imx_clk_divider("qspi0_x4", "qspi0_en", CCM_CSCDR3, 0, 2);
+       clk[VF610_CLK_QSPI0_X2_DIV] = imx_clk_divider("qspi0_x2", "qspi0_x4", CCM_CSCDR3, 2, 1);
+       clk[VF610_CLK_QSPI0_X1_DIV] = imx_clk_divider("qspi0_x1", "qspi0_x2", CCM_CSCDR3, 3, 1);
+       clk[VF610_CLK_QSPI0] = imx_clk_gate2("qspi0", "qspi0_x1", CCM_CCGR2, CCM_CCGRx_CGn(4));
+
+       clk[VF610_CLK_QSPI1_SEL] = imx_clk_mux("qspi1_sel", CCM_CSCMR1, 24, 2, qspi_sels, 4);
+       clk[VF610_CLK_QSPI1_EN] = imx_clk_gate("qspi1_en", "qspi1_sel", CCM_CSCDR3, 12);
+       clk[VF610_CLK_QSPI1_X4_DIV] = imx_clk_divider("qspi1_x4", "qspi1_en", CCM_CSCDR3, 8, 2);
+       clk[VF610_CLK_QSPI1_X2_DIV] = imx_clk_divider("qspi1_x2", "qspi1_x4", CCM_CSCDR3, 10, 1);
+       clk[VF610_CLK_QSPI1_X1_DIV] = imx_clk_divider("qspi1_x1", "qspi1_x2", CCM_CSCDR3, 11, 1);
+       clk[VF610_CLK_QSPI1] = imx_clk_gate2("qspi1", "qspi1_x1", CCM_CCGR8, CCM_CCGRx_CGn(4));
+
+       clk[VF610_CLK_ENET_50M] = imx_clk_fixed_factor("enet_50m", "pll5_main", 1, 10);
+       clk[VF610_CLK_ENET_25M] = imx_clk_fixed_factor("enet_25m", "pll5_main", 1, 20);
+       clk[VF610_CLK_ENET_SEL] = imx_clk_mux("enet_sel", CCM_CSCMR2, 4, 2, rmii_sels, 4);
+       clk[VF610_CLK_ENET_TS_SEL] = imx_clk_mux("enet_ts_sel", CCM_CSCMR2, 0, 3, enet_ts_sels, 7);
+       clk[VF610_CLK_ENET] = imx_clk_gate("enet", "enet_sel", CCM_CSCDR1, 24);
+       clk[VF610_CLK_ENET_TS] = imx_clk_gate("enet_ts", "enet_ts_sel", CCM_CSCDR1, 23);
+
+       clk[VF610_CLK_PIT] = imx_clk_gate2("pit", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(7));
+
+       clk[VF610_CLK_UART0] = imx_clk_gate2("uart0", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(7));
+       clk[VF610_CLK_UART1] = imx_clk_gate2("uart1", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(8));
+       clk[VF610_CLK_UART2] = imx_clk_gate2("uart2", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(9));
+       clk[VF610_CLK_UART3] = imx_clk_gate2("uart3", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(10));
+
+       clk[VF610_CLK_I2C0] = imx_clk_gate2("i2c0", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(6));
+       clk[VF610_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(7));
+
+       clk[VF610_CLK_DSPI0] = imx_clk_gate2("dspi0", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(12));
+       clk[VF610_CLK_DSPI1] = imx_clk_gate2("dspi1", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(13));
+       clk[VF610_CLK_DSPI2] = imx_clk_gate2("dspi2", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(12));
+       clk[VF610_CLK_DSPI3] = imx_clk_gate2("dspi3", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(13));
+
+       clk[VF610_CLK_WDT] = imx_clk_gate2("wdt", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(14));
+
+       clk[VF610_CLK_ESDHC0_SEL] = imx_clk_mux("esdhc0_sel", CCM_CSCMR1, 16, 2, esdhc_sels, 4);
+       clk[VF610_CLK_ESDHC0_EN] = imx_clk_gate("esdhc0_en", "esdhc0_sel", CCM_CSCDR2, 28);
+       clk[VF610_CLK_ESDHC0_DIV] = imx_clk_divider("esdhc0_div", "esdhc0_en", CCM_CSCDR2, 16, 4);
+       clk[VF610_CLK_ESDHC0] = imx_clk_gate2("eshc0", "esdhc0_div", CCM_CCGR7, CCM_CCGRx_CGn(1));
+
+       clk[VF610_CLK_ESDHC1_SEL] = imx_clk_mux("esdhc1_sel", CCM_CSCMR1, 18, 2, esdhc_sels, 4);
+       clk[VF610_CLK_ESDHC1_EN] = imx_clk_gate("esdhc1_en", "esdhc1_sel", CCM_CSCDR2, 29);
+       clk[VF610_CLK_ESDHC1_DIV] = imx_clk_divider("esdhc1_div", "esdhc1_en", CCM_CSCDR2, 20, 4);
+       clk[VF610_CLK_ESDHC1] = imx_clk_gate2("eshc1", "esdhc1_div", CCM_CCGR7, CCM_CCGRx_CGn(2));
+
+       /*
+        * ftm_ext_clk and ftm_fix_clk are FTM timer counter's
+        * selectable clock sources, both use a common enable bit
+        * in CCM_CSCDR1, selecting "dummy" clock as parent of
+        * "ftm0_ext_fix" make it serve only for enable/disable.
+        */
+       clk[VF610_CLK_FTM0_EXT_SEL] = imx_clk_mux("ftm0_ext_sel", CCM_CSCMR2, 6, 2, ftm_ext_sels, 4);
+       clk[VF610_CLK_FTM0_FIX_SEL] = imx_clk_mux("ftm0_fix_sel", CCM_CSCMR2, 14, 1, ftm_fix_sels, 2);
+       clk[VF610_CLK_FTM0_EXT_FIX_EN] = imx_clk_gate("ftm0_ext_fix_en", "dummy", CCM_CSCDR1, 25);
+       clk[VF610_CLK_FTM1_EXT_SEL] = imx_clk_mux("ftm1_ext_sel", CCM_CSCMR2, 8, 2, ftm_ext_sels, 4);
+       clk[VF610_CLK_FTM1_FIX_SEL] = imx_clk_mux("ftm1_fix_sel", CCM_CSCMR2, 15, 1, ftm_fix_sels, 2);
+       clk[VF610_CLK_FTM1_EXT_FIX_EN] = imx_clk_gate("ftm1_ext_fix_en", "dummy", CCM_CSCDR1, 26);
+       clk[VF610_CLK_FTM2_EXT_SEL] = imx_clk_mux("ftm2_ext_sel", CCM_CSCMR2, 10, 2, ftm_ext_sels, 4);
+       clk[VF610_CLK_FTM2_FIX_SEL] = imx_clk_mux("ftm2_fix_sel", CCM_CSCMR2, 16, 1, ftm_fix_sels, 2);
+       clk[VF610_CLK_FTM2_EXT_FIX_EN] = imx_clk_gate("ftm2_ext_fix_en", "dummy", CCM_CSCDR1, 27);
+       clk[VF610_CLK_FTM3_EXT_SEL] = imx_clk_mux("ftm3_ext_sel", CCM_CSCMR2, 12, 2, ftm_ext_sels, 4);
+       clk[VF610_CLK_FTM3_FIX_SEL] = imx_clk_mux("ftm3_fix_sel", CCM_CSCMR2, 17, 1, ftm_fix_sels, 2);
+       clk[VF610_CLK_FTM3_EXT_FIX_EN] = imx_clk_gate("ftm3_ext_fix_en", "dummy", CCM_CSCDR1, 28);
+
+       /* ftm(n)_clk are FTM module operation clock */
+       clk[VF610_CLK_FTM0] = imx_clk_gate2("ftm0", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(8));
+       clk[VF610_CLK_FTM1] = imx_clk_gate2("ftm1", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(9));
+       clk[VF610_CLK_FTM2] = imx_clk_gate2("ftm2", "ipg_bus", CCM_CCGR7, CCM_CCGRx_CGn(8));
+       clk[VF610_CLK_FTM3] = imx_clk_gate2("ftm3", "ipg_bus", CCM_CCGR7, CCM_CCGRx_CGn(9));
+
+       clk[VF610_CLK_DCU0_SEL] = imx_clk_mux("dcu0_sel", CCM_CSCMR1, 28, 1, dcu_sels, 2);
+       clk[VF610_CLK_DCU0_EN] = imx_clk_gate("dcu0_en", "dcu0_sel", CCM_CSCDR3, 19);
+       clk[VF610_CLK_DCU0_DIV] = imx_clk_divider("dcu0_div", "dcu0_en", CCM_CSCDR3, 16, 3);
+       clk[VF610_CLK_DCU0] = imx_clk_gate2("dcu0", "dcu0_div", CCM_CCGR3, CCM_CCGRx_CGn(8));
+       clk[VF610_CLK_DCU1_SEL] = imx_clk_mux("dcu1_sel", CCM_CSCMR1, 29, 1, dcu_sels, 2);
+       clk[VF610_CLK_DCU1_EN] = imx_clk_gate("dcu1_en", "dcu1_sel", CCM_CSCDR3, 23);
+       clk[VF610_CLK_DCU1_DIV] = imx_clk_divider("dcu1_div", "dcu1_en", CCM_CSCDR3, 20, 3);
+       clk[VF610_CLK_DCU1] = imx_clk_gate2("dcu1", "dcu1_div", CCM_CCGR9, CCM_CCGRx_CGn(8));
+
+       clk[VF610_CLK_ESAI_SEL] = imx_clk_mux("esai_sel", CCM_CSCMR1, 20, 2, esai_sels, 4);
+       clk[VF610_CLK_ESAI_EN] = imx_clk_gate("esai_en", "esai_sel", CCM_CSCDR2, 30);
+       clk[VF610_CLK_ESAI_DIV] = imx_clk_divider("esai_div", "esai_en", CCM_CSCDR2, 24, 4);
+       clk[VF610_CLK_ESAI] = imx_clk_gate2("esai", "esai_div", CCM_CCGR4, CCM_CCGRx_CGn(2));
+
+       clk[VF610_CLK_SAI0_SEL] = imx_clk_mux("sai0_sel", CCM_CSCMR1, 0, 2, sai_sels, 4);
+       clk[VF610_CLK_SAI0_EN] = imx_clk_gate("sai0_en", "sai0_sel", CCM_CSCDR1, 16);
+       clk[VF610_CLK_SAI0_DIV] = imx_clk_divider("sai0_div", "sai0_en", CCM_CSCDR1, 0, 4);
+       clk[VF610_CLK_SAI0] = imx_clk_gate2("sai0", "sai0_div", CCM_CCGR0, CCM_CCGRx_CGn(15));
+
+       clk[VF610_CLK_SAI1_SEL] = imx_clk_mux("sai1_sel", CCM_CSCMR1, 2, 2, sai_sels, 4);
+       clk[VF610_CLK_SAI1_EN] = imx_clk_gate("sai1_en", "sai1_sel", CCM_CSCDR1, 17);
+       clk[VF610_CLK_SAI1_DIV] = imx_clk_divider("sai1_div", "sai1_en", CCM_CSCDR1, 4, 4);
+       clk[VF610_CLK_SAI1] = imx_clk_gate2("sai1", "sai1_div", CCM_CCGR1, CCM_CCGRx_CGn(0));
+
+       clk[VF610_CLK_SAI2_SEL] = imx_clk_mux("sai2_sel", CCM_CSCMR1, 4, 2, sai_sels, 4);
+       clk[VF610_CLK_SAI2_EN] = imx_clk_gate("sai2_en", "sai2_sel", CCM_CSCDR1, 18);
+       clk[VF610_CLK_SAI2_DIV] = imx_clk_divider("sai2_div", "sai2_en", CCM_CSCDR1, 8, 4);
+       clk[VF610_CLK_SAI2] = imx_clk_gate2("sai2", "sai2_div", CCM_CCGR1, CCM_CCGRx_CGn(1));
+
+       clk[VF610_CLK_SAI3_SEL] = imx_clk_mux("sai3_sel", CCM_CSCMR1, 6, 2, sai_sels, 4);
+       clk[VF610_CLK_SAI3_EN] = imx_clk_gate("sai3_en", "sai3_sel", CCM_CSCDR1, 19);
+       clk[VF610_CLK_SAI3_DIV] = imx_clk_divider("sai3_div", "sai3_en", CCM_CSCDR1, 12, 4);
+       clk[VF610_CLK_SAI3] = imx_clk_gate2("sai3", "sai3_div", CCM_CCGR1, CCM_CCGRx_CGn(2));
+
+       clk[VF610_CLK_NFC_SEL] = imx_clk_mux("nfc_sel", CCM_CSCMR1, 12, 2, nfc_sels, 4);
+       clk[VF610_CLK_NFC_EN] = imx_clk_gate("nfc_en", "nfc_sel", CCM_CSCDR2, 9);
+       clk[VF610_CLK_NFC_PRE_DIV] = imx_clk_divider("nfc_pre_div", "nfc_en", CCM_CSCDR3, 13, 3);
+       clk[VF610_CLK_NFC_FRAC_DIV] = imx_clk_divider("nfc_frac_div", "nfc_pre_div", CCM_CSCDR2, 4, 4);
+       clk[VF610_CLK_NFC] = imx_clk_gate2("nfc", "nfc_frac_div", CCM_CCGR10, CCM_CCGRx_CGn(0));
+
+       clk[VF610_CLK_GPU_SEL] = imx_clk_mux("gpu_sel", CCM_CSCMR1, 14, 1, gpu_sels, 2);
+       clk[VF610_CLK_GPU_EN] = imx_clk_gate("gpu_en", "gpu_sel", CCM_CSCDR2, 10);
+       clk[VF610_CLK_GPU2D] = imx_clk_gate2("gpu", "gpu_en", CCM_CCGR8, CCM_CCGRx_CGn(15));
+
+       clk[VF610_CLK_VADC_SEL] = imx_clk_mux("vadc_sel", CCM_CSCMR1, 8, 2, vadc_sels, 3);
+       clk[VF610_CLK_VADC_EN] = imx_clk_gate("vadc_en", "vadc_sel", CCM_CSCDR1, 22);
+       clk[VF610_CLK_VADC_DIV] = imx_clk_divider("vadc_div", "vadc_en", CCM_CSCDR1, 20, 2);
+       clk[VF610_CLK_VADC_DIV_HALF] = imx_clk_fixed_factor("vadc_div_half", "vadc_div", 1, 2);
+       clk[VF610_CLK_VADC] = imx_clk_gate2("vadc", "vadc_div", CCM_CCGR8, CCM_CCGRx_CGn(7));
+
+       clk[VF610_CLK_ADC0] = imx_clk_gate2("adc0", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(11));
+       clk[VF610_CLK_ADC1] = imx_clk_gate2("adc1", "ipg_bus", CCM_CCGR7, CCM_CCGRx_CGn(11));
+       clk[VF610_CLK_DAC0] = imx_clk_gate2("dac0", "ipg_bus", CCM_CCGR8, CCM_CCGRx_CGn(12));
+       clk[VF610_CLK_DAC1] = imx_clk_gate2("dac1", "ipg_bus", CCM_CCGR8, CCM_CCGRx_CGn(13));
+
+       clk[VF610_CLK_ASRC] = imx_clk_gate2("asrc", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(1));
+
+       clk[VF610_CLK_FLEXCAN0] = imx_clk_gate2("flexcan0", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(0));
+       clk[VF610_CLK_FLEXCAN1] = imx_clk_gate2("flexcan1", "ipg_bus", CCM_CCGR9, CCM_CCGRx_CGn(4));
+
+       clk_set_parent(clk[VF610_CLK_QSPI0_SEL], clk[VF610_CLK_PLL1_PFD4]);
+       clk_set_rate(clk[VF610_CLK_QSPI0_X4_DIV], clk_get_rate(clk[VF610_CLK_QSPI0_SEL]) / 2);
+       clk_set_rate(clk[VF610_CLK_QSPI0_X2_DIV], clk_get_rate(clk[VF610_CLK_QSPI0_X4_DIV]) / 2);
+       clk_set_rate(clk[VF610_CLK_QSPI0_X1_DIV], clk_get_rate(clk[VF610_CLK_QSPI0_X2_DIV]) / 2);
+
+       clk_set_parent(clk[VF610_CLK_QSPI1_SEL], clk[VF610_CLK_PLL1_PFD4]);
+       clk_set_rate(clk[VF610_CLK_QSPI1_X4_DIV], clk_get_rate(clk[VF610_CLK_QSPI1_SEL]) / 2);
+       clk_set_rate(clk[VF610_CLK_QSPI1_X2_DIV], clk_get_rate(clk[VF610_CLK_QSPI1_X4_DIV]) / 2);
+       clk_set_rate(clk[VF610_CLK_QSPI1_X1_DIV], clk_get_rate(clk[VF610_CLK_QSPI1_X2_DIV]) / 2);
+
+       clk_set_parent(clk[VF610_CLK_SAI0_SEL], clk[VF610_CLK_AUDIO_EXT]);
+       clk_set_parent(clk[VF610_CLK_SAI1_SEL], clk[VF610_CLK_AUDIO_EXT]);
+       clk_set_parent(clk[VF610_CLK_SAI2_SEL], clk[VF610_CLK_AUDIO_EXT]);
+       clk_set_parent(clk[VF610_CLK_SAI3_SEL], clk[VF610_CLK_AUDIO_EXT]);
+
+       /* Add the clocks to provider list */
+       clk_data.clks = clk;
+       clk_data.clk_num = ARRAY_SIZE(clk);
+       of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+}
+CLK_OF_DECLARE(vf610, "fsl,vf610-ccm", vf610_clocks_init);
index 37e884ed1cd4098d43788e34e7f21d7d1ff88404..55bc80a00666412b8d7c53daaba26dced5e2eb95 100644 (file)
@@ -1,4 +1,39 @@
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/of.h>
+#include <linux/slab.h>
 #include <linux/spinlock.h>
 #include "clk.h"
 
 DEFINE_SPINLOCK(imx_ccm_lock);
+
+static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name)
+{
+       struct of_phandle_args phandle;
+       struct clk *clk = ERR_PTR(-ENODEV);
+       char *path;
+
+       path = kasprintf(GFP_KERNEL, "/clocks/%s", name);
+       if (!path)
+               return ERR_PTR(-ENOMEM);
+
+       phandle.np = of_find_node_by_path(path);
+       kfree(path);
+
+       if (phandle.np) {
+               clk = of_clk_get_from_provider(&phandle);
+               of_node_put(phandle.np);
+       }
+       return clk;
+}
+
+struct clk * __init imx_obtain_fixed_clock(
+                       const char *name, unsigned long rate)
+{
+       struct clk *clk;
+
+       clk = imx_obtain_fixed_clock_from_dt(name);
+       if (IS_ERR(clk))
+               clk = imx_clk_fixed(name, rate);
+       return clk;
+}
index d9d9d9c66dffd2538d0b58cf34021212969836f1..0e4e8bb261b945c1fb22d32b9e693592f17dfa41 100644 (file)
@@ -18,7 +18,6 @@ enum imx_pllv3_type {
        IMX_PLLV3_USB,
        IMX_PLLV3_AV,
        IMX_PLLV3_ENET,
-       IMX_PLLV3_MLB,
 };
 
 struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
@@ -29,6 +28,9 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,
                void __iomem *reg, u8 bit_idx,
                u8 clk_gate_flags, spinlock_t *lock);
 
+struct clk * imx_obtain_fixed_clock(
+                       const char *name, unsigned long rate);
+
 static inline struct clk *imx_clk_gate2(const char *name, const char *parent,
                void __iomem *reg, u8 shift)
 {
index c08ae3f99cee0e98f0025a0840a430407406e1b1..ee78847abf4708c98bff9d91bb2e123917ea39c8 100644 (file)
@@ -68,12 +68,12 @@ extern int mx27_clocks_init_dt(void);
 extern int mx31_clocks_init_dt(void);
 extern int mx51_clocks_init_dt(void);
 extern int mx53_clocks_init_dt(void);
-extern int mx6q_clocks_init(void);
 extern struct platform_device *mxc_register_gpio(char *name, int id,
        resource_size_t iobase, resource_size_t iosize, int irq, int irq_high);
 extern void mxc_set_cpu_type(unsigned int type);
 extern void mxc_restart(char, const char *);
 extern void mxc_arch_reset_init(void __iomem *);
+extern void mxc_arch_reset_init_dt(void);
 extern int mx53_revision(void);
 extern int imx6q_revision(void);
 extern int mx53_display_revision(void);
index 356131f7b591ddd212b7f1fadb97c626c64eb1e8..a3b0b04b45c90f9bc4808ece62482521f85fcf24 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef __ASM_ARCH_MXC_HARDWARE_H__
 #define __ASM_ARCH_MXC_HARDWARE_H__
 
+#include <asm/io.h>
 #include <asm/sizes.h>
 
 #define addr_in_module(addr, mod) \
index 82348391582a0944108a8d3ab06a4abb81771e20..3e1ec5ffe630f72976601339a7f32ac8f6c38584 100644 (file)
@@ -19,6 +19,8 @@
 
 static void __init imx25_dt_init(void)
 {
+       mxc_arch_reset_init_dt();
+
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 }
 
index 4aaead0a77fffa89a1f3ef974915fe3a44601538..4e235ecb402191fb5b248b49804d160dab6b2a06 100644 (file)
@@ -22,6 +22,8 @@ static void __init imx27_dt_init(void)
 {
        struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
 
+       mxc_arch_reset_init_dt();
+
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 
        platform_device_register_full(&devinfo);
index 67de611e29ab32d1bd711418ffcd1780cf983e34..818a1cc2fe45e4ead8c2f4cd367ba24148d2aa30 100644 (file)
@@ -20,6 +20,8 @@
 
 static void __init imx31_dt_init(void)
 {
+       mxc_arch_reset_init_dt();
+
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 }
 
index ab24cc32211126874ea8ef5695da20180993d2a6..53e43e579dd79afbb755360d7ff8f8936dcc4d86 100644 (file)
@@ -23,6 +23,8 @@ static void __init imx51_dt_init(void)
 {
        struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
 
+       mxc_arch_reset_init_dt();
+
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
        platform_device_register_full(&devinfo);
 }
index 4b34f52dc46bc604f9cf1e618323df3c18e5ca12..0a920d184867a9753897a9ebf1282661b077c73c 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <linux/module.h>
 #include <linux/irq.h>
+#include <linux/platform_data/asoc-imx-ssi.h>
 
 #include "irq-common.h"
 
index f579c616feed3b2008965fa9ef8b63dc84e6ab01..74e7b94c22e7237755ce2995f4539c4de123d7ac 100644 (file)
@@ -21,6 +21,7 @@
 #include <asm/mach/time.h>
 
 #include "common.h"
+#include "hardware.h"
 #include "mx53.h"
 
 static void __init imx53_qsb_init(void)
@@ -38,6 +39,8 @@ static void __init imx53_qsb_init(void)
 
 static void __init imx53_dt_init(void)
 {
+       mxc_arch_reset_init_dt();
+
        if (of_machine_is_compatible("fsl,imx53-qsb"))
                imx53_qsb_init();
 
index 5536fd81379a87dc2d7856a9b46338578aa52cbd..f5965220a4d8a6207204309802161898c0bb939f 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 #include <linux/clk.h>
+#include <linux/clk-provider.h>
 #include <linux/clkdev.h>
 #include <linux/clocksource.h>
 #include <linux/cpu.h>
@@ -145,6 +146,45 @@ static void __init imx6q_sabrelite_init(void)
        imx6q_sabrelite_cko1_setup();
 }
 
+static void __init imx6q_sabresd_cko1_setup(void)
+{
+       struct clk *cko1_sel, *pll4, *pll4_post, *cko1;
+       unsigned long rate;
+
+       cko1_sel = clk_get_sys(NULL, "cko1_sel");
+       pll4 = clk_get_sys(NULL, "pll4_audio");
+       pll4_post = clk_get_sys(NULL, "pll4_post_div");
+       cko1 = clk_get_sys(NULL, "cko1");
+       if (IS_ERR(cko1_sel) || IS_ERR(pll4)
+                       || IS_ERR(pll4_post) || IS_ERR(cko1)) {
+               pr_err("cko1 setup failed!\n");
+               goto put_clk;
+       }
+       /*
+        * Setting pll4 at 768MHz (24MHz * 32)
+        * So its child clock can get 24MHz easily
+        */
+       clk_set_rate(pll4, 768000000);
+
+       clk_set_parent(cko1_sel, pll4_post);
+       rate = clk_round_rate(cko1, 24000000);
+       clk_set_rate(cko1, rate);
+put_clk:
+       if (!IS_ERR(cko1_sel))
+               clk_put(cko1_sel);
+       if (!IS_ERR(pll4_post))
+               clk_put(pll4_post);
+       if (!IS_ERR(pll4))
+               clk_put(pll4);
+       if (!IS_ERR(cko1))
+               clk_put(cko1);
+}
+
+static void __init imx6q_sabresd_init(void)
+{
+       imx6q_sabresd_cko1_setup();
+}
+
 static void __init imx6q_1588_init(void)
 {
        struct regmap *gpr;
@@ -165,6 +205,9 @@ static void __init imx6q_init_machine(void)
 {
        if (of_machine_is_compatible("fsl,imx6q-sabrelite"))
                imx6q_sabrelite_init();
+       else if (of_machine_is_compatible("fsl,imx6q-sabresd") ||
+                       of_machine_is_compatible("fsl,imx6dl-sabresd"))
+               imx6q_sabresd_init();
 
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 
@@ -253,10 +296,44 @@ static void __init imx6q_map_io(void)
        imx_scu_map_io();
 }
 
+#ifdef CONFIG_CACHE_L2X0
+static void __init imx6q_init_l2cache(void)
+{
+       void __iomem *l2x0_base;
+       struct device_node *np;
+       unsigned int val;
+
+       np = of_find_compatible_node(NULL, NULL, "arm,pl310-cache");
+       if (!np)
+               goto out;
+
+       l2x0_base = of_iomap(np, 0);
+       if (!l2x0_base) {
+               of_node_put(np);
+               goto out;
+       }
+
+       /* Configure the L2 PREFETCH and POWER registers */
+       val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL);
+       val |= 0x70800000;
+       writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL);
+       val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN;
+       writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL);
+
+       iounmap(l2x0_base);
+       of_node_put(np);
+
+out:
+       l2x0_of_init(0, ~0UL);
+}
+#else
+static inline void imx6q_init_l2cache(void) {}
+#endif
+
 static void __init imx6q_init_irq(void)
 {
        imx6q_init_revision();
-       l2x0_of_init(0, ~0UL);
+       imx6q_init_l2cache();
        imx_src_init();
        imx_gpc_init();
        irqchip_init();
@@ -264,7 +341,7 @@ static void __init imx6q_init_irq(void)
 
 static void __init imx6q_timer_init(void)
 {
-       mx6q_clocks_init();
+       of_clk_init(NULL);
        clocksource_of_init();
        imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q",
                              imx6q_revision());
diff --git a/arch/arm/mach-imx/mach-imx6sl.c b/arch/arm/mach-imx/mach-imx6sl.c
new file mode 100644 (file)
index 0000000..132db26
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/irqchip.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <asm/hardware/cache-l2x0.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+
+#include "common.h"
+
+static void __init imx6sl_init_machine(void)
+{
+       mxc_arch_reset_init_dt();
+
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static void __init imx6sl_init_irq(void)
+{
+       l2x0_of_init(0, ~0UL);
+       imx_src_init();
+       imx_gpc_init();
+       irqchip_init();
+}
+
+static void __init imx6sl_timer_init(void)
+{
+       of_clk_init(NULL);
+}
+
+static const char *imx6sl_dt_compat[] __initdata = {
+       "fsl,imx6sl",
+       NULL,
+};
+
+DT_MACHINE_START(IMX6SL, "Freescale i.MX6 SoloLite (Device Tree)")
+       .map_io         = debug_ll_io_init,
+       .init_irq       = imx6sl_init_irq,
+       .init_time      = imx6sl_timer_init,
+       .init_machine   = imx6sl_init_machine,
+       .dt_compat      = imx6sl_dt_compat,
+       .restart        = mxc_restart,
+MACHINE_END
index b8b15bb1ffdfb2d8e0e0f2e52c71a21d4b4c81de..19bb6441a7d4aaddb106afa71634606acfae7466 100644 (file)
@@ -398,8 +398,8 @@ static void __init pca100_init(void)
                imx27_add_fsl_usb2_udc(&otg_device_pdata);
        }
 
-       usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-                               ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
+       usbh2_pdata.otg = imx_otg_ulpi_create(
+                       ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
        if (usbh2_pdata.otg)
                imx27_add_mxc_ehci_hs(2, &usbh2_pdata);
diff --git a/arch/arm/mach-imx/mach-vf610.c b/arch/arm/mach-imx/mach-vf610.c
new file mode 100644 (file)
index 0000000..816991d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012-2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/of_platform.h>
+#include <linux/clocksource.h>
+#include <linux/irqchip.h>
+#include <linux/clk-provider.h>
+#include <asm/mach/arch.h>
+#include <asm/hardware/cache-l2x0.h>
+
+#include "common.h"
+
+static void __init vf610_init_machine(void)
+{
+       mxc_arch_reset_init_dt();
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static void __init vf610_init_irq(void)
+{
+       l2x0_of_init(0, ~0UL);
+       irqchip_init();
+}
+
+static void __init vf610_init_time(void)
+{
+       of_clk_init(NULL);
+       clocksource_of_init();
+}
+
+static const char *vf610_dt_compat[] __initdata = {
+       "fsl,vf610",
+       NULL,
+};
+
+DT_MACHINE_START(VYBRID_VF610, "Freescale Vybrid VF610 (Device Tree)")
+       .init_irq       = vf610_init_irq,
+       .init_time      = vf610_init_time,
+       .init_machine   = vf610_init_machine,
+       .dt_compat      = vf610_dt_compat,
+       .restart        = mxc_restart,
+MACHINE_END
index 3c609c52d3eb984f2d71cf43fc933c8b5e777056..e065fedb3ad4ea28559b862261c9b711c02108c0 100644 (file)
@@ -39,7 +39,6 @@ void __init mx1_map_io(void)
 void __init imx1_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX1);
-       mxc_arch_reset_init(MX1_IO_ADDRESS(MX1_WDT_BASE_ADDR));
        imx_iomuxv1_init(MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR),
                        MX1_NUM_GPIO_PORT);
 }
@@ -51,6 +50,7 @@ void __init mx1_init_irq(void)
 
 void __init imx1_soc_init(void)
 {
+       mxc_arch_reset_init(MX1_IO_ADDRESS(MX1_WDT_BASE_ADDR));
        mxc_device_init();
 
        mxc_register_gpio("imx1-gpio", 0, MX1_GPIO1_BASE_ADDR, SZ_256,
index d8ccd3a8ec531bec988e6a90353148983d8d7713..2e91ab2ca378609c2466e1340baa3a4239281dc7 100644 (file)
@@ -66,7 +66,6 @@ void __init mx21_map_io(void)
 void __init imx21_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX21);
-       mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR));
        imx_iomuxv1_init(MX21_IO_ADDRESS(MX21_GPIO_BASE_ADDR),
                        MX21_NUM_GPIO_PORT);
 }
@@ -82,6 +81,7 @@ static const struct resource imx21_audmux_res[] __initconst = {
 
 void __init imx21_soc_init(void)
 {
+       mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR));
        mxc_device_init();
 
        mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
index 9357707bb7afc4fa5bbb586fcf1ac6fcb8a9bfc0..e065c117f5a6452156eab28e41fe5315b35af43a 100644 (file)
@@ -54,7 +54,6 @@ void __init imx25_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX25);
        mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR));
-       mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
 }
 
 void __init mx25_init_irq(void)
@@ -89,6 +88,7 @@ static const struct resource imx25_audmux_res[] __initconst = {
 
 void __init imx25_soc_init(void)
 {
+       mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
        mxc_device_init();
 
        /* i.mx25 has the i.mx35 type gpio */
index 4f1be65a7b5fe62a6531a09d70aa623283086d6b..7d82a5a5b16b5c73d8938b1b3b325d3d0cb1d6f9 100644 (file)
@@ -66,7 +66,6 @@ void __init mx27_map_io(void)
 void __init imx27_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX27);
-       mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
        imx_iomuxv1_init(MX27_IO_ADDRESS(MX27_GPIO_BASE_ADDR),
                        MX27_NUM_GPIO_PORT);
 }
@@ -82,6 +81,7 @@ static const struct resource imx27_audmux_res[] __initconst = {
 
 void __init imx27_soc_init(void)
 {
+       mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
        mxc_device_init();
 
        /* i.mx27 has the i.mx21 type gpio */
index e0e69a682174b59ce08e77d2eb11608b596fcf97..8f0f60697f557eb511a22ecf926dbd8487c738ba 100644 (file)
@@ -138,7 +138,6 @@ void __init mx31_map_io(void)
 void __init imx31_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX31);
-       mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
        arch_ioremap_caller = imx3_ioremap_caller;
        arm_pm_idle = imx3_idle;
        mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR);
@@ -174,6 +173,7 @@ void __init imx31_soc_init(void)
 
        imx3_init_l2x0();
 
+       mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
        mxc_device_init();
 
        mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0);
@@ -216,7 +216,6 @@ void __init imx35_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX35);
        mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
-       mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
        arm_pm_idle = imx3_idle;
        arch_ioremap_caller = imx3_ioremap_caller;
        mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR);
@@ -272,6 +271,7 @@ void __init imx35_soc_init(void)
 
        imx3_init_l2x0();
 
+       mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
        mxc_device_init();
 
        mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0);
index b7c4e70e50813a90f96cc14c2a47d2bf1e18ebc4..cf193d87274ac316674dfb4d0e50ccc81adbf4f0 100644 (file)
@@ -83,7 +83,6 @@ void __init imx51_init_early(void)
        imx51_ipu_mipi_setup();
        mxc_set_cpu_type(MXC_CPU_MX51);
        mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
-       mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
        imx_src_init();
 }
 
@@ -91,7 +90,6 @@ void __init imx53_init_early(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX53);
        mxc_iomux_v3_init(MX53_IO_ADDRESS(MX53_IOMUXC_BASE_ADDR));
-       mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
        imx_src_init();
 }
 
@@ -129,6 +127,7 @@ static const struct resource imx51_audmux_res[] __initconst = {
 
 void __init imx51_soc_init(void)
 {
+       mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
        mxc_device_init();
 
        /* i.mx51 has the i.mx35 type gpio */
index 695e0d73bf85e12308f878bcbfd322280b67ba76..7cdc79a9657c64bc7bbdab1236ab1f78736732dc 100644 (file)
@@ -21,6 +21,8 @@
 #include <linux/io.h>
 #include <linux/err.h>
 #include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 
 #include <asm/system_misc.h>
 #include <asm/proc-fns.h>
@@ -30,6 +32,7 @@
 #include "hardware.h"
 
 static void __iomem *wdog_base;
+static struct clk *wdog_clk;
 
 /*
  * Reset the system. It is called by machine_restart().
@@ -38,16 +41,13 @@ void mxc_restart(char mode, const char *cmd)
 {
        unsigned int wcr_enable;
 
-       if (cpu_is_mx1()) {
-               wcr_enable = (1 << 0);
-       } else {
-               struct clk *clk;
+       if (wdog_clk)
+               clk_enable(wdog_clk);
 
-               clk = clk_get_sys("imx2-wdt.0", NULL);
-               if (!IS_ERR(clk))
-                       clk_prepare_enable(clk);
+       if (cpu_is_mx1())
+               wcr_enable = (1 << 0);
+       else
                wcr_enable = (1 << 2);
-       }
 
        /* Assert SRS signal */
        __raw_writew(wcr_enable, wdog_base);
@@ -55,7 +55,7 @@ void mxc_restart(char mode, const char *cmd)
        /* wait for reset to assert... */
        mdelay(500);
 
-       printk(KERN_ERR "Watchdog reset failed to assert reset\n");
+       pr_err("%s: Watchdog reset failed to assert reset\n", __func__);
 
        /* delay to allow the serial port to show the message */
        mdelay(50);
@@ -64,7 +64,34 @@ void mxc_restart(char mode, const char *cmd)
        soft_restart(0);
 }
 
-void mxc_arch_reset_init(void __iomem *base)
+void __init mxc_arch_reset_init(void __iomem *base)
 {
        wdog_base = base;
+
+       wdog_clk = clk_get_sys("imx2-wdt.0", NULL);
+       if (IS_ERR(wdog_clk)) {
+               pr_warn("%s: failed to get wdog clock\n", __func__);
+               wdog_clk = NULL;
+               return;
+       }
+
+       clk_prepare(wdog_clk);
+}
+
+void __init mxc_arch_reset_init_dt(void)
+{
+       struct device_node *np;
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx21-wdt");
+       wdog_base = of_iomap(np, 0);
+       WARN_ON(!wdog_base);
+
+       wdog_clk = of_clk_get(np, 0);
+       if (IS_ERR(wdog_clk)) {
+               pr_warn("%s: failed to get wdog clock\n", __func__);
+               wdog_clk = NULL;
+               return;
+       }
+
+       clk_prepare(wdog_clk);
 }
diff --git a/arch/arm/mach-imx/ulpi.c b/arch/arm/mach-imx/ulpi.c
deleted file mode 100644 (file)
index 0f05195..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2008 Sascha Hauer, Pengutronix <s.hauer@pengutronix.de>
- * Copyright 2009 Daniel Mack <daniel@caiaq.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA  02110-1301, USA.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/io.h>
-#include <linux/delay.h>
-#include <linux/usb/otg.h>
-#include <linux/usb/ulpi.h>
-
-#include "ulpi.h"
-
-/* ULPIVIEW register bits */
-#define ULPIVW_WU              (1 << 31)       /* Wakeup */
-#define ULPIVW_RUN             (1 << 30)       /* read/write run */
-#define ULPIVW_WRITE           (1 << 29)       /* 0 = read  1 = write */
-#define ULPIVW_SS              (1 << 27)       /* SyncState */
-#define ULPIVW_PORT_MASK       0x07    /* Port field */
-#define ULPIVW_PORT_SHIFT      24
-#define ULPIVW_ADDR_MASK       0xff    /* data address field */
-#define ULPIVW_ADDR_SHIFT      16
-#define ULPIVW_RDATA_MASK      0xff    /* read data field */
-#define ULPIVW_RDATA_SHIFT     8
-#define ULPIVW_WDATA_MASK      0xff    /* write data field */
-#define ULPIVW_WDATA_SHIFT     0
-
-static int ulpi_poll(void __iomem *view, u32 bit)
-{
-       int timeout = 10000;
-
-       while (timeout--) {
-               u32 data = __raw_readl(view);
-
-               if (!(data & bit))
-                       return 0;
-
-               cpu_relax();
-       };
-
-       printk(KERN_WARNING "timeout polling for ULPI device\n");
-
-       return -ETIMEDOUT;
-}
-
-static int ulpi_read(struct usb_phy *otg, u32 reg)
-{
-       int ret;
-       void __iomem *view = otg->io_priv;
-
-       /* make sure interface is running */
-       if (!(__raw_readl(view) & ULPIVW_SS)) {
-               __raw_writel(ULPIVW_WU, view);
-
-               /* wait for wakeup */
-               ret = ulpi_poll(view, ULPIVW_WU);
-               if (ret)
-                       return ret;
-       }
-
-       /* read the register */
-       __raw_writel((ULPIVW_RUN | (reg << ULPIVW_ADDR_SHIFT)), view);
-
-       /* wait for completion */
-       ret = ulpi_poll(view, ULPIVW_RUN);
-       if (ret)
-               return ret;
-
-       return (__raw_readl(view) >> ULPIVW_RDATA_SHIFT) & ULPIVW_RDATA_MASK;
-}
-
-static int ulpi_write(struct usb_phy *otg, u32 val, u32 reg)
-{
-       int ret;
-       void __iomem *view = otg->io_priv;
-
-       /* make sure the interface is running */
-       if (!(__raw_readl(view) & ULPIVW_SS)) {
-               __raw_writel(ULPIVW_WU, view);
-               /* wait for wakeup */
-               ret = ulpi_poll(view, ULPIVW_WU);
-               if (ret)
-                       return ret;
-       }
-
-       __raw_writel((ULPIVW_RUN | ULPIVW_WRITE |
-                     (reg << ULPIVW_ADDR_SHIFT) |
-                     ((val & ULPIVW_WDATA_MASK) << ULPIVW_WDATA_SHIFT)), view);
-
-       /* wait for completion */
-       return ulpi_poll(view, ULPIVW_RUN);
-}
-
-struct usb_phy_io_ops mxc_ulpi_access_ops = {
-       .read   = ulpi_read,
-       .write  = ulpi_write,
-};
-EXPORT_SYMBOL_GPL(mxc_ulpi_access_ops);
-
-struct usb_phy *imx_otg_ulpi_create(unsigned int flags)
-{
-       return otg_ulpi_create(&mxc_ulpi_access_ops, flags);
-}
index 42bdaca6d7d912eff447e2e262005d090d81317c..23f5c0349e807d737c3d9338b0f9efbd90dcf1ea 100644 (file)
@@ -1,8 +1,13 @@
 #ifndef __MACH_ULPI_H
 #define __MACH_ULPI_H
 
-#ifdef CONFIG_USB_ULPI
-struct usb_phy *imx_otg_ulpi_create(unsigned int flags);
+#include <linux/usb/ulpi.h>
+
+#ifdef CONFIG_USB_ULPI_VIEWPORT
+static inline struct usb_phy *imx_otg_ulpi_create(unsigned int flags)
+{
+       return otg_ulpi_create(&ulpi_viewport_access_ops, flags);
+}
 #else
 static inline struct usb_phy *imx_otg_ulpi_create(unsigned int flags)
 {
@@ -10,7 +15,5 @@ static inline struct usb_phy *imx_otg_ulpi_create(unsigned int flags)
 }
 #endif
 
-extern struct usb_phy_io_ops mxc_ulpi_access_ops;
-
 #endif /* __MACH_ULPI_H */
 
index d14d6b76f4c24289d0d2c42507a7f30c7d06cdde..ec759ded7b609c541204b9ec72dd5814b8c6dea0 100644 (file)
@@ -8,5 +8,5 @@ obj-y                                   := core.o lm.o leds.o
 obj-$(CONFIG_ARCH_INTEGRATOR_AP)       += integrator_ap.o
 obj-$(CONFIG_ARCH_INTEGRATOR_CP)       += integrator_cp.o
 
-obj-$(CONFIG_PCI)                      += pci_v3.o pci.o
+obj-$(CONFIG_PCI)                      += pci_v3.o
 obj-$(CONFIG_INTEGRATOR_IMPD1)         += impd1.o
index be5859efe10ee9c9c178a8f6363e0613300adbfa..306d025d9730dcf01fcf4259bd54cf0c29875854 100644 (file)
 
 /* KMI definitions are now in include/asm-arm/hardware/amba_kmi.h -- rmk */
 
-/* ------------------------------------------------------------------------
- *  Where in the memory map does PCI live?
- * ------------------------------------------------------------------------
- *  This represents a fairly liberal usage of address space.  Even though
- *  the V3 only has two windows (therefore we need to map stuff on the fly),
- *  we maintain the same addresses, even if they're not mapped.
- *
- */
-#define PHYS_PCI_MEM_BASE               0x40000000   /* 512M to xxx */
-/*  unused 256M from A0000000-AFFFFFFF might be used for I2O ???
- */
-#define PHYS_PCI_IO_BASE                0x60000000   /* 16M to xxx */
-/*  unused (128-16)M from B1000000-B7FFFFFF
- */
-#define PHYS_PCI_CONFIG_BASE            0x61000000   /* 16M to xxx */
-/*  unused ((128-16)M - 64K) from XXX
- */
-#define PHYS_PCI_V3_BASE                0x62000000
-
-#define PCI_MEMORY_VADDR               IOMEM(0xe8000000)
-#define PCI_CONFIG_VADDR               IOMEM(0xec000000)
-#define PCI_V3_VADDR                   IOMEM(0xed000000)
-
 /* ------------------------------------------------------------------------
  *  Integrator Interrupt Controllers
  * ------------------------------------------------------------------------
index b23c8e4f28e859180b90d04fb1a7c8b79e619b69..a5b15c4e8def4ec0d833f5224215b8f0ff688d0a 100644 (file)
@@ -41,7 +41,6 @@
 #include <linux/stat.h>
 #include <linux/sys_soc.h>
 #include <linux/termios.h>
-#include <video/vga.h>
 
 #include <mach/hardware.h>
 #include <mach/platform.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/irq.h>
 #include <asm/mach/map.h>
-#include <asm/mach/pci.h>
 #include <asm/mach/time.h>
 
 #include "common.h"
+#include "pci_v3.h"
 
 /* Base address to the AP system controller */
 void __iomem *ap_syscon_base;
@@ -78,10 +77,6 @@ void __iomem *ap_syscon_base;
 
 /*
  * Logical      Physical
- * e8000000    40000000        PCI memory              PHYS_PCI_MEM_BASE       (max 512M)
- * ec000000    61000000        PCI config space        PHYS_PCI_CONFIG_BASE    (max 16M)
- * ed000000    62000000        PCI V3 regs             PHYS_PCI_V3_BASE        (max 64k)
- * fee00000    60000000        PCI IO                  PHYS_PCI_IO_BASE        (max 16M)
  * ef000000                    Cache flush
  * f1000000    10000000        Core module registers
  * f1100000    11000000        System controller registers
@@ -130,29 +125,13 @@ static struct map_desc ap_io_desc[] __initdata __maybe_unused = {
                .pfn            = __phys_to_pfn(INTEGRATOR_AP_GPIO_BASE),
                .length         = SZ_4K,
                .type           = MT_DEVICE
-       }, {
-               .virtual        = (unsigned long)PCI_MEMORY_VADDR,
-               .pfn            = __phys_to_pfn(PHYS_PCI_MEM_BASE),
-               .length         = SZ_16M,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = (unsigned long)PCI_CONFIG_VADDR,
-               .pfn            = __phys_to_pfn(PHYS_PCI_CONFIG_BASE),
-               .length         = SZ_16M,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = (unsigned long)PCI_V3_VADDR,
-               .pfn            = __phys_to_pfn(PHYS_PCI_V3_BASE),
-               .length         = SZ_64K,
-               .type           = MT_DEVICE
        }
 };
 
 static void __init ap_map_io(void)
 {
        iotable_init(ap_io_desc, ARRAY_SIZE(ap_io_desc));
-       vga_base = (unsigned long)PCI_MEMORY_VADDR;
-       pci_map_io_early(__phys_to_pfn(PHYS_PCI_IO_BASE));
+       pci_v3_early_init();
 }
 
 #ifdef CONFIG_PM
@@ -615,6 +594,11 @@ static void __init ap_map_io_atag(void)
  * for eventual deletion.
  */
 
+static struct platform_device pci_v3_device = {
+       .name           = "pci-v3",
+       .id             = 0,
+};
+
 static struct resource cfi_flash_resource = {
        .start          = INTEGRATOR_FLASH_BASE,
        .end            = INTEGRATOR_FLASH_BASE + INTEGRATOR_FLASH_SIZE - 1,
@@ -672,6 +656,7 @@ static void __init ap_init(void)
        unsigned long sc_dec;
        int i;
 
+       platform_device_register(&pci_v3_device);
        platform_device_register(&cfi_flash_device);
 
        ap_syscon_base = __io_address(INTEGRATOR_SC_BASE);
diff --git a/arch/arm/mach-integrator/pci.c b/arch/arm/mach-integrator/pci.c
deleted file mode 100644 (file)
index 6c1667e..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *  linux/arch/arm/mach-integrator/pci-integrator.c
- *
- *  Copyright (C) 1999 ARM Limited
- *  Copyright (C) 2000 Deep Blue Solutions Ltd
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- *
- *  PCI functions for Integrator
- */
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/interrupt.h>
-#include <linux/init.h>
-
-#include <asm/mach/pci.h>
-#include <asm/mach-types.h>
-
-#include <mach/irqs.h>
-
-/* 
- * A small note about bridges and interrupts.  The DECchip 21050 (and
- * later) adheres to the PCI-PCI bridge specification.  This says that
- * the interrupts on the other side of a bridge are swizzled in the
- * following manner:
- *
- * Dev    Interrupt   Interrupt 
- *        Pin on      Pin on 
- *        Device      Connector
- *
- *   4    A           A
- *        B           B
- *        C           C
- *        D           D
- * 
- *   5    A           B
- *        B           C
- *        C           D
- *        D           A
- *
- *   6    A           C
- *        B           D
- *        C           A
- *        D           B
- *
- *   7    A           D
- *        B           A
- *        C           B
- *        D           C
- *
- * Where A = pin 1, B = pin 2 and so on and pin=0 = default = A.
- * Thus, each swizzle is ((pin-1) + (device#-4)) % 4
- */
-
-/*
- * This routine handles multiple bridges.
- */
-static u8 __init integrator_swizzle(struct pci_dev *dev, u8 *pinp)
-{
-       if (*pinp == 0)
-               *pinp = 1;
-
-       return pci_common_swizzle(dev, pinp);
-}
-
-static int irq_tab[4] __initdata = {
-       IRQ_AP_PCIINT0, IRQ_AP_PCIINT1, IRQ_AP_PCIINT2, IRQ_AP_PCIINT3
-};
-
-/*
- * map the specified device/slot/pin to an IRQ.  This works out such
- * that slot 9 pin 1 is INT0, pin 2 is INT1, and slot 10 pin 1 is INT1.
- */
-static int __init integrator_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-{
-       int intnr = ((slot - 9) + (pin - 1)) & 3;
-
-       return irq_tab[intnr];
-}
-
-extern void pci_v3_init(void *);
-
-static struct hw_pci integrator_pci __initdata = {
-       .swizzle                = integrator_swizzle,
-       .map_irq                = integrator_map_irq,
-       .setup                  = pci_v3_setup,
-       .nr_controllers         = 1,
-       .ops                    = &pci_v3_ops,
-       .preinit                = pci_v3_preinit,
-       .postinit               = pci_v3_postinit,
-};
-
-static int __init integrator_pci_init(void)
-{
-       if (machine_is_integrator())
-               pci_common_init(&integrator_pci);
-       return 0;
-}
-
-subsys_initcall(integrator_pci_init);
index e7fcea7f33008b3e8ee5c3288475a726fd88c13d..bef100527c4214654627a825b150a4add94772c8 100644 (file)
 #include <linux/spinlock.h>
 #include <linux/init.h>
 #include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/of_pci.h>
+#include <video/vga.h>
 
 #include <mach/hardware.h>
 #include <mach/platform.h>
 #include <mach/irqs.h>
 
+#include <asm/mach/map.h>
 #include <asm/signal.h>
 #include <asm/mach/pci.h>
 #include <asm/irq_regs.h>
 
-#include <asm/hardware/pci_v3.h>
+#include "pci_v3.h"
+
+/*
+ * Where in the memory map does PCI live?
+ *
+ * This represents a fairly liberal usage of address space.  Even though
+ * the V3 only has two windows (therefore we need to map stuff on the fly),
+ * we maintain the same addresses, even if they're not mapped.
+ */
+#define PHYS_PCI_MEM_BASE               0x40000000 /* 256M */
+#define PHYS_PCI_PRE_BASE               0x50000000 /* 256M */
+#define PHYS_PCI_IO_BASE                0x60000000 /* 16M */
+#define PHYS_PCI_CONFIG_BASE            0x61000000 /* 16M */
+#define PHYS_PCI_V3_BASE                0x62000000 /* 64K */
+
+#define PCI_MEMORY_VADDR               IOMEM(0xe8000000)
+#define PCI_CONFIG_VADDR               IOMEM(0xec000000)
+
+/*
+ * V3 Local Bus to PCI Bridge definitions
+ *
+ * Registers (these are taken from page 129 of the EPC User's Manual Rev 1.04
+ * All V3 register names are prefaced by V3_ to avoid clashing with any other
+ * PCI definitions.  Their names match the user's manual.
+ *
+ * I'm assuming that I20 is disabled.
+ *
+ */
+#define V3_PCI_VENDOR                   0x00000000
+#define V3_PCI_DEVICE                   0x00000002
+#define V3_PCI_CMD                      0x00000004
+#define V3_PCI_STAT                     0x00000006
+#define V3_PCI_CC_REV                   0x00000008
+#define V3_PCI_HDR_CFG                  0x0000000C
+#define V3_PCI_IO_BASE                  0x00000010
+#define V3_PCI_BASE0                    0x00000014
+#define V3_PCI_BASE1                    0x00000018
+#define V3_PCI_SUB_VENDOR               0x0000002C
+#define V3_PCI_SUB_ID                   0x0000002E
+#define V3_PCI_ROM                      0x00000030
+#define V3_PCI_BPARAM                   0x0000003C
+#define V3_PCI_MAP0                     0x00000040
+#define V3_PCI_MAP1                     0x00000044
+#define V3_PCI_INT_STAT                 0x00000048
+#define V3_PCI_INT_CFG                  0x0000004C
+#define V3_LB_BASE0                     0x00000054
+#define V3_LB_BASE1                     0x00000058
+#define V3_LB_MAP0                      0x0000005E
+#define V3_LB_MAP1                      0x00000062
+#define V3_LB_BASE2                     0x00000064
+#define V3_LB_MAP2                      0x00000066
+#define V3_LB_SIZE                      0x00000068
+#define V3_LB_IO_BASE                   0x0000006E
+#define V3_FIFO_CFG                     0x00000070
+#define V3_FIFO_PRIORITY                0x00000072
+#define V3_FIFO_STAT                    0x00000074
+#define V3_LB_ISTAT                     0x00000076
+#define V3_LB_IMASK                     0x00000077
+#define V3_SYSTEM                       0x00000078
+#define V3_LB_CFG                       0x0000007A
+#define V3_PCI_CFG                      0x0000007C
+#define V3_DMA_PCI_ADR0                 0x00000080
+#define V3_DMA_PCI_ADR1                 0x00000090
+#define V3_DMA_LOCAL_ADR0               0x00000084
+#define V3_DMA_LOCAL_ADR1               0x00000094
+#define V3_DMA_LENGTH0                  0x00000088
+#define V3_DMA_LENGTH1                  0x00000098
+#define V3_DMA_CSR0                     0x0000008B
+#define V3_DMA_CSR1                     0x0000009B
+#define V3_DMA_CTLB_ADR0                0x0000008C
+#define V3_DMA_CTLB_ADR1                0x0000009C
+#define V3_DMA_DELAY                    0x000000E0
+#define V3_MAIL_DATA                    0x000000C0
+#define V3_PCI_MAIL_IEWR                0x000000D0
+#define V3_PCI_MAIL_IERD                0x000000D2
+#define V3_LB_MAIL_IEWR                 0x000000D4
+#define V3_LB_MAIL_IERD                 0x000000D6
+#define V3_MAIL_WR_STAT                 0x000000D8
+#define V3_MAIL_RD_STAT                 0x000000DA
+#define V3_QBA_MAP                      0x000000DC
+
+/*  PCI COMMAND REGISTER bits
+ */
+#define V3_COMMAND_M_FBB_EN             (1 << 9)
+#define V3_COMMAND_M_SERR_EN            (1 << 8)
+#define V3_COMMAND_M_PAR_EN             (1 << 6)
+#define V3_COMMAND_M_MASTER_EN          (1 << 2)
+#define V3_COMMAND_M_MEM_EN             (1 << 1)
+#define V3_COMMAND_M_IO_EN              (1 << 0)
+
+/*  SYSTEM REGISTER bits
+ */
+#define V3_SYSTEM_M_RST_OUT             (1 << 15)
+#define V3_SYSTEM_M_LOCK                (1 << 14)
+
+/*  PCI_CFG bits
+ */
+#define V3_PCI_CFG_M_I2O_EN            (1 << 15)
+#define V3_PCI_CFG_M_IO_REG_DIS                (1 << 14)
+#define V3_PCI_CFG_M_IO_DIS            (1 << 13)
+#define V3_PCI_CFG_M_EN3V              (1 << 12)
+#define V3_PCI_CFG_M_RETRY_EN           (1 << 10)
+#define V3_PCI_CFG_M_AD_LOW1            (1 << 9)
+#define V3_PCI_CFG_M_AD_LOW0            (1 << 8)
+
+/*  PCI_BASE register bits (PCI -> Local Bus)
+ */
+#define V3_PCI_BASE_M_ADR_BASE          0xFFF00000
+#define V3_PCI_BASE_M_ADR_BASEL         0x000FFF00
+#define V3_PCI_BASE_M_PREFETCH          (1 << 3)
+#define V3_PCI_BASE_M_TYPE              (3 << 1)
+#define V3_PCI_BASE_M_IO                (1 << 0)
+
+/*  PCI MAP register bits (PCI -> Local bus)
+ */
+#define V3_PCI_MAP_M_MAP_ADR            0xFFF00000
+#define V3_PCI_MAP_M_RD_POST_INH        (1 << 15)
+#define V3_PCI_MAP_M_ROM_SIZE           (3 << 10)
+#define V3_PCI_MAP_M_SWAP               (3 << 8)
+#define V3_PCI_MAP_M_ADR_SIZE           0x000000F0
+#define V3_PCI_MAP_M_REG_EN             (1 << 1)
+#define V3_PCI_MAP_M_ENABLE             (1 << 0)
+
+/*
+ *  LB_BASE0,1 register bits (Local bus -> PCI)
+ */
+#define V3_LB_BASE_ADR_BASE            0xfff00000
+#define V3_LB_BASE_SWAP                        (3 << 8)
+#define V3_LB_BASE_ADR_SIZE            (15 << 4)
+#define V3_LB_BASE_PREFETCH            (1 << 3)
+#define V3_LB_BASE_ENABLE              (1 << 0)
+
+#define V3_LB_BASE_ADR_SIZE_1MB                (0 << 4)
+#define V3_LB_BASE_ADR_SIZE_2MB                (1 << 4)
+#define V3_LB_BASE_ADR_SIZE_4MB                (2 << 4)
+#define V3_LB_BASE_ADR_SIZE_8MB                (3 << 4)
+#define V3_LB_BASE_ADR_SIZE_16MB       (4 << 4)
+#define V3_LB_BASE_ADR_SIZE_32MB       (5 << 4)
+#define V3_LB_BASE_ADR_SIZE_64MB       (6 << 4)
+#define V3_LB_BASE_ADR_SIZE_128MB      (7 << 4)
+#define V3_LB_BASE_ADR_SIZE_256MB      (8 << 4)
+#define V3_LB_BASE_ADR_SIZE_512MB      (9 << 4)
+#define V3_LB_BASE_ADR_SIZE_1GB                (10 << 4)
+#define V3_LB_BASE_ADR_SIZE_2GB                (11 << 4)
+
+#define v3_addr_to_lb_base(a)  ((a) & V3_LB_BASE_ADR_BASE)
+
+/*
+ *  LB_MAP0,1 register bits (Local bus -> PCI)
+ */
+#define V3_LB_MAP_MAP_ADR              0xfff0
+#define V3_LB_MAP_TYPE                 (7 << 1)
+#define V3_LB_MAP_AD_LOW_EN            (1 << 0)
+
+#define V3_LB_MAP_TYPE_IACK            (0 << 1)
+#define V3_LB_MAP_TYPE_IO              (1 << 1)
+#define V3_LB_MAP_TYPE_MEM             (3 << 1)
+#define V3_LB_MAP_TYPE_CONFIG          (5 << 1)
+#define V3_LB_MAP_TYPE_MEM_MULTIPLE    (6 << 1)
+
+#define v3_addr_to_lb_map(a)   (((a) >> 16) & V3_LB_MAP_MAP_ADR)
+
+/*
+ *  LB_BASE2 register bits (Local bus -> PCI IO)
+ */
+#define V3_LB_BASE2_ADR_BASE           0xff00
+#define V3_LB_BASE2_SWAP               (3 << 6)
+#define V3_LB_BASE2_ENABLE             (1 << 0)
+
+#define v3_addr_to_lb_base2(a) (((a) >> 16) & V3_LB_BASE2_ADR_BASE)
+
+/*
+ *  LB_MAP2 register bits (Local bus -> PCI IO)
+ */
+#define V3_LB_MAP2_MAP_ADR             0xff00
+
+#define v3_addr_to_lb_map2(a)  (((a) >> 16) & V3_LB_MAP2_MAP_ADR)
 
 /*
  * The V3 PCI interface chip in Integrator provides several windows from
  * the mappings into PCI memory.
  */
 
+/* Filled in by probe */
+static void __iomem *pci_v3_base;
+/* CPU side memory ranges */
+static struct resource conf_mem; /* FIXME: remap this instead of static map */
+static struct resource io_mem;
+static struct resource non_mem;
+static struct resource pre_mem;
+/* PCI side memory ranges */
+static u64 non_mem_pci;
+static u64 non_mem_pci_sz;
+static u64 pre_mem_pci;
+static u64 pre_mem_pci_sz;
+
 // V3 access routines
-#define v3_writeb(o,v) __raw_writeb(v, PCI_V3_VADDR + (unsigned int)(o))
-#define v3_readb(o)    (__raw_readb(PCI_V3_VADDR + (unsigned int)(o)))
+#define v3_writeb(o,v) __raw_writeb(v, pci_v3_base + (unsigned int)(o))
+#define v3_readb(o)    (__raw_readb(pci_v3_base + (unsigned int)(o)))
 
-#define v3_writew(o,v) __raw_writew(v, PCI_V3_VADDR + (unsigned int)(o))
-#define v3_readw(o)    (__raw_readw(PCI_V3_VADDR + (unsigned int)(o)))
+#define v3_writew(o,v) __raw_writew(v, pci_v3_base + (unsigned int)(o))
+#define v3_readw(o)    (__raw_readw(pci_v3_base + (unsigned int)(o)))
 
-#define v3_writel(o,v) __raw_writel(v, PCI_V3_VADDR + (unsigned int)(o))
-#define v3_readl(o)    (__raw_readl(PCI_V3_VADDR + (unsigned int)(o)))
+#define v3_writel(o,v) __raw_writel(v, pci_v3_base + (unsigned int)(o))
+#define v3_readl(o)    (__raw_readl(pci_v3_base + (unsigned int)(o)))
 
 /*============================================================================
  *
  */
 static DEFINE_RAW_SPINLOCK(v3_lock);
 
-#define PCI_BUS_NONMEM_START   0x00000000
-#define PCI_BUS_NONMEM_SIZE    SZ_256M
-
-#define PCI_BUS_PREMEM_START   PCI_BUS_NONMEM_START + PCI_BUS_NONMEM_SIZE
-#define PCI_BUS_PREMEM_SIZE    SZ_256M
-
-#if PCI_BUS_NONMEM_START & 0x000fffff
-#error PCI_BUS_NONMEM_START must be megabyte aligned
-#endif
-#if PCI_BUS_PREMEM_START & 0x000fffff
-#error PCI_BUS_PREMEM_START must be megabyte aligned
-#endif
-
 #undef V3_LB_BASE_PREFETCH
 #define V3_LB_BASE_PREFETCH 0
 
@@ -243,13 +426,13 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,
         * prefetchable), this frees up base1 for re-use by
         * configuration memory
         */
-       v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE) |
+       v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(non_mem.start) |
                        V3_LB_BASE_ADR_SIZE_512MB | V3_LB_BASE_ENABLE);
 
        /*
         * Set up base1/map1 to point into configuration space.
         */
-       v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(PHYS_PCI_CONFIG_BASE) |
+       v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(conf_mem.start) |
                        V3_LB_BASE_ADR_SIZE_16MB | V3_LB_BASE_ENABLE);
        v3_writew(V3_LB_MAP1, mapaddress);
 
@@ -261,16 +444,16 @@ static void v3_close_config_window(void)
        /*
         * Reassign base1 for use by prefetchable PCI memory
         */
-       v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE + SZ_256M) |
+       v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(pre_mem.start) |
                        V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_PREFETCH |
                        V3_LB_BASE_ENABLE);
-       v3_writew(V3_LB_MAP1, v3_addr_to_lb_map(PCI_BUS_PREMEM_START) |
+       v3_writew(V3_LB_MAP1, v3_addr_to_lb_map(pre_mem_pci) |
                        V3_LB_MAP_TYPE_MEM_MULTIPLE);
 
        /*
         * And shrink base0 back to a 256M window (NOTE: MAP0 already correct)
         */
-       v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE) |
+       v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(non_mem.start) |
                        V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE);
 }
 
@@ -337,25 +520,11 @@ static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
        return PCIBIOS_SUCCESSFUL;
 }
 
-struct pci_ops pci_v3_ops = {
+static struct pci_ops pci_v3_ops = {
        .read   = v3_read_config,
        .write  = v3_write_config,
 };
 
-static struct resource non_mem = {
-       .name   = "PCI non-prefetchable",
-       .start  = PHYS_PCI_MEM_BASE + PCI_BUS_NONMEM_START,
-       .end    = PHYS_PCI_MEM_BASE + PCI_BUS_NONMEM_START + PCI_BUS_NONMEM_SIZE - 1,
-       .flags  = IORESOURCE_MEM,
-};
-
-static struct resource pre_mem = {
-       .name   = "PCI prefetchable",
-       .start  = PHYS_PCI_MEM_BASE + PCI_BUS_PREMEM_START,
-       .end    = PHYS_PCI_MEM_BASE + PCI_BUS_PREMEM_START + PCI_BUS_PREMEM_SIZE - 1,
-       .flags  = IORESOURCE_MEM | IORESOURCE_PREFETCH,
-};
-
 static int __init pci_v3_setup_resources(struct pci_sys_data *sys)
 {
        if (request_resource(&iomem_resource, &non_mem)) {
@@ -471,7 +640,7 @@ static irqreturn_t v3_irq(int dummy, void *devid)
        return IRQ_HANDLED;
 }
 
-int __init pci_v3_setup(int nr, struct pci_sys_data *sys)
+static int __init pci_v3_setup(int nr, struct pci_sys_data *sys)
 {
        int ret = 0;
 
@@ -479,7 +648,7 @@ int __init pci_v3_setup(int nr, struct pci_sys_data *sys)
                return -EINVAL;
 
        if (nr == 0) {
-               sys->mem_offset = PHYS_PCI_MEM_BASE;
+               sys->mem_offset = non_mem.start;
                ret = pci_v3_setup_resources(sys);
        }
 
@@ -490,18 +659,10 @@ int __init pci_v3_setup(int nr, struct pci_sys_data *sys)
  * V3_LB_BASE? - local bus address
  * V3_LB_MAP?  - pci bus address
  */
-void __init pci_v3_preinit(void)
+static void __init pci_v3_preinit(void)
 {
        unsigned long flags;
        unsigned int temp;
-       int ret;
-
-       /* Remap the Integrator system controller */
-       ap_syscon_base = ioremap(INTEGRATOR_SC_BASE, 0x100);
-       if (!ap_syscon_base) {
-               pr_err("unable to remap the AP syscon for PCIv3\n");
-               return;
-       }
 
        pcibios_min_mem = 0x00100000;
 
@@ -525,25 +686,25 @@ void __init pci_v3_preinit(void)
         * Setup window 0 - PCI non-prefetchable memory
         *  Local: 0x40000000 Bus: 0x00000000 Size: 256MB
         */
-       v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE) |
+       v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(non_mem.start) |
                        V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE);
-       v3_writew(V3_LB_MAP0, v3_addr_to_lb_map(PCI_BUS_NONMEM_START) |
+       v3_writew(V3_LB_MAP0, v3_addr_to_lb_map(non_mem_pci) |
                        V3_LB_MAP_TYPE_MEM);
 
        /*
         * Setup window 1 - PCI prefetchable memory
         *  Local: 0x50000000 Bus: 0x10000000 Size: 256MB
         */
-       v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE + SZ_256M) |
+       v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(pre_mem.start) |
                        V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_PREFETCH |
                        V3_LB_BASE_ENABLE);
-       v3_writew(V3_LB_MAP1, v3_addr_to_lb_map(PCI_BUS_PREMEM_START) |
+       v3_writew(V3_LB_MAP1, v3_addr_to_lb_map(pre_mem_pci) |
                        V3_LB_MAP_TYPE_MEM_MULTIPLE);
 
        /*
         * Setup window 2 - PCI IO
         */
-       v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(PHYS_PCI_IO_BASE) |
+       v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(io_mem.start) |
                        V3_LB_BASE_ENABLE);
        v3_writew(V3_LB_MAP2, v3_addr_to_lb_map2(0));
 
@@ -578,18 +739,10 @@ void __init pci_v3_preinit(void)
        v3_writeb(V3_LB_IMASK, 0x28);
        __raw_writel(3, ap_syscon_base + INTEGRATOR_SC_PCIENABLE_OFFSET);
 
-       /*
-        * Grab the PCI error interrupt.
-        */
-       ret = request_irq(IRQ_AP_V3INT, v3_irq, 0, "V3", NULL);
-       if (ret)
-               printk(KERN_ERR "PCI: unable to grab PCI error "
-                      "interrupt: %d\n", ret);
-
        raw_spin_unlock_irqrestore(&v3_lock, flags);
 }
 
-void __init pci_v3_postinit(void)
+static void __init pci_v3_postinit(void)
 {
        unsigned int pci_cmd;
 
@@ -608,5 +761,284 @@ void __init pci_v3_postinit(void)
                       "interrupt: %d\n", ret);
 #endif
 
-       register_isa_ports(PHYS_PCI_MEM_BASE, PHYS_PCI_IO_BASE, 0);
+       register_isa_ports(non_mem.start, io_mem.start, 0);
+}
+
+/*
+ * A small note about bridges and interrupts.  The DECchip 21050 (and
+ * later) adheres to the PCI-PCI bridge specification.  This says that
+ * the interrupts on the other side of a bridge are swizzled in the
+ * following manner:
+ *
+ * Dev    Interrupt   Interrupt
+ *        Pin on      Pin on
+ *        Device      Connector
+ *
+ *   4    A           A
+ *        B           B
+ *        C           C
+ *        D           D
+ *
+ *   5    A           B
+ *        B           C
+ *        C           D
+ *        D           A
+ *
+ *   6    A           C
+ *        B           D
+ *        C           A
+ *        D           B
+ *
+ *   7    A           D
+ *        B           A
+ *        C           B
+ *        D           C
+ *
+ * Where A = pin 1, B = pin 2 and so on and pin=0 = default = A.
+ * Thus, each swizzle is ((pin-1) + (device#-4)) % 4
+ */
+
+/*
+ * This routine handles multiple bridges.
+ */
+static u8 __init pci_v3_swizzle(struct pci_dev *dev, u8 *pinp)
+{
+       if (*pinp == 0)
+               *pinp = 1;
+
+       return pci_common_swizzle(dev, pinp);
+}
+
+static int irq_tab[4] __initdata = {
+       IRQ_AP_PCIINT0, IRQ_AP_PCIINT1, IRQ_AP_PCIINT2, IRQ_AP_PCIINT3
+};
+
+/*
+ * map the specified device/slot/pin to an IRQ.  This works out such
+ * that slot 9 pin 1 is INT0, pin 2 is INT1, and slot 10 pin 1 is INT1.
+ */
+static int __init pci_v3_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+       int intnr = ((slot - 9) + (pin - 1)) & 3;
+
+       return irq_tab[intnr];
+}
+
+static struct hw_pci pci_v3 __initdata = {
+       .swizzle                = pci_v3_swizzle,
+       .setup                  = pci_v3_setup,
+       .nr_controllers         = 1,
+       .ops                    = &pci_v3_ops,
+       .preinit                = pci_v3_preinit,
+       .postinit               = pci_v3_postinit,
+};
+
+#ifdef CONFIG_OF
+
+static int __init pci_v3_map_irq_dt(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+       struct of_irq oirq;
+       int ret;
+
+       ret = of_irq_map_pci(dev, &oirq);
+       if (ret) {
+               dev_err(&dev->dev, "of_irq_map_pci() %d\n", ret);
+               /* Proper return code 0 == NO_IRQ */
+               return 0;
+       }
+
+       return irq_create_of_mapping(oirq.controller, oirq.specifier,
+                                    oirq.size);
+}
+
+static int __init pci_v3_dtprobe(struct platform_device *pdev,
+                               struct device_node *np)
+{
+       struct of_pci_range_parser parser;
+       struct of_pci_range range;
+       struct resource *res;
+       int irq, ret;
+
+       if (of_pci_range_parser_init(&parser, np))
+               return -EINVAL;
+
+       /* Get base for bridge registers */
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "unable to obtain PCIv3 base\n");
+               return -ENODEV;
+       }
+       pci_v3_base = devm_ioremap(&pdev->dev, res->start,
+                                  resource_size(res));
+       if (!pci_v3_base) {
+               dev_err(&pdev->dev, "unable to remap PCIv3 base\n");
+               return -ENODEV;
+       }
+
+       /* Get and request error IRQ resource */
+       irq = platform_get_irq(pdev, 0);
+       if (irq <= 0) {
+               dev_err(&pdev->dev, "unable to obtain PCIv3 error IRQ\n");
+               return -ENODEV;
+       }
+       ret = devm_request_irq(&pdev->dev, irq, v3_irq, 0,
+                       "PCIv3 error", NULL);
+       if (ret < 0) {
+               dev_err(&pdev->dev, "unable to request PCIv3 error IRQ %d (%d)\n", irq, ret);
+               return ret;
+       }
+
+       for_each_of_pci_range(&parser, &range) {
+               if (!range.flags) {
+                       of_pci_range_to_resource(&range, np, &conf_mem);
+                       conf_mem.name = "PCIv3 config";
+               }
+               if (range.flags & IORESOURCE_IO) {
+                       of_pci_range_to_resource(&range, np, &io_mem);
+                       io_mem.name = "PCIv3 I/O";
+               }
+               if ((range.flags & IORESOURCE_MEM) &&
+                       !(range.flags & IORESOURCE_PREFETCH)) {
+                       non_mem_pci = range.pci_addr;
+                       non_mem_pci_sz = range.size;
+                       of_pci_range_to_resource(&range, np, &non_mem);
+                       non_mem.name = "PCIv3 non-prefetched mem";
+               }
+               if ((range.flags & IORESOURCE_MEM) &&
+                       (range.flags & IORESOURCE_PREFETCH)) {
+                       pre_mem_pci = range.pci_addr;
+                       pre_mem_pci_sz = range.size;
+                       of_pci_range_to_resource(&range, np, &pre_mem);
+                       pre_mem.name = "PCIv3 prefetched mem";
+               }
+       }
+
+       if (!conf_mem.start || !io_mem.start ||
+           !non_mem.start || !pre_mem.start) {
+               dev_err(&pdev->dev, "missing ranges in device node\n");
+               return -EINVAL;
+       }
+
+       pci_v3.map_irq = pci_v3_map_irq_dt;
+       pci_common_init_dev(&pdev->dev, &pci_v3);
+
+       return 0;
+}
+
+#else
+
+static inline int pci_v3_dtprobe(struct platform_device *pdev,
+                                 struct device_node *np)
+{
+       return -EINVAL;
+}
+
+#endif
+
+static int __init pci_v3_probe(struct platform_device *pdev)
+{
+       struct device_node *np = pdev->dev.of_node;
+       int ret;
+
+       /* Remap the Integrator system controller */
+       ap_syscon_base = ioremap(INTEGRATOR_SC_BASE, 0x100);
+       if (!ap_syscon_base) {
+               dev_err(&pdev->dev, "unable to remap the AP syscon for PCIv3\n");
+               return -ENODEV;
+       }
+
+       /* Device tree probe path */
+       if (np)
+               return pci_v3_dtprobe(pdev, np);
+
+       pci_v3_base = devm_ioremap(&pdev->dev, PHYS_PCI_V3_BASE, SZ_64K);
+       if (!pci_v3_base) {
+               dev_err(&pdev->dev, "unable to remap PCIv3 base\n");
+               return -ENODEV;
+       }
+
+       ret = devm_request_irq(&pdev->dev, IRQ_AP_V3INT, v3_irq, 0, "V3", NULL);
+       if (ret) {
+               dev_err(&pdev->dev, "unable to grab PCI error interrupt: %d\n",
+                       ret);
+               return -ENODEV;
+       }
+
+       conf_mem.name = "PCIv3 config";
+       conf_mem.start = PHYS_PCI_CONFIG_BASE;
+       conf_mem.end = PHYS_PCI_CONFIG_BASE + SZ_16M - 1;
+       conf_mem.flags = IORESOURCE_MEM;
+
+       io_mem.name = "PCIv3 I/O";
+       io_mem.start = PHYS_PCI_IO_BASE;
+       io_mem.end = PHYS_PCI_IO_BASE + SZ_16M - 1;
+       io_mem.flags = IORESOURCE_MEM;
+
+       non_mem_pci = 0x00000000;
+       non_mem_pci_sz = SZ_256M;
+       non_mem.name = "PCIv3 non-prefetched mem";
+       non_mem.start = PHYS_PCI_MEM_BASE;
+       non_mem.end = PHYS_PCI_MEM_BASE + SZ_256M - 1;
+       non_mem.flags = IORESOURCE_MEM;
+
+       pre_mem_pci = 0x10000000;
+       pre_mem_pci_sz = SZ_256M;
+       pre_mem.name = "PCIv3 prefetched mem";
+       pre_mem.start = PHYS_PCI_PRE_BASE + SZ_256M;
+       pre_mem.end = PHYS_PCI_PRE_BASE + SZ_256M - 1;
+       pre_mem.flags = IORESOURCE_MEM | IORESOURCE_PREFETCH;
+
+       pci_v3.map_irq = pci_v3_map_irq;
+
+       pci_common_init_dev(&pdev->dev, &pci_v3);
+
+       return 0;
+}
+
+static const struct of_device_id pci_ids[] = {
+       { .compatible = "v3,v360epc-pci", },
+       {},
+};
+
+static struct platform_driver pci_v3_driver = {
+       .driver = {
+               .name = "pci-v3",
+               .of_match_table = pci_ids,
+       },
+};
+
+static int __init pci_v3_init(void)
+{
+       return platform_driver_probe(&pci_v3_driver, pci_v3_probe);
+}
+
+subsys_initcall(pci_v3_init);
+
+/*
+ * Static mappings for the PCIv3 bridge
+ *
+ * e8000000    40000000        PCI memory              PHYS_PCI_MEM_BASE       (max 512M)
+ * ec000000    61000000        PCI config space        PHYS_PCI_CONFIG_BASE    (max 16M)
+ * fee00000    60000000        PCI IO                  PHYS_PCI_IO_BASE        (max 16M)
+ */
+static struct map_desc pci_v3_io_desc[] __initdata __maybe_unused = {
+       {
+               .virtual        = (unsigned long)PCI_MEMORY_VADDR,
+               .pfn            = __phys_to_pfn(PHYS_PCI_MEM_BASE),
+               .length         = SZ_16M,
+               .type           = MT_DEVICE
+       }, {
+               .virtual        = (unsigned long)PCI_CONFIG_VADDR,
+               .pfn            = __phys_to_pfn(PHYS_PCI_CONFIG_BASE),
+               .length         = SZ_16M,
+               .type           = MT_DEVICE
+       }
+};
+
+int __init pci_v3_early_init(void)
+{
+       iotable_init(pci_v3_io_desc, ARRAY_SIZE(pci_v3_io_desc));
+       vga_base = (unsigned long)PCI_MEMORY_VADDR;
+       pci_map_io_early(__phys_to_pfn(PHYS_PCI_IO_BASE));
+       return 0;
 }
diff --git a/arch/arm/mach-integrator/pci_v3.h b/arch/arm/mach-integrator/pci_v3.h
new file mode 100644 (file)
index 0000000..755fd29
--- /dev/null
@@ -0,0 +1,2 @@
+/* Simple oneliner include to the PCIv3 early init */
+extern int pci_v3_early_init(void);
diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig
new file mode 100644 (file)
index 0000000..51a50e9
--- /dev/null
@@ -0,0 +1,15 @@
+config ARCH_KEYSTONE
+       bool "Texas Instruments Keystone Devices"
+       depends on ARCH_MULTI_V7
+       select CPU_V7
+       select ARM_GIC
+       select HAVE_ARM_ARCH_TIMER
+       select HAVE_SMP
+       select CLKSRC_MMIO
+       select GENERIC_CLOCKEVENTS
+       select HAVE_SCHED_CLOCK
+       select ARCH_WANT_OPTIONAL_GPIOLIB
+       select ARM_ERRATA_798181 if SMP
+       help
+         Support for boards based on the Texas Instruments Keystone family of
+         SoCs.
diff --git a/arch/arm/mach-keystone/Makefile b/arch/arm/mach-keystone/Makefile
new file mode 100644 (file)
index 0000000..ddc52b0
--- /dev/null
@@ -0,0 +1,6 @@
+obj-y                                  := keystone.o smc.o
+
+plus_sec := $(call as-instr,.arch_extension sec,+sec)
+AFLAGS_smc.o                           :=-Wa,-march=armv7-a$(plus_sec)
+
+obj-$(CONFIG_SMP)                      += platsmp.o
diff --git a/arch/arm/mach-keystone/Makefile.boot b/arch/arm/mach-keystone/Makefile.boot
new file mode 100644 (file)
index 0000000..f3835c4
--- /dev/null
@@ -0,0 +1 @@
+zreladdr-y     := 0x80008000
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
new file mode 100644 (file)
index 0000000..fe4d9ff
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Keystone2 based boards and SOC related code.
+ *
+ * Copyright 2013 Texas Instruments, Inc.
+ *     Cyril Chemparathy <cyril@ti.com>
+ *     Santosh Shilimkar <santosh.shillimkar@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/init.h>
+#include <linux/of_platform.h>
+#include <linux/of_address.h>
+
+#include <asm/setup.h>
+#include <asm/mach/map.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/time.h>
+#include <asm/smp_plat.h>
+
+#include "keystone.h"
+
+#define PLL_RESET_WRITE_KEY_MASK               0xffff0000
+#define PLL_RESET_WRITE_KEY                    0x5a69
+#define PLL_RESET                              BIT(16)
+
+static void __iomem *keystone_rstctrl;
+
+static void __init keystone_init(void)
+{
+       struct device_node *node;
+
+       node = of_find_compatible_node(NULL, NULL, "ti,keystone-reset");
+       if (WARN_ON(!node))
+               pr_warn("ti,keystone-reset node undefined\n");
+
+       keystone_rstctrl = of_iomap(node, 0);
+       if (WARN_ON(!keystone_rstctrl))
+               pr_warn("ti,keystone-reset iomap error\n");
+
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static const char *keystone_match[] __initconst = {
+       "ti,keystone-evm",
+       NULL,
+};
+
+void keystone_restart(char mode, const char *cmd)
+{
+       u32 val;
+
+       BUG_ON(!keystone_rstctrl);
+
+       /* Enable write access to RSTCTRL */
+       val = readl(keystone_rstctrl);
+       val &= PLL_RESET_WRITE_KEY_MASK;
+       val |= PLL_RESET_WRITE_KEY;
+       writel(val, keystone_rstctrl);
+
+       /* Reset the SOC */
+       val = readl(keystone_rstctrl);
+       val &= ~PLL_RESET;
+       writel(val, keystone_rstctrl);
+}
+
+DT_MACHINE_START(KEYSTONE, "Keystone")
+       .smp            = smp_ops(keystone_smp_ops),
+       .init_machine   = keystone_init,
+       .dt_compat      = keystone_match,
+       .restart        = keystone_restart,
+MACHINE_END
diff --git a/arch/arm/mach-keystone/keystone.h b/arch/arm/mach-keystone/keystone.h
new file mode 100644 (file)
index 0000000..60bef9d
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2013 Texas Instruments, Inc.
+ *     Cyril Chemparathy <cyril@ti.com>
+ *     Santosh Shilimkar <santosh.shillimkar@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+
+#ifndef __KEYSTONE_H__
+#define __KEYSTONE_H__
+
+#define KEYSTONE_MON_CPU_UP_IDX                0x00
+
+#ifndef __ASSEMBLER__
+
+extern struct smp_operations keystone_smp_ops;
+extern void secondary_startup(void);
+extern u32 keystone_cpu_smc(u32 command, u32 cpu, u32 addr);
+
+#endif /* __ASSEMBLER__ */
+#endif /* __KEYSTONE_H__ */
diff --git a/arch/arm/mach-keystone/platsmp.c b/arch/arm/mach-keystone/platsmp.c
new file mode 100644 (file)
index 0000000..1d4181e
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Keystone SOC SMP platform code
+ *
+ * Copyright 2013 Texas Instruments, Inc.
+ *     Cyril Chemparathy <cyril@ti.com>
+ *     Santosh Shilimkar <santosh.shillimkar@ti.com>
+ *
+ * Based on platsmp.c, Copyright (C) 2002 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/smp.h>
+#include <linux/io.h>
+
+#include <asm/smp_plat.h>
+#include <asm/prom.h>
+
+#include "keystone.h"
+
+static int __cpuinit keystone_smp_boot_secondary(unsigned int cpu,
+                                               struct task_struct *idle)
+{
+       unsigned long start = virt_to_phys(&secondary_startup);
+       int error;
+
+       pr_debug("keystone-smp: booting cpu %d, vector %08lx\n",
+                cpu, start);
+
+       error = keystone_cpu_smc(KEYSTONE_MON_CPU_UP_IDX, cpu, start);
+       if (error)
+               pr_err("CPU %d bringup failed with %d\n", cpu, error);
+
+       return error;
+}
+
+struct smp_operations keystone_smp_ops __initdata = {
+       .smp_init_cpus          = arm_dt_init_cpu_maps,
+       .smp_boot_secondary     = keystone_smp_boot_secondary,
+};
diff --git a/arch/arm/mach-keystone/smc.S b/arch/arm/mach-keystone/smc.S
new file mode 100644 (file)
index 0000000..9b9e4f7
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Keystone Secure APIs
+ *
+ * Copyright (C) 2013 Texas Instruments, Inc.
+ *     Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *
+ * This program is free software,you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/linkage.h>
+
+/**
+ * u32 keystone_cpu_smc(u32 command, u32 cpu, u32 addr)
+ *
+ * Low level CPU monitor API
+ * @command:   Monitor command.
+ * @cpu:       CPU Number
+ * @addr:      Kernel jump address for boot CPU
+ *
+ * Return: Non zero value on failure
+ */
+ENTRY(keystone_cpu_smc)
+       stmfd   sp!, {r4-r12, lr}
+       smc     #0
+       dsb
+       ldmfd   sp!, {r4-r12, pc}
+ENDPROC(keystone_cpu_smc)
index 7509a89af96704e32b318c787cdb8e3c0fa04e99..e610e137aa3635d345c5683cbf3ca0c596a18c71 100644 (file)
@@ -8,12 +8,6 @@ config MACH_D2NET_V2
          Say 'Y' here if you want your kernel to support the
          LaCie d2 Network v2 NAS.
 
-config MACH_DB88F6281_BP
-       bool "Marvell DB-88F6281-BP Development Board"
-       help
-         Say 'Y' here if you want your kernel to support the
-         Marvell DB-88F6281-BP Development Board.
-
 config MACH_DOCKSTAR
        bool "Seagate FreeAgent DockStar"
        help
@@ -134,13 +128,12 @@ comment "Device tree entries"
 
 config ARCH_KIRKWOOD_DT
        bool "Marvell Kirkwood Flattened Device Tree"
+       select KIRKWOOD_CLK
        select POWER_SUPPLY
        select POWER_RESET
        select POWER_RESET_GPIO
        select REGULATOR
        select REGULATOR_FIXED_VOLTAGE
-       select MVEBU_CLK_CORE
-       select MVEBU_CLK_GATING
        select USE_OF
        help
          Say 'Y' here if you want your kernel to support the
@@ -153,6 +146,13 @@ config MACH_CLOUDBOX_DT
          Say 'Y' here if you want your kernel to support the LaCie
          CloudBox NAS, using Flattened Device Tree.
 
+config MACH_DB88F628X_BP_DT
+       bool "Marvell DB-88F628x-BP Development Board (Flattened Device Tree)"
+       help
+         Say 'Y' here if you want your kernel to support the Marvell
+         DB-88F6281-BP and DB-88F6282-BP Development Board (Flattened
+         Device Tree).
+
 config MACH_DLINK_KIRKWOOD_DT
        bool "D-Link Kirkwood-based NAS (Flattened Device Tree)"
        select ARCH_KIRKWOOD_DT
@@ -272,14 +272,6 @@ config MACH_NETSPACE_V2_DT
          Say 'Y' here if you want your kernel to support the LaCie
          Network Space v2 NAS, using Flattened Device Tree.
 
-config MACH_NSA310_DT
-       bool "ZyXEL NSA-310 (Flattened Device Tree)"
-       select ARCH_KIRKWOOD_DT
-       select ARM_ATAG_DTB_COMPAT
-       help
-         Say 'Y' here if you want your kernel to support the
-         ZyXEL NSA-310 board (Flattened Device Tree).
-
 config MACH_OPENBLOCKS_A6_DT
        bool "Plat'Home OpenBlocks A6 (Flattened Device Tree)"
        select ARCH_KIRKWOOD_DT
index e1f3735d34154aaa90da215fdab1359070f8ab64..2fdc3a7ad226fa91e270bc97d6ec321f06107a90 100644 (file)
@@ -1,7 +1,6 @@
 obj-y                          += common.o irq.o pcie.o mpp.o
 
 obj-$(CONFIG_MACH_D2NET_V2)            += d2net_v2-setup.o lacie_v2-common.o
-obj-$(CONFIG_MACH_DB88F6281_BP)                += db88f6281-bp-setup.o
 obj-$(CONFIG_MACH_DOCKSTAR)            += dockstar-setup.o
 obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG)    += sheevaplug-setup.o
 obj-$(CONFIG_MACH_GURUPLUG)            += guruplug-setup.o
@@ -21,6 +20,7 @@ obj-$(CONFIG_MACH_TS41X)              += ts41x-setup.o tsx1x-common.o
 
 obj-$(CONFIG_ARCH_KIRKWOOD_DT)         += board-dt.o
 obj-$(CONFIG_MACH_CLOUDBOX_DT)         += board-ns2.o
+obj-$(CONFIG_MACH_DB88F628X_BP_DT)     += board-db88f628x-bp.o
 obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT)   += board-dnskw.o
 obj-$(CONFIG_MACH_DOCKSTAR_DT)         += board-dockstar.o
 obj-$(CONFIG_MACH_DREAMPLUG_DT)                += board-dreamplug.o
@@ -37,7 +37,6 @@ obj-$(CONFIG_MACH_NETSPACE_LITE_V2_DT)        += board-ns2.o
 obj-$(CONFIG_MACH_NETSPACE_MAX_V2_DT)  += board-ns2.o
 obj-$(CONFIG_MACH_NETSPACE_MINI_V2_DT) += board-ns2.o
 obj-$(CONFIG_MACH_NETSPACE_V2_DT)      += board-ns2.o
-obj-$(CONFIG_MACH_NSA310_DT)           += board-nsa310.o
 obj-$(CONFIG_MACH_OPENBLOCKS_A6_DT)    += board-openblocks_a6.o
 obj-$(CONFIG_MACH_READYNAS_DT)         += board-readynas.o
 obj-$(CONFIG_MACH_TOPKICK_DT)          += board-usi_topkick.o
diff --git a/arch/arm/mach-kirkwood/board-db88f628x-bp.c b/arch/arm/mach-kirkwood/board-db88f628x-bp.c
new file mode 100644 (file)
index 0000000..2f574bc
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Saeed Bishara <saeed@marvell.com>
+ *
+ * Marvell DB-88F628{1,2}-BP Development Board Setup
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/of.h>
+#include <linux/mv643xx_eth.h>
+#include "common.h"
+
+static struct mv643xx_eth_platform_data db88f628x_ge00_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
+};
+
+void __init db88f628x_init(void)
+{
+       kirkwood_ge00_init(&db88f628x_ge00_data);
+}
index e9647b80cb590d9d0131b9542a5e476da9cad459..cee5dc71cb60aa5d9bc443a93c27805a9b478f01 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/clk-provider.h>
-#include <linux/clk/mvebu.h>
 #include <linux/kexec.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <plat/common.h>
 #include "common.h"
 
-static struct of_device_id kirkwood_dt_match_table[] __initdata = {
-       { .compatible = "simple-bus", },
-       { }
-};
-
 /*
  * There are still devices that doesn't know about DT yet.  Get clock
  * gates here and add a clock lookup alias, so that old platform
@@ -77,7 +71,7 @@ static void __init kirkwood_legacy_clk_init(void)
 
 static void __init kirkwood_of_clk_init(void)
 {
-       mvebu_clocks_init();
+       of_clk_init(NULL);
        kirkwood_legacy_clk_init();
 }
 
@@ -97,6 +91,8 @@ static void __init kirkwood_dt_init(void)
 
        kirkwood_l2_init();
 
+       kirkwood_cpufreq_init();
+
        /* Setup root of clk tree */
        kirkwood_of_clk_init();
 
@@ -147,6 +143,10 @@ static void __init kirkwood_dt_init(void)
            of_machine_is_compatible("lacie,netspace_v2"))
                ns2_init();
 
+       if (of_machine_is_compatible("marvell,db-88f6281-bp") ||
+           of_machine_is_compatible("marvell,db-88f6282-bp"))
+               db88f628x_init();
+
        if (of_machine_is_compatible("mpl,cec4"))
                mplcec4_init();
 
@@ -159,7 +159,7 @@ static void __init kirkwood_dt_init(void)
        if (of_machine_is_compatible("usi,topkick"))
                usi_topkick_init();
 
-       of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL);
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 }
 
 static const char * const kirkwood_dt_board_compat[] = {
@@ -181,6 +181,8 @@ static const char * const kirkwood_dt_board_compat[] = {
        "lacie,netspace_max_v2",
        "lacie,netspace_mini_v2",
        "lacie,netspace_v2",
+       "marvell,db-88f6281-bp",
+       "marvell,db-88f6282-bp",
        "mpl,cec4",
        "netgear,readynas-duo-v2",
        "plathome,openblocks-a6",
index c8ebde4919e26fa4bf1db5eb5e8556e2d63ddda9..98b5ad1bba90cc0f4f985043cfd2bebd56c562b3 100644 (file)
@@ -22,11 +22,3 @@ void __init iconnect_init(void)
 {
        kirkwood_ge00_init(&iconnect_ge00_data);
 }
-
-static int __init iconnect_pci_init(void)
-{
-       if (of_machine_is_compatible("iom,iconnect"))
-               kirkwood_pcie_init(KW_PCIE0);
-       return 0;
-}
-subsys_initcall(iconnect_pci_init);
index 7d6dc669e17fb4dfc6338a5c7e1a129868ae5a0a..938712e248f1ffc04f9e2ff6eae5d7633da93e96 100644 (file)
@@ -29,7 +29,6 @@ void __init mplcec4_init(void)
         */
        kirkwood_ge00_init(&mplcec4_ge00_data);
        kirkwood_ge01_init(&mplcec4_ge01_data);
-       kirkwood_pcie_init(KW_PCIE0);
 }
 
 
diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c
deleted file mode 100644 (file)
index 55ade93..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * arch/arm/mach-kirkwood/nsa-310-setup.c
- *
- * ZyXEL NSA-310 Setup
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <mach/kirkwood.h>
-#include <linux/of.h>
-#include "common.h"
-
-static int __init nsa310_pci_init(void)
-{
-       if (of_machine_is_compatible("zyxel,nsa310"))
-               kirkwood_pcie_init(KW_PCIE0);
-
-       return 0;
-}
-
-subsys_initcall(nsa310_pci_init);
index fb42c20e273f1b19f40b7b9c4d2876051f919fd2..341b82d9cadb452046d53ee3b88fd38c1416e1ff 100644 (file)
@@ -24,5 +24,4 @@ static struct mv643xx_eth_platform_data netgear_readynas_ge00_data = {
 void __init netgear_readynas_init(void)
 {
        kirkwood_ge00_init(&netgear_readynas_ge00_data);
-       kirkwood_pcie_init(KW_PCIE0);
 }
index f389228975637cd85d3f9f9444ae30e0f34537cc..7c72c725b711d40622a4552fbee18f8f14120e2c 100644 (file)
@@ -597,6 +597,29 @@ void __init kirkwood_audio_init(void)
        platform_device_register(&kirkwood_pcm_device);
 }
 
+/*****************************************************************************
+ * CPU Frequency
+ ****************************************************************************/
+static struct resource kirkwood_cpufreq_resources[] = {
+       [0] = {
+               .start  = CPU_CONTROL_PHYS,
+               .end    = CPU_CONTROL_PHYS + 3,
+               .flags  = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device kirkwood_cpufreq_device = {
+       .name           = "kirkwood-cpufreq",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(kirkwood_cpufreq_resources),
+       .resource       = kirkwood_cpufreq_resources,
+};
+
+void __init kirkwood_cpufreq_init(void)
+{
+       platform_device_register(&kirkwood_cpufreq_device);
+}
+
 /*****************************************************************************
  * General
  ****************************************************************************/
@@ -648,30 +671,6 @@ char * __init kirkwood_id(void)
 
 void __init kirkwood_setup_wins(void)
 {
-       /*
-        * The PCIe windows will no longer be statically allocated
-        * here once Kirkwood is migrated to the pci-mvebu driver.
-        */
-       mvebu_mbus_add_window_remap_flags("pcie0.0",
-                                         KIRKWOOD_PCIE_IO_PHYS_BASE,
-                                         KIRKWOOD_PCIE_IO_SIZE,
-                                         KIRKWOOD_PCIE_IO_BUS_BASE,
-                                         MVEBU_MBUS_PCI_IO);
-       mvebu_mbus_add_window_remap_flags("pcie0.0",
-                                         KIRKWOOD_PCIE_MEM_PHYS_BASE,
-                                         KIRKWOOD_PCIE_MEM_SIZE,
-                                         MVEBU_MBUS_NO_REMAP,
-                                         MVEBU_MBUS_PCI_MEM);
-       mvebu_mbus_add_window_remap_flags("pcie1.0",
-                                         KIRKWOOD_PCIE1_IO_PHYS_BASE,
-                                         KIRKWOOD_PCIE1_IO_SIZE,
-                                         KIRKWOOD_PCIE1_IO_BUS_BASE,
-                                         MVEBU_MBUS_PCI_IO);
-       mvebu_mbus_add_window_remap_flags("pcie1.0",
-                                         KIRKWOOD_PCIE1_MEM_PHYS_BASE,
-                                         KIRKWOOD_PCIE1_MEM_SIZE,
-                                         MVEBU_MBUS_NO_REMAP,
-                                         MVEBU_MBUS_PCI_MEM);
        mvebu_mbus_add_window("nand", KIRKWOOD_NAND_MEM_PHYS_BASE,
                              KIRKWOOD_NAND_MEM_SIZE);
        mvebu_mbus_add_window("sram", KIRKWOOD_SRAM_PHYS_BASE,
index 21da3b1ebd7bf843c2b9b1e11a8fd025b5e30287..e2e19b302c287445e36521af1a086d5ad640ac03 100644 (file)
@@ -51,6 +51,8 @@ void kirkwood_nand_init_rnb(struct mtd_partition *parts, int nr_parts,
                            int (*dev_ready)(struct mtd_info *));
 void kirkwood_audio_init(void);
 void kirkwood_cpuidle_init(void);
+void kirkwood_cpufreq_init(void);
+
 void kirkwood_restart(char, const char *);
 void kirkwood_clk_init(void);
 
@@ -119,6 +121,12 @@ void km_kirkwood_init(void);
 static inline void km_kirkwood_init(void) {};
 #endif
 
+#ifdef CONFIG_MACH_DB88F628X_BP_DT
+void db88f628x_init(void);
+#else
+static inline void db88f628x_init(void) {};
+#endif
+
 #ifdef CONFIG_MACH_MPLCEC4_DT
 void mplcec4_init(void);
 #else
diff --git a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c
deleted file mode 100644 (file)
index 5a369fe..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * arch/arm/mach-kirkwood/db88f6281-bp-setup.c
- *
- * Marvell DB-88F6281-BP Development Board Setup
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/sizes.h>
-#include <linux/platform_device.h>
-#include <linux/mtd/partitions.h>
-#include <linux/ata_platform.h>
-#include <linux/mv643xx_eth.h>
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
-#include <mach/kirkwood.h>
-#include <linux/platform_data/mmc-mvsdio.h>
-#include "common.h"
-#include "mpp.h"
-
-static struct mtd_partition db88f6281_nand_parts[] = {
-       {
-               .name = "u-boot",
-               .offset = 0,
-               .size = SZ_1M
-       }, {
-               .name = "uImage",
-               .offset = MTDPART_OFS_NXTBLK,
-               .size = SZ_4M
-       }, {
-               .name = "root",
-               .offset = MTDPART_OFS_NXTBLK,
-               .size = MTDPART_SIZ_FULL
-       },
-};
-
-static struct mv643xx_eth_platform_data db88f6281_ge00_data = {
-       .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
-};
-
-static struct mv_sata_platform_data db88f6281_sata_data = {
-       .n_ports        = 2,
-};
-
-static struct mvsdio_platform_data db88f6281_mvsdio_data = {
-       .gpio_write_protect     = 37,
-       .gpio_card_detect       = 38,
-};
-
-static unsigned int db88f6281_mpp_config[] __initdata = {
-       MPP0_NF_IO2,
-       MPP1_NF_IO3,
-       MPP2_NF_IO4,
-       MPP3_NF_IO5,
-       MPP4_NF_IO6,
-       MPP5_NF_IO7,
-       MPP18_NF_IO0,
-       MPP19_NF_IO1,
-       MPP37_GPIO,
-       MPP38_GPIO,
-       0
-};
-
-static void __init db88f6281_init(void)
-{
-       /*
-        * Basic setup. Needs to be called early.
-        */
-       kirkwood_init();
-       kirkwood_mpp_conf(db88f6281_mpp_config);
-
-       kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25);
-       kirkwood_ehci_init();
-       kirkwood_ge00_init(&db88f6281_ge00_data);
-       kirkwood_sata_init(&db88f6281_sata_data);
-       kirkwood_uart0_init();
-       kirkwood_sdio_init(&db88f6281_mvsdio_data);
-}
-
-static int __init db88f6281_pci_init(void)
-{
-       if (machine_is_db88f6281_bp()) {
-               u32 dev, rev;
-
-               kirkwood_pcie_id(&dev, &rev);
-               if (dev == MV88F6282_DEV_ID)
-                       kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0);
-               else
-                       kirkwood_pcie_init(KW_PCIE0);
-       }
-       return 0;
-}
-subsys_initcall(db88f6281_pci_init);
-
-MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board")
-       /* Maintainer: Saeed Bishara <saeed@marvell.com> */
-       .atag_offset    = 0x100,
-       .init_machine   = db88f6281_init,
-       .map_io         = kirkwood_map_io,
-       .init_early     = kirkwood_init_early,
-       .init_irq       = kirkwood_init_irq,
-       .init_time      = kirkwood_timer_init,
-       .restart        = kirkwood_restart,
-MACHINE_END
index 5c82b7dce4e2377b7dc84c55c03b5db8aa0c9784..d4cbe5e81bb4dcac1e5048fb79e10a3b1ad83d18 100644 (file)
@@ -17,6 +17,7 @@
 #define CPU_CONFIG_ERROR_PROP  0x00000004
 
 #define CPU_CONTROL            (BRIDGE_VIRT_BASE + 0x0104)
+#define CPU_CONTROL_PHYS       (BRIDGE_PHYS_BASE + 0x0104)
 #define CPU_RESET              0x00000002
 
 #define RSTOUTn_MASK           (BRIDGE_VIRT_BASE + 0x0108)
@@ -69,6 +70,7 @@
 #define CGC_RUNIT              (1 << 7)
 #define CGC_XOR0               (1 << 8)
 #define CGC_AUDIO              (1 << 9)
+#define CGC_POWERSAVE           (1 << 11)
 #define CGC_SATA0              (1 << 14)
 #define CGC_SATA1              (1 << 15)
 #define CGC_XOR1               (1 << 16)
index 7f43e6c2f8c0a15f820ce7fc0cbd6ddb0f6936de..ddcb09f5bdd38403423f2123c329149b74848fd5 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/pci.h>
 #include <linux/slab.h>
 #include <linux/clk.h>
+#include <linux/mbus.h>
 #include <video/vga.h>
 #include <asm/irq.h>
 #include <asm/mach/pci.h>
@@ -253,6 +254,27 @@ static void __init add_pcie_port(int index, void __iomem *base)
 
 void __init kirkwood_pcie_init(unsigned int portmask)
 {
+       mvebu_mbus_add_window_remap_flags("pcie0.0",
+                                         KIRKWOOD_PCIE_IO_PHYS_BASE,
+                                         KIRKWOOD_PCIE_IO_SIZE,
+                                         KIRKWOOD_PCIE_IO_BUS_BASE,
+                                         MVEBU_MBUS_PCI_IO);
+       mvebu_mbus_add_window_remap_flags("pcie0.0",
+                                         KIRKWOOD_PCIE_MEM_PHYS_BASE,
+                                         KIRKWOOD_PCIE_MEM_SIZE,
+                                         MVEBU_MBUS_NO_REMAP,
+                                         MVEBU_MBUS_PCI_MEM);
+       mvebu_mbus_add_window_remap_flags("pcie1.0",
+                                         KIRKWOOD_PCIE1_IO_PHYS_BASE,
+                                         KIRKWOOD_PCIE1_IO_SIZE,
+                                         KIRKWOOD_PCIE1_IO_BUS_BASE,
+                                         MVEBU_MBUS_PCI_IO);
+       mvebu_mbus_add_window_remap_flags("pcie1.0",
+                                         KIRKWOOD_PCIE1_MEM_PHYS_BASE,
+                                         KIRKWOOD_PCIE1_MEM_SIZE,
+                                         MVEBU_MBUS_NO_REMAP,
+                                         MVEBU_MBUS_PCI_MEM);
+
        vga_base = KIRKWOOD_PCIE_MEM_PHYS_BASE;
 
        if (portmask & KW_PCIE0)
index 80a8bcacd9d539c0a684e3beaa927b07dd720566..9eb63d7246023e061ff80a91b2a600f691906c58 100644 (file)
@@ -10,12 +10,11 @@ config ARCH_MVEBU
        select PLAT_ORION
        select SPARSE_IRQ
        select CLKDEV_LOOKUP
-       select MVEBU_CLK_CORE
-       select MVEBU_CLK_CPU
-       select MVEBU_CLK_GATING
        select MVEBU_MBUS
        select ZONE_DMA if ARM_LPAE
        select ARCH_REQUIRE_GPIOLIB
+       select MIGHT_HAVE_PCI
+       select PCI_QUIRKS if PCI
 
 if ARCH_MVEBU
 
@@ -30,6 +29,7 @@ config MACH_ARMADA_370_XP
 
 config MACH_ARMADA_370
        bool "Marvell Armada 370 boards"
+       select ARMADA_370_CLK
        select MACH_ARMADA_370_XP
        select PINCTRL_ARMADA_370
        help
@@ -38,6 +38,7 @@ config MACH_ARMADA_370
 
 config MACH_ARMADA_XP
        bool "Marvell Armada XP boards"
+       select ARMADA_XP_CLK
        select MACH_ARMADA_370_XP
        select PINCTRL_ARMADA_XP
        help
index cf8e357a0a0275754fd7c4b64ceca947409aa40c..97cbb802191930d21c64532d93e3a4ea2a2594af 100644 (file)
 
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/clk-provider.h>
+#include <linux/of_address.h>
 #include <linux/of_platform.h>
 #include <linux/io.h>
 #include <linux/time-armada-370-xp.h>
-#include <linux/clk/mvebu.h>
 #include <linux/dma-mapping.h>
 #include <linux/mbus.h>
 #include <asm/hardware/cache-l2x0.h>
 #include "common.h"
 #include "coherency.h"
 
-static struct map_desc armada_370_xp_io_desc[] __initdata = {
-       {
-               .virtual        = (unsigned long) ARMADA_370_XP_REGS_VIRT_BASE,
-               .pfn            = __phys_to_pfn(ARMADA_370_XP_REGS_PHYS_BASE),
-               .length         = ARMADA_370_XP_REGS_SIZE,
-               .type           = MT_DEVICE,
-       },
-};
-
 static void __init armada_370_xp_map_io(void)
 {
-       iotable_init(armada_370_xp_io_desc, ARRAY_SIZE(armada_370_xp_io_desc));
+       debug_ll_io_init();
 }
 
-static void __init armada_370_xp_timer_and_clk_init(void)
-{
-       mvebu_clocks_init();
-       armada_370_xp_timer_init();
-}
+/*
+ * This initialization will be replaced by a DT-based
+ * initialization once the mvebu-mbus driver gains DT support.
+ */
 
-static void __init armada_370_xp_init_early(void)
+#define ARMADA_370_XP_MBUS_WINS_OFFS   0x20000
+#define ARMADA_370_XP_MBUS_WINS_SIZE   0x100
+#define ARMADA_370_XP_SDRAM_WINS_OFFS  0x20180
+#define ARMADA_370_XP_SDRAM_WINS_SIZE  0x20
+
+static void __init armada_370_xp_mbus_init(void)
 {
        char *mbus_soc_name;
+       struct device_node *dn;
+       const __be32 mbus_wins_offs = cpu_to_be32(ARMADA_370_XP_MBUS_WINS_OFFS);
+       const __be32 sdram_wins_offs = cpu_to_be32(ARMADA_370_XP_SDRAM_WINS_OFFS);
 
-       /*
-        * This initialization will be replaced by a DT-based
-        * initialization once the mvebu-mbus driver gains DT support.
-        */
        if (of_machine_is_compatible("marvell,armada370"))
                mbus_soc_name = "marvell,armada370-mbus";
        else
                mbus_soc_name = "marvell,armadaxp-mbus";
 
+       dn = of_find_node_by_name(NULL, "internal-regs");
+       BUG_ON(!dn);
+
        mvebu_mbus_init(mbus_soc_name,
-                       ARMADA_370_XP_MBUS_WINS_BASE,
+                       of_translate_address(dn, &mbus_wins_offs),
                        ARMADA_370_XP_MBUS_WINS_SIZE,
-                       ARMADA_370_XP_SDRAM_WINS_BASE,
+                       of_translate_address(dn, &sdram_wins_offs),
                        ARMADA_370_XP_SDRAM_WINS_SIZE);
+}
 
+static void __init armada_370_xp_timer_and_clk_init(void)
+{
+       of_clk_init(NULL);
+       armada_370_xp_timer_init();
+       coherency_init();
+       armada_370_xp_mbus_init();
 #ifdef CONFIG_CACHE_L2X0
        l2x0_of_init(0, ~0UL);
 #endif
@@ -75,7 +80,6 @@ static void __init armada_370_xp_init_early(void)
 static void __init armada_370_xp_dt_init(void)
 {
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
-       coherency_init();
 }
 
 static const char * const armada_370_xp_dt_compat[] = {
@@ -87,7 +91,6 @@ DT_MACHINE_START(ARMADA_XP_DT, "Marvell Armada 370/XP (Device Tree)")
        .smp            = smp_ops(armada_xp_smp_ops),
        .init_machine   = armada_370_xp_dt_init,
        .map_io         = armada_370_xp_map_io,
-       .init_early     = armada_370_xp_init_early,
        .init_time      = armada_370_xp_timer_and_clk_init,
        .restart        = mvebu_restart,
        .dt_compat      = armada_370_xp_dt_compat,
index 2070e1b4f34241685f451b024b87a8ab43c63fcb..c612b2c4ed6cf9969153c1cee7c96221f054d1d8 100644 (file)
 #ifndef __MACH_ARMADA_370_XP_H
 #define __MACH_ARMADA_370_XP_H
 
-#define ARMADA_370_XP_REGS_PHYS_BASE   0xd0000000
-#define ARMADA_370_XP_REGS_VIRT_BASE   IOMEM(0xfec00000)
-#define ARMADA_370_XP_REGS_SIZE                SZ_1M
-
-/* These defines can go away once mvebu-mbus has a DT binding */
-#define ARMADA_370_XP_MBUS_WINS_BASE    (ARMADA_370_XP_REGS_PHYS_BASE + 0x20000)
-#define ARMADA_370_XP_MBUS_WINS_SIZE    0x100
-#define ARMADA_370_XP_SDRAM_WINS_BASE   (ARMADA_370_XP_REGS_PHYS_BASE + 0x20180)
-#define ARMADA_370_XP_SDRAM_WINS_SIZE   0x20
-
 #ifdef CONFIG_SMP
 #include <linux/cpumask.h>
 
index 8278960066c33a86c4218be10d54a68b0b5c59c3..be117591f7f256ca04c47c40d7fabd38aa081161 100644 (file)
 #include <linux/dma-mapping.h>
 #include <linux/platform_device.h>
 #include <asm/smp_plat.h>
+#include <asm/cacheflush.h>
 #include "armada-370-xp.h"
 
-/*
- * Some functions in this file are called very early during SMP
- * initialization. At that time the device tree framework is not yet
- * ready, and it is not possible to get the register address to
- * ioremap it. That's why the pointer below is given with an initial
- * value matching its virtual mapping
- */
-static void __iomem *coherency_base = ARMADA_370_XP_REGS_VIRT_BASE + 0x20200;
+unsigned long __cpuinitdata coherency_phys_base;
+static void __iomem *coherency_base;
 static void __iomem *coherency_cpu_base;
 
 /* Coherency fabric registers */
@@ -47,18 +42,6 @@ static struct of_device_id of_coherency_table[] = {
        { /* end of list */ },
 };
 
-#ifdef CONFIG_SMP
-int coherency_get_cpu_count(void)
-{
-       int reg, cnt;
-
-       reg = readl(coherency_base + COHERENCY_FABRIC_CFG_OFFSET);
-       cnt = (reg & 0xF) + 1;
-
-       return cnt;
-}
-#endif
-
 /* Function defined in coherency_ll.S */
 int ll_set_cpu_coherent(void __iomem *base_addr, unsigned int hw_cpu_id);
 
@@ -143,13 +126,31 @@ int __init coherency_init(void)
 
        np = of_find_matching_node(NULL, of_coherency_table);
        if (np) {
+               struct resource res;
                pr_info("Initializing Coherency fabric\n");
+               of_address_to_resource(np, 0, &res);
+               coherency_phys_base = res.start;
+               /*
+                * Ensure secondary CPUs will see the updated value,
+                * which they read before they join the coherency
+                * fabric, and therefore before they are coherent with
+                * the boot CPU cache.
+                */
+               sync_cache_w(&coherency_phys_base);
                coherency_base = of_iomap(np, 0);
                coherency_cpu_base = of_iomap(np, 1);
                set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
-               bus_register_notifier(&platform_bus_type,
-                                       &mvebu_hwcc_platform_nb);
        }
 
        return 0;
 }
+
+static int __init coherency_late_init(void)
+{
+       if (of_find_matching_node(NULL, of_coherency_table))
+               bus_register_notifier(&platform_bus_type,
+                                     &mvebu_hwcc_platform_nb);
+       return 0;
+}
+
+postcore_initcall(coherency_late_init);
index 2f428137f6fedf45672146847bb95819c32a0759..df33ad8a6c08935b9fea023c570c8881b22ecb8b 100644 (file)
 #ifndef __MACH_370_XP_COHERENCY_H
 #define __MACH_370_XP_COHERENCY_H
 
-#ifdef CONFIG_SMP
-int coherency_get_cpu_count(void);
-#endif
-
 int set_cpu_coherent(int cpu_id, int smp_group_id);
 int coherency_init(void);
 
index aa27bc2ffb6013575ff8d889b919a9b9b5369cb8..98defd5e92cdeed74c6d86b0b8c9ec755dd5f0d7 100644 (file)
@@ -15,6 +15,8 @@
 #ifndef __ARCH_MVEBU_COMMON_H
 #define __ARCH_MVEBU_COMMON_H
 
+#define ARMADA_XP_MAX_CPUS 4
+
 void mvebu_restart(char mode, const char *cmd);
 
 void armada_370_xp_init_irq(void);
index a06e0ede8c0897177566ffb22b76c7218b64d15a..7147300c8af25d20e90279632a1499f3e9dbb674 100644 (file)
 #include <linux/linkage.h>
 #include <linux/init.h>
 
-/*
- * At this stage the secondary CPUs don't have acces yet to the MMU, so
- * we have to provide physical addresses
- */
-#define ARMADA_XP_CFB_BASE          0xD0020200
-
        __CPUINIT
 
 /*
  * startup
  */
 ENTRY(armada_xp_secondary_startup)
+       /* Get coherency fabric base physical address */
+       adr     r0, 1f
+       ldr     r1, [r0]
+       ldr     r0, [r0, r1]
 
        /* Read CPU id */
        mrc     p15, 0, r1, c0, c0, 5
        and     r1, r1, #0xF
 
        /* Add CPU to coherency fabric */
-       ldr     r0, =ARMADA_XP_CFB_BASE
-
        bl      ll_set_cpu_coherent
        b       secondary_startup
 
 ENDPROC(armada_xp_secondary_startup)
+
+       .align 2
+1:
+       .long   coherency_phys_base - .
index 875ea748391ca87adfbc0756837da2bad6584be8..93f2f3ab45f1346925dc0a17db326a23e553ca1c 100644 (file)
@@ -88,8 +88,16 @@ static int __cpuinit armada_xp_boot_secondary(unsigned int cpu,
 
 static void __init armada_xp_smp_init_cpus(void)
 {
+       struct device_node *np;
        unsigned int i, ncores;
-       ncores = coherency_get_cpu_count();
+
+       np = of_find_node_by_name(NULL, "cpus");
+       if (!np)
+               panic("No 'cpus' node found\n");
+
+       ncores = of_get_child_count(np);
+       if (ncores == 0 || ncores > ARMADA_XP_MAX_CPUS)
+               panic("Invalid number of CPUs in DT\n");
 
        /* Limit possible CPUs to defconfig */
        if (ncores > nr_cpu_ids) {
index 6903d47f62515b0e1660eacc7b21ef3255867aa5..1fdb462165902a25f8f00a989829f641b920938d 100644 (file)
@@ -17,6 +17,7 @@ config ARCH_OMAP2PLUS
        select PROC_DEVICETREE if PROC_FS
        select SOC_BUS
        select SPARSE_IRQ
+       select TI_PRIV_EDMA
        select USE_OF
        help
          Systems based on OMAP2, OMAP3, OMAP4 or OMAP5
@@ -149,6 +150,14 @@ config SOC_AM33XX
        select MULTI_IRQ_HANDLER
        select COMMON_CLK
 
+config SOC_AM43XX
+       bool "TI AM43x"
+       select CPU_V7
+       select MULTI_IRQ_HANDLER
+       select ARM_GIC
+       select COMMON_CLK
+       select MACH_OMAP_GENERIC
+
 config OMAP_PACKAGE_ZAF
        bool
 
index add1d27a7d94f2e6fa2273b5e79705092672ec8c..8e8c605ebefed207b03fe67ff9275a48d52235e8 100644 (file)
@@ -22,6 +22,7 @@ obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common)
 obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common)
 obj-$(CONFIG_SOC_AM33XX) += irq.o $(hwmod-common)
 obj-$(CONFIG_SOC_OMAP5)         += prm44xx.o $(hwmod-common) $(secure-common)
+obj-$(CONFIG_SOC_AM43XX) += $(hwmod-common) $(secure-common)
 
 ifneq ($(CONFIG_SND_OMAP_SOC_MCBSP),)
 obj-y += mcbsp.o
@@ -34,10 +35,10 @@ obj-$(CONFIG_SOC_HAS_OMAP2_SDRC)    += sdrc.o
 
 smp-$(CONFIG_SMP)                      += omap-smp.o omap-headsmp.o
 smp-$(CONFIG_HOTPLUG_CPU)              += omap-hotplug.o
-omap-4-5-common                                =  omap4-common.o omap-wakeupgen.o \
-                                          sleep44xx.o
-obj-$(CONFIG_ARCH_OMAP4)               += $(omap-4-5-common) $(smp-y)
-obj-$(CONFIG_SOC_OMAP5)                        += $(omap-4-5-common) $(smp-y)
+omap-4-5-common                                =  omap4-common.o omap-wakeupgen.o
+obj-$(CONFIG_ARCH_OMAP4)               += $(omap-4-5-common) $(smp-y) sleep44xx.o
+obj-$(CONFIG_SOC_OMAP5)                        += $(omap-4-5-common) $(smp-y) sleep44xx.o
+obj-$(CONFIG_SOC_AM43XX)               += $(omap-4-5-common)
 
 plus_sec := $(call as-instr,.arch_extension sec,+sec)
 AFLAGS_omap-headsmp.o                  :=-Wa,-march=armv7-a$(plus_sec)
@@ -58,6 +59,8 @@ obj-$(CONFIG_SOC_OMAP2420)            += omap2-restart.o
 obj-$(CONFIG_SOC_OMAP2430)             += omap2-restart.o
 obj-$(CONFIG_SOC_AM33XX)               += am33xx-restart.o
 obj-$(CONFIG_ARCH_OMAP3)               += omap3-restart.o
+obj-$(CONFIG_ARCH_OMAP4)               += omap4-restart.o
+obj-$(CONFIG_SOC_OMAP5)                        += omap4-restart.o
 
 # Pin multiplexing
 obj-$(CONFIG_SOC_OMAP2420)             += mux2420.o
@@ -109,6 +112,7 @@ obj-$(CONFIG_ARCH_OMAP2)            += prm2xxx_3xxx.o prm2xxx.o cm2xxx.o
 obj-$(CONFIG_ARCH_OMAP3)               += prm2xxx_3xxx.o prm3xxx.o cm3xxx.o
 obj-$(CONFIG_ARCH_OMAP3)               += vc3xxx_data.o vp3xxx_data.o
 obj-$(CONFIG_SOC_AM33XX)               += prm33xx.o cm33xx.o
+obj-$(CONFIG_SOC_AM43XX)               += prm33xx.o cm33xx.o
 omap-prcm-4-5-common                   =  cminst44xx.o cm44xx.o prm44xx.o \
                                           prcm_mpu44xx.o prminst44xx.o \
                                           vc44xx_data.o vp44xx_data.o
@@ -124,7 +128,9 @@ obj-$(CONFIG_ARCH_OMAP3)            += voltagedomains3xxx_data.o
 obj-$(CONFIG_ARCH_OMAP4)               += $(voltagedomain-common)
 obj-$(CONFIG_ARCH_OMAP4)               += voltagedomains44xx_data.o
 obj-$(CONFIG_SOC_AM33XX)               += $(voltagedomain-common)
+obj-$(CONFIG_SOC_AM43XX)               += $(voltagedomain-common)
 obj-$(CONFIG_SOC_OMAP5)                        += $(voltagedomain-common)
+obj-$(CONFIG_SOC_OMAP5)                += voltagedomains54xx_data.o
 
 # OMAP powerdomain framework
 powerdomain-common                     += powerdomain.o powerdomain-common.o
@@ -138,7 +144,9 @@ obj-$(CONFIG_ARCH_OMAP4)            += $(powerdomain-common)
 obj-$(CONFIG_ARCH_OMAP4)               += powerdomains44xx_data.o
 obj-$(CONFIG_SOC_AM33XX)               += $(powerdomain-common)
 obj-$(CONFIG_SOC_AM33XX)               += powerdomains33xx_data.o
+obj-$(CONFIG_SOC_AM43XX)               += $(powerdomain-common)
 obj-$(CONFIG_SOC_OMAP5)                        += $(powerdomain-common)
+obj-$(CONFIG_SOC_OMAP5)                        += powerdomains54xx_data.o
 
 # PRCM clockdomain control
 clockdomain-common                     += clockdomain.o
@@ -153,7 +161,9 @@ obj-$(CONFIG_ARCH_OMAP4)            += $(clockdomain-common)
 obj-$(CONFIG_ARCH_OMAP4)               += clockdomains44xx_data.o
 obj-$(CONFIG_SOC_AM33XX)               += $(clockdomain-common)
 obj-$(CONFIG_SOC_AM33XX)               += clockdomains33xx_data.o
+obj-$(CONFIG_SOC_AM43XX)               += $(clockdomain-common)
 obj-$(CONFIG_SOC_OMAP5)                        += $(clockdomain-common)
+obj-$(CONFIG_SOC_OMAP5)                        += clockdomains54xx_data.o
 
 # Clock framework
 obj-$(CONFIG_ARCH_OMAP2)               += $(clock-common) clock2xxx.o
@@ -196,6 +206,7 @@ obj-$(CONFIG_ARCH_OMAP3)            += omap_hwmod_2xxx_3xxx_interconnect_data.o
 obj-$(CONFIG_ARCH_OMAP3)               += omap_hwmod_3xxx_data.o
 obj-$(CONFIG_SOC_AM33XX)               += omap_hwmod_33xx_data.o
 obj-$(CONFIG_ARCH_OMAP4)               += omap_hwmod_44xx_data.o
+obj-$(CONFIG_SOC_OMAP5)                        += omap_hwmod_54xx_data.o
 
 # EMU peripherals
 obj-$(CONFIG_OMAP3_EMU)                        += emu.o
index 43296c1af9ee85f13ee00326113d187a896503a7..5eef093e6738e028a878a6a2931b9912ad4f26d7 100644 (file)
@@ -21,6 +21,7 @@
 #define AM33XX_SCM_BASE                0x44E10000
 #define AM33XX_CTRL_BASE       AM33XX_SCM_BASE
 #define AM33XX_PRCM_BASE       0x44E00000
+#define AM43XX_PRCM_BASE       0x44DF0000
 #define AM33XX_TAP_BASE                (AM33XX_CTRL_BASE + 0x3FC)
 
 #endif /* __ASM_ARCH_AM33XX_H */
index 88aa6b1835c3674f4483e2df155ed9e9b0fa613f..e5fbfed69aa2bc5094b508a3219c8988d0d3dbe7 100644 (file)
@@ -185,3 +185,19 @@ DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)")
        .restart        = omap44xx_restart,
 MACHINE_END
 #endif
+
+#ifdef CONFIG_SOC_AM43XX
+static const char *am43_boards_compat[] __initdata = {
+       "ti,am43",
+       NULL,
+};
+
+DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
+       .map_io         = am33xx_map_io,
+       .init_early     = am43xx_init_early,
+       .init_irq       = omap_gic_of_init,
+       .init_machine   = omap_generic_init,
+       .init_time      = omap3_sync32k_timer_init,
+       .dt_compat      = am43_boards_compat,
+MACHINE_END
+#endif
index af3544ce4f0273b8eb8b43c22295a5ae6ced76a3..0346de56436caf26ef2ad87b9a38bdd380fefe3d 100644 (file)
@@ -862,6 +862,33 @@ static struct clk_hw_omap wdt1_fck_hw = {
 
 DEFINE_STRUCT_CLK(wdt1_fck, wdt_ck_parents, gpio_fck_ops);
 
+static const char *pwmss_clk_parents[] = {
+       "dpll_per_m2_ck",
+};
+
+static const struct clk_ops ehrpwm_tbclk_ops = {
+       .enable         = &omap2_dflt_clk_enable,
+       .disable        = &omap2_dflt_clk_disable,
+};
+
+DEFINE_CLK_OMAP_MUX_GATE(ehrpwm0_tbclk, "l4ls_clkdm",
+                        NULL, NULL, 0,
+                        AM33XX_CTRL_REGADDR(AM33XX_PWMSS_TBCLK_CLKCTRL),
+                        AM33XX_PWMSS0_TBCLKEN_SHIFT,
+                        NULL, pwmss_clk_parents, ehrpwm_tbclk_ops);
+
+DEFINE_CLK_OMAP_MUX_GATE(ehrpwm1_tbclk, "l4ls_clkdm",
+                        NULL, NULL, 0,
+                        AM33XX_CTRL_REGADDR(AM33XX_PWMSS_TBCLK_CLKCTRL),
+                        AM33XX_PWMSS1_TBCLKEN_SHIFT,
+                        NULL, pwmss_clk_parents, ehrpwm_tbclk_ops);
+
+DEFINE_CLK_OMAP_MUX_GATE(ehrpwm2_tbclk, "l4ls_clkdm",
+                        NULL, NULL, 0,
+                        AM33XX_CTRL_REGADDR(AM33XX_PWMSS_TBCLK_CLKCTRL),
+                        AM33XX_PWMSS2_TBCLKEN_SHIFT,
+                        NULL, pwmss_clk_parents, ehrpwm_tbclk_ops);
+
 /*
  * clkdev
  */
@@ -942,6 +969,9 @@ static struct omap_clk am33xx_clks[] = {
        CLK(NULL,       "clkout2_div_ck",       &clkout2_div_ck),
        CLK(NULL,       "timer_32k_ck",         &clkdiv32k_ick),
        CLK(NULL,       "timer_sys_ck",         &sys_clkin_ck),
+       CLK("48300200.ehrpwm",  "tbclk",        &ehrpwm0_tbclk),
+       CLK("48302200.ehrpwm",  "tbclk",        &ehrpwm1_tbclk),
+       CLK("48304200.ehrpwm",  "tbclk",        &ehrpwm2_tbclk),
 };
 
 
index 45cd26430d1f2298bc39b0abff53311f30fad81a..334b76745900fb397e8d3fd5419dc1dd91e0bc63 100644 (file)
@@ -3329,11 +3329,7 @@ static struct omap_clk omap36xx_am35xx_omap3430es2plus_clks[] = {
        CLK(NULL,       "cpefuse_fck",  &cpefuse_fck),
        CLK(NULL,       "ts_fck",       &ts_fck),
        CLK(NULL,       "usbtll_fck",   &usbtll_fck),
-       CLK("usbhs_omap",       "usbtll_fck",   &usbtll_fck),
-       CLK("usbhs_tll",        "usbtll_fck",   &usbtll_fck),
        CLK(NULL,       "usbtll_ick",   &usbtll_ick),
-       CLK("usbhs_omap",       "usbtll_ick",   &usbtll_ick),
-       CLK("usbhs_tll",        "usbtll_ick",   &usbtll_ick),
        CLK("omap_hsmmc.2",     "ick",  &mmchs3_ick),
        CLK(NULL,       "mmchs3_ick",   &mmchs3_ick),
        CLK(NULL,       "mmchs3_fck",   &mmchs3_fck),
@@ -3343,7 +3339,6 @@ static struct omap_clk omap36xx_am35xx_omap3430es2plus_clks[] = {
        CLK(NULL,       "usbhost_120m_fck", &usbhost_120m_fck),
        CLK(NULL,       "usbhost_48m_fck", &usbhost_48m_fck),
        CLK(NULL,       "usbhost_ick",  &usbhost_ick),
-       CLK("usbhs_omap",       "usbhost_ick",  &usbhost_ick),
 };
 
 /*
@@ -3463,12 +3458,6 @@ static struct omap_clk omap3xxx_clks[] = {
        CLK(NULL,       "utmi_p2_gfclk",        &dummy_ck),
        CLK(NULL,       "xclk60mhsp1_ck",       &dummy_ck),
        CLK(NULL,       "xclk60mhsp2_ck",       &dummy_ck),
-       CLK(NULL,       "usb_host_hs_utmi_p1_clk",      &dummy_ck),
-       CLK(NULL,       "usb_host_hs_utmi_p2_clk",      &dummy_ck),
-       CLK("usbhs_omap",       "usb_tll_hs_usb_ch0_clk",       &dummy_ck),
-       CLK("usbhs_omap",       "usb_tll_hs_usb_ch1_clk",       &dummy_ck),
-       CLK("usbhs_tll",        "usb_tll_hs_usb_ch0_clk",       &dummy_ck),
-       CLK("usbhs_tll",        "usb_tll_hs_usb_ch1_clk",       &dummy_ck),
        CLK(NULL,       "init_60m_fclk",        &dummy_ck),
        CLK(NULL,       "gpt1_fck",     &gpt1_fck),
        CLK(NULL,       "aes2_ick",     &aes2_ick),
index 2da37656a693e576910169fb5d722b7e9ea0b312..daeecf1b89fa837c7672c3d0de192c9f4fb8d552 100644 (file)
@@ -216,6 +216,7 @@ extern void __init omap243x_clockdomains_init(void);
 extern void __init omap3xxx_clockdomains_init(void);
 extern void __init am33xx_clockdomains_init(void);
 extern void __init omap44xx_clockdomains_init(void);
+extern void __init omap54xx_clockdomains_init(void);
 
 extern void clkdm_add_autodeps(struct clockdomain *clkdm);
 extern void clkdm_del_autodeps(struct clockdomain *clkdm);
diff --git a/arch/arm/mach-omap2/clockdomains54xx_data.c b/arch/arm/mach-omap2/clockdomains54xx_data.c
new file mode 100644 (file)
index 0000000..1a3c69d
--- /dev/null
@@ -0,0 +1,464 @@
+/*
+ * OMAP54XX Clock domains framework
+ *
+ * Copyright (C) 2013 Texas Instruments, Inc.
+ *
+ * Abhijit Pagare (abhijitpagare@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ * Paul Walmsley (paul@pwsan.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/io.h>
+
+#include "clockdomain.h"
+#include "cm1_54xx.h"
+#include "cm2_54xx.h"
+
+#include "cm-regbits-54xx.h"
+#include "prm54xx.h"
+#include "prcm44xx.h"
+#include "prcm_mpu54xx.h"
+
+/* Static Dependencies for OMAP4 Clock Domains */
+
+static struct clkdm_dep c2c_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3init_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l3main2_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep cam_wkup_sleep_deps[] = {
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep dma_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "dss_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "ipu_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3init_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { .clkdm_name = "l4sec_clkdm" },
+       { .clkdm_name = "wkupaon_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep dsp_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3init_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l3main2_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { .clkdm_name = "wkupaon_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep dss_wkup_sleep_deps[] = {
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3main2_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep gpu_wkup_sleep_deps[] = {
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep ipu_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "dsp_clkdm" },
+       { .clkdm_name = "dss_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "gpu_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3init_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l3main2_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { .clkdm_name = "l4sec_clkdm" },
+       { .clkdm_name = "wkupaon_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep iva_wkup_sleep_deps[] = {
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep l3init_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { .clkdm_name = "l4sec_clkdm" },
+       { .clkdm_name = "wkupaon_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep l4sec_wkup_sleep_deps[] = {
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep mipiext_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3init_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l3main2_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { NULL },
+};
+
+static struct clkdm_dep mpu_wkup_sleep_deps[] = {
+       { .clkdm_name = "abe_clkdm" },
+       { .clkdm_name = "dsp_clkdm" },
+       { .clkdm_name = "dss_clkdm" },
+       { .clkdm_name = "emif_clkdm" },
+       { .clkdm_name = "gpu_clkdm" },
+       { .clkdm_name = "ipu_clkdm" },
+       { .clkdm_name = "iva_clkdm" },
+       { .clkdm_name = "l3init_clkdm" },
+       { .clkdm_name = "l3main1_clkdm" },
+       { .clkdm_name = "l3main2_clkdm" },
+       { .clkdm_name = "l4cfg_clkdm" },
+       { .clkdm_name = "l4per_clkdm" },
+       { .clkdm_name = "l4sec_clkdm" },
+       { .clkdm_name = "wkupaon_clkdm" },
+       { NULL },
+};
+
+static struct clockdomain l4sec_54xx_clkdm = {
+       .name             = "l4sec_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_L4SEC_CDOFFS,
+       .dep_bit          = OMAP54XX_L4SEC_STATDEP_SHIFT,
+       .wkdep_srcs       = l4sec_wkup_sleep_deps,
+       .sleepdep_srcs    = l4sec_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain iva_54xx_clkdm = {
+       .name             = "iva_clkdm",
+       .pwrdm            = { .name = "iva_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_IVA_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_IVA_IVA_CDOFFS,
+       .dep_bit          = OMAP54XX_IVA_STATDEP_SHIFT,
+       .wkdep_srcs       = iva_wkup_sleep_deps,
+       .sleepdep_srcs    = iva_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain mipiext_54xx_clkdm = {
+       .name             = "mipiext_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_MIPIEXT_CDOFFS,
+       .wkdep_srcs       = mipiext_wkup_sleep_deps,
+       .sleepdep_srcs    = mipiext_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain l3main2_54xx_clkdm = {
+       .name             = "l3main2_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_L3MAIN2_CDOFFS,
+       .dep_bit          = OMAP54XX_L3MAIN2_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain l3main1_54xx_clkdm = {
+       .name             = "l3main1_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_L3MAIN1_CDOFFS,
+       .dep_bit          = OMAP54XX_L3MAIN1_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain custefuse_54xx_clkdm = {
+       .name             = "custefuse_clkdm",
+       .pwrdm            = { .name = "custefuse_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CUSTEFUSE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CUSTEFUSE_CUSTEFUSE_CDOFFS,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain ipu_54xx_clkdm = {
+       .name             = "ipu_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_IPU_CDOFFS,
+       .dep_bit          = OMAP54XX_IPU_STATDEP_SHIFT,
+       .wkdep_srcs       = ipu_wkup_sleep_deps,
+       .sleepdep_srcs    = ipu_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain l4cfg_54xx_clkdm = {
+       .name             = "l4cfg_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_L4CFG_CDOFFS,
+       .dep_bit          = OMAP54XX_L4CFG_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain abe_54xx_clkdm = {
+       .name             = "abe_clkdm",
+       .pwrdm            = { .name = "abe_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_AON_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_AON_ABE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_AON_ABE_ABE_CDOFFS,
+       .dep_bit          = OMAP54XX_ABE_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain dss_54xx_clkdm = {
+       .name             = "dss_clkdm",
+       .pwrdm            = { .name = "dss_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_DSS_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_DSS_DSS_CDOFFS,
+       .dep_bit          = OMAP54XX_DSS_STATDEP_SHIFT,
+       .wkdep_srcs       = dss_wkup_sleep_deps,
+       .sleepdep_srcs    = dss_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain dsp_54xx_clkdm = {
+       .name             = "dsp_clkdm",
+       .pwrdm            = { .name = "dsp_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_AON_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_AON_DSP_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_AON_DSP_DSP_CDOFFS,
+       .dep_bit          = OMAP54XX_DSP_STATDEP_SHIFT,
+       .wkdep_srcs       = dsp_wkup_sleep_deps,
+       .sleepdep_srcs    = dsp_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain c2c_54xx_clkdm = {
+       .name             = "c2c_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_C2C_CDOFFS,
+       .wkdep_srcs       = c2c_wkup_sleep_deps,
+       .sleepdep_srcs    = c2c_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain l4per_54xx_clkdm = {
+       .name             = "l4per_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_L4PER_CDOFFS,
+       .dep_bit          = OMAP54XX_L4PER_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain gpu_54xx_clkdm = {
+       .name             = "gpu_clkdm",
+       .pwrdm            = { .name = "gpu_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_GPU_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_GPU_GPU_CDOFFS,
+       .dep_bit          = OMAP54XX_GPU_STATDEP_SHIFT,
+       .wkdep_srcs       = gpu_wkup_sleep_deps,
+       .sleepdep_srcs    = gpu_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain wkupaon_54xx_clkdm = {
+       .name             = "wkupaon_clkdm",
+       .pwrdm            = { .name = "wkupaon_pwrdm" },
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .cm_inst          = OMAP54XX_PRM_WKUPAON_CM_INST,
+       .clkdm_offs       = OMAP54XX_PRM_WKUPAON_CM_WKUPAON_CDOFFS,
+       .dep_bit          = OMAP54XX_WKUPAON_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain mpu0_54xx_clkdm = {
+       .name             = "mpu0_clkdm",
+       .pwrdm            = { .name = "cpu0_pwrdm" },
+       .prcm_partition   = OMAP54XX_PRCM_MPU_PARTITION,
+       .cm_inst          = OMAP54XX_PRCM_MPU_CM_C0_INST,
+       .clkdm_offs       = OMAP54XX_PRCM_MPU_CM_C0_CPU0_CDOFFS,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain mpu1_54xx_clkdm = {
+       .name             = "mpu1_clkdm",
+       .pwrdm            = { .name = "cpu1_pwrdm" },
+       .prcm_partition   = OMAP54XX_PRCM_MPU_PARTITION,
+       .cm_inst          = OMAP54XX_PRCM_MPU_CM_C1_INST,
+       .clkdm_offs       = OMAP54XX_PRCM_MPU_CM_C1_CPU1_CDOFFS,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain coreaon_54xx_clkdm = {
+       .name             = "coreaon_clkdm",
+       .pwrdm            = { .name = "coreaon_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_COREAON_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_COREAON_COREAON_CDOFFS,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain mpu_54xx_clkdm = {
+       .name             = "mpu_clkdm",
+       .pwrdm            = { .name = "mpu_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_AON_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_AON_MPU_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_AON_MPU_MPU_CDOFFS,
+       .wkdep_srcs       = mpu_wkup_sleep_deps,
+       .sleepdep_srcs    = mpu_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain l3init_54xx_clkdm = {
+       .name             = "l3init_clkdm",
+       .pwrdm            = { .name = "l3init_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_L3INIT_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_L3INIT_L3INIT_CDOFFS,
+       .dep_bit          = OMAP54XX_L3INIT_STATDEP_SHIFT,
+       .wkdep_srcs       = l3init_wkup_sleep_deps,
+       .sleepdep_srcs    = l3init_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+static struct clockdomain dma_54xx_clkdm = {
+       .name             = "dma_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_DMA_CDOFFS,
+       .wkdep_srcs       = dma_wkup_sleep_deps,
+       .sleepdep_srcs    = dma_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain l3instr_54xx_clkdm = {
+       .name             = "l3instr_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_L3INSTR_CDOFFS,
+};
+
+static struct clockdomain emif_54xx_clkdm = {
+       .name             = "emif_clkdm",
+       .pwrdm            = { .name = "core_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CORE_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CORE_EMIF_CDOFFS,
+       .dep_bit          = OMAP54XX_EMIF_STATDEP_SHIFT,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain emu_54xx_clkdm = {
+       .name             = "emu_clkdm",
+       .pwrdm            = { .name = "emu_pwrdm" },
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .cm_inst          = OMAP54XX_PRM_EMU_CM_INST,
+       .clkdm_offs       = OMAP54XX_PRM_EMU_CM_EMU_CDOFFS,
+       .flags            = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
+};
+
+static struct clockdomain cam_54xx_clkdm = {
+       .name             = "cam_clkdm",
+       .pwrdm            = { .name = "cam_pwrdm" },
+       .prcm_partition   = OMAP54XX_CM_CORE_PARTITION,
+       .cm_inst          = OMAP54XX_CM_CORE_CAM_INST,
+       .clkdm_offs       = OMAP54XX_CM_CORE_CAM_CAM_CDOFFS,
+       .wkdep_srcs       = cam_wkup_sleep_deps,
+       .sleepdep_srcs    = cam_wkup_sleep_deps,
+       .flags            = CLKDM_CAN_HWSUP_SWSUP,
+};
+
+/* As clockdomains are added or removed above, this list must also be changed */
+static struct clockdomain *clockdomains_omap54xx[] __initdata = {
+       &l4sec_54xx_clkdm,
+       &iva_54xx_clkdm,
+       &mipiext_54xx_clkdm,
+       &l3main2_54xx_clkdm,
+       &l3main1_54xx_clkdm,
+       &custefuse_54xx_clkdm,
+       &ipu_54xx_clkdm,
+       &l4cfg_54xx_clkdm,
+       &abe_54xx_clkdm,
+       &dss_54xx_clkdm,
+       &dsp_54xx_clkdm,
+       &c2c_54xx_clkdm,
+       &l4per_54xx_clkdm,
+       &gpu_54xx_clkdm,
+       &wkupaon_54xx_clkdm,
+       &mpu0_54xx_clkdm,
+       &mpu1_54xx_clkdm,
+       &coreaon_54xx_clkdm,
+       &mpu_54xx_clkdm,
+       &l3init_54xx_clkdm,
+       &dma_54xx_clkdm,
+       &l3instr_54xx_clkdm,
+       &emif_54xx_clkdm,
+       &emu_54xx_clkdm,
+       &cam_54xx_clkdm,
+       NULL
+};
+
+void __init omap54xx_clockdomains_init(void)
+{
+       clkdm_register_platform_funcs(&omap4_clkdm_operations);
+       clkdm_register_clkdms(clockdomains_omap54xx);
+       clkdm_complete_init();
+}
diff --git a/arch/arm/mach-omap2/cm-regbits-54xx.h b/arch/arm/mach-omap2/cm-regbits-54xx.h
new file mode 100644 (file)
index 0000000..e83b8e3
--- /dev/null
@@ -0,0 +1,1737 @@
+/*
+ * OMAP54xx Clock Management register bits
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_CM_REGBITS_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_CM_REGBITS_54XX_H
+
+/* Used by CM_DSP_DYNAMICDEP, CM_L3MAIN1_DYNAMICDEP, CM_MPU_DYNAMICDEP */
+#define OMAP54XX_ABE_DYNDEP_SHIFT                                      3
+#define OMAP54XX_ABE_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_ABE_DYNDEP_MASK                                       (1 << 3)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_DMA_STATICDEP, CM_DSP_STATICDEP,
+ * CM_IPU_STATICDEP, CM_L3INIT_STATICDEP, CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_ABE_STATDEP_SHIFT                                     3
+#define OMAP54XX_ABE_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_ABE_STATDEP_MASK                                      (1 << 3)
+
+/*
+ * Used by CM_AUTOIDLE_DPLL_ABE, CM_AUTOIDLE_DPLL_CORE, CM_AUTOIDLE_DPLL_IVA,
+ * CM_AUTOIDLE_DPLL_MPU, CM_AUTOIDLE_DPLL_PER, CM_AUTOIDLE_DPLL_UNIPRO1,
+ * CM_AUTOIDLE_DPLL_UNIPRO2, CM_AUTOIDLE_DPLL_USB
+ */
+#define OMAP54XX_AUTO_DPLL_MODE_SHIFT                                  0
+#define OMAP54XX_AUTO_DPLL_MODE_WIDTH                                  0x3
+#define OMAP54XX_AUTO_DPLL_MODE_MASK                                   (0x7 << 0)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_C2C_DYNDEP_SHIFT                                      18
+#define OMAP54XX_C2C_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_C2C_DYNDEP_MASK                                       (1 << 18)
+
+/* Used by CM_MPU_STATICDEP */
+#define OMAP54XX_C2C_STATDEP_SHIFT                                     18
+#define OMAP54XX_C2C_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_C2C_STATDEP_MASK                                      (1 << 18)
+
+/* Used by CM_IPU_DYNAMICDEP, CM_L3MAIN2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_CAM_DYNDEP_SHIFT                                      9
+#define OMAP54XX_CAM_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_CAM_DYNDEP_MASK                                       (1 << 9)
+
+/*
+ * Used by CM_DMA_STATICDEP, CM_DSP_STATICDEP, CM_IPU_STATICDEP,
+ * CM_MPU_STATICDEP
+ */
+#define OMAP54XX_CAM_STATDEP_SHIFT                                     9
+#define OMAP54XX_CAM_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_CAM_STATDEP_MASK                                      (1 << 9)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_ABE_24M_GFCLK_SHIFT                       13
+#define OMAP54XX_CLKACTIVITY_ABE_24M_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_ABE_24M_GFCLK_MASK                                (1 << 13)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_ABE_32K_CLK_SHIFT                         12
+#define OMAP54XX_CLKACTIVITY_ABE_32K_CLK_WIDTH                         0x1
+#define OMAP54XX_CLKACTIVITY_ABE_32K_CLK_MASK                          (1 << 12)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_ABE_GICLK_SHIFT                           9
+#define OMAP54XX_CLKACTIVITY_ABE_GICLK_WIDTH                           0x1
+#define OMAP54XX_CLKACTIVITY_ABE_GICLK_MASK                            (1 << 9)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_ABE_LP_CLK_SHIFT                          9
+#define OMAP54XX_CLKACTIVITY_ABE_LP_CLK_WIDTH                          0x1
+#define OMAP54XX_CLKACTIVITY_ABE_LP_CLK_MASK                           (1 << 9)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_ABE_SYS_CLK_SHIFT                         11
+#define OMAP54XX_CLKACTIVITY_ABE_SYS_CLK_WIDTH                         0x1
+#define OMAP54XX_CLKACTIVITY_ABE_SYS_CLK_MASK                          (1 << 11)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_ABE_X2_CLK_SHIFT                          8
+#define OMAP54XX_CLKACTIVITY_ABE_X2_CLK_WIDTH                          0x1
+#define OMAP54XX_CLKACTIVITY_ABE_X2_CLK_MASK                           (1 << 8)
+
+/* Used by CM_DSS_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_BB2D_GFCLK_SHIFT                          13
+#define OMAP54XX_CLKACTIVITY_BB2D_GFCLK_WIDTH                          0x1
+#define OMAP54XX_CLKACTIVITY_BB2D_GFCLK_MASK                           (1 << 13)
+
+/* Used by CM_C2C_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_C2C_GFCLK_SHIFT                           9
+#define OMAP54XX_CLKACTIVITY_C2C_GFCLK_WIDTH                           0x1
+#define OMAP54XX_CLKACTIVITY_C2C_GFCLK_MASK                            (1 << 9)
+
+/* Used by CM_C2C_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_C2C_GICLK_SHIFT                           10
+#define OMAP54XX_CLKACTIVITY_C2C_GICLK_WIDTH                           0x1
+#define OMAP54XX_CLKACTIVITY_C2C_GICLK_MASK                            (1 << 10)
+
+/* Used by CM_C2C_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_C2C_L4_GICLK_SHIFT                                8
+#define OMAP54XX_CLKACTIVITY_C2C_L4_GICLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_C2C_L4_GICLK_MASK                         (1 << 8)
+
+/* Used by CM_CAM_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_CAM_BOOST_GCLK_SHIFT                      11
+#define OMAP54XX_CLKACTIVITY_CAM_BOOST_GCLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_CAM_BOOST_GCLK_MASK                       (1 << 11)
+
+/* Used by CM_CAM_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_CAM_GCLK_SHIFT                            8
+#define OMAP54XX_CLKACTIVITY_CAM_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_CAM_GCLK_MASK                             (1 << 8)
+
+/* Used by CM_CAM_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_CAM_L3_GICLK_SHIFT                                12
+#define OMAP54XX_CLKACTIVITY_CAM_L3_GICLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_CAM_L3_GICLK_MASK                         (1 << 12)
+
+/* Used by CM_COREAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_COREAON_32K_GFCLK_SHIFT                   12
+#define OMAP54XX_CLKACTIVITY_COREAON_32K_GFCLK_WIDTH                   0x1
+#define OMAP54XX_CLKACTIVITY_COREAON_32K_GFCLK_MASK                    (1 << 12)
+
+/* Used by CM_COREAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_COREAON_IO_SRCOMP_GFCLK_SHIFT             14
+#define OMAP54XX_CLKACTIVITY_COREAON_IO_SRCOMP_GFCLK_WIDTH             0x1
+#define OMAP54XX_CLKACTIVITY_COREAON_IO_SRCOMP_GFCLK_MASK              (1 << 14)
+
+/* Used by CM_COREAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_COREAON_L4_GICLK_SHIFT                    8
+#define OMAP54XX_CLKACTIVITY_COREAON_L4_GICLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_COREAON_L4_GICLK_MASK                     (1 << 8)
+
+/* Used by CM_CAM_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_CSI_PHY_GFCLK_SHIFT                       9
+#define OMAP54XX_CLKACTIVITY_CSI_PHY_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_CSI_PHY_GFCLK_MASK                                (1 << 9)
+
+/* Used by CM_CUSTEFUSE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_CUSTEFUSE_L4_GICLK_SHIFT                  8
+#define OMAP54XX_CLKACTIVITY_CUSTEFUSE_L4_GICLK_WIDTH                  0x1
+#define OMAP54XX_CLKACTIVITY_CUSTEFUSE_L4_GICLK_MASK                   (1 << 8)
+
+/* Used by CM_CUSTEFUSE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_CUSTEFUSE_SYS_GFCLK_SHIFT                 9
+#define OMAP54XX_CLKACTIVITY_CUSTEFUSE_SYS_GFCLK_WIDTH                 0x1
+#define OMAP54XX_CLKACTIVITY_CUSTEFUSE_SYS_GFCLK_MASK                  (1 << 9)
+
+/* Used by CM_EMIF_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_DLL_GCLK_SHIFT                            9
+#define OMAP54XX_CLKACTIVITY_DLL_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_DLL_GCLK_MASK                             (1 << 9)
+
+/* Used by CM_DMA_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_DMA_L3_GICLK_SHIFT                                8
+#define OMAP54XX_CLKACTIVITY_DMA_L3_GICLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_DMA_L3_GICLK_MASK                         (1 << 8)
+
+/* Used by CM_DSP_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_DSP_GCLK_SHIFT                            8
+#define OMAP54XX_CLKACTIVITY_DSP_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_DSP_GCLK_MASK                             (1 << 8)
+
+/* Used by CM_DSS_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_DSS_GFCLK_SHIFT                           9
+#define OMAP54XX_CLKACTIVITY_DSS_GFCLK_WIDTH                           0x1
+#define OMAP54XX_CLKACTIVITY_DSS_GFCLK_MASK                            (1 << 9)
+
+/* Used by CM_DSS_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_DSS_L3_GICLK_SHIFT                                8
+#define OMAP54XX_CLKACTIVITY_DSS_L3_GICLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_DSS_L3_GICLK_MASK                         (1 << 8)
+
+/* Used by CM_DSS_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_DSS_SYS_GFCLK_SHIFT                       10
+#define OMAP54XX_CLKACTIVITY_DSS_SYS_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_DSS_SYS_GFCLK_MASK                                (1 << 10)
+
+/* Used by CM_EMIF_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_EMIF_L3_GICLK_SHIFT                       8
+#define OMAP54XX_CLKACTIVITY_EMIF_L3_GICLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_EMIF_L3_GICLK_MASK                                (1 << 8)
+
+/* Used by CM_EMIF_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_EMIF_LL_GCLK_SHIFT                                11
+#define OMAP54XX_CLKACTIVITY_EMIF_LL_GCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_EMIF_LL_GCLK_MASK                         (1 << 11)
+
+/* Used by CM_EMIF_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_EMIF_PHY_GCLK_SHIFT                       10
+#define OMAP54XX_CLKACTIVITY_EMIF_PHY_GCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_EMIF_PHY_GCLK_MASK                                (1 << 10)
+
+/* Used by CM_EMU_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_EMU_SYS_GCLK_SHIFT                                8
+#define OMAP54XX_CLKACTIVITY_EMU_SYS_GCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_EMU_SYS_GCLK_MASK                         (1 << 8)
+
+/* Used by CM_CAM_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_FDIF_GCLK_SHIFT                           10
+#define OMAP54XX_CLKACTIVITY_FDIF_GCLK_WIDTH                           0x1
+#define OMAP54XX_CLKACTIVITY_FDIF_GCLK_MASK                            (1 << 10)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_FUNC_24M_GFCLK_SHIFT                      10
+#define OMAP54XX_CLKACTIVITY_FUNC_24M_GFCLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_FUNC_24M_GFCLK_MASK                       (1 << 10)
+
+/* Used by CM_GPU_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_GPU_CORE_GCLK_SHIFT                       9
+#define OMAP54XX_CLKACTIVITY_GPU_CORE_GCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_GPU_CORE_GCLK_MASK                                (1 << 9)
+
+/* Used by CM_GPU_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_GPU_HYD_GCLK_SHIFT                                10
+#define OMAP54XX_CLKACTIVITY_GPU_HYD_GCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_GPU_HYD_GCLK_MASK                         (1 << 10)
+
+/* Used by CM_GPU_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_GPU_SYS_GCLK_SHIFT                                8
+#define OMAP54XX_CLKACTIVITY_GPU_SYS_GCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_GPU_SYS_GCLK_MASK                         (1 << 8)
+
+/* Used by CM_DSS_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HDMI_CEC_GFCLK_SHIFT                      12
+#define OMAP54XX_CLKACTIVITY_HDMI_CEC_GFCLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_HDMI_CEC_GFCLK_MASK                       (1 << 12)
+
+/* Used by CM_DSS_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HDMI_PHY_GFCLK_SHIFT                      11
+#define OMAP54XX_CLKACTIVITY_HDMI_PHY_GFCLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_HDMI_PHY_GFCLK_MASK                       (1 << 11)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSIC_P1_480M_GFCLK_SHIFT                  20
+#define OMAP54XX_CLKACTIVITY_HSIC_P1_480M_GFCLK_WIDTH                  0x1
+#define OMAP54XX_CLKACTIVITY_HSIC_P1_480M_GFCLK_MASK                   (1 << 20)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSIC_P1_GFCLK_SHIFT                       26
+#define OMAP54XX_CLKACTIVITY_HSIC_P1_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_HSIC_P1_GFCLK_MASK                                (1 << 26)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSIC_P2_480M_GFCLK_SHIFT                  21
+#define OMAP54XX_CLKACTIVITY_HSIC_P2_480M_GFCLK_WIDTH                  0x1
+#define OMAP54XX_CLKACTIVITY_HSIC_P2_480M_GFCLK_MASK                   (1 << 21)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSIC_P2_GFCLK_SHIFT                       27
+#define OMAP54XX_CLKACTIVITY_HSIC_P2_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_HSIC_P2_GFCLK_MASK                                (1 << 27)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSIC_P3_480M_GFCLK_SHIFT                  6
+#define OMAP54XX_CLKACTIVITY_HSIC_P3_480M_GFCLK_WIDTH                  0x1
+#define OMAP54XX_CLKACTIVITY_HSIC_P3_480M_GFCLK_MASK                   (1 << 6)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSIC_P3_GFCLK_SHIFT                       7
+#define OMAP54XX_CLKACTIVITY_HSIC_P3_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_HSIC_P3_GFCLK_MASK                                (1 << 7)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_HSI_GFCLK_SHIFT                           16
+#define OMAP54XX_CLKACTIVITY_HSI_GFCLK_WIDTH                           0x1
+#define OMAP54XX_CLKACTIVITY_HSI_GFCLK_MASK                            (1 << 16)
+
+/* Used by CM_IPU_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_IPU_GCLK_SHIFT                            8
+#define OMAP54XX_CLKACTIVITY_IPU_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_IPU_GCLK_MASK                             (1 << 8)
+
+/* Used by CM_IVA_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_IVA_GCLK_SHIFT                            8
+#define OMAP54XX_CLKACTIVITY_IVA_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_IVA_GCLK_MASK                             (1 << 8)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INIT_48M_GFCLK_SHIFT                    12
+#define OMAP54XX_CLKACTIVITY_L3INIT_48M_GFCLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_L3INIT_48M_GFCLK_MASK                     (1 << 12)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INIT_60M_P1_GFCLK_SHIFT                 28
+#define OMAP54XX_CLKACTIVITY_L3INIT_60M_P1_GFCLK_WIDTH                 0x1
+#define OMAP54XX_CLKACTIVITY_L3INIT_60M_P1_GFCLK_MASK                  (1 << 28)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INIT_60M_P2_GFCLK_SHIFT                 29
+#define OMAP54XX_CLKACTIVITY_L3INIT_60M_P2_GFCLK_WIDTH                 0x1
+#define OMAP54XX_CLKACTIVITY_L3INIT_60M_P2_GFCLK_MASK                  (1 << 29)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INIT_L3_GICLK_SHIFT                     8
+#define OMAP54XX_CLKACTIVITY_L3INIT_L3_GICLK_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_L3INIT_L3_GICLK_MASK                      (1 << 8)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INIT_L4_GICLK_SHIFT                     9
+#define OMAP54XX_CLKACTIVITY_L3INIT_L4_GICLK_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_L3INIT_L4_GICLK_MASK                      (1 << 9)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INIT_USB_OTG_SS_LFPS_TX_GFCLK_SHIFT     11
+#define OMAP54XX_CLKACTIVITY_L3INIT_USB_OTG_SS_LFPS_TX_GFCLK_WIDTH     0x1
+#define OMAP54XX_CLKACTIVITY_L3INIT_USB_OTG_SS_LFPS_TX_GFCLK_MASK      (1 << 11)
+
+/* Used by CM_L3INSTR_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INSTR_DLL_AGING_GCLK_SHIFT              9
+#define OMAP54XX_CLKACTIVITY_L3INSTR_DLL_AGING_GCLK_WIDTH              0x1
+#define OMAP54XX_CLKACTIVITY_L3INSTR_DLL_AGING_GCLK_MASK               (1 << 9)
+
+/* Used by CM_L3INSTR_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INSTR_L3_GICLK_SHIFT                    8
+#define OMAP54XX_CLKACTIVITY_L3INSTR_L3_GICLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_L3INSTR_L3_GICLK_MASK                     (1 << 8)
+
+/* Used by CM_L3INSTR_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3INSTR_TS_GCLK_SHIFT                     10
+#define OMAP54XX_CLKACTIVITY_L3INSTR_TS_GCLK_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_L3INSTR_TS_GCLK_MASK                      (1 << 10)
+
+/* Used by CM_L3MAIN1_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3MAIN1_L3_GICLK_SHIFT                    8
+#define OMAP54XX_CLKACTIVITY_L3MAIN1_L3_GICLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_L3MAIN1_L3_GICLK_MASK                     (1 << 8)
+
+/* Used by CM_L3MAIN2_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L3MAIN2_L3_GICLK_SHIFT                    8
+#define OMAP54XX_CLKACTIVITY_L3MAIN2_L3_GICLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_L3MAIN2_L3_GICLK_MASK                     (1 << 8)
+
+/* Used by CM_L4CFG_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L4CFG_L4_GICLK_SHIFT                      8
+#define OMAP54XX_CLKACTIVITY_L4CFG_L4_GICLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_L4CFG_L4_GICLK_MASK                       (1 << 8)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L4PER_L4_GICLK_SHIFT                      8
+#define OMAP54XX_CLKACTIVITY_L4PER_L4_GICLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_L4PER_L4_GICLK_MASK                       (1 << 8)
+
+/* Used by CM_L4SEC_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L4SEC_L3_GICLK_SHIFT                      8
+#define OMAP54XX_CLKACTIVITY_L4SEC_L3_GICLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_L4SEC_L3_GICLK_MASK                       (1 << 8)
+
+/* Used by CM_L4SEC_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_L4SEC_L4_GICLK_SHIFT                      9
+#define OMAP54XX_CLKACTIVITY_L4SEC_L4_GICLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_L4SEC_L4_GICLK_MASK                       (1 << 9)
+
+/* Used by CM_MIPIEXT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_MIPIEXT_L3_GICLK_SHIFT                    8
+#define OMAP54XX_CLKACTIVITY_MIPIEXT_L3_GICLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_MIPIEXT_L3_GICLK_MASK                     (1 << 8)
+
+/* Used by CM_MIPIEXT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_MIPIEXT_PHY_REF_GFCLK_SHIFT               11
+#define OMAP54XX_CLKACTIVITY_MIPIEXT_PHY_REF_GFCLK_WIDTH               0x1
+#define OMAP54XX_CLKACTIVITY_MIPIEXT_PHY_REF_GFCLK_MASK                        (1 << 11)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_MMC1_32K_GFCLK_SHIFT                      2
+#define OMAP54XX_CLKACTIVITY_MMC1_32K_GFCLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_MMC1_32K_GFCLK_MASK                       (1 << 2)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_MMC1_GFCLK_SHIFT                          17
+#define OMAP54XX_CLKACTIVITY_MMC1_GFCLK_WIDTH                          0x1
+#define OMAP54XX_CLKACTIVITY_MMC1_GFCLK_MASK                           (1 << 17)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_MMC2_GFCLK_SHIFT                          18
+#define OMAP54XX_CLKACTIVITY_MMC2_GFCLK_WIDTH                          0x1
+#define OMAP54XX_CLKACTIVITY_MMC2_GFCLK_MASK                           (1 << 18)
+
+/* Used by CM_MPU_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_MPU_GCLK_SHIFT                            8
+#define OMAP54XX_CLKACTIVITY_MPU_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_MPU_GCLK_MASK                             (1 << 8)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PAD_CLKS_SHIFT                            14
+#define OMAP54XX_CLKACTIVITY_PAD_CLKS_WIDTH                            0x1
+#define OMAP54XX_CLKACTIVITY_PAD_CLKS_MASK                             (1 << 14)
+
+/* Used by CM_ABE_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PAD_SLIMBUS1_CLK_SHIFT                    15
+#define OMAP54XX_CLKACTIVITY_PAD_SLIMBUS1_CLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_PAD_SLIMBUS1_CLK_MASK                     (1 << 15)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PAD_XCLK60MHSP1_SHIFT                     3
+#define OMAP54XX_CLKACTIVITY_PAD_XCLK60MHSP1_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_PAD_XCLK60MHSP1_MASK                      (1 << 3)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PAD_XCLK60MHSP2_SHIFT                     4
+#define OMAP54XX_CLKACTIVITY_PAD_XCLK60MHSP2_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_PAD_XCLK60MHSP2_MASK                      (1 << 4)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PER_12M_GFCLK_SHIFT                       15
+#define OMAP54XX_CLKACTIVITY_PER_12M_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_PER_12M_GFCLK_MASK                                (1 << 15)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PER_32K_GFCLK_SHIFT                       17
+#define OMAP54XX_CLKACTIVITY_PER_32K_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_PER_32K_GFCLK_MASK                                (1 << 17)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PER_48M_GFCLK_SHIFT                       18
+#define OMAP54XX_CLKACTIVITY_PER_48M_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_PER_48M_GFCLK_MASK                                (1 << 18)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_PER_96M_GFCLK_SHIFT                       19
+#define OMAP54XX_CLKACTIVITY_PER_96M_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_PER_96M_GFCLK_MASK                                (1 << 19)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SATA_REF_GFCLK_SHIFT                      19
+#define OMAP54XX_CLKACTIVITY_SATA_REF_GFCLK_WIDTH                      0x1
+#define OMAP54XX_CLKACTIVITY_SATA_REF_GFCLK_MASK                       (1 << 19)
+
+/* Used by CM_COREAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SR_CORE_SYS_GFCLK_SHIFT                   11
+#define OMAP54XX_CLKACTIVITY_SR_CORE_SYS_GFCLK_WIDTH                   0x1
+#define OMAP54XX_CLKACTIVITY_SR_CORE_SYS_GFCLK_MASK                    (1 << 11)
+
+/* Used by CM_COREAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SR_MM_SYS_GFCLK_SHIFT                     10
+#define OMAP54XX_CLKACTIVITY_SR_MM_SYS_GFCLK_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_SR_MM_SYS_GFCLK_MASK                      (1 << 10)
+
+/* Used by CM_COREAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SR_MPU_SYS_GFCLK_SHIFT                    9
+#define OMAP54XX_CLKACTIVITY_SR_MPU_SYS_GFCLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_SR_MPU_SYS_GFCLK_MASK                     (1 << 9)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_SHIFT                             8
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_WIDTH                             0x1
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_MASK                              (1 << 8)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_ALL_SHIFT                         15
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_ALL_WIDTH                         0x1
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_ALL_MASK                          (1 << 15)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_FUNC_SHIFT                                14
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_FUNC_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_SYS_CLK_FUNC_MASK                         (1 << 14)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TIMER10_GFCLK_SHIFT                       9
+#define OMAP54XX_CLKACTIVITY_TIMER10_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_TIMER10_GFCLK_MASK                                (1 << 9)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TIMER11_GFCLK_SHIFT                       10
+#define OMAP54XX_CLKACTIVITY_TIMER11_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_TIMER11_GFCLK_MASK                                (1 << 10)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TIMER2_GFCLK_SHIFT                                11
+#define OMAP54XX_CLKACTIVITY_TIMER2_GFCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_TIMER2_GFCLK_MASK                         (1 << 11)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TIMER3_GFCLK_SHIFT                                12
+#define OMAP54XX_CLKACTIVITY_TIMER3_GFCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_TIMER3_GFCLK_MASK                         (1 << 12)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TIMER4_GFCLK_SHIFT                                13
+#define OMAP54XX_CLKACTIVITY_TIMER4_GFCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_TIMER4_GFCLK_MASK                         (1 << 13)
+
+/* Used by CM_L4PER_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TIMER9_GFCLK_SHIFT                                14
+#define OMAP54XX_CLKACTIVITY_TIMER9_GFCLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_TIMER9_GFCLK_MASK                         (1 << 14)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TLL_CH0_GFCLK_SHIFT                       22
+#define OMAP54XX_CLKACTIVITY_TLL_CH0_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_TLL_CH0_GFCLK_MASK                                (1 << 22)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TLL_CH1_GFCLK_SHIFT                       23
+#define OMAP54XX_CLKACTIVITY_TLL_CH1_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_TLL_CH1_GFCLK_MASK                                (1 << 23)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_TLL_CH2_GFCLK_SHIFT                       24
+#define OMAP54XX_CLKACTIVITY_TLL_CH2_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_TLL_CH2_GFCLK_MASK                                (1 << 24)
+
+/* Used by CM_MIPIEXT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_DPLL_CLK_SHIFT                    10
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_DPLL_CLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_DPLL_CLK_MASK                     (1 << 10)
+
+/* Used by CM_MIPIEXT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_PHY_GFCLK_SHIFT                   13
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_PHY_GFCLK_WIDTH                   0x1
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_PHY_GFCLK_MASK                    (1 << 13)
+
+/* Used by CM_MIPIEXT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_TXPHY_LS_GFCLK_SHIFT              12
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_TXPHY_LS_GFCLK_WIDTH              0x1
+#define OMAP54XX_CLKACTIVITY_UNIPRO1_TXPHY_LS_GFCLK_MASK               (1 << 12)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_DPLL_CLK_SHIFT                    10
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_DPLL_CLK_WIDTH                    0x1
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_DPLL_CLK_MASK                     (1 << 10)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_PHY_GFCLK_SHIFT                   13
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_PHY_GFCLK_WIDTH                   0x1
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_PHY_GFCLK_MASK                    (1 << 13)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_PHY_REF_GFCLK_SHIFT               5
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_PHY_REF_GFCLK_WIDTH               0x1
+#define OMAP54XX_CLKACTIVITY_UNIPRO2_PHY_REF_GFCLK_MASK                        (1 << 5)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_USB_DPLL_CLK_SHIFT                                14
+#define OMAP54XX_CLKACTIVITY_USB_DPLL_CLK_WIDTH                                0x1
+#define OMAP54XX_CLKACTIVITY_USB_DPLL_CLK_MASK                         (1 << 14)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_USB_DPLL_HS_CLK_SHIFT                     15
+#define OMAP54XX_CLKACTIVITY_USB_DPLL_HS_CLK_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_USB_DPLL_HS_CLK_MASK                      (1 << 15)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_USB_OTG_SS_REF_CLK_SHIFT                  31
+#define OMAP54XX_CLKACTIVITY_USB_OTG_SS_REF_CLK_WIDTH                  0x1
+#define OMAP54XX_CLKACTIVITY_USB_OTG_SS_REF_CLK_MASK                   (1 << 31)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UTMI_P3_GFCLK_SHIFT                       30
+#define OMAP54XX_CLKACTIVITY_UTMI_P3_GFCLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_UTMI_P3_GFCLK_MASK                                (1 << 30)
+
+/* Used by CM_L3INIT_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_UTMI_ROOT_GFCLK_SHIFT                     25
+#define OMAP54XX_CLKACTIVITY_UTMI_ROOT_GFCLK_WIDTH                     0x1
+#define OMAP54XX_CLKACTIVITY_UTMI_ROOT_GFCLK_MASK                      (1 << 25)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_WKUPAON_32K_GFCLK_SHIFT                   11
+#define OMAP54XX_CLKACTIVITY_WKUPAON_32K_GFCLK_WIDTH                   0x1
+#define OMAP54XX_CLKACTIVITY_WKUPAON_32K_GFCLK_MASK                    (1 << 11)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_WKUPAON_GICLK_SHIFT                       12
+#define OMAP54XX_CLKACTIVITY_WKUPAON_GICLK_WIDTH                       0x1
+#define OMAP54XX_CLKACTIVITY_WKUPAON_GICLK_MASK                                (1 << 12)
+
+/* Used by CM_WKUPAON_CLKSTCTRL */
+#define OMAP54XX_CLKACTIVITY_WKUPAON_IO_SRCOMP_GFCLK_SHIFT             13
+#define OMAP54XX_CLKACTIVITY_WKUPAON_IO_SRCOMP_GFCLK_WIDTH             0x1
+#define OMAP54XX_CLKACTIVITY_WKUPAON_IO_SRCOMP_GFCLK_MASK              (1 << 13)
+
+/* Used by CM_COREAON_IO_SRCOMP_CLKCTRL, CM_WKUPAON_IO_SRCOMP_CLKCTRL */
+#define OMAP54XX_CLKEN_SRCOMP_FCLK_SHIFT                               8
+#define OMAP54XX_CLKEN_SRCOMP_FCLK_WIDTH                               0x1
+#define OMAP54XX_CLKEN_SRCOMP_FCLK_MASK                                        (1 << 8)
+
+/*
+ * Used by CM_ABE_TIMER5_CLKCTRL, CM_ABE_TIMER6_CLKCTRL, CM_ABE_TIMER7_CLKCTRL,
+ * CM_ABE_TIMER8_CLKCTRL, CM_L3INIT_HSI_CLKCTRL, CM_L4PER_TIMER10_CLKCTRL,
+ * CM_L4PER_TIMER11_CLKCTRL, CM_L4PER_TIMER2_CLKCTRL, CM_L4PER_TIMER3_CLKCTRL,
+ * CM_L4PER_TIMER4_CLKCTRL, CM_L4PER_TIMER9_CLKCTRL, CM_WKUPAON_TIMER1_CLKCTRL
+ */
+#define OMAP54XX_CLKSEL_SHIFT                                          24
+#define OMAP54XX_CLKSEL_WIDTH                                          0x1
+#define OMAP54XX_CLKSEL_MASK                                           (1 << 24)
+
+/*
+ * Renamed from CLKSEL Used by CM_CLKSEL_ABE_DSS_SYS, CM_CLKSEL_ABE_PLL_REF,
+ * CM_CLKSEL_USB_60MHZ, CM_CLKSEL_WKUPAON
+ */
+#define OMAP54XX_CLKSEL_0_0_SHIFT                                      0
+#define OMAP54XX_CLKSEL_0_0_WIDTH                                      0x1
+#define OMAP54XX_CLKSEL_0_0_MASK                                       (1 << 0)
+
+/* Renamed from CLKSEL Used by CM_BYPCLK_DPLL_IVA, CM_BYPCLK_DPLL_MPU */
+#define OMAP54XX_CLKSEL_0_1_SHIFT                                      0
+#define OMAP54XX_CLKSEL_0_1_WIDTH                                      0x2
+#define OMAP54XX_CLKSEL_0_1_MASK                                       (0x3 << 0)
+
+/* Renamed from CLKSEL Used by CM_L3INSTR_CTRL_MODULE_BANDGAP_CLKCTRL */
+#define OMAP54XX_CLKSEL_24_25_SHIFT                                    24
+#define OMAP54XX_CLKSEL_24_25_WIDTH                                    0x2
+#define OMAP54XX_CLKSEL_24_25_MASK                                     (0x3 << 24)
+
+/* Used by CM_MPU_MPU_CLKCTRL */
+#define OMAP54XX_CLKSEL_ABE_DIV_MODE_SHIFT                             26
+#define OMAP54XX_CLKSEL_ABE_DIV_MODE_WIDTH                             0x1
+#define OMAP54XX_CLKSEL_ABE_DIV_MODE_MASK                              (1 << 26)
+
+/* Used by CM_ABE_AESS_CLKCTRL */
+#define OMAP54XX_CLKSEL_AESS_FCLK_SHIFT                                        24
+#define OMAP54XX_CLKSEL_AESS_FCLK_WIDTH                                        0x1
+#define OMAP54XX_CLKSEL_AESS_FCLK_MASK                                 (1 << 24)
+
+/* Used by CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL */
+#define OMAP54XX_CLKSEL_DIV_SHIFT                                      25
+#define OMAP54XX_CLKSEL_DIV_WIDTH                                      0x1
+#define OMAP54XX_CLKSEL_DIV_MASK                                       (1 << 25)
+
+/* Used by CM_MPU_MPU_CLKCTRL */
+#define OMAP54XX_CLKSEL_EMIF_DIV_MODE_SHIFT                            24
+#define OMAP54XX_CLKSEL_EMIF_DIV_MODE_WIDTH                            0x2
+#define OMAP54XX_CLKSEL_EMIF_DIV_MODE_MASK                             (0x3 << 24)
+
+/* Used by CM_CAM_FDIF_CLKCTRL */
+#define OMAP54XX_CLKSEL_FCLK_SHIFT                                     24
+#define OMAP54XX_CLKSEL_FCLK_WIDTH                                     0x1
+#define OMAP54XX_CLKSEL_FCLK_MASK                                      (1 << 24)
+
+/* Used by CM_GPU_GPU_CLKCTRL */
+#define OMAP54XX_CLKSEL_GPU_CORE_GCLK_SHIFT                            24
+#define OMAP54XX_CLKSEL_GPU_CORE_GCLK_WIDTH                            0x1
+#define OMAP54XX_CLKSEL_GPU_CORE_GCLK_MASK                             (1 << 24)
+
+/* Used by CM_GPU_GPU_CLKCTRL */
+#define OMAP54XX_CLKSEL_GPU_HYD_GCLK_SHIFT                             25
+#define OMAP54XX_CLKSEL_GPU_HYD_GCLK_WIDTH                             0x1
+#define OMAP54XX_CLKSEL_GPU_HYD_GCLK_MASK                              (1 << 25)
+
+/* Used by CM_GPU_GPU_CLKCTRL */
+#define OMAP54XX_CLKSEL_GPU_SYS_CLK_SHIFT                              26
+#define OMAP54XX_CLKSEL_GPU_SYS_CLK_WIDTH                              0x1
+#define OMAP54XX_CLKSEL_GPU_SYS_CLK_MASK                               (1 << 26)
+
+/*
+ * Used by CM_ABE_DMIC_CLKCTRL, CM_ABE_MCASP_CLKCTRL, CM_ABE_MCBSP1_CLKCTRL,
+ * CM_ABE_MCBSP2_CLKCTRL, CM_ABE_MCBSP3_CLKCTRL
+ */
+#define OMAP54XX_CLKSEL_INTERNAL_SOURCE_SHIFT                          26
+#define OMAP54XX_CLKSEL_INTERNAL_SOURCE_WIDTH                          0x2
+#define OMAP54XX_CLKSEL_INTERNAL_SOURCE_MASK                           (0x3 << 26)
+
+/* Used by CM_CLKSEL_CORE */
+#define OMAP54XX_CLKSEL_L3_SHIFT                                       4
+#define OMAP54XX_CLKSEL_L3_WIDTH                                       0x1
+#define OMAP54XX_CLKSEL_L3_MASK                                                (1 << 4)
+
+/* Renamed from CLKSEL_L3 Used by CM_SHADOW_FREQ_CONFIG2 */
+#define OMAP54XX_CLKSEL_L3_1_1_SHIFT                                   1
+#define OMAP54XX_CLKSEL_L3_1_1_WIDTH                                   0x1
+#define OMAP54XX_CLKSEL_L3_1_1_MASK                                    (1 << 1)
+
+/* Used by CM_CLKSEL_CORE */
+#define OMAP54XX_CLKSEL_L4_SHIFT                                       8
+#define OMAP54XX_CLKSEL_L4_WIDTH                                       0x1
+#define OMAP54XX_CLKSEL_L4_MASK                                                (1 << 8)
+
+/* Used by CM_EMIF_EMIF1_CLKCTRL */
+#define OMAP54XX_CLKSEL_LL_SHIFT                                       24
+#define OMAP54XX_CLKSEL_LL_WIDTH                                       0x1
+#define OMAP54XX_CLKSEL_LL_MASK                                                (1 << 24)
+
+/* Used by CM_CLKSEL_ABE */
+#define OMAP54XX_CLKSEL_OPP_SHIFT                                      0
+#define OMAP54XX_CLKSEL_OPP_WIDTH                                      0x2
+#define OMAP54XX_CLKSEL_OPP_MASK                                       (0x3 << 0)
+
+/* Renamed from CLKSEL_OPP Used by CM_L3INIT_UNIPRO2_CLKCTRL */
+#define OMAP54XX_CLKSEL_OPP_24_24_SHIFT                                        24
+#define OMAP54XX_CLKSEL_OPP_24_24_WIDTH                                        0x1
+#define OMAP54XX_CLKSEL_OPP_24_24_MASK                                 (1 << 24)
+
+/*
+ * Used by CM_ABE_DMIC_CLKCTRL, CM_ABE_MCASP_CLKCTRL, CM_ABE_MCBSP1_CLKCTRL,
+ * CM_ABE_MCBSP2_CLKCTRL, CM_ABE_MCBSP3_CLKCTRL
+ */
+#define OMAP54XX_CLKSEL_SOURCE_SHIFT                                   24
+#define OMAP54XX_CLKSEL_SOURCE_WIDTH                                   0x2
+#define OMAP54XX_CLKSEL_SOURCE_MASK                                    (0x3 << 24)
+
+/*
+ * Renamed from CLKSEL_SOURCE Used by CM_L3INIT_MMC1_CLKCTRL,
+ * CM_L3INIT_MMC2_CLKCTRL
+ */
+#define OMAP54XX_CLKSEL_SOURCE_L3INIT_MMC1_SHIFT                       24
+#define OMAP54XX_CLKSEL_SOURCE_L3INIT_MMC1_WIDTH                       0x1
+#define OMAP54XX_CLKSEL_SOURCE_L3INIT_MMC1_MASK                                (1 << 24)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_CLKSEL_UTMI_P1_SHIFT                                  24
+#define OMAP54XX_CLKSEL_UTMI_P1_WIDTH                                  0x1
+#define OMAP54XX_CLKSEL_UTMI_P1_MASK                                   (1 << 24)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_CLKSEL_UTMI_P2_SHIFT                                  25
+#define OMAP54XX_CLKSEL_UTMI_P2_WIDTH                                  0x1
+#define OMAP54XX_CLKSEL_UTMI_P2_MASK                                   (1 << 25)
+
+/*
+ * Used by CM_DIV_H11_DPLL_CORE, CM_DIV_H11_DPLL_IVA, CM_DIV_H11_DPLL_PER,
+ * CM_DIV_H12_DPLL_CORE, CM_DIV_H12_DPLL_IVA, CM_DIV_H12_DPLL_PER,
+ * CM_DIV_H13_DPLL_CORE, CM_DIV_H13_DPLL_PER, CM_DIV_H14_DPLL_CORE,
+ * CM_DIV_H14_DPLL_PER, CM_DIV_H21_DPLL_CORE, CM_DIV_H22_DPLL_CORE,
+ * CM_DIV_H23_DPLL_CORE, CM_DIV_H24_DPLL_CORE, CM_DIV_M2_DPLL_ABE,
+ * CM_DIV_M2_DPLL_CORE, CM_DIV_M2_DPLL_MPU, CM_DIV_M2_DPLL_PER,
+ * CM_DIV_M2_DPLL_UNIPRO1, CM_DIV_M2_DPLL_UNIPRO2, CM_DIV_M2_DPLL_USB,
+ * CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE, CM_DIV_M3_DPLL_PER
+ */
+#define OMAP54XX_CLKST_SHIFT                                           9
+#define OMAP54XX_CLKST_WIDTH                                           0x1
+#define OMAP54XX_CLKST_MASK                                            (1 << 9)
+
+/*
+ * Used by CM_ABE_CLKSTCTRL, CM_C2C_CLKSTCTRL, CM_CAM_CLKSTCTRL,
+ * CM_COREAON_CLKSTCTRL, CM_CUSTEFUSE_CLKSTCTRL, CM_DMA_CLKSTCTRL,
+ * CM_DSP_CLKSTCTRL, CM_DSS_CLKSTCTRL, CM_EMIF_CLKSTCTRL, CM_EMU_CLKSTCTRL,
+ * CM_GPU_CLKSTCTRL, CM_IPU_CLKSTCTRL, CM_IVA_CLKSTCTRL, CM_L3INIT_CLKSTCTRL,
+ * CM_L3INSTR_CLKSTCTRL, CM_L3MAIN1_CLKSTCTRL, CM_L3MAIN2_CLKSTCTRL,
+ * CM_L4CFG_CLKSTCTRL, CM_L4PER_CLKSTCTRL, CM_L4SEC_CLKSTCTRL,
+ * CM_MIPIEXT_CLKSTCTRL, CM_MPU_CLKSTCTRL, CM_WKUPAON_CLKSTCTRL
+ */
+#define OMAP54XX_CLKTRCTRL_SHIFT                                       0
+#define OMAP54XX_CLKTRCTRL_WIDTH                                       0x2
+#define OMAP54XX_CLKTRCTRL_MASK                                                (0x3 << 0)
+
+/* Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_PER */
+#define OMAP54XX_CLKX2ST_SHIFT                                         11
+#define OMAP54XX_CLKX2ST_WIDTH                                         0x1
+#define OMAP54XX_CLKX2ST_MASK                                          (1 << 11)
+
+/* Used by CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_COREAON_DYNDEP_SHIFT                                  16
+#define OMAP54XX_COREAON_DYNDEP_WIDTH                                  0x1
+#define OMAP54XX_COREAON_DYNDEP_MASK                                   (1 << 16)
+
+/* Used by CM_DSP_STATICDEP, CM_IPU_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_COREAON_STATDEP_SHIFT                                 16
+#define OMAP54XX_COREAON_STATDEP_WIDTH                                 0x1
+#define OMAP54XX_COREAON_STATDEP_MASK                                  (1 << 16)
+
+/* Used by CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_CUSTEFUSE_DYNDEP_SHIFT                                        17
+#define OMAP54XX_CUSTEFUSE_DYNDEP_WIDTH                                        0x1
+#define OMAP54XX_CUSTEFUSE_DYNDEP_MASK                                 (1 << 17)
+
+/* Used by CM_DSP_STATICDEP, CM_IPU_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_CUSTEFUSE_STATDEP_SHIFT                               17
+#define OMAP54XX_CUSTEFUSE_STATDEP_WIDTH                               0x1
+#define OMAP54XX_CUSTEFUSE_STATDEP_MASK                                        (1 << 17)
+
+/* Used by REVISION_CM_CORE, REVISION_CM_CORE_AON */
+#define OMAP54XX_CUSTOM_SHIFT                                          6
+#define OMAP54XX_CUSTOM_WIDTH                                          0x2
+#define OMAP54XX_CUSTOM_MASK                                           (0x3 << 6)
+
+/*
+ * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, CM_CLKSEL_DPLL_IVA,
+ * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO1,
+ * CM_CLKSEL_DPLL_UNIPRO2, CM_CLKSEL_DPLL_USB
+ */
+#define OMAP54XX_DCC_EN_SHIFT                                          22
+#define OMAP54XX_DCC_EN_WIDTH                                          0x1
+#define OMAP54XX_DCC_EN_MASK                                           (1 << 22)
+
+/*
+ * Used by CM_CORE_AON_DEBUG_CM_CORE_AON_FD_TRANS,
+ * CM_CORE_AON_DEBUG_DSS_FD_TRANS, CM_CORE_AON_DEBUG_EMIF_FD_TRANS,
+ * CM_CORE_AON_DEBUG_L4SEC_FD_TRANS
+ */
+#define OMAP54XX_CM_DEBUG_OUT_SHIFT                                    0
+#define OMAP54XX_CM_DEBUG_OUT_WIDTH                                    0xd
+#define OMAP54XX_CM_DEBUG_OUT_MASK                                     (0x1fff << 0)
+
+/*
+ * Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_ABE_FD_TRANS,
+ * CM_CORE_AON_DEBUG_L3INIT_FD_TRANS, CM_CORE_AON_DEBUG_L4PER_FD_TRANS
+ */
+#define OMAP54XX_DEBUG_OUT_0_31_SHIFT                                  0
+#define OMAP54XX_DEBUG_OUT_0_31_WIDTH                                  0x20
+#define OMAP54XX_DEBUG_OUT_0_31_MASK                                   (0xffffffff << 0)
+
+/*
+ * Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_C2C_FD_TRANS,
+ * CM_CORE_AON_DEBUG_COREAON_FD_TRANS, CM_CORE_AON_DEBUG_L4CFG_FD_TRANS
+ */
+#define OMAP54XX_DEBUG_OUT_0_8_SHIFT                                   0
+#define OMAP54XX_DEBUG_OUT_0_8_WIDTH                                   0x9
+#define OMAP54XX_DEBUG_OUT_0_8_MASK                                    (0x1ff << 0)
+
+/*
+ * Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_CUSTEFUSE_FD_TRANS,
+ * CM_CORE_AON_DEBUG_DMA_FD_TRANS, CM_CORE_AON_DEBUG_L3MAIN1_FD_TRANS
+ */
+#define OMAP54XX_DEBUG_OUT_0_4_SHIFT                                   0
+#define OMAP54XX_DEBUG_OUT_0_4_WIDTH                                   0x5
+#define OMAP54XX_DEBUG_OUT_0_4_MASK                                    (0x1f << 0)
+
+/*
+ * Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_DSP_FD_TRANS,
+ * CM_CORE_AON_DEBUG_IPU_FD_TRANS, CM_CORE_AON_DEBUG_MPU_FD_TRANS
+ */
+#define OMAP54XX_DEBUG_OUT_0_5_SHIFT                                   0
+#define OMAP54XX_DEBUG_OUT_0_5_WIDTH                                   0x6
+#define OMAP54XX_DEBUG_OUT_0_5_MASK                                    (0x3f << 0)
+
+/*
+ * Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_CAM_FD_TRANS,
+ * CM_CORE_AON_DEBUG_MIPIEXT_FD_TRANS
+ */
+#define OMAP54XX_DEBUG_OUT_0_10_SHIFT                                  0
+#define OMAP54XX_DEBUG_OUT_0_10_WIDTH                                  0xb
+#define OMAP54XX_DEBUG_OUT_0_10_MASK                                   (0x7ff << 0)
+
+/*
+ * Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_IVA_FD_TRANS,
+ * CM_CORE_AON_DEBUG_L3MAIN2_FD_TRANS
+ */
+#define OMAP54XX_DEBUG_OUT_0_6_SHIFT                                   0
+#define OMAP54XX_DEBUG_OUT_0_6_WIDTH                                   0x7
+#define OMAP54XX_DEBUG_OUT_0_6_MASK                                    (0x7f << 0)
+
+/* Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_ABE_FD_TRANS2 */
+#define OMAP54XX_DEBUG_OUT_0_19_SHIFT                                  0
+#define OMAP54XX_DEBUG_OUT_0_19_WIDTH                                  0x14
+#define OMAP54XX_DEBUG_OUT_0_19_MASK                                   (0xfffff << 0)
+
+/* Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_GPU_FD_TRANS */
+#define OMAP54XX_DEBUG_OUT_0_9_SHIFT                                   0
+#define OMAP54XX_DEBUG_OUT_0_9_WIDTH                                   0xa
+#define OMAP54XX_DEBUG_OUT_0_9_MASK                                    (0x3ff << 0)
+
+/* Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_L3INIT_FD_TRANS2 */
+#define OMAP54XX_DEBUG_OUT_0_26_SHIFT                                  0
+#define OMAP54XX_DEBUG_OUT_0_26_WIDTH                                  0x1b
+#define OMAP54XX_DEBUG_OUT_0_26_MASK                                   (0x7ffffff << 0)
+
+/* Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_L3INSTR_FD_TRANS */
+#define OMAP54XX_DEBUG_OUT_0_13_SHIFT                                  0
+#define OMAP54XX_DEBUG_OUT_0_13_WIDTH                                  0xe
+#define OMAP54XX_DEBUG_OUT_0_13_MASK                                   (0x3fff << 0)
+
+/* Renamed from DEBUG_OUT Used by CM_CORE_AON_DEBUG_L4PER_FD_TRANS2 */
+#define OMAP54XX_DEBUG_OUT_0_21_SHIFT                                  0
+#define OMAP54XX_DEBUG_OUT_0_21_WIDTH                                  0x16
+#define OMAP54XX_DEBUG_OUT_0_21_MASK                                   (0x3fffff << 0)
+
+/*
+ * Used by CM_SSC_DELTAMSTEP_DPLL_ABE, CM_SSC_DELTAMSTEP_DPLL_CORE,
+ * CM_SSC_DELTAMSTEP_DPLL_IVA, CM_SSC_DELTAMSTEP_DPLL_MPU,
+ * CM_SSC_DELTAMSTEP_DPLL_PER
+ */
+#define OMAP54XX_DELTAMSTEP_SHIFT                                      0
+#define OMAP54XX_DELTAMSTEP_WIDTH                                      0x14
+#define OMAP54XX_DELTAMSTEP_MASK                                       (0xfffff << 0)
+
+/*
+ * Renamed from DELTAMSTEP Used by CM_SSC_DELTAMSTEP_DPLL_UNIPRO1,
+ * CM_SSC_DELTAMSTEP_DPLL_UNIPRO2, CM_SSC_DELTAMSTEP_DPLL_USB
+ */
+#define OMAP54XX_DELTAMSTEP_0_20_SHIFT                                 0
+#define OMAP54XX_DELTAMSTEP_0_20_WIDTH                                 0x15
+#define OMAP54XX_DELTAMSTEP_0_20_MASK                                  (0x1fffff << 0)
+
+/*
+ * Used by CM_DIV_H11_DPLL_CORE, CM_DIV_H11_DPLL_IVA, CM_DIV_H11_DPLL_PER,
+ * CM_DIV_H12_DPLL_CORE, CM_DIV_H12_DPLL_IVA, CM_DIV_H12_DPLL_PER,
+ * CM_DIV_H13_DPLL_CORE, CM_DIV_H13_DPLL_PER, CM_DIV_H14_DPLL_CORE,
+ * CM_DIV_H14_DPLL_PER, CM_DIV_H21_DPLL_CORE, CM_DIV_H22_DPLL_CORE,
+ * CM_DIV_H23_DPLL_CORE, CM_DIV_H24_DPLL_CORE
+ */
+#define OMAP54XX_DIVHS_SHIFT                                           0
+#define OMAP54XX_DIVHS_WIDTH                                           0x6
+#define OMAP54XX_DIVHS_MASK                                            (0x3f << 0)
+
+/*
+ * Renamed from DIVHS Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE,
+ * CM_DIV_M2_DPLL_MPU, CM_DIV_M2_DPLL_PER, CM_DIV_M3_DPLL_ABE,
+ * CM_DIV_M3_DPLL_CORE, CM_DIV_M3_DPLL_PER
+ */
+#define OMAP54XX_DIVHS_0_4_SHIFT                                       0
+#define OMAP54XX_DIVHS_0_4_WIDTH                                       0x5
+#define OMAP54XX_DIVHS_0_4_MASK                                                (0x1f << 0)
+
+/*
+ * Renamed from DIVHS Used by CM_DIV_M2_DPLL_UNIPRO1, CM_DIV_M2_DPLL_UNIPRO2,
+ * CM_DIV_M2_DPLL_USB
+ */
+#define OMAP54XX_DIVHS_0_6_SHIFT                                       0
+#define OMAP54XX_DIVHS_0_6_WIDTH                                       0x7
+#define OMAP54XX_DIVHS_0_6_MASK                                                (0x7f << 0)
+
+/* Used by CM_DLL_CTRL */
+#define OMAP54XX_DLL_OVERRIDE_SHIFT                                    0
+#define OMAP54XX_DLL_OVERRIDE_WIDTH                                    0x1
+#define OMAP54XX_DLL_OVERRIDE_MASK                                     (1 << 0)
+
+/* Renamed from DLL_OVERRIDE Used by CM_SHADOW_FREQ_CONFIG1 */
+#define OMAP54XX_DLL_OVERRIDE_2_2_SHIFT                                        2
+#define OMAP54XX_DLL_OVERRIDE_2_2_WIDTH                                        0x1
+#define OMAP54XX_DLL_OVERRIDE_2_2_MASK                                 (1 << 2)
+
+/* Used by CM_SHADOW_FREQ_CONFIG1 */
+#define OMAP54XX_DLL_RESET_SHIFT                                       3
+#define OMAP54XX_DLL_RESET_WIDTH                                       0x1
+#define OMAP54XX_DLL_RESET_MASK                                                (1 << 3)
+
+/*
+ * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, CM_CLKSEL_DPLL_IVA,
+ * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO1,
+ * CM_CLKSEL_DPLL_UNIPRO2, CM_CLKSEL_DPLL_USB
+ */
+#define OMAP54XX_DPLL_BYP_CLKSEL_SHIFT                                 23
+#define OMAP54XX_DPLL_BYP_CLKSEL_WIDTH                                 0x1
+#define OMAP54XX_DPLL_BYP_CLKSEL_MASK                                  (1 << 23)
+
+/* Used by CM_CLKSEL_DPLL_CORE */
+#define OMAP54XX_DPLL_CLKOUTHIF_CLKSEL_SHIFT                           20
+#define OMAP54XX_DPLL_CLKOUTHIF_CLKSEL_WIDTH                           0x1
+#define OMAP54XX_DPLL_CLKOUTHIF_CLKSEL_MASK                            (1 << 20)
+
+/* Used by CM_SHADOW_FREQ_CONFIG1 */
+#define OMAP54XX_DPLL_CORE_DPLL_EN_SHIFT                               8
+#define OMAP54XX_DPLL_CORE_DPLL_EN_WIDTH                               0x3
+#define OMAP54XX_DPLL_CORE_DPLL_EN_MASK                                        (0x7 << 8)
+
+/* Used by CM_SHADOW_FREQ_CONFIG2 */
+#define OMAP54XX_DPLL_CORE_H12_DIV_SHIFT                               2
+#define OMAP54XX_DPLL_CORE_H12_DIV_WIDTH                               0x6
+#define OMAP54XX_DPLL_CORE_H12_DIV_MASK                                        (0x3f << 2)
+
+/* Used by CM_SHADOW_FREQ_CONFIG1 */
+#define OMAP54XX_DPLL_CORE_M2_DIV_SHIFT                                        11
+#define OMAP54XX_DPLL_CORE_M2_DIV_WIDTH                                        0x5
+#define OMAP54XX_DPLL_CORE_M2_DIV_MASK                                 (0x1f << 11)
+
+/*
+ * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, CM_CLKSEL_DPLL_IVA,
+ * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER
+ */
+#define OMAP54XX_DPLL_DIV_SHIFT                                                0
+#define OMAP54XX_DPLL_DIV_WIDTH                                                0x7
+#define OMAP54XX_DPLL_DIV_MASK                                         (0x7f << 0)
+
+/*
+ * Renamed from DPLL_DIV Used by CM_CLKSEL_DPLL_UNIPRO1,
+ * CM_CLKSEL_DPLL_UNIPRO2, CM_CLKSEL_DPLL_USB
+ */
+#define OMAP54XX_DPLL_DIV_0_7_SHIFT                                    0
+#define OMAP54XX_DPLL_DIV_0_7_WIDTH                                    0x8
+#define OMAP54XX_DPLL_DIV_0_7_MASK                                     (0xff << 0)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER
+ */
+#define OMAP54XX_DPLL_DRIFTGUARD_EN_SHIFT                              8
+#define OMAP54XX_DPLL_DRIFTGUARD_EN_WIDTH                              0x1
+#define OMAP54XX_DPLL_DRIFTGUARD_EN_MASK                               (1 << 8)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO1,
+ * CM_CLKMODE_DPLL_UNIPRO2, CM_CLKMODE_DPLL_USB
+ */
+#define OMAP54XX_DPLL_EN_SHIFT                                         0
+#define OMAP54XX_DPLL_EN_WIDTH                                         0x3
+#define OMAP54XX_DPLL_EN_MASK                                          (0x7 << 0)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER
+ */
+#define OMAP54XX_DPLL_LPMODE_EN_SHIFT                                  10
+#define OMAP54XX_DPLL_LPMODE_EN_WIDTH                                  0x1
+#define OMAP54XX_DPLL_LPMODE_EN_MASK                                   (1 << 10)
+
+/*
+ * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, CM_CLKSEL_DPLL_IVA,
+ * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER
+ */
+#define OMAP54XX_DPLL_MULT_SHIFT                                       8
+#define OMAP54XX_DPLL_MULT_WIDTH                                       0xb
+#define OMAP54XX_DPLL_MULT_MASK                                                (0x7ff << 8)
+
+/*
+ * Renamed from DPLL_MULT Used by CM_CLKSEL_DPLL_UNIPRO1,
+ * CM_CLKSEL_DPLL_UNIPRO2, CM_CLKSEL_DPLL_USB
+ */
+#define OMAP54XX_DPLL_MULT_UNIPRO1_SHIFT                               8
+#define OMAP54XX_DPLL_MULT_UNIPRO1_WIDTH                               0xc
+#define OMAP54XX_DPLL_MULT_UNIPRO1_MASK                                        (0xfff << 8)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER
+ */
+#define OMAP54XX_DPLL_REGM4XEN_SHIFT                                   11
+#define OMAP54XX_DPLL_REGM4XEN_WIDTH                                   0x1
+#define OMAP54XX_DPLL_REGM4XEN_MASK                                    (1 << 11)
+
+/* Used by CM_CLKSEL_DPLL_UNIPRO1, CM_CLKSEL_DPLL_UNIPRO2, CM_CLKSEL_DPLL_USB */
+#define OMAP54XX_DPLL_SD_DIV_SHIFT                                     24
+#define OMAP54XX_DPLL_SD_DIV_WIDTH                                     0x8
+#define OMAP54XX_DPLL_SD_DIV_MASK                                      (0xff << 24)
+
+/* Used by CM_CLKSEL_DPLL_UNIPRO1, CM_CLKSEL_DPLL_UNIPRO2, CM_CLKSEL_DPLL_USB */
+#define OMAP54XX_DPLL_SELFREQDCO_SHIFT                                 21
+#define OMAP54XX_DPLL_SELFREQDCO_WIDTH                                 0x1
+#define OMAP54XX_DPLL_SELFREQDCO_MASK                                  (1 << 21)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO1,
+ * CM_CLKMODE_DPLL_UNIPRO2, CM_CLKMODE_DPLL_USB
+ */
+#define OMAP54XX_DPLL_SSC_ACK_SHIFT                                    13
+#define OMAP54XX_DPLL_SSC_ACK_WIDTH                                    0x1
+#define OMAP54XX_DPLL_SSC_ACK_MASK                                     (1 << 13)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO1,
+ * CM_CLKMODE_DPLL_UNIPRO2, CM_CLKMODE_DPLL_USB
+ */
+#define OMAP54XX_DPLL_SSC_DOWNSPREAD_SHIFT                             14
+#define OMAP54XX_DPLL_SSC_DOWNSPREAD_WIDTH                             0x1
+#define OMAP54XX_DPLL_SSC_DOWNSPREAD_MASK                              (1 << 14)
+
+/*
+ * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, CM_CLKMODE_DPLL_IVA,
+ * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO1,
+ * CM_CLKMODE_DPLL_UNIPRO2, CM_CLKMODE_DPLL_USB
+ */
+#define OMAP54XX_DPLL_SSC_EN_SHIFT                                     12
+#define OMAP54XX_DPLL_SSC_EN_WIDTH                                     0x1
+#define OMAP54XX_DPLL_SSC_EN_MASK                                      (1 << 12)
+
+/* Used by CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_DSP_DYNDEP_SHIFT                                      1
+#define OMAP54XX_DSP_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_DSP_DYNDEP_MASK                                       (1 << 1)
+
+/* Used by CM_IPU_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_DSP_STATDEP_SHIFT                                     1
+#define OMAP54XX_DSP_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_DSP_STATDEP_MASK                                      (1 << 1)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP, CM_L4PER_DYNAMICDEP */
+#define OMAP54XX_DSS_DYNDEP_SHIFT                                      8
+#define OMAP54XX_DSS_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_DSS_DYNDEP_MASK                                       (1 << 8)
+
+/* Used by CM_DMA_STATICDEP, CM_IPU_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_DSS_STATDEP_SHIFT                                     8
+#define OMAP54XX_DSS_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_DSS_STATDEP_MASK                                      (1 << 8)
+
+/*
+ * Used by CM_C2C_DYNAMICDEP, CM_L3MAIN1_DYNAMICDEP, CM_L4CFG_DYNAMICDEP,
+ * CM_MIPIEXT_DYNAMICDEP, CM_MPU_DYNAMICDEP
+ */
+#define OMAP54XX_EMIF_DYNDEP_SHIFT                                     4
+#define OMAP54XX_EMIF_DYNDEP_WIDTH                                     0x1
+#define OMAP54XX_EMIF_DYNDEP_MASK                                      (1 << 4)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_CAM_STATICDEP, CM_DMA_STATICDEP,
+ * CM_DSP_STATICDEP, CM_DSS_STATICDEP, CM_GPU_STATICDEP, CM_IPU_STATICDEP,
+ * CM_IVA_STATICDEP, CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP,
+ * CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_EMIF_STATDEP_SHIFT                                    4
+#define OMAP54XX_EMIF_STATDEP_WIDTH                                    0x1
+#define OMAP54XX_EMIF_STATDEP_MASK                                     (1 << 4)
+
+/* Used by CM_SHADOW_FREQ_CONFIG1 */
+#define OMAP54XX_FREQ_UPDATE_SHIFT                                     0
+#define OMAP54XX_FREQ_UPDATE_WIDTH                                     0x1
+#define OMAP54XX_FREQ_UPDATE_MASK                                      (1 << 0)
+
+/* Used by REVISION_CM_CORE, REVISION_CM_CORE_AON */
+#define OMAP54XX_FUNC_SHIFT                                            16
+#define OMAP54XX_FUNC_WIDTH                                            0xc
+#define OMAP54XX_FUNC_MASK                                             (0xfff << 16)
+
+/* Used by CM_SHADOW_FREQ_CONFIG2 */
+#define OMAP54XX_GPMC_FREQ_UPDATE_SHIFT                                        0
+#define OMAP54XX_GPMC_FREQ_UPDATE_WIDTH                                        0x1
+#define OMAP54XX_GPMC_FREQ_UPDATE_MASK                                 (1 << 0)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP */
+#define OMAP54XX_GPU_DYNDEP_SHIFT                                      10
+#define OMAP54XX_GPU_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_GPU_DYNDEP_MASK                                       (1 << 10)
+
+/* Used by CM_IPU_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_GPU_STATDEP_SHIFT                                     10
+#define OMAP54XX_GPU_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_GPU_STATDEP_MASK                                      (1 << 10)
+
+/*
+ * Used by CM_ABE_AESS_CLKCTRL, CM_ABE_DMIC_CLKCTRL, CM_ABE_L4_ABE_CLKCTRL,
+ * CM_ABE_MCASP_CLKCTRL, CM_ABE_MCBSP1_CLKCTRL, CM_ABE_MCBSP2_CLKCTRL,
+ * CM_ABE_MCBSP3_CLKCTRL, CM_ABE_MCPDM_CLKCTRL, CM_ABE_SLIMBUS1_CLKCTRL,
+ * CM_ABE_TIMER5_CLKCTRL, CM_ABE_TIMER6_CLKCTRL, CM_ABE_TIMER7_CLKCTRL,
+ * CM_ABE_TIMER8_CLKCTRL, CM_ABE_WD_TIMER3_CLKCTRL, CM_C2C_C2C_CLKCTRL,
+ * CM_C2C_C2C_OCP_FW_CLKCTRL, CM_C2C_MODEM_ICR_CLKCTRL, CM_CAM_CAL_CLKCTRL,
+ * CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, CM_CM_CORE_AON_PROFILING_CLKCTRL,
+ * CM_CM_CORE_PROFILING_CLKCTRL, CM_COREAON_SMARTREFLEX_CORE_CLKCTRL,
+ * CM_COREAON_SMARTREFLEX_MM_CLKCTRL, CM_COREAON_SMARTREFLEX_MPU_CLKCTRL,
+ * CM_CUSTEFUSE_EFUSE_CTRL_CUST_CLKCTRL, CM_DMA_DMA_SYSTEM_CLKCTRL,
+ * CM_DSP_DSP_CLKCTRL, CM_DSS_BB2D_CLKCTRL, CM_DSS_DSS_CLKCTRL,
+ * CM_EMIF_DMM_CLKCTRL, CM_EMIF_EMIF1_CLKCTRL, CM_EMIF_EMIF2_CLKCTRL,
+ * CM_EMIF_EMIF_OCP_FW_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL,
+ * CM_EMU_MPU_EMU_DBG_CLKCTRL, CM_GPU_GPU_CLKCTRL, CM_IPU_IPU_CLKCTRL,
+ * CM_IVA_IVA_CLKCTRL, CM_IVA_SL2_CLKCTRL, CM_L3INIT_HSI_CLKCTRL,
+ * CM_L3INIT_IEEE1500_2_OCP_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL,
+ * CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_MPHY_UNIPRO2_CLKCTRL,
+ * CM_L3INIT_OCP2SCP1_CLKCTRL, CM_L3INIT_OCP2SCP3_CLKCTRL,
+ * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_UNIPRO2_CLKCTRL,
+ * CM_L3INIT_USB_HOST_HS_CLKCTRL, CM_L3INIT_USB_OTG_SS_CLKCTRL,
+ * CM_L3INIT_USB_TLL_HS_CLKCTRL, CM_L3INSTR_CTRL_MODULE_BANDGAP_CLKCTRL,
+ * CM_L3INSTR_DLL_AGING_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL,
+ * CM_L3INSTR_L3_MAIN_3_CLKCTRL, CM_L3INSTR_OCP_WP_NOC_CLKCTRL,
+ * CM_L3MAIN1_L3_MAIN_1_CLKCTRL, CM_L3MAIN2_GPMC_CLKCTRL,
+ * CM_L3MAIN2_L3_MAIN_2_CLKCTRL, CM_L3MAIN2_OCMC_RAM_CLKCTRL,
+ * CM_L4CFG_L4_CFG_CLKCTRL, CM_L4CFG_MAILBOX_CLKCTRL,
+ * CM_L4CFG_OCP2SCP2_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL,
+ * CM_L4CFG_SPINLOCK_CLKCTRL, CM_L4PER_ELM_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL,
+ * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL,
+ * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_GPIO7_CLKCTRL, CM_L4PER_GPIO8_CLKCTRL,
+ * CM_L4PER_HDQ1W_CLKCTRL, CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL,
+ * CM_L4PER_I2C3_CLKCTRL, CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL,
+ * CM_L4PER_L4_PER_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL,
+ * CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MMC3_CLKCTRL,
+ * CM_L4PER_MMC4_CLKCTRL, CM_L4PER_MMC5_CLKCTRL, CM_L4PER_TIMER10_CLKCTRL,
+ * CM_L4PER_TIMER11_CLKCTRL, CM_L4PER_TIMER2_CLKCTRL, CM_L4PER_TIMER3_CLKCTRL,
+ * CM_L4PER_TIMER4_CLKCTRL, CM_L4PER_TIMER9_CLKCTRL, CM_L4PER_UART1_CLKCTRL,
+ * CM_L4PER_UART2_CLKCTRL, CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL,
+ * CM_L4PER_UART5_CLKCTRL, CM_L4PER_UART6_CLKCTRL, CM_L4SEC_AES1_CLKCTRL,
+ * CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL,
+ * CM_L4SEC_DMA_CRYPTO_CLKCTRL, CM_L4SEC_FPKA_CLKCTRL, CM_L4SEC_RNG_CLKCTRL,
+ * CM_L4SEC_SHA2MD5_CLKCTRL, CM_MIPIEXT_LLI_CLKCTRL,
+ * CM_MIPIEXT_LLI_OCP_FW_CLKCTRL, CM_MIPIEXT_MPHY_CLKCTRL, CM_MPU_MPU_CLKCTRL,
+ * CM_MPU_MPU_MPU_DBG_CLKCTRL, CM_WKUPAON_COUNTER_32K_CLKCTRL,
+ * CM_WKUPAON_GPIO1_CLKCTRL, CM_WKUPAON_KBD_CLKCTRL,
+ * CM_WKUPAON_L4_WKUP_CLKCTRL, CM_WKUPAON_SAR_RAM_CLKCTRL,
+ * CM_WKUPAON_TIMER12_CLKCTRL, CM_WKUPAON_TIMER1_CLKCTRL,
+ * CM_WKUPAON_WD_TIMER1_CLKCTRL, CM_WKUPAON_WD_TIMER2_CLKCTRL
+ */
+#define OMAP54XX_IDLEST_SHIFT                                          16
+#define OMAP54XX_IDLEST_WIDTH                                          0x2
+#define OMAP54XX_IDLEST_MASK                                           (0x3 << 16)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP */
+#define OMAP54XX_IPU_DYNDEP_SHIFT                                      0
+#define OMAP54XX_IPU_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_IPU_DYNDEP_MASK                                       (1 << 0)
+
+/* Used by CM_DMA_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_IPU_STATDEP_SHIFT                                     0
+#define OMAP54XX_IPU_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_IPU_STATDEP_MASK                                      (1 << 0)
+
+/* Used by CM_DSP_DYNAMICDEP, CM_L3MAIN2_DYNAMICDEP */
+#define OMAP54XX_IVA_DYNDEP_SHIFT                                      2
+#define OMAP54XX_IVA_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_IVA_DYNDEP_MASK                                       (1 << 2)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_CAM_STATICDEP, CM_DMA_STATICDEP,
+ * CM_DSP_STATICDEP, CM_DSS_STATICDEP, CM_GPU_STATICDEP, CM_IPU_STATICDEP,
+ * CM_L3INIT_STATICDEP, CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_IVA_STATDEP_SHIFT                                     2
+#define OMAP54XX_IVA_STATDEP_WIDTH                                     0x1
+#define OMAP54XX_IVA_STATDEP_MASK                                      (1 << 2)
+
+/* Used by CM_L4CFG_DYNAMICDEP, CM_L4PER_DYNAMICDEP */
+#define OMAP54XX_L3INIT_DYNDEP_SHIFT                                   7
+#define OMAP54XX_L3INIT_DYNDEP_WIDTH                                   0x1
+#define OMAP54XX_L3INIT_DYNDEP_MASK                                    (1 << 7)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_DMA_STATICDEP, CM_DSP_STATICDEP,
+ * CM_IPU_STATICDEP, CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_L3INIT_STATDEP_SHIFT                                  7
+#define OMAP54XX_L3INIT_STATDEP_WIDTH                                  0x1
+#define OMAP54XX_L3INIT_STATDEP_MASK                                   (1 << 7)
+
+/*
+ * Used by CM_DSP_DYNAMICDEP, CM_DSS_DYNAMICDEP, CM_L3INIT_DYNAMICDEP,
+ * CM_L3MAIN2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_MPU_DYNAMICDEP
+ */
+#define OMAP54XX_L3MAIN1_DYNDEP_SHIFT                                  5
+#define OMAP54XX_L3MAIN1_DYNDEP_WIDTH                                  0x1
+#define OMAP54XX_L3MAIN1_DYNDEP_MASK                                   (1 << 5)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_CAM_STATICDEP, CM_DMA_STATICDEP,
+ * CM_DSP_STATICDEP, CM_DSS_STATICDEP, CM_GPU_STATICDEP, CM_IPU_STATICDEP,
+ * CM_IVA_STATICDEP, CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP,
+ * CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_L3MAIN1_STATDEP_SHIFT                                 5
+#define OMAP54XX_L3MAIN1_STATDEP_WIDTH                                 0x1
+#define OMAP54XX_L3MAIN1_STATDEP_MASK                                  (1 << 5)
+
+/*
+ * Used by CM_C2C_DYNAMICDEP, CM_CAM_DYNAMICDEP, CM_DMA_DYNAMICDEP,
+ * CM_DSS_DYNAMICDEP, CM_EMU_DYNAMICDEP, CM_GPU_DYNAMICDEP, CM_IPU_DYNAMICDEP,
+ * CM_IVA_DYNAMICDEP, CM_L3INIT_DYNAMICDEP, CM_L3MAIN1_DYNAMICDEP,
+ * CM_L4CFG_DYNAMICDEP, CM_L4SEC_DYNAMICDEP, CM_MIPIEXT_DYNAMICDEP
+ */
+#define OMAP54XX_L3MAIN2_DYNDEP_SHIFT                                  6
+#define OMAP54XX_L3MAIN2_DYNDEP_WIDTH                                  0x1
+#define OMAP54XX_L3MAIN2_DYNDEP_MASK                                   (1 << 6)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_CAM_STATICDEP, CM_DMA_STATICDEP,
+ * CM_DSP_STATICDEP, CM_DSS_STATICDEP, CM_GPU_STATICDEP, CM_IPU_STATICDEP,
+ * CM_IVA_STATICDEP, CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP,
+ * CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_L3MAIN2_STATDEP_SHIFT                                 6
+#define OMAP54XX_L3MAIN2_STATDEP_WIDTH                                 0x1
+#define OMAP54XX_L3MAIN2_STATDEP_MASK                                  (1 << 6)
+
+/* Used by CM_L3MAIN1_DYNAMICDEP */
+#define OMAP54XX_L4CFG_DYNDEP_SHIFT                                    12
+#define OMAP54XX_L4CFG_DYNDEP_WIDTH                                    0x1
+#define OMAP54XX_L4CFG_DYNDEP_MASK                                     (1 << 12)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_DMA_STATICDEP, CM_DSP_STATICDEP,
+ * CM_IPU_STATICDEP, CM_L3INIT_STATICDEP, CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_L4CFG_STATDEP_SHIFT                                   12
+#define OMAP54XX_L4CFG_STATDEP_WIDTH                                   0x1
+#define OMAP54XX_L4CFG_STATDEP_MASK                                    (1 << 12)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP */
+#define OMAP54XX_L4PER_DYNDEP_SHIFT                                    13
+#define OMAP54XX_L4PER_DYNDEP_WIDTH                                    0x1
+#define OMAP54XX_L4PER_DYNDEP_MASK                                     (1 << 13)
+
+/*
+ * Used by CM_C2C_STATICDEP, CM_DMA_STATICDEP, CM_DSP_STATICDEP,
+ * CM_IPU_STATICDEP, CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP,
+ * CM_MIPIEXT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_L4PER_STATDEP_SHIFT                                   13
+#define OMAP54XX_L4PER_STATDEP_WIDTH                                   0x1
+#define OMAP54XX_L4PER_STATDEP_MASK                                    (1 << 13)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP, CM_L4PER_DYNAMICDEP */
+#define OMAP54XX_L4SEC_DYNDEP_SHIFT                                    14
+#define OMAP54XX_L4SEC_DYNDEP_WIDTH                                    0x1
+#define OMAP54XX_L4SEC_DYNDEP_MASK                                     (1 << 14)
+
+/*
+ * Used by CM_DMA_STATICDEP, CM_IPU_STATICDEP, CM_L3INIT_STATICDEP,
+ * CM_MPU_STATICDEP
+ */
+#define OMAP54XX_L4SEC_STATDEP_SHIFT                                   14
+#define OMAP54XX_L4SEC_STATDEP_WIDTH                                   0x1
+#define OMAP54XX_L4SEC_STATDEP_MASK                                    (1 << 14)
+
+/* Used by CM_L3MAIN2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_MIPIEXT_DYNDEP_SHIFT                                  21
+#define OMAP54XX_MIPIEXT_DYNDEP_WIDTH                                  0x1
+#define OMAP54XX_MIPIEXT_DYNDEP_MASK                                   (1 << 21)
+
+/* Used by CM_MPU_STATICDEP */
+#define OMAP54XX_MIPIEXT_STATDEP_SHIFT                                 21
+#define OMAP54XX_MIPIEXT_STATDEP_WIDTH                                 0x1
+#define OMAP54XX_MIPIEXT_STATDEP_MASK                                  (1 << 21)
+
+/*
+ * Used by CM_SSC_MODFREQDIV_DPLL_ABE, CM_SSC_MODFREQDIV_DPLL_CORE,
+ * CM_SSC_MODFREQDIV_DPLL_IVA, CM_SSC_MODFREQDIV_DPLL_MPU,
+ * CM_SSC_MODFREQDIV_DPLL_PER, CM_SSC_MODFREQDIV_DPLL_UNIPRO1,
+ * CM_SSC_MODFREQDIV_DPLL_UNIPRO2, CM_SSC_MODFREQDIV_DPLL_USB
+ */
+#define OMAP54XX_MODFREQDIV_EXPONENT_SHIFT                             8
+#define OMAP54XX_MODFREQDIV_EXPONENT_WIDTH                             0x3
+#define OMAP54XX_MODFREQDIV_EXPONENT_MASK                              (0x7 << 8)
+
+/*
+ * Used by CM_SSC_MODFREQDIV_DPLL_ABE, CM_SSC_MODFREQDIV_DPLL_CORE,
+ * CM_SSC_MODFREQDIV_DPLL_IVA, CM_SSC_MODFREQDIV_DPLL_MPU,
+ * CM_SSC_MODFREQDIV_DPLL_PER, CM_SSC_MODFREQDIV_DPLL_UNIPRO1,
+ * CM_SSC_MODFREQDIV_DPLL_UNIPRO2, CM_SSC_MODFREQDIV_DPLL_USB
+ */
+#define OMAP54XX_MODFREQDIV_MANTISSA_SHIFT                             0
+#define OMAP54XX_MODFREQDIV_MANTISSA_WIDTH                             0x7
+#define OMAP54XX_MODFREQDIV_MANTISSA_MASK                              (0x7f << 0)
+
+/*
+ * Used by CM_ABE_AESS_CLKCTRL, CM_ABE_DMIC_CLKCTRL, CM_ABE_L4_ABE_CLKCTRL,
+ * CM_ABE_MCASP_CLKCTRL, CM_ABE_MCBSP1_CLKCTRL, CM_ABE_MCBSP2_CLKCTRL,
+ * CM_ABE_MCBSP3_CLKCTRL, CM_ABE_MCPDM_CLKCTRL, CM_ABE_SLIMBUS1_CLKCTRL,
+ * CM_ABE_TIMER5_CLKCTRL, CM_ABE_TIMER6_CLKCTRL, CM_ABE_TIMER7_CLKCTRL,
+ * CM_ABE_TIMER8_CLKCTRL, CM_ABE_WD_TIMER3_CLKCTRL, CM_C2C_C2C_CLKCTRL,
+ * CM_C2C_C2C_OCP_FW_CLKCTRL, CM_C2C_MODEM_ICR_CLKCTRL, CM_CAM_CAL_CLKCTRL,
+ * CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, CM_CM_CORE_AON_PROFILING_CLKCTRL,
+ * CM_CM_CORE_PROFILING_CLKCTRL, CM_COREAON_SMARTREFLEX_CORE_CLKCTRL,
+ * CM_COREAON_SMARTREFLEX_MM_CLKCTRL, CM_COREAON_SMARTREFLEX_MPU_CLKCTRL,
+ * CM_CUSTEFUSE_EFUSE_CTRL_CUST_CLKCTRL, CM_DMA_DMA_SYSTEM_CLKCTRL,
+ * CM_DSP_DSP_CLKCTRL, CM_DSS_BB2D_CLKCTRL, CM_DSS_DSS_CLKCTRL,
+ * CM_EMIF_DMM_CLKCTRL, CM_EMIF_EMIF1_CLKCTRL, CM_EMIF_EMIF2_CLKCTRL,
+ * CM_EMIF_EMIF_OCP_FW_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL,
+ * CM_EMU_MPU_EMU_DBG_CLKCTRL, CM_GPU_GPU_CLKCTRL, CM_IPU_IPU_CLKCTRL,
+ * CM_IVA_IVA_CLKCTRL, CM_IVA_SL2_CLKCTRL, CM_L3INIT_HSI_CLKCTRL,
+ * CM_L3INIT_IEEE1500_2_OCP_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL,
+ * CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_MPHY_UNIPRO2_CLKCTRL,
+ * CM_L3INIT_OCP2SCP1_CLKCTRL, CM_L3INIT_OCP2SCP3_CLKCTRL,
+ * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_UNIPRO2_CLKCTRL,
+ * CM_L3INIT_USB_HOST_HS_CLKCTRL, CM_L3INIT_USB_OTG_SS_CLKCTRL,
+ * CM_L3INIT_USB_TLL_HS_CLKCTRL, CM_L3INSTR_CTRL_MODULE_BANDGAP_CLKCTRL,
+ * CM_L3INSTR_DLL_AGING_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL,
+ * CM_L3INSTR_L3_MAIN_3_CLKCTRL, CM_L3INSTR_OCP_WP_NOC_CLKCTRL,
+ * CM_L3MAIN1_L3_MAIN_1_CLKCTRL, CM_L3MAIN2_GPMC_CLKCTRL,
+ * CM_L3MAIN2_L3_MAIN_2_CLKCTRL, CM_L3MAIN2_OCMC_RAM_CLKCTRL,
+ * CM_L4CFG_L4_CFG_CLKCTRL, CM_L4CFG_MAILBOX_CLKCTRL,
+ * CM_L4CFG_OCP2SCP2_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL,
+ * CM_L4CFG_SPINLOCK_CLKCTRL, CM_L4PER_ELM_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL,
+ * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL,
+ * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_GPIO7_CLKCTRL, CM_L4PER_GPIO8_CLKCTRL,
+ * CM_L4PER_HDQ1W_CLKCTRL, CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL,
+ * CM_L4PER_I2C3_CLKCTRL, CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL,
+ * CM_L4PER_L4_PER_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL,
+ * CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MMC3_CLKCTRL,
+ * CM_L4PER_MMC4_CLKCTRL, CM_L4PER_MMC5_CLKCTRL, CM_L4PER_TIMER10_CLKCTRL,
+ * CM_L4PER_TIMER11_CLKCTRL, CM_L4PER_TIMER2_CLKCTRL, CM_L4PER_TIMER3_CLKCTRL,
+ * CM_L4PER_TIMER4_CLKCTRL, CM_L4PER_TIMER9_CLKCTRL, CM_L4PER_UART1_CLKCTRL,
+ * CM_L4PER_UART2_CLKCTRL, CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL,
+ * CM_L4PER_UART5_CLKCTRL, CM_L4PER_UART6_CLKCTRL, CM_L4SEC_AES1_CLKCTRL,
+ * CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL,
+ * CM_L4SEC_DMA_CRYPTO_CLKCTRL, CM_L4SEC_FPKA_CLKCTRL, CM_L4SEC_RNG_CLKCTRL,
+ * CM_L4SEC_SHA2MD5_CLKCTRL, CM_MIPIEXT_LLI_CLKCTRL,
+ * CM_MIPIEXT_LLI_OCP_FW_CLKCTRL, CM_MIPIEXT_MPHY_CLKCTRL, CM_MPU_MPU_CLKCTRL,
+ * CM_MPU_MPU_MPU_DBG_CLKCTRL, CM_WKUPAON_COUNTER_32K_CLKCTRL,
+ * CM_WKUPAON_GPIO1_CLKCTRL, CM_WKUPAON_KBD_CLKCTRL,
+ * CM_WKUPAON_L4_WKUP_CLKCTRL, CM_WKUPAON_SAR_RAM_CLKCTRL,
+ * CM_WKUPAON_TIMER12_CLKCTRL, CM_WKUPAON_TIMER1_CLKCTRL,
+ * CM_WKUPAON_WD_TIMER1_CLKCTRL, CM_WKUPAON_WD_TIMER2_CLKCTRL
+ */
+#define OMAP54XX_MODULEMODE_SHIFT                                      0
+#define OMAP54XX_MODULEMODE_WIDTH                                      0x2
+#define OMAP54XX_MODULEMODE_MASK                                       (0x3 << 0)
+
+/* Used by CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_MPU_DYNDEP_SHIFT                                      19
+#define OMAP54XX_MPU_DYNDEP_WIDTH                                      0x1
+#define OMAP54XX_MPU_DYNDEP_MASK                                       (1 << 19)
+
+/* Used by CM_DSS_DSS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_32KHZ_CLK_SHIFT                             11
+#define OMAP54XX_OPTFCLKEN_32KHZ_CLK_WIDTH                             0x1
+#define OMAP54XX_OPTFCLKEN_32KHZ_CLK_MASK                              (1 << 11)
+
+/* Renamed from OPTFCLKEN_32KHZ_CLK Used by CM_L3INIT_MMC1_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_32KHZ_CLK_8_8_SHIFT                         8
+#define OMAP54XX_OPTFCLKEN_32KHZ_CLK_8_8_WIDTH                         0x1
+#define OMAP54XX_OPTFCLKEN_32KHZ_CLK_8_8_MASK                          (1 << 8)
+
+/* Used by CM_DSS_DSS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_48MHZ_CLK_SHIFT                             9
+#define OMAP54XX_OPTFCLKEN_48MHZ_CLK_WIDTH                             0x1
+#define OMAP54XX_OPTFCLKEN_48MHZ_CLK_MASK                              (1 << 9)
+
+/* Used by CM_COREAON_USB_PHY_CORE_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_CLK32K_SHIFT                                        8
+#define OMAP54XX_OPTFCLKEN_CLK32K_WIDTH                                        0x1
+#define OMAP54XX_OPTFCLKEN_CLK32K_MASK                                 (1 << 8)
+
+/* Used by CM_CAM_ISS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_CTRLCLK_SHIFT                               8
+#define OMAP54XX_OPTFCLKEN_CTRLCLK_WIDTH                               0x1
+#define OMAP54XX_OPTFCLKEN_CTRLCLK_MASK                                        (1 << 8)
+
+/*
+ * Used by CM_L4PER_GPIO2_CLKCTRL, CM_L4PER_GPIO3_CLKCTRL,
+ * CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL, CM_L4PER_GPIO6_CLKCTRL,
+ * CM_L4PER_GPIO7_CLKCTRL, CM_L4PER_GPIO8_CLKCTRL, CM_WKUPAON_GPIO1_CLKCTRL
+ */
+#define OMAP54XX_OPTFCLKEN_DBCLK_SHIFT                                 8
+#define OMAP54XX_OPTFCLKEN_DBCLK_WIDTH                                 0x1
+#define OMAP54XX_OPTFCLKEN_DBCLK_MASK                                  (1 << 8)
+
+/* Used by CM_EMIF_EMIF_DLL_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_DLL_CLK_SHIFT                               8
+#define OMAP54XX_OPTFCLKEN_DLL_CLK_WIDTH                               0x1
+#define OMAP54XX_OPTFCLKEN_DLL_CLK_MASK                                        (1 << 8)
+
+/* Used by CM_DSS_DSS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_DSSCLK_SHIFT                                        8
+#define OMAP54XX_OPTFCLKEN_DSSCLK_WIDTH                                        0x1
+#define OMAP54XX_OPTFCLKEN_DSSCLK_MASK                                 (1 << 8)
+
+/* Used by CM_ABE_SLIMBUS1_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_FCLK0_SHIFT                                 8
+#define OMAP54XX_OPTFCLKEN_FCLK0_WIDTH                                 0x1
+#define OMAP54XX_OPTFCLKEN_FCLK0_MASK                                  (1 << 8)
+
+/* Used by CM_ABE_SLIMBUS1_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_FCLK1_SHIFT                                 9
+#define OMAP54XX_OPTFCLKEN_FCLK1_WIDTH                                 0x1
+#define OMAP54XX_OPTFCLKEN_FCLK1_MASK                                  (1 << 9)
+
+/* Used by CM_ABE_SLIMBUS1_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_FCLK2_SHIFT                                 10
+#define OMAP54XX_OPTFCLKEN_FCLK2_WIDTH                                 0x1
+#define OMAP54XX_OPTFCLKEN_FCLK2_MASK                                  (1 << 10)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_FUNC48M_CLK_SHIFT                           15
+#define OMAP54XX_OPTFCLKEN_FUNC48M_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_FUNC48M_CLK_MASK                            (1 << 15)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P1_CLK_SHIFT                       13
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P1_CLK_WIDTH                       0x1
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P1_CLK_MASK                                (1 << 13)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P2_CLK_SHIFT                       14
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P2_CLK_WIDTH                       0x1
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P2_CLK_MASK                                (1 << 14)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P3_CLK_SHIFT                       7
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P3_CLK_WIDTH                       0x1
+#define OMAP54XX_OPTFCLKEN_HSIC480M_P3_CLK_MASK                                (1 << 7)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P1_CLK_SHIFT                                11
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P1_CLK_WIDTH                                0x1
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P1_CLK_MASK                         (1 << 11)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P2_CLK_SHIFT                                12
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P2_CLK_WIDTH                                0x1
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P2_CLK_MASK                         (1 << 12)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P3_CLK_SHIFT                                6
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P3_CLK_WIDTH                                0x1
+#define OMAP54XX_OPTFCLKEN_HSIC60M_P3_CLK_MASK                         (1 << 6)
+
+/* Used by CM_L3INIT_USB_OTG_SS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_REFCLK960M_SHIFT                            8
+#define OMAP54XX_OPTFCLKEN_REFCLK960M_WIDTH                            0x1
+#define OMAP54XX_OPTFCLKEN_REFCLK960M_MASK                             (1 << 8)
+
+/* Used by CM_L3INIT_SATA_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_REF_CLK_SHIFT                               8
+#define OMAP54XX_OPTFCLKEN_REF_CLK_WIDTH                               0x1
+#define OMAP54XX_OPTFCLKEN_REF_CLK_MASK                                        (1 << 8)
+
+/* Used by CM_WKUPAON_SCRM_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_SCRM_CORE_SHIFT                             8
+#define OMAP54XX_OPTFCLKEN_SCRM_CORE_WIDTH                             0x1
+#define OMAP54XX_OPTFCLKEN_SCRM_CORE_MASK                              (1 << 8)
+
+/* Used by CM_WKUPAON_SCRM_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_SCRM_PER_SHIFT                              9
+#define OMAP54XX_OPTFCLKEN_SCRM_PER_WIDTH                              0x1
+#define OMAP54XX_OPTFCLKEN_SCRM_PER_MASK                               (1 << 9)
+
+/* Used by CM_ABE_SLIMBUS1_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_SLIMBUS_CLK_SHIFT                           11
+#define OMAP54XX_OPTFCLKEN_SLIMBUS_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_SLIMBUS_CLK_MASK                            (1 << 11)
+
+/* Used by CM_DSS_DSS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_SYS_CLK_SHIFT                               10
+#define OMAP54XX_OPTFCLKEN_SYS_CLK_WIDTH                               0x1
+#define OMAP54XX_OPTFCLKEN_SYS_CLK_MASK                                        (1 << 10)
+
+/* Used by CM_MIPIEXT_LLI_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_TXPHY_CLK_SHIFT                             8
+#define OMAP54XX_OPTFCLKEN_TXPHY_CLK_WIDTH                             0x1
+#define OMAP54XX_OPTFCLKEN_TXPHY_CLK_MASK                              (1 << 8)
+
+/* Used by CM_MIPIEXT_LLI_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_TXPHY_LS_CLK_SHIFT                          9
+#define OMAP54XX_OPTFCLKEN_TXPHY_LS_CLK_WIDTH                          0x1
+#define OMAP54XX_OPTFCLKEN_TXPHY_LS_CLK_MASK                           (1 << 9)
+
+/* Used by CM_L3INIT_USB_TLL_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_USB_CH0_CLK_SHIFT                           8
+#define OMAP54XX_OPTFCLKEN_USB_CH0_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_USB_CH0_CLK_MASK                            (1 << 8)
+
+/* Used by CM_L3INIT_USB_TLL_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_USB_CH1_CLK_SHIFT                           9
+#define OMAP54XX_OPTFCLKEN_USB_CH1_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_USB_CH1_CLK_MASK                            (1 << 9)
+
+/* Used by CM_L3INIT_USB_TLL_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_USB_CH2_CLK_SHIFT                           10
+#define OMAP54XX_OPTFCLKEN_USB_CH2_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_USB_CH2_CLK_MASK                            (1 << 10)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_UTMI_P1_CLK_SHIFT                           8
+#define OMAP54XX_OPTFCLKEN_UTMI_P1_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_UTMI_P1_CLK_MASK                            (1 << 8)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_UTMI_P2_CLK_SHIFT                           9
+#define OMAP54XX_OPTFCLKEN_UTMI_P2_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_UTMI_P2_CLK_MASK                            (1 << 9)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OMAP54XX_OPTFCLKEN_UTMI_P3_CLK_SHIFT                           10
+#define OMAP54XX_OPTFCLKEN_UTMI_P3_CLK_WIDTH                           0x1
+#define OMAP54XX_OPTFCLKEN_UTMI_P3_CLK_MASK                            (1 << 10)
+
+/* Used by CM_CORE_AON_DEBUG_OUT, CM_CORE_DEBUG_OUT */
+#define OMAP54XX_OUTPUT_SHIFT                                          0
+#define OMAP54XX_OUTPUT_WIDTH                                          0x20
+#define OMAP54XX_OUTPUT_MASK                                           (0xffffffff << 0)
+
+/* Used by CM_CLKSEL_ABE */
+#define OMAP54XX_PAD_CLKS_GATE_SHIFT                                   8
+#define OMAP54XX_PAD_CLKS_GATE_WIDTH                                   0x1
+#define OMAP54XX_PAD_CLKS_GATE_MASK                                    (1 << 8)
+
+/* Used by CM_RESTORE_ST */
+#define OMAP54XX_PHASE1_COMPLETED_SHIFT                                        0
+#define OMAP54XX_PHASE1_COMPLETED_WIDTH                                        0x1
+#define OMAP54XX_PHASE1_COMPLETED_MASK                                 (1 << 0)
+
+/* Used by CM_RESTORE_ST */
+#define OMAP54XX_PHASE2A_COMPLETED_SHIFT                               1
+#define OMAP54XX_PHASE2A_COMPLETED_WIDTH                               0x1
+#define OMAP54XX_PHASE2A_COMPLETED_MASK                                        (1 << 1)
+
+/* Used by CM_RESTORE_ST */
+#define OMAP54XX_PHASE2B_COMPLETED_SHIFT                               2
+#define OMAP54XX_PHASE2B_COMPLETED_WIDTH                               0x1
+#define OMAP54XX_PHASE2B_COMPLETED_MASK                                        (1 << 2)
+
+/* Used by CM_DYN_DEP_PRESCAL */
+#define OMAP54XX_PRESCAL_SHIFT                                         0
+#define OMAP54XX_PRESCAL_WIDTH                                         0x6
+#define OMAP54XX_PRESCAL_MASK                                          (0x3f << 0)
+
+/* Used by REVISION_CM_CORE, REVISION_CM_CORE_AON */
+#define OMAP54XX_R_RTL_SHIFT                                           11
+#define OMAP54XX_R_RTL_WIDTH                                           0x5
+#define OMAP54XX_R_RTL_MASK                                            (0x1f << 11)
+
+/* Used by CM_L3INIT_USB_HOST_HS_CLKCTRL, CM_L3INIT_USB_TLL_HS_CLKCTRL */
+#define OMAP54XX_SAR_MODE_SHIFT                                                4
+#define OMAP54XX_SAR_MODE_WIDTH                                                0x1
+#define OMAP54XX_SAR_MODE_MASK                                         (1 << 4)
+
+/* Used by REVISION_CM_CORE, REVISION_CM_CORE_AON */
+#define OMAP54XX_SCHEME_SHIFT                                          30
+#define OMAP54XX_SCHEME_WIDTH                                          0x2
+#define OMAP54XX_SCHEME_MASK                                           (0x3 << 30)
+
+/* Used by CM_L4CFG_DYNAMICDEP */
+#define OMAP54XX_SDMA_DYNDEP_SHIFT                                     11
+#define OMAP54XX_SDMA_DYNDEP_WIDTH                                     0x1
+#define OMAP54XX_SDMA_DYNDEP_MASK                                      (1 << 11)
+
+/* Used by CM_IPU_STATICDEP, CM_MPU_STATICDEP */
+#define OMAP54XX_SDMA_STATDEP_SHIFT                                    11
+#define OMAP54XX_SDMA_STATDEP_WIDTH                                    0x1
+#define OMAP54XX_SDMA_STATDEP_MASK                                     (1 << 11)
+
+/* Used by CM_CORE_AON_DEBUG_CFG */
+#define OMAP54XX_SEL0_SHIFT                                            0
+#define OMAP54XX_SEL0_WIDTH                                            0x7
+#define OMAP54XX_SEL0_MASK                                             (0x7f << 0)
+
+/* Renamed from SEL0 Used by CM_CORE_DEBUG_CFG */
+#define OMAP54XX_SEL0_0_7_SHIFT                                                0
+#define OMAP54XX_SEL0_0_7_WIDTH                                                0x8
+#define OMAP54XX_SEL0_0_7_MASK                                         (0xff << 0)
+
+/* Used by CM_CORE_AON_DEBUG_CFG */
+#define OMAP54XX_SEL1_SHIFT                                            8
+#define OMAP54XX_SEL1_WIDTH                                            0x7
+#define OMAP54XX_SEL1_MASK                                             (0x7f << 8)
+
+/* Renamed from SEL1 Used by CM_CORE_DEBUG_CFG */
+#define OMAP54XX_SEL1_CORE_DEBUG_CFG_SHIFT                             8
+#define OMAP54XX_SEL1_CORE_DEBUG_CFG_WIDTH                             0x8
+#define OMAP54XX_SEL1_CORE_DEBUG_CFG_MASK                              (0xff << 8)
+
+/* Used by CM_CORE_AON_DEBUG_CFG */
+#define OMAP54XX_SEL2_SHIFT                                            16
+#define OMAP54XX_SEL2_WIDTH                                            0x7
+#define OMAP54XX_SEL2_MASK                                             (0x7f << 16)
+
+/* Renamed from SEL2 Used by CM_CORE_DEBUG_CFG */
+#define OMAP54XX_SEL2_CORE_DEBUG_CFG_SHIFT                             16
+#define OMAP54XX_SEL2_CORE_DEBUG_CFG_WIDTH                             0x8
+#define OMAP54XX_SEL2_CORE_DEBUG_CFG_MASK                              (0xff << 16)
+
+/* Used by CM_CORE_AON_DEBUG_CFG */
+#define OMAP54XX_SEL3_SHIFT                                            24
+#define OMAP54XX_SEL3_WIDTH                                            0x7
+#define OMAP54XX_SEL3_MASK                                             (0x7f << 24)
+
+/* Renamed from SEL3 Used by CM_CORE_DEBUG_CFG */
+#define OMAP54XX_SEL3_CORE_DEBUG_CFG_SHIFT                             24
+#define OMAP54XX_SEL3_CORE_DEBUG_CFG_WIDTH                             0x8
+#define OMAP54XX_SEL3_CORE_DEBUG_CFG_MASK                              (0xff << 24)
+
+/* Used by CM_CLKSEL_ABE */
+#define OMAP54XX_SLIMBUS1_CLK_GATE_SHIFT                               10
+#define OMAP54XX_SLIMBUS1_CLK_GATE_WIDTH                               0x1
+#define OMAP54XX_SLIMBUS1_CLK_GATE_MASK                                        (1 << 10)
+
+/*
+ * Used by CM_ABE_AESS_CLKCTRL, CM_C2C_C2C_CLKCTRL, CM_CAM_FDIF_CLKCTRL,
+ * CM_CAM_ISS_CLKCTRL, CM_DMA_DMA_SYSTEM_CLKCTRL, CM_DSP_DSP_CLKCTRL,
+ * CM_DSS_BB2D_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL,
+ * CM_GPU_GPU_CLKCTRL, CM_IPU_IPU_CLKCTRL, CM_IVA_IVA_CLKCTRL,
+ * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_IEEE1500_2_OCP_CLKCTRL,
+ * CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_SATA_CLKCTRL,
+ * CM_L3INIT_UNIPRO2_CLKCTRL, CM_L3INIT_USB_HOST_HS_CLKCTRL,
+ * CM_L3INIT_USB_OTG_SS_CLKCTRL, CM_L4SEC_DMA_CRYPTO_CLKCTRL,
+ * CM_MIPIEXT_LLI_CLKCTRL, CM_MPU_MPU_CLKCTRL
+ */
+#define OMAP54XX_STBYST_SHIFT                                          18
+#define OMAP54XX_STBYST_WIDTH                                          0x1
+#define OMAP54XX_STBYST_MASK                                           (1 << 18)
+
+/*
+ * Used by CM_IDLEST_DPLL_ABE, CM_IDLEST_DPLL_CORE, CM_IDLEST_DPLL_IVA,
+ * CM_IDLEST_DPLL_MPU, CM_IDLEST_DPLL_PER, CM_IDLEST_DPLL_UNIPRO1,
+ * CM_IDLEST_DPLL_UNIPRO2, CM_IDLEST_DPLL_USB
+ */
+#define OMAP54XX_ST_DPLL_CLK_SHIFT                                     0
+#define OMAP54XX_ST_DPLL_CLK_WIDTH                                     0x1
+#define OMAP54XX_ST_DPLL_CLK_MASK                                      (1 << 0)
+
+/*
+ * Used by CM_CLKDCOLDO_DPLL_UNIPRO1, CM_CLKDCOLDO_DPLL_UNIPRO2,
+ * CM_CLKDCOLDO_DPLL_USB
+ */
+#define OMAP54XX_ST_DPLL_CLKDCOLDO_SHIFT                               9
+#define OMAP54XX_ST_DPLL_CLKDCOLDO_WIDTH                               0x1
+#define OMAP54XX_ST_DPLL_CLKDCOLDO_MASK                                        (1 << 9)
+
+/*
+ * Used by CM_IDLEST_DPLL_ABE, CM_IDLEST_DPLL_CORE, CM_IDLEST_DPLL_IVA,
+ * CM_IDLEST_DPLL_MPU, CM_IDLEST_DPLL_PER, CM_IDLEST_DPLL_UNIPRO1,
+ * CM_IDLEST_DPLL_UNIPRO2, CM_IDLEST_DPLL_USB
+ */
+#define OMAP54XX_ST_DPLL_INIT_SHIFT                                    4
+#define OMAP54XX_ST_DPLL_INIT_WIDTH                                    0x1
+#define OMAP54XX_ST_DPLL_INIT_MASK                                     (1 << 4)
+
+/*
+ * Used by CM_IDLEST_DPLL_ABE, CM_IDLEST_DPLL_CORE, CM_IDLEST_DPLL_IVA,
+ * CM_IDLEST_DPLL_MPU, CM_IDLEST_DPLL_PER, CM_IDLEST_DPLL_UNIPRO1,
+ * CM_IDLEST_DPLL_UNIPRO2, CM_IDLEST_DPLL_USB
+ */
+#define OMAP54XX_ST_DPLL_MODE_SHIFT                                    1
+#define OMAP54XX_ST_DPLL_MODE_WIDTH                                    0x3
+#define OMAP54XX_ST_DPLL_MODE_MASK                                     (0x7 << 1)
+
+/* Used by CM_CLKSEL_SYS */
+#define OMAP54XX_SYS_CLKSEL_SHIFT                                      0
+#define OMAP54XX_SYS_CLKSEL_WIDTH                                      0x3
+#define OMAP54XX_SYS_CLKSEL_MASK                                       (0x7 << 0)
+
+/*
+ * Used by CM_C2C_DYNAMICDEP, CM_DSP_DYNAMICDEP, CM_EMU_DYNAMICDEP,
+ * CM_IPU_DYNAMICDEP, CM_L3MAIN1_DYNAMICDEP, CM_L3MAIN2_DYNAMICDEP,
+ * CM_L4CFG_DYNAMICDEP, CM_L4PER_DYNAMICDEP, CM_MIPIEXT_DYNAMICDEP,
+ * CM_MPU_DYNAMICDEP
+ */
+#define OMAP54XX_WINDOWSIZE_SHIFT                                      24
+#define OMAP54XX_WINDOWSIZE_WIDTH                                      0x4
+#define OMAP54XX_WINDOWSIZE_MASK                                       (0xf << 24)
+
+/* Used by CM_L3MAIN1_DYNAMICDEP */
+#define OMAP54XX_WKUPAON_DYNDEP_SHIFT                                  15
+#define OMAP54XX_WKUPAON_DYNDEP_WIDTH                                  0x1
+#define OMAP54XX_WKUPAON_DYNDEP_MASK                                   (1 << 15)
+
+/*
+ * Used by CM_DMA_STATICDEP, CM_DSP_STATICDEP, CM_IPU_STATICDEP,
+ * CM_L3INIT_STATICDEP, CM_MPU_STATICDEP
+ */
+#define OMAP54XX_WKUPAON_STATDEP_SHIFT                                 15
+#define OMAP54XX_WKUPAON_STATDEP_WIDTH                                 0x1
+#define OMAP54XX_WKUPAON_STATDEP_MASK                                  (1 << 15)
+
+/* Used by REVISION_CM_CORE, REVISION_CM_CORE_AON */
+#define OMAP54XX_X_MAJOR_SHIFT                                         8
+#define OMAP54XX_X_MAJOR_WIDTH                                         0x3
+#define OMAP54XX_X_MAJOR_MASK                                          (0x7 << 8)
+
+/* Used by REVISION_CM_CORE, REVISION_CM_CORE_AON */
+#define OMAP54XX_Y_MINOR_SHIFT                                         0
+#define OMAP54XX_Y_MINOR_WIDTH                                         0x6
+#define OMAP54XX_Y_MINOR_MASK                                          (0x3f << 0)
+#endif
index 1bc00dc4876c0678e1bbd78e43f0806d822ddeeb..5ae8fe39d6ee5cfa838bea5e693194484be4ef56 100644 (file)
@@ -25,6 +25,8 @@
 #ifndef __ARCH_ARM_MACH_OMAP2_CM1_44XX_H
 #define __ARCH_ARM_MACH_OMAP2_CM1_44XX_H
 
+#include "cm_44xx_54xx.h"
+
 /* CM1 base address */
 #define OMAP4430_CM1_BASE              0x4a004000
 
 #define OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET              0x0088
 #define OMAP4430_CM1_ABE_WDT3_CLKCTRL                  OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0088)
 
-/* Function prototypes */
-extern u32 omap4_cm1_read_inst_reg(s16 inst, u16 idx);
-extern void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 idx);
-extern u32 omap4_cm1_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
-
 #endif
diff --git a/arch/arm/mach-omap2/cm1_54xx.h b/arch/arm/mach-omap2/cm1_54xx.h
new file mode 100644 (file)
index 0000000..90b3348
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * OMAP54xx CM1 instance offset macros
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_CM1_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_CM1_54XX_H
+
+#include "cm_44xx_54xx.h"
+
+/* CM1 base address */
+#define OMAP54XX_CM_CORE_AON_BASE              0x4a004000
+
+#define OMAP54XX_CM_CORE_AON_REGADDR(inst, reg)                                \
+       OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE + (inst) + (reg))
+
+/* CM_CORE_AON instances */
+#define OMAP54XX_CM_CORE_AON_OCP_SOCKET_INST   0x0000
+#define OMAP54XX_CM_CORE_AON_CKGEN_INST                0x0100
+#define OMAP54XX_CM_CORE_AON_MPU_INST          0x0300
+#define OMAP54XX_CM_CORE_AON_DSP_INST          0x0400
+#define OMAP54XX_CM_CORE_AON_ABE_INST          0x0500
+#define OMAP54XX_CM_CORE_AON_RESTORE_INST      0x0e00
+#define OMAP54XX_CM_CORE_AON_INSTR_INST                0x0f00
+
+/* CM_CORE_AON clockdomain register offsets (from instance start) */
+#define OMAP54XX_CM_CORE_AON_MPU_MPU_CDOFFS    0x0000
+#define OMAP54XX_CM_CORE_AON_DSP_DSP_CDOFFS    0x0000
+#define OMAP54XX_CM_CORE_AON_ABE_ABE_CDOFFS    0x0000
+
+/* CM_CORE_AON */
+
+/* CM_CORE_AON.OCP_SOCKET_CM_CORE_AON register offsets */
+#define OMAP54XX_REVISION_CM_CORE_AON_OFFSET                   0x0000
+#define OMAP54XX_CM_CM_CORE_AON_PROFILING_CLKCTRL_OFFSET       0x0040
+#define OMAP54XX_CM_CM_CORE_AON_PROFILING_CLKCTRL              OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_OCP_SOCKET_INST, 0x0040)
+#define OMAP54XX_CM_CORE_AON_DEBUG_CFG_OFFSET                  0x0080
+#define OMAP54XX_CM_CORE_AON_DEBUG_OUT_OFFSET                  0x0084
+#define OMAP54XX_CM_CORE_AON_DEBUG_MPU_FD_TRANS_OFFSET         0x0090
+#define OMAP54XX_CM_CORE_AON_DEBUG_DSP_FD_TRANS_OFFSET         0x0094
+#define OMAP54XX_CM_CORE_AON_DEBUG_ABE_FD_TRANS_OFFSET         0x0098
+#define OMAP54XX_CM_CORE_AON_DEBUG_ABE_FD_TRANS2_OFFSET                0x009c
+#define OMAP54XX_CM_CORE_AON_DEBUG_CM_CORE_AON_FD_TRANS_OFFSET 0x00a0
+#define OMAP54XX_CM_CORE_AON_DEBUG_C2C_FD_TRANS_OFFSET         0x00a4
+#define OMAP54XX_CM_CORE_AON_DEBUG_CAM_FD_TRANS_OFFSET         0x00a8
+#define OMAP54XX_CM_CORE_AON_DEBUG_COREAON_FD_TRANS_OFFSET     0x00ac
+#define OMAP54XX_CM_CORE_AON_DEBUG_CUSTEFUSE_FD_TRANS_OFFSET   0x00b0
+#define OMAP54XX_CM_CORE_AON_DEBUG_DMA_FD_TRANS_OFFSET         0x00b4
+#define OMAP54XX_CM_CORE_AON_DEBUG_DSS_FD_TRANS_OFFSET         0x00b8
+#define OMAP54XX_CM_CORE_AON_DEBUG_EMIF_FD_TRANS_OFFSET                0x00bc
+#define OMAP54XX_CM_CORE_AON_DEBUG_GPU_FD_TRANS_OFFSET         0x00c0
+#define OMAP54XX_CM_CORE_AON_DEBUG_IPU_FD_TRANS_OFFSET         0x00c4
+#define OMAP54XX_CM_CORE_AON_DEBUG_IVA_FD_TRANS_OFFSET         0x00c8
+#define OMAP54XX_CM_CORE_AON_DEBUG_L3INIT_FD_TRANS_OFFSET      0x00cc
+#define OMAP54XX_CM_CORE_AON_DEBUG_L3INIT_FD_TRANS2_OFFSET     0x00d0
+#define OMAP54XX_CM_CORE_AON_DEBUG_L3INSTR_FD_TRANS_OFFSET     0x00d4
+#define OMAP54XX_CM_CORE_AON_DEBUG_L3MAIN1_FD_TRANS_OFFSET     0x00d8
+#define OMAP54XX_CM_CORE_AON_DEBUG_L3MAIN2_FD_TRANS_OFFSET     0x00dc
+#define OMAP54XX_CM_CORE_AON_DEBUG_L4CFG_FD_TRANS_OFFSET       0x00e0
+#define OMAP54XX_CM_CORE_AON_DEBUG_L4PER_FD_TRANS_OFFSET       0x00e4
+#define OMAP54XX_CM_CORE_AON_DEBUG_L4PER_FD_TRANS2_OFFSET      0x00e8
+#define OMAP54XX_CM_CORE_AON_DEBUG_L4SEC_FD_TRANS_OFFSET       0x00ec
+#define OMAP54XX_CM_CORE_AON_DEBUG_MIPIEXT_FD_TRANS_OFFSET     0x00f0
+
+/* CM_CORE_AON.CKGEN_CM_CORE_AON register offsets */
+#define OMAP54XX_CM_CLKSEL_CORE_OFFSET                         0x0000
+#define OMAP54XX_CM_CLKSEL_CORE                                        OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0000)
+#define OMAP54XX_CM_CLKSEL_ABE_OFFSET                          0x0008
+#define OMAP54XX_CM_CLKSEL_ABE                                 OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0008)
+#define OMAP54XX_CM_DLL_CTRL_OFFSET                            0x0010
+#define OMAP54XX_CM_CLKMODE_DPLL_CORE_OFFSET                   0x0020
+#define OMAP54XX_CM_CLKMODE_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0020)
+#define OMAP54XX_CM_IDLEST_DPLL_CORE_OFFSET                    0x0024
+#define OMAP54XX_CM_IDLEST_DPLL_CORE                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0024)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_CORE_OFFSET                  0x0028
+#define OMAP54XX_CM_AUTOIDLE_DPLL_CORE                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0028)
+#define OMAP54XX_CM_CLKSEL_DPLL_CORE_OFFSET                    0x002c
+#define OMAP54XX_CM_CLKSEL_DPLL_CORE                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x002c)
+#define OMAP54XX_CM_DIV_M2_DPLL_CORE_OFFSET                    0x0030
+#define OMAP54XX_CM_DIV_M2_DPLL_CORE                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0030)
+#define OMAP54XX_CM_DIV_M3_DPLL_CORE_OFFSET                    0x0034
+#define OMAP54XX_CM_DIV_M3_DPLL_CORE                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0034)
+#define OMAP54XX_CM_DIV_H11_DPLL_CORE_OFFSET                   0x0038
+#define OMAP54XX_CM_DIV_H11_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0038)
+#define OMAP54XX_CM_DIV_H12_DPLL_CORE_OFFSET                   0x003c
+#define OMAP54XX_CM_DIV_H12_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x003c)
+#define OMAP54XX_CM_DIV_H13_DPLL_CORE_OFFSET                   0x0040
+#define OMAP54XX_CM_DIV_H13_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0040)
+#define OMAP54XX_CM_DIV_H14_DPLL_CORE_OFFSET                   0x0044
+#define OMAP54XX_CM_DIV_H14_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0044)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_CORE_OFFSET            0x0048
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_CORE_OFFSET            0x004c
+#define OMAP54XX_CM_DIV_H21_DPLL_CORE_OFFSET                   0x0050
+#define OMAP54XX_CM_DIV_H21_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0050)
+#define OMAP54XX_CM_DIV_H22_DPLL_CORE_OFFSET                   0x0054
+#define OMAP54XX_CM_DIV_H22_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0054)
+#define OMAP54XX_CM_DIV_H23_DPLL_CORE_OFFSET                   0x0058
+#define OMAP54XX_CM_DIV_H23_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0058)
+#define OMAP54XX_CM_DIV_H24_DPLL_CORE_OFFSET                   0x005c
+#define OMAP54XX_CM_DIV_H24_DPLL_CORE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x005c)
+#define OMAP54XX_CM_CLKMODE_DPLL_MPU_OFFSET                    0x0060
+#define OMAP54XX_CM_CLKMODE_DPLL_MPU                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0060)
+#define OMAP54XX_CM_IDLEST_DPLL_MPU_OFFSET                     0x0064
+#define OMAP54XX_CM_IDLEST_DPLL_MPU                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0064)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_MPU_OFFSET                   0x0068
+#define OMAP54XX_CM_AUTOIDLE_DPLL_MPU                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0068)
+#define OMAP54XX_CM_CLKSEL_DPLL_MPU_OFFSET                     0x006c
+#define OMAP54XX_CM_CLKSEL_DPLL_MPU                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x006c)
+#define OMAP54XX_CM_DIV_M2_DPLL_MPU_OFFSET                     0x0070
+#define OMAP54XX_CM_DIV_M2_DPLL_MPU                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x0070)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_MPU_OFFSET             0x0088
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_MPU_OFFSET             0x008c
+#define OMAP54XX_CM_BYPCLK_DPLL_MPU_OFFSET                     0x009c
+#define OMAP54XX_CM_BYPCLK_DPLL_MPU                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x009c)
+#define OMAP54XX_CM_CLKMODE_DPLL_IVA_OFFSET                    0x00a0
+#define OMAP54XX_CM_CLKMODE_DPLL_IVA                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00a0)
+#define OMAP54XX_CM_IDLEST_DPLL_IVA_OFFSET                     0x00a4
+#define OMAP54XX_CM_IDLEST_DPLL_IVA                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00a4)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_IVA_OFFSET                   0x00a8
+#define OMAP54XX_CM_AUTOIDLE_DPLL_IVA                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00a8)
+#define OMAP54XX_CM_CLKSEL_DPLL_IVA_OFFSET                     0x00ac
+#define OMAP54XX_CM_CLKSEL_DPLL_IVA                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00ac)
+#define OMAP54XX_CM_DIV_H11_DPLL_IVA_OFFSET                    0x00b8
+#define OMAP54XX_CM_DIV_H11_DPLL_IVA                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00b8)
+#define OMAP54XX_CM_DIV_H12_DPLL_IVA_OFFSET                    0x00bc
+#define OMAP54XX_CM_DIV_H12_DPLL_IVA                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00bc)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_IVA_OFFSET             0x00c8
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_IVA_OFFSET             0x00cc
+#define OMAP54XX_CM_BYPCLK_DPLL_IVA_OFFSET                     0x00dc
+#define OMAP54XX_CM_BYPCLK_DPLL_IVA                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00dc)
+#define OMAP54XX_CM_CLKMODE_DPLL_ABE_OFFSET                    0x00e0
+#define OMAP54XX_CM_CLKMODE_DPLL_ABE                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00e0)
+#define OMAP54XX_CM_IDLEST_DPLL_ABE_OFFSET                     0x00e4
+#define OMAP54XX_CM_IDLEST_DPLL_ABE                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00e4)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_ABE_OFFSET                   0x00e8
+#define OMAP54XX_CM_AUTOIDLE_DPLL_ABE                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00e8)
+#define OMAP54XX_CM_CLKSEL_DPLL_ABE_OFFSET                     0x00ec
+#define OMAP54XX_CM_CLKSEL_DPLL_ABE                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00ec)
+#define OMAP54XX_CM_DIV_M2_DPLL_ABE_OFFSET                     0x00f0
+#define OMAP54XX_CM_DIV_M2_DPLL_ABE                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00f0)
+#define OMAP54XX_CM_DIV_M3_DPLL_ABE_OFFSET                     0x00f4
+#define OMAP54XX_CM_DIV_M3_DPLL_ABE                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_CKGEN_INST, 0x00f4)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_ABE_OFFSET             0x0108
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_ABE_OFFSET             0x010c
+#define OMAP54XX_CM_SHADOW_FREQ_CONFIG1_OFFSET                 0x0160
+#define OMAP54XX_CM_SHADOW_FREQ_CONFIG2_OFFSET                 0x0164
+#define OMAP54XX_CM_DYN_DEP_PRESCAL_OFFSET                     0x0170
+#define OMAP54XX_CM_RESTORE_ST_OFFSET                          0x0180
+
+/* CM_CORE_AON.MPU_CM_CORE_AON register offsets */
+#define OMAP54XX_CM_MPU_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_MPU_STATICDEP_OFFSET                       0x0004
+#define OMAP54XX_CM_MPU_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET                     0x0020
+#define OMAP54XX_CM_MPU_MPU_CLKCTRL                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_MPU_INST, 0x0020)
+#define OMAP54XX_CM_MPU_MPU_MPU_DBG_CLKCTRL_OFFSET             0x0028
+#define OMAP54XX_CM_MPU_MPU_MPU_DBG_CLKCTRL                    OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_MPU_INST, 0x0028)
+
+/* CM_CORE_AON.DSP_CM_CORE_AON register offsets */
+#define OMAP54XX_CM_DSP_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_DSP_STATICDEP_OFFSET                       0x0004
+#define OMAP54XX_CM_DSP_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_DSP_DSP_CLKCTRL_OFFSET                     0x0020
+#define OMAP54XX_CM_DSP_DSP_CLKCTRL                            OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_DSP_INST, 0x0020)
+
+/* CM_CORE_AON.ABE_CM_CORE_AON register offsets */
+#define OMAP54XX_CM_ABE_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_ABE_L4_ABE_CLKCTRL_OFFSET                  0x0020
+#define OMAP54XX_CM_ABE_L4_ABE_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0020)
+#define OMAP54XX_CM_ABE_AESS_CLKCTRL_OFFSET                    0x0028
+#define OMAP54XX_CM_ABE_AESS_CLKCTRL                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0028)
+#define OMAP54XX_CM_ABE_MCPDM_CLKCTRL_OFFSET                   0x0030
+#define OMAP54XX_CM_ABE_MCPDM_CLKCTRL                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0030)
+#define OMAP54XX_CM_ABE_DMIC_CLKCTRL_OFFSET                    0x0038
+#define OMAP54XX_CM_ABE_DMIC_CLKCTRL                           OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0038)
+#define OMAP54XX_CM_ABE_MCASP_CLKCTRL_OFFSET                   0x0040
+#define OMAP54XX_CM_ABE_MCASP_CLKCTRL                          OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0040)
+#define OMAP54XX_CM_ABE_MCBSP1_CLKCTRL_OFFSET                  0x0048
+#define OMAP54XX_CM_ABE_MCBSP1_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0048)
+#define OMAP54XX_CM_ABE_MCBSP2_CLKCTRL_OFFSET                  0x0050
+#define OMAP54XX_CM_ABE_MCBSP2_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0050)
+#define OMAP54XX_CM_ABE_MCBSP3_CLKCTRL_OFFSET                  0x0058
+#define OMAP54XX_CM_ABE_MCBSP3_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0058)
+#define OMAP54XX_CM_ABE_SLIMBUS1_CLKCTRL_OFFSET                        0x0060
+#define OMAP54XX_CM_ABE_SLIMBUS1_CLKCTRL                       OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0060)
+#define OMAP54XX_CM_ABE_TIMER5_CLKCTRL_OFFSET                  0x0068
+#define OMAP54XX_CM_ABE_TIMER5_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0068)
+#define OMAP54XX_CM_ABE_TIMER6_CLKCTRL_OFFSET                  0x0070
+#define OMAP54XX_CM_ABE_TIMER6_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0070)
+#define OMAP54XX_CM_ABE_TIMER7_CLKCTRL_OFFSET                  0x0078
+#define OMAP54XX_CM_ABE_TIMER7_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0078)
+#define OMAP54XX_CM_ABE_TIMER8_CLKCTRL_OFFSET                  0x0080
+#define OMAP54XX_CM_ABE_TIMER8_CLKCTRL                         OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0080)
+#define OMAP54XX_CM_ABE_WD_TIMER3_CLKCTRL_OFFSET               0x0088
+#define OMAP54XX_CM_ABE_WD_TIMER3_CLKCTRL                      OMAP54XX_CM_CORE_AON_REGADDR(OMAP54XX_CM_CORE_AON_ABE_INST, 0x0088)
+
+#endif
index b9de72da1a8e26d751ce9555998e6c956efc0723..ee5136d7cddac06029d7eb12313602c59943c6ea 100644 (file)
@@ -25,6 +25,8 @@
 #ifndef __ARCH_ARM_MACH_OMAP2_CM2_44XX_H
 #define __ARCH_ARM_MACH_OMAP2_CM2_44XX_H
 
+#include "cm_44xx_54xx.h"
+
 /* CM2 base address */
 #define OMAP4430_CM2_BASE              0x4a008000
 
 #define OMAP4_CM_CEFUSE_CEFUSE_CLKCTRL_OFFSET          0x0020
 #define OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL              OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_INST, 0x0020)
 
-/* Function prototypes */
-extern u32 omap4_cm2_read_inst_reg(s16 inst, u16 idx);
-extern void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 idx);
-extern u32 omap4_cm2_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
-
 #endif
diff --git a/arch/arm/mach-omap2/cm2_54xx.h b/arch/arm/mach-omap2/cm2_54xx.h
new file mode 100644 (file)
index 0000000..2683231
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * OMAP54xx CM2 instance offset macros
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_CM2_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_CM2_54XX_H
+
+#include "cm_44xx_54xx.h"
+
+/* CM2 base address */
+#define OMAP54XX_CM_CORE_BASE          0x4a008000
+
+#define OMAP54XX_CM_CORE_REGADDR(inst, reg)                            \
+       OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE + (inst) + (reg))
+
+/* CM_CORE instances */
+#define OMAP54XX_CM_CORE_OCP_SOCKET_INST       0x0000
+#define OMAP54XX_CM_CORE_CKGEN_INST            0x0100
+#define OMAP54XX_CM_CORE_COREAON_INST          0x0600
+#define OMAP54XX_CM_CORE_CORE_INST             0x0700
+#define OMAP54XX_CM_CORE_IVA_INST              0x1200
+#define OMAP54XX_CM_CORE_CAM_INST              0x1300
+#define OMAP54XX_CM_CORE_DSS_INST              0x1400
+#define OMAP54XX_CM_CORE_GPU_INST              0x1500
+#define OMAP54XX_CM_CORE_L3INIT_INST           0x1600
+#define OMAP54XX_CM_CORE_CUSTEFUSE_INST                0x1700
+#define OMAP54XX_CM_CORE_RESTORE_INST          0x1e00
+#define OMAP54XX_CM_CORE_INSTR_INST            0x1f00
+
+/* CM_CORE clockdomain register offsets (from instance start) */
+#define OMAP54XX_CM_CORE_COREAON_COREAON_CDOFFS                0x0000
+#define OMAP54XX_CM_CORE_CORE_L3MAIN1_CDOFFS           0x0000
+#define OMAP54XX_CM_CORE_CORE_L3MAIN2_CDOFFS           0x0100
+#define OMAP54XX_CM_CORE_CORE_IPU_CDOFFS               0x0200
+#define OMAP54XX_CM_CORE_CORE_DMA_CDOFFS               0x0300
+#define OMAP54XX_CM_CORE_CORE_EMIF_CDOFFS              0x0400
+#define OMAP54XX_CM_CORE_CORE_C2C_CDOFFS               0x0500
+#define OMAP54XX_CM_CORE_CORE_L4CFG_CDOFFS             0x0600
+#define OMAP54XX_CM_CORE_CORE_L3INSTR_CDOFFS           0x0700
+#define OMAP54XX_CM_CORE_CORE_MIPIEXT_CDOFFS           0x0800
+#define OMAP54XX_CM_CORE_CORE_L4PER_CDOFFS             0x0900
+#define OMAP54XX_CM_CORE_CORE_L4SEC_CDOFFS             0x0a80
+#define OMAP54XX_CM_CORE_IVA_IVA_CDOFFS                        0x0000
+#define OMAP54XX_CM_CORE_CAM_CAM_CDOFFS                        0x0000
+#define OMAP54XX_CM_CORE_DSS_DSS_CDOFFS                        0x0000
+#define OMAP54XX_CM_CORE_GPU_GPU_CDOFFS                        0x0000
+#define OMAP54XX_CM_CORE_L3INIT_L3INIT_CDOFFS          0x0000
+#define OMAP54XX_CM_CORE_CUSTEFUSE_CUSTEFUSE_CDOFFS    0x0000
+
+/* CM_CORE */
+
+/* CM_CORE.OCP_SOCKET_CM_CORE register offsets */
+#define OMAP54XX_REVISION_CM_CORE_OFFSET                       0x0000
+#define OMAP54XX_CM_CM_CORE_PROFILING_CLKCTRL_OFFSET           0x0040
+#define OMAP54XX_CM_CM_CORE_PROFILING_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_OCP_SOCKET_INST, 0x0040)
+#define OMAP54XX_CM_CORE_DEBUG_CFG_OFFSET                      0x0080
+#define OMAP54XX_CM_CORE_DEBUG_OUT_OFFSET                      0x0084
+
+/* CM_CORE.CKGEN_CM_CORE register offsets */
+#define OMAP54XX_CM_CLKSEL_USB_60MHZ_OFFSET                    0x0004
+#define OMAP54XX_CM_CLKSEL_USB_60MHZ                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0004)
+#define OMAP54XX_CM_CLKMODE_DPLL_PER_OFFSET                    0x0040
+#define OMAP54XX_CM_CLKMODE_DPLL_PER                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0040)
+#define OMAP54XX_CM_IDLEST_DPLL_PER_OFFSET                     0x0044
+#define OMAP54XX_CM_IDLEST_DPLL_PER                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0044)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_PER_OFFSET                   0x0048
+#define OMAP54XX_CM_AUTOIDLE_DPLL_PER                          OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0048)
+#define OMAP54XX_CM_CLKSEL_DPLL_PER_OFFSET                     0x004c
+#define OMAP54XX_CM_CLKSEL_DPLL_PER                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x004c)
+#define OMAP54XX_CM_DIV_M2_DPLL_PER_OFFSET                     0x0050
+#define OMAP54XX_CM_DIV_M2_DPLL_PER                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0050)
+#define OMAP54XX_CM_DIV_M3_DPLL_PER_OFFSET                     0x0054
+#define OMAP54XX_CM_DIV_M3_DPLL_PER                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0054)
+#define OMAP54XX_CM_DIV_H11_DPLL_PER_OFFSET                    0x0058
+#define OMAP54XX_CM_DIV_H11_DPLL_PER                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0058)
+#define OMAP54XX_CM_DIV_H12_DPLL_PER_OFFSET                    0x005c
+#define OMAP54XX_CM_DIV_H12_DPLL_PER                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x005c)
+#define OMAP54XX_CM_DIV_H13_DPLL_PER_OFFSET                    0x0060
+#define OMAP54XX_CM_DIV_H13_DPLL_PER                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0060)
+#define OMAP54XX_CM_DIV_H14_DPLL_PER_OFFSET                    0x0064
+#define OMAP54XX_CM_DIV_H14_DPLL_PER                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0064)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_PER_OFFSET             0x0068
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_PER_OFFSET             0x006c
+#define OMAP54XX_CM_CLKMODE_DPLL_USB_OFFSET                    0x0080
+#define OMAP54XX_CM_CLKMODE_DPLL_USB                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0080)
+#define OMAP54XX_CM_IDLEST_DPLL_USB_OFFSET                     0x0084
+#define OMAP54XX_CM_IDLEST_DPLL_USB                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0084)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_USB_OFFSET                   0x0088
+#define OMAP54XX_CM_AUTOIDLE_DPLL_USB                          OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0088)
+#define OMAP54XX_CM_CLKSEL_DPLL_USB_OFFSET                     0x008c
+#define OMAP54XX_CM_CLKSEL_DPLL_USB                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x008c)
+#define OMAP54XX_CM_DIV_M2_DPLL_USB_OFFSET                     0x0090
+#define OMAP54XX_CM_DIV_M2_DPLL_USB                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0090)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_USB_OFFSET             0x00a8
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_USB_OFFSET             0x00ac
+#define OMAP54XX_CM_CLKDCOLDO_DPLL_USB_OFFSET                  0x00b4
+#define OMAP54XX_CM_CLKDCOLDO_DPLL_USB                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00b4)
+#define OMAP54XX_CM_CLKMODE_DPLL_UNIPRO2_OFFSET                        0x00c0
+#define OMAP54XX_CM_CLKMODE_DPLL_UNIPRO2                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00c0)
+#define OMAP54XX_CM_IDLEST_DPLL_UNIPRO2_OFFSET                 0x00c4
+#define OMAP54XX_CM_IDLEST_DPLL_UNIPRO2                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00c4)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_UNIPRO2_OFFSET               0x00c8
+#define OMAP54XX_CM_AUTOIDLE_DPLL_UNIPRO2                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00c8)
+#define OMAP54XX_CM_CLKSEL_DPLL_UNIPRO2_OFFSET                 0x00cc
+#define OMAP54XX_CM_CLKSEL_DPLL_UNIPRO2                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00cc)
+#define OMAP54XX_CM_DIV_M2_DPLL_UNIPRO2_OFFSET                 0x00d0
+#define OMAP54XX_CM_DIV_M2_DPLL_UNIPRO2                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00d0)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_UNIPRO2_OFFSET         0x00e8
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_UNIPRO2_OFFSET         0x00ec
+#define OMAP54XX_CM_CLKDCOLDO_DPLL_UNIPRO2_OFFSET              0x00f4
+#define OMAP54XX_CM_CLKDCOLDO_DPLL_UNIPRO2                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x00f4)
+#define OMAP54XX_CM_CLKMODE_DPLL_UNIPRO1_OFFSET                        0x0100
+#define OMAP54XX_CM_CLKMODE_DPLL_UNIPRO1                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0100)
+#define OMAP54XX_CM_IDLEST_DPLL_UNIPRO1_OFFSET                 0x0104
+#define OMAP54XX_CM_IDLEST_DPLL_UNIPRO1                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0104)
+#define OMAP54XX_CM_AUTOIDLE_DPLL_UNIPRO1_OFFSET               0x0108
+#define OMAP54XX_CM_AUTOIDLE_DPLL_UNIPRO1                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0108)
+#define OMAP54XX_CM_CLKSEL_DPLL_UNIPRO1_OFFSET                 0x010c
+#define OMAP54XX_CM_CLKSEL_DPLL_UNIPRO1                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x010c)
+#define OMAP54XX_CM_DIV_M2_DPLL_UNIPRO1_OFFSET                 0x0110
+#define OMAP54XX_CM_DIV_M2_DPLL_UNIPRO1                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0110)
+#define OMAP54XX_CM_SSC_DELTAMSTEP_DPLL_UNIPRO1_OFFSET         0x0128
+#define OMAP54XX_CM_SSC_MODFREQDIV_DPLL_UNIPRO1_OFFSET         0x012c
+#define OMAP54XX_CM_CLKDCOLDO_DPLL_UNIPRO1_OFFSET              0x0134
+#define OMAP54XX_CM_CLKDCOLDO_DPLL_UNIPRO1                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CKGEN_INST, 0x0134)
+
+/* CM_CORE.COREAON_CM_CORE register offsets */
+#define OMAP54XX_CM_COREAON_CLKSTCTRL_OFFSET                   0x0000
+#define OMAP54XX_CM_COREAON_SMARTREFLEX_MPU_CLKCTRL_OFFSET     0x0028
+#define OMAP54XX_CM_COREAON_SMARTREFLEX_MPU_CLKCTRL            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_COREAON_INST, 0x0028)
+#define OMAP54XX_CM_COREAON_SMARTREFLEX_MM_CLKCTRL_OFFSET      0x0030
+#define OMAP54XX_CM_COREAON_SMARTREFLEX_MM_CLKCTRL             OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_COREAON_INST, 0x0030)
+#define OMAP54XX_CM_COREAON_SMARTREFLEX_CORE_CLKCTRL_OFFSET    0x0038
+#define OMAP54XX_CM_COREAON_SMARTREFLEX_CORE_CLKCTRL           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_COREAON_INST, 0x0038)
+#define OMAP54XX_CM_COREAON_USB_PHY_CORE_CLKCTRL_OFFSET                0x0040
+#define OMAP54XX_CM_COREAON_USB_PHY_CORE_CLKCTRL               OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_COREAON_INST, 0x0040)
+#define OMAP54XX_CM_COREAON_IO_SRCOMP_CLKCTRL_OFFSET           0x0050
+#define OMAP54XX_CM_COREAON_IO_SRCOMP_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_COREAON_INST, 0x0050)
+
+/* CM_CORE.CORE_CM_CORE register offsets */
+#define OMAP54XX_CM_L3MAIN1_CLKSTCTRL_OFFSET                   0x0000
+#define OMAP54XX_CM_L3MAIN1_DYNAMICDEP_OFFSET                  0x0008
+#define OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL_OFFSET           0x0020
+#define OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0020)
+#define OMAP54XX_CM_L3MAIN2_CLKSTCTRL_OFFSET                   0x0100
+#define OMAP54XX_CM_L3MAIN2_DYNAMICDEP_OFFSET                  0x0108
+#define OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL_OFFSET           0x0120
+#define OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0120)
+#define OMAP54XX_CM_L3MAIN2_GPMC_CLKCTRL_OFFSET                        0x0128
+#define OMAP54XX_CM_L3MAIN2_GPMC_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0128)
+#define OMAP54XX_CM_L3MAIN2_OCMC_RAM_CLKCTRL_OFFSET            0x0130
+#define OMAP54XX_CM_L3MAIN2_OCMC_RAM_CLKCTRL                   OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0130)
+#define OMAP54XX_CM_IPU_CLKSTCTRL_OFFSET                       0x0200
+#define OMAP54XX_CM_IPU_STATICDEP_OFFSET                       0x0204
+#define OMAP54XX_CM_IPU_DYNAMICDEP_OFFSET                      0x0208
+#define OMAP54XX_CM_IPU_IPU_CLKCTRL_OFFSET                     0x0220
+#define OMAP54XX_CM_IPU_IPU_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0220)
+#define OMAP54XX_CM_DMA_CLKSTCTRL_OFFSET                       0x0300
+#define OMAP54XX_CM_DMA_STATICDEP_OFFSET                       0x0304
+#define OMAP54XX_CM_DMA_DYNAMICDEP_OFFSET                      0x0308
+#define OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET              0x0320
+#define OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0320)
+#define OMAP54XX_CM_EMIF_CLKSTCTRL_OFFSET                      0x0400
+#define OMAP54XX_CM_EMIF_DMM_CLKCTRL_OFFSET                    0x0420
+#define OMAP54XX_CM_EMIF_DMM_CLKCTRL                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0420)
+#define OMAP54XX_CM_EMIF_EMIF_OCP_FW_CLKCTRL_OFFSET            0x0428
+#define OMAP54XX_CM_EMIF_EMIF_OCP_FW_CLKCTRL                   OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0428)
+#define OMAP54XX_CM_EMIF_EMIF1_CLKCTRL_OFFSET                  0x0430
+#define OMAP54XX_CM_EMIF_EMIF1_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0430)
+#define OMAP54XX_CM_EMIF_EMIF2_CLKCTRL_OFFSET                  0x0438
+#define OMAP54XX_CM_EMIF_EMIF2_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0438)
+#define OMAP54XX_CM_EMIF_EMIF_DLL_CLKCTRL_OFFSET               0x0440
+#define OMAP54XX_CM_EMIF_EMIF_DLL_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0440)
+#define OMAP54XX_CM_C2C_CLKSTCTRL_OFFSET                       0x0500
+#define OMAP54XX_CM_C2C_STATICDEP_OFFSET                       0x0504
+#define OMAP54XX_CM_C2C_DYNAMICDEP_OFFSET                      0x0508
+#define OMAP54XX_CM_C2C_C2C_CLKCTRL_OFFSET                     0x0520
+#define OMAP54XX_CM_C2C_C2C_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0520)
+#define OMAP54XX_CM_C2C_MODEM_ICR_CLKCTRL_OFFSET               0x0528
+#define OMAP54XX_CM_C2C_MODEM_ICR_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0528)
+#define OMAP54XX_CM_C2C_C2C_OCP_FW_CLKCTRL_OFFSET              0x0530
+#define OMAP54XX_CM_C2C_C2C_OCP_FW_CLKCTRL                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0530)
+#define OMAP54XX_CM_L4CFG_CLKSTCTRL_OFFSET                     0x0600
+#define OMAP54XX_CM_L4CFG_DYNAMICDEP_OFFSET                    0x0608
+#define OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET                        0x0620
+#define OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0620)
+#define OMAP54XX_CM_L4CFG_SPINLOCK_CLKCTRL_OFFSET              0x0628
+#define OMAP54XX_CM_L4CFG_SPINLOCK_CLKCTRL                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0628)
+#define OMAP54XX_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET               0x0630
+#define OMAP54XX_CM_L4CFG_MAILBOX_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0630)
+#define OMAP54XX_CM_L4CFG_SAR_ROM_CLKCTRL_OFFSET               0x0638
+#define OMAP54XX_CM_L4CFG_SAR_ROM_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0638)
+#define OMAP54XX_CM_L4CFG_OCP2SCP2_CLKCTRL_OFFSET              0x0640
+#define OMAP54XX_CM_L4CFG_OCP2SCP2_CLKCTRL                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0640)
+#define OMAP54XX_CM_L3INSTR_CLKSTCTRL_OFFSET                   0x0700
+#define OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL_OFFSET           0x0720
+#define OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0720)
+#define OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET            0x0728
+#define OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL                   OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0728)
+#define OMAP54XX_CM_L3INSTR_OCP_WP_NOC_CLKCTRL_OFFSET          0x0740
+#define OMAP54XX_CM_L3INSTR_OCP_WP_NOC_CLKCTRL                 OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0740)
+#define OMAP54XX_CM_L3INSTR_DLL_AGING_CLKCTRL_OFFSET           0x0748
+#define OMAP54XX_CM_L3INSTR_DLL_AGING_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0748)
+#define OMAP54XX_CM_L3INSTR_CTRL_MODULE_BANDGAP_CLKCTRL_OFFSET 0x0750
+#define OMAP54XX_CM_L3INSTR_CTRL_MODULE_BANDGAP_CLKCTRL                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0750)
+#define OMAP54XX_CM_MIPIEXT_CLKSTCTRL_OFFSET                   0x0800
+#define OMAP54XX_CM_MIPIEXT_STATICDEP_OFFSET                   0x0804
+#define OMAP54XX_CM_MIPIEXT_DYNAMICDEP_OFFSET                  0x0808
+#define OMAP54XX_CM_MIPIEXT_LLI_CLKCTRL_OFFSET                 0x0820
+#define OMAP54XX_CM_MIPIEXT_LLI_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0820)
+#define OMAP54XX_CM_MIPIEXT_LLI_OCP_FW_CLKCTRL_OFFSET          0x0828
+#define OMAP54XX_CM_MIPIEXT_LLI_OCP_FW_CLKCTRL                 OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0828)
+#define OMAP54XX_CM_MIPIEXT_MPHY_CLKCTRL_OFFSET                        0x0830
+#define OMAP54XX_CM_MIPIEXT_MPHY_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0830)
+#define OMAP54XX_CM_L4PER_CLKSTCTRL_OFFSET                     0x0900
+#define OMAP54XX_CM_L4PER_DYNAMICDEP_OFFSET                    0x0908
+#define OMAP54XX_CM_L4PER_TIMER10_CLKCTRL_OFFSET               0x0928
+#define OMAP54XX_CM_L4PER_TIMER10_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0928)
+#define OMAP54XX_CM_L4PER_TIMER11_CLKCTRL_OFFSET               0x0930
+#define OMAP54XX_CM_L4PER_TIMER11_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0930)
+#define OMAP54XX_CM_L4PER_TIMER2_CLKCTRL_OFFSET                        0x0938
+#define OMAP54XX_CM_L4PER_TIMER2_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0938)
+#define OMAP54XX_CM_L4PER_TIMER3_CLKCTRL_OFFSET                        0x0940
+#define OMAP54XX_CM_L4PER_TIMER3_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0940)
+#define OMAP54XX_CM_L4PER_TIMER4_CLKCTRL_OFFSET                        0x0948
+#define OMAP54XX_CM_L4PER_TIMER4_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0948)
+#define OMAP54XX_CM_L4PER_TIMER9_CLKCTRL_OFFSET                        0x0950
+#define OMAP54XX_CM_L4PER_TIMER9_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0950)
+#define OMAP54XX_CM_L4PER_ELM_CLKCTRL_OFFSET                   0x0958
+#define OMAP54XX_CM_L4PER_ELM_CLKCTRL                          OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0958)
+#define OMAP54XX_CM_L4PER_GPIO2_CLKCTRL_OFFSET                 0x0960
+#define OMAP54XX_CM_L4PER_GPIO2_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0960)
+#define OMAP54XX_CM_L4PER_GPIO3_CLKCTRL_OFFSET                 0x0968
+#define OMAP54XX_CM_L4PER_GPIO3_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0968)
+#define OMAP54XX_CM_L4PER_GPIO4_CLKCTRL_OFFSET                 0x0970
+#define OMAP54XX_CM_L4PER_GPIO4_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0970)
+#define OMAP54XX_CM_L4PER_GPIO5_CLKCTRL_OFFSET                 0x0978
+#define OMAP54XX_CM_L4PER_GPIO5_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0978)
+#define OMAP54XX_CM_L4PER_GPIO6_CLKCTRL_OFFSET                 0x0980
+#define OMAP54XX_CM_L4PER_GPIO6_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0980)
+#define OMAP54XX_CM_L4PER_HDQ1W_CLKCTRL_OFFSET                 0x0988
+#define OMAP54XX_CM_L4PER_HDQ1W_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0988)
+#define OMAP54XX_CM_L4PER_I2C1_CLKCTRL_OFFSET                  0x09a0
+#define OMAP54XX_CM_L4PER_I2C1_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09a0)
+#define OMAP54XX_CM_L4PER_I2C2_CLKCTRL_OFFSET                  0x09a8
+#define OMAP54XX_CM_L4PER_I2C2_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09a8)
+#define OMAP54XX_CM_L4PER_I2C3_CLKCTRL_OFFSET                  0x09b0
+#define OMAP54XX_CM_L4PER_I2C3_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09b0)
+#define OMAP54XX_CM_L4PER_I2C4_CLKCTRL_OFFSET                  0x09b8
+#define OMAP54XX_CM_L4PER_I2C4_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09b8)
+#define OMAP54XX_CM_L4PER_L4_PER_CLKCTRL_OFFSET                        0x09c0
+#define OMAP54XX_CM_L4PER_L4_PER_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09c0)
+#define OMAP54XX_CM_L4PER_MCSPI1_CLKCTRL_OFFSET                        0x09f0
+#define OMAP54XX_CM_L4PER_MCSPI1_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09f0)
+#define OMAP54XX_CM_L4PER_MCSPI2_CLKCTRL_OFFSET                        0x09f8
+#define OMAP54XX_CM_L4PER_MCSPI2_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x09f8)
+#define OMAP54XX_CM_L4PER_MCSPI3_CLKCTRL_OFFSET                        0x0a00
+#define OMAP54XX_CM_L4PER_MCSPI3_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a00)
+#define OMAP54XX_CM_L4PER_MCSPI4_CLKCTRL_OFFSET                        0x0a08
+#define OMAP54XX_CM_L4PER_MCSPI4_CLKCTRL                       OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a08)
+#define OMAP54XX_CM_L4PER_GPIO7_CLKCTRL_OFFSET                 0x0a10
+#define OMAP54XX_CM_L4PER_GPIO7_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a10)
+#define OMAP54XX_CM_L4PER_GPIO8_CLKCTRL_OFFSET                 0x0a18
+#define OMAP54XX_CM_L4PER_GPIO8_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a18)
+#define OMAP54XX_CM_L4PER_MMC3_CLKCTRL_OFFSET                  0x0a20
+#define OMAP54XX_CM_L4PER_MMC3_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a20)
+#define OMAP54XX_CM_L4PER_MMC4_CLKCTRL_OFFSET                  0x0a28
+#define OMAP54XX_CM_L4PER_MMC4_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a28)
+#define OMAP54XX_CM_L4PER_UART1_CLKCTRL_OFFSET                 0x0a40
+#define OMAP54XX_CM_L4PER_UART1_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a40)
+#define OMAP54XX_CM_L4PER_UART2_CLKCTRL_OFFSET                 0x0a48
+#define OMAP54XX_CM_L4PER_UART2_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a48)
+#define OMAP54XX_CM_L4PER_UART3_CLKCTRL_OFFSET                 0x0a50
+#define OMAP54XX_CM_L4PER_UART3_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a50)
+#define OMAP54XX_CM_L4PER_UART4_CLKCTRL_OFFSET                 0x0a58
+#define OMAP54XX_CM_L4PER_UART4_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a58)
+#define OMAP54XX_CM_L4PER_MMC5_CLKCTRL_OFFSET                  0x0a60
+#define OMAP54XX_CM_L4PER_MMC5_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a60)
+#define OMAP54XX_CM_L4PER_I2C5_CLKCTRL_OFFSET                  0x0a68
+#define OMAP54XX_CM_L4PER_I2C5_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a68)
+#define OMAP54XX_CM_L4PER_UART5_CLKCTRL_OFFSET                 0x0a70
+#define OMAP54XX_CM_L4PER_UART5_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a70)
+#define OMAP54XX_CM_L4PER_UART6_CLKCTRL_OFFSET                 0x0a78
+#define OMAP54XX_CM_L4PER_UART6_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0a78)
+#define OMAP54XX_CM_L4SEC_CLKSTCTRL_OFFSET                     0x0a80
+#define OMAP54XX_CM_L4SEC_STATICDEP_OFFSET                     0x0a84
+#define OMAP54XX_CM_L4SEC_DYNAMICDEP_OFFSET                    0x0a88
+#define OMAP54XX_CM_L4SEC_AES1_CLKCTRL_OFFSET                  0x0aa0
+#define OMAP54XX_CM_L4SEC_AES1_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0aa0)
+#define OMAP54XX_CM_L4SEC_AES2_CLKCTRL_OFFSET                  0x0aa8
+#define OMAP54XX_CM_L4SEC_AES2_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0aa8)
+#define OMAP54XX_CM_L4SEC_DES3DES_CLKCTRL_OFFSET               0x0ab0
+#define OMAP54XX_CM_L4SEC_DES3DES_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0ab0)
+#define OMAP54XX_CM_L4SEC_FPKA_CLKCTRL_OFFSET                  0x0ab8
+#define OMAP54XX_CM_L4SEC_FPKA_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0ab8)
+#define OMAP54XX_CM_L4SEC_RNG_CLKCTRL_OFFSET                   0x0ac0
+#define OMAP54XX_CM_L4SEC_RNG_CLKCTRL                          OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0ac0)
+#define OMAP54XX_CM_L4SEC_SHA2MD5_CLKCTRL_OFFSET               0x0ac8
+#define OMAP54XX_CM_L4SEC_SHA2MD5_CLKCTRL                      OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0ac8)
+#define OMAP54XX_CM_L4SEC_DMA_CRYPTO_CLKCTRL_OFFSET            0x0ad8
+#define OMAP54XX_CM_L4SEC_DMA_CRYPTO_CLKCTRL                   OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CORE_INST, 0x0ad8)
+
+/* CM_CORE.IVA_CM_CORE register offsets */
+#define OMAP54XX_CM_IVA_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_IVA_STATICDEP_OFFSET                       0x0004
+#define OMAP54XX_CM_IVA_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_IVA_IVA_CLKCTRL_OFFSET                     0x0020
+#define OMAP54XX_CM_IVA_IVA_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_IVA_INST, 0x0020)
+#define OMAP54XX_CM_IVA_SL2_CLKCTRL_OFFSET                     0x0028
+#define OMAP54XX_CM_IVA_SL2_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_IVA_INST, 0x0028)
+
+/* CM_CORE.CAM_CM_CORE register offsets */
+#define OMAP54XX_CM_CAM_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_CAM_STATICDEP_OFFSET                       0x0004
+#define OMAP54XX_CM_CAM_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_CAM_ISS_CLKCTRL_OFFSET                     0x0020
+#define OMAP54XX_CM_CAM_ISS_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CAM_INST, 0x0020)
+#define OMAP54XX_CM_CAM_FDIF_CLKCTRL_OFFSET                    0x0028
+#define OMAP54XX_CM_CAM_FDIF_CLKCTRL                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CAM_INST, 0x0028)
+#define OMAP54XX_CM_CAM_CAL_CLKCTRL_OFFSET                     0x0030
+#define OMAP54XX_CM_CAM_CAL_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CAM_INST, 0x0030)
+
+/* CM_CORE.DSS_CM_CORE register offsets */
+#define OMAP54XX_CM_DSS_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_DSS_STATICDEP_OFFSET                       0x0004
+#define OMAP54XX_CM_DSS_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET                     0x0020
+#define OMAP54XX_CM_DSS_DSS_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_DSS_INST, 0x0020)
+#define OMAP54XX_CM_DSS_BB2D_CLKCTRL_OFFSET                    0x0030
+#define OMAP54XX_CM_DSS_BB2D_CLKCTRL                           OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_DSS_INST, 0x0030)
+
+/* CM_CORE.GPU_CM_CORE register offsets */
+#define OMAP54XX_CM_GPU_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_GPU_STATICDEP_OFFSET                       0x0004
+#define OMAP54XX_CM_GPU_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_GPU_GPU_CLKCTRL_OFFSET                     0x0020
+#define OMAP54XX_CM_GPU_GPU_CLKCTRL                            OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_GPU_INST, 0x0020)
+
+/* CM_CORE.L3INIT_CM_CORE register offsets */
+#define OMAP54XX_CM_L3INIT_CLKSTCTRL_OFFSET                    0x0000
+#define OMAP54XX_CM_L3INIT_STATICDEP_OFFSET                    0x0004
+#define OMAP54XX_CM_L3INIT_DYNAMICDEP_OFFSET                   0x0008
+#define OMAP54XX_CM_L3INIT_MMC1_CLKCTRL_OFFSET                 0x0028
+#define OMAP54XX_CM_L3INIT_MMC1_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0028)
+#define OMAP54XX_CM_L3INIT_MMC2_CLKCTRL_OFFSET                 0x0030
+#define OMAP54XX_CM_L3INIT_MMC2_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0030)
+#define OMAP54XX_CM_L3INIT_HSI_CLKCTRL_OFFSET                  0x0038
+#define OMAP54XX_CM_L3INIT_HSI_CLKCTRL                         OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0038)
+#define OMAP54XX_CM_L3INIT_UNIPRO2_CLKCTRL_OFFSET              0x0040
+#define OMAP54XX_CM_L3INIT_UNIPRO2_CLKCTRL                     OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0040)
+#define OMAP54XX_CM_L3INIT_MPHY_UNIPRO2_CLKCTRL_OFFSET         0x0048
+#define OMAP54XX_CM_L3INIT_MPHY_UNIPRO2_CLKCTRL                        OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0048)
+#define OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL_OFFSET          0x0058
+#define OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL                 OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0058)
+#define OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL_OFFSET           0x0068
+#define OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0068)
+#define OMAP54XX_CM_L3INIT_IEEE1500_2_OCP_CLKCTRL_OFFSET       0x0078
+#define OMAP54XX_CM_L3INIT_IEEE1500_2_OCP_CLKCTRL              OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0078)
+#define OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET                 0x0088
+#define OMAP54XX_CM_L3INIT_SATA_CLKCTRL                                OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x0088)
+#define OMAP54XX_CM_L3INIT_OCP2SCP1_CLKCTRL_OFFSET             0x00e0
+#define OMAP54XX_CM_L3INIT_OCP2SCP1_CLKCTRL                    OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x00e0)
+#define OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET             0x00e8
+#define OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL                    OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x00e8)
+#define OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET           0x00f0
+#define OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL                  OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_L3INIT_INST, 0x00f0)
+
+/* CM_CORE.CUSTEFUSE_CM_CORE register offsets */
+#define OMAP54XX_CM_CUSTEFUSE_CLKSTCTRL_OFFSET                 0x0000
+#define OMAP54XX_CM_CUSTEFUSE_EFUSE_CTRL_CUST_CLKCTRL_OFFSET   0x0020
+#define OMAP54XX_CM_CUSTEFUSE_EFUSE_CTRL_CUST_CLKCTRL          OMAP54XX_CM_CORE_REGADDR(OMAP54XX_CM_CORE_CUSTEFUSE_INST, 0x0020)
+
+#endif
index 64f4bafe7bd9bb25a0054bf27139196ed2ce6256..9d1f4fcdebbb436010fdf834b1003dfb5e347f51 100644 (file)
@@ -383,7 +383,7 @@ extern void am33xx_cm_clkdm_disable_hwsup(s16 inst, u16 cdoffs);
 extern void am33xx_cm_clkdm_force_sleep(s16 inst, u16 cdoffs);
 extern void am33xx_cm_clkdm_force_wakeup(s16 inst, u16 cdoffs);
 
-#ifdef CONFIG_SOC_AM33XX
+#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
 extern int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs,
                                        u16 clkctrl_offs);
 extern void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs,
diff --git a/arch/arm/mach-omap2/cm_44xx_54xx.h b/arch/arm/mach-omap2/cm_44xx_54xx.h
new file mode 100644 (file)
index 0000000..cbb2116
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * OMAP44xx and OMAP54xx CM1/CM2 function prototypes
+ *
+ * Copyright (C) 2009-2013 Texas Instruments, Inc.
+ * Copyright (C) 2009-2010 Nokia Corporation
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_CM_44XX_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_CM_44XX_55XX_H
+
+/* CM1 Function prototypes */
+extern u32 omap4_cm1_read_inst_reg(s16 inst, u16 idx);
+extern void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 idx);
+extern u32 omap4_cm1_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
+
+/* CM2 Function prototypes */
+extern u32 omap4_cm2_read_inst_reg(s16 inst, u16 idx);
+extern void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 idx);
+extern u32 omap4_cm2_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
+
+#endif
index d555cf2459e14184f98d2e07590e476970e4df16..72cab3f4f16d78c70ce13ac41f5e2d868f0ac2c6 100644 (file)
@@ -96,6 +96,7 @@ void am33xx_init_early(void);
 void am35xx_init_early(void);
 void ti81xx_init_early(void);
 void am33xx_init_early(void);
+void am43xx_init_early(void);
 void omap4430_init_early(void);
 void omap5_init_early(void);
 void omap3_init_late(void);    /* Do not use this one */
@@ -237,8 +238,8 @@ extern void omap_do_wfi(void);
 
 #ifdef CONFIG_SMP
 /* Needed for secondary core boot */
-extern void omap_secondary_startup(void);
-extern void omap_secondary_startup_4460(void);
+extern void omap4_secondary_startup(void);
+extern void omap4460_secondary_startup(void);
 extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
 extern void omap_auxcoreboot_addr(u32 cpu_addr);
 extern u32 omap_read_auxcoreboot0(void);
index e6c328128a0a3fbf0fc7745c5d3895b9c61c9759..f7d7c2ef1b40f252c72f8ecdd87511168190d273 100644 (file)
 #define AM33XX_CONTROL_STATUS_SYSBOOT1_WIDTH           0x2
 #define AM33XX_CONTROL_STATUS_SYSBOOT1_MASK            (0x3 << 22)
 
+/* AM33XX PWMSS Control register */
+#define AM33XX_PWMSS_TBCLK_CLKCTRL                     0x664
+
+/* AM33XX  PWMSS Control bitfields */
+#define AM33XX_PWMSS0_TBCLKEN_SHIFT                    0
+#define AM33XX_PWMSS1_TBCLKEN_SHIFT                    1
+#define AM33XX_PWMSS2_TBCLKEN_SHIFT                    2
+
+/* DEV Feature register to identify AM33XX features */
+#define AM33XX_DEV_FEATURE             0x604
+#define AM33XX_SGX_MASK                        BIT(29)
+
 /* CONTROL OMAP STATUS register to identify OMAP3 features */
 #define OMAP3_CONTROL_OMAP_STATUS      0x044c
 
index 54e4c16ce53956f645e6a4e9ba8d470ee8dfb4b2..2dc62a25f2c3fc7897e0e20e18ccf086a74da161 100644 (file)
@@ -55,7 +55,7 @@ int omap_type(void)
 
        if (cpu_is_omap24xx()) {
                val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
-       } else if (soc_is_am33xx()) {
+       } else if (soc_is_am33xx() || soc_is_am43xx()) {
                val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
        } else if (cpu_is_omap34xx()) {
                val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
@@ -209,6 +209,8 @@ static void __init omap3_cpuinfo(void)
                cpu_name = "TI816X";
        } else if (soc_is_am335x()) {
                cpu_name =  "AM335X";
+       } else if (soc_is_am437x()) {
+               cpu_name =  "AM437x";
        } else if (cpu_is_ti814x()) {
                cpu_name = "TI814X";
        } else if (omap3_has_iva() && omap3_has_sgx()) {
@@ -302,6 +304,19 @@ void __init ti81xx_check_features(void)
        omap3_cpuinfo();
 }
 
+void __init am33xx_check_features(void)
+{
+       u32 status;
+
+       omap_features = OMAP3_HAS_NEON;
+
+       status = omap_ctrl_readl(AM33XX_DEV_FEATURE);
+       if (status & AM33XX_SGX_MASK)
+               omap_features |= OMAP3_HAS_SGX;
+
+       omap3_cpuinfo();
+}
+
 void __init omap3xxx_check_revision(void)
 {
        const char *cpu_rev;
@@ -405,11 +420,18 @@ void __init omap3xxx_check_revision(void)
                        cpu_rev = "1.0";
                        break;
                case 1:
-               /* FALLTHROUGH */
-               default:
                        omap_revision = TI8168_REV_ES1_1;
                        cpu_rev = "1.1";
                        break;
+               case 2:
+                       omap_revision = TI8168_REV_ES2_0;
+                       cpu_rev = "2.0";
+                       break;
+               case 3:
+                       /* FALLTHROUGH */
+               default:
+                       omap_revision = TI8168_REV_ES2_1;
+                       cpu_rev = "2.1";
                }
                break;
        case 0xb944:
@@ -430,6 +452,10 @@ void __init omap3xxx_check_revision(void)
                        break;
                }
                break;
+       case 0xb98c:
+               omap_revision = AM437X_REV_ES1_0;
+               cpu_rev = "1.0";
+               break;
        case 0xb8f2:
                switch (rev) {
                case 0:
index 50b93df458469847ae0b195e4f1388b8ba0af4f0..fe3253a100e740c92688f374557d2470ed6494cb 100644 (file)
@@ -202,7 +202,7 @@ static struct map_desc omapti81xx_io_desc[] __initdata = {
 };
 #endif
 
-#ifdef CONFIG_SOC_AM33XX
+#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
 static struct map_desc omapam33xx_io_desc[] __initdata = {
        {
                .virtual        = L4_34XX_VIRT,
@@ -318,7 +318,7 @@ void __init ti81xx_map_io(void)
 }
 #endif
 
-#ifdef CONFIG_SOC_AM33XX
+#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
 void __init am33xx_map_io(void)
 {
        iotable_init(omapam33xx_io_desc, ARRAY_SIZE(omapam33xx_io_desc));
@@ -576,7 +576,7 @@ void __init am33xx_init_early(void)
        omap2_set_globals_prm(AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE));
        omap2_set_globals_cm(AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), NULL);
        omap3xxx_check_revision();
-       ti81xx_check_features();
+       am33xx_check_features();
        am33xx_powerdomains_init();
        am33xx_clockdomains_init();
        am33xx_hwmod_init();
@@ -585,6 +585,19 @@ void __init am33xx_init_early(void)
 }
 #endif
 
+#ifdef CONFIG_SOC_AM43XX
+void __init am43xx_init_early(void)
+{
+       omap2_set_globals_tap(AM335X_CLASS,
+                             AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
+       omap2_set_globals_control(AM33XX_L4_WK_IO_ADDRESS(AM33XX_CTRL_BASE),
+                                 NULL);
+       omap2_set_globals_prm(AM33XX_L4_WK_IO_ADDRESS(AM43XX_PRCM_BASE));
+       omap2_set_globals_cm(AM33XX_L4_WK_IO_ADDRESS(AM43XX_PRCM_BASE), NULL);
+       omap3xxx_check_revision();
+}
+#endif
+
 #ifdef CONFIG_ARCH_OMAP4
 void __init omap4430_init_early(void)
 {
@@ -630,7 +643,13 @@ void __init omap5_init_early(void)
        omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
        omap_prm_base_init();
        omap_cm_base_init();
+       omap44xx_prm_init();
        omap5xxx_check_revision();
+       omap54xx_voltagedomains_init();
+       omap54xx_powerdomains_init();
+       omap54xx_clockdomains_init();
+       omap54xx_hwmod_init();
+       omap_hwmod_init_postsetup();
 }
 #endif
 
index 0ea09faf327b2faa48d1889d63cc49246ee9eb37..4ea308114165689e1638eca94f1099d436cce803 100644 (file)
@@ -49,7 +49,7 @@ END(omap5_secondary_startup)
  * The primary core will update this flag using a hardware
  * register AuxCoreBoot0.
  */
-ENTRY(omap_secondary_startup)
+ENTRY(omap4_secondary_startup)
 hold:  ldr     r12,=0x103
        dsb
        smc     #0                      @ read from AuxCoreBoot0
@@ -64,9 +64,9 @@ hold: ldr     r12,=0x103
         * should now contain the SVC stack for this core
         */
        b       secondary_startup
-ENDPROC(omap_secondary_startup)
+ENDPROC(omap4_secondary_startup)
 
-ENTRY(omap_secondary_startup_4460)
+ENTRY(omap4460_secondary_startup)
 hold_2:        ldr     r12,=0x103
        dsb
        smc     #0                      @ read from AuxCoreBoot0
@@ -101,4 +101,4 @@ hold_2:     ldr     r12,=0x103
         * should now contain the SVC stack for this core
         */
        b       secondary_startup
-ENDPROC(omap_secondary_startup_4460)
+ENDPROC(omap4460_secondary_startup)
index e80327b6c81f68520206e10058e7e4c18cc496ae..f993a41887010f726e7bee233f3bb80754cc4a47 100644 (file)
@@ -71,10 +71,43 @@ struct omap4_cpu_pm_info {
        void (*secondary_startup)(void);
 };
 
+/**
+ * struct cpu_pm_ops - CPU pm operations
+ * @finish_suspend:    CPU suspend finisher function pointer
+ * @resume:            CPU resume function pointer
+ * @scu_prepare:       CPU Snoop Control program function pointer
+ *
+ * Structure holds functions pointer for CPU low power operations like
+ * suspend, resume and scu programming.
+ */
+struct cpu_pm_ops {
+       int (*finish_suspend)(unsigned long cpu_state);
+       void (*resume)(void);
+       void (*scu_prepare)(unsigned int cpu_id, unsigned int cpu_state);
+};
+
 static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info);
 static struct powerdomain *mpuss_pd;
 static void __iomem *sar_base;
 
+static int default_finish_suspend(unsigned long cpu_state)
+{
+       omap_do_wfi();
+       return 0;
+}
+
+static void dummy_cpu_resume(void)
+{}
+
+static void dummy_scu_prepare(unsigned int cpu_id, unsigned int cpu_state)
+{}
+
+struct cpu_pm_ops omap_pm_ops = {
+       .finish_suspend         = default_finish_suspend,
+       .resume                 = dummy_cpu_resume,
+       .scu_prepare            = dummy_scu_prepare,
+};
+
 /*
  * Program the wakeup routine address for the CPU0 and CPU1
  * used for OFF or DORMANT wakeup.
@@ -158,11 +191,12 @@ static void save_l2x0_context(void)
 {
        u32 val;
        void __iomem *l2x0_base = omap4_get_l2cache_base();
-
-       val = __raw_readl(l2x0_base + L2X0_AUX_CTRL);
-       __raw_writel(val, sar_base + L2X0_AUXCTRL_OFFSET);
-       val = __raw_readl(l2x0_base + L2X0_PREFETCH_CTRL);
-       __raw_writel(val, sar_base + L2X0_PREFETCH_CTRL_OFFSET);
+       if (l2x0_base) {
+               val = __raw_readl(l2x0_base + L2X0_AUX_CTRL);
+               __raw_writel(val, sar_base + L2X0_AUXCTRL_OFFSET);
+               val = __raw_readl(l2x0_base + L2X0_PREFETCH_CTRL);
+               __raw_writel(val, sar_base + L2X0_PREFETCH_CTRL_OFFSET);
+       }
 }
 #else
 static void save_l2x0_context(void)
@@ -225,14 +259,17 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
 
        cpu_clear_prev_logic_pwrst(cpu);
        pwrdm_set_next_pwrst(pm_info->pwrdm, power_state);
-       set_cpu_wakeup_addr(cpu, virt_to_phys(omap4_cpu_resume));
-       scu_pwrst_prepare(cpu, power_state);
+       set_cpu_wakeup_addr(cpu, virt_to_phys(omap_pm_ops.resume));
+       omap_pm_ops.scu_prepare(cpu, power_state);
        l2x0_pwrst_prepare(cpu, save_state);
 
        /*
         * Call low level function  with targeted low power state.
         */
-       cpu_suspend(save_state, omap4_finish_suspend);
+       if (save_state)
+               cpu_suspend(save_state, omap_pm_ops.finish_suspend);
+       else
+               omap_pm_ops.finish_suspend(save_state);
 
        /*
         * Restore the CPUx power state to ON otherwise CPUx
@@ -268,14 +305,14 @@ int __cpuinit omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state)
        pwrdm_clear_all_prev_pwrst(pm_info->pwrdm);
        pwrdm_set_next_pwrst(pm_info->pwrdm, power_state);
        set_cpu_wakeup_addr(cpu, virt_to_phys(pm_info->secondary_startup));
-       scu_pwrst_prepare(cpu, power_state);
+       omap_pm_ops.scu_prepare(cpu, power_state);
 
        /*
         * CPU never retuns back if targeted power state is OFF mode.
         * CPU ONLINE follows normal CPU ONLINE ptah via
-        * omap_secondary_startup().
+        * omap4_secondary_startup().
         */
-       omap4_finish_suspend(cpu_state);
+       omap_pm_ops.finish_suspend(cpu_state);
 
        pwrdm_set_next_pwrst(pm_info->pwrdm, PWRDM_POWER_ON);
        return 0;
@@ -319,9 +356,9 @@ int __init omap4_mpuss_init(void)
        pm_info->wkup_sar_addr = sar_base + CPU1_WAKEUP_NS_PA_ADDR_OFFSET;
        pm_info->l2x0_sar_addr = sar_base + L2X0_SAVE_OFFSET1;
        if (cpu_is_omap446x())
-               pm_info->secondary_startup = omap_secondary_startup_4460;
+               pm_info->secondary_startup = omap4460_secondary_startup;
        else
-               pm_info->secondary_startup = omap_secondary_startup;
+               pm_info->secondary_startup = omap4_secondary_startup;
 
        pm_info->pwrdm = pwrdm_lookup("cpu1_pwrdm");
        if (!pm_info->pwrdm) {
@@ -352,6 +389,12 @@ int __init omap4_mpuss_init(void)
 
        save_l2x0_context();
 
+       if (cpu_is_omap44xx()) {
+               omap_pm_ops.finish_suspend = omap4_finish_suspend;
+               omap_pm_ops.resume = omap4_cpu_resume;
+               omap_pm_ops.scu_prepare = scu_pwrst_prepare;
+       }
+
        return 0;
 }
 
index 2a551f997aea526a5ac8367271f62e953d4d8609..98a11463a843afdaca3ef99680e0a7c785d5fc33 100644 (file)
@@ -87,7 +87,7 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *
 
        /*
         * Update the AuxCoreBoot0 with boot state for secondary core.
-        * omap_secondary_startup() routine will hold the secondary core till
+        * omap4_secondary_startup() routine will hold the secondary core till
         * the AuxCoreBoot1 register is updated with cpu state
         * A barrier is added to ensure that write buffer is drained
         */
@@ -200,7 +200,7 @@ static void __init omap4_smp_init_cpus(void)
 
 static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)
 {
-       void *startup_addr = omap_secondary_startup;
+       void *startup_addr = omap4_secondary_startup;
        void __iomem *base = omap_get_wakeupgen_base();
 
        /*
@@ -211,7 +211,7 @@ static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)
                scu_enable(scu_base);
 
        if (cpu_is_omap446x()) {
-               startup_addr = omap_secondary_startup_4460;
+               startup_addr = omap4460_secondary_startup;
                pm44xx_errata |= PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD;
        }
 
index 13b27ffaf45e481523b092b55c14a4db7382913d..38cd3a69cff3686f45829eb9b58023142acadb02 100644 (file)
@@ -339,19 +339,3 @@ int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
        return 0;
 }
 #endif
-
-/**
- * omap44xx_restart - trigger a software restart of the SoC
- * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c
- * @cmd: passed from the userspace program rebooting the system (if provided)
- *
- * Resets the SoC.  For @cmd, see the 'reboot' syscall in
- * kernel/sys.c.  No return value.
- */
-void omap44xx_restart(char mode, const char *cmd)
-{
-       /* XXX Should save 'cmd' into scratchpad for use after reboot */
-       omap4_prminst_global_warm_sw_reset(); /* never returns */
-       while (1);
-}
-
diff --git a/arch/arm/mach-omap2/omap4-restart.c b/arch/arm/mach-omap2/omap4-restart.c
new file mode 100644 (file)
index 0000000..f90e02e
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * omap4-restart.c - Common to OMAP4 and OMAP5
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/types.h>
+#include "prminst44xx.h"
+
+/**
+ * omap44xx_restart - trigger a software restart of the SoC
+ * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c
+ * @cmd: passed from the userspace program rebooting the system (if provided)
+ *
+ * Resets the SoC.  For @cmd, see the 'reboot' syscall in
+ * kernel/sys.c.  No return value.
+ */
+void omap44xx_restart(char mode, const char *cmd)
+{
+       /* XXX Should save 'cmd' into scratchpad for use after reboot */
+       omap4_prminst_global_warm_sw_reset(); /* never returns */
+       while (1)
+               ;
+}
index 0c898f58ac9bb490e8873a24074e53c1480530a6..aab33fd814c0329e178cbfe265fdf9ff5ffb766c 100644 (file)
@@ -699,6 +699,7 @@ extern int omap2420_hwmod_init(void);
 extern int omap2430_hwmod_init(void);
 extern int omap3xxx_hwmod_init(void);
 extern int omap44xx_hwmod_init(void);
+extern int omap54xx_hwmod_init(void);
 extern int am33xx_hwmod_init(void);
 
 extern int __init omap_hwmod_register_links(struct omap_hwmod_ocp_if **ois);
index 3c7675a6a8f4edaa1103881335a208da6de476cb..28bbd56346a93ab67fc377eb1ea066a8be8280f7 100644 (file)
@@ -249,7 +249,7 @@ static struct omap_hwmod_class am33xx_gfx_hwmod_class = {
 };
 
 static struct omap_hwmod_rst_info am33xx_gfx_resets[] = {
-       { .name = "gfx", .rst_shift = 0 },
+       { .name = "gfx", .rst_shift = 0, .st_shift = 0},
 };
 
 static struct omap_hwmod am33xx_gfx_hwmod = {
@@ -261,6 +261,7 @@ static struct omap_hwmod am33xx_gfx_hwmod = {
                .omap4  = {
                        .clkctrl_offs   = AM33XX_CM_GFX_GFX_CLKCTRL_OFFSET,
                        .rstctrl_offs   = AM33XX_RM_GFX_RSTCTRL_OFFSET,
+                       .rstst_offs     = AM33XX_RM_GFX_RSTST_OFFSET,
                        .modulemode     = MODULEMODE_SWCTRL,
                },
        },
diff --git a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
new file mode 100644 (file)
index 0000000..f37ae96
--- /dev/null
@@ -0,0 +1,2150 @@
+/*
+ * Hardware modules present on the OMAP54xx chips
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley
+ * Benoit Cousson
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/io.h>
+#include <linux/platform_data/gpio-omap.h>
+#include <linux/power/smartreflex.h>
+#include <linux/i2c-omap.h>
+
+#include <linux/omap-dma.h>
+#include <linux/platform_data/spi-omap2-mcspi.h>
+#include <linux/platform_data/asoc-ti-mcbsp.h>
+#include <plat/dmtimer.h>
+
+#include "omap_hwmod.h"
+#include "omap_hwmod_common_data.h"
+#include "cm1_54xx.h"
+#include "cm2_54xx.h"
+#include "prm54xx.h"
+#include "prm-regbits-54xx.h"
+#include "i2c.h"
+#include "mmc.h"
+#include "wd_timer.h"
+
+/* Base offset for all OMAP5 interrupts external to MPUSS */
+#define OMAP54XX_IRQ_GIC_START 32
+
+/* Base offset for all OMAP5 dma requests */
+#define OMAP54XX_DMA_REQ_START 1
+
+
+/*
+ * IP blocks
+ */
+
+/*
+ * 'dmm' class
+ * instance(s): dmm
+ */
+static struct omap_hwmod_class omap54xx_dmm_hwmod_class = {
+       .name   = "dmm",
+};
+
+/* dmm */
+static struct omap_hwmod omap54xx_dmm_hwmod = {
+       .name           = "dmm",
+       .class          = &omap54xx_dmm_hwmod_class,
+       .clkdm_name     = "emif_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_EMIF_DMM_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_EMIF_DMM_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/*
+ * 'l3' class
+ * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
+ */
+static struct omap_hwmod_class omap54xx_l3_hwmod_class = {
+       .name   = "l3",
+};
+
+/* l3_instr */
+static struct omap_hwmod omap54xx_l3_instr_hwmod = {
+       .name           = "l3_instr",
+       .class          = &omap54xx_l3_hwmod_class,
+       .clkdm_name     = "l3instr_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+};
+
+/* l3_main_1 */
+static struct omap_hwmod omap54xx_l3_main_1_hwmod = {
+       .name           = "l3_main_1",
+       .class          = &omap54xx_l3_hwmod_class,
+       .clkdm_name     = "l3main1_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3MAIN1_L3_MAIN_1_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/* l3_main_2 */
+static struct omap_hwmod omap54xx_l3_main_2_hwmod = {
+       .name           = "l3_main_2",
+       .class          = &omap54xx_l3_hwmod_class,
+       .clkdm_name     = "l3main2_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3MAIN2_L3_MAIN_2_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/* l3_main_3 */
+static struct omap_hwmod omap54xx_l3_main_3_hwmod = {
+       .name           = "l3_main_3",
+       .class          = &omap54xx_l3_hwmod_class,
+       .clkdm_name     = "l3instr_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3INSTR_L3_MAIN_3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+};
+
+/*
+ * 'l4' class
+ * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
+ */
+static struct omap_hwmod_class omap54xx_l4_hwmod_class = {
+       .name   = "l4",
+};
+
+/* l4_abe */
+static struct omap_hwmod omap54xx_l4_abe_hwmod = {
+       .name           = "l4_abe",
+       .class          = &omap54xx_l4_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_L4_ABE_CLKCTRL_OFFSET,
+                       .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
+               },
+       },
+};
+
+/* l4_cfg */
+static struct omap_hwmod omap54xx_l4_cfg_hwmod = {
+       .name           = "l4_cfg",
+       .class          = &omap54xx_l4_hwmod_class,
+       .clkdm_name     = "l4cfg_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/* l4_per */
+static struct omap_hwmod omap54xx_l4_per_hwmod = {
+       .name           = "l4_per",
+       .class          = &omap54xx_l4_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_L4_PER_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_L4_PER_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/* l4_wkup */
+static struct omap_hwmod omap54xx_l4_wkup_hwmod = {
+       .name           = "l4_wkup",
+       .class          = &omap54xx_l4_hwmod_class,
+       .clkdm_name     = "wkupaon_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_WKUPAON_L4_WKUP_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/*
+ * 'mpu_bus' class
+ * instance(s): mpu_private
+ */
+static struct omap_hwmod_class omap54xx_mpu_bus_hwmod_class = {
+       .name   = "mpu_bus",
+};
+
+/* mpu_private */
+static struct omap_hwmod omap54xx_mpu_private_hwmod = {
+       .name           = "mpu_private",
+       .class          = &omap54xx_mpu_bus_hwmod_class,
+       .clkdm_name     = "mpu_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
+               },
+       },
+};
+
+/*
+ * 'counter' class
+ * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_counter_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = SYSC_HAS_SIDLEMODE,
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_counter_hwmod_class = {
+       .name   = "counter",
+       .sysc   = &omap54xx_counter_sysc,
+};
+
+/* counter_32k */
+static struct omap_hwmod omap54xx_counter_32k_hwmod = {
+       .name           = "counter_32k",
+       .class          = &omap54xx_counter_hwmod_class,
+       .clkdm_name     = "wkupaon_clkdm",
+       .flags          = HWMOD_SWSUP_SIDLE,
+       .main_clk       = "wkupaon_iclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_WKUPAON_COUNTER_32K_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_WKUPAON_COUNTER_32K_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/*
+ * 'dma' class
+ * dma controller for data exchange between memory to memory (i.e. internal or
+ * external memory) and gp peripherals to memory or memory to gp peripherals
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_dma_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x002c,
+       .syss_offs      = 0x0028,
+       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
+                          SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+                          SYSS_HAS_RESET_STATUS),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_dma_hwmod_class = {
+       .name   = "dma",
+       .sysc   = &omap54xx_dma_sysc,
+};
+
+/* dma dev_attr */
+static struct omap_dma_dev_attr dma_dev_attr = {
+       .dev_caps       = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
+                         IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
+       .lch_count      = 32,
+};
+
+/* dma_system */
+static struct omap_hwmod_irq_info omap54xx_dma_system_irqs[] = {
+       { .name = "0", .irq = 12 + OMAP54XX_IRQ_GIC_START },
+       { .name = "1", .irq = 13 + OMAP54XX_IRQ_GIC_START },
+       { .name = "2", .irq = 14 + OMAP54XX_IRQ_GIC_START },
+       { .name = "3", .irq = 15 + OMAP54XX_IRQ_GIC_START },
+       { .irq = -1 }
+};
+
+static struct omap_hwmod omap54xx_dma_system_hwmod = {
+       .name           = "dma_system",
+       .class          = &omap54xx_dma_hwmod_class,
+       .clkdm_name     = "dma_clkdm",
+       .mpu_irqs       = omap54xx_dma_system_irqs,
+       .main_clk       = "l3_iclk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET,
+               },
+       },
+       .dev_attr       = &dma_dev_attr,
+};
+
+/*
+ * 'dmic' class
+ * digital microphone controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_dmic_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap54xx_dmic_hwmod_class = {
+       .name   = "dmic",
+       .sysc   = &omap54xx_dmic_sysc,
+};
+
+/* dmic */
+static struct omap_hwmod omap54xx_dmic_hwmod = {
+       .name           = "dmic",
+       .class          = &omap54xx_dmic_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "dmic_gfclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_DMIC_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_DMIC_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/*
+ * 'emif' class
+ * external memory interface no1 (wrapper)
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_emif_sysc = {
+       .rev_offs       = 0x0000,
+};
+
+static struct omap_hwmod_class omap54xx_emif_hwmod_class = {
+       .name   = "emif",
+       .sysc   = &omap54xx_emif_sysc,
+};
+
+/* emif1 */
+static struct omap_hwmod omap54xx_emif1_hwmod = {
+       .name           = "emif1",
+       .class          = &omap54xx_emif_hwmod_class,
+       .clkdm_name     = "emif_clkdm",
+       .flags          = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
+       .main_clk       = "dpll_core_h11x2_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_EMIF_EMIF1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+};
+
+/* emif2 */
+static struct omap_hwmod omap54xx_emif2_hwmod = {
+       .name           = "emif2",
+       .class          = &omap54xx_emif_hwmod_class,
+       .clkdm_name     = "emif_clkdm",
+       .flags          = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
+       .main_clk       = "dpll_core_h11x2_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_EMIF_EMIF2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+};
+
+/*
+ * 'gpio' class
+ * general purpose io module
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_gpio_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .syss_offs      = 0x0114,
+       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+                          SYSS_HAS_RESET_STATUS),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_gpio_hwmod_class = {
+       .name   = "gpio",
+       .sysc   = &omap54xx_gpio_sysc,
+       .rev    = 2,
+};
+
+/* gpio dev_attr */
+static struct omap_gpio_dev_attr gpio_dev_attr = {
+       .bank_width     = 32,
+       .dbck_flag      = true,
+};
+
+/* gpio1 */
+static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio1_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio1_hwmod = {
+       .name           = "gpio1",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "wkupaon_clkdm",
+       .main_clk       = "wkupaon_iclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_WKUPAON_GPIO1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_WKUPAON_GPIO1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio1_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio2 */
+static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio2_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio2_hwmod = {
+       .name           = "gpio2",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio2_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio3 */
+static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio3_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio3_hwmod = {
+       .name           = "gpio3",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio3_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio3_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio4 */
+static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio4_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio4_hwmod = {
+       .name           = "gpio4",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO4_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio4_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio4_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio5 */
+static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio5_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio5_hwmod = {
+       .name           = "gpio5",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO5_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio5_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio5_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio6 */
+static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio6_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio6_hwmod = {
+       .name           = "gpio6",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO6_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio6_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio6_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio7 */
+static struct omap_hwmod_opt_clk gpio7_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio7_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio7_hwmod = {
+       .name           = "gpio7",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO7_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO7_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio7_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio7_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/* gpio8 */
+static struct omap_hwmod_opt_clk gpio8_opt_clks[] = {
+       { .role = "dbclk", .clk = "gpio8_dbclk" },
+};
+
+static struct omap_hwmod omap54xx_gpio8_hwmod = {
+       .name           = "gpio8",
+       .class          = &omap54xx_gpio_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
+       .main_clk       = "l4_root_clk_div",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO8_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_GPIO8_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = gpio8_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(gpio8_opt_clks),
+       .dev_attr       = &gpio_dev_attr,
+};
+
+/*
+ * 'i2c' class
+ * multimaster high-speed i2c controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_i2c_sysc = {
+       .sysc_offs      = 0x0010,
+       .syss_offs      = 0x0090,
+       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
+                          SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
+                          SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .clockact       = CLOCKACT_TEST_ICLK,
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_i2c_hwmod_class = {
+       .name   = "i2c",
+       .sysc   = &omap54xx_i2c_sysc,
+       .reset  = &omap_i2c_reset,
+       .rev    = OMAP_I2C_IP_VERSION_2,
+};
+
+/* i2c dev_attr */
+static struct omap_i2c_dev_attr i2c_dev_attr = {
+       .flags  = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
+};
+
+/* i2c1 */
+static struct omap_hwmod omap54xx_i2c1_hwmod = {
+       .name           = "i2c1",
+       .class          = &omap54xx_i2c_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
+       .main_clk       = "func_96m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_I2C1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_I2C1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &i2c_dev_attr,
+};
+
+/* i2c2 */
+static struct omap_hwmod omap54xx_i2c2_hwmod = {
+       .name           = "i2c2",
+       .class          = &omap54xx_i2c_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
+       .main_clk       = "func_96m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_I2C2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_I2C2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &i2c_dev_attr,
+};
+
+/* i2c3 */
+static struct omap_hwmod omap54xx_i2c3_hwmod = {
+       .name           = "i2c3",
+       .class          = &omap54xx_i2c_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
+       .main_clk       = "func_96m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_I2C3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_I2C3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &i2c_dev_attr,
+};
+
+/* i2c4 */
+static struct omap_hwmod omap54xx_i2c4_hwmod = {
+       .name           = "i2c4",
+       .class          = &omap54xx_i2c_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
+       .main_clk       = "func_96m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_I2C4_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_I2C4_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &i2c_dev_attr,
+};
+
+/* i2c5 */
+static struct omap_hwmod omap54xx_i2c5_hwmod = {
+       .name           = "i2c5",
+       .class          = &omap54xx_i2c_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
+       .main_clk       = "func_96m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_I2C5_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_I2C5_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &i2c_dev_attr,
+};
+
+/*
+ * 'kbd' class
+ * keyboard controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_kbd_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
+                          SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_kbd_hwmod_class = {
+       .name   = "kbd",
+       .sysc   = &omap54xx_kbd_sysc,
+};
+
+/* kbd */
+static struct omap_hwmod omap54xx_kbd_hwmod = {
+       .name           = "kbd",
+       .class          = &omap54xx_kbd_hwmod_class,
+       .clkdm_name     = "wkupaon_clkdm",
+       .main_clk       = "sys_32k_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_WKUPAON_KBD_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/*
+ * 'mcbsp' class
+ * multi channel buffered serial port controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_mcbsp_sysc = {
+       .sysc_offs      = 0x008c,
+       .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_mcbsp_hwmod_class = {
+       .name   = "mcbsp",
+       .sysc   = &omap54xx_mcbsp_sysc,
+       .rev    = MCBSP_CONFIG_TYPE4,
+};
+
+/* mcbsp1 */
+static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
+       { .role = "pad_fck", .clk = "pad_clks_ck" },
+       { .role = "prcm_fck", .clk = "mcbsp1_sync_mux_ck" },
+};
+
+static struct omap_hwmod omap54xx_mcbsp1_hwmod = {
+       .name           = "mcbsp1",
+       .class          = &omap54xx_mcbsp_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "mcbsp1_gfclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_MCBSP1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .opt_clks       = mcbsp1_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(mcbsp1_opt_clks),
+};
+
+/* mcbsp2 */
+static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
+       { .role = "pad_fck", .clk = "pad_clks_ck" },
+       { .role = "prcm_fck", .clk = "mcbsp2_sync_mux_ck" },
+};
+
+static struct omap_hwmod omap54xx_mcbsp2_hwmod = {
+       .name           = "mcbsp2",
+       .class          = &omap54xx_mcbsp_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "mcbsp2_gfclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_MCBSP2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .opt_clks       = mcbsp2_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(mcbsp2_opt_clks),
+};
+
+/* mcbsp3 */
+static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
+       { .role = "pad_fck", .clk = "pad_clks_ck" },
+       { .role = "prcm_fck", .clk = "mcbsp3_sync_mux_ck" },
+};
+
+static struct omap_hwmod omap54xx_mcbsp3_hwmod = {
+       .name           = "mcbsp3",
+       .class          = &omap54xx_mcbsp_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "mcbsp3_gfclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_MCBSP3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .opt_clks       = mcbsp3_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(mcbsp3_opt_clks),
+};
+
+/*
+ * 'mcpdm' class
+ * multi channel pdm controller (proprietary interface with phoenix power
+ * ic)
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_mcpdm_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap54xx_mcpdm_hwmod_class = {
+       .name   = "mcpdm",
+       .sysc   = &omap54xx_mcpdm_sysc,
+};
+
+/* mcpdm */
+static struct omap_hwmod omap54xx_mcpdm_hwmod = {
+       .name           = "mcpdm",
+       .class          = &omap54xx_mcpdm_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       /*
+        * It's suspected that the McPDM requires an off-chip main
+        * functional clock, controlled via I2C.  This IP block is
+        * currently reset very early during boot, before I2C is
+        * available, so it doesn't seem that we have any choice in
+        * the kernel other than to avoid resetting it.  XXX This is
+        * really a hardware issue workaround: every IP block should
+        * be able to source its main functional clock from either
+        * on-chip or off-chip sources.  McPDM seems to be the only
+        * current exception.
+        */
+
+       .flags          = HWMOD_EXT_OPT_MAIN_CLK,
+       .main_clk       = "pad_clks_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_MCPDM_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_MCPDM_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/*
+ * 'mcspi' class
+ * multichannel serial port interface (mcspi) / master/slave synchronous serial
+ * bus
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_mcspi_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap54xx_mcspi_hwmod_class = {
+       .name   = "mcspi",
+       .sysc   = &omap54xx_mcspi_sysc,
+       .rev    = OMAP4_MCSPI_REV,
+};
+
+/* mcspi1 */
+/* mcspi1 dev_attr */
+static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
+       .num_chipselect = 4,
+};
+
+static struct omap_hwmod omap54xx_mcspi1_hwmod = {
+       .name           = "mcspi1",
+       .class          = &omap54xx_mcspi_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &mcspi1_dev_attr,
+};
+
+/* mcspi2 */
+/* mcspi2 dev_attr */
+static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
+       .num_chipselect = 2,
+};
+
+static struct omap_hwmod omap54xx_mcspi2_hwmod = {
+       .name           = "mcspi2",
+       .class          = &omap54xx_mcspi_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &mcspi2_dev_attr,
+};
+
+/* mcspi3 */
+/* mcspi3 dev_attr */
+static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
+       .num_chipselect = 2,
+};
+
+static struct omap_hwmod omap54xx_mcspi3_hwmod = {
+       .name           = "mcspi3",
+       .class          = &omap54xx_mcspi_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &mcspi3_dev_attr,
+};
+
+/* mcspi4 */
+/* mcspi4 dev_attr */
+static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
+       .num_chipselect = 1,
+};
+
+static struct omap_hwmod omap54xx_mcspi4_hwmod = {
+       .name           = "mcspi4",
+       .class          = &omap54xx_mcspi_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .dev_attr       = &mcspi4_dev_attr,
+};
+
+/*
+ * 'mmc' class
+ * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_mmc_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
+                          SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
+                          SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
+                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap54xx_mmc_hwmod_class = {
+       .name   = "mmc",
+       .sysc   = &omap54xx_mmc_sysc,
+};
+
+/* mmc1 */
+static struct omap_hwmod_opt_clk mmc1_opt_clks[] = {
+       { .role = "32khz_clk", .clk = "mmc1_32khz_clk" },
+};
+
+/* mmc1 dev_attr */
+static struct omap_mmc_dev_attr mmc1_dev_attr = {
+       .flags  = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
+};
+
+static struct omap_hwmod omap54xx_mmc1_hwmod = {
+       .name           = "mmc1",
+       .class          = &omap54xx_mmc_hwmod_class,
+       .clkdm_name     = "l3init_clkdm",
+       .main_clk       = "mmc1_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3INIT_MMC1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+       .opt_clks       = mmc1_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(mmc1_opt_clks),
+       .dev_attr       = &mmc1_dev_attr,
+};
+
+/* mmc2 */
+static struct omap_hwmod omap54xx_mmc2_hwmod = {
+       .name           = "mmc2",
+       .class          = &omap54xx_mmc_hwmod_class,
+       .clkdm_name     = "l3init_clkdm",
+       .main_clk       = "mmc2_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3INIT_MMC2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* mmc3 */
+static struct omap_hwmod omap54xx_mmc3_hwmod = {
+       .name           = "mmc3",
+       .class          = &omap54xx_mmc_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MMC3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MMC3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* mmc4 */
+static struct omap_hwmod omap54xx_mmc4_hwmod = {
+       .name           = "mmc4",
+       .class          = &omap54xx_mmc_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MMC4_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MMC4_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* mmc5 */
+static struct omap_hwmod omap54xx_mmc5_hwmod = {
+       .name           = "mmc5",
+       .class          = &omap54xx_mmc_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_96m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_MMC5_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_MMC5_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/*
+ * 'mpu' class
+ * mpu sub-system
+ */
+
+static struct omap_hwmod_class omap54xx_mpu_hwmod_class = {
+       .name   = "mpu",
+};
+
+/* mpu */
+static struct omap_hwmod omap54xx_mpu_hwmod = {
+       .name           = "mpu",
+       .class          = &omap54xx_mpu_hwmod_class,
+       .clkdm_name     = "mpu_clkdm",
+       .flags          = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
+       .main_clk       = "dpll_mpu_m2_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET,
+               },
+       },
+};
+
+/*
+ * 'timer' class
+ * general purpose timer module with accurate 1ms tick
+ * This class contains several variants: ['timer_1ms', 'timer']
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_timer_1ms_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+       .clockact       = CLOCKACT_TEST_ICLK,
+};
+
+static struct omap_hwmod_class omap54xx_timer_1ms_hwmod_class = {
+       .name   = "timer",
+       .sysc   = &omap54xx_timer_1ms_sysc,
+};
+
+static struct omap_hwmod_class_sysconfig omap54xx_timer_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap54xx_timer_hwmod_class = {
+       .name   = "timer",
+       .sysc   = &omap54xx_timer_sysc,
+};
+
+/* timer1 */
+static struct omap_hwmod omap54xx_timer1_hwmod = {
+       .name           = "timer1",
+       .class          = &omap54xx_timer_1ms_hwmod_class,
+       .clkdm_name     = "wkupaon_clkdm",
+       .main_clk       = "timer1_gfclk_mux",
+       .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_WKUPAON_TIMER1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer2 */
+static struct omap_hwmod omap54xx_timer2_hwmod = {
+       .name           = "timer2",
+       .class          = &omap54xx_timer_1ms_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "timer2_gfclk_mux",
+       .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_TIMER2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer3 */
+static struct omap_hwmod omap54xx_timer3_hwmod = {
+       .name           = "timer3",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "timer3_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_TIMER3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer4 */
+static struct omap_hwmod omap54xx_timer4_hwmod = {
+       .name           = "timer4",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "timer4_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER4_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_TIMER4_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer5 */
+static struct omap_hwmod omap54xx_timer5_hwmod = {
+       .name           = "timer5",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "timer5_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_TIMER5_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_TIMER5_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer6 */
+static struct omap_hwmod omap54xx_timer6_hwmod = {
+       .name           = "timer6",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "timer6_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_TIMER6_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_TIMER6_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer7 */
+static struct omap_hwmod omap54xx_timer7_hwmod = {
+       .name           = "timer7",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "timer7_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_TIMER7_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_TIMER7_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer8 */
+static struct omap_hwmod omap54xx_timer8_hwmod = {
+       .name           = "timer8",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "abe_clkdm",
+       .main_clk       = "timer8_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_ABE_TIMER8_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_ABE_TIMER8_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer9 */
+static struct omap_hwmod omap54xx_timer9_hwmod = {
+       .name           = "timer9",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "timer9_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER9_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_TIMER9_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer10 */
+static struct omap_hwmod omap54xx_timer10_hwmod = {
+       .name           = "timer10",
+       .class          = &omap54xx_timer_1ms_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "timer10_gfclk_mux",
+       .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER10_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_TIMER10_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* timer11 */
+static struct omap_hwmod omap54xx_timer11_hwmod = {
+       .name           = "timer11",
+       .class          = &omap54xx_timer_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "timer11_gfclk_mux",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER11_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_TIMER11_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/*
+ * 'uart' class
+ * universal asynchronous receiver/transmitter (uart)
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_uart_sysc = {
+       .rev_offs       = 0x0050,
+       .sysc_offs      = 0x0054,
+       .syss_offs      = 0x0058,
+       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
+                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+                          SYSS_HAS_RESET_STATUS),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_uart_hwmod_class = {
+       .name   = "uart",
+       .sysc   = &omap54xx_uart_sysc,
+};
+
+/* uart1 */
+static struct omap_hwmod omap54xx_uart1_hwmod = {
+       .name           = "uart1",
+       .class          = &omap54xx_uart_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_UART1_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_UART1_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* uart2 */
+static struct omap_hwmod omap54xx_uart2_hwmod = {
+       .name           = "uart2",
+       .class          = &omap54xx_uart_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_UART2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_UART2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* uart3 */
+static struct omap_hwmod omap54xx_uart3_hwmod = {
+       .name           = "uart3",
+       .class          = &omap54xx_uart_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .flags          = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_UART3_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_UART3_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* uart4 */
+static struct omap_hwmod omap54xx_uart4_hwmod = {
+       .name           = "uart4",
+       .class          = &omap54xx_uart_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_UART4_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_UART4_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* uart5 */
+static struct omap_hwmod omap54xx_uart5_hwmod = {
+       .name           = "uart5",
+       .class          = &omap54xx_uart_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_UART5_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_UART5_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/* uart6 */
+static struct omap_hwmod omap54xx_uart6_hwmod = {
+       .name           = "uart6",
+       .class          = &omap54xx_uart_hwmod_class,
+       .clkdm_name     = "l4per_clkdm",
+       .main_clk       = "func_48m_fclk",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L4PER_UART6_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L4PER_UART6_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+/*
+ * 'usb_otg_ss' class
+ * 2.0 super speed (usb_otg_ss) controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_usb_otg_ss_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .sysc_flags     = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
+                          SYSC_HAS_SIDLEMODE),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
+                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap54xx_usb_otg_ss_hwmod_class = {
+       .name   = "usb_otg_ss",
+       .sysc   = &omap54xx_usb_otg_ss_sysc,
+};
+
+/* usb_otg_ss */
+static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks[] = {
+       { .role = "refclk960m", .clk = "usb_otg_ss_refclk960m" },
+};
+
+static struct omap_hwmod omap54xx_usb_otg_ss_hwmod = {
+       .name           = "usb_otg_ss",
+       .class          = &omap54xx_usb_otg_ss_hwmod_class,
+       .clkdm_name     = "l3init_clkdm",
+       .flags          = HWMOD_SWSUP_SIDLE,
+       .main_clk       = "dpll_core_h13x2_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_HWCTRL,
+               },
+       },
+       .opt_clks       = usb_otg_ss_opt_clks,
+       .opt_clks_cnt   = ARRAY_SIZE(usb_otg_ss_opt_clks),
+};
+
+/*
+ * 'wd_timer' class
+ * 32-bit watchdog upward counter that generates a pulse on the reset pin on
+ * overflow condition
+ */
+
+static struct omap_hwmod_class_sysconfig omap54xx_wd_timer_sysc = {
+       .rev_offs       = 0x0000,
+       .sysc_offs      = 0x0010,
+       .syss_offs      = 0x0014,
+       .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
+                          SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+                          SIDLE_SMART_WKUP),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap54xx_wd_timer_hwmod_class = {
+       .name           = "wd_timer",
+       .sysc           = &omap54xx_wd_timer_sysc,
+       .pre_shutdown   = &omap2_wd_timer_disable,
+};
+
+/* wd_timer2 */
+static struct omap_hwmod omap54xx_wd_timer2_hwmod = {
+       .name           = "wd_timer2",
+       .class          = &omap54xx_wd_timer_hwmod_class,
+       .clkdm_name     = "wkupaon_clkdm",
+       .main_clk       = "sys_32k_ck",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP54XX_CM_WKUPAON_WD_TIMER2_CLKCTRL_OFFSET,
+                       .context_offs = OMAP54XX_RM_WKUPAON_WD_TIMER2_CONTEXT_OFFSET,
+                       .modulemode   = MODULEMODE_SWCTRL,
+               },
+       },
+};
+
+
+/*
+ * Interfaces
+ */
+
+/* l3_main_1 -> dmm */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_1__dmm = {
+       .master         = &omap54xx_l3_main_1_hwmod,
+       .slave          = &omap54xx_dmm_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_SDMA,
+};
+
+/* l3_main_3 -> l3_instr */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_3__l3_instr = {
+       .master         = &omap54xx_l3_main_3_hwmod,
+       .slave          = &omap54xx_l3_instr_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3_main_2 -> l3_main_1 */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_1 = {
+       .master         = &omap54xx_l3_main_2_hwmod,
+       .slave          = &omap54xx_l3_main_1_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_cfg -> l3_main_1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1 = {
+       .master         = &omap54xx_l4_cfg_hwmod,
+       .slave          = &omap54xx_l3_main_1_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* mpu -> l3_main_1 */
+static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1 = {
+       .master         = &omap54xx_mpu_hwmod,
+       .slave          = &omap54xx_l3_main_1_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU,
+};
+
+/* l3_main_1 -> l3_main_2 */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_2 = {
+       .master         = &omap54xx_l3_main_1_hwmod,
+       .slave          = &omap54xx_l3_main_2_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_cfg -> l3_main_2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2 = {
+       .master         = &omap54xx_l4_cfg_hwmod,
+       .slave          = &omap54xx_l3_main_2_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3_main_1 -> l3_main_3 */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3 = {
+       .master         = &omap54xx_l3_main_1_hwmod,
+       .slave          = &omap54xx_l3_main_3_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU,
+};
+
+/* l3_main_2 -> l3_main_3 */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_3 = {
+       .master         = &omap54xx_l3_main_2_hwmod,
+       .slave          = &omap54xx_l3_main_3_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_cfg -> l3_main_3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_3 = {
+       .master         = &omap54xx_l4_cfg_hwmod,
+       .slave          = &omap54xx_l3_main_3_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3_main_1 -> l4_abe */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_abe = {
+       .master         = &omap54xx_l3_main_1_hwmod,
+       .slave          = &omap54xx_l4_abe_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* mpu -> l4_abe */
+static struct omap_hwmod_ocp_if omap54xx_mpu__l4_abe = {
+       .master         = &omap54xx_mpu_hwmod,
+       .slave          = &omap54xx_l4_abe_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3_main_1 -> l4_cfg */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_cfg = {
+       .master         = &omap54xx_l3_main_1_hwmod,
+       .slave          = &omap54xx_l4_cfg_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3_main_2 -> l4_per */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l4_per = {
+       .master         = &omap54xx_l3_main_2_hwmod,
+       .slave          = &omap54xx_l4_per_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3_main_1 -> l4_wkup */
+static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_wkup = {
+       .master         = &omap54xx_l3_main_1_hwmod,
+       .slave          = &omap54xx_l4_wkup_hwmod,
+       .clk            = "wkupaon_iclk_mux",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* mpu -> mpu_private */
+static struct omap_hwmod_ocp_if omap54xx_mpu__mpu_private = {
+       .master         = &omap54xx_mpu_hwmod,
+       .slave          = &omap54xx_mpu_private_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> counter_32k */
+static struct omap_hwmod_ocp_if omap54xx_l4_wkup__counter_32k = {
+       .master         = &omap54xx_l4_wkup_hwmod,
+       .slave          = &omap54xx_counter_32k_hwmod,
+       .clk            = "wkupaon_iclk_mux",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+static struct omap_hwmod_addr_space omap54xx_dma_system_addrs[] = {
+       {
+               .pa_start       = 0x4a056000,
+               .pa_end         = 0x4a056fff,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
+/* l4_cfg -> dma_system */
+static struct omap_hwmod_ocp_if omap54xx_l4_cfg__dma_system = {
+       .master         = &omap54xx_l4_cfg_hwmod,
+       .slave          = &omap54xx_dma_system_hwmod,
+       .clk            = "l4_root_clk_div",
+       .addr           = omap54xx_dma_system_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_abe -> dmic */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_dmic_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* mpu -> emif1 */
+static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {
+       .master         = &omap54xx_mpu_hwmod,
+       .slave          = &omap54xx_emif1_hwmod,
+       .clk            = "dpll_core_h11x2_ck",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* mpu -> emif2 */
+static struct omap_hwmod_ocp_if omap54xx_mpu__emif2 = {
+       .master         = &omap54xx_mpu_hwmod,
+       .slave          = &omap54xx_emif2_hwmod,
+       .clk            = "dpll_core_h11x2_ck",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_wkup__gpio1 = {
+       .master         = &omap54xx_l4_wkup_hwmod,
+       .slave          = &omap54xx_gpio1_hwmod,
+       .clk            = "wkupaon_iclk_mux",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio2 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio2_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio3 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio3_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio4 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio4 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio4_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio5 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio5 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio5_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio6 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio6 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio6_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio7 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio7 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio7_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio8 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio8 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_gpio8_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> i2c1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c1 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_i2c1_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> i2c2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c2 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_i2c2_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> i2c3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c3 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_i2c3_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> i2c4 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c4 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_i2c4_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> i2c5 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c5 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_i2c5_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> kbd */
+static struct omap_hwmod_ocp_if omap54xx_l4_wkup__kbd = {
+       .master         = &omap54xx_l4_wkup_hwmod,
+       .slave          = &omap54xx_kbd_hwmod,
+       .clk            = "wkupaon_iclk_mux",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_abe -> mcbsp1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp1 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_mcbsp1_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_abe -> mcbsp2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp2 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_mcbsp2_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_abe -> mcbsp3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp3 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_mcbsp3_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_abe -> mcpdm */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcpdm = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_mcpdm_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_per -> mcspi1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi1 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mcspi1_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mcspi2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi2 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mcspi2_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mcspi3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi3 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mcspi3_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mcspi4 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi4 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mcspi4_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mmc1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc1 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mmc1_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mmc2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc2 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mmc2_hwmod,
+       .clk            = "l3_iclk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mmc3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc3 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mmc3_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mmc4 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc4 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mmc4_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> mmc5 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc5 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_mmc5_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_cfg -> mpu */
+static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {
+       .master         = &omap54xx_l4_cfg_hwmod,
+       .slave          = &omap54xx_mpu_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> timer1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_wkup__timer1 = {
+       .master         = &omap54xx_l4_wkup_hwmod,
+       .slave          = &omap54xx_timer1_hwmod,
+       .clk            = "wkupaon_iclk_mux",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> timer2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__timer2 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_timer2_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> timer3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__timer3 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_timer3_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> timer4 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__timer4 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_timer4_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_abe -> timer5 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer5 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_timer5_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_abe -> timer6 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer6 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_timer6_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_abe -> timer7 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer7 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_timer7_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_abe -> timer8 */
+static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer8 = {
+       .master         = &omap54xx_l4_abe_hwmod,
+       .slave          = &omap54xx_timer8_hwmod,
+       .clk            = "abe_iclk",
+       .user           = OCP_USER_MPU,
+};
+
+/* l4_per -> timer9 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__timer9 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_timer9_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> timer10 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__timer10 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_timer10_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> timer11 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__timer11 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_timer11_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> uart1 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__uart1 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_uart1_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> uart2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__uart2 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_uart2_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> uart3 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__uart3 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_uart3_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> uart4 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__uart4 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_uart4_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> uart5 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__uart5 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_uart5_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> uart6 */
+static struct omap_hwmod_ocp_if omap54xx_l4_per__uart6 = {
+       .master         = &omap54xx_l4_per_hwmod,
+       .slave          = &omap54xx_uart6_hwmod,
+       .clk            = "l4_root_clk_div",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_cfg -> usb_otg_ss */
+static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss = {
+       .master         = &omap54xx_l4_cfg_hwmod,
+       .slave          = &omap54xx_usb_otg_ss_hwmod,
+       .clk            = "dpll_core_h13x2_ck",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> wd_timer2 */
+static struct omap_hwmod_ocp_if omap54xx_l4_wkup__wd_timer2 = {
+       .master         = &omap54xx_l4_wkup_hwmod,
+       .slave          = &omap54xx_wd_timer2_hwmod,
+       .clk            = "wkupaon_iclk_mux",
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
+       &omap54xx_l3_main_1__dmm,
+       &omap54xx_l3_main_3__l3_instr,
+       &omap54xx_l3_main_2__l3_main_1,
+       &omap54xx_l4_cfg__l3_main_1,
+       &omap54xx_mpu__l3_main_1,
+       &omap54xx_l3_main_1__l3_main_2,
+       &omap54xx_l4_cfg__l3_main_2,
+       &omap54xx_l3_main_1__l3_main_3,
+       &omap54xx_l3_main_2__l3_main_3,
+       &omap54xx_l4_cfg__l3_main_3,
+       &omap54xx_l3_main_1__l4_abe,
+       &omap54xx_mpu__l4_abe,
+       &omap54xx_l3_main_1__l4_cfg,
+       &omap54xx_l3_main_2__l4_per,
+       &omap54xx_l3_main_1__l4_wkup,
+       &omap54xx_mpu__mpu_private,
+       &omap54xx_l4_wkup__counter_32k,
+       &omap54xx_l4_cfg__dma_system,
+       &omap54xx_l4_abe__dmic,
+       &omap54xx_mpu__emif1,
+       &omap54xx_mpu__emif2,
+       &omap54xx_l4_wkup__gpio1,
+       &omap54xx_l4_per__gpio2,
+       &omap54xx_l4_per__gpio3,
+       &omap54xx_l4_per__gpio4,
+       &omap54xx_l4_per__gpio5,
+       &omap54xx_l4_per__gpio6,
+       &omap54xx_l4_per__gpio7,
+       &omap54xx_l4_per__gpio8,
+       &omap54xx_l4_per__i2c1,
+       &omap54xx_l4_per__i2c2,
+       &omap54xx_l4_per__i2c3,
+       &omap54xx_l4_per__i2c4,
+       &omap54xx_l4_per__i2c5,
+       &omap54xx_l4_wkup__kbd,
+       &omap54xx_l4_abe__mcbsp1,
+       &omap54xx_l4_abe__mcbsp2,
+       &omap54xx_l4_abe__mcbsp3,
+       &omap54xx_l4_abe__mcpdm,
+       &omap54xx_l4_per__mcspi1,
+       &omap54xx_l4_per__mcspi2,
+       &omap54xx_l4_per__mcspi3,
+       &omap54xx_l4_per__mcspi4,
+       &omap54xx_l4_per__mmc1,
+       &omap54xx_l4_per__mmc2,
+       &omap54xx_l4_per__mmc3,
+       &omap54xx_l4_per__mmc4,
+       &omap54xx_l4_per__mmc5,
+       &omap54xx_l4_cfg__mpu,
+       &omap54xx_l4_wkup__timer1,
+       &omap54xx_l4_per__timer2,
+       &omap54xx_l4_per__timer3,
+       &omap54xx_l4_per__timer4,
+       &omap54xx_l4_abe__timer5,
+       &omap54xx_l4_abe__timer6,
+       &omap54xx_l4_abe__timer7,
+       &omap54xx_l4_abe__timer8,
+       &omap54xx_l4_per__timer9,
+       &omap54xx_l4_per__timer10,
+       &omap54xx_l4_per__timer11,
+       &omap54xx_l4_per__uart1,
+       &omap54xx_l4_per__uart2,
+       &omap54xx_l4_per__uart3,
+       &omap54xx_l4_per__uart4,
+       &omap54xx_l4_per__uart5,
+       &omap54xx_l4_per__uart6,
+       &omap54xx_l4_cfg__usb_otg_ss,
+       &omap54xx_l4_wkup__wd_timer2,
+       NULL,
+};
+
+int __init omap54xx_hwmod_init(void)
+{
+       omap_hwmod_init();
+       return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs);
+}
index a251f87fa2a2d08145d5e403e43705f988fa0c9a..82f0698933d85a5715282378736de84fa16ebad6 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * OMAP4 Power Management Routines
+ * OMAP4+ Power Management Routines
  *
- * Copyright (C) 2010-2011 Texas Instruments, Inc.
+ * Copyright (C) 2010-2013 Texas Instruments, Inc.
  * Rajendra Nayak <rnayak@ti.com>
  * Santosh Shilimkar <santosh.shilimkar@ti.com>
  *
@@ -135,16 +135,16 @@ static void omap_default_idle(void)
 }
 
 /**
- * omap4_pm_init - Init routine for OMAP4 PM
+ * omap4_init_static_deps - Add OMAP4 static dependencies
  *
- * Initializes all powerdomain and clockdomain target states
- * and all PRCM settings.
+ * Add needed static clockdomain dependencies on OMAP4 devices.
+ * Return: 0 on success or 'err' on failures
  */
-int __init omap4_pm_init(void)
+static inline int omap4_init_static_deps(void)
 {
-       int ret;
        struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm;
        struct clockdomain *ducati_clkdm, *l3_2_clkdm;
+       int ret = 0;
 
        if (omap_rev() == OMAP4430_REV_ES1_0) {
                WARN(1, "Power Management not supported on OMAP4430 ES1.0\n");
@@ -163,7 +163,7 @@ int __init omap4_pm_init(void)
        ret = pwrdm_for_each(pwrdms_setup, NULL);
        if (ret) {
                pr_err("Failed to setup powerdomains\n");
-               goto err2;
+               return ret;
        }
 
        /*
@@ -171,6 +171,10 @@ int __init omap4_pm_init(void)
         * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as
         * expected. The hardware recommendation is to enable static
         * dependencies for these to avoid system lock ups or random crashes.
+        * The L4 wakeup depedency is added to workaround the OCP sync hardware
+        * BUG with 32K synctimer which lead to incorrect timer value read
+        * from the 32K counter. The BUG applies for GPTIMER1 and WDT2 which
+        * are part of L4 wakeup clockdomain.
         */
        mpuss_clkdm = clkdm_lookup("mpuss_clkdm");
        emif_clkdm = clkdm_lookup("l3_emif_clkdm");
@@ -179,7 +183,7 @@ int __init omap4_pm_init(void)
        ducati_clkdm = clkdm_lookup("ducati_clkdm");
        if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) ||
                (!l3_2_clkdm) || (!ducati_clkdm))
-               goto err2;
+               return -EINVAL;
 
        ret = clkdm_add_wkdep(mpuss_clkdm, emif_clkdm);
        ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm);
@@ -188,9 +192,42 @@ int __init omap4_pm_init(void)
        ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm);
        if (ret) {
                pr_err("Failed to add MPUSS -> L3/EMIF/L4PER, DUCATI -> L3 wakeup dependency\n");
+               return -EINVAL;
+       }
+
+       return ret;
+}
+
+/**
+ * omap4_pm_init - Init routine for OMAP4+ devices
+ *
+ * Initializes all powerdomain and clockdomain target states
+ * and all PRCM settings.
+ * Return: Returns the error code returned by called functions.
+ */
+int __init omap4_pm_init(void)
+{
+       int ret = 0;
+
+       if (omap_rev() == OMAP4430_REV_ES1_0) {
+               WARN(1, "Power Management not supported on OMAP4430 ES1.0\n");
+               return -ENODEV;
+       }
+
+       pr_info("Power Management for TI OMAP4+ devices.\n");
+
+       ret = pwrdm_for_each(pwrdms_setup, NULL);
+       if (ret) {
+               pr_err("Failed to setup powerdomains.\n");
                goto err2;
        }
 
+       if (cpu_is_omap44xx()) {
+               ret = omap4_init_static_deps();
+               if (ret)
+                       goto err2;
+       }
+
        ret = omap4_mpuss_init();
        if (ret) {
                pr_err("Failed to initialise OMAP4 MPUSS\n");
@@ -206,7 +243,8 @@ int __init omap4_pm_init(void)
        /* Overwrite the default cpu_do_idle() */
        arm_pm_idle = omap_default_idle;
 
-       omap4_idle_init();
+       if (cpu_is_omap44xx())
+               omap4_idle_init();
 
 err2:
        return ret;
index 9701ad5778b9b20e26af797406ca587c46b96d2b..e4d7bd6f94b89bda9e20f9e80ed46116d03b1338 100644 (file)
@@ -255,6 +255,7 @@ extern void omap243x_powerdomains_init(void);
 extern void omap3xxx_powerdomains_init(void);
 extern void am33xx_powerdomains_init(void);
 extern void omap44xx_powerdomains_init(void);
+extern void omap54xx_powerdomains_init(void);
 
 extern struct pwrdm_ops omap2_pwrdm_operations;
 extern struct pwrdm_ops omap3_pwrdm_operations;
index f0e14e9efe5a18bccff639a6894480a7120c43a3..e2d4bd804523316e5b9400d4870916a01827834c 100644 (file)
@@ -336,6 +336,54 @@ static struct powerdomain dpll5_pwrdm = {
        .voltdm           = { .name = "core" },
 };
 
+static struct powerdomain device_81xx_pwrdm = {
+       .name             = "device_pwrdm",
+       .prcm_offs        = TI81XX_PRM_DEVICE_MOD,
+       .voltdm           = { .name = "core" },
+};
+
+static struct powerdomain active_816x_pwrdm = {
+       .name             = "active_pwrdm",
+       .prcm_offs        = TI816X_PRM_ACTIVE_MOD,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .voltdm           = { .name = "core" },
+};
+
+static struct powerdomain default_816x_pwrdm = {
+       .name             = "default_pwrdm",
+       .prcm_offs        = TI81XX_PRM_DEFAULT_MOD,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .voltdm           = { .name = "core" },
+};
+
+static struct powerdomain ivahd0_816x_pwrdm = {
+       .name             = "ivahd0_pwrdm",
+       .prcm_offs        = TI816X_PRM_IVAHD0_MOD,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .voltdm           = { .name = "mpu_iva" },
+};
+
+static struct powerdomain ivahd1_816x_pwrdm = {
+       .name             = "ivahd1_pwrdm",
+       .prcm_offs        = TI816X_PRM_IVAHD1_MOD,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .voltdm           = { .name = "mpu_iva" },
+};
+
+static struct powerdomain ivahd2_816x_pwrdm = {
+       .name             = "ivahd2_pwrdm",
+       .prcm_offs        = TI816X_PRM_IVAHD2_MOD,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .voltdm           = { .name = "mpu_iva" },
+};
+
+static struct powerdomain sgx_816x_pwrdm = {
+       .name             = "sgx_pwrdm",
+       .prcm_offs        = TI816X_PRM_SGX_MOD,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .voltdm           = { .name = "core" },
+};
+
 /* As powerdomains are added or removed above, this list must also be changed */
 static struct powerdomain *powerdomains_omap3430_common[] __initdata = {
        &wkup_omap2_pwrdm,
@@ -393,6 +441,17 @@ static struct powerdomain *powerdomains_am35x[] __initdata = {
        NULL
 };
 
+static struct powerdomain *powerdomains_ti81xx[] __initdata = {
+       &device_81xx_pwrdm,
+       &active_816x_pwrdm,
+       &default_816x_pwrdm,
+       &ivahd0_816x_pwrdm,
+       &ivahd1_816x_pwrdm,
+       &ivahd2_816x_pwrdm,
+       &sgx_816x_pwrdm,
+       NULL
+};
+
 void __init omap3xxx_powerdomains_init(void)
 {
        unsigned int rev;
@@ -406,6 +465,9 @@ void __init omap3xxx_powerdomains_init(void)
 
        if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
                pwrdm_register_pwrdms(powerdomains_am35x);
+       } else if (rev == TI8168_REV_ES1_0 || rev == TI8168_REV_ES1_1
+                       || rev == TI8168_REV_ES2_0 || rev == TI8168_REV_ES2_1) {
+               pwrdm_register_pwrdms(powerdomains_ti81xx);
        } else {
                pwrdm_register_pwrdms(powerdomains_omap3430_common);
 
diff --git a/arch/arm/mach-omap2/powerdomains54xx_data.c b/arch/arm/mach-omap2/powerdomains54xx_data.c
new file mode 100644 (file)
index 0000000..81f8a7c
--- /dev/null
@@ -0,0 +1,331 @@
+/*
+ * OMAP54XX Power domains framework
+ *
+ * Copyright (C) 2013 Texas Instruments, Inc.
+ *
+ * Abhijit Pagare (abhijitpagare@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ * Paul Walmsley (paul@pwsan.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include "powerdomain.h"
+
+#include "prcm-common.h"
+#include "prcm44xx.h"
+#include "prm-regbits-54xx.h"
+#include "prm54xx.h"
+#include "prcm_mpu54xx.h"
+
+/* core_54xx_pwrdm: CORE power domain */
+static struct powerdomain core_54xx_pwrdm = {
+       .name             = "core_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_CORE_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF_RET,
+       .banks            = 5,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* core_nret_bank */
+               [1] = PWRSTS_OFF_RET,   /* core_ocmram */
+               [2] = PWRSTS_OFF_RET,   /* core_other_bank */
+               [3] = PWRSTS_OFF_RET,   /* ipu_l2ram */
+               [4] = PWRSTS_OFF_RET,   /* ipu_unicache */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* core_nret_bank */
+               [1] = PWRSTS_OFF_RET,   /* core_ocmram */
+               [2] = PWRSTS_OFF_RET,   /* core_other_bank */
+               [3] = PWRSTS_OFF_RET,   /* ipu_l2ram */
+               [4] = PWRSTS_OFF_RET,   /* ipu_unicache */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* abe_54xx_pwrdm: Audio back end power domain */
+static struct powerdomain abe_54xx_pwrdm = {
+       .name             = "abe_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_ABE_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF,
+       .banks            = 2,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* aessmem */
+               [1] = PWRSTS_OFF_RET,   /* periphmem */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* aessmem */
+               [1] = PWRSTS_OFF_RET,   /* periphmem */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* coreaon_54xx_pwrdm: Always ON logic that sits in VDD_CORE voltage domain */
+static struct powerdomain coreaon_54xx_pwrdm = {
+       .name             = "coreaon_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_COREAON_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_ON,
+};
+
+/* dss_54xx_pwrdm: Display subsystem power domain */
+static struct powerdomain dss_54xx_pwrdm = {
+       .name             = "dss_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_DSS_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* dss_mem */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* dss_mem */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* cpu0_54xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
+static struct powerdomain cpu0_54xx_pwrdm = {
+       .name             = "cpu0_pwrdm",
+       .voltdm           = { .name = "mpu" },
+       .prcm_offs        = OMAP54XX_PRCM_MPU_PRM_C0_INST,
+       .prcm_partition   = OMAP54XX_PRCM_MPU_PARTITION,
+       .pwrsts           = PWRSTS_OFF_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF_RET,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* cpu0_l1 */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_ON,        /* cpu0_l1 */
+       },
+};
+
+/* cpu1_54xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
+static struct powerdomain cpu1_54xx_pwrdm = {
+       .name             = "cpu1_pwrdm",
+       .voltdm           = { .name = "mpu" },
+       .prcm_offs        = OMAP54XX_PRCM_MPU_PRM_C1_INST,
+       .prcm_partition   = OMAP54XX_PRCM_MPU_PARTITION,
+       .pwrsts           = PWRSTS_OFF_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF_RET,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* cpu1_l1 */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_ON,        /* cpu1_l1 */
+       },
+};
+
+/* emu_54xx_pwrdm: Emulation power domain */
+static struct powerdomain emu_54xx_pwrdm = {
+       .name             = "emu_pwrdm",
+       .voltdm           = { .name = "wkup" },
+       .prcm_offs        = OMAP54XX_PRM_EMU_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* emu_bank */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* emu_bank */
+       },
+};
+
+/* mpu_54xx_pwrdm: Modena processor and the Neon coprocessor power domain */
+static struct powerdomain mpu_54xx_pwrdm = {
+       .name             = "mpu_pwrdm",
+       .voltdm           = { .name = "mpu" },
+       .prcm_offs        = OMAP54XX_PRM_MPU_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF_RET,
+       .banks            = 2,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* mpu_l2 */
+               [1] = PWRSTS_RET,       /* mpu_ram */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* mpu_l2 */
+               [1] = PWRSTS_OFF_RET,   /* mpu_ram */
+       },
+};
+
+/* custefuse_54xx_pwrdm: Customer efuse controller power domain */
+static struct powerdomain custefuse_54xx_pwrdm = {
+       .name             = "custefuse_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_CUSTEFUSE_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* dsp_54xx_pwrdm: Tesla processor power domain */
+static struct powerdomain dsp_54xx_pwrdm = {
+       .name             = "dsp_pwrdm",
+       .voltdm           = { .name = "mm" },
+       .prcm_offs        = OMAP54XX_PRM_DSP_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF_RET,
+       .banks            = 3,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* dsp_edma */
+               [1] = PWRSTS_OFF_RET,   /* dsp_l1 */
+               [2] = PWRSTS_OFF_RET,   /* dsp_l2 */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* dsp_edma */
+               [1] = PWRSTS_OFF_RET,   /* dsp_l1 */
+               [2] = PWRSTS_OFF_RET,   /* dsp_l2 */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* cam_54xx_pwrdm: Camera subsystem power domain */
+static struct powerdomain cam_54xx_pwrdm = {
+       .name             = "cam_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_CAM_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* cam_mem */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* cam_mem */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* l3init_54xx_pwrdm: L3 initators pheripherals power domain  */
+static struct powerdomain l3init_54xx_pwrdm = {
+       .name             = "l3init_pwrdm",
+       .voltdm           = { .name = "core" },
+       .prcm_offs        = OMAP54XX_PRM_L3INIT_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF_RET,
+       .banks            = 2,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* l3init_bank1 */
+               [1] = PWRSTS_OFF_RET,   /* l3init_bank2 */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* l3init_bank1 */
+               [1] = PWRSTS_OFF_RET,   /* l3init_bank2 */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* gpu_54xx_pwrdm: 3D accelerator power domain */
+static struct powerdomain gpu_54xx_pwrdm = {
+       .name             = "gpu_pwrdm",
+       .voltdm           = { .name = "mm" },
+       .prcm_offs        = OMAP54XX_PRM_GPU_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_ON,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* gpu_mem */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* gpu_mem */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/* wkupaon_54xx_pwrdm: Wake-up power domain */
+static struct powerdomain wkupaon_54xx_pwrdm = {
+       .name             = "wkupaon_pwrdm",
+       .voltdm           = { .name = "wkup" },
+       .prcm_offs        = OMAP54XX_PRM_WKUPAON_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_ON,
+       .banks            = 1,
+       .pwrsts_mem_ret = {
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_ON,        /* wkup_bank */
+       },
+};
+
+/* iva_54xx_pwrdm: IVA-HD power domain */
+static struct powerdomain iva_54xx_pwrdm = {
+       .name             = "iva_pwrdm",
+       .voltdm           = { .name = "mm" },
+       .prcm_offs        = OMAP54XX_PRM_IVA_INST,
+       .prcm_partition   = OMAP54XX_PRM_PARTITION,
+       .pwrsts           = PWRSTS_OFF_RET_ON,
+       .pwrsts_logic_ret = PWRSTS_OFF,
+       .banks            = 4,
+       .pwrsts_mem_ret = {
+               [0] = PWRSTS_OFF_RET,   /* hwa_mem */
+               [1] = PWRSTS_OFF_RET,   /* sl2_mem */
+               [2] = PWRSTS_OFF_RET,   /* tcm1_mem */
+               [3] = PWRSTS_OFF_RET,   /* tcm2_mem */
+       },
+       .pwrsts_mem_on  = {
+               [0] = PWRSTS_OFF_RET,   /* hwa_mem */
+               [1] = PWRSTS_OFF_RET,   /* sl2_mem */
+               [2] = PWRSTS_OFF_RET,   /* tcm1_mem */
+               [3] = PWRSTS_OFF_RET,   /* tcm2_mem */
+       },
+       .flags            = PWRDM_HAS_LOWPOWERSTATECHANGE,
+};
+
+/*
+ * The following power domains are not under SW control
+ *
+ * mpuaon
+ * mmaon
+ */
+
+/* As powerdomains are added or removed above, this list must also be changed */
+static struct powerdomain *powerdomains_omap54xx[] __initdata = {
+       &core_54xx_pwrdm,
+       &abe_54xx_pwrdm,
+       &coreaon_54xx_pwrdm,
+       &dss_54xx_pwrdm,
+       &cpu0_54xx_pwrdm,
+       &cpu1_54xx_pwrdm,
+       &emu_54xx_pwrdm,
+       &mpu_54xx_pwrdm,
+       &custefuse_54xx_pwrdm,
+       &dsp_54xx_pwrdm,
+       &cam_54xx_pwrdm,
+       &l3init_54xx_pwrdm,
+       &gpu_54xx_pwrdm,
+       &wkupaon_54xx_pwrdm,
+       &iva_54xx_pwrdm,
+       NULL
+};
+
+void __init omap54xx_powerdomains_init(void)
+{
+       pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
+       pwrdm_register_pwrdms(powerdomains_omap54xx);
+       pwrdm_complete_init();
+}
index c7d355fafd24ef27b363e44fbc3220ffd13ab7c8..ff1ac4a82a04a036b15e6a5f33c9f645ffb7d2f3 100644 (file)
 #define OMAP3430_NEON_MOD                              0xb00
 #define OMAP3430ES2_USBHOST_MOD                                0xc00
 
+/*
+ * TI81XX PRM module offsets
+ */
+#define TI81XX_PRM_DEVICE_MOD                  0x0000
+#define TI816X_PRM_ACTIVE_MOD                  0x0a00
+#define TI81XX_PRM_DEFAULT_MOD                 0x0b00
+#define TI816X_PRM_IVAHD0_MOD                  0x0c00
+#define TI816X_PRM_IVAHD1_MOD                  0x0d00
+#define TI816X_PRM_IVAHD2_MOD                  0x0e00
+#define TI816X_PRM_SGX_MOD                             0x0f00
+
 /* 24XX register bits shared between CM & PRM registers */
 
 /* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */
index 7334ffb9d2c1ea666a1f326e5f2a9076df0c16a9..f429cdd5a118aa5ca3ea647b1ee3307b18c3bf20 100644 (file)
 #define OMAP4430_SCRM_PARTITION                        4
 #define OMAP4430_PRCM_MPU_PARTITION            5
 
+#define OMAP54XX_PRM_PARTITION                 1
+#define OMAP54XX_CM_CORE_AON_PARTITION         2
+#define OMAP54XX_CM_CORE_PARTITION             3
+#define OMAP54XX_SCRM_PARTITION                        4
+#define OMAP54XX_PRCM_MPU_PARTITION            5
+
 /*
  * OMAP4_MAX_PRCM_PARTITIONS: set to the highest value of the PRCM partition
  * IDs, plus one
index 884af7bb4afd952b67a55e70fb06dc1457c4292d..059bd4f4903552f00b5185bb5b57f95a067b81b9 100644 (file)
 #ifndef __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
 #define __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
 
+#include "prcm_mpu_44xx_54xx.h"
 #include "common.h"
 
-# ifndef __ASSEMBLER__
-extern void __iomem *prcm_mpu_base;
-# endif
-
 #define OMAP4430_PRCM_MPU_BASE                 0x48243000
 
 #define OMAP44XX_PRCM_MPU_REGADDR(inst, reg)                           \
@@ -98,13 +95,4 @@ extern void __iomem *prcm_mpu_base;
 #define OMAP4_CM_CPU1_CLKSTCTRL_OFFSET         0x0018
 #define OMAP4430_CM_CPU1_CLKSTCTRL             OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0018)
 
-/* Function prototypes */
-# ifndef __ASSEMBLER__
-extern u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 idx);
-extern void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 idx);
-extern u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst,
-                                           s16 idx);
-extern void __init omap2_set_globals_prcm_mpu(void __iomem *prcm_mpu);
-# endif
-
 #endif
diff --git a/arch/arm/mach-omap2/prcm_mpu54xx.h b/arch/arm/mach-omap2/prcm_mpu54xx.h
new file mode 100644 (file)
index 0000000..bc2ce32
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * OMAP54xx PRCM MPU instance offset macros
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_PRCM_MPU54XX_H
+#define __ARCH_ARM_MACH_OMAP2_PRCM_MPU54XX_H
+
+#include "prcm_mpu_44xx_54xx.h"
+#include "common.h"
+
+#define OMAP54XX_PRCM_MPU_BASE                 0x48243000
+
+#define OMAP54XX_PRCM_MPU_REGADDR(inst, reg)                           \
+       OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE + (inst) + (reg))
+
+/* PRCM_MPU instances */
+#define OMAP54XX_PRCM_MPU_OCP_SOCKET_INST      0x0000
+#define OMAP54XX_PRCM_MPU_DEVICE_INST          0x0200
+#define OMAP54XX_PRCM_MPU_PRM_C0_INST          0x0400
+#define OMAP54XX_PRCM_MPU_CM_C0_INST           0x0600
+#define OMAP54XX_PRCM_MPU_PRM_C1_INST          0x0800
+#define OMAP54XX_PRCM_MPU_CM_C1_INST           0x0a00
+
+/* PRCM_MPU clockdomain register offsets (from instance start) */
+#define OMAP54XX_PRCM_MPU_CM_C0_CPU0_CDOFFS    0x0000
+#define OMAP54XX_PRCM_MPU_CM_C1_CPU1_CDOFFS    0x0000
+
+
+/*
+ * PRCM_MPU
+ *
+ * The PRCM_MPU is a local PRCM inside the MPU subsystem. For the PRCM (global)
+ * point of view the PRCM_MPU is a single entity. It shares the same
+ * programming model as the global PRCM and thus can be assimilate as two new
+ * MOD inside the PRCM
+ */
+
+/* PRCM_MPU.PRCM_MPU_OCP_SOCKET register offsets */
+#define OMAP54XX_REVISION_PRCM_MPU_OFFSET                      0x0000
+
+/* PRCM_MPU.PRCM_MPU_DEVICE register offsets */
+#define OMAP54XX_PRCM_MPU_PRM_RSTST_OFFSET                     0x0000
+#define OMAP54XX_PRCM_MPU_PRM_PSCON_COUNT_OFFSET               0x0004
+#define OMAP54XX_PRM_FRAC_INCREMENTER_NUMERATOR_OFFSET         0x0010
+#define OMAP54XX_PRM_FRAC_INCREMENTER_DENUMERATOR_RELOAD_OFFSET        0x0014
+
+/* PRCM_MPU.PRCM_MPU_PRM_C0 register offsets */
+#define OMAP54XX_PM_CPU0_PWRSTCTRL_OFFSET                      0x0000
+#define OMAP54XX_PM_CPU0_PWRSTST_OFFSET                                0x0004
+#define OMAP54XX_RM_CPU0_CPU0_RSTCTRL_OFFSET                   0x0010
+#define OMAP54XX_RM_CPU0_CPU0_RSTST_OFFSET                     0x0014
+#define OMAP54XX_RM_CPU0_CPU0_CONTEXT_OFFSET                   0x0024
+
+/* PRCM_MPU.PRCM_MPU_CM_C0 register offsets */
+#define OMAP54XX_CM_CPU0_CLKSTCTRL_OFFSET                      0x0000
+#define OMAP54XX_CM_CPU0_CPU0_CLKCTRL_OFFSET                   0x0020
+#define OMAP54XX_CM_CPU0_CPU0_CLKCTRL                          OMAP54XX_PRCM_MPU_REGADDR(OMAP54XX_PRCM_MPU_CM_C0_INST, 0x0020)
+
+/* PRCM_MPU.PRCM_MPU_PRM_C1 register offsets */
+#define OMAP54XX_PM_CPU1_PWRSTCTRL_OFFSET                      0x0000
+#define OMAP54XX_PM_CPU1_PWRSTST_OFFSET                                0x0004
+#define OMAP54XX_RM_CPU1_CPU1_RSTCTRL_OFFSET                   0x0010
+#define OMAP54XX_RM_CPU1_CPU1_RSTST_OFFSET                     0x0014
+#define OMAP54XX_RM_CPU1_CPU1_CONTEXT_OFFSET                   0x0024
+
+/* PRCM_MPU.PRCM_MPU_CM_C1 register offsets */
+#define OMAP54XX_CM_CPU1_CLKSTCTRL_OFFSET                      0x0000
+#define OMAP54XX_CM_CPU1_CPU1_CLKCTRL_OFFSET                   0x0020
+#define OMAP54XX_CM_CPU1_CPU1_CLKCTRL                          OMAP54XX_PRCM_MPU_REGADDR(OMAP54XX_PRCM_MPU_CM_C1_INST, 0x0020)
+
+#endif
diff --git a/arch/arm/mach-omap2/prcm_mpu_44xx_54xx.h b/arch/arm/mach-omap2/prcm_mpu_44xx_54xx.h
new file mode 100644 (file)
index 0000000..ca149e7
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * OMAP44xx and OMAP54xx PRCM MPU function prototypes
+ *
+ * Copyright (C) 2010, 2013 Texas Instruments, Inc.
+ * Copyright (C) 2010 Nokia Corporation
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_PRCM_MPU_44XX_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_PRCM_MPU_44XX_54XX_H
+
+#ifndef __ASSEMBLER__
+extern void __iomem *prcm_mpu_base;
+
+extern u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 idx);
+extern void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 idx);
+extern u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst,
+                                           s16 idx);
+extern void __init omap2_set_globals_prcm_mpu(void __iomem *prcm_mpu);
+#endif
+
+#endif
diff --git a/arch/arm/mach-omap2/prm-regbits-54xx.h b/arch/arm/mach-omap2/prm-regbits-54xx.h
new file mode 100644 (file)
index 0000000..be31b21
--- /dev/null
@@ -0,0 +1,2701 @@
+/*
+ * OMAP54xx Power Management register bits
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_54XX_H
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ABBOFF_ACT_SHIFT                                              1
+#define OMAP54XX_ABBOFF_ACT_WIDTH                                              0x1
+#define OMAP54XX_ABBOFF_ACT_MASK                                               (1 << 1)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ABBOFF_SLEEP_SHIFT                                            2
+#define OMAP54XX_ABBOFF_SLEEP_WIDTH                                            0x1
+#define OMAP54XX_ABBOFF_SLEEP_MASK                                             (1 << 2)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_ABB_MM_DONE_EN_SHIFT                                          31
+#define OMAP54XX_ABB_MM_DONE_EN_WIDTH                                          0x1
+#define OMAP54XX_ABB_MM_DONE_EN_MASK                                           (1 << 31)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_ABB_MM_DONE_ST_SHIFT                                          31
+#define OMAP54XX_ABB_MM_DONE_ST_WIDTH                                          0x1
+#define OMAP54XX_ABB_MM_DONE_ST_MASK                                           (1 << 31)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_ABB_MPU_DONE_EN_SHIFT                                         7
+#define OMAP54XX_ABB_MPU_DONE_EN_WIDTH                                         0x1
+#define OMAP54XX_ABB_MPU_DONE_EN_MASK                                          (1 << 7)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_ABB_MPU_DONE_ST_SHIFT                                         7
+#define OMAP54XX_ABB_MPU_DONE_ST_WIDTH                                         0x1
+#define OMAP54XX_ABB_MPU_DONE_ST_MASK                                          (1 << 7)
+
+/* Used by PRM_ABBLDO_MM_SETUP, PRM_ABBLDO_MPU_SETUP */
+#define OMAP54XX_ACTIVE_FBB_SEL_SHIFT                                          2
+#define OMAP54XX_ACTIVE_FBB_SEL_WIDTH                                          0x1
+#define OMAP54XX_ACTIVE_FBB_SEL_MASK                                           (1 << 2)
+
+/* Used by PM_ABE_PWRSTCTRL */
+#define OMAP54XX_AESSMEM_ONSTATE_SHIFT                                         16
+#define OMAP54XX_AESSMEM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_AESSMEM_ONSTATE_MASK                                          (0x3 << 16)
+
+/* Used by PM_ABE_PWRSTCTRL */
+#define OMAP54XX_AESSMEM_RETSTATE_SHIFT                                                8
+#define OMAP54XX_AESSMEM_RETSTATE_WIDTH                                                0x1
+#define OMAP54XX_AESSMEM_RETSTATE_MASK                                         (1 << 8)
+
+/* Used by PM_ABE_PWRSTST */
+#define OMAP54XX_AESSMEM_STATEST_SHIFT                                         4
+#define OMAP54XX_AESSMEM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_AESSMEM_STATEST_MASK                                          (0x3 << 4)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_AIPOFF_SHIFT                                                  8
+#define OMAP54XX_AIPOFF_WIDTH                                                  0x1
+#define OMAP54XX_AIPOFF_MASK                                                   (1 << 8)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_AUTO_CTRL_VDD_CORE_L_SHIFT                                    0
+#define OMAP54XX_AUTO_CTRL_VDD_CORE_L_WIDTH                                    0x2
+#define OMAP54XX_AUTO_CTRL_VDD_CORE_L_MASK                                     (0x3 << 0)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_AUTO_CTRL_VDD_MM_L_SHIFT                                      4
+#define OMAP54XX_AUTO_CTRL_VDD_MM_L_WIDTH                                      0x2
+#define OMAP54XX_AUTO_CTRL_VDD_MM_L_MASK                                       (0x3 << 4)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_AUTO_CTRL_VDD_MPU_L_SHIFT                                     2
+#define OMAP54XX_AUTO_CTRL_VDD_MPU_L_WIDTH                                     0x2
+#define OMAP54XX_AUTO_CTRL_VDD_MPU_L_MASK                                      (0x3 << 2)
+
+/* Used by PRM_VC_BYPASS_ERRST */
+#define OMAP54XX_BYPS_RA_ERR_SHIFT                                             1
+#define OMAP54XX_BYPS_RA_ERR_WIDTH                                             0x1
+#define OMAP54XX_BYPS_RA_ERR_MASK                                              (1 << 1)
+
+/* Used by PRM_VC_BYPASS_ERRST */
+#define OMAP54XX_BYPS_SA_ERR_SHIFT                                             0
+#define OMAP54XX_BYPS_SA_ERR_WIDTH                                             0x1
+#define OMAP54XX_BYPS_SA_ERR_MASK                                              (1 << 0)
+
+/* Used by PRM_VC_BYPASS_ERRST */
+#define OMAP54XX_BYPS_TIMEOUT_ERR_SHIFT                                                2
+#define OMAP54XX_BYPS_TIMEOUT_ERR_WIDTH                                                0x1
+#define OMAP54XX_BYPS_TIMEOUT_ERR_MASK                                         (1 << 2)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_C2C_RST_SHIFT                                                 10
+#define OMAP54XX_C2C_RST_WIDTH                                                 0x1
+#define OMAP54XX_C2C_RST_MASK                                                  (1 << 10)
+
+/* Used by PM_CAM_PWRSTCTRL */
+#define OMAP54XX_CAM_MEM_ONSTATE_SHIFT                                         16
+#define OMAP54XX_CAM_MEM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_CAM_MEM_ONSTATE_MASK                                          (0x3 << 16)
+
+/* Used by PM_CAM_PWRSTST */
+#define OMAP54XX_CAM_MEM_STATEST_SHIFT                                         4
+#define OMAP54XX_CAM_MEM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_CAM_MEM_STATEST_MASK                                          (0x3 << 4)
+
+/* Used by PRM_CLKREQCTRL */
+#define OMAP54XX_CLKREQ_COND_SHIFT                                             0
+#define OMAP54XX_CLKREQ_COND_WIDTH                                             0x3
+#define OMAP54XX_CLKREQ_COND_MASK                                              (0x7 << 0)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_CMDRA_VDD_CORE_L_SHIFT                                                16
+#define OMAP54XX_CMDRA_VDD_CORE_L_WIDTH                                                0x8
+#define OMAP54XX_CMDRA_VDD_CORE_L_MASK                                         (0xff << 16)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_CMDRA_VDD_MM_L_SHIFT                                          16
+#define OMAP54XX_CMDRA_VDD_MM_L_WIDTH                                          0x8
+#define OMAP54XX_CMDRA_VDD_MM_L_MASK                                           (0xff << 16)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_CMDRA_VDD_MPU_L_SHIFT                                         16
+#define OMAP54XX_CMDRA_VDD_MPU_L_WIDTH                                         0x8
+#define OMAP54XX_CMDRA_VDD_MPU_L_MASK                                          (0xff << 16)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_CMD_VDD_CORE_L_SHIFT                                          28
+#define OMAP54XX_CMD_VDD_CORE_L_WIDTH                                          0x1
+#define OMAP54XX_CMD_VDD_CORE_L_MASK                                           (1 << 28)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_CMD_VDD_MM_L_SHIFT                                            28
+#define OMAP54XX_CMD_VDD_MM_L_WIDTH                                            0x1
+#define OMAP54XX_CMD_VDD_MM_L_MASK                                             (1 << 28)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_CMD_VDD_MPU_L_SHIFT                                           28
+#define OMAP54XX_CMD_VDD_MPU_L_WIDTH                                           0x1
+#define OMAP54XX_CMD_VDD_MPU_L_MASK                                            (1 << 28)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_CORE_OCMRAM_ONSTATE_SHIFT                                     18
+#define OMAP54XX_CORE_OCMRAM_ONSTATE_WIDTH                                     0x2
+#define OMAP54XX_CORE_OCMRAM_ONSTATE_MASK                                      (0x3 << 18)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_CORE_OCMRAM_RETSTATE_SHIFT                                    9
+#define OMAP54XX_CORE_OCMRAM_RETSTATE_WIDTH                                    0x1
+#define OMAP54XX_CORE_OCMRAM_RETSTATE_MASK                                     (1 << 9)
+
+/* Used by PM_CORE_PWRSTST */
+#define OMAP54XX_CORE_OCMRAM_STATEST_SHIFT                                     6
+#define OMAP54XX_CORE_OCMRAM_STATEST_WIDTH                                     0x2
+#define OMAP54XX_CORE_OCMRAM_STATEST_MASK                                      (0x3 << 6)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_CORE_OTHER_BANK_ONSTATE_SHIFT                                 16
+#define OMAP54XX_CORE_OTHER_BANK_ONSTATE_WIDTH                                 0x2
+#define OMAP54XX_CORE_OTHER_BANK_ONSTATE_MASK                                  (0x3 << 16)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_CORE_OTHER_BANK_RETSTATE_SHIFT                                        8
+#define OMAP54XX_CORE_OTHER_BANK_RETSTATE_WIDTH                                        0x1
+#define OMAP54XX_CORE_OTHER_BANK_RETSTATE_MASK                                 (1 << 8)
+
+/* Used by PM_CORE_PWRSTST */
+#define OMAP54XX_CORE_OTHER_BANK_STATEST_SHIFT                                 4
+#define OMAP54XX_CORE_OTHER_BANK_STATEST_WIDTH                                 0x2
+#define OMAP54XX_CORE_OTHER_BANK_STATEST_MASK                                  (0x3 << 4)
+
+/* Used by REVISION_PRM */
+#define OMAP54XX_CUSTOM_SHIFT                                                  6
+#define OMAP54XX_CUSTOM_WIDTH                                                  0x2
+#define OMAP54XX_CUSTOM_MASK                                                   (0x3 << 6)
+
+/* Used by PRM_VC_VAL_BYPASS */
+#define OMAP54XX_DATA_SHIFT                                                    16
+#define OMAP54XX_DATA_WIDTH                                                    0x8
+#define OMAP54XX_DATA_MASK                                                     (0xff << 16)
+
+/* Used by PRM_DEBUG_CORE_RET_TRANS */
+#define OMAP54XX_PRM_DEBUG_OUT_SHIFT                                           0
+#define OMAP54XX_PRM_DEBUG_OUT_WIDTH                                           0x1c
+#define OMAP54XX_PRM_DEBUG_OUT_MASK                                            (0xfffffff << 0)
+
+/* Renamed from DEBUG_OUT Used by PRM_DEBUG_MM_RET_TRANS */
+#define OMAP54XX_DEBUG_OUT_0_9_SHIFT                                           0
+#define OMAP54XX_DEBUG_OUT_0_9_WIDTH                                           0xa
+#define OMAP54XX_DEBUG_OUT_0_9_MASK                                            (0x3ff << 0)
+
+/* Renamed from DEBUG_OUT Used by PRM_DEBUG_MPU_RET_TRANS */
+#define OMAP54XX_DEBUG_OUT_0_6_SHIFT                                           0
+#define OMAP54XX_DEBUG_OUT_0_6_WIDTH                                           0x7
+#define OMAP54XX_DEBUG_OUT_0_6_MASK                                            (0x7f << 0)
+
+/* Renamed from DEBUG_OUT Used by PRM_DEBUG_OFF_TRANS */
+#define OMAP54XX_DEBUG_OUT_0_31_SHIFT                                          0
+#define OMAP54XX_DEBUG_OUT_0_31_WIDTH                                          0x20
+#define OMAP54XX_DEBUG_OUT_0_31_MASK                                           (0xffffffff << 0)
+
+/* Renamed from DEBUG_OUT Used by PRM_DEBUG_WKUPAON_FD_TRANS */
+#define OMAP54XX_DEBUG_OUT_0_11_SHIFT                                          0
+#define OMAP54XX_DEBUG_OUT_0_11_WIDTH                                          0xc
+#define OMAP54XX_DEBUG_OUT_0_11_MASK                                           (0xfff << 0)
+
+/* Used by PRM_DEVICE_OFF_CTRL */
+#define OMAP54XX_DEVICE_OFF_ENABLE_SHIFT                                       0
+#define OMAP54XX_DEVICE_OFF_ENABLE_WIDTH                                       0x1
+#define OMAP54XX_DEVICE_OFF_ENABLE_MASK                                                (1 << 0)
+
+/* Used by PRM_VC_CFG_I2C_MODE */
+#define OMAP54XX_DFILTEREN_SHIFT                                               6
+#define OMAP54XX_DFILTEREN_WIDTH                                               0x1
+#define OMAP54XX_DFILTEREN_MASK                                                        (1 << 6)
+
+/* Used by PRM_IRQENABLE_DSP, PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_DPLL_ABE_RECAL_EN_SHIFT                                       4
+#define OMAP54XX_DPLL_ABE_RECAL_EN_WIDTH                                       0x1
+#define OMAP54XX_DPLL_ABE_RECAL_EN_MASK                                                (1 << 4)
+
+/* Used by PRM_IRQSTATUS_DSP, PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_DPLL_ABE_RECAL_ST_SHIFT                                       4
+#define OMAP54XX_DPLL_ABE_RECAL_ST_WIDTH                                       0x1
+#define OMAP54XX_DPLL_ABE_RECAL_ST_MASK                                                (1 << 4)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_DPLL_CORE_RECAL_EN_SHIFT                                      0
+#define OMAP54XX_DPLL_CORE_RECAL_EN_WIDTH                                      0x1
+#define OMAP54XX_DPLL_CORE_RECAL_EN_MASK                                       (1 << 0)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_DPLL_CORE_RECAL_ST_SHIFT                                      0
+#define OMAP54XX_DPLL_CORE_RECAL_ST_WIDTH                                      0x1
+#define OMAP54XX_DPLL_CORE_RECAL_ST_MASK                                       (1 << 0)
+
+/* Used by PRM_IRQENABLE_DSP, PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_DPLL_IVA_RECAL_EN_SHIFT                                       2
+#define OMAP54XX_DPLL_IVA_RECAL_EN_WIDTH                                       0x1
+#define OMAP54XX_DPLL_IVA_RECAL_EN_MASK                                                (1 << 2)
+
+/* Used by PRM_IRQSTATUS_DSP, PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_DPLL_IVA_RECAL_ST_SHIFT                                       2
+#define OMAP54XX_DPLL_IVA_RECAL_ST_WIDTH                                       0x1
+#define OMAP54XX_DPLL_IVA_RECAL_ST_MASK                                                (1 << 2)
+
+/* Used by PRM_IRQENABLE_MPU */
+#define OMAP54XX_DPLL_MPU_RECAL_EN_SHIFT                                       1
+#define OMAP54XX_DPLL_MPU_RECAL_EN_WIDTH                                       0x1
+#define OMAP54XX_DPLL_MPU_RECAL_EN_MASK                                                (1 << 1)
+
+/* Used by PRM_IRQSTATUS_MPU */
+#define OMAP54XX_DPLL_MPU_RECAL_ST_SHIFT                                       1
+#define OMAP54XX_DPLL_MPU_RECAL_ST_WIDTH                                       0x1
+#define OMAP54XX_DPLL_MPU_RECAL_ST_MASK                                                (1 << 1)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_DPLL_PER_RECAL_EN_SHIFT                                       3
+#define OMAP54XX_DPLL_PER_RECAL_EN_WIDTH                                       0x1
+#define OMAP54XX_DPLL_PER_RECAL_EN_MASK                                                (1 << 3)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_DPLL_PER_RECAL_ST_SHIFT                                       3
+#define OMAP54XX_DPLL_PER_RECAL_ST_WIDTH                                       0x1
+#define OMAP54XX_DPLL_PER_RECAL_ST_MASK                                                (1 << 3)
+
+/* Used by PM_DSP_PWRSTCTRL */
+#define OMAP54XX_DSP_EDMA_ONSTATE_SHIFT                                                20
+#define OMAP54XX_DSP_EDMA_ONSTATE_WIDTH                                                0x2
+#define OMAP54XX_DSP_EDMA_ONSTATE_MASK                                         (0x3 << 20)
+
+/* Used by PM_DSP_PWRSTCTRL */
+#define OMAP54XX_DSP_EDMA_RETSTATE_SHIFT                                       10
+#define OMAP54XX_DSP_EDMA_RETSTATE_WIDTH                                       0x1
+#define OMAP54XX_DSP_EDMA_RETSTATE_MASK                                                (1 << 10)
+
+/* Used by PM_DSP_PWRSTST */
+#define OMAP54XX_DSP_EDMA_STATEST_SHIFT                                                8
+#define OMAP54XX_DSP_EDMA_STATEST_WIDTH                                                0x2
+#define OMAP54XX_DSP_EDMA_STATEST_MASK                                         (0x3 << 8)
+
+/* Used by PM_DSP_PWRSTCTRL */
+#define OMAP54XX_DSP_L1_ONSTATE_SHIFT                                          16
+#define OMAP54XX_DSP_L1_ONSTATE_WIDTH                                          0x2
+#define OMAP54XX_DSP_L1_ONSTATE_MASK                                           (0x3 << 16)
+
+/* Used by PM_DSP_PWRSTCTRL */
+#define OMAP54XX_DSP_L1_RETSTATE_SHIFT                                         8
+#define OMAP54XX_DSP_L1_RETSTATE_WIDTH                                         0x1
+#define OMAP54XX_DSP_L1_RETSTATE_MASK                                          (1 << 8)
+
+/* Used by PM_DSP_PWRSTST */
+#define OMAP54XX_DSP_L1_STATEST_SHIFT                                          4
+#define OMAP54XX_DSP_L1_STATEST_WIDTH                                          0x2
+#define OMAP54XX_DSP_L1_STATEST_MASK                                           (0x3 << 4)
+
+/* Used by PM_DSP_PWRSTCTRL */
+#define OMAP54XX_DSP_L2_ONSTATE_SHIFT                                          18
+#define OMAP54XX_DSP_L2_ONSTATE_WIDTH                                          0x2
+#define OMAP54XX_DSP_L2_ONSTATE_MASK                                           (0x3 << 18)
+
+/* Used by PM_DSP_PWRSTCTRL */
+#define OMAP54XX_DSP_L2_RETSTATE_SHIFT                                         9
+#define OMAP54XX_DSP_L2_RETSTATE_WIDTH                                         0x1
+#define OMAP54XX_DSP_L2_RETSTATE_MASK                                          (1 << 9)
+
+/* Used by PM_DSP_PWRSTST */
+#define OMAP54XX_DSP_L2_STATEST_SHIFT                                          6
+#define OMAP54XX_DSP_L2_STATEST_WIDTH                                          0x2
+#define OMAP54XX_DSP_L2_STATEST_MASK                                           (0x3 << 6)
+
+/* Used by PM_DSS_PWRSTCTRL */
+#define OMAP54XX_DSS_MEM_ONSTATE_SHIFT                                         16
+#define OMAP54XX_DSS_MEM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_DSS_MEM_ONSTATE_MASK                                          (0x3 << 16)
+
+/* Used by PM_DSS_PWRSTCTRL */
+#define OMAP54XX_DSS_MEM_RETSTATE_SHIFT                                                8
+#define OMAP54XX_DSS_MEM_RETSTATE_WIDTH                                                0x1
+#define OMAP54XX_DSS_MEM_RETSTATE_MASK                                         (1 << 8)
+
+/* Used by PM_DSS_PWRSTST */
+#define OMAP54XX_DSS_MEM_STATEST_SHIFT                                         4
+#define OMAP54XX_DSS_MEM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_DSS_MEM_STATEST_MASK                                          (0x3 << 4)
+
+/* Used by PRM_DEVICE_OFF_CTRL */
+#define OMAP54XX_EMIF1_OFFWKUP_DISABLE_SHIFT                                   8
+#define OMAP54XX_EMIF1_OFFWKUP_DISABLE_WIDTH                                   0x1
+#define OMAP54XX_EMIF1_OFFWKUP_DISABLE_MASK                                    (1 << 8)
+
+/* Used by PRM_DEVICE_OFF_CTRL */
+#define OMAP54XX_EMIF2_OFFWKUP_DISABLE_SHIFT                                   9
+#define OMAP54XX_EMIF2_OFFWKUP_DISABLE_WIDTH                                   0x1
+#define OMAP54XX_EMIF2_OFFWKUP_DISABLE_MASK                                    (1 << 9)
+
+/* Used by PM_EMU_PWRSTCTRL */
+#define OMAP54XX_EMU_BANK_ONSTATE_SHIFT                                                16
+#define OMAP54XX_EMU_BANK_ONSTATE_WIDTH                                                0x2
+#define OMAP54XX_EMU_BANK_ONSTATE_MASK                                         (0x3 << 16)
+
+/* Used by PM_EMU_PWRSTST */
+#define OMAP54XX_EMU_BANK_STATEST_SHIFT                                                4
+#define OMAP54XX_EMU_BANK_STATEST_WIDTH                                                0x2
+#define OMAP54XX_EMU_BANK_STATEST_MASK                                         (0x3 << 4)
+
+/*
+ * Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP,
+ * PRM_SRAM_WKUP_SETUP
+ */
+#define OMAP54XX_ENABLE_RTA_SHIFT                                              0
+#define OMAP54XX_ENABLE_RTA_WIDTH                                              0x1
+#define OMAP54XX_ENABLE_RTA_MASK                                               (1 << 0)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ENFUNC1_SHIFT                                                 3
+#define OMAP54XX_ENFUNC1_WIDTH                                                 0x1
+#define OMAP54XX_ENFUNC1_MASK                                                  (1 << 3)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ENFUNC2_SHIFT                                                 4
+#define OMAP54XX_ENFUNC2_WIDTH                                                 0x1
+#define OMAP54XX_ENFUNC2_MASK                                                  (1 << 4)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ENFUNC3_SHIFT                                                 5
+#define OMAP54XX_ENFUNC3_WIDTH                                                 0x1
+#define OMAP54XX_ENFUNC3_MASK                                                  (1 << 5)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ENFUNC4_SHIFT                                                 6
+#define OMAP54XX_ENFUNC4_WIDTH                                                 0x1
+#define OMAP54XX_ENFUNC4_MASK                                                  (1 << 6)
+
+/* Used by PRM_SLDO_CORE_SETUP, PRM_SLDO_MM_SETUP, PRM_SLDO_MPU_SETUP */
+#define OMAP54XX_ENFUNC5_SHIFT                                                 7
+#define OMAP54XX_ENFUNC5_WIDTH                                                 0x1
+#define OMAP54XX_ENFUNC5_MASK                                                  (1 << 7)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_ERRORGAIN_SHIFT                                               16
+#define OMAP54XX_ERRORGAIN_WIDTH                                               0x8
+#define OMAP54XX_ERRORGAIN_MASK                                                        (0xff << 16)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_ERROROFFSET_SHIFT                                             24
+#define OMAP54XX_ERROROFFSET_WIDTH                                             0x8
+#define OMAP54XX_ERROROFFSET_MASK                                              (0xff << 24)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_EXTERNAL_WARM_RST_SHIFT                                       5
+#define OMAP54XX_EXTERNAL_WARM_RST_WIDTH                                       0x1
+#define OMAP54XX_EXTERNAL_WARM_RST_MASK                                                (1 << 5)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_FORCEUPDATE_SHIFT                                             1
+#define OMAP54XX_FORCEUPDATE_WIDTH                                             0x1
+#define OMAP54XX_FORCEUPDATE_MASK                                              (1 << 1)
+
+/* Used by PRM_VP_CORE_VOLTAGE, PRM_VP_MM_VOLTAGE, PRM_VP_MPU_VOLTAGE */
+#define OMAP54XX_FORCEUPDATEWAIT_SHIFT                                         8
+#define OMAP54XX_FORCEUPDATEWAIT_WIDTH                                         0x18
+#define OMAP54XX_FORCEUPDATEWAIT_MASK                                          (0xffffff << 8)
+
+/* Used by PRM_IRQENABLE_DSP, PRM_IRQENABLE_IPU */
+#define OMAP54XX_FORCEWKUP_EN_SHIFT                                            10
+#define OMAP54XX_FORCEWKUP_EN_WIDTH                                            0x1
+#define OMAP54XX_FORCEWKUP_EN_MASK                                             (1 << 10)
+
+/* Used by PRM_IRQSTATUS_DSP, PRM_IRQSTATUS_IPU */
+#define OMAP54XX_FORCEWKUP_ST_SHIFT                                            10
+#define OMAP54XX_FORCEWKUP_ST_WIDTH                                            0x1
+#define OMAP54XX_FORCEWKUP_ST_MASK                                             (1 << 10)
+
+/* Used by REVISION_PRM */
+#define OMAP54XX_FUNC_SHIFT                                                    16
+#define OMAP54XX_FUNC_WIDTH                                                    0xc
+#define OMAP54XX_FUNC_MASK                                                     (0xfff << 16)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_GLOBAL_COLD_RST_SHIFT                                         0
+#define OMAP54XX_GLOBAL_COLD_RST_WIDTH                                         0x1
+#define OMAP54XX_GLOBAL_COLD_RST_MASK                                          (1 << 0)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_GLOBAL_WARM_SW_RST_SHIFT                                      1
+#define OMAP54XX_GLOBAL_WARM_SW_RST_WIDTH                                      0x1
+#define OMAP54XX_GLOBAL_WARM_SW_RST_MASK                                       (1 << 1)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_GLOBAL_WUEN_SHIFT                                             16
+#define OMAP54XX_GLOBAL_WUEN_WIDTH                                             0x1
+#define OMAP54XX_GLOBAL_WUEN_MASK                                              (1 << 16)
+
+/* Used by PM_GPU_PWRSTCTRL */
+#define OMAP54XX_GPU_MEM_ONSTATE_SHIFT                                         16
+#define OMAP54XX_GPU_MEM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_GPU_MEM_ONSTATE_MASK                                          (0x3 << 16)
+
+/* Used by PM_GPU_PWRSTST */
+#define OMAP54XX_GPU_MEM_STATEST_SHIFT                                         4
+#define OMAP54XX_GPU_MEM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_GPU_MEM_STATEST_MASK                                          (0x3 << 4)
+
+/* Used by PRM_VC_CFG_I2C_MODE */
+#define OMAP54XX_HSMCODE_SHIFT                                                 0
+#define OMAP54XX_HSMCODE_WIDTH                                                 0x3
+#define OMAP54XX_HSMCODE_MASK                                                  (0x7 << 0)
+
+/* Used by PRM_VC_CFG_I2C_MODE */
+#define OMAP54XX_HSMODEEN_SHIFT                                                        3
+#define OMAP54XX_HSMODEEN_WIDTH                                                        0x1
+#define OMAP54XX_HSMODEEN_MASK                                                 (1 << 3)
+
+/* Used by PRM_VC_CFG_I2C_CLK */
+#define OMAP54XX_HSSCLH_SHIFT                                                  16
+#define OMAP54XX_HSSCLH_WIDTH                                                  0x8
+#define OMAP54XX_HSSCLH_MASK                                                   (0xff << 16)
+
+/* Used by PRM_VC_CFG_I2C_CLK */
+#define OMAP54XX_HSSCLL_SHIFT                                                  24
+#define OMAP54XX_HSSCLL_WIDTH                                                  0x8
+#define OMAP54XX_HSSCLL_MASK                                                   (0xff << 24)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_HWA_MEM_ONSTATE_SHIFT                                         16
+#define OMAP54XX_HWA_MEM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_HWA_MEM_ONSTATE_MASK                                          (0x3 << 16)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_HWA_MEM_RETSTATE_SHIFT                                                8
+#define OMAP54XX_HWA_MEM_RETSTATE_WIDTH                                                0x1
+#define OMAP54XX_HWA_MEM_RETSTATE_MASK                                         (1 << 8)
+
+/* Used by PM_IVA_PWRSTST */
+#define OMAP54XX_HWA_MEM_STATEST_SHIFT                                         4
+#define OMAP54XX_HWA_MEM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_HWA_MEM_STATEST_MASK                                          (0x3 << 4)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_ICEPICK_RST_SHIFT                                             9
+#define OMAP54XX_ICEPICK_RST_WIDTH                                             0x1
+#define OMAP54XX_ICEPICK_RST_MASK                                              (1 << 9)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_INITVDD_SHIFT                                                 2
+#define OMAP54XX_INITVDD_WIDTH                                                 0x1
+#define OMAP54XX_INITVDD_MASK                                                  (1 << 2)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_INITVOLTAGE_SHIFT                                             8
+#define OMAP54XX_INITVOLTAGE_WIDTH                                             0x8
+#define OMAP54XX_INITVOLTAGE_MASK                                              (0xff << 8)
+
+/*
+ * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CORE_PWRSTST,
+ * PM_CUSTEFUSE_PWRSTST, PM_DSP_PWRSTST, PM_DSS_PWRSTST, PM_EMU_PWRSTST,
+ * PM_GPU_PWRSTST, PM_IVA_PWRSTST, PM_L3INIT_PWRSTST, PM_MPU_PWRSTST,
+ * PRM_VOLTST_MM, PRM_VOLTST_MPU
+ */
+#define OMAP54XX_INTRANSITION_SHIFT                                            20
+#define OMAP54XX_INTRANSITION_WIDTH                                            0x1
+#define OMAP54XX_INTRANSITION_MASK                                             (1 << 20)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_IO_EN_SHIFT                                                   9
+#define OMAP54XX_IO_EN_WIDTH                                                   0x1
+#define OMAP54XX_IO_EN_MASK                                                    (1 << 9)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_IO_ON_STATUS_SHIFT                                            5
+#define OMAP54XX_IO_ON_STATUS_WIDTH                                            0x1
+#define OMAP54XX_IO_ON_STATUS_MASK                                             (1 << 5)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_IO_ST_SHIFT                                                   9
+#define OMAP54XX_IO_ST_WIDTH                                                   0x1
+#define OMAP54XX_IO_ST_MASK                                                    (1 << 9)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_IPU_L2RAM_ONSTATE_SHIFT                                       20
+#define OMAP54XX_IPU_L2RAM_ONSTATE_WIDTH                                       0x2
+#define OMAP54XX_IPU_L2RAM_ONSTATE_MASK                                                (0x3 << 20)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_IPU_L2RAM_RETSTATE_SHIFT                                      10
+#define OMAP54XX_IPU_L2RAM_RETSTATE_WIDTH                                      0x1
+#define OMAP54XX_IPU_L2RAM_RETSTATE_MASK                                       (1 << 10)
+
+/* Used by PM_CORE_PWRSTST */
+#define OMAP54XX_IPU_L2RAM_STATEST_SHIFT                                       8
+#define OMAP54XX_IPU_L2RAM_STATEST_WIDTH                                       0x2
+#define OMAP54XX_IPU_L2RAM_STATEST_MASK                                                (0x3 << 8)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_IPU_UNICACHE_ONSTATE_SHIFT                                    22
+#define OMAP54XX_IPU_UNICACHE_ONSTATE_WIDTH                                    0x2
+#define OMAP54XX_IPU_UNICACHE_ONSTATE_MASK                                     (0x3 << 22)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_IPU_UNICACHE_RETSTATE_SHIFT                                   11
+#define OMAP54XX_IPU_UNICACHE_RETSTATE_WIDTH                                   0x1
+#define OMAP54XX_IPU_UNICACHE_RETSTATE_MASK                                    (1 << 11)
+
+/* Used by PM_CORE_PWRSTST */
+#define OMAP54XX_IPU_UNICACHE_STATEST_SHIFT                                    10
+#define OMAP54XX_IPU_UNICACHE_STATEST_WIDTH                                    0x2
+#define OMAP54XX_IPU_UNICACHE_STATEST_MASK                                     (0x3 << 10)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_ISOCLK_OVERRIDE_SHIFT                                         0
+#define OMAP54XX_ISOCLK_OVERRIDE_WIDTH                                         0x1
+#define OMAP54XX_ISOCLK_OVERRIDE_MASK                                          (1 << 0)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_ISOCLK_STATUS_SHIFT                                           1
+#define OMAP54XX_ISOCLK_STATUS_WIDTH                                           0x1
+#define OMAP54XX_ISOCLK_STATUS_MASK                                            (1 << 1)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_ISOOVR_EXTEND_SHIFT                                           4
+#define OMAP54XX_ISOOVR_EXTEND_WIDTH                                           0x1
+#define OMAP54XX_ISOOVR_EXTEND_MASK                                            (1 << 4)
+
+/* Used by PRM_IO_COUNT */
+#define OMAP54XX_ISO_2_ON_TIME_SHIFT                                           0
+#define OMAP54XX_ISO_2_ON_TIME_WIDTH                                           0x8
+#define OMAP54XX_ISO_2_ON_TIME_MASK                                            (0xff << 0)
+
+/* Used by PM_L3INIT_PWRSTCTRL */
+#define OMAP54XX_L3INIT_BANK1_ONSTATE_SHIFT                                    16
+#define OMAP54XX_L3INIT_BANK1_ONSTATE_WIDTH                                    0x2
+#define OMAP54XX_L3INIT_BANK1_ONSTATE_MASK                                     (0x3 << 16)
+
+/* Used by PM_L3INIT_PWRSTCTRL */
+#define OMAP54XX_L3INIT_BANK1_RETSTATE_SHIFT                                   8
+#define OMAP54XX_L3INIT_BANK1_RETSTATE_WIDTH                                   0x1
+#define OMAP54XX_L3INIT_BANK1_RETSTATE_MASK                                    (1 << 8)
+
+/* Used by PM_L3INIT_PWRSTST */
+#define OMAP54XX_L3INIT_BANK1_STATEST_SHIFT                                    4
+#define OMAP54XX_L3INIT_BANK1_STATEST_WIDTH                                    0x2
+#define OMAP54XX_L3INIT_BANK1_STATEST_MASK                                     (0x3 << 4)
+
+/* Used by PM_L3INIT_PWRSTCTRL */
+#define OMAP54XX_L3INIT_BANK2_ONSTATE_SHIFT                                    18
+#define OMAP54XX_L3INIT_BANK2_ONSTATE_WIDTH                                    0x2
+#define OMAP54XX_L3INIT_BANK2_ONSTATE_MASK                                     (0x3 << 18)
+
+/* Used by PM_L3INIT_PWRSTCTRL */
+#define OMAP54XX_L3INIT_BANK2_RETSTATE_SHIFT                                   9
+#define OMAP54XX_L3INIT_BANK2_RETSTATE_WIDTH                                   0x1
+#define OMAP54XX_L3INIT_BANK2_RETSTATE_MASK                                    (1 << 9)
+
+/* Used by PM_L3INIT_PWRSTST */
+#define OMAP54XX_L3INIT_BANK2_STATEST_SHIFT                                    6
+#define OMAP54XX_L3INIT_BANK2_STATEST_WIDTH                                    0x2
+#define OMAP54XX_L3INIT_BANK2_STATEST_MASK                                     (0x3 << 6)
+
+/*
+ * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CORE_PWRSTST,
+ * PM_CUSTEFUSE_PWRSTST, PM_DSP_PWRSTST, PM_DSS_PWRSTST, PM_EMU_PWRSTST,
+ * PM_GPU_PWRSTST, PM_IVA_PWRSTST, PM_L3INIT_PWRSTST, PM_MPU_PWRSTST
+ */
+#define OMAP54XX_LASTPOWERSTATEENTERED_SHIFT                                   24
+#define OMAP54XX_LASTPOWERSTATEENTERED_WIDTH                                   0x2
+#define OMAP54XX_LASTPOWERSTATEENTERED_MASK                                    (0x3 << 24)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_LLI_RST_SHIFT                                                 14
+#define OMAP54XX_LLI_RST_WIDTH                                                 0x1
+#define OMAP54XX_LLI_RST_MASK                                                  (1 << 14)
+
+/*
+ * Used by PM_ABE_PWRSTCTRL, PM_CORE_PWRSTCTRL, PM_DSP_PWRSTCTRL,
+ * PM_DSS_PWRSTCTRL, PM_IVA_PWRSTCTRL, PM_L3INIT_PWRSTCTRL, PM_MPU_PWRSTCTRL
+ */
+#define OMAP54XX_LOGICRETSTATE_SHIFT                                           2
+#define OMAP54XX_LOGICRETSTATE_WIDTH                                           0x1
+#define OMAP54XX_LOGICRETSTATE_MASK                                            (1 << 2)
+
+/*
+ * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CORE_PWRSTST,
+ * PM_CUSTEFUSE_PWRSTST, PM_DSP_PWRSTST, PM_DSS_PWRSTST, PM_EMU_PWRSTST,
+ * PM_GPU_PWRSTST, PM_IVA_PWRSTST, PM_L3INIT_PWRSTST, PM_MPU_PWRSTST
+ */
+#define OMAP54XX_LOGICSTATEST_SHIFT                                            2
+#define OMAP54XX_LOGICSTATEST_WIDTH                                            0x1
+#define OMAP54XX_LOGICSTATEST_MASK                                             (1 << 2)
+
+/*
+ * Used by RM_ABE_AESS_CONTEXT, RM_ABE_DMIC_CONTEXT, RM_ABE_MCASP_CONTEXT,
+ * RM_ABE_MCBSP1_CONTEXT, RM_ABE_MCBSP2_CONTEXT, RM_ABE_MCBSP3_CONTEXT,
+ * RM_ABE_MCPDM_CONTEXT, RM_ABE_SLIMBUS1_CONTEXT, RM_ABE_TIMER5_CONTEXT,
+ * RM_ABE_TIMER6_CONTEXT, RM_ABE_TIMER7_CONTEXT, RM_ABE_TIMER8_CONTEXT,
+ * RM_ABE_WD_TIMER3_CONTEXT, RM_C2C_C2C_CONTEXT, RM_C2C_C2C_OCP_FW_CONTEXT,
+ * RM_CAM_CAL_CONTEXT, RM_CAM_FDIF_CONTEXT, RM_CAM_ISS_CONTEXT,
+ * RM_COREAON_SMARTREFLEX_CORE_CONTEXT, RM_COREAON_SMARTREFLEX_MM_CONTEXT,
+ * RM_COREAON_SMARTREFLEX_MPU_CONTEXT, RM_CUSTEFUSE_EFUSE_CTRL_CUST_CONTEXT,
+ * RM_DSP_DSP_CONTEXT, RM_DSS_BB2D_CONTEXT, RM_DSS_DSS_CONTEXT,
+ * RM_EMIF_DMM_CONTEXT, RM_EMIF_EMIF1_CONTEXT, RM_EMIF_EMIF2_CONTEXT,
+ * RM_EMIF_EMIF_DLL_CONTEXT, RM_EMIF_EMIF_OCP_FW_CONTEXT,
+ * RM_EMU_DEBUGSS_CONTEXT, RM_GPU_GPU_CONTEXT, RM_IPU_IPU_CONTEXT,
+ * RM_IVA_IVA_CONTEXT, RM_IVA_SL2_CONTEXT, RM_L3INIT_IEEE1500_2_OCP_CONTEXT,
+ * RM_L3INIT_OCP2SCP1_CONTEXT, RM_L3INIT_OCP2SCP3_CONTEXT,
+ * RM_L3INIT_SATA_CONTEXT, RM_L3INIT_UNIPRO2_CONTEXT,
+ * RM_L3INSTR_L3_INSTR_CONTEXT, RM_L3INSTR_L3_MAIN_3_CONTEXT,
+ * RM_L3INSTR_OCP_WP_NOC_CONTEXT, RM_L3MAIN1_L3_MAIN_1_CONTEXT,
+ * RM_L3MAIN2_L3_MAIN_2_CONTEXT, RM_L3MAIN2_OCMC_RAM_CONTEXT,
+ * RM_L4CFG_L4_CFG_CONTEXT, RM_L4CFG_OCP2SCP2_CONTEXT,
+ * RM_L4CFG_SAR_ROM_CONTEXT, RM_L4PER_ELM_CONTEXT, RM_L4PER_HDQ1W_CONTEXT,
+ * RM_L4PER_I2C2_CONTEXT, RM_L4PER_I2C3_CONTEXT, RM_L4PER_I2C4_CONTEXT,
+ * RM_L4PER_I2C5_CONTEXT, RM_L4PER_L4_PER_CONTEXT, RM_L4PER_MCSPI1_CONTEXT,
+ * RM_L4PER_MCSPI2_CONTEXT, RM_L4PER_MCSPI3_CONTEXT, RM_L4PER_MCSPI4_CONTEXT,
+ * RM_L4PER_MMC3_CONTEXT, RM_L4PER_MMC4_CONTEXT, RM_L4PER_MMC5_CONTEXT,
+ * RM_L4PER_TIMER10_CONTEXT, RM_L4PER_TIMER11_CONTEXT, RM_L4PER_TIMER2_CONTEXT,
+ * RM_L4PER_TIMER3_CONTEXT, RM_L4PER_TIMER4_CONTEXT, RM_L4PER_TIMER9_CONTEXT,
+ * RM_L4SEC_FPKA_CONTEXT, RM_MIPIEXT_LLI_CONTEXT,
+ * RM_MIPIEXT_LLI_OCP_FW_CONTEXT, RM_MIPIEXT_MPHY_CONTEXT, RM_MPU_MPU_CONTEXT,
+ * RM_WKUPAON_COUNTER_32K_CONTEXT, RM_WKUPAON_GPIO1_CONTEXT,
+ * RM_WKUPAON_KBD_CONTEXT, RM_WKUPAON_L4_WKUP_CONTEXT,
+ * RM_WKUPAON_SAR_RAM_CONTEXT, RM_WKUPAON_TIMER12_CONTEXT,
+ * RM_WKUPAON_TIMER1_CONTEXT, RM_WKUPAON_WD_TIMER1_CONTEXT,
+ * RM_WKUPAON_WD_TIMER2_CONTEXT
+ */
+#define OMAP54XX_LOSTCONTEXT_DFF_SHIFT                                         0
+#define OMAP54XX_LOSTCONTEXT_DFF_WIDTH                                         0x1
+#define OMAP54XX_LOSTCONTEXT_DFF_MASK                                          (1 << 0)
+
+/*
+ * Used by RM_C2C_C2C_CONTEXT, RM_C2C_C2C_OCP_FW_CONTEXT,
+ * RM_C2C_MODEM_ICR_CONTEXT, RM_DMA_DMA_SYSTEM_CONTEXT, RM_DSP_DSP_CONTEXT,
+ * RM_DSS_DSS_CONTEXT, RM_EMIF_DMM_CONTEXT, RM_EMIF_EMIF1_CONTEXT,
+ * RM_EMIF_EMIF2_CONTEXT, RM_EMIF_EMIF_OCP_FW_CONTEXT, RM_IPU_IPU_CONTEXT,
+ * RM_L3INIT_HSI_CONTEXT, RM_L3INIT_MMC1_CONTEXT, RM_L3INIT_MMC2_CONTEXT,
+ * RM_L3INIT_USB_HOST_HS_CONTEXT, RM_L3INIT_USB_OTG_SS_CONTEXT,
+ * RM_L3INIT_USB_TLL_HS_CONTEXT, RM_L3INSTR_L3_MAIN_3_CONTEXT,
+ * RM_L3INSTR_OCP_WP_NOC_CONTEXT, RM_L3MAIN1_L3_MAIN_1_CONTEXT,
+ * RM_L3MAIN2_GPMC_CONTEXT, RM_L3MAIN2_L3_MAIN_2_CONTEXT,
+ * RM_L4CFG_L4_CFG_CONTEXT, RM_L4CFG_MAILBOX_CONTEXT,
+ * RM_L4CFG_SPINLOCK_CONTEXT, RM_L4PER_GPIO2_CONTEXT, RM_L4PER_GPIO3_CONTEXT,
+ * RM_L4PER_GPIO4_CONTEXT, RM_L4PER_GPIO5_CONTEXT, RM_L4PER_GPIO6_CONTEXT,
+ * RM_L4PER_GPIO7_CONTEXT, RM_L4PER_GPIO8_CONTEXT, RM_L4PER_I2C1_CONTEXT,
+ * RM_L4PER_L4_PER_CONTEXT, RM_L4PER_UART1_CONTEXT, RM_L4PER_UART2_CONTEXT,
+ * RM_L4PER_UART3_CONTEXT, RM_L4PER_UART4_CONTEXT, RM_L4PER_UART5_CONTEXT,
+ * RM_L4PER_UART6_CONTEXT, RM_L4SEC_AES1_CONTEXT, RM_L4SEC_AES2_CONTEXT,
+ * RM_L4SEC_DES3DES_CONTEXT, RM_L4SEC_DMA_CRYPTO_CONTEXT, RM_L4SEC_RNG_CONTEXT,
+ * RM_L4SEC_SHA2MD5_CONTEXT, RM_MIPIEXT_LLI_CONTEXT,
+ * RM_MIPIEXT_LLI_OCP_FW_CONTEXT, RM_MIPIEXT_MPHY_CONTEXT, RM_MPU_MPU_CONTEXT
+ */
+#define OMAP54XX_LOSTCONTEXT_RFF_SHIFT                                         1
+#define OMAP54XX_LOSTCONTEXT_RFF_WIDTH                                         0x1
+#define OMAP54XX_LOSTCONTEXT_RFF_MASK                                          (1 << 1)
+
+/* Used by RM_ABE_AESS_CONTEXT */
+#define OMAP54XX_LOSTMEM_AESSMEM_SHIFT                                         8
+#define OMAP54XX_LOSTMEM_AESSMEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_AESSMEM_MASK                                          (1 << 8)
+
+/* Used by RM_CAM_CAL_CONTEXT */
+#define OMAP54XX_LOSTMEM_CAL_MEM_SHIFT                                         8
+#define OMAP54XX_LOSTMEM_CAL_MEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_CAL_MEM_MASK                                          (1 << 8)
+
+/* Used by RM_CAM_FDIF_CONTEXT, RM_CAM_ISS_CONTEXT */
+#define OMAP54XX_LOSTMEM_CAM_MEM_SHIFT                                         8
+#define OMAP54XX_LOSTMEM_CAM_MEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_CAM_MEM_MASK                                          (1 << 8)
+
+/* Used by RM_EMIF_DMM_CONTEXT */
+#define OMAP54XX_LOSTMEM_CORE_NRET_BANK_SHIFT                                  9
+#define OMAP54XX_LOSTMEM_CORE_NRET_BANK_WIDTH                                  0x1
+#define OMAP54XX_LOSTMEM_CORE_NRET_BANK_MASK                                   (1 << 9)
+
+/* Renamed from LOSTMEM_CORE_NRET_BANK Used by RM_L3INSTR_OCP_WP_NOC_CONTEXT */
+#define OMAP54XX_LOSTMEM_CORE_NRET_BANK_8_8_SHIFT                              8
+#define OMAP54XX_LOSTMEM_CORE_NRET_BANK_8_8_WIDTH                              0x1
+#define OMAP54XX_LOSTMEM_CORE_NRET_BANK_8_8_MASK                               (1 << 8)
+
+/* Used by RM_L3MAIN2_OCMC_RAM_CONTEXT */
+#define OMAP54XX_LOSTMEM_CORE_OCMRAM_SHIFT                                     8
+#define OMAP54XX_LOSTMEM_CORE_OCMRAM_WIDTH                                     0x1
+#define OMAP54XX_LOSTMEM_CORE_OCMRAM_MASK                                      (1 << 8)
+
+/* Used by RM_DMA_DMA_SYSTEM_CONTEXT, RM_EMIF_DMM_CONTEXT */
+#define OMAP54XX_LOSTMEM_CORE_OTHER_BANK_SHIFT                                 8
+#define OMAP54XX_LOSTMEM_CORE_OTHER_BANK_WIDTH                                 0x1
+#define OMAP54XX_LOSTMEM_CORE_OTHER_BANK_MASK                                  (1 << 8)
+
+/* Used by RM_DSP_DSP_CONTEXT */
+#define OMAP54XX_LOSTMEM_DSP_EDMA_SHIFT                                                10
+#define OMAP54XX_LOSTMEM_DSP_EDMA_WIDTH                                                0x1
+#define OMAP54XX_LOSTMEM_DSP_EDMA_MASK                                         (1 << 10)
+
+/* Used by RM_DSP_DSP_CONTEXT */
+#define OMAP54XX_LOSTMEM_DSP_L1_SHIFT                                          8
+#define OMAP54XX_LOSTMEM_DSP_L1_WIDTH                                          0x1
+#define OMAP54XX_LOSTMEM_DSP_L1_MASK                                           (1 << 8)
+
+/* Used by RM_DSP_DSP_CONTEXT */
+#define OMAP54XX_LOSTMEM_DSP_L2_SHIFT                                          9
+#define OMAP54XX_LOSTMEM_DSP_L2_WIDTH                                          0x1
+#define OMAP54XX_LOSTMEM_DSP_L2_MASK                                           (1 << 9)
+
+/* Used by RM_DSS_BB2D_CONTEXT, RM_DSS_DSS_CONTEXT */
+#define OMAP54XX_LOSTMEM_DSS_MEM_SHIFT                                         8
+#define OMAP54XX_LOSTMEM_DSS_MEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_DSS_MEM_MASK                                          (1 << 8)
+
+/* Used by RM_EMU_DEBUGSS_CONTEXT */
+#define OMAP54XX_LOSTMEM_EMU_BANK_SHIFT                                                8
+#define OMAP54XX_LOSTMEM_EMU_BANK_WIDTH                                                0x1
+#define OMAP54XX_LOSTMEM_EMU_BANK_MASK                                         (1 << 8)
+
+/* Used by RM_GPU_GPU_CONTEXT */
+#define OMAP54XX_LOSTMEM_GPU_MEM_SHIFT                                         8
+#define OMAP54XX_LOSTMEM_GPU_MEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_GPU_MEM_MASK                                          (1 << 8)
+
+/* Used by RM_IVA_IVA_CONTEXT */
+#define OMAP54XX_LOSTMEM_HWA_MEM_SHIFT                                         10
+#define OMAP54XX_LOSTMEM_HWA_MEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_HWA_MEM_MASK                                          (1 << 10)
+
+/* Used by RM_IPU_IPU_CONTEXT */
+#define OMAP54XX_LOSTMEM_IPU_L2RAM_SHIFT                                       9
+#define OMAP54XX_LOSTMEM_IPU_L2RAM_WIDTH                                       0x1
+#define OMAP54XX_LOSTMEM_IPU_L2RAM_MASK                                                (1 << 9)
+
+/* Used by RM_IPU_IPU_CONTEXT */
+#define OMAP54XX_LOSTMEM_IPU_UNICACHE_SHIFT                                    8
+#define OMAP54XX_LOSTMEM_IPU_UNICACHE_WIDTH                                    0x1
+#define OMAP54XX_LOSTMEM_IPU_UNICACHE_MASK                                     (1 << 8)
+
+/*
+ * Used by RM_L3INIT_HSI_CONTEXT, RM_L3INIT_MMC1_CONTEXT,
+ * RM_L3INIT_MMC2_CONTEXT, RM_L3INIT_SATA_CONTEXT, RM_L3INIT_UNIPRO2_CONTEXT,
+ * RM_L3INIT_USB_OTG_SS_CONTEXT
+ */
+#define OMAP54XX_LOSTMEM_L3INIT_BANK1_SHIFT                                    8
+#define OMAP54XX_LOSTMEM_L3INIT_BANK1_WIDTH                                    0x1
+#define OMAP54XX_LOSTMEM_L3INIT_BANK1_MASK                                     (1 << 8)
+
+/* Used by RM_MPU_MPU_CONTEXT */
+#define OMAP54XX_LOSTMEM_MPU_L2_SHIFT                                          9
+#define OMAP54XX_LOSTMEM_MPU_L2_WIDTH                                          0x1
+#define OMAP54XX_LOSTMEM_MPU_L2_MASK                                           (1 << 9)
+
+/* Used by RM_MPU_MPU_CONTEXT */
+#define OMAP54XX_LOSTMEM_MPU_RAM_SHIFT                                         10
+#define OMAP54XX_LOSTMEM_MPU_RAM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_MPU_RAM_MASK                                          (1 << 10)
+
+/*
+ * Used by RM_L4PER_MMC3_CONTEXT, RM_L4PER_MMC4_CONTEXT, RM_L4PER_MMC5_CONTEXT,
+ * RM_L4SEC_FPKA_CONTEXT
+ */
+#define OMAP54XX_LOSTMEM_NONRETAINED_BANK_SHIFT                                        8
+#define OMAP54XX_LOSTMEM_NONRETAINED_BANK_WIDTH                                        0x1
+#define OMAP54XX_LOSTMEM_NONRETAINED_BANK_MASK                                 (1 << 8)
+
+/*
+ * Used by RM_ABE_DMIC_CONTEXT, RM_ABE_MCBSP1_CONTEXT, RM_ABE_MCBSP2_CONTEXT,
+ * RM_ABE_MCBSP3_CONTEXT, RM_ABE_MCPDM_CONTEXT, RM_ABE_SLIMBUS1_CONTEXT
+ */
+#define OMAP54XX_LOSTMEM_PERIHPMEM_SHIFT                                       8
+#define OMAP54XX_LOSTMEM_PERIHPMEM_WIDTH                                       0x1
+#define OMAP54XX_LOSTMEM_PERIHPMEM_MASK                                                (1 << 8)
+
+/*
+ * Used by RM_L4PER_UART1_CONTEXT, RM_L4PER_UART2_CONTEXT,
+ * RM_L4PER_UART3_CONTEXT, RM_L4PER_UART4_CONTEXT, RM_L4PER_UART5_CONTEXT,
+ * RM_L4PER_UART6_CONTEXT, RM_L4SEC_DMA_CRYPTO_CONTEXT
+ */
+#define OMAP54XX_LOSTMEM_RETAINED_BANK_SHIFT                                   8
+#define OMAP54XX_LOSTMEM_RETAINED_BANK_WIDTH                                   0x1
+#define OMAP54XX_LOSTMEM_RETAINED_BANK_MASK                                    (1 << 8)
+
+/* Used by RM_IVA_SL2_CONTEXT */
+#define OMAP54XX_LOSTMEM_SL2_MEM_SHIFT                                         8
+#define OMAP54XX_LOSTMEM_SL2_MEM_WIDTH                                         0x1
+#define OMAP54XX_LOSTMEM_SL2_MEM_MASK                                          (1 << 8)
+
+/* Used by RM_IVA_IVA_CONTEXT */
+#define OMAP54XX_LOSTMEM_TCM1_MEM_SHIFT                                                8
+#define OMAP54XX_LOSTMEM_TCM1_MEM_WIDTH                                                0x1
+#define OMAP54XX_LOSTMEM_TCM1_MEM_MASK                                         (1 << 8)
+
+/* Used by RM_IVA_IVA_CONTEXT */
+#define OMAP54XX_LOSTMEM_TCM2_MEM_SHIFT                                                9
+#define OMAP54XX_LOSTMEM_TCM2_MEM_WIDTH                                                0x1
+#define OMAP54XX_LOSTMEM_TCM2_MEM_MASK                                         (1 << 9)
+
+/* Used by RM_WKUPAON_SAR_RAM_CONTEXT */
+#define OMAP54XX_LOSTMEM_WKUP_BANK_SHIFT                                       8
+#define OMAP54XX_LOSTMEM_WKUP_BANK_WIDTH                                       0x1
+#define OMAP54XX_LOSTMEM_WKUP_BANK_MASK                                                (1 << 8)
+
+/*
+ * Used by PM_ABE_PWRSTCTRL, PM_CAM_PWRSTCTRL, PM_CORE_PWRSTCTRL,
+ * PM_CUSTEFUSE_PWRSTCTRL, PM_DSP_PWRSTCTRL, PM_DSS_PWRSTCTRL,
+ * PM_GPU_PWRSTCTRL, PM_IVA_PWRSTCTRL, PM_L3INIT_PWRSTCTRL, PM_MPU_PWRSTCTRL
+ */
+#define OMAP54XX_LOWPOWERSTATECHANGE_SHIFT                                     4
+#define OMAP54XX_LOWPOWERSTATECHANGE_WIDTH                                     0x1
+#define OMAP54XX_LOWPOWERSTATECHANGE_MASK                                      (1 << 4)
+
+/* Used by PRM_DEBUG_TRANS_CFG */
+#define OMAP54XX_MODE_SHIFT                                                    0
+#define OMAP54XX_MODE_WIDTH                                                    0x2
+#define OMAP54XX_MODE_MASK                                                     (0x3 << 0)
+
+/* Used by PRM_MODEM_IF_CTRL */
+#define OMAP54XX_MODEM_SHUTDOWN_IRQ_SHIFT                                      9
+#define OMAP54XX_MODEM_SHUTDOWN_IRQ_WIDTH                                      0x1
+#define OMAP54XX_MODEM_SHUTDOWN_IRQ_MASK                                       (1 << 9)
+
+/* Used by PRM_MODEM_IF_CTRL */
+#define OMAP54XX_MODEM_WAKE_IRQ_SHIFT                                          8
+#define OMAP54XX_MODEM_WAKE_IRQ_WIDTH                                          0x1
+#define OMAP54XX_MODEM_WAKE_IRQ_MASK                                           (1 << 8)
+
+/* Used by PM_MPU_PWRSTCTRL */
+#define OMAP54XX_MPU_L2_ONSTATE_SHIFT                                          18
+#define OMAP54XX_MPU_L2_ONSTATE_WIDTH                                          0x2
+#define OMAP54XX_MPU_L2_ONSTATE_MASK                                           (0x3 << 18)
+
+/* Used by PM_MPU_PWRSTCTRL */
+#define OMAP54XX_MPU_L2_RETSTATE_SHIFT                                         9
+#define OMAP54XX_MPU_L2_RETSTATE_WIDTH                                         0x1
+#define OMAP54XX_MPU_L2_RETSTATE_MASK                                          (1 << 9)
+
+/* Used by PM_MPU_PWRSTST */
+#define OMAP54XX_MPU_L2_STATEST_SHIFT                                          6
+#define OMAP54XX_MPU_L2_STATEST_WIDTH                                          0x2
+#define OMAP54XX_MPU_L2_STATEST_MASK                                           (0x3 << 6)
+
+/* Used by PM_MPU_PWRSTCTRL */
+#define OMAP54XX_MPU_RAM_ONSTATE_SHIFT                                         20
+#define OMAP54XX_MPU_RAM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_MPU_RAM_ONSTATE_MASK                                          (0x3 << 20)
+
+/* Used by PM_MPU_PWRSTCTRL */
+#define OMAP54XX_MPU_RAM_RETSTATE_SHIFT                                                10
+#define OMAP54XX_MPU_RAM_RETSTATE_WIDTH                                                0x1
+#define OMAP54XX_MPU_RAM_RETSTATE_MASK                                         (1 << 10)
+
+/* Used by PM_MPU_PWRSTST */
+#define OMAP54XX_MPU_RAM_STATEST_SHIFT                                         8
+#define OMAP54XX_MPU_RAM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_MPU_RAM_STATEST_MASK                                          (0x3 << 8)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_MPU_SECURITY_VIOL_RST_SHIFT                                   2
+#define OMAP54XX_MPU_SECURITY_VIOL_RST_WIDTH                                   0x1
+#define OMAP54XX_MPU_SECURITY_VIOL_RST_MASK                                    (1 << 2)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_MPU_WDT_RST_SHIFT                                             3
+#define OMAP54XX_MPU_WDT_RST_WIDTH                                             0x1
+#define OMAP54XX_MPU_WDT_RST_MASK                                              (1 << 3)
+
+/* Used by PRM_ABBLDO_MM_SETUP, PRM_ABBLDO_MPU_SETUP */
+#define OMAP54XX_NOCAP_SHIFT                                                   4
+#define OMAP54XX_NOCAP_WIDTH                                                   0x1
+#define OMAP54XX_NOCAP_MASK                                                    (1 << 4)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_OCP_NRET_BANK_ONSTATE_SHIFT                                   24
+#define OMAP54XX_OCP_NRET_BANK_ONSTATE_WIDTH                                   0x2
+#define OMAP54XX_OCP_NRET_BANK_ONSTATE_MASK                                    (0x3 << 24)
+
+/* Used by PM_CORE_PWRSTCTRL */
+#define OMAP54XX_OCP_NRET_BANK_RETSTATE_SHIFT                                  12
+#define OMAP54XX_OCP_NRET_BANK_RETSTATE_WIDTH                                  0x1
+#define OMAP54XX_OCP_NRET_BANK_RETSTATE_MASK                                   (1 << 12)
+
+/* Used by PM_CORE_PWRSTST */
+#define OMAP54XX_OCP_NRET_BANK_STATEST_SHIFT                                   12
+#define OMAP54XX_OCP_NRET_BANK_STATEST_WIDTH                                   0x2
+#define OMAP54XX_OCP_NRET_BANK_STATEST_MASK                                    (0x3 << 12)
+
+/*
+ * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_MM_L,
+ * PRM_VC_VAL_CMD_VDD_MPU_L
+ */
+#define OMAP54XX_OFF_SHIFT                                                     0
+#define OMAP54XX_OFF_WIDTH                                                     0x8
+#define OMAP54XX_OFF_MASK                                                      (0xff << 0)
+
+/*
+ * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_MM_L,
+ * PRM_VC_VAL_CMD_VDD_MPU_L
+ */
+#define OMAP54XX_ON_SHIFT                                                      24
+#define OMAP54XX_ON_WIDTH                                                      0x8
+#define OMAP54XX_ON_MASK                                                       (0xff << 24)
+
+/*
+ * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_MM_L,
+ * PRM_VC_VAL_CMD_VDD_MPU_L
+ */
+#define OMAP54XX_ONLP_SHIFT                                                    16
+#define OMAP54XX_ONLP_WIDTH                                                    0x8
+#define OMAP54XX_ONLP_MASK                                                     (0xff << 16)
+
+/* Used by PRM_ABBLDO_MM_CTRL, PRM_ABBLDO_MPU_CTRL */
+#define OMAP54XX_OPP_CHANGE_SHIFT                                              2
+#define OMAP54XX_OPP_CHANGE_WIDTH                                              0x1
+#define OMAP54XX_OPP_CHANGE_MASK                                               (1 << 2)
+
+/* Used by PRM_VC_VAL_BYPASS */
+#define OMAP54XX_OPP_CHANGE_EMIF_LVL_SHIFT                                     25
+#define OMAP54XX_OPP_CHANGE_EMIF_LVL_WIDTH                                     0x1
+#define OMAP54XX_OPP_CHANGE_EMIF_LVL_MASK                                      (1 << 25)
+
+/* Used by PRM_ABBLDO_MM_CTRL, PRM_ABBLDO_MPU_CTRL */
+#define OMAP54XX_OPP_SEL_SHIFT                                                 0
+#define OMAP54XX_OPP_SEL_WIDTH                                                 0x2
+#define OMAP54XX_OPP_SEL_MASK                                                  (0x3 << 0)
+
+/* Used by PRM_DEBUG_OUT */
+#define OMAP54XX_OUTPUT_SHIFT                                                  0
+#define OMAP54XX_OUTPUT_WIDTH                                                  0x20
+#define OMAP54XX_OUTPUT_MASK                                                   (0xffffffff << 0)
+
+/* Used by PRM_SRAM_COUNT */
+#define OMAP54XX_PCHARGECNT_VALUE_SHIFT                                                0
+#define OMAP54XX_PCHARGECNT_VALUE_WIDTH                                                0x6
+#define OMAP54XX_PCHARGECNT_VALUE_MASK                                         (0x3f << 0)
+
+/* Used by PRM_PSCON_COUNT */
+#define OMAP54XX_PCHARGE_TIME_SHIFT                                            0
+#define OMAP54XX_PCHARGE_TIME_WIDTH                                            0x8
+#define OMAP54XX_PCHARGE_TIME_MASK                                             (0xff << 0)
+
+/* Used by PM_ABE_PWRSTCTRL */
+#define OMAP54XX_PERIPHMEM_ONSTATE_SHIFT                                       20
+#define OMAP54XX_PERIPHMEM_ONSTATE_WIDTH                                       0x2
+#define OMAP54XX_PERIPHMEM_ONSTATE_MASK                                                (0x3 << 20)
+
+/* Used by PM_ABE_PWRSTCTRL */
+#define OMAP54XX_PERIPHMEM_RETSTATE_SHIFT                                      10
+#define OMAP54XX_PERIPHMEM_RETSTATE_WIDTH                                      0x1
+#define OMAP54XX_PERIPHMEM_RETSTATE_MASK                                       (1 << 10)
+
+/* Used by PM_ABE_PWRSTST */
+#define OMAP54XX_PERIPHMEM_STATEST_SHIFT                                       8
+#define OMAP54XX_PERIPHMEM_STATEST_WIDTH                                       0x2
+#define OMAP54XX_PERIPHMEM_STATEST_MASK                                                (0x3 << 8)
+
+/* Used by PRM_PHASE1_CNDP */
+#define OMAP54XX_PHASE1_CNDP_SHIFT                                             0
+#define OMAP54XX_PHASE1_CNDP_WIDTH                                             0x20
+#define OMAP54XX_PHASE1_CNDP_MASK                                              (0xffffffff << 0)
+
+/* Used by PRM_PHASE2A_CNDP */
+#define OMAP54XX_PHASE2A_CNDP_SHIFT                                            0
+#define OMAP54XX_PHASE2A_CNDP_WIDTH                                            0x20
+#define OMAP54XX_PHASE2A_CNDP_MASK                                             (0xffffffff << 0)
+
+/* Used by PRM_PHASE2B_CNDP */
+#define OMAP54XX_PHASE2B_CNDP_SHIFT                                            0
+#define OMAP54XX_PHASE2B_CNDP_WIDTH                                            0x20
+#define OMAP54XX_PHASE2B_CNDP_MASK                                             (0xffffffff << 0)
+
+/* Used by PRM_PSCON_COUNT */
+#define OMAP54XX_PONOUT_2_PGOODIN_TIME_SHIFT                                   8
+#define OMAP54XX_PONOUT_2_PGOODIN_TIME_WIDTH                                   0x8
+#define OMAP54XX_PONOUT_2_PGOODIN_TIME_MASK                                    (0xff << 8)
+
+/*
+ * Used by PM_ABE_PWRSTCTRL, PM_CAM_PWRSTCTRL, PM_CORE_PWRSTCTRL,
+ * PM_CUSTEFUSE_PWRSTCTRL, PM_DSP_PWRSTCTRL, PM_DSS_PWRSTCTRL,
+ * PM_EMU_PWRSTCTRL, PM_GPU_PWRSTCTRL, PM_IVA_PWRSTCTRL, PM_L3INIT_PWRSTCTRL,
+ * PM_MPU_PWRSTCTRL
+ */
+#define OMAP54XX_POWERSTATE_SHIFT                                              0
+#define OMAP54XX_POWERSTATE_WIDTH                                              0x2
+#define OMAP54XX_POWERSTATE_MASK                                               (0x3 << 0)
+
+/*
+ * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CORE_PWRSTST,
+ * PM_CUSTEFUSE_PWRSTST, PM_DSP_PWRSTST, PM_DSS_PWRSTST, PM_EMU_PWRSTST,
+ * PM_GPU_PWRSTST, PM_IVA_PWRSTST, PM_L3INIT_PWRSTST, PM_MPU_PWRSTST
+ */
+#define OMAP54XX_POWERSTATEST_SHIFT                                            0
+#define OMAP54XX_POWERSTATEST_WIDTH                                            0x2
+#define OMAP54XX_POWERSTATEST_MASK                                             (0x3 << 0)
+
+/* Used by PRM_PWRREQCTRL */
+#define OMAP54XX_PWRREQ_COND_SHIFT                                             0
+#define OMAP54XX_PWRREQ_COND_WIDTH                                             0x2
+#define OMAP54XX_PWRREQ_COND_MASK                                              (0x3 << 0)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_RACEN_VDD_CORE_L_SHIFT                                                27
+#define OMAP54XX_RACEN_VDD_CORE_L_WIDTH                                                0x1
+#define OMAP54XX_RACEN_VDD_CORE_L_MASK                                         (1 << 27)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_RACEN_VDD_MM_L_SHIFT                                          27
+#define OMAP54XX_RACEN_VDD_MM_L_WIDTH                                          0x1
+#define OMAP54XX_RACEN_VDD_MM_L_MASK                                           (1 << 27)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_RACEN_VDD_MPU_L_SHIFT                                         27
+#define OMAP54XX_RACEN_VDD_MPU_L_WIDTH                                         0x1
+#define OMAP54XX_RACEN_VDD_MPU_L_MASK                                          (1 << 27)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_RAC_VDD_CORE_L_SHIFT                                          26
+#define OMAP54XX_RAC_VDD_CORE_L_WIDTH                                          0x1
+#define OMAP54XX_RAC_VDD_CORE_L_MASK                                           (1 << 26)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_RAC_VDD_MM_L_SHIFT                                            26
+#define OMAP54XX_RAC_VDD_MM_L_WIDTH                                            0x1
+#define OMAP54XX_RAC_VDD_MM_L_MASK                                             (1 << 26)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_RAC_VDD_MPU_L_SHIFT                                           26
+#define OMAP54XX_RAC_VDD_MPU_L_WIDTH                                           0x1
+#define OMAP54XX_RAC_VDD_MPU_L_MASK                                            (1 << 26)
+
+/*
+ * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
+ * PRM_VOLTSETUP_MM_OFF, PRM_VOLTSETUP_MM_RET_SLEEP, PRM_VOLTSETUP_MPU_OFF,
+ * PRM_VOLTSETUP_MPU_RET_SLEEP
+ */
+#define OMAP54XX_RAMP_DOWN_COUNT_SHIFT                                         16
+#define OMAP54XX_RAMP_DOWN_COUNT_WIDTH                                         0x6
+#define OMAP54XX_RAMP_DOWN_COUNT_MASK                                          (0x3f << 16)
+
+/*
+ * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
+ * PRM_VOLTSETUP_MM_OFF, PRM_VOLTSETUP_MM_RET_SLEEP, PRM_VOLTSETUP_MPU_OFF,
+ * PRM_VOLTSETUP_MPU_RET_SLEEP
+ */
+#define OMAP54XX_RAMP_DOWN_PRESCAL_SHIFT                                       24
+#define OMAP54XX_RAMP_DOWN_PRESCAL_WIDTH                                       0x2
+#define OMAP54XX_RAMP_DOWN_PRESCAL_MASK                                                (0x3 << 24)
+
+/*
+ * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
+ * PRM_VOLTSETUP_MM_OFF, PRM_VOLTSETUP_MM_RET_SLEEP, PRM_VOLTSETUP_MPU_OFF,
+ * PRM_VOLTSETUP_MPU_RET_SLEEP
+ */
+#define OMAP54XX_RAMP_UP_COUNT_SHIFT                                           0
+#define OMAP54XX_RAMP_UP_COUNT_WIDTH                                           0x6
+#define OMAP54XX_RAMP_UP_COUNT_MASK                                            (0x3f << 0)
+
+/*
+ * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
+ * PRM_VOLTSETUP_MM_OFF, PRM_VOLTSETUP_MM_RET_SLEEP, PRM_VOLTSETUP_MPU_OFF,
+ * PRM_VOLTSETUP_MPU_RET_SLEEP
+ */
+#define OMAP54XX_RAMP_UP_PRESCAL_SHIFT                                         8
+#define OMAP54XX_RAMP_UP_PRESCAL_WIDTH                                         0x2
+#define OMAP54XX_RAMP_UP_PRESCAL_MASK                                          (0x3 << 8)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_RAV_VDD_CORE_L_SHIFT                                          25
+#define OMAP54XX_RAV_VDD_CORE_L_WIDTH                                          0x1
+#define OMAP54XX_RAV_VDD_CORE_L_MASK                                           (1 << 25)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_RAV_VDD_MM_L_SHIFT                                            25
+#define OMAP54XX_RAV_VDD_MM_L_WIDTH                                            0x1
+#define OMAP54XX_RAV_VDD_MM_L_MASK                                             (1 << 25)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_RAV_VDD_MPU_L_SHIFT                                           25
+#define OMAP54XX_RAV_VDD_MPU_L_WIDTH                                           0x1
+#define OMAP54XX_RAV_VDD_MPU_L_MASK                                            (1 << 25)
+
+/* Used by PRM_VC_VAL_BYPASS */
+#define OMAP54XX_REGADDR_SHIFT                                                 8
+#define OMAP54XX_REGADDR_WIDTH                                                 0x8
+#define OMAP54XX_REGADDR_MASK                                                  (0xff << 8)
+
+/*
+ * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_MM_L,
+ * PRM_VC_VAL_CMD_VDD_MPU_L
+ */
+#define OMAP54XX_RET_SHIFT                                                     8
+#define OMAP54XX_RET_WIDTH                                                     0x8
+#define OMAP54XX_RET_MASK                                                      (0xff << 8)
+
+/* Used by PRM_SLDO_CORE_CTRL, PRM_SLDO_MM_CTRL, PRM_SLDO_MPU_CTRL */
+#define OMAP54XX_RETMODE_ENABLE_SHIFT                                          0
+#define OMAP54XX_RETMODE_ENABLE_WIDTH                                          0x1
+#define OMAP54XX_RETMODE_ENABLE_MASK                                           (1 << 0)
+
+/* Used by PRM_RSTTIME */
+#define OMAP54XX_RSTTIME1_SHIFT                                                        0
+#define OMAP54XX_RSTTIME1_WIDTH                                                        0xa
+#define OMAP54XX_RSTTIME1_MASK                                                 (0x3ff << 0)
+
+/* Used by PRM_RSTTIME */
+#define OMAP54XX_RSTTIME2_SHIFT                                                        10
+#define OMAP54XX_RSTTIME2_WIDTH                                                        0x5
+#define OMAP54XX_RSTTIME2_MASK                                                 (0x1f << 10)
+
+/* Used by RM_IPU_RSTCTRL, RM_IPU_RSTST */
+#define OMAP54XX_RST_CPU0_SHIFT                                                        0
+#define OMAP54XX_RST_CPU0_WIDTH                                                        0x1
+#define OMAP54XX_RST_CPU0_MASK                                                 (1 << 0)
+
+/* Used by RM_IPU_RSTCTRL, RM_IPU_RSTST */
+#define OMAP54XX_RST_CPU1_SHIFT                                                        1
+#define OMAP54XX_RST_CPU1_WIDTH                                                        0x1
+#define OMAP54XX_RST_CPU1_MASK                                                 (1 << 1)
+
+/* Used by RM_DSP_RSTCTRL, RM_DSP_RSTST */
+#define OMAP54XX_RST_DSP_SHIFT                                                 0
+#define OMAP54XX_RST_DSP_WIDTH                                                 0x1
+#define OMAP54XX_RST_DSP_MASK                                                  (1 << 0)
+
+/* Used by RM_DSP_RSTST */
+#define OMAP54XX_RST_DSP_EMU_SHIFT                                             2
+#define OMAP54XX_RST_DSP_EMU_WIDTH                                             0x1
+#define OMAP54XX_RST_DSP_EMU_MASK                                              (1 << 2)
+
+/* Used by RM_DSP_RSTST */
+#define OMAP54XX_RST_DSP_EMU_REQ_SHIFT                                         3
+#define OMAP54XX_RST_DSP_EMU_REQ_WIDTH                                         0x1
+#define OMAP54XX_RST_DSP_EMU_REQ_MASK                                          (1 << 3)
+
+/* Used by RM_DSP_RSTCTRL, RM_DSP_RSTST */
+#define OMAP54XX_RST_DSP_MMU_CACHE_SHIFT                                       1
+#define OMAP54XX_RST_DSP_MMU_CACHE_WIDTH                                       0x1
+#define OMAP54XX_RST_DSP_MMU_CACHE_MASK                                                (1 << 1)
+
+/* Used by RM_IPU_RSTST */
+#define OMAP54XX_RST_EMULATION_CPU0_SHIFT                                      3
+#define OMAP54XX_RST_EMULATION_CPU0_WIDTH                                      0x1
+#define OMAP54XX_RST_EMULATION_CPU0_MASK                                       (1 << 3)
+
+/* Used by RM_IPU_RSTST */
+#define OMAP54XX_RST_EMULATION_CPU1_SHIFT                                      4
+#define OMAP54XX_RST_EMULATION_CPU1_WIDTH                                      0x1
+#define OMAP54XX_RST_EMULATION_CPU1_MASK                                       (1 << 4)
+
+/* Used by RM_IVA_RSTST */
+#define OMAP54XX_RST_EMULATION_SEQ1_SHIFT                                      3
+#define OMAP54XX_RST_EMULATION_SEQ1_WIDTH                                      0x1
+#define OMAP54XX_RST_EMULATION_SEQ1_MASK                                       (1 << 3)
+
+/* Used by RM_IVA_RSTST */
+#define OMAP54XX_RST_EMULATION_SEQ2_SHIFT                                      4
+#define OMAP54XX_RST_EMULATION_SEQ2_WIDTH                                      0x1
+#define OMAP54XX_RST_EMULATION_SEQ2_MASK                                       (1 << 4)
+
+/* Used by PRM_RSTCTRL */
+#define OMAP54XX_RST_GLOBAL_COLD_SW_SHIFT                                      1
+#define OMAP54XX_RST_GLOBAL_COLD_SW_WIDTH                                      0x1
+#define OMAP54XX_RST_GLOBAL_COLD_SW_MASK                                       (1 << 1)
+
+/* Used by PRM_RSTCTRL */
+#define OMAP54XX_RST_GLOBAL_WARM_SW_SHIFT                                      0
+#define OMAP54XX_RST_GLOBAL_WARM_SW_WIDTH                                      0x1
+#define OMAP54XX_RST_GLOBAL_WARM_SW_MASK                                       (1 << 0)
+
+/* Used by RM_IPU_RSTST */
+#define OMAP54XX_RST_ICECRUSHER_CPU0_SHIFT                                     5
+#define OMAP54XX_RST_ICECRUSHER_CPU0_WIDTH                                     0x1
+#define OMAP54XX_RST_ICECRUSHER_CPU0_MASK                                      (1 << 5)
+
+/* Used by RM_IPU_RSTST */
+#define OMAP54XX_RST_ICECRUSHER_CPU1_SHIFT                                     6
+#define OMAP54XX_RST_ICECRUSHER_CPU1_WIDTH                                     0x1
+#define OMAP54XX_RST_ICECRUSHER_CPU1_MASK                                      (1 << 6)
+
+/* Used by RM_IVA_RSTST */
+#define OMAP54XX_RST_ICECRUSHER_SEQ1_SHIFT                                     5
+#define OMAP54XX_RST_ICECRUSHER_SEQ1_WIDTH                                     0x1
+#define OMAP54XX_RST_ICECRUSHER_SEQ1_MASK                                      (1 << 5)
+
+/* Used by RM_IVA_RSTST */
+#define OMAP54XX_RST_ICECRUSHER_SEQ2_SHIFT                                     6
+#define OMAP54XX_RST_ICECRUSHER_SEQ2_WIDTH                                     0x1
+#define OMAP54XX_RST_ICECRUSHER_SEQ2_MASK                                      (1 << 6)
+
+/* Used by RM_IPU_RSTCTRL, RM_IPU_RSTST */
+#define OMAP54XX_RST_IPU_MMU_CACHE_SHIFT                                       2
+#define OMAP54XX_RST_IPU_MMU_CACHE_WIDTH                                       0x1
+#define OMAP54XX_RST_IPU_MMU_CACHE_MASK                                                (1 << 2)
+
+/* Used by RM_IVA_RSTCTRL, RM_IVA_RSTST */
+#define OMAP54XX_RST_LOGIC_SHIFT                                               2
+#define OMAP54XX_RST_LOGIC_WIDTH                                               0x1
+#define OMAP54XX_RST_LOGIC_MASK                                                        (1 << 2)
+
+/* Used by RM_IVA_RSTCTRL, RM_IVA_RSTST */
+#define OMAP54XX_RST_SEQ1_SHIFT                                                        0
+#define OMAP54XX_RST_SEQ1_WIDTH                                                        0x1
+#define OMAP54XX_RST_SEQ1_MASK                                                 (1 << 0)
+
+/* Used by RM_IVA_RSTCTRL, RM_IVA_RSTST */
+#define OMAP54XX_RST_SEQ2_SHIFT                                                        1
+#define OMAP54XX_RST_SEQ2_WIDTH                                                        0x1
+#define OMAP54XX_RST_SEQ2_MASK                                                 (1 << 1)
+
+/* Used by REVISION_PRM */
+#define OMAP54XX_R_RTL_SHIFT                                                   11
+#define OMAP54XX_R_RTL_WIDTH                                                   0x5
+#define OMAP54XX_R_RTL_MASK                                                    (0x1f << 11)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_SA_VDD_CORE_L_SHIFT                                           0
+#define OMAP54XX_SA_VDD_CORE_L_WIDTH                                           0x7
+#define OMAP54XX_SA_VDD_CORE_L_MASK                                            (0x7f << 0)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_SA_VDD_MM_L_SHIFT                                             0
+#define OMAP54XX_SA_VDD_MM_L_WIDTH                                             0x7
+#define OMAP54XX_SA_VDD_MM_L_MASK                                              (0x7f << 0)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_SA_VDD_MPU_L_SHIFT                                            0
+#define OMAP54XX_SA_VDD_MPU_L_WIDTH                                            0x7
+#define OMAP54XX_SA_VDD_MPU_L_MASK                                             (0x7f << 0)
+
+/* Used by REVISION_PRM */
+#define OMAP54XX_SCHEME_SHIFT                                                  30
+#define OMAP54XX_SCHEME_WIDTH                                                  0x2
+#define OMAP54XX_SCHEME_MASK                                                   (0x3 << 30)
+
+/* Used by PRM_VC_CFG_I2C_CLK */
+#define OMAP54XX_SCLH_SHIFT                                                    0
+#define OMAP54XX_SCLH_WIDTH                                                    0x8
+#define OMAP54XX_SCLH_MASK                                                     (0xff << 0)
+
+/* Used by PRM_VC_CFG_I2C_CLK */
+#define OMAP54XX_SCLL_SHIFT                                                    8
+#define OMAP54XX_SCLL_WIDTH                                                    0x8
+#define OMAP54XX_SCLL_MASK                                                     (0xff << 8)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_SECURE_WDT_RST_SHIFT                                          4
+#define OMAP54XX_SECURE_WDT_RST_WIDTH                                          0x1
+#define OMAP54XX_SECURE_WDT_RST_MASK                                           (1 << 4)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_SEL_SA_VDD_CORE_L_SHIFT                                       24
+#define OMAP54XX_SEL_SA_VDD_CORE_L_WIDTH                                       0x1
+#define OMAP54XX_SEL_SA_VDD_CORE_L_MASK                                                (1 << 24)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_SEL_SA_VDD_MM_L_SHIFT                                         24
+#define OMAP54XX_SEL_SA_VDD_MM_L_WIDTH                                         0x1
+#define OMAP54XX_SEL_SA_VDD_MM_L_MASK                                          (1 << 24)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_SEL_SA_VDD_MPU_L_SHIFT                                                24
+#define OMAP54XX_SEL_SA_VDD_MPU_L_WIDTH                                                0x1
+#define OMAP54XX_SEL_SA_VDD_MPU_L_MASK                                         (1 << 24)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_SL2_MEM_ONSTATE_SHIFT                                         18
+#define OMAP54XX_SL2_MEM_ONSTATE_WIDTH                                         0x2
+#define OMAP54XX_SL2_MEM_ONSTATE_MASK                                          (0x3 << 18)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_SL2_MEM_RETSTATE_SHIFT                                                9
+#define OMAP54XX_SL2_MEM_RETSTATE_WIDTH                                                0x1
+#define OMAP54XX_SL2_MEM_RETSTATE_MASK                                         (1 << 9)
+
+/* Used by PM_IVA_PWRSTST */
+#define OMAP54XX_SL2_MEM_STATEST_SHIFT                                         6
+#define OMAP54XX_SL2_MEM_STATEST_WIDTH                                         0x2
+#define OMAP54XX_SL2_MEM_STATEST_MASK                                          (0x3 << 6)
+
+/* Used by PRM_VC_VAL_BYPASS */
+#define OMAP54XX_SLAVEADDR_SHIFT                                               0
+#define OMAP54XX_SLAVEADDR_WIDTH                                               0x7
+#define OMAP54XX_SLAVEADDR_MASK                                                        (0x7f << 0)
+
+/* Used by PRM_SRAM_COUNT */
+#define OMAP54XX_SLPCNT_VALUE_SHIFT                                            16
+#define OMAP54XX_SLPCNT_VALUE_WIDTH                                            0x8
+#define OMAP54XX_SLPCNT_VALUE_MASK                                             (0xff << 16)
+
+/* Used by PRM_VP_CORE_VSTEPMAX, PRM_VP_MM_VSTEPMAX, PRM_VP_MPU_VSTEPMAX */
+#define OMAP54XX_SMPSWAITTIMEMAX_SHIFT                                         8
+#define OMAP54XX_SMPSWAITTIMEMAX_WIDTH                                         0x10
+#define OMAP54XX_SMPSWAITTIMEMAX_MASK                                          (0xffff << 8)
+
+/* Used by PRM_VP_CORE_VSTEPMIN, PRM_VP_MM_VSTEPMIN, PRM_VP_MPU_VSTEPMIN */
+#define OMAP54XX_SMPSWAITTIMEMIN_SHIFT                                         8
+#define OMAP54XX_SMPSWAITTIMEMIN_WIDTH                                         0x10
+#define OMAP54XX_SMPSWAITTIMEMIN_MASK                                          (0xffff << 8)
+
+/* Used by PRM_VC_CORE_ERRST */
+#define OMAP54XX_SMPS_RA_ERR_CORE_SHIFT                                                1
+#define OMAP54XX_SMPS_RA_ERR_CORE_WIDTH                                                0x1
+#define OMAP54XX_SMPS_RA_ERR_CORE_MASK                                         (1 << 1)
+
+/* Used by PRM_VC_MM_ERRST */
+#define OMAP54XX_SMPS_RA_ERR_MM_SHIFT                                          1
+#define OMAP54XX_SMPS_RA_ERR_MM_WIDTH                                          0x1
+#define OMAP54XX_SMPS_RA_ERR_MM_MASK                                           (1 << 1)
+
+/* Used by PRM_VC_MPU_ERRST */
+#define OMAP54XX_SMPS_RA_ERR_MPU_SHIFT                                         1
+#define OMAP54XX_SMPS_RA_ERR_MPU_WIDTH                                         0x1
+#define OMAP54XX_SMPS_RA_ERR_MPU_MASK                                          (1 << 1)
+
+/* Used by PRM_VC_CORE_ERRST */
+#define OMAP54XX_SMPS_SA_ERR_CORE_SHIFT                                                0
+#define OMAP54XX_SMPS_SA_ERR_CORE_WIDTH                                                0x1
+#define OMAP54XX_SMPS_SA_ERR_CORE_MASK                                         (1 << 0)
+
+/* Used by PRM_VC_MM_ERRST */
+#define OMAP54XX_SMPS_SA_ERR_MM_SHIFT                                          0
+#define OMAP54XX_SMPS_SA_ERR_MM_WIDTH                                          0x1
+#define OMAP54XX_SMPS_SA_ERR_MM_MASK                                           (1 << 0)
+
+/* Used by PRM_VC_MPU_ERRST */
+#define OMAP54XX_SMPS_SA_ERR_MPU_SHIFT                                         0
+#define OMAP54XX_SMPS_SA_ERR_MPU_WIDTH                                         0x1
+#define OMAP54XX_SMPS_SA_ERR_MPU_MASK                                          (1 << 0)
+
+/* Used by PRM_VC_CORE_ERRST */
+#define OMAP54XX_SMPS_TIMEOUT_ERR_CORE_SHIFT                                   2
+#define OMAP54XX_SMPS_TIMEOUT_ERR_CORE_WIDTH                                   0x1
+#define OMAP54XX_SMPS_TIMEOUT_ERR_CORE_MASK                                    (1 << 2)
+
+/* Used by PRM_VC_MM_ERRST */
+#define OMAP54XX_SMPS_TIMEOUT_ERR_MM_SHIFT                                     2
+#define OMAP54XX_SMPS_TIMEOUT_ERR_MM_WIDTH                                     0x1
+#define OMAP54XX_SMPS_TIMEOUT_ERR_MM_MASK                                      (1 << 2)
+
+/* Used by PRM_VC_MPU_ERRST */
+#define OMAP54XX_SMPS_TIMEOUT_ERR_MPU_SHIFT                                    2
+#define OMAP54XX_SMPS_TIMEOUT_ERR_MPU_WIDTH                                    0x1
+#define OMAP54XX_SMPS_TIMEOUT_ERR_MPU_MASK                                     (1 << 2)
+
+/* Used by PRM_ABBLDO_MM_SETUP, PRM_ABBLDO_MPU_SETUP */
+#define OMAP54XX_SR2EN_SHIFT                                                   0
+#define OMAP54XX_SR2EN_WIDTH                                                   0x1
+#define OMAP54XX_SR2EN_MASK                                                    (1 << 0)
+
+/* Used by PRM_ABBLDO_MM_CTRL, PRM_ABBLDO_MPU_CTRL */
+#define OMAP54XX_SR2_IN_TRANSITION_SHIFT                                       6
+#define OMAP54XX_SR2_IN_TRANSITION_WIDTH                                       0x1
+#define OMAP54XX_SR2_IN_TRANSITION_MASK                                                (1 << 6)
+
+/* Used by PRM_ABBLDO_MM_CTRL, PRM_ABBLDO_MPU_CTRL */
+#define OMAP54XX_SR2_STATUS_SHIFT                                              3
+#define OMAP54XX_SR2_STATUS_WIDTH                                              0x2
+#define OMAP54XX_SR2_STATUS_MASK                                               (0x3 << 3)
+
+/* Used by PRM_ABBLDO_MM_SETUP, PRM_ABBLDO_MPU_SETUP */
+#define OMAP54XX_SR2_WTCNT_VALUE_SHIFT                                         8
+#define OMAP54XX_SR2_WTCNT_VALUE_WIDTH                                         0x8
+#define OMAP54XX_SR2_WTCNT_VALUE_MASK                                          (0xff << 8)
+
+/* Used by PRM_SLDO_CORE_CTRL, PRM_SLDO_MM_CTRL, PRM_SLDO_MPU_CTRL */
+#define OMAP54XX_SRAMLDO_STATUS_SHIFT                                          8
+#define OMAP54XX_SRAMLDO_STATUS_WIDTH                                          0x1
+#define OMAP54XX_SRAMLDO_STATUS_MASK                                           (1 << 8)
+
+/* Used by PRM_SLDO_CORE_CTRL, PRM_SLDO_MM_CTRL, PRM_SLDO_MPU_CTRL */
+#define OMAP54XX_SRAM_IN_TRANSITION_SHIFT                                      9
+#define OMAP54XX_SRAM_IN_TRANSITION_WIDTH                                      0x1
+#define OMAP54XX_SRAM_IN_TRANSITION_MASK                                       (1 << 9)
+
+/* Used by PRM_VC_CFG_I2C_MODE */
+#define OMAP54XX_SRMODEEN_SHIFT                                                        4
+#define OMAP54XX_SRMODEEN_WIDTH                                                        0x1
+#define OMAP54XX_SRMODEEN_MASK                                                 (1 << 4)
+
+/* Used by PRM_VOLTSETUP_WARMRESET */
+#define OMAP54XX_STABLE_COUNT_SHIFT                                            0
+#define OMAP54XX_STABLE_COUNT_WIDTH                                            0x6
+#define OMAP54XX_STABLE_COUNT_MASK                                             (0x3f << 0)
+
+/* Used by PRM_VOLTSETUP_WARMRESET */
+#define OMAP54XX_STABLE_PRESCAL_SHIFT                                          8
+#define OMAP54XX_STABLE_PRESCAL_WIDTH                                          0x2
+#define OMAP54XX_STABLE_PRESCAL_MASK                                           (0x3 << 8)
+
+/* Used by PRM_BANDGAP_SETUP */
+#define OMAP54XX_STARTUP_COUNT_SHIFT                                           0
+#define OMAP54XX_STARTUP_COUNT_WIDTH                                           0x8
+#define OMAP54XX_STARTUP_COUNT_MASK                                            (0xff << 0)
+
+/* Renamed from STARTUP_COUNT Used by PRM_SRAM_COUNT */
+#define OMAP54XX_STARTUP_COUNT_24_31_SHIFT                                     24
+#define OMAP54XX_STARTUP_COUNT_24_31_WIDTH                                     0x8
+#define OMAP54XX_STARTUP_COUNT_24_31_MASK                                      (0xff << 24)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_TCM1_MEM_ONSTATE_SHIFT                                                20
+#define OMAP54XX_TCM1_MEM_ONSTATE_WIDTH                                                0x2
+#define OMAP54XX_TCM1_MEM_ONSTATE_MASK                                         (0x3 << 20)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_TCM1_MEM_RETSTATE_SHIFT                                       10
+#define OMAP54XX_TCM1_MEM_RETSTATE_WIDTH                                       0x1
+#define OMAP54XX_TCM1_MEM_RETSTATE_MASK                                                (1 << 10)
+
+/* Used by PM_IVA_PWRSTST */
+#define OMAP54XX_TCM1_MEM_STATEST_SHIFT                                                8
+#define OMAP54XX_TCM1_MEM_STATEST_WIDTH                                                0x2
+#define OMAP54XX_TCM1_MEM_STATEST_MASK                                         (0x3 << 8)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_TCM2_MEM_ONSTATE_SHIFT                                                22
+#define OMAP54XX_TCM2_MEM_ONSTATE_WIDTH                                                0x2
+#define OMAP54XX_TCM2_MEM_ONSTATE_MASK                                         (0x3 << 22)
+
+/* Used by PM_IVA_PWRSTCTRL */
+#define OMAP54XX_TCM2_MEM_RETSTATE_SHIFT                                       11
+#define OMAP54XX_TCM2_MEM_RETSTATE_WIDTH                                       0x1
+#define OMAP54XX_TCM2_MEM_RETSTATE_MASK                                                (1 << 11)
+
+/* Used by PM_IVA_PWRSTST */
+#define OMAP54XX_TCM2_MEM_STATEST_SHIFT                                                10
+#define OMAP54XX_TCM2_MEM_STATEST_WIDTH                                                0x2
+#define OMAP54XX_TCM2_MEM_STATEST_MASK                                         (0x3 << 10)
+
+/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_MM_VLIMITTO, PRM_VP_MPU_VLIMITTO */
+#define OMAP54XX_TIMEOUT_SHIFT                                                 0
+#define OMAP54XX_TIMEOUT_WIDTH                                                 0x10
+#define OMAP54XX_TIMEOUT_MASK                                                  (0xffff << 0)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_TIMEOUTEN_SHIFT                                               3
+#define OMAP54XX_TIMEOUTEN_WIDTH                                               0x1
+#define OMAP54XX_TIMEOUTEN_MASK                                                        (1 << 3)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_TRANSITION_EN_SHIFT                                           8
+#define OMAP54XX_TRANSITION_EN_WIDTH                                           0x1
+#define OMAP54XX_TRANSITION_EN_MASK                                            (1 << 8)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_TRANSITION_ST_SHIFT                                           8
+#define OMAP54XX_TRANSITION_ST_WIDTH                                           0x1
+#define OMAP54XX_TRANSITION_ST_MASK                                            (1 << 8)
+
+/* Used by PRM_DEBUG_TRANS_CFG */
+#define OMAP54XX_TRIGGER_CLEAR_SHIFT                                           2
+#define OMAP54XX_TRIGGER_CLEAR_WIDTH                                           0x1
+#define OMAP54XX_TRIGGER_CLEAR_MASK                                            (1 << 2)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_TSHUT_CORE_RST_SHIFT                                          13
+#define OMAP54XX_TSHUT_CORE_RST_WIDTH                                          0x1
+#define OMAP54XX_TSHUT_CORE_RST_MASK                                           (1 << 13)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_TSHUT_MM_RST_SHIFT                                            12
+#define OMAP54XX_TSHUT_MM_RST_WIDTH                                            0x1
+#define OMAP54XX_TSHUT_MM_RST_MASK                                             (1 << 12)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_TSHUT_MPU_RST_SHIFT                                           11
+#define OMAP54XX_TSHUT_MPU_RST_WIDTH                                           0x1
+#define OMAP54XX_TSHUT_MPU_RST_MASK                                            (1 << 11)
+
+/* Used by PRM_VC_VAL_BYPASS */
+#define OMAP54XX_VALID_SHIFT                                                   24
+#define OMAP54XX_VALID_WIDTH                                                   0x1
+#define OMAP54XX_VALID_MASK                                                    (1 << 24)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VC_BYPASSACK_EN_SHIFT                                         14
+#define OMAP54XX_VC_BYPASSACK_EN_WIDTH                                         0x1
+#define OMAP54XX_VC_BYPASSACK_EN_MASK                                          (1 << 14)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VC_BYPASSACK_ST_SHIFT                                         14
+#define OMAP54XX_VC_BYPASSACK_ST_WIDTH                                         0x1
+#define OMAP54XX_VC_BYPASSACK_ST_MASK                                          (1 << 14)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VC_CORE_VPACK_EN_SHIFT                                                22
+#define OMAP54XX_VC_CORE_VPACK_EN_WIDTH                                                0x1
+#define OMAP54XX_VC_CORE_VPACK_EN_MASK                                         (1 << 22)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VC_CORE_VPACK_ST_SHIFT                                                22
+#define OMAP54XX_VC_CORE_VPACK_ST_WIDTH                                                0x1
+#define OMAP54XX_VC_CORE_VPACK_ST_MASK                                         (1 << 22)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VC_MM_VPACK_EN_SHIFT                                          30
+#define OMAP54XX_VC_MM_VPACK_EN_WIDTH                                          0x1
+#define OMAP54XX_VC_MM_VPACK_EN_MASK                                           (1 << 30)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VC_MM_VPACK_ST_SHIFT                                          30
+#define OMAP54XX_VC_MM_VPACK_ST_WIDTH                                          0x1
+#define OMAP54XX_VC_MM_VPACK_ST_MASK                                           (1 << 30)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VC_MPU_VPACK_EN_SHIFT                                         6
+#define OMAP54XX_VC_MPU_VPACK_EN_WIDTH                                         0x1
+#define OMAP54XX_VC_MPU_VPACK_EN_MASK                                          (1 << 6)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VC_MPU_VPACK_ST_SHIFT                                         6
+#define OMAP54XX_VC_MPU_VPACK_ST_WIDTH                                         0x1
+#define OMAP54XX_VC_MPU_VPACK_ST_MASK                                          (1 << 6)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VC_RAERR_EN_SHIFT                                             12
+#define OMAP54XX_VC_RAERR_EN_WIDTH                                             0x1
+#define OMAP54XX_VC_RAERR_EN_MASK                                              (1 << 12)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VC_RAERR_ST_SHIFT                                             12
+#define OMAP54XX_VC_RAERR_ST_WIDTH                                             0x1
+#define OMAP54XX_VC_RAERR_ST_MASK                                              (1 << 12)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VC_SAERR_EN_SHIFT                                             11
+#define OMAP54XX_VC_SAERR_EN_WIDTH                                             0x1
+#define OMAP54XX_VC_SAERR_EN_MASK                                              (1 << 11)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VC_SAERR_ST_SHIFT                                             11
+#define OMAP54XX_VC_SAERR_ST_WIDTH                                             0x1
+#define OMAP54XX_VC_SAERR_ST_MASK                                              (1 << 11)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VC_TOERR_EN_SHIFT                                             13
+#define OMAP54XX_VC_TOERR_EN_WIDTH                                             0x1
+#define OMAP54XX_VC_TOERR_EN_MASK                                              (1 << 13)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VC_TOERR_ST_SHIFT                                             13
+#define OMAP54XX_VC_TOERR_ST_WIDTH                                             0x1
+#define OMAP54XX_VC_TOERR_ST_MASK                                              (1 << 13)
+
+/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_MM_VLIMITTO, PRM_VP_MPU_VLIMITTO */
+#define OMAP54XX_VDDMAX_SHIFT                                                  24
+#define OMAP54XX_VDDMAX_WIDTH                                                  0x8
+#define OMAP54XX_VDDMAX_MASK                                                   (0xff << 24)
+
+/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_MM_VLIMITTO, PRM_VP_MPU_VLIMITTO */
+#define OMAP54XX_VDDMIN_SHIFT                                                  16
+#define OMAP54XX_VDDMIN_WIDTH                                                  0x8
+#define OMAP54XX_VDDMIN_MASK                                                   (0xff << 16)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_VDD_CORE_I2C_DISABLE_SHIFT                                    12
+#define OMAP54XX_VDD_CORE_I2C_DISABLE_WIDTH                                    0x1
+#define OMAP54XX_VDD_CORE_I2C_DISABLE_MASK                                     (1 << 12)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_VDD_CORE_VOLT_MGR_RST_SHIFT                                   8
+#define OMAP54XX_VDD_CORE_VOLT_MGR_RST_WIDTH                                   0x1
+#define OMAP54XX_VDD_CORE_VOLT_MGR_RST_MASK                                    (1 << 8)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_VDD_MM_I2C_DISABLE_SHIFT                                      14
+#define OMAP54XX_VDD_MM_I2C_DISABLE_WIDTH                                      0x1
+#define OMAP54XX_VDD_MM_I2C_DISABLE_MASK                                       (1 << 14)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_VDD_MM_PRESENCE_SHIFT                                         9
+#define OMAP54XX_VDD_MM_PRESENCE_WIDTH                                         0x1
+#define OMAP54XX_VDD_MM_PRESENCE_MASK                                          (1 << 9)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_VDD_MM_VOLT_MGR_RST_SHIFT                                     7
+#define OMAP54XX_VDD_MM_VOLT_MGR_RST_WIDTH                                     0x1
+#define OMAP54XX_VDD_MM_VOLT_MGR_RST_MASK                                      (1 << 7)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_VDD_MPU_I2C_DISABLE_SHIFT                                     13
+#define OMAP54XX_VDD_MPU_I2C_DISABLE_WIDTH                                     0x1
+#define OMAP54XX_VDD_MPU_I2C_DISABLE_MASK                                      (1 << 13)
+
+/* Used by PRM_VOLTCTRL */
+#define OMAP54XX_VDD_MPU_PRESENCE_SHIFT                                                8
+#define OMAP54XX_VDD_MPU_PRESENCE_WIDTH                                                0x1
+#define OMAP54XX_VDD_MPU_PRESENCE_MASK                                         (1 << 8)
+
+/* Used by PRM_RSTST */
+#define OMAP54XX_VDD_MPU_VOLT_MGR_RST_SHIFT                                    6
+#define OMAP54XX_VDD_MPU_VOLT_MGR_RST_WIDTH                                    0x1
+#define OMAP54XX_VDD_MPU_VOLT_MGR_RST_MASK                                     (1 << 6)
+
+/* Used by PRM_VC_CORE_ERRST */
+#define OMAP54XX_VFSM_RA_ERR_CORE_SHIFT                                                4
+#define OMAP54XX_VFSM_RA_ERR_CORE_WIDTH                                                0x1
+#define OMAP54XX_VFSM_RA_ERR_CORE_MASK                                         (1 << 4)
+
+/* Used by PRM_VC_MM_ERRST */
+#define OMAP54XX_VFSM_RA_ERR_MM_SHIFT                                          4
+#define OMAP54XX_VFSM_RA_ERR_MM_WIDTH                                          0x1
+#define OMAP54XX_VFSM_RA_ERR_MM_MASK                                           (1 << 4)
+
+/* Used by PRM_VC_MPU_ERRST */
+#define OMAP54XX_VFSM_RA_ERR_MPU_SHIFT                                         4
+#define OMAP54XX_VFSM_RA_ERR_MPU_WIDTH                                         0x1
+#define OMAP54XX_VFSM_RA_ERR_MPU_MASK                                          (1 << 4)
+
+/* Used by PRM_VC_CORE_ERRST */
+#define OMAP54XX_VFSM_SA_ERR_CORE_SHIFT                                                3
+#define OMAP54XX_VFSM_SA_ERR_CORE_WIDTH                                                0x1
+#define OMAP54XX_VFSM_SA_ERR_CORE_MASK                                         (1 << 3)
+
+/* Used by PRM_VC_MM_ERRST */
+#define OMAP54XX_VFSM_SA_ERR_MM_SHIFT                                          3
+#define OMAP54XX_VFSM_SA_ERR_MM_WIDTH                                          0x1
+#define OMAP54XX_VFSM_SA_ERR_MM_MASK                                           (1 << 3)
+
+/* Used by PRM_VC_MPU_ERRST */
+#define OMAP54XX_VFSM_SA_ERR_MPU_SHIFT                                         3
+#define OMAP54XX_VFSM_SA_ERR_MPU_WIDTH                                         0x1
+#define OMAP54XX_VFSM_SA_ERR_MPU_MASK                                          (1 << 3)
+
+/* Used by PRM_VC_CORE_ERRST */
+#define OMAP54XX_VFSM_TIMEOUT_ERR_CORE_SHIFT                                   5
+#define OMAP54XX_VFSM_TIMEOUT_ERR_CORE_WIDTH                                   0x1
+#define OMAP54XX_VFSM_TIMEOUT_ERR_CORE_MASK                                    (1 << 5)
+
+/* Used by PRM_VC_MM_ERRST */
+#define OMAP54XX_VFSM_TIMEOUT_ERR_MM_SHIFT                                     5
+#define OMAP54XX_VFSM_TIMEOUT_ERR_MM_WIDTH                                     0x1
+#define OMAP54XX_VFSM_TIMEOUT_ERR_MM_MASK                                      (1 << 5)
+
+/* Used by PRM_VC_MPU_ERRST */
+#define OMAP54XX_VFSM_TIMEOUT_ERR_MPU_SHIFT                                    5
+#define OMAP54XX_VFSM_TIMEOUT_ERR_MPU_WIDTH                                    0x1
+#define OMAP54XX_VFSM_TIMEOUT_ERR_MPU_MASK                                     (1 << 5)
+
+/* Used by PRM_VC_SMPS_CORE_CONFIG */
+#define OMAP54XX_VOLRA_VDD_CORE_L_SHIFT                                                8
+#define OMAP54XX_VOLRA_VDD_CORE_L_WIDTH                                                0x8
+#define OMAP54XX_VOLRA_VDD_CORE_L_MASK                                         (0xff << 8)
+
+/* Used by PRM_VC_SMPS_MM_CONFIG */
+#define OMAP54XX_VOLRA_VDD_MM_L_SHIFT                                          8
+#define OMAP54XX_VOLRA_VDD_MM_L_WIDTH                                          0x8
+#define OMAP54XX_VOLRA_VDD_MM_L_MASK                                           (0xff << 8)
+
+/* Used by PRM_VC_SMPS_MPU_CONFIG */
+#define OMAP54XX_VOLRA_VDD_MPU_L_SHIFT                                         8
+#define OMAP54XX_VOLRA_VDD_MPU_L_WIDTH                                         0x8
+#define OMAP54XX_VOLRA_VDD_MPU_L_MASK                                          (0xff << 8)
+
+/* Used by PRM_VOLTST_MM, PRM_VOLTST_MPU */
+#define OMAP54XX_VOLTSTATEST_SHIFT                                             0
+#define OMAP54XX_VOLTSTATEST_WIDTH                                             0x2
+#define OMAP54XX_VOLTSTATEST_MASK                                              (0x3 << 0)
+
+/* Used by PRM_VP_CORE_CONFIG, PRM_VP_MM_CONFIG, PRM_VP_MPU_CONFIG */
+#define OMAP54XX_VPENABLE_SHIFT                                                        0
+#define OMAP54XX_VPENABLE_WIDTH                                                        0x1
+#define OMAP54XX_VPENABLE_MASK                                                 (1 << 0)
+
+/* Used by PRM_VP_CORE_STATUS, PRM_VP_MM_STATUS, PRM_VP_MPU_STATUS */
+#define OMAP54XX_VPINIDLE_SHIFT                                                        0
+#define OMAP54XX_VPINIDLE_WIDTH                                                        0x1
+#define OMAP54XX_VPINIDLE_MASK                                                 (1 << 0)
+
+/* Used by PRM_VP_CORE_VOLTAGE, PRM_VP_MM_VOLTAGE, PRM_VP_MPU_VOLTAGE */
+#define OMAP54XX_VPVOLTAGE_SHIFT                                               0
+#define OMAP54XX_VPVOLTAGE_WIDTH                                               0x8
+#define OMAP54XX_VPVOLTAGE_MASK                                                        (0xff << 0)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_CORE_EQVALUE_EN_SHIFT                                      20
+#define OMAP54XX_VP_CORE_EQVALUE_EN_WIDTH                                      0x1
+#define OMAP54XX_VP_CORE_EQVALUE_EN_MASK                                       (1 << 20)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_CORE_EQVALUE_ST_SHIFT                                      20
+#define OMAP54XX_VP_CORE_EQVALUE_ST_WIDTH                                      0x1
+#define OMAP54XX_VP_CORE_EQVALUE_ST_MASK                                       (1 << 20)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_CORE_MAXVDD_EN_SHIFT                                       18
+#define OMAP54XX_VP_CORE_MAXVDD_EN_WIDTH                                       0x1
+#define OMAP54XX_VP_CORE_MAXVDD_EN_MASK                                                (1 << 18)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_CORE_MAXVDD_ST_SHIFT                                       18
+#define OMAP54XX_VP_CORE_MAXVDD_ST_WIDTH                                       0x1
+#define OMAP54XX_VP_CORE_MAXVDD_ST_MASK                                                (1 << 18)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_CORE_MINVDD_EN_SHIFT                                       17
+#define OMAP54XX_VP_CORE_MINVDD_EN_WIDTH                                       0x1
+#define OMAP54XX_VP_CORE_MINVDD_EN_MASK                                                (1 << 17)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_CORE_MINVDD_ST_SHIFT                                       17
+#define OMAP54XX_VP_CORE_MINVDD_ST_WIDTH                                       0x1
+#define OMAP54XX_VP_CORE_MINVDD_ST_MASK                                                (1 << 17)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_CORE_NOSMPSACK_EN_SHIFT                                    19
+#define OMAP54XX_VP_CORE_NOSMPSACK_EN_WIDTH                                    0x1
+#define OMAP54XX_VP_CORE_NOSMPSACK_EN_MASK                                     (1 << 19)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_CORE_NOSMPSACK_ST_SHIFT                                    19
+#define OMAP54XX_VP_CORE_NOSMPSACK_ST_WIDTH                                    0x1
+#define OMAP54XX_VP_CORE_NOSMPSACK_ST_MASK                                     (1 << 19)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_CORE_OPPCHANGEDONE_EN_SHIFT                                        16
+#define OMAP54XX_VP_CORE_OPPCHANGEDONE_EN_WIDTH                                        0x1
+#define OMAP54XX_VP_CORE_OPPCHANGEDONE_EN_MASK                                 (1 << 16)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_CORE_OPPCHANGEDONE_ST_SHIFT                                        16
+#define OMAP54XX_VP_CORE_OPPCHANGEDONE_ST_WIDTH                                        0x1
+#define OMAP54XX_VP_CORE_OPPCHANGEDONE_ST_MASK                                 (1 << 16)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_CORE_TRANXDONE_EN_SHIFT                                    21
+#define OMAP54XX_VP_CORE_TRANXDONE_EN_WIDTH                                    0x1
+#define OMAP54XX_VP_CORE_TRANXDONE_EN_MASK                                     (1 << 21)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_CORE_TRANXDONE_ST_SHIFT                                    21
+#define OMAP54XX_VP_CORE_TRANXDONE_ST_WIDTH                                    0x1
+#define OMAP54XX_VP_CORE_TRANXDONE_ST_MASK                                     (1 << 21)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_MM_EQVALUE_EN_SHIFT                                                28
+#define OMAP54XX_VP_MM_EQVALUE_EN_WIDTH                                                0x1
+#define OMAP54XX_VP_MM_EQVALUE_EN_MASK                                         (1 << 28)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_MM_EQVALUE_ST_SHIFT                                                28
+#define OMAP54XX_VP_MM_EQVALUE_ST_WIDTH                                                0x1
+#define OMAP54XX_VP_MM_EQVALUE_ST_MASK                                         (1 << 28)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_MM_MAXVDD_EN_SHIFT                                         26
+#define OMAP54XX_VP_MM_MAXVDD_EN_WIDTH                                         0x1
+#define OMAP54XX_VP_MM_MAXVDD_EN_MASK                                          (1 << 26)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_MM_MAXVDD_ST_SHIFT                                         26
+#define OMAP54XX_VP_MM_MAXVDD_ST_WIDTH                                         0x1
+#define OMAP54XX_VP_MM_MAXVDD_ST_MASK                                          (1 << 26)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_MM_MINVDD_EN_SHIFT                                         25
+#define OMAP54XX_VP_MM_MINVDD_EN_WIDTH                                         0x1
+#define OMAP54XX_VP_MM_MINVDD_EN_MASK                                          (1 << 25)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_MM_MINVDD_ST_SHIFT                                         25
+#define OMAP54XX_VP_MM_MINVDD_ST_WIDTH                                         0x1
+#define OMAP54XX_VP_MM_MINVDD_ST_MASK                                          (1 << 25)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_MM_NOSMPSACK_EN_SHIFT                                      27
+#define OMAP54XX_VP_MM_NOSMPSACK_EN_WIDTH                                      0x1
+#define OMAP54XX_VP_MM_NOSMPSACK_EN_MASK                                       (1 << 27)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_MM_NOSMPSACK_ST_SHIFT                                      27
+#define OMAP54XX_VP_MM_NOSMPSACK_ST_WIDTH                                      0x1
+#define OMAP54XX_VP_MM_NOSMPSACK_ST_MASK                                       (1 << 27)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_MM_OPPCHANGEDONE_EN_SHIFT                                  24
+#define OMAP54XX_VP_MM_OPPCHANGEDONE_EN_WIDTH                                  0x1
+#define OMAP54XX_VP_MM_OPPCHANGEDONE_EN_MASK                                   (1 << 24)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_MM_OPPCHANGEDONE_ST_SHIFT                                  24
+#define OMAP54XX_VP_MM_OPPCHANGEDONE_ST_WIDTH                                  0x1
+#define OMAP54XX_VP_MM_OPPCHANGEDONE_ST_MASK                                   (1 << 24)
+
+/* Used by PRM_IRQENABLE_IPU, PRM_IRQENABLE_MPU */
+#define OMAP54XX_VP_MM_TRANXDONE_EN_SHIFT                                      29
+#define OMAP54XX_VP_MM_TRANXDONE_EN_WIDTH                                      0x1
+#define OMAP54XX_VP_MM_TRANXDONE_EN_MASK                                       (1 << 29)
+
+/* Used by PRM_IRQSTATUS_IPU, PRM_IRQSTATUS_MPU */
+#define OMAP54XX_VP_MM_TRANXDONE_ST_SHIFT                                      29
+#define OMAP54XX_VP_MM_TRANXDONE_ST_WIDTH                                      0x1
+#define OMAP54XX_VP_MM_TRANXDONE_ST_MASK                                       (1 << 29)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VP_MPU_EQVALUE_EN_SHIFT                                       4
+#define OMAP54XX_VP_MPU_EQVALUE_EN_WIDTH                                       0x1
+#define OMAP54XX_VP_MPU_EQVALUE_EN_MASK                                                (1 << 4)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VP_MPU_EQVALUE_ST_SHIFT                                       4
+#define OMAP54XX_VP_MPU_EQVALUE_ST_WIDTH                                       0x1
+#define OMAP54XX_VP_MPU_EQVALUE_ST_MASK                                                (1 << 4)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VP_MPU_MAXVDD_EN_SHIFT                                                2
+#define OMAP54XX_VP_MPU_MAXVDD_EN_WIDTH                                                0x1
+#define OMAP54XX_VP_MPU_MAXVDD_EN_MASK                                         (1 << 2)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VP_MPU_MAXVDD_ST_SHIFT                                                2
+#define OMAP54XX_VP_MPU_MAXVDD_ST_WIDTH                                                0x1
+#define OMAP54XX_VP_MPU_MAXVDD_ST_MASK                                         (1 << 2)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VP_MPU_MINVDD_EN_SHIFT                                                1
+#define OMAP54XX_VP_MPU_MINVDD_EN_WIDTH                                                0x1
+#define OMAP54XX_VP_MPU_MINVDD_EN_MASK                                         (1 << 1)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VP_MPU_MINVDD_ST_SHIFT                                                1
+#define OMAP54XX_VP_MPU_MINVDD_ST_WIDTH                                                0x1
+#define OMAP54XX_VP_MPU_MINVDD_ST_MASK                                         (1 << 1)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VP_MPU_NOSMPSACK_EN_SHIFT                                     3
+#define OMAP54XX_VP_MPU_NOSMPSACK_EN_WIDTH                                     0x1
+#define OMAP54XX_VP_MPU_NOSMPSACK_EN_MASK                                      (1 << 3)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VP_MPU_NOSMPSACK_ST_SHIFT                                     3
+#define OMAP54XX_VP_MPU_NOSMPSACK_ST_WIDTH                                     0x1
+#define OMAP54XX_VP_MPU_NOSMPSACK_ST_MASK                                      (1 << 3)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VP_MPU_OPPCHANGEDONE_EN_SHIFT                                 0
+#define OMAP54XX_VP_MPU_OPPCHANGEDONE_EN_WIDTH                                 0x1
+#define OMAP54XX_VP_MPU_OPPCHANGEDONE_EN_MASK                                  (1 << 0)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VP_MPU_OPPCHANGEDONE_ST_SHIFT                                 0
+#define OMAP54XX_VP_MPU_OPPCHANGEDONE_ST_WIDTH                                 0x1
+#define OMAP54XX_VP_MPU_OPPCHANGEDONE_ST_MASK                                  (1 << 0)
+
+/* Used by PRM_IRQENABLE_MPU_2 */
+#define OMAP54XX_VP_MPU_TRANXDONE_EN_SHIFT                                     5
+#define OMAP54XX_VP_MPU_TRANXDONE_EN_WIDTH                                     0x1
+#define OMAP54XX_VP_MPU_TRANXDONE_EN_MASK                                      (1 << 5)
+
+/* Used by PRM_IRQSTATUS_MPU_2 */
+#define OMAP54XX_VP_MPU_TRANXDONE_ST_SHIFT                                     5
+#define OMAP54XX_VP_MPU_TRANXDONE_ST_WIDTH                                     0x1
+#define OMAP54XX_VP_MPU_TRANXDONE_ST_MASK                                      (1 << 5)
+
+/* Used by PRM_SRAM_COUNT */
+#define OMAP54XX_VSETUPCNT_VALUE_SHIFT                                         8
+#define OMAP54XX_VSETUPCNT_VALUE_WIDTH                                         0x8
+#define OMAP54XX_VSETUPCNT_VALUE_MASK                                          (0xff << 8)
+
+/* Used by PRM_VP_CORE_VSTEPMAX, PRM_VP_MM_VSTEPMAX, PRM_VP_MPU_VSTEPMAX */
+#define OMAP54XX_VSTEPMAX_SHIFT                                                        0
+#define OMAP54XX_VSTEPMAX_WIDTH                                                        0x8
+#define OMAP54XX_VSTEPMAX_MASK                                                 (0xff << 0)
+
+/* Used by PRM_VP_CORE_VSTEPMIN, PRM_VP_MM_VSTEPMIN, PRM_VP_MPU_VSTEPMIN */
+#define OMAP54XX_VSTEPMIN_SHIFT                                                        0
+#define OMAP54XX_VSTEPMIN_WIDTH                                                        0x8
+#define OMAP54XX_VSTEPMIN_MASK                                                 (0xff << 0)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DISPC_DSP_SHIFT                                       2
+#define OMAP54XX_WKUPDEP_DISPC_DSP_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_DISPC_DSP_MASK                                                (1 << 2)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DISPC_IPU_SHIFT                                       1
+#define OMAP54XX_WKUPDEP_DISPC_IPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_DISPC_IPU_MASK                                                (1 << 1)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DISPC_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_DISPC_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_DISPC_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DISPC_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_DISPC_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DISPC_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_ABE_DMIC_WKDEP */
+#define OMAP54XX_WKUPDEP_DMIC_DMA_DSP_SHIFT                                    6
+#define OMAP54XX_WKUPDEP_DMIC_DMA_DSP_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_DMIC_DMA_DSP_MASK                                     (1 << 6)
+
+/* Used by PM_ABE_DMIC_WKDEP */
+#define OMAP54XX_WKUPDEP_DMIC_DMA_SDMA_SHIFT                                   7
+#define OMAP54XX_WKUPDEP_DMIC_DMA_SDMA_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_DMIC_DMA_SDMA_MASK                                    (1 << 7)
+
+/* Used by PM_ABE_DMIC_WKDEP */
+#define OMAP54XX_WKUPDEP_DMIC_IRQ_DSP_SHIFT                                    2
+#define OMAP54XX_WKUPDEP_DMIC_IRQ_DSP_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_DMIC_IRQ_DSP_MASK                                     (1 << 2)
+
+/* Used by PM_ABE_DMIC_WKDEP */
+#define OMAP54XX_WKUPDEP_DMIC_IRQ_MPU_SHIFT                                    0
+#define OMAP54XX_WKUPDEP_DMIC_IRQ_MPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_DMIC_IRQ_MPU_MASK                                     (1 << 0)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_A_DSP_SHIFT                                      6
+#define OMAP54XX_WKUPDEP_DSI1_A_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_A_DSP_MASK                                       (1 << 6)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_A_IPU_SHIFT                                      5
+#define OMAP54XX_WKUPDEP_DSI1_A_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_A_IPU_MASK                                       (1 << 5)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_A_MPU_SHIFT                                      4
+#define OMAP54XX_WKUPDEP_DSI1_A_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_A_MPU_MASK                                       (1 << 4)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_A_SDMA_SHIFT                                     7
+#define OMAP54XX_WKUPDEP_DSI1_A_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_DSI1_A_SDMA_MASK                                      (1 << 7)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_B_DSP_SHIFT                                      10
+#define OMAP54XX_WKUPDEP_DSI1_B_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_B_DSP_MASK                                       (1 << 10)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_B_IPU_SHIFT                                      9
+#define OMAP54XX_WKUPDEP_DSI1_B_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_B_IPU_MASK                                       (1 << 9)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_B_MPU_SHIFT                                      8
+#define OMAP54XX_WKUPDEP_DSI1_B_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_B_MPU_MASK                                       (1 << 8)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_B_SDMA_SHIFT                                     11
+#define OMAP54XX_WKUPDEP_DSI1_B_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_DSI1_B_SDMA_MASK                                      (1 << 11)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_C_DSP_SHIFT                                      17
+#define OMAP54XX_WKUPDEP_DSI1_C_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_C_DSP_MASK                                       (1 << 17)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_C_IPU_SHIFT                                      16
+#define OMAP54XX_WKUPDEP_DSI1_C_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_C_IPU_MASK                                       (1 << 16)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_C_MPU_SHIFT                                      15
+#define OMAP54XX_WKUPDEP_DSI1_C_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_DSI1_C_MPU_MASK                                       (1 << 15)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_DSI1_C_SDMA_SHIFT                                     18
+#define OMAP54XX_WKUPDEP_DSI1_C_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_DSI1_C_SDMA_MASK                                      (1 << 18)
+
+/* Used by PM_WKUPAON_GPIO1_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ1_IPU_SHIFT                                  1
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ1_IPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ1_IPU_MASK                                   (1 << 1)
+
+/* Used by PM_WKUPAON_GPIO1_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_WKUPAON_GPIO1_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ2_DSP_SHIFT                                  6
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ2_DSP_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO1_IRQ2_DSP_MASK                                   (1 << 6)
+
+/* Used by PM_L4PER_GPIO2_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ1_IPU_SHIFT                                  1
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ1_IPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ1_IPU_MASK                                   (1 << 1)
+
+/* Used by PM_L4PER_GPIO2_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L4PER_GPIO2_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ2_DSP_SHIFT                                  6
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ2_DSP_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO2_IRQ2_DSP_MASK                                   (1 << 6)
+
+/* Used by PM_L4PER_GPIO3_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO3_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO3_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO3_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L4PER_GPIO3_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO3_IRQ2_DSP_SHIFT                                  6
+#define OMAP54XX_WKUPDEP_GPIO3_IRQ2_DSP_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO3_IRQ2_DSP_MASK                                   (1 << 6)
+
+/* Used by PM_L4PER_GPIO4_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO4_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO4_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO4_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L4PER_GPIO4_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO4_IRQ2_DSP_SHIFT                                  6
+#define OMAP54XX_WKUPDEP_GPIO4_IRQ2_DSP_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO4_IRQ2_DSP_MASK                                   (1 << 6)
+
+/* Used by PM_L4PER_GPIO5_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO5_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO5_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO5_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L4PER_GPIO5_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO5_IRQ2_DSP_SHIFT                                  6
+#define OMAP54XX_WKUPDEP_GPIO5_IRQ2_DSP_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO5_IRQ2_DSP_MASK                                   (1 << 6)
+
+/* Used by PM_L4PER_GPIO6_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO6_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO6_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO6_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L4PER_GPIO6_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO6_IRQ2_DSP_SHIFT                                  6
+#define OMAP54XX_WKUPDEP_GPIO6_IRQ2_DSP_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO6_IRQ2_DSP_MASK                                   (1 << 6)
+
+/* Used by PM_L4PER_GPIO7_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO7_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO7_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO7_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L4PER_GPIO8_WKDEP */
+#define OMAP54XX_WKUPDEP_GPIO8_IRQ1_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_GPIO8_IRQ1_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_GPIO8_IRQ1_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_HDMIDMA_SDMA_SHIFT                                    19
+#define OMAP54XX_WKUPDEP_HDMIDMA_SDMA_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_HDMIDMA_SDMA_MASK                                     (1 << 19)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_HDMIIRQ_DSP_SHIFT                                     14
+#define OMAP54XX_WKUPDEP_HDMIIRQ_DSP_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_HDMIIRQ_DSP_MASK                                      (1 << 14)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_HDMIIRQ_IPU_SHIFT                                     13
+#define OMAP54XX_WKUPDEP_HDMIIRQ_IPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_HDMIIRQ_IPU_MASK                                      (1 << 13)
+
+/* Used by PM_DSS_DSS_WKDEP */
+#define OMAP54XX_WKUPDEP_HDMIIRQ_MPU_SHIFT                                     12
+#define OMAP54XX_WKUPDEP_HDMIIRQ_MPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_HDMIIRQ_MPU_MASK                                      (1 << 12)
+
+/* Used by PM_L3INIT_HSI_WKDEP */
+#define OMAP54XX_WKUPDEP_HSI_DSP_DSP_SHIFT                                     6
+#define OMAP54XX_WKUPDEP_HSI_DSP_DSP_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_HSI_DSP_DSP_MASK                                      (1 << 6)
+
+/* Used by PM_L3INIT_HSI_WKDEP */
+#define OMAP54XX_WKUPDEP_HSI_MCU_IPU_SHIFT                                     1
+#define OMAP54XX_WKUPDEP_HSI_MCU_IPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_HSI_MCU_IPU_MASK                                      (1 << 1)
+
+/* Used by PM_L3INIT_HSI_WKDEP */
+#define OMAP54XX_WKUPDEP_HSI_MCU_MPU_SHIFT                                     0
+#define OMAP54XX_WKUPDEP_HSI_MCU_MPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_HSI_MCU_MPU_MASK                                      (1 << 0)
+
+/* Used by PM_L4PER_I2C1_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C1_DMA_SDMA_SHIFT                                   7
+#define OMAP54XX_WKUPDEP_I2C1_DMA_SDMA_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_I2C1_DMA_SDMA_MASK                                    (1 << 7)
+
+/* Used by PM_L4PER_I2C1_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C1_IRQ_IPU_SHIFT                                    1
+#define OMAP54XX_WKUPDEP_I2C1_IRQ_IPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C1_IRQ_IPU_MASK                                     (1 << 1)
+
+/* Used by PM_L4PER_I2C1_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C1_IRQ_MPU_SHIFT                                    0
+#define OMAP54XX_WKUPDEP_I2C1_IRQ_MPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C1_IRQ_MPU_MASK                                     (1 << 0)
+
+/* Used by PM_L4PER_I2C2_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C2_DMA_SDMA_SHIFT                                   7
+#define OMAP54XX_WKUPDEP_I2C2_DMA_SDMA_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_I2C2_DMA_SDMA_MASK                                    (1 << 7)
+
+/* Used by PM_L4PER_I2C2_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C2_IRQ_IPU_SHIFT                                    1
+#define OMAP54XX_WKUPDEP_I2C2_IRQ_IPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C2_IRQ_IPU_MASK                                     (1 << 1)
+
+/* Used by PM_L4PER_I2C2_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C2_IRQ_MPU_SHIFT                                    0
+#define OMAP54XX_WKUPDEP_I2C2_IRQ_MPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C2_IRQ_MPU_MASK                                     (1 << 0)
+
+/* Used by PM_L4PER_I2C3_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C3_DMA_SDMA_SHIFT                                   7
+#define OMAP54XX_WKUPDEP_I2C3_DMA_SDMA_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_I2C3_DMA_SDMA_MASK                                    (1 << 7)
+
+/* Used by PM_L4PER_I2C3_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C3_IRQ_IPU_SHIFT                                    1
+#define OMAP54XX_WKUPDEP_I2C3_IRQ_IPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C3_IRQ_IPU_MASK                                     (1 << 1)
+
+/* Used by PM_L4PER_I2C3_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C3_IRQ_MPU_SHIFT                                    0
+#define OMAP54XX_WKUPDEP_I2C3_IRQ_MPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C3_IRQ_MPU_MASK                                     (1 << 0)
+
+/* Used by PM_L4PER_I2C4_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C4_DMA_SDMA_SHIFT                                   7
+#define OMAP54XX_WKUPDEP_I2C4_DMA_SDMA_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_I2C4_DMA_SDMA_MASK                                    (1 << 7)
+
+/* Used by PM_L4PER_I2C4_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C4_IRQ_IPU_SHIFT                                    1
+#define OMAP54XX_WKUPDEP_I2C4_IRQ_IPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C4_IRQ_IPU_MASK                                     (1 << 1)
+
+/* Used by PM_L4PER_I2C4_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C4_IRQ_MPU_SHIFT                                    0
+#define OMAP54XX_WKUPDEP_I2C4_IRQ_MPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C4_IRQ_MPU_MASK                                     (1 << 0)
+
+/* Used by PM_L4PER_I2C5_WKDEP */
+#define OMAP54XX_WKUPDEP_I2C5_IRQ_MPU_SHIFT                                    0
+#define OMAP54XX_WKUPDEP_I2C5_IRQ_MPU_WIDTH                                    0x1
+#define OMAP54XX_WKUPDEP_I2C5_IRQ_MPU_MASK                                     (1 << 0)
+
+/* Used by PM_WKUPAON_KBD_WKDEP */
+#define OMAP54XX_WKUPDEP_KBD_MPU_SHIFT                                         0
+#define OMAP54XX_WKUPDEP_KBD_MPU_WIDTH                                         0x1
+#define OMAP54XX_WKUPDEP_KBD_MPU_MASK                                          (1 << 0)
+
+/* Used by PM_ABE_MCASP_WKDEP */
+#define OMAP54XX_WKUPDEP_MCASP_DMA_DSP_SHIFT                                   6
+#define OMAP54XX_WKUPDEP_MCASP_DMA_DSP_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_MCASP_DMA_DSP_MASK                                    (1 << 6)
+
+/* Used by PM_ABE_MCASP_WKDEP */
+#define OMAP54XX_WKUPDEP_MCASP_DMA_SDMA_SHIFT                                  7
+#define OMAP54XX_WKUPDEP_MCASP_DMA_SDMA_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_MCASP_DMA_SDMA_MASK                                   (1 << 7)
+
+/* Used by PM_ABE_MCASP_WKDEP */
+#define OMAP54XX_WKUPDEP_MCASP_IRQ_DSP_SHIFT                                   2
+#define OMAP54XX_WKUPDEP_MCASP_IRQ_DSP_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_MCASP_IRQ_DSP_MASK                                    (1 << 2)
+
+/* Used by PM_ABE_MCASP_WKDEP */
+#define OMAP54XX_WKUPDEP_MCASP_IRQ_MPU_SHIFT                                   0
+#define OMAP54XX_WKUPDEP_MCASP_IRQ_MPU_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_MCASP_IRQ_MPU_MASK                                    (1 << 0)
+
+/* Used by PM_ABE_MCBSP1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP1_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_MCBSP1_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCBSP1_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_MCBSP1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP1_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCBSP1_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCBSP1_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_MCBSP1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP1_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCBSP1_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCBSP1_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_ABE_MCBSP2_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP2_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_MCBSP2_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCBSP2_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_MCBSP2_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP2_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCBSP2_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCBSP2_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_MCBSP2_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP2_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCBSP2_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCBSP2_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_ABE_MCBSP3_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP3_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_MCBSP3_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCBSP3_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_MCBSP3_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP3_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCBSP3_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCBSP3_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_MCBSP3_WKDEP */
+#define OMAP54XX_WKUPDEP_MCBSP3_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCBSP3_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCBSP3_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_ABE_MCPDM_WKDEP */
+#define OMAP54XX_WKUPDEP_MCPDM_DMA_DSP_SHIFT                                   6
+#define OMAP54XX_WKUPDEP_MCPDM_DMA_DSP_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_MCPDM_DMA_DSP_MASK                                    (1 << 6)
+
+/* Used by PM_ABE_MCPDM_WKDEP */
+#define OMAP54XX_WKUPDEP_MCPDM_DMA_SDMA_SHIFT                                  7
+#define OMAP54XX_WKUPDEP_MCPDM_DMA_SDMA_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_MCPDM_DMA_SDMA_MASK                                   (1 << 7)
+
+/* Used by PM_ABE_MCPDM_WKDEP */
+#define OMAP54XX_WKUPDEP_MCPDM_IRQ_DSP_SHIFT                                   2
+#define OMAP54XX_WKUPDEP_MCPDM_IRQ_DSP_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_MCPDM_IRQ_DSP_MASK                                    (1 << 2)
+
+/* Used by PM_ABE_MCPDM_WKDEP */
+#define OMAP54XX_WKUPDEP_MCPDM_IRQ_MPU_SHIFT                                   0
+#define OMAP54XX_WKUPDEP_MCPDM_IRQ_MPU_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_MCPDM_IRQ_MPU_MASK                                    (1 << 0)
+
+/* Used by PM_L4PER_MCSPI1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI1_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_MCSPI1_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI1_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_L4PER_MCSPI1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI1_IPU_SHIFT                                      1
+#define OMAP54XX_WKUPDEP_MCSPI1_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI1_IPU_MASK                                       (1 << 1)
+
+/* Used by PM_L4PER_MCSPI1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI1_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCSPI1_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI1_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_MCSPI1_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI1_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCSPI1_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCSPI1_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_L4PER_MCSPI2_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI2_IPU_SHIFT                                      1
+#define OMAP54XX_WKUPDEP_MCSPI2_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI2_IPU_MASK                                       (1 << 1)
+
+/* Used by PM_L4PER_MCSPI2_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI2_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCSPI2_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI2_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_MCSPI2_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI2_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCSPI2_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCSPI2_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_L4PER_MCSPI3_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI3_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCSPI3_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI3_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_MCSPI3_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI3_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCSPI3_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCSPI3_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_L4PER_MCSPI4_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI4_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_MCSPI4_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_MCSPI4_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_MCSPI4_WKDEP */
+#define OMAP54XX_WKUPDEP_MCSPI4_SDMA_SHIFT                                     3
+#define OMAP54XX_WKUPDEP_MCSPI4_SDMA_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_MCSPI4_SDMA_MASK                                      (1 << 3)
+
+/* Used by PM_L3INIT_MMC1_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC1_DSP_SHIFT                                                2
+#define OMAP54XX_WKUPDEP_MMC1_DSP_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC1_DSP_MASK                                         (1 << 2)
+
+/* Used by PM_L3INIT_MMC1_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC1_IPU_SHIFT                                                1
+#define OMAP54XX_WKUPDEP_MMC1_IPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC1_IPU_MASK                                         (1 << 1)
+
+/* Used by PM_L3INIT_MMC1_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC1_MPU_SHIFT                                                0
+#define OMAP54XX_WKUPDEP_MMC1_MPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC1_MPU_MASK                                         (1 << 0)
+
+/* Used by PM_L3INIT_MMC1_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC1_SDMA_SHIFT                                       3
+#define OMAP54XX_WKUPDEP_MMC1_SDMA_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_MMC1_SDMA_MASK                                                (1 << 3)
+
+/* Used by PM_L3INIT_MMC2_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC2_DSP_SHIFT                                                2
+#define OMAP54XX_WKUPDEP_MMC2_DSP_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC2_DSP_MASK                                         (1 << 2)
+
+/* Used by PM_L3INIT_MMC2_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC2_IPU_SHIFT                                                1
+#define OMAP54XX_WKUPDEP_MMC2_IPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC2_IPU_MASK                                         (1 << 1)
+
+/* Used by PM_L3INIT_MMC2_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC2_MPU_SHIFT                                                0
+#define OMAP54XX_WKUPDEP_MMC2_MPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC2_MPU_MASK                                         (1 << 0)
+
+/* Used by PM_L3INIT_MMC2_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC2_SDMA_SHIFT                                       3
+#define OMAP54XX_WKUPDEP_MMC2_SDMA_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_MMC2_SDMA_MASK                                                (1 << 3)
+
+/* Used by PM_L4PER_MMC3_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC3_IPU_SHIFT                                                1
+#define OMAP54XX_WKUPDEP_MMC3_IPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC3_IPU_MASK                                         (1 << 1)
+
+/* Used by PM_L4PER_MMC3_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC3_MPU_SHIFT                                                0
+#define OMAP54XX_WKUPDEP_MMC3_MPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC3_MPU_MASK                                         (1 << 0)
+
+/* Used by PM_L4PER_MMC3_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC3_SDMA_SHIFT                                       3
+#define OMAP54XX_WKUPDEP_MMC3_SDMA_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_MMC3_SDMA_MASK                                                (1 << 3)
+
+/* Used by PM_L4PER_MMC4_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC4_MPU_SHIFT                                                0
+#define OMAP54XX_WKUPDEP_MMC4_MPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC4_MPU_MASK                                         (1 << 0)
+
+/* Used by PM_L4PER_MMC4_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC4_SDMA_SHIFT                                       3
+#define OMAP54XX_WKUPDEP_MMC4_SDMA_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_MMC4_SDMA_MASK                                                (1 << 3)
+
+/* Used by PM_L4PER_MMC5_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC5_MPU_SHIFT                                                0
+#define OMAP54XX_WKUPDEP_MMC5_MPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_MMC5_MPU_MASK                                         (1 << 0)
+
+/* Used by PM_L4PER_MMC5_WKDEP */
+#define OMAP54XX_WKUPDEP_MMC5_SDMA_SHIFT                                       3
+#define OMAP54XX_WKUPDEP_MMC5_SDMA_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_MMC5_SDMA_MASK                                                (1 << 3)
+
+/* Used by PM_L3INIT_SATA_WKDEP */
+#define OMAP54XX_WKUPDEP_SATA_MPU_SHIFT                                                0
+#define OMAP54XX_WKUPDEP_SATA_MPU_WIDTH                                                0x1
+#define OMAP54XX_WKUPDEP_SATA_MPU_MASK                                         (1 << 0)
+
+/* Used by PM_ABE_SLIMBUS1_WKDEP */
+#define OMAP54XX_WKUPDEP_SLIMBUS1_DMA_DSP_SHIFT                                        6
+#define OMAP54XX_WKUPDEP_SLIMBUS1_DMA_DSP_WIDTH                                        0x1
+#define OMAP54XX_WKUPDEP_SLIMBUS1_DMA_DSP_MASK                                 (1 << 6)
+
+/* Used by PM_ABE_SLIMBUS1_WKDEP */
+#define OMAP54XX_WKUPDEP_SLIMBUS1_DMA_SDMA_SHIFT                               7
+#define OMAP54XX_WKUPDEP_SLIMBUS1_DMA_SDMA_WIDTH                               0x1
+#define OMAP54XX_WKUPDEP_SLIMBUS1_DMA_SDMA_MASK                                        (1 << 7)
+
+/* Used by PM_ABE_SLIMBUS1_WKDEP */
+#define OMAP54XX_WKUPDEP_SLIMBUS1_IRQ_DSP_SHIFT                                        2
+#define OMAP54XX_WKUPDEP_SLIMBUS1_IRQ_DSP_WIDTH                                        0x1
+#define OMAP54XX_WKUPDEP_SLIMBUS1_IRQ_DSP_MASK                                 (1 << 2)
+
+/* Used by PM_ABE_SLIMBUS1_WKDEP */
+#define OMAP54XX_WKUPDEP_SLIMBUS1_IRQ_MPU_SHIFT                                        0
+#define OMAP54XX_WKUPDEP_SLIMBUS1_IRQ_MPU_WIDTH                                        0x1
+#define OMAP54XX_WKUPDEP_SLIMBUS1_IRQ_MPU_MASK                                 (1 << 0)
+
+/* Used by PM_COREAON_SMARTREFLEX_CORE_WKDEP */
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_CORE_IPU_SHIFT                            1
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_CORE_IPU_WIDTH                            0x1
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_CORE_IPU_MASK                             (1 << 1)
+
+/* Used by PM_COREAON_SMARTREFLEX_CORE_WKDEP */
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_CORE_MPU_SHIFT                            0
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_CORE_MPU_WIDTH                            0x1
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_CORE_MPU_MASK                             (1 << 0)
+
+/* Used by PM_COREAON_SMARTREFLEX_MM_WKDEP */
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_MM_MPU_SHIFT                              0
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_MM_MPU_WIDTH                              0x1
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_MM_MPU_MASK                               (1 << 0)
+
+/* Used by PM_COREAON_SMARTREFLEX_MPU_WKDEP */
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_MPU_MPU_SHIFT                             0
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_MPU_MPU_WIDTH                             0x1
+#define OMAP54XX_WKUPDEP_SMARTREFLEX_MPU_MPU_MASK                              (1 << 0)
+
+/* Used by PM_L4PER_TIMER10_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER10_MPU_SHIFT                                     0
+#define OMAP54XX_WKUPDEP_TIMER10_MPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_TIMER10_MPU_MASK                                      (1 << 0)
+
+/* Used by PM_L4PER_TIMER11_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER11_IPU_SHIFT                                     1
+#define OMAP54XX_WKUPDEP_TIMER11_IPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_TIMER11_IPU_MASK                                      (1 << 1)
+
+/* Used by PM_L4PER_TIMER11_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER11_MPU_SHIFT                                     0
+#define OMAP54XX_WKUPDEP_TIMER11_MPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_TIMER11_MPU_MASK                                      (1 << 0)
+
+/* Used by PM_WKUPAON_TIMER12_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER12_MPU_SHIFT                                     0
+#define OMAP54XX_WKUPDEP_TIMER12_MPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_TIMER12_MPU_MASK                                      (1 << 0)
+
+/* Used by PM_WKUPAON_TIMER1_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER1_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER1_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER1_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_TIMER2_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER2_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER2_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER2_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_TIMER3_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER3_IPU_SHIFT                                      1
+#define OMAP54XX_WKUPDEP_TIMER3_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER3_IPU_MASK                                       (1 << 1)
+
+/* Used by PM_L4PER_TIMER3_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER3_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER3_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER3_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_TIMER4_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER4_IPU_SHIFT                                      1
+#define OMAP54XX_WKUPDEP_TIMER4_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER4_IPU_MASK                                       (1 << 1)
+
+/* Used by PM_L4PER_TIMER4_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER4_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER4_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER4_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_TIMER5_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER5_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_TIMER5_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER5_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_TIMER5_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER5_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER5_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER5_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_TIMER6_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER6_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_TIMER6_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER6_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_TIMER6_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER6_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER6_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER6_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_TIMER7_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER7_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_TIMER7_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER7_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_TIMER7_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER7_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER7_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER7_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_ABE_TIMER8_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER8_DSP_SHIFT                                      2
+#define OMAP54XX_WKUPDEP_TIMER8_DSP_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER8_DSP_MASK                                       (1 << 2)
+
+/* Used by PM_ABE_TIMER8_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER8_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER8_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER8_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_TIMER9_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER9_IPU_SHIFT                                      1
+#define OMAP54XX_WKUPDEP_TIMER9_IPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER9_IPU_MASK                                       (1 << 1)
+
+/* Used by PM_L4PER_TIMER9_WKDEP */
+#define OMAP54XX_WKUPDEP_TIMER9_MPU_SHIFT                                      0
+#define OMAP54XX_WKUPDEP_TIMER9_MPU_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_TIMER9_MPU_MASK                                       (1 << 0)
+
+/* Used by PM_L4PER_UART1_WKDEP */
+#define OMAP54XX_WKUPDEP_UART1_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_UART1_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART1_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_L4PER_UART1_WKDEP */
+#define OMAP54XX_WKUPDEP_UART1_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_UART1_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_UART1_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_L4PER_UART2_WKDEP */
+#define OMAP54XX_WKUPDEP_UART2_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_UART2_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART2_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_L4PER_UART2_WKDEP */
+#define OMAP54XX_WKUPDEP_UART2_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_UART2_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_UART2_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_L4PER_UART3_WKDEP */
+#define OMAP54XX_WKUPDEP_UART3_DSP_SHIFT                                       2
+#define OMAP54XX_WKUPDEP_UART3_DSP_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART3_DSP_MASK                                                (1 << 2)
+
+/* Used by PM_L4PER_UART3_WKDEP */
+#define OMAP54XX_WKUPDEP_UART3_IPU_SHIFT                                       1
+#define OMAP54XX_WKUPDEP_UART3_IPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART3_IPU_MASK                                                (1 << 1)
+
+/* Used by PM_L4PER_UART3_WKDEP */
+#define OMAP54XX_WKUPDEP_UART3_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_UART3_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART3_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_L4PER_UART3_WKDEP */
+#define OMAP54XX_WKUPDEP_UART3_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_UART3_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_UART3_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_L4PER_UART4_WKDEP */
+#define OMAP54XX_WKUPDEP_UART4_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_UART4_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART4_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_L4PER_UART4_WKDEP */
+#define OMAP54XX_WKUPDEP_UART4_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_UART4_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_UART4_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_L4PER_UART5_WKDEP */
+#define OMAP54XX_WKUPDEP_UART5_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_UART5_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART5_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_L4PER_UART5_WKDEP */
+#define OMAP54XX_WKUPDEP_UART5_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_UART5_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_UART5_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_L4PER_UART6_WKDEP */
+#define OMAP54XX_WKUPDEP_UART6_MPU_SHIFT                                       0
+#define OMAP54XX_WKUPDEP_UART6_MPU_WIDTH                                       0x1
+#define OMAP54XX_WKUPDEP_UART6_MPU_MASK                                                (1 << 0)
+
+/* Used by PM_L4PER_UART6_WKDEP */
+#define OMAP54XX_WKUPDEP_UART6_SDMA_SHIFT                                      3
+#define OMAP54XX_WKUPDEP_UART6_SDMA_WIDTH                                      0x1
+#define OMAP54XX_WKUPDEP_UART6_SDMA_MASK                                       (1 << 3)
+
+/* Used by PM_L3INIT_UNIPRO2_WKDEP */
+#define OMAP54XX_WKUPDEP_UNIPRO2_MPU_SHIFT                                     0
+#define OMAP54XX_WKUPDEP_UNIPRO2_MPU_WIDTH                                     0x1
+#define OMAP54XX_WKUPDEP_UNIPRO2_MPU_MASK                                      (1 << 0)
+
+/* Used by PM_L3INIT_USB_HOST_HS_WKDEP */
+#define OMAP54XX_WKUPDEP_USB_HOST_HS_IPU_SHIFT                                 1
+#define OMAP54XX_WKUPDEP_USB_HOST_HS_IPU_WIDTH                                 0x1
+#define OMAP54XX_WKUPDEP_USB_HOST_HS_IPU_MASK                                  (1 << 1)
+
+/* Used by PM_L3INIT_USB_HOST_HS_WKDEP */
+#define OMAP54XX_WKUPDEP_USB_HOST_HS_MPU_SHIFT                                 0
+#define OMAP54XX_WKUPDEP_USB_HOST_HS_MPU_WIDTH                                 0x1
+#define OMAP54XX_WKUPDEP_USB_HOST_HS_MPU_MASK                                  (1 << 0)
+
+/* Used by PM_L3INIT_USB_OTG_SS_WKDEP */
+#define OMAP54XX_WKUPDEP_USB_OTG_SS_IPU_SHIFT                                  1
+#define OMAP54XX_WKUPDEP_USB_OTG_SS_IPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_USB_OTG_SS_IPU_MASK                                   (1 << 1)
+
+/* Used by PM_L3INIT_USB_OTG_SS_WKDEP */
+#define OMAP54XX_WKUPDEP_USB_OTG_SS_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_USB_OTG_SS_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_USB_OTG_SS_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_L3INIT_USB_TLL_HS_WKDEP */
+#define OMAP54XX_WKUPDEP_USB_TLL_HS_IPU_SHIFT                                  1
+#define OMAP54XX_WKUPDEP_USB_TLL_HS_IPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_USB_TLL_HS_IPU_MASK                                   (1 << 1)
+
+/* Used by PM_L3INIT_USB_TLL_HS_WKDEP */
+#define OMAP54XX_WKUPDEP_USB_TLL_HS_MPU_SHIFT                                  0
+#define OMAP54XX_WKUPDEP_USB_TLL_HS_MPU_WIDTH                                  0x1
+#define OMAP54XX_WKUPDEP_USB_TLL_HS_MPU_MASK                                   (1 << 0)
+
+/* Used by PM_WKUPAON_WD_TIMER2_WKDEP */
+#define OMAP54XX_WKUPDEP_WD_TIMER2_MPU_SHIFT                                   0
+#define OMAP54XX_WKUPDEP_WD_TIMER2_MPU_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_WD_TIMER2_MPU_MASK                                    (1 << 0)
+
+/* Used by PM_ABE_WD_TIMER3_WKDEP */
+#define OMAP54XX_WKUPDEP_WD_TIMER3_MPU_SHIFT                                   0
+#define OMAP54XX_WKUPDEP_WD_TIMER3_MPU_WIDTH                                   0x1
+#define OMAP54XX_WKUPDEP_WD_TIMER3_MPU_MASK                                    (1 << 0)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_WUCLK_CTRL_SHIFT                                              8
+#define OMAP54XX_WUCLK_CTRL_WIDTH                                              0x1
+#define OMAP54XX_WUCLK_CTRL_MASK                                               (1 << 8)
+
+/* Used by PRM_IO_PMCTRL */
+#define OMAP54XX_WUCLK_STATUS_SHIFT                                            9
+#define OMAP54XX_WUCLK_STATUS_WIDTH                                            0x1
+#define OMAP54XX_WUCLK_STATUS_MASK                                             (1 << 9)
+
+/* Used by REVISION_PRM */
+#define OMAP54XX_X_MAJOR_SHIFT                                                 8
+#define OMAP54XX_X_MAJOR_WIDTH                                                 0x3
+#define OMAP54XX_X_MAJOR_MASK                                                  (0x7 << 8)
+
+/* Used by REVISION_PRM */
+#define OMAP54XX_Y_MINOR_SHIFT                                                 0
+#define OMAP54XX_Y_MINOR_WIDTH                                                 0x6
+#define OMAP54XX_Y_MINOR_MASK                                                  (0x3f << 0)
+#endif
index 8ee1fbdec5615c47c9345c88eb689249e8ea90ae..7db2422faa16e8b788901c8f1a8396226a0e1123 100644 (file)
@@ -25,6 +25,7 @@
 #ifndef __ARCH_ARM_MACH_OMAP2_PRM44XX_H
 #define __ARCH_ARM_MACH_OMAP2_PRM44XX_H
 
+#include "prm44xx_54xx.h"
 #include "prcm-common.h"
 #include "prm.h"
 
 #define OMAP4_PRM_VC_ERRST_OFFSET                      0x00f8
 #define OMAP4430_PRM_VC_ERRST                          OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00f8)
 
-/* Function prototypes */
-# ifndef __ASSEMBLER__
-
-extern u32 omap4_prm_read_inst_reg(s16 inst, u16 idx);
-extern void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 idx);
-extern u32 omap4_prm_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
-
-/* OMAP4-specific VP functions */
-u32 omap4_prm_vp_check_txdone(u8 vp_id);
-void omap4_prm_vp_clear_txdone(u8 vp_id);
-
-/*
- * OMAP4 access functions for voltage controller (VC) and
- * voltage proccessor (VP) in the PRM.
- */
-extern u32 omap4_prm_vcvp_read(u8 offset);
-extern void omap4_prm_vcvp_write(u32 val, u8 offset);
-extern u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
-
-extern void omap44xx_prm_reconfigure_io_chain(void);
-
-/* PRM interrupt-related functions */
-extern void omap44xx_prm_read_pending_irqs(unsigned long *events);
-extern void omap44xx_prm_ocp_barrier(void);
-extern void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask);
-extern void omap44xx_prm_restore_irqen(u32 *saved_mask);
-
-extern int __init omap44xx_prm_init(void);
-extern u32 omap44xx_prm_get_reset_sources(void);
-
-# endif
-
 #endif
diff --git a/arch/arm/mach-omap2/prm44xx_54xx.h b/arch/arm/mach-omap2/prm44xx_54xx.h
new file mode 100644 (file)
index 0000000..7cd22ab
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * OMAP44xx and 54xx PRM common functions
+ *
+ * Copyright (C) 2009-2013 Texas Instruments, Inc.
+ * Copyright (C) 2009-2010 Nokia Corporation
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_PRM44XX_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_PRM44XX_54XX_H
+
+/* Function prototypes */
+#ifndef __ASSEMBLER__
+
+extern u32 omap4_prm_read_inst_reg(s16 inst, u16 idx);
+extern void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 idx);
+extern u32 omap4_prm_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
+
+/* OMAP4/OMAP5-specific VP functions */
+u32 omap4_prm_vp_check_txdone(u8 vp_id);
+void omap4_prm_vp_clear_txdone(u8 vp_id);
+
+/*
+ * OMAP4/OMAP5 access functions for voltage controller (VC) and
+ * voltage proccessor (VP) in the PRM.
+ */
+extern u32 omap4_prm_vcvp_read(u8 offset);
+extern void omap4_prm_vcvp_write(u32 val, u8 offset);
+extern u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
+
+extern void omap44xx_prm_reconfigure_io_chain(void);
+
+/* PRM interrupt-related functions */
+extern void omap44xx_prm_read_pending_irqs(unsigned long *events);
+extern void omap44xx_prm_ocp_barrier(void);
+extern void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask);
+extern void omap44xx_prm_restore_irqen(u32 *saved_mask);
+
+extern int __init omap44xx_prm_init(void);
+extern u32 omap44xx_prm_get_reset_sources(void);
+
+#endif
+
+#endif
diff --git a/arch/arm/mach-omap2/prm54xx.h b/arch/arm/mach-omap2/prm54xx.h
new file mode 100644 (file)
index 0000000..e441101
--- /dev/null
@@ -0,0 +1,421 @@
+/*
+ * OMAP54xx PRM instance offset macros
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Paul Walmsley (paul@pwsan.com)
+ * Rajendra Nayak (rnayak@ti.com)
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_PRM54XX_H
+#define __ARCH_ARM_MACH_OMAP2_PRM54XX_H
+
+#include "prm44xx_54xx.h"
+#include "prcm-common.h"
+#include "prm.h"
+
+#define OMAP54XX_PRM_BASE              0x4ae06000
+
+#define OMAP54XX_PRM_REGADDR(inst, reg)                                \
+       OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE + (inst) + (reg))
+
+
+/* PRM instances */
+#define OMAP54XX_PRM_OCP_SOCKET_INST   0x0000
+#define OMAP54XX_PRM_CKGEN_INST                0x0100
+#define OMAP54XX_PRM_MPU_INST          0x0300
+#define OMAP54XX_PRM_DSP_INST          0x0400
+#define OMAP54XX_PRM_ABE_INST          0x0500
+#define OMAP54XX_PRM_COREAON_INST      0x0600
+#define OMAP54XX_PRM_CORE_INST         0x0700
+#define OMAP54XX_PRM_IVA_INST          0x1200
+#define OMAP54XX_PRM_CAM_INST          0x1300
+#define OMAP54XX_PRM_DSS_INST          0x1400
+#define OMAP54XX_PRM_GPU_INST          0x1500
+#define OMAP54XX_PRM_L3INIT_INST       0x1600
+#define OMAP54XX_PRM_CUSTEFUSE_INST    0x1700
+#define OMAP54XX_PRM_WKUPAON_INST      0x1800
+#define OMAP54XX_PRM_WKUPAON_CM_INST   0x1900
+#define OMAP54XX_PRM_EMU_INST          0x1a00
+#define OMAP54XX_PRM_EMU_CM_INST       0x1b00
+#define OMAP54XX_PRM_DEVICE_INST       0x1c00
+#define OMAP54XX_PRM_INSTR_INST                0x1f00
+
+/* PRM clockdomain register offsets (from instance start) */
+#define OMAP54XX_PRM_WKUPAON_CM_WKUPAON_CDOFFS 0x0000
+#define OMAP54XX_PRM_EMU_CM_EMU_CDOFFS         0x0000
+
+/* PRM */
+
+/* PRM.OCP_SOCKET_PRM register offsets */
+#define OMAP54XX_REVISION_PRM_OFFSET                           0x0000
+#define OMAP54XX_PRM_IRQSTATUS_MPU_OFFSET                      0x0010
+#define OMAP54XX_PRM_IRQSTATUS_MPU_2_OFFSET                    0x0014
+#define OMAP54XX_PRM_IRQENABLE_MPU_OFFSET                      0x0018
+#define OMAP54XX_PRM_IRQENABLE_MPU_2_OFFSET                    0x001c
+#define OMAP54XX_PRM_IRQSTATUS_IPU_OFFSET                      0x0020
+#define OMAP54XX_PRM_IRQENABLE_IPU_OFFSET                      0x0028
+#define OMAP54XX_PRM_IRQSTATUS_DSP_OFFSET                      0x0030
+#define OMAP54XX_PRM_IRQENABLE_DSP_OFFSET                      0x0038
+#define OMAP54XX_CM_PRM_PROFILING_CLKCTRL_OFFSET               0x0040
+#define OMAP54XX_CM_PRM_PROFILING_CLKCTRL                      OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_OCP_SOCKET_INST, 0x0040)
+#define OMAP54XX_PRM_DEBUG_OUT_OFFSET                          0x0084
+#define OMAP54XX_PRM_DEBUG_TRANS_CFG_OFFSET                    0x0090
+#define OMAP54XX_PRM_DEBUG_OFF_TRANS_OFFSET                    0x0094
+#define OMAP54XX_PRM_DEBUG_CORE_RET_TRANS_OFFSET               0x0098
+#define OMAP54XX_PRM_DEBUG_MPU_RET_TRANS_OFFSET                        0x009c
+#define OMAP54XX_PRM_DEBUG_MM_RET_TRANS_OFFSET                 0x00a0
+#define OMAP54XX_PRM_DEBUG_WKUPAON_FD_TRANS_OFFSET             0x00a4
+
+/* PRM.CKGEN_PRM register offsets */
+#define OMAP54XX_CM_CLKSEL_ABE_DSS_SYS_OFFSET                  0x0000
+#define OMAP54XX_CM_CLKSEL_ABE_DSS_SYS                         OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_CKGEN_INST, 0x0000)
+#define OMAP54XX_CM_CLKSEL_WKUPAON_OFFSET                      0x0008
+#define OMAP54XX_CM_CLKSEL_WKUPAON                             OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_CKGEN_INST, 0x0008)
+#define OMAP54XX_CM_CLKSEL_ABE_PLL_REF_OFFSET                  0x000c
+#define OMAP54XX_CM_CLKSEL_ABE_PLL_REF                         OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_CKGEN_INST, 0x000c)
+#define OMAP54XX_CM_CLKSEL_SYS_OFFSET                          0x0010
+#define OMAP54XX_CM_CLKSEL_SYS                                 OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_CKGEN_INST, 0x0010)
+
+/* PRM.MPU_PRM register offsets */
+#define OMAP54XX_PM_MPU_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_MPU_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET                     0x0024
+
+/* PRM.DSP_PRM register offsets */
+#define OMAP54XX_PM_DSP_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_DSP_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_DSP_RSTCTRL_OFFSET                         0x0010
+#define OMAP54XX_RM_DSP_RSTST_OFFSET                           0x0014
+#define OMAP54XX_RM_DSP_DSP_CONTEXT_OFFSET                     0x0024
+
+/* PRM.ABE_PRM register offsets */
+#define OMAP54XX_PM_ABE_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_ABE_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_ABE_AESS_CONTEXT_OFFSET                    0x002c
+#define OMAP54XX_PM_ABE_MCPDM_WKDEP_OFFSET                     0x0030
+#define OMAP54XX_RM_ABE_MCPDM_CONTEXT_OFFSET                   0x0034
+#define OMAP54XX_PM_ABE_DMIC_WKDEP_OFFSET                      0x0038
+#define OMAP54XX_RM_ABE_DMIC_CONTEXT_OFFSET                    0x003c
+#define OMAP54XX_PM_ABE_MCASP_WKDEP_OFFSET                     0x0040
+#define OMAP54XX_RM_ABE_MCASP_CONTEXT_OFFSET                   0x0044
+#define OMAP54XX_PM_ABE_MCBSP1_WKDEP_OFFSET                    0x0048
+#define OMAP54XX_RM_ABE_MCBSP1_CONTEXT_OFFSET                  0x004c
+#define OMAP54XX_PM_ABE_MCBSP2_WKDEP_OFFSET                    0x0050
+#define OMAP54XX_RM_ABE_MCBSP2_CONTEXT_OFFSET                  0x0054
+#define OMAP54XX_PM_ABE_MCBSP3_WKDEP_OFFSET                    0x0058
+#define OMAP54XX_RM_ABE_MCBSP3_CONTEXT_OFFSET                  0x005c
+#define OMAP54XX_PM_ABE_SLIMBUS1_WKDEP_OFFSET                  0x0060
+#define OMAP54XX_RM_ABE_SLIMBUS1_CONTEXT_OFFSET                        0x0064
+#define OMAP54XX_PM_ABE_TIMER5_WKDEP_OFFSET                    0x0068
+#define OMAP54XX_RM_ABE_TIMER5_CONTEXT_OFFSET                  0x006c
+#define OMAP54XX_PM_ABE_TIMER6_WKDEP_OFFSET                    0x0070
+#define OMAP54XX_RM_ABE_TIMER6_CONTEXT_OFFSET                  0x0074
+#define OMAP54XX_PM_ABE_TIMER7_WKDEP_OFFSET                    0x0078
+#define OMAP54XX_RM_ABE_TIMER7_CONTEXT_OFFSET                  0x007c
+#define OMAP54XX_PM_ABE_TIMER8_WKDEP_OFFSET                    0x0080
+#define OMAP54XX_RM_ABE_TIMER8_CONTEXT_OFFSET                  0x0084
+#define OMAP54XX_PM_ABE_WD_TIMER3_WKDEP_OFFSET                 0x0088
+#define OMAP54XX_RM_ABE_WD_TIMER3_CONTEXT_OFFSET               0x008c
+
+/* PRM.COREAON_PRM register offsets */
+#define OMAP54XX_PM_COREAON_SMARTREFLEX_MPU_WKDEP_OFFSET       0x0028
+#define OMAP54XX_RM_COREAON_SMARTREFLEX_MPU_CONTEXT_OFFSET     0x002c
+#define OMAP54XX_PM_COREAON_SMARTREFLEX_MM_WKDEP_OFFSET                0x0030
+#define OMAP54XX_RM_COREAON_SMARTREFLEX_MM_CONTEXT_OFFSET      0x0034
+#define OMAP54XX_PM_COREAON_SMARTREFLEX_CORE_WKDEP_OFFSET      0x0038
+#define OMAP54XX_RM_COREAON_SMARTREFLEX_CORE_CONTEXT_OFFSET    0x003c
+
+/* PRM.CORE_PRM register offsets */
+#define OMAP54XX_PM_CORE_PWRSTCTRL_OFFSET                      0x0000
+#define OMAP54XX_PM_CORE_PWRSTST_OFFSET                                0x0004
+#define OMAP54XX_RM_L3MAIN1_L3_MAIN_1_CONTEXT_OFFSET           0x0024
+#define OMAP54XX_RM_L3MAIN2_L3_MAIN_2_CONTEXT_OFFSET           0x0124
+#define OMAP54XX_RM_L3MAIN2_GPMC_CONTEXT_OFFSET                        0x012c
+#define OMAP54XX_RM_L3MAIN2_OCMC_RAM_CONTEXT_OFFSET            0x0134
+#define OMAP54XX_RM_IPU_RSTCTRL_OFFSET                         0x0210
+#define OMAP54XX_RM_IPU_RSTST_OFFSET                           0x0214
+#define OMAP54XX_RM_IPU_IPU_CONTEXT_OFFSET                     0x0224
+#define OMAP54XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET              0x0324
+#define OMAP54XX_RM_EMIF_DMM_CONTEXT_OFFSET                    0x0424
+#define OMAP54XX_RM_EMIF_EMIF_OCP_FW_CONTEXT_OFFSET            0x042c
+#define OMAP54XX_RM_EMIF_EMIF1_CONTEXT_OFFSET                  0x0434
+#define OMAP54XX_RM_EMIF_EMIF2_CONTEXT_OFFSET                  0x043c
+#define OMAP54XX_RM_EMIF_EMIF_DLL_CONTEXT_OFFSET               0x0444
+#define OMAP54XX_RM_C2C_C2C_CONTEXT_OFFSET                     0x0524
+#define OMAP54XX_RM_C2C_MODEM_ICR_CONTEXT_OFFSET               0x052c
+#define OMAP54XX_RM_C2C_C2C_OCP_FW_CONTEXT_OFFSET              0x0534
+#define OMAP54XX_RM_L4CFG_L4_CFG_CONTEXT_OFFSET                        0x0624
+#define OMAP54XX_RM_L4CFG_SPINLOCK_CONTEXT_OFFSET              0x062c
+#define OMAP54XX_RM_L4CFG_MAILBOX_CONTEXT_OFFSET               0x0634
+#define OMAP54XX_RM_L4CFG_SAR_ROM_CONTEXT_OFFSET               0x063c
+#define OMAP54XX_RM_L4CFG_OCP2SCP2_CONTEXT_OFFSET              0x0644
+#define OMAP54XX_RM_L3INSTR_L3_MAIN_3_CONTEXT_OFFSET           0x0724
+#define OMAP54XX_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET            0x072c
+#define OMAP54XX_RM_L3INSTR_OCP_WP_NOC_CONTEXT_OFFSET          0x0744
+#define OMAP54XX_RM_MIPIEXT_LLI_CONTEXT_OFFSET                 0x0824
+#define OMAP54XX_RM_MIPIEXT_LLI_OCP_FW_CONTEXT_OFFSET          0x082c
+#define OMAP54XX_RM_MIPIEXT_MPHY_CONTEXT_OFFSET                        0x0834
+#define OMAP54XX_PM_L4PER_TIMER10_WKDEP_OFFSET                 0x0928
+#define OMAP54XX_RM_L4PER_TIMER10_CONTEXT_OFFSET               0x092c
+#define OMAP54XX_PM_L4PER_TIMER11_WKDEP_OFFSET                 0x0930
+#define OMAP54XX_RM_L4PER_TIMER11_CONTEXT_OFFSET               0x0934
+#define OMAP54XX_PM_L4PER_TIMER2_WKDEP_OFFSET                  0x0938
+#define OMAP54XX_RM_L4PER_TIMER2_CONTEXT_OFFSET                        0x093c
+#define OMAP54XX_PM_L4PER_TIMER3_WKDEP_OFFSET                  0x0940
+#define OMAP54XX_RM_L4PER_TIMER3_CONTEXT_OFFSET                        0x0944
+#define OMAP54XX_PM_L4PER_TIMER4_WKDEP_OFFSET                  0x0948
+#define OMAP54XX_RM_L4PER_TIMER4_CONTEXT_OFFSET                        0x094c
+#define OMAP54XX_PM_L4PER_TIMER9_WKDEP_OFFSET                  0x0950
+#define OMAP54XX_RM_L4PER_TIMER9_CONTEXT_OFFSET                        0x0954
+#define OMAP54XX_RM_L4PER_ELM_CONTEXT_OFFSET                   0x095c
+#define OMAP54XX_PM_L4PER_GPIO2_WKDEP_OFFSET                   0x0960
+#define OMAP54XX_RM_L4PER_GPIO2_CONTEXT_OFFSET                 0x0964
+#define OMAP54XX_PM_L4PER_GPIO3_WKDEP_OFFSET                   0x0968
+#define OMAP54XX_RM_L4PER_GPIO3_CONTEXT_OFFSET                 0x096c
+#define OMAP54XX_PM_L4PER_GPIO4_WKDEP_OFFSET                   0x0970
+#define OMAP54XX_RM_L4PER_GPIO4_CONTEXT_OFFSET                 0x0974
+#define OMAP54XX_PM_L4PER_GPIO5_WKDEP_OFFSET                   0x0978
+#define OMAP54XX_RM_L4PER_GPIO5_CONTEXT_OFFSET                 0x097c
+#define OMAP54XX_PM_L4PER_GPIO6_WKDEP_OFFSET                   0x0980
+#define OMAP54XX_RM_L4PER_GPIO6_CONTEXT_OFFSET                 0x0984
+#define OMAP54XX_RM_L4PER_HDQ1W_CONTEXT_OFFSET                 0x098c
+#define OMAP54XX_PM_L4PER_I2C1_WKDEP_OFFSET                    0x09a0
+#define OMAP54XX_RM_L4PER_I2C1_CONTEXT_OFFSET                  0x09a4
+#define OMAP54XX_PM_L4PER_I2C2_WKDEP_OFFSET                    0x09a8
+#define OMAP54XX_RM_L4PER_I2C2_CONTEXT_OFFSET                  0x09ac
+#define OMAP54XX_PM_L4PER_I2C3_WKDEP_OFFSET                    0x09b0
+#define OMAP54XX_RM_L4PER_I2C3_CONTEXT_OFFSET                  0x09b4
+#define OMAP54XX_PM_L4PER_I2C4_WKDEP_OFFSET                    0x09b8
+#define OMAP54XX_RM_L4PER_I2C4_CONTEXT_OFFSET                  0x09bc
+#define OMAP54XX_RM_L4PER_L4_PER_CONTEXT_OFFSET                        0x09c0
+#define OMAP54XX_PM_L4PER_MCSPI1_WKDEP_OFFSET                  0x09f0
+#define OMAP54XX_RM_L4PER_MCSPI1_CONTEXT_OFFSET                        0x09f4
+#define OMAP54XX_PM_L4PER_MCSPI2_WKDEP_OFFSET                  0x09f8
+#define OMAP54XX_RM_L4PER_MCSPI2_CONTEXT_OFFSET                        0x09fc
+#define OMAP54XX_PM_L4PER_MCSPI3_WKDEP_OFFSET                  0x0a00
+#define OMAP54XX_RM_L4PER_MCSPI3_CONTEXT_OFFSET                        0x0a04
+#define OMAP54XX_PM_L4PER_MCSPI4_WKDEP_OFFSET                  0x0a08
+#define OMAP54XX_RM_L4PER_MCSPI4_CONTEXT_OFFSET                        0x0a0c
+#define OMAP54XX_PM_L4PER_GPIO7_WKDEP_OFFSET                   0x0a10
+#define OMAP54XX_RM_L4PER_GPIO7_CONTEXT_OFFSET                 0x0a14
+#define OMAP54XX_PM_L4PER_GPIO8_WKDEP_OFFSET                   0x0a18
+#define OMAP54XX_RM_L4PER_GPIO8_CONTEXT_OFFSET                 0x0a1c
+#define OMAP54XX_PM_L4PER_MMC3_WKDEP_OFFSET                    0x0a20
+#define OMAP54XX_RM_L4PER_MMC3_CONTEXT_OFFSET                  0x0a24
+#define OMAP54XX_PM_L4PER_MMC4_WKDEP_OFFSET                    0x0a28
+#define OMAP54XX_RM_L4PER_MMC4_CONTEXT_OFFSET                  0x0a2c
+#define OMAP54XX_PM_L4PER_UART1_WKDEP_OFFSET                   0x0a40
+#define OMAP54XX_RM_L4PER_UART1_CONTEXT_OFFSET                 0x0a44
+#define OMAP54XX_PM_L4PER_UART2_WKDEP_OFFSET                   0x0a48
+#define OMAP54XX_RM_L4PER_UART2_CONTEXT_OFFSET                 0x0a4c
+#define OMAP54XX_PM_L4PER_UART3_WKDEP_OFFSET                   0x0a50
+#define OMAP54XX_RM_L4PER_UART3_CONTEXT_OFFSET                 0x0a54
+#define OMAP54XX_RM_L4PER_UART4_CONTEXT_OFFSET                 0x0a58
+#define OMAP54XX_PM_L4PER_UART4_WKDEP_OFFSET                   0x0a5c
+#define OMAP54XX_PM_L4PER_MMC5_WKDEP_OFFSET                    0x0a60
+#define OMAP54XX_RM_L4PER_MMC5_CONTEXT_OFFSET                  0x0a64
+#define OMAP54XX_PM_L4PER_I2C5_WKDEP_OFFSET                    0x0a68
+#define OMAP54XX_RM_L4PER_I2C5_CONTEXT_OFFSET                  0x0a6c
+#define OMAP54XX_PM_L4PER_UART5_WKDEP_OFFSET                   0x0a70
+#define OMAP54XX_RM_L4PER_UART5_CONTEXT_OFFSET                 0x0a74
+#define OMAP54XX_PM_L4PER_UART6_WKDEP_OFFSET                   0x0a78
+#define OMAP54XX_RM_L4PER_UART6_CONTEXT_OFFSET                 0x0a7c
+#define OMAP54XX_RM_L4SEC_AES1_CONTEXT_OFFSET                  0x0aa4
+#define OMAP54XX_RM_L4SEC_AES2_CONTEXT_OFFSET                  0x0aac
+#define OMAP54XX_RM_L4SEC_DES3DES_CONTEXT_OFFSET               0x0ab4
+#define OMAP54XX_RM_L4SEC_FPKA_CONTEXT_OFFSET                  0x0abc
+#define OMAP54XX_RM_L4SEC_RNG_CONTEXT_OFFSET                   0x0ac4
+#define OMAP54XX_RM_L4SEC_SHA2MD5_CONTEXT_OFFSET               0x0acc
+#define OMAP54XX_RM_L4SEC_DMA_CRYPTO_CONTEXT_OFFSET            0x0adc
+
+/* PRM.IVA_PRM register offsets */
+#define OMAP54XX_PM_IVA_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_IVA_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_IVA_RSTCTRL_OFFSET                         0x0010
+#define OMAP54XX_RM_IVA_RSTST_OFFSET                           0x0014
+#define OMAP54XX_RM_IVA_IVA_CONTEXT_OFFSET                     0x0024
+#define OMAP54XX_RM_IVA_SL2_CONTEXT_OFFSET                     0x002c
+
+/* PRM.CAM_PRM register offsets */
+#define OMAP54XX_PM_CAM_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_CAM_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_CAM_ISS_CONTEXT_OFFSET                     0x0024
+#define OMAP54XX_RM_CAM_FDIF_CONTEXT_OFFSET                    0x002c
+#define OMAP54XX_RM_CAM_CAL_CONTEXT_OFFSET                     0x0034
+
+/* PRM.DSS_PRM register offsets */
+#define OMAP54XX_PM_DSS_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_DSS_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_PM_DSS_DSS_WKDEP_OFFSET                       0x0020
+#define OMAP54XX_RM_DSS_DSS_CONTEXT_OFFSET                     0x0024
+#define OMAP54XX_RM_DSS_BB2D_CONTEXT_OFFSET                    0x0034
+
+/* PRM.GPU_PRM register offsets */
+#define OMAP54XX_PM_GPU_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_GPU_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_GPU_GPU_CONTEXT_OFFSET                     0x0024
+
+/* PRM.L3INIT_PRM register offsets */
+#define OMAP54XX_PM_L3INIT_PWRSTCTRL_OFFSET                    0x0000
+#define OMAP54XX_PM_L3INIT_PWRSTST_OFFSET                      0x0004
+#define OMAP54XX_PM_L3INIT_MMC1_WKDEP_OFFSET                   0x0028
+#define OMAP54XX_RM_L3INIT_MMC1_CONTEXT_OFFSET                 0x002c
+#define OMAP54XX_PM_L3INIT_MMC2_WKDEP_OFFSET                   0x0030
+#define OMAP54XX_RM_L3INIT_MMC2_CONTEXT_OFFSET                 0x0034
+#define OMAP54XX_PM_L3INIT_HSI_WKDEP_OFFSET                    0x0038
+#define OMAP54XX_RM_L3INIT_HSI_CONTEXT_OFFSET                  0x003c
+#define OMAP54XX_PM_L3INIT_UNIPRO2_WKDEP_OFFSET                        0x0040
+#define OMAP54XX_RM_L3INIT_UNIPRO2_CONTEXT_OFFSET              0x0044
+#define OMAP54XX_PM_L3INIT_USB_HOST_HS_WKDEP_OFFSET            0x0058
+#define OMAP54XX_RM_L3INIT_USB_HOST_HS_CONTEXT_OFFSET          0x005c
+#define OMAP54XX_PM_L3INIT_USB_TLL_HS_WKDEP_OFFSET             0x0068
+#define OMAP54XX_RM_L3INIT_USB_TLL_HS_CONTEXT_OFFSET           0x006c
+#define OMAP54XX_RM_L3INIT_IEEE1500_2_OCP_CONTEXT_OFFSET       0x007c
+#define OMAP54XX_PM_L3INIT_SATA_WKDEP_OFFSET                   0x0088
+#define OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET                 0x008c
+#define OMAP54XX_RM_L3INIT_OCP2SCP1_CONTEXT_OFFSET             0x00e4
+#define OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET             0x00ec
+#define OMAP54XX_PM_L3INIT_USB_OTG_SS_WKDEP_OFFSET             0x00f0
+#define OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET           0x00f4
+
+/* PRM.CUSTEFUSE_PRM register offsets */
+#define OMAP54XX_PM_CUSTEFUSE_PWRSTCTRL_OFFSET                 0x0000
+#define OMAP54XX_PM_CUSTEFUSE_PWRSTST_OFFSET                   0x0004
+#define OMAP54XX_RM_CUSTEFUSE_EFUSE_CTRL_CUST_CONTEXT_OFFSET   0x0024
+
+/* PRM.WKUPAON_PRM register offsets */
+#define OMAP54XX_RM_WKUPAON_L4_WKUP_CONTEXT_OFFSET             0x0024
+#define OMAP54XX_RM_WKUPAON_WD_TIMER1_CONTEXT_OFFSET           0x002c
+#define OMAP54XX_PM_WKUPAON_WD_TIMER2_WKDEP_OFFSET             0x0030
+#define OMAP54XX_RM_WKUPAON_WD_TIMER2_CONTEXT_OFFSET           0x0034
+#define OMAP54XX_PM_WKUPAON_GPIO1_WKDEP_OFFSET                 0x0038
+#define OMAP54XX_RM_WKUPAON_GPIO1_CONTEXT_OFFSET               0x003c
+#define OMAP54XX_PM_WKUPAON_TIMER1_WKDEP_OFFSET                        0x0040
+#define OMAP54XX_RM_WKUPAON_TIMER1_CONTEXT_OFFSET              0x0044
+#define OMAP54XX_PM_WKUPAON_TIMER12_WKDEP_OFFSET               0x0048
+#define OMAP54XX_RM_WKUPAON_TIMER12_CONTEXT_OFFSET             0x004c
+#define OMAP54XX_RM_WKUPAON_COUNTER_32K_CONTEXT_OFFSET         0x0054
+#define OMAP54XX_RM_WKUPAON_SAR_RAM_CONTEXT_OFFSET             0x0064
+#define OMAP54XX_PM_WKUPAON_KBD_WKDEP_OFFSET                   0x0078
+#define OMAP54XX_RM_WKUPAON_KBD_CONTEXT_OFFSET                 0x007c
+
+/* PRM.WKUPAON_CM register offsets */
+#define OMAP54XX_CM_WKUPAON_CLKSTCTRL_OFFSET                   0x0000
+#define OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL_OFFSET             0x0020
+#define OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL                    OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0020)
+#define OMAP54XX_CM_WKUPAON_WD_TIMER1_CLKCTRL_OFFSET           0x0028
+#define OMAP54XX_CM_WKUPAON_WD_TIMER1_CLKCTRL                  OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0028)
+#define OMAP54XX_CM_WKUPAON_WD_TIMER2_CLKCTRL_OFFSET           0x0030
+#define OMAP54XX_CM_WKUPAON_WD_TIMER2_CLKCTRL                  OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0030)
+#define OMAP54XX_CM_WKUPAON_GPIO1_CLKCTRL_OFFSET               0x0038
+#define OMAP54XX_CM_WKUPAON_GPIO1_CLKCTRL                      OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0038)
+#define OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL_OFFSET              0x0040
+#define OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL                     OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0040)
+#define OMAP54XX_CM_WKUPAON_TIMER12_CLKCTRL_OFFSET             0x0048
+#define OMAP54XX_CM_WKUPAON_TIMER12_CLKCTRL                    OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0048)
+#define OMAP54XX_CM_WKUPAON_COUNTER_32K_CLKCTRL_OFFSET         0x0050
+#define OMAP54XX_CM_WKUPAON_COUNTER_32K_CLKCTRL                        OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0050)
+#define OMAP54XX_CM_WKUPAON_SAR_RAM_CLKCTRL_OFFSET             0x0060
+#define OMAP54XX_CM_WKUPAON_SAR_RAM_CLKCTRL                    OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0060)
+#define OMAP54XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET                 0x0078
+#define OMAP54XX_CM_WKUPAON_KBD_CLKCTRL                                OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0078)
+#define OMAP54XX_CM_WKUPAON_SCRM_CLKCTRL_OFFSET                        0x0090
+#define OMAP54XX_CM_WKUPAON_SCRM_CLKCTRL                       OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0090)
+#define OMAP54XX_CM_WKUPAON_IO_SRCOMP_CLKCTRL_OFFSET           0x0098
+#define OMAP54XX_CM_WKUPAON_IO_SRCOMP_CLKCTRL                  OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_WKUPAON_CM_INST, 0x0098)
+
+/* PRM.EMU_PRM register offsets */
+#define OMAP54XX_PM_EMU_PWRSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_PM_EMU_PWRSTST_OFFSET                         0x0004
+#define OMAP54XX_RM_EMU_DEBUGSS_CONTEXT_OFFSET                 0x0024
+
+/* PRM.EMU_CM register offsets */
+#define OMAP54XX_CM_EMU_CLKSTCTRL_OFFSET                       0x0000
+#define OMAP54XX_CM_EMU_DYNAMICDEP_OFFSET                      0x0008
+#define OMAP54XX_CM_EMU_DEBUGSS_CLKCTRL_OFFSET                 0x0020
+#define OMAP54XX_CM_EMU_DEBUGSS_CLKCTRL                                OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_EMU_CM_INST, 0x0020)
+#define OMAP54XX_CM_EMU_MPU_EMU_DBG_CLKCTRL_OFFSET             0x0028
+#define OMAP54XX_CM_EMU_MPU_EMU_DBG_CLKCTRL                    OMAP54XX_PRM_REGADDR(OMAP54XX_PRM_EMU_CM_INST, 0x0028)
+
+/* PRM.DEVICE_PRM register offsets */
+#define OMAP54XX_PRM_RSTCTRL_OFFSET                            0x0000
+#define OMAP54XX_PRM_RSTST_OFFSET                              0x0004
+#define OMAP54XX_PRM_RSTTIME_OFFSET                            0x0008
+#define OMAP54XX_PRM_CLKREQCTRL_OFFSET                         0x000c
+#define OMAP54XX_PRM_VOLTCTRL_OFFSET                           0x0010
+#define OMAP54XX_PRM_PWRREQCTRL_OFFSET                         0x0014
+#define OMAP54XX_PRM_PSCON_COUNT_OFFSET                                0x0018
+#define OMAP54XX_PRM_IO_COUNT_OFFSET                           0x001c
+#define OMAP54XX_PRM_IO_PMCTRL_OFFSET                          0x0020
+#define OMAP54XX_PRM_VOLTSETUP_WARMRESET_OFFSET                        0x0024
+#define OMAP54XX_PRM_VOLTSETUP_CORE_OFF_OFFSET                 0x0028
+#define OMAP54XX_PRM_VOLTSETUP_MPU_OFF_OFFSET                  0x002c
+#define OMAP54XX_PRM_VOLTSETUP_MM_OFF_OFFSET                   0x0030
+#define OMAP54XX_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET           0x0034
+#define OMAP54XX_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET            0x0038
+#define OMAP54XX_PRM_VOLTSETUP_MM_RET_SLEEP_OFFSET             0x003c
+#define OMAP54XX_PRM_VP_CORE_CONFIG_OFFSET                     0x0040
+#define OMAP54XX_PRM_VP_CORE_STATUS_OFFSET                     0x0044
+#define OMAP54XX_PRM_VP_CORE_VLIMITTO_OFFSET                   0x0048
+#define OMAP54XX_PRM_VP_CORE_VOLTAGE_OFFSET                    0x004c
+#define OMAP54XX_PRM_VP_CORE_VSTEPMAX_OFFSET                   0x0050
+#define OMAP54XX_PRM_VP_CORE_VSTEPMIN_OFFSET                   0x0054
+#define OMAP54XX_PRM_VP_MPU_CONFIG_OFFSET                      0x0058
+#define OMAP54XX_PRM_VP_MPU_STATUS_OFFSET                      0x005c
+#define OMAP54XX_PRM_VP_MPU_VLIMITTO_OFFSET                    0x0060
+#define OMAP54XX_PRM_VP_MPU_VOLTAGE_OFFSET                     0x0064
+#define OMAP54XX_PRM_VP_MPU_VSTEPMAX_OFFSET                    0x0068
+#define OMAP54XX_PRM_VP_MPU_VSTEPMIN_OFFSET                    0x006c
+#define OMAP54XX_PRM_VP_MM_CONFIG_OFFSET                       0x0070
+#define OMAP54XX_PRM_VP_MM_STATUS_OFFSET                       0x0074
+#define OMAP54XX_PRM_VP_MM_VLIMITTO_OFFSET                     0x0078
+#define OMAP54XX_PRM_VP_MM_VOLTAGE_OFFSET                      0x007c
+#define OMAP54XX_PRM_VP_MM_VSTEPMAX_OFFSET                     0x0080
+#define OMAP54XX_PRM_VP_MM_VSTEPMIN_OFFSET                     0x0084
+#define OMAP54XX_PRM_VC_SMPS_CORE_CONFIG_OFFSET                        0x0088
+#define OMAP54XX_PRM_VC_SMPS_MM_CONFIG_OFFSET                  0x008c
+#define OMAP54XX_PRM_VC_SMPS_MPU_CONFIG_OFFSET                 0x0090
+#define OMAP54XX_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET              0x0094
+#define OMAP54XX_PRM_VC_VAL_CMD_VDD_MM_L_OFFSET                        0x0098
+#define OMAP54XX_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET               0x009c
+#define OMAP54XX_PRM_VC_VAL_BYPASS_OFFSET                      0x00a0
+#define OMAP54XX_PRM_VC_CORE_ERRST_OFFSET                      0x00a4
+#define OMAP54XX_PRM_VC_MM_ERRST_OFFSET                                0x00a8
+#define OMAP54XX_PRM_VC_MPU_ERRST_OFFSET                       0x00ac
+#define OMAP54XX_PRM_VC_BYPASS_ERRST_OFFSET                    0x00b0
+#define OMAP54XX_PRM_VC_CFG_I2C_MODE_OFFSET                    0x00b4
+#define OMAP54XX_PRM_VC_CFG_I2C_CLK_OFFSET                     0x00b8
+#define OMAP54XX_PRM_SRAM_COUNT_OFFSET                         0x00bc
+#define OMAP54XX_PRM_SRAM_WKUP_SETUP_OFFSET                    0x00c0
+#define OMAP54XX_PRM_SLDO_CORE_SETUP_OFFSET                    0x00c4
+#define OMAP54XX_PRM_SLDO_CORE_CTRL_OFFSET                     0x00c8
+#define OMAP54XX_PRM_SLDO_MPU_SETUP_OFFSET                     0x00cc
+#define OMAP54XX_PRM_SLDO_MPU_CTRL_OFFSET                      0x00d0
+#define OMAP54XX_PRM_SLDO_MM_SETUP_OFFSET                      0x00d4
+#define OMAP54XX_PRM_SLDO_MM_CTRL_OFFSET                       0x00d8
+#define OMAP54XX_PRM_ABBLDO_MPU_SETUP_OFFSET                   0x00dc
+#define OMAP54XX_PRM_ABBLDO_MPU_CTRL_OFFSET                    0x00e0
+#define OMAP54XX_PRM_ABBLDO_MM_SETUP_OFFSET                    0x00e4
+#define OMAP54XX_PRM_ABBLDO_MM_CTRL_OFFSET                     0x00e8
+#define OMAP54XX_PRM_BANDGAP_SETUP_OFFSET                      0x00ec
+#define OMAP54XX_PRM_DEVICE_OFF_CTRL_OFFSET                    0x00f0
+#define OMAP54XX_PRM_PHASE1_CNDP_OFFSET                                0x00f4
+#define OMAP54XX_PRM_PHASE2A_CNDP_OFFSET                       0x00f8
+#define OMAP54XX_PRM_PHASE2B_CNDP_OFFSET                       0x00fc
+#define OMAP54XX_PRM_MODEM_IF_CTRL_OFFSET                      0x0100
+#define OMAP54XX_PRM_VOLTST_MPU_OFFSET                         0x0110
+#define OMAP54XX_PRM_VOLTST_MM_OFFSET                          0x0114
+
+#endif
diff --git a/arch/arm/mach-omap2/scrm54xx.h b/arch/arm/mach-omap2/scrm54xx.h
new file mode 100644 (file)
index 0000000..57e86c8
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+ * OMAP54XX SCRM registers and bitfields
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_SCRM_54XX_H
+#define __ARCH_ARM_MACH_OMAP2_SCRM_54XX_H
+
+#define OMAP5_SCRM_BASE                0x4ae0a000
+
+#define OMAP54XX_SCRM_REGADDR(reg)                             \
+       OMAP2_L4_IO_ADDRESS(OMAP5_SCRM_BASE + (reg))
+
+/* SCRM */
+
+/* SCRM.SCRM register offsets */
+#define OMAP5_SCRM_REVISION_SCRM_OFFSET                0x0000
+#define OMAP5_SCRM_REVISION_SCRM               OMAP54XX_SCRM_REGADDR(0x0000)
+#define OMAP5_SCRM_CLKSETUPTIME_OFFSET         0x0100
+#define OMAP5_SCRM_CLKSETUPTIME                        OMAP54XX_SCRM_REGADDR(0x0100)
+#define OMAP5_SCRM_PMICSETUPTIME_OFFSET                0x0104
+#define OMAP5_SCRM_PMICSETUPTIME               OMAP54XX_SCRM_REGADDR(0x0104)
+#define OMAP5_SCRM_ALTCLKSRC_OFFSET            0x0110
+#define OMAP5_SCRM_ALTCLKSRC                   OMAP54XX_SCRM_REGADDR(0x0110)
+#define OMAP5_SCRM_MODEMCLKM_OFFSET            0x0118
+#define OMAP5_SCRM_MODEMCLKM                   OMAP54XX_SCRM_REGADDR(0x0118)
+#define OMAP5_SCRM_D2DCLKM_OFFSET              0x011c
+#define OMAP5_SCRM_D2DCLKM                     OMAP54XX_SCRM_REGADDR(0x011c)
+#define OMAP5_SCRM_EXTCLKREQ_OFFSET            0x0200
+#define OMAP5_SCRM_EXTCLKREQ                   OMAP54XX_SCRM_REGADDR(0x0200)
+#define OMAP5_SCRM_ACCCLKREQ_OFFSET            0x0204
+#define OMAP5_SCRM_ACCCLKREQ                   OMAP54XX_SCRM_REGADDR(0x0204)
+#define OMAP5_SCRM_PWRREQ_OFFSET               0x0208
+#define OMAP5_SCRM_PWRREQ                      OMAP54XX_SCRM_REGADDR(0x0208)
+#define OMAP5_SCRM_AUXCLKREQ0_OFFSET           0x0210
+#define OMAP5_SCRM_AUXCLKREQ0                  OMAP54XX_SCRM_REGADDR(0x0210)
+#define OMAP5_SCRM_AUXCLKREQ1_OFFSET           0x0214
+#define OMAP5_SCRM_AUXCLKREQ1                  OMAP54XX_SCRM_REGADDR(0x0214)
+#define OMAP5_SCRM_AUXCLKREQ2_OFFSET           0x0218
+#define OMAP5_SCRM_AUXCLKREQ2                  OMAP54XX_SCRM_REGADDR(0x0218)
+#define OMAP5_SCRM_AUXCLKREQ3_OFFSET           0x021c
+#define OMAP5_SCRM_AUXCLKREQ3                  OMAP54XX_SCRM_REGADDR(0x021c)
+#define OMAP5_SCRM_AUXCLKREQ4_OFFSET           0x0220
+#define OMAP5_SCRM_AUXCLKREQ4                  OMAP54XX_SCRM_REGADDR(0x0220)
+#define OMAP5_SCRM_AUXCLKREQ5_OFFSET           0x0224
+#define OMAP5_SCRM_AUXCLKREQ5                  OMAP54XX_SCRM_REGADDR(0x0224)
+#define OMAP5_SCRM_D2DCLKREQ_OFFSET            0x0234
+#define OMAP5_SCRM_D2DCLKREQ                   OMAP54XX_SCRM_REGADDR(0x0234)
+#define OMAP5_SCRM_AUXCLK0_OFFSET              0x0310
+#define OMAP5_SCRM_AUXCLK0                     OMAP54XX_SCRM_REGADDR(0x0310)
+#define OMAP5_SCRM_AUXCLK1_OFFSET              0x0314
+#define OMAP5_SCRM_AUXCLK1                     OMAP54XX_SCRM_REGADDR(0x0314)
+#define OMAP5_SCRM_AUXCLK2_OFFSET              0x0318
+#define OMAP5_SCRM_AUXCLK2                     OMAP54XX_SCRM_REGADDR(0x0318)
+#define OMAP5_SCRM_AUXCLK3_OFFSET              0x031c
+#define OMAP5_SCRM_AUXCLK3                     OMAP54XX_SCRM_REGADDR(0x031c)
+#define OMAP5_SCRM_AUXCLK4_OFFSET              0x0320
+#define OMAP5_SCRM_AUXCLK4                     OMAP54XX_SCRM_REGADDR(0x0320)
+#define OMAP5_SCRM_AUXCLK5_OFFSET              0x0324
+#define OMAP5_SCRM_AUXCLK5                     OMAP54XX_SCRM_REGADDR(0x0324)
+#define OMAP5_SCRM_RSTTIME_OFFSET              0x0400
+#define OMAP5_SCRM_RSTTIME                     OMAP54XX_SCRM_REGADDR(0x0400)
+#define OMAP5_SCRM_MODEMRSTCTRL_OFFSET         0x0418
+#define OMAP5_SCRM_MODEMRSTCTRL                        OMAP54XX_SCRM_REGADDR(0x0418)
+#define OMAP5_SCRM_D2DRSTCTRL_OFFSET           0x041c
+#define OMAP5_SCRM_D2DRSTCTRL                  OMAP54XX_SCRM_REGADDR(0x041c)
+#define OMAP5_SCRM_EXTPWRONRSTCTRL_OFFSET      0x0420
+#define OMAP5_SCRM_EXTPWRONRSTCTRL             OMAP54XX_SCRM_REGADDR(0x0420)
+#define OMAP5_SCRM_EXTWARMRSTST_OFFSET         0x0510
+#define OMAP5_SCRM_EXTWARMRSTST                        OMAP54XX_SCRM_REGADDR(0x0510)
+#define OMAP5_SCRM_APEWARMRSTST_OFFSET         0x0514
+#define OMAP5_SCRM_APEWARMRSTST                        OMAP54XX_SCRM_REGADDR(0x0514)
+#define OMAP5_SCRM_MODEMWARMRSTST_OFFSET       0x0518
+#define OMAP5_SCRM_MODEMWARMRSTST              OMAP54XX_SCRM_REGADDR(0x0518)
+#define OMAP5_SCRM_D2DWARMRSTST_OFFSET         0x051c
+#define OMAP5_SCRM_D2DWARMRSTST                        OMAP54XX_SCRM_REGADDR(0x051c)
+
+/*
+ * Used by AUXCLKREQ0, AUXCLKREQ1, AUXCLKREQ2, AUXCLKREQ3, AUXCLKREQ4,
+ * AUXCLKREQ5, D2DCLKREQ
+ */
+#define OMAP5_ACCURACY_SHIFT                   1
+#define OMAP5_ACCURACY_WIDTH                   0x1
+#define OMAP5_ACCURACY_MASK                    (1 << 1)
+
+/* Used by APEWARMRSTST */
+#define OMAP5_APEWARMRSTST_SHIFT               1
+#define OMAP5_APEWARMRSTST_WIDTH               0x1
+#define OMAP5_APEWARMRSTST_MASK                        (1 << 1)
+
+/* Used by AUXCLK0, AUXCLK1, AUXCLK2, AUXCLK3, AUXCLK4, AUXCLK5 */
+#define OMAP5_CLKDIV_SHIFT                     16
+#define OMAP5_CLKDIV_WIDTH                     0x4
+#define OMAP5_CLKDIV_MASK                      (0xf << 16)
+
+/* Used by D2DCLKM, MODEMCLKM */
+#define OMAP5_CLK_32KHZ_SHIFT                  0
+#define OMAP5_CLK_32KHZ_WIDTH                  0x1
+#define OMAP5_CLK_32KHZ_MASK                   (1 << 0)
+
+/* Used by D2DRSTCTRL, MODEMRSTCTRL */
+#define OMAP5_COLDRST_SHIFT                    0
+#define OMAP5_COLDRST_WIDTH                    0x1
+#define OMAP5_COLDRST_MASK                     (1 << 0)
+
+/* Used by D2DWARMRSTST */
+#define OMAP5_D2DWARMRSTST_SHIFT               3
+#define OMAP5_D2DWARMRSTST_WIDTH               0x1
+#define OMAP5_D2DWARMRSTST_MASK                        (1 << 3)
+
+/* Used by AUXCLK0 */
+#define OMAP5_DISABLECLK_SHIFT                 9
+#define OMAP5_DISABLECLK_WIDTH                 0x1
+#define OMAP5_DISABLECLK_MASK                  (1 << 9)
+
+/* Used by CLKSETUPTIME */
+#define OMAP5_DOWNTIME_SHIFT                   16
+#define OMAP5_DOWNTIME_WIDTH                   0x6
+#define OMAP5_DOWNTIME_MASK                    (0x3f << 16)
+
+/* Used by AUXCLK0, AUXCLK1, AUXCLK2, AUXCLK3, AUXCLK4, AUXCLK5 */
+#define OMAP5_ENABLE_SHIFT                     8
+#define OMAP5_ENABLE_WIDTH                     0x1
+#define OMAP5_ENABLE_MASK                      (1 << 8)
+
+/* Renamed from ENABLE Used by EXTPWRONRSTCTRL */
+#define OMAP5_ENABLE_0_0_SHIFT                 0
+#define OMAP5_ENABLE_0_0_WIDTH                 0x1
+#define OMAP5_ENABLE_0_0_MASK                  (1 << 0)
+
+/* Used by ALTCLKSRC */
+#define OMAP5_ENABLE_EXT_SHIFT                 3
+#define OMAP5_ENABLE_EXT_WIDTH                 0x1
+#define OMAP5_ENABLE_EXT_MASK                  (1 << 3)
+
+/* Used by ALTCLKSRC */
+#define OMAP5_ENABLE_INT_SHIFT                 2
+#define OMAP5_ENABLE_INT_WIDTH                 0x1
+#define OMAP5_ENABLE_INT_MASK                  (1 << 2)
+
+/* Used by EXTWARMRSTST */
+#define OMAP5_EXTWARMRSTST_SHIFT               0
+#define OMAP5_EXTWARMRSTST_WIDTH               0x1
+#define OMAP5_EXTWARMRSTST_MASK                        (1 << 0)
+
+/*
+ * Used by AUXCLKREQ0, AUXCLKREQ1, AUXCLKREQ2, AUXCLKREQ3, AUXCLKREQ4,
+ * AUXCLKREQ5
+ */
+#define OMAP5_MAPPING_SHIFT                    2
+#define OMAP5_MAPPING_WIDTH                    0x3
+#define OMAP5_MAPPING_MASK                     (0x7 << 2)
+
+/* Used by ALTCLKSRC */
+#define OMAP5_MODE_SHIFT                       0
+#define OMAP5_MODE_WIDTH                       0x2
+#define OMAP5_MODE_MASK                                (0x3 << 0)
+
+/* Used by MODEMWARMRSTST */
+#define OMAP5_MODEMWARMRSTST_SHIFT             2
+#define OMAP5_MODEMWARMRSTST_WIDTH             0x1
+#define OMAP5_MODEMWARMRSTST_MASK              (1 << 2)
+
+/*
+ * Used by ACCCLKREQ, AUXCLK0, AUXCLK1, AUXCLK2, AUXCLK3, AUXCLK4, AUXCLK5,
+ * AUXCLKREQ0, AUXCLKREQ1, AUXCLKREQ2, AUXCLKREQ3, AUXCLKREQ4, AUXCLKREQ5,
+ * D2DCLKREQ, EXTCLKREQ, PWRREQ
+ */
+#define OMAP5_POLARITY_SHIFT                   0
+#define OMAP5_POLARITY_WIDTH                   0x1
+#define OMAP5_POLARITY_MASK                    (1 << 0)
+
+/* Used by EXTPWRONRSTCTRL */
+#define OMAP5_PWRONRST_SHIFT                   1
+#define OMAP5_PWRONRST_WIDTH                   0x1
+#define OMAP5_PWRONRST_MASK                    (1 << 1)
+
+/* Used by REVISION_SCRM */
+#define OMAP5_REV_SHIFT                                0
+#define OMAP5_REV_WIDTH                                0x8
+#define OMAP5_REV_MASK                         (0xff << 0)
+
+/* Used by RSTTIME */
+#define OMAP5_RSTTIME_SHIFT                    0
+#define OMAP5_RSTTIME_WIDTH                    0x4
+#define OMAP5_RSTTIME_MASK                     (0xf << 0)
+
+/* Used by CLKSETUPTIME */
+#define OMAP5_SETUPTIME_SHIFT                  0
+#define OMAP5_SETUPTIME_WIDTH                  0xc
+#define OMAP5_SETUPTIME_MASK                   (0xfff << 0)
+
+/* Used by PMICSETUPTIME */
+#define OMAP5_SLEEPTIME_SHIFT                  0
+#define OMAP5_SLEEPTIME_WIDTH                  0x6
+#define OMAP5_SLEEPTIME_MASK                   (0x3f << 0)
+
+/* Used by AUXCLK0, AUXCLK1, AUXCLK2, AUXCLK3, AUXCLK4, AUXCLK5 */
+#define OMAP5_SRCSELECT_SHIFT                  1
+#define OMAP5_SRCSELECT_WIDTH                  0x2
+#define OMAP5_SRCSELECT_MASK                   (0x3 << 1)
+
+/* Used by D2DCLKM */
+#define OMAP5_SYSCLK_SHIFT                     1
+#define OMAP5_SYSCLK_WIDTH                     0x1
+#define OMAP5_SYSCLK_MASK                      (1 << 1)
+
+/* Used by PMICSETUPTIME */
+#define OMAP5_WAKEUPTIME_SHIFT                 16
+#define OMAP5_WAKEUPTIME_WIDTH                 0x6
+#define OMAP5_WAKEUPTIME_MASK                  (0x3f << 16)
+
+/* Used by D2DRSTCTRL, MODEMRSTCTRL */
+#define OMAP5_WARMRST_SHIFT                    1
+#define OMAP5_WARMRST_WIDTH                    0x1
+#define OMAP5_WARMRST_MASK                     (1 << 1)
+
+#endif
index 197cc16870d9e7f3a223817f9870307c0f99a968..8c616e436bc7bcf0ff1d4ac2ac11eb9497535ce4 100644 (file)
 # endif
 #endif
 
+#ifdef CONFIG_SOC_AM43XX
+# ifdef OMAP_NAME
+#  undef  MULTI_OMAP2
+#  define MULTI_OMAP2
+# else
+#  define OMAP_NAME am43xx
+# endif
+#endif
+
 /*
  * Omap device type i.e. EMU/HS/TST/GP/BAD
  */
@@ -187,6 +196,7 @@ IS_OMAP_CLASS(44xx, 0x44)
 IS_AM_CLASS(35xx, 0x35)
 IS_OMAP_CLASS(54xx, 0x54)
 IS_AM_CLASS(33xx, 0x33)
+IS_AM_CLASS(43xx, 0x43)
 
 IS_TI_CLASS(81xx, 0x81)
 
@@ -202,6 +212,7 @@ IS_OMAP_SUBCLASS(543x, 0x543)
 IS_TI_SUBCLASS(816x, 0x816)
 IS_TI_SUBCLASS(814x, 0x814)
 IS_AM_SUBCLASS(335x, 0x335)
+IS_AM_SUBCLASS(437x, 0x437)
 
 #define cpu_is_omap24xx()              0
 #define cpu_is_omap242x()              0
@@ -214,6 +225,8 @@ IS_AM_SUBCLASS(335x, 0x335)
 #define soc_is_am35xx()                        0
 #define soc_is_am33xx()                        0
 #define soc_is_am335x()                        0
+#define soc_is_am43xx()                        0
+#define soc_is_am437x()                        0
 #define cpu_is_omap44xx()              0
 #define cpu_is_omap443x()              0
 #define cpu_is_omap446x()              0
@@ -341,6 +354,13 @@ IS_OMAP_TYPE(3430, 0x3430)
 # define soc_is_am335x()               is_am335x()
 #endif
 
+#ifdef CONFIG_SOC_AM43XX
+# undef soc_is_am43xx
+# undef soc_is_am437x
+# define soc_is_am43xx()               is_am43xx()
+# define soc_is_am437x()               is_am437x()
+#endif
+
 # if defined(CONFIG_ARCH_OMAP4)
 # undef cpu_is_omap44xx
 # undef cpu_is_omap443x
@@ -383,6 +403,8 @@ IS_OMAP_TYPE(3430, 0x3430)
 #define TI816X_CLASS           0x81600034
 #define TI8168_REV_ES1_0       TI816X_CLASS
 #define TI8168_REV_ES1_1       (TI816X_CLASS | (0x1 << 8))
+#define TI8168_REV_ES2_0       (TI816X_CLASS | (0x2 << 8))
+#define TI8168_REV_ES2_1       (TI816X_CLASS | (0x3 << 8))
 
 #define TI814X_CLASS           0x81400034
 #define TI8148_REV_ES1_0       TI814X_CLASS
@@ -398,6 +420,9 @@ IS_OMAP_TYPE(3430, 0x3430)
 #define AM335X_REV_ES2_0       (AM335X_CLASS | (0x1 << 8))
 #define AM335X_REV_ES2_1       (AM335X_CLASS | (0x2 << 8))
 
+#define AM437X_CLASS           0x43700000
+#define AM437X_REV_ES1_0       AM437X_CLASS
+
 #define OMAP443X_CLASS         0x44300044
 #define OMAP4430_REV_ES1_0     (OMAP443X_CLASS | (0x10 << 8))
 #define OMAP4430_REV_ES2_0     (OMAP443X_CLASS | (0x20 << 8))
@@ -424,6 +449,7 @@ void omap4xxx_check_revision(void);
 void omap5xxx_check_revision(void);
 void omap3xxx_check_features(void);
 void ti81xx_check_features(void);
+void am33xx_check_features(void);
 void omap4xxx_check_features(void);
 
 /*
index 0ff0f068bea85d0a671e00619e9f903069cc5cc0..4bd096836235bfead4dae8ad7425bb4823600798 100644 (file)
@@ -119,6 +119,9 @@ static void __init omap_detect_sram(void)
                if (soc_is_am33xx()) {
                        omap_sram_start = AM33XX_SRAM_PA;
                        omap_sram_size = 0x10000; /* 64K */
+               } else if (soc_is_am43xx()) {
+                       omap_sram_start = AM33XX_SRAM_PA;
+                       omap_sram_size = SZ_256K;
                } else if (cpu_is_omap34xx()) {
                        omap_sram_start = OMAP3_SRAM_PA;
                        omap_sram_size = 0x10000; /* 64K */
index f8b23b8040d9aa61a1593d30a55c5ed951cc5f6a..3bdb0fb020285d8a2b603a4771c7eea60d69baa9 100644 (file)
@@ -582,7 +582,7 @@ OMAP_SYS_32K_TIMER_INIT(2, 1, "timer_32k_ck", "ti,timer-alwon",
                        2, "timer_sys_ck", NULL);
 #endif /* CONFIG_ARCH_OMAP2 */
 
-#ifdef CONFIG_ARCH_OMAP3
+#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX)
 OMAP_SYS_32K_TIMER_INIT(3, 1, "timer_32k_ck", "ti,timer-alwon",
                        2, "timer_sys_ck", NULL);
 OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure",
index 9bf796df1b9e149b47f2dee6609c7240d5a263dd..f7f2879b31b0218b7c9d20a08cc4d2d73e09bb20 100644 (file)
@@ -170,6 +170,7 @@ int omap_voltage_late_init(void);
 extern void omap2xxx_voltagedomains_init(void);
 extern void omap3xxx_voltagedomains_init(void);
 extern void omap44xx_voltagedomains_init(void);
+extern void omap54xx_voltagedomains_init(void);
 
 struct voltagedomain *voltdm_lookup(const char *name);
 void voltdm_init(struct voltagedomain **voltdm_list);
diff --git a/arch/arm/mach-omap2/voltagedomains54xx_data.c b/arch/arm/mach-omap2/voltagedomains54xx_data.c
new file mode 100644 (file)
index 0000000..33d22b8
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * OMAP5 Voltage Management Routines
+ *
+ * Based on voltagedomains44xx_data.c
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/kernel.h>
+#include <linux/err.h>
+#include <linux/init.h>
+
+#include "common.h"
+
+#include "prm54xx.h"
+#include "voltage.h"
+#include "omap_opp_data.h"
+#include "vc.h"
+#include "vp.h"
+
+static const struct omap_vfsm_instance omap5_vdd_mpu_vfsm = {
+       .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET,
+};
+
+static const struct omap_vfsm_instance omap5_vdd_mm_vfsm = {
+       .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_MM_RET_SLEEP_OFFSET,
+};
+
+static const struct omap_vfsm_instance omap5_vdd_core_vfsm = {
+       .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET,
+};
+
+static struct voltagedomain omap5_voltdm_mpu = {
+       .name = "mpu",
+       .scalable = true,
+       .read = omap4_prm_vcvp_read,
+       .write = omap4_prm_vcvp_write,
+       .rmw = omap4_prm_vcvp_rmw,
+       .vc = &omap4_vc_mpu,
+       .vfsm = &omap5_vdd_mpu_vfsm,
+       .vp = &omap4_vp_mpu,
+};
+
+static struct voltagedomain omap5_voltdm_mm = {
+       .name = "mm",
+       .scalable = true,
+       .read = omap4_prm_vcvp_read,
+       .write = omap4_prm_vcvp_write,
+       .rmw = omap4_prm_vcvp_rmw,
+       .vc = &omap4_vc_iva,
+       .vfsm = &omap5_vdd_mm_vfsm,
+       .vp = &omap4_vp_iva,
+};
+
+static struct voltagedomain omap5_voltdm_core = {
+       .name = "core",
+       .scalable = true,
+       .read = omap4_prm_vcvp_read,
+       .write = omap4_prm_vcvp_write,
+       .rmw = omap4_prm_vcvp_rmw,
+       .vc = &omap4_vc_core,
+       .vfsm = &omap5_vdd_core_vfsm,
+       .vp = &omap4_vp_core,
+};
+
+static struct voltagedomain omap5_voltdm_wkup = {
+       .name = "wkup",
+};
+
+static struct voltagedomain *voltagedomains_omap5[] __initdata = {
+       &omap5_voltdm_mpu,
+       &omap5_voltdm_mm,
+       &omap5_voltdm_core,
+       &omap5_voltdm_wkup,
+       NULL,
+};
+
+static const char *sys_clk_name __initdata = "sys_clkin";
+
+void __init omap54xx_voltagedomains_init(void)
+{
+       struct voltagedomain *voltdm;
+       int i;
+
+       for (i = 0; voltdm = voltagedomains_omap5[i], voltdm; i++)
+               voltdm->sys_clk.name = sys_clk_name;
+
+       voltdm_init(voltagedomains_omap5);
+};
index 13bae78b215a4b4e0030797e2229e371b716f26b..b1022f4315f7f381accd63b6202acce59a236433 100644 (file)
@@ -4,7 +4,6 @@ config ARCH_PICOXCELL
        select ARM_PATCH_PHYS_VIRT
        select ARM_VIC
        select CPU_V6K
-       select DW_APB_TIMER
        select DW_APB_TIMER_OF
        select GENERIC_CLOCKEVENTS
        select HAVE_TCM
index aa6a7e0e80a45ef21d5ea834963d1391c0cf0bd8..b13f51bc35cf99481aeed2851ff42ba0c8e56ef1 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
-#include <linux/dw_apb_timer.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -80,7 +79,6 @@ static void picoxcell_wdt_restart(char mode, const char *cmd)
 
 DT_MACHINE_START(PICOXCELL, "Picochip picoXcell")
        .map_io         = picoxcell_map_io,
-       .init_time      = dw_apb_timer_init,
        .init_machine   = picoxcell_init_machine,
        .dt_compat      = picoxcell_dt_match,
        .restart        = picoxcell_wdt_restart,
diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
new file mode 100644 (file)
index 0000000..25ee12b
--- /dev/null
@@ -0,0 +1,16 @@
+config ARCH_ROCKCHIP
+       bool "Rockchip RK2928 and RK3xxx SOCs" if ARCH_MULTI_V7
+       select PINCTRL
+       select PINCTRL_ROCKCHIP
+       select ARCH_REQUIRE_GPIOLIB
+       select ARM_GIC
+       select CACHE_L2X0
+       select HAVE_ARM_TWD if LOCAL_TIMERS
+       select HAVE_SMP
+       select LOCAL_TIMERS if SMP
+       select COMMON_CLK
+       select GENERIC_CLOCKEVENTS
+       select DW_APB_TIMER_OF
+       help
+         Support for Rockchip's Cortex-A9 Single-to-Quad-Core-SoCs
+         containing the RK2928, RK30xx and RK31xx series.
diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
new file mode 100644 (file)
index 0000000..1547d4f
--- /dev/null
@@ -0,0 +1 @@
+obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip.o
diff --git a/arch/arm/mach-rockchip/rockchip.c b/arch/arm/mach-rockchip/rockchip.c
new file mode 100644 (file)
index 0000000..724d2d8
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Device Tree support for Rockchip SoCs
+ *
+ * Copyright (c) 2013 MundoReader S.L.
+ * Author: Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/of_platform.h>
+#include <linux/irqchip.h>
+#include <linux/dw_apb_timer.h>
+#include <linux/clk-provider.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/hardware/cache-l2x0.h>
+
+static void __init rockchip_timer_init(void)
+{
+       of_clk_init(NULL);
+       clocksource_of_init();
+}
+
+static void __init rockchip_dt_init(void)
+{
+       l2x0_of_init(0, ~0UL);
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static const char * const rockchip_board_dt_compat[] = {
+       "rockchip,rk2928",
+       "rockchip,rk3066a",
+       "rockchip,rk3066b",
+       "rockchip,rk3188",
+       NULL,
+};
+
+DT_MACHINE_START(ROCKCHIP_DT, "Rockchip Cortex-A9 (Device Tree)")
+       .init_machine   = rockchip_dt_init,
+       .init_time      = rockchip_timer_init,
+       .dt_compat      = rockchip_board_dt_compat,
+MACHINE_END
index ab1700ec8e64f9cf3870179b4d2d2afc733e5d60..b7e094671522d33d9b197fc28272d83473031310 100644 (file)
@@ -35,121 +35,95 @@ static struct s3c24xx_dma_map __initdata s3c2412_dma_mappings[] = {
        [DMACH_XD0] = {
                .name           = "xdreq0",
                .channels       = MAP(S3C2412_DMAREQSEL_XDREQ0),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_XDREQ0),
        },
        [DMACH_XD1] = {
                .name           = "xdreq1",
                .channels       = MAP(S3C2412_DMAREQSEL_XDREQ1),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_XDREQ1),
        },
        [DMACH_SDI] = {
                .name           = "sdi",
                .channels       = MAP(S3C2412_DMAREQSEL_SDI),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_SDI),
        },
-       [DMACH_SPI0] = {
-               .name           = "spi0",
+       [DMACH_SPI0_RX] = {
+               .name           = "spi0-rx",
+               .channels       = MAP(S3C2412_DMAREQSEL_SPI0RX),
+       },
+       [DMACH_SPI0_TX] = {
+               .name           = "spi0-tx",
                .channels       = MAP(S3C2412_DMAREQSEL_SPI0TX),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_SPI0RX),
        },
-       [DMACH_SPI1] = {
-               .name           = "spi1",
+       [DMACH_SPI1_RX] = {
+               .name           = "spi1-rx",
+               .channels       = MAP(S3C2412_DMAREQSEL_SPI1RX),
+       },
+       [DMACH_SPI1_TX] = {
+               .name           = "spi1-tx",
                .channels       = MAP(S3C2412_DMAREQSEL_SPI1TX),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_SPI1RX),
        },
        [DMACH_UART0] = {
                .name           = "uart0",
                .channels       = MAP(S3C2412_DMAREQSEL_UART0_0),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_UART0_0),
        },
        [DMACH_UART1] = {
                .name           = "uart1",
                .channels       = MAP(S3C2412_DMAREQSEL_UART1_0),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_UART1_0),
        },
        [DMACH_UART2] = {
                .name           = "uart2",
                .channels       = MAP(S3C2412_DMAREQSEL_UART2_0),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_UART2_0),
        },
        [DMACH_UART0_SRC2] = {
                .name           = "uart0",
                .channels       = MAP(S3C2412_DMAREQSEL_UART0_1),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_UART0_1),
        },
        [DMACH_UART1_SRC2] = {
                .name           = "uart1",
                .channels       = MAP(S3C2412_DMAREQSEL_UART1_1),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_UART1_1),
        },
        [DMACH_UART2_SRC2] = {
                .name           = "uart2",
                .channels       = MAP(S3C2412_DMAREQSEL_UART2_1),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_UART2_1),
        },
        [DMACH_TIMER] = {
                .name           = "timer",
                .channels       = MAP(S3C2412_DMAREQSEL_TIMER),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_TIMER),
        },
        [DMACH_I2S_IN] = {
                .name           = "i2s-sdi",
                .channels       = MAP(S3C2412_DMAREQSEL_I2SRX),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_I2SRX),
        },
        [DMACH_I2S_OUT] = {
                .name           = "i2s-sdo",
                .channels       = MAP(S3C2412_DMAREQSEL_I2STX),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_I2STX),
        },
        [DMACH_USB_EP1] = {
                .name           = "usb-ep1",
                .channels       = MAP(S3C2412_DMAREQSEL_USBEP1),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_USBEP1),
        },
        [DMACH_USB_EP2] = {
                .name           = "usb-ep2",
                .channels       = MAP(S3C2412_DMAREQSEL_USBEP2),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_USBEP2),
        },
        [DMACH_USB_EP3] = {
                .name           = "usb-ep3",
                .channels       = MAP(S3C2412_DMAREQSEL_USBEP3),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_USBEP3),
        },
        [DMACH_USB_EP4] = {
                .name           = "usb-ep4",
                .channels       = MAP(S3C2412_DMAREQSEL_USBEP4),
-               .channels_rx    = MAP(S3C2412_DMAREQSEL_USBEP4),
        },
 };
 
-static void s3c2412_dma_direction(struct s3c2410_dma_chan *chan,
-                                 struct s3c24xx_dma_map *map,
-                                 enum dma_data_direction dir)
-{
-       unsigned long chsel;
-
-       if (dir == DMA_FROM_DEVICE)
-               chsel = map->channels_rx[0];
-       else
-               chsel = map->channels[0];
-
-       chsel &= ~DMA_CH_VALID;
-       chsel |= S3C2412_DMAREQSEL_HW;
-
-       writel(chsel, chan->regs + S3C2412_DMA_DMAREQSEL);
-}
-
 static void s3c2412_dma_select(struct s3c2410_dma_chan *chan,
                               struct s3c24xx_dma_map *map)
 {
-       s3c2412_dma_direction(chan, map, chan->source);
+       unsigned long chsel = map->channels[0] & (~DMA_CH_VALID);
+       writel(chsel | S3C2412_DMAREQSEL_HW,
+              chan->regs + S3C2412_DMA_DMAREQSEL);
 }
 
 static struct s3c24xx_dma_selection __initdata s3c2412_dma_sel = {
        .select         = s3c2412_dma_select,
-       .direction      = s3c2412_dma_direction,
        .dcon_mask      = 0,
        .map            = s3c2412_dma_mappings,
        .map_size       = ARRAY_SIZE(s3c2412_dma_mappings),
index 5fe3539dc2b5a097ab46c7712b63b96344d86378..95b9f759fe97fdea1df49efdf78f062f11a8d2aa 100644 (file)
@@ -128,7 +128,8 @@ static struct s3c24xx_dma_map __initdata s3c2443_dma_mappings[] = {
 static void s3c2443_dma_select(struct s3c2410_dma_chan *chan,
                               struct s3c24xx_dma_map *map)
 {
-       writel(map->channels[0] | S3C2443_DMAREQSEL_HW,
+       unsigned long chsel = map->channels[0] & (~DMA_CH_VALID);
+       writel(chsel | S3C2443_DMAREQSEL_HW,
               chan->regs + S3C2443_DMA_DMAREQSEL);
 }
 
index aab64909e9a3a4528a340dc33521393f1515e422..4a65cba3295d69ce0bcec9168307f81dfa36fc09 100644 (file)
@@ -1159,9 +1159,6 @@ int s3c2410_dma_devconfig(enum dma_ch channel,
                return -EINVAL;
        }
 
-       if (dma_sel.direction != NULL)
-               (dma_sel.direction)(chan, chan->map, source);
-
        return 0;
 }
 
index 1a517e2fe44900d7ca8e70a79f185a5d49aba21d..65e1547678b07ec08f6ffc43c2187fd3fc2855cb 100644 (file)
@@ -36,10 +36,13 @@ config ARCH_R8A7740
        select RENESAS_INTC_IRQPIN
 
 config ARCH_R8A7778
-       bool "R-Car M1 (R8A77780)"
+       bool "R-Car M1A (R8A77781)"
+       select ARCH_WANT_OPTIONAL_GPIOLIB
        select CPU_V7
        select SH_CLK_CPG
        select ARM_GIC
+       select USB_ARCH_HAS_EHCI
+       select USB_ARCH_HAS_OHCI
 
 config ARCH_R8A7779
        bool "R-Car H1 (R8A77790)"
@@ -68,27 +71,6 @@ config ARCH_EMEV2
 
 comment "SH-Mobile Board Type"
 
-config MACH_AP4EVB
-       bool "AP4EVB board"
-       depends on ARCH_SH7372
-       select ARCH_REQUIRE_GPIOLIB
-       select REGULATOR_FIXED_VOLTAGE if REGULATOR
-       select SH_LCD_MIPI_DSI
-       select SND_SOC_AK4642 if SND_SIMPLE_CARD
-
-choice
-       prompt "AP4EVB LCD panel selection"
-       default AP4EVB_QHD
-       depends on MACH_AP4EVB
-
-config AP4EVB_QHD
-       bool "MIPI-DSI QHD (960x540)"
-
-config AP4EVB_WVGA
-       bool "Parallel WVGA (800x480)"
-
-endchoice
-
 config MACH_AG5EVM
        bool "AG5EVM board"
        depends on ARCH_SH73A0
@@ -115,12 +97,6 @@ config MACH_KOTA2
        select ARCH_REQUIRE_GPIOLIB
        select REGULATOR_FIXED_VOLTAGE if REGULATOR
 
-config MACH_BONITO
-       bool "bonito board"
-       depends on ARCH_R8A7740
-       select ARCH_REQUIRE_GPIOLIB
-       select REGULATOR_FIXED_VOLTAGE if REGULATOR
-
 config MACH_ARMADILLO800EVA
        bool "Armadillo-800 EVA board"
        depends on ARCH_R8A7740
@@ -169,6 +145,8 @@ config MACH_KZM9D
 config MACH_KZM9G
        bool "KZM-A9-GT board"
        depends on ARCH_SH73A0
+       select ARCH_HAS_CPUFREQ
+       select ARCH_HAS_OPP
        select ARCH_REQUIRE_GPIOLIB
        select REGULATOR_FIXED_VOLTAGE if REGULATOR
        select SND_SOC_AK4642 if SND_SIMPLE_CARD
@@ -194,37 +172,6 @@ config CPU_HAS_INTEVT
         bool
        default y
 
-menu "Memory configuration"
-
-config MEMORY_START
-       hex "Physical memory start address"
-       default "0x40000000" if MACH_AP4EVB || MACH_AG5EVM || \
-                               MACH_MACKEREL || MACH_BONITO || \
-                               MACH_ARMADILLO800EVA || MACH_APE6EVM || \
-                               MACH_LAGER
-       default "0x41000000" if MACH_KOTA2
-       default "0x00000000"
-       ---help---
-         Tweak this only when porting to a new machine which does not
-         already have a defconfig. Changing it from the known correct
-         value on any of the known systems will only lead to disaster.
-
-config MEMORY_SIZE
-       hex "Physical memory size"
-       default "0x80000000" if MACH_LAGER
-       default "0x40000000" if MACH_APE6EVM
-       default "0x20000000" if MACH_AG5EVM || MACH_BONITO || \
-                               MACH_ARMADILLO800EVA
-       default "0x1e000000" if MACH_KOTA2
-       default "0x10000000" if MACH_AP4EVB || MACH_MACKEREL
-       default "0x04000000"
-       help
-         This sets the default memory size assumed by your kernel. It can
-         be overridden as normal by the 'mem=' argument on the kernel command
-         line.
-
-endmenu
-
 menu "Timer and clock configuration"
 
 config SHMOBILE_TIMER_HZ
index 068f1dadc46b0e9b1cdf62cf328b68d0b6a7439c..76f1639c594541ec2203c0ffa2a506aa19c49ff7 100644 (file)
@@ -35,12 +35,10 @@ obj-$(CONFIG_ARCH_R8A7779)  += pm-r8a7779.o
 obj-$(CONFIG_ARCH_SH73A0)      += pm-sh73a0.o
 
 # Board objects
-obj-$(CONFIG_MACH_AP4EVB)      += board-ap4evb.o
 obj-$(CONFIG_MACH_AG5EVM)      += board-ag5evm.o
 obj-$(CONFIG_MACH_APE6EVM)     += board-ape6evm.o
 obj-$(CONFIG_MACH_MACKEREL)    += board-mackerel.o
 obj-$(CONFIG_MACH_KOTA2)       += board-kota2.o
-obj-$(CONFIG_MACH_BONITO)      += board-bonito.o
 obj-$(CONFIG_MACH_BOCKW)       += board-bockw.o
 obj-$(CONFIG_MACH_MARZEN)      += board-marzen.o
 obj-$(CONFIG_MACH_MARZEN_REFERENCE)    += board-marzen-reference.o
index 498efd99338d85b89e8d518a62f60b3299ee10c2..84c6868580f046c43677f34a416e0b70e39a413c 100644 (file)
@@ -1,6 +1,20 @@
-__ZRELADDR     := $(shell /bin/bash -c 'printf "0x%08x" \
-                    $$[$(CONFIG_MEMORY_START) + 0x8000]')
+# per-board load address for uImage
+loadaddr-y     :=
+loadaddr-$(CONFIG_MACH_AG5EVM) += 0x40008000
+loadaddr-$(CONFIG_MACH_APE6EVM) += 0x40008000
+loadaddr-$(CONFIG_MACH_ARMADILLO800EVA) += 0x40008000
+loadaddr-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += 0x40008000
+loadaddr-$(CONFIG_MACH_BOCKW) += 0x60008000
+loadaddr-$(CONFIG_MACH_KOTA2) += 0x41008000
+loadaddr-$(CONFIG_MACH_KZM9D) += 0x40008000
+loadaddr-$(CONFIG_MACH_KZM9G) += 0x41008000
+loadaddr-$(CONFIG_MACH_KZM9G_REFERENCE) += 0x41008000
+loadaddr-$(CONFIG_MACH_LAGER) += 0x40008000
+loadaddr-$(CONFIG_MACH_MACKEREL) += 0x40008000
+loadaddr-$(CONFIG_MACH_MARZEN) += 0x60008000
+loadaddr-$(CONFIG_MACH_MARZEN_REFERENCE) += 0x60008000
 
+__ZRELADDR     := $(sort $(loadaddr-y))
    zreladdr-y   += $(__ZRELADDR)
 
 # Unsupported legacy stuff
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c
deleted file mode 100644 (file)
index 45f78ca..0000000
+++ /dev/null
@@ -1,1332 +0,0 @@
-/*
- * AP4EVB board support
- *
- * Copyright (C) 2010  Magnus Damm
- * Copyright (C) 2008  Yoshihiro Shimoda
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-#include <linux/clk.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/platform_device.h>
-#include <linux/delay.h>
-#include <linux/mfd/tmio.h>
-#include <linux/mmc/host.h>
-#include <linux/mmc/sh_mobile_sdhi.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/mtd/physmap.h>
-#include <linux/mmc/sh_mmcif.h>
-#include <linux/i2c.h>
-#include <linux/i2c/tsc2007.h>
-#include <linux/io.h>
-#include <linux/pinctrl/machine.h>
-#include <linux/regulator/fixed.h>
-#include <linux/regulator/machine.h>
-#include <linux/smsc911x.h>
-#include <linux/sh_intc.h>
-#include <linux/sh_clk.h>
-#include <linux/gpio.h>
-#include <linux/input.h>
-#include <linux/leds.h>
-#include <linux/input/sh_keysc.h>
-#include <linux/usb/r8a66597.h>
-#include <linux/pm_clock.h>
-#include <linux/dma-mapping.h>
-
-#include <media/sh_mobile_ceu.h>
-#include <media/sh_mobile_csi2.h>
-#include <media/soc_camera.h>
-
-#include <sound/sh_fsi.h>
-#include <sound/simple_card.h>
-
-#include <video/sh_mobile_hdmi.h>
-#include <video/sh_mobile_lcdc.h>
-#include <video/sh_mipi_dsi.h>
-
-#include <mach/common.h>
-#include <mach/irqs.h>
-#include <mach/sh7372.h>
-
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
-#include <asm/setup.h>
-
-#include "sh-gpio.h"
-
-/*
- * Address     Interface               BusWidth        note
- * ------------------------------------------------------------------
- * 0x0000_0000 NOR Flash ROM (MCP)     16bit           SW7 : bit1 = ON
- * 0x0800_0000 user area               -
- * 0x1000_0000 NOR Flash ROM (MCP)     16bit           SW7 : bit1 = OFF
- * 0x1400_0000 Ether (LAN9220)         16bit
- * 0x1600_0000 user area               -               cannot use with NAND
- * 0x1800_0000 user area               -
- * 0x1A00_0000 -
- * 0x4000_0000 LPDDR2-SDRAM (POP)      32bit
- */
-
-/*
- * NOR Flash ROM
- *
- *  SW1  |     SW2    | SW7  | NOR Flash ROM
- *  bit1 | bit1  bit2 | bit1 | Memory allocation
- * ------+------------+------+------------------
- *  OFF  | ON     OFF | ON   |    Area 0
- *  OFF  | ON     OFF | OFF  |    Area 4
- */
-
-/*
- * NAND Flash ROM
- *
- *  SW1  |     SW2    | SW7  | NAND Flash ROM
- *  bit1 | bit1  bit2 | bit2 | Memory allocation
- * ------+------------+------+------------------
- *  OFF  | ON     OFF | ON   |    FCE 0
- *  OFF  | ON     OFF | OFF  |    FCE 1
- */
-
-/*
- * SMSC 9220
- *
- *  SW1                SMSC 9220
- * -----------------------
- *  ON         access disable
- *  OFF                access enable
- */
-
-/*
- * LCD / IRQ / KEYSC / IrDA
- *
- * IRQ = IRQ26 (TS), IRQ27 (VIO), IRQ28 (QHD-TouchScreen)
- * LCD = 2nd LCDC (WVGA)
- *
- *             |               SW43                    |
- * SW3         |       ON              |       OFF     |
- * -------------+-----------------------+---------------+
- * ON          | KEY / IrDA            | LCD           |
- * OFF         | KEY / IrDA / IRQ      | IRQ           |
- *
- *
- * QHD / WVGA display
- *
- * You can choice display type on menuconfig.
- * Then, check above dip-switch.
- */
-
-/*
- * USB
- *
- * J7 : 1-2  MAX3355E VBUS
- *      2-3  DC 5.0V
- *
- * S39: bit2: off
- */
-
-/*
- * FSI/FSMI
- *
- * SW41        :  ON : SH-Mobile AP4 Audio Mode
- *     : OFF : Bluetooth Audio Mode
- *
- * it needs amixer settings for playing
- *
- * amixer set "Headphone Enable" on
- */
-
-/*
- * MMC0/SDHI1 (CN7)
- *
- * J22 : select card voltage
- *       1-2 pin : 1.8v
- *       2-3 pin : 3.3v
- *
- *        SW1  |             SW33
- *             | bit1 | bit2 | bit3 | bit4
- * ------------+------+------+------+-------
- * MMC0   OFF  |  OFF |  ON  |  ON  |  X
- * SDHI1  OFF  |  ON  |   X  |  OFF | ON
- *
- * voltage lebel
- * CN7 : 1.8v
- * CN12: 3.3v
- */
-
-/* Dummy supplies, where voltage doesn't matter */
-static struct regulator_consumer_supply fixed1v8_power_consumers[] =
-{
-       /* J22 default position: 1.8V */
-       REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
-       REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
-       REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
-       REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
-};
-
-static struct regulator_consumer_supply fixed3v3_power_consumers[] =
-{
-       REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
-       REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
-};
-
-static struct regulator_consumer_supply dummy_supplies[] = {
-       REGULATOR_SUPPLY("vddvario", "smsc911x"),
-       REGULATOR_SUPPLY("vdd33a", "smsc911x"),
-};
-
-/* MTD */
-static struct mtd_partition nor_flash_partitions[] = {
-       {
-               .name           = "loader",
-               .offset         = 0x00000000,
-               .size           = 512 * 1024,
-               .mask_flags     = MTD_WRITEABLE,
-       },
-       {
-               .name           = "bootenv",
-               .offset         = MTDPART_OFS_APPEND,
-               .size           = 512 * 1024,
-               .mask_flags     = MTD_WRITEABLE,
-       },
-       {
-               .name           = "kernel_ro",
-               .offset         = MTDPART_OFS_APPEND,
-               .size           = 8 * 1024 * 1024,
-               .mask_flags     = MTD_WRITEABLE,
-       },
-       {
-               .name           = "kernel",
-               .offset         = MTDPART_OFS_APPEND,
-               .size           = 8 * 1024 * 1024,
-       },
-       {
-               .name           = "data",
-               .offset         = MTDPART_OFS_APPEND,
-               .size           = MTDPART_SIZ_FULL,
-       },
-};
-
-static struct physmap_flash_data nor_flash_data = {
-       .width          = 2,
-       .parts          = nor_flash_partitions,
-       .nr_parts       = ARRAY_SIZE(nor_flash_partitions),
-};
-
-static struct resource nor_flash_resources[] = {
-       [0]     = {
-               .start  = 0x20000000, /* CS0 shadow instead of regular CS0 */
-               .end    = 0x28000000 - 1, /* needed by USB MASK ROM boot */
-               .flags  = IORESOURCE_MEM,
-       }
-};
-
-static struct platform_device nor_flash_device = {
-       .name           = "physmap-flash",
-       .dev            = {
-               .platform_data  = &nor_flash_data,
-       },
-       .num_resources  = ARRAY_SIZE(nor_flash_resources),
-       .resource       = nor_flash_resources,
-};
-
-/* SMSC 9220 */
-static struct resource smc911x_resources[] = {
-       {
-               .start  = 0x14000000,
-               .end    = 0x16000000 - 1,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = evt2irq(0x02c0) /* IRQ6A */,
-               .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
-       },
-};
-
-static struct smsc911x_platform_config smsc911x_info = {
-       .flags          = SMSC911X_USE_16BIT | SMSC911X_SAVE_MAC_ADDRESS,
-       .irq_polarity   = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
-       .irq_type       = SMSC911X_IRQ_TYPE_PUSH_PULL,
-};
-
-static struct platform_device smc911x_device = {
-       .name           = "smsc911x",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(smc911x_resources),
-       .resource       = smc911x_resources,
-       .dev            = {
-               .platform_data = &smsc911x_info,
-       },
-};
-
-/*
- * The card detect pin of the top SD/MMC slot (CN7) is active low and is
- * connected to GPIO A22 of SH7372 (GPIO 41).
- */
-static int slot_cn7_get_cd(struct platform_device *pdev)
-{
-       return !gpio_get_value(41);
-}
-/* MERAM */
-static struct sh_mobile_meram_info meram_info = {
-       .addr_mode      = SH_MOBILE_MERAM_MODE1,
-};
-
-static struct resource meram_resources[] = {
-       [0] = {
-               .name   = "regs",
-               .start  = 0xe8000000,
-               .end    = 0xe807ffff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .name   = "meram",
-               .start  = 0xe8080000,
-               .end    = 0xe81fffff,
-               .flags  = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device meram_device = {
-       .name           = "sh_mobile_meram",
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(meram_resources),
-       .resource       = meram_resources,
-       .dev            = {
-               .platform_data = &meram_info,
-       },
-};
-
-/* SH_MMCIF */
-static struct resource sh_mmcif_resources[] = {
-       [0] = {
-               .name   = "MMCIF",
-               .start  = 0xE6BD0000,
-               .end    = 0xE6BD00FF,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               /* MMC ERR */
-               .start  = evt2irq(0x1ac0),
-               .flags  = IORESOURCE_IRQ,
-       },
-       [2] = {
-               /* MMC NOR */
-               .start  = evt2irq(0x1ae0),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct sh_mmcif_plat_data sh_mmcif_plat = {
-       .sup_pclk       = 0,
-       .ocr            = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
-       .caps           = MMC_CAP_4_BIT_DATA |
-                         MMC_CAP_8_BIT_DATA |
-                         MMC_CAP_NEEDS_POLL,
-       .get_cd         = slot_cn7_get_cd,
-       .slave_id_tx    = SHDMA_SLAVE_MMCIF_TX,
-       .slave_id_rx    = SHDMA_SLAVE_MMCIF_RX,
-};
-
-static struct platform_device sh_mmcif_device = {
-       .name           = "sh_mmcif",
-       .id             = 0,
-       .dev            = {
-               .dma_mask               = NULL,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &sh_mmcif_plat,
-       },
-       .num_resources  = ARRAY_SIZE(sh_mmcif_resources),
-       .resource       = sh_mmcif_resources,
-};
-
-/* SDHI0 */
-static struct sh_mobile_sdhi_info sdhi0_info = {
-       .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
-       .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
-       .tmio_caps      = MMC_CAP_SDIO_IRQ,
-};
-
-static struct resource sdhi0_resources[] = {
-       [0] = {
-               .name   = "SDHI0",
-               .start  = 0xe6850000,
-               .end    = 0xe68500ff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = evt2irq(0x0e00) /* SDHI0_SDHI0I0 */,
-               .flags  = IORESOURCE_IRQ,
-       },
-       [2] = {
-               .start  = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */,
-               .flags  = IORESOURCE_IRQ,
-       },
-       [3] = {
-               .start  = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device sdhi0_device = {
-       .name           = "sh_mobile_sdhi",
-       .num_resources  = ARRAY_SIZE(sdhi0_resources),
-       .resource       = sdhi0_resources,
-       .id             = 0,
-       .dev    = {
-               .platform_data  = &sdhi0_info,
-       },
-};
-
-/* SDHI1 */
-static struct sh_mobile_sdhi_info sdhi1_info = {
-       .dma_slave_tx   = SHDMA_SLAVE_SDHI1_TX,
-       .dma_slave_rx   = SHDMA_SLAVE_SDHI1_RX,
-       .tmio_ocr_mask  = MMC_VDD_165_195,
-       .tmio_flags     = TMIO_MMC_WRPROTECT_DISABLE,
-       .tmio_caps      = MMC_CAP_NEEDS_POLL | MMC_CAP_SDIO_IRQ,
-       .get_cd         = slot_cn7_get_cd,
-};
-
-static struct resource sdhi1_resources[] = {
-       [0] = {
-               .name   = "SDHI1",
-               .start  = 0xe6860000,
-               .end    = 0xe68600ff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = evt2irq(0x0e80), /* SDHI1_SDHI1I0 */
-               .flags  = IORESOURCE_IRQ,
-       },
-       [2] = {
-               .start  = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */
-               .flags  = IORESOURCE_IRQ,
-       },
-       [3] = {
-               .start  = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device sdhi1_device = {
-       .name           = "sh_mobile_sdhi",
-       .num_resources  = ARRAY_SIZE(sdhi1_resources),
-       .resource       = sdhi1_resources,
-       .id             = 1,
-       .dev    = {
-               .platform_data  = &sdhi1_info,
-       },
-};
-
-/* USB1 */
-static void usb1_host_port_power(int port, int power)
-{
-       if (!power) /* only power-on supported for now */
-               return;
-
-       /* set VBOUT/PWEN and EXTLP1 in DVSTCTR */
-       __raw_writew(__raw_readw(IOMEM(0xE68B0008)) | 0x600, IOMEM(0xE68B0008));
-}
-
-static struct r8a66597_platdata usb1_host_data = {
-       .on_chip        = 1,
-       .port_power     = usb1_host_port_power,
-};
-
-static struct resource usb1_host_resources[] = {
-       [0] = {
-               .name   = "USBHS",
-               .start  = 0xE68B0000,
-               .end    = 0xE68B00E6 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = evt2irq(0x1ce0) /* USB1_USB1I0 */,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device usb1_host_device = {
-       .name   = "r8a66597_hcd",
-       .id     = 1,
-       .dev = {
-               .dma_mask               = NULL,         /*  not use dma */
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &usb1_host_data,
-       },
-       .num_resources  = ARRAY_SIZE(usb1_host_resources),
-       .resource       = usb1_host_resources,
-};
-
-/*
- * QHD display
- */
-#ifdef CONFIG_AP4EVB_QHD
-
-/* KEYSC (Needs SW43 set to ON) */
-static struct sh_keysc_info keysc_info = {
-       .mode           = SH_KEYSC_MODE_1,
-       .scan_timing    = 3,
-       .delay          = 2500,
-       .keycodes = {
-               KEY_0, KEY_1, KEY_2, KEY_3, KEY_4,
-               KEY_5, KEY_6, KEY_7, KEY_8, KEY_9,
-               KEY_A, KEY_B, KEY_C, KEY_D, KEY_E,
-               KEY_F, KEY_G, KEY_H, KEY_I, KEY_J,
-               KEY_K, KEY_L, KEY_M, KEY_N, KEY_O,
-       },
-};
-
-static struct resource keysc_resources[] = {
-       [0] = {
-               .name   = "KEYSC",
-               .start  = 0xe61b0000,
-               .end    = 0xe61b0063,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = evt2irq(0x0be0), /* KEYSC_KEY */
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device keysc_device = {
-       .name           = "sh_keysc",
-       .id             = 0, /* "keysc0" clock */
-       .num_resources  = ARRAY_SIZE(keysc_resources),
-       .resource       = keysc_resources,
-       .dev    = {
-               .platform_data  = &keysc_info,
-       },
-};
-
-/* MIPI-DSI */
-static int sh_mipi_set_dot_clock(struct platform_device *pdev,
-                                void __iomem *base,
-                                int enable)
-{
-       struct clk *pck = clk_get(&pdev->dev, "dsip_clk");
-
-       if (IS_ERR(pck))
-               return PTR_ERR(pck);
-
-       if (enable) {
-               /*
-                * DSIPCLK      = 24MHz
-                * D-PHY        = DSIPCLK * ((0x6*2)+1) = 312MHz (see .phyctrl)
-                * HsByteCLK    = D-PHY/8 = 39MHz
-                *
-                *  X * Y * FPS =
-                * (544+72+600+16) * (961+8+8+2) * 30 = 36.1MHz
-                */
-               clk_set_rate(pck, clk_round_rate(pck, 24000000));
-               clk_enable(pck);
-       } else {
-               clk_disable(pck);
-       }
-
-       clk_put(pck);
-
-       return 0;
-}
-
-static struct resource mipidsi0_resources[] = {
-       [0] = {
-               .start  = 0xffc60000,
-               .end    = 0xffc63073,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = 0xffc68000,
-               .end    = 0xffc680ef,
-               .flags  = IORESOURCE_MEM,
-       },
-};
-
-static struct sh_mipi_dsi_info mipidsi0_info = {
-       .data_format    = MIPI_RGB888,
-       .channel        = LCDC_CHAN_MAINLCD,
-       .lane           = 2,
-       .vsynw_offset   = 17,
-       .phyctrl        = 0x6 << 8,
-       .flags          = SH_MIPI_DSI_SYNC_PULSES_MODE |
-                         SH_MIPI_DSI_HSbyteCLK,
-       .set_dot_clock  = sh_mipi_set_dot_clock,
-};
-
-static struct platform_device mipidsi0_device = {
-       .name           = "sh-mipi-dsi",
-       .num_resources  = ARRAY_SIZE(mipidsi0_resources),
-       .resource       = mipidsi0_resources,
-       .id             = 0,
-       .dev    = {
-               .platform_data  = &mipidsi0_info,
-       },
-};
-
-static struct platform_device *qhd_devices[] __initdata = {
-       &mipidsi0_device,
-       &keysc_device,
-};
-#endif /* CONFIG_AP4EVB_QHD */
-
-/* LCDC0 */
-static const struct fb_videomode ap4evb_lcdc_modes[] = {
-       {
-#ifdef CONFIG_AP4EVB_QHD
-               .name           = "R63302(QHD)",
-               .xres           = 544,
-               .yres           = 961,
-               .left_margin    = 72,
-               .right_margin   = 600,
-               .hsync_len      = 16,
-               .upper_margin   = 8,
-               .lower_margin   = 8,
-               .vsync_len      = 2,
-               .sync           = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT,
-#else
-               .name           = "WVGA Panel",
-               .xres           = 800,
-               .yres           = 480,
-               .left_margin    = 220,
-               .right_margin   = 110,
-               .hsync_len      = 70,
-               .upper_margin   = 20,
-               .lower_margin   = 5,
-               .vsync_len      = 5,
-               .sync           = 0,
-#endif
-       },
-};
-
-static const struct sh_mobile_meram_cfg lcd_meram_cfg = {
-       .icb[0] = {
-               .meram_size     = 0x40,
-       },
-       .icb[1] = {
-               .meram_size     = 0x40,
-       },
-};
-
-static struct sh_mobile_lcdc_info lcdc_info = {
-       .meram_dev = &meram_info,
-       .ch[0] = {
-               .chan = LCDC_CHAN_MAINLCD,
-               .fourcc = V4L2_PIX_FMT_RGB565,
-               .lcd_modes = ap4evb_lcdc_modes,
-               .num_modes = ARRAY_SIZE(ap4evb_lcdc_modes),
-               .meram_cfg = &lcd_meram_cfg,
-#ifdef CONFIG_AP4EVB_QHD
-               .tx_dev = &mipidsi0_device,
-#endif
-       }
-};
-
-static struct resource lcdc_resources[] = {
-       [0] = {
-               .name   = "LCDC",
-               .start  = 0xfe940000, /* P4-only space */
-               .end    = 0xfe943fff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = intcs_evt2irq(0x580),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device lcdc_device = {
-       .name           = "sh_mobile_lcdc_fb",
-       .num_resources  = ARRAY_SIZE(lcdc_resources),
-       .resource       = lcdc_resources,
-       .dev    = {
-               .platform_data  = &lcdc_info,
-               .coherent_dma_mask = ~0,
-       },
-};
-
-/* FSI */
-#define IRQ_FSI                evt2irq(0x1840)
-static struct sh_fsi_platform_info fsi_info = {
-       .port_b = {
-               .flags          = SH_FSI_CLK_CPG |
-                                 SH_FSI_FMT_SPDIF,
-       },
-};
-
-static struct resource fsi_resources[] = {
-       [0] = {
-               .name   = "FSI",
-               .start  = 0xFE3C0000,
-               .end    = 0xFE3C0400 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = IRQ_FSI,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device fsi_device = {
-       .name           = "sh_fsi2",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(fsi_resources),
-       .resource       = fsi_resources,
-       .dev    = {
-               .platform_data  = &fsi_info,
-       },
-};
-
-static struct asoc_simple_card_info fsi2_ak4643_info = {
-       .name           = "AK4643",
-       .card           = "FSI2A-AK4643",
-       .codec          = "ak4642-codec.0-0013",
-       .platform       = "sh_fsi2",
-       .daifmt         = SND_SOC_DAIFMT_LEFT_J,
-       .cpu_dai = {
-               .name   = "fsia-dai",
-               .fmt    = SND_SOC_DAIFMT_CBS_CFS,
-       },
-       .codec_dai = {
-               .name   = "ak4642-hifi",
-               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
-               .sysclk = 11289600,
-       },
-};
-
-static struct platform_device fsi_ak4643_device = {
-       .name   = "asoc-simple-card",
-       .dev    = {
-               .platform_data  = &fsi2_ak4643_info,
-       },
-};
-
-/* LCDC1 */
-static long ap4evb_clk_optimize(unsigned long target, unsigned long *best_freq,
-                               unsigned long *parent_freq);
-
-static struct sh_mobile_hdmi_info hdmi_info = {
-       .flags = HDMI_SND_SRC_SPDIF,
-       .clk_optimize_parent = ap4evb_clk_optimize,
-};
-
-static struct resource hdmi_resources[] = {
-       [0] = {
-               .name   = "HDMI",
-               .start  = 0xe6be0000,
-               .end    = 0xe6be00ff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               /* There's also an HDMI interrupt on INTCS @ 0x18e0 */
-               .start  = evt2irq(0x17e0),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device hdmi_device = {
-       .name           = "sh-mobile-hdmi",
-       .num_resources  = ARRAY_SIZE(hdmi_resources),
-       .resource       = hdmi_resources,
-       .id             = -1,
-       .dev    = {
-               .platform_data  = &hdmi_info,
-       },
-};
-
-static long ap4evb_clk_optimize(unsigned long target, unsigned long *best_freq,
-                               unsigned long *parent_freq)
-{
-       struct clk *hdmi_ick = clk_get(&hdmi_device.dev, "ick");
-       long error;
-
-       if (IS_ERR(hdmi_ick)) {
-               int ret = PTR_ERR(hdmi_ick);
-               pr_err("Cannot get HDMI ICK: %d\n", ret);
-               return ret;
-       }
-
-       error = clk_round_parent(hdmi_ick, target, best_freq, parent_freq, 1, 64);
-
-       clk_put(hdmi_ick);
-
-       return error;
-}
-
-static const struct sh_mobile_meram_cfg hdmi_meram_cfg = {
-       .icb[0] = {
-               .meram_size     = 0x100,
-       },
-       .icb[1] = {
-               .meram_size     = 0x100,
-       },
-};
-
-static struct sh_mobile_lcdc_info sh_mobile_lcdc1_info = {
-       .clock_source = LCDC_CLK_EXTERNAL,
-       .meram_dev = &meram_info,
-       .ch[0] = {
-               .chan = LCDC_CHAN_MAINLCD,
-               .fourcc = V4L2_PIX_FMT_RGB565,
-               .interface_type = RGB24,
-               .clock_divider = 1,
-               .flags = LCDC_FLAGS_DWPOL,
-               .meram_cfg = &hdmi_meram_cfg,
-               .tx_dev = &hdmi_device,
-       }
-};
-
-static struct resource lcdc1_resources[] = {
-       [0] = {
-               .name   = "LCDC1",
-               .start  = 0xfe944000,
-               .end    = 0xfe947fff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = intcs_evt2irq(0x1780),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device lcdc1_device = {
-       .name           = "sh_mobile_lcdc_fb",
-       .num_resources  = ARRAY_SIZE(lcdc1_resources),
-       .resource       = lcdc1_resources,
-       .id             = 1,
-       .dev    = {
-               .platform_data  = &sh_mobile_lcdc1_info,
-               .coherent_dma_mask = ~0,
-       },
-};
-
-static struct asoc_simple_card_info fsi2_hdmi_info = {
-       .name           = "HDMI",
-       .card           = "FSI2B-HDMI",
-       .codec          = "sh-mobile-hdmi",
-       .platform       = "sh_fsi2",
-       .cpu_dai = {
-               .name   = "fsib-dai",
-               .fmt    = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF,
-       },
-       .codec_dai = {
-               .name   = "sh_mobile_hdmi-hifi",
-       },
-};
-
-static struct platform_device fsi_hdmi_device = {
-       .name   = "asoc-simple-card",
-       .id     = 1,
-       .dev    = {
-               .platform_data  = &fsi2_hdmi_info,
-       },
-};
-
-static struct gpio_led ap4evb_leds[] = {
-       {
-               .name                   = "led4",
-               .gpio                   = 185,
-               .default_state  = LEDS_GPIO_DEFSTATE_ON,
-       },
-       {
-               .name                   = "led2",
-               .gpio                   = 186,
-               .default_state  = LEDS_GPIO_DEFSTATE_ON,
-       },
-       {
-               .name                   = "led3",
-               .gpio                   = 187,
-               .default_state  = LEDS_GPIO_DEFSTATE_ON,
-       },
-       {
-               .name                   = "led1",
-               .gpio                   = 188,
-               .default_state  = LEDS_GPIO_DEFSTATE_ON,
-       }
-};
-
-static struct gpio_led_platform_data ap4evb_leds_pdata = {
-       .num_leds = ARRAY_SIZE(ap4evb_leds),
-       .leds = ap4evb_leds,
-};
-
-static struct platform_device leds_device = {
-       .name = "leds-gpio",
-       .id = 0,
-       .dev = {
-               .platform_data  = &ap4evb_leds_pdata,
-       },
-};
-
-static struct i2c_board_info imx074_info = {
-       I2C_BOARD_INFO("imx074", 0x1a),
-};
-
-static struct soc_camera_link imx074_link = {
-       .bus_id         = 0,
-       .board_info     = &imx074_info,
-       .i2c_adapter_id = 0,
-       .module_name    = "imx074",
-};
-
-static struct platform_device ap4evb_camera = {
-       .name   = "soc-camera-pdrv",
-       .id     = 0,
-       .dev    = {
-               .platform_data = &imx074_link,
-       },
-};
-
-static struct sh_csi2_client_config csi2_clients[] = {
-       {
-               .phy            = SH_CSI2_PHY_MAIN,
-               .lanes          = 0,            /* default: 2 lanes */
-               .channel        = 0,
-               .pdev           = &ap4evb_camera,
-       },
-};
-
-static struct sh_csi2_pdata csi2_info = {
-       .type           = SH_CSI2C,
-       .clients        = csi2_clients,
-       .num_clients    = ARRAY_SIZE(csi2_clients),
-       .flags          = SH_CSI2_ECC | SH_CSI2_CRC,
-};
-
-static struct resource csi2_resources[] = {
-       [0] = {
-               .name   = "CSI2",
-               .start  = 0xffc90000,
-               .end    = 0xffc90fff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = intcs_evt2irq(0x17a0),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct sh_mobile_ceu_companion csi2 = {
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(csi2_resources),
-       .resource       = csi2_resources,
-       .platform_data  = &csi2_info,
-};
-
-static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
-       .flags = SH_CEU_FLAG_USE_8BIT_BUS,
-       .max_width = 8188,
-       .max_height = 8188,
-       .csi2 = &csi2,
-};
-
-static struct resource ceu_resources[] = {
-       [0] = {
-               .name   = "CEU",
-               .start  = 0xfe910000,
-               .end    = 0xfe91009f,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = intcs_evt2irq(0x880),
-               .flags  = IORESOURCE_IRQ,
-       },
-       [2] = {
-               /* place holder for contiguous memory */
-       },
-};
-
-static struct platform_device ceu_device = {
-       .name           = "sh_mobile_ceu",
-       .id             = 0, /* "ceu0" clock */
-       .num_resources  = ARRAY_SIZE(ceu_resources),
-       .resource       = ceu_resources,
-       .dev    = {
-               .platform_data          = &sh_mobile_ceu_info,
-               .coherent_dma_mask      = 0xffffffff,
-       },
-};
-
-static struct platform_device *ap4evb_devices[] __initdata = {
-       &leds_device,
-       &nor_flash_device,
-       &smc911x_device,
-       &sdhi0_device,
-       &sdhi1_device,
-       &usb1_host_device,
-       &fsi_device,
-       &fsi_ak4643_device,
-       &fsi_hdmi_device,
-       &sh_mmcif_device,
-       &hdmi_device,
-       &lcdc_device,
-       &lcdc1_device,
-       &ceu_device,
-       &ap4evb_camera,
-       &meram_device,
-};
-
-static void __init hdmi_init_pm_clock(void)
-{
-       struct clk *hdmi_ick = clk_get(&hdmi_device.dev, "ick");
-       int ret;
-       long rate;
-
-       if (IS_ERR(hdmi_ick)) {
-               ret = PTR_ERR(hdmi_ick);
-               pr_err("Cannot get HDMI ICK: %d\n", ret);
-               goto out;
-       }
-
-       ret = clk_set_parent(&sh7372_pllc2_clk, &sh7372_dv_clki_div2_clk);
-       if (ret < 0) {
-               pr_err("Cannot set PLLC2 parent: %d, %d users\n", ret, sh7372_pllc2_clk.usecount);
-               goto out;
-       }
-
-       pr_debug("PLLC2 initial frequency %lu\n", clk_get_rate(&sh7372_pllc2_clk));
-
-       rate = clk_round_rate(&sh7372_pllc2_clk, 594000000);
-       if (rate < 0) {
-               pr_err("Cannot get suitable rate: %ld\n", rate);
-               ret = rate;
-               goto out;
-       }
-
-       ret = clk_set_rate(&sh7372_pllc2_clk, rate);
-       if (ret < 0) {
-               pr_err("Cannot set rate %ld: %d\n", rate, ret);
-               goto out;
-       }
-
-       pr_debug("PLLC2 set frequency %lu\n", rate);
-
-       ret = clk_set_parent(hdmi_ick, &sh7372_pllc2_clk);
-       if (ret < 0)
-               pr_err("Cannot set HDMI parent: %d\n", ret);
-
-out:
-       if (!IS_ERR(hdmi_ick))
-               clk_put(hdmi_ick);
-}
-
-/* TouchScreen */
-#ifdef CONFIG_AP4EVB_QHD
-# define GPIO_TSC_IRQ  GPIO_FN_IRQ28_123
-# define GPIO_TSC_PORT 123
-#else /* WVGA */
-# define GPIO_TSC_IRQ  GPIO_FN_IRQ7_40
-# define GPIO_TSC_PORT 40
-#endif
-
-#define IRQ28  evt2irq(0x3380) /* IRQ28A */
-#define IRQ7   evt2irq(0x02e0) /* IRQ7A */
-static int ts_get_pendown_state(void)
-{
-       int val;
-
-       gpio_free(GPIO_TSC_IRQ);
-
-       gpio_request_one(GPIO_TSC_PORT, GPIOF_IN, NULL);
-
-       val = gpio_get_value(GPIO_TSC_PORT);
-
-       gpio_request(GPIO_TSC_IRQ, NULL);
-
-       return !val;
-}
-
-static int ts_init(void)
-{
-       gpio_request(GPIO_TSC_IRQ, NULL);
-
-       return 0;
-}
-
-static struct tsc2007_platform_data tsc2007_info = {
-       .model                  = 2007,
-       .x_plate_ohms           = 180,
-       .get_pendown_state      = ts_get_pendown_state,
-       .init_platform_hw       = ts_init,
-};
-
-static struct i2c_board_info tsc_device = {
-       I2C_BOARD_INFO("tsc2007", 0x48),
-       .type           = "tsc2007",
-       .platform_data  = &tsc2007_info,
-       /*.irq is selected on ap4evb_init */
-};
-
-/* I2C */
-static struct i2c_board_info i2c0_devices[] = {
-       {
-               I2C_BOARD_INFO("ak4643", 0x13),
-       },
-};
-
-static struct i2c_board_info i2c1_devices[] = {
-       {
-               I2C_BOARD_INFO("r2025sd", 0x32),
-       },
-};
-
-
-static const struct pinctrl_map ap4evb_pinctrl_map[] = {
-       /* MMCIF */
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372",
-                                 "mmc0_data8_0", "mmc0"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372",
-                                 "mmc0_ctrl_0", "mmc0"),
-       /* SDHI0 */
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
-                                 "sdhi0_data4", "sdhi0"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
-                                 "sdhi0_ctrl", "sdhi0"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
-                                 "sdhi0_cd", "sdhi0"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
-                                 "sdhi0_wp", "sdhi0"),
-       /* SDHI1 */
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
-                                 "sdhi1_data4", "sdhi1"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
-                                 "sdhi1_ctrl", "sdhi1"),
-};
-
-#define GPIO_PORT9CR   IOMEM(0xE6051009)
-#define GPIO_PORT10CR  IOMEM(0xE605100A)
-#define USCCR1         IOMEM(0xE6058144)
-static void __init ap4evb_init(void)
-{
-       struct pm_domain_device domain_devices[] = {
-               { "A4LC", &lcdc1_device, },
-               { "A4LC", &lcdc_device, },
-               { "A4MP", &fsi_device, },
-               { "A3SP", &sh_mmcif_device, },
-               { "A3SP", &sdhi0_device, },
-               { "A3SP", &sdhi1_device, },
-               { "A4R", &ceu_device, },
-       };
-       u32 srcr4;
-       struct clk *clk;
-
-       regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
-                                    ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
-       regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers,
-                                    ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
-       regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
-
-       /* External clock source */
-       clk_set_rate(&sh7372_dv_clki_clk, 27000000);
-
-       pinctrl_register_mappings(ap4evb_pinctrl_map,
-                                 ARRAY_SIZE(ap4evb_pinctrl_map));
-       sh7372_pinmux_init();
-
-       /* enable SCIFA0 */
-       gpio_request(GPIO_FN_SCIFA0_TXD, NULL);
-       gpio_request(GPIO_FN_SCIFA0_RXD, NULL);
-
-       /* enable SMSC911X */
-       gpio_request(GPIO_FN_CS5A,      NULL);
-       gpio_request(GPIO_FN_IRQ6_39,   NULL);
-
-       /* enable Debug switch (S6) */
-       gpio_request_one(32, GPIOF_IN | GPIOF_EXPORT, NULL);
-       gpio_request_one(33, GPIOF_IN | GPIOF_EXPORT, NULL);
-       gpio_request_one(34, GPIOF_IN | GPIOF_EXPORT, NULL);
-       gpio_request_one(35, GPIOF_IN | GPIOF_EXPORT, NULL);
-
-       /* USB enable */
-       gpio_request(GPIO_FN_VBUS0_1,    NULL);
-       gpio_request(GPIO_FN_IDIN_1_18,  NULL);
-       gpio_request(GPIO_FN_PWEN_1_115, NULL);
-       gpio_request(GPIO_FN_OVCN_1_114, NULL);
-       gpio_request(GPIO_FN_EXTLP_1,    NULL);
-       gpio_request(GPIO_FN_OVCN2_1,    NULL);
-
-       /* setup USB phy */
-       __raw_writew(0x8a0a, IOMEM(0xE6058130));        /* USBCR4 */
-
-       /* enable FSI2 port A (ak4643) */
-       gpio_request(GPIO_FN_FSIAIBT,   NULL);
-       gpio_request(GPIO_FN_FSIAILR,   NULL);
-       gpio_request(GPIO_FN_FSIAISLD,  NULL);
-       gpio_request(GPIO_FN_FSIAOSLD,  NULL);
-       gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */
-
-       gpio_request(9, NULL);
-       gpio_request(10, NULL);
-       gpio_direction_none(GPIO_PORT9CR);  /* FSIAOBT needs no direction */
-       gpio_direction_none(GPIO_PORT10CR); /* FSIAOLR needs no direction */
-
-       /* card detect pin for MMC slot (CN7) */
-       gpio_request_one(41, GPIOF_IN, NULL);
-
-       /* setup FSI2 port B (HDMI) */
-       gpio_request(GPIO_FN_FSIBCK, NULL);
-       __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */
-
-       /* set SPU2 clock to 119.6 MHz */
-       clk = clk_get(NULL, "spu_clk");
-       if (!IS_ERR(clk)) {
-               clk_set_rate(clk, clk_round_rate(clk, 119600000));
-               clk_put(clk);
-       }
-
-       /*
-        * set irq priority, to avoid sound chopping
-        * when NFS rootfs is used
-        *  FSI(3) > SMSC911X(2)
-        */
-       intc_set_priority(IRQ_FSI, 3);
-
-       i2c_register_board_info(0, i2c0_devices,
-                               ARRAY_SIZE(i2c0_devices));
-
-       i2c_register_board_info(1, i2c1_devices,
-                               ARRAY_SIZE(i2c1_devices));
-
-#ifdef CONFIG_AP4EVB_QHD
-
-       /*
-        * For QHD Panel (MIPI-DSI, CONFIG_AP4EVB_QHD=y) and
-        * IRQ28 for Touch Panel, set dip switches S3, S43 as OFF, ON.
-        */
-
-       /* enable KEYSC */
-       gpio_request(GPIO_FN_KEYOUT0, NULL);
-       gpio_request(GPIO_FN_KEYOUT1, NULL);
-       gpio_request(GPIO_FN_KEYOUT2, NULL);
-       gpio_request(GPIO_FN_KEYOUT3, NULL);
-       gpio_request(GPIO_FN_KEYOUT4, NULL);
-       gpio_request(GPIO_FN_KEYIN0_136, NULL);
-       gpio_request(GPIO_FN_KEYIN1_135, NULL);
-       gpio_request(GPIO_FN_KEYIN2_134, NULL);
-       gpio_request(GPIO_FN_KEYIN3_133, NULL);
-       gpio_request(GPIO_FN_KEYIN4,     NULL);
-
-       /* enable TouchScreen */
-       irq_set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW);
-
-       tsc_device.irq = IRQ28;
-       i2c_register_board_info(1, &tsc_device, 1);
-
-       /* LCDC0 */
-       lcdc_info.clock_source                  = LCDC_CLK_PERIPHERAL;
-       lcdc_info.ch[0].interface_type          = RGB24;
-       lcdc_info.ch[0].clock_divider           = 1;
-       lcdc_info.ch[0].flags                   = LCDC_FLAGS_DWPOL;
-       lcdc_info.ch[0].panel_cfg.width         = 44;
-       lcdc_info.ch[0].panel_cfg.height        = 79;
-
-       platform_add_devices(qhd_devices, ARRAY_SIZE(qhd_devices));
-
-#else
-       /*
-        * For WVGA Panel (18-bit RGB, CONFIG_AP4EVB_WVGA=y) and
-        * IRQ7 for Touch Panel, set dip switches S3, S43 to ON, OFF.
-        */
-
-       gpio_request(GPIO_FN_LCDD17,   NULL);
-       gpio_request(GPIO_FN_LCDD16,   NULL);
-       gpio_request(GPIO_FN_LCDD15,   NULL);
-       gpio_request(GPIO_FN_LCDD14,   NULL);
-       gpio_request(GPIO_FN_LCDD13,   NULL);
-       gpio_request(GPIO_FN_LCDD12,   NULL);
-       gpio_request(GPIO_FN_LCDD11,   NULL);
-       gpio_request(GPIO_FN_LCDD10,   NULL);
-       gpio_request(GPIO_FN_LCDD9,    NULL);
-       gpio_request(GPIO_FN_LCDD8,    NULL);
-       gpio_request(GPIO_FN_LCDD7,    NULL);
-       gpio_request(GPIO_FN_LCDD6,    NULL);
-       gpio_request(GPIO_FN_LCDD5,    NULL);
-       gpio_request(GPIO_FN_LCDD4,    NULL);
-       gpio_request(GPIO_FN_LCDD3,    NULL);
-       gpio_request(GPIO_FN_LCDD2,    NULL);
-       gpio_request(GPIO_FN_LCDD1,    NULL);
-       gpio_request(GPIO_FN_LCDD0,    NULL);
-       gpio_request(GPIO_FN_LCDDISP,  NULL);
-       gpio_request(GPIO_FN_LCDDCK,   NULL);
-
-       gpio_request_one(189, GPIOF_OUT_INIT_HIGH, NULL); /* backlight */
-       gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
-
-       lcdc_info.clock_source                  = LCDC_CLK_BUS;
-       lcdc_info.ch[0].interface_type          = RGB18;
-       lcdc_info.ch[0].clock_divider           = 3;
-       lcdc_info.ch[0].flags                   = 0;
-       lcdc_info.ch[0].panel_cfg.width         = 152;
-       lcdc_info.ch[0].panel_cfg.height        = 91;
-
-       /* enable TouchScreen */
-       irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW);
-
-       tsc_device.irq = IRQ7;
-       i2c_register_board_info(0, &tsc_device, 1);
-#endif /* CONFIG_AP4EVB_QHD */
-
-       /* CEU */
-
-       /*
-        * TODO: reserve memory for V4L2 DMA buffers, when a suitable API
-        * becomes available
-        */
-
-       /* MIPI-CSI stuff */
-       gpio_request(GPIO_FN_VIO_CKO, NULL);
-
-       clk = clk_get(NULL, "vck1_clk");
-       if (!IS_ERR(clk)) {
-               clk_set_rate(clk, clk_round_rate(clk, 13000000));
-               clk_enable(clk);
-               clk_put(clk);
-       }
-
-       sh7372_add_standard_devices();
-
-       /* HDMI */
-       gpio_request(GPIO_FN_HDMI_HPD, NULL);
-       gpio_request(GPIO_FN_HDMI_CEC, NULL);
-
-       /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */
-#define SRCR4 IOMEM(0xe61580bc)
-       srcr4 = __raw_readl(SRCR4);
-       __raw_writel(srcr4 | (1 << 13), SRCR4);
-       udelay(50);
-       __raw_writel(srcr4 & ~(1 << 13), SRCR4);
-
-       platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices));
-
-       rmobile_add_devices_to_domains(domain_devices,
-                                      ARRAY_SIZE(domain_devices));
-
-       hdmi_init_pm_clock();
-       sh7372_pm_init();
-       pm_clk_add(&fsi_device.dev, "spu2");
-       pm_clk_add(&lcdc1_device.dev, "hdmi");
-}
-
-MACHINE_START(AP4EVB, "ap4evb")
-       .map_io         = sh7372_map_io,
-       .init_early     = sh7372_add_early_devices,
-       .init_irq       = sh7372_init_irq,
-       .handle_irq     = shmobile_handle_irq_intc,
-       .init_machine   = ap4evb_init,
-       .init_late      = sh7372_pm_init_late,
-       .init_time      = sh7372_earlytimer_init,
-MACHINE_END
index b85b2882dbd05cc57d644d15f9349abe75cc7293..44a621505eeb63ead22467caefc969627a738ca2 100644 (file)
@@ -584,7 +584,7 @@ static struct regulator_init_data vcc_sdhi0_init_data = {
 static struct fixed_voltage_config vcc_sdhi0_info = {
        .supply_name = "SDHI0 Vcc",
        .microvolts = 3300000,
-       .gpio = GPIO_PORT75,
+       .gpio = 75,
        .enable_high = 1,
        .init_data = &vcc_sdhi0_init_data,
 };
@@ -615,7 +615,7 @@ static struct regulator_init_data vccq_sdhi0_init_data = {
 };
 
 static struct gpio vccq_sdhi0_gpios[] = {
-       {GPIO_PORT17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" },
+       {17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" },
 };
 
 static struct gpio_regulator_state vccq_sdhi0_states[] = {
@@ -626,7 +626,7 @@ static struct gpio_regulator_state vccq_sdhi0_states[] = {
 static struct gpio_regulator_config vccq_sdhi0_info = {
        .supply_name = "vqmmc",
 
-       .enable_gpio = GPIO_PORT74,
+       .enable_gpio = 74,
        .enable_high = 1,
        .enabled_at_boot = 0,
 
@@ -664,7 +664,7 @@ static struct regulator_init_data vcc_sdhi1_init_data = {
 static struct fixed_voltage_config vcc_sdhi1_info = {
        .supply_name = "SDHI1 Vcc",
        .microvolts = 3300000,
-       .gpio = GPIO_PORT16,
+       .gpio = 16,
        .enable_high = 1,
        .init_data = &vcc_sdhi1_init_data,
 };
@@ -693,7 +693,7 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
        .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
                          MMC_CAP_POWER_OFF_CARD,
        .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
-       .cd_gpio        = GPIO_PORT167,
+       .cd_gpio        = 167,
 };
 
 static struct resource sdhi0_resources[] = {
@@ -736,7 +736,7 @@ static struct sh_mobile_sdhi_info sdhi1_info = {
                          MMC_CAP_POWER_OFF_CARD,
        .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
        /* Port72 cannot generate IRQs, will be used in polling mode. */
-       .cd_gpio        = GPIO_PORT72,
+       .cd_gpio        = 72,
 };
 
 static struct resource sdhi1_resources[] = {
@@ -1046,6 +1046,35 @@ static struct platform_device *eva_devices[] __initdata = {
 };
 
 static const struct pinctrl_map eva_pinctrl_map[] = {
+       /* CEU0 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
+                                 "ceu0_data_0_7", "ceu0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
+                                 "ceu0_clk_0", "ceu0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
+                                 "ceu0_sync", "ceu0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
+                                 "ceu0_field", "ceu0"),
+       /* FSIA */
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
+                                 "fsia_sclk_in", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
+                                 "fsia_mclk_out", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
+                                 "fsia_data_in_1", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
+                                 "fsia_data_out_0", "fsia"),
+       /* FSIB */
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
+                                 "fsib_mclk_in", "fsib"),
+       /* GETHER */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
+                                 "gether_mii", "gether"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
+                                 "gether_int", "gether"),
+       /* HDMI */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
+                                 "hdmi", "hdmi"),
        /* LCD0 */
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740",
                                  "lcd0_data24_0", "lcd0"),
@@ -1058,6 +1087,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
                                  "mmc0_data8_1", "mmc0"),
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-r8a7740",
                                  "mmc0_ctrl_1", "mmc0"),
+       /* SCIFA1 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.1", "pfc-r8a7740",
+                                 "scifa1_data", "scifa1"),
        /* SDHI0 */
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740",
                                  "sdhi0_data4", "sdhi0"),
@@ -1065,6 +1097,12 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
                                  "sdhi0_ctrl", "sdhi0"),
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740",
                                  "sdhi0_wp", "sdhi0"),
+       /* ST1232 */
+       PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-r8a7740",
+                                 "intc_irq10", "intc"),
+       /* USBHS */
+       PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs", "pfc-r8a7740",
+                                 "intc_irq7_1", "intc"),
 };
 
 static void __init eva_clock_init(void)
@@ -1119,40 +1157,14 @@ static void __init eva_init(void)
        r8a7740_pinmux_init();
        r8a7740_meram_workaround();
 
-       /* SCIFA1 */
-       gpio_request(GPIO_FN_SCIFA1_RXD, NULL);
-       gpio_request(GPIO_FN_SCIFA1_TXD, NULL);
-
        /* LCDC0 */
-       gpio_request(GPIO_FN_LCDC0_SELECT,      NULL);
-
        gpio_request_one(61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
        gpio_request_one(202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */
 
        /* Touchscreen */
-       gpio_request(GPIO_FN_IRQ10,     NULL); /* TP_INT */
+       gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
 
        /* GETHER */
-       gpio_request(GPIO_FN_ET_CRS,            NULL);
-       gpio_request(GPIO_FN_ET_MDC,            NULL);
-       gpio_request(GPIO_FN_ET_MDIO,           NULL);
-       gpio_request(GPIO_FN_ET_TX_ER,          NULL);
-       gpio_request(GPIO_FN_ET_RX_ER,          NULL);
-       gpio_request(GPIO_FN_ET_ERXD0,          NULL);
-       gpio_request(GPIO_FN_ET_ERXD1,          NULL);
-       gpio_request(GPIO_FN_ET_ERXD2,          NULL);
-       gpio_request(GPIO_FN_ET_ERXD3,          NULL);
-       gpio_request(GPIO_FN_ET_TX_CLK,         NULL);
-       gpio_request(GPIO_FN_ET_TX_EN,          NULL);
-       gpio_request(GPIO_FN_ET_ETXD0,          NULL);
-       gpio_request(GPIO_FN_ET_ETXD1,          NULL);
-       gpio_request(GPIO_FN_ET_ETXD2,          NULL);
-       gpio_request(GPIO_FN_ET_ETXD3,          NULL);
-       gpio_request(GPIO_FN_ET_PHY_INT,        NULL);
-       gpio_request(GPIO_FN_ET_COL,            NULL);
-       gpio_request(GPIO_FN_ET_RX_DV,          NULL);
-       gpio_request(GPIO_FN_ET_RX_CLK,         NULL);
-
        gpio_request_one(18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */
 
        /* USB */
@@ -1163,34 +1175,17 @@ static void __init eva_init(void)
        } else {
                /* USB Func */
                /*
-                * A1 chip has 2 IRQ7 pin and it was controled by MSEL register.
-                * OTOH, usbhs interrupt needs its value (HI/LOW) to decide
-                * USB connection/disconnection (usbhsf_get_vbus()).
-                * This means we needs to select GPIO_FN_IRQ7_PORT209 first,
-                * and select GPIO 209 here
+                * The USBHS interrupt handlers needs to read the IRQ pin value
+                * (HI/LOW) to diffentiate USB connection and disconnection
+                * events (usbhsf_get_vbus()). We thus need to select both the
+                * intc_irq7_1 pin group and GPIO 209 here.
                 */
-               gpio_request(GPIO_FN_IRQ7_PORT209, NULL);
                gpio_request_one(209, GPIOF_IN, NULL);
 
                platform_device_register(&usbhsf_device);
                usb = &usbhsf_device;
        }
 
-       /* CEU0 */
-       gpio_request(GPIO_FN_VIO0_D7,           NULL);
-       gpio_request(GPIO_FN_VIO0_D6,           NULL);
-       gpio_request(GPIO_FN_VIO0_D5,           NULL);
-       gpio_request(GPIO_FN_VIO0_D4,           NULL);
-       gpio_request(GPIO_FN_VIO0_D3,           NULL);
-       gpio_request(GPIO_FN_VIO0_D2,           NULL);
-       gpio_request(GPIO_FN_VIO0_D1,           NULL);
-       gpio_request(GPIO_FN_VIO0_D0,           NULL);
-       gpio_request(GPIO_FN_VIO0_CLK,          NULL);
-       gpio_request(GPIO_FN_VIO0_HD,           NULL);
-       gpio_request(GPIO_FN_VIO0_VD,           NULL);
-       gpio_request(GPIO_FN_VIO0_FIELD,        NULL);
-       gpio_request(GPIO_FN_VIO_CKO,           NULL);
-
        /* CON1/CON15 Camera */
        gpio_request_one(173, GPIOF_OUT_INIT_LOW, NULL);  /* STANDBY */
        gpio_request_one(172, GPIOF_OUT_INIT_HIGH, NULL); /* RST */
@@ -1198,24 +1193,11 @@ static void __init eva_init(void)
        gpio_request_one(158, GPIOF_OUT_INIT_LOW, NULL);  /* CAM_PON */
 
        /* FSI-WM8978 */
-       gpio_request(GPIO_FN_FSIAIBT,           NULL);
-       gpio_request(GPIO_FN_FSIAILR,           NULL);
-       gpio_request(GPIO_FN_FSIAOMC,           NULL);
-       gpio_request(GPIO_FN_FSIAOSLD,          NULL);
-       gpio_request(GPIO_FN_FSIAISLD_PORT5,    NULL);
-
        gpio_request(7, NULL);
        gpio_request(8, NULL);
        gpio_direction_none(GPIO_PORT7CR); /* FSIAOBT needs no direction */
        gpio_direction_none(GPIO_PORT8CR); /* FSIAOLR needs no direction */
 
-       /* FSI-HDMI */
-       gpio_request(GPIO_FN_FSIBCK,            NULL);
-
-       /* HDMI */
-       gpio_request(GPIO_FN_HDMI_HPD,          NULL);
-       gpio_request(GPIO_FN_HDMI_CEC,          NULL);
-
        /*
         * CAUTION
         *
index 38e5e50fb3180fb6d8db907ddea4680da8966e30..7ed2401b899c05044d2e8471545571711dc9d515 100644 (file)
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <linux/pinctrl/machine.h>
 #include <linux/platform_device.h>
 #include <linux/smsc911x.h>
 #include <mach/common.h>
@@ -37,6 +38,20 @@ static struct resource smsc911x_resources[] = {
        DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */
 };
 
+static struct rcar_phy_platform_data usb_phy_platform_data __initdata;
+
+static const struct pinctrl_map bockw_pinctrl_map[] = {
+       /* SCIF0 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778",
+                                 "scif0_data_a", "scif0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778",
+                                 "scif0_ctrl", "scif0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("ehci-platform", "pfc-r8a7778",
+                                 "usb0", "usb0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("ehci-platform", "pfc-r8a7778",
+                                 "usb1", "usb1"),
+};
+
 #define IRQ0MR 0x30
 static void __init bockw_init(void)
 {
@@ -45,6 +60,11 @@ static void __init bockw_init(void)
        r8a7778_clock_init();
        r8a7778_init_irq_extpin(1);
        r8a7778_add_standard_devices();
+       r8a7778_add_usb_phy_device(&usb_phy_platform_data);
+
+       pinctrl_register_mappings(bockw_pinctrl_map,
+                                 ARRAY_SIZE(bockw_pinctrl_map));
+       r8a7778_pinmux_init();
 
        fpga = ioremap_nocache(0x18200000, SZ_1M);
        if (fpga) {
@@ -78,4 +98,5 @@ DT_MACHINE_START(BOCKW_DT, "bockw")
        .init_machine   = bockw_init,
        .init_time      = shmobile_timer_init,
        .dt_compat      = bockw_boards_compat_dt,
+       .init_late      = r8a7778_init_late,
 MACHINE_END
diff --git a/arch/arm/mach-shmobile/board-bonito.c b/arch/arm/mach-shmobile/board-bonito.c
deleted file mode 100644 (file)
index 70d992c..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- * bonito board support
- *
- * Copyright (C) 2011 Renesas Solutions Corp.
- * Copyright (C) 2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/i2c.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/pinctrl/machine.h>
-#include <linux/platform_device.h>
-#include <linux/gpio.h>
-#include <linux/regulator/fixed.h>
-#include <linux/regulator/machine.h>
-#include <linux/smsc911x.h>
-#include <linux/videodev2.h>
-#include <mach/common.h>
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-#include <asm/mach/time.h>
-#include <asm/hardware/cache-l2x0.h>
-#include <mach/r8a7740.h>
-#include <mach/irqs.h>
-#include <video/sh_mobile_lcdc.h>
-
-/*
- * CS  Address         device                  note
- *----------------------------------------------------------------
- * 0   0x0000_0000     NOR Flash (64MB)        SW12 : bit3 = OFF
- * 2   0x0800_0000     ExtNOR (64MB)           SW12 : bit3 = OFF
- * 4                   -
- * 5A                  -
- * 5B  0x1600_0000     SRAM (8MB)
- * 6   0x1800_0000     FPGA (64K)
- *     0x1801_0000     Ether (4KB)
- *     0x1801_1000     USB (4KB)
- */
-
-/*
- * SW12
- *
- *     bit1                    bit2                    bit3
- *----------------------------------------------------------------------------
- * ON  NOR WriteProtect        NAND WriteProtect       CS0 ExtNOR / CS2 NOR
- * OFF NOR Not WriteProtect    NAND Not WriteProtect   CS0 NOR    / CS2 ExtNOR
- */
-
-/*
- * SCIFA5 (CN42)
- *
- * S38.3 = ON
- * S39.6 = ON
- * S43.1 = ON
- */
-
-/*
- * LCDC0 (CN3/CN4/CN7)
- *
- * S38.1 = OFF
- * S38.2 = OFF
- */
-
-/* Dummy supplies, where voltage doesn't matter */
-static struct regulator_consumer_supply dummy_supplies[] = {
-       REGULATOR_SUPPLY("vddvario", "smsc911x"),
-       REGULATOR_SUPPLY("vdd33a", "smsc911x"),
-};
-
-/*
- * FPGA
- */
-#define IRQSR0         0x0020
-#define IRQSR1         0x0022
-#define IRQMR0         0x0030
-#define IRQMR1         0x0032
-#define BUSSWMR1       0x0070
-#define BUSSWMR2       0x0072
-#define BUSSWMR3       0x0074
-#define BUSSWMR4       0x0076
-
-#define LCDCR          0x10B4
-#define DEVRSTCR1      0x10D0
-#define DEVRSTCR2      0x10D2
-#define A1MDSR         0x10E0
-#define BVERR          0x1100
-
-/* FPGA IRQ */
-#define FPGA_IRQ_BASE          (512)
-#define FPGA_IRQ0              (FPGA_IRQ_BASE)
-#define FPGA_IRQ1              (FPGA_IRQ_BASE + 16)
-#define FPGA_ETH_IRQ           (FPGA_IRQ0 + 15)
-static u16 bonito_fpga_read(u32 offset)
-{
-       return __raw_readw(IOMEM(0xf0003000) + offset);
-}
-
-static void bonito_fpga_write(u32 offset, u16 val)
-{
-       __raw_writew(val, IOMEM(0xf0003000) + offset);
-}
-
-static void bonito_fpga_irq_disable(struct irq_data *data)
-{
-       unsigned int irq = data->irq;
-       u32 addr = (irq < 1016) ? IRQMR0 : IRQMR1;
-       int shift = irq % 16;
-
-       bonito_fpga_write(addr, bonito_fpga_read(addr) | (1 << shift));
-}
-
-static void bonito_fpga_irq_enable(struct irq_data *data)
-{
-       unsigned int irq = data->irq;
-       u32 addr = (irq < 1016) ? IRQMR0 : IRQMR1;
-       int shift = irq % 16;
-
-       bonito_fpga_write(addr, bonito_fpga_read(addr) & ~(1 << shift));
-}
-
-static struct irq_chip bonito_fpga_irq_chip __read_mostly = {
-       .name           = "bonito FPGA",
-       .irq_mask       = bonito_fpga_irq_disable,
-       .irq_unmask     = bonito_fpga_irq_enable,
-};
-
-static void bonito_fpga_irq_demux(unsigned int irq, struct irq_desc *desc)
-{
-       u32 val =  bonito_fpga_read(IRQSR1) << 16 |
-                  bonito_fpga_read(IRQSR0);
-       u32 mask = bonito_fpga_read(IRQMR1) << 16 |
-                  bonito_fpga_read(IRQMR0);
-
-       int i;
-
-       val &= ~mask;
-
-       for (i = 0; i < 32; i++) {
-               if (!(val & (1 << i)))
-                       continue;
-
-               generic_handle_irq(FPGA_IRQ_BASE + i);
-       }
-}
-
-static void bonito_fpga_init(void)
-{
-       int i;
-
-       bonito_fpga_write(IRQMR0, 0xffff); /* mask all */
-       bonito_fpga_write(IRQMR1, 0xffff); /* mask all */
-
-       /* Device reset */
-       bonito_fpga_write(DEVRSTCR1,
-                  (1 << 2));   /* Eth */
-
-       /* FPGA irq require special handling */
-       for (i = FPGA_IRQ_BASE; i < FPGA_IRQ_BASE + 32; i++) {
-               irq_set_chip_and_handler_name(i, &bonito_fpga_irq_chip,
-                                             handle_level_irq, "level");
-               set_irq_flags(i, IRQF_VALID); /* yuck */
-       }
-
-       irq_set_chained_handler(evt2irq(0x0340), bonito_fpga_irq_demux);
-       irq_set_irq_type(evt2irq(0x0340), IRQ_TYPE_LEVEL_LOW);
-}
-
-/*
-* PMIC settings
-*
-* FIXME
-*
-* bonito board needs some settings by pmic which use i2c access.
-* pmic settings use device_initcall() here for use it.
-*/
-static __u8 *pmic_settings = NULL;
-static __u8 pmic_do_2A[] = {
-       0x1C, 0x09,
-       0x1A, 0x80,
-       0xff, 0xff,
-};
-
-static int __init pmic_init(void)
-{
-       struct i2c_adapter *a = i2c_get_adapter(0);
-       struct i2c_msg msg;
-       __u8 buf[2];
-       int i, ret;
-
-       if (!pmic_settings)
-               return 0;
-       if (!a)
-               return 0;
-
-       msg.addr        = 0x46;
-       msg.buf         = buf;
-       msg.len         = 2;
-       msg.flags       = 0;
-
-       for (i = 0; ; i += 2) {
-               buf[0] = pmic_settings[i + 0];
-               buf[1] = pmic_settings[i + 1];
-
-               if ((0xff == buf[0]) && (0xff == buf[1]))
-                       break;
-
-               ret = i2c_transfer(a, &msg, 1);
-               if (ret < 0) {
-                       pr_err("i2c transfer fail\n");
-                       break;
-               }
-       }
-
-       return 0;
-}
-device_initcall(pmic_init);
-
-/*
- * LCDC0
- */
-static const struct fb_videomode lcdc0_mode = {
-       .name           = "WVGA Panel",
-       .xres           = 800,
-       .yres           = 480,
-       .left_margin    = 88,
-       .right_margin   = 40,
-       .hsync_len      = 128,
-       .upper_margin   = 20,
-       .lower_margin   = 5,
-       .vsync_len      = 5,
-       .sync           = 0,
-};
-
-static struct sh_mobile_lcdc_info lcdc0_info = {
-       .clock_source   = LCDC_CLK_BUS,
-       .ch[0] = {
-               .chan                   = LCDC_CHAN_MAINLCD,
-               .fourcc = V4L2_PIX_FMT_RGB565,
-               .interface_type         = RGB24,
-               .clock_divider          = 5,
-               .flags                  = 0,
-               .lcd_modes              = &lcdc0_mode,
-               .num_modes              = 1,
-               .panel_cfg = {
-                       .width  = 152,
-                       .height = 91,
-               },
-       },
-};
-
-static struct resource lcdc0_resources[] = {
-       [0] = {
-               .name   = "LCDC0",
-               .start  = 0xfe940000,
-               .end    = 0xfe943fff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = intcs_evt2irq(0x0580),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device lcdc0_device = {
-       .name           = "sh_mobile_lcdc_fb",
-       .id             = 0,
-       .resource       = lcdc0_resources,
-       .num_resources  = ARRAY_SIZE(lcdc0_resources),
-       .dev    = {
-               .platform_data  = &lcdc0_info,
-               .coherent_dma_mask = ~0,
-       },
-};
-
-static const struct pinctrl_map lcdc0_pinctrl_map[] = {
-       /* LCD0 */
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740",
-                                 "lcd0_data24_1", "lcd0"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740",
-                                 "lcd0_lclk_1", "lcd0"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740",
-                                 "lcd0_sync", "lcd0"),
-};
-
-/*
- * SMSC 9221
- */
-static struct resource smsc_resources[] = {
-       [0] = {
-               .start          = 0x18010000,
-               .end            = 0x18011000 - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start          = FPGA_ETH_IRQ,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-static struct smsc911x_platform_config smsc_platdata = {
-       .flags          = SMSC911X_USE_16BIT,
-       .phy_interface  = PHY_INTERFACE_MODE_MII,
-       .irq_polarity   = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
-       .irq_type       = SMSC911X_IRQ_TYPE_PUSH_PULL,
-};
-
-static struct platform_device smsc_device = {
-       .name           = "smsc911x",
-       .dev  = {
-               .platform_data = &smsc_platdata,
-       },
-       .resource       = smsc_resources,
-       .num_resources  = ARRAY_SIZE(smsc_resources),
-};
-
-/*
- * core board devices
- */
-static struct platform_device *bonito_core_devices[] __initdata = {
-};
-
-/*
- * base board devices
- */
-static struct platform_device *bonito_base_devices[] __initdata = {
-       &lcdc0_device,
-       &smsc_device,
-};
-
-/*
- * map I/O
- */
-static struct map_desc bonito_io_desc[] __initdata = {
-       /*
-        * for FPGA (0x1800000-0x19ffffff)
-        * 0x18000000-0x18002000 -> 0xf0003000-0xf0005000
-        */
-       {
-               .virtual        = 0xf0003000,
-               .pfn            = __phys_to_pfn(0x18000000),
-               .length         = PAGE_SIZE * 2,
-               .type           = MT_DEVICE_NONSHARED
-       }
-};
-
-static void __init bonito_map_io(void)
-{
-       r8a7740_map_io();
-       iotable_init(bonito_io_desc, ARRAY_SIZE(bonito_io_desc));
-}
-
-/*
- * board init
- */
-#define BIT_ON(sw, bit)                (sw & (1 << bit))
-#define BIT_OFF(sw, bit)       (!(sw & (1 << bit)))
-
-#define VCCQ1CR                IOMEM(0xE6058140)
-#define VCCQ1LCDCR     IOMEM(0xE6058186)
-
-static void __init bonito_init(void)
-{
-       u16 val;
-
-       regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
-
-       r8a7740_pinmux_init();
-       bonito_fpga_init();
-
-       pmic_settings = pmic_do_2A;
-
-       /*
-        * core board settings
-        */
-
-#ifdef CONFIG_CACHE_L2X0
-       /* Early BRESP enable, Shared attribute override enable, 32K*8way */
-       l2x0_init(IOMEM(0xf0002000), 0x40440000, 0x82000fff);
-#endif
-
-       r8a7740_add_standard_devices();
-
-       platform_add_devices(bonito_core_devices,
-                            ARRAY_SIZE(bonito_core_devices));
-
-       /*
-        * base board settings
-        */
-       gpio_request_one(176, GPIOF_IN, NULL);
-       if (!gpio_get_value(176)) {
-               u16 bsw2;
-               u16 bsw3;
-               u16 bsw4;
-
-               /*
-                * FPGA
-                */
-               gpio_request(GPIO_FN_CS5B,              NULL);
-               gpio_request(GPIO_FN_CS6A,              NULL);
-               gpio_request(GPIO_FN_CS5A_PORT105,      NULL);
-               gpio_request(GPIO_FN_IRQ10,             NULL);
-
-               val = bonito_fpga_read(BVERR);
-               pr_info("bonito version: cpu %02x, base %02x\n",
-                       ((val >> 8) & 0xFF),
-                       ((val >> 0) & 0xFF));
-
-               bsw2 = bonito_fpga_read(BUSSWMR2);
-               bsw3 = bonito_fpga_read(BUSSWMR3);
-               bsw4 = bonito_fpga_read(BUSSWMR4);
-
-               /*
-                * SCIFA5 (CN42)
-                */
-               if (BIT_OFF(bsw2, 1) && /* S38.3 = ON */
-                   BIT_OFF(bsw3, 9) && /* S39.6 = ON */
-                   BIT_OFF(bsw4, 4)) { /* S43.1 = ON */
-                       gpio_request(GPIO_FN_SCIFA5_TXD_PORT91, NULL);
-                       gpio_request(GPIO_FN_SCIFA5_RXD_PORT92, NULL);
-               }
-
-               /*
-                * LCDC0 (CN3)
-                */
-               if (BIT_ON(bsw2, 3) &&  /* S38.1 = OFF */
-                   BIT_ON(bsw2, 2)) {  /* S38.2 = OFF */
-                       pinctrl_register_mappings(lcdc0_pinctrl_map,
-                                                 ARRAY_SIZE(lcdc0_pinctrl_map));
-                       gpio_request(GPIO_FN_LCDC0_SELECT, NULL);
-
-                       gpio_request_one(61, GPIOF_OUT_INIT_HIGH,
-                                        NULL); /* LCDDON */
-
-                       /* backlight on */
-                       bonito_fpga_write(LCDCR, 1);
-
-                       /*  drivability Max */
-                       __raw_writew(0x00FF , VCCQ1LCDCR);
-                       __raw_writew(0xFFFF , VCCQ1CR);
-               }
-
-               platform_add_devices(bonito_base_devices,
-                                    ARRAY_SIZE(bonito_base_devices));
-       }
-}
-
-static void __init bonito_earlytimer_init(void)
-{
-       u16 val;
-       u8 md_ck = 0;
-
-       /* read MD_CK value */
-       val = bonito_fpga_read(A1MDSR);
-       if (val & (1 << 10))
-               md_ck |= MD_CK2;
-       if (val & (1 << 9))
-               md_ck |= MD_CK1;
-       if (val & (1 << 8))
-               md_ck |= MD_CK0;
-
-       r8a7740_clock_init(md_ck);
-       shmobile_earlytimer_init();
-}
-
-static void __init bonito_add_early_devices(void)
-{
-       r8a7740_add_early_devices();
-}
-
-MACHINE_START(BONITO, "bonito")
-       .map_io         = bonito_map_io,
-       .init_early     = bonito_add_early_devices,
-       .init_irq       = r8a7740_init_irq,
-       .handle_irq     = shmobile_handle_irq_intc,
-       .init_machine   = bonito_init,
-       .init_late      = shmobile_init_late,
-       .init_time      = bonito_earlytimer_init,
-MACHINE_END
index aefa50d385b71704fcde80fd8e7e568abaaff998..44055fe8a45c25c573b810608a6fbfa27730e6c5 100644 (file)
@@ -79,7 +79,6 @@ static void __init kzm_init(void)
        sh73a0_pinmux_init();
 
        /* enable SD */
-       gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
        gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
 
        gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
index e6b775a10aad8fc0f51951a551c1cd5da13fad55..1fdf05cb6da1b00f7c6c06d8f77b1fc004dda3b8 100644 (file)
@@ -663,13 +663,13 @@ static unsigned long pin_pullup_conf[] = {
 
 static const struct pinctrl_map kzm_pinctrl_map[] = {
        /* FSIA (AK4648) */
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
                                  "fsia_mclk_in", "fsia"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
                                  "fsia_sclk_in", "fsia"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
                                  "fsia_data_in", "fsia"),
-       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
                                  "fsia_data_out", "fsia"),
        /* I2C3 */
        PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0",
@@ -788,9 +788,6 @@ static void __init kzm_init(void)
        /* Touchscreen */
        gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */
 
-       /* enable SD */
-       gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
-
 #ifdef CONFIG_CACHE_L2X0
        /* Early BRESP enable, Shared attribute override enable, 64K*8way */
        l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
index f587187a86031f1c88d236818d712ee31e7d098a..6114edd0a977271f131a6b1b4300590754ea003e 100644 (file)
 #include <linux/interrupt.h>
 #include <linux/irqchip.h>
 #include <linux/kernel.h>
+#include <linux/pinctrl/machine.h>
 #include <linux/platform_device.h>
 #include <mach/common.h>
 #include <mach/r8a7790.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 
+static const struct pinctrl_map lager_pinctrl_map[] = {
+       /* SCIF0 (CN19: DEBUG SERIAL0) */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7790",
+                                 "scif0_data", "scif0"),
+       /* SCIF1 (CN20: DEBUG SERIAL1) */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.7", "pfc-r8a7790",
+                                 "scif1_data", "scif1"),
+};
+
 static void __init lager_add_standard_devices(void)
 {
        r8a7790_clock_init();
+
+       pinctrl_register_mappings(lager_pinctrl_map,
+                                 ARRAY_SIZE(lager_pinctrl_map));
+       r8a7790_pinmux_init();
+
        r8a7790_add_standard_devices();
 }
 
index fa3407da682ad59a08042c383d4297bbe354af41..85f51a849a5043a7f122c6a25c7c63dd97877ec1 100644 (file)
@@ -1309,6 +1309,49 @@ static struct i2c_board_info i2c1_devices[] = {
 };
 
 static const struct pinctrl_map mackerel_pinctrl_map[] = {
+       /* ADXL34X */
+       PIN_MAP_MUX_GROUP_DEFAULT("1-0053", "pfc-sh7372",
+                                 "intc_irq21", "intc"),
+       /* CEU */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
+                                 "ceu_data_0_7", "ceu"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
+                                 "ceu_clk_0", "ceu"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
+                                 "ceu_sync", "ceu"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
+                                 "ceu_field", "ceu"),
+       /* FLCTL */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
+                                 "flctl_data", "flctl"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
+                                 "flctl_ce0", "flctl"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
+                                 "flctl_ctrl", "flctl"),
+       /* FSIA (AK4643) */
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
+                                 "fsia_sclk_in", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
+                                 "fsia_data_in", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
+                                 "fsia_data_out", "fsia"),
+       /* FSIB (HDMI) */
+       PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-sh7372",
+                                 "fsib_mclk_in", "fsib"),
+       /* HDMI */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-sh7372",
+                                 "hdmi", "hdmi"),
+       /* LCDC */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
+                                 "lcd_data24", "lcd"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
+                                 "lcd_sync", "lcd"),
+       /* SCIFA0 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-sh7372",
+                                 "scifa0_data", "scifa0"),
+       /* SCIFA2 (GT-720F GPS module) */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh7372",
+                                 "scifa2_data", "scifa2"),
        /* SDHI0 */
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
                                  "sdhi0_data4", "sdhi0"),
@@ -1316,6 +1359,8 @@ static const struct pinctrl_map mackerel_pinctrl_map[] = {
                                  "sdhi0_ctrl", "sdhi0"),
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
                                  "sdhi0_wp", "sdhi0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
+                                 "intc_irq26_1", "intc"),
        /* SDHI1 */
 #if !IS_ENABLED(CONFIG_MMC_SH_MMCIF)
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
@@ -1334,6 +1379,25 @@ static const struct pinctrl_map mackerel_pinctrl_map[] = {
                                  "sdhi2_data4", "sdhi2"),
        PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh7372",
                                  "sdhi2_ctrl", "sdhi2"),
+       /* SMSC911X */
+       PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
+                                 "bsc_cs5a", "bsc"),
+       PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
+                                 "intc_irq6_0", "intc"),
+       /* ST1232 */
+       PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-sh7372",
+                                 "intc_irq7_0", "intc"),
+       /* TCA6416 */
+       PIN_MAP_MUX_GROUP_DEFAULT("0-0020", "pfc-sh7372",
+                                 "intc_irq9_0", "intc"),
+       /* USBHS0 */
+       PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.0", "pfc-sh7372",
+                                 "usb0_vbus", "usb0"),
+       /* USBHS1 */
+       PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
+                                 "usb1_vbus", "usb1"),
+       PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
+                                 "usb1_otg_id_0", "usb1"),
 };
 
 #define GPIO_PORT9CR   IOMEM(0xE6051009)
@@ -1377,61 +1441,18 @@ static void __init mackerel_init(void)
                                  ARRAY_SIZE(mackerel_pinctrl_map));
        sh7372_pinmux_init();
 
-       /* enable SCIFA0 */
-       gpio_request(GPIO_FN_SCIFA0_TXD, NULL);
-       gpio_request(GPIO_FN_SCIFA0_RXD, NULL);
-
-       /* enable SMSC911X */
-       gpio_request(GPIO_FN_CS5A,      NULL);
-       gpio_request(GPIO_FN_IRQ6_39,   NULL);
-
-       /* LCDC */
-       gpio_request(GPIO_FN_LCDD23,   NULL);
-       gpio_request(GPIO_FN_LCDD22,   NULL);
-       gpio_request(GPIO_FN_LCDD21,   NULL);
-       gpio_request(GPIO_FN_LCDD20,   NULL);
-       gpio_request(GPIO_FN_LCDD19,   NULL);
-       gpio_request(GPIO_FN_LCDD18,   NULL);
-       gpio_request(GPIO_FN_LCDD17,   NULL);
-       gpio_request(GPIO_FN_LCDD16,   NULL);
-       gpio_request(GPIO_FN_LCDD15,   NULL);
-       gpio_request(GPIO_FN_LCDD14,   NULL);
-       gpio_request(GPIO_FN_LCDD13,   NULL);
-       gpio_request(GPIO_FN_LCDD12,   NULL);
-       gpio_request(GPIO_FN_LCDD11,   NULL);
-       gpio_request(GPIO_FN_LCDD10,   NULL);
-       gpio_request(GPIO_FN_LCDD9,    NULL);
-       gpio_request(GPIO_FN_LCDD8,    NULL);
-       gpio_request(GPIO_FN_LCDD7,    NULL);
-       gpio_request(GPIO_FN_LCDD6,    NULL);
-       gpio_request(GPIO_FN_LCDD5,    NULL);
-       gpio_request(GPIO_FN_LCDD4,    NULL);
-       gpio_request(GPIO_FN_LCDD3,    NULL);
-       gpio_request(GPIO_FN_LCDD2,    NULL);
-       gpio_request(GPIO_FN_LCDD1,    NULL);
-       gpio_request(GPIO_FN_LCDD0,    NULL);
-       gpio_request(GPIO_FN_LCDDISP,  NULL);
-       gpio_request(GPIO_FN_LCDDCK,   NULL);
-
        /* backlight, off by default */
        gpio_request_one(31, GPIOF_OUT_INIT_LOW, NULL);
 
        gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
 
        /* USBHS0 */
-       gpio_request(GPIO_FN_VBUS0_0, NULL);
        gpio_request_pulldown(GPIO_PORT168CR); /* VBUS0_0 pull down */
 
        /* USBHS1 */
-       gpio_request(GPIO_FN_VBUS0_1, NULL);
        gpio_request_pulldown(GPIO_PORT167CR); /* VBUS0_1 pull down */
-       gpio_request(GPIO_FN_IDIN_1_113, NULL);
 
-       /* enable FSI2 port A (ak4643) */
-       gpio_request(GPIO_FN_FSIAIBT,   NULL);
-       gpio_request(GPIO_FN_FSIAILR,   NULL);
-       gpio_request(GPIO_FN_FSIAISLD,  NULL);
-       gpio_request(GPIO_FN_FSIAOSLD,  NULL);
+       /* FSI2 port A (ak4643) */
        gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */
 
        gpio_request(9,  NULL);
@@ -1441,8 +1462,7 @@ static void __init mackerel_init(void)
 
        intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */
 
-       /* setup FSI2 port B (HDMI) */
-       gpio_request(GPIO_FN_FSIBCK, NULL);
+       /* FSI2 port B (HDMI) */
        __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */
 
        /* set SPU2 clock to 119.6 MHz */
@@ -1452,68 +1472,15 @@ static void __init mackerel_init(void)
                clk_put(clk);
        }
 
-       /* enable Keypad */
-       gpio_request(GPIO_FN_IRQ9_42,   NULL);
+       /* Keypad */
        irq_set_irq_type(IRQ9, IRQ_TYPE_LEVEL_HIGH);
 
-       /* enable Touchscreen */
-       gpio_request(GPIO_FN_IRQ7_40,   NULL);
+       /* Touchscreen */
        irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW);
 
-       /* enable Accelerometer */
-       gpio_request(GPIO_FN_IRQ21,     NULL);
+       /* Accelerometer */
        irq_set_irq_type(IRQ21, IRQ_TYPE_LEVEL_HIGH);
 
-       /* SDHI0 PORT172 card-detect IRQ26 */
-       gpio_request(GPIO_FN_IRQ26_172, NULL);
-
-       /* FLCTL */
-       gpio_request(GPIO_FN_D0_NAF0, NULL);
-       gpio_request(GPIO_FN_D1_NAF1, NULL);
-       gpio_request(GPIO_FN_D2_NAF2, NULL);
-       gpio_request(GPIO_FN_D3_NAF3, NULL);
-       gpio_request(GPIO_FN_D4_NAF4, NULL);
-       gpio_request(GPIO_FN_D5_NAF5, NULL);
-       gpio_request(GPIO_FN_D6_NAF6, NULL);
-       gpio_request(GPIO_FN_D7_NAF7, NULL);
-       gpio_request(GPIO_FN_D8_NAF8, NULL);
-       gpio_request(GPIO_FN_D9_NAF9, NULL);
-       gpio_request(GPIO_FN_D10_NAF10, NULL);
-       gpio_request(GPIO_FN_D11_NAF11, NULL);
-       gpio_request(GPIO_FN_D12_NAF12, NULL);
-       gpio_request(GPIO_FN_D13_NAF13, NULL);
-       gpio_request(GPIO_FN_D14_NAF14, NULL);
-       gpio_request(GPIO_FN_D15_NAF15, NULL);
-       gpio_request(GPIO_FN_FCE0, NULL);
-       gpio_request(GPIO_FN_WE0_FWE, NULL);
-       gpio_request(GPIO_FN_FRB, NULL);
-       gpio_request(GPIO_FN_A4_FOE, NULL);
-       gpio_request(GPIO_FN_A5_FCDE, NULL);
-       gpio_request(GPIO_FN_RD_FSC, NULL);
-
-       /* enable GPS module (GT-720F) */
-       gpio_request(GPIO_FN_SCIFA2_TXD1, NULL);
-       gpio_request(GPIO_FN_SCIFA2_RXD1, NULL);
-
-       /* CEU */
-       gpio_request(GPIO_FN_VIO_CLK, NULL);
-       gpio_request(GPIO_FN_VIO_VD, NULL);
-       gpio_request(GPIO_FN_VIO_HD, NULL);
-       gpio_request(GPIO_FN_VIO_FIELD, NULL);
-       gpio_request(GPIO_FN_VIO_CKO, NULL);
-       gpio_request(GPIO_FN_VIO_D7, NULL);
-       gpio_request(GPIO_FN_VIO_D6, NULL);
-       gpio_request(GPIO_FN_VIO_D5, NULL);
-       gpio_request(GPIO_FN_VIO_D4, NULL);
-       gpio_request(GPIO_FN_VIO_D3, NULL);
-       gpio_request(GPIO_FN_VIO_D2, NULL);
-       gpio_request(GPIO_FN_VIO_D1, NULL);
-       gpio_request(GPIO_FN_VIO_D0, NULL);
-
-       /* HDMI */
-       gpio_request(GPIO_FN_HDMI_HPD, NULL);
-       gpio_request(GPIO_FN_HDMI_CEC, NULL);
-
        /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */
        srcr4 = __raw_readl(SRCR4);
        __raw_writel(srcr4 | (1 << 13), SRCR4);
index b9594e911ce7680d28448fa50cf854ceb91b33bf..b1b41b199f99b429c1e54f865fda63591b2f6930 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/leds.h>
 #include <linux/dma-mapping.h>
 #include <linux/pinctrl/machine.h>
+#include <linux/platform_data/gpio-rcar.h>
 #include <linux/regulator/fixed.h>
 #include <linux/regulator/machine.h>
 #include <linux/smsc911x.h>
 #include <linux/mmc/host.h>
 #include <linux/mmc/sh_mobile_sdhi.h>
 #include <linux/mfd/tmio.h>
-#include <linux/usb/otg.h>
-#include <linux/usb/ehci_pdriver.h>
-#include <linux/usb/ohci_pdriver.h>
-#include <linux/pm_runtime.h>
 #include <mach/hardware.h>
 #include <mach/r8a7779.h>
 #include <mach/common.h>
@@ -60,6 +57,8 @@ static struct regulator_consumer_supply dummy_supplies[] = {
        REGULATOR_SUPPLY("vdd33a", "smsc911x"),
 };
 
+static struct rcar_phy_platform_data usb_phy_platform_data __initdata;
+
 /* SMSC LAN89218 */
 static struct resource smsc911x_resources[] = {
        [0] = {
@@ -149,39 +148,19 @@ static struct platform_device hspi_device = {
        .num_resources  = ARRAY_SIZE(hspi_resources),
 };
 
-/* USB PHY */
-static struct resource usb_phy_resources[] = {
-       [0] = {
-               .start          = 0xffe70000,
-               .end            = 0xffe70900 - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start          = 0xfff70000,
-               .end            = 0xfff70900 - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device usb_phy_device = {
-       .name           = "rcar_usb_phy",
-       .resource       = usb_phy_resources,
-       .num_resources  = ARRAY_SIZE(usb_phy_resources),
-};
-
 /* LEDS */
 static struct gpio_led marzen_leds[] = {
        {
                .name           = "led2",
-               .gpio           = 157,
+               .gpio           = RCAR_GP_PIN(4, 29),
                .default_state  = LEDS_GPIO_DEFSTATE_ON,
        }, {
                .name           = "led3",
-               .gpio           = 158,
+               .gpio           = RCAR_GP_PIN(4, 30),
                .default_state  = LEDS_GPIO_DEFSTATE_ON,
        }, {
                .name           = "led4",
-               .gpio           = 159,
+               .gpio           = RCAR_GP_PIN(4, 31),
                .default_state  = LEDS_GPIO_DEFSTATE_ON,
        },
 };
@@ -204,161 +183,9 @@ static struct platform_device *marzen_devices[] __initdata = {
        &sdhi0_device,
        &thermal_device,
        &hspi_device,
-       &usb_phy_device,
        &leds_device,
 };
 
-/* USB */
-static struct usb_phy *phy;
-static int usb_power_on(struct platform_device *pdev)
-{
-       if (IS_ERR(phy))
-               return PTR_ERR(phy);
-
-       pm_runtime_enable(&pdev->dev);
-       pm_runtime_get_sync(&pdev->dev);
-
-       usb_phy_init(phy);
-
-       return 0;
-}
-
-static void usb_power_off(struct platform_device *pdev)
-{
-       if (IS_ERR(phy))
-               return;
-
-       usb_phy_shutdown(phy);
-
-       pm_runtime_put_sync(&pdev->dev);
-       pm_runtime_disable(&pdev->dev);
-}
-
-static struct usb_ehci_pdata ehcix_pdata = {
-       .power_on       = usb_power_on,
-       .power_off      = usb_power_off,
-       .power_suspend  = usb_power_off,
-};
-
-static struct resource ehci0_resources[] = {
-       [0] = {
-               .start  = 0xffe70000,
-               .end    = 0xffe70400 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = gic_iid(0x4c),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device ehci0_device = {
-       .name   = "ehci-platform",
-       .id     = 0,
-       .dev    = {
-               .dma_mask               = &ehci0_device.dev.coherent_dma_mask,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &ehcix_pdata,
-       },
-       .num_resources  = ARRAY_SIZE(ehci0_resources),
-       .resource       = ehci0_resources,
-};
-
-static struct resource ehci1_resources[] = {
-       [0] = {
-               .start  = 0xfff70000,
-               .end    = 0xfff70400 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = gic_iid(0x4d),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device ehci1_device = {
-       .name   = "ehci-platform",
-       .id     = 1,
-       .dev    = {
-               .dma_mask               = &ehci1_device.dev.coherent_dma_mask,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &ehcix_pdata,
-       },
-       .num_resources  = ARRAY_SIZE(ehci1_resources),
-       .resource       = ehci1_resources,
-};
-
-static struct usb_ohci_pdata ohcix_pdata = {
-       .power_on       = usb_power_on,
-       .power_off      = usb_power_off,
-       .power_suspend  = usb_power_off,
-};
-
-static struct resource ohci0_resources[] = {
-       [0] = {
-               .start  = 0xffe70400,
-               .end    = 0xffe70800 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = gic_iid(0x4c),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device ohci0_device = {
-       .name   = "ohci-platform",
-       .id     = 0,
-       .dev    = {
-               .dma_mask               = &ohci0_device.dev.coherent_dma_mask,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &ohcix_pdata,
-       },
-       .num_resources  = ARRAY_SIZE(ohci0_resources),
-       .resource       = ohci0_resources,
-};
-
-static struct resource ohci1_resources[] = {
-       [0] = {
-               .start  = 0xfff70400,
-               .end    = 0xfff70800 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = gic_iid(0x4d),
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device ohci1_device = {
-       .name   = "ohci-platform",
-       .id     = 1,
-       .dev    = {
-               .dma_mask               = &ohci1_device.dev.coherent_dma_mask,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &ohcix_pdata,
-       },
-       .num_resources  = ARRAY_SIZE(ohci1_resources),
-       .resource       = ohci1_resources,
-};
-
-static struct platform_device *marzen_late_devices[] __initdata = {
-       &ehci0_device,
-       &ehci1_device,
-       &ohci0_device,
-       &ohci1_device,
-};
-
-void __init marzen_init_late(void)
-{
-       /* get usb phy */
-       phy = usb_get_phy(USB_PHY_TYPE_USB2);
-
-       shmobile_init_late();
-       platform_add_devices(marzen_late_devices,
-                            ARRAY_SIZE(marzen_late_devices));
-}
-
 static const struct pinctrl_map marzen_pinctrl_map[] = {
        /* HSPI0 */
        PIN_MAP_MUX_GROUP_DEFAULT("sh-hspi.0", "pfc-r8a7779",
@@ -406,6 +233,7 @@ static void __init marzen_init(void)
        r8a7779_pinmux_init();
 
        r8a7779_add_standard_devices();
+       r8a7779_add_usb_phy_device(&usb_phy_platform_data);
        platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices));
 }
 
@@ -416,6 +244,6 @@ MACHINE_START(MARZEN, "marzen")
        .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = r8a7779_init_irq,
        .init_machine   = marzen_init,
-       .init_late      = marzen_init_late,
+       .init_late      = r8a7779_init_late,
        .init_time      = r8a7779_earlytimer_init,
 MACHINE_END
index e710c00c3822168035a9a9182522392165f83f65..5f7fe628b8a1fbbc4cee40d633353177ad29e310 100644 (file)
 #include <linux/kernel.h>
 #include <linux/sh_clk.h>
 #include <linux/clkdev.h>
+#include <mach/clock.h>
 #include <mach/common.h>
 
 #define CPG_BASE 0xe6150000
 #define CPG_LEN 0x270
 
-#define MPCKCR 0xe6150080
 #define SMSTPCR2 0xe6150138
+#define SMSTPCR3 0xe615013c
 #define SMSTPCR5 0xe6150144
 
+#define FRQCRA         0xE6150000
+#define FRQCRB         0xE6150004
+#define VCLKCR1                0xE6150008
+#define VCLKCR2                0xE615000C
+#define VCLKCR3                0xE615001C
+#define VCLKCR4                0xE6150014
+#define VCLKCR5                0xE6150034
+#define ZBCKCR         0xE6150010
+#define SD0CKCR                0xE6150074
+#define SD1CKCR                0xE6150078
+#define SD2CKCR                0xE615007C
+#define MMC0CKCR       0xE6150240
+#define MMC1CKCR       0xE6150244
+#define FSIACKCR       0xE6150018
+#define FSIBCKCR       0xE6150090
+#define MPCKCR         0xe6150080
+#define SPUVCKCR       0xE6150094
+#define HSICKCR                0xE615026C
+#define M4CKCR         0xE6150098
+#define PLLECR         0xE61500D0
+#define PLL1CR         0xE6150028
+#define PLL2CR         0xE615002C
+#define PLL2SCR                0xE61501F4
+#define PLL2HCR                0xE61501E4
+#define CKSCR          0xE61500C0
+
+#define CPG_MAP(o) ((o - CPG_BASE) + cpg_mapping.base)
+
 static struct clk_mapping cpg_mapping = {
        .phys   = CPG_BASE,
        .len    = CPG_LEN,
@@ -51,29 +80,327 @@ static struct clk extal2_clk = {
        .mapping        = &cpg_mapping,
 };
 
+static struct sh_clk_ops followparent_clk_ops = {
+       .recalc = followparent_recalc,
+};
+
+static struct clk main_clk = {
+       /* .parent will be set r8a73a4_clock_init */
+       .ops    = &followparent_clk_ops,
+};
+
+SH_CLK_RATIO(div2,     1, 2);
+SH_CLK_RATIO(div4,     1, 4);
+
+SH_FIXED_RATIO_CLK(main_div2_clk,      main_clk,               div2);
+SH_FIXED_RATIO_CLK(extal1_div2_clk,    extal1_clk,             div2);
+SH_FIXED_RATIO_CLK(extal2_div2_clk,    extal2_clk,             div2);
+SH_FIXED_RATIO_CLK(extal2_div4_clk,    extal2_clk,             div4);
+
+/* External FSIACK/FSIBCK clock */
+static struct clk fsiack_clk = {
+};
+
+static struct clk fsibck_clk = {
+};
+
+/*
+ *             PLL clocks
+ */
+static struct clk *pll_parent_main[] = {
+       [0] = &main_clk,
+       [1] = &main_div2_clk
+};
+
+static struct clk *pll_parent_main_extal[8] = {
+       [0] = &main_div2_clk,
+       [1] = &extal2_div2_clk,
+       [3] = &extal2_div4_clk,
+       [4] = &main_clk,
+       [5] = &extal2_clk,
+};
+
+static unsigned long pll_recalc(struct clk *clk)
+{
+       unsigned long mult = 1;
+
+       if (ioread32(CPG_MAP(PLLECR)) & (1 << clk->enable_bit))
+               mult = (((ioread32(clk->mapped_reg) >> 24) & 0x7f) + 1);
+
+       return clk->parent->rate * mult;
+}
+
+static int pll_set_parent(struct clk *clk, struct clk *parent)
+{
+       u32 val;
+       int i, ret;
+
+       if (!clk->parent_table || !clk->parent_num)
+               return -EINVAL;
+
+       /* Search the parent */
+       for (i = 0; i < clk->parent_num; i++)
+               if (clk->parent_table[i] == parent)
+                       break;
+
+       if (i == clk->parent_num)
+               return -ENODEV;
+
+       ret = clk_reparent(clk, parent);
+       if (ret < 0)
+               return ret;
+
+       val = ioread32(clk->mapped_reg) &
+               ~(((1 << clk->src_width) - 1) << clk->src_shift);
+
+       iowrite32(val | i << clk->src_shift, clk->mapped_reg);
+
+       return 0;
+}
+
+static struct sh_clk_ops pll_clk_ops = {
+       .recalc         = pll_recalc,
+       .set_parent     = pll_set_parent,
+};
+
+#define PLL_CLOCK(name, p, pt, w, s, reg, e)           \
+       static struct clk name = {                      \
+               .ops            = &pll_clk_ops,         \
+               .flags          = CLK_ENABLE_ON_INIT,   \
+               .parent         = p,                    \
+               .parent_table   = pt,                   \
+               .parent_num     = ARRAY_SIZE(pt),       \
+               .src_width      = w,                    \
+               .src_shift      = s,                    \
+               .enable_reg     = (void __iomem *)reg,  \
+               .enable_bit     = e,                    \
+               .mapping        = &cpg_mapping,         \
+       }
+
+PLL_CLOCK(pll1_clk,  &main_clk,      pll_parent_main,       1, 7, PLL1CR,  1);
+PLL_CLOCK(pll2_clk,  &main_div2_clk, pll_parent_main_extal, 3, 5, PLL2CR,  2);
+PLL_CLOCK(pll2s_clk, &main_div2_clk, pll_parent_main_extal, 3, 5, PLL2SCR, 4);
+PLL_CLOCK(pll2h_clk, &main_div2_clk, pll_parent_main_extal, 3, 5, PLL2HCR, 5);
+
+SH_FIXED_RATIO_CLK(pll1_div2_clk,      pll1_clk,       div2);
+
 static struct clk *main_clks[] = {
        &extalr_clk,
        &extal1_clk,
+       &extal1_div2_clk,
        &extal2_clk,
+       &extal2_div2_clk,
+       &extal2_div4_clk,
+       &main_clk,
+       &main_div2_clk,
+       &fsiack_clk,
+       &fsibck_clk,
+       &pll1_clk,
+       &pll1_div2_clk,
+       &pll2_clk,
+       &pll2s_clk,
+       &pll2h_clk,
+};
+
+/* DIV4 */
+static void div4_kick(struct clk *clk)
+{
+       unsigned long value;
+
+       /* set KICK bit in FRQCRB to update hardware setting */
+       value = ioread32(CPG_MAP(FRQCRB));
+       value |= (1 << 31);
+       iowrite32(value, CPG_MAP(FRQCRB));
+}
+
+static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 18, 24, 0, 36, 48, 10};
+
+static struct clk_div_mult_table div4_div_mult_table = {
+       .divisors       = divisors,
+       .nr_divisors    = ARRAY_SIZE(divisors),
+};
+
+static struct clk_div4_table div4_table = {
+       .div_mult_table = &div4_div_mult_table,
+       .kick           = div4_kick,
+};
+
+enum {
+       DIV4_I, DIV4_M3, DIV4_B, DIV4_M1, DIV4_M2,
+       DIV4_ZX, DIV4_ZS, DIV4_HP,
+       DIV4_NR };
+
+static struct clk div4_clks[DIV4_NR] = {
+       [DIV4_I]        = SH_CLK_DIV4(&pll1_clk, FRQCRA, 20, 0x0dff, CLK_ENABLE_ON_INIT),
+       [DIV4_M3]       = SH_CLK_DIV4(&pll1_clk, FRQCRA, 12, 0x1dff, CLK_ENABLE_ON_INIT),
+       [DIV4_B]        = SH_CLK_DIV4(&pll1_clk, FRQCRA,  8, 0x0dff, CLK_ENABLE_ON_INIT),
+       [DIV4_M1]       = SH_CLK_DIV4(&pll1_clk, FRQCRA,  4, 0x1dff, 0),
+       [DIV4_M2]       = SH_CLK_DIV4(&pll1_clk, FRQCRA,  0, 0x1dff, 0),
+       [DIV4_ZX]       = SH_CLK_DIV4(&pll1_clk, FRQCRB, 12, 0x0dff, 0),
+       [DIV4_ZS]       = SH_CLK_DIV4(&pll1_clk, FRQCRB,  8, 0x0dff, 0),
+       [DIV4_HP]       = SH_CLK_DIV4(&pll1_clk, FRQCRB,  4, 0x0dff, 0),
 };
 
+enum {
+       DIV6_ZB,
+       DIV6_SDHI0, DIV6_SDHI1, DIV6_SDHI2,
+       DIV6_MMC0, DIV6_MMC1,
+       DIV6_VCK1, DIV6_VCK2, DIV6_VCK3, DIV6_VCK4, DIV6_VCK5,
+       DIV6_FSIA, DIV6_FSIB,
+       DIV6_MP, DIV6_M4, DIV6_HSI, DIV6_SPUV,
+       DIV6_NR };
+
+static struct clk *div6_parents[8] = {
+       [0] = &pll1_div2_clk,
+       [1] = &pll2s_clk,
+       [3] = &extal2_clk,
+       [4] = &main_div2_clk,
+       [6] = &extalr_clk,
+};
+
+static struct clk *fsia_parents[4] = {
+       [0] = &pll1_div2_clk,
+       [1] = &pll2s_clk,
+       [2] = &fsiack_clk,
+};
+
+static struct clk *fsib_parents[4] = {
+       [0] = &pll1_div2_clk,
+       [1] = &pll2s_clk,
+       [2] = &fsibck_clk,
+};
+
+static struct clk *mp_parents[4] = {
+       [0] = &pll1_div2_clk,
+       [1] = &pll2s_clk,
+       [2] = &extal2_clk,
+       [3] = &extal2_clk,
+};
+
+static struct clk *m4_parents[2] = {
+       [0] = &pll2s_clk,
+};
+
+static struct clk *hsi_parents[4] = {
+       [0] = &pll2h_clk,
+       [1] = &pll1_div2_clk,
+       [3] = &pll2s_clk,
+};
+
+/*** FIXME ***
+ * SH_CLK_DIV6_EXT() macro doesn't care .mapping
+ * but, it is necessary on R-Car (= ioremap() base CPG)
+ * The difference between
+ * SH_CLK_DIV6_EXT() <--> SH_CLK_MAP_DIV6_EXT()
+ * is only .mapping
+ */
+#define SH_CLK_MAP_DIV6_EXT(_reg, _flags, _parents,                    \
+                           _num_parents, _src_shift, _src_width)       \
+{                                                                      \
+       .enable_reg     = (void __iomem *)_reg,                         \
+       .enable_bit     = 0, /* unused */                               \
+       .flags          = _flags | CLK_MASK_DIV_ON_DISABLE,             \
+       .div_mask       = SH_CLK_DIV6_MSK,                              \
+       .parent_table   = _parents,                                     \
+       .parent_num     = _num_parents,                                 \
+       .src_shift      = _src_shift,                                   \
+       .src_width      = _src_width,                                   \
+       .mapping        = &cpg_mapping,                                 \
+}
+
+static struct clk div6_clks[DIV6_NR] = {
+       [DIV6_ZB] = SH_CLK_MAP_DIV6_EXT(ZBCKCR, CLK_ENABLE_ON_INIT,
+                               div6_parents, 2, 7, 1),
+       [DIV6_SDHI0] = SH_CLK_MAP_DIV6_EXT(SD0CKCR, 0,
+                               div6_parents, 2, 6, 2),
+       [DIV6_SDHI1] = SH_CLK_MAP_DIV6_EXT(SD1CKCR, 0,
+                               div6_parents, 2, 6, 2),
+       [DIV6_SDHI2] = SH_CLK_MAP_DIV6_EXT(SD2CKCR, 0,
+                               div6_parents, 2, 6, 2),
+       [DIV6_MMC0] = SH_CLK_MAP_DIV6_EXT(MMC0CKCR, 0,
+                               div6_parents, 2, 6, 2),
+       [DIV6_MMC1] = SH_CLK_MAP_DIV6_EXT(MMC1CKCR, 0,
+                               div6_parents, 2, 6, 2),
+       [DIV6_VCK1] = SH_CLK_MAP_DIV6_EXT(VCLKCR1, 0, /* didn't care bit[6-7] */
+                               div6_parents, ARRAY_SIZE(div6_parents), 12, 3),
+       [DIV6_VCK2] = SH_CLK_MAP_DIV6_EXT(VCLKCR2, 0, /* didn't care bit[6-7] */
+                               div6_parents, ARRAY_SIZE(div6_parents), 12, 3),
+       [DIV6_VCK3] = SH_CLK_MAP_DIV6_EXT(VCLKCR3, 0, /* didn't care bit[6-7] */
+                               div6_parents, ARRAY_SIZE(div6_parents), 12, 3),
+       [DIV6_VCK4] = SH_CLK_MAP_DIV6_EXT(VCLKCR4, 0, /* didn't care bit[6-7] */
+                               div6_parents, ARRAY_SIZE(div6_parents), 12, 3),
+       [DIV6_VCK5] = SH_CLK_MAP_DIV6_EXT(VCLKCR5, 0, /* didn't care bit[6-7] */
+                               div6_parents, ARRAY_SIZE(div6_parents), 12, 3),
+       [DIV6_FSIA] = SH_CLK_MAP_DIV6_EXT(FSIACKCR, 0,
+                               fsia_parents, ARRAY_SIZE(fsia_parents), 6, 2),
+       [DIV6_FSIB] = SH_CLK_MAP_DIV6_EXT(FSIBCKCR, 0,
+                               fsib_parents, ARRAY_SIZE(fsib_parents), 6, 2),
+       [DIV6_MP] = SH_CLK_MAP_DIV6_EXT(MPCKCR, 0, /* it needs bit[9-11] control */
+                               mp_parents, ARRAY_SIZE(mp_parents), 6, 2),
+       /* pll2s will be selected always for M4 */
+       [DIV6_M4] = SH_CLK_MAP_DIV6_EXT(M4CKCR, 0, /* it needs bit[9] control */
+                               m4_parents, ARRAY_SIZE(m4_parents), 6, 1),
+       [DIV6_HSI] = SH_CLK_MAP_DIV6_EXT(HSICKCR, 0, /* it needs bit[9] control */
+                               hsi_parents, ARRAY_SIZE(hsi_parents), 6, 2),
+       [DIV6_SPUV] = SH_CLK_MAP_DIV6_EXT(SPUVCKCR, 0,
+                               mp_parents, ARRAY_SIZE(mp_parents), 6, 2),
+};
+
+/* MSTP */
 enum {
        MSTP217, MSTP216, MSTP207, MSTP206, MSTP204, MSTP203,
+       MSTP315, MSTP314, MSTP313, MSTP312, MSTP305,
        MSTP522,
        MSTP_NR
 };
 
 static struct clk mstp_clks[MSTP_NR] = {
-       [MSTP204] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 4, 0), /* SCIFA0 */
-       [MSTP203] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 3, 0), /* SCIFA1 */
-       [MSTP206] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 6, 0), /* SCIFB0 */
-       [MSTP207] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 7, 0), /* SCIFB1 */
-       [MSTP216] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 16, 0), /* SCIFB2 */
-       [MSTP217] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR2, 17, 0), /* SCIFB3 */
+       [MSTP204] = SH_CLK_MSTP32(&div6_clks[DIV6_MP],  SMSTPCR2, 4, 0), /* SCIFA0 */
+       [MSTP203] = SH_CLK_MSTP32(&div6_clks[DIV6_MP],  SMSTPCR2, 3, 0), /* SCIFA1 */
+       [MSTP206] = SH_CLK_MSTP32(&div6_clks[DIV6_MP],  SMSTPCR2, 6, 0), /* SCIFB0 */
+       [MSTP207] = SH_CLK_MSTP32(&div6_clks[DIV6_MP],  SMSTPCR2, 7, 0), /* SCIFB1 */
+       [MSTP216] = SH_CLK_MSTP32(&div6_clks[DIV6_MP],  SMSTPCR2, 16, 0), /* SCIFB2 */
+       [MSTP217] = SH_CLK_MSTP32(&div6_clks[DIV6_MP],  SMSTPCR2, 17, 0), /* SCIFB3 */
+       [MSTP305] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC1],SMSTPCR3, 5, 0), /* MMCIF1 */
+       [MSTP312] = SH_CLK_MSTP32(&div6_clks[DIV6_SDHI2],SMSTPCR3, 12, 0), /* SDHI2 */
+       [MSTP313] = SH_CLK_MSTP32(&div6_clks[DIV6_SDHI1],SMSTPCR3, 13, 0), /* SDHI1 */
+       [MSTP314] = SH_CLK_MSTP32(&div6_clks[DIV6_SDHI0],SMSTPCR3, 14, 0), /* SDHI0 */
+       [MSTP315] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC0],SMSTPCR3, 15, 0), /* MMCIF0 */
        [MSTP522] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR5, 22, 0), /* Thermal */
 };
 
 static struct clk_lookup lookups[] = {
+       /* main clock */
+       CLKDEV_CON_ID("extal1",                 &extal1_clk),
+       CLKDEV_CON_ID("extal1_div2",            &extal1_div2_clk),
+       CLKDEV_CON_ID("extal2",                 &extal2_clk),
+       CLKDEV_CON_ID("extal2_div2",            &extal2_div2_clk),
+       CLKDEV_CON_ID("extal2_div4",            &extal2_div4_clk),
+       CLKDEV_CON_ID("fsiack",                 &fsiack_clk),
+       CLKDEV_CON_ID("fsibck",                 &fsibck_clk),
+
+       /* pll clock */
+       CLKDEV_CON_ID("pll1",                   &pll1_clk),
+       CLKDEV_CON_ID("pll1_div2",              &pll1_div2_clk),
+       CLKDEV_CON_ID("pll2",                   &pll2_clk),
+       CLKDEV_CON_ID("pll2s",                  &pll2s_clk),
+       CLKDEV_CON_ID("pll2h",                  &pll2h_clk),
+
+       /* DIV6 */
+       CLKDEV_CON_ID("zb",                     &div6_clks[DIV6_ZB]),
+       CLKDEV_CON_ID("vck1",                   &div6_clks[DIV6_VCK1]),
+       CLKDEV_CON_ID("vck2",                   &div6_clks[DIV6_VCK2]),
+       CLKDEV_CON_ID("vck3",                   &div6_clks[DIV6_VCK3]),
+       CLKDEV_CON_ID("vck4",                   &div6_clks[DIV6_VCK4]),
+       CLKDEV_CON_ID("vck5",                   &div6_clks[DIV6_VCK5]),
+       CLKDEV_CON_ID("fsia",                   &div6_clks[DIV6_FSIA]),
+       CLKDEV_CON_ID("fsib",                   &div6_clks[DIV6_FSIB]),
+       CLKDEV_CON_ID("mp",                     &div6_clks[DIV6_MP]),
+       CLKDEV_CON_ID("m4",                     &div6_clks[DIV6_M4]),
+       CLKDEV_CON_ID("hsi",                    &div6_clks[DIV6_HSI]),
+       CLKDEV_CON_ID("spuv",                   &div6_clks[DIV6_SPUV]),
+
+       /* MSTP */
        CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]),
        CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]),
        CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP206]),
@@ -81,6 +408,16 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP216]),
        CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP217]),
        CLKDEV_DEV_ID("rcar_thermal", &mstp_clks[MSTP522]),
+       CLKDEV_DEV_ID("sh_mmcif.1", &mstp_clks[MSTP305]),
+       CLKDEV_DEV_ID("ee220000.mmcif", &mstp_clks[MSTP305]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP312]),
+       CLKDEV_DEV_ID("ee140000.sdhi", &mstp_clks[MSTP312]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]),
+       CLKDEV_DEV_ID("ee120000.sdhi", &mstp_clks[MSTP313]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]),
+       CLKDEV_DEV_ID("ee100000.sdhi", &mstp_clks[MSTP314]),
+       CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP315]),
+       CLKDEV_DEV_ID("ee200000.mmcif", &mstp_clks[MSTP315]),
 
        /* for DT */
        CLKDEV_DEV_ID("e61f0000.thermal", &mstp_clks[MSTP522]),
@@ -88,21 +425,39 @@ static struct clk_lookup lookups[] = {
 
 void __init r8a73a4_clock_init(void)
 {
-       void __iomem *cpg_base, *reg;
+       void __iomem *reg;
        int k, ret = 0;
+       u32 ckscr;
+
+       reg = ioremap_nocache(CKSCR, PAGE_SIZE);
+       BUG_ON(!reg);
+       ckscr = ioread32(reg);
+       iounmap(reg);
 
-       /* fix MPCLK to EXTAL2 for now.
-        * this is needed until more detailed clock topology is supported
-        */
-       cpg_base = ioremap_nocache(CPG_BASE, CPG_LEN);
-       BUG_ON(!cpg_base);
-       reg = cpg_base + (MPCKCR - CPG_BASE);
-       iowrite32(ioread32(reg) | 1 << 7 | 0x0c, reg); /* set CKSEL */
-       iounmap(cpg_base);
+       switch ((ckscr >> 28) & 0x3) {
+       case 0:
+               main_clk.parent = &extal1_clk;
+               break;
+       case 1:
+               main_clk.parent = &extal1_div2_clk;
+               break;
+       case 2:
+               main_clk.parent = &extal2_clk;
+               break;
+       case 3:
+               main_clk.parent = &extal2_div2_clk;
+               break;
+       }
 
        for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)
                ret = clk_register(main_clks[k]);
 
+       if (!ret)
+               ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);
+
+       if (!ret)
+               ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR);
+
        if (!ret)
                ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
 
index c0d39aa6de5092f0137c0ee187a0376b4edcb00e..7fd32d604e342b5ccb6b1e119fb1e4ae1e72a59e 100644 (file)
@@ -266,7 +266,7 @@ static struct clk fsiack_clk = {
 static struct clk fsibck_clk = {
 };
 
-struct clk *main_clks[] = {
+static struct clk *main_clks[] = {
        &extalr_clk,
        &extal1_clk,
        &extal2_clk,
@@ -317,7 +317,7 @@ enum {
        DIV4_NR
 };
 
-struct clk div4_clks[DIV4_NR] = {
+static struct clk div4_clks[DIV4_NR] = {
        [DIV4_I]        = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 20, 0x6fff, CLK_ENABLE_ON_INIT),
        [DIV4_ZG]       = SH_CLK_DIV4(&pllc1_clk, FRQCRA, 16, 0x6fff, CLK_ENABLE_ON_INIT),
        [DIV4_B]        = SH_CLK_DIV4(&pllc1_clk, FRQCRA,  8, 0x6fff, CLK_ENABLE_ON_INIT),
@@ -461,7 +461,7 @@ enum {
 
        MSTP329, MSTP328, MSTP323, MSTP320,
        MSTP314, MSTP313, MSTP312,
-       MSTP309,
+       MSTP309, MSTP304,
 
        MSTP416, MSTP415, MSTP407, MSTP406,
 
@@ -499,6 +499,7 @@ static struct clk mstp_clks[MSTP_NR] = {
        [MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_HP],  SMSTPCR3, 13, 0), /* SDHI1 */
        [MSTP312] = SH_CLK_MSTP32(&div4_clks[DIV4_HP],  SMSTPCR3, 12, 0), /* MMC */
        [MSTP309] = SH_CLK_MSTP32(&div4_clks[DIV4_HP],  SMSTPCR3,  9, 0), /* GEther */
+       [MSTP304] = SH_CLK_MSTP32(&div4_clks[DIV4_CP],  SMSTPCR3,  4, 0), /* TPU0 */
 
        [MSTP416] = SH_CLK_MSTP32(&div4_clks[DIV4_HP],  SMSTPCR4, 16, 0), /* USBHOST */
        [MSTP415] = SH_CLK_MSTP32(&div4_clks[DIV4_HP],  SMSTPCR4, 15, 0), /* SDHI2 */
@@ -551,6 +552,7 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh_tmu.4",               &mstp_clks[MSTP111]),
        CLKDEV_DEV_ID("sh_tmu.5",               &mstp_clks[MSTP111]),
        CLKDEV_DEV_ID("i2c-sh_mobile.0",        &mstp_clks[MSTP116]),
+       CLKDEV_DEV_ID("fff20000.i2c",           &mstp_clks[MSTP116]),
        CLKDEV_DEV_ID("sh_mobile_lcdc_fb.1",    &mstp_clks[MSTP117]),
        CLKDEV_DEV_ID("sh_tmu.0",               &mstp_clks[MSTP125]),
        CLKDEV_DEV_ID("sh_tmu.1",               &mstp_clks[MSTP125]),
@@ -584,6 +586,7 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh_cmt.10",              &mstp_clks[MSTP329]),
        CLKDEV_DEV_ID("sh_fsi2",                &mstp_clks[MSTP328]),
        CLKDEV_DEV_ID("i2c-sh_mobile.1",        &mstp_clks[MSTP323]),
+       CLKDEV_DEV_ID("e6c20000.i2c",           &mstp_clks[MSTP323]),
        CLKDEV_DEV_ID("renesas_usbhs",          &mstp_clks[MSTP320]),
        CLKDEV_DEV_ID("sh_mobile_sdhi.0",       &mstp_clks[MSTP314]),
        CLKDEV_DEV_ID("e6850000.sdhi",          &mstp_clks[MSTP314]),
@@ -592,6 +595,8 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh_mmcif",               &mstp_clks[MSTP312]),
        CLKDEV_DEV_ID("e6bd0000.mmcif",         &mstp_clks[MSTP312]),
        CLKDEV_DEV_ID("sh-eth",                 &mstp_clks[MSTP309]),
+       CLKDEV_DEV_ID("e9a00000.sh-eth",        &mstp_clks[MSTP309]),
+       CLKDEV_DEV_ID("renesas_tpu_pwm",        &mstp_clks[MSTP304]),
 
        CLKDEV_DEV_ID("sh_mobile_sdhi.2",       &mstp_clks[MSTP415]),
        CLKDEV_DEV_ID("e6870000.sdhi",          &mstp_clks[MSTP415]),
index cd6855290b1fe27f56ba44dfa11923903b7c17bb..53798e5037d7a98b24f9a375db35a653d0c5291a 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+/*
+ *     MD      MD      MD      MD       PLLA   PLLB    EXTAL   clki    clkz
+ *     19      18      12      11                      (HMz)   (MHz)   (MHz)
+ *----------------------------------------------------------------------------
+ *     1       0       0       0       x21     x21     38.00   800     800
+ *     1       0       0       1       x24     x24     33.33   800     800
+ *     1       0       1       0       x28     x28     28.50   800     800
+ *     1       0       1       1       x32     x32     25.00   800     800
+ *     1       1       0       1       x24     x21     33.33   800     700
+ *     1       1       1       0       x28     x21     28.50   800     600
+ *     1       1       1       1       x32     x24     25.00   800     600
+ */
+
 #include <linux/io.h>
 #include <linux/sh_clk.h>
 #include <linux/clkdev.h>
+#include <mach/clock.h>
 #include <mach/common.h>
 
 #define MSTPCR0                IOMEM(0xffc80030)
@@ -37,6 +51,9 @@
 #define MSTPCR4                IOMEM(0xffc80050)
 #define MSTPCR5                IOMEM(0xffc80054)
 #define MSTPCR6                IOMEM(0xffc80058)
+#define MODEMR         0xFFCC0020
+
+#define MD(nr) BIT(nr)
 
 /* ioremap() through clock mapping mandatory to avoid
  * collision with ARM coherent DMA virtual memory range.
@@ -47,37 +64,94 @@ static struct clk_mapping cpg_mapping = {
        .len    = 0x80,
 };
 
-static struct clk clkp = {
-       .rate   = 62500000, /* FIXME: shortcut */
-       .flags  = CLK_ENABLE_ON_INIT,
+static struct clk extal_clk = {
+       /* .rate will be updated on r8a7778_clock_init() */
        .mapping = &cpg_mapping,
 };
 
+/*
+ * clock ratio of these clock will be updated
+ * on r8a7778_clock_init()
+ */
+SH_FIXED_RATIO_CLK_SET(plla_clk,       extal_clk, 1, 1);
+SH_FIXED_RATIO_CLK_SET(pllb_clk,       extal_clk, 1, 1);
+SH_FIXED_RATIO_CLK_SET(i_clk,          plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(s_clk,          plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(s1_clk,         plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(s3_clk,         plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(s4_clk,         plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(b_clk,          plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(out_clk,                plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(p_clk,          plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(g_clk,          plla_clk,  1, 1);
+SH_FIXED_RATIO_CLK_SET(z_clk,          pllb_clk,  1, 1);
+
 static struct clk *main_clks[] = {
-       &clkp,
+       &extal_clk,
+       &plla_clk,
+       &pllb_clk,
+       &i_clk,
+       &s_clk,
+       &s1_clk,
+       &s3_clk,
+       &s4_clk,
+       &b_clk,
+       &out_clk,
+       &p_clk,
+       &g_clk,
+       &z_clk,
 };
 
 enum {
+       MSTP331,
+       MSTP323, MSTP322, MSTP321,
        MSTP114,
-       MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021,
+       MSTP100,
+       MSTP030,
+       MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021,
        MSTP016, MSTP015,
+       MSTP007,
        MSTP_NR };
 
 static struct clk mstp_clks[MSTP_NR] = {
-       [MSTP114] = SH_CLK_MSTP32(&clkp, MSTPCR1, 14, 0), /* Ether */
-       [MSTP026] = SH_CLK_MSTP32(&clkp, MSTPCR0, 26, 0), /* SCIF0 */
-       [MSTP025] = SH_CLK_MSTP32(&clkp, MSTPCR0, 25, 0), /* SCIF1 */
-       [MSTP024] = SH_CLK_MSTP32(&clkp, MSTPCR0, 24, 0), /* SCIF2 */
-       [MSTP023] = SH_CLK_MSTP32(&clkp, MSTPCR0, 23, 0), /* SCIF3 */
-       [MSTP022] = SH_CLK_MSTP32(&clkp, MSTPCR0, 22, 0), /* SCIF4 */
-       [MSTP021] = SH_CLK_MSTP32(&clkp, MSTPCR0, 21, 0), /* SCIF5 */
-       [MSTP016] = SH_CLK_MSTP32(&clkp, MSTPCR0, 16, 0), /* TMU0 */
-       [MSTP015] = SH_CLK_MSTP32(&clkp, MSTPCR0, 15, 0), /* TMU1 */
+       [MSTP331] = SH_CLK_MSTP32(&s4_clk, MSTPCR3, 31, 0), /* MMC */
+       [MSTP323] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 23, 0), /* SDHI0 */
+       [MSTP322] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 22, 0), /* SDHI1 */
+       [MSTP321] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 21, 0), /* SDHI2 */
+       [MSTP114] = SH_CLK_MSTP32(&p_clk, MSTPCR1, 14, 0), /* Ether */
+       [MSTP100] = SH_CLK_MSTP32(&p_clk, MSTPCR1,  0, 0), /* USB0/1 */
+       [MSTP030] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 30, 0), /* I2C0 */
+       [MSTP029] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 29, 0), /* I2C1 */
+       [MSTP028] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 28, 0), /* I2C2 */
+       [MSTP027] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 27, 0), /* I2C3 */
+       [MSTP026] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 26, 0), /* SCIF0 */
+       [MSTP025] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 25, 0), /* SCIF1 */
+       [MSTP024] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 24, 0), /* SCIF2 */
+       [MSTP023] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 23, 0), /* SCIF3 */
+       [MSTP022] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 22, 0), /* SCIF4 */
+       [MSTP021] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 21, 0), /* SCIF5 */
+       [MSTP016] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 16, 0), /* TMU0 */
+       [MSTP015] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 15, 0), /* TMU1 */
+       [MSTP007] = SH_CLK_MSTP32(&p_clk, MSTPCR0,  7, 0), /* HSPI */
 };
 
 static struct clk_lookup lookups[] = {
+       /* main */
+       CLKDEV_CON_ID("shyway_clk",     &s_clk),
+       CLKDEV_CON_ID("peripheral_clk", &p_clk),
+
        /* MSTP32 clocks */
+       CLKDEV_DEV_ID("sh_mmcif", &mstp_clks[MSTP331]), /* MMC */
+       CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP323]), /* SDHI0 */
+       CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP322]), /* SDHI1 */
+       CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP321]), /* SDHI2 */
        CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */
+       CLKDEV_DEV_ID("ehci-platform", &mstp_clks[MSTP100]), /* USB EHCI port0/1 */
+       CLKDEV_DEV_ID("ohci-platform", &mstp_clks[MSTP100]), /* USB OHCI port0/1 */
+       CLKDEV_DEV_ID("i2c-rcar.0", &mstp_clks[MSTP030]), /* I2C0 */
+       CLKDEV_DEV_ID("i2c-rcar.1", &mstp_clks[MSTP029]), /* I2C1 */
+       CLKDEV_DEV_ID("i2c-rcar.2", &mstp_clks[MSTP028]), /* I2C2 */
+       CLKDEV_DEV_ID("i2c-rcar.3", &mstp_clks[MSTP027]), /* I2C3 */
        CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP026]), /* SCIF0 */
        CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP025]), /* SCIF1 */
        CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP024]), /* SCIF2 */
@@ -86,12 +160,93 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP021]), /* SCIF6 */
        CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP016]), /* TMU00 */
        CLKDEV_DEV_ID("sh_tmu.1", &mstp_clks[MSTP015]), /* TMU01 */
+       CLKDEV_DEV_ID("sh-hspi.0", &mstp_clks[MSTP007]), /* HSPI0 */
+       CLKDEV_DEV_ID("sh-hspi.1", &mstp_clks[MSTP007]), /* HSPI1 */
+       CLKDEV_DEV_ID("sh-hspi.2", &mstp_clks[MSTP007]), /* HSPI2 */
 };
 
 void __init r8a7778_clock_init(void)
 {
+       void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE);
+       u32 mode;
        int k, ret = 0;
 
+       BUG_ON(!modemr);
+       mode = ioread32(modemr);
+       iounmap(modemr);
+
+       switch (mode & (MD(19) | MD(18) | MD(12) | MD(11))) {
+       case MD(19):
+               extal_clk.rate = 38000000;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       21, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       21, 1);
+               break;
+       case MD(19) | MD(11):
+               extal_clk.rate = 33333333;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       24, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       24, 1);
+               break;
+       case MD(19) | MD(12):
+               extal_clk.rate = 28500000;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       28, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       28, 1);
+               break;
+       case MD(19) | MD(12) | MD(11):
+               extal_clk.rate = 25000000;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       32, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       32, 1);
+               break;
+       case MD(19) | MD(18) | MD(11):
+               extal_clk.rate = 33333333;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       24, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       21, 1);
+               break;
+       case MD(19) | MD(18) | MD(12):
+               extal_clk.rate = 28500000;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       28, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       21, 1);
+               break;
+       case MD(19) | MD(18) | MD(12) | MD(11):
+               extal_clk.rate = 25000000;
+               SH_CLK_SET_RATIO(&plla_clk_ratio,       32, 1);
+               SH_CLK_SET_RATIO(&pllb_clk_ratio,       24, 1);
+               break;
+       default:
+               BUG();
+       }
+
+       if (mode & MD(1)) {
+               SH_CLK_SET_RATIO(&i_clk_ratio,  1, 1);
+               SH_CLK_SET_RATIO(&s_clk_ratio,  1, 3);
+               SH_CLK_SET_RATIO(&s1_clk_ratio, 1, 6);
+               SH_CLK_SET_RATIO(&s3_clk_ratio, 1, 4);
+               SH_CLK_SET_RATIO(&s4_clk_ratio, 1, 8);
+               SH_CLK_SET_RATIO(&p_clk_ratio,  1, 12);
+               SH_CLK_SET_RATIO(&g_clk_ratio,  1, 12);
+               if (mode & MD(2)) {
+                       SH_CLK_SET_RATIO(&b_clk_ratio,          1, 18);
+                       SH_CLK_SET_RATIO(&out_clk_ratio,        1, 18);
+               } else {
+                       SH_CLK_SET_RATIO(&b_clk_ratio,          1, 12);
+                       SH_CLK_SET_RATIO(&out_clk_ratio,        1, 12);
+               }
+       } else {
+               SH_CLK_SET_RATIO(&i_clk_ratio,  1, 1);
+               SH_CLK_SET_RATIO(&s_clk_ratio,  1, 4);
+               SH_CLK_SET_RATIO(&s1_clk_ratio, 1, 8);
+               SH_CLK_SET_RATIO(&s3_clk_ratio, 1, 4);
+               SH_CLK_SET_RATIO(&s4_clk_ratio, 1, 8);
+               SH_CLK_SET_RATIO(&p_clk_ratio,  1, 16);
+               SH_CLK_SET_RATIO(&g_clk_ratio,  1, 12);
+               if (mode & MD(2)) {
+                       SH_CLK_SET_RATIO(&b_clk_ratio,          1, 16);
+                       SH_CLK_SET_RATIO(&out_clk_ratio,        1, 16);
+               } else {
+                       SH_CLK_SET_RATIO(&b_clk_ratio,          1, 12);
+                       SH_CLK_SET_RATIO(&out_clk_ratio,        1, 12);
+               }
+       }
+
        for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)
                ret = clk_register(main_clks[k]);
 
index 31d5cd4d97879f7d9243c9310eb0ea1dd8c7f047..9daeb8c374833b239c8d7bfc95f322c6253369aa 100644 (file)
@@ -112,7 +112,7 @@ static struct clk *main_clks[] = {
 };
 
 enum { MSTP323, MSTP322, MSTP321, MSTP320,
-       MSTP115, MSTP114,
+       MSTP116, MSTP115, MSTP114,
        MSTP103, MSTP101, MSTP100,
        MSTP030,
        MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021,
@@ -125,6 +125,7 @@ static struct clk mstp_clks[MSTP_NR] = {
        [MSTP322] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 22, 0), /* SDHI1 */
        [MSTP321] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 21, 0), /* SDHI2 */
        [MSTP320] = SH_CLK_MSTP32(&clkp_clk, MSTPCR3, 20, 0), /* SDHI3 */
+       [MSTP116] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 16, 0), /* PCIe */
        [MSTP115] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 15, 0), /* SATA */
        [MSTP114] = SH_CLK_MSTP32(&clkp_clk, MSTPCR1, 14, 0), /* Ether */
        [MSTP103] = SH_CLK_MSTP32(&clks_clk, MSTPCR1,  3, 0), /* DU */
@@ -161,6 +162,7 @@ static struct clk_lookup lookups[] = {
        CLKDEV_CON_ID("peripheral_clk", &clkp_clk),
 
        /* MSTP32 clocks */
+       CLKDEV_DEV_ID("rcar-pcie", &mstp_clks[MSTP116]), /* PCIe */
        CLKDEV_DEV_ID("sata_rcar", &mstp_clks[MSTP115]), /* SATA */
        CLKDEV_DEV_ID("fc600000.sata", &mstp_clks[MSTP115]), /* SATA w/DT */
        CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */
index bad9bf2e34d600a37037e348f8599226f8b38110..5d71313df52d92d732db8bad1c52df047d88633d 100644 (file)
 #include <linux/kernel.h>
 #include <linux/sh_clk.h>
 #include <linux/clkdev.h>
+#include <mach/clock.h>
 #include <mach/common.h>
 
+/*
+ *   MD                EXTAL           PLL0    PLL1    PLL3
+ * 14 13 19    (MHz)           *1      *1
+ *---------------------------------------------------
+ * 0  0  0     15 x 1          x172/2  x208/2  x106
+ * 0  0  1     15 x 1          x172/2  x208/2  x88
+ * 0  1  0     20 x 1          x130/2  x156/2  x80
+ * 0  1  1     20 x 1          x130/2  x156/2  x66
+ * 1  0  0     26 / 2          x200/2  x240/2  x122
+ * 1  0  1     26 / 2          x200/2  x240/2  x102
+ * 1  1  0     30 / 2          x172/2  x208/2  x106
+ * 1  1  1     30 / 2          x172/2  x208/2  x88
+ *
+ * *1 :        Table 7.6 indicates VCO ouput (PLLx = VCO/2)
+ *     see "p1 / 2" on R8A7790_CLOCK_ROOT() below
+ */
+
+#define MD(nr) (1 << nr)
+
 #define CPG_BASE 0xe6150000
 #define CPG_LEN 0x1000
 
 #define SMSTPCR2 0xe6150138
+#define SMSTPCR3 0xe615013c
 #define SMSTPCR7 0xe615014c
 
+#define MODEMR         0xE6160060
+#define SDCKCR         0xE6150074
+#define SD2CKCR                0xE6150078
+#define SD3CKCR                0xE615007C
+#define MMC0CKCR       0xE6150240
+#define MMC1CKCR       0xE6150244
+#define SSPCKCR                0xE6150248
+#define SSPRSCKCR      0xE615024C
+
 static struct clk_mapping cpg_mapping = {
        .phys   = CPG_BASE,
        .len    = CPG_LEN,
 };
 
-static struct clk p_clk = {
-       .rate   = 65000000, /* shortcut for now */
+static struct clk extal_clk = {
+       /* .rate will be updated on r8a7790_clock_init() */
        .mapping        = &cpg_mapping,
 };
 
-static struct clk mp_clk = {
-       .rate   = 52000000,  /* shortcut for now */
-       .mapping        = &cpg_mapping,
+static struct sh_clk_ops followparent_clk_ops = {
+       .recalc = followparent_recalc,
+};
+
+static struct clk main_clk = {
+       /* .parent will be set r8a73a4_clock_init */
+       .ops    = &followparent_clk_ops,
 };
 
+/*
+ * clock ratio of these clock will be updated
+ * on r8a7790_clock_init()
+ */
+SH_FIXED_RATIO_CLK_SET(pll1_clk,               main_clk,       1, 1);
+SH_FIXED_RATIO_CLK_SET(pll3_clk,               main_clk,       1, 1);
+SH_FIXED_RATIO_CLK_SET(lb_clk,                 pll1_clk,       1, 1);
+SH_FIXED_RATIO_CLK_SET(qspi_clk,               pll1_clk,       1, 1);
+
+/* fixed ratio clock */
+SH_FIXED_RATIO_CLK_SET(extal_div2_clk,         extal_clk,      1, 2);
+SH_FIXED_RATIO_CLK_SET(cp_clk,                 extal_clk,      1, 2);
+
+SH_FIXED_RATIO_CLK_SET(pll1_div2_clk,          pll1_clk,       1, 2);
+SH_FIXED_RATIO_CLK_SET(zg_clk,                 pll1_clk,       1, 3);
+SH_FIXED_RATIO_CLK_SET(zx_clk,                 pll1_clk,       1, 3);
+SH_FIXED_RATIO_CLK_SET(zs_clk,                 pll1_clk,       1, 6);
+SH_FIXED_RATIO_CLK_SET(hp_clk,                 pll1_clk,       1, 12);
+SH_FIXED_RATIO_CLK_SET(i_clk,                  pll1_clk,       1, 2);
+SH_FIXED_RATIO_CLK_SET(b_clk,                  pll1_clk,       1, 12);
+SH_FIXED_RATIO_CLK_SET(p_clk,                  pll1_clk,       1, 24);
+SH_FIXED_RATIO_CLK_SET(cl_clk,                 pll1_clk,       1, 48);
+SH_FIXED_RATIO_CLK_SET(m2_clk,                 pll1_clk,       1, 8);
+SH_FIXED_RATIO_CLK_SET(imp_clk,                        pll1_clk,       1, 4);
+SH_FIXED_RATIO_CLK_SET(rclk_clk,               pll1_clk,       1, (48 * 1024));
+SH_FIXED_RATIO_CLK_SET(oscclk_clk,             pll1_clk,       1, (12 * 1024));
+
+SH_FIXED_RATIO_CLK_SET(zb3_clk,                        pll3_clk,       1, 4);
+SH_FIXED_RATIO_CLK_SET(zb3d2_clk,              pll3_clk,       1, 8);
+SH_FIXED_RATIO_CLK_SET(ddr_clk,                        pll3_clk,       1, 8);
+SH_FIXED_RATIO_CLK_SET(mp_clk,                 pll1_div2_clk,  1, 15);
+
 static struct clk *main_clks[] = {
+       &extal_clk,
+       &extal_div2_clk,
+       &main_clk,
+       &pll1_clk,
+       &pll1_div2_clk,
+       &pll3_clk,
+       &lb_clk,
+       &qspi_clk,
+       &zg_clk,
+       &zx_clk,
+       &zs_clk,
+       &hp_clk,
+       &i_clk,
+       &b_clk,
        &p_clk,
+       &cl_clk,
+       &m2_clk,
+       &imp_clk,
+       &rclk_clk,
+       &oscclk_clk,
+       &zb3_clk,
+       &zb3d2_clk,
+       &ddr_clk,
        &mp_clk,
+       &cp_clk,
+};
+
+/* SDHI (DIV4) clock */
+static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 18, 24, 0, 36, 48, 10 };
+
+static struct clk_div_mult_table div4_div_mult_table = {
+       .divisors = divisors,
+       .nr_divisors = ARRAY_SIZE(divisors),
+};
+
+static struct clk_div4_table div4_table = {
+       .div_mult_table = &div4_div_mult_table,
+};
+
+enum {
+       DIV4_SDH, DIV4_SD0, DIV4_SD1, DIV4_NR
+};
+
+static struct clk div4_clks[DIV4_NR] = {
+       [DIV4_SDH] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 8, 0x0dff, CLK_ENABLE_ON_INIT),
+       [DIV4_SD0] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 4, 0x1de0, CLK_ENABLE_ON_INIT),
+       [DIV4_SD1] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 0, 0x1de0, CLK_ENABLE_ON_INIT),
+};
+
+/* DIV6 clocks */
+enum {
+       DIV6_SD2, DIV6_SD3,
+       DIV6_MMC0, DIV6_MMC1,
+       DIV6_SSP, DIV6_SSPRS,
+       DIV6_NR
+};
+
+static struct clk div6_clks[DIV6_NR] = {
+       [DIV6_SD2]      = SH_CLK_DIV6(&pll1_div2_clk, SD2CKCR, 0),
+       [DIV6_SD3]      = SH_CLK_DIV6(&pll1_div2_clk, SD3CKCR, 0),
+       [DIV6_MMC0]     = SH_CLK_DIV6(&pll1_div2_clk, MMC0CKCR, 0),
+       [DIV6_MMC1]     = SH_CLK_DIV6(&pll1_div2_clk, MMC1CKCR, 0),
+       [DIV6_SSP]      = SH_CLK_DIV6(&pll1_div2_clk, SSPCKCR, 0),
+       [DIV6_SSPRS]    = SH_CLK_DIV6(&pll1_div2_clk, SSPRSCKCR, 0),
+};
+
+/* MSTP */
+enum {
+       MSTP721, MSTP720,
+       MSTP717, MSTP716,
+       MSTP315, MSTP314, MSTP313, MSTP312, MSTP311, MSTP305, MSTP304,
+       MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, MSTP202,
+       MSTP_NR
 };
 
-enum { MSTP721, MSTP720,
-       MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP_NR };
 static struct clk mstp_clks[MSTP_NR] = {
        [MSTP721] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 21, 0), /* SCIF0 */
        [MSTP720] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 20, 0), /* SCIF1 */
+       [MSTP315] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC0], SMSTPCR3, 15, 0), /* MMC0 */
+       [MSTP314] = SH_CLK_MSTP32(&div4_clks[DIV4_SD0], SMSTPCR3, 14, 0), /* SDHI0 */
+       [MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_SD1], SMSTPCR3, 13, 0), /* SDHI1 */
+       [MSTP312] = SH_CLK_MSTP32(&div6_clks[DIV6_SD2], SMSTPCR3, 12, 0), /* SDHI2 */
+       [MSTP311] = SH_CLK_MSTP32(&div6_clks[DIV6_SD3], SMSTPCR3, 11, 0), /* SDHI3 */
+       [MSTP305] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC1], SMSTPCR3, 5, 0), /* MMC1 */
+       [MSTP304] = SH_CLK_MSTP32(&cp_clk, SMSTPCR3, 4, 0), /* TPU0 */
        [MSTP216] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 16, 0), /* SCIFB2 */
        [MSTP207] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 7, 0), /* SCIFB1 */
        [MSTP206] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 6, 0), /* SCIFB0 */
        [MSTP204] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 4, 0), /* SCIFA0 */
        [MSTP203] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 3, 0), /* SCIFA1 */
        [MSTP202] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 2, 0), /* SCIFA2 */
+       [MSTP717] = SH_CLK_MSTP32(&zs_clk, SMSTPCR7, 17, 0), /* HSCIF0 */
+       [MSTP716] = SH_CLK_MSTP32(&zs_clk, SMSTPCR7, 16, 0), /* HSCIF1 */
 };
 
 static struct clk_lookup lookups[] = {
+
+       /* main clocks */
+       CLKDEV_CON_ID("extal",          &extal_clk),
+       CLKDEV_CON_ID("extal_div2",     &extal_div2_clk),
+       CLKDEV_CON_ID("main",           &main_clk),
+       CLKDEV_CON_ID("pll1",           &pll1_clk),
+       CLKDEV_CON_ID("pll1_div2",      &pll1_div2_clk),
+       CLKDEV_CON_ID("pll3",           &pll3_clk),
+       CLKDEV_CON_ID("zg",             &zg_clk),
+       CLKDEV_CON_ID("zx",             &zx_clk),
+       CLKDEV_CON_ID("zs",             &zs_clk),
+       CLKDEV_CON_ID("hp",             &hp_clk),
+       CLKDEV_CON_ID("i",              &i_clk),
+       CLKDEV_CON_ID("b",              &b_clk),
+       CLKDEV_CON_ID("lb",             &lb_clk),
+       CLKDEV_CON_ID("p",              &p_clk),
+       CLKDEV_CON_ID("cl",             &cl_clk),
+       CLKDEV_CON_ID("m2",             &m2_clk),
+       CLKDEV_CON_ID("imp",            &imp_clk),
+       CLKDEV_CON_ID("rclk",           &rclk_clk),
+       CLKDEV_CON_ID("oscclk",         &oscclk_clk),
+       CLKDEV_CON_ID("zb3",            &zb3_clk),
+       CLKDEV_CON_ID("zb3d2",          &zb3d2_clk),
+       CLKDEV_CON_ID("ddr",            &ddr_clk),
+       CLKDEV_CON_ID("mp",             &mp_clk),
+       CLKDEV_CON_ID("qspi",           &qspi_clk),
+       CLKDEV_CON_ID("cp",             &cp_clk),
+
+       /* DIV4 */
+       CLKDEV_CON_ID("sdh",            &div4_clks[DIV4_SDH]),
+
+       /* DIV6 */
+       CLKDEV_CON_ID("ssp",            &div6_clks[DIV6_SSP]),
+       CLKDEV_CON_ID("ssprs",          &div6_clks[DIV6_SSPRS]),
+
+       /* MSTP */
        CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]),
        CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]),
        CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP206]),
@@ -72,15 +252,76 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP202]),
        CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP721]),
        CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP720]),
+       CLKDEV_DEV_ID("sh-sci.8", &mstp_clks[MSTP717]),
+       CLKDEV_DEV_ID("sh-sci.9", &mstp_clks[MSTP716]),
+       CLKDEV_DEV_ID("ee200000.mmcif", &mstp_clks[MSTP315]),
+       CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP315]),
+       CLKDEV_DEV_ID("ee100000.sdhi", &mstp_clks[MSTP314]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]),
+       CLKDEV_DEV_ID("ee120000.sdhi", &mstp_clks[MSTP313]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]),
+       CLKDEV_DEV_ID("ee140000.sdhi", &mstp_clks[MSTP312]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP312]),
+       CLKDEV_DEV_ID("ee160000.sdhi", &mstp_clks[MSTP311]),
+       CLKDEV_DEV_ID("sh_mobile_sdhi.3", &mstp_clks[MSTP311]),
+       CLKDEV_DEV_ID("ee220000.mmcif", &mstp_clks[MSTP305]),
+       CLKDEV_DEV_ID("sh_mmcif.1", &mstp_clks[MSTP305]),
 };
 
+#define R8A7790_CLOCK_ROOT(e, m, p0, p1, p30, p31)             \
+       extal_clk.rate  = e * 1000 * 1000;                      \
+       main_clk.parent = m;                                    \
+       SH_CLK_SET_RATIO(&pll1_clk_ratio, p1 / 2, 1);           \
+       if (mode & MD(19))                                      \
+               SH_CLK_SET_RATIO(&pll3_clk_ratio, p31, 1);      \
+       else                                                    \
+               SH_CLK_SET_RATIO(&pll3_clk_ratio, p30, 1)
+
+
 void __init r8a7790_clock_init(void)
 {
+       void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE);
+       u32 mode;
        int k, ret = 0;
 
+       BUG_ON(!modemr);
+       mode = ioread32(modemr);
+       iounmap(modemr);
+
+       switch (mode & (MD(14) | MD(13))) {
+       case 0:
+               R8A7790_CLOCK_ROOT(15, &extal_clk, 172, 208, 106, 88);
+               break;
+       case MD(13):
+               R8A7790_CLOCK_ROOT(20, &extal_clk, 130, 156, 80, 66);
+               break;
+       case MD(14):
+               R8A7790_CLOCK_ROOT(26, &extal_div2_clk, 200, 240, 122, 102);
+               break;
+       case MD(13) | MD(14):
+               R8A7790_CLOCK_ROOT(30, &extal_div2_clk, 172, 208, 106, 88);
+               break;
+       }
+
+       if (mode & (MD(18)))
+               SH_CLK_SET_RATIO(&lb_clk_ratio, 1, 36);
+       else
+               SH_CLK_SET_RATIO(&lb_clk_ratio, 1, 24);
+
+       if ((mode & (MD(3) | MD(2) | MD(1))) == MD(2))
+               SH_CLK_SET_RATIO(&qspi_clk_ratio, 1, 16);
+       else
+               SH_CLK_SET_RATIO(&qspi_clk_ratio, 1, 20);
+
        for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)
                ret = clk_register(main_clks[k]);
 
+       if (!ret)
+               ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);
+
+       if (!ret)
+               ret = sh_clk_div6_register(div6_clks, DIV6_NR);
+
        if (!ret)
                ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
 
index 784fbaa4cc55e6bbe826df552e876737ce6dd7c4..d9fd0336b910b9fd1cbb79de09a9e5fdca612385 100644 (file)
@@ -228,6 +228,11 @@ enum { DIV4_I, DIV4_ZG, DIV4_M3, DIV4_B, DIV4_M1, DIV4_M2,
 
 static struct clk div4_clks[DIV4_NR] = {
        [DIV4_I] = DIV4(FRQCRA, 20, 0xdff, CLK_ENABLE_ON_INIT),
+       /*
+        * ZG clock is dividing PLL0 frequency to supply SGX. Make sure not to
+        * exceed maximum frequencies of 201.5MHz for VDD_DVFS=1.175 and
+        * 239.2MHz for VDD_DVFS=1.315V.
+        */
        [DIV4_ZG] = SH_CLK_DIV4(&pll0_clk, FRQCRA, 16, 0xd7f, CLK_ENABLE_ON_INIT),
        [DIV4_M3] = DIV4(FRQCRA, 12, 0x1dff, CLK_ENABLE_ON_INIT),
        [DIV4_B] = DIV4(FRQCRA, 8, 0xdff, CLK_ENABLE_ON_INIT),
@@ -252,6 +257,101 @@ static struct clk twd_clk = {
        .ops = &twd_clk_ops,
 };
 
+static struct sh_clk_ops zclk_ops, kicker_ops;
+static const struct sh_clk_ops *div4_clk_ops;
+
+static int zclk_set_rate(struct clk *clk, unsigned long rate)
+{
+       int ret;
+
+       if (!clk->parent || !__clk_get(clk->parent))
+               return -ENODEV;
+
+       if (readl(FRQCRB) & (1 << 31))
+               return -EBUSY;
+
+       if (rate == clk_get_rate(clk->parent)) {
+               /* 1:1 - switch off divider */
+               __raw_writel(__raw_readl(FRQCRB) & ~(1 << 28), FRQCRB);
+               /* nullify the divider to prepare for the next time */
+               ret = div4_clk_ops->set_rate(clk, rate / 2);
+               if (!ret)
+                       ret = frqcr_kick();
+               if (ret > 0)
+                       ret = 0;
+       } else {
+               /* Enable the divider */
+               __raw_writel(__raw_readl(FRQCRB) | (1 << 28), FRQCRB);
+
+               ret = frqcr_kick();
+               if (ret >= 0)
+                       /*
+                        * set the divider - call the DIV4 method, it will kick
+                        * FRQCRB too
+                        */
+                       ret = div4_clk_ops->set_rate(clk, rate);
+               if (ret < 0)
+                       goto esetrate;
+       }
+
+esetrate:
+       __clk_put(clk->parent);
+       return ret;
+}
+
+static long zclk_round_rate(struct clk *clk, unsigned long rate)
+{
+       unsigned long div_freq = div4_clk_ops->round_rate(clk, rate),
+               parent_freq = clk_get_rate(clk->parent);
+
+       if (rate > div_freq && abs(parent_freq - rate) < rate - div_freq)
+               return parent_freq;
+
+       return div_freq;
+}
+
+static unsigned long zclk_recalc(struct clk *clk)
+{
+       /*
+        * Must recalculate frequencies in case PLL0 has been changed, even if
+        * the divisor is unused ATM!
+        */
+       unsigned long div_freq = div4_clk_ops->recalc(clk);
+
+       if (__raw_readl(FRQCRB) & (1 << 28))
+               return div_freq;
+
+       return clk_get_rate(clk->parent);
+}
+
+static int kicker_set_rate(struct clk *clk, unsigned long rate)
+{
+       if (__raw_readl(FRQCRB) & (1 << 31))
+               return -EBUSY;
+
+       return div4_clk_ops->set_rate(clk, rate);
+}
+
+static void div4_clk_extend(void)
+{
+       int i;
+
+       div4_clk_ops = div4_clks[0].ops;
+
+       /* Add a kicker-busy check before changing the rate */
+       kicker_ops = *div4_clk_ops;
+       /* We extend the DIV4 clock with a 1:1 pass-through case */
+       zclk_ops = *div4_clk_ops;
+
+       kicker_ops.set_rate = kicker_set_rate;
+       zclk_ops.set_rate = zclk_set_rate;
+       zclk_ops.round_rate = zclk_round_rate;
+       zclk_ops.recalc = zclk_recalc;
+
+       for (i = 0; i < DIV4_NR; i++)
+               div4_clks[i].ops = i == DIV4_Z ? &zclk_ops : &kicker_ops;
+}
+
 enum { DIV6_VCK1, DIV6_VCK2, DIV6_VCK3, DIV6_ZB1,
        DIV6_FLCTL, DIV6_SDHI0, DIV6_SDHI1, DIV6_SDHI2,
        DIV6_FSIA, DIV6_FSIB, DIV6_SUB,
@@ -450,7 +550,7 @@ static struct clk *late_main_clks[] = {
 };
 
 enum { MSTP001,
-       MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, MSTP118, MSTP116, MSTP100,
+       MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, MSTP118, MSTP116, MSTP112, MSTP100,
        MSTP219, MSTP218, MSTP217,
        MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
        MSTP331, MSTP329, MSTP328, MSTP325, MSTP323, MSTP322,
@@ -471,6 +571,7 @@ static struct clk mstp_clks[MSTP_NR] = {
        [MSTP125] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */
        [MSTP118] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 18, 0), /* DSITX0 */
        [MSTP116] = MSTP(&div4_clks[DIV4_HP], SMSTPCR1, 16, 0), /* IIC0 */
+       [MSTP112] = MSTP(&div4_clks[DIV4_ZG], SMSTPCR1, 12, 0), /* SGX */
        [MSTP100] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */
        [MSTP219] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 19, 0), /* SCIFA7 */
        [MSTP218] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* SY-DMAC */
@@ -513,6 +614,9 @@ static struct clk_lookup lookups[] = {
        CLKDEV_CON_ID("r_clk", &r_clk),
        CLKDEV_DEV_ID("smp_twd", &twd_clk), /* smp_twd */
 
+       /* DIV4 clocks */
+       CLKDEV_DEV_ID("cpufreq-cpu0", &div4_clks[DIV4_Z]),
+
        /* DIV6 clocks */
        CLKDEV_CON_ID("vck1_clk", &div6_clks[DIV6_VCK1]),
        CLKDEV_CON_ID("vck2_clk", &div6_clks[DIV6_VCK2]),
@@ -604,8 +708,11 @@ void __init sh73a0_clock_init(void)
        for (k = 0; !ret && (k < ARRAY_SIZE(main_clks)); k++)
                ret = clk_register(main_clks[k]);
 
-       if (!ret)
+       if (!ret) {
                ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);
+               if (!ret)
+                       div4_clk_extend();
+       }
 
        if (!ret)
                ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR);
index 7d113f898e7f62b57440348d6ce201d5c2441643..6f986546725892df07a62fd097ab363a4e7270f7 100644 (file)
 
        __CPUINIT
 /*
- * Reset vector for secondary CPUs.
+ * Boot code for secondary CPUs.
  *
  * First we turn on L1 cache coherency for our CPU. Then we jump to
  * shmobile_invalidate_start that invalidates the cache and hands over control
  * to the common ARM startup code.
- * This function will be mapped to address 0 by the SBAR register.
- * A normal branch is out of range here so we need a long jump. We jump to
- * the physical address as the MMU is still turned off.
  */
-       .align  12
-ENTRY(shmobile_secondary_vector_scu)
-       mrc     p15, 0, r0, c0, c0, 5   @ read MIPDR
-       and     r0, r0, #3              @ mask out cpu ID
-       lsl     r0, r0, #3              @ we will shift by cpu_id * 8 bits
-       ldr     r1, 2f
-       ldr     r1, [r1]                @ SCU base address
-       ldr     r2, [r1, #8]            @ SCU Power Status Register
+ENTRY(shmobile_boot_scu)
+                                       @ r0 = SCU base address
+       mrc     p15, 0, r1, c0, c0, 5   @ read MIPDR
+       and     r1, r1, #3              @ mask out cpu ID
+       lsl     r1, r1, #3              @ we will shift by cpu_id * 8 bits
+       ldr     r2, [r0, #8]            @ SCU Power Status Register
        mov     r3, #3
-       bic     r2, r2, r3, lsl r0      @ Clear bits of our CPU (Run Mode)
-       str     r2, [r1, #8]            @ write back
+       bic     r2, r2, r3, lsl r1      @ Clear bits of our CPU (Run Mode)
+       str     r2, [r0, #8]            @ write back
 
-       ldr     pc, 1f
-1:     .long shmobile_invalidate_start - PAGE_OFFSET + PLAT_PHYS_OFFSET
-2:     .long shmobile_scu_base - PAGE_OFFSET + PLAT_PHYS_OFFSET
-ENDPROC(shmobile_secondary_vector_scu)
+       b       shmobile_invalidate_start
+ENDPROC(shmobile_boot_scu)
 
        .text
        .globl  shmobile_scu_base
index 96001fd49b6c90e63603186f8a1be99efb3595a6..559d1ce5f57ee0a47ffbea3d1332b41aca0fc03d 100644 (file)
@@ -27,7 +27,14 @@ ENDPROC(shmobile_invalidate_start)
  * We need _long_ jump to the physical address.
  */
        .align  12
-ENTRY(shmobile_secondary_vector)
+ENTRY(shmobile_boot_vector)
+       ldr     r0, 2f
        ldr     pc, 1f
-1:     .long   shmobile_invalidate_start - PAGE_OFFSET + PLAT_PHYS_OFFSET
-ENDPROC(shmobile_secondary_vector)
+ENDPROC(shmobile_boot_vector)
+
+       .globl  shmobile_boot_fn
+shmobile_boot_fn:
+1:     .space  4
+       .globl  shmobile_boot_arg
+shmobile_boot_arg:
+2:     .space  4
index 76ac61292e48ace6cc6740ebac5d2c03c8ff8267..03e56074928c23fcb053b22b0ac523240e3976d8 100644 (file)
@@ -24,16 +24,16 @@ struct clk name = {                 \
 }
 
 #define SH_FIXED_RATIO_CLK(name, p, r)         \
-static SH_FIXED_RATIO_CLKg(name, p, r);
+static SH_FIXED_RATIO_CLKg(name, p, r)
 
 #define SH_FIXED_RATIO_CLK_SET(name, p, m, d)  \
        SH_CLK_RATIO(name, m, d);               \
-       SH_FIXED_RATIO_CLK(name, p, name);
+       SH_FIXED_RATIO_CLK(name, p, name)
 
 #define SH_CLK_SET_RATIO(p, m, d)      \
-{                      \
+do {                   \
        (p)->mul = m;   \
        (p)->div = d;   \
-}
+} while (0)
 
 #endif
index 4634a5d4b63f8645d84cad4f122061f46642515f..e818f029d8e3e863dfe9a83beef21ebc84328811 100644 (file)
@@ -7,8 +7,10 @@ extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz,
                         unsigned int mult, unsigned int div);
 struct twd_local_timer;
 extern void shmobile_setup_console(void);
-extern void shmobile_secondary_vector(void);
-extern void shmobile_secondary_vector_scu(void);
+extern void shmobile_boot_vector(void);
+extern unsigned long shmobile_boot_fn;
+extern unsigned long shmobile_boot_arg;
+extern void shmobile_boot_scu(void);
 struct clk;
 extern int shmobile_clk_init(void);
 extern void shmobile_handle_irq_intc(struct pt_regs *);
diff --git a/arch/arm/mach-shmobile/include/mach/head-ap4evb.txt b/arch/arm/mach-shmobile/include/mach/head-ap4evb.txt
deleted file mode 100644 (file)
index 9f134df..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-LIST "partner-jet-setup.txt"
-LIST "(C) Copyright 2010 Renesas Solutions Corp"
-LIST "Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>"
-
-LIST "RWT Setting"
-EW 0xE6020004, 0xA500
-EW 0xE6030004, 0xA500
-
-LIST "GPIO Setting"
-EB 0xE6051013, 0xA2
-
-LIST "CPG"
-ED 0xE61500C0, 0x00000002
-
-WAIT 1, 0xFE40009C
-
-LIST "FRQCR"
-ED 0xE6150000, 0x2D1305C3
-ED 0xE61500E0, 0x9E40358E
-ED 0xE6150004, 0x80331050
-
-WAIT 1, 0xFE40009C
-
-ED 0xE61500E4, 0x00002000
-
-WAIT 1, 0xFE40009C
-
-LIST "PLL"
-ED 0xE6150028, 0x00004000
-
-WAIT 1, 0xFE40009C
-
-ED 0xE615002C, 0x93000040
-
-WAIT 1, 0xFE40009C
-
-LIST "SUB/USBClk"
-ED 0xE6150080, 0x00000180
-
-LIST "BSC"
-ED 0xFEC10000, 0x00E0001B
-
-LIST "SBSC1"
-ED 0xFE400354, 0x01AD8000
-ED 0xFE400354, 0x01AD8001
-
-WAIT 5, 0xFE40009C
-
-ED 0xFE400008, 0xBCC90151
-ED 0xFE400040, 0x41774113
-ED 0xFE400044, 0x2712E229
-ED 0xFE400048, 0x20C18505
-ED 0xFE40004C, 0x00110209
-ED 0xFE400010, 0x00000087
-
-WAIT 30, 0xFE40009C
-
-ED 0xFE400084, 0x0000003F
-EB 0xFE500000, 0x00
-
-WAIT 5, 0xFE40009C
-
-ED 0xFE400084, 0x0000FF0A
-EB 0xFE500000, 0x00
-
-WAIT 1, 0xFE40009C
-
-ED 0xFE400084, 0x00002201
-EB 0xFE500000, 0x00
-ED 0xFE400084, 0x00000302
-EB 0xFE500000, 0x00
-EB 0xFE5C0000, 0x00
-ED 0xFE400008, 0xBCC90159
-ED 0xFE40008C, 0x88800004
-ED 0xFE400094, 0x00000004
-ED 0xFE400028, 0xA55A0032
-ED 0xFE40002C, 0xA55A000C
-ED 0xFE400020, 0xA55A2048
-ED 0xFE400008, 0xBCC90959
-
-LIST "Change CPGA setting"
-ED 0xE61500E0, 0x9E40352E
-ED 0xE6150004, 0x80331050
-
-WAIT 1, 0xFE40009C
-
-ED 0xFE400354, 0x01AD8002
-
-LIST "SCIF0 - Serial port for earlyprintk"
-EB 0xE6053098, 0xe1
-EW 0xE6C40000, 0x0000
-EB 0xE6C40004, 0x19
-EW 0xE6C40008, 0x0030
index b2074e2acb15f2641f5b92fc65fad9ff619c54cb..d241bfd6926de3d4f9fddaed6aa6ab19e9158383 100644 (file)
@@ -16,4 +16,9 @@
 #define IRQPIN_BASE            2000
 #define irq_pin(nr)            ((nr) + IRQPIN_BASE)
 
+/* GPIO IRQ */
+#define _GPIO_IRQ_BASE         2500
+#define GPIO_IRQ_BASE(x)       (_GPIO_IRQ_BASE + (32 * x))
+#define GPIO_IRQ(x, y)         (_GPIO_IRQ_BASE + (32 * x) + y)
+
 #endif /* __ASM_MACH_IRQS_H */
diff --git a/arch/arm/mach-shmobile/include/mach/memory.h b/arch/arm/mach-shmobile/include/mach/memory.h
deleted file mode 100644 (file)
index 0ffbe81..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef __ASM_MACH_MEMORY_H
-#define __ASM_MACH_MEMORY_H
-
-#define PLAT_PHYS_OFFSET       UL(CONFIG_MEMORY_START)
-#define MEM_SIZE       UL(CONFIG_MEMORY_SIZE)
-
-#endif /* __ASM_MACH_MEMORY_H */
diff --git a/arch/arm/mach-shmobile/include/mach/mmc-ap4eb.h b/arch/arm/mach-shmobile/include/mach/mmc-ap4eb.h
deleted file mode 100644 (file)
index db59fdb..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef MMC_AP4EB_H
-#define MMC_AP4EB_H
-
-#define PORT185CR      (void __iomem *)0xe60520b9
-#define PORT186CR      (void __iomem *)0xe60520ba
-#define PORT187CR      (void __iomem *)0xe60520bb
-#define PORT188CR      (void __iomem *)0xe60520bc
-
-#define PORTR191_160DR (void __iomem *)0xe6056014
-
-static inline void mmc_init_progress(void)
-{
-       /* Initialise LEDS1-4
-        * registers: PORT185CR-PORT188CR (LED1-LED4 Control)
-        * value:     0x10 - enable output
-        */
-       __raw_writeb(0x10, PORT185CR);
-       __raw_writeb(0x10, PORT186CR);
-       __raw_writeb(0x10, PORT187CR);
-       __raw_writeb(0x10, PORT188CR);
-}
-
-static inline void mmc_update_progress(int n)
-{
-       __raw_writel((__raw_readl(PORTR191_160DR) & ~(0xf << 25)) |
-                    (1 << (25 + n)), PORTR191_160DR);
-}
-
-#endif /* MMC_AP4EB_H */
index 21a59db638bb0cde58592b0bb6d99036439f24f4..e979b8fc1da20d72b5b614e016817bd5d544f2d0 100644 (file)
@@ -7,9 +7,7 @@
  *
  **************************************************/
 
-#ifdef CONFIG_MACH_AP4EVB
-#include "mach/mmc-ap4eb.h"
-#elif defined(CONFIG_MACH_MACKEREL)
+#ifdef CONFIG_MACH_MACKEREL
 #include "mach/mmc-mackerel.h"
 #else
 #error "unsupported board."
index abdc4d4efa28938bdb3b37ab494787e4ba22e540..9c9a66ccaf6f7db7657a8318832d5d0a5ec9b702 100644 (file)
 #define MD_CK1 (1 << 1)
 #define MD_CK0 (1 << 0)
 
-/*
- * Pin Function Controller:
- *     GPIO_FN_xx - GPIO used to select pin function
- *     GPIO_PORTxx - GPIO mapped to real I/O pin on CPU
- */
-enum {
-       /* PORT */
-       GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4,
-       GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9,
-
-       GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14,
-       GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19,
-
-       GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24,
-       GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29,
-
-       GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34,
-       GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39,
-
-       GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44,
-       GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49,
-
-       GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54,
-       GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59,
-
-       GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64,
-       GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69,
-
-       GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74,
-       GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79,
-
-       GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84,
-       GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89,
-
-       GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94,
-       GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99,
-
-       GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104,
-       GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109,
-
-       GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114,
-       GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119,
-
-       GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124,
-       GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129,
-
-       GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134,
-       GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139,
-
-       GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144,
-       GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149,
-
-       GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154,
-       GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159,
-
-       GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164,
-       GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169,
-
-       GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174,
-       GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179,
-
-       GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184,
-       GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189,
-
-       GPIO_PORT190, GPIO_PORT191, GPIO_PORT192, GPIO_PORT193, GPIO_PORT194,
-       GPIO_PORT195, GPIO_PORT196, GPIO_PORT197, GPIO_PORT198, GPIO_PORT199,
-
-       GPIO_PORT200, GPIO_PORT201, GPIO_PORT202, GPIO_PORT203, GPIO_PORT204,
-       GPIO_PORT205, GPIO_PORT206, GPIO_PORT207, GPIO_PORT208, GPIO_PORT209,
-
-       GPIO_PORT210, GPIO_PORT211,
-
-       /* IRQ */
-       GPIO_FN_IRQ0_PORT2,     GPIO_FN_IRQ0_PORT13,
-       GPIO_FN_IRQ1,
-       GPIO_FN_IRQ2_PORT11,    GPIO_FN_IRQ2_PORT12,
-       GPIO_FN_IRQ3_PORT10,    GPIO_FN_IRQ3_PORT14,
-       GPIO_FN_IRQ4_PORT15,    GPIO_FN_IRQ4_PORT172,
-       GPIO_FN_IRQ5_PORT0,     GPIO_FN_IRQ5_PORT1,
-       GPIO_FN_IRQ6_PORT121,   GPIO_FN_IRQ6_PORT173,
-       GPIO_FN_IRQ7_PORT120,   GPIO_FN_IRQ7_PORT209,
-       GPIO_FN_IRQ8,
-       GPIO_FN_IRQ9_PORT118,   GPIO_FN_IRQ9_PORT210,
-       GPIO_FN_IRQ10,
-       GPIO_FN_IRQ11,
-       GPIO_FN_IRQ12_PORT42,   GPIO_FN_IRQ12_PORT97,
-       GPIO_FN_IRQ13_PORT64,   GPIO_FN_IRQ13_PORT98,
-       GPIO_FN_IRQ14_PORT63,   GPIO_FN_IRQ14_PORT99,
-       GPIO_FN_IRQ15_PORT62,   GPIO_FN_IRQ15_PORT100,
-       GPIO_FN_IRQ16_PORT68,   GPIO_FN_IRQ16_PORT211,
-       GPIO_FN_IRQ17,
-       GPIO_FN_IRQ18,
-       GPIO_FN_IRQ19,
-       GPIO_FN_IRQ20,
-       GPIO_FN_IRQ21,
-       GPIO_FN_IRQ22,
-       GPIO_FN_IRQ23,
-       GPIO_FN_IRQ24,
-       GPIO_FN_IRQ25,
-       GPIO_FN_IRQ26_PORT58,   GPIO_FN_IRQ26_PORT81,
-       GPIO_FN_IRQ27_PORT57,   GPIO_FN_IRQ27_PORT168,
-       GPIO_FN_IRQ28_PORT56,   GPIO_FN_IRQ28_PORT169,
-       GPIO_FN_IRQ29_PORT50,   GPIO_FN_IRQ29_PORT170,
-       GPIO_FN_IRQ30_PORT49,   GPIO_FN_IRQ30_PORT171,
-       GPIO_FN_IRQ31_PORT41,   GPIO_FN_IRQ31_PORT167,
-
-       /* Function */
-
-       /* DBGT */
-       GPIO_FN_DBGMDT2,        GPIO_FN_DBGMDT1,        GPIO_FN_DBGMDT0,
-       GPIO_FN_DBGMD10,        GPIO_FN_DBGMD11,        GPIO_FN_DBGMD20,
-       GPIO_FN_DBGMD21,
-
-       /* FSI-A */
-       GPIO_FN_FSIAISLD_PORT0,         /* FSIAISLD Port 0/5 */
-       GPIO_FN_FSIAISLD_PORT5,
-       GPIO_FN_FSIASPDIF_PORT9,        /* FSIASPDIF Port 9/18 */
-       GPIO_FN_FSIASPDIF_PORT18,
-       GPIO_FN_FSIAOSLD1,      GPIO_FN_FSIAOSLD2,
-       GPIO_FN_FSIAOLR,        GPIO_FN_FSIAOBT,
-       GPIO_FN_FSIAOSLD,       GPIO_FN_FSIAOMC,
-       GPIO_FN_FSIACK,         GPIO_FN_FSIAILR,
-       GPIO_FN_FSIAIBT,
-
-       /* FSI-B */
-       GPIO_FN_FSIBCK,
-
-       /* FMSI */
-       GPIO_FN_FMSISLD_PORT1, /* FMSISLD Port 1/6 */
-       GPIO_FN_FMSISLD_PORT6,
-       GPIO_FN_FMSIILR,        GPIO_FN_FMSIIBT,
-       GPIO_FN_FMSIOLR,        GPIO_FN_FMSIOBT,
-       GPIO_FN_FMSICK,         GPIO_FN_FMSOILR,
-       GPIO_FN_FMSOIBT,        GPIO_FN_FMSOOLR,
-       GPIO_FN_FMSOOBT,        GPIO_FN_FMSOSLD,
-       GPIO_FN_FMSOCK,
-
-       /* SCIFA0 */
-       GPIO_FN_SCIFA0_SCK,     GPIO_FN_SCIFA0_CTS,
-       GPIO_FN_SCIFA0_RTS,     GPIO_FN_SCIFA0_RXD,
-       GPIO_FN_SCIFA0_TXD,
-
-       /* SCIFA1 */
-       GPIO_FN_SCIFA1_CTS,     GPIO_FN_SCIFA1_SCK,
-       GPIO_FN_SCIFA1_RXD,     GPIO_FN_SCIFA1_TXD,
-       GPIO_FN_SCIFA1_RTS,
-
-       /* SCIFA2 */
-       GPIO_FN_SCIFA2_SCK_PORT22, /* SCIFA2_SCK Port 22/199 */
-       GPIO_FN_SCIFA2_SCK_PORT199,
-       GPIO_FN_SCIFA2_RXD,     GPIO_FN_SCIFA2_TXD,
-       GPIO_FN_SCIFA2_CTS,     GPIO_FN_SCIFA2_RTS,
-
-       /* SCIFA3 */
-       GPIO_FN_SCIFA3_RTS_PORT105, /* MSEL5CR_8_0 */
-       GPIO_FN_SCIFA3_SCK_PORT116,
-       GPIO_FN_SCIFA3_CTS_PORT117,
-       GPIO_FN_SCIFA3_RXD_PORT174,
-       GPIO_FN_SCIFA3_TXD_PORT175,
-
-       GPIO_FN_SCIFA3_RTS_PORT161, /* MSEL5CR_8_1 */
-       GPIO_FN_SCIFA3_SCK_PORT158,
-       GPIO_FN_SCIFA3_CTS_PORT162,
-       GPIO_FN_SCIFA3_RXD_PORT159,
-       GPIO_FN_SCIFA3_TXD_PORT160,
-
-       /* SCIFA4 */
-       GPIO_FN_SCIFA4_RXD_PORT12, /* MSEL5CR[12:11] = 00 */
-       GPIO_FN_SCIFA4_TXD_PORT13,
-
-       GPIO_FN_SCIFA4_RXD_PORT204, /* MSEL5CR[12:11] = 01 */
-       GPIO_FN_SCIFA4_TXD_PORT203,
-
-       GPIO_FN_SCIFA4_RXD_PORT94, /* MSEL5CR[12:11] = 10 */
-       GPIO_FN_SCIFA4_TXD_PORT93,
-
-       GPIO_FN_SCIFA4_SCK_PORT21, /* SCIFA4_SCK Port 21/205 */
-       GPIO_FN_SCIFA4_SCK_PORT205,
-
-       /* SCIFA5 */
-       GPIO_FN_SCIFA5_TXD_PORT20, /* MSEL5CR[15:14] = 00 */
-       GPIO_FN_SCIFA5_RXD_PORT10,
-
-       GPIO_FN_SCIFA5_RXD_PORT207, /* MSEL5CR[15:14] = 01 */
-       GPIO_FN_SCIFA5_TXD_PORT208,
-
-       GPIO_FN_SCIFA5_TXD_PORT91, /* MSEL5CR[15:14] = 10 */
-       GPIO_FN_SCIFA5_RXD_PORT92,
-
-       GPIO_FN_SCIFA5_SCK_PORT23, /* SCIFA5_SCK Port 23/206 */
-       GPIO_FN_SCIFA5_SCK_PORT206,
-
-       /* SCIFA6 */
-       GPIO_FN_SCIFA6_SCK,     GPIO_FN_SCIFA6_RXD,     GPIO_FN_SCIFA6_TXD,
-
-       /* SCIFA7 */
-       GPIO_FN_SCIFA7_TXD,     GPIO_FN_SCIFA7_RXD,
-
-       /* SCIFAB */
-       GPIO_FN_SCIFB_SCK_PORT190, /* MSEL5CR_17_0 */
-       GPIO_FN_SCIFB_RXD_PORT191,
-       GPIO_FN_SCIFB_TXD_PORT192,
-       GPIO_FN_SCIFB_RTS_PORT186,
-       GPIO_FN_SCIFB_CTS_PORT187,
-
-       GPIO_FN_SCIFB_SCK_PORT2, /* MSEL5CR_17_1 */
-       GPIO_FN_SCIFB_RXD_PORT3,
-       GPIO_FN_SCIFB_TXD_PORT4,
-       GPIO_FN_SCIFB_RTS_PORT172,
-       GPIO_FN_SCIFB_CTS_PORT173,
-
-       /* LCD0 */
-       GPIO_FN_LCDC0_SELECT,
-
-       /* LCD1 */
-       GPIO_FN_LCDC1_SELECT,
-
-       /* RSPI */
-       GPIO_FN_RSPI_SSL0_A,    GPIO_FN_RSPI_SSL1_A,
-       GPIO_FN_RSPI_SSL2_A,    GPIO_FN_RSPI_SSL3_A,
-       GPIO_FN_RSPI_MOSI_A,    GPIO_FN_RSPI_MISO_A,
-       GPIO_FN_RSPI_CK_A,
-
-       /* VIO CKO */
-       GPIO_FN_VIO_CKO1,
-       GPIO_FN_VIO_CKO2,
-       GPIO_FN_VIO_CKO_1,
-       GPIO_FN_VIO_CKO,
-
-       /* VIO0 */
-       GPIO_FN_VIO0_D0,        GPIO_FN_VIO0_D1,        GPIO_FN_VIO0_D2,
-       GPIO_FN_VIO0_D3,        GPIO_FN_VIO0_D4,        GPIO_FN_VIO0_D5,
-       GPIO_FN_VIO0_D6,        GPIO_FN_VIO0_D7,        GPIO_FN_VIO0_D8,
-       GPIO_FN_VIO0_D9,        GPIO_FN_VIO0_D10,       GPIO_FN_VIO0_D11,
-       GPIO_FN_VIO0_D12,       GPIO_FN_VIO0_VD,        GPIO_FN_VIO0_HD,
-       GPIO_FN_VIO0_CLK,       GPIO_FN_VIO0_FIELD,
-
-       GPIO_FN_VIO0_D13_PORT26, /* MSEL5CR_27_0 */
-       GPIO_FN_VIO0_D14_PORT25,
-       GPIO_FN_VIO0_D15_PORT24,
-
-       GPIO_FN_VIO0_D13_PORT22, /* MSEL5CR_27_1 */
-       GPIO_FN_VIO0_D14_PORT95,
-       GPIO_FN_VIO0_D15_PORT96,
-
-       /* VIO1 */
-       GPIO_FN_VIO1_D0,        GPIO_FN_VIO1_D1,        GPIO_FN_VIO1_D2,
-       GPIO_FN_VIO1_D3,        GPIO_FN_VIO1_D4,        GPIO_FN_VIO1_D5,
-       GPIO_FN_VIO1_D6,        GPIO_FN_VIO1_D7,        GPIO_FN_VIO1_VD,
-       GPIO_FN_VIO1_HD,        GPIO_FN_VIO1_CLK,       GPIO_FN_VIO1_FIELD,
-
-       /* TPU0 */
-       GPIO_FN_TPU0TO0,        GPIO_FN_TPU0TO1,
-       GPIO_FN_TPU0TO3,
-       GPIO_FN_TPU0TO2_PORT66, /* TPU0TO2 Port 66/202 */
-       GPIO_FN_TPU0TO2_PORT202,
-
-       /* SSP1 0 */
-       GPIO_FN_STP0_IPD0,      GPIO_FN_STP0_IPD1,      GPIO_FN_STP0_IPD2,
-       GPIO_FN_STP0_IPD3,      GPIO_FN_STP0_IPD4,      GPIO_FN_STP0_IPD5,
-       GPIO_FN_STP0_IPD6,      GPIO_FN_STP0_IPD7,      GPIO_FN_STP0_IPEN,
-       GPIO_FN_STP0_IPCLK,     GPIO_FN_STP0_IPSYNC,
-
-       /* SSP1 1 */
-       GPIO_FN_STP1_IPD1,      GPIO_FN_STP1_IPD2,      GPIO_FN_STP1_IPD3,
-       GPIO_FN_STP1_IPD4,      GPIO_FN_STP1_IPD5,      GPIO_FN_STP1_IPD6,
-       GPIO_FN_STP1_IPD7,      GPIO_FN_STP1_IPCLK,     GPIO_FN_STP1_IPSYNC,
-
-       GPIO_FN_STP1_IPD0_PORT186, /* MSEL5CR_23_0 */
-       GPIO_FN_STP1_IPEN_PORT187,
-
-       GPIO_FN_STP1_IPD0_PORT194, /* MSEL5CR_23_1 */
-       GPIO_FN_STP1_IPEN_PORT193,
-
-       /* SIM */
-       GPIO_FN_SIM_RST,        GPIO_FN_SIM_CLK,
-       GPIO_FN_SIM_D_PORT22, /* SIM_D  Port 22/199 */
-       GPIO_FN_SIM_D_PORT199,
-
-       /* MSIOF2 */
-       GPIO_FN_MSIOF2_TXD,     GPIO_FN_MSIOF2_RXD,     GPIO_FN_MSIOF2_TSCK,
-       GPIO_FN_MSIOF2_SS2,     GPIO_FN_MSIOF2_TSYNC,   GPIO_FN_MSIOF2_SS1,
-       GPIO_FN_MSIOF2_MCK1,    GPIO_FN_MSIOF2_MCK0,    GPIO_FN_MSIOF2_RSYNC,
-       GPIO_FN_MSIOF2_RSCK,
-
-       /* KEYSC */
-       GPIO_FN_KEYIN4,         GPIO_FN_KEYIN5,
-       GPIO_FN_KEYIN6,         GPIO_FN_KEYIN7,
-       GPIO_FN_KEYOUT0,        GPIO_FN_KEYOUT1,        GPIO_FN_KEYOUT2,
-       GPIO_FN_KEYOUT3,        GPIO_FN_KEYOUT4,        GPIO_FN_KEYOUT5,
-       GPIO_FN_KEYOUT6,        GPIO_FN_KEYOUT7,
-
-       GPIO_FN_KEYIN0_PORT43, /* MSEL4CR_18_0 */
-       GPIO_FN_KEYIN1_PORT44,
-       GPIO_FN_KEYIN2_PORT45,
-       GPIO_FN_KEYIN3_PORT46,
-
-       GPIO_FN_KEYIN0_PORT58, /* MSEL4CR_18_1 */
-       GPIO_FN_KEYIN1_PORT57,
-       GPIO_FN_KEYIN2_PORT56,
-       GPIO_FN_KEYIN3_PORT55,
-
-       /* VOU */
-       GPIO_FN_DV_D0,  GPIO_FN_DV_D1,  GPIO_FN_DV_D2,  GPIO_FN_DV_D3,
-       GPIO_FN_DV_D4,  GPIO_FN_DV_D5,  GPIO_FN_DV_D6,  GPIO_FN_DV_D7,
-       GPIO_FN_DV_D8,  GPIO_FN_DV_D9,  GPIO_FN_DV_D10, GPIO_FN_DV_D11,
-       GPIO_FN_DV_D12, GPIO_FN_DV_D13, GPIO_FN_DV_D14, GPIO_FN_DV_D15,
-       GPIO_FN_DV_CLK,
-       GPIO_FN_DV_VSYNC,
-       GPIO_FN_DV_HSYNC,
-
-       /* MEMC */
-       GPIO_FN_MEMC_AD0,       GPIO_FN_MEMC_AD1,       GPIO_FN_MEMC_AD2,
-       GPIO_FN_MEMC_AD3,       GPIO_FN_MEMC_AD4,       GPIO_FN_MEMC_AD5,
-       GPIO_FN_MEMC_AD6,       GPIO_FN_MEMC_AD7,       GPIO_FN_MEMC_AD8,
-       GPIO_FN_MEMC_AD9,       GPIO_FN_MEMC_AD10,      GPIO_FN_MEMC_AD11,
-       GPIO_FN_MEMC_AD12,      GPIO_FN_MEMC_AD13,      GPIO_FN_MEMC_AD14,
-       GPIO_FN_MEMC_AD15,      GPIO_FN_MEMC_CS0,       GPIO_FN_MEMC_INT,
-       GPIO_FN_MEMC_NWE,       GPIO_FN_MEMC_NOE,
-
-       GPIO_FN_MEMC_CS1, /* MSEL4CR_6_0 */
-       GPIO_FN_MEMC_ADV,
-       GPIO_FN_MEMC_WAIT,
-       GPIO_FN_MEMC_BUSCLK,
-
-       GPIO_FN_MEMC_A1, /* MSEL4CR_6_1 */
-       GPIO_FN_MEMC_DREQ0,
-       GPIO_FN_MEMC_DREQ1,
-       GPIO_FN_MEMC_A0,
-
-       /* MSIOF0 */
-       GPIO_FN_MSIOF0_SS1,     GPIO_FN_MSIOF0_SS2,
-       GPIO_FN_MSIOF0_RXD,     GPIO_FN_MSIOF0_TXD,
-       GPIO_FN_MSIOF0_MCK0,    GPIO_FN_MSIOF0_MCK1,
-       GPIO_FN_MSIOF0_RSYNC,   GPIO_FN_MSIOF0_RSCK,
-       GPIO_FN_MSIOF0_TSCK,    GPIO_FN_MSIOF0_TSYNC,
-
-       /* MSIOF1 */
-       GPIO_FN_MSIOF1_RSCK,    GPIO_FN_MSIOF1_RSYNC,
-       GPIO_FN_MSIOF1_MCK0,    GPIO_FN_MSIOF1_MCK1,
-
-       GPIO_FN_MSIOF1_SS2_PORT116,     GPIO_FN_MSIOF1_SS1_PORT117,
-       GPIO_FN_MSIOF1_RXD_PORT118,     GPIO_FN_MSIOF1_TXD_PORT119,
-       GPIO_FN_MSIOF1_TSYNC_PORT120,
-       GPIO_FN_MSIOF1_TSCK_PORT121,    /* MSEL4CR_10_0 */
-
-       GPIO_FN_MSIOF1_SS1_PORT67,      GPIO_FN_MSIOF1_TSCK_PORT72,
-       GPIO_FN_MSIOF1_TSYNC_PORT73,    GPIO_FN_MSIOF1_TXD_PORT74,
-       GPIO_FN_MSIOF1_RXD_PORT75,
-       GPIO_FN_MSIOF1_SS2_PORT202,     /* MSEL4CR_10_1 */
-
-       /* GPIO */
-       GPIO_FN_GPO0,   GPIO_FN_GPI0,
-       GPIO_FN_GPO1,   GPIO_FN_GPI1,
-
-       /* USB0 */
-       GPIO_FN_USB0_OCI,       GPIO_FN_USB0_PPON,      GPIO_FN_VBUS,
-
-       /* USB1 */
-       GPIO_FN_USB1_OCI,       GPIO_FN_USB1_PPON,
-
-       /* BBIF1 */
-       GPIO_FN_BBIF1_RXD,      GPIO_FN_BBIF1_TXD,      GPIO_FN_BBIF1_TSYNC,
-       GPIO_FN_BBIF1_TSCK,     GPIO_FN_BBIF1_RSCK,     GPIO_FN_BBIF1_RSYNC,
-       GPIO_FN_BBIF1_FLOW,     GPIO_FN_BBIF1_RX_FLOW_N,
-
-       /* BBIF2 */
-       GPIO_FN_BBIF2_TXD2_PORT5, /* MSEL5CR_0_0 */
-       GPIO_FN_BBIF2_RXD2_PORT60,
-       GPIO_FN_BBIF2_TSYNC2_PORT6,
-       GPIO_FN_BBIF2_TSCK2_PORT59,
-
-       GPIO_FN_BBIF2_RXD2_PORT90, /* MSEL5CR_0_1 */
-       GPIO_FN_BBIF2_TXD2_PORT183,
-       GPIO_FN_BBIF2_TSCK2_PORT89,
-       GPIO_FN_BBIF2_TSYNC2_PORT184,
-
-       /* BSC / FLCTL / PCMCIA */
-       GPIO_FN_CS0,    GPIO_FN_CS2,    GPIO_FN_CS4,
-       GPIO_FN_CS5B,   GPIO_FN_CS6A,
-       GPIO_FN_CS5A_PORT105, /* CS5A PORT 19/105 */
-       GPIO_FN_CS5A_PORT19,
-       GPIO_FN_IOIS16, /* ? */
-
-       GPIO_FN_A0,     GPIO_FN_A1,     GPIO_FN_A2,     GPIO_FN_A3,
-       GPIO_FN_A4_FOE,         /* share with FLCTL */
-       GPIO_FN_A5_FCDE,        /* share with FLCTL */
-       GPIO_FN_A6,     GPIO_FN_A7,     GPIO_FN_A8,     GPIO_FN_A9,
-       GPIO_FN_A10,    GPIO_FN_A11,    GPIO_FN_A12,    GPIO_FN_A13,
-       GPIO_FN_A14,    GPIO_FN_A15,    GPIO_FN_A16,    GPIO_FN_A17,
-       GPIO_FN_A18,    GPIO_FN_A19,    GPIO_FN_A20,    GPIO_FN_A21,
-       GPIO_FN_A22,    GPIO_FN_A23,    GPIO_FN_A24,    GPIO_FN_A25,
-       GPIO_FN_A26,
-
-       GPIO_FN_D0_NAF0,        GPIO_FN_D1_NAF1,        /* share with FLCTL */
-       GPIO_FN_D2_NAF2,        GPIO_FN_D3_NAF3,        /* share with FLCTL */
-       GPIO_FN_D4_NAF4,        GPIO_FN_D5_NAF5,        /* share with FLCTL */
-       GPIO_FN_D6_NAF6,        GPIO_FN_D7_NAF7,        /* share with FLCTL */
-       GPIO_FN_D8_NAF8,        GPIO_FN_D9_NAF9,        /* share with FLCTL */
-       GPIO_FN_D10_NAF10,      GPIO_FN_D11_NAF11,      /* share with FLCTL */
-       GPIO_FN_D12_NAF12,      GPIO_FN_D13_NAF13,      /* share with FLCTL */
-       GPIO_FN_D14_NAF14,      GPIO_FN_D15_NAF15,      /* share with FLCTL */
-
-       GPIO_FN_D16,    GPIO_FN_D17,    GPIO_FN_D18,    GPIO_FN_D19,
-       GPIO_FN_D20,    GPIO_FN_D21,    GPIO_FN_D22,    GPIO_FN_D23,
-       GPIO_FN_D24,    GPIO_FN_D25,    GPIO_FN_D26,    GPIO_FN_D27,
-       GPIO_FN_D28,    GPIO_FN_D29,    GPIO_FN_D30,    GPIO_FN_D31,
-
-       GPIO_FN_WE0_FWE,        /* share with FLCTL */
-       GPIO_FN_WE1,
-       GPIO_FN_WE2_ICIORD,     /* share with PCMCIA */
-       GPIO_FN_WE3_ICIOWR,     /* share with PCMCIA */
-       GPIO_FN_CKO,    GPIO_FN_BS,     GPIO_FN_RDWR,
-       GPIO_FN_RD_FSC,         /* share with FLCTL */
-       GPIO_FN_WAIT_PORT177,   /* WAIT Port 90/177 */
-       GPIO_FN_WAIT_PORT90,
-
-       GPIO_FN_FCE0,   GPIO_FN_FCE1,   GPIO_FN_FRB, /* FLCTL */
-
-       /* IRDA */
-       GPIO_FN_IRDA_FIRSEL,    GPIO_FN_IRDA_IN,        GPIO_FN_IRDA_OUT,
-
-       /* ATAPI */
-       GPIO_FN_IDE_D0,         GPIO_FN_IDE_D1,         GPIO_FN_IDE_D2,
-       GPIO_FN_IDE_D3,         GPIO_FN_IDE_D4,         GPIO_FN_IDE_D5,
-       GPIO_FN_IDE_D6,         GPIO_FN_IDE_D7,         GPIO_FN_IDE_D8,
-       GPIO_FN_IDE_D9,         GPIO_FN_IDE_D10,        GPIO_FN_IDE_D11,
-       GPIO_FN_IDE_D12,        GPIO_FN_IDE_D13,        GPIO_FN_IDE_D14,
-       GPIO_FN_IDE_D15,        GPIO_FN_IDE_A0,         GPIO_FN_IDE_A1,
-       GPIO_FN_IDE_A2,         GPIO_FN_IDE_CS0,        GPIO_FN_IDE_CS1,
-       GPIO_FN_IDE_IOWR,       GPIO_FN_IDE_IORD,       GPIO_FN_IDE_IORDY,
-       GPIO_FN_IDE_INT,        GPIO_FN_IDE_RST,        GPIO_FN_IDE_DIRECTION,
-       GPIO_FN_IDE_EXBUF_ENB,  GPIO_FN_IDE_IODACK,     GPIO_FN_IDE_IODREQ,
-
-       /* RMII */
-       GPIO_FN_RMII_CRS_DV,    GPIO_FN_RMII_RX_ER,     GPIO_FN_RMII_RXD0,
-       GPIO_FN_RMII_RXD1,      GPIO_FN_RMII_TX_EN,     GPIO_FN_RMII_TXD0,
-       GPIO_FN_RMII_MDC,       GPIO_FN_RMII_TXD1,      GPIO_FN_RMII_MDIO,
-       GPIO_FN_RMII_REF50CK,   /* for RMII */
-       GPIO_FN_RMII_REF125CK,  /* for GMII */
-
-       /* GEther */
-       GPIO_FN_ET_TX_CLK,      GPIO_FN_ET_TX_EN,       GPIO_FN_ET_ETXD0,
-       GPIO_FN_ET_ETXD1,       GPIO_FN_ET_ETXD2,       GPIO_FN_ET_ETXD3,
-       GPIO_FN_ET_ETXD4,       GPIO_FN_ET_ETXD5, /* for GEther */
-       GPIO_FN_ET_ETXD6,       GPIO_FN_ET_ETXD7, /* for GEther */
-       GPIO_FN_ET_COL,         GPIO_FN_ET_TX_ER,
-       GPIO_FN_ET_RX_CLK,      GPIO_FN_ET_RX_DV,
-       GPIO_FN_ET_ERXD0,       GPIO_FN_ET_ERXD1,
-       GPIO_FN_ET_ERXD2,       GPIO_FN_ET_ERXD3,
-       GPIO_FN_ET_ERXD4,       GPIO_FN_ET_ERXD5, /* for GEther */
-       GPIO_FN_ET_ERXD6,       GPIO_FN_ET_ERXD7, /* for GEther */
-       GPIO_FN_ET_RX_ER,       GPIO_FN_ET_CRS,
-       GPIO_FN_ET_MDC,         GPIO_FN_ET_MDIO,
-       GPIO_FN_ET_LINK,        GPIO_FN_ET_PHY_INT,
-       GPIO_FN_ET_WOL,         GPIO_FN_ET_GTX_CLK,
-
-       /* DMA0 */
-       GPIO_FN_DREQ0,          GPIO_FN_DACK0,
-
-       /* DMA1 */
-       GPIO_FN_DREQ1,          GPIO_FN_DACK1,
-
-       /* SYSC */
-       GPIO_FN_RESETOUTS,
-       GPIO_FN_RESETP_PULLUP,
-       GPIO_FN_RESETP_PLAIN,
-
-       /* HDMI */
-       GPIO_FN_HDMI_HPD,
-       GPIO_FN_HDMI_CEC,
-
-       /* SDENC */
-       GPIO_FN_SDENC_CPG,
-       GPIO_FN_SDENC_DV_CLKI,
-
-       /* IRREM */
-       GPIO_FN_IROUT,
-
-       /* DEBUG */
-       GPIO_FN_EDEBGREQ_PULLDOWN,
-       GPIO_FN_EDEBGREQ_PULLUP,
-
-       GPIO_FN_TRACEAUD_FROM_VIO,
-       GPIO_FN_TRACEAUD_FROM_LCDC0,
-       GPIO_FN_TRACEAUD_FROM_MEMC,
-};
-
 /* DMA slave IDs */
 enum {
        SHDMA_SLAVE_INVALID,
index 951149e6bcca20ca26df5b177086435ce50adc1e..851d027a2f06143a1ec938789f3d1aa5c294e1f7 100644 (file)
 #ifndef __ASM_R8A7778_H__
 #define __ASM_R8A7778_H__
 
+#include <linux/mmc/sh_mmcif.h>
+#include <linux/mmc/sh_mobile_sdhi.h>
 #include <linux/sh_eth.h>
+#include <linux/platform_data/usb-rcar-phy.h>
 
 extern void r8a7778_add_standard_devices(void);
 extern void r8a7778_add_standard_devices_dt(void);
 extern void r8a7778_add_ether_device(struct sh_eth_plat_data *pdata);
+extern void r8a7778_add_usb_phy_device(struct rcar_phy_platform_data *pdata);
+extern void r8a7778_add_i2c_device(int id);
+extern void r8a7778_add_hspi_device(int id);
+extern void r8a7778_add_mmc_device(struct sh_mmcif_plat_data *info);
+
+extern void r8a7778_init_late(void);
 extern void r8a7778_init_delay(void);
 extern void r8a7778_init_irq(void);
 extern void r8a7778_init_irq_dt(void);
 extern void r8a7778_clock_init(void);
 extern void r8a7778_init_irq_extpin(int irlm);
+extern void r8a7778_pinmux_init(void);
+extern void r8a7778_sdhi_init(int id, struct sh_mobile_sdhi_info *info);
 
 #endif /* __ASM_R8A7778_H__ */
index 188b295938a5cab5a9599f3874444074323ad97f..fc47073c7ba905d0a74c3a723cd4e5e29abb6e0e 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/sh_clk.h>
 #include <linux/pm_domain.h>
 #include <linux/sh_eth.h>
+#include <linux/platform_data/usb-rcar-phy.h>
 
 struct platform_device;
 
@@ -33,6 +34,8 @@ extern void r8a7779_add_early_devices(void);
 extern void r8a7779_add_standard_devices(void);
 extern void r8a7779_add_standard_devices_dt(void);
 extern void r8a7779_add_ether_device(struct sh_eth_plat_data *pdata);
+extern void r8a7779_add_usb_phy_device(struct rcar_phy_platform_data *pdata);
+extern void r8a7779_init_late(void);
 extern void r8a7779_clock_init(void);
 extern void r8a7779_pinmux_init(void);
 extern void r8a7779_pm_init(void);
index fd7cba024c392a83e73f9d1f0f620aaa0f3cf1f6..854a9f0ca040fa83a67629cf0034ed5e634415a5 100644 (file)
 #include <linux/pm_domain.h>
 #include <mach/pm-rmobile.h>
 
-/*
- * Pin Function Controller:
- *     GPIO_FN_xx - GPIO used to select pin function
- *     GPIO_PORTxx - GPIO mapped to real I/O pin on CPU
- */
-enum {
-       /* PORT */
-       GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4,
-       GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9,
-
-       GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14,
-       GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19,
-
-       GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24,
-       GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29,
-
-       GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34,
-       GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39,
-
-       GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44,
-       GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49,
-
-       GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54,
-       GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59,
-
-       GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64,
-       GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69,
-
-       GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74,
-       GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79,
-
-       GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84,
-       GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89,
-
-       GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94,
-       GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99,
-
-       GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104,
-       GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109,
-
-       GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114,
-       GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119,
-
-       GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124,
-       GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129,
-
-       GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134,
-       GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139,
-
-       GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144,
-       GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149,
-
-       GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154,
-       GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159,
-
-       GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164,
-       GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169,
-
-       GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174,
-       GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179,
-
-       GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184,
-       GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189,
-
-       GPIO_PORT190,
-
-       /* IRQ */
-       GPIO_FN_IRQ0_6,         /* PORT   6 */
-       GPIO_FN_IRQ0_162,       /* PORT 162 */
-       GPIO_FN_IRQ1,           /* PORT  12 */
-       GPIO_FN_IRQ2_4,         /* PORT   4 */
-       GPIO_FN_IRQ2_5,         /* PORT   5 */
-       GPIO_FN_IRQ3_8,         /* PORT   8 */
-       GPIO_FN_IRQ3_16,        /* PORT  16 */
-       GPIO_FN_IRQ4_17,        /* PORT  17 */
-       GPIO_FN_IRQ4_163,       /* PORT 163 */
-       GPIO_FN_IRQ5,           /* PORT  18 */
-       GPIO_FN_IRQ6_39,        /* PORT  39 */
-       GPIO_FN_IRQ6_164,       /* PORT 164 */
-       GPIO_FN_IRQ7_40,        /* PORT  40 */
-       GPIO_FN_IRQ7_167,       /* PORT 167 */
-       GPIO_FN_IRQ8_41,        /* PORT  41 */
-       GPIO_FN_IRQ8_168,       /* PORT 168 */
-       GPIO_FN_IRQ9_42,        /* PORT  42 */
-       GPIO_FN_IRQ9_169,       /* PORT 169 */
-       GPIO_FN_IRQ10,          /* PORT  65 */
-       GPIO_FN_IRQ11,          /* PORT  67 */
-       GPIO_FN_IRQ12_80,       /* PORT  80 */
-       GPIO_FN_IRQ12_137,      /* PORT 137 */
-       GPIO_FN_IRQ13_81,       /* PORT  81 */
-       GPIO_FN_IRQ13_145,      /* PORT 145 */
-       GPIO_FN_IRQ14_82,       /* PORT  82 */
-       GPIO_FN_IRQ14_146,      /* PORT 146 */
-       GPIO_FN_IRQ15_83,       /* PORT  83 */
-       GPIO_FN_IRQ15_147,      /* PORT 147 */
-       GPIO_FN_IRQ16_84,       /* PORT  84 */
-       GPIO_FN_IRQ16_170,      /* PORT 170 */
-       GPIO_FN_IRQ17,          /* PORT  85 */
-       GPIO_FN_IRQ18,          /* PORT  86 */
-       GPIO_FN_IRQ19,          /* PORT  87 */
-       GPIO_FN_IRQ20,          /* PORT  92 */
-       GPIO_FN_IRQ21,          /* PORT  93 */
-       GPIO_FN_IRQ22,          /* PORT  94 */
-       GPIO_FN_IRQ23,          /* PORT  95 */
-       GPIO_FN_IRQ24,          /* PORT 112 */
-       GPIO_FN_IRQ25,          /* PORT 119 */
-       GPIO_FN_IRQ26_121,      /* PORT 121 */
-       GPIO_FN_IRQ26_172,      /* PORT 172 */
-       GPIO_FN_IRQ27_122,      /* PORT 122 */
-       GPIO_FN_IRQ27_180,      /* PORT 180 */
-       GPIO_FN_IRQ28_123,      /* PORT 123 */
-       GPIO_FN_IRQ28_181,      /* PORT 181 */
-       GPIO_FN_IRQ29_129,      /* PORT 129 */
-       GPIO_FN_IRQ29_182,      /* PORT 182 */
-       GPIO_FN_IRQ30_130,      /* PORT 130 */
-       GPIO_FN_IRQ30_183,      /* PORT 183 */
-       GPIO_FN_IRQ31_138,      /* PORT 138 */
-       GPIO_FN_IRQ31_184,      /* PORT 184 */
-
-       /*
-        * MSIOF0       (PORT 36, 37, 38, 39
-        *                    40, 41, 42, 43, 44, 45)
-        */
-       GPIO_FN_MSIOF0_TSYNC,   GPIO_FN_MSIOF0_TSCK,
-       GPIO_FN_MSIOF0_RXD,     GPIO_FN_MSIOF0_RSCK,
-       GPIO_FN_MSIOF0_RSYNC,   GPIO_FN_MSIOF0_MCK0,
-       GPIO_FN_MSIOF0_MCK1,    GPIO_FN_MSIOF0_SS1,
-       GPIO_FN_MSIOF0_SS2,     GPIO_FN_MSIOF0_TXD,
-
-       /*
-        * MSIOF1       (PORT 39, 40, 41, 42, 43, 44
-        *                    84, 85, 86, 87, 88, 89, 90, 91, 92, 93)
-        */
-       GPIO_FN_MSIOF1_TSCK_39, GPIO_FN_MSIOF1_TSYNC_40,
-       GPIO_FN_MSIOF1_TSCK_88, GPIO_FN_MSIOF1_TSYNC_89,
-       GPIO_FN_MSIOF1_TXD_41,  GPIO_FN_MSIOF1_RXD_42,
-       GPIO_FN_MSIOF1_TXD_90,  GPIO_FN_MSIOF1_RXD_91,
-       GPIO_FN_MSIOF1_SS1_43,  GPIO_FN_MSIOF1_SS2_44,
-       GPIO_FN_MSIOF1_SS1_92,  GPIO_FN_MSIOF1_SS2_93,
-       GPIO_FN_MSIOF1_RSCK,    GPIO_FN_MSIOF1_RSYNC,
-       GPIO_FN_MSIOF1_MCK0,    GPIO_FN_MSIOF1_MCK1,
-
-       /*
-        * MSIOF2       (PORT 134, 135, 136, 137, 138, 139
-        *                    148, 149, 150, 151)
-        */
-       GPIO_FN_MSIOF2_RSCK,    GPIO_FN_MSIOF2_RSYNC,
-       GPIO_FN_MSIOF2_MCK0,    GPIO_FN_MSIOF2_MCK1,
-       GPIO_FN_MSIOF2_SS1,     GPIO_FN_MSIOF2_SS2,
-       GPIO_FN_MSIOF2_TSYNC,   GPIO_FN_MSIOF2_TSCK,
-       GPIO_FN_MSIOF2_RXD,     GPIO_FN_MSIOF2_TXD,
-
-       /* MSIOF3       (PORT 76, 77, 78, 79, 80, 81, 82, 83) */
-       GPIO_FN_BBIF1_RXD,      GPIO_FN_BBIF1_TSYNC,
-       GPIO_FN_BBIF1_TSCK,     GPIO_FN_BBIF1_TXD,
-       GPIO_FN_BBIF1_RSCK,     GPIO_FN_BBIF1_RSYNC,
-       GPIO_FN_BBIF1_FLOW,     GPIO_FN_BB_RX_FLOW_N,
-
-       /* MSIOF4       (PORT 0, 1, 2, 3) */
-       GPIO_FN_BBIF2_TSCK1,    GPIO_FN_BBIF2_TSYNC1,
-       GPIO_FN_BBIF2_TXD1,     GPIO_FN_BBIF2_RXD,
-
-       /* FSI          (PORT 4, 5, 6, 7, 8, 9, 10, 11, 15) */
-       GPIO_FN_FSIACK,         GPIO_FN_FSIBCK,
-       GPIO_FN_FSIAILR,        GPIO_FN_FSIAIBT,
-       GPIO_FN_FSIAISLD,       GPIO_FN_FSIAOMC,
-       GPIO_FN_FSIAOLR,        GPIO_FN_FSIAOBT,
-       GPIO_FN_FSIAOSLD,       GPIO_FN_FSIASPDIF_11,
-       GPIO_FN_FSIASPDIF_15,
-
-       /* FMSI         (PORT 12, 13, 14, 15, 16, 17, 18, 65) */
-       GPIO_FN_FMSOCK,         GPIO_FN_FMSOOLR,
-       GPIO_FN_FMSIOLR,        GPIO_FN_FMSOOBT,
-       GPIO_FN_FMSIOBT,        GPIO_FN_FMSOSLD,
-       GPIO_FN_FMSOILR,        GPIO_FN_FMSIILR,
-       GPIO_FN_FMSOIBT,        GPIO_FN_FMSIIBT,
-       GPIO_FN_FMSISLD,        GPIO_FN_FMSICK,
-
-       /* SCIFA0       (PORT 152, 153, 156, 157, 158) */
-       GPIO_FN_SCIFA0_TXD,     GPIO_FN_SCIFA0_RXD,
-       GPIO_FN_SCIFA0_SCK,     GPIO_FN_SCIFA0_RTS,
-       GPIO_FN_SCIFA0_CTS,
-
-       /* SCIFA1       (PORT 154, 155, 159, 160, 161) */
-       GPIO_FN_SCIFA1_TXD,     GPIO_FN_SCIFA1_RXD,
-       GPIO_FN_SCIFA1_SCK,     GPIO_FN_SCIFA1_RTS,
-       GPIO_FN_SCIFA1_CTS,
-
-       /* SCIFA2       (PORT 94, 95, 96, 97, 98) */
-       GPIO_FN_SCIFA2_CTS1,    GPIO_FN_SCIFA2_RTS1,
-       GPIO_FN_SCIFA2_TXD1,    GPIO_FN_SCIFA2_RXD1,
-       GPIO_FN_SCIFA2_SCK1,
-
-       /* SCIFA3       (PORT 43, 44,
-                            140, 141, 142, 143, 144) */
-       GPIO_FN_SCIFA3_CTS_43,  GPIO_FN_SCIFA3_CTS_140,
-       GPIO_FN_SCIFA3_RTS_44,  GPIO_FN_SCIFA3_RTS_141,
-       GPIO_FN_SCIFA3_SCK,     GPIO_FN_SCIFA3_TXD,
-       GPIO_FN_SCIFA3_RXD,
-
-       /* SCIFA4       (PORT 5, 6) */
-       GPIO_FN_SCIFA4_RXD,     GPIO_FN_SCIFA4_TXD,
-
-       /* SCIFA5       (PORT 8, 12) */
-       GPIO_FN_SCIFA5_RXD,     GPIO_FN_SCIFA5_TXD,
-
-       /* SCIFB        (PORT 162, 163, 164, 165, 166) */
-       GPIO_FN_SCIFB_SCK,      GPIO_FN_SCIFB_RTS,
-       GPIO_FN_SCIFB_CTS,      GPIO_FN_SCIFB_TXD,
-       GPIO_FN_SCIFB_RXD,
-
-       /*
-        * CEU          (PORT 16, 17,
-        *                    100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
-        *                    110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
-        *                    120)
-        */
-       GPIO_FN_VIO_HD,         GPIO_FN_VIO_CKO1,       GPIO_FN_VIO_CKO2,
-       GPIO_FN_VIO_VD,         GPIO_FN_VIO_CLK,        GPIO_FN_VIO_FIELD,
-       GPIO_FN_VIO_CKO,
-       GPIO_FN_VIO_D0,         GPIO_FN_VIO_D1,         GPIO_FN_VIO_D2,
-       GPIO_FN_VIO_D3,         GPIO_FN_VIO_D4,         GPIO_FN_VIO_D5,
-       GPIO_FN_VIO_D6,         GPIO_FN_VIO_D7,         GPIO_FN_VIO_D8,
-       GPIO_FN_VIO_D9,         GPIO_FN_VIO_D10,        GPIO_FN_VIO_D11,
-       GPIO_FN_VIO_D12,        GPIO_FN_VIO_D13,        GPIO_FN_VIO_D14,
-       GPIO_FN_VIO_D15,
-
-       /* USB0         (PORT 113, 114, 115, 116, 117, 167) */
-       GPIO_FN_IDIN_0,         GPIO_FN_EXTLP_0,
-       GPIO_FN_OVCN2_0,        GPIO_FN_PWEN_0,
-       GPIO_FN_OVCN_0,         GPIO_FN_VBUS0_0,
-
-       /* USB1         (PORT 18, 113, 114, 115, 116, 117, 138, 162, 168) */
-       GPIO_FN_IDIN_1_18,      GPIO_FN_IDIN_1_113,
-       GPIO_FN_PWEN_1_115,     GPIO_FN_PWEN_1_138,
-       GPIO_FN_OVCN_1_114,     GPIO_FN_OVCN_1_162,
-       GPIO_FN_EXTLP_1,        GPIO_FN_OVCN2_1,
-       GPIO_FN_VBUS0_1,
-
-       /* GPIO         (PORT 41, 42, 43, 44) */
-       GPIO_FN_GPI0,   GPIO_FN_GPI1,   GPIO_FN_GPO0,   GPIO_FN_GPO1,
-
-       /*
-        * BSC          (PORT 19,
-        *                    20, 21, 22, 25, 26, 27, 28, 29,
-        *                    30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
-        *                    40, 41, 42, 43, 44, 45,
-        *                    62, 63, 64, 65, 66, 67,
-        *                    71, 72, 74, 75)
-        */
-       GPIO_FN_BS,     GPIO_FN_WE1,
-       GPIO_FN_CKO,    GPIO_FN_WAIT,   GPIO_FN_RDWR,
-
-       GPIO_FN_A0,     GPIO_FN_A1,     GPIO_FN_A2,     GPIO_FN_A3,
-       GPIO_FN_A6,     GPIO_FN_A7,     GPIO_FN_A8,     GPIO_FN_A9,
-       GPIO_FN_A10,    GPIO_FN_A11,    GPIO_FN_A12,    GPIO_FN_A13,
-       GPIO_FN_A14,    GPIO_FN_A15,    GPIO_FN_A16,    GPIO_FN_A17,
-       GPIO_FN_A18,    GPIO_FN_A19,    GPIO_FN_A20,    GPIO_FN_A21,
-       GPIO_FN_A22,    GPIO_FN_A23,    GPIO_FN_A24,    GPIO_FN_A25,
-       GPIO_FN_A26,
-
-       GPIO_FN_CS0,    GPIO_FN_CS2,    GPIO_FN_CS4,
-       GPIO_FN_CS5A,   GPIO_FN_CS5B,   GPIO_FN_CS6A,
-
-       /*
-        * BSC/FLCTL            (PORT 23, 24,
-        *                            46, 47, 48, 49,
-        *                            50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
-        *                            60, 61, 69, 70)
-        */
-       GPIO_FN_RD_FSC,         GPIO_FN_WE0_FWE,
-       GPIO_FN_A4_FOE,         GPIO_FN_A5_FCDE,
-       GPIO_FN_D0_NAF0,        GPIO_FN_D1_NAF1,        GPIO_FN_D2_NAF2,
-       GPIO_FN_D3_NAF3,        GPIO_FN_D4_NAF4,        GPIO_FN_D5_NAF5,
-       GPIO_FN_D6_NAF6,        GPIO_FN_D7_NAF7,        GPIO_FN_D8_NAF8,
-       GPIO_FN_D9_NAF9,        GPIO_FN_D10_NAF10,      GPIO_FN_D11_NAF11,
-       GPIO_FN_D12_NAF12,      GPIO_FN_D13_NAF13,      GPIO_FN_D14_NAF14,
-       GPIO_FN_D15_NAF15,
-
-       /* SPU2         (PORT 65) */
-       GPIO_FN_VINT_I,
-
-       /* FLCTL        (PORT 66, 68, 73) */
-       GPIO_FN_FCE1,   GPIO_FN_FCE0,   GPIO_FN_FRB,
-
-       /* HSI          (PORT 76, 77, 78, 79, 80, 81, 82, 83) */
-       GPIO_FN_GP_RX_FLAG,     GPIO_FN_GP_RX_DATA,     GPIO_FN_GP_TX_READY,
-       GPIO_FN_GP_RX_WAKE,     GPIO_FN_MP_TX_FLAG,     GPIO_FN_MP_TX_DATA,
-       GPIO_FN_MP_RX_READY,    GPIO_FN_MP_TX_WAKE,
-
-       /*
-        * MFI          (PORT 76, 77, 78, 79,
-        *                    80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
-        *                    90, 91, 92, 93, 94, 95, 96, 97, 98, 99)
-        */
-       GPIO_FN_MFIv6,  /* see MSEL4CR 6 */
-       GPIO_FN_MFIv4,  /* see MSEL4CR 6 */
-
-       GPIO_FN_MEMC_CS0,               GPIO_FN_MEMC_BUSCLK_MEMC_A0,
-       GPIO_FN_MEMC_CS1_MEMC_A1,       GPIO_FN_MEMC_ADV_MEMC_DREQ0,
-       GPIO_FN_MEMC_WAIT_MEMC_DREQ1,   GPIO_FN_MEMC_NOE,
-       GPIO_FN_MEMC_NWE,               GPIO_FN_MEMC_INT,
-
-       GPIO_FN_MEMC_AD0,       GPIO_FN_MEMC_AD1,       GPIO_FN_MEMC_AD2,
-       GPIO_FN_MEMC_AD3,       GPIO_FN_MEMC_AD4,       GPIO_FN_MEMC_AD5,
-       GPIO_FN_MEMC_AD6,       GPIO_FN_MEMC_AD7,       GPIO_FN_MEMC_AD8,
-       GPIO_FN_MEMC_AD9,       GPIO_FN_MEMC_AD10,      GPIO_FN_MEMC_AD11,
-       GPIO_FN_MEMC_AD12,      GPIO_FN_MEMC_AD13,      GPIO_FN_MEMC_AD14,
-       GPIO_FN_MEMC_AD15,
-
-       /* SIM          (PORT 94, 95, 98) */
-       GPIO_FN_SIM_RST,        GPIO_FN_SIM_CLK,        GPIO_FN_SIM_D,
-
-       /* TPU          (PORT 93, 99, 112, 160, 161) */
-       GPIO_FN_TPU0TO0,        GPIO_FN_TPU0TO1,
-       GPIO_FN_TPU0TO2_93,     GPIO_FN_TPU0TO2_99,
-       GPIO_FN_TPU0TO3,
-
-       /* I2C2         (PORT 110, 111) */
-       GPIO_FN_I2C_SCL2,       GPIO_FN_I2C_SDA2,
-
-       /* I2C3(1)      (PORT 114, 115) */
-       GPIO_FN_I2C_SCL3,       GPIO_FN_I2C_SDA3,
-
-       /* I2C3(2)      (PORT 137, 145) */
-       GPIO_FN_I2C_SCL3S,      GPIO_FN_I2C_SDA3S,
-
-       /* I2C4(2)      (PORT 116, 117) */
-       GPIO_FN_I2C_SCL4,       GPIO_FN_I2C_SDA4,
-
-       /* I2C4(2)      (PORT 146, 147) */
-       GPIO_FN_I2C_SCL4S,      GPIO_FN_I2C_SDA4S,
-
-       /*
-        * KEYSC        (PORT 121, 122, 123, 124, 125, 126, 127, 128, 129,
-        *                    130, 131, 132, 133, 134, 135, 136)
-        */
-       GPIO_FN_KEYOUT0,        GPIO_FN_KEYIN0_121,     GPIO_FN_KEYIN0_136,
-       GPIO_FN_KEYOUT1,        GPIO_FN_KEYIN1_122,     GPIO_FN_KEYIN1_135,
-       GPIO_FN_KEYOUT2,        GPIO_FN_KEYIN2_123,     GPIO_FN_KEYIN2_134,
-       GPIO_FN_KEYOUT3,        GPIO_FN_KEYIN3_124,     GPIO_FN_KEYIN3_133,
-       GPIO_FN_KEYOUT4,        GPIO_FN_KEYIN4,
-       GPIO_FN_KEYOUT5,        GPIO_FN_KEYIN5,
-       GPIO_FN_KEYOUT6,        GPIO_FN_KEYIN6,
-       GPIO_FN_KEYOUT7,        GPIO_FN_KEYIN7,
-
-       /*
-        * LCDC         (PORT      121, 122, 123, 124, 125, 126, 127, 128, 129,
-        *                    130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
-        *                    140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
-        *                    150, 151)
-        */
-       GPIO_FN_LCDC0_SELECT, /* LCDC 0 */
-       GPIO_FN_LCDC1_SELECT, /* LCDC 1 */
-       GPIO_FN_LCDHSYN,        GPIO_FN_LCDCS,  GPIO_FN_LCDVSYN,
-       GPIO_FN_LCDDCK,         GPIO_FN_LCDWR,  GPIO_FN_LCDRD,
-       GPIO_FN_LCDDISP,        GPIO_FN_LCDRS,  GPIO_FN_LCDLCLK,
-       GPIO_FN_LCDDON,
-
-       GPIO_FN_LCDD0,  GPIO_FN_LCDD1,  GPIO_FN_LCDD2,  GPIO_FN_LCDD3,
-       GPIO_FN_LCDD4,  GPIO_FN_LCDD5,  GPIO_FN_LCDD6,  GPIO_FN_LCDD7,
-       GPIO_FN_LCDD8,  GPIO_FN_LCDD9,  GPIO_FN_LCDD10, GPIO_FN_LCDD11,
-       GPIO_FN_LCDD12, GPIO_FN_LCDD13, GPIO_FN_LCDD14, GPIO_FN_LCDD15,
-       GPIO_FN_LCDD16, GPIO_FN_LCDD17, GPIO_FN_LCDD18, GPIO_FN_LCDD19,
-       GPIO_FN_LCDD20, GPIO_FN_LCDD21, GPIO_FN_LCDD22, GPIO_FN_LCDD23,
-
-       /* IRDA         (PORT 139, 140, 141, 142) */
-       GPIO_FN_IRDA_OUT,       GPIO_FN_IRDA_IN,        GPIO_FN_IRDA_FIRSEL,
-       GPIO_FN_IROUT_139,      GPIO_FN_IROUT_140,
-
-       /* TSIF1        (PORT 156, 157, 158, 159) */
-       GPIO_FN_TS0_1SELECT, /* TSIF0 - 1 select */
-       GPIO_FN_TS0_2SELECT, /* TSIF0 - 2 select */
-       GPIO_FN_TS1_1SELECT, /* TSIF1 - 1 select */
-       GPIO_FN_TS1_2SELECT, /* TSIF1 - 2 select */
-
-       GPIO_FN_TS_SPSYNC1,     GPIO_FN_TS_SDAT1,
-       GPIO_FN_TS_SDEN1,       GPIO_FN_TS_SCK1,
-
-       /* TSIF2        (PORT 137, 145, 146, 147) */
-       GPIO_FN_TS_SPSYNC2,     GPIO_FN_TS_SDAT2,
-       GPIO_FN_TS_SDEN2,       GPIO_FN_TS_SCK2,
-
-       /* HDMI         (PORT 169, 170) */
-       GPIO_FN_HDMI_HPD,       GPIO_FN_HDMI_CEC,
-
-       /* SDENC        see MSEL4CR 19 */
-       GPIO_FN_SDENC_CPG,
-       GPIO_FN_SDENC_DV_CLKI,
-};
-
 /* DMA slave IDs */
 enum {
        SHDMA_SLAVE_INVALID,
@@ -466,6 +75,8 @@ extern void sh7372_intcs_resume(void);
 extern void sh7372_intca_suspend(void);
 extern void sh7372_intca_resume(void);
 
+extern unsigned long sh7372_cpu_resume;
+
 #ifdef CONFIG_PM
 extern void __init sh7372_init_pm_domains(void);
 #else
index 9320aff0a20f7521518291a101e6ff5710424ce8..f2d8744c1f141704da024977da73180321747967 100644 (file)
  *
  **************************************************/
 
-#ifdef CONFIG_MACH_AP4EVB
-#define MACH_TYPE      MACH_TYPE_AP4EVB
-#include "mach/head-ap4evb.txt"
-#elif defined(CONFIG_MACH_MACKEREL)
+#ifdef CONFIG_MACH_MACKEREL
 #define MACH_TYPE      MACH_TYPE_MACKEREL
+#define MEMORY_START   0x40000000
 #include "mach/head-mackerel.txt"
 #else
 #error "unsupported board."
index dec9293bb90d167d2433585d7ff4503114896428..0de75fd394b9cb654470a591dbb9ec08d0c6d361 100644 (file)
@@ -351,6 +351,9 @@ static void sh7372_enter_a4s_common(int pllc0_on)
 
 static void sh7372_pm_setup_smfram(void)
 {
+       /* pass physical address of cpu_resume() to assembly resume code */
+       sh7372_cpu_resume = virt_to_phys(cpu_resume);
+
        memcpy((void *)SMFRAM, sh7372_resume_core_standby_sysc, 0x100);
 }
 #else
index 326a4ab0bd5f8ea0f6ba64f6a202ce60d9a66b40..3a6b6fe7b6c098bed8ecd22101e137fb7d568ceb 100644 (file)
@@ -70,29 +70,15 @@ void __init r8a7740_map_io(void)
 }
 
 /* PFC */
-static struct resource r8a7740_pfc_resources[] = {
-       [0] = {
-               .start  = 0xe6050000,
-               .end    = 0xe6057fff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = 0xe605800c,
-               .end    = 0xe605802b,
-               .flags  = IORESOURCE_MEM,
-       }
-};
-
-static struct platform_device r8a7740_pfc_device = {
-       .name           = "pfc-r8a7740",
-       .id             = -1,
-       .resource       = r8a7740_pfc_resources,
-       .num_resources  = ARRAY_SIZE(r8a7740_pfc_resources),
+static const struct resource pfc_resources[] = {
+       DEFINE_RES_MEM(0xe6050000, 0x8000),
+       DEFINE_RES_MEM(0xe605800c, 0x0020),
 };
 
 void __init r8a7740_pinmux_init(void)
 {
-       platform_device_register(&r8a7740_pfc_device);
+       platform_device_register_simple("pfc-r8a7740", -1, pfc_resources,
+                                       ARRAY_SIZE(pfc_resources));
 }
 
 static struct renesas_intc_irqpin_config irqpin0_platform_data = {
index 30b4a336308febb035259e7bc475a26627bd3712..80c20392ad7ce6c9711d83d006f2cc6e7c776a62 100644 (file)
 #include <linux/irqchip/arm-gic.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
+#include <linux/platform_data/gpio-rcar.h>
 #include <linux/platform_data/irq-renesas-intc-irqpin.h>
 #include <linux/platform_device.h>
 #include <linux/irqchip.h>
 #include <linux/serial_sci.h>
 #include <linux/sh_timer.h>
+#include <linux/pm_runtime.h>
+#include <linux/usb/phy.h>
+#include <linux/usb/hcd.h>
+#include <linux/usb/ehci_pdriver.h>
+#include <linux/usb/ohci_pdriver.h>
+#include <linux/dma-mapping.h>
 #include <mach/irqs.h>
 #include <mach/r8a7778.h>
 #include <mach/common.h>
@@ -80,12 +87,6 @@ static struct sh_timer_config sh_tmu1_platform_data = {
        .clocksource_rating     = 200,
 };
 
-/* Ether */
-static struct resource ether_resources[] = {
-       DEFINE_RES_MEM(0xfde00000, 0x400),
-       DEFINE_RES_IRQ(gic_iid(0x89)),
-};
-
 #define r8a7778_register_tmu(idx)                      \
        platform_device_register_resndata(              \
                &platform_bus, "sh_tmu", idx,           \
@@ -94,6 +95,244 @@ static struct resource ether_resources[] = {
                &sh_tmu##idx##_platform_data,           \
                sizeof(sh_tmu##idx##_platform_data))
 
+/* USB PHY */
+static struct resource usb_phy_resources[] __initdata = {
+       DEFINE_RES_MEM(0xffe70800, 0x100),
+       DEFINE_RES_MEM(0xffe76000, 0x100),
+};
+
+void __init r8a7778_add_usb_phy_device(struct rcar_phy_platform_data *pdata)
+{
+       platform_device_register_resndata(&platform_bus, "rcar_usb_phy", -1,
+                                         usb_phy_resources,
+                                         ARRAY_SIZE(usb_phy_resources),
+                                         pdata, sizeof(*pdata));
+}
+
+/* USB */
+static struct usb_phy *phy;
+
+static int usb_power_on(struct platform_device *pdev)
+{
+       if (IS_ERR(phy))
+               return PTR_ERR(phy);
+
+       pm_runtime_enable(&pdev->dev);
+       pm_runtime_get_sync(&pdev->dev);
+
+       usb_phy_init(phy);
+
+       return 0;
+}
+
+static void usb_power_off(struct platform_device *pdev)
+{
+       if (IS_ERR(phy))
+               return;
+
+       usb_phy_shutdown(phy);
+
+       pm_runtime_put_sync(&pdev->dev);
+       pm_runtime_disable(&pdev->dev);
+}
+
+static int ehci_init_internal_buffer(struct usb_hcd *hcd)
+{
+       /*
+        * Below are recommended values from the datasheet;
+        * see [USB :: Setting of EHCI Internal Buffer].
+        */
+       /* EHCI IP internal buffer setting */
+       iowrite32(0x00ff0040, hcd->regs + 0x0094);
+       /* EHCI IP internal buffer enable */
+       iowrite32(0x00000001, hcd->regs + 0x009C);
+
+       return 0;
+}
+
+static struct usb_ehci_pdata ehci_pdata __initdata = {
+       .power_on       = usb_power_on,
+       .power_off      = usb_power_off,
+       .power_suspend  = usb_power_off,
+       .pre_setup      = ehci_init_internal_buffer,
+};
+
+static struct resource ehci_resources[] __initdata = {
+       DEFINE_RES_MEM(0xffe70000, 0x400),
+       DEFINE_RES_IRQ(gic_iid(0x4c)),
+};
+
+static struct usb_ohci_pdata ohci_pdata __initdata = {
+       .power_on       = usb_power_on,
+       .power_off      = usb_power_off,
+       .power_suspend  = usb_power_off,
+};
+
+static struct resource ohci_resources[] __initdata = {
+       DEFINE_RES_MEM(0xffe70400, 0x400),
+       DEFINE_RES_IRQ(gic_iid(0x4c)),
+};
+
+#define USB_PLATFORM_INFO(hci)                                 \
+static struct platform_device_info hci##_info __initdata = {   \
+       .parent         = &platform_bus,                        \
+       .name           = #hci "-platform",                     \
+       .id             = -1,                                   \
+       .res            = hci##_resources,                      \
+       .num_res        = ARRAY_SIZE(hci##_resources),          \
+       .data           = &hci##_pdata,                         \
+       .size_data      = sizeof(hci##_pdata),                  \
+       .dma_mask       = DMA_BIT_MASK(32),                     \
+}
+
+USB_PLATFORM_INFO(ehci);
+USB_PLATFORM_INFO(ohci);
+
+/* Ether */
+static struct resource ether_resources[] = {
+       DEFINE_RES_MEM(0xfde00000, 0x400),
+       DEFINE_RES_IRQ(gic_iid(0x89)),
+};
+
+void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata)
+{
+       platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1,
+                                         ether_resources,
+                                         ARRAY_SIZE(ether_resources),
+                                         pdata, sizeof(*pdata));
+}
+
+/* PFC/GPIO */
+static struct resource pfc_resources[] = {
+       DEFINE_RES_MEM(0xfffc0000, 0x118),
+};
+
+#define R8A7778_GPIO(idx)                                              \
+static struct resource r8a7778_gpio##idx##_resources[] = {             \
+       DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30),              \
+       DEFINE_RES_IRQ(gic_iid(0x87)),                                  \
+};                                                                     \
+                                                                       \
+static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data = {   \
+       .gpio_base      = 32 * (idx),                                   \
+       .irq_base       = GPIO_IRQ_BASE(idx),                           \
+       .number_of_pins = 32,                                           \
+       .pctl_name      = "pfc-r8a7778",                                \
+}
+
+R8A7778_GPIO(0);
+R8A7778_GPIO(1);
+R8A7778_GPIO(2);
+R8A7778_GPIO(3);
+R8A7778_GPIO(4);
+
+#define r8a7778_register_gpio(idx)                             \
+       platform_device_register_resndata(                      \
+               &platform_bus, "gpio_rcar", idx,                \
+               r8a7778_gpio##idx##_resources,                  \
+               ARRAY_SIZE(r8a7778_gpio##idx##_resources),      \
+               &r8a7778_gpio##idx##_platform_data,             \
+               sizeof(r8a7778_gpio##idx##_platform_data))
+
+void __init r8a7778_pinmux_init(void)
+{
+       platform_device_register_simple(
+               "pfc-r8a7778", -1,
+               pfc_resources,
+               ARRAY_SIZE(pfc_resources));
+
+       r8a7778_register_gpio(0);
+       r8a7778_register_gpio(1);
+       r8a7778_register_gpio(2);
+       r8a7778_register_gpio(3);
+       r8a7778_register_gpio(4);
+};
+
+/* SDHI */
+static struct resource sdhi_resources[] = {
+       /* SDHI0 */
+       DEFINE_RES_MEM(0xFFE4C000, 0x100),
+       DEFINE_RES_IRQ(gic_iid(0x77)),
+       /* SDHI1 */
+       DEFINE_RES_MEM(0xFFE4D000, 0x100),
+       DEFINE_RES_IRQ(gic_iid(0x78)),
+       /* SDHI2 */
+       DEFINE_RES_MEM(0xFFE4F000, 0x100),
+       DEFINE_RES_IRQ(gic_iid(0x76)),
+};
+
+void __init r8a7778_sdhi_init(int id,
+                             struct sh_mobile_sdhi_info *info)
+{
+       BUG_ON(id < 0 || id > 2);
+
+       platform_device_register_resndata(
+               &platform_bus, "sh_mobile_sdhi", id,
+               sdhi_resources + (2 * id), 2,
+               info, sizeof(*info));
+}
+
+/* I2C */
+static struct resource i2c_resources[] __initdata = {
+       /* I2C0 */
+       DEFINE_RES_MEM(0xffc70000, 0x1000),
+       DEFINE_RES_IRQ(gic_iid(0x63)),
+       /* I2C1 */
+       DEFINE_RES_MEM(0xffc71000, 0x1000),
+       DEFINE_RES_IRQ(gic_iid(0x6e)),
+       /* I2C2 */
+       DEFINE_RES_MEM(0xffc72000, 0x1000),
+       DEFINE_RES_IRQ(gic_iid(0x6c)),
+       /* I2C3 */
+       DEFINE_RES_MEM(0xffc73000, 0x1000),
+       DEFINE_RES_IRQ(gic_iid(0x6d)),
+};
+
+void __init r8a7778_add_i2c_device(int id)
+{
+       BUG_ON(id < 0 || id > 3);
+
+       platform_device_register_simple(
+               "i2c-rcar", id,
+               i2c_resources + (2 * id), 2);
+}
+
+/* HSPI */
+static struct resource hspi_resources[] __initdata = {
+       /* HSPI0 */
+       DEFINE_RES_MEM(0xfffc7000, 0x18),
+       DEFINE_RES_IRQ(gic_iid(0x5f)),
+       /* HSPI1 */
+       DEFINE_RES_MEM(0xfffc8000, 0x18),
+       DEFINE_RES_IRQ(gic_iid(0x74)),
+       /* HSPI2 */
+       DEFINE_RES_MEM(0xfffc6000, 0x18),
+       DEFINE_RES_IRQ(gic_iid(0x75)),
+};
+
+void __init r8a7778_add_hspi_device(int id)
+{
+       BUG_ON(id < 0 || id > 2);
+
+       platform_device_register_simple(
+               "sh-hspi", id,
+               hspi_resources + (2 * id), 2);
+}
+
+/* MMC */
+static struct resource mmc_resources[] __initdata = {
+       DEFINE_RES_MEM(0xffe4e000, 0x100),
+       DEFINE_RES_IRQ(gic_iid(0x5d)),
+};
+
+void __init r8a7778_add_mmc_device(struct sh_mmcif_plat_data *info)
+{
+       platform_device_register_resndata(
+               &platform_bus, "sh_mmcif", -1,
+               mmc_resources, ARRAY_SIZE(mmc_resources),
+               info, sizeof(*info));
+}
+
 void __init r8a7778_add_standard_devices(void)
 {
        int i;
@@ -118,12 +357,12 @@ void __init r8a7778_add_standard_devices(void)
        r8a7778_register_tmu(1);
 }
 
-void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata)
+void __init r8a7778_init_late(void)
 {
-       platform_device_register_resndata(&platform_bus, "sh_eth", -1,
-                                         ether_resources,
-                                         ARRAY_SIZE(ether_resources),
-                                         pdata, sizeof(*pdata));
+       phy = usb_get_phy(USB_PHY_TYPE_USB2);
+
+       platform_device_register_full(&ehci_info);
+       platform_device_register_full(&ohci_info);
 }
 
 static struct renesas_intc_irqpin_config irqpin_platform_data = {
@@ -239,6 +478,7 @@ DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)")
        .init_machine   = r8a7778_add_standard_devices_dt,
        .init_time      = shmobile_timer_init,
        .dt_compat      = r8a7778_compat_dt,
+       .init_late      = r8a7778_init_late,
 MACHINE_END
 
 #endif /* CONFIG_USE_OF */
index b0b394842ea5011b31b678a8b53b012cea2580ba..398687761f504046a5567c5d2ac58f4e8076a528 100644 (file)
 #include <linux/sh_intc.h>
 #include <linux/sh_timer.h>
 #include <linux/dma-mapping.h>
+#include <linux/usb/otg.h>
+#include <linux/usb/hcd.h>
+#include <linux/usb/ehci_pdriver.h>
+#include <linux/usb/ohci_pdriver.h>
+#include <linux/pm_runtime.h>
 #include <mach/hardware.h>
 #include <mach/irqs.h>
 #include <mach/r8a7779.h>
@@ -65,11 +70,7 @@ void __init r8a7779_map_io(void)
 }
 
 static struct resource r8a7779_pfc_resources[] = {
-       [0] = {
-               .start  = 0xfffc0000,
-               .end    = 0xfffc023b,
-               .flags  = IORESOURCE_MEM,
-       },
+       DEFINE_RES_MEM(0xfffc0000, 0x023c),
 };
 
 static struct platform_device r8a7779_pfc_device = {
@@ -81,15 +82,8 @@ static struct platform_device r8a7779_pfc_device = {
 
 #define R8A7779_GPIO(idx, npins) \
 static struct resource r8a7779_gpio##idx##_resources[] = {             \
-       [0] = {                                                         \
-               .start  = 0xffc40000 + 0x1000 * (idx),                  \
-               .end    = 0xffc4002b + 0x1000 * (idx),                  \
-               .flags  = IORESOURCE_MEM,                               \
-       },                                                              \
-       [1] = {                                                         \
-               .start  = gic_iid(0xad + (idx)),                        \
-               .flags  = IORESOURCE_IRQ,                               \
-       }                                                               \
+       DEFINE_RES_MEM(0xffc40000 + (0x1000 * (idx)), 0x002c),          \
+       DEFINE_RES_IRQ(gic_iid(0xad + (idx))),                          \
 };                                                                     \
                                                                        \
 static struct gpio_rcar_config r8a7779_gpio##idx##_platform_data = {   \
@@ -394,6 +388,165 @@ static struct platform_device sata_device = {
        },
 };
 
+/* USB PHY */
+static struct resource usb_phy_resources[] __initdata = {
+       [0] = {
+               .start          = 0xffe70800,
+               .end            = 0xffe70900 - 1,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+/* USB */
+static struct usb_phy *phy;
+
+static int usb_power_on(struct platform_device *pdev)
+{
+       if (IS_ERR(phy))
+               return PTR_ERR(phy);
+
+       pm_runtime_enable(&pdev->dev);
+       pm_runtime_get_sync(&pdev->dev);
+
+       usb_phy_init(phy);
+
+       return 0;
+}
+
+static void usb_power_off(struct platform_device *pdev)
+{
+       if (IS_ERR(phy))
+               return;
+
+       usb_phy_shutdown(phy);
+
+       pm_runtime_put_sync(&pdev->dev);
+       pm_runtime_disable(&pdev->dev);
+}
+
+static int ehci_init_internal_buffer(struct usb_hcd *hcd)
+{
+       /*
+        * Below are recommended values from the datasheet;
+        * see [USB :: Setting of EHCI Internal Buffer].
+        */
+       /* EHCI IP internal buffer setting */
+       iowrite32(0x00ff0040, hcd->regs + 0x0094);
+       /* EHCI IP internal buffer enable */
+       iowrite32(0x00000001, hcd->regs + 0x009C);
+
+       return 0;
+}
+
+static struct usb_ehci_pdata ehcix_pdata = {
+       .power_on       = usb_power_on,
+       .power_off      = usb_power_off,
+       .power_suspend  = usb_power_off,
+       .pre_setup      = ehci_init_internal_buffer,
+};
+
+static struct resource ehci0_resources[] = {
+       [0] = {
+               .start  = 0xffe70000,
+               .end    = 0xffe70400 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = gic_iid(0x4c),
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ehci0_device = {
+       .name   = "ehci-platform",
+       .id     = 0,
+       .dev    = {
+               .dma_mask               = &ehci0_device.dev.coherent_dma_mask,
+               .coherent_dma_mask      = 0xffffffff,
+               .platform_data          = &ehcix_pdata,
+       },
+       .num_resources  = ARRAY_SIZE(ehci0_resources),
+       .resource       = ehci0_resources,
+};
+
+static struct resource ehci1_resources[] = {
+       [0] = {
+               .start  = 0xfff70000,
+               .end    = 0xfff70400 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = gic_iid(0x4d),
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ehci1_device = {
+       .name   = "ehci-platform",
+       .id     = 1,
+       .dev    = {
+               .dma_mask               = &ehci1_device.dev.coherent_dma_mask,
+               .coherent_dma_mask      = 0xffffffff,
+               .platform_data          = &ehcix_pdata,
+       },
+       .num_resources  = ARRAY_SIZE(ehci1_resources),
+       .resource       = ehci1_resources,
+};
+
+static struct usb_ohci_pdata ohcix_pdata = {
+       .power_on       = usb_power_on,
+       .power_off      = usb_power_off,
+       .power_suspend  = usb_power_off,
+};
+
+static struct resource ohci0_resources[] = {
+       [0] = {
+               .start  = 0xffe70400,
+               .end    = 0xffe70800 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = gic_iid(0x4c),
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ohci0_device = {
+       .name   = "ohci-platform",
+       .id     = 0,
+       .dev    = {
+               .dma_mask               = &ohci0_device.dev.coherent_dma_mask,
+               .coherent_dma_mask      = 0xffffffff,
+               .platform_data          = &ohcix_pdata,
+       },
+       .num_resources  = ARRAY_SIZE(ohci0_resources),
+       .resource       = ohci0_resources,
+};
+
+static struct resource ohci1_resources[] = {
+       [0] = {
+               .start  = 0xfff70400,
+               .end    = 0xfff70800 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = gic_iid(0x4d),
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ohci1_device = {
+       .name   = "ohci-platform",
+       .id     = 1,
+       .dev    = {
+               .dma_mask               = &ohci1_device.dev.coherent_dma_mask,
+               .coherent_dma_mask      = 0xffffffff,
+               .platform_data          = &ohcix_pdata,
+       },
+       .num_resources  = ARRAY_SIZE(ohci1_resources),
+       .resource       = ohci1_resources,
+};
+
 /* Ether */
 static struct resource ether_resources[] = {
        {
@@ -417,7 +570,7 @@ static struct platform_device *r8a7779_devices_dt[] __initdata = {
        &tmu01_device,
 };
 
-static struct platform_device *r8a7779_late_devices[] __initdata = {
+static struct platform_device *r8a7779_standard_devices[] __initdata = {
        &i2c0_device,
        &i2c1_device,
        &i2c2_device,
@@ -437,18 +590,26 @@ void __init r8a7779_add_standard_devices(void)
 
        platform_add_devices(r8a7779_devices_dt,
                            ARRAY_SIZE(r8a7779_devices_dt));
-       platform_add_devices(r8a7779_late_devices,
-                           ARRAY_SIZE(r8a7779_late_devices));
+       platform_add_devices(r8a7779_standard_devices,
+                           ARRAY_SIZE(r8a7779_standard_devices));
 }
 
 void __init r8a7779_add_ether_device(struct sh_eth_plat_data *pdata)
 {
-       platform_device_register_resndata(&platform_bus, "sh_eth", -1,
+       platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1,
                                          ether_resources,
                                          ARRAY_SIZE(ether_resources),
                                          pdata, sizeof(*pdata));
 }
 
+void __init r8a7779_add_usb_phy_device(struct rcar_phy_platform_data *pdata)
+{
+       platform_device_register_resndata(&platform_bus, "rcar_usb_phy", -1,
+                                         usb_phy_resources,
+                                         ARRAY_SIZE(usb_phy_resources),
+                                         pdata, sizeof(*pdata));
+}
+
 /* do nothing for !CONFIG_SMP or !CONFIG_HAVE_TWD */
 void __init __weak r8a7779_register_twd(void) { }
 
@@ -481,6 +642,23 @@ void __init r8a7779_add_early_devices(void)
         */
 }
 
+static struct platform_device *r8a7779_late_devices[] __initdata = {
+       &ehci0_device,
+       &ehci1_device,
+       &ohci0_device,
+       &ohci1_device,
+};
+
+void __init r8a7779_init_late(void)
+{
+       /* get USB PHY */
+       phy = usb_get_phy(USB_PHY_TYPE_USB2);
+
+       shmobile_init_late();
+       platform_add_devices(r8a7779_late_devices,
+                            ARRAY_SIZE(r8a7779_late_devices));
+}
+
 #ifdef CONFIG_USE_OF
 void __init r8a7779_init_delay(void)
 {
@@ -514,6 +692,7 @@ DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)")
        .init_irq       = r8a7779_init_irq_dt,
        .init_machine   = r8a7779_add_standard_devices_dt,
        .init_time      = shmobile_timer_init,
+       .init_late      = r8a7779_init_late,
        .dt_compat      = r8a7779_compat_dt,
 MACHINE_END
 #endif /* CONFIG_USE_OF */
index 49de2d56f86db50bc18e66dd17ebb5bed986e812..b461d93431ed4e29a500e41749e6ca3698090f5f 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/kernel.h>
 #include <linux/of_platform.h>
 #include <linux/serial_sci.h>
+#include <linux/platform_data/gpio-rcar.h>
 #include <linux/platform_data/irq-renesas-irqc.h>
 #include <mach/common.h>
 #include <mach/irqs.h>
 
 static const struct resource pfc_resources[] = {
        DEFINE_RES_MEM(0xe6060000, 0x250),
-       DEFINE_RES_MEM(0xe6050000, 0x5050),
 };
 
+#define R8A7790_GPIO(idx)                                              \
+static struct resource r8a7790_gpio##idx##_resources[] = {             \
+       DEFINE_RES_MEM(0xe6050000 + 0x1000 * (idx), 0x50),              \
+       DEFINE_RES_IRQ(gic_spi(4 + (idx))),                             \
+};                                                                     \
+                                                                       \
+static struct gpio_rcar_config r8a7790_gpio##idx##_platform_data = {   \
+       .gpio_base      = 32 * (idx),                                   \
+       .irq_base       = 0,                                            \
+       .number_of_pins = 32,                                           \
+       .pctl_name      = "pfc-r8a7790",                                \
+       .has_both_edge_trigger = 1,                                     \
+};                                                                     \
+
+R8A7790_GPIO(0);
+R8A7790_GPIO(1);
+R8A7790_GPIO(2);
+R8A7790_GPIO(3);
+R8A7790_GPIO(4);
+R8A7790_GPIO(5);
+
+#define r8a7790_register_gpio(idx)                                     \
+       platform_device_register_resndata(&platform_bus, "gpio_rcar", idx, \
+               r8a7790_gpio##idx##_resources,                          \
+               ARRAY_SIZE(r8a7790_gpio##idx##_resources),              \
+               &r8a7790_gpio##idx##_platform_data,                     \
+               sizeof(r8a7790_gpio##idx##_platform_data))
+
 void __init r8a7790_pinmux_init(void)
 {
        platform_device_register_simple("pfc-r8a7790", -1, pfc_resources,
                                        ARRAY_SIZE(pfc_resources));
+       r8a7790_register_gpio(0);
+       r8a7790_register_gpio(1);
+       r8a7790_register_gpio(2);
+       r8a7790_register_gpio(3);
+       r8a7790_register_gpio(4);
+       r8a7790_register_gpio(5);
 }
 
 #define SCIF_COMMON(scif_type, baseaddr, irq)                  \
index 9696f36468643956c37466a0e77d5de5292b2e5f..96e7ca1e4e117877a7071c00ad08513675667095 100644 (file)
@@ -288,12 +288,7 @@ static struct sh_timer_config tmu00_platform_data = {
 };
 
 static struct resource tmu00_resources[] = {
-       [0] = {
-               .name   = "TMU00",
-               .start  = 0xfff60008,
-               .end    = 0xfff60013,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xfff60008, 0xc, "TMU00"),
        [1] = {
                .start  = intcs_evt2irq(0x0e80), /* TMU0_TUNI00 */
                .flags  = IORESOURCE_IRQ,
@@ -318,12 +313,7 @@ static struct sh_timer_config tmu01_platform_data = {
 };
 
 static struct resource tmu01_resources[] = {
-       [0] = {
-               .name   = "TMU01",
-               .start  = 0xfff60014,
-               .end    = 0xfff6001f,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xfff60014, 0xc, "TMU00"),
        [1] = {
                .start  = intcs_evt2irq(0x0ea0), /* TMU0_TUNI01 */
                .flags  = IORESOURCE_IRQ,
@@ -341,12 +331,7 @@ static struct platform_device tmu01_device = {
 };
 
 static struct resource i2c0_resources[] = {
-       [0] = {
-               .name   = "IIC0",
-               .start  = 0xe6820000,
-               .end    = 0xe6820425 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xe6820000, 0x426, "IIC0"),
        [1] = {
                .start  = gic_spi(167),
                .end    = gic_spi(170),
@@ -355,12 +340,7 @@ static struct resource i2c0_resources[] = {
 };
 
 static struct resource i2c1_resources[] = {
-       [0] = {
-               .name   = "IIC1",
-               .start  = 0xe6822000,
-               .end    = 0xe6822425 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xe6822000, 0x426, "IIC1"),
        [1] = {
                .start  = gic_spi(51),
                .end    = gic_spi(54),
@@ -369,12 +349,7 @@ static struct resource i2c1_resources[] = {
 };
 
 static struct resource i2c2_resources[] = {
-       [0] = {
-               .name   = "IIC2",
-               .start  = 0xe6824000,
-               .end    = 0xe6824425 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xe6824000, 0x426, "IIC2"),
        [1] = {
                .start  = gic_spi(171),
                .end    = gic_spi(174),
@@ -383,12 +358,7 @@ static struct resource i2c2_resources[] = {
 };
 
 static struct resource i2c3_resources[] = {
-       [0] = {
-               .name   = "IIC3",
-               .start  = 0xe6826000,
-               .end    = 0xe6826425 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xe6826000, 0x426, "IIC3"),
        [1] = {
                .start  = gic_spi(183),
                .end    = gic_spi(186),
@@ -397,12 +367,7 @@ static struct resource i2c3_resources[] = {
 };
 
 static struct resource i2c4_resources[] = {
-       [0] = {
-               .name   = "IIC4",
-               .start  = 0xe6828000,
-               .end    = 0xe6828425 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM_NAMED(0xe6828000, 0x426, "IIC4"),
        [1] = {
                .start  = gic_spi(187),
                .end    = gic_spi(190),
@@ -623,12 +588,7 @@ static struct sh_dmae_pdata sh73a0_dmae_platform_data = {
 };
 
 static struct resource sh73a0_dmae_resources[] = {
-       {
-               /* Registers including DMAOR and channels including DMARSx */
-               .start  = 0xfe000020,
-               .end    = 0xfe008a00 - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+       DEFINE_RES_MEM(0xfe000020, 0x89e0),
        {
                .name   = "error_irq",
                .start  = gic_spi(129),
@@ -727,18 +687,10 @@ static struct sh_dmae_pdata sh73a0_mpdma_platform_data = {
 
 /* Resource order important! */
 static struct resource sh73a0_mpdma_resources[] = {
-       {
-               /* Channel registers and DMAOR */
-               .start  = 0xec618020,
-               .end    = 0xec61828f,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               /* DMARSx */
-               .start  = 0xec619000,
-               .end    = 0xec61900b,
-               .flags  = IORESOURCE_MEM,
-       },
+       /* Channel registers and DMAOR */
+       DEFINE_RES_MEM(0xec618020, 0x270),
+       /* DMARSx */
+       DEFINE_RES_MEM(0xec619000, 0xc),
        {
                .name   = "error_irq",
                .start  = gic_spi(181),
@@ -785,12 +737,7 @@ static struct platform_device pmu_device = {
 
 /* an IPMMU module for ICB */
 static struct resource ipmmu_resources[] = {
-       [0] = {
-               .name   = "IPMMU",
-               .start  = 0xfe951000,
-               .end    = 0xfe9510ff,
-               .flags  = IORESOURCE_MEM,
-       },
+       DEFINE_RES_MEM_NAMED(0xfe951000, 0x100, "IPMMU"),
 };
 
 static const char * const ipmmu_dev_names[] = {
@@ -982,11 +929,17 @@ void __init sh73a0_add_standard_devices(void)
                            ARRAY_SIZE(sh73a0_late_devices));
 }
 
+void __init sh73a0_init_delay(void)
+{
+       shmobile_setup_delay(1196, 44, 46); /* Cortex-A9 @ 1196MHz */
+}
+
 /* do nothing for !CONFIG_SMP or !CONFIG_HAVE_TWD */
 void __init __weak sh73a0_register_twd(void) { }
 
 void __init sh73a0_earlytimer_init(void)
 {
+       sh73a0_init_delay();
        sh73a0_clock_init();
        shmobile_earlytimer_init();
        sh73a0_register_twd();
@@ -1005,17 +958,14 @@ void __init sh73a0_add_early_devices(void)
 
 #ifdef CONFIG_USE_OF
 
-void __init sh73a0_init_delay(void)
-{
-       shmobile_setup_delay(1196, 44, 46); /* Cortex-A9 @ 1196MHz */
-}
-
 static const struct of_dev_auxdata sh73a0_auxdata_lookup[] __initconst = {
        {},
 };
 
 void __init sh73a0_add_standard_devices_dt(void)
 {
+       struct platform_device_info devinfo = { .name = "cpufreq-cpu0", .id = -1, };
+
        /* clocks are setup late during boot in the case of DT */
        sh73a0_clock_init();
 
@@ -1023,6 +973,9 @@ void __init sh73a0_add_standard_devices_dt(void)
                             ARRAY_SIZE(sh73a0_devices_dt));
        of_platform_populate(NULL, of_default_bus_match_table,
                             sh73a0_auxdata_lookup, NULL);
+
+       /* Instantiate cpufreq-cpu0 */
+       platform_device_register_full(&devinfo);
 }
 
 static const char *sh73a0_boards_compat_dt[] __initdata = {
index a9df53b69ab8ead409fe78352f3c707f6a2ade1f..53f4840e494914526b4ab23fa09b7a19473c4476 100644 (file)
        .global sh7372_resume_core_standby_sysc
 sh7372_resume_core_standby_sysc:
        ldr     pc, 1f
-1:     .long   cpu_resume - PAGE_OFFSET + PLAT_PHYS_OFFSET
+
+       .globl  sh7372_cpu_resume
+sh7372_cpu_resume:
+1:     .space  4
 
 #define SPDCR 0xe6180008
 
index e38691b4d0ddc0fc2f57856567432d6a8d60d2f3..80991b35f4ac0af6a7878c3e79cc97d2704995fb 100644 (file)
@@ -40,8 +40,10 @@ static void __init emev2_smp_prepare_cpus(unsigned int max_cpus)
 {
        scu_enable(shmobile_scu_base);
 
-       /* Tell ROM loader about our vector (in headsmp-scu.S) */
-       emev2_set_boot_vector(__pa(shmobile_secondary_vector_scu));
+       /* Tell ROM loader about our vector (in headsmp-scu.S, headsmp.S) */
+       emev2_set_boot_vector(__pa(shmobile_boot_vector));
+       shmobile_boot_fn = virt_to_phys(shmobile_boot_scu);
+       shmobile_boot_arg = (unsigned long)shmobile_scu_base;
 
        /* enable cache coherency on booting CPU */
        scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL);
index a853bf182ed5ef2d4f21f11718f7983ba90f932f..526cfaae81c1bd35897735db73aa309cbe30028f 100644 (file)
@@ -101,8 +101,10 @@ static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus)
 {
        scu_enable(shmobile_scu_base);
 
-       /* Map the reset vector (in headsmp-scu.S) */
-       __raw_writel(__pa(shmobile_secondary_vector_scu), AVECR);
+       /* Map the reset vector (in headsmp-scu.S, headsmp.S) */
+       __raw_writel(__pa(shmobile_boot_vector), AVECR);
+       shmobile_boot_fn = virt_to_phys(shmobile_boot_scu);
+       shmobile_boot_arg = (unsigned long)shmobile_scu_base;
 
        /* enable cache coherency on booting CPU */
        scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL);
index 496592b6c763979484b58e43212cb55c4dbfdbcc..d613113a04bda27f12042803a92fe239be567a9b 100644 (file)
@@ -64,9 +64,11 @@ static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus)
 {
        scu_enable(shmobile_scu_base);
 
-       /* Map the reset vector (in headsmp-scu.S) */
+       /* Map the reset vector (in headsmp-scu.S, headsmp.S) */
        __raw_writel(0, APARMBAREA);      /* 4k */
-       __raw_writel(__pa(shmobile_secondary_vector_scu), SBAR);
+       __raw_writel(__pa(shmobile_boot_vector), SBAR);
+       shmobile_boot_fn = virt_to_phys(shmobile_boot_scu);
+       shmobile_boot_arg = (unsigned long)shmobile_scu_base;
 
        /* enable cache coherency on booting CPU */
        scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL);
index 566e804d40367c8a13bf83164b4c3af7b7320750..dd86db467521956f6a1d06f5a157f77ce7ac4e5e 100644 (file)
@@ -7,11 +7,11 @@ config ARCH_SOCFPGA
        select CLKDEV_LOOKUP
        select COMMON_CLK
        select CPU_V7
-       select DW_APB_TIMER
        select DW_APB_TIMER_OF
        select GENERIC_CLOCKEVENTS
        select GPIO_PL061 if GPIOLIB
        select HAVE_ARM_SCU
        select HAVE_SMP
+       select MFD_SYSCON
        select SPARSE_IRQ
        select USE_OF
index 46a051359f028a938685a5aca71518205ef2ecda..8ea11b472b91a0950826c9f81aabb1404c232130 100644 (file)
@@ -14,7 +14,6 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include <linux/dw_apb_timer.h>
 #include <linux/clk-provider.h>
 #include <linux/irqchip.h>
 #include <linux/of_address.h>
@@ -120,7 +119,6 @@ DT_MACHINE_START(SOCFPGA, "Altera SOCFPGA")
        .smp            = smp_ops(socfpga_smp_ops),
        .map_io         = socfpga_map_io,
        .init_irq       = socfpga_init_irq,
-       .init_time      = dw_apb_timer_init,
        .init_machine   = socfpga_cyclone5_init,
        .restart        = socfpga_cyclone5_restart,
        .dt_compat      = altera_dt_match,
index a3a755fa2850c35d80c63f3877c51e7471fd8504..84485a10fc3a6aea5437aba8d039c1a67c7a1d5f 100644 (file)
@@ -93,6 +93,7 @@ static void __init sunxi_dt_init(void)
 
 static const char * const sunxi_board_dt_compat[] = {
        "allwinner,sun4i-a10",
+       "allwinner,sun5i-a10s",
        "allwinner,sun5i-a13",
        NULL,
 };
index d011f0ad49c41c13f38d3f30b668d23d6d7aa7f4..98b184efc11043d1439594449a7ccf44973a9530 100644 (file)
@@ -30,6 +30,7 @@ obj-$(CONFIG_HOTPLUG_CPU)               += hotplug.o
 obj-$(CONFIG_TEGRA_PCI)                        += pcie.o
 
 obj-$(CONFIG_ARCH_TEGRA_114_SOC)       += tegra114_speedo.o
+obj-$(CONFIG_ARCH_TEGRA_114_SOC)       += sleep-tegra30.o
 ifeq ($(CONFIG_CPU_IDLE),y)
 obj-$(CONFIG_ARCH_TEGRA_114_SOC)       += cpuidle-tegra114.o
 endif
index 9f852c6fe5b97360fb9a557c00fb734273802951..ec5836b1e7133d75118f082710337505bc800dcc 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "board.h"
 #include "common.h"
+#include "cpuidle.h"
 #include "fuse.h"
 #include "iomap.h"
 #include "irq.h"
@@ -108,5 +109,6 @@ void __init tegra_init_early(void)
 void __init tegra_init_late(void)
 {
        tegra_init_suspend();
+       tegra_cpuidle_init();
        tegra_powergate_debugfs_init();
 }
index 5900cc44f780d33ab84434d3d4393643bab4e541..32f8eb3fe344958d395d89b17785b38f17f06673 100644 (file)
@@ -2,3 +2,4 @@ extern struct smp_operations tegra_smp_ops;
 
 extern int tegra_cpu_kill(unsigned int cpu);
 extern void tegra_cpu_die(unsigned int cpu);
+extern int tegra_cpu_disable(unsigned int cpu);
index 0cdba8de8c77b2f576a415648d762fff82fb81da..706aa4215c3636ffd39a2211dda5cc1319ce52db 100644 (file)
@@ -177,7 +177,6 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,
                                    struct cpuidle_driver *drv,
                                    int index)
 {
-       u32 cpu = is_smp() ? cpu_logical_map(dev->cpu) : dev->cpu;
        bool entered_lp2 = false;
 
        if (tegra_pending_sgi())
@@ -193,16 +192,16 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,
 
        local_fiq_disable();
 
-       tegra_set_cpu_in_lp2(cpu);
+       tegra_set_cpu_in_lp2();
        cpu_pm_enter();
 
-       if (cpu == 0)
+       if (dev->cpu == 0)
                entered_lp2 = tegra20_cpu_cluster_power_down(dev, drv, index);
        else
                entered_lp2 = tegra20_idle_enter_lp2_cpu_1(dev, drv, index);
 
        cpu_pm_exit();
-       tegra_clear_cpu_in_lp2(cpu);
+       tegra_clear_cpu_in_lp2();
 
        local_fiq_enable();
 
@@ -214,8 +213,5 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,
 
 int __init tegra20_cpuidle_init(void)
 {
-#ifdef CONFIG_PM_SLEEP
-       tegra_tear_down_cpu = tegra20_tear_down_cpu;
-#endif
        return cpuidle_register(&tegra_idle_driver, cpu_possible_mask);
 }
index 3cf9aca5f3ea9de1266d11b67a1e7c4ae62a0ee8..ed2a2a7bae4d00ef1107b15681612b663c99bf67 100644 (file)
@@ -114,16 +114,15 @@ static int tegra30_idle_lp2(struct cpuidle_device *dev,
                            struct cpuidle_driver *drv,
                            int index)
 {
-       u32 cpu = is_smp() ? cpu_logical_map(dev->cpu) : dev->cpu;
        bool entered_lp2 = false;
        bool last_cpu;
 
        local_fiq_disable();
 
-       last_cpu = tegra_set_cpu_in_lp2(cpu);
+       last_cpu = tegra_set_cpu_in_lp2();
        cpu_pm_enter();
 
-       if (cpu == 0) {
+       if (dev->cpu == 0) {
                if (last_cpu)
                        entered_lp2 = tegra30_cpu_cluster_power_down(dev, drv,
                                                                     index);
@@ -134,7 +133,7 @@ static int tegra30_idle_lp2(struct cpuidle_device *dev,
        }
 
        cpu_pm_exit();
-       tegra_clear_cpu_in_lp2(cpu);
+       tegra_clear_cpu_in_lp2();
 
        local_fiq_enable();
 
@@ -146,8 +145,5 @@ static int tegra30_idle_lp2(struct cpuidle_device *dev,
 
 int __init tegra30_cpuidle_init(void)
 {
-#ifdef CONFIG_PM_SLEEP
-       tegra_tear_down_cpu = tegra30_tear_down_cpu;
-#endif
        return cpuidle_register(&tegra_idle_driver, NULL);
 }
index 4b744c4661e20d2cb4f809235e7e629143c7901a..e85973cef037e02509cb1a774df7285682795806 100644 (file)
 #include "fuse.h"
 #include "cpuidle.h"
 
-static int __init tegra_cpuidle_init(void)
+void __init tegra_cpuidle_init(void)
 {
-       int ret;
-
        switch (tegra_chip_id) {
        case TEGRA20:
-               ret = tegra20_cpuidle_init();
+               if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC))
+                       tegra20_cpuidle_init();
                break;
        case TEGRA30:
-               ret = tegra30_cpuidle_init();
+               if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC))
+                       tegra30_cpuidle_init();
                break;
        case TEGRA114:
-               ret = tegra114_cpuidle_init();
-               break;
-       default:
-               ret = -ENODEV;
+               if (IS_ENABLED(CONFIG_ARCH_TEGRA_114_SOC))
+                       tegra114_cpuidle_init();
                break;
        }
-
-       return ret;
 }
-device_initcall(tegra_cpuidle_init);
index d733f75d02082e83950911765489fa6909103c56..9ec2c1ab0fa4c76a390bfc9673ba9436e18983af 100644 (file)
 #ifndef __MACH_TEGRA_CPUIDLE_H
 #define __MACH_TEGRA_CPUIDLE_H
 
-#ifdef CONFIG_ARCH_TEGRA_2x_SOC
+#ifdef CONFIG_CPU_IDLE
 int tegra20_cpuidle_init(void);
-#else
-static inline int tegra20_cpuidle_init(void) { return -ENODEV; }
-#endif
-
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
 int tegra30_cpuidle_init(void);
-#else
-static inline int tegra30_cpuidle_init(void) { return -ENODEV; }
-#endif
-
-#ifdef CONFIG_ARCH_TEGRA_114_SOC
 int tegra114_cpuidle_init(void);
+void tegra_cpuidle_init(void);
 #else
-static inline int tegra114_cpuidle_init(void) { return -ENODEV; }
+static inline void tegra_cpuidle_init(void) {}
 #endif
 
 #endif
index 67eab56699bd49f66925b66ed4c5b8d5922de037..7a29bae799a7fc4cc674e5703ead29cfb94182ac 100644 (file)
@@ -25,6 +25,7 @@
 #define FLOW_CTRL_WAITEVENT            (2 << 29)
 #define FLOW_CTRL_WAIT_FOR_INTERRUPT   (4 << 29)
 #define FLOW_CTRL_JTAG_RESUME          (1 << 28)
+#define FLOW_CTRL_SCLK_RESUME          (1 << 27)
 #define FLOW_CTRL_HALT_CPU_IRQ         (1 << 10)
 #define        FLOW_CTRL_HALT_CPU_FIQ          (1 << 8)
 #define FLOW_CTRL_CPU0_CSR             0x8
index aacc00d059801bbfef78faa9251c276f9e4bf8da..def79683bef62d2af19d6b17d8b93063c8b2d508 100644 (file)
 #ifndef __MACH_TEGRA_FUSE_H
 #define __MACH_TEGRA_FUSE_H
 
-enum tegra_revision {
-       TEGRA_REVISION_UNKNOWN = 0,
-       TEGRA_REVISION_A01,
-       TEGRA_REVISION_A02,
-       TEGRA_REVISION_A03,
-       TEGRA_REVISION_A03p,
-       TEGRA_REVISION_A04,
-       TEGRA_REVISION_MAX,
-};
-
 #define SKU_ID_T20     8
 #define SKU_ID_T25SE   20
 #define SKU_ID_AP25    23
@@ -40,6 +30,17 @@ enum tegra_revision {
 #define TEGRA30                0x30
 #define TEGRA114       0x35
 
+#ifndef __ASSEMBLY__
+enum tegra_revision {
+       TEGRA_REVISION_UNKNOWN = 0,
+       TEGRA_REVISION_A01,
+       TEGRA_REVISION_A02,
+       TEGRA_REVISION_A03,
+       TEGRA_REVISION_A03p,
+       TEGRA_REVISION_A04,
+       TEGRA_REVISION_MAX,
+};
+
 extern int tegra_sku_id;
 extern int tegra_cpu_process_id;
 extern int tegra_core_process_id;
@@ -72,5 +73,6 @@ void tegra114_init_speedo_data(void);
 #else
 static inline void tegra114_init_speedo_data(void) {}
 #endif
+#endif /* __ASSEMBLY__ */
 
 #endif
index 184914a68d7319bc2a54292849e637c1e15310d1..a52c10e0a85752cc0a47f9919d73eb46233c36aa 100644 (file)
@@ -46,6 +46,17 @@ void __ref tegra_cpu_die(unsigned int cpu)
        BUG();
 }
 
+int tegra_cpu_disable(unsigned int cpu)
+{
+       switch (tegra_chip_id) {
+       case TEGRA20:
+       case TEGRA30:
+               return cpu == 0 ? -EPERM : 0;
+       default:
+               return 0;
+       }
+}
+
 void __init tegra_hotplug_init(void)
 {
        if (!IS_ENABLED(CONFIG_HOTPLUG_CPU))
@@ -55,4 +66,6 @@ void __init tegra_hotplug_init(void)
                tegra_hotplug_shutdown = tegra20_hotplug_shutdown;
        if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC) && tegra_chip_id == TEGRA30)
                tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_114_SOC) && tegra_chip_id == TEGRA114)
+               tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
 }
index fad4226ef710da28f19c3ada496495e563c89f49..24db4ac428ae9641e503a1cc1c3638ebf05c9142 100644 (file)
@@ -140,8 +140,31 @@ remove_clamps:
 
 static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
+       int ret = 0;
+
        cpu = cpu_logical_map(cpu);
-       return tegra_pmc_cpu_power_on(cpu);
+
+       if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) {
+               /*
+                * Warm boot flow
+                * The flow controller in charge of the power state and
+                * control for each CPU.
+                */
+               /* set SCLK as event trigger for flow controller */
+               flowctrl_write_cpu_csr(cpu, 1);
+               flowctrl_write_cpu_halt(cpu,
+                               FLOW_CTRL_WAITEVENT | FLOW_CTRL_SCLK_RESUME);
+       } else {
+               /*
+                * Cold boot flow
+                * The CPU is powered up by toggling PMC directly. It will
+                * also initial power state in flow controller. After that,
+                * the CPU's power state is maintained by flow controller.
+                */
+               ret = tegra_pmc_cpu_power_on(cpu);
+       }
+
+       return ret;
 }
 
 static int __cpuinit tegra_boot_secondary(unsigned int cpu,
@@ -173,5 +196,6 @@ struct smp_operations tegra_smp_ops __initdata = {
 #ifdef CONFIG_HOTPLUG_CPU
        .cpu_kill               = tegra_cpu_kill,
        .cpu_die                = tegra_cpu_die,
+       .cpu_disable            = tegra_cpu_disable,
 #endif
 };
index 45cf52c7e528684f2400416298f161f9ffea4d34..94e69bee3da50b12933ae419d4affac950150ca0 100644 (file)
 static DEFINE_SPINLOCK(tegra_lp2_lock);
 void (*tegra_tear_down_cpu)(void);
 
+static void tegra_tear_down_cpu_init(void)
+{
+       switch (tegra_chip_id) {
+       case TEGRA20:
+               if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC))
+                       tegra_tear_down_cpu = tegra20_tear_down_cpu;
+               break;
+       case TEGRA30:
+               if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC))
+                       tegra_tear_down_cpu = tegra30_tear_down_cpu;
+               break;
+       }
+}
+
 /*
  * restore_cpu_complex
  *
@@ -91,8 +105,9 @@ static void suspend_cpu_complex(void)
        flowctrl_cpu_suspend_enter(cpu);
 }
 
-void tegra_clear_cpu_in_lp2(int phy_cpu_id)
+void tegra_clear_cpu_in_lp2(void)
 {
+       int phy_cpu_id = cpu_logical_map(smp_processor_id());
        u32 *cpu_in_lp2 = tegra_cpu_lp2_mask;
 
        spin_lock(&tegra_lp2_lock);
@@ -103,8 +118,9 @@ void tegra_clear_cpu_in_lp2(int phy_cpu_id)
        spin_unlock(&tegra_lp2_lock);
 }
 
-bool tegra_set_cpu_in_lp2(int phy_cpu_id)
+bool tegra_set_cpu_in_lp2(void)
 {
+       int phy_cpu_id = cpu_logical_map(smp_processor_id());
        bool last_cpu = false;
        cpumask_t *cpu_lp2_mask = tegra_cpu_lp2_mask;
        u32 *cpu_in_lp2 = tegra_cpu_lp2_mask;
@@ -192,7 +208,7 @@ static int __cpuinit tegra_suspend_enter(suspend_state_t state)
        suspend_cpu_complex();
        switch (mode) {
        case TEGRA_SUSPEND_LP2:
-               tegra_set_cpu_in_lp2(0);
+               tegra_set_cpu_in_lp2();
                break;
        default:
                break;
@@ -202,7 +218,7 @@ static int __cpuinit tegra_suspend_enter(suspend_state_t state)
 
        switch (mode) {
        case TEGRA_SUSPEND_LP2:
-               tegra_clear_cpu_in_lp2(0);
+               tegra_clear_cpu_in_lp2();
                break;
        default:
                break;
@@ -224,6 +240,7 @@ void __init tegra_init_suspend(void)
        if (tegra_pmc_get_suspend_mode() == TEGRA_SUSPEND_NONE)
                return;
 
+       tegra_tear_down_cpu_init();
        tegra_pmc_suspend_init();
 
        suspend_set_ops(&tegra_suspend_ops);
index 778a4aa7c3fa4c0b8dab0811da25057b5c43fdee..94c4b9d9077cf56fc2365ccdcf5eb8dfc3c88fc6 100644 (file)
@@ -28,8 +28,8 @@ extern unsigned long l2x0_saved_regs_addr;
 void save_cpu_arch_register(void);
 void restore_cpu_arch_register(void);
 
-void tegra_clear_cpu_in_lp2(int phy_cpu_id);
-bool tegra_set_cpu_in_lp2(int phy_cpu_id);
+void tegra_clear_cpu_in_lp2(void);
+bool tegra_set_cpu_in_lp2(void);
 
 void tegra_idle_lp2_last(void);
 extern void (*tegra_tear_down_cpu)(void);
index e6de88a2ea06c022604f3909ea1400c658445380..39dc9e7834f38b161d2cc7ac3e53d140c97383d7 100644 (file)
 #include <asm/hardware/cache-l2x0.h>
 
 #include "flowctrl.h"
+#include "fuse.h"
 #include "iomap.h"
 #include "reset.h"
 #include "sleep.h"
 
-#define APB_MISC_GP_HIDREV     0x804
 #define PMC_SCRATCH41  0x140
 
 #define RESET_DATA(x)  ((TEGRA_RESET_##x)*4)
  *       CPU boot vector when restarting the a CPU following
  *       an LP2 transition. Also branched to by LP0 and LP1 resume after
  *       re-enabling sdram.
+ *
+ *     r6: SoC ID
  */
 ENTRY(tegra_resume)
        bl      v7_invalidate_l1
 
        cpu_id  r0
+       tegra_get_soc_id TEGRA_APB_MISC_BASE, r6
+       cmp     r6, #TEGRA114
+       beq     no_cpu0_chk
+
        cmp     r0, #0                          @ CPU0?
  THUMB(        it      ne )
        bne     cpu_resume                      @ no
+no_cpu0_chk:
 
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
        /* Are we on Tegra20? */
-       mov32   r6, TEGRA_APB_MISC_BASE
-       ldr     r0, [r6, #APB_MISC_GP_HIDREV]
-       and     r0, r0, #0xff00
-       cmp     r0, #(0x20 << 8)
+       cmp     r6, #TEGRA20
        beq     1f                              @ Yes
        /* Clear the flow controller flags for this CPU. */
-       mov32   r2, TEGRA_FLOW_CTRL_BASE + FLOW_CTRL_CPU0_CSR   @ CPU0 CSR
-       ldr     r1, [r2]
+       cpu_to_csr_reg r1, r0
+       mov32   r2, TEGRA_FLOW_CTRL_BASE
+       ldr     r1, [r2, r1]
        /* Clear event & intr flag */
        orr     r1, r1, \
                #FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG
-       movw    r0, #0x0FFD     @ enable, cluster_switch, immed, & bitmaps
+       movw    r0, #0x3FFD     @ enable, cluster_switch, immed, bitmaps
+                               @ & ext flags for CPU power mgnt
        bic     r1, r1, r0
        str     r1, [r2]
 1:
-#endif
 
+       check_cpu_part_num 0xc09, r8, r9
+       bne     not_ca9
 #ifdef CONFIG_HAVE_ARM_SCU
        /* enable SCU */
        mov32   r0, TEGRA_ARM_PERIF_BASE
@@ -76,6 +82,7 @@ ENTRY(tegra_resume)
 
        /* L2 cache resume & re-enable */
        l2_cache_resume r0, r1, r2, l2x0_saved_regs_addr
+not_ca9:
 
        b       cpu_resume
 ENDPROC(tegra_resume)
@@ -98,7 +105,7 @@ ENTRY(__tegra_cpu_reset_handler_start)
  * Register usage within the reset handler:
  *
  *      Others: scratch
- *      R6  = SoC ID << 8
+ *      R6  = SoC ID
  *      R7  = CPU present (to the OS) mask
  *      R8  = CPU in LP1 state mask
  *      R9  = CPU in LP2 state mask
@@ -115,12 +122,10 @@ ENTRY(__tegra_cpu_reset_handler)
 
        cpsid   aif, 0x13                       @ SVC mode, interrupts disabled
 
-       mov32   r6, TEGRA_APB_MISC_BASE
-       ldr     r6, [r6, #APB_MISC_GP_HIDREV]
-       and     r6, r6, #0xff00
+       tegra_get_soc_id TEGRA_APB_MISC_BASE, r6
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
 t20_check:
-       cmp     r6, #(0x20 << 8)
+       cmp     r6, #TEGRA20
        bne     after_t20_check
 t20_errata:
        # Tegra20 is a Cortex-A9 r1p1
@@ -136,7 +141,7 @@ after_t20_check:
 #endif
 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
 t30_check:
-       cmp     r6, #(0x30 << 8)
+       cmp     r6, #TEGRA30
        bne     after_t30_check
 t30_errata:
        # Tegra30 is a Cortex-A9 r2p9
@@ -163,7 +168,7 @@ after_errata:
 
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
        /* Are we on Tegra20? */
-       cmp     r6, #(0x20 << 8)
+       cmp     r6, #TEGRA20
        bne     1f
        /* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */
        mov32   r5, TEGRA_PMC_BASE
@@ -186,11 +191,14 @@ __is_not_lp2:
 
 #ifdef CONFIG_SMP
        /*
-        * Can only be secondary boot (initial or hotplug) but CPU 0
-        * cannot be here.
+        * Can only be secondary boot (initial or hotplug)
+        * CPU0 can't be here for Tegra20/30
         */
+       cmp     r6, #TEGRA114
+       beq     __no_cpu0_chk
        cmp     r10, #0
        bleq    __die                           @ CPU0 cannot be here
+__no_cpu0_chk:
        ldr     lr, [r12, #RESET_DATA(STARTUP_SECONDARY)]
        cmp     lr, #0
        bleq    __die                           @ no secondary startup handler
@@ -210,10 +218,7 @@ __die:
        mov32   r7, TEGRA_CLK_RESET_BASE
 
        /* Are we on Tegra20? */
-       mov32   r6, TEGRA_APB_MISC_BASE
-       ldr     r0, [r6, #APB_MISC_GP_HIDREV]
-       and     r0, r0, #0xff00
-       cmp     r0, #(0x20 << 8)
+       cmp     r6, #TEGRA20
        bne     1f
 
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
index d29dfcce948d247c8abaadad0a9cf3f9d667cc7f..ada8821b48be932a2cf1c81dbb7b388f98da8498 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/assembler.h>
 #include <asm/asm-offsets.h>
 
+#include "fuse.h"
 #include "sleep.h"
 #include "flowctrl.h"
 
@@ -43,14 +44,19 @@ ENDPROC(tegra30_hotplug_shutdown)
  *
  * Puts the current CPU in wait-for-event mode on the flow controller
  * and powergates it -- flags (in R0) indicate the request type.
- * Must never be called for CPU 0.
  *
- * corrupts r0-r4, r12
+ * r10 = SoC ID
+ * corrupts r0-r4, r10-r12
  */
 ENTRY(tegra30_cpu_shutdown)
        cpu_id  r3
+       tegra_get_soc_id TEGRA_APB_MISC_VIRT, r10
+       cmp     r10, #TEGRA30
+       bne     _no_cpu0_chk    @ It's not Tegra30
+
        cmp     r3, #0
        moveq   pc, lr          @ Must never be called for CPU 0
+_no_cpu0_chk:
 
        ldr     r12, =TEGRA_FLOW_CTRL_VIRT
        cpu_to_csr_reg r1, r3
@@ -65,7 +71,9 @@ ENTRY(tegra30_cpu_shutdown)
        movw    r12, \
                FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG | \
                FLOW_CTRL_CSR_ENABLE
-       mov     r4, #(1 << 4)
+       cmp     r10, #TEGRA30
+       moveq   r4, #(1 << 4)                   @ wfe bitmap
+       movne   r4, #(1 << 8)                   @ wfi bitmap
  ARM(  orr     r12, r12, r4, lsl r3    )
  THUMB(        lsl     r4, r4, r3              )
  THUMB(        orr     r12, r12, r4            )
@@ -79,9 +87,20 @@ delay_1:
        cpsid   a                               @ disable imprecise aborts.
        ldr     r3, [r1]                        @ read CSR
        str     r3, [r1]                        @ clear CSR
+
        tst     r0, #TEGRA30_POWER_HOTPLUG_SHUTDOWN
+       beq     flow_ctrl_setting_for_lp2
+
+       /* flow controller set up for hotplug */
+       mov     r3, #FLOW_CTRL_WAITEVENT                @ For hotplug
+       b       flow_ctrl_done
+flow_ctrl_setting_for_lp2:
+       /* flow controller set up for LP2 */
+       cmp     r10, #TEGRA30
        moveq   r3, #FLOW_CTRL_WAIT_FOR_INTERRUPT       @ For LP2
-       movne   r3, #FLOW_CTRL_WAITEVENT                @ For hotplug
+       movne   r3, #FLOW_CTRL_WAITEVENT
+flow_ctrl_done:
+       cmp     r10, #TEGRA30
        str     r3, [r2]
        ldr     r0, [r2]
        b       wfe_war
@@ -89,7 +108,8 @@ delay_1:
 __cpu_reset_again:
        dsb
        .align 5
-       wfe                                     @ CPU should be power gated here
+       wfeeq                                   @ CPU should be power gated here
+       wfine
 wfe_war:
        b       __cpu_reset_again
 
index 364d84523fbac99e0516af8f5b91f7e398c340a7..9daaef26b0f68e353048a2df80e204cfd57f54f6 100644 (file)
@@ -106,9 +106,11 @@ ENTRY(tegra_shut_off_mmu)
        isb
 #ifdef CONFIG_CACHE_L2X0
        /* Disable L2 cache */
-       mov32   r4, TEGRA_ARM_PERIF_BASE + 0x3000
-       mov     r5, #0
-       str     r5, [r4, #L2X0_CTRL]
+       check_cpu_part_num 0xc09, r9, r10
+       movweq  r4, #:lower16:(TEGRA_ARM_PERIF_BASE + 0x3000)
+       movteq  r4, #:upper16:(TEGRA_ARM_PERIF_BASE + 0x3000)
+       moveq   r5, #0
+       streq   r5, [r4, #L2X0_CTRL]
 #endif
        mov     pc, r0
 ENDPROC(tegra_shut_off_mmu)
index 2080fb12ce269132d50c7ae2566fd29004df25fc..98b7da698f2b1626d891d9db4a5305c13ae695d4 100644 (file)
@@ -25,6 +25,8 @@
                                        + IO_PPSB_VIRT)
 #define TEGRA_CLK_RESET_VIRT (TEGRA_CLK_RESET_BASE - IO_PPSB_PHYS \
                                        + IO_PPSB_VIRT)
+#define TEGRA_APB_MISC_VIRT (TEGRA_APB_MISC_BASE - IO_APB_PHYS \
+                                       + IO_APB_VIRT)
 #define TEGRA_PMC_VIRT (TEGRA_PMC_BASE - IO_APB_PHYS + IO_APB_VIRT)
 
 /* PMC_SCRATCH37-39 and 41 are used for tegra_pen_lock and idle */
        movt    \reg, #:upper16:\val
 .endm
 
+/* Marco to check CPU part num */
+.macro check_cpu_part_num part_num, tmp1, tmp2
+       mrc     p15, 0, \tmp1, c0, c0, 0
+       ubfx    \tmp1, \tmp1, #4, #12
+       mov32   \tmp2, \part_num
+       cmp     \tmp1, \tmp2
+.endm
+
 /* Macro to exit SMP coherency. */
 .macro exit_smp, tmp1, tmp2
        mrc     p15, 0, \tmp1, c1, c0, 1        @ ACTLR
        bic     \tmp1, \tmp1, #(1<<6) | (1<<0)  @ clear ACTLR.SMP | ACTLR.FW
        mcr     p15, 0, \tmp1, c1, c0, 1        @ ACTLR
        isb
-       cpu_id  \tmp1
-       mov     \tmp1, \tmp1, lsl #2
-       mov     \tmp2, #0xf
-       mov     \tmp2, \tmp2, lsl \tmp1
-       mov32   \tmp1, TEGRA_ARM_PERIF_VIRT + 0xC
-       str     \tmp2, [\tmp1]                  @ invalidate SCU tags for CPU
+#ifdef CONFIG_HAVE_ARM_SCU
+       check_cpu_part_num 0xc09, \tmp1, \tmp2
+       mrceq   p15, 0, \tmp1, c0, c0, 5
+       andeq   \tmp1, \tmp1, #0xF
+       moveq   \tmp1, \tmp1, lsl #2
+       moveq   \tmp2, #0xf
+       moveq   \tmp2, \tmp2, lsl \tmp1
+       ldreq   \tmp1, =(TEGRA_ARM_PERIF_VIRT + 0xC)
+       streq   \tmp2, [\tmp1]                  @ invalidate SCU tags for CPU
        dsb
+#endif
+.endm
+
+/* Macro to check Tegra revision */
+#define APB_MISC_GP_HIDREV     0x804
+.macro tegra_get_soc_id base, tmp1
+       mov32   \tmp1, \base
+       ldr     \tmp1, [\tmp1, #APB_MISC_GP_HIDREV]
+       and     \tmp1, \tmp1, #0xff00
+       mov     \tmp1, \tmp1, lsr #8
 .endm
 
 /* Macro to resume & re-enable L2 cache */
index 31e69a019bdd999bd53338d669a090697122922b..3ae4a7f1a2fb4568625c8b430d2bbaa05c984333 100644 (file)
@@ -183,7 +183,7 @@ static struct device_node *tegra_emc_ramcode_devnode(struct device_node *np)
        u32 reg;
 
        for_each_child_of_node(np, iter) {
-               if (of_property_read_u32(np, "nvidia,ram-code", &reg))
+               if (of_property_read_u32(iter, "nvidia,ram-code", &reg))
                        continue;
                if (reg == tegra_bct_strapping)
                        return of_node_get(iter);
index 1f597647d431be82d88bb62f79d6b938ec8b18c1..a85adcd00882e4ad193cd3b177179a5ad8162e6a 100644 (file)
@@ -1,24 +1,46 @@
-if ARCH_U300
-
 menu "ST-Ericsson AB U300/U335 Platform"
 
 comment "ST-Ericsson Mobile Platform Products"
 
-config MACH_U300
-       bool "U300"
+config ARCH_U300
+       bool "ST-Ericsson U300 Series" if ARCH_MULTI_V5
+       depends on MMU
+       select ARCH_REQUIRE_GPIOLIB
+       select ARM_AMBA
+       select ARM_PATCH_PHYS_VIRT
+       select ARM_VIC
+       select CLKDEV_LOOKUP
+       select CLKSRC_MMIO
+       select CLKSRC_OF
+       select COMMON_CLK
+       select CPU_ARM926T
+       select GENERIC_CLOCKEVENTS
+       select HAVE_TCM
        select PINCTRL
        select PINCTRL_COH901
        select PINCTRL_U300
+       select SPARSE_IRQ
+       select MFD_SYSCON
+       select USE_OF
+       help
+         Support for ST-Ericsson U300 series mobile platforms.
 
 comment "ST-Ericsson U300/U335 Feature Selections"
 
+config MACH_U300
+       depends on ARCH_U300
+       bool "U300"
+       default y
+
 config U300_DEBUG
+       depends on ARCH_U300
        bool "Debug support for U300"
        depends on PM
        help
                Debug support for U300 in sysfs, procfs etc.
 
 config MACH_U300_SPIDUMMY
+       depends on ARCH_U300
        bool "SSP/SPI dummy chip"
        select SPI
        select SPI_MASTER
@@ -31,5 +53,3 @@ config MACH_U300_SPIDUMMY
                SPI framework and ARM PL022 support.
 
 endmenu
-
-endif
index 5a86c58da396b98bbbc312f732d1d64e3efee752..0f362b64fb878c02a03d4647ba7076353631b926 100644 (file)
@@ -7,7 +7,5 @@ obj-m           :=
 obj-n          :=
 obj-           :=
 
-obj-$(CONFIG_SPI_PL022)           += spi.o
 obj-$(CONFIG_MACH_U300_SPIDUMMY)  += dummyspichip.o
-obj-$(CONFIG_I2C_STU300)          += i2c.o
 obj-$(CONFIG_REGULATOR_AB3100)    += regulator.o
index a683d17b2ce43ad5380186eaaa214f862f6748b7..4f7ac2a114520f5fcb28a9e3a35a3f44a213b0a4 100644 (file)
  * Author: Linus Walleij <linus.walleij@stericsson.com>
  */
 #include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/spinlock.h>
-#include <linux/interrupt.h>
-#include <linux/bitops.h>
-#include <linux/device.h>
-#include <linux/mm.h>
-#include <linux/termios.h>
-#include <linux/dmaengine.h>
-#include <linux/amba/bus.h>
-#include <linux/amba/mmci.h>
-#include <linux/amba/serial.h>
-#include <linux/platform_device.h>
-#include <linux/gpio.h>
-#include <linux/clk.h>
-#include <linux/err.h>
-#include <linux/mtd/nand.h>
-#include <linux/mtd/fsmc.h>
 #include <linux/pinctrl/machine.h>
 #include <linux/pinctrl/pinconf-generic.h>
-#include <linux/dma-mapping.h>
 #include <linux/platform_data/clk-u300.h>
-#include <linux/platform_data/pinctrl-coh901.h>
-#include <linux/platform_data/dma-coh901318.h>
-#include <linux/irqchip/arm-vic.h>
+#include <linux/irqchip.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/clocksource.h>
+#include <linux/clk.h>
 
-#include <asm/types.h>
-#include <asm/setup.h>
-#include <asm/memory.h>
 #include <asm/mach/map.h>
-#include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 
-#include <mach/hardware.h>
-#include <mach/syscon.h>
-#include <mach/irqs.h>
+/*
+ * These are the large blocks of memory allocated for I/O.
+ * the defines are used for setting up the I/O memory mapping.
+ */
+
+/* NAND Flash CS0 */
+#define U300_NAND_CS0_PHYS_BASE                0x80000000
+/* NFIF */
+#define U300_NAND_IF_PHYS_BASE         0x9f800000
+/* ALE, CLE offset for FSMC NAND */
+#define PLAT_NAND_CLE                  (1 << 16)
+#define PLAT_NAND_ALE                  (1 << 17)
+/* AHB Peripherals */
+#define U300_AHB_PER_PHYS_BASE         0xa0000000
+#define U300_AHB_PER_VIRT_BASE         0xff010000
+/* FAST Peripherals */
+#define U300_FAST_PER_PHYS_BASE                0xc0000000
+#define U300_FAST_PER_VIRT_BASE                0xff020000
+/* SLOW Peripherals */
+#define U300_SLOW_PER_PHYS_BASE                0xc0010000
+#define U300_SLOW_PER_VIRT_BASE                0xff000000
+/* Boot ROM */
+#define U300_BOOTROM_PHYS_BASE         0xffff0000
+#define U300_BOOTROM_VIRT_BASE         0xffff0000
+/* SEMI config base */
+#define U300_SEMI_CONFIG_BASE          0x2FFE0000
+
+/*
+ * AHB peripherals
+ */
+
+/* AHB Peripherals Bridge Controller */
+#define U300_AHB_BRIDGE_BASE           (U300_AHB_PER_PHYS_BASE+0x0000)
+/* Vectored Interrupt Controller 0, servicing 32 interrupts */
+#define U300_INTCON0_BASE              (U300_AHB_PER_PHYS_BASE+0x1000)
+#define U300_INTCON0_VBASE             IOMEM(U300_AHB_PER_VIRT_BASE+0x1000)
+/* Vectored Interrupt Controller 1, servicing 32 interrupts */
+#define U300_INTCON1_BASE              (U300_AHB_PER_PHYS_BASE+0x2000)
+#define U300_INTCON1_VBASE             IOMEM(U300_AHB_PER_VIRT_BASE+0x2000)
+/* Memory Stick Pro (MSPRO) controller */
+#define U300_MSPRO_BASE                        (U300_AHB_PER_PHYS_BASE+0x3000)
+/* EMIF Configuration Area */
+#define U300_EMIF_CFG_BASE             (U300_AHB_PER_PHYS_BASE+0x4000)
+
+/*
+ * FAST peripherals
+ */
+
+/* FAST bridge control */
+#define U300_FAST_BRIDGE_BASE          (U300_FAST_PER_PHYS_BASE+0x0000)
+/* MMC/SD controller */
+#define U300_MMCSD_BASE                        (U300_FAST_PER_PHYS_BASE+0x1000)
+/* PCM I2S0 controller */
+#define U300_PCM_I2S0_BASE             (U300_FAST_PER_PHYS_BASE+0x2000)
+/* PCM I2S1 controller */
+#define U300_PCM_I2S1_BASE             (U300_FAST_PER_PHYS_BASE+0x3000)
+/* I2C0 controller */
+#define U300_I2C0_BASE                 (U300_FAST_PER_PHYS_BASE+0x4000)
+/* I2C1 controller */
+#define U300_I2C1_BASE                 (U300_FAST_PER_PHYS_BASE+0x5000)
+/* SPI controller */
+#define U300_SPI_BASE                  (U300_FAST_PER_PHYS_BASE+0x6000)
+/* Fast UART1 on U335 only */
+#define U300_UART1_BASE                        (U300_FAST_PER_PHYS_BASE+0x7000)
+
+/*
+ * SLOW peripherals
+ */
+
+/* SLOW bridge control */
+#define U300_SLOW_BRIDGE_BASE          (U300_SLOW_PER_PHYS_BASE)
+/* SYSCON */
+#define U300_SYSCON_BASE               (U300_SLOW_PER_PHYS_BASE+0x1000)
+#define U300_SYSCON_VBASE              IOMEM(U300_SLOW_PER_VIRT_BASE+0x1000)
+/* Watchdog */
+#define U300_WDOG_BASE                 (U300_SLOW_PER_PHYS_BASE+0x2000)
+/* UART0 */
+#define U300_UART0_BASE                        (U300_SLOW_PER_PHYS_BASE+0x3000)
+/* APP side special timer */
+#define U300_TIMER_APP_BASE            (U300_SLOW_PER_PHYS_BASE+0x4000)
+#define U300_TIMER_APP_VBASE           IOMEM(U300_SLOW_PER_VIRT_BASE+0x4000)
+/* Keypad */
+#define U300_KEYPAD_BASE               (U300_SLOW_PER_PHYS_BASE+0x5000)
+/* GPIO */
+#define U300_GPIO_BASE                 (U300_SLOW_PER_PHYS_BASE+0x6000)
+/* RTC */
+#define U300_RTC_BASE                  (U300_SLOW_PER_PHYS_BASE+0x7000)
+/* Bus tracer */
+#define U300_BUSTR_BASE                        (U300_SLOW_PER_PHYS_BASE+0x8000)
+/* Event handler (hardware queue) */
+#define U300_EVHIST_BASE               (U300_SLOW_PER_PHYS_BASE+0x9000)
+/* Genric Timer */
+#define U300_TIMER_BASE                        (U300_SLOW_PER_PHYS_BASE+0xa000)
+/* PPM */
+#define U300_PPM_BASE                  (U300_SLOW_PER_PHYS_BASE+0xb000)
+
+/*
+ * REST peripherals
+ */
+
+/* ISP (image signal processor) */
+#define U300_ISP_BASE                  (0xA0008000)
+/* DMA Controller base */
+#define U300_DMAC_BASE                 (0xC0020000)
+/* MSL Base */
+#define U300_MSL_BASE                  (0xc0022000)
+/* APEX Base */
+#define U300_APEX_BASE                 (0xc0030000)
+/* Video Encoder Base */
+#define U300_VIDEOENC_BASE             (0xc0080000)
+/* XGAM Base */
+#define U300_XGAM_BASE                 (0xd0000000)
+
+/*
+ * SYSCON addresses applicable to the core machine.
+ */
 
-#include "timer.h"
-#include "spi.h"
-#include "i2c.h"
-#include "u300-gpio.h"
+/* Chip ID register 16bit (R/-) */
+#define U300_SYSCON_CIDR                                       (0x400)
+/* SMCR */
+#define U300_SYSCON_SMCR                                       (0x4d0)
+#define U300_SYSCON_SMCR_FIELD_MASK                            (0x000e)
+#define U300_SYSCON_SMCR_SEMI_SREFACK_IND                      (0x0008)
+#define U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE                   (0x0004)
+#define U300_SYSCON_SMCR_SEMI_EXT_BOOT_MODE_ENABLE             (0x0002)
+/* CPU_SW_DBGEN Software Debug Enable 16bit (R/W) */
+#define U300_SYSCON_CSDR                                       (0x4f0)
+#define U300_SYSCON_CSDR_SW_DEBUG_ENABLE                       (0x0001)
+/* PRINT_CONTROL Print Control 16bit (R/-) */
+#define U300_SYSCON_PCR                                                (0x4f8)
+#define U300_SYSCON_PCR_SERV_IND                               (0x0001)
+/* BOOT_CONTROL 16bit (R/-) */
+#define U300_SYSCON_BCR                                                (0x4fc)
+#define U300_SYSCON_BCR_ACC_CPU_SUBSYS_VINITHI_IND             (0x0400)
+#define U300_SYSCON_BCR_APP_CPU_SUBSYS_VINITHI_IND             (0x0200)
+#define U300_SYSCON_BCR_EXTRA_BOOT_OPTION_MASK                 (0x01FC)
+#define U300_SYSCON_BCR_APP_BOOT_SERV_MASK                     (0x0003)
+
+static void __iomem *syscon_base;
 
 /*
  * Static I/O mappings that are needed for booting the U300 platforms. The
@@ -82,365 +193,6 @@ static void __init u300_map_io(void)
        iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc));
 }
 
-/*
- * Declaration of devices found on the U300 board and
- * their respective memory locations.
- */
-
-static struct amba_pl011_data uart0_plat_data = {
-#ifdef CONFIG_COH901318
-       .dma_filter = coh901318_filter_id,
-       .dma_rx_param = (void *) U300_DMA_UART0_RX,
-       .dma_tx_param = (void *) U300_DMA_UART0_TX,
-#endif
-};
-
-/* Slow device at 0x3000 offset */
-static AMBA_APB_DEVICE(uart0, "uart0", 0, U300_UART0_BASE,
-       { IRQ_U300_UART0 }, &uart0_plat_data);
-
-/* The U335 have an additional UART1 on the APP CPU */
-static struct amba_pl011_data uart1_plat_data = {
-#ifdef CONFIG_COH901318
-       .dma_filter = coh901318_filter_id,
-       .dma_rx_param = (void *) U300_DMA_UART1_RX,
-       .dma_tx_param = (void *) U300_DMA_UART1_TX,
-#endif
-};
-
-/* Fast device at 0x7000 offset */
-static AMBA_APB_DEVICE(uart1, "uart1", 0, U300_UART1_BASE,
-       { IRQ_U300_UART1 }, &uart1_plat_data);
-
-/* AHB device at 0x4000 offset */
-static AMBA_APB_DEVICE(pl172, "pl172", 0, U300_EMIF_CFG_BASE, { }, NULL);
-
-/* Fast device at 0x6000 offset */
-static AMBA_APB_DEVICE(pl022, "pl022", 0, U300_SPI_BASE,
-       { IRQ_U300_SPI }, NULL);
-
-/* Fast device at 0x1000 offset */
-#define U300_MMCSD_IRQS        { IRQ_U300_MMCSD_MCIINTR0, IRQ_U300_MMCSD_MCIINTR1 }
-
-static struct mmci_platform_data mmcsd_platform_data = {
-       /*
-        * Do not set ocr_mask or voltage translation function,
-        * we have a regulator we can control instead.
-        */
-       .f_max = 24000000,
-       .gpio_wp = -1,
-       .gpio_cd = U300_GPIO_PIN_MMC_CD,
-       .cd_invert = true,
-       .capabilities = MMC_CAP_MMC_HIGHSPEED |
-       MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
-#ifdef CONFIG_COH901318
-       .dma_filter = coh901318_filter_id,
-       .dma_rx_param = (void *) U300_DMA_MMCSD_RX_TX,
-       /* Don't specify a TX channel, this RX channel is bidirectional */
-#endif
-};
-
-static AMBA_APB_DEVICE(mmcsd, "mmci", 0, U300_MMCSD_BASE,
-       U300_MMCSD_IRQS, &mmcsd_platform_data);
-
-/*
- * The order of device declaration may be important, since some devices
- * have dependencies on other devices being initialized first.
- */
-static struct amba_device *amba_devs[] __initdata = {
-       &uart0_device,
-       &uart1_device,
-       &pl022_device,
-       &pl172_device,
-       &mmcsd_device,
-};
-
-/* Here follows a list of all hw resources that the platform devices
- * allocate. Note, clock dependencies are not included
- */
-
-static struct resource gpio_resources[] = {
-       {
-               .start = U300_GPIO_BASE,
-               .end   = (U300_GPIO_BASE + SZ_4K - 1),
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .name  = "gpio0",
-               .start = IRQ_U300_GPIO_PORT0,
-               .end   = IRQ_U300_GPIO_PORT0,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "gpio1",
-               .start = IRQ_U300_GPIO_PORT1,
-               .end   = IRQ_U300_GPIO_PORT1,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "gpio2",
-               .start = IRQ_U300_GPIO_PORT2,
-               .end   = IRQ_U300_GPIO_PORT2,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "gpio3",
-               .start = IRQ_U300_GPIO_PORT3,
-               .end   = IRQ_U300_GPIO_PORT3,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "gpio4",
-               .start = IRQ_U300_GPIO_PORT4,
-               .end   = IRQ_U300_GPIO_PORT4,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "gpio5",
-               .start = IRQ_U300_GPIO_PORT5,
-               .end   = IRQ_U300_GPIO_PORT5,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "gpio6",
-               .start = IRQ_U300_GPIO_PORT6,
-               .end   = IRQ_U300_GPIO_PORT6,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource keypad_resources[] = {
-       {
-               .start = U300_KEYPAD_BASE,
-               .end   = U300_KEYPAD_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .name  = "coh901461-press",
-               .start = IRQ_U300_KEYPAD_KEYBF,
-               .end   = IRQ_U300_KEYPAD_KEYBF,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name  = "coh901461-release",
-               .start = IRQ_U300_KEYPAD_KEYBR,
-               .end   = IRQ_U300_KEYPAD_KEYBR,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource rtc_resources[] = {
-       {
-               .start = U300_RTC_BASE,
-               .end   = U300_RTC_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .start = IRQ_U300_RTC,
-               .end   = IRQ_U300_RTC,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-/*
- * Fsmc does have IRQs: #43 and #44 (NFIF and NFIF2)
- * but these are not yet used by the driver.
- */
-static struct resource fsmc_resources[] = {
-       {
-               .name  = "nand_addr",
-               .start = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_ALE,
-               .end   = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_ALE + SZ_16K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .name  = "nand_cmd",
-               .start = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_CLE,
-               .end   = U300_NAND_CS0_PHYS_BASE + PLAT_NAND_CLE + SZ_16K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .name  = "nand_data",
-               .start = U300_NAND_CS0_PHYS_BASE,
-               .end   = U300_NAND_CS0_PHYS_BASE + SZ_16K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .name  = "fsmc_regs",
-               .start = U300_NAND_IF_PHYS_BASE,
-               .end   = U300_NAND_IF_PHYS_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-};
-
-static struct resource i2c0_resources[] = {
-       {
-               .start = U300_I2C0_BASE,
-               .end   = U300_I2C0_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .start = IRQ_U300_I2C0,
-               .end   = IRQ_U300_I2C0,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource i2c1_resources[] = {
-       {
-               .start = U300_I2C1_BASE,
-               .end   = U300_I2C1_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .start = IRQ_U300_I2C1,
-               .end   = IRQ_U300_I2C1,
-               .flags = IORESOURCE_IRQ,
-       },
-
-};
-
-static struct resource wdog_resources[] = {
-       {
-               .start = U300_WDOG_BASE,
-               .end   = U300_WDOG_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-       {
-               .start = IRQ_U300_WDOG,
-               .end   = IRQ_U300_WDOG,
-               .flags = IORESOURCE_IRQ,
-       }
-};
-
-static struct resource dma_resource[] = {
-       {
-               .start = U300_DMAC_BASE,
-               .end = U300_DMAC_BASE + PAGE_SIZE - 1,
-               .flags =  IORESOURCE_MEM,
-       },
-       {
-               .start = IRQ_U300_DMA,
-               .end = IRQ_U300_DMA,
-               .flags =  IORESOURCE_IRQ,
-       }
-};
-
-
-static struct resource pinctrl_resources[] = {
-       {
-               .start = U300_SYSCON_BASE,
-               .end   = U300_SYSCON_BASE + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device wdog_device = {
-       .name = "coh901327_wdog",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(wdog_resources),
-       .resource = wdog_resources,
-};
-
-static struct platform_device i2c0_device = {
-       .name = "stu300",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(i2c0_resources),
-       .resource = i2c0_resources,
-};
-
-static struct platform_device i2c1_device = {
-       .name = "stu300",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(i2c1_resources),
-       .resource = i2c1_resources,
-};
-
-static struct platform_device pinctrl_device = {
-       .name = "pinctrl-u300",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(pinctrl_resources),
-       .resource = pinctrl_resources,
-};
-
-/*
- * The different variants have a few different versions of the
- * GPIO block, with different number of ports.
- */
-static struct u300_gpio_platform u300_gpio_plat = {
-       .ports = 7,
-       .gpio_base = 0,
-};
-
-static struct platform_device gpio_device = {
-       .name = "u300-gpio",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(gpio_resources),
-       .resource = gpio_resources,
-       .dev = {
-               .platform_data = &u300_gpio_plat,
-       },
-};
-
-static struct platform_device keypad_device = {
-       .name = "keypad",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(keypad_resources),
-       .resource = keypad_resources,
-};
-
-static struct platform_device rtc_device = {
-       .name = "rtc-coh901331",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(rtc_resources),
-       .resource = rtc_resources,
-};
-
-static struct mtd_partition u300_partitions[] = {
-       {
-               .name = "bootrecords",
-               .offset = 0,
-               .size = SZ_128K,
-       },
-       {
-               .name = "free",
-               .offset = SZ_128K,
-               .size = 8064 * SZ_1K,
-       },
-       {
-               .name = "platform",
-               .offset = 8192 * SZ_1K,
-               .size = 253952 * SZ_1K,
-       },
-};
-
-static struct fsmc_nand_platform_data nand_platform_data = {
-       .partitions = u300_partitions,
-       .nr_partitions = ARRAY_SIZE(u300_partitions),
-       .options = NAND_SKIP_BBTSCAN,
-       .width = FSMC_NAND_BW8,
-};
-
-static struct platform_device nand_device = {
-       .name = "fsmc-nand",
-       .id = -1,
-       .resource = fsmc_resources,
-       .num_resources = ARRAY_SIZE(fsmc_resources),
-       .dev = {
-               .platform_data = &nand_platform_data,
-       },
-};
-
-static struct platform_device dma_device = {
-       .name           = "coh901318",
-       .id             = -1,
-       .resource       = dma_resource,
-       .num_resources  = ARRAY_SIZE(dma_resource),
-       .dev = {
-               .coherent_dma_mask = ~0,
-       },
-};
-
 static unsigned long pin_pullup_conf[] = {
        PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 1),
 };
@@ -467,61 +219,6 @@ static struct pinctrl_map __initdata u300_pinmux_map[] = {
                                    pin_highz_conf),
 };
 
-/*
- * Notice that AMBA devices are initialized before platform devices.
- *
- */
-static struct platform_device *platform_devs[] __initdata = {
-       &dma_device,
-       &i2c0_device,
-       &i2c1_device,
-       &keypad_device,
-       &rtc_device,
-       &pinctrl_device,
-       &gpio_device,
-       &nand_device,
-       &wdog_device,
-};
-
-/*
- * Interrupts: the U300 platforms have two pl190 ARM PrimeCells connected
- * together so some interrupts are connected to the first one and some
- * to the second one.
- */
-static void __init u300_init_irq(void)
-{
-       u32 mask[2] = {0, 0};
-       struct clk *clk;
-       int i;
-
-       /* initialize clocking early, we want to clock the INTCON */
-       u300_clk_init(U300_SYSCON_VBASE);
-
-       /* Bootstrap EMIF and SEMI clocks */
-       clk = clk_get_sys("pl172", NULL);
-       BUG_ON(IS_ERR(clk));
-       clk_prepare_enable(clk);
-       clk = clk_get_sys("semi", NULL);
-       BUG_ON(IS_ERR(clk));
-       clk_prepare_enable(clk);
-
-       /* Clock the interrupt controller */
-       clk = clk_get_sys("intcon", NULL);
-       BUG_ON(IS_ERR(clk));
-       clk_prepare_enable(clk);
-
-       for (i = 0; i < U300_VIC_IRQS_END; i++)
-               set_bit(i, (unsigned long *) &mask[0]);
-       vic_init((void __iomem *) U300_INTCON0_VBASE, IRQ_U300_INTCON0_START,
-                mask[0], mask[0]);
-       vic_init((void __iomem *) U300_INTCON1_VBASE, IRQ_U300_INTCON1_START,
-                mask[1], mask[1]);
-}
-
-
-/*
- * U300 platforms peripheral handling
- */
 struct db_chip {
        u16 chipid;
        const char *name;
@@ -578,7 +275,7 @@ static void __init u300_init_check_chip(void)
        const char unknown[] = "UNKNOWN";
 
        /* Read out and print chip ID */
-       val = readw(U300_SYSCON_VBASE + U300_SYSCON_CIDR);
+       val = readw(syscon_base + U300_SYSCON_CIDR);
        /* This is in funky bigendian order... */
        val = (val & 0xFFU) << 8 | (val >> 8);
        chip = db_chips;
@@ -600,74 +297,6 @@ static void __init u300_init_check_chip(void)
        }
 }
 
-/*
- * Some devices and their resources require reserved physical memory from
- * the end of the available RAM. This function traverses the list of devices
- * and assigns actual addresses to these.
- */
-static void __init u300_assign_physmem(void)
-{
-       unsigned long curr_start = __pa(high_memory);
-       int i, j;
-
-       for (i = 0; i < ARRAY_SIZE(platform_devs); i++) {
-               for (j = 0; j < platform_devs[i]->num_resources; j++) {
-                       struct resource *const res =
-                         &platform_devs[i]->resource[j];
-
-                       if (IORESOURCE_MEM == res->flags &&
-                                    0 == res->start) {
-                               res->start  = curr_start;
-                               res->end   += curr_start;
-                               curr_start += resource_size(res);
-
-                               printk(KERN_INFO "core.c: Mapping RAM " \
-                                      "%#x-%#x to device %s:%s\n",
-                                       res->start, res->end,
-                                      platform_devs[i]->name, res->name);
-                       }
-               }
-       }
-}
-
-static void __init u300_init_machine(void)
-{
-       int i;
-       u16 val;
-
-       /* Check what platform we run and print some status information */
-       u300_init_check_chip();
-
-       /* Initialize SPI device with some board specifics */
-       u300_spi_init(&pl022_device);
-
-       /* Register the AMBA devices in the AMBA bus abstraction layer */
-       for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
-               struct amba_device *d = amba_devs[i];
-               amba_device_register(d, &iomem_resource);
-       }
-
-       u300_assign_physmem();
-
-       /* Initialize pinmuxing */
-       pinctrl_register_mappings(u300_pinmux_map,
-                                 ARRAY_SIZE(u300_pinmux_map));
-
-       /* Register subdevices on the I2C buses */
-       u300_i2c_register_board_devices();
-
-       /* Register the platform devices */
-       platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
-
-       /* Register subdevices on the SPI bus */
-       u300_spi_register_board_devices();
-
-       /* Enable SEMI self refresh */
-       val = readw(U300_SYSCON_VBASE + U300_SYSCON_SMCR) |
-               U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE;
-       writew(val, U300_SYSCON_VBASE + U300_SYSCON_SMCR);
-}
-
 /* Forward declare this function from the watchdog */
 void coh901327_watchdog_reset(void);
 
@@ -688,13 +317,99 @@ static void u300_restart(char mode, const char *cmd)
        while (1);
 }
 
-MACHINE_START(U300, "Ericsson AB U335 S335/B335 Prototype Board")
-       /* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */
-       .atag_offset    = 0x100,
+/* These are mostly to get the right device names for the clock lookups */
+static struct of_dev_auxdata u300_auxdata_lookup[] __initdata = {
+       OF_DEV_AUXDATA("stericsson,pinctrl-u300", U300_SYSCON_BASE,
+               "pinctrl-u300", NULL),
+       OF_DEV_AUXDATA("stericsson,gpio-coh901", U300_GPIO_BASE,
+               "u300-gpio", NULL),
+       OF_DEV_AUXDATA("stericsson,coh901327", U300_WDOG_BASE,
+               "coh901327_wdog", NULL),
+       OF_DEV_AUXDATA("stericsson,coh901331", U300_RTC_BASE,
+               "rtc-coh901331", NULL),
+       OF_DEV_AUXDATA("stericsson,coh901318", U300_DMAC_BASE,
+               "coh901318", NULL),
+       OF_DEV_AUXDATA("stericsson,fsmc-nand", U300_NAND_IF_PHYS_BASE,
+               "fsmc-nand", NULL),
+       OF_DEV_AUXDATA("arm,primecell", U300_UART0_BASE,
+               "uart0", NULL),
+       OF_DEV_AUXDATA("arm,primecell", U300_UART1_BASE,
+               "uart1", NULL),
+       OF_DEV_AUXDATA("arm,primecell", U300_SPI_BASE,
+               "pl022", NULL),
+       OF_DEV_AUXDATA("st,ddci2c", U300_I2C0_BASE,
+               "stu300.0", NULL),
+       OF_DEV_AUXDATA("st,ddci2c", U300_I2C1_BASE,
+               "stu300.1", NULL),
+       OF_DEV_AUXDATA("arm,primecell", U300_MMCSD_BASE,
+               "mmci", NULL),
+       { /* sentinel */ },
+};
+
+static void __init u300_init_irq_dt(void)
+{
+       struct device_node *syscon;
+       struct clk *clk;
+
+       syscon = of_find_node_by_path("/syscon@c0011000");
+       if (!syscon) {
+               pr_crit("could not find syscon node\n");
+               return;
+       }
+       syscon_base = of_iomap(syscon, 0);
+       if (!syscon_base) {
+               pr_crit("could not remap syscon\n");
+               return;
+       }
+       /* initialize clocking early, we want to clock the INTCON */
+       u300_clk_init(syscon_base);
+
+       /* Bootstrap EMIF and SEMI clocks */
+       clk = clk_get_sys("pl172", NULL);
+       BUG_ON(IS_ERR(clk));
+       clk_prepare_enable(clk);
+       clk = clk_get_sys("semi", NULL);
+       BUG_ON(IS_ERR(clk));
+       clk_prepare_enable(clk);
+
+       /* Clock the interrupt controller */
+       clk = clk_get_sys("intcon", NULL);
+       BUG_ON(IS_ERR(clk));
+       clk_prepare_enable(clk);
+
+       irqchip_init();
+}
+
+static void __init u300_init_machine_dt(void)
+{
+       u16 val;
+
+       /* Check what platform we run and print some status information */
+       u300_init_check_chip();
+
+       /* Initialize pinmuxing */
+       pinctrl_register_mappings(u300_pinmux_map,
+                                 ARRAY_SIZE(u300_pinmux_map));
+
+       of_platform_populate(NULL, of_default_bus_match_table,
+                       u300_auxdata_lookup, NULL);
+
+       /* Enable SEMI self refresh */
+       val = readw(syscon_base + U300_SYSCON_SMCR) |
+               U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE;
+       writew(val, syscon_base + U300_SYSCON_SMCR);
+}
+
+static const char * u300_board_compat[] = {
+       "stericsson,u300",
+       NULL,
+};
+
+DT_MACHINE_START(U300_DT, "U300 S335/B335 (Device Tree)")
        .map_io         = u300_map_io,
-       .nr_irqs        = 0,
-       .init_irq       = u300_init_irq,
-       .init_time      = u300_timer_init,
-       .init_machine   = u300_init_machine,
+       .init_irq       = u300_init_irq_dt,
+       .init_time      = clocksource_of_init,
+       .init_machine   = u300_init_machine_dt,
        .restart        = u300_restart,
+       .dt_compat      = u300_board_compat,
 MACHINE_END
index 2785cb67b5e81025a55b387d96b9bc0ae64f9d34..ec0283cf9a32498617feacce6170a9a3c69c465c 100644 (file)
@@ -263,28 +263,22 @@ static int pl022_dummy_remove(struct spi_device *spi)
        return 0;
 }
 
+static const struct of_device_id pl022_dummy_dt_match[] = {
+       { .compatible = "arm,pl022-dummy" },
+       {},
+};
+
 static struct spi_driver pl022_dummy_driver = {
        .driver = {
                .name   = "spi-dummy",
                .owner  = THIS_MODULE,
+               .of_match_table = pl022_dummy_dt_match,
        },
        .probe  = pl022_dummy_probe,
        .remove = pl022_dummy_remove,
 };
 
-static int __init pl022_init_dummy(void)
-{
-       return spi_register_driver(&pl022_dummy_driver);
-}
-
-static void __exit pl022_exit_dummy(void)
-{
-       spi_unregister_driver(&pl022_dummy_driver);
-}
-
-module_init(pl022_init_dummy);
-module_exit(pl022_exit_dummy);
-
+module_spi_driver(pl022_dummy_driver);
 MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>");
 MODULE_DESCRIPTION("PL022 SSP/SPI DUMMY Linux driver");
 MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c
deleted file mode 100644 (file)
index 96800aa..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * arch/arm/mach-u300/i2c.c
- *
- * Copyright (C) 2009-2012 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- *
- * Register board i2c devices
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-#include <linux/kernel.h>
-#include <linux/i2c.h>
-#include <linux/mfd/ab3100.h>
-#include <linux/regulator/machine.h>
-#include <linux/amba/bus.h>
-#include <mach/irqs.h>
-
-/*
- * Initial settings of ab3100 registers.
- * Common for below LDO regulator settings are that
- * bit 7-5 controls voltage. Bit 4 turns regulator ON(1) or OFF(0).
- * Bit 3-2 controls sleep enable and bit 1-0 controls sleep mode.
- */
-
-/* LDO_A 0x16: 2.75V, ON, SLEEP_A, SLEEP OFF GND */
-#define LDO_A_SETTING          0x16
-/* LDO_C 0x10: 2.65V, ON, SLEEP_A or B, SLEEP full power */
-#define LDO_C_SETTING          0x10
-/* LDO_D 0x10: 2.65V, ON, sleep mode not used */
-#define LDO_D_SETTING          0x10
-/* LDO_E 0x10: 1.8V, ON, SLEEP_A or B, SLEEP full power */
-#define LDO_E_SETTING          0x10
-/* LDO_E SLEEP 0x00: 1.8V, not used, SLEEP_A or B, not used */
-#define LDO_E_SLEEP_SETTING    0x00
-/* LDO_F 0xD0: 2.5V, ON, SLEEP_A or B, SLEEP full power */
-#define LDO_F_SETTING          0xD0
-/* LDO_G 0x00: 2.85V, OFF, SLEEP_A or B, SLEEP full power */
-#define LDO_G_SETTING          0x00
-/* LDO_H 0x18: 2.75V, ON, SLEEP_B, SLEEP full power */
-#define LDO_H_SETTING          0x18
-/* LDO_K 0x00: 2.75V, OFF, SLEEP_A or B, SLEEP full power */
-#define LDO_K_SETTING          0x00
-/* LDO_EXT 0x00: Voltage not set, OFF, not used, not used */
-#define LDO_EXT_SETTING                0x00
-/* BUCK 0x7D: 1.2V, ON, SLEEP_A and B, SLEEP low power */
-#define BUCK_SETTING   0x7D
-/* BUCK SLEEP 0xAC: 1.05V, Not used, SLEEP_A and B, Not used */
-#define BUCK_SLEEP_SETTING     0xAC
-
-#ifdef CONFIG_AB3100_CORE
-static struct regulator_consumer_supply supply_ldo_c[] = {
-       {
-               .dev_name = "ab3100-codec",
-               .supply = "vaudio", /* Powers the codec */
-       },
-};
-
-/*
- * This one needs to be a supply so we can turn it off
- * in order to shut down the system.
- */
-static struct regulator_consumer_supply supply_ldo_d[] = {
-       {
-               .supply = "vana15", /* Powers the SoC (CPU etc) */
-       },
-};
-
-static struct regulator_consumer_supply supply_ldo_g[] = {
-       {
-               .dev_name = "mmci",
-               .supply = "vmmc", /* Powers MMC/SD card */
-       },
-};
-
-static struct regulator_consumer_supply supply_ldo_h[] = {
-       {
-               .dev_name = "xgam_pdi",
-               .supply = "vdisp", /* Powers camera, display etc */
-       },
-};
-
-static struct regulator_consumer_supply supply_ldo_k[] = {
-       {
-               .dev_name = "irda",
-               .supply = "vir", /* Power IrDA */
-       },
-};
-
-/*
- * This is a placeholder for whoever wish to use the
- * external power.
- */
-static struct regulator_consumer_supply supply_ldo_ext[] = {
-       {
-               .supply = "vext", /* External power */
-       },
-};
-
-/* Preset (hardware defined) voltages for these regulators */
-#define LDO_A_VOLTAGE 2750000
-#define LDO_C_VOLTAGE 2650000
-#define LDO_D_VOLTAGE 2650000
-
-static struct ab3100_platform_data ab3100_plf_data = {
-       .reg_constraints = {
-               /* LDO A routing and constraints */
-               {
-                       .constraints = {
-                               .name = "vrad",
-                               .min_uV = LDO_A_VOLTAGE,
-                               .max_uV = LDO_A_VOLTAGE,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .always_on = 1,
-                               .boot_on = 1,
-                       },
-               },
-               /* LDO C routing and constraints */
-               {
-                       .constraints = {
-                               .min_uV = LDO_C_VOLTAGE,
-                               .max_uV = LDO_C_VOLTAGE,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                       },
-                       .num_consumer_supplies = ARRAY_SIZE(supply_ldo_c),
-                       .consumer_supplies = supply_ldo_c,
-               },
-               /* LDO D routing and constraints */
-               {
-                       .constraints = {
-                               .min_uV = LDO_D_VOLTAGE,
-                               .max_uV = LDO_D_VOLTAGE,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-                               /*
-                                * Actually this is boot_on but we need
-                                * to reference count it externally to
-                                * be able to shut down the system.
-                                */
-                       },
-                       .num_consumer_supplies = ARRAY_SIZE(supply_ldo_d),
-                       .consumer_supplies = supply_ldo_d,
-               },
-               /* LDO E routing and constraints */
-               {
-                       .constraints = {
-                               .name = "vio",
-                               .min_uV = 1800000,
-                               .max_uV = 1800000,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .always_on = 1,
-                               .boot_on = 1,
-                       },
-               },
-               /* LDO F routing and constraints */
-               {
-                       .constraints = {
-                               .name = "vana25",
-                               .min_uV = 2500000,
-                               .max_uV = 2500000,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .always_on = 1,
-                               .boot_on = 1,
-                       },
-               },
-               /* LDO G routing and constraints */
-               {
-                       .constraints = {
-                               .min_uV = 1500000,
-                               .max_uV = 2850000,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .valid_ops_mask =
-                               REGULATOR_CHANGE_VOLTAGE |
-                               REGULATOR_CHANGE_STATUS,
-                       },
-                       .num_consumer_supplies = ARRAY_SIZE(supply_ldo_g),
-                       .consumer_supplies = supply_ldo_g,
-               },
-               /* LDO H routing and constraints */
-               {
-                       .constraints = {
-                               .min_uV = 1200000,
-                               .max_uV = 2750000,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .valid_ops_mask =
-                               REGULATOR_CHANGE_VOLTAGE |
-                               REGULATOR_CHANGE_STATUS,
-                       },
-                       .num_consumer_supplies = ARRAY_SIZE(supply_ldo_h),
-                       .consumer_supplies = supply_ldo_h,
-               },
-               /* LDO K routing and constraints */
-               {
-                       .constraints = {
-                               .min_uV = 1800000,
-                               .max_uV = 2750000,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .valid_ops_mask =
-                               REGULATOR_CHANGE_VOLTAGE |
-                               REGULATOR_CHANGE_STATUS,
-                       },
-                       .num_consumer_supplies = ARRAY_SIZE(supply_ldo_k),
-                       .consumer_supplies = supply_ldo_k,
-               },
-               /* External regulator interface. No fixed voltage specified.
-                * If we knew the voltage of the external regulator and it
-                * was connected on the board, we could add the (fixed)
-                * voltage for it here.
-                */
-               {
-                       .constraints = {
-                               .min_uV = 0,
-                               .max_uV = 0,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .valid_ops_mask =
-                               REGULATOR_CHANGE_STATUS,
-                       },
-                       .num_consumer_supplies = ARRAY_SIZE(supply_ldo_ext),
-                       .consumer_supplies = supply_ldo_ext,
-               },
-               /* Buck converter routing and constraints */
-               {
-                       .constraints = {
-                               .name = "vcore",
-                               .min_uV = 1200000,
-                               .max_uV = 1800000,
-                               .valid_modes_mask = REGULATOR_MODE_NORMAL,
-                               .valid_ops_mask =
-                               REGULATOR_CHANGE_VOLTAGE,
-                               .always_on = 1,
-                               .boot_on = 1,
-                       },
-               },
-       },
-       .reg_initvals = {
-               LDO_A_SETTING,
-               LDO_C_SETTING,
-               LDO_E_SETTING,
-               LDO_E_SLEEP_SETTING,
-               LDO_F_SETTING,
-               LDO_G_SETTING,
-               LDO_H_SETTING,
-               LDO_K_SETTING,
-               LDO_EXT_SETTING,
-               BUCK_SETTING,
-               BUCK_SLEEP_SETTING,
-               LDO_D_SETTING,
-       },
-};
-#endif
-
-static struct i2c_board_info __initdata bus0_i2c_board_info[] = {
-#ifdef CONFIG_AB3100_CORE
-       {
-               .type = "ab3100",
-               .addr = 0x48,
-               .irq = IRQ_U300_IRQ0_EXT,
-               .platform_data = &ab3100_plf_data,
-       },
-#else
-       { },
-#endif
-};
-
-static struct i2c_board_info __initdata bus1_i2c_board_info[] = {
-       {
-               .type = "fwcam",
-               .addr = 0x10,
-       },
-       {
-               .type = "fwcam",
-               .addr = 0x5d,
-       },
-};
-
-void __init u300_i2c_register_board_devices(void)
-{
-       i2c_register_board_info(0, bus0_i2c_board_info,
-                               ARRAY_SIZE(bus0_i2c_board_info));
-       /*
-        * This makes the core shut down all unused regulators
-        * after all the initcalls have completed.
-        */
-       regulator_has_full_constraints();
-       i2c_register_board_info(1, bus1_i2c_board_info,
-                               ARRAY_SIZE(bus1_i2c_board_info));
-}
diff --git a/arch/arm/mach-u300/i2c.h b/arch/arm/mach-u300/i2c.h
deleted file mode 100644 (file)
index 485c02e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * arch/arm/mach-u300/i2c.h
- *
- * Copyright (C) 2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- *
- * Register board i2c devices
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-
-#ifndef MACH_U300_I2C_H
-#define MACH_U300_I2C_H
-
-#ifdef CONFIG_I2C_STU300
-void __init u300_i2c_register_board_devices(void);
-#else
-/* Compile out this stuff if no I2C adapter is available */
-static inline void __init u300_i2c_register_board_devices(void)
-{
-}
-#endif
-
-#endif
diff --git a/arch/arm/mach-u300/include/mach/debug-macro.S b/arch/arm/mach-u300/include/mach/debug-macro.S
deleted file mode 100644 (file)
index 8ae8e4a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- *
- * arch-arm/mach-u300/include/mach/debug-macro.S
- *
- *
- * Copyright (C) 2006-2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * Debugging macro include header.
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-#include <mach/hardware.h>
-
-       .macro  addruart, rp, rv, tmp
-       /* If we move the address using MMU, use this. */
-       ldr     \rp,      = U300_SLOW_PER_PHYS_BASE @ MMU off, physical address
-       ldr     \rv,      = U300_SLOW_PER_VIRT_BASE @ MMU on, virtual address
-       orr     \rp, \rp, #0x00003000
-       orr     \rv, \rv, #0x00003000
-       .endm
-
-#include <asm/hardware/debug-pl01x.S>
diff --git a/arch/arm/mach-u300/include/mach/hardware.h b/arch/arm/mach-u300/include/mach/hardware.h
deleted file mode 100644 (file)
index b99d4ce..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
- * arch/arm/mach-u300/include/mach/hardware.h
- */
-#include <asm/sizes.h>
-#include <mach/u300-regs.h>
diff --git a/arch/arm/mach-u300/include/mach/irqs.h b/arch/arm/mach-u300/include/mach/irqs.h
deleted file mode 100644 (file)
index 21d5e76..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- *
- * arch/arm/mach-u300/include/mach/irqs.h
- *
- *
- * Copyright (C) 2006-2012 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * IRQ channel definitions for the U300 platforms.
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-
-#ifndef __MACH_IRQS_H
-#define __MACH_IRQS_H
-
-#define IRQ_U300_INTCON0_START         32
-#define IRQ_U300_INTCON1_START         64
-/* These are on INTCON0 - 30 lines */
-#define IRQ_U300_IRQ0_EXT              32
-#define IRQ_U300_IRQ1_EXT              33
-#define IRQ_U300_DMA                   34
-#define IRQ_U300_VIDEO_ENC_0           35
-#define IRQ_U300_VIDEO_ENC_1           36
-#define IRQ_U300_AAIF_RX               37
-#define IRQ_U300_AAIF_TX               38
-#define IRQ_U300_AAIF_VGPIO            39
-#define IRQ_U300_AAIF_WAKEUP           40
-#define IRQ_U300_PCM_I2S0_FRAME                41
-#define IRQ_U300_PCM_I2S0_FIFO         42
-#define IRQ_U300_PCM_I2S1_FRAME                43
-#define IRQ_U300_PCM_I2S1_FIFO         44
-#define IRQ_U300_XGAM_GAMCON           45
-#define IRQ_U300_XGAM_CDI              46
-#define IRQ_U300_XGAM_CDICON           47
-#define IRQ_U300_XGAM_PDI              49
-#define IRQ_U300_XGAM_PDICON           50
-#define IRQ_U300_XGAM_GAMEACC          51
-#define IRQ_U300_XGAM_MCIDCT           52
-#define IRQ_U300_APEX                  53
-#define IRQ_U300_UART0                 54
-#define IRQ_U300_SPI                   55
-#define IRQ_U300_TIMER_APP_OS          56
-#define IRQ_U300_TIMER_APP_DD          57
-#define IRQ_U300_TIMER_APP_GP1         58
-#define IRQ_U300_TIMER_APP_GP2         59
-#define IRQ_U300_TIMER_OS              60
-#define IRQ_U300_TIMER_MS              61
-#define IRQ_U300_KEYPAD_KEYBF          62
-#define IRQ_U300_KEYPAD_KEYBR          63
-/* These are on INTCON1 - 32 lines */
-#define IRQ_U300_GPIO_PORT0            64
-#define IRQ_U300_GPIO_PORT1            65
-#define IRQ_U300_GPIO_PORT2            66
-
-/* These are for DB3150, DB3200 and DB3350 */
-#define IRQ_U300_WDOG                  67
-#define IRQ_U300_EVHIST                        68
-#define IRQ_U300_MSPRO                 69
-#define IRQ_U300_MMCSD_MCIINTR0                70
-#define IRQ_U300_MMCSD_MCIINTR1                71
-#define IRQ_U300_I2C0                  72
-#define IRQ_U300_I2C1                  73
-#define IRQ_U300_RTC                   74
-#define IRQ_U300_NFIF                  75
-#define IRQ_U300_NFIF2                 76
-
-/* The DB3350-specific interrupt lines */
-#define IRQ_U300_ISP_F0                        77
-#define IRQ_U300_ISP_F1                        78
-#define IRQ_U300_ISP_F2                        79
-#define IRQ_U300_ISP_F3                        80
-#define IRQ_U300_ISP_F4                        81
-#define IRQ_U300_GPIO_PORT3            82
-#define IRQ_U300_SYSCON_PLL_LOCK       83
-#define IRQ_U300_UART1                 84
-#define IRQ_U300_GPIO_PORT4            85
-#define IRQ_U300_GPIO_PORT5            86
-#define IRQ_U300_GPIO_PORT6            87
-#define U300_VIC_IRQS_END              88
-
-#endif
diff --git a/arch/arm/mach-u300/include/mach/syscon.h b/arch/arm/mach-u300/include/mach/syscon.h
deleted file mode 100644 (file)
index 10bdd0b..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- *
- * arch/arm/mach-u300/include/mach/syscon.h
- *
- *
- * Copyright (C) 2008-2012 ST-Ericsson AB
- *
- * Author: Rickard Andersson <rickard.andersson@stericsson.com>
- */
-
-#ifndef __MACH_SYSCON_H
-#define __MACH_SYSCON_H
-
-/*
- * All register defines for SYSCON registers that concerns individual
- * block clocks and reset lines are registered here. This is because
- * we don't want any other file to try to fool around with this stuff.
- */
-
-/* APP side SYSCON registers */
-/* TODO: this is incomplete. Add all from asic_syscon_map.h eventually. */
-/* CLK Control Register 16bit (R/W) */
-#define U300_SYSCON_CCR                                                (0x0000)
-#define U300_SYSCON_CCR_I2S1_USE_VCXO                          (0x0040)
-#define U300_SYSCON_CCR_I2S0_USE_VCXO                          (0x0020)
-#define U300_SYSCON_CCR_TURN_VCXO_ON                           (0x0008)
-#define U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK                        (0x0007)
-#define U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER           (0x04)
-#define U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW                 (0x03)
-#define U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE                (0x02)
-#define U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH                        (0x01)
-#define U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST                        (0x00)
-/* CLK Status Register 16bit (R/W) */
-#define U300_SYSCON_CSR                                                (0x0004)
-#define U300_SYSCON_CSR_PLL208_LOCK_IND                                (0x0002)
-#define U300_SYSCON_CSR_PLL13_LOCK_IND                         (0x0001)
-/* Reset lines for SLOW devices 16bit (R/W) */
-#define U300_SYSCON_RSR                                                (0x0014)
-#define U300_SYSCON_RSR_PPM_RESET_EN                           (0x0200)
-#define U300_SYSCON_RSR_ACC_TMR_RESET_EN                       (0x0100)
-#define U300_SYSCON_RSR_APP_TMR_RESET_EN                       (0x0080)
-#define U300_SYSCON_RSR_RTC_RESET_EN                           (0x0040)
-#define U300_SYSCON_RSR_KEYPAD_RESET_EN                                (0x0020)
-#define U300_SYSCON_RSR_GPIO_RESET_EN                          (0x0010)
-#define U300_SYSCON_RSR_EH_RESET_EN                            (0x0008)
-#define U300_SYSCON_RSR_BTR_RESET_EN                           (0x0004)
-#define U300_SYSCON_RSR_UART_RESET_EN                          (0x0002)
-#define U300_SYSCON_RSR_SLOW_BRIDGE_RESET_EN                   (0x0001)
-/* Reset lines for FAST devices 16bit (R/W) */
-#define U300_SYSCON_RFR                                                (0x0018)
-#define U300_SYSCON_RFR_UART1_RESET_ENABLE                     (0x0080)
-#define U300_SYSCON_RFR_SPI_RESET_ENABLE                       (0x0040)
-#define U300_SYSCON_RFR_MMC_RESET_ENABLE                       (0x0020)
-#define U300_SYSCON_RFR_PCM_I2S1_RESET_ENABLE                  (0x0010)
-#define U300_SYSCON_RFR_PCM_I2S0_RESET_ENABLE                  (0x0008)
-#define U300_SYSCON_RFR_I2C1_RESET_ENABLE                      (0x0004)
-#define U300_SYSCON_RFR_I2C0_RESET_ENABLE                      (0x0002)
-#define U300_SYSCON_RFR_FAST_BRIDGE_RESET_ENABLE               (0x0001)
-/* Reset lines for the rest of the peripherals 16bit (R/W) */
-#define U300_SYSCON_RRR                                                (0x001c)
-#define U300_SYSCON_RRR_CDS_RESET_EN                           (0x4000)
-#define U300_SYSCON_RRR_ISP_RESET_EN                           (0x2000)
-#define U300_SYSCON_RRR_INTCON_RESET_EN                                (0x1000)
-#define U300_SYSCON_RRR_MSPRO_RESET_EN                         (0x0800)
-#define U300_SYSCON_RRR_XGAM_RESET_EN                          (0x0100)
-#define U300_SYSCON_RRR_XGAM_VC_SYNC_RESET_EN                  (0x0080)
-#define U300_SYSCON_RRR_NANDIF_RESET_EN                                (0x0040)
-#define U300_SYSCON_RRR_EMIF_RESET_EN                          (0x0020)
-#define U300_SYSCON_RRR_DMAC_RESET_EN                          (0x0010)
-#define U300_SYSCON_RRR_CPU_RESET_EN                           (0x0008)
-#define U300_SYSCON_RRR_APEX_RESET_EN                          (0x0004)
-#define U300_SYSCON_RRR_AHB_RESET_EN                           (0x0002)
-#define U300_SYSCON_RRR_AAIF_RESET_EN                          (0x0001)
-/* Clock enable for SLOW peripherals 16bit (R/W) */
-#define U300_SYSCON_CESR                                       (0x0020)
-#define U300_SYSCON_CESR_PPM_CLK_EN                            (0x0200)
-#define U300_SYSCON_CESR_ACC_TMR_CLK_EN                                (0x0100)
-#define U300_SYSCON_CESR_APP_TMR_CLK_EN                                (0x0080)
-#define U300_SYSCON_CESR_KEYPAD_CLK_EN                         (0x0040)
-#define U300_SYSCON_CESR_GPIO_CLK_EN                           (0x0010)
-#define U300_SYSCON_CESR_EH_CLK_EN                             (0x0008)
-#define U300_SYSCON_CESR_BTR_CLK_EN                            (0x0004)
-#define U300_SYSCON_CESR_UART_CLK_EN                           (0x0002)
-#define U300_SYSCON_CESR_SLOW_BRIDGE_CLK_EN                    (0x0001)
-/* Clock enable for FAST peripherals 16bit (R/W) */
-#define U300_SYSCON_CEFR                                       (0x0024)
-#define U300_SYSCON_CEFR_UART1_CLK_EN                          (0x0200)
-#define U300_SYSCON_CEFR_I2S1_CORE_CLK_EN                      (0x0100)
-#define U300_SYSCON_CEFR_I2S0_CORE_CLK_EN                      (0x0080)
-#define U300_SYSCON_CEFR_SPI_CLK_EN                            (0x0040)
-#define U300_SYSCON_CEFR_MMC_CLK_EN                            (0x0020)
-#define U300_SYSCON_CEFR_I2S1_CLK_EN                           (0x0010)
-#define U300_SYSCON_CEFR_I2S0_CLK_EN                           (0x0008)
-#define U300_SYSCON_CEFR_I2C1_CLK_EN                           (0x0004)
-#define U300_SYSCON_CEFR_I2C0_CLK_EN                           (0x0002)
-#define U300_SYSCON_CEFR_FAST_BRIDGE_CLK_EN                    (0x0001)
-/* Clock enable for the rest of the peripherals 16bit (R/W) */
-#define U300_SYSCON_CERR                                       (0x0028)
-#define U300_SYSCON_CERR_CDS_CLK_EN                            (0x2000)
-#define U300_SYSCON_CERR_ISP_CLK_EN                            (0x1000)
-#define U300_SYSCON_CERR_MSPRO_CLK_EN                          (0x0800)
-#define U300_SYSCON_CERR_AHB_SUBSYS_BRIDGE_CLK_EN              (0x0400)
-#define U300_SYSCON_CERR_SEMI_CLK_EN                           (0x0200)
-#define U300_SYSCON_CERR_XGAM_CLK_EN                           (0x0100)
-#define U300_SYSCON_CERR_VIDEO_ENC_CLK_EN                      (0x0080)
-#define U300_SYSCON_CERR_NANDIF_CLK_EN                         (0x0040)
-#define U300_SYSCON_CERR_EMIF_CLK_EN                           (0x0020)
-#define U300_SYSCON_CERR_DMAC_CLK_EN                           (0x0010)
-#define U300_SYSCON_CERR_CPU_CLK_EN                            (0x0008)
-#define U300_SYSCON_CERR_APEX_CLK_EN                           (0x0004)
-#define U300_SYSCON_CERR_AHB_CLK_EN                            (0x0002)
-#define U300_SYSCON_CERR_AAIF_CLK_EN                           (0x0001)
-/* Single block clock enable 16bit (-/W) */
-#define U300_SYSCON_SBCER                                      (0x002c)
-#define U300_SYSCON_SBCER_PPM_CLK_EN                           (0x0009)
-#define U300_SYSCON_SBCER_ACC_TMR_CLK_EN                       (0x0008)
-#define U300_SYSCON_SBCER_APP_TMR_CLK_EN                       (0x0007)
-#define U300_SYSCON_SBCER_KEYPAD_CLK_EN                                (0x0006)
-#define U300_SYSCON_SBCER_GPIO_CLK_EN                          (0x0004)
-#define U300_SYSCON_SBCER_EH_CLK_EN                            (0x0003)
-#define U300_SYSCON_SBCER_BTR_CLK_EN                           (0x0002)
-#define U300_SYSCON_SBCER_UART_CLK_EN                          (0x0001)
-#define U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN                   (0x0000)
-#define U300_SYSCON_SBCER_UART1_CLK_EN                         (0x0019)
-#define U300_SYSCON_SBCER_I2S1_CORE_CLK_EN                     (0x0018)
-#define U300_SYSCON_SBCER_I2S0_CORE_CLK_EN                     (0x0017)
-#define U300_SYSCON_SBCER_SPI_CLK_EN                           (0x0016)
-#define U300_SYSCON_SBCER_MMC_CLK_EN                           (0x0015)
-#define U300_SYSCON_SBCER_I2S1_CLK_EN                          (0x0014)
-#define U300_SYSCON_SBCER_I2S0_CLK_EN                          (0x0013)
-#define U300_SYSCON_SBCER_I2C1_CLK_EN                          (0x0012)
-#define U300_SYSCON_SBCER_I2C0_CLK_EN                          (0x0011)
-#define U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN                   (0x0010)
-#define U300_SYSCON_SBCER_CDS_CLK_EN                           (0x002D)
-#define U300_SYSCON_SBCER_ISP_CLK_EN                           (0x002C)
-#define U300_SYSCON_SBCER_MSPRO_CLK_EN                         (0x002B)
-#define U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN             (0x002A)
-#define U300_SYSCON_SBCER_SEMI_CLK_EN                          (0x0029)
-#define U300_SYSCON_SBCER_XGAM_CLK_EN                          (0x0028)
-#define U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN                     (0x0027)
-#define U300_SYSCON_SBCER_NANDIF_CLK_EN                                (0x0026)
-#define U300_SYSCON_SBCER_EMIF_CLK_EN                          (0x0025)
-#define U300_SYSCON_SBCER_DMAC_CLK_EN                          (0x0024)
-#define U300_SYSCON_SBCER_CPU_CLK_EN                           (0x0023)
-#define U300_SYSCON_SBCER_APEX_CLK_EN                          (0x0022)
-#define U300_SYSCON_SBCER_AHB_CLK_EN                           (0x0021)
-#define U300_SYSCON_SBCER_AAIF_CLK_EN                          (0x0020)
-/* Single block clock disable 16bit (-/W) */
-#define U300_SYSCON_SBCDR                                      (0x0030)
-/* Same values as above for SBCER */
-/* Clock force SLOW peripherals 16bit (R/W) */
-#define U300_SYSCON_CFSR                                       (0x003c)
-#define U300_SYSCON_CFSR_PPM_CLK_FORCE_EN                      (0x0200)
-#define U300_SYSCON_CFSR_ACC_TMR_CLK_FORCE_EN                  (0x0100)
-#define U300_SYSCON_CFSR_APP_TMR_CLK_FORCE_EN                  (0x0080)
-#define U300_SYSCON_CFSR_KEYPAD_CLK_FORCE_EN                   (0x0020)
-#define U300_SYSCON_CFSR_GPIO_CLK_FORCE_EN                     (0x0010)
-#define U300_SYSCON_CFSR_EH_CLK_FORCE_EN                       (0x0008)
-#define U300_SYSCON_CFSR_BTR_CLK_FORCE_EN                      (0x0004)
-#define U300_SYSCON_CFSR_UART_CLK_FORCE_EN                     (0x0002)
-#define U300_SYSCON_CFSR_SLOW_BRIDGE_CLK_FORCE_EN              (0x0001)
-/* Clock force FAST peripherals 16bit (R/W) */
-#define U300_SYSCON_CFFR                                       (0x40)
-/* Values not defined. Define if you want to use them. */
-/* Clock force the rest of the peripherals 16bit (R/W) */
-#define U300_SYSCON_CFRR                                       (0x44)
-#define U300_SYSCON_CFRR_CDS_CLK_FORCE_EN                      (0x2000)
-#define U300_SYSCON_CFRR_ISP_CLK_FORCE_EN                      (0x1000)
-#define U300_SYSCON_CFRR_MSPRO_CLK_FORCE_EN                    (0x0800)
-#define U300_SYSCON_CFRR_AHB_SUBSYS_BRIDGE_CLK_FORCE_EN                (0x0400)
-#define U300_SYSCON_CFRR_SEMI_CLK_FORCE_EN                     (0x0200)
-#define U300_SYSCON_CFRR_XGAM_CLK_FORCE_EN                     (0x0100)
-#define U300_SYSCON_CFRR_VIDEO_ENC_CLK_FORCE_EN                        (0x0080)
-#define U300_SYSCON_CFRR_NANDIF_CLK_FORCE_EN                   (0x0040)
-#define U300_SYSCON_CFRR_EMIF_CLK_FORCE_EN                     (0x0020)
-#define U300_SYSCON_CFRR_DMAC_CLK_FORCE_EN                     (0x0010)
-#define U300_SYSCON_CFRR_CPU_CLK_FORCE_EN                      (0x0008)
-#define U300_SYSCON_CFRR_APEX_CLK_FORCE_EN                     (0x0004)
-#define U300_SYSCON_CFRR_AHB_CLK_FORCE_EN                      (0x0002)
-#define U300_SYSCON_CFRR_AAIF_CLK_FORCE_EN                     (0x0001)
-/* PLL208 Frequency Control 16bit (R/W) */
-#define U300_SYSCON_PFCR                                       (0x48)
-#define U300_SYSCON_PFCR_DPLL_MULT_NUM                         (0x000F)
-/* Power Management Control 16bit (R/W) */
-#define U300_SYSCON_PMCR                                       (0x50)
-#define U300_SYSCON_PMCR_DCON_ENABLE                           (0x0002)
-#define U300_SYSCON_PMCR_PWR_MGNT_ENABLE                       (0x0001)
-/*
- * All other clocking registers moved to clock.c!
- */
-/* Reset Out 16bit (R/W) */
-#define U300_SYSCON_RCR                                                (0x6c)
-#define U300_SYSCON_RCR_RESOUT0_RST_N_DISABLE                  (0x0001)
-/* EMIF Slew Rate Control 16bit (R/W) */
-#define U300_SYSCON_SRCLR                                      (0x70)
-#define U300_SYSCON_SRCLR_MASK                                 (0x03FF)
-#define U300_SYSCON_SRCLR_VALUE                                        (0x03FF)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_5_B                      (0x0200)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_5_A                      (0x0100)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_4_B                      (0x0080)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_4_A                      (0x0040)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_3_B                      (0x0020)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_3_A                      (0x0010)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_2_B                      (0x0008)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_2_A                      (0x0004)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_1_B                      (0x0002)
-#define U300_SYSCON_SRCLR_EMIF_1_SLRC_1_A                      (0x0001)
-/* EMIF Clock Control Register 16bit (R/W) */
-#define U300_SYSCON_ECCR                                       (0x0078)
-#define U300_SYSCON_ECCR_MASK                                  (0x000F)
-#define U300_SYSCON_ECCR_EMIF_1_STATIC_CLK_EN_N_DISABLE                (0x0008)
-#define U300_SYSCON_ECCR_EMIF_1_RET_OUT_CLK_EN_N_DISABLE       (0x0004)
-#define U300_SYSCON_ECCR_EMIF_MEMCLK_RET_EN_N_DISABLE          (0x0002)
-#define U300_SYSCON_ECCR_EMIF_SDRCLK_RET_EN_N_DISABLE          (0x0001)
-/* Step one for killing the applications system 16bit (-/W) */
-#define U300_SYSCON_KA1R                                       (0x0080)
-#define U300_SYSCON_KA1R_MASK                                  (0xFFFF)
-#define U300_SYSCON_KA1R_VALUE                                 (0xFFFF)
-/* Step two for killing the application system 16bit (-/W) */
-#define U300_SYSCON_KA2R                                       (0x0084)
-#define U300_SYSCON_KA2R_MASK                                  (0xFFFF)
-#define U300_SYSCON_KA2R_VALUE                                 (0xFFFF)
-/* MMC/MSPRO frequency divider register 0 16bit (R/W) */
-#define U300_SYSCON_MMF0R                                      (0x90)
-#define U300_SYSCON_MMF0R_MASK                                 (0x00FF)
-#define U300_SYSCON_MMF0R_FREQ_0_HIGH_MASK                     (0x00F0)
-#define U300_SYSCON_MMF0R_FREQ_0_LOW_MASK                      (0x000F)
-/* MMC/MSPRO frequency divider register 1 16bit (R/W) */
-#define U300_SYSCON_MMF1R                                      (0x94)
-#define U300_SYSCON_MMF1R_MASK                                 (0x00FF)
-#define U300_SYSCON_MMF1R_FREQ_1_HIGH_MASK                     (0x00F0)
-#define U300_SYSCON_MMF1R_FREQ_1_LOW_MASK                      (0x000F)
-/* AAIF control register 16 bit (R/W) */
-#define U300_SYSCON_AAIFCR                                     (0x98)
-#define U300_SYSCON_AAIFCR_MASK                                        (0x0003)
-#define U300_SYSCON_AAIFCR_AASW_CTRL_MASK                      (0x0003)
-#define U300_SYSCON_AAIFCR_AASW_CTRL_FUNCTIONAL                        (0x0000)
-#define U300_SYSCON_AAIFCR_AASW_CTRL_MONITORING                        (0x0001)
-#define U300_SYSCON_AAIFCR_AASW_CTRL_ACC_TO_EXT                        (0x0002)
-#define U300_SYSCON_AAIFCR_AASW_CTRL_APP_TO_EXT                        (0x0003)
-/* Clock control for the MMC and MSPRO blocks 16bit (R/W) */
-#define U300_SYSCON_MMCR                                       (0x9C)
-#define U300_SYSCON_MMCR_MASK                                  (0x0003)
-#define U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE                 (0x0002)
-#define U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE                  (0x0001)
-/* Pull up/down control (R/W) */
-#define U300_SYSCON_PUCR                                       (0x104)
-#define U300_SYSCON_PUCR_EMIF_1_WAIT_N_PU_ENABLE               (0x0200)
-#define U300_SYSCON_PUCR_EMIF_1_NFIF_READY_PU_ENABLE           (0x0100)
-#define U300_SYSCON_PUCR_EMIF_1_16BIT_PU_ENABLE                        (0x0080)
-#define U300_SYSCON_PUCR_EMIF_1_8BIT_PU_ENABLE                 (0x0040)
-#define U300_SYSCON_PUCR_KEY_IN_PU_EN_MASK                     (0x003F)
-/* SYS_0_CLK_CONTROL first clock control 16bit (R/W) */
-#define U300_SYSCON_S0CCR                                      (0x120)
-#define U300_SYSCON_S0CCR_FIELD_MASK                           (0x43FF)
-#define U300_SYSCON_S0CCR_CLOCK_REQ                            (0x4000)
-#define U300_SYSCON_S0CCR_CLOCK_REQ_MONITOR                    (0x2000)
-#define U300_SYSCON_S0CCR_CLOCK_INV                            (0x0200)
-#define U300_SYSCON_S0CCR_CLOCK_FREQ_MASK                      (0x01E0)
-#define U300_SYSCON_S0CCR_CLOCK_SELECT_MASK                    (0x001E)
-#define U300_SYSCON_S0CCR_CLOCK_ENABLE                         (0x0001)
-#define U300_SYSCON_S0CCR_SEL_MCLK                             (0x8<<1)
-#define U300_SYSCON_S0CCR_SEL_ACC_FSM_CLK                      (0xA<<1)
-#define U300_SYSCON_S0CCR_SEL_PLL60_48_CLK                     (0xC<<1)
-#define U300_SYSCON_S0CCR_SEL_PLL60_60_CLK                     (0xD<<1)
-#define U300_SYSCON_S0CCR_SEL_ACC_PLL208_CLK                   (0xE<<1)
-#define U300_SYSCON_S0CCR_SEL_APP_PLL13_CLK                    (0x0<<1)
-#define U300_SYSCON_S0CCR_SEL_APP_FSM_CLK                      (0x2<<1)
-#define U300_SYSCON_S0CCR_SEL_RTC_CLK                          (0x4<<1)
-#define U300_SYSCON_S0CCR_SEL_APP_PLL208_CLK                   (0x6<<1)
-/* SYS_1_CLK_CONTROL second clock control 16 bit (R/W) */
-#define U300_SYSCON_S1CCR                                      (0x124)
-#define U300_SYSCON_S1CCR_FIELD_MASK                           (0x43FF)
-#define U300_SYSCON_S1CCR_CLOCK_REQ                            (0x4000)
-#define U300_SYSCON_S1CCR_CLOCK_REQ_MONITOR                    (0x2000)
-#define U300_SYSCON_S1CCR_CLOCK_INV                            (0x0200)
-#define U300_SYSCON_S1CCR_CLOCK_FREQ_MASK                      (0x01E0)
-#define U300_SYSCON_S1CCR_CLOCK_SELECT_MASK                    (0x001E)
-#define U300_SYSCON_S1CCR_CLOCK_ENABLE                         (0x0001)
-#define U300_SYSCON_S1CCR_SEL_MCLK                             (0x8<<1)
-#define U300_SYSCON_S1CCR_SEL_ACC_FSM_CLK                      (0xA<<1)
-#define U300_SYSCON_S1CCR_SEL_PLL60_48_CLK                     (0xC<<1)
-#define U300_SYSCON_S1CCR_SEL_PLL60_60_CLK                     (0xD<<1)
-#define U300_SYSCON_S1CCR_SEL_ACC_PLL208_CLK                   (0xE<<1)
-#define U300_SYSCON_S1CCR_SEL_ACC_PLL13_CLK                    (0x0<<1)
-#define U300_SYSCON_S1CCR_SEL_APP_FSM_CLK                      (0x2<<1)
-#define U300_SYSCON_S1CCR_SEL_RTC_CLK                          (0x4<<1)
-#define U300_SYSCON_S1CCR_SEL_APP_PLL208_CLK                   (0x6<<1)
-/* SYS_2_CLK_CONTROL third clock contol 16 bit (R/W) */
-#define U300_SYSCON_S2CCR                                      (0x128)
-#define U300_SYSCON_S2CCR_FIELD_MASK                           (0xC3FF)
-#define U300_SYSCON_S2CCR_CLK_STEAL                            (0x8000)
-#define U300_SYSCON_S2CCR_CLOCK_REQ                            (0x4000)
-#define U300_SYSCON_S2CCR_CLOCK_REQ_MONITOR                    (0x2000)
-#define U300_SYSCON_S2CCR_CLOCK_INV                            (0x0200)
-#define U300_SYSCON_S2CCR_CLOCK_FREQ_MASK                      (0x01E0)
-#define U300_SYSCON_S2CCR_CLOCK_SELECT_MASK                    (0x001E)
-#define U300_SYSCON_S2CCR_CLOCK_ENABLE                         (0x0001)
-#define U300_SYSCON_S2CCR_SEL_MCLK                             (0x8<<1)
-#define U300_SYSCON_S2CCR_SEL_ACC_FSM_CLK                      (0xA<<1)
-#define U300_SYSCON_S2CCR_SEL_PLL60_48_CLK                     (0xC<<1)
-#define U300_SYSCON_S2CCR_SEL_PLL60_60_CLK                     (0xD<<1)
-#define U300_SYSCON_S2CCR_SEL_ACC_PLL208_CLK                   (0xE<<1)
-#define U300_SYSCON_S2CCR_SEL_ACC_PLL13_CLK                    (0x0<<1)
-#define U300_SYSCON_S2CCR_SEL_APP_FSM_CLK                      (0x2<<1)
-#define U300_SYSCON_S2CCR_SEL_RTC_CLK                          (0x4<<1)
-#define U300_SYSCON_S2CCR_SEL_APP_PLL208_CLK                   (0x6<<1)
-/* SYS_MISC_CONTROL, miscellaneous 16bit (R/W) */
-#define U300_SYSCON_MCR                                                (0x12c)
-#define U300_SYSCON_MCR_FIELD_MASK                             (0x00FF)
-#define U300_SYSCON_MCR_PMGEN_CR_4_MASK                                (0x00C0)
-#define U300_SYSCON_MCR_PMGEN_CR_4_GPIO                                (0x0000)
-#define U300_SYSCON_MCR_PMGEN_CR_4_SPI                         (0x0040)
-#define U300_SYSCON_MCR_PMGEN_CR_4_AAIF                                (0x00C0)
-#define U300_SYSCON_MCR_PMGEN_CR_2_MASK                                (0x0030)
-#define U300_SYSCON_MCR_PMGEN_CR_2_GPIO                                (0x0000)
-#define U300_SYSCON_MCR_PMGEN_CR_2_EMIF_1_STATIC               (0x0010)
-#define U300_SYSCON_MCR_PMGEN_CR_2_DSP                         (0x0020)
-#define U300_SYSCON_MCR_PMGEN_CR_2_AAIF                                (0x0030)
-#define U300_SYSCON_MCR_PMGEN_CR_0_MASK                                (0x000C)
-#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_1_SDRAM_M1             (0x0000)
-#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_1_SDRAM_M2             (0x0004)
-#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_1_SDRAM_M3             (0x0008)
-#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_0_SDRAM                        (0x000C)
-#define U300_SYSCON_MCR_PM1G_MODE_ENABLE                       (0x0002)
-#define U300_SYSCON_MCR_PMTG5_MODE_ENABLE                      (0x0001)
-/* SC_PLL_IRQ_CONTROL 16bit (R/W) */
-#define U300_SYSCON_PICR                                       (0x0130)
-#define U300_SYSCON_PICR_MASK                                  (0x00FF)
-#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_LOW_ENABLE          (0x0080)
-#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_HIGH_ENABLE         (0x0040)
-#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_LOW_ENABLE           (0x0020)
-#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_HIGH_ENABLE          (0x0010)
-#define U300_SYSCON_PICR_IRQMASK_PLL13_UNLOCK_ENABLE           (0x0008)
-#define U300_SYSCON_PICR_IRQMASK_PLL13_LOCK_ENABLE             (0x0004)
-#define U300_SYSCON_PICR_IRQMASK_PLL208_UNLOCK_ENABLE          (0x0002)
-#define U300_SYSCON_PICR_IRQMASK_PLL208_LOCK_ENABLE            (0x0001)
-/* SC_PLL_IRQ_STATUS 16 bit (R/-) */
-#define U300_SYSCON_PISR                                       (0x0134)
-#define U300_SYSCON_PISR_MASK                                  (0x000F)
-#define U300_SYSCON_PISR_PLL13_UNLOCK_IND                      (0x0008)
-#define U300_SYSCON_PISR_PLL13_LOCK_IND                                (0x0004)
-#define U300_SYSCON_PISR_PLL208_UNLOCK_IND                     (0x0002)
-#define U300_SYSCON_PISR_PLL208_LOCK_IND                       (0x0001)
-/* SC_PLL_IRQ_CLEAR 16 bit (-/W) */
-#define U300_SYSCON_PICLR                                      (0x0138)
-#define U300_SYSCON_PICLR_MASK                                 (0x000F)
-#define U300_SYSCON_PICLR_RWMASK                               (0x0000)
-#define U300_SYSCON_PICLR_PLL13_UNLOCK_SC                      (0x0008)
-#define U300_SYSCON_PICLR_PLL13_LOCK_SC                                (0x0004)
-#define U300_SYSCON_PICLR_PLL208_UNLOCK_SC                     (0x0002)
-#define U300_SYSCON_PICLR_PLL208_LOCK_SC                       (0x0001)
-/* CAMIF_CONTROL 16 bit (-/W) */
-#define U300_SYSCON_CICR                                       (0x013C)
-#define U300_SYSCON_CICR_MASK                                  (0x0FFF)
-#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_MASK             (0x0F00)
-#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_PORT1            (0x0C00)
-#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_PORT0            (0x0300)
-#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_MASK               (0x00F0)
-#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_PORT1              (0x00C0)
-#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_PORT0              (0x0030)
-#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_MASK            (0x000F)
-#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_PORT1           (0x000C)
-#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_PORT0           (0x0003)
-/* Clock activity observability register 0 */
-#define U300_SYSCON_C0OAR                                      (0x140)
-#define U300_SYSCON_C0OAR_MASK                                 (0xFFFF)
-#define U300_SYSCON_C0OAR_VALUE                                        (0xFFFF)
-#define U300_SYSCON_C0OAR_BT_H_CLK                             (0x8000)
-#define U300_SYSCON_C0OAR_ASPB_P_CLK                           (0x4000)
-#define U300_SYSCON_C0OAR_APP_SEMI_H_CLK                       (0x2000)
-#define U300_SYSCON_C0OAR_APP_SEMI_CLK                         (0x1000)
-#define U300_SYSCON_C0OAR_APP_MMC_MSPRO_CLK                    (0x0800)
-#define U300_SYSCON_C0OAR_APP_I2S1_CLK                         (0x0400)
-#define U300_SYSCON_C0OAR_APP_I2S0_CLK                         (0x0200)
-#define U300_SYSCON_C0OAR_APP_CPU_CLK                          (0x0100)
-#define U300_SYSCON_C0OAR_APP_52_CLK                           (0x0080)
-#define U300_SYSCON_C0OAR_APP_208_CLK                          (0x0040)
-#define U300_SYSCON_C0OAR_APP_104_CLK                          (0x0020)
-#define U300_SYSCON_C0OAR_APEX_CLK                             (0x0010)
-#define U300_SYSCON_C0OAR_AHPB_M_H_CLK                         (0x0008)
-#define U300_SYSCON_C0OAR_AHB_CLK                              (0x0004)
-#define U300_SYSCON_C0OAR_AFPB_P_CLK                           (0x0002)
-#define U300_SYSCON_C0OAR_AAIF_CLK                             (0x0001)
-/* Clock activity observability register 1 */
-#define U300_SYSCON_C1OAR                                      (0x144)
-#define U300_SYSCON_C1OAR_MASK                                 (0x3FFE)
-#define U300_SYSCON_C1OAR_VALUE                                        (0x3FFE)
-#define U300_SYSCON_C1OAR_NFIF_F_CLK                           (0x2000)
-#define U300_SYSCON_C1OAR_MSPRO_CLK                            (0x1000)
-#define U300_SYSCON_C1OAR_MMC_P_CLK                            (0x0800)
-#define U300_SYSCON_C1OAR_MMC_CLK                              (0x0400)
-#define U300_SYSCON_C1OAR_KP_P_CLK                             (0x0200)
-#define U300_SYSCON_C1OAR_I2C1_P_CLK                           (0x0100)
-#define U300_SYSCON_C1OAR_I2C0_P_CLK                           (0x0080)
-#define U300_SYSCON_C1OAR_GPIO_CLK                             (0x0040)
-#define U300_SYSCON_C1OAR_EMIF_MPMC_CLK                                (0x0020)
-#define U300_SYSCON_C1OAR_EMIF_H_CLK                           (0x0010)
-#define U300_SYSCON_C1OAR_EVHIST_CLK                           (0x0008)
-#define U300_SYSCON_C1OAR_PPM_CLK                              (0x0004)
-#define U300_SYSCON_C1OAR_DMA_CLK                              (0x0002)
-/* Clock activity observability register 2 */
-#define U300_SYSCON_C2OAR                                      (0x148)
-#define U300_SYSCON_C2OAR_MASK                                 (0x0FFF)
-#define U300_SYSCON_C2OAR_VALUE                                        (0x0FFF)
-#define U300_SYSCON_C2OAR_XGAM_CDI_CLK                         (0x0800)
-#define U300_SYSCON_C2OAR_XGAM_CLK                             (0x0400)
-#define U300_SYSCON_C2OAR_VC_H_CLK                             (0x0200)
-#define U300_SYSCON_C2OAR_VC_CLK                               (0x0100)
-#define U300_SYSCON_C2OAR_UA_P_CLK                             (0x0080)
-#define U300_SYSCON_C2OAR_TMR1_CLK                             (0x0040)
-#define U300_SYSCON_C2OAR_TMR0_CLK                             (0x0020)
-#define U300_SYSCON_C2OAR_SPI_P_CLK                            (0x0010)
-#define U300_SYSCON_C2OAR_PCM_I2S1_CORE_CLK                    (0x0008)
-#define U300_SYSCON_C2OAR_PCM_I2S1_CLK                         (0x0004)
-#define U300_SYSCON_C2OAR_PCM_I2S0_CORE_CLK                    (0x0002)
-#define U300_SYSCON_C2OAR_PCM_I2S0_CLK                         (0x0001)
-
-/* Chip ID register 16bit (R/-) */
-#define U300_SYSCON_CIDR                                       (0x400)
-/* Video IRQ clear 16bit (R/W) */
-#define U300_SYSCON_VICR                                       (0x404)
-#define U300_SYSCON_VICR_VIDEO1_IRQ_CLEAR_ENABLE               (0x0002)
-#define U300_SYSCON_VICR_VIDEO0_IRQ_CLEAR_ENABLE               (0x0001)
-/* SMCR */
-#define U300_SYSCON_SMCR                                       (0x4d0)
-#define U300_SYSCON_SMCR_FIELD_MASK                            (0x000e)
-#define U300_SYSCON_SMCR_SEMI_SREFACK_IND                      (0x0008)
-#define U300_SYSCON_SMCR_SEMI_SREFREQ_ENABLE                   (0x0004)
-#define U300_SYSCON_SMCR_SEMI_EXT_BOOT_MODE_ENABLE             (0x0002)
-/* CPU_SW_DBGEN Software Debug Enable 16bit (R/W) */
-#define U300_SYSCON_CSDR                                       (0x4f0)
-#define U300_SYSCON_CSDR_SW_DEBUG_ENABLE                       (0x0001)
-/* PRINT_CONTROL Print Control 16bit (R/-) */
-#define U300_SYSCON_PCR                                                (0x4f8)
-#define U300_SYSCON_PCR_SERV_IND                               (0x0001)
-/* BOOT_CONTROL 16bit (R/-) */
-#define U300_SYSCON_BCR                                                (0x4fc)
-#define U300_SYSCON_BCR_ACC_CPU_SUBSYS_VINITHI_IND             (0x0400)
-#define U300_SYSCON_BCR_APP_CPU_SUBSYS_VINITHI_IND             (0x0200)
-#define U300_SYSCON_BCR_EXTRA_BOOT_OPTION_MASK                 (0x01FC)
-#define U300_SYSCON_BCR_APP_BOOT_SERV_MASK                     (0x0003)
-
-
-/* CPU clock defines */
-/**
- * CPU high frequency in MHz
- */
-#define SYSCON_CPU_CLOCK_HIGH    208
-/**
- * CPU medium frequency in MHz
- */
-#define SYSCON_CPU_CLOCK_MEDIUM   52
-/**
- * CPU low frequency in MHz
- */
-#define SYSCON_CPU_CLOCK_LOW      13
-
-/* EMIF clock defines */
-/**
- * EMIF high frequency in MHz
- */
-#define SYSCON_EMIF_CLOCK_HIGH   104
-/**
- * EMIF medium frequency in MHz
- */
-#define SYSCON_EMIF_CLOCK_MEDIUM  52
-/**
- * EMIF low frequency in MHz
- */
-#define SYSCON_EMIF_CLOCK_LOW     13
-
-/* AHB clock defines */
-/**
- * AHB high frequency in MHz
- */
-#define SYSCON_AHB_CLOCK_HIGH     52
-/**
- * AHB medium frequency in MHz
- */
-#define SYSCON_AHB_CLOCK_MEDIUM   26
-/**
- * AHB low frequency in MHz
- */
-#define SYSCON_AHB_CLOCK_LOW       7  /* i.e 13/2=6.5MHz */
-
-enum syscon_busmaster {
-  SYSCON_BM_DMAC,
-  SYSCON_BM_XGAM,
-  SYSCON_BM_VIDEO_ENC
-};
-
-/* Selectr a resistor or a set of resistors */
-enum syscon_pull_up_down {
-  SYSCON_PU_KEY_IN_EN,
-  SYSCON_PU_EMIF_1_8_BIT_EN,
-  SYSCON_PU_EMIF_1_16_BIT_EN,
-  SYSCON_PU_EMIF_1_NFIF_READY_EN,
-  SYSCON_PU_EMIF_1_NFIF_WAIT_N_EN,
-};
-
-/*
- * Note that this array must match the order of the array "clk_reg"
- * in syscon.c
- */
-enum syscon_clk {
-  SYSCON_CLKCONTROL_SLOW_BRIDGE,
-  SYSCON_CLKCONTROL_UART,
-  SYSCON_CLKCONTROL_BTR,
-  SYSCON_CLKCONTROL_EH,
-  SYSCON_CLKCONTROL_GPIO,
-  SYSCON_CLKCONTROL_KEYPAD,
-  SYSCON_CLKCONTROL_APP_TIMER,
-  SYSCON_CLKCONTROL_ACC_TIMER,
-  SYSCON_CLKCONTROL_FAST_BRIDGE,
-  SYSCON_CLKCONTROL_I2C0,
-  SYSCON_CLKCONTROL_I2C1,
-  SYSCON_CLKCONTROL_I2S0,
-  SYSCON_CLKCONTROL_I2S1,
-  SYSCON_CLKCONTROL_MMC,
-  SYSCON_CLKCONTROL_SPI,
-  SYSCON_CLKCONTROL_I2S0_CORE,
-  SYSCON_CLKCONTROL_I2S1_CORE,
-  SYSCON_CLKCONTROL_UART1,
-  SYSCON_CLKCONTROL_AAIF,
-  SYSCON_CLKCONTROL_AHB,
-  SYSCON_CLKCONTROL_APEX,
-  SYSCON_CLKCONTROL_CPU,
-  SYSCON_CLKCONTROL_DMA,
-  SYSCON_CLKCONTROL_EMIF,
-  SYSCON_CLKCONTROL_NAND_IF,
-  SYSCON_CLKCONTROL_VIDEO_ENC,
-  SYSCON_CLKCONTROL_XGAM,
-  SYSCON_CLKCONTROL_SEMI,
-  SYSCON_CLKCONTROL_AHB_SUBSYS,
-  SYSCON_CLKCONTROL_MSPRO
-};
-
-enum syscon_sysclk_mode {
-  SYSCON_SYSCLK_DISABLED,
-  SYSCON_SYSCLK_M_CLK,
-  SYSCON_SYSCLK_ACC_FSM,
-  SYSCON_SYSCLK_PLL60_48,
-  SYSCON_SYSCLK_PLL60_60,
-  SYSCON_SYSCLK_ACC_PLL208,
-  SYSCON_SYSCLK_APP_PLL13,
-  SYSCON_SYSCLK_APP_FSM,
-  SYSCON_SYSCLK_RTC,
-  SYSCON_SYSCLK_APP_PLL208
-};
-
-enum syscon_sysclk_req {
-  SYSCON_SYSCLKREQ_DISABLED,
-  SYSCON_SYSCLKREQ_ACTIVE_LOW,
-  SYSCON_SYSCLKREQ_MONITOR
-};
-
-enum syscon_clk_mode {
-  SYSCON_CLKMODE_OFF,
-  SYSCON_CLKMODE_DEFAULT,
-  SYSCON_CLKMODE_LOW,
-  SYSCON_CLKMODE_MEDIUM,
-  SYSCON_CLKMODE_HIGH,
-  SYSCON_CLKMODE_PERMANENT,
-  SYSCON_CLKMODE_ON,
-};
-
-enum syscon_call_mode {
-  SYSCON_CLKCALL_NOWAIT,
-  SYSCON_CLKCALL_WAIT,
-};
-
-int syscon_dc_on(bool keep_power_on);
-int syscon_set_busmaster_active_state(enum syscon_busmaster busmaster,
-                                     bool active);
-bool syscon_get_busmaster_active_state(void);
-int syscon_set_sleep_mask(enum syscon_clk,
-                         bool sleep_ctrl);
-int syscon_config_sysclk(u32 sysclk,
-                        enum syscon_sysclk_mode sysclkmode,
-                        bool inverse,
-                        u32 divisor,
-                        enum syscon_sysclk_req sysclkreq);
-bool syscon_can_turn_off_semi_clock(void);
-
-/* This function is restricted to core.c */
-int syscon_request_normal_power(bool req);
-
-/* This function is restricted to be used by platform_speed.c */
-int syscon_speed_request(enum syscon_call_mode wait_mode,
-                        enum syscon_clk_mode req_clk_mode);
-#endif /* __MACH_SYSCON_H */
diff --git a/arch/arm/mach-u300/include/mach/timex.h b/arch/arm/mach-u300/include/mach/timex.h
deleted file mode 100644 (file)
index f233b72..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- *
- * arch/arm/mach-u300/include/mach/timex.h
- *
- *
- * Copyright (C) 2006-2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * Platform tick rate definition.
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-#ifndef __MACH_TIMEX_H
-#define __MACH_TIMEX_H
-
-/* This is for the APP OS GP1 (General Purpose 1) timer */
-#define CLOCK_TICK_RATE                1000000
-
-#endif
diff --git a/arch/arm/mach-u300/include/mach/u300-regs.h b/arch/arm/mach-u300/include/mach/u300-regs.h
deleted file mode 100644 (file)
index 0320495..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *
- * arch/arm/mach-u300/include/mach/u300-regs.h
- *
- *
- * Copyright (C) 2006-2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * Basic register address definitions in physical memory and
- * some block definitions for core devices like the timer.
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-
-#ifndef __MACH_U300_REGS_H
-#define __MACH_U300_REGS_H
-
-/*
- * These are the large blocks of memory allocated for I/O.
- * the defines are used for setting up the I/O memory mapping.
- */
-
-/* NAND Flash CS0 */
-#define U300_NAND_CS0_PHYS_BASE                0x80000000
-
-/* NFIF */
-#define U300_NAND_IF_PHYS_BASE         0x9f800000
-
-/* ALE, CLE offset for FSMC NAND */
-#define PLAT_NAND_CLE                  (1 << 16)
-#define PLAT_NAND_ALE                  (1 << 17)
-
-/* AHB Peripherals */
-#define U300_AHB_PER_PHYS_BASE         0xa0000000
-#define U300_AHB_PER_VIRT_BASE         0xff010000
-
-/* FAST Peripherals */
-#define U300_FAST_PER_PHYS_BASE                0xc0000000
-#define U300_FAST_PER_VIRT_BASE                0xff020000
-
-/* SLOW Peripherals */
-#define U300_SLOW_PER_PHYS_BASE                0xc0010000
-#define U300_SLOW_PER_VIRT_BASE                0xff000000
-
-/* Boot ROM */
-#define U300_BOOTROM_PHYS_BASE         0xffff0000
-#define U300_BOOTROM_VIRT_BASE         0xffff0000
-
-/* SEMI config base */
-#define U300_SEMI_CONFIG_BASE          0x2FFE0000
-
-/*
- * AHB peripherals
- */
-
-/* AHB Peripherals Bridge Controller */
-#define U300_AHB_BRIDGE_BASE           (U300_AHB_PER_PHYS_BASE+0x0000)
-
-/* Vectored Interrupt Controller 0, servicing 32 interrupts */
-#define U300_INTCON0_BASE              (U300_AHB_PER_PHYS_BASE+0x1000)
-#define U300_INTCON0_VBASE             IOMEM(U300_AHB_PER_VIRT_BASE+0x1000)
-
-/* Vectored Interrupt Controller 1, servicing 32 interrupts */
-#define U300_INTCON1_BASE              (U300_AHB_PER_PHYS_BASE+0x2000)
-#define U300_INTCON1_VBASE             IOMEM(U300_AHB_PER_VIRT_BASE+0x2000)
-
-/* Memory Stick Pro (MSPRO) controller */
-#define U300_MSPRO_BASE                        (U300_AHB_PER_PHYS_BASE+0x3000)
-
-/* EMIF Configuration Area */
-#define U300_EMIF_CFG_BASE             (U300_AHB_PER_PHYS_BASE+0x4000)
-
-
-/*
- * FAST peripherals
- */
-
-/* FAST bridge control */
-#define U300_FAST_BRIDGE_BASE          (U300_FAST_PER_PHYS_BASE+0x0000)
-
-/* MMC/SD controller */
-#define U300_MMCSD_BASE                        (U300_FAST_PER_PHYS_BASE+0x1000)
-
-/* PCM I2S0 controller */
-#define U300_PCM_I2S0_BASE             (U300_FAST_PER_PHYS_BASE+0x2000)
-
-/* PCM I2S1 controller */
-#define U300_PCM_I2S1_BASE             (U300_FAST_PER_PHYS_BASE+0x3000)
-
-/* I2C0 controller */
-#define U300_I2C0_BASE                 (U300_FAST_PER_PHYS_BASE+0x4000)
-
-/* I2C1 controller */
-#define U300_I2C1_BASE                 (U300_FAST_PER_PHYS_BASE+0x5000)
-
-/* SPI controller */
-#define U300_SPI_BASE                  (U300_FAST_PER_PHYS_BASE+0x6000)
-
-/* Fast UART1 on U335 only */
-#define U300_UART1_BASE                        (U300_FAST_PER_PHYS_BASE+0x7000)
-
-/*
- * SLOW peripherals
- */
-
-/* SLOW bridge control */
-#define U300_SLOW_BRIDGE_BASE          (U300_SLOW_PER_PHYS_BASE)
-
-/* SYSCON */
-#define U300_SYSCON_BASE               (U300_SLOW_PER_PHYS_BASE+0x1000)
-#define U300_SYSCON_VBASE              IOMEM(U300_SLOW_PER_VIRT_BASE+0x1000)
-
-/* Watchdog */
-#define U300_WDOG_BASE                 (U300_SLOW_PER_PHYS_BASE+0x2000)
-
-/* UART0 */
-#define U300_UART0_BASE                        (U300_SLOW_PER_PHYS_BASE+0x3000)
-
-/* APP side special timer */
-#define U300_TIMER_APP_BASE            (U300_SLOW_PER_PHYS_BASE+0x4000)
-#define U300_TIMER_APP_VBASE           IOMEM(U300_SLOW_PER_VIRT_BASE+0x4000)
-
-/* Keypad */
-#define U300_KEYPAD_BASE               (U300_SLOW_PER_PHYS_BASE+0x5000)
-
-/* GPIO */
-#define U300_GPIO_BASE                 (U300_SLOW_PER_PHYS_BASE+0x6000)
-
-/* RTC */
-#define U300_RTC_BASE                  (U300_SLOW_PER_PHYS_BASE+0x7000)
-
-/* Bus tracer */
-#define U300_BUSTR_BASE                        (U300_SLOW_PER_PHYS_BASE+0x8000)
-
-/* Event handler (hardware queue) */
-#define U300_EVHIST_BASE               (U300_SLOW_PER_PHYS_BASE+0x9000)
-
-/* Genric Timer */
-#define U300_TIMER_BASE                        (U300_SLOW_PER_PHYS_BASE+0xa000)
-
-/* PPM */
-#define U300_PPM_BASE                  (U300_SLOW_PER_PHYS_BASE+0xb000)
-
-
-/*
- * REST peripherals
- */
-
-/* ISP (image signal processor) */
-#define U300_ISP_BASE                  (0xA0008000)
-
-/* DMA Controller base */
-#define U300_DMAC_BASE                 (0xC0020000)
-
-/* MSL Base */
-#define U300_MSL_BASE                  (0xc0022000)
-
-/* APEX Base */
-#define U300_APEX_BASE                 (0xc0030000)
-
-/* Video Encoder Base */
-#define U300_VIDEOENC_BASE             (0xc0080000)
-
-/* XGAM Base */
-#define U300_XGAM_BASE                 (0xd0000000)
-
-#endif
diff --git a/arch/arm/mach-u300/include/mach/uncompress.h b/arch/arm/mach-u300/include/mach/uncompress.h
deleted file mode 100644 (file)
index 783e7e6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * arch/arm/mach-u300/include/mach/uncompress.h
- *
- * Copyright (C) 2003 ARM Limited
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#define AMBA_UART_DR   (*(volatile unsigned char *)0xc0013000)
-#define AMBA_UART_LCRH (*(volatile unsigned char *)0xc001302C)
-#define AMBA_UART_CR   (*(volatile unsigned char *)0xc0013030)
-#define AMBA_UART_FR   (*(volatile unsigned char *)0xc0013018)
-
-/*
- * This does not append a newline
- */
-static inline void putc(int c)
-{
-       while (AMBA_UART_FR & (1 << 5))
-               barrier();
-
-       AMBA_UART_DR = c;
-}
-
-static inline void flush(void)
-{
-       while (AMBA_UART_FR & (1 << 3))
-               barrier();
-}
-
-/*
- * nothing to do
- */
-#define arch_decomp_setup()
index 9c53f01c62ebe36151b1b114af9b31572005d468..bf40cd478fe95d82d64073bb1ff184c07f25808f 100644 (file)
 #include <linux/device.h>
 #include <linux/signal.h>
 #include <linux/err.h>
+#include <linux/of.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/machine.h>
 #include <linux/regulator/consumer.h>
-/* Those are just for writing in syscon */
-#include <linux/io.h>
-#include <mach/hardware.h>
-#include <mach/syscon.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
+
+/* Power Management Control 16bit (R/W) */
+#define U300_SYSCON_PMCR                                       (0x50)
+#define U300_SYSCON_PMCR_DCON_ENABLE                           (0x0002)
+#define U300_SYSCON_PMCR_PWR_MGNT_ENABLE                       (0x0001)
 
 /*
  * Regulators that power the board and chip and which are
@@ -47,13 +54,28 @@ void u300_pm_poweroff(void)
 /*
  * Hog the regulators needed to power up the board.
  */
-static int __init u300_init_boardpower(void)
+static int __init __u300_init_boardpower(struct platform_device *pdev)
 {
+       struct device_node *np = pdev->dev.of_node;
+       struct device_node *syscon_np;
+       struct regmap *regmap;
        int err;
-       u32 val;
 
        pr_info("U300: setting up board power\n");
-       main_power_15 = regulator_get(NULL, "vana15");
+
+       syscon_np = of_parse_phandle(np, "syscon", 0);
+       if (!syscon_np) {
+               pr_crit("U300: no syscon node\n");
+               return -ENODEV;
+       }
+       regmap = syscon_node_to_regmap(syscon_np);
+       if (!regmap) {
+               pr_crit("U300: could not locate syscon regmap\n");
+               return -ENODEV;
+       }
+
+       main_power_15 = regulator_get(&pdev->dev, "vana15");
+
        if (IS_ERR(main_power_15)) {
                pr_err("could not get vana15");
                return PTR_ERR(main_power_15);
@@ -72,9 +94,8 @@ static int __init u300_init_boardpower(void)
         * the rest of the U300 power management is implemented.
         */
        pr_info("U300: disable system controller pull-up\n");
-       val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMCR);
-       val &= ~U300_SYSCON_PMCR_DCON_ENABLE;
-       writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMCR);
+       regmap_update_bits(regmap, U300_SYSCON_PMCR,
+                          U300_SYSCON_PMCR_DCON_ENABLE, 0);
 
        /* Register globally exported PM poweroff hook */
        pm_power_off = u300_pm_poweroff;
@@ -82,7 +103,31 @@ static int __init u300_init_boardpower(void)
        return 0;
 }
 
+static int __init s365_board_probe(struct platform_device *pdev)
+{
+       return __u300_init_boardpower(pdev);
+}
+
+static const struct of_device_id s365_board_match[] = {
+       { .compatible = "stericsson,s365" },
+       {},
+};
+
+static struct platform_driver s365_board_driver = {
+       .driver         = {
+               .name   = "s365-board",
+               .owner  = THIS_MODULE,
+               .of_match_table = s365_board_match,
+       },
+};
+
 /*
  * So at module init time we hog the regulator!
  */
-module_init(u300_init_boardpower);
+static int __init u300_init_boardpower(void)
+{
+       return platform_driver_probe(&s365_board_driver,
+                                    s365_board_probe);
+}
+
+device_initcall(u300_init_boardpower);
diff --git a/arch/arm/mach-u300/spi.c b/arch/arm/mach-u300/spi.c
deleted file mode 100644 (file)
index 9106982..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * arch/arm/mach-u300/spi.c
- *
- * Copyright (C) 2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- *
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-#include <linux/device.h>
-#include <linux/amba/bus.h>
-#include <linux/spi/spi.h>
-#include <linux/amba/pl022.h>
-#include <linux/platform_data/dma-coh901318.h>
-#include <linux/err.h>
-
-/*
- * The following is for the actual devices on the SSP/SPI bus
- */
-#ifdef CONFIG_MACH_U300_SPIDUMMY
-static void select_dummy_chip(u32 chipselect)
-{
-       pr_debug("CORE: %s called with CS=0x%x (%s)\n",
-                __func__,
-                chipselect,
-                chipselect ? "unselect chip" : "select chip");
-       /*
-        * Here you would write the chip select value to the GPIO pins if
-        * this was a real chip (but this is a loopback dummy).
-        */
-}
-
-struct pl022_config_chip dummy_chip_info = {
-       /* available POLLING_TRANSFER, INTERRUPT_TRANSFER, DMA_TRANSFER */
-       .com_mode = DMA_TRANSFER,
-       .iface = SSP_INTERFACE_MOTOROLA_SPI,
-       /* We can only act as master but SSP_SLAVE is possible in theory */
-       .hierarchy = SSP_MASTER,
-       /* 0 = drive TX even as slave, 1 = do not drive TX as slave */
-       .slave_tx_disable = 0,
-       .rx_lev_trig = SSP_RX_4_OR_MORE_ELEM,
-       .tx_lev_trig = SSP_TX_4_OR_MORE_EMPTY_LOC,
-       .ctrl_len = SSP_BITS_12,
-       .wait_state = SSP_MWIRE_WAIT_ZERO,
-       .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX,
-       /*
-        * This is where you insert a call to a function to enable CS
-        * (usually GPIO) for a certain chip.
-        */
-       .cs_control = select_dummy_chip,
-};
-#endif
-
-static struct spi_board_info u300_spi_devices[] = {
-#ifdef CONFIG_MACH_U300_SPIDUMMY
-       {
-               /* A dummy chip used for loopback tests */
-               .modalias       = "spi-dummy",
-               /* Really dummy, pass in additional chip config here */
-               .platform_data  = NULL,
-               /* This defines how the controller shall handle the device */
-               .controller_data = &dummy_chip_info,
-               /* .irq - no external IRQ routed from this device */
-               .max_speed_hz   = 1000000,
-               .bus_num        = 0, /* Only one bus on this chip */
-               .chip_select    = 0,
-               /* Means SPI_CS_HIGH, change if e.g low CS */
-               .mode           = SPI_MODE_1 | SPI_LOOP,
-       },
-#endif
-};
-
-static struct pl022_ssp_controller ssp_platform_data = {
-       /* If you have several SPI buses this varies, we have only bus 0 */
-       .bus_id = 0,
-       /*
-        * On the APP CPU GPIO 4, 5 and 6 are connected as generic
-        * chip selects for SPI. (Same on U330, U335 and U365.)
-        * TODO: make sure the GPIO driver can select these properly
-        * and do padmuxing accordingly too.
-        */
-       .num_chipselect = 3,
-#ifdef CONFIG_COH901318
-       .enable_dma = 1,
-       .dma_filter = coh901318_filter_id,
-       .dma_rx_param = (void *) U300_DMA_SPI_RX,
-       .dma_tx_param = (void *) U300_DMA_SPI_TX,
-#else
-       .enable_dma = 0,
-#endif
-};
-
-
-void __init u300_spi_init(struct amba_device *adev)
-{
-       adev->dev.platform_data = &ssp_platform_data;
-}
-
-void __init u300_spi_register_board_devices(void)
-{
-       /* Register any SPI devices */
-       spi_register_board_info(u300_spi_devices, ARRAY_SIZE(u300_spi_devices));
-}
diff --git a/arch/arm/mach-u300/spi.h b/arch/arm/mach-u300/spi.h
deleted file mode 100644 (file)
index bd3d867..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * arch/arm/mach-u300/spi.h
- *
- * Copyright (C) 2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- *
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-#ifndef SPI_H
-#define SPI_H
-#include <linux/amba/bus.h>
-
-#ifdef CONFIG_SPI_PL022
-void __init u300_spi_init(struct amba_device *adev);
-void __init u300_spi_register_board_devices(void);
-#else
-/* Compile out SPI support if PL022 is not selected */
-static inline void __init u300_spi_init(struct amba_device *adev)
-{
-}
-static inline void __init u300_spi_register_board_devices(void)
-{
-}
-#endif
-
-#endif
index d9e73209c9b8d7aa0d26b9957ed7401f9b53b61d..390ae5feb1d00f802e117618d75cfae080f74232 100644 (file)
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <linux/irq.h>
-
-#include <mach/hardware.h>
-#include <mach/irqs.h>
+#include <linux/delay.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
 
 /* Generic stuff */
 #include <asm/sched_clock.h>
 #include <asm/mach/map.h>
 #include <asm/mach/time.h>
 
-#include "timer.h"
-
 /*
  * APP side special timer registers
  * This timer contains four timers which can fire an interrupt each.
 #define TICKS_PER_JIFFY ((CLOCK_TICK_RATE + (HZ/2)) / HZ)
 #define US_PER_TICK ((1000000 + (HZ/2)) / HZ)
 
+static void __iomem *u300_timer_base;
+
 /*
  * The u300_set_mode() function is always called first, if we
  * have oneshot timer active, the oneshot scheduling function
@@ -201,28 +201,28 @@ static void u300_set_mode(enum clock_event_mode mode,
        case CLOCK_EVT_MODE_PERIODIC:
                /* Disable interrupts on GPT1 */
                writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+                      u300_timer_base + U300_TIMER_APP_GPT1IE);
                /* Disable GP1 while we're reprogramming it. */
                writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1);
+                      u300_timer_base + U300_TIMER_APP_DGPT1);
                /*
                 * Set the periodic mode to a certain number of ticks per
                 * jiffy.
                 */
                writel(TICKS_PER_JIFFY,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1TC);
+                      u300_timer_base + U300_TIMER_APP_GPT1TC);
                /*
                 * Set continuous mode, so the timer keeps triggering
                 * interrupts.
                 */
                writel(U300_TIMER_APP_SGPT1M_MODE_CONTINUOUS,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT1M);
+                      u300_timer_base + U300_TIMER_APP_SGPT1M);
                /* Enable timer interrupts */
                writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+                      u300_timer_base + U300_TIMER_APP_GPT1IE);
                /* Then enable the OS timer again */
                writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT1);
+                      u300_timer_base + U300_TIMER_APP_EGPT1);
                break;
        case CLOCK_EVT_MODE_ONESHOT:
                /* Just break; here? */
@@ -233,33 +233,33 @@ static void u300_set_mode(enum clock_event_mode mode,
                 */
                /* Disable interrupts on GPT1 */
                writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+                      u300_timer_base + U300_TIMER_APP_GPT1IE);
                /* Disable GP1 while we're reprogramming it. */
                writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1);
+                      u300_timer_base + U300_TIMER_APP_DGPT1);
                /*
                 * Expire far in the future, u300_set_next_event() will be
                 * called soon...
                 */
-               writel(0xFFFFFFFF, U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1TC);
+               writel(0xFFFFFFFF, u300_timer_base + U300_TIMER_APP_GPT1TC);
                /* We run one shot per tick here! */
                writel(U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT1M);
+                      u300_timer_base + U300_TIMER_APP_SGPT1M);
                /* Enable interrupts for this timer */
                writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+                      u300_timer_base + U300_TIMER_APP_GPT1IE);
                /* Enable timer */
                writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT1);
+                      u300_timer_base + U300_TIMER_APP_EGPT1);
                break;
        case CLOCK_EVT_MODE_UNUSED:
        case CLOCK_EVT_MODE_SHUTDOWN:
                /* Disable interrupts on GP1 */
                writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+                      u300_timer_base + U300_TIMER_APP_GPT1IE);
                /* Disable GP1 */
                writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-                      U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1);
+                      u300_timer_base + U300_TIMER_APP_DGPT1);
                break;
        case CLOCK_EVT_MODE_RESUME:
                /* Ignore this call */
@@ -281,27 +281,27 @@ static int u300_set_next_event(unsigned long cycles,
 {
        /* Disable interrupts on GPT1 */
        writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+              u300_timer_base + U300_TIMER_APP_GPT1IE);
        /* Disable GP1 while we're reprogramming it. */
        writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_DGPT1);
+              u300_timer_base + U300_TIMER_APP_DGPT1);
        /* Reset the General Purpose timer 1. */
        writel(U300_TIMER_APP_RGPT1_TIMER_RESET,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_RGPT1);
+              u300_timer_base + U300_TIMER_APP_RGPT1);
        /* IRQ in n * cycles */
-       writel(cycles, U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1TC);
+       writel(cycles, u300_timer_base + U300_TIMER_APP_GPT1TC);
        /*
         * We run one shot per tick here! (This is necessary to reconfigure,
         * the timer will tilt if you don't!)
         */
        writel(U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT1M);
+              u300_timer_base + U300_TIMER_APP_SGPT1M);
        /* Enable timer interrupts */
        writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IE);
+              u300_timer_base + U300_TIMER_APP_GPT1IE);
        /* Then enable the OS timer again */
        writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT1);
+              u300_timer_base + U300_TIMER_APP_EGPT1);
        return 0;
 }
 
@@ -320,8 +320,9 @@ static irqreturn_t u300_timer_interrupt(int irq, void *dev_id)
 {
        struct clock_event_device *evt = &clockevent_u300_1mhz;
        /* ACK/Clear timer IRQ for the APP GPT1 Timer */
+
        writel(U300_TIMER_APP_GPT1IA_IRQ_ACK,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT1IA);
+               u300_timer_base + U300_TIMER_APP_GPT1IA);
        evt->event_handler(evt);
        return IRQ_HANDLED;
 }
@@ -342,65 +343,88 @@ static struct irqaction u300_timer_irq = {
 
 static u32 notrace u300_read_sched_clock(void)
 {
-       return readl(U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2CC);
+       return readl(u300_timer_base + U300_TIMER_APP_GPT2CC);
+}
+
+static unsigned long u300_read_current_timer(void)
+{
+       return readl(u300_timer_base + U300_TIMER_APP_GPT2CC);
 }
 
+static struct delay_timer u300_delay_timer;
 
 /*
  * This sets up the system timers, clock source and clock event.
  */
-void __init u300_timer_init(void)
+static void __init u300_timer_init_of(struct device_node *np)
 {
+       struct resource irq_res;
+       int irq;
        struct clk *clk;
        unsigned long rate;
 
+       u300_timer_base = of_iomap(np, 0);
+       if (!u300_timer_base)
+               panic("could not ioremap system timer\n");
+
+       /* Get the IRQ for the GP1 timer */
+       irq = of_irq_to_resource(np, 2, &irq_res);
+       if (irq <= 0)
+               panic("no IRQ for system timer\n");
+
+       pr_info("U300 GP1 timer @ base: %p, IRQ: %d\n", u300_timer_base, irq);
+
        /* Clock the interrupt controller */
-       clk = clk_get_sys("apptimer", NULL);
+       clk = of_clk_get(np, 0);
        BUG_ON(IS_ERR(clk));
        clk_prepare_enable(clk);
        rate = clk_get_rate(clk);
 
        setup_sched_clock(u300_read_sched_clock, 32, rate);
 
+       u300_delay_timer.read_current_timer = &u300_read_current_timer;
+       u300_delay_timer.freq = rate;
+       register_current_timer_delay(&u300_delay_timer);
+
        /*
         * Disable the "OS" and "DD" timers - these are designed for Symbian!
         * Example usage in cnh1601578 cpu subsystem pd_timer_app.c
         */
        writel(U300_TIMER_APP_CRC_CLOCK_REQUEST_ENABLE,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_CRC);
+               u300_timer_base + U300_TIMER_APP_CRC);
        writel(U300_TIMER_APP_ROST_TIMER_RESET,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_ROST);
+               u300_timer_base + U300_TIMER_APP_ROST);
        writel(U300_TIMER_APP_DOST_TIMER_DISABLE,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_DOST);
+               u300_timer_base + U300_TIMER_APP_DOST);
        writel(U300_TIMER_APP_RDDT_TIMER_RESET,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_RDDT);
+               u300_timer_base + U300_TIMER_APP_RDDT);
        writel(U300_TIMER_APP_DDDT_TIMER_DISABLE,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_DDDT);
+               u300_timer_base + U300_TIMER_APP_DDDT);
 
        /* Reset the General Purpose timer 1. */
        writel(U300_TIMER_APP_RGPT1_TIMER_RESET,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_RGPT1);
+               u300_timer_base + U300_TIMER_APP_RGPT1);
 
        /* Set up the IRQ handler */
-       setup_irq(IRQ_U300_TIMER_APP_GP1, &u300_timer_irq);
+       setup_irq(irq, &u300_timer_irq);
 
        /* Reset the General Purpose timer 2 */
        writel(U300_TIMER_APP_RGPT2_TIMER_RESET,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_RGPT2);
+               u300_timer_base + U300_TIMER_APP_RGPT2);
        /* Set this timer to run around forever */
-       writel(0xFFFFFFFFU, U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2TC);
+       writel(0xFFFFFFFFU, u300_timer_base + U300_TIMER_APP_GPT2TC);
        /* Set continuous mode so it wraps around */
        writel(U300_TIMER_APP_SGPT2M_MODE_CONTINUOUS,
-              U300_TIMER_APP_VBASE + U300_TIMER_APP_SGPT2M);
+              u300_timer_base + U300_TIMER_APP_SGPT2M);
        /* Disable timer interrupts */
        writel(U300_TIMER_APP_GPT2IE_IRQ_DISABLE,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2IE);
+               u300_timer_base + U300_TIMER_APP_GPT2IE);
        /* Then enable the GP2 timer to use as a free running us counter */
        writel(U300_TIMER_APP_EGPT2_TIMER_ENABLE,
-               U300_TIMER_APP_VBASE + U300_TIMER_APP_EGPT2);
+               u300_timer_base + U300_TIMER_APP_EGPT2);
 
        /* Use general purpose timer 2 as clock source */
-       if (clocksource_mmio_init(U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2CC,
+       if (clocksource_mmio_init(u300_timer_base + U300_TIMER_APP_GPT2CC,
                        "GPT2", rate, 300, 32, clocksource_mmio_readl_up))
                pr_err("timer: failed to initialize U300 clock source\n");
 
@@ -413,3 +437,6 @@ void __init u300_timer_init(void)
         * used by hrtimers!
         */
 }
+
+CLOCKSOURCE_OF_DECLARE(u300_timer, "stericsson,u300-apptimer",
+                      u300_timer_init_of);
diff --git a/arch/arm/mach-u300/timer.h b/arch/arm/mach-u300/timer.h
deleted file mode 100644 (file)
index d34287b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-extern void u300_timer_init(void);
diff --git a/arch/arm/mach-u300/u300-gpio.h b/arch/arm/mach-u300/u300-gpio.h
deleted file mode 100644 (file)
index 83f5077..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Individual pin assignments for the B335/S335.
- * Notice that the actual usage of these pins depends on the
- * PAD MUX settings, that is why the same number can potentially
- * appear several times. In the reference design each pin is only
- * used for one purpose. These were determined by inspecting the
- * S365 schematic.
- */
-#define U300_GPIO_PIN_UART_RX          0
-#define U300_GPIO_PIN_UART_TX          1
-#define U300_GPIO_PIN_UART_CTS         2
-#define U300_GPIO_PIN_UART_RTS         3
-#define U300_GPIO_PIN_CAM_MAIN_STANDBY 4 /* Camera MAIN standby */
-#define U300_GPIO_PIN_GPIO05           5 /* Unrouted */
-#define U300_GPIO_PIN_MS_CD            6 /* Memory Stick Card insertion */
-#define U300_GPIO_PIN_GPIO07           7 /* Test point TP2430 */
-
-#define U300_GPIO_PIN_GPIO08           8 /* Test point TP2437 */
-#define U300_GPIO_PIN_GPIO09           9 /* Test point TP2431 */
-#define U300_GPIO_PIN_GPIO10           10 /* Test point TP2432 */
-#define U300_GPIO_PIN_MMC_CLKRET       11 /* Clock return from MMC/SD card */
-#define U300_GPIO_PIN_MMC_CD           12 /* MMC Card insertion detection */
-#define U300_GPIO_PIN_CAM_SUB_STANDBY  13 /* Camera SUB standby */
-#define U300_GPIO_PIN_GPIO14           14 /* Test point TP2436 */
-#define U300_GPIO_PIN_GPIO15           15 /* Unrouted */
-
-#define U300_GPIO_PIN_GPIO16           16 /* Test point TP2438 */
-#define U300_GPIO_PIN_PHFSENSE         17 /* Headphone jack sensing */
-#define U300_GPIO_PIN_GPIO18           18 /* Test point TP2439 */
-#define U300_GPIO_PIN_GPIO19           19 /* Routed somewhere */
-#define U300_GPIO_PIN_GPIO20           20 /* Unrouted */
-#define U300_GPIO_PIN_GPIO21           21 /* Unrouted */
-#define U300_GPIO_PIN_GPIO22           22 /* Unrouted */
-#define U300_GPIO_PIN_GPIO23           23 /* Unrouted */
-
-#define U300_GPIO_PIN_GPIO24           24 /* Unrouted */
-#define U300_GPIO_PIN_GPIO25           25 /* Unrouted */
-#define U300_GPIO_PIN_GPIO26           26 /* Unrouted */
-#define U300_GPIO_PIN_GPIO27           27 /* Unrouted */
-#define U300_GPIO_PIN_GPIO28           28 /* Unrouted */
-#define U300_GPIO_PIN_GPIO29           29 /* Unrouted */
-#define U300_GPIO_PIN_GPIO30           30 /* Unrouted */
-#define U300_GPIO_PIN_GPIO31           31 /* Unrouted */
-
-#define U300_GPIO_PIN_GPIO32           32 /* Unrouted */
-#define U300_GPIO_PIN_GPIO33           33 /* Unrouted */
-#define U300_GPIO_PIN_GPIO34           34 /* Unrouted */
-#define U300_GPIO_PIN_GPIO35           35 /* Unrouted */
-#define U300_GPIO_PIN_GPIO36           36 /* Unrouted */
-#define U300_GPIO_PIN_GPIO37           37 /* Unrouted */
-#define U300_GPIO_PIN_GPIO38           38 /* Unrouted */
-#define U300_GPIO_PIN_GPIO39           39 /* Unrouted */
-
-#define U300_GPIO_PIN_GPIO40           40 /* Unrouted */
-#define U300_GPIO_PIN_GPIO41           41 /* Unrouted */
-#define U300_GPIO_PIN_GPIO42           42 /* Unrouted */
-#define U300_GPIO_PIN_GPIO43           43 /* Unrouted */
-#define U300_GPIO_PIN_GPIO44           44 /* Unrouted */
-#define U300_GPIO_PIN_GPIO45           45 /* Unrouted */
-#define U300_GPIO_PIN_GPIO46           46 /* Unrouted */
-#define U300_GPIO_PIN_GPIO47           47 /* Unrouted */
-
-#define U300_GPIO_PIN_GPIO48           48 /* Unrouted */
-#define U300_GPIO_PIN_GPIO49           49 /* Unrouted */
-#define U300_GPIO_PIN_GPIO50           50 /* Unrouted */
-#define U300_GPIO_PIN_GPIO51           51 /* Unrouted */
-#define U300_GPIO_PIN_GPIO52           52 /* Unrouted */
-#define U300_GPIO_PIN_GPIO53           53 /* Unrouted */
-#define U300_GPIO_PIN_GPIO54           54 /* Unrouted */
-#define U300_GPIO_PIN_GPIO55           55 /* Unrouted */
index 5907e10c37fd6eef7616a1bd6020a986a200c3d9..b8bbabec6310b1a1090a23b60dd84d4009275b0c 100644 (file)
@@ -57,4 +57,13 @@ config ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA
 config ARCH_VEXPRESS_CA9X4
        bool "Versatile Express Cortex-A9x4 tile"
 
+config ARCH_VEXPRESS_DCSCB
+       bool "Dual Cluster System Control Block (DCSCB) support"
+       depends on MCPM
+       select ARM_CCI
+       help
+         Support for the Dual Cluster System Configuration Block (DCSCB).
+         This is needed to provide CPU and cluster power management
+         on RTSM implementing big.LITTLE.
+
 endmenu
index 42703e8b4d3bcdb674b99f4c01425e0dbcb44a21..48ba89a8149ff13aefff4f5ba4119b58059e2dba 100644 (file)
@@ -6,5 +6,6 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
 
 obj-y                                  := v2m.o
 obj-$(CONFIG_ARCH_VEXPRESS_CA9X4)      += ct-ca9x4.o
+obj-$(CONFIG_ARCH_VEXPRESS_DCSCB)      += dcscb.o      dcscb_setup.o
 obj-$(CONFIG_SMP)                      += platsmp.o
 obj-$(CONFIG_HOTPLUG_CPU)              += hotplug.o
index f134cd4a85f1d98e2ca68baa6fed34d5577b0eab..bde4374ab6d5eb119d24a0e167ea13a20598f5c4 100644 (file)
@@ -6,6 +6,8 @@
 
 void vexpress_dt_smp_map_io(void);
 
+bool vexpress_smp_init_ops(void);
+
 extern struct smp_operations   vexpress_smp_ops;
 
 extern void vexpress_cpu_die(unsigned int cpu);
diff --git a/arch/arm/mach-vexpress/dcscb.c b/arch/arm/mach-vexpress/dcscb.c
new file mode 100644 (file)
index 0000000..16d57a8
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+ * arch/arm/mach-vexpress/dcscb.c - Dual Cluster System Configuration Block
+ *
+ * Created by: Nicolas Pitre, May 2012
+ * Copyright:  (C) 2012-2013  Linaro Limited
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/io.h>
+#include <linux/spinlock.h>
+#include <linux/errno.h>
+#include <linux/of_address.h>
+#include <linux/vexpress.h>
+#include <linux/arm-cci.h>
+
+#include <asm/mcpm.h>
+#include <asm/proc-fns.h>
+#include <asm/cacheflush.h>
+#include <asm/cputype.h>
+#include <asm/cp15.h>
+
+
+#define RST_HOLD0      0x0
+#define RST_HOLD1      0x4
+#define SYS_SWRESET    0x8
+#define RST_STAT0      0xc
+#define RST_STAT1      0x10
+#define EAG_CFG_R      0x20
+#define EAG_CFG_W      0x24
+#define KFC_CFG_R      0x28
+#define KFC_CFG_W      0x2c
+#define DCS_CFG_R      0x30
+
+/*
+ * We can't use regular spinlocks. In the switcher case, it is possible
+ * for an outbound CPU to call power_down() while its inbound counterpart
+ * is already live using the same logical CPU number which trips lockdep
+ * debugging.
+ */
+static arch_spinlock_t dcscb_lock = __ARCH_SPIN_LOCK_UNLOCKED;
+
+static void __iomem *dcscb_base;
+static int dcscb_use_count[4][2];
+static int dcscb_allcpus_mask[2];
+
+static int dcscb_power_up(unsigned int cpu, unsigned int cluster)
+{
+       unsigned int rst_hold, cpumask = (1 << cpu);
+       unsigned int all_mask = dcscb_allcpus_mask[cluster];
+
+       pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
+       if (cpu >= 4 || cluster >= 2)
+               return -EINVAL;
+
+       /*
+        * Since this is called with IRQs enabled, and no arch_spin_lock_irq
+        * variant exists, we need to disable IRQs manually here.
+        */
+       local_irq_disable();
+       arch_spin_lock(&dcscb_lock);
+
+       dcscb_use_count[cpu][cluster]++;
+       if (dcscb_use_count[cpu][cluster] == 1) {
+               rst_hold = readl_relaxed(dcscb_base + RST_HOLD0 + cluster * 4);
+               if (rst_hold & (1 << 8)) {
+                       /* remove cluster reset and add individual CPU's reset */
+                       rst_hold &= ~(1 << 8);
+                       rst_hold |= all_mask;
+               }
+               rst_hold &= ~(cpumask | (cpumask << 4));
+               writel_relaxed(rst_hold, dcscb_base + RST_HOLD0 + cluster * 4);
+       } else if (dcscb_use_count[cpu][cluster] != 2) {
+               /*
+                * The only possible values are:
+                * 0 = CPU down
+                * 1 = CPU (still) up
+                * 2 = CPU requested to be up before it had a chance
+                *     to actually make itself down.
+                * Any other value is a bug.
+                */
+               BUG();
+       }
+
+       arch_spin_unlock(&dcscb_lock);
+       local_irq_enable();
+
+       return 0;
+}
+
+static void dcscb_power_down(void)
+{
+       unsigned int mpidr, cpu, cluster, rst_hold, cpumask, all_mask;
+       bool last_man = false, skip_wfi = false;
+
+       mpidr = read_cpuid_mpidr();
+       cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
+       cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
+       cpumask = (1 << cpu);
+       all_mask = dcscb_allcpus_mask[cluster];
+
+       pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
+       BUG_ON(cpu >= 4 || cluster >= 2);
+
+       __mcpm_cpu_going_down(cpu, cluster);
+
+       arch_spin_lock(&dcscb_lock);
+       BUG_ON(__mcpm_cluster_state(cluster) != CLUSTER_UP);
+       dcscb_use_count[cpu][cluster]--;
+       if (dcscb_use_count[cpu][cluster] == 0) {
+               rst_hold = readl_relaxed(dcscb_base + RST_HOLD0 + cluster * 4);
+               rst_hold |= cpumask;
+               if (((rst_hold | (rst_hold >> 4)) & all_mask) == all_mask) {
+                       rst_hold |= (1 << 8);
+                       last_man = true;
+               }
+               writel_relaxed(rst_hold, dcscb_base + RST_HOLD0 + cluster * 4);
+       } else if (dcscb_use_count[cpu][cluster] == 1) {
+               /*
+                * A power_up request went ahead of us.
+                * Even if we do not want to shut this CPU down,
+                * the caller expects a certain state as if the WFI
+                * was aborted.  So let's continue with cache cleaning.
+                */
+               skip_wfi = true;
+       } else
+               BUG();
+
+       if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
+               arch_spin_unlock(&dcscb_lock);
+
+               /*
+                * Flush all cache levels for this cluster.
+                *
+                * A15/A7 can hit in the cache with SCTLR.C=0, so we don't need
+                * a preliminary flush here for those CPUs.  At least, that's
+                * the theory -- without the extra flush, Linux explodes on
+                * RTSM (to be investigated).
+                */
+               flush_cache_all();
+               set_cr(get_cr() & ~CR_C);
+               flush_cache_all();
+
+               /*
+                * This is a harmless no-op.  On platforms with a real
+                * outer cache this might either be needed or not,
+                * depending on where the outer cache sits.
+                */
+               outer_flush_all();
+
+               /* Disable local coherency by clearing the ACTLR "SMP" bit: */
+               set_auxcr(get_auxcr() & ~(1 << 6));
+
+               /*
+                * Disable cluster-level coherency by masking
+                * incoming snoops and DVM messages:
+                */
+               cci_disable_port_by_cpu(mpidr);
+
+               __mcpm_outbound_leave_critical(cluster, CLUSTER_DOWN);
+       } else {
+               arch_spin_unlock(&dcscb_lock);
+
+               /*
+                * Flush the local CPU cache.
+                *
+                * A15/A7 can hit in the cache with SCTLR.C=0, so we don't need
+                * a preliminary flush here for those CPUs.  At least, that's
+                * the theory -- without the extra flush, Linux explodes on
+                * RTSM (to be investigated).
+                */
+               flush_cache_louis();
+               set_cr(get_cr() & ~CR_C);
+               flush_cache_louis();
+
+               /* Disable local coherency by clearing the ACTLR "SMP" bit: */
+               set_auxcr(get_auxcr() & ~(1 << 6));
+       }
+
+       __mcpm_cpu_down(cpu, cluster);
+
+       /* Now we are prepared for power-down, do it: */
+       dsb();
+       if (!skip_wfi)
+               wfi();
+
+       /* Not dead at this point?  Let our caller cope. */
+}
+
+static const struct mcpm_platform_ops dcscb_power_ops = {
+       .power_up       = dcscb_power_up,
+       .power_down     = dcscb_power_down,
+};
+
+static void __init dcscb_usage_count_init(void)
+{
+       unsigned int mpidr, cpu, cluster;
+
+       mpidr = read_cpuid_mpidr();
+       cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
+       cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
+
+       pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
+       BUG_ON(cpu >= 4 || cluster >= 2);
+       dcscb_use_count[cpu][cluster] = 1;
+}
+
+extern void dcscb_power_up_setup(unsigned int affinity_level);
+
+static int __init dcscb_init(void)
+{
+       struct device_node *node;
+       unsigned int cfg;
+       int ret;
+
+       if (!cci_probed())
+               return -ENODEV;
+
+       node = of_find_compatible_node(NULL, NULL, "arm,rtsm,dcscb");
+       if (!node)
+               return -ENODEV;
+       dcscb_base = of_iomap(node, 0);
+       if (!dcscb_base)
+               return -EADDRNOTAVAIL;
+       cfg = readl_relaxed(dcscb_base + DCS_CFG_R);
+       dcscb_allcpus_mask[0] = (1 << (((cfg >> 16) >> (0 << 2)) & 0xf)) - 1;
+       dcscb_allcpus_mask[1] = (1 << (((cfg >> 16) >> (1 << 2)) & 0xf)) - 1;
+       dcscb_usage_count_init();
+
+       ret = mcpm_platform_register(&dcscb_power_ops);
+       if (!ret)
+               ret = mcpm_sync_init(dcscb_power_up_setup);
+       if (ret) {
+               iounmap(dcscb_base);
+               return ret;
+       }
+
+       pr_info("VExpress DCSCB support installed\n");
+
+       /*
+        * Future entries into the kernel can now go
+        * through the cluster entry vectors.
+        */
+       vexpress_flags_set(virt_to_phys(mcpm_entry_point));
+
+       return 0;
+}
+
+early_initcall(dcscb_init);
diff --git a/arch/arm/mach-vexpress/dcscb_setup.S b/arch/arm/mach-vexpress/dcscb_setup.S
new file mode 100644 (file)
index 0000000..4bb7fbe
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * arch/arm/include/asm/dcscb_setup.S
+ *
+ * Created by:  Dave Martin, 2012-06-22
+ * Copyright:   (C) 2012-2013  Linaro Limited
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/linkage.h>
+
+
+ENTRY(dcscb_power_up_setup)
+
+       cmp     r0, #0                  @ check affinity level
+       beq     2f
+
+/*
+ * Enable cluster-level coherency, in preparation for turning on the MMU.
+ * The ACTLR SMP bit does not need to be set here, because cpu_resume()
+ * already restores that.
+ *
+ * A15/A7 may not require explicit L2 invalidation on reset, dependent
+ * on hardware integration decisions.
+ * For now, this code assumes that L2 is either already invalidated,
+ * or invalidation is not required.
+ */
+
+       b       cci_enable_port_for_self
+
+2:     @ Implementation-specific local CPU setup operations should go here,
+       @ if any.  In this case, there is nothing to do.
+
+       bx      lr
+
+ENDPROC(dcscb_power_up_setup)
index dc1ace55d5578bdcb96930fa7dabde0bb692ddd9..993c9ae5dc5e16f01605770da107bfb20b1a027f 100644 (file)
 #include <linux/errno.h>
 #include <linux/smp.h>
 #include <linux/io.h>
+#include <linux/of.h>
 #include <linux/of_fdt.h>
 #include <linux/vexpress.h>
 
+#include <asm/mcpm.h>
 #include <asm/smp_scu.h>
 #include <asm/mach/map.h>
 
@@ -203,3 +205,21 @@ struct smp_operations __initdata vexpress_smp_ops = {
        .cpu_die                = vexpress_cpu_die,
 #endif
 };
+
+bool __init vexpress_smp_init_ops(void)
+{
+#ifdef CONFIG_MCPM
+       /*
+        * The best way to detect a multi-cluster configuration at the moment
+        * is to look for the presence of a CCI in the system.
+        * Override the default vexpress_smp_ops if so.
+        */
+       struct device_node *node;
+       node = of_find_compatible_node(NULL, NULL, "arm,cci-400");
+       if (node && of_device_is_available(node)) {
+               mcpm_smp_set_ops();
+               return true;
+       }
+#endif
+       return false;
+}
index d6016970e2fe1aad9694c699a08572acb5b17151..95a469e23e378078af77ffcd9eecc9b29e5ff264 100644 (file)
@@ -455,6 +455,7 @@ static const char * const v2m_dt_match[] __initconst = {
 DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express")
        .dt_compat      = v2m_dt_match,
        .smp            = smp_ops(vexpress_smp_ops),
+       .smp_init       = smp_init_ops(vexpress_smp_init_ops),
        .map_io         = v2m_dt_map_io,
        .init_early     = v2m_dt_init_early,
        .init_time      = v2m_dt_timer_init,
index 042afc1f8c4425f4ce887910dd4a5daddb4e8615..7ddbfa60227f8e267acc58bca381428fdb99e294 100644 (file)
@@ -3,4 +3,3 @@
 #
 
 obj-y                                  := virt.o
-obj-$(CONFIG_SMP)                      += platsmp.o
diff --git a/arch/arm/mach-virt/platsmp.c b/arch/arm/mach-virt/platsmp.c
deleted file mode 100644 (file)
index f4143f5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Dummy Virtual Machine - does what it says on the tin.
- *
- * Copyright (C) 2012 ARM Ltd
- * Author: Will Deacon <will.deacon@arm.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <linux/init.h>
-#include <linux/smp.h>
-#include <linux/of.h>
-
-#include <asm/psci.h>
-#include <asm/smp_plat.h>
-
-extern void secondary_startup(void);
-
-static void __init virt_smp_init_cpus(void)
-{
-}
-
-static void __init virt_smp_prepare_cpus(unsigned int max_cpus)
-{
-}
-
-static int __cpuinit virt_boot_secondary(unsigned int cpu,
-                                        struct task_struct *idle)
-{
-       if (psci_ops.cpu_on)
-               return psci_ops.cpu_on(cpu_logical_map(cpu),
-                                      __pa(secondary_startup));
-       return -ENODEV;
-}
-
-struct smp_operations __initdata virt_smp_ops = {
-       .smp_init_cpus          = virt_smp_init_cpus,
-       .smp_prepare_cpus       = virt_smp_prepare_cpus,
-       .smp_boot_secondary     = virt_boot_secondary,
-};
index bdf05f41ca903141a34e30b1baa61a7e867a9fa4..b184e57d1854a552346aba0c985d060ce73775b2 100644 (file)
@@ -35,10 +35,7 @@ static const char *virt_dt_match[] = {
        NULL
 };
 
-extern struct smp_operations virt_smp_ops;
-
 DT_MACHINE_START(VIRT, "Dummy Virtual Machine")
        .init_machine   = virt_init,
-       .smp            = smp_ops(virt_smp_ops),
        .dt_compat      = virt_dt_match,
 MACHINE_END
index c70969b9c258d47a49880699a621f9e2c58997b3..50d008d8f87f17cf7e2f1c0c0a65e443d4b8cc2a 100644 (file)
@@ -117,7 +117,7 @@ int __init zynq_slcr_init(void)
 
        pr_info("%s mapped to %p\n", np->name, zynq_slcr_base);
 
-       xilinx_zynq_clocks_init(zynq_slcr_base);
+       zynq_clock_init(zynq_slcr_base);
 
        of_node_put(np);
 
index 35955b54944c1c5ed39bf051667b337aeaa7dee3..9e8101ecd63e6a2b158849b74e14921a2b273177 100644 (file)
@@ -397,6 +397,15 @@ config CPU_V7
        select CPU_PABRT_V7
        select CPU_TLB_V7 if MMU
 
+# ARMv7M
+config CPU_V7M
+       bool
+       select CPU_32v7M
+       select CPU_ABRT_NOMMU
+       select CPU_CACHE_NOP
+       select CPU_PABRT_LEGACY
+       select CPU_THUMBONLY
+
 config CPU_THUMBONLY
        bool
        # There are no CPUs available with MMU that don't implement an ARM ISA:
@@ -441,6 +450,9 @@ config CPU_32v6K
 config CPU_32v7
        bool
 
+config CPU_32v7M
+       bool
+
 # The abort model
 config CPU_ABRT_NOMMU
        bool
@@ -491,6 +503,9 @@ config CPU_CACHE_V6
 config CPU_CACHE_V7
        bool
 
+config CPU_CACHE_NOP
+       bool
+
 config CPU_CACHE_VIVT
        bool
 
@@ -613,7 +628,11 @@ config ARCH_DMA_ADDR_T_64BIT
 
 config ARM_THUMB
        bool "Support Thumb user binaries" if !CPU_THUMBONLY
-       depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V6K || CPU_V7 || CPU_FEROCEON
+       depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || \
+               CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || \
+               CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
+               CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V6K || \
+               CPU_V7 || CPU_FEROCEON || CPU_V7M
        default y
        help
          Say Y if you want to include kernel support for running user space
index 9e51be96f635b5945b978bed2c6978fd3d2b61ba..ee558a01f390925ca016f901697091660be48af4 100644 (file)
@@ -39,6 +39,7 @@ obj-$(CONFIG_CPU_CACHE_V4WB)  += cache-v4wb.o
 obj-$(CONFIG_CPU_CACHE_V6)     += cache-v6.o
 obj-$(CONFIG_CPU_CACHE_V7)     += cache-v7.o
 obj-$(CONFIG_CPU_CACHE_FA)     += cache-fa.o
+obj-$(CONFIG_CPU_CACHE_NOP)    += cache-nop.o
 
 AFLAGS_cache-v6.o      :=-Wa,-march=armv6
 AFLAGS_cache-v7.o      :=-Wa,-march=armv7-a
@@ -87,6 +88,7 @@ obj-$(CONFIG_CPU_FEROCEON)    += proc-feroceon.o
 obj-$(CONFIG_CPU_V6)           += proc-v6.o
 obj-$(CONFIG_CPU_V6K)          += proc-v6.o
 obj-$(CONFIG_CPU_V7)           += proc-v7.o
+obj-$(CONFIG_CPU_V7M)          += proc-v7m.o
 
 AFLAGS_proc-v6.o       :=-Wa,-march=armv6
 AFLAGS_proc-v7.o       :=-Wa,-march=armv7-a
diff --git a/arch/arm/mm/cache-nop.S b/arch/arm/mm/cache-nop.S
new file mode 100644 (file)
index 0000000..8e12ddc
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <linux/init.h>
+
+#include "proc-macros.S"
+
+ENTRY(nop_flush_icache_all)
+       mov     pc, lr
+ENDPROC(nop_flush_icache_all)
+
+       .globl nop_flush_kern_cache_all
+       .equ nop_flush_kern_cache_all, nop_flush_icache_all
+
+       .globl nop_flush_kern_cache_louis
+       .equ nop_flush_kern_cache_louis, nop_flush_icache_all
+
+       .globl nop_flush_user_cache_all
+       .equ nop_flush_user_cache_all, nop_flush_icache_all
+
+       .globl nop_flush_user_cache_range
+       .equ nop_flush_user_cache_range, nop_flush_icache_all
+
+       .globl nop_coherent_kern_range
+       .equ nop_coherent_kern_range, nop_flush_icache_all
+
+ENTRY(nop_coherent_user_range)
+       mov     r0, 0
+       mov     pc, lr
+ENDPROC(nop_coherent_user_range)
+
+       .globl nop_flush_kern_dcache_area
+       .equ nop_flush_kern_dcache_area, nop_flush_icache_all
+
+       .globl nop_dma_flush_range
+       .equ nop_dma_flush_range, nop_flush_icache_all
+
+       .globl nop_dma_map_area
+       .equ nop_dma_map_area, nop_flush_icache_all
+
+       .globl nop_dma_unmap_area
+       .equ nop_dma_unmap_area, nop_flush_icache_all
+
+       __INITDATA
+
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions nop
index eb5293a69a8440c43018ba3732b60e1cec96a710..5a3aba614a405b8290c02a4aedaa2d81e00ee40e 100644 (file)
 
 void __init arm_mm_memblock_reserve(void)
 {
+#ifndef CONFIG_CPU_V7M
        /*
         * Register the exception vector page.
         * some architectures which the DRAM is the exception vector to trap,
         * alloc_page breaks with error, although it is not NULL, but "0."
         */
        memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE);
+#else /* ifndef CONFIG_CPU_V7M */
+       /*
+        * There is no dedicated vector page on V7-M. So nothing needs to be
+        * reserved here.
+        */
+#endif
 }
 
 void __init sanity_check_meminfo(void)
diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S
new file mode 100644 (file)
index 0000000..0c93588
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ *  linux/arch/arm/mm/proc-v7m.S
+ *
+ *  Copyright (C) 2008 ARM Ltd.
+ *  Copyright (C) 2001 Deep Blue Solutions Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ *  This is the "shell" of the ARMv7-M processor support.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/v7m.h>
+#include "proc-macros.S"
+
+ENTRY(cpu_v7m_proc_init)
+       mov     pc, lr
+ENDPROC(cpu_v7m_proc_init)
+
+ENTRY(cpu_v7m_proc_fin)
+       mov     pc, lr
+ENDPROC(cpu_v7m_proc_fin)
+
+/*
+ *     cpu_v7m_reset(loc)
+ *
+ *     Perform a soft reset of the system.  Put the CPU into the
+ *     same state as it would be if it had been reset, and branch
+ *     to what would be the reset vector.
+ *
+ *     - loc   - location to jump to for soft reset
+ */
+       .align  5
+ENTRY(cpu_v7m_reset)
+       mov     pc, r0
+ENDPROC(cpu_v7m_reset)
+
+/*
+ *     cpu_v7m_do_idle()
+ *
+ *     Idle the processor (eg, wait for interrupt).
+ *
+ *     IRQs are already disabled.
+ */
+ENTRY(cpu_v7m_do_idle)
+       wfi
+       mov     pc, lr
+ENDPROC(cpu_v7m_do_idle)
+
+ENTRY(cpu_v7m_dcache_clean_area)
+       mov     pc, lr
+ENDPROC(cpu_v7m_dcache_clean_area)
+
+/*
+ * There is no MMU, so here is nothing to do.
+ */
+ENTRY(cpu_v7m_switch_mm)
+       mov     pc, lr
+ENDPROC(cpu_v7m_switch_mm)
+
+.globl cpu_v7m_suspend_size
+.equ   cpu_v7m_suspend_size, 0
+
+#ifdef CONFIG_ARM_CPU_SUSPEND
+ENTRY(cpu_v7m_do_suspend)
+       mov     pc, lr
+ENDPROC(cpu_v7m_do_suspend)
+
+ENTRY(cpu_v7m_do_resume)
+       mov     pc, lr
+ENDPROC(cpu_v7m_do_resume)
+#endif
+
+       .section ".text.init", #alloc, #execinstr
+
+/*
+ *     __v7m_setup
+ *
+ *     This should be able to cover all ARMv7-M cores.
+ */
+__v7m_setup:
+       @ Configure the vector table base address
+       ldr     r0, =BASEADDR_V7M_SCB
+       ldr     r12, =vector_table
+       str     r12, [r0, V7M_SCB_VTOR]
+
+       @ enable UsageFault, BusFault and MemManage fault.
+       ldr     r5, [r0, #V7M_SCB_SHCSR]
+       orr     r5, #(V7M_SCB_SHCSR_USGFAULTENA | V7M_SCB_SHCSR_BUSFAULTENA | V7M_SCB_SHCSR_MEMFAULTENA)
+       str     r5, [r0, #V7M_SCB_SHCSR]
+
+       @ Lower the priority of the SVC and PendSV exceptions
+       mov     r5, #0x80000000
+       str     r5, [r0, V7M_SCB_SHPR2] @ set SVC priority
+       mov     r5, #0x00800000
+       str     r5, [r0, V7M_SCB_SHPR3] @ set PendSV priority
+
+       @ SVC to run the kernel in this mode
+       adr     r1, BSYM(1f)
+       ldr     r5, [r12, #11 * 4]      @ read the SVC vector entry
+       str     r1, [r12, #11 * 4]      @ write the temporary SVC vector entry
+       mov     r6, lr                  @ save LR
+       mov     r7, sp                  @ save SP
+       ldr     sp, =__v7m_setup_stack_top
+       cpsie   i
+       svc     #0
+1:     cpsid   i
+       str     r5, [r12, #11 * 4]      @ restore the original SVC vector entry
+       mov     lr, r6                  @ restore LR
+       mov     sp, r7                  @ restore SP
+
+       @ Special-purpose control register
+       mov     r1, #1
+       msr     control, r1             @ Thread mode has unpriviledged access
+
+       @ Configure the System Control Register to ensure 8-byte stack alignment
+       @ Note the STKALIGN bit is either RW or RAO.
+       ldr     r12, [r0, V7M_SCB_CCR]  @ system control register
+       orr     r12, #V7M_SCB_CCR_STKALIGN
+       str     r12, [r0, V7M_SCB_CCR]
+       mov     pc, lr
+ENDPROC(__v7m_setup)
+
+       define_processor_functions v7m, dabort=nommu_early_abort, pabort=legacy_pabort, nommu=1
+
+       .section ".rodata"
+       string cpu_arch_name, "armv7m"
+       string cpu_elf_name "v7m"
+       string cpu_v7m_name "ARMv7-M"
+
+       .section ".proc.info.init", #alloc, #execinstr
+
+       /*
+        * Match any ARMv7-M processor core.
+        */
+       .type   __v7m_proc_info, #object
+__v7m_proc_info:
+       .long   0x000f0000              @ Required ID value
+       .long   0x000f0000              @ Mask for ID
+       .long   0                       @ proc_info_list.__cpu_mm_mmu_flags
+       .long   0                       @ proc_info_list.__cpu_io_mmu_flags
+       b       __v7m_setup             @ proc_info_list.__cpu_flush
+       .long   cpu_arch_name
+       .long   cpu_elf_name
+       .long   HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT
+       .long   cpu_v7m_name
+       .long   v7m_processor_functions @ proc_info_list.proc
+       .long   0                       @ proc_info_list.tlb
+       .long   0                       @ proc_info_list.user
+       .long   nop_cache_fns           @ proc_info_list.cache
+       .size   __v7m_proc_info, . - __v7m_proc_info
+
+__v7m_setup_stack:
+       .space  4 * 8                           @ 8 registers
+__v7m_setup_stack_top:
index ec68155a8bf1b8521562d5b9733ed80bc91be203..3dc5cbea86cc9cc838d5b864f0eabaed76777e23 100644 (file)
@@ -6,7 +6,7 @@
 
 config PLAT_SAMSUNG
        bool
-       depends on PLAT_S3C24XX || ARCH_S3C64XX || PLAT_S5P
+       depends on PLAT_S3C24XX || ARCH_S3C64XX || PLAT_S5P || ARCH_EXYNOS
        default y
        select GENERIC_IRQ_CHIP
        select NO_IOPORT
@@ -15,12 +15,10 @@ config PLAT_SAMSUNG
 
 config PLAT_S5P
        bool
-       depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
+       depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
        default y
        select ARCH_REQUIRE_GPIOLIB
-       select ARM_GIC if ARCH_EXYNOS
-       select ARM_VIC if !ARCH_EXYNOS
-       select GIC_NON_BANKED if ARCH_EXYNOS4
+       select ARM_VIC
        select NO_IOPORT
        select PLAT_SAMSUNG
        select S3C_GPIO_TRACK
@@ -60,6 +58,20 @@ config S3C_LOWLEVEL_UART_PORT
          this configuration should be between zero and two. The port
          must have been initialised by the boot-loader before use.
 
+config SAMSUNG_ATAGS
+       def_bool n
+       depends on !ARCH_MULTIPLATFORM
+       depends on ATAGS
+       help
+          This option enables ATAGS based boot support code for
+          Samsung platforms, including static platform devices, legacy
+          clock, timer and interrupt initialization, etc.
+
+          Platforms that support only DT based boot need not to select
+          this option.
+
+if SAMSUNG_ATAGS
+
 # timer options
 
 config SAMSUNG_HRT
@@ -367,11 +379,6 @@ config S5P_DEV_JPEG
        help
          Compile in platform device definitions for JPEG codec
 
-config S5P_DEV_MFC
-       bool
-       help
-         Compile in setup memory (init) code for MFC
-
 config S5P_DEV_ONENAND
        bool
        help
@@ -412,6 +419,21 @@ config S3C_DMA
        help
          Internal configuration for S3C DMA core
 
+config S5P_IRQ_PM
+       bool
+       default y if S5P_PM
+       help
+         Legacy IRQ power management for S5P platforms
+
+config SAMSUNG_PM_GPIO
+       bool
+       default y if GPIO_SAMSUNG && PM
+       help
+         Include legacy GPIO power management code for platforms not using
+         pinctrl-samsung driver.
+
+endif
+
 config SAMSUNG_DMADEV
        bool
        select ARM_AMBA
@@ -421,6 +443,11 @@ config SAMSUNG_DMADEV
        help
          Use DMA device engine for PL330 DMAC.
 
+config S5P_DEV_MFC
+       bool
+       help
+         Compile in setup memory (init) code for MFC
+
 comment "Power management"
 
 config SAMSUNG_PM_DEBUG
index 03cea140cfd0b3eb7f6b3606187ccdf48378711b..98d07d8fc7a71ffa869fa397cc8f74977264f17c 100644 (file)
@@ -31,10 +31,10 @@ obj-$(CONFIG_S3C_ADC)       += adc.o
 
 # devices
 
-obj-y                          += platformdata.o
+obj-$(CONFIG_SAMSUNG_ATAGS)    += platformdata.o
 
-obj-y                          += devs.o
-obj-y                          += dev-uart.o
+obj-$(CONFIG_SAMSUNG_ATAGS)    += devs.o
+obj-$(CONFIG_SAMSUNG_ATAGS)    += dev-uart.o
 obj-$(CONFIG_S5P_DEV_MFC)      += s5p-dev-mfc.o
 obj-$(CONFIG_S5P_DEV_UART)     += s5p-dev-uart.o
 
@@ -52,11 +52,12 @@ obj-$(CONFIG_SAMSUNG_DMADEV)        += dma-ops.o
 # PM support
 
 obj-$(CONFIG_PM)               += pm.o
-obj-$(CONFIG_PM)               += pm-gpio.o
+obj-$(CONFIG_SAMSUNG_PM_GPIO)  += pm-gpio.o
 obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o
 
 obj-$(CONFIG_SAMSUNG_WAKEMASK) += wakeup-mask.o
 obj-$(CONFIG_SAMSUNG_WDT_RESET)        += watchdog-reset.o
 
-obj-$(CONFIG_S5P_PM)           += s5p-pm.o s5p-irq-pm.o
+obj-$(CONFIG_S5P_PM)           += s5p-pm.o
+obj-$(CONFIG_S5P_IRQ_PM)       += s5p-irq-pm.o
 obj-$(CONFIG_S5P_SLEEP)                += s5p-sleep.o
index d01576318b2c82e445a0fb01b6781b077f88bb19..bd3a6db14cbb65987c3c20d1db3e9ccd8a5d4db6 100644 (file)
@@ -28,7 +28,6 @@ struct s3c24xx_dma_map {
        const char              *name;
 
        unsigned long            channels[S3C_DMA_CHANNELS];
-       unsigned long            channels_rx[S3C_DMA_CHANNELS];
 };
 
 struct s3c24xx_dma_selection {
@@ -38,10 +37,6 @@ struct s3c24xx_dma_selection {
 
        void    (*select)(struct s3c2410_dma_chan *chan,
                          struct s3c24xx_dma_map *map);
-
-       void    (*direction)(struct s3c2410_dma_chan *chan,
-                            struct s3c24xx_dma_map *map,
-                            enum dma_data_direction dir);
 };
 
 extern int s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel);
index f6fcadeee969f323197e0a84d4b89f58ceef3d8c..5d47ca35cabde40cfa56ae05344a275909ac9e72 100644 (file)
@@ -166,6 +166,7 @@ extern void s3c_pm_check_store(void);
  */
 extern void s3c_pm_configure_extint(void);
 
+#ifdef CONFIG_GPIO_SAMSUNG
 /**
  * samsung_pm_restore_gpios() - restore the state of the gpios after sleep.
  *
@@ -181,6 +182,10 @@ extern void samsung_pm_restore_gpios(void);
  * Save the GPIO states for resotration on resume. See samsung_pm_restore_gpios().
  */
 extern void samsung_pm_save_gpios(void);
+#else
+static inline void samsung_pm_restore_gpios(void) {}
+static inline void samsung_pm_save_gpios(void) {}
+#endif
 
 extern void s3c_pm_save_core(void);
 extern void s3c_pm_restore_core(void);
index 79d10fca9090268b4e817cc299f2021634a27d17..3e5c4619caa5ef26cc9fdea0940856c09f639390 100644 (file)
@@ -87,7 +87,7 @@ void __init s3c24xx_init_clocks(int xtal)
 }
 
 /* uart management */
-
+#if IS_ENABLED(CONFIG_SAMSUNG_ATAGS)
 static int nr_uarts __initdata = 0;
 
 static struct s3c2410_uartcfg uart_cfgs[CONFIG_SERIAL_SAMSUNG_UARTS];
@@ -134,11 +134,12 @@ void __init s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no)
        if (cpu == NULL)
                return;
 
-       if (cpu->init_uarts == NULL) {
+       if (cpu->init_uarts == NULL && IS_ENABLED(CONFIG_SAMSUNG_ATAGS)) {
                printk(KERN_ERR "s3c24xx_init_uarts: cpu has no uart init\n");
        } else
                (cpu->init_uarts)(cfg, no);
 }
+#endif
 
 static int __init s3c_arch_init(void)
 {
@@ -152,8 +153,9 @@ static int __init s3c_arch_init(void)
        ret = (cpu->init)();
        if (ret != 0)
                return ret;
-
+#if IS_ENABLED(CONFIG_SAMSUNG_ATAGS)
        ret = platform_add_devices(s3c24xx_uart_devs, nr_uarts);
+#endif
        return ret;
 }
 
index c2ff92c30bdf2caaf688f632ea0bcfb516e9c807..a8de3cfe2ee1318abb914bfc81dea541eb7d9e3e 100644 (file)
@@ -192,7 +192,8 @@ struct samsung_gpio_pm samsung_gpio_pm_2bit = {
        .resume = samsung_gpio_pm_2bit_resume,
 };
 
-#if defined(CONFIG_ARCH_S3C64XX) || defined(CONFIG_PLAT_S5P)
+#if defined(CONFIG_ARCH_S3C64XX) || defined(CONFIG_PLAT_S5P) \
+       || defined(CONFIG_ARCH_EXYNOS)
 static void samsung_gpio_pm_4bit_save(struct samsung_gpio_chip *chip)
 {
        chip->pm_save[1] = __raw_readl(chip->base + OFFS_CON);
@@ -302,7 +303,7 @@ struct samsung_gpio_pm samsung_gpio_pm_4bit = {
        .save   = samsung_gpio_pm_4bit_save,
        .resume = samsung_gpio_pm_4bit_resume,
 };
-#endif /* CONFIG_ARCH_S3C64XX || CONFIG_PLAT_S5P */
+#endif /* CONFIG_ARCH_S3C64XX || CONFIG_PLAT_S5P || CONFIG_ARCH_EXYNOS */
 
 /**
  * samsung_pm_save_gpio() - save gpio chip data for suspend
index bd7124c87fea2d4b3551eed54752128b4c97fd71..ea36136424511b4d3c7518b0e839897e266f7137 100644 (file)
 
 #include <asm/cacheflush.h>
 #include <asm/suspend.h>
-#include <mach/hardware.h>
-#include <mach/map.h>
 
 #include <plat/regs-serial.h>
+
+#ifdef CONFIG_SAMSUNG_ATAGS
+#include <mach/hardware.h>
+#include <mach/map.h>
 #include <mach/regs-clock.h>
 #include <mach/regs-irq.h>
 #include <mach/irqs.h>
+#endif
+
 #include <asm/irq.h>
 
 #include <plat/pm.h>
index a93fb6fb66062db6580ff327acadf3982a44de65..ad51f85fbd018019b89e675927f75459553a6179 100644 (file)
 #include <linux/of_fdt.h>
 #include <linux/of.h>
 
+#include <plat/mfc.h>
+
+#ifdef CONFIG_SAMSUNG_ATAGS
 #include <mach/map.h>
 #include <mach/irqs.h>
 #include <plat/devs.h>
-#include <plat/mfc.h>
 
 static struct resource s5p_mfc_resource[] = {
        [0] = DEFINE_RES_MEM(S5P_PA_MFC, SZ_64K),
@@ -61,6 +63,10 @@ struct platform_device s5p_device_mfc_r = {
                .coherent_dma_mask      = DMA_BIT_MASK(32),
        },
 };
+#else
+static struct platform_device s5p_device_mfc_l;
+static struct platform_device s5p_device_mfc_r;
+#endif
 
 struct s5p_mfc_reserved_mem {
        phys_addr_t     base;
@@ -70,6 +76,7 @@ struct s5p_mfc_reserved_mem {
 
 static struct s5p_mfc_reserved_mem s5p_mfc_mem[2] __initdata;
 
+
 void __init s5p_mfc_reserve_mem(phys_addr_t rbase, unsigned int rsize,
                                phys_addr_t lbase, unsigned int lsize)
 {
@@ -93,6 +100,7 @@ void __init s5p_mfc_reserve_mem(phys_addr_t rbase, unsigned int rsize,
        }
 }
 
+#ifdef CONFIG_SAMSUNG_ATAGS
 static int __init s5p_mfc_memory_init(void)
 {
        int i;
@@ -111,6 +119,7 @@ static int __init s5p_mfc_memory_init(void)
        return 0;
 }
 device_initcall(s5p_mfc_memory_init);
+#endif
 
 #ifdef CONFIG_OF
 int __init s5p_fdt_find_mfc_mem(unsigned long node, const char *uname,
index b05ecab915c4ba30e1ea668f09f700b1d2519937..5286e2d333b09752b0bf7a342dc63f4650b29f63 100644 (file)
@@ -26,4 +26,11 @@ config OMAP_INTERCONNECT
 
        help
          Driver to enable OMAP interconnect error handling driver.
+
+config ARM_CCI
+       bool "ARM CCI driver support"
+       depends on ARM
+       help
+         Driver supporting the CCI cache coherent interconnect for ARM
+         platforms.
 endmenu
index 3c7b53c12091cb0cdafa5ab74fd43ddc616ae5c9..670cea4438023cce1d71d2f62af509855ccee694 100644 (file)
@@ -7,3 +7,5 @@ obj-$(CONFIG_OMAP_OCP2SCP)      += omap-ocp2scp.o
 
 # Interconnect bus driver for OMAP SoCs.
 obj-$(CONFIG_OMAP_INTERCONNECT)        += omap_l3_smx.o omap_l3_noc.o
+# CCI cache coherent interconnect for ARM platforms
+obj-$(CONFIG_ARM_CCI)          += arm-cci.o
diff --git a/drivers/bus/arm-cci.c b/drivers/bus/arm-cci.c
new file mode 100644 (file)
index 0000000..7332889
--- /dev/null
@@ -0,0 +1,533 @@
+/*
+ * CCI cache coherent interconnect driver
+ *
+ * Copyright (C) 2013 ARM Ltd.
+ * Author: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/arm-cci.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+
+#include <asm/cacheflush.h>
+#include <asm/smp_plat.h>
+
+#define CCI_PORT_CTRL          0x0
+#define CCI_CTRL_STATUS                0xc
+
+#define CCI_ENABLE_SNOOP_REQ   0x1
+#define CCI_ENABLE_DVM_REQ     0x2
+#define CCI_ENABLE_REQ         (CCI_ENABLE_SNOOP_REQ | CCI_ENABLE_DVM_REQ)
+
+struct cci_nb_ports {
+       unsigned int nb_ace;
+       unsigned int nb_ace_lite;
+};
+
+enum cci_ace_port_type {
+       ACE_INVALID_PORT = 0x0,
+       ACE_PORT,
+       ACE_LITE_PORT,
+};
+
+struct cci_ace_port {
+       void __iomem *base;
+       unsigned long phys;
+       enum cci_ace_port_type type;
+       struct device_node *dn;
+};
+
+static struct cci_ace_port *ports;
+static unsigned int nb_cci_ports;
+
+static void __iomem *cci_ctrl_base;
+static unsigned long cci_ctrl_phys;
+
+struct cpu_port {
+       u64 mpidr;
+       u32 port;
+};
+
+/*
+ * Use the port MSB as valid flag, shift can be made dynamic
+ * by computing number of bits required for port indexes.
+ * Code disabling CCI cpu ports runs with D-cache invalidated
+ * and SCTLR bit clear so data accesses must be kept to a minimum
+ * to improve performance; for now shift is left static to
+ * avoid one more data access while disabling the CCI port.
+ */
+#define PORT_VALID_SHIFT       31
+#define PORT_VALID             (0x1 << PORT_VALID_SHIFT)
+
+static inline void init_cpu_port(struct cpu_port *port, u32 index, u64 mpidr)
+{
+       port->port = PORT_VALID | index;
+       port->mpidr = mpidr;
+}
+
+static inline bool cpu_port_is_valid(struct cpu_port *port)
+{
+       return !!(port->port & PORT_VALID);
+}
+
+static inline bool cpu_port_match(struct cpu_port *port, u64 mpidr)
+{
+       return port->mpidr == (mpidr & MPIDR_HWID_BITMASK);
+}
+
+static struct cpu_port cpu_port[NR_CPUS];
+
+/**
+ * __cci_ace_get_port - Function to retrieve the port index connected to
+ *                     a cpu or device.
+ *
+ * @dn: device node of the device to look-up
+ * @type: port type
+ *
+ * Return value:
+ *     - CCI port index if success
+ *     - -ENODEV if failure
+ */
+static int __cci_ace_get_port(struct device_node *dn, int type)
+{
+       int i;
+       bool ace_match;
+       struct device_node *cci_portn;
+
+       cci_portn = of_parse_phandle(dn, "cci-control-port", 0);
+       for (i = 0; i < nb_cci_ports; i++) {
+               ace_match = ports[i].type == type;
+               if (ace_match && cci_portn == ports[i].dn)
+                       return i;
+       }
+       return -ENODEV;
+}
+
+int cci_ace_get_port(struct device_node *dn)
+{
+       return __cci_ace_get_port(dn, ACE_LITE_PORT);
+}
+EXPORT_SYMBOL_GPL(cci_ace_get_port);
+
+static void __init cci_ace_init_ports(void)
+{
+       int port, ac, cpu;
+       u64 hwid;
+       const u32 *cell;
+       struct device_node *cpun, *cpus;
+
+       cpus = of_find_node_by_path("/cpus");
+       if (WARN(!cpus, "Missing cpus node, bailing out\n"))
+               return;
+
+       if (WARN_ON(of_property_read_u32(cpus, "#address-cells", &ac)))
+               ac = of_n_addr_cells(cpus);
+
+       /*
+        * Port index look-up speeds up the function disabling ports by CPU,
+        * since the logical to port index mapping is done once and does
+        * not change after system boot.
+        * The stashed index array is initialized for all possible CPUs
+        * at probe time.
+        */
+       for_each_child_of_node(cpus, cpun) {
+               if (of_node_cmp(cpun->type, "cpu"))
+                       continue;
+               cell = of_get_property(cpun, "reg", NULL);
+               if (WARN(!cell, "%s: missing reg property\n", cpun->full_name))
+                       continue;
+
+               hwid = of_read_number(cell, ac);
+               cpu = get_logical_index(hwid & MPIDR_HWID_BITMASK);
+
+               if (cpu < 0 || !cpu_possible(cpu))
+                       continue;
+               port = __cci_ace_get_port(cpun, ACE_PORT);
+               if (port < 0)
+                       continue;
+
+               init_cpu_port(&cpu_port[cpu], port, cpu_logical_map(cpu));
+       }
+
+       for_each_possible_cpu(cpu) {
+               WARN(!cpu_port_is_valid(&cpu_port[cpu]),
+                       "CPU %u does not have an associated CCI port\n",
+                       cpu);
+       }
+}
+/*
+ * Functions to enable/disable a CCI interconnect slave port
+ *
+ * They are called by low-level power management code to disable slave
+ * interfaces snoops and DVM broadcast.
+ * Since they may execute with cache data allocation disabled and
+ * after the caches have been cleaned and invalidated the functions provide
+ * no explicit locking since they may run with D-cache disabled, so normal
+ * cacheable kernel locks based on ldrex/strex may not work.
+ * Locking has to be provided by BSP implementations to ensure proper
+ * operations.
+ */
+
+/**
+ * cci_port_control() - function to control a CCI port
+ *
+ * @port: index of the port to setup
+ * @enable: if true enables the port, if false disables it
+ */
+static void notrace cci_port_control(unsigned int port, bool enable)
+{
+       void __iomem *base = ports[port].base;
+
+       writel_relaxed(enable ? CCI_ENABLE_REQ : 0, base + CCI_PORT_CTRL);
+       /*
+        * This function is called from power down procedures
+        * and must not execute any instruction that might
+        * cause the processor to be put in a quiescent state
+        * (eg wfi). Hence, cpu_relax() can not be added to this
+        * read loop to optimize power, since it might hide possibly
+        * disruptive operations.
+        */
+       while (readl_relaxed(cci_ctrl_base + CCI_CTRL_STATUS) & 0x1)
+                       ;
+}
+
+/**
+ * cci_disable_port_by_cpu() - function to disable a CCI port by CPU
+ *                            reference
+ *
+ * @mpidr: mpidr of the CPU whose CCI port should be disabled
+ *
+ * Disabling a CCI port for a CPU implies disabling the CCI port
+ * controlling that CPU cluster. Code disabling CPU CCI ports
+ * must make sure that the CPU running the code is the last active CPU
+ * in the cluster ie all other CPUs are quiescent in a low power state.
+ *
+ * Return:
+ *     0 on success
+ *     -ENODEV on port look-up failure
+ */
+int notrace cci_disable_port_by_cpu(u64 mpidr)
+{
+       int cpu;
+       bool is_valid;
+       for (cpu = 0; cpu < nr_cpu_ids; cpu++) {
+               is_valid = cpu_port_is_valid(&cpu_port[cpu]);
+               if (is_valid && cpu_port_match(&cpu_port[cpu], mpidr)) {
+                       cci_port_control(cpu_port[cpu].port, false);
+                       return 0;
+               }
+       }
+       return -ENODEV;
+}
+EXPORT_SYMBOL_GPL(cci_disable_port_by_cpu);
+
+/**
+ * cci_enable_port_for_self() - enable a CCI port for calling CPU
+ *
+ * Enabling a CCI port for the calling CPU implies enabling the CCI
+ * port controlling that CPU's cluster. Caller must make sure that the
+ * CPU running the code is the first active CPU in the cluster and all
+ * other CPUs are quiescent in a low power state  or waiting for this CPU
+ * to complete the CCI initialization.
+ *
+ * Because this is called when the MMU is still off and with no stack,
+ * the code must be position independent and ideally rely on callee
+ * clobbered registers only.  To achieve this we must code this function
+ * entirely in assembler.
+ *
+ * On success this returns with the proper CCI port enabled.  In case of
+ * any failure this never returns as the inability to enable the CCI is
+ * fatal and there is no possible recovery at this stage.
+ */
+asmlinkage void __naked cci_enable_port_for_self(void)
+{
+       asm volatile ("\n"
+"      .arch armv7-a\n"
+"      mrc     p15, 0, r0, c0, c0, 5   @ get MPIDR value \n"
+"      and     r0, r0, #"__stringify(MPIDR_HWID_BITMASK)" \n"
+"      adr     r1, 5f \n"
+"      ldr     r2, [r1] \n"
+"      add     r1, r1, r2              @ &cpu_port \n"
+"      add     ip, r1, %[sizeof_cpu_port] \n"
+
+       /* Loop over the cpu_port array looking for a matching MPIDR */
+"1:    ldr     r2, [r1, %[offsetof_cpu_port_mpidr_lsb]] \n"
+"      cmp     r2, r0                  @ compare MPIDR \n"
+"      bne     2f \n"
+
+       /* Found a match, now test port validity */
+"      ldr     r3, [r1, %[offsetof_cpu_port_port]] \n"
+"      tst     r3, #"__stringify(PORT_VALID)" \n"
+"      bne     3f \n"
+
+       /* no match, loop with the next cpu_port entry */
+"2:    add     r1, r1, %[sizeof_struct_cpu_port] \n"
+"      cmp     r1, ip                  @ done? \n"
+"      blo     1b \n"
+
+       /* CCI port not found -- cheaply try to stall this CPU */
+"cci_port_not_found: \n"
+"      wfi \n"
+"      wfe \n"
+"      b       cci_port_not_found \n"
+
+       /* Use matched port index to look up the corresponding ports entry */
+"3:    bic     r3, r3, #"__stringify(PORT_VALID)" \n"
+"      adr     r0, 6f \n"
+"      ldmia   r0, {r1, r2} \n"
+"      sub     r1, r1, r0              @ virt - phys \n"
+"      ldr     r0, [r0, r2]            @ *(&ports) \n"
+"      mov     r2, %[sizeof_struct_ace_port] \n"
+"      mla     r0, r2, r3, r0          @ &ports[index] \n"
+"      sub     r0, r0, r1              @ virt_to_phys() \n"
+
+       /* Enable the CCI port */
+"      ldr     r0, [r0, %[offsetof_port_phys]] \n"
+"      mov     r3, #"__stringify(CCI_ENABLE_REQ)" \n"
+"      str     r3, [r0, #"__stringify(CCI_PORT_CTRL)"] \n"
+
+       /* poll the status reg for completion */
+"      adr     r1, 7f \n"
+"      ldr     r0, [r1] \n"
+"      ldr     r0, [r0, r1]            @ cci_ctrl_base \n"
+"4:    ldr     r1, [r0, #"__stringify(CCI_CTRL_STATUS)"] \n"
+"      tst     r1, #1 \n"
+"      bne     4b \n"
+
+"      mov     r0, #0 \n"
+"      bx      lr \n"
+
+"      .align  2 \n"
+"5:    .word   cpu_port - . \n"
+"6:    .word   . \n"
+"      .word   ports - 6b \n"
+"7:    .word   cci_ctrl_phys - . \n"
+       : :
+       [sizeof_cpu_port] "i" (sizeof(cpu_port)),
+#ifndef __ARMEB__
+       [offsetof_cpu_port_mpidr_lsb] "i" (offsetof(struct cpu_port, mpidr)),
+#else
+       [offsetof_cpu_port_mpidr_lsb] "i" (offsetof(struct cpu_port, mpidr)+4),
+#endif
+       [offsetof_cpu_port_port] "i" (offsetof(struct cpu_port, port)),
+       [sizeof_struct_cpu_port] "i" (sizeof(struct cpu_port)),
+       [sizeof_struct_ace_port] "i" (sizeof(struct cci_ace_port)),
+       [offsetof_port_phys] "i" (offsetof(struct cci_ace_port, phys)) );
+
+       unreachable();
+}
+
+/**
+ * __cci_control_port_by_device() - function to control a CCI port by device
+ *                                 reference
+ *
+ * @dn: device node pointer of the device whose CCI port should be
+ *      controlled
+ * @enable: if true enables the port, if false disables it
+ *
+ * Return:
+ *     0 on success
+ *     -ENODEV on port look-up failure
+ */
+int notrace __cci_control_port_by_device(struct device_node *dn, bool enable)
+{
+       int port;
+
+       if (!dn)
+               return -ENODEV;
+
+       port = __cci_ace_get_port(dn, ACE_LITE_PORT);
+       if (WARN_ONCE(port < 0, "node %s ACE lite port look-up failure\n",
+                               dn->full_name))
+               return -ENODEV;
+       cci_port_control(port, enable);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(__cci_control_port_by_device);
+
+/**
+ * __cci_control_port_by_index() - function to control a CCI port by port index
+ *
+ * @port: port index previously retrieved with cci_ace_get_port()
+ * @enable: if true enables the port, if false disables it
+ *
+ * Return:
+ *     0 on success
+ *     -ENODEV on port index out of range
+ *     -EPERM if operation carried out on an ACE PORT
+ */
+int notrace __cci_control_port_by_index(u32 port, bool enable)
+{
+       if (port >= nb_cci_ports || ports[port].type == ACE_INVALID_PORT)
+               return -ENODEV;
+       /*
+        * CCI control for ports connected to CPUS is extremely fragile
+        * and must be made to go through a specific and controlled
+        * interface (ie cci_disable_port_by_cpu(); control by general purpose
+        * indexing is therefore disabled for ACE ports.
+        */
+       if (ports[port].type == ACE_PORT)
+               return -EPERM;
+
+       cci_port_control(port, enable);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(__cci_control_port_by_index);
+
+static const struct cci_nb_ports cci400_ports = {
+       .nb_ace = 2,
+       .nb_ace_lite = 3
+};
+
+static const struct of_device_id arm_cci_matches[] = {
+       {.compatible = "arm,cci-400", .data = &cci400_ports },
+       {},
+};
+
+static const struct of_device_id arm_cci_ctrl_if_matches[] = {
+       {.compatible = "arm,cci-400-ctrl-if", },
+       {},
+};
+
+static int __init cci_probe(void)
+{
+       struct cci_nb_ports const *cci_config;
+       int ret, i, nb_ace = 0, nb_ace_lite = 0;
+       struct device_node *np, *cp;
+       struct resource res;
+       const char *match_str;
+       bool is_ace;
+
+       np = of_find_matching_node(NULL, arm_cci_matches);
+       if (!np)
+               return -ENODEV;
+
+       cci_config = of_match_node(arm_cci_matches, np)->data;
+       if (!cci_config)
+               return -ENODEV;
+
+       nb_cci_ports = cci_config->nb_ace + cci_config->nb_ace_lite;
+
+       ports = kcalloc(sizeof(*ports), nb_cci_ports, GFP_KERNEL);
+       if (!ports)
+               return -ENOMEM;
+
+       ret = of_address_to_resource(np, 0, &res);
+       if (!ret) {
+               cci_ctrl_base = ioremap(res.start, resource_size(&res));
+               cci_ctrl_phys = res.start;
+       }
+       if (ret || !cci_ctrl_base) {
+               WARN(1, "unable to ioremap CCI ctrl\n");
+               ret = -ENXIO;
+               goto memalloc_err;
+       }
+
+       for_each_child_of_node(np, cp) {
+               if (!of_match_node(arm_cci_ctrl_if_matches, cp))
+                       continue;
+
+               i = nb_ace + nb_ace_lite;
+
+               if (i >= nb_cci_ports)
+                       break;
+
+               if (of_property_read_string(cp, "interface-type",
+                                       &match_str)) {
+                       WARN(1, "node %s missing interface-type property\n",
+                                 cp->full_name);
+                       continue;
+               }
+               is_ace = strcmp(match_str, "ace") == 0;
+               if (!is_ace && strcmp(match_str, "ace-lite")) {
+                       WARN(1, "node %s containing invalid interface-type property, skipping it\n",
+                                       cp->full_name);
+                       continue;
+               }
+
+               ret = of_address_to_resource(cp, 0, &res);
+               if (!ret) {
+                       ports[i].base = ioremap(res.start, resource_size(&res));
+                       ports[i].phys = res.start;
+               }
+               if (ret || !ports[i].base) {
+                       WARN(1, "unable to ioremap CCI port %d\n", i);
+                       continue;
+               }
+
+               if (is_ace) {
+                       if (WARN_ON(nb_ace >= cci_config->nb_ace))
+                               continue;
+                       ports[i].type = ACE_PORT;
+                       ++nb_ace;
+               } else {
+                       if (WARN_ON(nb_ace_lite >= cci_config->nb_ace_lite))
+                               continue;
+                       ports[i].type = ACE_LITE_PORT;
+                       ++nb_ace_lite;
+               }
+               ports[i].dn = cp;
+       }
+
+        /* initialize a stashed array of ACE ports to speed-up look-up */
+       cci_ace_init_ports();
+
+       /*
+        * Multi-cluster systems may need this data when non-coherent, during
+        * cluster power-up/power-down. Make sure it reaches main memory.
+        */
+       sync_cache_w(&cci_ctrl_base);
+       sync_cache_w(&cci_ctrl_phys);
+       sync_cache_w(&ports);
+       sync_cache_w(&cpu_port);
+       __sync_cache_range_w(ports, sizeof(*ports) * nb_cci_ports);
+       pr_info("ARM CCI driver probed\n");
+       return 0;
+
+memalloc_err:
+
+       kfree(ports);
+       return ret;
+}
+
+static int cci_init_status = -EAGAIN;
+static DEFINE_MUTEX(cci_probing);
+
+static int __init cci_init(void)
+{
+       if (cci_init_status != -EAGAIN)
+               return cci_init_status;
+
+       mutex_lock(&cci_probing);
+       if (cci_init_status == -EAGAIN)
+               cci_init_status = cci_probe();
+       mutex_unlock(&cci_probing);
+       return cci_init_status;
+}
+
+/*
+ * To sort out early init calls ordering a helper function is provided to
+ * check if the CCI driver has beed initialized. Function check if the driver
+ * has been initialized, if not it calls the init function that probes
+ * the driver and updates the return value.
+ */
+bool __init cci_probed(void)
+{
+       return cci_init() == 0;
+}
+EXPORT_SYMBOL_GPL(cci_probed);
+
+early_initcall(cci_init);
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("ARM CCI support");
index f0e46997bb12aaf46d4351355eb9062edaf77007..f9cf7085ef70466755310f362db4729e0c0b8538 100644 (file)
@@ -27,7 +27,7 @@ obj-$(CONFIG_MACH_LOONGSON1)  += clk-ls1x.o
 obj-$(CONFIG_ARCH_SUNXI)       += sunxi/
 obj-$(CONFIG_ARCH_U8500)       += ux500/
 obj-$(CONFIG_ARCH_VT8500)      += clk-vt8500.o
-obj-$(CONFIG_ARCH_ZYNQ)                += clk-zynq.o
+obj-$(CONFIG_ARCH_ZYNQ)                += zynq/
 obj-$(CONFIG_ARCH_TEGRA)       += tegra/
 obj-$(CONFIG_PLAT_SAMSUNG)     += samsung/
 
index a15f7928fb111310a4353684b3bf7b9769c3e2c5..8774e058cb6cb5db9e290d2d45091ae839c149b3 100644 (file)
 #include <linux/io.h>
 #include <linux/clk-provider.h>
 #include <linux/spinlock.h>
-#include <mach/syscon.h>
+#include <linux/of.h>
+
+/* APP side SYSCON registers */
+/* CLK Control Register 16bit (R/W) */
+#define U300_SYSCON_CCR                                                (0x0000)
+#define U300_SYSCON_CCR_I2S1_USE_VCXO                          (0x0040)
+#define U300_SYSCON_CCR_I2S0_USE_VCXO                          (0x0020)
+#define U300_SYSCON_CCR_TURN_VCXO_ON                           (0x0008)
+#define U300_SYSCON_CCR_CLKING_PERFORMANCE_MASK                        (0x0007)
+#define U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER           (0x04)
+#define U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW                 (0x03)
+#define U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE                (0x02)
+#define U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH                        (0x01)
+#define U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST                        (0x00)
+/* CLK Status Register 16bit (R/W) */
+#define U300_SYSCON_CSR                                                (0x0004)
+#define U300_SYSCON_CSR_PLL208_LOCK_IND                                (0x0002)
+#define U300_SYSCON_CSR_PLL13_LOCK_IND                         (0x0001)
+/* Reset lines for SLOW devices 16bit (R/W) */
+#define U300_SYSCON_RSR                                                (0x0014)
+#define U300_SYSCON_RSR_PPM_RESET_EN                           (0x0200)
+#define U300_SYSCON_RSR_ACC_TMR_RESET_EN                       (0x0100)
+#define U300_SYSCON_RSR_APP_TMR_RESET_EN                       (0x0080)
+#define U300_SYSCON_RSR_RTC_RESET_EN                           (0x0040)
+#define U300_SYSCON_RSR_KEYPAD_RESET_EN                                (0x0020)
+#define U300_SYSCON_RSR_GPIO_RESET_EN                          (0x0010)
+#define U300_SYSCON_RSR_EH_RESET_EN                            (0x0008)
+#define U300_SYSCON_RSR_BTR_RESET_EN                           (0x0004)
+#define U300_SYSCON_RSR_UART_RESET_EN                          (0x0002)
+#define U300_SYSCON_RSR_SLOW_BRIDGE_RESET_EN                   (0x0001)
+/* Reset lines for FAST devices 16bit (R/W) */
+#define U300_SYSCON_RFR                                                (0x0018)
+#define U300_SYSCON_RFR_UART1_RESET_ENABLE                     (0x0080)
+#define U300_SYSCON_RFR_SPI_RESET_ENABLE                       (0x0040)
+#define U300_SYSCON_RFR_MMC_RESET_ENABLE                       (0x0020)
+#define U300_SYSCON_RFR_PCM_I2S1_RESET_ENABLE                  (0x0010)
+#define U300_SYSCON_RFR_PCM_I2S0_RESET_ENABLE                  (0x0008)
+#define U300_SYSCON_RFR_I2C1_RESET_ENABLE                      (0x0004)
+#define U300_SYSCON_RFR_I2C0_RESET_ENABLE                      (0x0002)
+#define U300_SYSCON_RFR_FAST_BRIDGE_RESET_ENABLE               (0x0001)
+/* Reset lines for the rest of the peripherals 16bit (R/W) */
+#define U300_SYSCON_RRR                                                (0x001c)
+#define U300_SYSCON_RRR_CDS_RESET_EN                           (0x4000)
+#define U300_SYSCON_RRR_ISP_RESET_EN                           (0x2000)
+#define U300_SYSCON_RRR_INTCON_RESET_EN                                (0x1000)
+#define U300_SYSCON_RRR_MSPRO_RESET_EN                         (0x0800)
+#define U300_SYSCON_RRR_XGAM_RESET_EN                          (0x0100)
+#define U300_SYSCON_RRR_XGAM_VC_SYNC_RESET_EN                  (0x0080)
+#define U300_SYSCON_RRR_NANDIF_RESET_EN                                (0x0040)
+#define U300_SYSCON_RRR_EMIF_RESET_EN                          (0x0020)
+#define U300_SYSCON_RRR_DMAC_RESET_EN                          (0x0010)
+#define U300_SYSCON_RRR_CPU_RESET_EN                           (0x0008)
+#define U300_SYSCON_RRR_APEX_RESET_EN                          (0x0004)
+#define U300_SYSCON_RRR_AHB_RESET_EN                           (0x0002)
+#define U300_SYSCON_RRR_AAIF_RESET_EN                          (0x0001)
+/* Clock enable for SLOW peripherals 16bit (R/W) */
+#define U300_SYSCON_CESR                                       (0x0020)
+#define U300_SYSCON_CESR_PPM_CLK_EN                            (0x0200)
+#define U300_SYSCON_CESR_ACC_TMR_CLK_EN                                (0x0100)
+#define U300_SYSCON_CESR_APP_TMR_CLK_EN                                (0x0080)
+#define U300_SYSCON_CESR_KEYPAD_CLK_EN                         (0x0040)
+#define U300_SYSCON_CESR_GPIO_CLK_EN                           (0x0010)
+#define U300_SYSCON_CESR_EH_CLK_EN                             (0x0008)
+#define U300_SYSCON_CESR_BTR_CLK_EN                            (0x0004)
+#define U300_SYSCON_CESR_UART_CLK_EN                           (0x0002)
+#define U300_SYSCON_CESR_SLOW_BRIDGE_CLK_EN                    (0x0001)
+/* Clock enable for FAST peripherals 16bit (R/W) */
+#define U300_SYSCON_CEFR                                       (0x0024)
+#define U300_SYSCON_CEFR_UART1_CLK_EN                          (0x0200)
+#define U300_SYSCON_CEFR_I2S1_CORE_CLK_EN                      (0x0100)
+#define U300_SYSCON_CEFR_I2S0_CORE_CLK_EN                      (0x0080)
+#define U300_SYSCON_CEFR_SPI_CLK_EN                            (0x0040)
+#define U300_SYSCON_CEFR_MMC_CLK_EN                            (0x0020)
+#define U300_SYSCON_CEFR_I2S1_CLK_EN                           (0x0010)
+#define U300_SYSCON_CEFR_I2S0_CLK_EN                           (0x0008)
+#define U300_SYSCON_CEFR_I2C1_CLK_EN                           (0x0004)
+#define U300_SYSCON_CEFR_I2C0_CLK_EN                           (0x0002)
+#define U300_SYSCON_CEFR_FAST_BRIDGE_CLK_EN                    (0x0001)
+/* Clock enable for the rest of the peripherals 16bit (R/W) */
+#define U300_SYSCON_CERR                                       (0x0028)
+#define U300_SYSCON_CERR_CDS_CLK_EN                            (0x2000)
+#define U300_SYSCON_CERR_ISP_CLK_EN                            (0x1000)
+#define U300_SYSCON_CERR_MSPRO_CLK_EN                          (0x0800)
+#define U300_SYSCON_CERR_AHB_SUBSYS_BRIDGE_CLK_EN              (0x0400)
+#define U300_SYSCON_CERR_SEMI_CLK_EN                           (0x0200)
+#define U300_SYSCON_CERR_XGAM_CLK_EN                           (0x0100)
+#define U300_SYSCON_CERR_VIDEO_ENC_CLK_EN                      (0x0080)
+#define U300_SYSCON_CERR_NANDIF_CLK_EN                         (0x0040)
+#define U300_SYSCON_CERR_EMIF_CLK_EN                           (0x0020)
+#define U300_SYSCON_CERR_DMAC_CLK_EN                           (0x0010)
+#define U300_SYSCON_CERR_CPU_CLK_EN                            (0x0008)
+#define U300_SYSCON_CERR_APEX_CLK_EN                           (0x0004)
+#define U300_SYSCON_CERR_AHB_CLK_EN                            (0x0002)
+#define U300_SYSCON_CERR_AAIF_CLK_EN                           (0x0001)
+/* Single block clock enable 16bit (-/W) */
+#define U300_SYSCON_SBCER                                      (0x002c)
+#define U300_SYSCON_SBCER_PPM_CLK_EN                           (0x0009)
+#define U300_SYSCON_SBCER_ACC_TMR_CLK_EN                       (0x0008)
+#define U300_SYSCON_SBCER_APP_TMR_CLK_EN                       (0x0007)
+#define U300_SYSCON_SBCER_KEYPAD_CLK_EN                                (0x0006)
+#define U300_SYSCON_SBCER_GPIO_CLK_EN                          (0x0004)
+#define U300_SYSCON_SBCER_EH_CLK_EN                            (0x0003)
+#define U300_SYSCON_SBCER_BTR_CLK_EN                           (0x0002)
+#define U300_SYSCON_SBCER_UART_CLK_EN                          (0x0001)
+#define U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN                   (0x0000)
+#define U300_SYSCON_SBCER_UART1_CLK_EN                         (0x0019)
+#define U300_SYSCON_SBCER_I2S1_CORE_CLK_EN                     (0x0018)
+#define U300_SYSCON_SBCER_I2S0_CORE_CLK_EN                     (0x0017)
+#define U300_SYSCON_SBCER_SPI_CLK_EN                           (0x0016)
+#define U300_SYSCON_SBCER_MMC_CLK_EN                           (0x0015)
+#define U300_SYSCON_SBCER_I2S1_CLK_EN                          (0x0014)
+#define U300_SYSCON_SBCER_I2S0_CLK_EN                          (0x0013)
+#define U300_SYSCON_SBCER_I2C1_CLK_EN                          (0x0012)
+#define U300_SYSCON_SBCER_I2C0_CLK_EN                          (0x0011)
+#define U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN                   (0x0010)
+#define U300_SYSCON_SBCER_CDS_CLK_EN                           (0x002D)
+#define U300_SYSCON_SBCER_ISP_CLK_EN                           (0x002C)
+#define U300_SYSCON_SBCER_MSPRO_CLK_EN                         (0x002B)
+#define U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN             (0x002A)
+#define U300_SYSCON_SBCER_SEMI_CLK_EN                          (0x0029)
+#define U300_SYSCON_SBCER_XGAM_CLK_EN                          (0x0028)
+#define U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN                     (0x0027)
+#define U300_SYSCON_SBCER_NANDIF_CLK_EN                                (0x0026)
+#define U300_SYSCON_SBCER_EMIF_CLK_EN                          (0x0025)
+#define U300_SYSCON_SBCER_DMAC_CLK_EN                          (0x0024)
+#define U300_SYSCON_SBCER_CPU_CLK_EN                           (0x0023)
+#define U300_SYSCON_SBCER_APEX_CLK_EN                          (0x0022)
+#define U300_SYSCON_SBCER_AHB_CLK_EN                           (0x0021)
+#define U300_SYSCON_SBCER_AAIF_CLK_EN                          (0x0020)
+/* Single block clock disable 16bit (-/W) */
+#define U300_SYSCON_SBCDR                                      (0x0030)
+/* Same values as above for SBCER */
+/* Clock force SLOW peripherals 16bit (R/W) */
+#define U300_SYSCON_CFSR                                       (0x003c)
+#define U300_SYSCON_CFSR_PPM_CLK_FORCE_EN                      (0x0200)
+#define U300_SYSCON_CFSR_ACC_TMR_CLK_FORCE_EN                  (0x0100)
+#define U300_SYSCON_CFSR_APP_TMR_CLK_FORCE_EN                  (0x0080)
+#define U300_SYSCON_CFSR_KEYPAD_CLK_FORCE_EN                   (0x0020)
+#define U300_SYSCON_CFSR_GPIO_CLK_FORCE_EN                     (0x0010)
+#define U300_SYSCON_CFSR_EH_CLK_FORCE_EN                       (0x0008)
+#define U300_SYSCON_CFSR_BTR_CLK_FORCE_EN                      (0x0004)
+#define U300_SYSCON_CFSR_UART_CLK_FORCE_EN                     (0x0002)
+#define U300_SYSCON_CFSR_SLOW_BRIDGE_CLK_FORCE_EN              (0x0001)
+/* Clock force FAST peripherals 16bit (R/W) */
+#define U300_SYSCON_CFFR                                       (0x40)
+/* Values not defined. Define if you want to use them. */
+/* Clock force the rest of the peripherals 16bit (R/W) */
+#define U300_SYSCON_CFRR                                       (0x44)
+#define U300_SYSCON_CFRR_CDS_CLK_FORCE_EN                      (0x2000)
+#define U300_SYSCON_CFRR_ISP_CLK_FORCE_EN                      (0x1000)
+#define U300_SYSCON_CFRR_MSPRO_CLK_FORCE_EN                    (0x0800)
+#define U300_SYSCON_CFRR_AHB_SUBSYS_BRIDGE_CLK_FORCE_EN                (0x0400)
+#define U300_SYSCON_CFRR_SEMI_CLK_FORCE_EN                     (0x0200)
+#define U300_SYSCON_CFRR_XGAM_CLK_FORCE_EN                     (0x0100)
+#define U300_SYSCON_CFRR_VIDEO_ENC_CLK_FORCE_EN                        (0x0080)
+#define U300_SYSCON_CFRR_NANDIF_CLK_FORCE_EN                   (0x0040)
+#define U300_SYSCON_CFRR_EMIF_CLK_FORCE_EN                     (0x0020)
+#define U300_SYSCON_CFRR_DMAC_CLK_FORCE_EN                     (0x0010)
+#define U300_SYSCON_CFRR_CPU_CLK_FORCE_EN                      (0x0008)
+#define U300_SYSCON_CFRR_APEX_CLK_FORCE_EN                     (0x0004)
+#define U300_SYSCON_CFRR_AHB_CLK_FORCE_EN                      (0x0002)
+#define U300_SYSCON_CFRR_AAIF_CLK_FORCE_EN                     (0x0001)
+/* PLL208 Frequency Control 16bit (R/W) */
+#define U300_SYSCON_PFCR                                       (0x48)
+#define U300_SYSCON_PFCR_DPLL_MULT_NUM                         (0x000F)
+/* Power Management Control 16bit (R/W) */
+#define U300_SYSCON_PMCR                                       (0x50)
+#define U300_SYSCON_PMCR_DCON_ENABLE                           (0x0002)
+#define U300_SYSCON_PMCR_PWR_MGNT_ENABLE                       (0x0001)
+/* Reset Out 16bit (R/W) */
+#define U300_SYSCON_RCR                                                (0x6c)
+#define U300_SYSCON_RCR_RESOUT0_RST_N_DISABLE                  (0x0001)
+/* EMIF Slew Rate Control 16bit (R/W) */
+#define U300_SYSCON_SRCLR                                      (0x70)
+#define U300_SYSCON_SRCLR_MASK                                 (0x03FF)
+#define U300_SYSCON_SRCLR_VALUE                                        (0x03FF)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_5_B                      (0x0200)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_5_A                      (0x0100)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_4_B                      (0x0080)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_4_A                      (0x0040)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_3_B                      (0x0020)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_3_A                      (0x0010)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_2_B                      (0x0008)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_2_A                      (0x0004)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_1_B                      (0x0002)
+#define U300_SYSCON_SRCLR_EMIF_1_SLRC_1_A                      (0x0001)
+/* EMIF Clock Control Register 16bit (R/W) */
+#define U300_SYSCON_ECCR                                       (0x0078)
+#define U300_SYSCON_ECCR_MASK                                  (0x000F)
+#define U300_SYSCON_ECCR_EMIF_1_STATIC_CLK_EN_N_DISABLE                (0x0008)
+#define U300_SYSCON_ECCR_EMIF_1_RET_OUT_CLK_EN_N_DISABLE       (0x0004)
+#define U300_SYSCON_ECCR_EMIF_MEMCLK_RET_EN_N_DISABLE          (0x0002)
+#define U300_SYSCON_ECCR_EMIF_SDRCLK_RET_EN_N_DISABLE          (0x0001)
+/* MMC/MSPRO frequency divider register 0 16bit (R/W) */
+#define U300_SYSCON_MMF0R                                      (0x90)
+#define U300_SYSCON_MMF0R_MASK                                 (0x00FF)
+#define U300_SYSCON_MMF0R_FREQ_0_HIGH_MASK                     (0x00F0)
+#define U300_SYSCON_MMF0R_FREQ_0_LOW_MASK                      (0x000F)
+/* MMC/MSPRO frequency divider register 1 16bit (R/W) */
+#define U300_SYSCON_MMF1R                                      (0x94)
+#define U300_SYSCON_MMF1R_MASK                                 (0x00FF)
+#define U300_SYSCON_MMF1R_FREQ_1_HIGH_MASK                     (0x00F0)
+#define U300_SYSCON_MMF1R_FREQ_1_LOW_MASK                      (0x000F)
+/* Clock control for the MMC and MSPRO blocks 16bit (R/W) */
+#define U300_SYSCON_MMCR                                       (0x9C)
+#define U300_SYSCON_MMCR_MASK                                  (0x0003)
+#define U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE                 (0x0002)
+#define U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE                  (0x0001)
+/* SYS_0_CLK_CONTROL first clock control 16bit (R/W) */
+#define U300_SYSCON_S0CCR                                      (0x120)
+#define U300_SYSCON_S0CCR_FIELD_MASK                           (0x43FF)
+#define U300_SYSCON_S0CCR_CLOCK_REQ                            (0x4000)
+#define U300_SYSCON_S0CCR_CLOCK_REQ_MONITOR                    (0x2000)
+#define U300_SYSCON_S0CCR_CLOCK_INV                            (0x0200)
+#define U300_SYSCON_S0CCR_CLOCK_FREQ_MASK                      (0x01E0)
+#define U300_SYSCON_S0CCR_CLOCK_SELECT_MASK                    (0x001E)
+#define U300_SYSCON_S0CCR_CLOCK_ENABLE                         (0x0001)
+#define U300_SYSCON_S0CCR_SEL_MCLK                             (0x8<<1)
+#define U300_SYSCON_S0CCR_SEL_ACC_FSM_CLK                      (0xA<<1)
+#define U300_SYSCON_S0CCR_SEL_PLL60_48_CLK                     (0xC<<1)
+#define U300_SYSCON_S0CCR_SEL_PLL60_60_CLK                     (0xD<<1)
+#define U300_SYSCON_S0CCR_SEL_ACC_PLL208_CLK                   (0xE<<1)
+#define U300_SYSCON_S0CCR_SEL_APP_PLL13_CLK                    (0x0<<1)
+#define U300_SYSCON_S0CCR_SEL_APP_FSM_CLK                      (0x2<<1)
+#define U300_SYSCON_S0CCR_SEL_RTC_CLK                          (0x4<<1)
+#define U300_SYSCON_S0CCR_SEL_APP_PLL208_CLK                   (0x6<<1)
+/* SYS_1_CLK_CONTROL second clock control 16 bit (R/W) */
+#define U300_SYSCON_S1CCR                                      (0x124)
+#define U300_SYSCON_S1CCR_FIELD_MASK                           (0x43FF)
+#define U300_SYSCON_S1CCR_CLOCK_REQ                            (0x4000)
+#define U300_SYSCON_S1CCR_CLOCK_REQ_MONITOR                    (0x2000)
+#define U300_SYSCON_S1CCR_CLOCK_INV                            (0x0200)
+#define U300_SYSCON_S1CCR_CLOCK_FREQ_MASK                      (0x01E0)
+#define U300_SYSCON_S1CCR_CLOCK_SELECT_MASK                    (0x001E)
+#define U300_SYSCON_S1CCR_CLOCK_ENABLE                         (0x0001)
+#define U300_SYSCON_S1CCR_SEL_MCLK                             (0x8<<1)
+#define U300_SYSCON_S1CCR_SEL_ACC_FSM_CLK                      (0xA<<1)
+#define U300_SYSCON_S1CCR_SEL_PLL60_48_CLK                     (0xC<<1)
+#define U300_SYSCON_S1CCR_SEL_PLL60_60_CLK                     (0xD<<1)
+#define U300_SYSCON_S1CCR_SEL_ACC_PLL208_CLK                   (0xE<<1)
+#define U300_SYSCON_S1CCR_SEL_ACC_PLL13_CLK                    (0x0<<1)
+#define U300_SYSCON_S1CCR_SEL_APP_FSM_CLK                      (0x2<<1)
+#define U300_SYSCON_S1CCR_SEL_RTC_CLK                          (0x4<<1)
+#define U300_SYSCON_S1CCR_SEL_APP_PLL208_CLK                   (0x6<<1)
+/* SYS_2_CLK_CONTROL third clock contol 16 bit (R/W) */
+#define U300_SYSCON_S2CCR                                      (0x128)
+#define U300_SYSCON_S2CCR_FIELD_MASK                           (0xC3FF)
+#define U300_SYSCON_S2CCR_CLK_STEAL                            (0x8000)
+#define U300_SYSCON_S2CCR_CLOCK_REQ                            (0x4000)
+#define U300_SYSCON_S2CCR_CLOCK_REQ_MONITOR                    (0x2000)
+#define U300_SYSCON_S2CCR_CLOCK_INV                            (0x0200)
+#define U300_SYSCON_S2CCR_CLOCK_FREQ_MASK                      (0x01E0)
+#define U300_SYSCON_S2CCR_CLOCK_SELECT_MASK                    (0x001E)
+#define U300_SYSCON_S2CCR_CLOCK_ENABLE                         (0x0001)
+#define U300_SYSCON_S2CCR_SEL_MCLK                             (0x8<<1)
+#define U300_SYSCON_S2CCR_SEL_ACC_FSM_CLK                      (0xA<<1)
+#define U300_SYSCON_S2CCR_SEL_PLL60_48_CLK                     (0xC<<1)
+#define U300_SYSCON_S2CCR_SEL_PLL60_60_CLK                     (0xD<<1)
+#define U300_SYSCON_S2CCR_SEL_ACC_PLL208_CLK                   (0xE<<1)
+#define U300_SYSCON_S2CCR_SEL_ACC_PLL13_CLK                    (0x0<<1)
+#define U300_SYSCON_S2CCR_SEL_APP_FSM_CLK                      (0x2<<1)
+#define U300_SYSCON_S2CCR_SEL_RTC_CLK                          (0x4<<1)
+#define U300_SYSCON_S2CCR_SEL_APP_PLL208_CLK                   (0x6<<1)
+/* SC_PLL_IRQ_CONTROL 16bit (R/W) */
+#define U300_SYSCON_PICR                                       (0x0130)
+#define U300_SYSCON_PICR_MASK                                  (0x00FF)
+#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_LOW_ENABLE          (0x0080)
+#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_HIGH_ENABLE         (0x0040)
+#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_LOW_ENABLE           (0x0020)
+#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_HIGH_ENABLE          (0x0010)
+#define U300_SYSCON_PICR_IRQMASK_PLL13_UNLOCK_ENABLE           (0x0008)
+#define U300_SYSCON_PICR_IRQMASK_PLL13_LOCK_ENABLE             (0x0004)
+#define U300_SYSCON_PICR_IRQMASK_PLL208_UNLOCK_ENABLE          (0x0002)
+#define U300_SYSCON_PICR_IRQMASK_PLL208_LOCK_ENABLE            (0x0001)
+/* SC_PLL_IRQ_STATUS 16 bit (R/-) */
+#define U300_SYSCON_PISR                                       (0x0134)
+#define U300_SYSCON_PISR_MASK                                  (0x000F)
+#define U300_SYSCON_PISR_PLL13_UNLOCK_IND                      (0x0008)
+#define U300_SYSCON_PISR_PLL13_LOCK_IND                                (0x0004)
+#define U300_SYSCON_PISR_PLL208_UNLOCK_IND                     (0x0002)
+#define U300_SYSCON_PISR_PLL208_LOCK_IND                       (0x0001)
+/* SC_PLL_IRQ_CLEAR 16 bit (-/W) */
+#define U300_SYSCON_PICLR                                      (0x0138)
+#define U300_SYSCON_PICLR_MASK                                 (0x000F)
+#define U300_SYSCON_PICLR_RWMASK                               (0x0000)
+#define U300_SYSCON_PICLR_PLL13_UNLOCK_SC                      (0x0008)
+#define U300_SYSCON_PICLR_PLL13_LOCK_SC                                (0x0004)
+#define U300_SYSCON_PICLR_PLL208_UNLOCK_SC                     (0x0002)
+#define U300_SYSCON_PICLR_PLL208_LOCK_SC                       (0x0001)
+/* Clock activity observability register 0 */
+#define U300_SYSCON_C0OAR                                      (0x140)
+#define U300_SYSCON_C0OAR_MASK                                 (0xFFFF)
+#define U300_SYSCON_C0OAR_VALUE                                        (0xFFFF)
+#define U300_SYSCON_C0OAR_BT_H_CLK                             (0x8000)
+#define U300_SYSCON_C0OAR_ASPB_P_CLK                           (0x4000)
+#define U300_SYSCON_C0OAR_APP_SEMI_H_CLK                       (0x2000)
+#define U300_SYSCON_C0OAR_APP_SEMI_CLK                         (0x1000)
+#define U300_SYSCON_C0OAR_APP_MMC_MSPRO_CLK                    (0x0800)
+#define U300_SYSCON_C0OAR_APP_I2S1_CLK                         (0x0400)
+#define U300_SYSCON_C0OAR_APP_I2S0_CLK                         (0x0200)
+#define U300_SYSCON_C0OAR_APP_CPU_CLK                          (0x0100)
+#define U300_SYSCON_C0OAR_APP_52_CLK                           (0x0080)
+#define U300_SYSCON_C0OAR_APP_208_CLK                          (0x0040)
+#define U300_SYSCON_C0OAR_APP_104_CLK                          (0x0020)
+#define U300_SYSCON_C0OAR_APEX_CLK                             (0x0010)
+#define U300_SYSCON_C0OAR_AHPB_M_H_CLK                         (0x0008)
+#define U300_SYSCON_C0OAR_AHB_CLK                              (0x0004)
+#define U300_SYSCON_C0OAR_AFPB_P_CLK                           (0x0002)
+#define U300_SYSCON_C0OAR_AAIF_CLK                             (0x0001)
+/* Clock activity observability register 1 */
+#define U300_SYSCON_C1OAR                                      (0x144)
+#define U300_SYSCON_C1OAR_MASK                                 (0x3FFE)
+#define U300_SYSCON_C1OAR_VALUE                                        (0x3FFE)
+#define U300_SYSCON_C1OAR_NFIF_F_CLK                           (0x2000)
+#define U300_SYSCON_C1OAR_MSPRO_CLK                            (0x1000)
+#define U300_SYSCON_C1OAR_MMC_P_CLK                            (0x0800)
+#define U300_SYSCON_C1OAR_MMC_CLK                              (0x0400)
+#define U300_SYSCON_C1OAR_KP_P_CLK                             (0x0200)
+#define U300_SYSCON_C1OAR_I2C1_P_CLK                           (0x0100)
+#define U300_SYSCON_C1OAR_I2C0_P_CLK                           (0x0080)
+#define U300_SYSCON_C1OAR_GPIO_CLK                             (0x0040)
+#define U300_SYSCON_C1OAR_EMIF_MPMC_CLK                                (0x0020)
+#define U300_SYSCON_C1OAR_EMIF_H_CLK                           (0x0010)
+#define U300_SYSCON_C1OAR_EVHIST_CLK                           (0x0008)
+#define U300_SYSCON_C1OAR_PPM_CLK                              (0x0004)
+#define U300_SYSCON_C1OAR_DMA_CLK                              (0x0002)
+/* Clock activity observability register 2 */
+#define U300_SYSCON_C2OAR                                      (0x148)
+#define U300_SYSCON_C2OAR_MASK                                 (0x0FFF)
+#define U300_SYSCON_C2OAR_VALUE                                        (0x0FFF)
+#define U300_SYSCON_C2OAR_XGAM_CDI_CLK                         (0x0800)
+#define U300_SYSCON_C2OAR_XGAM_CLK                             (0x0400)
+#define U300_SYSCON_C2OAR_VC_H_CLK                             (0x0200)
+#define U300_SYSCON_C2OAR_VC_CLK                               (0x0100)
+#define U300_SYSCON_C2OAR_UA_P_CLK                             (0x0080)
+#define U300_SYSCON_C2OAR_TMR1_CLK                             (0x0040)
+#define U300_SYSCON_C2OAR_TMR0_CLK                             (0x0020)
+#define U300_SYSCON_C2OAR_SPI_P_CLK                            (0x0010)
+#define U300_SYSCON_C2OAR_PCM_I2S1_CORE_CLK                    (0x0008)
+#define U300_SYSCON_C2OAR_PCM_I2S1_CLK                         (0x0004)
+#define U300_SYSCON_C2OAR_PCM_I2S0_CORE_CLK                    (0x0002)
+#define U300_SYSCON_C2OAR_PCM_I2S0_CLK                         (0x0001)
+
 
 /*
  * The clocking hierarchy currently looks like this.
@@ -386,6 +728,213 @@ syscon_clk_register(struct device *dev, const char *name,
        return clk;
 }
 
+#define U300_CLK_TYPE_SLOW 0
+#define U300_CLK_TYPE_FAST 1
+#define U300_CLK_TYPE_REST 2
+
+/**
+ * struct u300_clock - defines the bits and pieces for a certain clock
+ * @type: the clock type, slow fast or rest
+ * @id: the bit in the slow/fast/rest register for this clock
+ * @hw_ctrld: whether the clock is hardware controlled
+ * @clk_val: a value to poke in the one-write enable/disable registers
+ */
+struct u300_clock {
+       u8 type;
+       u8 id;
+       bool hw_ctrld;
+       u16 clk_val;
+};
+
+struct u300_clock const __initconst u300_clk_lookup[] = {
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 3,
+               .hw_ctrld = true,
+               .clk_val = U300_SYSCON_SBCER_CPU_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 4,
+               .hw_ctrld = true,
+               .clk_val = U300_SYSCON_SBCER_DMAC_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 5,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_EMIF_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 6,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_NANDIF_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 8,
+               .hw_ctrld = true,
+               .clk_val = U300_SYSCON_SBCER_XGAM_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 9,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_SEMI_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 10,
+               .hw_ctrld = true,
+               .clk_val = U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_REST,
+               .id = 12,
+               .hw_ctrld = false,
+               /* INTCON: cannot be enabled, just taken out of reset */
+               .clk_val = 0xFFFFU,
+       },
+       {
+               .type = U300_CLK_TYPE_FAST,
+               .id = 0,
+               .hw_ctrld = true,
+               .clk_val = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_FAST,
+               .id = 1,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_I2C0_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_FAST,
+               .id = 2,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_I2C1_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_FAST,
+               .id = 5,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_MMC_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_FAST,
+               .id = 6,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_SPI_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_SLOW,
+               .id = 0,
+               .hw_ctrld = true,
+               .clk_val = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_SLOW,
+               .id = 1,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_UART_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_SLOW,
+               .id = 4,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_GPIO_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_SLOW,
+               .id = 6,
+               .hw_ctrld = true,
+               /* No clock enable register bit */
+               .clk_val = 0xFFFFU,
+       },
+       {
+               .type = U300_CLK_TYPE_SLOW,
+               .id = 7,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_APP_TMR_CLK_EN,
+       },
+       {
+               .type = U300_CLK_TYPE_SLOW,
+               .id = 8,
+               .hw_ctrld = false,
+               .clk_val = U300_SYSCON_SBCER_ACC_TMR_CLK_EN,
+       },
+};
+
+static void __init of_u300_syscon_clk_init(struct device_node *np)
+{
+       struct clk *clk = ERR_PTR(-EINVAL);
+       const char *clk_name = np->name;
+       const char *parent_name;
+       void __iomem *res_reg;
+       void __iomem *en_reg;
+       u32 clk_type;
+       u32 clk_id;
+       int i;
+
+       if (of_property_read_u32(np, "clock-type", &clk_type)) {
+               pr_err("%s: syscon clock \"%s\" missing clock-type property\n",
+                      __func__, clk_name);
+               return;
+       }
+       if (of_property_read_u32(np, "clock-id", &clk_id)) {
+               pr_err("%s: syscon clock \"%s\" missing clock-id property\n",
+                      __func__, clk_name);
+               return;
+       }
+       parent_name = of_clk_get_parent_name(np, 0);
+
+       switch (clk_type) {
+       case U300_CLK_TYPE_SLOW:
+               res_reg = syscon_vbase + U300_SYSCON_RSR;
+               en_reg = syscon_vbase + U300_SYSCON_CESR;
+               break;
+       case U300_CLK_TYPE_FAST:
+               res_reg = syscon_vbase + U300_SYSCON_RFR;
+               en_reg = syscon_vbase + U300_SYSCON_CEFR;
+               break;
+       case U300_CLK_TYPE_REST:
+               res_reg = syscon_vbase + U300_SYSCON_RRR;
+               en_reg = syscon_vbase + U300_SYSCON_CERR;
+               break;
+       default:
+               pr_err("unknown clock type %x specified\n", clk_type);
+               return;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(u300_clk_lookup); i++) {
+               const struct u300_clock *u3clk = &u300_clk_lookup[i];
+
+               if (u3clk->type == clk_type && u3clk->id == clk_id)
+                       clk = syscon_clk_register(NULL,
+                                                 clk_name, parent_name,
+                                                 0, u3clk->hw_ctrld,
+                                                 res_reg, u3clk->id,
+                                                 en_reg, u3clk->id,
+                                                 u3clk->clk_val);
+       }
+
+       if (!IS_ERR(clk)) {
+               of_clk_add_provider(np, of_clk_src_simple_get, clk);
+
+               /*
+                * Some few system clocks - device tree does not
+                * represent clocks without a corresponding device node.
+                * for now we add these three clocks here.
+                */
+               if (clk_type == U300_CLK_TYPE_REST && clk_id == 5)
+                       clk_register_clkdev(clk, NULL, "pl172");
+               if (clk_type == U300_CLK_TYPE_REST && clk_id == 9)
+                       clk_register_clkdev(clk, NULL, "semi");
+               if (clk_type == U300_CLK_TYPE_REST && clk_id == 12)
+                       clk_register_clkdev(clk, NULL, "intcon");
+       }
+}
+
 /**
  * struct clk_mclk - U300 MCLK clock (MMC/SD clock)
  * @hw: corresponding clock hardware entry
@@ -590,10 +1139,41 @@ mclk_clk_register(struct device *dev, const char *name,
        return clk;
 }
 
+static void __init of_u300_syscon_mclk_init(struct device_node *np)
+{
+       struct clk *clk = ERR_PTR(-EINVAL);
+       const char *clk_name = np->name;
+       const char *parent_name;
+
+       parent_name = of_clk_get_parent_name(np, 0);
+       clk = mclk_clk_register(NULL, clk_name, parent_name, false);
+       if (!IS_ERR(clk))
+               of_clk_add_provider(np, of_clk_src_simple_get, clk);
+}
+
+static const __initconst struct of_device_id u300_clk_match[] = {
+       {
+               .compatible = "fixed-clock",
+               .data = of_fixed_clk_setup,
+       },
+       {
+               .compatible = "fixed-factor-clock",
+               .data = of_fixed_factor_clk_setup,
+       },
+       {
+               .compatible = "stericsson,u300-syscon-clk",
+               .data = of_u300_syscon_clk_init,
+       },
+       {
+               .compatible = "stericsson,u300-syscon-mclk",
+               .data = of_u300_syscon_mclk_init,
+       },
+};
+
+
 void __init u300_clk_init(void __iomem *base)
 {
        u16 val;
-       struct clk *clk;
 
        syscon_vbase = base;
 
@@ -610,137 +1190,5 @@ void __init u300_clk_init(void __iomem *base)
        val |= U300_SYSCON_PMCR_PWR_MGNT_ENABLE;
        writew(val, syscon_vbase + U300_SYSCON_PMCR);
 
-       /* These are always available (RTC and PLL13) */
-       clk = clk_register_fixed_rate(NULL, "app_32_clk", NULL,
-                                     CLK_IS_ROOT, 32768);
-       /* The watchdog sits directly on the 32 kHz clock */
-       clk_register_clkdev(clk, NULL, "coh901327_wdog");
-       clk = clk_register_fixed_rate(NULL, "pll13", NULL,
-                                     CLK_IS_ROOT, 13000000);
-
-       /* These derive from PLL208 */
-       clk = clk_register_fixed_rate(NULL, "pll208", NULL,
-                                     CLK_IS_ROOT, 208000000);
-       clk = clk_register_fixed_factor(NULL, "app_208_clk", "pll208",
-                                       0, 1, 1);
-       clk = clk_register_fixed_factor(NULL, "app_104_clk", "pll208",
-                                       0, 1, 2);
-       clk = clk_register_fixed_factor(NULL, "app_52_clk", "pll208",
-                                       0, 1, 4);
-       /* The 52 MHz is divided down to 26 MHz */
-       clk = clk_register_fixed_factor(NULL, "app_26_clk", "app_52_clk",
-                                       0, 1, 2);
-
-       /* Directly on the AMBA interconnect */
-       clk = syscon_clk_register(NULL, "cpu_clk", "app_208_clk", 0, true,
-                                 syscon_vbase + U300_SYSCON_RRR, 3,
-                                 syscon_vbase + U300_SYSCON_CERR, 3,
-                                 U300_SYSCON_SBCER_CPU_CLK_EN);
-       clk = syscon_clk_register(NULL, "dmac_clk", "app_52_clk", 0, true,
-                                 syscon_vbase + U300_SYSCON_RRR, 4,
-                                 syscon_vbase + U300_SYSCON_CERR, 4,
-                                 U300_SYSCON_SBCER_DMAC_CLK_EN);
-       clk_register_clkdev(clk, NULL, "dma");
-       clk = syscon_clk_register(NULL, "fsmc_clk", "app_52_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RRR, 6,
-                                 syscon_vbase + U300_SYSCON_CERR, 6,
-                                 U300_SYSCON_SBCER_NANDIF_CLK_EN);
-       clk_register_clkdev(clk, NULL, "fsmc-nand");
-       clk = syscon_clk_register(NULL, "xgam_clk", "app_52_clk", 0, true,
-                                 syscon_vbase + U300_SYSCON_RRR, 8,
-                                 syscon_vbase + U300_SYSCON_CERR, 8,
-                                 U300_SYSCON_SBCER_XGAM_CLK_EN);
-       clk_register_clkdev(clk, NULL, "xgam");
-       clk = syscon_clk_register(NULL, "semi_clk", "app_104_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RRR, 9,
-                                 syscon_vbase + U300_SYSCON_CERR, 9,
-                                 U300_SYSCON_SBCER_SEMI_CLK_EN);
-       clk_register_clkdev(clk, NULL, "semi");
-
-       /* AHB bridge clocks */
-       clk = syscon_clk_register(NULL, "ahb_subsys_clk", "app_52_clk", 0, true,
-                                 syscon_vbase + U300_SYSCON_RRR, 10,
-                                 syscon_vbase + U300_SYSCON_CERR, 10,
-                                 U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN);
-       clk = syscon_clk_register(NULL, "intcon_clk", "ahb_subsys_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RRR, 12,
-                                 syscon_vbase + U300_SYSCON_CERR, 12,
-                                 /* Cannot be enabled, just taken out of reset */
-                                 0xFFFFU);
-       clk_register_clkdev(clk, NULL, "intcon");
-       clk = syscon_clk_register(NULL, "emif_clk", "ahb_subsys_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RRR, 5,
-                                 syscon_vbase + U300_SYSCON_CERR, 5,
-                                 U300_SYSCON_SBCER_EMIF_CLK_EN);
-       clk_register_clkdev(clk, NULL, "pl172");
-
-       /* FAST bridge clocks */
-       clk = syscon_clk_register(NULL, "fast_clk", "app_26_clk", 0, true,
-                                 syscon_vbase + U300_SYSCON_RFR, 0,
-                                 syscon_vbase + U300_SYSCON_CEFR, 0,
-                                 U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN);
-       clk = syscon_clk_register(NULL, "i2c0_p_clk", "fast_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RFR, 1,
-                                 syscon_vbase + U300_SYSCON_CEFR, 1,
-                                 U300_SYSCON_SBCER_I2C0_CLK_EN);
-       clk_register_clkdev(clk, NULL, "stu300.0");
-       clk = syscon_clk_register(NULL, "i2c1_p_clk", "fast_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RFR, 2,
-                                 syscon_vbase + U300_SYSCON_CEFR, 2,
-                                 U300_SYSCON_SBCER_I2C1_CLK_EN);
-       clk_register_clkdev(clk, NULL, "stu300.1");
-       clk = syscon_clk_register(NULL, "mmc_p_clk", "fast_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RFR, 5,
-                                 syscon_vbase + U300_SYSCON_CEFR, 5,
-                                 U300_SYSCON_SBCER_MMC_CLK_EN);
-       clk_register_clkdev(clk, "apb_pclk", "mmci");
-       clk = syscon_clk_register(NULL, "spi_p_clk", "fast_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RFR, 6,
-                                 syscon_vbase + U300_SYSCON_CEFR, 6,
-                                 U300_SYSCON_SBCER_SPI_CLK_EN);
-       /* The SPI has no external clock for the outward bus, uses the pclk */
-       clk_register_clkdev(clk, NULL, "pl022");
-       clk_register_clkdev(clk, "apb_pclk", "pl022");
-
-       /* SLOW bridge clocks */
-       clk = syscon_clk_register(NULL, "slow_clk", "pll13", 0, true,
-                                 syscon_vbase + U300_SYSCON_RSR, 0,
-                                 syscon_vbase + U300_SYSCON_CESR, 0,
-                                 U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN);
-       clk = syscon_clk_register(NULL, "uart0_clk", "slow_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RSR, 1,
-                                 syscon_vbase + U300_SYSCON_CESR, 1,
-                                 U300_SYSCON_SBCER_UART_CLK_EN);
-       /* Same clock is used for APB and outward bus */
-       clk_register_clkdev(clk, NULL, "uart0");
-       clk_register_clkdev(clk, "apb_pclk", "uart0");
-       clk = syscon_clk_register(NULL, "gpio_clk", "slow_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RSR, 4,
-                                 syscon_vbase + U300_SYSCON_CESR, 4,
-                                 U300_SYSCON_SBCER_GPIO_CLK_EN);
-       clk_register_clkdev(clk, NULL, "u300-gpio");
-       clk = syscon_clk_register(NULL, "keypad_clk", "slow_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RSR, 5,
-                                 syscon_vbase + U300_SYSCON_CESR, 6,
-                                 U300_SYSCON_SBCER_KEYPAD_CLK_EN);
-       clk_register_clkdev(clk, NULL, "coh901461-keypad");
-       clk = syscon_clk_register(NULL, "rtc_clk", "slow_clk", 0, true,
-                                 syscon_vbase + U300_SYSCON_RSR, 6,
-                                 /* No clock enable register bit */
-                                 NULL, 0, 0xFFFFU);
-       clk_register_clkdev(clk, NULL, "rtc-coh901331");
-       clk = syscon_clk_register(NULL, "app_tmr_clk", "slow_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RSR, 7,
-                                 syscon_vbase + U300_SYSCON_CESR, 7,
-                                 U300_SYSCON_SBCER_APP_TMR_CLK_EN);
-       clk_register_clkdev(clk, NULL, "apptimer");
-       clk = syscon_clk_register(NULL, "acc_tmr_clk", "slow_clk", 0, false,
-                                 syscon_vbase + U300_SYSCON_RSR, 8,
-                                 syscon_vbase + U300_SYSCON_CESR, 8,
-                                 U300_SYSCON_SBCER_ACC_TMR_CLK_EN);
-       clk_register_clkdev(clk, NULL, "timer");
-
-       /* Then this special MMC/SD clock */
-       clk = mclk_clk_register(NULL, "mmc_clk", "mmc_p_clk", false);
-       clk_register_clkdev(clk, NULL, "mmci");
+       of_clk_init(u300_clk_match);
 }
diff --git a/drivers/clk/clk-zynq.c b/drivers/clk/clk-zynq.c
deleted file mode 100644 (file)
index 3206297..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 2012 National Instruments
- *
- * Josh Cartwright <josh.cartwright@ni.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/slab.h>
-#include <linux/kernel.h>
-#include <linux/clk-provider.h>
-#include <linux/clk/zynq.h>
-
-static void __iomem *slcr_base;
-
-struct zynq_pll_clk {
-       struct clk_hw   hw;
-       void __iomem    *pll_ctrl;
-       void __iomem    *pll_cfg;
-};
-
-#define to_zynq_pll_clk(hw)    container_of(hw, struct zynq_pll_clk, hw)
-
-#define CTRL_PLL_FDIV(x)       ((x) >> 12)
-
-static unsigned long zynq_pll_recalc_rate(struct clk_hw *hw,
-                                         unsigned long parent_rate)
-{
-       struct zynq_pll_clk *pll = to_zynq_pll_clk(hw);
-       return parent_rate * CTRL_PLL_FDIV(ioread32(pll->pll_ctrl));
-}
-
-static const struct clk_ops zynq_pll_clk_ops = {
-       .recalc_rate    = zynq_pll_recalc_rate,
-};
-
-static void __init zynq_pll_clk_setup(struct device_node *np)
-{
-       struct clk_init_data init;
-       struct zynq_pll_clk *pll;
-       const char *parent_name;
-       struct clk *clk;
-       u32 regs[2];
-       int ret;
-
-       ret = of_property_read_u32_array(np, "reg", regs, ARRAY_SIZE(regs));
-       if (WARN_ON(ret))
-               return;
-
-       pll = kzalloc(sizeof(*pll), GFP_KERNEL);
-       if (WARN_ON(!pll))
-               return;
-
-       pll->pll_ctrl = slcr_base + regs[0];
-       pll->pll_cfg  = slcr_base + regs[1];
-
-       of_property_read_string(np, "clock-output-names", &init.name);
-
-       init.ops = &zynq_pll_clk_ops;
-       parent_name = of_clk_get_parent_name(np, 0);
-       init.parent_names = &parent_name;
-       init.num_parents = 1;
-
-       pll->hw.init = &init;
-
-       clk = clk_register(NULL, &pll->hw);
-       if (WARN_ON(IS_ERR(clk)))
-               return;
-
-       ret = of_clk_add_provider(np, of_clk_src_simple_get, clk);
-       if (WARN_ON(ret))
-               return;
-}
-CLK_OF_DECLARE(zynq_pll, "xlnx,zynq-pll", zynq_pll_clk_setup);
-
-struct zynq_periph_clk {
-       struct clk_hw           hw;
-       struct clk_onecell_data onecell_data;
-       struct clk              *gates[2];
-       void __iomem            *clk_ctrl;
-       spinlock_t              clkact_lock;
-};
-
-#define to_zynq_periph_clk(hw) container_of(hw, struct zynq_periph_clk, hw)
-
-static const u8 periph_clk_parent_map[] = {
-       0, 0, 1, 2
-};
-#define PERIPH_CLK_CTRL_SRC(x) (periph_clk_parent_map[((x) & 0x30) >> 4])
-#define PERIPH_CLK_CTRL_DIV(x) (((x) & 0x3F00) >> 8)
-
-static unsigned long zynq_periph_recalc_rate(struct clk_hw *hw,
-                                            unsigned long parent_rate)
-{
-       struct zynq_periph_clk *periph = to_zynq_periph_clk(hw);
-       return parent_rate / PERIPH_CLK_CTRL_DIV(ioread32(periph->clk_ctrl));
-}
-
-static u8 zynq_periph_get_parent(struct clk_hw *hw)
-{
-       struct zynq_periph_clk *periph = to_zynq_periph_clk(hw);
-       return PERIPH_CLK_CTRL_SRC(ioread32(periph->clk_ctrl));
-}
-
-static const struct clk_ops zynq_periph_clk_ops = {
-       .recalc_rate    = zynq_periph_recalc_rate,
-       .get_parent     = zynq_periph_get_parent,
-};
-
-static void __init zynq_periph_clk_setup(struct device_node *np)
-{
-       struct zynq_periph_clk *periph;
-       const char *parent_names[3];
-       struct clk_init_data init;
-       int clk_num = 0, err;
-       const char *name;
-       struct clk *clk;
-       u32 reg;
-       int i;
-
-       err = of_property_read_u32(np, "reg", &reg);
-       if (WARN_ON(err))
-               return;
-
-       periph = kzalloc(sizeof(*periph), GFP_KERNEL);
-       if (WARN_ON(!periph))
-               return;
-
-       periph->clk_ctrl = slcr_base + reg;
-       spin_lock_init(&periph->clkact_lock);
-
-       init.name = np->name;
-       init.ops = &zynq_periph_clk_ops;
-       for (i = 0; i < ARRAY_SIZE(parent_names); i++)
-               parent_names[i] = of_clk_get_parent_name(np, i);
-       init.parent_names = parent_names;
-       init.num_parents = ARRAY_SIZE(parent_names);
-
-       periph->hw.init = &init;
-
-       clk = clk_register(NULL, &periph->hw);
-       if (WARN_ON(IS_ERR(clk)))
-               return;
-
-       err = of_clk_add_provider(np, of_clk_src_simple_get, clk);
-       if (WARN_ON(err))
-               return;
-
-       err = of_property_read_string_index(np, "clock-output-names", 0,
-                                           &name);
-       if (WARN_ON(err))
-               return;
-
-       periph->gates[0] = clk_register_gate(NULL, name, np->name, 0,
-                                            periph->clk_ctrl, 0, 0,
-                                            &periph->clkact_lock);
-       if (WARN_ON(IS_ERR(periph->gates[0])))
-               return;
-       clk_num++;
-
-       /* some periph clks have 2 downstream gates */
-       err = of_property_read_string_index(np, "clock-output-names", 1,
-                                           &name);
-       if (err != -ENODATA) {
-               periph->gates[1] = clk_register_gate(NULL, name, np->name, 0,
-                                                    periph->clk_ctrl, 1, 0,
-                                                    &periph->clkact_lock);
-               if (WARN_ON(IS_ERR(periph->gates[1])))
-                       return;
-               clk_num++;
-       }
-
-       periph->onecell_data.clks = periph->gates;
-       periph->onecell_data.clk_num = clk_num;
-
-       err = of_clk_add_provider(np, of_clk_src_onecell_get,
-                                 &periph->onecell_data);
-       if (WARN_ON(err))
-               return;
-}
-CLK_OF_DECLARE(zynq_periph, "xlnx,zynq-periph-clock", zynq_periph_clk_setup);
-
-/* CPU Clock domain is modelled as a mux with 4 children subclks, whose
- * derivative rates depend on CLK_621_TRUE
- */
-
-struct zynq_cpu_clk {
-       struct clk_hw           hw;
-       struct clk_onecell_data onecell_data;
-       struct clk              *subclks[4];
-       void __iomem            *clk_ctrl;
-       spinlock_t              clkact_lock;
-};
-
-#define to_zynq_cpu_clk(hw)    container_of(hw, struct zynq_cpu_clk, hw)
-
-static const u8 zynq_cpu_clk_parent_map[] = {
-       1, 1, 2, 0
-};
-#define CPU_CLK_SRCSEL(x)      (zynq_cpu_clk_parent_map[(((x) & 0x30) >> 4)])
-#define CPU_CLK_CTRL_DIV(x)    (((x) & 0x3F00) >> 8)
-
-static u8 zynq_cpu_clk_get_parent(struct clk_hw *hw)
-{
-       struct zynq_cpu_clk *cpuclk = to_zynq_cpu_clk(hw);
-       return CPU_CLK_SRCSEL(ioread32(cpuclk->clk_ctrl));
-}
-
-static unsigned long zynq_cpu_clk_recalc_rate(struct clk_hw *hw,
-                                             unsigned long parent_rate)
-{
-       struct zynq_cpu_clk *cpuclk = to_zynq_cpu_clk(hw);
-       return parent_rate / CPU_CLK_CTRL_DIV(ioread32(cpuclk->clk_ctrl));
-}
-
-static const struct clk_ops zynq_cpu_clk_ops = {
-       .get_parent     = zynq_cpu_clk_get_parent,
-       .recalc_rate    = zynq_cpu_clk_recalc_rate,
-};
-
-struct zynq_cpu_subclk {
-       struct clk_hw   hw;
-       void __iomem    *clk_621;
-       enum {
-               CPU_SUBCLK_6X4X,
-               CPU_SUBCLK_3X2X,
-               CPU_SUBCLK_2X,
-               CPU_SUBCLK_1X,
-       } which;
-};
-
-#define CLK_621_TRUE(x)        ((x) & 1)
-
-#define to_zynq_cpu_subclk(hw) container_of(hw, struct zynq_cpu_subclk, hw);
-
-static unsigned long zynq_cpu_subclk_recalc_rate(struct clk_hw *hw,
-                                                unsigned long parent_rate)
-{
-       unsigned long uninitialized_var(rate);
-       struct zynq_cpu_subclk *subclk;
-       bool is_621;
-
-       subclk = to_zynq_cpu_subclk(hw)
-       is_621 = CLK_621_TRUE(ioread32(subclk->clk_621));
-
-       switch (subclk->which) {
-       case CPU_SUBCLK_6X4X:
-               rate = parent_rate;
-               break;
-       case CPU_SUBCLK_3X2X:
-               rate = parent_rate / 2;
-               break;
-       case CPU_SUBCLK_2X:
-               rate = parent_rate / (is_621 ? 3 : 2);
-               break;
-       case CPU_SUBCLK_1X:
-               rate = parent_rate / (is_621 ? 6 : 4);
-               break;
-       };
-
-       return rate;
-}
-
-static const struct clk_ops zynq_cpu_subclk_ops = {
-       .recalc_rate    = zynq_cpu_subclk_recalc_rate,
-};
-
-static struct clk *zynq_cpu_subclk_setup(struct device_node *np, u8 which,
-                                        void __iomem *clk_621)
-{
-       struct zynq_cpu_subclk *subclk;
-       struct clk_init_data init;
-       struct clk *clk;
-       int err;
-
-       err = of_property_read_string_index(np, "clock-output-names",
-                                           which, &init.name);
-       if (WARN_ON(err))
-               goto err_read_output_name;
-
-       subclk = kzalloc(sizeof(*subclk), GFP_KERNEL);
-       if (!subclk)
-               goto err_subclk_alloc;
-
-       subclk->clk_621 = clk_621;
-       subclk->which = which;
-
-       init.ops = &zynq_cpu_subclk_ops;
-       init.parent_names = &np->name;
-       init.num_parents = 1;
-
-       subclk->hw.init = &init;
-
-       clk = clk_register(NULL, &subclk->hw);
-       if (WARN_ON(IS_ERR(clk)))
-               goto err_clk_register;
-
-       return clk;
-
-err_clk_register:
-       kfree(subclk);
-err_subclk_alloc:
-err_read_output_name:
-       return ERR_PTR(-EINVAL);
-}
-
-static void __init zynq_cpu_clk_setup(struct device_node *np)
-{
-       struct zynq_cpu_clk *cpuclk;
-       const char *parent_names[3];
-       struct clk_init_data init;
-       void __iomem *clk_621;
-       struct clk *clk;
-       u32 reg[2];
-       int err;
-       int i;
-
-       err = of_property_read_u32_array(np, "reg", reg, ARRAY_SIZE(reg));
-       if (WARN_ON(err))
-               return;
-
-       cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
-       if (WARN_ON(!cpuclk))
-               return;
-
-       cpuclk->clk_ctrl = slcr_base + reg[0];
-       clk_621 = slcr_base + reg[1];
-       spin_lock_init(&cpuclk->clkact_lock);
-
-       init.name = np->name;
-       init.ops = &zynq_cpu_clk_ops;
-       for (i = 0; i < ARRAY_SIZE(parent_names); i++)
-               parent_names[i] = of_clk_get_parent_name(np, i);
-       init.parent_names = parent_names;
-       init.num_parents = ARRAY_SIZE(parent_names);
-
-       cpuclk->hw.init = &init;
-
-       clk = clk_register(NULL, &cpuclk->hw);
-       if (WARN_ON(IS_ERR(clk)))
-               return;
-
-       err = of_clk_add_provider(np, of_clk_src_simple_get, clk);
-       if (WARN_ON(err))
-               return;
-
-       for (i = 0; i < 4; i++) {
-               cpuclk->subclks[i] = zynq_cpu_subclk_setup(np, i, clk_621);
-               if (WARN_ON(IS_ERR(cpuclk->subclks[i])))
-                       return;
-       }
-
-       cpuclk->onecell_data.clks = cpuclk->subclks;
-       cpuclk->onecell_data.clk_num = i;
-
-       err = of_clk_add_provider(np, of_clk_src_onecell_get,
-                                 &cpuclk->onecell_data);
-       if (WARN_ON(err))
-               return;
-}
-CLK_OF_DECLARE(zynq_cpu, "xlnx,zynq-cpu-clock", zynq_cpu_clk_setup);
-
-void __init xilinx_zynq_clocks_init(void __iomem *slcr)
-{
-       slcr_base = slcr;
-       of_clk_init(NULL);
-}
index 57323fd15ec96b7afb6ea00489a9370acbb270f2..0b0f3e729cf7ca5ec18c322a6322ab2001a55a70 100644 (file)
@@ -1,8 +1,23 @@
-config MVEBU_CLK_CORE
-       bool
+config MVEBU_CLK_COMMON
+       bool
 
 config MVEBU_CLK_CPU
-       bool
+       bool
 
-config MVEBU_CLK_GATING
-       bool
+config ARMADA_370_CLK
+       bool
+       select MVEBU_CLK_COMMON
+       select MVEBU_CLK_CPU
+
+config ARMADA_XP_CLK
+       bool
+       select MVEBU_CLK_COMMON
+       select MVEBU_CLK_CPU
+
+config DOVE_CLK
+       bool
+       select MVEBU_CLK_COMMON
+
+config KIRKWOOD_CLK
+       bool
+       select MVEBU_CLK_COMMON
index 58df3dc493636baa4a498fa8684c27b566288b32..1c7e70c63fb26b80145b5e506015874b5da16b64 100644 (file)
@@ -1,3 +1,7 @@
-obj-$(CONFIG_MVEBU_CLK_CORE)   += clk.o clk-core.o
+obj-$(CONFIG_MVEBU_CLK_COMMON) += common.o
 obj-$(CONFIG_MVEBU_CLK_CPU)    += clk-cpu.o
-obj-$(CONFIG_MVEBU_CLK_GATING)         += clk-gating-ctrl.o
+
+obj-$(CONFIG_ARMADA_370_CLK)   += armada-370.o
+obj-$(CONFIG_ARMADA_XP_CLK)    += armada-xp.o
+obj-$(CONFIG_DOVE_CLK)         += dove.o
+obj-$(CONFIG_KIRKWOOD_CLK)     += kirkwood.o
diff --git a/drivers/clk/mvebu/armada-370.c b/drivers/clk/mvebu/armada-370.c
new file mode 100644 (file)
index 0000000..079960e
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Marvell Armada 370 SoC clocks
+ *
+ * Copyright (C) 2012 Marvell
+ *
+ * Gregory CLEMENT <gregory.clement@free-electrons.com>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ * Andrew Lunn <andrew@lunn.ch>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include "common.h"
+
+/*
+ * Core Clocks
+ */
+
+#define SARL                           0       /* Low part [0:31] */
+#define         SARL_A370_PCLK_FREQ_OPT        11
+#define         SARL_A370_PCLK_FREQ_OPT_MASK   0xF
+#define         SARL_A370_FAB_FREQ_OPT         15
+#define         SARL_A370_FAB_FREQ_OPT_MASK    0x1F
+#define         SARL_A370_TCLK_FREQ_OPT        20
+#define         SARL_A370_TCLK_FREQ_OPT_MASK   0x1
+
+enum { A370_CPU_TO_NBCLK, A370_CPU_TO_HCLK, A370_CPU_TO_DRAMCLK };
+
+static const struct coreclk_ratio __initconst a370_coreclk_ratios[] = {
+       { .id = A370_CPU_TO_NBCLK, .name = "nbclk" },
+       { .id = A370_CPU_TO_HCLK, .name = "hclk" },
+       { .id = A370_CPU_TO_DRAMCLK, .name = "dramclk" },
+};
+
+static const u32 __initconst a370_tclk_freqs[] = {
+       16600000,
+       20000000,
+};
+
+static u32 __init a370_get_tclk_freq(void __iomem *sar)
+{
+       u8 tclk_freq_select = 0;
+
+       tclk_freq_select = ((readl(sar) >> SARL_A370_TCLK_FREQ_OPT) &
+                           SARL_A370_TCLK_FREQ_OPT_MASK);
+       return a370_tclk_freqs[tclk_freq_select];
+}
+
+static const u32 __initconst a370_cpu_freqs[] = {
+       400000000,
+       533000000,
+       667000000,
+       800000000,
+       1000000000,
+       1067000000,
+       1200000000,
+};
+
+static u32 __init a370_get_cpu_freq(void __iomem *sar)
+{
+       u32 cpu_freq;
+       u8 cpu_freq_select = 0;
+
+       cpu_freq_select = ((readl(sar) >> SARL_A370_PCLK_FREQ_OPT) &
+                          SARL_A370_PCLK_FREQ_OPT_MASK);
+       if (cpu_freq_select >= ARRAY_SIZE(a370_cpu_freqs)) {
+               pr_err("CPU freq select unsupported %d\n", cpu_freq_select);
+               cpu_freq = 0;
+       } else
+               cpu_freq = a370_cpu_freqs[cpu_freq_select];
+
+       return cpu_freq;
+}
+
+static const int __initconst a370_nbclk_ratios[32][2] = {
+       {0, 1}, {1, 2}, {2, 2}, {2, 2},
+       {1, 2}, {1, 2}, {1, 1}, {2, 3},
+       {0, 1}, {1, 2}, {2, 4}, {0, 1},
+       {1, 2}, {0, 1}, {0, 1}, {2, 2},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {2, 3}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+};
+
+static const int __initconst a370_hclk_ratios[32][2] = {
+       {0, 1}, {1, 2}, {2, 6}, {2, 3},
+       {1, 3}, {1, 4}, {1, 2}, {2, 6},
+       {0, 1}, {1, 6}, {2, 10}, {0, 1},
+       {1, 4}, {0, 1}, {0, 1}, {2, 5},
+       {0, 1}, {0, 1}, {0, 1}, {1, 2},
+       {2, 6}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+};
+
+static const int __initconst a370_dramclk_ratios[32][2] = {
+       {0, 1}, {1, 2}, {2, 3}, {2, 3},
+       {1, 3}, {1, 2}, {1, 2}, {2, 6},
+       {0, 1}, {1, 3}, {2, 5}, {0, 1},
+       {1, 4}, {0, 1}, {0, 1}, {2, 5},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {2, 3}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+};
+
+static void __init a370_get_clk_ratio(
+       void __iomem *sar, int id, int *mult, int *div)
+{
+       u32 opt = ((readl(sar) >> SARL_A370_FAB_FREQ_OPT) &
+               SARL_A370_FAB_FREQ_OPT_MASK);
+
+       switch (id) {
+       case A370_CPU_TO_NBCLK:
+               *mult = a370_nbclk_ratios[opt][0];
+               *div = a370_nbclk_ratios[opt][1];
+               break;
+       case A370_CPU_TO_HCLK:
+               *mult = a370_hclk_ratios[opt][0];
+               *div = a370_hclk_ratios[opt][1];
+               break;
+       case A370_CPU_TO_DRAMCLK:
+               *mult = a370_dramclk_ratios[opt][0];
+               *div = a370_dramclk_ratios[opt][1];
+               break;
+       }
+}
+
+static const struct coreclk_soc_desc a370_coreclks = {
+       .get_tclk_freq = a370_get_tclk_freq,
+       .get_cpu_freq = a370_get_cpu_freq,
+       .get_clk_ratio = a370_get_clk_ratio,
+       .ratios = a370_coreclk_ratios,
+       .num_ratios = ARRAY_SIZE(a370_coreclk_ratios),
+};
+
+static void __init a370_coreclk_init(struct device_node *np)
+{
+       mvebu_coreclk_setup(np, &a370_coreclks);
+}
+CLK_OF_DECLARE(a370_core_clk, "marvell,armada-370-core-clock",
+              a370_coreclk_init);
+
+/*
+ * Clock Gating Control
+ */
+
+static const struct clk_gating_soc_desc __initconst a370_gating_desc[] = {
+       { "audio", NULL, 0, 0 },
+       { "pex0_en", NULL, 1, 0 },
+       { "pex1_en", NULL,  2, 0 },
+       { "ge1", NULL, 3, 0 },
+       { "ge0", NULL, 4, 0 },
+       { "pex0", "pex0_en", 5, 0 },
+       { "pex1", "pex1_en", 9, 0 },
+       { "sata0", NULL, 15, 0 },
+       { "sdio", NULL, 17, 0 },
+       { "tdm", NULL, 25, 0 },
+       { "ddr", NULL, 28, CLK_IGNORE_UNUSED },
+       { "sata1", NULL, 30, 0 },
+       { }
+};
+
+static void __init a370_clk_gating_init(struct device_node *np)
+{
+       mvebu_clk_gating_setup(np, a370_gating_desc);
+}
+CLK_OF_DECLARE(a370_clk_gating, "marvell,armada-370-gating-clock",
+              a370_clk_gating_init);
diff --git a/drivers/clk/mvebu/armada-xp.c b/drivers/clk/mvebu/armada-xp.c
new file mode 100644 (file)
index 0000000..13b62ce
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * Marvell Armada XP SoC clocks
+ *
+ * Copyright (C) 2012 Marvell
+ *
+ * Gregory CLEMENT <gregory.clement@free-electrons.com>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ * Andrew Lunn <andrew@lunn.ch>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include "common.h"
+
+/*
+ * Core Clocks
+ *
+ * Armada XP Sample At Reset is a 64 bit bitfiled split in two
+ * register of 32 bits
+ */
+
+#define SARL                           0       /* Low part [0:31] */
+#define         SARL_AXP_PCLK_FREQ_OPT         21
+#define         SARL_AXP_PCLK_FREQ_OPT_MASK    0x7
+#define         SARL_AXP_FAB_FREQ_OPT          24
+#define         SARL_AXP_FAB_FREQ_OPT_MASK     0xF
+#define SARH                           4       /* High part [32:63] */
+#define         SARH_AXP_PCLK_FREQ_OPT         (52-32)
+#define         SARH_AXP_PCLK_FREQ_OPT_MASK    0x1
+#define         SARH_AXP_PCLK_FREQ_OPT_SHIFT   3
+#define         SARH_AXP_FAB_FREQ_OPT          (51-32)
+#define         SARH_AXP_FAB_FREQ_OPT_MASK     0x1
+#define         SARH_AXP_FAB_FREQ_OPT_SHIFT    4
+
+enum { AXP_CPU_TO_NBCLK, AXP_CPU_TO_HCLK, AXP_CPU_TO_DRAMCLK };
+
+static const struct coreclk_ratio __initconst axp_coreclk_ratios[] = {
+       { .id = AXP_CPU_TO_NBCLK, .name = "nbclk" },
+       { .id = AXP_CPU_TO_HCLK, .name = "hclk" },
+       { .id = AXP_CPU_TO_DRAMCLK, .name = "dramclk" },
+};
+
+/* Armada XP TCLK frequency is fixed to 250MHz */
+static u32 __init axp_get_tclk_freq(void __iomem *sar)
+{
+       return 250000000;
+}
+
+static const u32 __initconst axp_cpu_freqs[] = {
+       1000000000,
+       1066000000,
+       1200000000,
+       1333000000,
+       1500000000,
+       1666000000,
+       1800000000,
+       2000000000,
+       667000000,
+       0,
+       800000000,
+       1600000000,
+};
+
+static u32 __init axp_get_cpu_freq(void __iomem *sar)
+{
+       u32 cpu_freq;
+       u8 cpu_freq_select = 0;
+
+       cpu_freq_select = ((readl(sar + SARL) >> SARL_AXP_PCLK_FREQ_OPT) &
+                          SARL_AXP_PCLK_FREQ_OPT_MASK);
+       /*
+        * The upper bit is not contiguous to the other ones and
+        * located in the high part of the SAR registers
+        */
+       cpu_freq_select |= (((readl(sar + SARH) >> SARH_AXP_PCLK_FREQ_OPT) &
+            SARH_AXP_PCLK_FREQ_OPT_MASK) << SARH_AXP_PCLK_FREQ_OPT_SHIFT);
+       if (cpu_freq_select >= ARRAY_SIZE(axp_cpu_freqs)) {
+               pr_err("CPU freq select unsupported: %d\n", cpu_freq_select);
+               cpu_freq = 0;
+       } else
+               cpu_freq = axp_cpu_freqs[cpu_freq_select];
+
+       return cpu_freq;
+}
+
+static const int __initconst axp_nbclk_ratios[32][2] = {
+       {0, 1}, {1, 2}, {2, 2}, {2, 2},
+       {1, 2}, {1, 2}, {1, 1}, {2, 3},
+       {0, 1}, {1, 2}, {2, 4}, {0, 1},
+       {1, 2}, {0, 1}, {0, 1}, {2, 2},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {2, 3}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+};
+
+static const int __initconst axp_hclk_ratios[32][2] = {
+       {0, 1}, {1, 2}, {2, 6}, {2, 3},
+       {1, 3}, {1, 4}, {1, 2}, {2, 6},
+       {0, 1}, {1, 6}, {2, 10}, {0, 1},
+       {1, 4}, {0, 1}, {0, 1}, {2, 5},
+       {0, 1}, {0, 1}, {0, 1}, {1, 2},
+       {2, 6}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+};
+
+static const int __initconst axp_dramclk_ratios[32][2] = {
+       {0, 1}, {1, 2}, {2, 3}, {2, 3},
+       {1, 3}, {1, 2}, {1, 2}, {2, 6},
+       {0, 1}, {1, 3}, {2, 5}, {0, 1},
+       {1, 4}, {0, 1}, {0, 1}, {2, 5},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {2, 3}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {1, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+};
+
+static void __init axp_get_clk_ratio(
+       void __iomem *sar, int id, int *mult, int *div)
+{
+       u32 opt = ((readl(sar + SARL) >> SARL_AXP_FAB_FREQ_OPT) &
+             SARL_AXP_FAB_FREQ_OPT_MASK);
+       /*
+        * The upper bit is not contiguous to the other ones and
+        * located in the high part of the SAR registers
+        */
+       opt |= (((readl(sar + SARH) >> SARH_AXP_FAB_FREQ_OPT) &
+                SARH_AXP_FAB_FREQ_OPT_MASK) << SARH_AXP_FAB_FREQ_OPT_SHIFT);
+
+       switch (id) {
+       case AXP_CPU_TO_NBCLK:
+               *mult = axp_nbclk_ratios[opt][0];
+               *div = axp_nbclk_ratios[opt][1];
+               break;
+       case AXP_CPU_TO_HCLK:
+               *mult = axp_hclk_ratios[opt][0];
+               *div = axp_hclk_ratios[opt][1];
+               break;
+       case AXP_CPU_TO_DRAMCLK:
+               *mult = axp_dramclk_ratios[opt][0];
+               *div = axp_dramclk_ratios[opt][1];
+               break;
+       }
+}
+
+static const struct coreclk_soc_desc axp_coreclks = {
+       .get_tclk_freq = axp_get_tclk_freq,
+       .get_cpu_freq = axp_get_cpu_freq,
+       .get_clk_ratio = axp_get_clk_ratio,
+       .ratios = axp_coreclk_ratios,
+       .num_ratios = ARRAY_SIZE(axp_coreclk_ratios),
+};
+
+static void __init axp_coreclk_init(struct device_node *np)
+{
+       mvebu_coreclk_setup(np, &axp_coreclks);
+}
+CLK_OF_DECLARE(axp_core_clk, "marvell,armada-xp-core-clock",
+              axp_coreclk_init);
+
+/*
+ * Clock Gating Control
+ */
+
+static const struct clk_gating_soc_desc __initconst axp_gating_desc[] = {
+       { "audio", NULL, 0, 0 },
+       { "ge3", NULL, 1, 0 },
+       { "ge2", NULL,  2, 0 },
+       { "ge1", NULL, 3, 0 },
+       { "ge0", NULL, 4, 0 },
+       { "pex00", NULL, 5, 0 },
+       { "pex01", NULL, 6, 0 },
+       { "pex02", NULL, 7, 0 },
+       { "pex03", NULL, 8, 0 },
+       { "pex10", NULL, 9, 0 },
+       { "pex11", NULL, 10, 0 },
+       { "pex12", NULL, 11, 0 },
+       { "pex13", NULL, 12, 0 },
+       { "bp", NULL, 13, 0 },
+       { "sata0lnk", NULL, 14, 0 },
+       { "sata0", "sata0lnk", 15, 0 },
+       { "lcd", NULL, 16, 0 },
+       { "sdio", NULL, 17, 0 },
+       { "usb0", NULL, 18, 0 },
+       { "usb1", NULL, 19, 0 },
+       { "usb2", NULL, 20, 0 },
+       { "xor0", NULL, 22, 0 },
+       { "crypto", NULL, 23, 0 },
+       { "tdm", NULL, 25, 0 },
+       { "pex20", NULL, 26, 0 },
+       { "pex30", NULL, 27, 0 },
+       { "xor1", NULL, 28, 0 },
+       { "sata1lnk", NULL, 29, 0 },
+       { "sata1", "sata1lnk", 30, 0 },
+       { }
+};
+
+static void __init axp_clk_gating_init(struct device_node *np)
+{
+       mvebu_clk_gating_setup(np, axp_gating_desc);
+}
+CLK_OF_DECLARE(axp_clk_gating, "marvell,armada-xp-gating-clock",
+              axp_clk_gating_init);
diff --git a/drivers/clk/mvebu/clk-core.c b/drivers/clk/mvebu/clk-core.c
deleted file mode 100644 (file)
index 0a53edb..0000000
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * Marvell EBU clock core handling defined at reset
- *
- * Copyright (C) 2012 Marvell
- *
- * Gregory CLEMENT <gregory.clement@free-electrons.com>
- * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-#include <linux/kernel.h>
-#include <linux/clk.h>
-#include <linux/clkdev.h>
-#include <linux/clk-provider.h>
-#include <linux/of_address.h>
-#include <linux/io.h>
-#include <linux/of.h>
-#include "clk-core.h"
-
-struct core_ratio {
-       int id;
-       const char *name;
-};
-
-struct core_clocks {
-       u32 (*get_tclk_freq)(void __iomem *sar);
-       u32 (*get_cpu_freq)(void __iomem *sar);
-       void (*get_clk_ratio)(void __iomem *sar, int id, int *mult, int *div);
-       const struct core_ratio *ratios;
-       int num_ratios;
-};
-
-static struct clk_onecell_data clk_data;
-
-static void __init mvebu_clk_core_setup(struct device_node *np,
-                                struct core_clocks *coreclk)
-{
-       const char *tclk_name = "tclk";
-       const char *cpuclk_name = "cpuclk";
-       void __iomem *base;
-       unsigned long rate;
-       int n;
-
-       base = of_iomap(np, 0);
-       if (WARN_ON(!base))
-               return;
-
-       /*
-        * Allocate struct for TCLK, cpu clk, and core ratio clocks
-        */
-       clk_data.clk_num = 2 + coreclk->num_ratios;
-       clk_data.clks = kzalloc(clk_data.clk_num * sizeof(struct clk *),
-                               GFP_KERNEL);
-       if (WARN_ON(!clk_data.clks))
-               return;
-
-       /*
-        * Register TCLK
-        */
-       of_property_read_string_index(np, "clock-output-names", 0,
-                                     &tclk_name);
-       rate = coreclk->get_tclk_freq(base);
-       clk_data.clks[0] = clk_register_fixed_rate(NULL, tclk_name, NULL,
-                                                  CLK_IS_ROOT, rate);
-       WARN_ON(IS_ERR(clk_data.clks[0]));
-
-       /*
-        * Register CPU clock
-        */
-       of_property_read_string_index(np, "clock-output-names", 1,
-                                     &cpuclk_name);
-       rate = coreclk->get_cpu_freq(base);
-       clk_data.clks[1] = clk_register_fixed_rate(NULL, cpuclk_name, NULL,
-                                                  CLK_IS_ROOT, rate);
-       WARN_ON(IS_ERR(clk_data.clks[1]));
-
-       /*
-        * Register fixed-factor clocks derived from CPU clock
-        */
-       for (n = 0; n < coreclk->num_ratios; n++) {
-               const char *rclk_name = coreclk->ratios[n].name;
-               int mult, div;
-
-               of_property_read_string_index(np, "clock-output-names",
-                                             2+n, &rclk_name);
-               coreclk->get_clk_ratio(base, coreclk->ratios[n].id,
-                                      &mult, &div);
-               clk_data.clks[2+n] = clk_register_fixed_factor(NULL, rclk_name,
-                                      cpuclk_name, 0, mult, div);
-               WARN_ON(IS_ERR(clk_data.clks[2+n]));
-       };
-
-       /*
-        * SAR register isn't needed anymore
-        */
-       iounmap(base);
-
-       of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
-}
-
-#ifdef CONFIG_MACH_ARMADA_370_XP
-/*
- * Armada 370/XP Sample At Reset is a 64 bit bitfiled split in two
- * register of 32 bits
- */
-
-#define SARL                               0   /* Low part [0:31] */
-#define            SARL_AXP_PCLK_FREQ_OPT          21
-#define            SARL_AXP_PCLK_FREQ_OPT_MASK     0x7
-#define            SARL_A370_PCLK_FREQ_OPT         11
-#define            SARL_A370_PCLK_FREQ_OPT_MASK    0xF
-#define            SARL_AXP_FAB_FREQ_OPT           24
-#define            SARL_AXP_FAB_FREQ_OPT_MASK      0xF
-#define            SARL_A370_FAB_FREQ_OPT          15
-#define            SARL_A370_FAB_FREQ_OPT_MASK     0x1F
-#define            SARL_A370_TCLK_FREQ_OPT         20
-#define            SARL_A370_TCLK_FREQ_OPT_MASK    0x1
-#define SARH                               4   /* High part [32:63] */
-#define            SARH_AXP_PCLK_FREQ_OPT          (52-32)
-#define            SARH_AXP_PCLK_FREQ_OPT_MASK     0x1
-#define            SARH_AXP_PCLK_FREQ_OPT_SHIFT    3
-#define            SARH_AXP_FAB_FREQ_OPT           (51-32)
-#define            SARH_AXP_FAB_FREQ_OPT_MASK      0x1
-#define            SARH_AXP_FAB_FREQ_OPT_SHIFT     4
-
-static const u32 __initconst armada_370_tclk_frequencies[] = {
-       16600000,
-       20000000,
-};
-
-static u32 __init armada_370_get_tclk_freq(void __iomem *sar)
-{
-       u8 tclk_freq_select = 0;
-
-       tclk_freq_select = ((readl(sar) >> SARL_A370_TCLK_FREQ_OPT) &
-                           SARL_A370_TCLK_FREQ_OPT_MASK);
-       return armada_370_tclk_frequencies[tclk_freq_select];
-}
-
-static const u32 __initconst armada_370_cpu_frequencies[] = {
-       400000000,
-       533000000,
-       667000000,
-       800000000,
-       1000000000,
-       1067000000,
-       1200000000,
-};
-
-static u32 __init armada_370_get_cpu_freq(void __iomem *sar)
-{
-       u32 cpu_freq;
-       u8 cpu_freq_select = 0;
-
-       cpu_freq_select = ((readl(sar) >> SARL_A370_PCLK_FREQ_OPT) &
-                          SARL_A370_PCLK_FREQ_OPT_MASK);
-       if (cpu_freq_select >= ARRAY_SIZE(armada_370_cpu_frequencies)) {
-               pr_err("CPU freq select unsupported %d\n", cpu_freq_select);
-               cpu_freq = 0;
-       } else
-               cpu_freq = armada_370_cpu_frequencies[cpu_freq_select];
-
-       return cpu_freq;
-}
-
-enum { A370_XP_NBCLK, A370_XP_HCLK, A370_XP_DRAMCLK };
-
-static const struct core_ratio __initconst armada_370_xp_core_ratios[] = {
-       { .id = A370_XP_NBCLK,   .name = "nbclk" },
-       { .id = A370_XP_HCLK,    .name = "hclk" },
-       { .id = A370_XP_DRAMCLK, .name = "dramclk" },
-};
-
-static const int __initconst armada_370_xp_nbclk_ratios[32][2] = {
-       {0, 1}, {1, 2}, {2, 2}, {2, 2},
-       {1, 2}, {1, 2}, {1, 1}, {2, 3},
-       {0, 1}, {1, 2}, {2, 4}, {0, 1},
-       {1, 2}, {0, 1}, {0, 1}, {2, 2},
-       {0, 1}, {0, 1}, {0, 1}, {1, 1},
-       {2, 3}, {0, 1}, {0, 1}, {0, 1},
-       {0, 1}, {0, 1}, {0, 1}, {1, 1},
-       {0, 1}, {0, 1}, {0, 1}, {0, 1},
-};
-
-static const int __initconst armada_370_xp_hclk_ratios[32][2] = {
-       {0, 1}, {1, 2}, {2, 6}, {2, 3},
-       {1, 3}, {1, 4}, {1, 2}, {2, 6},
-       {0, 1}, {1, 6}, {2, 10}, {0, 1},
-       {1, 4}, {0, 1}, {0, 1}, {2, 5},
-       {0, 1}, {0, 1}, {0, 1}, {1, 2},
-       {2, 6}, {0, 1}, {0, 1}, {0, 1},
-       {0, 1}, {0, 1}, {0, 1}, {1, 1},
-       {0, 1}, {0, 1}, {0, 1}, {0, 1},
-};
-
-static const int __initconst armada_370_xp_dramclk_ratios[32][2] = {
-       {0, 1}, {1, 2}, {2, 3}, {2, 3},
-       {1, 3}, {1, 2}, {1, 2}, {2, 6},
-       {0, 1}, {1, 3}, {2, 5}, {0, 1},
-       {1, 4}, {0, 1}, {0, 1}, {2, 5},
-       {0, 1}, {0, 1}, {0, 1}, {1, 1},
-       {2, 3}, {0, 1}, {0, 1}, {0, 1},
-       {0, 1}, {0, 1}, {0, 1}, {1, 1},
-       {0, 1}, {0, 1}, {0, 1}, {0, 1},
-};
-
-static void __init armada_370_xp_get_clk_ratio(u32 opt,
-       void __iomem *sar, int id, int *mult, int *div)
-{
-       switch (id) {
-       case A370_XP_NBCLK:
-               *mult = armada_370_xp_nbclk_ratios[opt][0];
-               *div = armada_370_xp_nbclk_ratios[opt][1];
-               break;
-       case A370_XP_HCLK:
-               *mult = armada_370_xp_hclk_ratios[opt][0];
-               *div = armada_370_xp_hclk_ratios[opt][1];
-               break;
-       case A370_XP_DRAMCLK:
-               *mult = armada_370_xp_dramclk_ratios[opt][0];
-               *div = armada_370_xp_dramclk_ratios[opt][1];
-               break;
-       }
-}
-
-static void __init armada_370_get_clk_ratio(
-       void __iomem *sar, int id, int *mult, int *div)
-{
-       u32 opt = ((readl(sar) >> SARL_A370_FAB_FREQ_OPT) &
-               SARL_A370_FAB_FREQ_OPT_MASK);
-
-       armada_370_xp_get_clk_ratio(opt, sar, id, mult, div);
-}
-
-
-static const struct core_clocks armada_370_core_clocks = {
-       .get_tclk_freq = armada_370_get_tclk_freq,
-       .get_cpu_freq = armada_370_get_cpu_freq,
-       .get_clk_ratio = armada_370_get_clk_ratio,
-       .ratios = armada_370_xp_core_ratios,
-       .num_ratios = ARRAY_SIZE(armada_370_xp_core_ratios),
-};
-
-static const u32 __initconst armada_xp_cpu_frequencies[] = {
-       1000000000,
-       1066000000,
-       1200000000,
-       1333000000,
-       1500000000,
-       1666000000,
-       1800000000,
-       2000000000,
-       667000000,
-       0,
-       800000000,
-       1600000000,
-};
-
-/* For Armada XP TCLK frequency is fix: 250MHz */
-static u32 __init armada_xp_get_tclk_freq(void __iomem *sar)
-{
-       return 250 * 1000 * 1000;
-}
-
-static u32 __init armada_xp_get_cpu_freq(void __iomem *sar)
-{
-       u32 cpu_freq;
-       u8 cpu_freq_select = 0;
-
-       cpu_freq_select = ((readl(sar) >> SARL_AXP_PCLK_FREQ_OPT) &
-                          SARL_AXP_PCLK_FREQ_OPT_MASK);
-       /*
-        * The upper bit is not contiguous to the other ones and
-        * located in the high part of the SAR registers
-        */
-       cpu_freq_select |= (((readl(sar+4) >> SARH_AXP_PCLK_FREQ_OPT) &
-                            SARH_AXP_PCLK_FREQ_OPT_MASK)
-                           << SARH_AXP_PCLK_FREQ_OPT_SHIFT);
-       if (cpu_freq_select >= ARRAY_SIZE(armada_xp_cpu_frequencies)) {
-               pr_err("CPU freq select unsupported: %d\n", cpu_freq_select);
-               cpu_freq = 0;
-       } else
-               cpu_freq = armada_xp_cpu_frequencies[cpu_freq_select];
-
-       return cpu_freq;
-}
-
-static void __init armada_xp_get_clk_ratio(
-       void __iomem *sar, int id, int *mult, int *div)
-{
-
-       u32 opt = ((readl(sar) >> SARL_AXP_FAB_FREQ_OPT) &
-             SARL_AXP_FAB_FREQ_OPT_MASK);
-       /*
-        * The upper bit is not contiguous to the other ones and
-        * located in the high part of the SAR registers
-        */
-       opt |= (((readl(sar+4) >> SARH_AXP_FAB_FREQ_OPT) &
-               SARH_AXP_FAB_FREQ_OPT_MASK)
-              << SARH_AXP_FAB_FREQ_OPT_SHIFT);
-
-       armada_370_xp_get_clk_ratio(opt, sar, id, mult, div);
-}
-
-static const struct core_clocks armada_xp_core_clocks = {
-       .get_tclk_freq = armada_xp_get_tclk_freq,
-       .get_cpu_freq = armada_xp_get_cpu_freq,
-       .get_clk_ratio = armada_xp_get_clk_ratio,
-       .ratios = armada_370_xp_core_ratios,
-       .num_ratios = ARRAY_SIZE(armada_370_xp_core_ratios),
-};
-
-#endif /* CONFIG_MACH_ARMADA_370_XP */
-
-/*
- * Dove PLL sample-at-reset configuration
- *
- * SAR0[8:5]   : CPU frequency
- *              5  = 1000 MHz
- *              6  =  933 MHz
- *              7  =  933 MHz
- *              8  =  800 MHz
- *              9  =  800 MHz
- *              10 =  800 MHz
- *              11 = 1067 MHz
- *              12 =  667 MHz
- *              13 =  533 MHz
- *              14 =  400 MHz
- *              15 =  333 MHz
- *              others reserved.
- *
- * SAR0[11:9]  : CPU to L2 Clock divider ratio
- *              0 = (1/1) * CPU
- *              2 = (1/2) * CPU
- *              4 = (1/3) * CPU
- *              6 = (1/4) * CPU
- *              others reserved.
- *
- * SAR0[15:12] : CPU to DDR DRAM Clock divider ratio
- *              0  = (1/1) * CPU
- *              2  = (1/2) * CPU
- *              3  = (2/5) * CPU
- *              4  = (1/3) * CPU
- *              6  = (1/4) * CPU
- *              8  = (1/5) * CPU
- *              10 = (1/6) * CPU
- *              12 = (1/7) * CPU
- *              14 = (1/8) * CPU
- *              15 = (1/10) * CPU
- *              others reserved.
- *
- * SAR0[24:23] : TCLK frequency
- *              0 = 166 MHz
- *              1 = 125 MHz
- *              others reserved.
- */
-#ifdef CONFIG_ARCH_DOVE
-#define SAR_DOVE_CPU_FREQ              5
-#define SAR_DOVE_CPU_FREQ_MASK         0xf
-#define SAR_DOVE_L2_RATIO              9
-#define SAR_DOVE_L2_RATIO_MASK         0x7
-#define SAR_DOVE_DDR_RATIO             12
-#define SAR_DOVE_DDR_RATIO_MASK                0xf
-#define SAR_DOVE_TCLK_FREQ             23
-#define SAR_DOVE_TCLK_FREQ_MASK                0x3
-
-static const u32 __initconst dove_tclk_frequencies[] = {
-       166666667,
-       125000000,
-       0, 0
-};
-
-static u32 __init dove_get_tclk_freq(void __iomem *sar)
-{
-       u32 opt = (readl(sar) >> SAR_DOVE_TCLK_FREQ) &
-               SAR_DOVE_TCLK_FREQ_MASK;
-       return dove_tclk_frequencies[opt];
-}
-
-static const u32 __initconst dove_cpu_frequencies[] = {
-       0, 0, 0, 0, 0,
-       1000000000,
-       933333333, 933333333,
-       800000000, 800000000, 800000000,
-       1066666667,
-       666666667,
-       533333333,
-       400000000,
-       333333333
-};
-
-static u32 __init dove_get_cpu_freq(void __iomem *sar)
-{
-       u32 opt = (readl(sar) >> SAR_DOVE_CPU_FREQ) &
-               SAR_DOVE_CPU_FREQ_MASK;
-       return dove_cpu_frequencies[opt];
-}
-
-enum { DOVE_CPU_TO_L2, DOVE_CPU_TO_DDR };
-
-static const struct core_ratio __initconst dove_core_ratios[] = {
-       { .id = DOVE_CPU_TO_L2, .name = "l2clk", },
-       { .id = DOVE_CPU_TO_DDR, .name = "ddrclk", }
-};
-
-static const int __initconst dove_cpu_l2_ratios[8][2] = {
-       { 1, 1 }, { 0, 1 }, { 1, 2 }, { 0, 1 },
-       { 1, 3 }, { 0, 1 }, { 1, 4 }, { 0, 1 }
-};
-
-static const int __initconst dove_cpu_ddr_ratios[16][2] = {
-       { 1, 1 }, { 0, 1 }, { 1, 2 }, { 2, 5 },
-       { 1, 3 }, { 0, 1 }, { 1, 4 }, { 0, 1 },
-       { 1, 5 }, { 0, 1 }, { 1, 6 }, { 0, 1 },
-       { 1, 7 }, { 0, 1 }, { 1, 8 }, { 1, 10 }
-};
-
-static void __init dove_get_clk_ratio(
-       void __iomem *sar, int id, int *mult, int *div)
-{
-       switch (id) {
-       case DOVE_CPU_TO_L2:
-       {
-               u32 opt = (readl(sar) >> SAR_DOVE_L2_RATIO) &
-                       SAR_DOVE_L2_RATIO_MASK;
-               *mult = dove_cpu_l2_ratios[opt][0];
-               *div = dove_cpu_l2_ratios[opt][1];
-               break;
-       }
-       case DOVE_CPU_TO_DDR:
-       {
-               u32 opt = (readl(sar) >> SAR_DOVE_DDR_RATIO) &
-                       SAR_DOVE_DDR_RATIO_MASK;
-               *mult = dove_cpu_ddr_ratios[opt][0];
-               *div = dove_cpu_ddr_ratios[opt][1];
-               break;
-       }
-       }
-}
-
-static const struct core_clocks dove_core_clocks = {
-       .get_tclk_freq = dove_get_tclk_freq,
-       .get_cpu_freq = dove_get_cpu_freq,
-       .get_clk_ratio = dove_get_clk_ratio,
-       .ratios = dove_core_ratios,
-       .num_ratios = ARRAY_SIZE(dove_core_ratios),
-};
-#endif /* CONFIG_ARCH_DOVE */
-
-/*
- * Kirkwood PLL sample-at-reset configuration
- * (6180 has different SAR layout than other Kirkwood SoCs)
- *
- * SAR0[4:3,22,1] : CPU frequency (6281,6292,6282)
- *     4  =  600 MHz
- *     6  =  800 MHz
- *     7  = 1000 MHz
- *     9  = 1200 MHz
- *     12 = 1500 MHz
- *     13 = 1600 MHz
- *     14 = 1800 MHz
- *     15 = 2000 MHz
- *     others reserved.
- *
- * SAR0[19,10:9] : CPU to L2 Clock divider ratio (6281,6292,6282)
- *     1 = (1/2) * CPU
- *     3 = (1/3) * CPU
- *     5 = (1/4) * CPU
- *     others reserved.
- *
- * SAR0[8:5] : CPU to DDR DRAM Clock divider ratio (6281,6292,6282)
- *     2 = (1/2) * CPU
- *     4 = (1/3) * CPU
- *     6 = (1/4) * CPU
- *     7 = (2/9) * CPU
- *     8 = (1/5) * CPU
- *     9 = (1/6) * CPU
- *     others reserved.
- *
- * SAR0[4:2] : Kirkwood 6180 cpu/l2/ddr clock configuration (6180 only)
- *     5 = [CPU =  600 MHz, L2 = (1/2) * CPU, DDR = 200 MHz = (1/3) * CPU]
- *     6 = [CPU =  800 MHz, L2 = (1/2) * CPU, DDR = 200 MHz = (1/4) * CPU]
- *     7 = [CPU = 1000 MHz, L2 = (1/2) * CPU, DDR = 200 MHz = (1/5) * CPU]
- *     others reserved.
- *
- * SAR0[21] : TCLK frequency
- *     0 = 200 MHz
- *     1 = 166 MHz
- *     others reserved.
- */
-#ifdef CONFIG_ARCH_KIRKWOOD
-#define SAR_KIRKWOOD_CPU_FREQ(x)       \
-       (((x & (1 <<  1)) >>  1) |      \
-        ((x & (1 << 22)) >> 21) |      \
-        ((x & (3 <<  3)) >>  1))
-#define SAR_KIRKWOOD_L2_RATIO(x)       \
-       (((x & (3 <<  9)) >> 9) |       \
-        (((x & (1 << 19)) >> 17)))
-#define SAR_KIRKWOOD_DDR_RATIO         5
-#define SAR_KIRKWOOD_DDR_RATIO_MASK    0xf
-#define SAR_MV88F6180_CLK              2
-#define SAR_MV88F6180_CLK_MASK         0x7
-#define SAR_KIRKWOOD_TCLK_FREQ         21
-#define SAR_KIRKWOOD_TCLK_FREQ_MASK    0x1
-
-enum { KIRKWOOD_CPU_TO_L2, KIRKWOOD_CPU_TO_DDR };
-
-static const struct core_ratio __initconst kirkwood_core_ratios[] = {
-       { .id = KIRKWOOD_CPU_TO_L2, .name = "l2clk", },
-       { .id = KIRKWOOD_CPU_TO_DDR, .name = "ddrclk", }
-};
-
-static u32 __init kirkwood_get_tclk_freq(void __iomem *sar)
-{
-       u32 opt = (readl(sar) >> SAR_KIRKWOOD_TCLK_FREQ) &
-               SAR_KIRKWOOD_TCLK_FREQ_MASK;
-       return (opt) ? 166666667 : 200000000;
-}
-
-static const u32 __initconst kirkwood_cpu_frequencies[] = {
-       0, 0, 0, 0,
-       600000000,
-       0,
-       800000000,
-       1000000000,
-       0,
-       1200000000,
-       0, 0,
-       1500000000,
-       1600000000,
-       1800000000,
-       2000000000
-};
-
-static u32 __init kirkwood_get_cpu_freq(void __iomem *sar)
-{
-       u32 opt = SAR_KIRKWOOD_CPU_FREQ(readl(sar));
-       return kirkwood_cpu_frequencies[opt];
-}
-
-static const int __initconst kirkwood_cpu_l2_ratios[8][2] = {
-       { 0, 1 }, { 1, 2 }, { 0, 1 }, { 1, 3 },
-       { 0, 1 }, { 1, 4 }, { 0, 1 }, { 0, 1 }
-};
-
-static const int __initconst kirkwood_cpu_ddr_ratios[16][2] = {
-       { 0, 1 }, { 0, 1 }, { 1, 2 }, { 0, 1 },
-       { 1, 3 }, { 0, 1 }, { 1, 4 }, { 2, 9 },
-       { 1, 5 }, { 1, 6 }, { 0, 1 }, { 0, 1 },
-       { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }
-};
-
-static void __init kirkwood_get_clk_ratio(
-       void __iomem *sar, int id, int *mult, int *div)
-{
-       switch (id) {
-       case KIRKWOOD_CPU_TO_L2:
-       {
-               u32 opt = SAR_KIRKWOOD_L2_RATIO(readl(sar));
-               *mult = kirkwood_cpu_l2_ratios[opt][0];
-               *div = kirkwood_cpu_l2_ratios[opt][1];
-               break;
-       }
-       case KIRKWOOD_CPU_TO_DDR:
-       {
-               u32 opt = (readl(sar) >> SAR_KIRKWOOD_DDR_RATIO) &
-                       SAR_KIRKWOOD_DDR_RATIO_MASK;
-               *mult = kirkwood_cpu_ddr_ratios[opt][0];
-               *div = kirkwood_cpu_ddr_ratios[opt][1];
-               break;
-       }
-       }
-}
-
-static const struct core_clocks kirkwood_core_clocks = {
-       .get_tclk_freq = kirkwood_get_tclk_freq,
-       .get_cpu_freq = kirkwood_get_cpu_freq,
-       .get_clk_ratio = kirkwood_get_clk_ratio,
-       .ratios = kirkwood_core_ratios,
-       .num_ratios = ARRAY_SIZE(kirkwood_core_ratios),
-};
-
-static const u32 __initconst mv88f6180_cpu_frequencies[] = {
-       0, 0, 0, 0, 0,
-       600000000,
-       800000000,
-       1000000000
-};
-
-static u32 __init mv88f6180_get_cpu_freq(void __iomem *sar)
-{
-       u32 opt = (readl(sar) >> SAR_MV88F6180_CLK) & SAR_MV88F6180_CLK_MASK;
-       return mv88f6180_cpu_frequencies[opt];
-}
-
-static const int __initconst mv88f6180_cpu_ddr_ratios[8][2] = {
-       { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 },
-       { 0, 1 }, { 1, 3 }, { 1, 4 }, { 1, 5 }
-};
-
-static void __init mv88f6180_get_clk_ratio(
-       void __iomem *sar, int id, int *mult, int *div)
-{
-       switch (id) {
-       case KIRKWOOD_CPU_TO_L2:
-       {
-               /* mv88f6180 has a fixed 1:2 CPU-to-L2 ratio */
-               *mult = 1;
-               *div = 2;
-               break;
-       }
-       case KIRKWOOD_CPU_TO_DDR:
-       {
-               u32 opt = (readl(sar) >> SAR_MV88F6180_CLK) &
-                       SAR_MV88F6180_CLK_MASK;
-               *mult = mv88f6180_cpu_ddr_ratios[opt][0];
-               *div = mv88f6180_cpu_ddr_ratios[opt][1];
-               break;
-       }
-       }
-}
-
-static const struct core_clocks mv88f6180_core_clocks = {
-       .get_tclk_freq = kirkwood_get_tclk_freq,
-       .get_cpu_freq = mv88f6180_get_cpu_freq,
-       .get_clk_ratio = mv88f6180_get_clk_ratio,
-       .ratios = kirkwood_core_ratios,
-       .num_ratios = ARRAY_SIZE(kirkwood_core_ratios),
-};
-#endif /* CONFIG_ARCH_KIRKWOOD */
-
-static const __initdata struct of_device_id clk_core_match[] = {
-#ifdef CONFIG_MACH_ARMADA_370_XP
-       {
-               .compatible = "marvell,armada-370-core-clock",
-               .data = &armada_370_core_clocks,
-       },
-       {
-               .compatible = "marvell,armada-xp-core-clock",
-               .data = &armada_xp_core_clocks,
-       },
-#endif
-#ifdef CONFIG_ARCH_DOVE
-       {
-               .compatible = "marvell,dove-core-clock",
-               .data = &dove_core_clocks,
-       },
-#endif
-
-#ifdef CONFIG_ARCH_KIRKWOOD
-       {
-               .compatible = "marvell,kirkwood-core-clock",
-               .data = &kirkwood_core_clocks,
-       },
-       {
-               .compatible = "marvell,mv88f6180-core-clock",
-               .data = &mv88f6180_core_clocks,
-       },
-#endif
-
-       { }
-};
-
-void __init mvebu_core_clk_init(void)
-{
-       struct device_node *np;
-
-       for_each_matching_node(np, clk_core_match) {
-               const struct of_device_id *match =
-                       of_match_node(clk_core_match, np);
-               mvebu_clk_core_setup(np, (struct core_clocks *)match->data);
-       }
-}
diff --git a/drivers/clk/mvebu/clk-core.h b/drivers/clk/mvebu/clk-core.h
deleted file mode 100644 (file)
index 28b5e02..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *  * Marvell EBU clock core handling defined at reset
- *
- * Copyright (C) 2012 Marvell
- *
- * Gregory CLEMENT <gregory.clement@free-electrons.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#ifndef __MVEBU_CLK_CORE_H
-#define __MVEBU_CLK_CORE_H
-
-void __init mvebu_core_clk_init(void);
-
-#endif
diff --git a/drivers/clk/mvebu/clk-gating-ctrl.c b/drivers/clk/mvebu/clk-gating-ctrl.c
deleted file mode 100644 (file)
index ebf141d..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Marvell MVEBU clock gating control.
- *
- * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
- * Andrew Lunn <andrew@lunn.ch>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-#include <linux/kernel.h>
-#include <linux/bitops.h>
-#include <linux/io.h>
-#include <linux/clk.h>
-#include <linux/clkdev.h>
-#include <linux/clk-provider.h>
-#include <linux/clk/mvebu.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-
-struct mvebu_gating_ctrl {
-       spinlock_t lock;
-       struct clk **gates;
-       int num_gates;
-};
-
-struct mvebu_soc_descr {
-       const char *name;
-       const char *parent;
-       int bit_idx;
-};
-
-#define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw)
-
-static struct clk *mvebu_clk_gating_get_src(
-       struct of_phandle_args *clkspec, void *data)
-{
-       struct mvebu_gating_ctrl *ctrl = (struct mvebu_gating_ctrl *)data;
-       int n;
-
-       if (clkspec->args_count < 1)
-               return ERR_PTR(-EINVAL);
-
-       for (n = 0; n < ctrl->num_gates; n++) {
-               struct clk_gate *gate =
-                       to_clk_gate(__clk_get_hw(ctrl->gates[n]));
-               if (clkspec->args[0] == gate->bit_idx)
-                       return ctrl->gates[n];
-       }
-       return ERR_PTR(-ENODEV);
-}
-
-static void __init mvebu_clk_gating_setup(
-       struct device_node *np, const struct mvebu_soc_descr *descr)
-{
-       struct mvebu_gating_ctrl *ctrl;
-       struct clk *clk;
-       void __iomem *base;
-       const char *default_parent = NULL;
-       int n;
-
-       base = of_iomap(np, 0);
-
-       clk = of_clk_get(np, 0);
-       if (!IS_ERR(clk)) {
-               default_parent = __clk_get_name(clk);
-               clk_put(clk);
-       }
-
-       ctrl = kzalloc(sizeof(struct mvebu_gating_ctrl), GFP_KERNEL);
-       if (WARN_ON(!ctrl))
-               return;
-
-       spin_lock_init(&ctrl->lock);
-
-       /*
-        * Count, allocate, and register clock gates
-        */
-       for (n = 0; descr[n].name;)
-               n++;
-
-       ctrl->num_gates = n;
-       ctrl->gates = kzalloc(ctrl->num_gates * sizeof(struct clk *),
-                             GFP_KERNEL);
-       if (WARN_ON(!ctrl->gates)) {
-               kfree(ctrl);
-               return;
-       }
-
-       for (n = 0; n < ctrl->num_gates; n++) {
-               u8 flags = 0;
-               const char *parent =
-                       (descr[n].parent) ? descr[n].parent : default_parent;
-
-               /*
-                * On Armada 370, the DDR clock is a special case: it
-                * isn't taken by any driver, but should anyway be
-                * kept enabled, so we mark it as IGNORE_UNUSED for
-                * now.
-                */
-               if (!strcmp(descr[n].name, "ddr"))
-                       flags |= CLK_IGNORE_UNUSED;
-
-               ctrl->gates[n] = clk_register_gate(NULL, descr[n].name, parent,
-                                  flags, base, descr[n].bit_idx, 0, &ctrl->lock);
-               WARN_ON(IS_ERR(ctrl->gates[n]));
-       }
-       of_clk_add_provider(np, mvebu_clk_gating_get_src, ctrl);
-}
-
-/*
- * SoC specific clock gating control
- */
-
-#ifdef CONFIG_MACH_ARMADA_370
-static const struct mvebu_soc_descr __initconst armada_370_gating_descr[] = {
-       { "audio", NULL, 0 },
-       { "pex0_en", NULL, 1 },
-       { "pex1_en", NULL,  2 },
-       { "ge1", NULL, 3 },
-       { "ge0", NULL, 4 },
-       { "pex0", NULL, 5 },
-       { "pex1", NULL, 9 },
-       { "sata0", NULL, 15 },
-       { "sdio", NULL, 17 },
-       { "tdm", NULL, 25 },
-       { "ddr", NULL, 28 },
-       { "sata1", NULL, 30 },
-       { }
-};
-#endif
-
-#ifdef CONFIG_MACH_ARMADA_XP
-static const struct mvebu_soc_descr __initconst armada_xp_gating_descr[] = {
-       { "audio", NULL, 0 },
-       { "ge3", NULL, 1 },
-       { "ge2", NULL,  2 },
-       { "ge1", NULL, 3 },
-       { "ge0", NULL, 4 },
-       { "pex0", NULL, 5 },
-       { "pex1", NULL, 6 },
-       { "pex2", NULL, 7 },
-       { "pex3", NULL, 8 },
-       { "bp", NULL, 13 },
-       { "sata0lnk", NULL, 14 },
-       { "sata0", "sata0lnk", 15 },
-       { "lcd", NULL, 16 },
-       { "sdio", NULL, 17 },
-       { "usb0", NULL, 18 },
-       { "usb1", NULL, 19 },
-       { "usb2", NULL, 20 },
-       { "xor0", NULL, 22 },
-       { "crypto", NULL, 23 },
-       { "tdm", NULL, 25 },
-       { "xor1", NULL, 28 },
-       { "sata1lnk", NULL, 29 },
-       { "sata1", "sata1lnk", 30 },
-       { }
-};
-#endif
-
-#ifdef CONFIG_ARCH_DOVE
-static const struct mvebu_soc_descr __initconst dove_gating_descr[] = {
-       { "usb0", NULL, 0 },
-       { "usb1", NULL, 1 },
-       { "ge", "gephy", 2 },
-       { "sata", NULL, 3 },
-       { "pex0", NULL, 4 },
-       { "pex1", NULL, 5 },
-       { "sdio0", NULL, 8 },
-       { "sdio1", NULL, 9 },
-       { "nand", NULL, 10 },
-       { "camera", NULL, 11 },
-       { "i2s0", NULL, 12 },
-       { "i2s1", NULL, 13 },
-       { "crypto", NULL, 15 },
-       { "ac97", NULL, 21 },
-       { "pdma", NULL, 22 },
-       { "xor0", NULL, 23 },
-       { "xor1", NULL, 24 },
-       { "gephy", NULL, 30 },
-       { }
-};
-#endif
-
-#ifdef CONFIG_ARCH_KIRKWOOD
-static const struct mvebu_soc_descr __initconst kirkwood_gating_descr[] = {
-       { "ge0", NULL, 0 },
-       { "pex0", NULL, 2 },
-       { "usb0", NULL, 3 },
-       { "sdio", NULL, 4 },
-       { "tsu", NULL, 5 },
-       { "runit", NULL, 7 },
-       { "xor0", NULL, 8 },
-       { "audio", NULL, 9 },
-       { "powersave", "cpuclk", 11 },
-       { "sata0", NULL, 14 },
-       { "sata1", NULL, 15 },
-       { "xor1", NULL, 16 },
-       { "crypto", NULL, 17 },
-       { "pex1", NULL, 18 },
-       { "ge1", NULL, 19 },
-       { "tdm", NULL, 20 },
-       { }
-};
-#endif
-
-static const __initdata struct of_device_id clk_gating_match[] = {
-#ifdef CONFIG_MACH_ARMADA_370
-       {
-               .compatible = "marvell,armada-370-gating-clock",
-               .data = armada_370_gating_descr,
-       },
-#endif
-
-#ifdef CONFIG_MACH_ARMADA_XP
-       {
-               .compatible = "marvell,armada-xp-gating-clock",
-               .data = armada_xp_gating_descr,
-       },
-#endif
-
-#ifdef CONFIG_ARCH_DOVE
-       {
-               .compatible = "marvell,dove-gating-clock",
-               .data = dove_gating_descr,
-       },
-#endif
-
-#ifdef CONFIG_ARCH_KIRKWOOD
-       {
-               .compatible = "marvell,kirkwood-gating-clock",
-               .data = kirkwood_gating_descr,
-       },
-#endif
-
-       { }
-};
-
-void __init mvebu_gating_clk_init(void)
-{
-       struct device_node *np;
-
-       for_each_matching_node(np, clk_gating_match) {
-               const struct of_device_id *match =
-                       of_match_node(clk_gating_match, np);
-               mvebu_clk_gating_setup(np,
-                      (const struct mvebu_soc_descr *)match->data);
-       }
-}
diff --git a/drivers/clk/mvebu/clk-gating-ctrl.h b/drivers/clk/mvebu/clk-gating-ctrl.h
deleted file mode 100644 (file)
index 9275d1e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Marvell EBU gating clock handling
- *
- * Copyright (C) 2012 Marvell
- *
- * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#ifndef __MVEBU_CLK_GATING_H
-#define __MVEBU_CLK_GATING_H
-
-#ifdef CONFIG_MVEBU_CLK_GATING
-void __init mvebu_gating_clk_init(void);
-#else
-void mvebu_gating_clk_init(void) {}
-#endif
-
-#endif
diff --git a/drivers/clk/mvebu/clk.c b/drivers/clk/mvebu/clk.c
deleted file mode 100644 (file)
index 29f10fb..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Marvell EBU SoC clock handling.
- *
- * Copyright (C) 2012 Marvell
- *
- * Gregory CLEMENT <gregory.clement@free-electrons.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-#include <linux/kernel.h>
-#include <linux/clk-provider.h>
-#include <linux/of.h>
-#include "clk-core.h"
-#include "clk-gating-ctrl.h"
-
-void __init mvebu_clocks_init(void)
-{
-       mvebu_core_clk_init();
-       mvebu_gating_clk_init();
-       of_clk_init(NULL);
-}
diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c
new file mode 100644 (file)
index 0000000..adaa4a1
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Marvell EBU SoC common clock handling
+ *
+ * Copyright (C) 2012 Marvell
+ *
+ * Gregory CLEMENT <gregory.clement@free-electrons.com>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ * Andrew Lunn <andrew@lunn.ch>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk.h>
+#include <linux/clkdev.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+
+#include "common.h"
+
+/*
+ * Core Clocks
+ */
+
+static struct clk_onecell_data clk_data;
+
+void __init mvebu_coreclk_setup(struct device_node *np,
+                               const struct coreclk_soc_desc *desc)
+{
+       const char *tclk_name = "tclk";
+       const char *cpuclk_name = "cpuclk";
+       void __iomem *base;
+       unsigned long rate;
+       int n;
+
+       base = of_iomap(np, 0);
+       if (WARN_ON(!base))
+               return;
+
+       /* Allocate struct for TCLK, cpu clk, and core ratio clocks */
+       clk_data.clk_num = 2 + desc->num_ratios;
+       clk_data.clks = kzalloc(clk_data.clk_num * sizeof(struct clk *),
+                               GFP_KERNEL);
+       if (WARN_ON(!clk_data.clks))
+               return;
+
+       /* Register TCLK */
+       of_property_read_string_index(np, "clock-output-names", 0,
+                                     &tclk_name);
+       rate = desc->get_tclk_freq(base);
+       clk_data.clks[0] = clk_register_fixed_rate(NULL, tclk_name, NULL,
+                                                  CLK_IS_ROOT, rate);
+       WARN_ON(IS_ERR(clk_data.clks[0]));
+
+       /* Register CPU clock */
+       of_property_read_string_index(np, "clock-output-names", 1,
+                                     &cpuclk_name);
+       rate = desc->get_cpu_freq(base);
+       clk_data.clks[1] = clk_register_fixed_rate(NULL, cpuclk_name, NULL,
+                                                  CLK_IS_ROOT, rate);
+       WARN_ON(IS_ERR(clk_data.clks[1]));
+
+       /* Register fixed-factor clocks derived from CPU clock */
+       for (n = 0; n < desc->num_ratios; n++) {
+               const char *rclk_name = desc->ratios[n].name;
+               int mult, div;
+
+               of_property_read_string_index(np, "clock-output-names",
+                                             2+n, &rclk_name);
+               desc->get_clk_ratio(base, desc->ratios[n].id, &mult, &div);
+               clk_data.clks[2+n] = clk_register_fixed_factor(NULL, rclk_name,
+                                      cpuclk_name, 0, mult, div);
+               WARN_ON(IS_ERR(clk_data.clks[2+n]));
+       };
+
+       /* SAR register isn't needed anymore */
+       iounmap(base);
+
+       of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+}
+
+/*
+ * Clock Gating Control
+ */
+
+struct clk_gating_ctrl {
+       spinlock_t lock;
+       struct clk **gates;
+       int num_gates;
+};
+
+#define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw)
+
+static struct clk *clk_gating_get_src(
+       struct of_phandle_args *clkspec, void *data)
+{
+       struct clk_gating_ctrl *ctrl = (struct clk_gating_ctrl *)data;
+       int n;
+
+       if (clkspec->args_count < 1)
+               return ERR_PTR(-EINVAL);
+
+       for (n = 0; n < ctrl->num_gates; n++) {
+               struct clk_gate *gate =
+                       to_clk_gate(__clk_get_hw(ctrl->gates[n]));
+               if (clkspec->args[0] == gate->bit_idx)
+                       return ctrl->gates[n];
+       }
+       return ERR_PTR(-ENODEV);
+}
+
+void __init mvebu_clk_gating_setup(struct device_node *np,
+                                  const struct clk_gating_soc_desc *desc)
+{
+       struct clk_gating_ctrl *ctrl;
+       struct clk *clk;
+       void __iomem *base;
+       const char *default_parent = NULL;
+       int n;
+
+       base = of_iomap(np, 0);
+       if (WARN_ON(!base))
+               return;
+
+       clk = of_clk_get(np, 0);
+       if (!IS_ERR(clk)) {
+               default_parent = __clk_get_name(clk);
+               clk_put(clk);
+       }
+
+       ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+       if (WARN_ON(!ctrl))
+               return;
+
+       spin_lock_init(&ctrl->lock);
+
+       /* Count, allocate, and register clock gates */
+       for (n = 0; desc[n].name;)
+               n++;
+
+       ctrl->num_gates = n;
+       ctrl->gates = kzalloc(ctrl->num_gates * sizeof(struct clk *),
+                             GFP_KERNEL);
+       if (WARN_ON(!ctrl->gates)) {
+               kfree(ctrl);
+               return;
+       }
+
+       for (n = 0; n < ctrl->num_gates; n++) {
+               const char *parent =
+                       (desc[n].parent) ? desc[n].parent : default_parent;
+               ctrl->gates[n] = clk_register_gate(NULL, desc[n].name, parent,
+                                       desc[n].flags, base, desc[n].bit_idx,
+                                       0, &ctrl->lock);
+               WARN_ON(IS_ERR(ctrl->gates[n]));
+       }
+
+       of_clk_add_provider(np, clk_gating_get_src, ctrl);
+}
diff --git a/drivers/clk/mvebu/common.h b/drivers/clk/mvebu/common.h
new file mode 100644 (file)
index 0000000..f968b4d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Marvell EBU SoC common clock handling
+ *
+ * Copyright (C) 2012 Marvell
+ *
+ * Gregory CLEMENT <gregory.clement@free-electrons.com>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ * Andrew Lunn <andrew@lunn.ch>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __CLK_MVEBU_COMMON_H_
+#define __CLK_MVEBU_COMMON_H_
+
+#include <linux/kernel.h>
+
+struct device_node;
+
+struct coreclk_ratio {
+       int id;
+       const char *name;
+};
+
+struct coreclk_soc_desc {
+       u32 (*get_tclk_freq)(void __iomem *sar);
+       u32 (*get_cpu_freq)(void __iomem *sar);
+       void (*get_clk_ratio)(void __iomem *sar, int id, int *mult, int *div);
+       const struct coreclk_ratio *ratios;
+       int num_ratios;
+};
+
+struct clk_gating_soc_desc {
+       const char *name;
+       const char *parent;
+       int bit_idx;
+       unsigned long flags;
+};
+
+void __init mvebu_coreclk_setup(struct device_node *np,
+                               const struct coreclk_soc_desc *desc);
+
+void __init mvebu_clk_gating_setup(struct device_node *np,
+                                  const struct clk_gating_soc_desc *desc);
+
+#endif
diff --git a/drivers/clk/mvebu/dove.c b/drivers/clk/mvebu/dove.c
new file mode 100644 (file)
index 0000000..79d7aed
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ * Marvell Dove SoC clocks
+ *
+ * Copyright (C) 2012 Marvell
+ *
+ * Gregory CLEMENT <gregory.clement@free-electrons.com>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ * Andrew Lunn <andrew@lunn.ch>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include "common.h"
+
+/*
+ * Core Clocks
+ *
+ * Dove PLL sample-at-reset configuration
+ *
+ * SAR0[8:5]   : CPU frequency
+ *              5  = 1000 MHz
+ *              6  =  933 MHz
+ *              7  =  933 MHz
+ *              8  =  800 MHz
+ *              9  =  800 MHz
+ *              10 =  800 MHz
+ *              11 = 1067 MHz
+ *              12 =  667 MHz
+ *              13 =  533 MHz
+ *              14 =  400 MHz
+ *              15 =  333 MHz
+ *              others reserved.
+ *
+ * SAR0[11:9]  : CPU to L2 Clock divider ratio
+ *              0 = (1/1) * CPU
+ *              2 = (1/2) * CPU
+ *              4 = (1/3) * CPU
+ *              6 = (1/4) * CPU
+ *              others reserved.
+ *
+ * SAR0[15:12] : CPU to DDR DRAM Clock divider ratio
+ *              0  = (1/1) * CPU
+ *              2  = (1/2) * CPU
+ *              3  = (2/5) * CPU
+ *              4  = (1/3) * CPU
+ *              6  = (1/4) * CPU
+ *              8  = (1/5) * CPU
+ *              10 = (1/6) * CPU
+ *              12 = (1/7) * CPU
+ *              14 = (1/8) * CPU
+ *              15 = (1/10) * CPU
+ *              others reserved.
+ *
+ * SAR0[24:23] : TCLK frequency
+ *              0 = 166 MHz
+ *              1 = 125 MHz
+ *              others reserved.
+ */
+
+#define SAR_DOVE_CPU_FREQ              5
+#define SAR_DOVE_CPU_FREQ_MASK         0xf
+#define SAR_DOVE_L2_RATIO              9
+#define SAR_DOVE_L2_RATIO_MASK         0x7
+#define SAR_DOVE_DDR_RATIO             12
+#define SAR_DOVE_DDR_RATIO_MASK                0xf
+#define SAR_DOVE_TCLK_FREQ             23
+#define SAR_DOVE_TCLK_FREQ_MASK                0x3
+
+enum { DOVE_CPU_TO_L2, DOVE_CPU_TO_DDR };
+
+static const struct coreclk_ratio __initconst dove_coreclk_ratios[] = {
+       { .id = DOVE_CPU_TO_L2, .name = "l2clk", },
+       { .id = DOVE_CPU_TO_DDR, .name = "ddrclk", }
+};
+
+static const u32 __initconst dove_tclk_freqs[] = {
+       166666667,
+       125000000,
+       0, 0
+};
+
+static u32 __init dove_get_tclk_freq(void __iomem *sar)
+{
+       u32 opt = (readl(sar) >> SAR_DOVE_TCLK_FREQ) &
+               SAR_DOVE_TCLK_FREQ_MASK;
+       return dove_tclk_freqs[opt];
+}
+
+static const u32 __initconst dove_cpu_freqs[] = {
+       0, 0, 0, 0, 0,
+       1000000000,
+       933333333, 933333333,
+       800000000, 800000000, 800000000,
+       1066666667,
+       666666667,
+       533333333,
+       400000000,
+       333333333
+};
+
+static u32 __init dove_get_cpu_freq(void __iomem *sar)
+{
+       u32 opt = (readl(sar) >> SAR_DOVE_CPU_FREQ) &
+               SAR_DOVE_CPU_FREQ_MASK;
+       return dove_cpu_freqs[opt];
+}
+
+static const int __initconst dove_cpu_l2_ratios[8][2] = {
+       { 1, 1 }, { 0, 1 }, { 1, 2 }, { 0, 1 },
+       { 1, 3 }, { 0, 1 }, { 1, 4 }, { 0, 1 }
+};
+
+static const int __initconst dove_cpu_ddr_ratios[16][2] = {
+       { 1, 1 }, { 0, 1 }, { 1, 2 }, { 2, 5 },
+       { 1, 3 }, { 0, 1 }, { 1, 4 }, { 0, 1 },
+       { 1, 5 }, { 0, 1 }, { 1, 6 }, { 0, 1 },
+       { 1, 7 }, { 0, 1 }, { 1, 8 }, { 1, 10 }
+};
+
+static void __init dove_get_clk_ratio(
+       void __iomem *sar, int id, int *mult, int *div)
+{
+       switch (id) {
+       case DOVE_CPU_TO_L2:
+       {
+               u32 opt = (readl(sar) >> SAR_DOVE_L2_RATIO) &
+                       SAR_DOVE_L2_RATIO_MASK;
+               *mult = dove_cpu_l2_ratios[opt][0];
+               *div = dove_cpu_l2_ratios[opt][1];
+               break;
+       }
+       case DOVE_CPU_TO_DDR:
+       {
+               u32 opt = (readl(sar) >> SAR_DOVE_DDR_RATIO) &
+                       SAR_DOVE_DDR_RATIO_MASK;
+               *mult = dove_cpu_ddr_ratios[opt][0];
+               *div = dove_cpu_ddr_ratios[opt][1];
+               break;
+       }
+       }
+}
+
+static const struct coreclk_soc_desc dove_coreclks = {
+       .get_tclk_freq = dove_get_tclk_freq,
+       .get_cpu_freq = dove_get_cpu_freq,
+       .get_clk_ratio = dove_get_clk_ratio,
+       .ratios = dove_coreclk_ratios,
+       .num_ratios = ARRAY_SIZE(dove_coreclk_ratios),
+};
+
+static void __init dove_coreclk_init(struct device_node *np)
+{
+       mvebu_coreclk_setup(np, &dove_coreclks);
+}
+CLK_OF_DECLARE(dove_core_clk, "marvell,dove-core-clock", dove_coreclk_init);
+
+/*
+ * Clock Gating Control
+ */
+
+static const struct clk_gating_soc_desc __initconst dove_gating_desc[] = {
+       { "usb0", NULL, 0, 0 },
+       { "usb1", NULL, 1, 0 },
+       { "ge", "gephy", 2, 0 },
+       { "sata", NULL, 3, 0 },
+       { "pex0", NULL, 4, 0 },
+       { "pex1", NULL, 5, 0 },
+       { "sdio0", NULL, 8, 0 },
+       { "sdio1", NULL, 9, 0 },
+       { "nand", NULL, 10, 0 },
+       { "camera", NULL, 11, 0 },
+       { "i2s0", NULL, 12, 0 },
+       { "i2s1", NULL, 13, 0 },
+       { "crypto", NULL, 15, 0 },
+       { "ac97", NULL, 21, 0 },
+       { "pdma", NULL, 22, 0 },
+       { "xor0", NULL, 23, 0 },
+       { "xor1", NULL, 24, 0 },
+       { "gephy", NULL, 30, 0 },
+       { }
+};
+
+static void __init dove_clk_gating_init(struct device_node *np)
+{
+       mvebu_clk_gating_setup(np, dove_gating_desc);
+}
+CLK_OF_DECLARE(dove_clk_gating, "marvell,dove-gating-clock",
+              dove_clk_gating_init);
diff --git a/drivers/clk/mvebu/kirkwood.c b/drivers/clk/mvebu/kirkwood.c
new file mode 100644 (file)
index 0000000..71d2461
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * Marvell Kirkwood SoC clocks
+ *
+ * Copyright (C) 2012 Marvell
+ *
+ * Gregory CLEMENT <gregory.clement@free-electrons.com>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+ * Andrew Lunn <andrew@lunn.ch>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include "common.h"
+
+/*
+ * Core Clocks
+ *
+ * Kirkwood PLL sample-at-reset configuration
+ * (6180 has different SAR layout than other Kirkwood SoCs)
+ *
+ * SAR0[4:3,22,1] : CPU frequency (6281,6292,6282)
+ *     4  =  600 MHz
+ *     6  =  800 MHz
+ *     7  = 1000 MHz
+ *     9  = 1200 MHz
+ *     12 = 1500 MHz
+ *     13 = 1600 MHz
+ *     14 = 1800 MHz
+ *     15 = 2000 MHz
+ *     others reserved.
+ *
+ * SAR0[19,10:9] : CPU to L2 Clock divider ratio (6281,6292,6282)
+ *     1 = (1/2) * CPU
+ *     3 = (1/3) * CPU
+ *     5 = (1/4) * CPU
+ *     others reserved.
+ *
+ * SAR0[8:5] : CPU to DDR DRAM Clock divider ratio (6281,6292,6282)
+ *     2 = (1/2) * CPU
+ *     4 = (1/3) * CPU
+ *     6 = (1/4) * CPU
+ *     7 = (2/9) * CPU
+ *     8 = (1/5) * CPU
+ *     9 = (1/6) * CPU
+ *     others reserved.
+ *
+ * SAR0[4:2] : Kirkwood 6180 cpu/l2/ddr clock configuration (6180 only)
+ *     5 = [CPU =  600 MHz, L2 = (1/2) * CPU, DDR = 200 MHz = (1/3) * CPU]
+ *     6 = [CPU =  800 MHz, L2 = (1/2) * CPU, DDR = 200 MHz = (1/4) * CPU]
+ *     7 = [CPU = 1000 MHz, L2 = (1/2) * CPU, DDR = 200 MHz = (1/5) * CPU]
+ *     others reserved.
+ *
+ * SAR0[21] : TCLK frequency
+ *     0 = 200 MHz
+ *     1 = 166 MHz
+ *     others reserved.
+ */
+
+#define SAR_KIRKWOOD_CPU_FREQ(x)       \
+       (((x & (1 <<  1)) >>  1) |      \
+        ((x & (1 << 22)) >> 21) |      \
+        ((x & (3 <<  3)) >>  1))
+#define SAR_KIRKWOOD_L2_RATIO(x)       \
+       (((x & (3 <<  9)) >> 9) |       \
+        (((x & (1 << 19)) >> 17)))
+#define SAR_KIRKWOOD_DDR_RATIO         5
+#define SAR_KIRKWOOD_DDR_RATIO_MASK    0xf
+#define SAR_MV88F6180_CLK              2
+#define SAR_MV88F6180_CLK_MASK         0x7
+#define SAR_KIRKWOOD_TCLK_FREQ         21
+#define SAR_KIRKWOOD_TCLK_FREQ_MASK    0x1
+
+enum { KIRKWOOD_CPU_TO_L2, KIRKWOOD_CPU_TO_DDR };
+
+static const struct coreclk_ratio __initconst kirkwood_coreclk_ratios[] = {
+       { .id = KIRKWOOD_CPU_TO_L2, .name = "l2clk", },
+       { .id = KIRKWOOD_CPU_TO_DDR, .name = "ddrclk", }
+};
+
+static u32 __init kirkwood_get_tclk_freq(void __iomem *sar)
+{
+       u32 opt = (readl(sar) >> SAR_KIRKWOOD_TCLK_FREQ) &
+               SAR_KIRKWOOD_TCLK_FREQ_MASK;
+       return (opt) ? 166666667 : 200000000;
+}
+
+static const u32 __initconst kirkwood_cpu_freqs[] = {
+       0, 0, 0, 0,
+       600000000,
+       0,
+       800000000,
+       1000000000,
+       0,
+       1200000000,
+       0, 0,
+       1500000000,
+       1600000000,
+       1800000000,
+       2000000000
+};
+
+static u32 __init kirkwood_get_cpu_freq(void __iomem *sar)
+{
+       u32 opt = SAR_KIRKWOOD_CPU_FREQ(readl(sar));
+       return kirkwood_cpu_freqs[opt];
+}
+
+static const int __initconst kirkwood_cpu_l2_ratios[8][2] = {
+       { 0, 1 }, { 1, 2 }, { 0, 1 }, { 1, 3 },
+       { 0, 1 }, { 1, 4 }, { 0, 1 }, { 0, 1 }
+};
+
+static const int __initconst kirkwood_cpu_ddr_ratios[16][2] = {
+       { 0, 1 }, { 0, 1 }, { 1, 2 }, { 0, 1 },
+       { 1, 3 }, { 0, 1 }, { 1, 4 }, { 2, 9 },
+       { 1, 5 }, { 1, 6 }, { 0, 1 }, { 0, 1 },
+       { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }
+};
+
+static void __init kirkwood_get_clk_ratio(
+       void __iomem *sar, int id, int *mult, int *div)
+{
+       switch (id) {
+       case KIRKWOOD_CPU_TO_L2:
+       {
+               u32 opt = SAR_KIRKWOOD_L2_RATIO(readl(sar));
+               *mult = kirkwood_cpu_l2_ratios[opt][0];
+               *div = kirkwood_cpu_l2_ratios[opt][1];
+               break;
+       }
+       case KIRKWOOD_CPU_TO_DDR:
+       {
+               u32 opt = (readl(sar) >> SAR_KIRKWOOD_DDR_RATIO) &
+                       SAR_KIRKWOOD_DDR_RATIO_MASK;
+               *mult = kirkwood_cpu_ddr_ratios[opt][0];
+               *div = kirkwood_cpu_ddr_ratios[opt][1];
+               break;
+       }
+       }
+}
+
+static const u32 __initconst mv88f6180_cpu_freqs[] = {
+       0, 0, 0, 0, 0,
+       600000000,
+       800000000,
+       1000000000
+};
+
+static u32 __init mv88f6180_get_cpu_freq(void __iomem *sar)
+{
+       u32 opt = (readl(sar) >> SAR_MV88F6180_CLK) & SAR_MV88F6180_CLK_MASK;
+       return mv88f6180_cpu_freqs[opt];
+}
+
+static const int __initconst mv88f6180_cpu_ddr_ratios[8][2] = {
+       { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 },
+       { 0, 1 }, { 1, 3 }, { 1, 4 }, { 1, 5 }
+};
+
+static void __init mv88f6180_get_clk_ratio(
+       void __iomem *sar, int id, int *mult, int *div)
+{
+       switch (id) {
+       case KIRKWOOD_CPU_TO_L2:
+       {
+               /* mv88f6180 has a fixed 1:2 CPU-to-L2 ratio */
+               *mult = 1;
+               *div = 2;
+               break;
+       }
+       case KIRKWOOD_CPU_TO_DDR:
+       {
+               u32 opt = (readl(sar) >> SAR_MV88F6180_CLK) &
+                       SAR_MV88F6180_CLK_MASK;
+               *mult = mv88f6180_cpu_ddr_ratios[opt][0];
+               *div = mv88f6180_cpu_ddr_ratios[opt][1];
+               break;
+       }
+       }
+}
+
+static const struct coreclk_soc_desc kirkwood_coreclks = {
+       .get_tclk_freq = kirkwood_get_tclk_freq,
+       .get_cpu_freq = kirkwood_get_cpu_freq,
+       .get_clk_ratio = kirkwood_get_clk_ratio,
+       .ratios = kirkwood_coreclk_ratios,
+       .num_ratios = ARRAY_SIZE(kirkwood_coreclk_ratios),
+};
+
+static void __init kirkwood_coreclk_init(struct device_node *np)
+{
+       mvebu_coreclk_setup(np, &kirkwood_coreclks);
+}
+CLK_OF_DECLARE(kirkwood_core_clk, "marvell,kirkwood-core-clock",
+              kirkwood_coreclk_init);
+
+static const struct coreclk_soc_desc mv88f6180_coreclks = {
+       .get_tclk_freq = kirkwood_get_tclk_freq,
+       .get_cpu_freq = mv88f6180_get_cpu_freq,
+       .get_clk_ratio = mv88f6180_get_clk_ratio,
+       .ratios = kirkwood_coreclk_ratios,
+       .num_ratios = ARRAY_SIZE(kirkwood_coreclk_ratios),
+};
+
+static void __init mv88f6180_coreclk_init(struct device_node *np)
+{
+       mvebu_coreclk_setup(np, &mv88f6180_coreclks);
+}
+CLK_OF_DECLARE(mv88f6180_core_clk, "marvell,mv88f6180-core-clock",
+              mv88f6180_coreclk_init);
+
+/*
+ * Clock Gating Control
+ */
+
+static const struct clk_gating_soc_desc __initconst kirkwood_gating_desc[] = {
+       { "ge0", NULL, 0, 0 },
+       { "pex0", NULL, 2, 0 },
+       { "usb0", NULL, 3, 0 },
+       { "sdio", NULL, 4, 0 },
+       { "tsu", NULL, 5, 0 },
+       { "runit", NULL, 7, 0 },
+       { "xor0", NULL, 8, 0 },
+       { "audio", NULL, 9, 0 },
+       { "powersave", "cpuclk", 11, 0 },
+       { "sata0", NULL, 14, 0 },
+       { "sata1", NULL, 15, 0 },
+       { "xor1", NULL, 16, 0 },
+       { "crypto", NULL, 17, 0 },
+       { "pex1", NULL, 18, 0 },
+       { "ge1", NULL, 19, 0 },
+       { "tdm", NULL, 20, 0 },
+       { }
+};
+
+static void __init kirkwood_clk_gating_init(struct device_node *np)
+{
+       mvebu_clk_gating_setup(np, kirkwood_gating_desc);
+}
+CLK_OF_DECLARE(kirkwood_clk_gating, "marvell,kirkwood-gating-clock",
+              kirkwood_clk_gating_init);
index bd11315cf5ab50fc2b179861ab44f8c6a64b688a..5bb848cac6ece40ab0e5bceef82d4facafdbd80d 100644 (file)
 #include <linux/of.h>
 
 /* Clock Manager offsets */
-#define CLKMGR_CTRL    0x0
-#define CLKMGR_BYPASS 0x4
+#define CLKMGR_CTRL    0x0
+#define CLKMGR_BYPASS  0x4
+#define CLKMGR_L4SRC   0x70
+#define CLKMGR_PERPLL_SRC      0xAC
 
 /* Clock bypass bits */
-#define MAINPLL_BYPASS (1<<0)
-#define SDRAMPLL_BYPASS (1<<1)
-#define SDRAMPLL_SRC_BYPASS (1<<2)
-#define PERPLL_BYPASS (1<<3)
-#define PERPLL_SRC_BYPASS (1<<4)
+#define MAINPLL_BYPASS         (1<<0)
+#define SDRAMPLL_BYPASS                (1<<1)
+#define SDRAMPLL_SRC_BYPASS    (1<<2)
+#define PERPLL_BYPASS          (1<<3)
+#define PERPLL_SRC_BYPASS      (1<<4)
 
 #define SOCFPGA_PLL_BG_PWRDWN          0
 #define SOCFPGA_PLL_EXT_ENA            1
 #define SOCFPGA_PLL_DIVF_SHIFT 3
 #define SOCFPGA_PLL_DIVQ_MASK          0x003F0000
 #define SOCFPGA_PLL_DIVQ_SHIFT 16
+#define SOCFGPA_MAX_PARENTS    3
+
+#define SOCFPGA_L4_MP_CLK              "l4_mp_clk"
+#define SOCFPGA_L4_SP_CLK              "l4_sp_clk"
+#define SOCFPGA_NAND_CLK               "nand_clk"
+#define SOCFPGA_NAND_X_CLK             "nand_x_clk"
+#define SOCFPGA_MMC_CLK                        "mmc_clk"
+#define SOCFPGA_DB_CLK                 "gpio_db_clk"
+
+#define div_mask(width)        ((1 << (width)) - 1)
+#define streq(a, b) (strcmp((a), (b)) == 0)
 
 extern void __iomem *clk_mgr_base_addr;
 
@@ -49,6 +62,9 @@ struct socfpga_clk {
        char *parent_name;
        char *clk_name;
        u32 fixed_div;
+       void __iomem *div_reg;
+       u32 width;      /* only valid if div_reg != 0 */
+       u32 shift;      /* only valid if div_reg != 0 */
 };
 #define to_socfpga_clk(p) container_of(p, struct socfpga_clk, hw.hw)
 
@@ -132,8 +148,9 @@ static __init struct clk *socfpga_clk_init(struct device_node *node,
 
        socfpga_clk->hw.hw.init = &init;
 
-       if (strcmp(clk_name, "main_pll") || strcmp(clk_name, "periph_pll") ||
-                       strcmp(clk_name, "sdram_pll")) {
+       if (streq(clk_name, "main_pll") ||
+               streq(clk_name, "periph_pll") ||
+               streq(clk_name, "sdram_pll")) {
                socfpga_clk->hw.bit_idx = SOCFPGA_PLL_EXT_ENA;
                clk_pll_ops.enable = clk_gate_ops.enable;
                clk_pll_ops.disable = clk_gate_ops.disable;
@@ -148,6 +165,159 @@ static __init struct clk *socfpga_clk_init(struct device_node *node,
        return clk;
 }
 
+static u8 socfpga_clk_get_parent(struct clk_hw *hwclk)
+{
+       u32 l4_src;
+       u32 perpll_src;
+
+       if (streq(hwclk->init->name, SOCFPGA_L4_MP_CLK)) {
+               l4_src = readl(clk_mgr_base_addr + CLKMGR_L4SRC);
+               return l4_src &= 0x1;
+       }
+       if (streq(hwclk->init->name, SOCFPGA_L4_SP_CLK)) {
+               l4_src = readl(clk_mgr_base_addr + CLKMGR_L4SRC);
+               return !!(l4_src & 2);
+       }
+
+       perpll_src = readl(clk_mgr_base_addr + CLKMGR_PERPLL_SRC);
+       if (streq(hwclk->init->name, SOCFPGA_MMC_CLK))
+               return perpll_src &= 0x3;
+       if (streq(hwclk->init->name, SOCFPGA_NAND_CLK) ||
+                       streq(hwclk->init->name, SOCFPGA_NAND_X_CLK))
+                       return (perpll_src >> 2) & 3;
+
+       /* QSPI clock */
+       return (perpll_src >> 4) & 3;
+
+}
+
+static int socfpga_clk_set_parent(struct clk_hw *hwclk, u8 parent)
+{
+       u32 src_reg;
+
+       if (streq(hwclk->init->name, SOCFPGA_L4_MP_CLK)) {
+               src_reg = readl(clk_mgr_base_addr + CLKMGR_L4SRC);
+               src_reg &= ~0x1;
+               src_reg |= parent;
+               writel(src_reg, clk_mgr_base_addr + CLKMGR_L4SRC);
+       } else if (streq(hwclk->init->name, SOCFPGA_L4_SP_CLK)) {
+               src_reg = readl(clk_mgr_base_addr + CLKMGR_L4SRC);
+               src_reg &= ~0x2;
+               src_reg |= (parent << 1);
+               writel(src_reg, clk_mgr_base_addr + CLKMGR_L4SRC);
+       } else {
+               src_reg = readl(clk_mgr_base_addr + CLKMGR_PERPLL_SRC);
+               if (streq(hwclk->init->name, SOCFPGA_MMC_CLK)) {
+                       src_reg &= ~0x3;
+                       src_reg |= parent;
+               } else if (streq(hwclk->init->name, SOCFPGA_NAND_CLK) ||
+                       streq(hwclk->init->name, SOCFPGA_NAND_X_CLK)) {
+                       src_reg &= ~0xC;
+                       src_reg |= (parent << 2);
+               } else {/* QSPI clock */
+                       src_reg &= ~0x30;
+                       src_reg |= (parent << 4);
+               }
+               writel(src_reg, clk_mgr_base_addr + CLKMGR_PERPLL_SRC);
+       }
+
+       return 0;
+}
+
+static unsigned long socfpga_clk_recalc_rate(struct clk_hw *hwclk,
+       unsigned long parent_rate)
+{
+       struct socfpga_clk *socfpgaclk = to_socfpga_clk(hwclk);
+       u32 div = 1, val;
+
+       if (socfpgaclk->fixed_div)
+               div = socfpgaclk->fixed_div;
+       else if (socfpgaclk->div_reg) {
+               val = readl(socfpgaclk->div_reg) >> socfpgaclk->shift;
+               val &= div_mask(socfpgaclk->width);
+               if (streq(hwclk->init->name, SOCFPGA_DB_CLK))
+                       div = val + 1;
+               else
+                       div = (1 << val);
+       }
+
+       return parent_rate / div;
+}
+
+static struct clk_ops gateclk_ops = {
+       .recalc_rate = socfpga_clk_recalc_rate,
+       .get_parent = socfpga_clk_get_parent,
+       .set_parent = socfpga_clk_set_parent,
+};
+
+static void __init socfpga_gate_clk_init(struct device_node *node,
+       const struct clk_ops *ops)
+{
+       u32 clk_gate[2];
+       u32 div_reg[3];
+       u32 fixed_div;
+       struct clk *clk;
+       struct socfpga_clk *socfpga_clk;
+       const char *clk_name = node->name;
+       const char *parent_name[SOCFGPA_MAX_PARENTS];
+       struct clk_init_data init;
+       int rc;
+       int i = 0;
+
+       socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
+       if (WARN_ON(!socfpga_clk))
+               return;
+
+       rc = of_property_read_u32_array(node, "clk-gate", clk_gate, 2);
+       if (rc)
+               clk_gate[0] = 0;
+
+       if (clk_gate[0]) {
+               socfpga_clk->hw.reg = clk_mgr_base_addr + clk_gate[0];
+               socfpga_clk->hw.bit_idx = clk_gate[1];
+
+               gateclk_ops.enable = clk_gate_ops.enable;
+               gateclk_ops.disable = clk_gate_ops.disable;
+       }
+
+       rc = of_property_read_u32(node, "fixed-divider", &fixed_div);
+       if (rc)
+               socfpga_clk->fixed_div = 0;
+       else
+               socfpga_clk->fixed_div = fixed_div;
+
+       rc = of_property_read_u32_array(node, "div-reg", div_reg, 3);
+       if (!rc) {
+               socfpga_clk->div_reg = clk_mgr_base_addr + div_reg[0];
+               socfpga_clk->shift = div_reg[1];
+               socfpga_clk->width = div_reg[2];
+       } else {
+               socfpga_clk->div_reg = 0;
+       }
+
+       of_property_read_string(node, "clock-output-names", &clk_name);
+
+       init.name = clk_name;
+       init.ops = ops;
+       init.flags = 0;
+       while (i < SOCFGPA_MAX_PARENTS && (parent_name[i] =
+                       of_clk_get_parent_name(node, i)) != NULL)
+               i++;
+
+       init.parent_names = parent_name;
+       init.num_parents = i;
+       socfpga_clk->hw.hw.init = &init;
+
+       clk = clk_register(NULL, &socfpga_clk->hw.hw);
+       if (WARN_ON(IS_ERR(clk))) {
+               kfree(socfpga_clk);
+               return;
+       }
+       rc = of_clk_add_provider(node, of_clk_src_simple_get, clk);
+       if (WARN_ON(rc))
+               return;
+}
+
 static void __init socfpga_pll_init(struct device_node *node)
 {
        socfpga_clk_init(node, &clk_pll_ops);
@@ -160,6 +330,12 @@ static void __init socfpga_periph_init(struct device_node *node)
 }
 CLK_OF_DECLARE(socfpga_periph, "altr,socfpga-perip-clk", socfpga_periph_init);
 
+static void __init socfpga_gate_init(struct device_node *node)
+{
+       socfpga_gate_clk_init(node, &gateclk_ops);
+}
+CLK_OF_DECLARE(socfpga_gate, "altr,socfpga-gate-clk", socfpga_gate_init);
+
 void __init socfpga_init_clocks(void)
 {
        struct clk *clk;
index d78e16ee161c64ae7578872497e25fb5c8188d08..40d939d091bfc69608ea2a959cacef2cd87531a3 100644 (file)
 #define CLK_SOURCE_XUSB_DEV_SRC 0x60c
 #define CLK_SOURCE_EMC 0x19c
 
+/* Tegra CPU clock and reset control regs */
+#define CLK_RST_CONTROLLER_CPU_CMPLX_STATUS    0x470
+
 static int periph_clk_enb_refcnt[CLK_OUT_ENB_NUM * 32];
 
 static void __iomem *clk_base;
@@ -2000,7 +2003,25 @@ static __init void tegra114_periph_clk_init(void __iomem *clk_base)
        }
 }
 
-static struct tegra_cpu_car_ops tegra114_cpu_car_ops;
+/* Tegra114 CPU clock and reset control functions */
+static void tegra114_wait_cpu_in_reset(u32 cpu)
+{
+       unsigned int reg;
+
+       do {
+               reg = readl(clk_base + CLK_RST_CONTROLLER_CPU_CMPLX_STATUS);
+               cpu_relax();
+       } while (!(reg & (1 << cpu)));  /* check CPU been reset or not */
+}
+static void tegra114_disable_cpu_clock(u32 cpu)
+{
+       /* flow controller would take care in the power sequence. */
+}
+
+static struct tegra_cpu_car_ops tegra114_cpu_car_ops = {
+       .wait_for_reset = tegra114_wait_cpu_in_reset,
+       .disable_clock  = tegra114_disable_cpu_clock,
+};
 
 static const struct of_device_id pmc_match[] __initconst = {
        { .compatible = "nvidia,tegra114-pmc" },
diff --git a/drivers/clk/zynq/Makefile b/drivers/clk/zynq/Makefile
new file mode 100644 (file)
index 0000000..156d923
--- /dev/null
@@ -0,0 +1,3 @@
+# Zynq clock specific Makefile
+
+obj-$(CONFIG_ARCH_ZYNQ)        += clkc.o pll.o
diff --git a/drivers/clk/zynq/clkc.c b/drivers/clk/zynq/clkc.c
new file mode 100644 (file)
index 0000000..5c205b6
--- /dev/null
@@ -0,0 +1,533 @@
+/*
+ * Zynq clock controller
+ *
+ *  Copyright (C) 2012 - 2013 Xilinx
+ *
+ *  Sören Brinkmann <soren.brinkmann@xilinx.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2 as published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/clk/zynq.h>
+#include <linux/clk-provider.h>
+#include <linux/of.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/io.h>
+
+static void __iomem *zynq_slcr_base_priv;
+
+#define SLCR_ARMPLL_CTRL               (zynq_slcr_base_priv + 0x100)
+#define SLCR_DDRPLL_CTRL               (zynq_slcr_base_priv + 0x104)
+#define SLCR_IOPLL_CTRL                        (zynq_slcr_base_priv + 0x108)
+#define SLCR_PLL_STATUS                        (zynq_slcr_base_priv + 0x10c)
+#define SLCR_ARM_CLK_CTRL              (zynq_slcr_base_priv + 0x120)
+#define SLCR_DDR_CLK_CTRL              (zynq_slcr_base_priv + 0x124)
+#define SLCR_DCI_CLK_CTRL              (zynq_slcr_base_priv + 0x128)
+#define SLCR_APER_CLK_CTRL             (zynq_slcr_base_priv + 0x12c)
+#define SLCR_GEM0_CLK_CTRL             (zynq_slcr_base_priv + 0x140)
+#define SLCR_GEM1_CLK_CTRL             (zynq_slcr_base_priv + 0x144)
+#define SLCR_SMC_CLK_CTRL              (zynq_slcr_base_priv + 0x148)
+#define SLCR_LQSPI_CLK_CTRL            (zynq_slcr_base_priv + 0x14c)
+#define SLCR_SDIO_CLK_CTRL             (zynq_slcr_base_priv + 0x150)
+#define SLCR_UART_CLK_CTRL             (zynq_slcr_base_priv + 0x154)
+#define SLCR_SPI_CLK_CTRL              (zynq_slcr_base_priv + 0x158)
+#define SLCR_CAN_CLK_CTRL              (zynq_slcr_base_priv + 0x15c)
+#define SLCR_CAN_MIOCLK_CTRL           (zynq_slcr_base_priv + 0x160)
+#define SLCR_DBG_CLK_CTRL              (zynq_slcr_base_priv + 0x164)
+#define SLCR_PCAP_CLK_CTRL             (zynq_slcr_base_priv + 0x168)
+#define SLCR_FPGA0_CLK_CTRL            (zynq_slcr_base_priv + 0x170)
+#define SLCR_621_TRUE                  (zynq_slcr_base_priv + 0x1c4)
+#define SLCR_SWDT_CLK_SEL              (zynq_slcr_base_priv + 0x304)
+
+#define NUM_MIO_PINS   54
+
+enum zynq_clk {
+       armpll, ddrpll, iopll,
+       cpu_6or4x, cpu_3or2x, cpu_2x, cpu_1x,
+       ddr2x, ddr3x, dci,
+       lqspi, smc, pcap, gem0, gem1, fclk0, fclk1, fclk2, fclk3, can0, can1,
+       sdio0, sdio1, uart0, uart1, spi0, spi1, dma,
+       usb0_aper, usb1_aper, gem0_aper, gem1_aper,
+       sdio0_aper, sdio1_aper, spi0_aper, spi1_aper, can0_aper, can1_aper,
+       i2c0_aper, i2c1_aper, uart0_aper, uart1_aper, gpio_aper, lqspi_aper,
+       smc_aper, swdt, dbg_trc, dbg_apb, clk_max};
+
+static struct clk *ps_clk;
+static struct clk *clks[clk_max];
+static struct clk_onecell_data clk_data;
+
+static DEFINE_SPINLOCK(armpll_lock);
+static DEFINE_SPINLOCK(ddrpll_lock);
+static DEFINE_SPINLOCK(iopll_lock);
+static DEFINE_SPINLOCK(armclk_lock);
+static DEFINE_SPINLOCK(ddrclk_lock);
+static DEFINE_SPINLOCK(dciclk_lock);
+static DEFINE_SPINLOCK(gem0clk_lock);
+static DEFINE_SPINLOCK(gem1clk_lock);
+static DEFINE_SPINLOCK(canclk_lock);
+static DEFINE_SPINLOCK(canmioclk_lock);
+static DEFINE_SPINLOCK(dbgclk_lock);
+static DEFINE_SPINLOCK(aperclk_lock);
+
+static const char dummy_nm[] __initconst = "dummy_name";
+
+static const char *armpll_parents[] __initdata = {"armpll_int", "ps_clk"};
+static const char *ddrpll_parents[] __initdata = {"ddrpll_int", "ps_clk"};
+static const char *iopll_parents[] __initdata = {"iopll_int", "ps_clk"};
+static const char *gem0_mux_parents[] __initdata = {"gem0_div1", dummy_nm};
+static const char *gem1_mux_parents[] __initdata = {"gem1_div1", dummy_nm};
+static const char *can0_mio_mux2_parents[] __initdata = {"can0_gate",
+       "can0_mio_mux"};
+static const char *can1_mio_mux2_parents[] __initdata = {"can1_gate",
+       "can1_mio_mux"};
+static const char *dbg_emio_mux_parents[] __initdata = {"dbg_div",
+       dummy_nm};
+
+static const char *dbgtrc_emio_input_names[] __initdata = {"trace_emio_clk"};
+static const char *gem0_emio_input_names[] __initdata = {"gem0_emio_clk"};
+static const char *gem1_emio_input_names[] __initdata = {"gem1_emio_clk"};
+static const char *swdt_ext_clk_input_names[] __initdata = {"swdt_ext_clk"};
+
+static void __init zynq_clk_register_fclk(enum zynq_clk fclk,
+               const char *clk_name, void __iomem *fclk_ctrl_reg,
+               const char **parents)
+{
+       struct clk *clk;
+       char *mux_name;
+       char *div0_name;
+       char *div1_name;
+       spinlock_t *fclk_lock;
+       spinlock_t *fclk_gate_lock;
+       void __iomem *fclk_gate_reg = fclk_ctrl_reg + 8;
+
+       fclk_lock = kmalloc(sizeof(*fclk_lock), GFP_KERNEL);
+       if (!fclk_lock)
+               goto err;
+       fclk_gate_lock = kmalloc(sizeof(*fclk_gate_lock), GFP_KERNEL);
+       if (!fclk_gate_lock)
+               goto err;
+       spin_lock_init(fclk_lock);
+       spin_lock_init(fclk_gate_lock);
+
+       mux_name = kasprintf(GFP_KERNEL, "%s_mux", clk_name);
+       div0_name = kasprintf(GFP_KERNEL, "%s_div0", clk_name);
+       div1_name = kasprintf(GFP_KERNEL, "%s_div1", clk_name);
+
+       clk = clk_register_mux(NULL, mux_name, parents, 4, 0,
+                       fclk_ctrl_reg, 4, 2, 0, fclk_lock);
+
+       clk = clk_register_divider(NULL, div0_name, mux_name,
+                       0, fclk_ctrl_reg, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, fclk_lock);
+
+       clk = clk_register_divider(NULL, div1_name, div0_name,
+                       CLK_SET_RATE_PARENT, fclk_ctrl_reg, 20, 6,
+                       CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
+                       fclk_lock);
+
+       clks[fclk] = clk_register_gate(NULL, clk_name,
+                       div1_name, CLK_SET_RATE_PARENT, fclk_gate_reg,
+                       0, CLK_GATE_SET_TO_DISABLE, fclk_gate_lock);
+       kfree(mux_name);
+       kfree(div0_name);
+       kfree(div1_name);
+
+       return;
+
+err:
+       clks[fclk] = ERR_PTR(-ENOMEM);
+}
+
+static void __init zynq_clk_register_periph_clk(enum zynq_clk clk0,
+               enum zynq_clk clk1, const char *clk_name0,
+               const char *clk_name1, void __iomem *clk_ctrl,
+               const char **parents, unsigned int two_gates)
+{
+       struct clk *clk;
+       char *mux_name;
+       char *div_name;
+       spinlock_t *lock;
+
+       lock = kmalloc(sizeof(*lock), GFP_KERNEL);
+       if (!lock)
+               goto err;
+       spin_lock_init(lock);
+
+       mux_name = kasprintf(GFP_KERNEL, "%s_mux", clk_name0);
+       div_name = kasprintf(GFP_KERNEL, "%s_div", clk_name0);
+
+       clk = clk_register_mux(NULL, mux_name, parents, 4, 0,
+                       clk_ctrl, 4, 2, 0, lock);
+
+       clk = clk_register_divider(NULL, div_name, mux_name, 0, clk_ctrl, 8, 6,
+                       CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO, lock);
+
+       clks[clk0] = clk_register_gate(NULL, clk_name0, div_name,
+                       CLK_SET_RATE_PARENT, clk_ctrl, 0, 0, lock);
+       if (two_gates)
+               clks[clk1] = clk_register_gate(NULL, clk_name1, div_name,
+                               CLK_SET_RATE_PARENT, clk_ctrl, 1, 0, lock);
+
+       kfree(mux_name);
+       kfree(div_name);
+
+       return;
+
+err:
+       clks[clk0] = ERR_PTR(-ENOMEM);
+       if (two_gates)
+               clks[clk1] = ERR_PTR(-ENOMEM);
+}
+
+static void __init zynq_clk_setup(struct device_node *np)
+{
+       int i;
+       u32 tmp;
+       int ret;
+       struct clk *clk;
+       char *clk_name;
+       const char *clk_output_name[clk_max];
+       const char *cpu_parents[4];
+       const char *periph_parents[4];
+       const char *swdt_ext_clk_mux_parents[2];
+       const char *can_mio_mux_parents[NUM_MIO_PINS];
+
+       pr_info("Zynq clock init\n");
+
+       /* get clock output names from DT */
+       for (i = 0; i < clk_max; i++) {
+               if (of_property_read_string_index(np, "clock-output-names",
+                                 i, &clk_output_name[i])) {
+                       pr_err("%s: clock output name not in DT\n", __func__);
+                       BUG();
+               }
+       }
+       cpu_parents[0] = clk_output_name[armpll];
+       cpu_parents[1] = clk_output_name[armpll];
+       cpu_parents[2] = clk_output_name[ddrpll];
+       cpu_parents[3] = clk_output_name[iopll];
+       periph_parents[0] = clk_output_name[iopll];
+       periph_parents[1] = clk_output_name[iopll];
+       periph_parents[2] = clk_output_name[armpll];
+       periph_parents[3] = clk_output_name[ddrpll];
+
+       /* ps_clk */
+       ret = of_property_read_u32(np, "ps-clk-frequency", &tmp);
+       if (ret) {
+               pr_warn("ps_clk frequency not specified, using 33 MHz.\n");
+               tmp = 33333333;
+       }
+       ps_clk = clk_register_fixed_rate(NULL, "ps_clk", NULL, CLK_IS_ROOT,
+                       tmp);
+
+       /* PLLs */
+       clk = clk_register_zynq_pll("armpll_int", "ps_clk", SLCR_ARMPLL_CTRL,
+                       SLCR_PLL_STATUS, 0, &armpll_lock);
+       clks[armpll] = clk_register_mux(NULL, clk_output_name[armpll],
+                       armpll_parents, 2, 0, SLCR_ARMPLL_CTRL, 4, 1, 0,
+                       &armpll_lock);
+
+       clk = clk_register_zynq_pll("ddrpll_int", "ps_clk", SLCR_DDRPLL_CTRL,
+                       SLCR_PLL_STATUS, 1, &ddrpll_lock);
+       clks[ddrpll] = clk_register_mux(NULL, clk_output_name[ddrpll],
+                       ddrpll_parents, 2, 0, SLCR_DDRPLL_CTRL, 4, 1, 0,
+                       &ddrpll_lock);
+
+       clk = clk_register_zynq_pll("iopll_int", "ps_clk", SLCR_IOPLL_CTRL,
+                       SLCR_PLL_STATUS, 2, &iopll_lock);
+       clks[iopll] = clk_register_mux(NULL, clk_output_name[iopll],
+                       iopll_parents, 2, 0, SLCR_IOPLL_CTRL, 4, 1, 0,
+                       &iopll_lock);
+
+       /* CPU clocks */
+       tmp = readl(SLCR_621_TRUE) & 1;
+       clk = clk_register_mux(NULL, "cpu_mux", cpu_parents, 4, 0,
+                       SLCR_ARM_CLK_CTRL, 4, 2, 0, &armclk_lock);
+       clk = clk_register_divider(NULL, "cpu_div", "cpu_mux", 0,
+                       SLCR_ARM_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &armclk_lock);
+
+       clks[cpu_6or4x] = clk_register_gate(NULL, clk_output_name[cpu_6or4x],
+                       "cpu_div", CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
+                       SLCR_ARM_CLK_CTRL, 24, 0, &armclk_lock);
+
+       clk = clk_register_fixed_factor(NULL, "cpu_3or2x_div", "cpu_div", 0,
+                       1, 2);
+       clks[cpu_3or2x] = clk_register_gate(NULL, clk_output_name[cpu_3or2x],
+                       "cpu_3or2x_div", CLK_IGNORE_UNUSED,
+                       SLCR_ARM_CLK_CTRL, 25, 0, &armclk_lock);
+
+       clk = clk_register_fixed_factor(NULL, "cpu_2x_div", "cpu_div", 0, 1,
+                       2 + tmp);
+       clks[cpu_2x] = clk_register_gate(NULL, clk_output_name[cpu_2x],
+                       "cpu_2x_div", CLK_IGNORE_UNUSED, SLCR_ARM_CLK_CTRL,
+                       26, 0, &armclk_lock);
+
+       clk = clk_register_fixed_factor(NULL, "cpu_1x_div", "cpu_div", 0, 1,
+                       4 + 2 * tmp);
+       clks[cpu_1x] = clk_register_gate(NULL, clk_output_name[cpu_1x],
+                       "cpu_1x_div", CLK_IGNORE_UNUSED, SLCR_ARM_CLK_CTRL, 27,
+                       0, &armclk_lock);
+
+       /* Timers */
+       swdt_ext_clk_mux_parents[0] = clk_output_name[cpu_1x];
+       for (i = 0; i < ARRAY_SIZE(swdt_ext_clk_input_names); i++) {
+               int idx = of_property_match_string(np, "clock-names",
+                               swdt_ext_clk_input_names[i]);
+               if (idx >= 0)
+                       swdt_ext_clk_mux_parents[i + 1] =
+                               of_clk_get_parent_name(np, idx);
+               else
+                       swdt_ext_clk_mux_parents[i + 1] = dummy_nm;
+       }
+       clks[swdt] = clk_register_mux(NULL, clk_output_name[swdt],
+                       swdt_ext_clk_mux_parents, 2, CLK_SET_RATE_PARENT,
+                       SLCR_SWDT_CLK_SEL, 0, 1, 0, &gem0clk_lock);
+
+       /* DDR clocks */
+       clk = clk_register_divider(NULL, "ddr2x_div", "ddrpll", 0,
+                       SLCR_DDR_CLK_CTRL, 26, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &ddrclk_lock);
+       clks[ddr2x] = clk_register_gate(NULL, clk_output_name[ddr2x],
+                       "ddr2x_div", 0, SLCR_DDR_CLK_CTRL, 1, 0, &ddrclk_lock);
+       clk_prepare_enable(clks[ddr2x]);
+       clk = clk_register_divider(NULL, "ddr3x_div", "ddrpll", 0,
+                       SLCR_DDR_CLK_CTRL, 20, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &ddrclk_lock);
+       clks[ddr3x] = clk_register_gate(NULL, clk_output_name[ddr3x],
+                       "ddr3x_div", 0, SLCR_DDR_CLK_CTRL, 0, 0, &ddrclk_lock);
+       clk_prepare_enable(clks[ddr3x]);
+
+       clk = clk_register_divider(NULL, "dci_div0", "ddrpll", 0,
+                       SLCR_DCI_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &dciclk_lock);
+       clk = clk_register_divider(NULL, "dci_div1", "dci_div0",
+                       CLK_SET_RATE_PARENT, SLCR_DCI_CLK_CTRL, 20, 6,
+                       CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
+                       &dciclk_lock);
+       clks[dci] = clk_register_gate(NULL, clk_output_name[dci], "dci_div1",
+                       CLK_SET_RATE_PARENT, SLCR_DCI_CLK_CTRL, 0, 0,
+                       &dciclk_lock);
+       clk_prepare_enable(clks[dci]);
+
+       /* Peripheral clocks */
+       for (i = fclk0; i <= fclk3; i++)
+               zynq_clk_register_fclk(i, clk_output_name[i],
+                               SLCR_FPGA0_CLK_CTRL + 0x10 * (i - fclk0),
+                               periph_parents);
+
+       zynq_clk_register_periph_clk(lqspi, 0, clk_output_name[lqspi], NULL,
+                       SLCR_LQSPI_CLK_CTRL, periph_parents, 0);
+
+       zynq_clk_register_periph_clk(smc, 0, clk_output_name[smc], NULL,
+                       SLCR_SMC_CLK_CTRL, periph_parents, 0);
+
+       zynq_clk_register_periph_clk(pcap, 0, clk_output_name[pcap], NULL,
+                       SLCR_PCAP_CLK_CTRL, periph_parents, 0);
+
+       zynq_clk_register_periph_clk(sdio0, sdio1, clk_output_name[sdio0],
+                       clk_output_name[sdio1], SLCR_SDIO_CLK_CTRL,
+                       periph_parents, 1);
+
+       zynq_clk_register_periph_clk(uart0, uart1, clk_output_name[uart0],
+                       clk_output_name[uart1], SLCR_UART_CLK_CTRL,
+                       periph_parents, 1);
+
+       zynq_clk_register_periph_clk(spi0, spi1, clk_output_name[spi0],
+                       clk_output_name[spi1], SLCR_SPI_CLK_CTRL,
+                       periph_parents, 1);
+
+       for (i = 0; i < ARRAY_SIZE(gem0_emio_input_names); i++) {
+               int idx = of_property_match_string(np, "clock-names",
+                               gem0_emio_input_names[i]);
+               if (idx >= 0)
+                       gem0_mux_parents[i + 1] = of_clk_get_parent_name(np,
+                                       idx);
+       }
+       clk = clk_register_mux(NULL, "gem0_mux", periph_parents, 4, 0,
+                       SLCR_GEM0_CLK_CTRL, 4, 2, 0, &gem0clk_lock);
+       clk = clk_register_divider(NULL, "gem0_div0", "gem0_mux", 0,
+                       SLCR_GEM0_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &gem0clk_lock);
+       clk = clk_register_divider(NULL, "gem0_div1", "gem0_div0",
+                       CLK_SET_RATE_PARENT, SLCR_GEM0_CLK_CTRL, 20, 6,
+                       CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
+                       &gem0clk_lock);
+       clk = clk_register_mux(NULL, "gem0_emio_mux", gem0_mux_parents, 2, 0,
+                       SLCR_GEM0_CLK_CTRL, 6, 1, 0, &gem0clk_lock);
+       clks[gem0] = clk_register_gate(NULL, clk_output_name[gem0],
+                       "gem0_emio_mux", CLK_SET_RATE_PARENT,
+                       SLCR_GEM0_CLK_CTRL, 0, 0, &gem0clk_lock);
+
+       for (i = 0; i < ARRAY_SIZE(gem1_emio_input_names); i++) {
+               int idx = of_property_match_string(np, "clock-names",
+                               gem1_emio_input_names[i]);
+               if (idx >= 0)
+                       gem1_mux_parents[i + 1] = of_clk_get_parent_name(np,
+                                       idx);
+       }
+       clk = clk_register_mux(NULL, "gem1_mux", periph_parents, 4, 0,
+                       SLCR_GEM1_CLK_CTRL, 4, 2, 0, &gem1clk_lock);
+       clk = clk_register_divider(NULL, "gem1_div0", "gem1_mux", 0,
+                       SLCR_GEM1_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &gem1clk_lock);
+       clk = clk_register_divider(NULL, "gem1_div1", "gem1_div0",
+                       CLK_SET_RATE_PARENT, SLCR_GEM1_CLK_CTRL, 20, 6,
+                       CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
+                       &gem1clk_lock);
+       clk = clk_register_mux(NULL, "gem1_emio_mux", gem1_mux_parents, 2, 0,
+                       SLCR_GEM1_CLK_CTRL, 6, 1, 0, &gem1clk_lock);
+       clks[gem1] = clk_register_gate(NULL, clk_output_name[gem1],
+                       "gem1_emio_mux", CLK_SET_RATE_PARENT,
+                       SLCR_GEM1_CLK_CTRL, 0, 0, &gem1clk_lock);
+
+       tmp = strlen("mio_clk_00x");
+       clk_name = kmalloc(tmp, GFP_KERNEL);
+       for (i = 0; i < NUM_MIO_PINS; i++) {
+               int idx;
+
+               snprintf(clk_name, tmp, "mio_clk_%2.2d", i);
+               idx = of_property_match_string(np, "clock-names", clk_name);
+               if (idx >= 0)
+                       can_mio_mux_parents[i] = of_clk_get_parent_name(np,
+                                               idx);
+               else
+                       can_mio_mux_parents[i] = dummy_nm;
+       }
+       kfree(clk_name);
+       clk = clk_register_mux(NULL, "can_mux", periph_parents, 4, 0,
+                       SLCR_CAN_CLK_CTRL, 4, 2, 0, &canclk_lock);
+       clk = clk_register_divider(NULL, "can_div0", "can_mux", 0,
+                       SLCR_CAN_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &canclk_lock);
+       clk = clk_register_divider(NULL, "can_div1", "can_div0",
+                       CLK_SET_RATE_PARENT, SLCR_CAN_CLK_CTRL, 20, 6,
+                       CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
+                       &canclk_lock);
+       clk = clk_register_gate(NULL, "can0_gate", "can_div1",
+                       CLK_SET_RATE_PARENT, SLCR_CAN_CLK_CTRL, 0, 0,
+                       &canclk_lock);
+       clk = clk_register_gate(NULL, "can1_gate", "can_div1",
+                       CLK_SET_RATE_PARENT, SLCR_CAN_CLK_CTRL, 1, 0,
+                       &canclk_lock);
+       clk = clk_register_mux(NULL, "can0_mio_mux",
+                       can_mio_mux_parents, 54, CLK_SET_RATE_PARENT,
+                       SLCR_CAN_MIOCLK_CTRL, 0, 6, 0, &canmioclk_lock);
+       clk = clk_register_mux(NULL, "can1_mio_mux",
+                       can_mio_mux_parents, 54, CLK_SET_RATE_PARENT,
+                       SLCR_CAN_MIOCLK_CTRL, 16, 6, 0, &canmioclk_lock);
+       clks[can0] = clk_register_mux(NULL, clk_output_name[can0],
+                       can0_mio_mux2_parents, 2, CLK_SET_RATE_PARENT,
+                       SLCR_CAN_MIOCLK_CTRL, 6, 1, 0, &canmioclk_lock);
+       clks[can1] = clk_register_mux(NULL, clk_output_name[can1],
+                       can1_mio_mux2_parents, 2, CLK_SET_RATE_PARENT,
+                       SLCR_CAN_MIOCLK_CTRL, 22, 1, 0, &canmioclk_lock);
+
+       for (i = 0; i < ARRAY_SIZE(dbgtrc_emio_input_names); i++) {
+               int idx = of_property_match_string(np, "clock-names",
+                               dbgtrc_emio_input_names[i]);
+               if (idx >= 0)
+                       dbg_emio_mux_parents[i + 1] = of_clk_get_parent_name(np,
+                                       idx);
+       }
+       clk = clk_register_mux(NULL, "dbg_mux", periph_parents, 4, 0,
+                       SLCR_DBG_CLK_CTRL, 4, 2, 0, &dbgclk_lock);
+       clk = clk_register_divider(NULL, "dbg_div", "dbg_mux", 0,
+                       SLCR_DBG_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED |
+                       CLK_DIVIDER_ALLOW_ZERO, &dbgclk_lock);
+       clk = clk_register_mux(NULL, "dbg_emio_mux", dbg_emio_mux_parents, 2, 0,
+                       SLCR_DBG_CLK_CTRL, 6, 1, 0, &dbgclk_lock);
+       clks[dbg_trc] = clk_register_gate(NULL, clk_output_name[dbg_trc],
+                       "dbg_emio_mux", CLK_SET_RATE_PARENT, SLCR_DBG_CLK_CTRL,
+                       0, 0, &dbgclk_lock);
+       clks[dbg_apb] = clk_register_gate(NULL, clk_output_name[dbg_apb],
+                       clk_output_name[cpu_1x], 0, SLCR_DBG_CLK_CTRL, 1, 0,
+                       &dbgclk_lock);
+
+       /* One gated clock for all APER clocks. */
+       clks[dma] = clk_register_gate(NULL, clk_output_name[dma],
+                       clk_output_name[cpu_2x], 0, SLCR_APER_CLK_CTRL, 0, 0,
+                       &aperclk_lock);
+       clks[usb0_aper] = clk_register_gate(NULL, clk_output_name[usb0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 2, 0,
+                       &aperclk_lock);
+       clks[usb1_aper] = clk_register_gate(NULL, clk_output_name[usb1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 3, 0,
+                       &aperclk_lock);
+       clks[gem0_aper] = clk_register_gate(NULL, clk_output_name[gem0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 6, 0,
+                       &aperclk_lock);
+       clks[gem1_aper] = clk_register_gate(NULL, clk_output_name[gem1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 7, 0,
+                       &aperclk_lock);
+       clks[sdio0_aper] = clk_register_gate(NULL, clk_output_name[sdio0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 10, 0,
+                       &aperclk_lock);
+       clks[sdio1_aper] = clk_register_gate(NULL, clk_output_name[sdio1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 11, 0,
+                       &aperclk_lock);
+       clks[spi0_aper] = clk_register_gate(NULL, clk_output_name[spi0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 14, 0,
+                       &aperclk_lock);
+       clks[spi1_aper] = clk_register_gate(NULL, clk_output_name[spi1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 15, 0,
+                       &aperclk_lock);
+       clks[can0_aper] = clk_register_gate(NULL, clk_output_name[can0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 16, 0,
+                       &aperclk_lock);
+       clks[can1_aper] = clk_register_gate(NULL, clk_output_name[can1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 17, 0,
+                       &aperclk_lock);
+       clks[i2c0_aper] = clk_register_gate(NULL, clk_output_name[i2c0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 18, 0,
+                       &aperclk_lock);
+       clks[i2c1_aper] = clk_register_gate(NULL, clk_output_name[i2c1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 19, 0,
+                       &aperclk_lock);
+       clks[uart0_aper] = clk_register_gate(NULL, clk_output_name[uart0_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 20, 0,
+                       &aperclk_lock);
+       clks[uart1_aper] = clk_register_gate(NULL, clk_output_name[uart1_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 21, 0,
+                       &aperclk_lock);
+       clks[gpio_aper] = clk_register_gate(NULL, clk_output_name[gpio_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 22, 0,
+                       &aperclk_lock);
+       clks[lqspi_aper] = clk_register_gate(NULL, clk_output_name[lqspi_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 23, 0,
+                       &aperclk_lock);
+       clks[smc_aper] = clk_register_gate(NULL, clk_output_name[smc_aper],
+                       clk_output_name[cpu_1x], 0, SLCR_APER_CLK_CTRL, 24, 0,
+                       &aperclk_lock);
+
+       for (i = 0; i < ARRAY_SIZE(clks); i++) {
+               if (IS_ERR(clks[i])) {
+                       pr_err("Zynq clk %d: register failed with %ld\n",
+                              i, PTR_ERR(clks[i]));
+                       BUG();
+               }
+       }
+
+       clk_data.clks = clks;
+       clk_data.clk_num = ARRAY_SIZE(clks);
+       of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+}
+
+CLK_OF_DECLARE(zynq_clkc, "xlnx,ps7-clkc", zynq_clk_setup);
+
+void __init zynq_clock_init(void __iomem *slcr_base)
+{
+       zynq_slcr_base_priv = slcr_base;
+       of_clk_init(NULL);
+}
diff --git a/drivers/clk/zynq/pll.c b/drivers/clk/zynq/pll.c
new file mode 100644 (file)
index 0000000..47e307c
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * Zynq PLL driver
+ *
+ *  Copyright (C) 2013 Xilinx
+ *
+ *  Sören Brinkmann <soren.brinkmann@xilinx.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2 as published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#include <linux/clk/zynq.h>
+#include <linux/clk-provider.h>
+#include <linux/slab.h>
+#include <linux/io.h>
+
+/**
+ * struct zynq_pll
+ * @hw:                Handle between common and hardware-specific interfaces
+ * @pll_ctrl:  PLL control register
+ * @pll_status:        PLL status register
+ * @lock:      Register lock
+ * @lockbit:   Indicates the associated PLL_LOCKED bit in the PLL status
+ *             register.
+ */
+struct zynq_pll {
+       struct clk_hw   hw;
+       void __iomem    *pll_ctrl;
+       void __iomem    *pll_status;
+       spinlock_t      *lock;
+       u8              lockbit;
+};
+#define to_zynq_pll(_hw)       container_of(_hw, struct zynq_pll, hw)
+
+/* Register bitfield defines */
+#define PLLCTRL_FBDIV_MASK     0x7f000
+#define PLLCTRL_FBDIV_SHIFT    12
+#define PLLCTRL_BPQUAL_MASK    (1 << 3)
+#define PLLCTRL_PWRDWN_MASK    2
+#define PLLCTRL_PWRDWN_SHIFT   1
+#define PLLCTRL_RESET_MASK     1
+#define PLLCTRL_RESET_SHIFT    0
+
+/**
+ * zynq_pll_round_rate() - Round a clock frequency
+ * @hw:                Handle between common and hardware-specific interfaces
+ * @rate:      Desired clock frequency
+ * @prate:     Clock frequency of parent clock
+ * Returns frequency closest to @rate the hardware can generate.
+ */
+static long zynq_pll_round_rate(struct clk_hw *hw, unsigned long rate,
+               unsigned long *prate)
+{
+       u32 fbdiv;
+
+       fbdiv = DIV_ROUND_CLOSEST(rate, *prate);
+       if (fbdiv < 13)
+               fbdiv = 13;
+       else if (fbdiv > 66)
+               fbdiv = 66;
+
+       return *prate * fbdiv;
+}
+
+/**
+ * zynq_pll_recalc_rate() - Recalculate clock frequency
+ * @hw:                        Handle between common and hardware-specific interfaces
+ * @parent_rate:       Clock frequency of parent clock
+ * Returns current clock frequency.
+ */
+static unsigned long zynq_pll_recalc_rate(struct clk_hw *hw,
+               unsigned long parent_rate)
+{
+       struct zynq_pll *clk = to_zynq_pll(hw);
+       u32 fbdiv;
+
+       /*
+        * makes probably sense to redundantly save fbdiv in the struct
+        * zynq_pll to save the IO access.
+        */
+       fbdiv = (readl(clk->pll_ctrl) & PLLCTRL_FBDIV_MASK) >>
+                       PLLCTRL_FBDIV_SHIFT;
+
+       return parent_rate * fbdiv;
+}
+
+/**
+ * zynq_pll_is_enabled - Check if a clock is enabled
+ * @hw:                Handle between common and hardware-specific interfaces
+ * Returns 1 if the clock is enabled, 0 otherwise.
+ *
+ * Not sure this is a good idea, but since disabled means bypassed for
+ * this clock implementation we say we are always enabled.
+ */
+static int zynq_pll_is_enabled(struct clk_hw *hw)
+{
+       unsigned long flags = 0;
+       u32 reg;
+       struct zynq_pll *clk = to_zynq_pll(hw);
+
+       spin_lock_irqsave(clk->lock, flags);
+
+       reg = readl(clk->pll_ctrl);
+
+       spin_unlock_irqrestore(clk->lock, flags);
+
+       return !(reg & (PLLCTRL_RESET_MASK | PLLCTRL_PWRDWN_MASK));
+}
+
+/**
+ * zynq_pll_enable - Enable clock
+ * @hw:                Handle between common and hardware-specific interfaces
+ * Returns 0 on success
+ */
+static int zynq_pll_enable(struct clk_hw *hw)
+{
+       unsigned long flags = 0;
+       u32 reg;
+       struct zynq_pll *clk = to_zynq_pll(hw);
+
+       if (zynq_pll_is_enabled(hw))
+               return 0;
+
+       pr_info("PLL: enable\n");
+
+       /* Power up PLL and wait for lock */
+       spin_lock_irqsave(clk->lock, flags);
+
+       reg = readl(clk->pll_ctrl);
+       reg &= ~(PLLCTRL_RESET_MASK | PLLCTRL_PWRDWN_MASK);
+       writel(reg, clk->pll_ctrl);
+       while (!(readl(clk->pll_status) & (1 << clk->lockbit)))
+               ;
+
+       spin_unlock_irqrestore(clk->lock, flags);
+
+       return 0;
+}
+
+/**
+ * zynq_pll_disable - Disable clock
+ * @hw:                Handle between common and hardware-specific interfaces
+ * Returns 0 on success
+ */
+static void zynq_pll_disable(struct clk_hw *hw)
+{
+       unsigned long flags = 0;
+       u32 reg;
+       struct zynq_pll *clk = to_zynq_pll(hw);
+
+       if (!zynq_pll_is_enabled(hw))
+               return;
+
+       pr_info("PLL: shutdown\n");
+
+       /* shut down PLL */
+       spin_lock_irqsave(clk->lock, flags);
+
+       reg = readl(clk->pll_ctrl);
+       reg |= PLLCTRL_RESET_MASK | PLLCTRL_PWRDWN_MASK;
+       writel(reg, clk->pll_ctrl);
+
+       spin_unlock_irqrestore(clk->lock, flags);
+}
+
+static const struct clk_ops zynq_pll_ops = {
+       .enable = zynq_pll_enable,
+       .disable = zynq_pll_disable,
+       .is_enabled = zynq_pll_is_enabled,
+       .round_rate = zynq_pll_round_rate,
+       .recalc_rate = zynq_pll_recalc_rate
+};
+
+/**
+ * clk_register_zynq_pll() - Register PLL with the clock framework
+ * @np Pointer to the DT device node
+ */
+struct clk *clk_register_zynq_pll(const char *name, const char *parent,
+               void __iomem *pll_ctrl, void __iomem *pll_status, u8 lock_index,
+               spinlock_t *lock)
+{
+       struct zynq_pll *pll;
+       struct clk *clk;
+       u32 reg;
+       const char *parent_arr[1] = {parent};
+       unsigned long flags = 0;
+       struct clk_init_data initd = {
+               .name = name,
+               .parent_names = parent_arr,
+               .ops = &zynq_pll_ops,
+               .num_parents = 1,
+               .flags = 0
+       };
+
+       pll = kmalloc(sizeof(*pll), GFP_KERNEL);
+       if (!pll) {
+               pr_err("%s: Could not allocate Zynq PLL clk.\n", __func__);
+               return ERR_PTR(-ENOMEM);
+       }
+
+       /* Populate the struct */
+       pll->hw.init = &initd;
+       pll->pll_ctrl = pll_ctrl;
+       pll->pll_status = pll_status;
+       pll->lockbit = lock_index;
+       pll->lock = lock;
+
+       spin_lock_irqsave(pll->lock, flags);
+
+       reg = readl(pll->pll_ctrl);
+       reg &= ~PLLCTRL_BPQUAL_MASK;
+       writel(reg, pll->pll_ctrl);
+
+       spin_unlock_irqrestore(pll->lock, flags);
+
+       clk = clk_register(NULL, &pll->hw);
+       if (WARN_ON(IS_ERR(clk)))
+               goto free_pll;
+
+       return clk;
+
+free_pll:
+       kfree(pll);
+
+       return clk;
+}
index f151c6cf27c336ffa756c68a69dc2d4dd20dfb8f..5871933c4e51ddd11fc0fc485d7f58c4bf7d513d 100644 (file)
@@ -21,6 +21,8 @@ config DW_APB_TIMER
 
 config DW_APB_TIMER_OF
        bool
+       select DW_APB_TIMER
+       select CLKSRC_OF
 
 config ARMADA_370_XP_TIMER
        bool
index 685bc60e210ad45ae45192376c496e3cfbf73926..4cbe28c74631eaa5ef8df596865db2a92bd02cb7 100644 (file)
@@ -51,6 +51,8 @@
 
 #define TTC_CNT_CNTRL_DISABLE_MASK     0x1
 
+#define TTC_CLK_CNTRL_CSRC_MASK                (1 << 5)        /* clock source */
+
 /*
  * Setup the timers to use pre-scaling, using a fixed value for now that will
  * work across most input frequency, but it may need to be more dynamic
@@ -396,8 +398,9 @@ static void __init ttc_timer_init(struct device_node *timer)
 {
        unsigned int irq;
        void __iomem *timer_baseaddr;
-       struct clk *clk;
+       struct clk *clk_cs, *clk_ce;
        static int initialized;
+       int clksel;
 
        if (initialized)
                return;
@@ -421,14 +424,24 @@ static void __init ttc_timer_init(struct device_node *timer)
                BUG();
        }
 
-       clk = of_clk_get_by_name(timer, "cpu_1x");
-       if (IS_ERR(clk)) {
+       clksel = __raw_readl(timer_baseaddr + TTC_CLK_CNTRL_OFFSET);
+       clksel = !!(clksel & TTC_CLK_CNTRL_CSRC_MASK);
+       clk_cs = of_clk_get(timer, clksel);
+       if (IS_ERR(clk_cs)) {
+               pr_err("ERROR: timer input clock not found\n");
+               BUG();
+       }
+
+       clksel = __raw_readl(timer_baseaddr + 4 + TTC_CLK_CNTRL_OFFSET);
+       clksel = !!(clksel & TTC_CLK_CNTRL_CSRC_MASK);
+       clk_ce = of_clk_get(timer, clksel);
+       if (IS_ERR(clk_ce)) {
                pr_err("ERROR: timer input clock not found\n");
                BUG();
        }
 
-       ttc_setup_clocksource(clk, timer_baseaddr);
-       ttc_setup_clockevent(clk, timer_baseaddr + 4, irq);
+       ttc_setup_clocksource(clk_cs, timer_baseaddr);
+       ttc_setup_clockevent(clk_ce, timer_baseaddr + 4, irq);
 
        pr_info("%s #0 at %p, irq=%d\n", timer->name, timer_baseaddr, irq);
 }
index ab09ed3742ee6c585ed6a607ce2adfbd7d0a5929..cef554432a339822ad6fcf7f280fadb3f060432c 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
+#include <linux/clk.h>
 
 #include <asm/mach/time.h>
 #include <asm/sched_clock.h>
 static void timer_get_base_and_rate(struct device_node *np,
                                    void __iomem **base, u32 *rate)
 {
+       struct clk *timer_clk;
+       struct clk *pclk;
+
        *base = of_iomap(np, 0);
 
        if (!*base)
                panic("Unable to map regs for %s", np->name);
 
+       /*
+        * Not all implementations use a periphal clock, so don't panic
+        * if it's not present
+        */
+       pclk = of_clk_get_by_name(np, "pclk");
+       if (!IS_ERR(pclk))
+               if (clk_prepare_enable(pclk))
+                       pr_warn("pclk for %s is present, but could not be activated\n",
+                               np->name);
+
+       timer_clk = of_clk_get_by_name(np, "timer");
+       if (IS_ERR(timer_clk))
+               goto try_clock_freq;
+
+       if (!clk_prepare_enable(timer_clk)) {
+               *rate = clk_get_rate(timer_clk);
+               return;
+       }
+
+try_clock_freq:
        if (of_property_read_u32(np, "clock-freq", rate) &&
                of_property_read_u32(np, "clock-frequency", rate))
-               panic("No clock-frequency property for %s", np->name);
+               panic("No clock nor clock-frequency property for %s", np->name);
 }
 
 static void add_clockevent(struct device_node *event_timer)
@@ -57,6 +81,9 @@ static void add_clockevent(struct device_node *event_timer)
        dw_apb_clockevent_register(ced);
 }
 
+static void __iomem *sched_io_base;
+static u32 sched_rate;
+
 static void add_clocksource(struct device_node *source_timer)
 {
        void __iomem *iobase;
@@ -71,9 +98,15 @@ static void add_clocksource(struct device_node *source_timer)
 
        dw_apb_clocksource_start(cs);
        dw_apb_clocksource_register(cs);
-}
 
-static void __iomem *sched_io_base;
+       /*
+        * Fallback to use the clocksource as sched_clock if no separate
+        * timer is found. sched_io_base then points to the current_value
+        * register of the clocksource timer.
+        */
+       sched_io_base = iobase + 0x04;
+       sched_rate = rate;
+}
 
 static u32 read_sched_clock(void)
 {
@@ -89,39 +122,37 @@ static const struct of_device_id sptimer_ids[] __initconst = {
 static void init_sched_clock(void)
 {
        struct device_node *sched_timer;
-       u32 rate;
 
        sched_timer = of_find_matching_node(NULL, sptimer_ids);
-       if (!sched_timer)
-               panic("No RTC for sched clock to use");
+       if (sched_timer) {
+               timer_get_base_and_rate(sched_timer, &sched_io_base,
+                                       &sched_rate);
+               of_node_put(sched_timer);
+       }
 
-       timer_get_base_and_rate(sched_timer, &sched_io_base, &rate);
-       of_node_put(sched_timer);
-
-       setup_sched_clock(read_sched_clock, 32, rate);
+       setup_sched_clock(read_sched_clock, 32, sched_rate);
 }
 
-static const struct of_device_id osctimer_ids[] __initconst = {
-       { .compatible = "picochip,pc3x2-timer" },
-       { .compatible = "snps,dw-apb-timer-osc" },
-       {},
-};
-
-void __init dw_apb_timer_init(void)
+static int num_called;
+static void __init dw_apb_timer_init(struct device_node *timer)
 {
-       struct device_node *event_timer, *source_timer;
-
-       event_timer = of_find_matching_node(NULL, osctimer_ids);
-       if (!event_timer)
-               panic("No timer for clockevent");
-       add_clockevent(event_timer);
-
-       source_timer = of_find_matching_node(event_timer, osctimer_ids);
-       if (!source_timer)
-               panic("No timer for clocksource");
-       add_clocksource(source_timer);
-
-       of_node_put(source_timer);
-
-       init_sched_clock();
+       switch (num_called) {
+       case 0:
+               pr_debug("%s: found clockevent timer\n", __func__);
+               add_clockevent(timer);
+               of_node_put(timer);
+               break;
+       case 1:
+               pr_debug("%s: found clocksource timer\n", __func__);
+               add_clocksource(timer);
+               of_node_put(timer);
+               init_sched_clock();
+               break;
+       default:
+               break;
+       }
+
+       num_called++;
 }
+CLOCKSOURCE_OF_DECLARE(pc3x2_timer, "picochip,pc3x2-timer", dw_apb_timer_init);
+CLOCKSOURCE_OF_DECLARE(apb_timer, "snps,dw-apb-timer-osc", dw_apb_timer_init);
index 223379169cb08d01907906919882da5941cd1843..0e6e408c0a630b71c466f3fabaa7decd1b97fed0 100644 (file)
 extern void highbank_set_cpu_jump(int cpu, void *jump_addr);
 extern void *scu_base_addr;
 
-static inline unsigned int get_auxcr(void)
-{
-       unsigned int val;
-       asm("mrc p15, 0, %0, c1, c0, 1  @ get AUXCR" : "=r" (val) : : "cc");
-       return val;
-}
-
-static inline void set_auxcr(unsigned int val)
-{
-       asm volatile("mcr p15, 0, %0, c1, c0, 1 @ set AUXCR"
-         : : "r" (val) : "cc");
-       isb();
-}
-
 static noinline void calxeda_idle_restore(void)
 {
        set_cr(get_cr() | CR_C);
index e9924898043adf2a437b8f2eb3b8f15329ac755f..3215a3cb3de863ff8649187fe61c72976cb555a8 100644 (file)
@@ -213,7 +213,7 @@ config SIRF_DMA
 
 config TI_EDMA
        tristate "TI EDMA support"
-       depends on ARCH_DAVINCI
+       depends on ARCH_DAVINCI || ARCH_OMAP
        select DMA_ENGINE
        select DMA_VIRTUAL_CHANNELS
        default n
index 3b23061cdb41bd0e963a5160bb4fbd7edf62de2d..9bfaddd57ef1ab80c301a7d38b8c40e898e047c1 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/uaccess.h>
 #include <linux/debugfs.h>
 #include <linux/platform_data/dma-coh901318.h>
+#include <linux/of_dma.h>
 
 #include "coh901318.h"
 #include "dmaengine.h"
@@ -1788,6 +1789,35 @@ bool coh901318_filter_id(struct dma_chan *chan, void *chan_id)
 }
 EXPORT_SYMBOL(coh901318_filter_id);
 
+struct coh901318_filter_args {
+       struct coh901318_base *base;
+       unsigned int ch_nr;
+};
+
+static bool coh901318_filter_base_and_id(struct dma_chan *chan, void *data)
+{
+       struct coh901318_filter_args *args = data;
+
+       if (&args->base->dma_slave == chan->device &&
+           args->ch_nr == to_coh901318_chan(chan)->id)
+               return true;
+
+       return false;
+}
+
+static struct dma_chan *coh901318_xlate(struct of_phandle_args *dma_spec,
+                                       struct of_dma *ofdma)
+{
+       struct coh901318_filter_args args = {
+               .base = ofdma->of_dma_data,
+               .ch_nr = dma_spec->args[0],
+       };
+       dma_cap_mask_t cap;
+       dma_cap_zero(cap);
+       dma_cap_set(DMA_SLAVE, cap);
+
+       return dma_request_channel(cap, coh901318_filter_base_and_id, &args);
+}
 /*
  * DMA channel allocation
  */
@@ -2735,12 +2765,19 @@ static int __init coh901318_probe(struct platform_device *pdev)
        if (err)
                goto err_register_memcpy;
 
+       err = of_dma_controller_register(pdev->dev.of_node, coh901318_xlate,
+                                        base);
+       if (err)
+               goto err_register_of_dma;
+
        platform_set_drvdata(pdev, base);
        dev_info(&pdev->dev, "Initialized COH901318 DMA on virtual base 0x%08x\n",
                (u32) base->virtbase);
 
        return err;
 
+ err_register_of_dma:
+       dma_async_device_unregister(&base->dma_memcpy);
  err_register_memcpy:
        dma_async_device_unregister(&base->dma_slave);
  err_register_slave:
@@ -2752,17 +2789,23 @@ static int coh901318_remove(struct platform_device *pdev)
 {
        struct coh901318_base *base = platform_get_drvdata(pdev);
 
+       of_dma_controller_free(pdev->dev.of_node);
        dma_async_device_unregister(&base->dma_memcpy);
        dma_async_device_unregister(&base->dma_slave);
        coh901318_pool_destroy(&base->pool);
        return 0;
 }
 
+static const struct of_device_id coh901318_dt_match[] = {
+       { .compatible = "stericsson,coh901318" },
+       {},
+};
 
 static struct platform_driver coh901318_driver = {
        .remove = coh901318_remove,
        .driver = {
                .name   = "coh901318",
+               .of_match_table = coh901318_dt_match,
        },
 };
 
index cd7e3280fadd121e9dfbd13fef93212c4b217435..5f3e532436ee40c5f035b4c9bd6b2b008700b350 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 
-#include <mach/edma.h>
+#include <linux/platform_data/edma.h>
 
 #include "dmaengine.h"
 #include "virt-dma.h"
index 847a6dc15a543cbf4e9544a1fe0a60057117a45b..94624370caad033f455a7dc6f64743e8175cca31 100644 (file)
@@ -109,8 +109,11 @@ config GPIO_MAX730X
 comment "Memory mapped GPIO drivers:"
 
 config GPIO_CLPS711X
-       def_bool y
+       tristate "CLPS711X GPIO support"
        depends on ARCH_CLPS711X
+       select GPIO_GENERIC
+       help
+         Say yes here to support GPIO on CLPS711X SoCs.
 
 config GPIO_GENERIC_PLATFORM
        tristate "Generic memory-mapped GPIO controller support (MMIO platform device)"
@@ -209,6 +212,13 @@ config GPIO_RCAR
        help
          Say yes here to support GPIO on Renesas R-Car SoCs.
 
+config GPIO_SAMSUNG
+       bool
+       depends on PLAT_SAMSUNG
+       help
+         Legacy GPIO support. Use only for platforms without support for
+         pinctrl.
+
 config GPIO_SPEAR_SPICS
        bool "ST SPEAr13xx SPI Chip Select as GPIO support"
        depends on PLAT_SPEAR
index 0cb2d656ad16b96663d921cb2b2ee910d944209f..ef3e983a2f1ead46b6e39d650de2c67b757883b7 100644 (file)
@@ -59,7 +59,7 @@ obj-$(CONFIG_GPIO_PXA)                += gpio-pxa.o
 obj-$(CONFIG_GPIO_RC5T583)     += gpio-rc5t583.o
 obj-$(CONFIG_GPIO_RDC321X)     += gpio-rdc321x.o
 obj-$(CONFIG_GPIO_RCAR)                += gpio-rcar.o
-obj-$(CONFIG_PLAT_SAMSUNG)     += gpio-samsung.o
+obj-$(CONFIG_GPIO_SAMSUNG)     += gpio-samsung.o
 obj-$(CONFIG_ARCH_SA1100)      += gpio-sa1100.o
 obj-$(CONFIG_GPIO_SCH)         += gpio-sch.o
 obj-$(CONFIG_GPIO_SODAVILLE)   += gpio-sodaville.o
index ce63b75b13f5ae1eb9869d499862668222b8a2fe..0edaf2ce92663557a7e4a67dc5cf9364c1ef6716 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  CLPS711X GPIO driver
  *
- *  Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru>
+ *  Copyright (C) 2012,2013 Alexander Shiyan <shc_work@mail.ru>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * (at your option) any later version.
  */
 
-#include <linux/io.h>
-#include <linux/slab.h>
+#include <linux/err.h>
 #include <linux/gpio.h>
 #include <linux/module.h>
-#include <linux/spinlock.h>
+#include <linux/basic_mmio_gpio.h>
 #include <linux/platform_device.h>
 
-#include <mach/hardware.h>
-
-#define CLPS711X_GPIO_PORTS    5
-#define CLPS711X_GPIO_NAME     "gpio-clps711x"
-
-struct clps711x_gpio {
-       struct gpio_chip        chip[CLPS711X_GPIO_PORTS];
-       spinlock_t              lock;
-};
-
-static void __iomem *clps711x_ports[] = {
-       CLPS711X_VIRT_BASE + PADR,
-       CLPS711X_VIRT_BASE + PBDR,
-       CLPS711X_VIRT_BASE + PCDR,
-       CLPS711X_VIRT_BASE + PDDR,
-       CLPS711X_VIRT_BASE + PEDR,
-};
-
-static void __iomem *clps711x_pdirs[] = {
-       CLPS711X_VIRT_BASE + PADDR,
-       CLPS711X_VIRT_BASE + PBDDR,
-       CLPS711X_VIRT_BASE + PCDDR,
-       CLPS711X_VIRT_BASE + PDDDR,
-       CLPS711X_VIRT_BASE + PEDDR,
-};
-
-#define clps711x_port(x)       clps711x_ports[x->base / 8]
-#define clps711x_pdir(x)       clps711x_pdirs[x->base / 8]
-
-static int gpio_clps711x_get(struct gpio_chip *chip, unsigned offset)
+static int clps711x_gpio_probe(struct platform_device *pdev)
 {
-       return !!(readb(clps711x_port(chip)) & (1 << offset));
-}
+       struct device_node *np = pdev->dev.of_node;
+       void __iomem *dat, *dir;
+       struct bgpio_chip *bgc;
+       struct resource *res;
+       int err, id = np ? of_alias_get_id(np, "gpio") : pdev->id;
 
-static void gpio_clps711x_set(struct gpio_chip *chip, unsigned offset,
-                             int value)
-{
-       int tmp;
-       unsigned long flags;
-       struct clps711x_gpio *gpio = dev_get_drvdata(chip->dev);
-
-       spin_lock_irqsave(&gpio->lock, flags);
-       tmp = readb(clps711x_port(chip)) & ~(1 << offset);
-       if (value)
-               tmp |= 1 << offset;
-       writeb(tmp, clps711x_port(chip));
-       spin_unlock_irqrestore(&gpio->lock, flags);
-}
-
-static int gpio_clps711x_dir_in(struct gpio_chip *chip, unsigned offset)
-{
-       int tmp;
-       unsigned long flags;
-       struct clps711x_gpio *gpio = dev_get_drvdata(chip->dev);
+       if ((id < 0) || (id > 4))
+               return -ENODEV;
 
-       spin_lock_irqsave(&gpio->lock, flags);
-       tmp = readb(clps711x_pdir(chip)) & ~(1 << offset);
-       writeb(tmp, clps711x_pdir(chip));
-       spin_unlock_irqrestore(&gpio->lock, flags);
+       bgc = devm_kzalloc(&pdev->dev, sizeof(*bgc), GFP_KERNEL);
+       if (!bgc)
+               return -ENOMEM;
 
-       return 0;
-}
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       dat = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(dat))
+               return PTR_ERR(dat);
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       dir = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(dir))
+               return PTR_ERR(dir);
+
+       switch (id) {
+       case 3:
+               /* PORTD is inverted logic for direction register */
+               err = bgpio_init(bgc, &pdev->dev, 1, dat, NULL, NULL,
+                                NULL, dir, 0);
+               break;
+       default:
+               err = bgpio_init(bgc, &pdev->dev, 1, dat, NULL, NULL,
+                                dir, NULL, 0);
+               break;
+       }
 
-static int gpio_clps711x_dir_out(struct gpio_chip *chip, unsigned offset,
-                                int value)
-{
-       int tmp;
-       unsigned long flags;
-       struct clps711x_gpio *gpio = dev_get_drvdata(chip->dev);
-
-       spin_lock_irqsave(&gpio->lock, flags);
-       tmp = readb(clps711x_pdir(chip)) | (1 << offset);
-       writeb(tmp, clps711x_pdir(chip));
-       tmp = readb(clps711x_port(chip)) & ~(1 << offset);
-       if (value)
-               tmp |= 1 << offset;
-       writeb(tmp, clps711x_port(chip));
-       spin_unlock_irqrestore(&gpio->lock, flags);
-
-       return 0;
-}
+       if (err)
+               return err;
 
-static int gpio_clps711x_dir_in_inv(struct gpio_chip *chip, unsigned offset)
-{
-       int tmp;
-       unsigned long flags;
-       struct clps711x_gpio *gpio = dev_get_drvdata(chip->dev);
+       switch (id) {
+       case 4:
+               /* PORTE is 3 lines only */
+               bgc->gc.ngpio = 3;
+               break;
+       default:
+               break;
+       }
 
-       spin_lock_irqsave(&gpio->lock, flags);
-       tmp = readb(clps711x_pdir(chip)) | (1 << offset);
-       writeb(tmp, clps711x_pdir(chip));
-       spin_unlock_irqrestore(&gpio->lock, flags);
+       bgc->gc.base = id * 8;
+       platform_set_drvdata(pdev, bgc);
 
-       return 0;
+       return gpiochip_add(&bgc->gc);
 }
 
-static int gpio_clps711x_dir_out_inv(struct gpio_chip *chip, unsigned offset,
-                                    int value)
+static int clps711x_gpio_remove(struct platform_device *pdev)
 {
-       int tmp;
-       unsigned long flags;
-       struct clps711x_gpio *gpio = dev_get_drvdata(chip->dev);
-
-       spin_lock_irqsave(&gpio->lock, flags);
-       tmp = readb(clps711x_pdir(chip)) & ~(1 << offset);
-       writeb(tmp, clps711x_pdir(chip));
-       tmp = readb(clps711x_port(chip)) & ~(1 << offset);
-       if (value)
-               tmp |= 1 << offset;
-       writeb(tmp, clps711x_port(chip));
-       spin_unlock_irqrestore(&gpio->lock, flags);
-
-       return 0;
+       struct bgpio_chip *bgc = platform_get_drvdata(pdev);
+
+       return bgpio_remove(bgc);
 }
 
-static struct {
-       char    *name;
-       int     nr;
-       int     inv_dir;
-} clps711x_gpio_ports[] __initconst = {
-       { "PORTA", 8, 0, },
-       { "PORTB", 8, 0, },
-       { "PORTC", 8, 0, },
-       { "PORTD", 8, 1, },
-       { "PORTE", 3, 0, },
+static const struct of_device_id clps711x_gpio_ids[] = {
+       { .compatible = "cirrus,clps711x-gpio" },
+       { }
 };
+MODULE_DEVICE_TABLE(of, clps711x_gpio_ids);
+
+static struct platform_driver clps711x_gpio_driver = {
+       .driver = {
+               .name           = "clps711x-gpio",
+               .owner          = THIS_MODULE,
+               .of_match_table = of_match_ptr(clps711x_gpio_ids),
+       },
+       .probe  = clps711x_gpio_probe,
+       .remove = clps711x_gpio_remove,
+};
+module_platform_driver(clps711x_gpio_driver);
 
-static int __init gpio_clps711x_init(void)
-{
-       int i;
-       struct platform_device *pdev;
-       struct clps711x_gpio *gpio;
-
-       pdev = platform_device_alloc(CLPS711X_GPIO_NAME, 0);
-       if (!pdev) {
-               pr_err("Cannot create platform device: %s\n",
-                      CLPS711X_GPIO_NAME);
-               return -ENOMEM;
-       }
-
-       platform_device_add(pdev);
-
-       gpio = devm_kzalloc(&pdev->dev, sizeof(struct clps711x_gpio),
-                           GFP_KERNEL);
-       if (!gpio) {
-               dev_err(&pdev->dev, "GPIO allocating memory error\n");
-               platform_device_unregister(pdev);
-               return -ENOMEM;
-       }
-
-       platform_set_drvdata(pdev, gpio);
-
-       spin_lock_init(&gpio->lock);
-
-       for (i = 0; i < CLPS711X_GPIO_PORTS; i++) {
-               gpio->chip[i].owner             = THIS_MODULE;
-               gpio->chip[i].dev               = &pdev->dev;
-               gpio->chip[i].label             = clps711x_gpio_ports[i].name;
-               gpio->chip[i].base              = i * 8;
-               gpio->chip[i].ngpio             = clps711x_gpio_ports[i].nr;
-               gpio->chip[i].get               = gpio_clps711x_get;
-               gpio->chip[i].set               = gpio_clps711x_set;
-               if (!clps711x_gpio_ports[i].inv_dir) {
-                       gpio->chip[i].direction_input = gpio_clps711x_dir_in;
-                       gpio->chip[i].direction_output = gpio_clps711x_dir_out;
-               } else {
-                       gpio->chip[i].direction_input = gpio_clps711x_dir_in_inv;
-                       gpio->chip[i].direction_output = gpio_clps711x_dir_out_inv;
-               }
-               WARN_ON(gpiochip_add(&gpio->chip[i]));
-       }
-
-       dev_info(&pdev->dev, "GPIO driver initialized\n");
-
-       return 0;
-}
-arch_initcall(gpio_clps711x_init);
-
-MODULE_LICENSE("GPL v2");
+MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Alexander Shiyan <shc_work@mail.ru>");
 MODULE_DESCRIPTION("CLPS711X GPIO driver");
index b4ca450947b8f4b8f041c35ddfb9e21dde797487..d173d56dbb8c5790ecc77d0718a438947b1867d9 100644 (file)
@@ -49,6 +49,7 @@ struct gpio_rcar_priv {
 #define POSNEG 0x20
 #define EDGLEVEL 0x24
 #define FILONOFF 0x28
+#define BOTHEDGE 0x4c
 
 static inline u32 gpio_rcar_read(struct gpio_rcar_priv *p, int offs)
 {
@@ -91,7 +92,8 @@ static void gpio_rcar_irq_enable(struct irq_data *d)
 static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p,
                                                  unsigned int hwirq,
                                                  bool active_high_rising_edge,
-                                                 bool level_trigger)
+                                                 bool level_trigger,
+                                                 bool both)
 {
        unsigned long flags;
 
@@ -108,6 +110,10 @@ static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p,
        /* Configure edge or level trigger in EDGLEVEL */
        gpio_rcar_modify_bit(p, EDGLEVEL, hwirq, !level_trigger);
 
+       /* Select one edge or both edges in BOTHEDGE */
+       if (p->config.has_both_edge_trigger)
+               gpio_rcar_modify_bit(p, BOTHEDGE, hwirq, both);
+
        /* Select "Interrupt Input Mode" in IOINTSEL */
        gpio_rcar_modify_bit(p, IOINTSEL, hwirq, true);
 
@@ -127,16 +133,26 @@ static int gpio_rcar_irq_set_type(struct irq_data *d, unsigned int type)
 
        switch (type & IRQ_TYPE_SENSE_MASK) {
        case IRQ_TYPE_LEVEL_HIGH:
-               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true);
+               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true,
+                                                     false);
                break;
        case IRQ_TYPE_LEVEL_LOW:
-               gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true);
+               gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true,
+                                                     false);
                break;
        case IRQ_TYPE_EDGE_RISING:
-               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false);
+               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false,
+                                                     false);
                break;
        case IRQ_TYPE_EDGE_FALLING:
-               gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false);
+               gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false,
+                                                     false);
+               break;
+       case IRQ_TYPE_EDGE_BOTH:
+               if (!p->config.has_both_edge_trigger)
+                       return -EINVAL;
+               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false,
+                                                     true);
                break;
        default:
                return -EINVAL;
@@ -333,7 +349,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
        }
 
        if (devm_request_irq(&pdev->dev, irq->start,
-                            gpio_rcar_irq_handler, 0, name, p)) {
+                            gpio_rcar_irq_handler, IRQF_SHARED, name, p)) {
                dev_err(&pdev->dev, "failed to request IRQ\n");
                ret = -ENOENT;
                goto err1;
index 0a6f941133f66d3cce251403e606088db7fb326c..d1a6b204af00856748b67e7d42253ebb7c849e3f 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/slab.h>
+#include <linux/of_i2c.h>
 
 /* the name of this kernel module */
 #define NAME "stu300"
@@ -867,7 +868,6 @@ stu300_probe(struct platform_device *pdev)
        struct resource *res;
        int bus_nr;
        int ret = 0;
-       char clk_name[] = "I2C0";
 
        dev = devm_kzalloc(&pdev->dev, sizeof(struct stu300_dev), GFP_KERNEL);
        if (!dev) {
@@ -876,8 +876,7 @@ stu300_probe(struct platform_device *pdev)
        }
 
        bus_nr = pdev->id;
-       clk_name[3] += (char)bus_nr;
-       dev->clk = devm_clk_get(&pdev->dev, clk_name);
+       dev->clk = devm_clk_get(&pdev->dev, NULL);
        if (IS_ERR(dev->clk)) {
                dev_err(&pdev->dev, "could not retrieve i2c bus clock\n");
                return PTR_ERR(dev->clk);
@@ -923,6 +922,7 @@ stu300_probe(struct platform_device *pdev)
        adap->nr = bus_nr;
        adap->algo = &stu300_algo;
        adap->dev.parent = &pdev->dev;
+       adap->dev.of_node = pdev->dev.of_node;
        i2c_set_adapdata(adap, dev);
 
        /* i2c device drivers may be active on return from add_adapter() */
@@ -934,6 +934,10 @@ stu300_probe(struct platform_device *pdev)
        }
 
        platform_set_drvdata(pdev, dev);
+       dev_info(&pdev->dev, "ST DDC I2C @ %p, irq %d\n",
+                dev->virtbase, dev->irq);
+       of_i2c_register_devices(adap);
+
        return 0;
 }
 
@@ -978,11 +982,17 @@ stu300_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct of_device_id stu300_dt_match[] = {
+       { .compatible = "st,ddci2c" },
+       {},
+};
+
 static struct platform_driver stu300_i2c_driver = {
        .driver = {
                .name   = NAME,
                .owner  = THIS_MODULE,
                .pm     = STU300_I2C_PM,
+               .of_match_table = stu300_dt_match,
        },
        .remove         = __exit_p(stu300_remove),
 
index 0494d2769fd77ef71110e63dc19a9ead0fece110..bce695d42f10db7b6bbe4105f899840c5e76e983 100644 (file)
@@ -159,7 +159,7 @@ config VIDEO_MEM2MEM_DEINTERLACE
 
 config VIDEO_SAMSUNG_S5P_G2D
        tristate "Samsung S5P and EXYNOS4 G2D 2d graphics accelerator driver"
-       depends on VIDEO_DEV && VIDEO_V4L2 && PLAT_S5P
+       depends on VIDEO_DEV && VIDEO_V4L2 && (PLAT_S5P || ARCH_EXYNOS)
        select VIDEOBUF2_DMA_CONTIG
        select V4L2_MEM2MEM_DEV
        default n
@@ -169,7 +169,7 @@ config VIDEO_SAMSUNG_S5P_G2D
 
 config VIDEO_SAMSUNG_S5P_JPEG
        tristate "Samsung S5P/Exynos4 JPEG codec driver"
-       depends on VIDEO_DEV && VIDEO_V4L2 && PLAT_S5P
+       depends on VIDEO_DEV && VIDEO_V4L2 && (PLAT_S5P || ARCH_EXYNOS)
        select VIDEOBUF2_DMA_CONTIG
        select V4L2_MEM2MEM_DEV
        ---help---
@@ -177,7 +177,7 @@ config VIDEO_SAMSUNG_S5P_JPEG
 
 config VIDEO_SAMSUNG_S5P_MFC
        tristate "Samsung S5P MFC Video Codec"
-       depends on VIDEO_DEV && VIDEO_V4L2 && PLAT_S5P
+       depends on VIDEO_DEV && VIDEO_V4L2 && (PLAT_S5P || ARCH_EXYNOS)
        select VIDEOBUF2_DMA_CONTIG
        default n
        help
index 6ff99b5849f9b78a3a2548a25c64d12b4069b980..004fd0b4e9df9887bcd4068d57184c48c9fdf757 100644 (file)
@@ -1,7 +1,8 @@
 
 config VIDEO_SAMSUNG_EXYNOS4_IS
        bool "Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver"
-       depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && PLAT_S5P && PM_RUNTIME
+       depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && PM_RUNTIME
+       depends on (PLAT_S5P || ARCH_EXYNOS)
        help
          Say Y here to enable camera host interface devices for
          Samsung S5P and EXYNOS SoC series.
index 7b659bd09bfdb1dce574ee0d97e67549cd0c8b50..369a4c191e18a8e80e63edcb57cb790df28394a3 100644 (file)
@@ -8,7 +8,7 @@
 
 config VIDEO_SAMSUNG_S5P_TV
        bool "Samsung TV driver for S5P platform"
-       depends on PLAT_S5P && PM_RUNTIME
+       depends on (PLAT_S5P || ARCH_EXYNOS) && PM_RUNTIME
        default n
        ---help---
          Say Y here to enable selecting the TV output devices for
index 962a6e17a01a1f75a3e783a94f4eb0d126273b60..1a31512369f9a4e9ef0b8b7a36853301d0c80a09 100644 (file)
@@ -159,6 +159,9 @@ static int syscon_probe(struct platform_device *pdev)
 
 static const struct platform_device_id syscon_ids[] = {
        { "syscon", },
+#ifdef CONFIG_ARCH_CLPS711X
+       { "clps711x-syscon", },
+#endif
        { }
 };
 
index 3946a0eb3a0345995b9f292816fdf53825c6d650..5dfb70c669dcb47f4d44888092e26a2c3d1b55de 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 
+#include <linux/platform_data/edma.h>
 #include <linux/platform_data/mmc-davinci.h>
 
 /*
index bed9d58d5741246f58bafe178851e8faf42744e2..8b27ca054c59ba1d4e2ee5bd20cfd600dce79afa 100644 (file)
@@ -297,13 +297,6 @@ config MTD_IXP4XX
          IXDP425 and Coyote. If you have an IXP4xx based board and
          would like to use the flash chips on it, say 'Y'.
 
-config MTD_AUTCPU12
-       bool "NV-RAM mapping AUTCPU12 board"
-       depends on ARCH_AUTCPU12
-       help
-         This enables access to the NV-RAM on autronix autcpu12 board.
-         If you have such a board, say 'Y'.
-
 config MTD_IMPA7
        tristate "JEDEC Flash device mapped on impA7"
        depends on ARM && MTD_JEDECPROBE
index 395a12444048e6f2c7fbaa64d028be488551e187..9fdbd4ba64419f45576e0833470680f0d4194003 100644 (file)
@@ -32,7 +32,6 @@ obj-$(CONFIG_MTD_VMAX)                += vmax301.o
 obj-$(CONFIG_MTD_SCx200_DOCFLASH)+= scx200_docflash.o
 obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o
 obj-$(CONFIG_MTD_PCI)          += pci.o
-obj-$(CONFIG_MTD_AUTCPU12)     += autcpu12-nvram.o
 obj-$(CONFIG_MTD_IMPA7)                += impa7.o
 obj-$(CONFIG_MTD_UCLINUX)      += uclinux.o
 obj-$(CONFIG_MTD_NETtel)       += nettel.o
diff --git a/drivers/mtd/maps/autcpu12-nvram.c b/drivers/mtd/maps/autcpu12-nvram.c
deleted file mode 100644 (file)
index c3525d2..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * NV-RAM memory access on autcpu12
- * (C) 2002 Thomas Gleixner (gleixner@autronix.de)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#include <linux/err.h>
-#include <linux/sizes.h>
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/map.h>
-
-struct autcpu12_nvram_priv {
-       struct mtd_info *mtd;
-       struct map_info map;
-};
-
-static int autcpu12_nvram_probe(struct platform_device *pdev)
-{
-       map_word tmp, save0, save1;
-       struct resource *res;
-       struct autcpu12_nvram_priv *priv;
-
-       priv = devm_kzalloc(&pdev->dev,
-                           sizeof(struct autcpu12_nvram_priv), GFP_KERNEL);
-       if (!priv)
-               return -ENOMEM;
-
-       platform_set_drvdata(pdev, priv);
-
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res) {
-               dev_err(&pdev->dev, "failed to get memory resource\n");
-               return -ENOENT;
-       }
-
-       priv->map.bankwidth     = 4;
-       priv->map.phys          = res->start;
-       priv->map.size          = resource_size(res);
-       priv->map.virt = devm_ioremap_resource(&pdev->dev, res);
-       strcpy((char *)priv->map.name, res->name);
-       if (IS_ERR(priv->map.virt))
-               return PTR_ERR(priv->map.virt);
-
-       simple_map_init(&priv->map);
-
-       /*
-        * Check for 32K/128K
-        * read ofs 0
-        * read ofs 0x10000
-        * Write complement to ofs 0x100000
-        * Read and check result on ofs 0x0
-        * Restore contents
-        */
-       save0 = map_read(&priv->map, 0);
-       save1 = map_read(&priv->map, 0x10000);
-       tmp.x[0] = ~save0.x[0];
-       map_write(&priv->map, tmp, 0x10000);
-       tmp = map_read(&priv->map, 0);
-       /* if we find this pattern on 0x0, we have 32K size */
-       if (!map_word_equal(&priv->map, tmp, save0)) {
-               map_write(&priv->map, save0, 0x0);
-               priv->map.size = SZ_32K;
-       } else
-               map_write(&priv->map, save1, 0x10000);
-
-       priv->mtd = do_map_probe("map_ram", &priv->map);
-       if (!priv->mtd) {
-               dev_err(&pdev->dev, "probing failed\n");
-               return -ENXIO;
-       }
-
-       priv->mtd->owner        = THIS_MODULE;
-       priv->mtd->erasesize    = 16;
-       priv->mtd->dev.parent   = &pdev->dev;
-       if (!mtd_device_register(priv->mtd, NULL, 0)) {
-               dev_info(&pdev->dev,
-                        "NV-RAM device size %ldKiB registered on AUTCPU12\n",
-                        priv->map.size / SZ_1K);
-               return 0;
-       }
-
-       map_destroy(priv->mtd);
-       dev_err(&pdev->dev, "NV-RAM device addition failed\n");
-       return -ENOMEM;
-}
-
-static int autcpu12_nvram_remove(struct platform_device *pdev)
-{
-       struct autcpu12_nvram_priv *priv = platform_get_drvdata(pdev);
-
-       mtd_device_unregister(priv->mtd);
-       map_destroy(priv->mtd);
-
-       return 0;
-}
-
-static struct platform_driver autcpu12_nvram_driver = {
-       .driver         = {
-               .name   = "autcpu12_nvram",
-               .owner  = THIS_MODULE,
-       },
-       .probe          = autcpu12_nvram_probe,
-       .remove         = autcpu12_nvram_remove,
-};
-module_platform_driver(autcpu12_nvram_driver);
-
-MODULE_AUTHOR("Thomas Gleixner");
-MODULE_DESCRIPTION("autcpu12 NVRAM map driver");
-MODULE_LICENSE("GPL");
index 77497f140d68b5b356b9b23c918d19b21d483934..81944fb731165c9a800c92ae1952f281778a73b1 100644 (file)
@@ -117,3 +117,5 @@ config PCI_IOAPIC
 config PCI_LABEL
        def_bool y if (DMI || ACPI)
        select NLS
+
+source "drivers/pci/host/Kconfig"
index 0c3efcffa83b4c7cfdfb591402cdf0165935477d..6ebf5bf8e7a7d149fa8c091ed4071ba1b7e6af69 100644 (file)
@@ -67,3 +67,6 @@ obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o
 obj-$(CONFIG_OF) += of.o
 
 ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
+
+# PCI host controller drivers
+obj-y += host/
diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig
new file mode 100644 (file)
index 0000000..1184ff6
--- /dev/null
@@ -0,0 +1,17 @@
+menu "PCI host controller drivers"
+       depends on PCI
+
+config PCI_MVEBU
+       bool "Marvell EBU PCIe controller"
+       depends on ARCH_MVEBU || ARCH_KIRKWOOD
+
+config PCIE_DW
+       bool
+
+config PCI_EXYNOS
+       bool "Samsung Exynos PCIe controller"
+       depends on SOC_EXYNOS5440
+       select PCIEPORTBUS
+       select PCIE_DW
+
+endmenu
diff --git a/drivers/pci/host/Makefile b/drivers/pci/host/Makefile
new file mode 100644 (file)
index 0000000..086d850
--- /dev/null
@@ -0,0 +1,2 @@
+obj-$(CONFIG_PCI_MVEBU) += pci-mvebu.o
+obj-$(CONFIG_PCIE_DW) += pcie-designware.o
diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
new file mode 100644 (file)
index 0000000..13a633b
--- /dev/null
@@ -0,0 +1,914 @@
+/*
+ * PCIe driver for Marvell Armada 370 and Armada XP SoCs
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/mbus.h>
+#include <linux/slab.h>
+#include <linux/platform_device.h>
+#include <linux/of_address.h>
+#include <linux/of_pci.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+
+/*
+ * PCIe unit register offsets.
+ */
+#define PCIE_DEV_ID_OFF                0x0000
+#define PCIE_CMD_OFF           0x0004
+#define PCIE_DEV_REV_OFF       0x0008
+#define PCIE_BAR_LO_OFF(n)     (0x0010 + ((n) << 3))
+#define PCIE_BAR_HI_OFF(n)     (0x0014 + ((n) << 3))
+#define PCIE_HEADER_LOG_4_OFF  0x0128
+#define PCIE_BAR_CTRL_OFF(n)   (0x1804 + (((n) - 1) * 4))
+#define PCIE_WIN04_CTRL_OFF(n) (0x1820 + ((n) << 4))
+#define PCIE_WIN04_BASE_OFF(n) (0x1824 + ((n) << 4))
+#define PCIE_WIN04_REMAP_OFF(n)        (0x182c + ((n) << 4))
+#define PCIE_WIN5_CTRL_OFF     0x1880
+#define PCIE_WIN5_BASE_OFF     0x1884
+#define PCIE_WIN5_REMAP_OFF    0x188c
+#define PCIE_CONF_ADDR_OFF     0x18f8
+#define  PCIE_CONF_ADDR_EN             0x80000000
+#define  PCIE_CONF_REG(r)              ((((r) & 0xf00) << 16) | ((r) & 0xfc))
+#define  PCIE_CONF_BUS(b)              (((b) & 0xff) << 16)
+#define  PCIE_CONF_DEV(d)              (((d) & 0x1f) << 11)
+#define  PCIE_CONF_FUNC(f)             (((f) & 0x7) << 8)
+#define  PCIE_CONF_ADDR(bus, devfn, where) \
+       (PCIE_CONF_BUS(bus) | PCIE_CONF_DEV(PCI_SLOT(devfn))    | \
+        PCIE_CONF_FUNC(PCI_FUNC(devfn)) | PCIE_CONF_REG(where) | \
+        PCIE_CONF_ADDR_EN)
+#define PCIE_CONF_DATA_OFF     0x18fc
+#define PCIE_MASK_OFF          0x1910
+#define  PCIE_MASK_ENABLE_INTS          0x0f000000
+#define PCIE_CTRL_OFF          0x1a00
+#define  PCIE_CTRL_X1_MODE             0x0001
+#define PCIE_STAT_OFF          0x1a04
+#define  PCIE_STAT_BUS                  0xff00
+#define  PCIE_STAT_DEV                  0x1f0000
+#define  PCIE_STAT_LINK_DOWN           BIT(0)
+#define PCIE_DEBUG_CTRL         0x1a60
+#define  PCIE_DEBUG_SOFT_RESET         BIT(20)
+
+/*
+ * This product ID is registered by Marvell, and used when the Marvell
+ * SoC is not the root complex, but an endpoint on the PCIe bus. It is
+ * therefore safe to re-use this PCI ID for our emulated PCI-to-PCI
+ * bridge.
+ */
+#define MARVELL_EMULATED_PCI_PCI_BRIDGE_ID 0x7846
+
+/* PCI configuration space of a PCI-to-PCI bridge */
+struct mvebu_sw_pci_bridge {
+       u16 vendor;
+       u16 device;
+       u16 command;
+       u16 class;
+       u8 interface;
+       u8 revision;
+       u8 bist;
+       u8 header_type;
+       u8 latency_timer;
+       u8 cache_line_size;
+       u32 bar[2];
+       u8 primary_bus;
+       u8 secondary_bus;
+       u8 subordinate_bus;
+       u8 secondary_latency_timer;
+       u8 iobase;
+       u8 iolimit;
+       u16 secondary_status;
+       u16 membase;
+       u16 memlimit;
+       u16 prefmembase;
+       u16 prefmemlimit;
+       u32 prefbaseupper;
+       u32 preflimitupper;
+       u16 iobaseupper;
+       u16 iolimitupper;
+       u8 cappointer;
+       u8 reserved1;
+       u16 reserved2;
+       u32 romaddr;
+       u8 intline;
+       u8 intpin;
+       u16 bridgectrl;
+};
+
+struct mvebu_pcie_port;
+
+/* Structure representing all PCIe interfaces */
+struct mvebu_pcie {
+       struct platform_device *pdev;
+       struct mvebu_pcie_port *ports;
+       struct resource io;
+       struct resource realio;
+       struct resource mem;
+       struct resource busn;
+       int nports;
+};
+
+/* Structure representing one PCIe interface */
+struct mvebu_pcie_port {
+       char *name;
+       void __iomem *base;
+       spinlock_t conf_lock;
+       int haslink;
+       u32 port;
+       u32 lane;
+       int devfn;
+       struct clk *clk;
+       struct mvebu_sw_pci_bridge bridge;
+       struct device_node *dn;
+       struct mvebu_pcie *pcie;
+       phys_addr_t memwin_base;
+       size_t memwin_size;
+       phys_addr_t iowin_base;
+       size_t iowin_size;
+};
+
+static bool mvebu_pcie_link_up(struct mvebu_pcie_port *port)
+{
+       return !(readl(port->base + PCIE_STAT_OFF) & PCIE_STAT_LINK_DOWN);
+}
+
+static void mvebu_pcie_set_local_bus_nr(struct mvebu_pcie_port *port, int nr)
+{
+       u32 stat;
+
+       stat = readl(port->base + PCIE_STAT_OFF);
+       stat &= ~PCIE_STAT_BUS;
+       stat |= nr << 8;
+       writel(stat, port->base + PCIE_STAT_OFF);
+}
+
+static void mvebu_pcie_set_local_dev_nr(struct mvebu_pcie_port *port, int nr)
+{
+       u32 stat;
+
+       stat = readl(port->base + PCIE_STAT_OFF);
+       stat &= ~PCIE_STAT_DEV;
+       stat |= nr << 16;
+       writel(stat, port->base + PCIE_STAT_OFF);
+}
+
+/*
+ * Setup PCIE BARs and Address Decode Wins:
+ * BAR[0,2] -> disabled, BAR[1] -> covers all DRAM banks
+ * WIN[0-3] -> DRAM bank[0-3]
+ */
+static void __init mvebu_pcie_setup_wins(struct mvebu_pcie_port *port)
+{
+       const struct mbus_dram_target_info *dram;
+       u32 size;
+       int i;
+
+       dram = mv_mbus_dram_info();
+
+       /* First, disable and clear BARs and windows. */
+       for (i = 1; i < 3; i++) {
+               writel(0, port->base + PCIE_BAR_CTRL_OFF(i));
+               writel(0, port->base + PCIE_BAR_LO_OFF(i));
+               writel(0, port->base + PCIE_BAR_HI_OFF(i));
+       }
+
+       for (i = 0; i < 5; i++) {
+               writel(0, port->base + PCIE_WIN04_CTRL_OFF(i));
+               writel(0, port->base + PCIE_WIN04_BASE_OFF(i));
+               writel(0, port->base + PCIE_WIN04_REMAP_OFF(i));
+       }
+
+       writel(0, port->base + PCIE_WIN5_CTRL_OFF);
+       writel(0, port->base + PCIE_WIN5_BASE_OFF);
+       writel(0, port->base + PCIE_WIN5_REMAP_OFF);
+
+       /* Setup windows for DDR banks.  Count total DDR size on the fly. */
+       size = 0;
+       for (i = 0; i < dram->num_cs; i++) {
+               const struct mbus_dram_window *cs = dram->cs + i;
+
+               writel(cs->base & 0xffff0000,
+                      port->base + PCIE_WIN04_BASE_OFF(i));
+               writel(0, port->base + PCIE_WIN04_REMAP_OFF(i));
+               writel(((cs->size - 1) & 0xffff0000) |
+                       (cs->mbus_attr << 8) |
+                       (dram->mbus_dram_target_id << 4) | 1,
+                      port->base + PCIE_WIN04_CTRL_OFF(i));
+
+               size += cs->size;
+       }
+
+       /* Round up 'size' to the nearest power of two. */
+       if ((size & (size - 1)) != 0)
+               size = 1 << fls(size);
+
+       /* Setup BAR[1] to all DRAM banks. */
+       writel(dram->cs[0].base, port->base + PCIE_BAR_LO_OFF(1));
+       writel(0, port->base + PCIE_BAR_HI_OFF(1));
+       writel(((size - 1) & 0xffff0000) | 1,
+              port->base + PCIE_BAR_CTRL_OFF(1));
+}
+
+static void __init mvebu_pcie_setup_hw(struct mvebu_pcie_port *port)
+{
+       u16 cmd;
+       u32 mask;
+
+       /* Point PCIe unit MBUS decode windows to DRAM space. */
+       mvebu_pcie_setup_wins(port);
+
+       /* Master + slave enable. */
+       cmd = readw(port->base + PCIE_CMD_OFF);
+       cmd |= PCI_COMMAND_IO;
+       cmd |= PCI_COMMAND_MEMORY;
+       cmd |= PCI_COMMAND_MASTER;
+       writew(cmd, port->base + PCIE_CMD_OFF);
+
+       /* Enable interrupt lines A-D. */
+       mask = readl(port->base + PCIE_MASK_OFF);
+       mask |= PCIE_MASK_ENABLE_INTS;
+       writel(mask, port->base + PCIE_MASK_OFF);
+}
+
+static int mvebu_pcie_hw_rd_conf(struct mvebu_pcie_port *port,
+                                struct pci_bus *bus,
+                                u32 devfn, int where, int size, u32 *val)
+{
+       writel(PCIE_CONF_ADDR(bus->number, devfn, where),
+              port->base + PCIE_CONF_ADDR_OFF);
+
+       *val = readl(port->base + PCIE_CONF_DATA_OFF);
+
+       if (size == 1)
+               *val = (*val >> (8 * (where & 3))) & 0xff;
+       else if (size == 2)
+               *val = (*val >> (8 * (where & 3))) & 0xffff;
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+static int mvebu_pcie_hw_wr_conf(struct mvebu_pcie_port *port,
+                                struct pci_bus *bus,
+                                u32 devfn, int where, int size, u32 val)
+{
+       int ret = PCIBIOS_SUCCESSFUL;
+
+       writel(PCIE_CONF_ADDR(bus->number, devfn, where),
+              port->base + PCIE_CONF_ADDR_OFF);
+
+       if (size == 4)
+               writel(val, port->base + PCIE_CONF_DATA_OFF);
+       else if (size == 2)
+               writew(val, port->base + PCIE_CONF_DATA_OFF + (where & 3));
+       else if (size == 1)
+               writeb(val, port->base + PCIE_CONF_DATA_OFF + (where & 3));
+       else
+               ret = PCIBIOS_BAD_REGISTER_NUMBER;
+
+       return ret;
+}
+
+static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port)
+{
+       phys_addr_t iobase;
+
+       /* Are the new iobase/iolimit values invalid? */
+       if (port->bridge.iolimit < port->bridge.iobase ||
+           port->bridge.iolimitupper < port->bridge.iobaseupper) {
+
+               /* If a window was configured, remove it */
+               if (port->iowin_base) {
+                       mvebu_mbus_del_window(port->iowin_base,
+                                             port->iowin_size);
+                       port->iowin_base = 0;
+                       port->iowin_size = 0;
+               }
+
+               return;
+       }
+
+       /*
+        * We read the PCI-to-PCI bridge emulated registers, and
+        * calculate the base address and size of the address decoding
+        * window to setup, according to the PCI-to-PCI bridge
+        * specifications. iobase is the bus address, port->iowin_base
+        * is the CPU address.
+        */
+       iobase = ((port->bridge.iobase & 0xF0) << 8) |
+               (port->bridge.iobaseupper << 16);
+       port->iowin_base = port->pcie->io.start + iobase;
+       port->iowin_size = ((0xFFF | ((port->bridge.iolimit & 0xF0) << 8) |
+                           (port->bridge.iolimitupper << 16)) -
+                           iobase);
+
+       mvebu_mbus_add_window_remap_flags(port->name, port->iowin_base,
+                                         port->iowin_size,
+                                         iobase,
+                                         MVEBU_MBUS_PCI_IO);
+
+       pci_ioremap_io(iobase, port->iowin_base);
+}
+
+static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port)
+{
+       /* Are the new membase/memlimit values invalid? */
+       if (port->bridge.memlimit < port->bridge.membase) {
+
+               /* If a window was configured, remove it */
+               if (port->memwin_base) {
+                       mvebu_mbus_del_window(port->memwin_base,
+                                             port->memwin_size);
+                       port->memwin_base = 0;
+                       port->memwin_size = 0;
+               }
+
+               return;
+       }
+
+       /*
+        * We read the PCI-to-PCI bridge emulated registers, and
+        * calculate the base address and size of the address decoding
+        * window to setup, according to the PCI-to-PCI bridge
+        * specifications.
+        */
+       port->memwin_base  = ((port->bridge.membase & 0xFFF0) << 16);
+       port->memwin_size  =
+               (((port->bridge.memlimit & 0xFFF0) << 16) | 0xFFFFF) -
+               port->memwin_base;
+
+       mvebu_mbus_add_window_remap_flags(port->name, port->memwin_base,
+                                         port->memwin_size,
+                                         MVEBU_MBUS_NO_REMAP,
+                                         MVEBU_MBUS_PCI_MEM);
+}
+
+/*
+ * Initialize the configuration space of the PCI-to-PCI bridge
+ * associated with the given PCIe interface.
+ */
+static void mvebu_sw_pci_bridge_init(struct mvebu_pcie_port *port)
+{
+       struct mvebu_sw_pci_bridge *bridge = &port->bridge;
+
+       memset(bridge, 0, sizeof(struct mvebu_sw_pci_bridge));
+
+       bridge->class = PCI_CLASS_BRIDGE_PCI;
+       bridge->vendor = PCI_VENDOR_ID_MARVELL;
+       bridge->device = MARVELL_EMULATED_PCI_PCI_BRIDGE_ID;
+       bridge->header_type = PCI_HEADER_TYPE_BRIDGE;
+       bridge->cache_line_size = 0x10;
+
+       /* We support 32 bits I/O addressing */
+       bridge->iobase = PCI_IO_RANGE_TYPE_32;
+       bridge->iolimit = PCI_IO_RANGE_TYPE_32;
+}
+
+/*
+ * Read the configuration space of the PCI-to-PCI bridge associated to
+ * the given PCIe interface.
+ */
+static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port,
+                                 unsigned int where, int size, u32 *value)
+{
+       struct mvebu_sw_pci_bridge *bridge = &port->bridge;
+
+       switch (where & ~3) {
+       case PCI_VENDOR_ID:
+               *value = bridge->device << 16 | bridge->vendor;
+               break;
+
+       case PCI_COMMAND:
+               *value = bridge->command;
+               break;
+
+       case PCI_CLASS_REVISION:
+               *value = bridge->class << 16 | bridge->interface << 8 |
+                        bridge->revision;
+               break;
+
+       case PCI_CACHE_LINE_SIZE:
+               *value = bridge->bist << 24 | bridge->header_type << 16 |
+                        bridge->latency_timer << 8 | bridge->cache_line_size;
+               break;
+
+       case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1:
+               *value = bridge->bar[((where & ~3) - PCI_BASE_ADDRESS_0) / 4];
+               break;
+
+       case PCI_PRIMARY_BUS:
+               *value = (bridge->secondary_latency_timer << 24 |
+                         bridge->subordinate_bus         << 16 |
+                         bridge->secondary_bus           <<  8 |
+                         bridge->primary_bus);
+               break;
+
+       case PCI_IO_BASE:
+               *value = (bridge->secondary_status << 16 |
+                         bridge->iolimit          <<  8 |
+                         bridge->iobase);
+               break;
+
+       case PCI_MEMORY_BASE:
+               *value = (bridge->memlimit << 16 | bridge->membase);
+               break;
+
+       case PCI_PREF_MEMORY_BASE:
+               *value = (bridge->prefmemlimit << 16 | bridge->prefmembase);
+               break;
+
+       case PCI_PREF_BASE_UPPER32:
+               *value = bridge->prefbaseupper;
+               break;
+
+       case PCI_PREF_LIMIT_UPPER32:
+               *value = bridge->preflimitupper;
+               break;
+
+       case PCI_IO_BASE_UPPER16:
+               *value = (bridge->iolimitupper << 16 | bridge->iobaseupper);
+               break;
+
+       case PCI_ROM_ADDRESS1:
+               *value = 0;
+               break;
+
+       default:
+               *value = 0xffffffff;
+               return PCIBIOS_BAD_REGISTER_NUMBER;
+       }
+
+       if (size == 2)
+               *value = (*value >> (8 * (where & 3))) & 0xffff;
+       else if (size == 1)
+               *value = (*value >> (8 * (where & 3))) & 0xff;
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+/* Write to the PCI-to-PCI bridge configuration space */
+static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port,
+                                    unsigned int where, int size, u32 value)
+{
+       struct mvebu_sw_pci_bridge *bridge = &port->bridge;
+       u32 mask, reg;
+       int err;
+
+       if (size == 4)
+               mask = 0x0;
+       else if (size == 2)
+               mask = ~(0xffff << ((where & 3) * 8));
+       else if (size == 1)
+               mask = ~(0xff << ((where & 3) * 8));
+       else
+               return PCIBIOS_BAD_REGISTER_NUMBER;
+
+       err = mvebu_sw_pci_bridge_read(port, where & ~3, 4, &reg);
+       if (err)
+               return err;
+
+       value = (reg & mask) | value << ((where & 3) * 8);
+
+       switch (where & ~3) {
+       case PCI_COMMAND:
+               bridge->command = value & 0xffff;
+               break;
+
+       case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1:
+               bridge->bar[((where & ~3) - PCI_BASE_ADDRESS_0) / 4] = value;
+               break;
+
+       case PCI_IO_BASE:
+               /*
+                * We also keep bit 1 set, it is a read-only bit that
+                * indicates we support 32 bits addressing for the
+                * I/O
+                */
+               bridge->iobase = (value & 0xff) | PCI_IO_RANGE_TYPE_32;
+               bridge->iolimit = ((value >> 8) & 0xff) | PCI_IO_RANGE_TYPE_32;
+               bridge->secondary_status = value >> 16;
+               mvebu_pcie_handle_iobase_change(port);
+               break;
+
+       case PCI_MEMORY_BASE:
+               bridge->membase = value & 0xffff;
+               bridge->memlimit = value >> 16;
+               mvebu_pcie_handle_membase_change(port);
+               break;
+
+       case PCI_PREF_MEMORY_BASE:
+               bridge->prefmembase = value & 0xffff;
+               bridge->prefmemlimit = value >> 16;
+               break;
+
+       case PCI_PREF_BASE_UPPER32:
+               bridge->prefbaseupper = value;
+               break;
+
+       case PCI_PREF_LIMIT_UPPER32:
+               bridge->preflimitupper = value;
+               break;
+
+       case PCI_IO_BASE_UPPER16:
+               bridge->iobaseupper = value & 0xffff;
+               bridge->iolimitupper = value >> 16;
+               mvebu_pcie_handle_iobase_change(port);
+               break;
+
+       case PCI_PRIMARY_BUS:
+               bridge->primary_bus             = value & 0xff;
+               bridge->secondary_bus           = (value >> 8) & 0xff;
+               bridge->subordinate_bus         = (value >> 16) & 0xff;
+               bridge->secondary_latency_timer = (value >> 24) & 0xff;
+               mvebu_pcie_set_local_bus_nr(port, bridge->secondary_bus);
+               break;
+
+       default:
+               break;
+       }
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+static inline struct mvebu_pcie *sys_to_pcie(struct pci_sys_data *sys)
+{
+       return sys->private_data;
+}
+
+static struct mvebu_pcie_port *
+mvebu_pcie_find_port(struct mvebu_pcie *pcie, struct pci_bus *bus,
+                    int devfn)
+{
+       int i;
+
+       for (i = 0; i < pcie->nports; i++) {
+               struct mvebu_pcie_port *port = &pcie->ports[i];
+               if (bus->number == 0 && port->devfn == devfn)
+                       return port;
+               if (bus->number != 0 &&
+                   bus->number >= port->bridge.secondary_bus &&
+                   bus->number <= port->bridge.subordinate_bus)
+                       return port;
+       }
+
+       return NULL;
+}
+
+/* PCI configuration space write function */
+static int mvebu_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
+                             int where, int size, u32 val)
+{
+       struct mvebu_pcie *pcie = sys_to_pcie(bus->sysdata);
+       struct mvebu_pcie_port *port;
+       unsigned long flags;
+       int ret;
+
+       port = mvebu_pcie_find_port(pcie, bus, devfn);
+       if (!port)
+               return PCIBIOS_DEVICE_NOT_FOUND;
+
+       /* Access the emulated PCI-to-PCI bridge */
+       if (bus->number == 0)
+               return mvebu_sw_pci_bridge_write(port, where, size, val);
+
+       if (!port->haslink)
+               return PCIBIOS_DEVICE_NOT_FOUND;
+
+       /*
+        * On the secondary bus, we don't want to expose any other
+        * device than the device physically connected in the PCIe
+        * slot, visible in slot 0. In slot 1, there's a special
+        * Marvell device that only makes sense when the Armada is
+        * used as a PCIe endpoint.
+        */
+       if (bus->number == port->bridge.secondary_bus &&
+           PCI_SLOT(devfn) != 0)
+               return PCIBIOS_DEVICE_NOT_FOUND;
+
+       /* Access the real PCIe interface */
+       spin_lock_irqsave(&port->conf_lock, flags);
+       ret = mvebu_pcie_hw_wr_conf(port, bus, devfn,
+                                   where, size, val);
+       spin_unlock_irqrestore(&port->conf_lock, flags);
+
+       return ret;
+}
+
+/* PCI configuration space read function */
+static int mvebu_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
+                             int size, u32 *val)
+{
+       struct mvebu_pcie *pcie = sys_to_pcie(bus->sysdata);
+       struct mvebu_pcie_port *port;
+       unsigned long flags;
+       int ret;
+
+       port = mvebu_pcie_find_port(pcie, bus, devfn);
+       if (!port) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       /* Access the emulated PCI-to-PCI bridge */
+       if (bus->number == 0)
+               return mvebu_sw_pci_bridge_read(port, where, size, val);
+
+       if (!port->haslink) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       /*
+        * On the secondary bus, we don't want to expose any other
+        * device than the device physically connected in the PCIe
+        * slot, visible in slot 0. In slot 1, there's a special
+        * Marvell device that only makes sense when the Armada is
+        * used as a PCIe endpoint.
+        */
+       if (bus->number == port->bridge.secondary_bus &&
+           PCI_SLOT(devfn) != 0) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       /* Access the real PCIe interface */
+       spin_lock_irqsave(&port->conf_lock, flags);
+       ret = mvebu_pcie_hw_rd_conf(port, bus, devfn,
+                                   where, size, val);
+       spin_unlock_irqrestore(&port->conf_lock, flags);
+
+       return ret;
+}
+
+static struct pci_ops mvebu_pcie_ops = {
+       .read = mvebu_pcie_rd_conf,
+       .write = mvebu_pcie_wr_conf,
+};
+
+static int __init mvebu_pcie_setup(int nr, struct pci_sys_data *sys)
+{
+       struct mvebu_pcie *pcie = sys_to_pcie(sys);
+       int i;
+
+       pci_add_resource_offset(&sys->resources, &pcie->realio, sys->io_offset);
+       pci_add_resource_offset(&sys->resources, &pcie->mem, sys->mem_offset);
+       pci_add_resource(&sys->resources, &pcie->busn);
+
+       for (i = 0; i < pcie->nports; i++) {
+               struct mvebu_pcie_port *port = &pcie->ports[i];
+               mvebu_pcie_setup_hw(port);
+       }
+
+       return 1;
+}
+
+static int __init mvebu_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+       struct of_irq oirq;
+       int ret;
+
+       ret = of_irq_map_pci(dev, &oirq);
+       if (ret)
+               return ret;
+
+       return irq_create_of_mapping(oirq.controller, oirq.specifier,
+                                    oirq.size);
+}
+
+static struct pci_bus *mvebu_pcie_scan_bus(int nr, struct pci_sys_data *sys)
+{
+       struct mvebu_pcie *pcie = sys_to_pcie(sys);
+       struct pci_bus *bus;
+
+       bus = pci_create_root_bus(&pcie->pdev->dev, sys->busnr,
+                                 &mvebu_pcie_ops, sys, &sys->resources);
+       if (!bus)
+               return NULL;
+
+       pci_scan_child_bus(bus);
+
+       return bus;
+}
+
+resource_size_t mvebu_pcie_align_resource(struct pci_dev *dev,
+                                         const struct resource *res,
+                                         resource_size_t start,
+                                         resource_size_t size,
+                                         resource_size_t align)
+{
+       if (dev->bus->number != 0)
+               return start;
+
+       /*
+        * On the PCI-to-PCI bridge side, the I/O windows must have at
+        * least a 64 KB size and be aligned on their size, and the
+        * memory windows must have at least a 1 MB size and be
+        * aligned on their size
+        */
+       if (res->flags & IORESOURCE_IO)
+               return round_up(start, max((resource_size_t)SZ_64K, size));
+       else if (res->flags & IORESOURCE_MEM)
+               return round_up(start, max((resource_size_t)SZ_1M, size));
+       else
+               return start;
+}
+
+static void __init mvebu_pcie_enable(struct mvebu_pcie *pcie)
+{
+       struct hw_pci hw;
+
+       memset(&hw, 0, sizeof(hw));
+
+       hw.nr_controllers = 1;
+       hw.private_data   = (void **)&pcie;
+       hw.setup          = mvebu_pcie_setup;
+       hw.scan           = mvebu_pcie_scan_bus;
+       hw.map_irq        = mvebu_pcie_map_irq;
+       hw.ops            = &mvebu_pcie_ops;
+       hw.align_resource = mvebu_pcie_align_resource;
+
+       pci_common_init(&hw);
+}
+
+/*
+ * Looks up the list of register addresses encoded into the reg =
+ * <...> property for one that matches the given port/lane. Once
+ * found, maps it.
+ */
+static void __iomem * __init
+mvebu_pcie_map_registers(struct platform_device *pdev,
+                        struct device_node *np,
+                        struct mvebu_pcie_port *port)
+{
+       struct resource regs;
+       int ret = 0;
+
+       ret = of_address_to_resource(np, 0, &regs);
+       if (ret)
+               return NULL;
+
+       return devm_request_and_ioremap(&pdev->dev, &regs);
+}
+
+static int __init mvebu_pcie_probe(struct platform_device *pdev)
+{
+       struct mvebu_pcie *pcie;
+       struct device_node *np = pdev->dev.of_node;
+       struct of_pci_range range;
+       struct of_pci_range_parser parser;
+       struct device_node *child;
+       int i, ret;
+
+       pcie = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_pcie),
+                           GFP_KERNEL);
+       if (!pcie)
+               return -ENOMEM;
+
+       pcie->pdev = pdev;
+
+       if (of_pci_range_parser_init(&parser, np))
+               return -EINVAL;
+
+       /* Get the I/O and memory ranges from DT */
+       for_each_of_pci_range(&parser, &range) {
+               unsigned long restype = range.flags & IORESOURCE_TYPE_BITS;
+               if (restype == IORESOURCE_IO) {
+                       of_pci_range_to_resource(&range, np, &pcie->io);
+                       of_pci_range_to_resource(&range, np, &pcie->realio);
+                       pcie->io.name = "I/O";
+                       pcie->realio.start = max_t(resource_size_t,
+                                                  PCIBIOS_MIN_IO,
+                                                  range.pci_addr);
+                       pcie->realio.end = min_t(resource_size_t,
+                                                IO_SPACE_LIMIT,
+                                                range.pci_addr + range.size);
+               }
+               if (restype == IORESOURCE_MEM) {
+                       of_pci_range_to_resource(&range, np, &pcie->mem);
+                       pcie->mem.name = "MEM";
+               }
+       }
+
+       /* Get the bus range */
+       ret = of_pci_parse_bus_range(np, &pcie->busn);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to parse bus-range property: %d\n",
+                       ret);
+               return ret;
+       }
+
+       for_each_child_of_node(pdev->dev.of_node, child) {
+               if (!of_device_is_available(child))
+                       continue;
+               pcie->nports++;
+       }
+
+       pcie->ports = devm_kzalloc(&pdev->dev, pcie->nports *
+                                  sizeof(struct mvebu_pcie_port),
+                                  GFP_KERNEL);
+       if (!pcie->ports)
+               return -ENOMEM;
+
+       i = 0;
+       for_each_child_of_node(pdev->dev.of_node, child) {
+               struct mvebu_pcie_port *port = &pcie->ports[i];
+
+               if (!of_device_is_available(child))
+                       continue;
+
+               port->pcie = pcie;
+
+               if (of_property_read_u32(child, "marvell,pcie-port",
+                                        &port->port)) {
+                       dev_warn(&pdev->dev,
+                                "ignoring PCIe DT node, missing pcie-port property\n");
+                       continue;
+               }
+
+               if (of_property_read_u32(child, "marvell,pcie-lane",
+                                        &port->lane))
+                       port->lane = 0;
+
+               port->name = kasprintf(GFP_KERNEL, "pcie%d.%d",
+                                      port->port, port->lane);
+
+               port->devfn = of_pci_get_devfn(child);
+               if (port->devfn < 0)
+                       continue;
+
+               port->base = mvebu_pcie_map_registers(pdev, child, port);
+               if (!port->base) {
+                       dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n",
+                               port->port, port->lane);
+                       continue;
+               }
+
+               mvebu_pcie_set_local_dev_nr(port, 1);
+
+               if (mvebu_pcie_link_up(port)) {
+                       port->haslink = 1;
+                       dev_info(&pdev->dev, "PCIe%d.%d: link up\n",
+                                port->port, port->lane);
+               } else {
+                       port->haslink = 0;
+                       dev_info(&pdev->dev, "PCIe%d.%d: link down\n",
+                                port->port, port->lane);
+               }
+
+               port->clk = of_clk_get_by_name(child, NULL);
+               if (IS_ERR(port->clk)) {
+                       dev_err(&pdev->dev, "PCIe%d.%d: cannot get clock\n",
+                              port->port, port->lane);
+                       iounmap(port->base);
+                       port->haslink = 0;
+                       continue;
+               }
+
+               port->dn = child;
+
+               clk_prepare_enable(port->clk);
+               spin_lock_init(&port->conf_lock);
+
+               mvebu_sw_pci_bridge_init(port);
+
+               i++;
+       }
+
+       mvebu_pcie_enable(pcie);
+
+       return 0;
+}
+
+static const struct of_device_id mvebu_pcie_of_match_table[] = {
+       { .compatible = "marvell,armada-xp-pcie", },
+       { .compatible = "marvell,armada-370-pcie", },
+       { .compatible = "marvell,kirkwood-pcie", },
+       {},
+};
+MODULE_DEVICE_TABLE(of, mvebu_pcie_of_match_table);
+
+static struct platform_driver mvebu_pcie_driver = {
+       .driver = {
+               .owner = THIS_MODULE,
+               .name = "mvebu-pcie",
+               .of_match_table =
+                  of_match_ptr(mvebu_pcie_of_match_table),
+       },
+};
+
+static int __init mvebu_pcie_init(void)
+{
+       return platform_driver_probe(&mvebu_pcie_driver,
+                                    mvebu_pcie_probe);
+}
+
+subsys_initcall(mvebu_pcie_init);
+
+MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>");
+MODULE_DESCRIPTION("Marvell EBU PCIe driver");
+MODULE_LICENSE("GPLv2");
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
new file mode 100644 (file)
index 0000000..26bdbda
--- /dev/null
@@ -0,0 +1,1057 @@
+/*
+ * PCIe host controller driver for Samsung EXYNOS SoCs
+ *
+ * Copyright (C) 2013 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ *
+ * Author: Jingoo Han <jg1.han@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_gpio.h>
+#include <linux/of_pci.h>
+#include <linux/pci.h>
+#include <linux/pci_regs.h>
+#include <linux/platform_device.h>
+#include <linux/resource.h>
+#include <linux/signal.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+struct pcie_port_info {
+       u32             cfg0_size;
+       u32             cfg1_size;
+       u32             io_size;
+       u32             mem_size;
+       phys_addr_t     io_bus_addr;
+       phys_addr_t     mem_bus_addr;
+};
+
+struct pcie_port {
+       struct device           *dev;
+       u8                      controller;
+       u8                      root_bus_nr;
+       void __iomem            *dbi_base;
+       void __iomem            *elbi_base;
+       void __iomem            *phy_base;
+       void __iomem            *purple_base;
+       u64                     cfg0_base;
+       void __iomem            *va_cfg0_base;
+       u64                     cfg1_base;
+       void __iomem            *va_cfg1_base;
+       u64                     io_base;
+       u64                     mem_base;
+       spinlock_t              conf_lock;
+       struct resource         cfg;
+       struct resource         io;
+       struct resource         mem;
+       struct pcie_port_info   config;
+       struct clk              *clk;
+       struct clk              *bus_clk;
+       int                     irq;
+       int                     reset_gpio;
+};
+
+/*
+ * Exynos PCIe IP consists of Synopsys specific part and Exynos
+ * specific part. Only core block is a Synopsys designware part;
+ * other parts are Exynos specific.
+ */
+
+/* Synopsis specific PCIE configuration registers */
+#define PCIE_PORT_LINK_CONTROL         0x710
+#define PORT_LINK_MODE_MASK            (0x3f << 16)
+#define PORT_LINK_MODE_4_LANES         (0x7 << 16)
+
+#define PCIE_LINK_WIDTH_SPEED_CONTROL  0x80C
+#define PORT_LOGIC_SPEED_CHANGE                (0x1 << 17)
+#define PORT_LOGIC_LINK_WIDTH_MASK     (0x1ff << 8)
+#define PORT_LOGIC_LINK_WIDTH_4_LANES  (0x7 << 8)
+
+#define PCIE_MSI_ADDR_LO               0x820
+#define PCIE_MSI_ADDR_HI               0x824
+#define PCIE_MSI_INTR0_ENABLE          0x828
+#define PCIE_MSI_INTR0_MASK            0x82C
+#define PCIE_MSI_INTR0_STATUS          0x830
+
+#define PCIE_ATU_VIEWPORT              0x900
+#define PCIE_ATU_REGION_INBOUND                (0x1 << 31)
+#define PCIE_ATU_REGION_OUTBOUND       (0x0 << 31)
+#define PCIE_ATU_REGION_INDEX1         (0x1 << 0)
+#define PCIE_ATU_REGION_INDEX0         (0x0 << 0)
+#define PCIE_ATU_CR1                   0x904
+#define PCIE_ATU_TYPE_MEM              (0x0 << 0)
+#define PCIE_ATU_TYPE_IO               (0x2 << 0)
+#define PCIE_ATU_TYPE_CFG0             (0x4 << 0)
+#define PCIE_ATU_TYPE_CFG1             (0x5 << 0)
+#define PCIE_ATU_CR2                   0x908
+#define PCIE_ATU_ENABLE                        (0x1 << 31)
+#define PCIE_ATU_BAR_MODE_ENABLE       (0x1 << 30)
+#define PCIE_ATU_LOWER_BASE            0x90C
+#define PCIE_ATU_UPPER_BASE            0x910
+#define PCIE_ATU_LIMIT                 0x914
+#define PCIE_ATU_LOWER_TARGET          0x918
+#define PCIE_ATU_BUS(x)                        (((x) & 0xff) << 24)
+#define PCIE_ATU_DEV(x)                        (((x) & 0x1f) << 19)
+#define PCIE_ATU_FUNC(x)               (((x) & 0x7) << 16)
+#define PCIE_ATU_UPPER_TARGET          0x91C
+
+/* Exynos specific PCIE configuration registers */
+
+/* PCIe ELBI registers */
+#define PCIE_IRQ_PULSE                 0x000
+#define IRQ_INTA_ASSERT                        (0x1 << 0)
+#define IRQ_INTB_ASSERT                        (0x1 << 2)
+#define IRQ_INTC_ASSERT                        (0x1 << 4)
+#define IRQ_INTD_ASSERT                        (0x1 << 6)
+#define PCIE_IRQ_LEVEL                 0x004
+#define PCIE_IRQ_SPECIAL               0x008
+#define PCIE_IRQ_EN_PULSE              0x00c
+#define PCIE_IRQ_EN_LEVEL              0x010
+#define PCIE_IRQ_EN_SPECIAL            0x014
+#define PCIE_PWR_RESET                 0x018
+#define PCIE_CORE_RESET                        0x01c
+#define PCIE_CORE_RESET_ENABLE         (0x1 << 0)
+#define PCIE_STICKY_RESET              0x020
+#define PCIE_NONSTICKY_RESET           0x024
+#define PCIE_APP_INIT_RESET            0x028
+#define PCIE_APP_LTSSM_ENABLE          0x02c
+#define PCIE_ELBI_RDLH_LINKUP          0x064
+#define PCIE_ELBI_LTSSM_ENABLE         0x1
+#define PCIE_ELBI_SLV_AWMISC           0x11c
+#define PCIE_ELBI_SLV_ARMISC           0x120
+#define PCIE_ELBI_SLV_DBI_ENABLE       (0x1 << 21)
+
+/* PCIe Purple registers */
+#define PCIE_PHY_GLOBAL_RESET          0x000
+#define PCIE_PHY_COMMON_RESET          0x004
+#define PCIE_PHY_CMN_REG               0x008
+#define PCIE_PHY_MAC_RESET             0x00c
+#define PCIE_PHY_PLL_LOCKED            0x010
+#define PCIE_PHY_TRSVREG_RESET         0x020
+#define PCIE_PHY_TRSV_RESET            0x024
+
+/* PCIe PHY registers */
+#define PCIE_PHY_IMPEDANCE             0x004
+#define PCIE_PHY_PLL_DIV_0             0x008
+#define PCIE_PHY_PLL_BIAS              0x00c
+#define PCIE_PHY_DCC_FEEDBACK          0x014
+#define PCIE_PHY_PLL_DIV_1             0x05c
+#define PCIE_PHY_TRSV0_EMP_LVL         0x084
+#define PCIE_PHY_TRSV0_DRV_LVL         0x088
+#define PCIE_PHY_TRSV0_RXCDR           0x0ac
+#define PCIE_PHY_TRSV0_LVCC            0x0dc
+#define PCIE_PHY_TRSV1_EMP_LVL         0x144
+#define PCIE_PHY_TRSV1_RXCDR           0x16c
+#define PCIE_PHY_TRSV1_LVCC            0x19c
+#define PCIE_PHY_TRSV2_EMP_LVL         0x204
+#define PCIE_PHY_TRSV2_RXCDR           0x22c
+#define PCIE_PHY_TRSV2_LVCC            0x25c
+#define PCIE_PHY_TRSV3_EMP_LVL         0x2c4
+#define PCIE_PHY_TRSV3_RXCDR           0x2ec
+#define PCIE_PHY_TRSV3_LVCC            0x31c
+
+static struct hw_pci exynos_pci;
+
+static inline struct pcie_port *sys_to_pcie(struct pci_sys_data *sys)
+{
+       return sys->private_data;
+}
+
+static inline int cfg_read(void *addr, int where, int size, u32 *val)
+{
+       *val = readl(addr);
+
+       if (size == 1)
+               *val = (*val >> (8 * (where & 3))) & 0xff;
+       else if (size == 2)
+               *val = (*val >> (8 * (where & 3))) & 0xffff;
+       else if (size != 4)
+               return PCIBIOS_BAD_REGISTER_NUMBER;
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+static inline int cfg_write(void *addr, int where, int size, u32 val)
+{
+       if (size == 4)
+               writel(val, addr);
+       else if (size == 2)
+               writew(val, addr + (where & 2));
+       else if (size == 1)
+               writeb(val, addr + (where & 3));
+       else
+               return PCIBIOS_BAD_REGISTER_NUMBER;
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+static void exynos_pcie_sideband_dbi_w_mode(struct pcie_port *pp, bool on)
+{
+       u32 val;
+
+       if (on) {
+               val = readl(pp->elbi_base + PCIE_ELBI_SLV_AWMISC);
+               val |= PCIE_ELBI_SLV_DBI_ENABLE;
+               writel(val, pp->elbi_base + PCIE_ELBI_SLV_AWMISC);
+       } else {
+               val = readl(pp->elbi_base + PCIE_ELBI_SLV_AWMISC);
+               val &= ~PCIE_ELBI_SLV_DBI_ENABLE;
+               writel(val, pp->elbi_base + PCIE_ELBI_SLV_AWMISC);
+       }
+}
+
+static void exynos_pcie_sideband_dbi_r_mode(struct pcie_port *pp, bool on)
+{
+       u32 val;
+
+       if (on) {
+               val = readl(pp->elbi_base + PCIE_ELBI_SLV_ARMISC);
+               val |= PCIE_ELBI_SLV_DBI_ENABLE;
+               writel(val, pp->elbi_base + PCIE_ELBI_SLV_ARMISC);
+       } else {
+               val = readl(pp->elbi_base + PCIE_ELBI_SLV_ARMISC);
+               val &= ~PCIE_ELBI_SLV_DBI_ENABLE;
+               writel(val, pp->elbi_base + PCIE_ELBI_SLV_ARMISC);
+       }
+}
+
+static inline void readl_rc(struct pcie_port *pp, void *dbi_base, u32 *val)
+{
+       exynos_pcie_sideband_dbi_r_mode(pp, true);
+       *val = readl(dbi_base);
+       exynos_pcie_sideband_dbi_r_mode(pp, false);
+       return;
+}
+
+static inline void writel_rc(struct pcie_port *pp, u32 val, void *dbi_base)
+{
+       exynos_pcie_sideband_dbi_w_mode(pp, true);
+       writel(val, dbi_base);
+       exynos_pcie_sideband_dbi_w_mode(pp, false);
+       return;
+}
+
+static int exynos_pcie_rd_own_conf(struct pcie_port *pp, int where, int size,
+                               u32 *val)
+{
+       int ret;
+
+       exynos_pcie_sideband_dbi_r_mode(pp, true);
+       ret = cfg_read(pp->dbi_base + (where & ~0x3), where, size, val);
+       exynos_pcie_sideband_dbi_r_mode(pp, false);
+       return ret;
+}
+
+static int exynos_pcie_wr_own_conf(struct pcie_port *pp, int where, int size,
+                               u32 val)
+{
+       int ret;
+
+       exynos_pcie_sideband_dbi_w_mode(pp, true);
+       ret = cfg_write(pp->dbi_base + (where & ~0x3), where, size, val);
+       exynos_pcie_sideband_dbi_w_mode(pp, false);
+       return ret;
+}
+
+static void exynos_pcie_prog_viewport_cfg0(struct pcie_port *pp, u32 busdev)
+{
+       u32 val;
+       void __iomem *dbi_base = pp->dbi_base;
+
+       /* Program viewport 0 : OUTBOUND : CFG0 */
+       val = PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX0;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_VIEWPORT);
+       writel_rc(pp, pp->cfg0_base, dbi_base + PCIE_ATU_LOWER_BASE);
+       writel_rc(pp, (pp->cfg0_base >> 32), dbi_base + PCIE_ATU_UPPER_BASE);
+       writel_rc(pp, pp->cfg0_base + pp->config.cfg0_size - 1,
+                       dbi_base + PCIE_ATU_LIMIT);
+       writel_rc(pp, busdev, dbi_base + PCIE_ATU_LOWER_TARGET);
+       writel_rc(pp, 0, dbi_base + PCIE_ATU_UPPER_TARGET);
+       writel_rc(pp, PCIE_ATU_TYPE_CFG0, dbi_base + PCIE_ATU_CR1);
+       val = PCIE_ATU_ENABLE;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_CR2);
+}
+
+static void exynos_pcie_prog_viewport_cfg1(struct pcie_port *pp, u32 busdev)
+{
+       u32 val;
+       void __iomem *dbi_base = pp->dbi_base;
+
+       /* Program viewport 1 : OUTBOUND : CFG1 */
+       val = PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX1;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_VIEWPORT);
+       writel_rc(pp, PCIE_ATU_TYPE_CFG1, dbi_base + PCIE_ATU_CR1);
+       val = PCIE_ATU_ENABLE;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_CR2);
+       writel_rc(pp, pp->cfg1_base, dbi_base + PCIE_ATU_LOWER_BASE);
+       writel_rc(pp, (pp->cfg1_base >> 32), dbi_base + PCIE_ATU_UPPER_BASE);
+       writel_rc(pp, pp->cfg1_base + pp->config.cfg1_size - 1,
+                       dbi_base + PCIE_ATU_LIMIT);
+       writel_rc(pp, busdev, dbi_base + PCIE_ATU_LOWER_TARGET);
+       writel_rc(pp, 0, dbi_base + PCIE_ATU_UPPER_TARGET);
+}
+
+static void exynos_pcie_prog_viewport_mem_outbound(struct pcie_port *pp)
+{
+       u32 val;
+       void __iomem *dbi_base = pp->dbi_base;
+
+       /* Program viewport 0 : OUTBOUND : MEM */
+       val = PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX0;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_VIEWPORT);
+       writel_rc(pp, PCIE_ATU_TYPE_MEM, dbi_base + PCIE_ATU_CR1);
+       val = PCIE_ATU_ENABLE;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_CR2);
+       writel_rc(pp, pp->mem_base, dbi_base + PCIE_ATU_LOWER_BASE);
+       writel_rc(pp, (pp->mem_base >> 32), dbi_base + PCIE_ATU_UPPER_BASE);
+       writel_rc(pp, pp->mem_base + pp->config.mem_size - 1,
+                       dbi_base + PCIE_ATU_LIMIT);
+       writel_rc(pp, pp->config.mem_bus_addr,
+                       dbi_base + PCIE_ATU_LOWER_TARGET);
+       writel_rc(pp, upper_32_bits(pp->config.mem_bus_addr),
+                       dbi_base + PCIE_ATU_UPPER_TARGET);
+}
+
+static void exynos_pcie_prog_viewport_io_outbound(struct pcie_port *pp)
+{
+       u32 val;
+       void __iomem *dbi_base = pp->dbi_base;
+
+       /* Program viewport 1 : OUTBOUND : IO */
+       val = PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX1;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_VIEWPORT);
+       writel_rc(pp, PCIE_ATU_TYPE_IO, dbi_base + PCIE_ATU_CR1);
+       val = PCIE_ATU_ENABLE;
+       writel_rc(pp, val, dbi_base + PCIE_ATU_CR2);
+       writel_rc(pp, pp->io_base, dbi_base + PCIE_ATU_LOWER_BASE);
+       writel_rc(pp, (pp->io_base >> 32), dbi_base + PCIE_ATU_UPPER_BASE);
+       writel_rc(pp, pp->io_base + pp->config.io_size - 1,
+                       dbi_base + PCIE_ATU_LIMIT);
+       writel_rc(pp, pp->config.io_bus_addr,
+                       dbi_base + PCIE_ATU_LOWER_TARGET);
+       writel_rc(pp, upper_32_bits(pp->config.io_bus_addr),
+                       dbi_base + PCIE_ATU_UPPER_TARGET);
+}
+
+static int exynos_pcie_rd_other_conf(struct pcie_port *pp, struct pci_bus *bus,
+               u32 devfn, int where, int size, u32 *val)
+{
+       int ret = PCIBIOS_SUCCESSFUL;
+       u32 address, busdev;
+
+       busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) |
+                PCIE_ATU_FUNC(PCI_FUNC(devfn));
+       address = where & ~0x3;
+
+       if (bus->parent->number == pp->root_bus_nr) {
+               exynos_pcie_prog_viewport_cfg0(pp, busdev);
+               ret = cfg_read(pp->va_cfg0_base + address, where, size, val);
+               exynos_pcie_prog_viewport_mem_outbound(pp);
+       } else {
+               exynos_pcie_prog_viewport_cfg1(pp, busdev);
+               ret = cfg_read(pp->va_cfg1_base + address, where, size, val);
+               exynos_pcie_prog_viewport_io_outbound(pp);
+       }
+
+       return ret;
+}
+
+static int exynos_pcie_wr_other_conf(struct pcie_port *pp, struct pci_bus *bus,
+               u32 devfn, int where, int size, u32 val)
+{
+       int ret = PCIBIOS_SUCCESSFUL;
+       u32 address, busdev;
+
+       busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) |
+                PCIE_ATU_FUNC(PCI_FUNC(devfn));
+       address = where & ~0x3;
+
+       if (bus->parent->number == pp->root_bus_nr) {
+               exynos_pcie_prog_viewport_cfg0(pp, busdev);
+               ret = cfg_write(pp->va_cfg0_base + address, where, size, val);
+               exynos_pcie_prog_viewport_mem_outbound(pp);
+       } else {
+               exynos_pcie_prog_viewport_cfg1(pp, busdev);
+               ret = cfg_write(pp->va_cfg1_base + address, where, size, val);
+               exynos_pcie_prog_viewport_io_outbound(pp);
+       }
+
+       return ret;
+}
+
+static unsigned long global_io_offset;
+
+static int exynos_pcie_setup(int nr, struct pci_sys_data *sys)
+{
+       struct pcie_port *pp;
+
+       pp = sys_to_pcie(sys);
+
+       if (!pp)
+               return 0;
+
+       if (global_io_offset < SZ_1M && pp->config.io_size > 0) {
+               sys->io_offset = global_io_offset - pp->config.io_bus_addr;
+               pci_ioremap_io(sys->io_offset, pp->io.start);
+               global_io_offset += SZ_64K;
+               pci_add_resource_offset(&sys->resources, &pp->io,
+                                       sys->io_offset);
+       }
+
+       sys->mem_offset = pp->mem.start - pp->config.mem_bus_addr;
+       pci_add_resource_offset(&sys->resources, &pp->mem, sys->mem_offset);
+
+       return 1;
+}
+
+static int exynos_pcie_link_up(struct pcie_port *pp)
+{
+       u32 val = readl(pp->elbi_base + PCIE_ELBI_RDLH_LINKUP);
+
+       if (val == PCIE_ELBI_LTSSM_ENABLE)
+               return 1;
+
+       return 0;
+}
+
+static int exynos_pcie_valid_config(struct pcie_port *pp,
+                               struct pci_bus *bus, int dev)
+{
+       /* If there is no link, then there is no device */
+       if (bus->number != pp->root_bus_nr) {
+               if (!exynos_pcie_link_up(pp))
+                       return 0;
+       }
+
+       /* access only one slot on each root port */
+       if (bus->number == pp->root_bus_nr && dev > 0)
+               return 0;
+
+       /*
+        * do not read more than one device on the bus directly attached
+        * to RC's (Virtual Bridge's) DS side.
+        */
+       if (bus->primary == pp->root_bus_nr && dev > 0)
+               return 0;
+
+       return 1;
+}
+
+static int exynos_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
+                       int size, u32 *val)
+{
+       struct pcie_port *pp = sys_to_pcie(bus->sysdata);
+       unsigned long flags;
+       int ret;
+
+       if (!pp) {
+               BUG();
+               return -EINVAL;
+       }
+
+       if (exynos_pcie_valid_config(pp, bus, PCI_SLOT(devfn)) == 0) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       spin_lock_irqsave(&pp->conf_lock, flags);
+       if (bus->number != pp->root_bus_nr)
+               ret = exynos_pcie_rd_other_conf(pp, bus, devfn,
+                                               where, size, val);
+       else
+               ret = exynos_pcie_rd_own_conf(pp, where, size, val);
+       spin_unlock_irqrestore(&pp->conf_lock, flags);
+
+       return ret;
+}
+
+static int exynos_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
+                       int where, int size, u32 val)
+{
+       struct pcie_port *pp = sys_to_pcie(bus->sysdata);
+       unsigned long flags;
+       int ret;
+
+       if (!pp) {
+               BUG();
+               return -EINVAL;
+       }
+
+       if (exynos_pcie_valid_config(pp, bus, PCI_SLOT(devfn)) == 0)
+               return PCIBIOS_DEVICE_NOT_FOUND;
+
+       spin_lock_irqsave(&pp->conf_lock, flags);
+       if (bus->number != pp->root_bus_nr)
+               ret = exynos_pcie_wr_other_conf(pp, bus, devfn,
+                                               where, size, val);
+       else
+               ret = exynos_pcie_wr_own_conf(pp, where, size, val);
+       spin_unlock_irqrestore(&pp->conf_lock, flags);
+
+       return ret;
+}
+
+static struct pci_ops exynos_pcie_ops = {
+       .read = exynos_pcie_rd_conf,
+       .write = exynos_pcie_wr_conf,
+};
+
+static struct pci_bus *exynos_pcie_scan_bus(int nr,
+                                       struct pci_sys_data *sys)
+{
+       struct pci_bus *bus;
+       struct pcie_port *pp = sys_to_pcie(sys);
+
+       if (pp) {
+               pp->root_bus_nr = sys->busnr;
+               bus = pci_scan_root_bus(NULL, sys->busnr, &exynos_pcie_ops,
+                                       sys, &sys->resources);
+       } else {
+               bus = NULL;
+               BUG();
+       }
+
+       return bus;
+}
+
+static int exynos_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+       struct pcie_port *pp = sys_to_pcie(dev->bus->sysdata);
+
+       return pp->irq;
+}
+
+static struct hw_pci exynos_pci = {
+       .setup          = exynos_pcie_setup,
+       .scan           = exynos_pcie_scan_bus,
+       .map_irq        = exynos_pcie_map_irq,
+};
+
+static void exynos_pcie_setup_rc(struct pcie_port *pp)
+{
+       struct pcie_port_info *config = &pp->config;
+       void __iomem *dbi_base = pp->dbi_base;
+       u32 val;
+       u32 membase;
+       u32 memlimit;
+
+       /* set the number of lines as 4 */
+       readl_rc(pp, dbi_base + PCIE_PORT_LINK_CONTROL, &val);
+       val &= ~PORT_LINK_MODE_MASK;
+       val |= PORT_LINK_MODE_4_LANES;
+       writel_rc(pp, val, dbi_base + PCIE_PORT_LINK_CONTROL);
+
+       /* set link width speed control register */
+       readl_rc(pp, dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL, &val);
+       val &= ~PORT_LOGIC_LINK_WIDTH_MASK;
+       val |= PORT_LOGIC_LINK_WIDTH_4_LANES;
+       writel_rc(pp, val, dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL);
+
+       /* setup RC BARs */
+       writel_rc(pp, 0x00000004, dbi_base + PCI_BASE_ADDRESS_0);
+       writel_rc(pp, 0x00000004, dbi_base + PCI_BASE_ADDRESS_1);
+
+       /* setup interrupt pins */
+       readl_rc(pp, dbi_base + PCI_INTERRUPT_LINE, &val);
+       val &= 0xffff00ff;
+       val |= 0x00000100;
+       writel_rc(pp, val, dbi_base + PCI_INTERRUPT_LINE);
+
+       /* setup bus numbers */
+       readl_rc(pp, dbi_base + PCI_PRIMARY_BUS, &val);
+       val &= 0xff000000;
+       val |= 0x00010100;
+       writel_rc(pp, val, dbi_base + PCI_PRIMARY_BUS);
+
+       /* setup memory base, memory limit */
+       membase = ((u32)pp->mem_base & 0xfff00000) >> 16;
+       memlimit = (config->mem_size + (u32)pp->mem_base) & 0xfff00000;
+       val = memlimit | membase;
+       writel_rc(pp, val, dbi_base + PCI_MEMORY_BASE);
+
+       /* setup command register */
+       readl_rc(pp, dbi_base + PCI_COMMAND, &val);
+       val &= 0xffff0000;
+       val |= PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+               PCI_COMMAND_MASTER | PCI_COMMAND_SERR;
+       writel_rc(pp, val, dbi_base + PCI_COMMAND);
+}
+
+static void exynos_pcie_assert_core_reset(struct pcie_port *pp)
+{
+       u32 val;
+       void __iomem *elbi_base = pp->elbi_base;
+
+       val = readl(elbi_base + PCIE_CORE_RESET);
+       val &= ~PCIE_CORE_RESET_ENABLE;
+       writel(val, elbi_base + PCIE_CORE_RESET);
+       writel(0, elbi_base + PCIE_PWR_RESET);
+       writel(0, elbi_base + PCIE_STICKY_RESET);
+       writel(0, elbi_base + PCIE_NONSTICKY_RESET);
+}
+
+static void exynos_pcie_deassert_core_reset(struct pcie_port *pp)
+{
+       u32 val;
+       void __iomem *elbi_base = pp->elbi_base;
+       void __iomem *purple_base = pp->purple_base;
+
+       val = readl(elbi_base + PCIE_CORE_RESET);
+       val |= PCIE_CORE_RESET_ENABLE;
+       writel(val, elbi_base + PCIE_CORE_RESET);
+       writel(1, elbi_base + PCIE_STICKY_RESET);
+       writel(1, elbi_base + PCIE_NONSTICKY_RESET);
+       writel(1, elbi_base + PCIE_APP_INIT_RESET);
+       writel(0, elbi_base + PCIE_APP_INIT_RESET);
+       writel(1, purple_base + PCIE_PHY_MAC_RESET);
+}
+
+static void exynos_pcie_assert_phy_reset(struct pcie_port *pp)
+{
+       void __iomem *purple_base = pp->purple_base;
+
+       writel(0, purple_base + PCIE_PHY_MAC_RESET);
+       writel(1, purple_base + PCIE_PHY_GLOBAL_RESET);
+}
+
+static void exynos_pcie_deassert_phy_reset(struct pcie_port *pp)
+{
+       void __iomem *elbi_base = pp->elbi_base;
+       void __iomem *purple_base = pp->purple_base;
+
+       writel(0, purple_base + PCIE_PHY_GLOBAL_RESET);
+       writel(1, elbi_base + PCIE_PWR_RESET);
+       writel(0, purple_base + PCIE_PHY_COMMON_RESET);
+       writel(0, purple_base + PCIE_PHY_CMN_REG);
+       writel(0, purple_base + PCIE_PHY_TRSVREG_RESET);
+       writel(0, purple_base + PCIE_PHY_TRSV_RESET);
+}
+
+static void exynos_pcie_init_phy(struct pcie_port *pp)
+{
+       void __iomem *phy_base = pp->phy_base;
+
+       /* DCC feedback control off */
+       writel(0x29, phy_base + PCIE_PHY_DCC_FEEDBACK);
+
+       /* set TX/RX impedance */
+       writel(0xd5, phy_base + PCIE_PHY_IMPEDANCE);
+
+       /* set 50Mhz PHY clock */
+       writel(0x14, phy_base + PCIE_PHY_PLL_DIV_0);
+       writel(0x12, phy_base + PCIE_PHY_PLL_DIV_1);
+
+       /* set TX Differential output for lane 0 */
+       writel(0x7f, phy_base + PCIE_PHY_TRSV0_DRV_LVL);
+
+       /* set TX Pre-emphasis Level Control for lane 0 to minimum */
+       writel(0x0, phy_base + PCIE_PHY_TRSV0_EMP_LVL);
+
+       /* set RX clock and data recovery bandwidth */
+       writel(0xe7, phy_base + PCIE_PHY_PLL_BIAS);
+       writel(0x82, phy_base + PCIE_PHY_TRSV0_RXCDR);
+       writel(0x82, phy_base + PCIE_PHY_TRSV1_RXCDR);
+       writel(0x82, phy_base + PCIE_PHY_TRSV2_RXCDR);
+       writel(0x82, phy_base + PCIE_PHY_TRSV3_RXCDR);
+
+       /* change TX Pre-emphasis Level Control for lanes */
+       writel(0x39, phy_base + PCIE_PHY_TRSV0_EMP_LVL);
+       writel(0x39, phy_base + PCIE_PHY_TRSV1_EMP_LVL);
+       writel(0x39, phy_base + PCIE_PHY_TRSV2_EMP_LVL);
+       writel(0x39, phy_base + PCIE_PHY_TRSV3_EMP_LVL);
+
+       /* set LVCC */
+       writel(0x20, phy_base + PCIE_PHY_TRSV0_LVCC);
+       writel(0xa0, phy_base + PCIE_PHY_TRSV1_LVCC);
+       writel(0xa0, phy_base + PCIE_PHY_TRSV2_LVCC);
+       writel(0xa0, phy_base + PCIE_PHY_TRSV3_LVCC);
+}
+
+static void exynos_pcie_assert_reset(struct pcie_port *pp)
+{
+       if (pp->reset_gpio >= 0)
+               devm_gpio_request_one(pp->dev, pp->reset_gpio,
+                               GPIOF_OUT_INIT_HIGH, "RESET");
+       return;
+}
+
+static int exynos_pcie_establish_link(struct pcie_port *pp)
+{
+       u32 val;
+       int count = 0;
+       void __iomem *elbi_base = pp->elbi_base;
+       void __iomem *purple_base = pp->purple_base;
+       void __iomem *phy_base = pp->phy_base;
+
+       if (exynos_pcie_link_up(pp)) {
+               dev_err(pp->dev, "Link already up\n");
+               return 0;
+       }
+
+       /* assert reset signals */
+       exynos_pcie_assert_core_reset(pp);
+       exynos_pcie_assert_phy_reset(pp);
+
+       /* de-assert phy reset */
+       exynos_pcie_deassert_phy_reset(pp);
+
+       /* initialize phy */
+       exynos_pcie_init_phy(pp);
+
+       /* pulse for common reset */
+       writel(1, purple_base + PCIE_PHY_COMMON_RESET);
+       udelay(500);
+       writel(0, purple_base + PCIE_PHY_COMMON_RESET);
+
+       /* de-assert core reset */
+       exynos_pcie_deassert_core_reset(pp);
+
+       /* setup root complex */
+       exynos_pcie_setup_rc(pp);
+
+       /* assert reset signal */
+       exynos_pcie_assert_reset(pp);
+
+       /* assert LTSSM enable */
+       writel(PCIE_ELBI_LTSSM_ENABLE, elbi_base + PCIE_APP_LTSSM_ENABLE);
+
+       /* check if the link is up or not */
+       while (!exynos_pcie_link_up(pp)) {
+               mdelay(100);
+               count++;
+               if (count == 10) {
+                       while (readl(phy_base + PCIE_PHY_PLL_LOCKED) == 0) {
+                               val = readl(purple_base + PCIE_PHY_PLL_LOCKED);
+                               dev_info(pp->dev, "PLL Locked: 0x%x\n", val);
+                       }
+                       dev_err(pp->dev, "PCIe Link Fail\n");
+                       return -EINVAL;
+               }
+       }
+
+       dev_info(pp->dev, "Link up\n");
+
+       return 0;
+}
+
+static void exynos_pcie_clear_irq_pulse(struct pcie_port *pp)
+{
+       u32 val;
+       void __iomem *elbi_base = pp->elbi_base;
+
+       val = readl(elbi_base + PCIE_IRQ_PULSE);
+       writel(val, elbi_base + PCIE_IRQ_PULSE);
+       return;
+}
+
+static void exynos_pcie_enable_irq_pulse(struct pcie_port *pp)
+{
+       u32 val;
+       void __iomem *elbi_base = pp->elbi_base;
+
+       /* enable INTX interrupt */
+       val = IRQ_INTA_ASSERT | IRQ_INTB_ASSERT |
+               IRQ_INTC_ASSERT | IRQ_INTD_ASSERT,
+       writel(val, elbi_base + PCIE_IRQ_EN_PULSE);
+       return;
+}
+
+static irqreturn_t exynos_pcie_irq_handler(int irq, void *arg)
+{
+       struct pcie_port *pp = arg;
+
+       exynos_pcie_clear_irq_pulse(pp);
+       return IRQ_HANDLED;
+}
+
+static void exynos_pcie_enable_interrupts(struct pcie_port *pp)
+{
+       exynos_pcie_enable_irq_pulse(pp);
+       return;
+}
+
+static void exynos_pcie_host_init(struct pcie_port *pp)
+{
+       struct pcie_port_info *config = &pp->config;
+       u32 val;
+
+       /* Keep first 64K for IO */
+       pp->cfg0_base = pp->cfg.start;
+       pp->cfg1_base = pp->cfg.start + config->cfg0_size;
+       pp->io_base = pp->io.start;
+       pp->mem_base = pp->mem.start;
+
+       /* enable link */
+       exynos_pcie_establish_link(pp);
+
+       exynos_pcie_wr_own_conf(pp, PCI_BASE_ADDRESS_0, 4, 0);
+
+       /* program correct class for RC */
+       exynos_pcie_wr_own_conf(pp, PCI_CLASS_DEVICE, 2, PCI_CLASS_BRIDGE_PCI);
+
+       exynos_pcie_rd_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, &val);
+       val |= PORT_LOGIC_SPEED_CHANGE;
+       exynos_pcie_wr_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, val);
+
+       exynos_pcie_enable_interrupts(pp);
+}
+
+static int add_pcie_port(struct pcie_port *pp, struct platform_device *pdev)
+{
+       struct resource *elbi_base;
+       struct resource *phy_base;
+       struct resource *purple_base;
+       int ret;
+
+       elbi_base = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!elbi_base) {
+               dev_err(&pdev->dev, "couldn't get elbi base resource\n");
+               return -EINVAL;
+       }
+       pp->elbi_base = devm_ioremap_resource(&pdev->dev, elbi_base);
+       if (IS_ERR(pp->elbi_base))
+               return PTR_ERR(pp->elbi_base);
+
+       phy_base = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       if (!phy_base) {
+               dev_err(&pdev->dev, "couldn't get phy base resource\n");
+               return -EINVAL;
+       }
+       pp->phy_base = devm_ioremap_resource(&pdev->dev, phy_base);
+       if (IS_ERR(pp->phy_base))
+               return PTR_ERR(pp->phy_base);
+
+       purple_base = platform_get_resource(pdev, IORESOURCE_MEM, 2);
+       if (!purple_base) {
+               dev_err(&pdev->dev, "couldn't get purple base resource\n");
+               return -EINVAL;
+       }
+       pp->purple_base = devm_ioremap_resource(&pdev->dev, purple_base);
+       if (IS_ERR(pp->purple_base))
+               return PTR_ERR(pp->purple_base);
+
+       pp->irq = platform_get_irq(pdev, 1);
+       if (!pp->irq) {
+               dev_err(&pdev->dev, "failed to get irq\n");
+               return -ENODEV;
+       }
+       ret = devm_request_irq(&pdev->dev, pp->irq, exynos_pcie_irq_handler,
+                               IRQF_SHARED, "exynos-pcie", pp);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to request irq\n");
+               return ret;
+       }
+
+       pp->dbi_base = devm_ioremap(&pdev->dev, pp->cfg.start,
+                               resource_size(&pp->cfg));
+       if (!pp->dbi_base) {
+               dev_err(&pdev->dev, "error with ioremap\n");
+               return -ENOMEM;
+       }
+
+       pp->root_bus_nr = -1;
+
+       spin_lock_init(&pp->conf_lock);
+       exynos_pcie_host_init(pp);
+       pp->va_cfg0_base = devm_ioremap(&pdev->dev, pp->cfg0_base,
+                                       pp->config.cfg0_size);
+       if (!pp->va_cfg0_base) {
+               dev_err(pp->dev, "error with ioremap in function\n");
+               return -ENOMEM;
+       }
+       pp->va_cfg1_base = devm_ioremap(&pdev->dev, pp->cfg1_base,
+                                       pp->config.cfg1_size);
+       if (!pp->va_cfg1_base) {
+               dev_err(pp->dev, "error with ioremap\n");
+               return -ENOMEM;
+       }
+
+       return 0;
+}
+
+static int __init exynos_pcie_probe(struct platform_device *pdev)
+{
+       struct pcie_port *pp;
+       struct device_node *np = pdev->dev.of_node;
+       struct of_pci_range range;
+       struct of_pci_range_parser parser;
+       int ret;
+
+       pp = devm_kzalloc(&pdev->dev, sizeof(*pp), GFP_KERNEL);
+       if (!pp) {
+               dev_err(&pdev->dev, "no memory for pcie port\n");
+               return -ENOMEM;
+       }
+
+       pp->dev = &pdev->dev;
+
+       if (of_pci_range_parser_init(&parser, np)) {
+               dev_err(&pdev->dev, "missing ranges property\n");
+               return -EINVAL;
+       }
+
+       /* Get the I/O and memory ranges from DT */
+       for_each_of_pci_range(&parser, &range) {
+               unsigned long restype = range.flags & IORESOURCE_TYPE_BITS;
+               if (restype == IORESOURCE_IO) {
+                       of_pci_range_to_resource(&range, np, &pp->io);
+                       pp->io.name = "I/O";
+                       pp->io.start = max_t(resource_size_t,
+                                            PCIBIOS_MIN_IO,
+                                            range.pci_addr + global_io_offset);
+                       pp->io.end = min_t(resource_size_t,
+                                          IO_SPACE_LIMIT,
+                                          range.pci_addr + range.size
+                                          + global_io_offset);
+                       pp->config.io_size = resource_size(&pp->io);
+                       pp->config.io_bus_addr = range.pci_addr;
+               }
+               if (restype == IORESOURCE_MEM) {
+                       of_pci_range_to_resource(&range, np, &pp->mem);
+                       pp->mem.name = "MEM";
+                       pp->config.mem_size = resource_size(&pp->mem);
+                       pp->config.mem_bus_addr = range.pci_addr;
+               }
+               if (restype == 0) {
+                       of_pci_range_to_resource(&range, np, &pp->cfg);
+                       pp->config.cfg0_size = resource_size(&pp->cfg)/2;
+                       pp->config.cfg1_size = resource_size(&pp->cfg)/2;
+               }
+       }
+
+       pp->reset_gpio = of_get_named_gpio(np, "reset-gpio", 0);
+
+       pp->clk = devm_clk_get(&pdev->dev, "pcie");
+       if (IS_ERR(pp->clk)) {
+               dev_err(&pdev->dev, "Failed to get pcie rc clock\n");
+               return PTR_ERR(pp->clk);
+       }
+       ret = clk_prepare_enable(pp->clk);
+       if (ret)
+               return ret;
+
+       pp->bus_clk = devm_clk_get(&pdev->dev, "pcie_bus");
+       if (IS_ERR(pp->bus_clk)) {
+               dev_err(&pdev->dev, "Failed to get pcie bus clock\n");
+               ret = PTR_ERR(pp->bus_clk);
+               goto fail_clk;
+       }
+       ret = clk_prepare_enable(pp->bus_clk);
+       if (ret)
+               goto fail_clk;
+
+       ret = add_pcie_port(pp, pdev);
+       if (ret < 0)
+               goto fail_bus_clk;
+
+       pp->controller = exynos_pci.nr_controllers;
+       exynos_pci.nr_controllers = 1;
+       exynos_pci.private_data = (void **)&pp;
+
+       pci_common_init(&exynos_pci);
+       pci_assign_unassigned_resources();
+#ifdef CONFIG_PCI_DOMAINS
+       exynos_pci.domain++;
+#endif
+
+       platform_set_drvdata(pdev, pp);
+       return 0;
+
+fail_bus_clk:
+       clk_disable_unprepare(pp->bus_clk);
+fail_clk:
+       clk_disable_unprepare(pp->clk);
+       return ret;
+}
+
+static int __exit exynos_pcie_remove(struct platform_device *pdev)
+{
+       struct pcie_port *pp = platform_get_drvdata(pdev);
+
+       clk_disable_unprepare(pp->bus_clk);
+       clk_disable_unprepare(pp->clk);
+
+       return 0;
+}
+
+static const struct of_device_id exynos_pcie_of_match[] = {
+       { .compatible = "samsung,exynos5440-pcie", },
+       {},
+};
+MODULE_DEVICE_TABLE(of, exynos_pcie_of_match);
+
+static struct platform_driver exynos_pcie_driver = {
+       .remove         = __exit_p(exynos_pcie_remove),
+       .driver = {
+               .name   = "exynos-pcie",
+               .owner  = THIS_MODULE,
+               .of_match_table = of_match_ptr(exynos_pcie_of_match),
+       },
+};
+
+static int exynos_pcie_abort(unsigned long addr, unsigned int fsr,
+                       struct pt_regs *regs)
+{
+       unsigned long pc = instruction_pointer(regs);
+       unsigned long instr = *(unsigned long *)pc;
+
+       WARN_ONCE(1, "pcie abort\n");
+
+       /*
+        * If the instruction being executed was a read,
+        * make it look like it read all-ones.
+        */
+       if ((instr & 0x0c100000) == 0x04100000) {
+               int reg = (instr >> 12) & 15;
+               unsigned long val;
+
+               if (instr & 0x00400000)
+                       val = 255;
+               else
+                       val = -1;
+
+               regs->uregs[reg] = val;
+               regs->ARM_pc += 4;
+               return 0;
+       }
+
+       if ((instr & 0x0e100090) == 0x00100090) {
+               int reg = (instr >> 12) & 15;
+
+               regs->uregs[reg] = -1;
+               regs->ARM_pc += 4;
+               return 0;
+       }
+
+       return 1;
+}
+
+/* Exynos PCIe driver does not allow module unload */
+
+static int __init pcie_init(void)
+{
+       hook_fault_code(16 + 6, exynos_pcie_abort, SIGBUS, 0,
+                       "imprecise external abort");
+
+       platform_driver_probe(&exynos_pcie_driver, exynos_pcie_probe);
+
+       return 0;
+}
+subsys_initcall(pcie_init);
+
+MODULE_AUTHOR("Jingoo Han <jg1.han@samsung.com>");
+MODULE_DESCRIPTION("Samsung PCIe host controller driver");
+MODULE_LICENSE("GPL v2");
index 8f669243814935c3df4544e8d61127997cde2332..a1c6dd32e14b279b8c4f5bfba43e78a1d76515a5 100644 (file)
@@ -207,12 +207,13 @@ config PINCTRL_SAMSUNG
        select PINCONF
 
 config PINCTRL_EXYNOS
-       bool "Pinctrl driver data for Samsung EXYNOS SoCs"
-       depends on OF && GPIOLIB
+       bool "Pinctrl driver data for Samsung EXYNOS SoCs other than 5440"
+       depends on OF && GPIOLIB && ARCH_EXYNOS
        select PINCTRL_SAMSUNG
 
 config PINCTRL_EXYNOS5440
        bool "Samsung EXYNOS5440 SoC pinctrl driver"
+       depends on SOC_EXYNOS5440
        select PINMUX
        select PINCONF
 
index d6b41747d687e13c188340ed08a3027c9646245d..eeff7f7fc920d6b9362ee028d6e6a1f96e225cd0 100644 (file)
@@ -22,7 +22,6 @@
 #include <linux/slab.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/pinctrl/pinconf-generic.h>
-#include <linux/platform_data/pinctrl-coh901.h>
 #include "pinctrl-coh901.h"
 
 #define U300_GPIO_PORT_STRIDE                          (0x30)
@@ -58,8 +57,9 @@
 #define U300_GPIO_PXICR_IRQ_CONFIG_RISING_EDGE         (0x00000001UL)
 
 /* 8 bits per port, no version has more than 7 ports */
+#define U300_GPIO_NUM_PORTS 7
 #define U300_GPIO_PINS_PER_PORT 8
-#define U300_GPIO_MAX (U300_GPIO_PINS_PER_PORT * 7)
+#define U300_GPIO_MAX (U300_GPIO_PINS_PER_PORT * U300_GPIO_NUM_PORTS)
 
 struct u300_gpio {
        struct gpio_chip chip;
@@ -111,9 +111,6 @@ struct u300_gpio_confdata {
        int outval;
 };
 
-/* BS335 has seven ports of 8 bits each = GPIO pins 0..55 */
-#define BS335_GPIO_NUM_PORTS 7
-
 #define U300_FLOATING_INPUT { \
        .bias_mode = PIN_CONFIG_BIAS_HIGH_IMPEDANCE, \
        .output = false, \
@@ -136,7 +133,7 @@ struct u300_gpio_confdata {
 
 /* Initial configuration */
 static const struct __initconst u300_gpio_confdata
-bs335_gpio_config[BS335_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = {
+bs335_gpio_config[U300_GPIO_NUM_PORTS][U300_GPIO_PINS_PER_PORT] = {
        /* Port 0, pins 0-7 */
        {
                U300_FLOATING_INPUT,
@@ -630,13 +627,12 @@ static void __init u300_gpio_init_pin(struct u300_gpio *gpio,
        }
 }
 
-static void __init u300_gpio_init_coh901571(struct u300_gpio *gpio,
-                                    struct u300_gpio_platform *plat)
+static void __init u300_gpio_init_coh901571(struct u300_gpio *gpio)
 {
        int i, j;
 
        /* Write default config and values to all pins */
-       for (i = 0; i < plat->ports; i++) {
+       for (i = 0; i < U300_GPIO_NUM_PORTS; i++) {
                for (j = 0; j < 8; j++) {
                        const struct u300_gpio_confdata *conf;
                        int offset = (i*8) + j;
@@ -693,7 +689,6 @@ static struct coh901_pinpair coh901_pintable[] = {
 
 static int __init u300_gpio_probe(struct platform_device *pdev)
 {
-       struct u300_gpio_platform *plat = dev_get_platdata(&pdev->dev);
        struct u300_gpio *gpio;
        struct resource *memres;
        int err = 0;
@@ -707,9 +702,9 @@ static int __init u300_gpio_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        gpio->chip = u300_gpio_chip;
-       gpio->chip.ngpio = plat->ports * U300_GPIO_PINS_PER_PORT;
+       gpio->chip.ngpio = U300_GPIO_NUM_PORTS * U300_GPIO_PINS_PER_PORT;
        gpio->chip.dev = &pdev->dev;
-       gpio->chip.base = plat->gpio_base;
+       gpio->chip.base = 0;
        gpio->dev = &pdev->dev;
 
        memres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -750,11 +745,11 @@ static int __init u300_gpio_probe(struct platform_device *pdev)
                 ((val & 0x0000FE00) >> 9) * 8);
        writel(U300_GPIO_CR_BLOCK_CLKRQ_ENABLE,
               gpio->base + U300_GPIO_CR);
-       u300_gpio_init_coh901571(gpio, plat);
+       u300_gpio_init_coh901571(gpio);
 
        /* Add each port with its IRQ separately */
        INIT_LIST_HEAD(&gpio->port_list);
-       for (portno = 0 ; portno < plat->ports; portno++) {
+       for (portno = 0 ; portno < U300_GPIO_NUM_PORTS; portno++) {
                struct u300_gpio_port *port =
                        kmalloc(sizeof(struct u300_gpio_port), GFP_KERNEL);
 
@@ -768,8 +763,7 @@ static int __init u300_gpio_probe(struct platform_device *pdev)
                port->number = portno;
                port->gpio = gpio;
 
-               port->irq = platform_get_irq_byname(pdev,
-                                                   port->name);
+               port->irq = platform_get_irq(pdev, portno);
 
                dev_dbg(gpio->dev, "register IRQ %d for port %s\n", port->irq,
                        port->name);
@@ -806,6 +800,9 @@ static int __init u300_gpio_probe(struct platform_device *pdev)
        }
        dev_dbg(gpio->dev, "initialized %d GPIO ports\n", portno);
 
+#ifdef CONFIG_OF_GPIO
+       gpio->chip.of_node = pdev->dev.of_node;
+#endif
        err = gpiochip_add(&gpio->chip);
        if (err) {
                dev_err(gpio->dev, "unable to add gpiochip: %d\n", err);
@@ -860,9 +857,15 @@ static int __exit u300_gpio_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct of_device_id u300_gpio_match[] = {
+       { .compatible = "stericsson,gpio-coh901" },
+       {},
+};
+
 static struct platform_driver u300_gpio_driver = {
        .driver         = {
                .name   = "u300-gpio",
+               .of_match_table = u300_gpio_match,
        },
        .remove         = __exit_p(u300_gpio_remove),
 };
index 6a3a7503e6a02ef91759fb44e70a9003601bc3ce..06bfa09bb15c1bfb9ba41cef0c5dfe2691ac8736 100644 (file)
@@ -1105,10 +1105,17 @@ static int u300_pmx_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct of_device_id u300_pinctrl_match[] = {
+       { .compatible = "stericsson,pinctrl-u300" },
+       {},
+};
+
+
 static struct platform_driver u300_pmx_driver = {
        .driver = {
                .name = DRIVER_NAME,
                .owner = THIS_MODULE,
+               .of_match_table = u300_pinctrl_match,
        },
        .probe = u300_pmx_probe,
        .remove = u300_pmx_remove,
index f8a2ae413c7f1366901d66d1570eb2de87d3ce60..636a882b406ecb4d404609501a524de4b20e3aab 100644 (file)
@@ -5,8 +5,6 @@
 if ARCH_SHMOBILE || SUPERH
 
 config PINCTRL_SH_PFC
-       # XXX move off the gpio dependency
-       depends on GPIOLIB
        select GPIO_SH_PFC if ARCH_REQUIRE_GPIOLIB
        select PINMUX
        select PINCONF
@@ -32,11 +30,21 @@ config PINCTRL_PFC_R8A7740
        depends on ARCH_R8A7740
        select PINCTRL_SH_PFC
 
+config PINCTRL_PFC_R8A7778
+       def_bool y
+       depends on ARCH_R8A7778
+       select PINCTRL_SH_PFC
+
 config PINCTRL_PFC_R8A7779
        def_bool y
        depends on ARCH_R8A7779
        select PINCTRL_SH_PFC
 
+config PINCTRL_PFC_R8A7790
+       def_bool y
+       depends on ARCH_R8A7790
+       select PINCTRL_SH_PFC
+
 config PINCTRL_PFC_SH7203
        def_bool y
        depends on CPU_SUBTYPE_SH7203
@@ -64,6 +72,7 @@ config PINCTRL_PFC_SH73A0
        def_bool y
        depends on ARCH_SH73A0
        select PINCTRL_SH_PFC
+       select REGULATOR
 
 config PINCTRL_PFC_SH7720
        def_bool y
index 211cd8e98a8a6ca8797738f14c97b2755162b08d..5e0c222c12d7e0414b22658aed8b724b9352d92f 100644 (file)
@@ -5,7 +5,9 @@ endif
 obj-$(CONFIG_PINCTRL_SH_PFC)   += sh-pfc.o
 obj-$(CONFIG_PINCTRL_PFC_R8A73A4)      += pfc-r8a73a4.o
 obj-$(CONFIG_PINCTRL_PFC_R8A7740)      += pfc-r8a7740.o
+obj-$(CONFIG_PINCTRL_PFC_R8A7778)      += pfc-r8a7778.o
 obj-$(CONFIG_PINCTRL_PFC_R8A7779)      += pfc-r8a7779.o
+obj-$(CONFIG_PINCTRL_PFC_R8A7790)      += pfc-r8a7790.o
 obj-$(CONFIG_PINCTRL_PFC_SH7203)       += pfc-sh7203.o
 obj-$(CONFIG_PINCTRL_PFC_SH7264)       += pfc-sh7264.o
 obj-$(CONFIG_PINCTRL_PFC_SH7269)       += pfc-sh7269.o
index b551336924a55c4a6ce5d1ebd0f500b74250e646..3b2fd43ff2944ced1e8af02f1c8da50728816d0b 100644 (file)
@@ -372,6 +372,12 @@ static int sh_pfc_probe(struct platform_device *pdev)
 
        spin_lock_init(&pfc->lock);
 
+       if (info->ops && info->ops->init) {
+               ret = info->ops->init(pfc);
+               if (ret < 0)
+                       return ret;
+       }
+
        pinctrl_provide_dummies();
 
        /*
@@ -379,7 +385,7 @@ static int sh_pfc_probe(struct platform_device *pdev)
         */
        ret = sh_pfc_register_pinctrl(pfc);
        if (unlikely(ret != 0))
-               return ret;
+               goto error;
 
 #ifdef CONFIG_GPIO_SH_PFC
        /*
@@ -401,6 +407,11 @@ static int sh_pfc_probe(struct platform_device *pdev)
        dev_info(pfc->dev, "%s support registered\n", info->name);
 
        return 0;
+
+error:
+       if (info->ops && info->ops->exit)
+               info->ops->exit(pfc);
+       return ret;
 }
 
 static int sh_pfc_remove(struct platform_device *pdev)
@@ -412,6 +423,9 @@ static int sh_pfc_remove(struct platform_device *pdev)
 #endif
        sh_pfc_unregister_pinctrl(pfc);
 
+       if (pfc->info->ops && pfc->info->ops->exit)
+               pfc->info->ops->exit(pfc);
+
        platform_set_drvdata(pdev, NULL);
 
        return 0;
@@ -424,9 +438,15 @@ static const struct platform_device_id sh_pfc_id_table[] = {
 #ifdef CONFIG_PINCTRL_PFC_R8A7740
        { "pfc-r8a7740", (kernel_ulong_t)&r8a7740_pinmux_info },
 #endif
+#ifdef CONFIG_PINCTRL_PFC_R8A7778
+       { "pfc-r8a7778", (kernel_ulong_t)&r8a7778_pinmux_info },
+#endif
 #ifdef CONFIG_PINCTRL_PFC_R8A7779
        { "pfc-r8a7779", (kernel_ulong_t)&r8a7779_pinmux_info },
 #endif
+#ifdef CONFIG_PINCTRL_PFC_R8A7790
+       { "pfc-r8a7790", (kernel_ulong_t)&r8a7790_pinmux_info },
+#endif
 #ifdef CONFIG_PINCTRL_PFC_SH7203
        { "pfc-sh7203", (kernel_ulong_t)&sh7203_pinmux_info },
 #endif
index 89cb4289d76125abe17ad3ee7b710369af233cdb..f02ba1dde3a0738d4dd67b5c80c0b9e99537edba 100644 (file)
@@ -11,6 +11,7 @@
 #define __SH_PFC_CORE_H__
 
 #include <linux/compiler.h>
+#include <linux/spinlock.h>
 #include <linux/types.h>
 
 #include "sh_pfc.h"
@@ -27,6 +28,7 @@ struct sh_pfc_pinctrl;
 struct sh_pfc {
        struct device *dev;
        const struct sh_pfc_soc_info *info;
+       void *soc_data;
        spinlock_t lock;
 
        unsigned int num_windows;
@@ -56,7 +58,9 @@ int sh_pfc_config_mux(struct sh_pfc *pfc, unsigned mark, int pinmux_type);
 
 extern const struct sh_pfc_soc_info r8a73a4_pinmux_info;
 extern const struct sh_pfc_soc_info r8a7740_pinmux_info;
+extern const struct sh_pfc_soc_info r8a7778_pinmux_info;
 extern const struct sh_pfc_soc_info r8a7779_pinmux_info;
+extern const struct sh_pfc_soc_info r8a7790_pinmux_info;
 extern const struct sh_pfc_soc_info sh7203_pinmux_info;
 extern const struct sh_pfc_soc_info sh7264_pinmux_info;
 extern const struct sh_pfc_soc_info sh7269_pinmux_info;
index bbd87d29bfd072cae153467fa58c178c8059077f..f6ea47c433b388cb2018ab42c96b6dc1890f975f 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
+#include <linux/io.h>
 #include <linux/kernel.h>
+#include <linux/pinctrl/pinconf-generic.h>
+
 #include <mach/r8a7740.h>
 #include <mach/irqs.h>
 
+#include "core.h"
 #include "sh_pfc.h"
 
 #define CPU_ALL_PORT(fn, pfx, sfx)                                     \
        PORT_10(fn, pfx##20, sfx),                                      \
        PORT_1(fn, pfx##210, sfx),      PORT_1(fn, pfx##211, sfx)
 
+#undef _GPIO_PORT
+#define _GPIO_PORT(gpio, sfx)                                          \
+       [gpio] = {                                                      \
+               .name = __stringify(PORT##gpio),                        \
+               .enum_id = PORT##gpio##_DATA,                           \
+       }
+
+#define IRQC_PIN_MUX(irq, pin)                                         \
+static const unsigned int intc_irq##irq##_pins[] = {                   \
+       pin,                                                            \
+};                                                                     \
+static const unsigned int intc_irq##irq##_mux[] = {                    \
+       IRQ##irq##_MARK,                                                \
+}
+
+#define IRQC_PINS_MUX(irq, idx, pin)                                   \
+static const unsigned int intc_irq##irq##_##idx##_pins[] = {           \
+       pin,                                                            \
+};                                                                     \
+static const unsigned int intc_irq##irq##_##idx##_mux[] = {            \
+       IRQ##irq##_PORT##pin##_MARK,                                    \
+}
+
 enum {
        PINMUX_RESERVED = 0,
 
@@ -43,16 +70,6 @@ enum {
        PORT_ALL(IN),
        PINMUX_INPUT_END,
 
-       /* PORT0_IN_PU -> PORT211_IN_PU */
-       PINMUX_INPUT_PULLUP_BEGIN,
-       PORT_ALL(IN_PU),
-       PINMUX_INPUT_PULLUP_END,
-
-       /* PORT0_IN_PD -> PORT211_IN_PD */
-       PINMUX_INPUT_PULLDOWN_BEGIN,
-       PORT_ALL(IN_PD),
-       PINMUX_INPUT_PULLDOWN_END,
-
        /* PORT0_OUT -> PORT211_OUT */
        PINMUX_OUTPUT_BEGIN,
        PORT_ALL(OUT),
@@ -261,8 +278,6 @@ enum {
        SCIFB_CTS_PORT173_MARK,
 
        /* LCD0 */
-       LCDC0_SELECT_MARK,
-
        LCD0_D0_MARK,   LCD0_D1_MARK,   LCD0_D2_MARK,   LCD0_D3_MARK,
        LCD0_D4_MARK,   LCD0_D5_MARK,   LCD0_D6_MARK,   LCD0_D7_MARK,
        LCD0_D8_MARK,   LCD0_D9_MARK,   LCD0_D10_MARK,  LCD0_D11_MARK,
@@ -285,8 +300,6 @@ enum {
        LCD0_LCLK_PORT102_MARK,
 
        /* LCD1 */
-       LCDC1_SELECT_MARK,
-
        LCD1_D0_MARK,   LCD1_D1_MARK,   LCD1_D2_MARK,   LCD1_D3_MARK,
        LCD1_D4_MARK,   LCD1_D5_MARK,   LCD1_D6_MARK,   LCD1_D7_MARK,
        LCD1_D8_MARK,   LCD1_D9_MARK,   LCD1_D10_MARK,  LCD1_D11_MARK,
@@ -577,137 +590,11 @@ enum {
        PINMUX_MARK_END,
 };
 
+#define _PORT_DATA(pfx, sfx)   PORT_DATA_IO(pfx)
+#define PINMUX_DATA_GP_ALL()   CPU_ALL_PORT(_PORT_DATA, , unused)
+
 static const pinmux_enum_t pinmux_data[] = {
-       /* specify valid pin states for each pin in GPIO mode */
-
-       /* I/O and Pull U/D */
-       PORT_DATA_IO_PD(0),             PORT_DATA_IO_PD(1),
-       PORT_DATA_IO_PD(2),             PORT_DATA_IO_PD(3),
-       PORT_DATA_IO_PD(4),             PORT_DATA_IO_PD(5),
-       PORT_DATA_IO_PD(6),             PORT_DATA_IO(7),
-       PORT_DATA_IO(8),                PORT_DATA_IO(9),
-
-       PORT_DATA_IO_PD(10),            PORT_DATA_IO_PD(11),
-       PORT_DATA_IO_PD(12),            PORT_DATA_IO_PU_PD(13),
-       PORT_DATA_IO_PD(14),            PORT_DATA_IO_PD(15),
-       PORT_DATA_IO_PD(16),            PORT_DATA_IO_PD(17),
-       PORT_DATA_IO(18),               PORT_DATA_IO_PU(19),
-
-       PORT_DATA_IO_PU_PD(20),         PORT_DATA_IO_PD(21),
-       PORT_DATA_IO_PU_PD(22),         PORT_DATA_IO(23),
-       PORT_DATA_IO_PU(24),            PORT_DATA_IO_PU(25),
-       PORT_DATA_IO_PU(26),            PORT_DATA_IO_PU(27),
-       PORT_DATA_IO_PU(28),            PORT_DATA_IO_PU(29),
-
-       PORT_DATA_IO_PU(30),            PORT_DATA_IO_PD(31),
-       PORT_DATA_IO_PD(32),            PORT_DATA_IO_PD(33),
-       PORT_DATA_IO_PD(34),            PORT_DATA_IO_PU(35),
-       PORT_DATA_IO_PU(36),            PORT_DATA_IO_PD(37),
-       PORT_DATA_IO_PU(38),            PORT_DATA_IO_PD(39),
-
-       PORT_DATA_IO_PU_PD(40),         PORT_DATA_IO_PD(41),
-       PORT_DATA_IO_PD(42),            PORT_DATA_IO_PU_PD(43),
-       PORT_DATA_IO_PU_PD(44),         PORT_DATA_IO_PU_PD(45),
-       PORT_DATA_IO_PU_PD(46),         PORT_DATA_IO_PU_PD(47),
-       PORT_DATA_IO_PU_PD(48),         PORT_DATA_IO_PU_PD(49),
-
-       PORT_DATA_IO_PU_PD(50),         PORT_DATA_IO_PD(51),
-       PORT_DATA_IO_PD(52),            PORT_DATA_IO_PD(53),
-       PORT_DATA_IO_PD(54),            PORT_DATA_IO_PU_PD(55),
-       PORT_DATA_IO_PU_PD(56),         PORT_DATA_IO_PU_PD(57),
-       PORT_DATA_IO_PU_PD(58),         PORT_DATA_IO_PU_PD(59),
-
-       PORT_DATA_IO_PU_PD(60),         PORT_DATA_IO_PD(61),
-       PORT_DATA_IO_PD(62),            PORT_DATA_IO_PD(63),
-       PORT_DATA_IO_PD(64),            PORT_DATA_IO_PD(65),
-       PORT_DATA_IO_PU_PD(66),         PORT_DATA_IO_PU_PD(67),
-       PORT_DATA_IO_PU_PD(68),         PORT_DATA_IO_PU_PD(69),
-
-       PORT_DATA_IO_PU_PD(70),         PORT_DATA_IO_PU_PD(71),
-       PORT_DATA_IO_PU_PD(72),         PORT_DATA_IO_PU_PD(73),
-       PORT_DATA_IO_PU_PD(74),         PORT_DATA_IO_PU_PD(75),
-       PORT_DATA_IO_PU_PD(76),         PORT_DATA_IO_PU_PD(77),
-       PORT_DATA_IO_PU_PD(78),         PORT_DATA_IO_PU_PD(79),
-
-       PORT_DATA_IO_PU_PD(80),         PORT_DATA_IO_PU_PD(81),
-       PORT_DATA_IO(82),               PORT_DATA_IO_PU_PD(83),
-       PORT_DATA_IO(84),               PORT_DATA_IO_PD(85),
-       PORT_DATA_IO_PD(86),            PORT_DATA_IO_PD(87),
-       PORT_DATA_IO_PD(88),            PORT_DATA_IO_PD(89),
-
-       PORT_DATA_IO_PD(90),            PORT_DATA_IO_PU_PD(91),
-       PORT_DATA_IO_PU_PD(92),         PORT_DATA_IO_PU_PD(93),
-       PORT_DATA_IO_PU_PD(94),         PORT_DATA_IO_PU_PD(95),
-       PORT_DATA_IO_PU_PD(96),         PORT_DATA_IO_PU_PD(97),
-       PORT_DATA_IO_PU_PD(98),         PORT_DATA_IO_PU_PD(99),
-
-       PORT_DATA_IO_PU_PD(100),        PORT_DATA_IO(101),
-       PORT_DATA_IO_PU(102),           PORT_DATA_IO_PU_PD(103),
-       PORT_DATA_IO_PU(104),           PORT_DATA_IO_PU(105),
-       PORT_DATA_IO_PU_PD(106),        PORT_DATA_IO(107),
-       PORT_DATA_IO(108),              PORT_DATA_IO(109),
-
-       PORT_DATA_IO(110),              PORT_DATA_IO(111),
-       PORT_DATA_IO(112),              PORT_DATA_IO(113),
-       PORT_DATA_IO_PU_PD(114),        PORT_DATA_IO(115),
-       PORT_DATA_IO_PD(116),           PORT_DATA_IO_PD(117),
-       PORT_DATA_IO_PD(118),           PORT_DATA_IO_PD(119),
-
-       PORT_DATA_IO_PD(120),           PORT_DATA_IO_PD(121),
-       PORT_DATA_IO_PD(122),           PORT_DATA_IO_PD(123),
-       PORT_DATA_IO_PD(124),           PORT_DATA_IO(125),
-       PORT_DATA_IO(126),              PORT_DATA_IO(127),
-       PORT_DATA_IO(128),              PORT_DATA_IO(129),
-
-       PORT_DATA_IO(130),              PORT_DATA_IO(131),
-       PORT_DATA_IO(132),              PORT_DATA_IO(133),
-       PORT_DATA_IO(134),              PORT_DATA_IO(135),
-       PORT_DATA_IO(136),              PORT_DATA_IO(137),
-       PORT_DATA_IO(138),              PORT_DATA_IO(139),
-
-       PORT_DATA_IO(140),              PORT_DATA_IO(141),
-       PORT_DATA_IO_PU(142),           PORT_DATA_IO_PU(143),
-       PORT_DATA_IO_PU(144),           PORT_DATA_IO_PU(145),
-       PORT_DATA_IO_PU(146),           PORT_DATA_IO_PU(147),
-       PORT_DATA_IO_PU(148),           PORT_DATA_IO_PU(149),
-
-       PORT_DATA_IO_PU(150),           PORT_DATA_IO_PU(151),
-       PORT_DATA_IO_PU(152),           PORT_DATA_IO_PU(153),
-       PORT_DATA_IO_PU(154),           PORT_DATA_IO_PU(155),
-       PORT_DATA_IO_PU(156),           PORT_DATA_IO_PU(157),
-       PORT_DATA_IO_PD(158),           PORT_DATA_IO_PD(159),
-
-       PORT_DATA_IO_PU_PD(160),        PORT_DATA_IO_PD(161),
-       PORT_DATA_IO_PD(162),           PORT_DATA_IO_PD(163),
-       PORT_DATA_IO_PD(164),           PORT_DATA_IO_PD(165),
-       PORT_DATA_IO_PU(166),           PORT_DATA_IO_PU(167),
-       PORT_DATA_IO_PU(168),           PORT_DATA_IO_PU(169),
-
-       PORT_DATA_IO_PU(170),           PORT_DATA_IO_PU(171),
-       PORT_DATA_IO_PD(172),           PORT_DATA_IO_PD(173),
-       PORT_DATA_IO_PD(174),           PORT_DATA_IO_PD(175),
-       PORT_DATA_IO_PU(176),           PORT_DATA_IO_PU_PD(177),
-       PORT_DATA_IO_PU(178),           PORT_DATA_IO_PD(179),
-
-       PORT_DATA_IO_PD(180),           PORT_DATA_IO_PU(181),
-       PORT_DATA_IO_PU(182),           PORT_DATA_IO(183),
-       PORT_DATA_IO_PD(184),           PORT_DATA_IO_PD(185),
-       PORT_DATA_IO_PD(186),           PORT_DATA_IO_PD(187),
-       PORT_DATA_IO_PD(188),           PORT_DATA_IO_PD(189),
-
-       PORT_DATA_IO_PD(190),           PORT_DATA_IO_PD(191),
-       PORT_DATA_IO_PD(192),           PORT_DATA_IO_PU_PD(193),
-       PORT_DATA_IO_PU_PD(194),        PORT_DATA_IO_PD(195),
-       PORT_DATA_IO_PU_PD(196),        PORT_DATA_IO_PD(197),
-       PORT_DATA_IO_PU_PD(198),        PORT_DATA_IO_PU_PD(199),
-
-       PORT_DATA_IO_PU_PD(200),        PORT_DATA_IO_PU(201),
-       PORT_DATA_IO_PU_PD(202),        PORT_DATA_IO(203),
-       PORT_DATA_IO_PU_PD(204),        PORT_DATA_IO_PU_PD(205),
-       PORT_DATA_IO_PU_PD(206),        PORT_DATA_IO_PU_PD(207),
-       PORT_DATA_IO_PU_PD(208),        PORT_DATA_IO_PD(209),
-
-       PORT_DATA_IO_PD(210),           PORT_DATA_IO_PD(211),
+       PINMUX_DATA_GP_ALL(),
 
        /* Port0 */
        PINMUX_DATA(DBGMDT2_MARK,               PORT0_FN1),
@@ -986,7 +873,7 @@ static const pinmux_enum_t pinmux_data[] = {
        PINMUX_DATA(IRQ27_PORT57_MARK,          PORT57_FN0,     MSEL1CR_27_1),
 
        /* Port58 */
-       PINMUX_DATA(LCD0_D0_MARK,               PORT58_FN1),
+       PINMUX_DATA(LCD0_D0_MARK,               PORT58_FN1,     MSEL3CR_6_0),
        PINMUX_DATA(KEYOUT7_MARK,               PORT58_FN3),
        PINMUX_DATA(KEYIN0_PORT58_MARK,         PORT58_FN4,     MSEL4CR_18_1),
        PINMUX_DATA(DV_D0_MARK,                 PORT58_FN6),
@@ -1633,10 +1520,6 @@ static const pinmux_enum_t pinmux_data[] = {
        PINMUX_DATA(IRQ16_PORT211_MARK,         PORT211_FN0,    MSEL1CR_16_1),
        PINMUX_DATA(HDMI_CEC_MARK,              PORT211_FN1),
 
-       /* LCDC select */
-       PINMUX_DATA(LCDC0_SELECT_MARK,                          MSEL3CR_6_0),
-       PINMUX_DATA(LCDC1_SELECT_MARK,                          MSEL3CR_6_1),
-
        /* SDENC */
        PINMUX_DATA(SDENC_CPG_MARK,                             MSEL4CR_19_0),
        PINMUX_DATA(SDENC_DV_CLKI_MARK,                         MSEL4CR_19_1),
@@ -1654,9 +1537,565 @@ static const pinmux_enum_t pinmux_data[] = {
        PINMUX_DATA(TRACEAUD_FROM_MEMC_MARK,                    MSEL5CR_30_1,   MSEL5CR_29_0),
 };
 
+#define R8A7740_PIN(pin, cfgs)                                         \
+       {                                                               \
+               .name = __stringify(PORT##pin),                         \
+               .enum_id = PORT##pin##_DATA,                            \
+               .configs = cfgs,                                        \
+       }
+
+#define __I            (SH_PFC_PIN_CFG_INPUT)
+#define __O            (SH_PFC_PIN_CFG_OUTPUT)
+#define __IO           (SH_PFC_PIN_CFG_INPUT | SH_PFC_PIN_CFG_OUTPUT)
+#define __PD           (SH_PFC_PIN_CFG_PULL_DOWN)
+#define __PU           (SH_PFC_PIN_CFG_PULL_UP)
+#define __PUD          (SH_PFC_PIN_CFG_PULL_DOWN | SH_PFC_PIN_CFG_PULL_UP)
+
+#define R8A7740_PIN_I_PD(pin)          R8A7740_PIN(pin, __I | __PD)
+#define R8A7740_PIN_I_PU(pin)          R8A7740_PIN(pin, __I | __PU)
+#define R8A7740_PIN_I_PU_PD(pin)               R8A7740_PIN(pin, __I | __PUD)
+#define R8A7740_PIN_IO(pin)            R8A7740_PIN(pin, __IO)
+#define R8A7740_PIN_IO_PD(pin)         R8A7740_PIN(pin, __IO | __PD)
+#define R8A7740_PIN_IO_PU(pin)         R8A7740_PIN(pin, __IO | __PU)
+#define R8A7740_PIN_IO_PU_PD(pin)      R8A7740_PIN(pin, __IO | __PUD)
+#define R8A7740_PIN_O(pin)             R8A7740_PIN(pin, __O)
+#define R8A7740_PIN_O_PU_PD(pin)               R8A7740_PIN(pin, __O | __PUD)
+
 static struct sh_pfc_pin pinmux_pins[] = {
-       GPIO_PORT_ALL(),
+       /* Table 56-1 (I/O and Pull U/D) */
+       R8A7740_PIN_IO_PD(0),           R8A7740_PIN_IO_PD(1),
+       R8A7740_PIN_IO_PD(2),           R8A7740_PIN_IO_PD(3),
+       R8A7740_PIN_IO_PD(4),           R8A7740_PIN_IO_PD(5),
+       R8A7740_PIN_IO_PD(6),           R8A7740_PIN_IO(7),
+       R8A7740_PIN_IO(8),              R8A7740_PIN_IO(9),
+       R8A7740_PIN_IO_PD(10),          R8A7740_PIN_IO_PD(11),
+       R8A7740_PIN_IO_PD(12),          R8A7740_PIN_IO_PU_PD(13),
+       R8A7740_PIN_IO_PD(14),          R8A7740_PIN_IO_PD(15),
+       R8A7740_PIN_IO_PD(16),          R8A7740_PIN_IO_PD(17),
+       R8A7740_PIN_IO(18),             R8A7740_PIN_IO_PU(19),
+       R8A7740_PIN_IO_PU_PD(20),       R8A7740_PIN_IO_PD(21),
+       R8A7740_PIN_IO_PU_PD(22),       R8A7740_PIN_IO(23),
+       R8A7740_PIN_IO_PU(24),          R8A7740_PIN_IO_PU(25),
+       R8A7740_PIN_IO_PU(26),          R8A7740_PIN_IO_PU(27),
+       R8A7740_PIN_IO_PU(28),          R8A7740_PIN_IO_PU(29),
+       R8A7740_PIN_IO_PU(30),          R8A7740_PIN_IO_PD(31),
+       R8A7740_PIN_IO_PD(32),          R8A7740_PIN_IO_PD(33),
+       R8A7740_PIN_IO_PD(34),          R8A7740_PIN_IO_PU(35),
+       R8A7740_PIN_IO_PU(36),          R8A7740_PIN_IO_PD(37),
+       R8A7740_PIN_IO_PU(38),          R8A7740_PIN_IO_PD(39),
+       R8A7740_PIN_IO_PU_PD(40),       R8A7740_PIN_IO_PD(41),
+       R8A7740_PIN_IO_PD(42),          R8A7740_PIN_IO_PU_PD(43),
+       R8A7740_PIN_IO_PU_PD(44),       R8A7740_PIN_IO_PU_PD(45),
+       R8A7740_PIN_IO_PU_PD(46),       R8A7740_PIN_IO_PU_PD(47),
+       R8A7740_PIN_IO_PU_PD(48),       R8A7740_PIN_IO_PU_PD(49),
+       R8A7740_PIN_IO_PU_PD(50),       R8A7740_PIN_IO_PD(51),
+       R8A7740_PIN_IO_PD(52),          R8A7740_PIN_IO_PD(53),
+       R8A7740_PIN_IO_PD(54),          R8A7740_PIN_IO_PU_PD(55),
+       R8A7740_PIN_IO_PU_PD(56),       R8A7740_PIN_IO_PU_PD(57),
+       R8A7740_PIN_IO_PU_PD(58),       R8A7740_PIN_IO_PU_PD(59),
+       R8A7740_PIN_IO_PU_PD(60),       R8A7740_PIN_IO_PD(61),
+       R8A7740_PIN_IO_PD(62),          R8A7740_PIN_IO_PD(63),
+       R8A7740_PIN_IO_PD(64),          R8A7740_PIN_IO_PD(65),
+       R8A7740_PIN_IO_PU_PD(66),       R8A7740_PIN_IO_PU_PD(67),
+       R8A7740_PIN_IO_PU_PD(68),       R8A7740_PIN_IO_PU_PD(69),
+       R8A7740_PIN_IO_PU_PD(70),       R8A7740_PIN_IO_PU_PD(71),
+       R8A7740_PIN_IO_PU_PD(72),       R8A7740_PIN_IO_PU_PD(73),
+       R8A7740_PIN_IO_PU_PD(74),       R8A7740_PIN_IO_PU_PD(75),
+       R8A7740_PIN_IO_PU_PD(76),       R8A7740_PIN_IO_PU_PD(77),
+       R8A7740_PIN_IO_PU_PD(78),       R8A7740_PIN_IO_PU_PD(79),
+       R8A7740_PIN_IO_PU_PD(80),       R8A7740_PIN_IO_PU_PD(81),
+       R8A7740_PIN_IO(82),             R8A7740_PIN_IO_PU_PD(83),
+       R8A7740_PIN_IO(84),             R8A7740_PIN_IO_PD(85),
+       R8A7740_PIN_IO_PD(86),          R8A7740_PIN_IO_PD(87),
+       R8A7740_PIN_IO_PD(88),          R8A7740_PIN_IO_PD(89),
+       R8A7740_PIN_IO_PD(90),          R8A7740_PIN_IO_PU_PD(91),
+       R8A7740_PIN_IO_PU_PD(92),       R8A7740_PIN_IO_PU_PD(93),
+       R8A7740_PIN_IO_PU_PD(94),       R8A7740_PIN_IO_PU_PD(95),
+       R8A7740_PIN_IO_PU_PD(96),       R8A7740_PIN_IO_PU_PD(97),
+       R8A7740_PIN_IO_PU_PD(98),       R8A7740_PIN_IO_PU_PD(99),
+       R8A7740_PIN_IO_PU_PD(100),      R8A7740_PIN_IO(101),
+       R8A7740_PIN_IO_PU(102),         R8A7740_PIN_IO_PU_PD(103),
+       R8A7740_PIN_IO_PU(104),         R8A7740_PIN_IO_PU(105),
+       R8A7740_PIN_IO_PU_PD(106),      R8A7740_PIN_IO(107),
+       R8A7740_PIN_IO(108),            R8A7740_PIN_IO(109),
+       R8A7740_PIN_IO(110),            R8A7740_PIN_IO(111),
+       R8A7740_PIN_IO(112),            R8A7740_PIN_IO(113),
+       R8A7740_PIN_IO_PU_PD(114),      R8A7740_PIN_IO(115),
+       R8A7740_PIN_IO_PD(116),         R8A7740_PIN_IO_PD(117),
+       R8A7740_PIN_IO_PD(118),         R8A7740_PIN_IO_PD(119),
+       R8A7740_PIN_IO_PD(120),         R8A7740_PIN_IO_PD(121),
+       R8A7740_PIN_IO_PD(122),         R8A7740_PIN_IO_PD(123),
+       R8A7740_PIN_IO_PD(124),         R8A7740_PIN_IO(125),
+       R8A7740_PIN_IO(126),            R8A7740_PIN_IO(127),
+       R8A7740_PIN_IO(128),            R8A7740_PIN_IO(129),
+       R8A7740_PIN_IO(130),            R8A7740_PIN_IO(131),
+       R8A7740_PIN_IO(132),            R8A7740_PIN_IO(133),
+       R8A7740_PIN_IO(134),            R8A7740_PIN_IO(135),
+       R8A7740_PIN_IO(136),            R8A7740_PIN_IO(137),
+       R8A7740_PIN_IO(138),            R8A7740_PIN_IO(139),
+       R8A7740_PIN_IO(140),            R8A7740_PIN_IO(141),
+       R8A7740_PIN_IO_PU(142),         R8A7740_PIN_IO_PU(143),
+       R8A7740_PIN_IO_PU(144),         R8A7740_PIN_IO_PU(145),
+       R8A7740_PIN_IO_PU(146),         R8A7740_PIN_IO_PU(147),
+       R8A7740_PIN_IO_PU(148),         R8A7740_PIN_IO_PU(149),
+       R8A7740_PIN_IO_PU(150),         R8A7740_PIN_IO_PU(151),
+       R8A7740_PIN_IO_PU(152),         R8A7740_PIN_IO_PU(153),
+       R8A7740_PIN_IO_PU(154),         R8A7740_PIN_IO_PU(155),
+       R8A7740_PIN_IO_PU(156),         R8A7740_PIN_IO_PU(157),
+       R8A7740_PIN_IO_PD(158),         R8A7740_PIN_IO_PD(159),
+       R8A7740_PIN_IO_PU_PD(160),      R8A7740_PIN_IO_PD(161),
+       R8A7740_PIN_IO_PD(162),         R8A7740_PIN_IO_PD(163),
+       R8A7740_PIN_IO_PD(164),         R8A7740_PIN_IO_PD(165),
+       R8A7740_PIN_IO_PU(166),         R8A7740_PIN_IO_PU(167),
+       R8A7740_PIN_IO_PU(168),         R8A7740_PIN_IO_PU(169),
+       R8A7740_PIN_IO_PU(170),         R8A7740_PIN_IO_PU(171),
+       R8A7740_PIN_IO_PD(172),         R8A7740_PIN_IO_PD(173),
+       R8A7740_PIN_IO_PD(174),         R8A7740_PIN_IO_PD(175),
+       R8A7740_PIN_IO_PU(176),         R8A7740_PIN_IO_PU_PD(177),
+       R8A7740_PIN_IO_PU(178),         R8A7740_PIN_IO_PD(179),
+       R8A7740_PIN_IO_PD(180),         R8A7740_PIN_IO_PU(181),
+       R8A7740_PIN_IO_PU(182),         R8A7740_PIN_IO(183),
+       R8A7740_PIN_IO_PD(184),         R8A7740_PIN_IO_PD(185),
+       R8A7740_PIN_IO_PD(186),         R8A7740_PIN_IO_PD(187),
+       R8A7740_PIN_IO_PD(188),         R8A7740_PIN_IO_PD(189),
+       R8A7740_PIN_IO_PD(190),         R8A7740_PIN_IO_PD(191),
+       R8A7740_PIN_IO_PD(192),         R8A7740_PIN_IO_PU_PD(193),
+       R8A7740_PIN_IO_PU_PD(194),      R8A7740_PIN_IO_PD(195),
+       R8A7740_PIN_IO_PU_PD(196),      R8A7740_PIN_IO_PD(197),
+       R8A7740_PIN_IO_PU_PD(198),      R8A7740_PIN_IO_PU_PD(199),
+       R8A7740_PIN_IO_PU_PD(200),      R8A7740_PIN_IO_PU(201),
+       R8A7740_PIN_IO_PU_PD(202),      R8A7740_PIN_IO(203),
+       R8A7740_PIN_IO_PU_PD(204),      R8A7740_PIN_IO_PU_PD(205),
+       R8A7740_PIN_IO_PU_PD(206),      R8A7740_PIN_IO_PU_PD(207),
+       R8A7740_PIN_IO_PU_PD(208),      R8A7740_PIN_IO_PD(209),
+       R8A7740_PIN_IO_PD(210),         R8A7740_PIN_IO_PD(211),
+};
+
+/* - BSC -------------------------------------------------------------------- */
+static const unsigned int bsc_data8_pins[] = {
+       /* D[0:7] */
+       157, 156, 155, 154, 153, 152, 151, 150,
+};
+static const unsigned int bsc_data8_mux[] = {
+       D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK,
+       D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK,
+};
+static const unsigned int bsc_data16_pins[] = {
+       /* D[0:15] */
+       157, 156, 155, 154, 153, 152, 151, 150,
+       149, 148, 147, 146, 145, 144, 143, 142,
+};
+static const unsigned int bsc_data16_mux[] = {
+       D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK,
+       D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK,
+       D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK,
+       D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK,
+};
+static const unsigned int bsc_data32_pins[] = {
+       /* D[0:31] */
+       157, 156, 155, 154, 153, 152, 151, 150,
+       149, 148, 147, 146, 145, 144, 143, 142,
+       171, 170, 169, 168, 167, 166, 173, 172,
+       165, 164, 163, 162, 161, 160, 159, 158,
+};
+static const unsigned int bsc_data32_mux[] = {
+       D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK,
+       D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK,
+       D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK,
+       D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK,
+       D16_MARK, D17_MARK, D18_MARK, D19_MARK,
+       D20_MARK, D21_MARK, D22_MARK, D23_MARK,
+       D24_MARK, D25_MARK, D26_MARK, D27_MARK,
+       D28_MARK, D29_MARK, D30_MARK, D31_MARK,
+};
+static const unsigned int bsc_cs0_pins[] = {
+       /* CS */
+       109,
+};
+static const unsigned int bsc_cs0_mux[] = {
+       CS0_MARK,
+};
+static const unsigned int bsc_cs2_pins[] = {
+       /* CS */
+       110,
+};
+static const unsigned int bsc_cs2_mux[] = {
+       CS2_MARK,
+};
+static const unsigned int bsc_cs4_pins[] = {
+       /* CS */
+       111,
+};
+static const unsigned int bsc_cs4_mux[] = {
+       CS4_MARK,
+};
+static const unsigned int bsc_cs5a_0_pins[] = {
+       /* CS */
+       105,
+};
+static const unsigned int bsc_cs5a_0_mux[] = {
+       CS5A_PORT105_MARK,
+};
+static const unsigned int bsc_cs5a_1_pins[] = {
+       /* CS */
+       19,
+};
+static const unsigned int bsc_cs5a_1_mux[] = {
+       CS5A_PORT19_MARK,
+};
+static const unsigned int bsc_cs5b_pins[] = {
+       /* CS */
+       103,
+};
+static const unsigned int bsc_cs5b_mux[] = {
+       CS5B_MARK,
+};
+static const unsigned int bsc_cs6a_pins[] = {
+       /* CS */
+       104,
+};
+static const unsigned int bsc_cs6a_mux[] = {
+       CS6A_MARK,
+};
+static const unsigned int bsc_rd_we8_pins[] = {
+       /* RD, WE[0] */
+       115, 113,
+};
+static const unsigned int bsc_rd_we8_mux[] = {
+       RD_FSC_MARK, WE0_FWE_MARK,
+};
+static const unsigned int bsc_rd_we16_pins[] = {
+       /* RD, WE[0:1] */
+       115, 113, 112,
+};
+static const unsigned int bsc_rd_we16_mux[] = {
+       RD_FSC_MARK, WE0_FWE_MARK, WE1_MARK,
+};
+static const unsigned int bsc_rd_we32_pins[] = {
+       /* RD, WE[0:3] */
+       115, 113, 112, 108, 107,
+};
+static const unsigned int bsc_rd_we32_mux[] = {
+       RD_FSC_MARK, WE0_FWE_MARK, WE1_MARK, WE2_ICIORD_MARK, WE3_ICIOWR_MARK,
+};
+static const unsigned int bsc_bs_pins[] = {
+       /* BS */
+       175,
+};
+static const unsigned int bsc_bs_mux[] = {
+       BS_MARK,
+};
+static const unsigned int bsc_rdwr_pins[] = {
+       /* RDWR */
+       114,
+};
+static const unsigned int bsc_rdwr_mux[] = {
+       RDWR_MARK,
+};
+/* - CEU0 ------------------------------------------------------------------- */
+static const unsigned int ceu0_data_0_7_pins[] = {
+       /* D[0:7] */
+       34, 33, 32, 31, 30, 29, 28, 27,
+};
+static const unsigned int ceu0_data_0_7_mux[] = {
+       VIO0_D0_MARK, VIO0_D1_MARK, VIO0_D2_MARK, VIO0_D3_MARK,
+       VIO0_D4_MARK, VIO0_D5_MARK, VIO0_D6_MARK, VIO0_D7_MARK,
+};
+static const unsigned int ceu0_data_8_15_0_pins[] = {
+       /* D[8:15] */
+       182, 181, 180, 179, 178, 26, 25, 24,
+};
+static const unsigned int ceu0_data_8_15_0_mux[] = {
+       VIO0_D8_MARK, VIO0_D9_MARK, VIO0_D10_MARK, VIO0_D11_MARK,
+       VIO0_D12_MARK, VIO0_D13_PORT26_MARK, VIO0_D14_PORT25_MARK,
+       VIO0_D15_PORT24_MARK,
+};
+static const unsigned int ceu0_data_8_15_1_pins[] = {
+       /* D[8:15] */
+       182, 181, 180, 179, 178, 22, 95, 96,
+};
+static const unsigned int ceu0_data_8_15_1_mux[] = {
+       VIO0_D8_MARK, VIO0_D9_MARK, VIO0_D10_MARK, VIO0_D11_MARK,
+       VIO0_D12_MARK, VIO0_D13_PORT22_MARK, VIO0_D14_PORT95_MARK,
+       VIO0_D15_PORT96_MARK,
+};
+static const unsigned int ceu0_clk_0_pins[] = {
+       /* CKO */
+       36,
+};
+static const unsigned int ceu0_clk_0_mux[] = {
+       VIO_CKO_MARK,
+};
+static const unsigned int ceu0_clk_1_pins[] = {
+       /* CKO */
+       14,
+};
+static const unsigned int ceu0_clk_1_mux[] = {
+       VIO_CKO1_MARK,
+};
+static const unsigned int ceu0_clk_2_pins[] = {
+       /* CKO */
+       15,
+};
+static const unsigned int ceu0_clk_2_mux[] = {
+       VIO_CKO2_MARK,
+};
+static const unsigned int ceu0_sync_pins[] = {
+       /* CLK, VD, HD */
+       35, 39, 37,
+};
+static const unsigned int ceu0_sync_mux[] = {
+       VIO0_CLK_MARK, VIO0_VD_MARK, VIO0_HD_MARK,
+};
+static const unsigned int ceu0_field_pins[] = {
+       /* FIELD */
+       38,
+};
+static const unsigned int ceu0_field_mux[] = {
+       VIO0_FIELD_MARK,
+};
+/* - CEU1 ------------------------------------------------------------------- */
+static const unsigned int ceu1_data_pins[] = {
+       /* D[0:7] */
+       182, 181, 180, 179, 178, 26, 25, 24,
+};
+static const unsigned int ceu1_data_mux[] = {
+       VIO1_D0_MARK, VIO1_D1_MARK, VIO1_D2_MARK, VIO1_D3_MARK,
+       VIO1_D4_MARK, VIO1_D5_MARK, VIO1_D6_MARK, VIO1_D7_MARK,
+};
+static const unsigned int ceu1_clk_pins[] = {
+       /* CKO */
+       23,
+};
+static const unsigned int ceu1_clk_mux[] = {
+       VIO_CKO_1_MARK,
+};
+static const unsigned int ceu1_sync_pins[] = {
+       /* CLK, VD, HD */
+       197, 198, 160,
+};
+static const unsigned int ceu1_sync_mux[] = {
+       VIO1_CLK_MARK, VIO1_VD_MARK, VIO1_HD_MARK,
+};
+static const unsigned int ceu1_field_pins[] = {
+       /* FIELD */
+       21,
+};
+static const unsigned int ceu1_field_mux[] = {
+       VIO1_FIELD_MARK,
+};
+/* - FSIA ------------------------------------------------------------------- */
+static const unsigned int fsia_mclk_in_pins[] = {
+       /* CK */
+       11,
+};
+static const unsigned int fsia_mclk_in_mux[] = {
+       FSIACK_MARK,
+};
+static const unsigned int fsia_mclk_out_pins[] = {
+       /* OMC */
+       10,
+};
+static const unsigned int fsia_mclk_out_mux[] = {
+       FSIAOMC_MARK,
+};
+static const unsigned int fsia_sclk_in_pins[] = {
+       /* ILR, IBT */
+       12, 13,
+};
+static const unsigned int fsia_sclk_in_mux[] = {
+       FSIAILR_MARK, FSIAIBT_MARK,
+};
+static const unsigned int fsia_sclk_out_pins[] = {
+       /* OLR, OBT */
+       7, 8,
+};
+static const unsigned int fsia_sclk_out_mux[] = {
+       FSIAOLR_MARK, FSIAOBT_MARK,
+};
+static const unsigned int fsia_data_in_0_pins[] = {
+       /* ISLD */
+       0,
 };
+static const unsigned int fsia_data_in_0_mux[] = {
+       FSIAISLD_PORT0_MARK,
+};
+static const unsigned int fsia_data_in_1_pins[] = {
+       /* ISLD */
+       5,
+};
+static const unsigned int fsia_data_in_1_mux[] = {
+       FSIAISLD_PORT5_MARK,
+};
+static const unsigned int fsia_data_out_0_pins[] = {
+       /* OSLD */
+       9,
+};
+static const unsigned int fsia_data_out_0_mux[] = {
+       FSIAOSLD_MARK,
+};
+static const unsigned int fsia_data_out_1_pins[] = {
+       /* OSLD */
+       0,
+};
+static const unsigned int fsia_data_out_1_mux[] = {
+       FSIAOSLD1_MARK,
+};
+static const unsigned int fsia_data_out_2_pins[] = {
+       /* OSLD */
+       1,
+};
+static const unsigned int fsia_data_out_2_mux[] = {
+       FSIAOSLD2_MARK,
+};
+static const unsigned int fsia_spdif_0_pins[] = {
+       /* SPDIF */
+       9,
+};
+static const unsigned int fsia_spdif_0_mux[] = {
+       FSIASPDIF_PORT9_MARK,
+};
+static const unsigned int fsia_spdif_1_pins[] = {
+       /* SPDIF */
+       18,
+};
+static const unsigned int fsia_spdif_1_mux[] = {
+       FSIASPDIF_PORT18_MARK,
+};
+/* - FSIB ------------------------------------------------------------------- */
+static const unsigned int fsib_mclk_in_pins[] = {
+       /* CK */
+       11,
+};
+static const unsigned int fsib_mclk_in_mux[] = {
+       FSIBCK_MARK,
+};
+/* - GETHER ----------------------------------------------------------------- */
+static const unsigned int gether_rmii_pins[] = {
+       /* RXD[0:1], RX_ER, CRS_DV, TXD[0:1], TX_EN, REF_CLK, MDC, MDIO */
+       195, 196, 194, 193, 200, 201, 199, 159, 202, 208,
+};
+static const unsigned int gether_rmii_mux[] = {
+       RMII_RXD0_MARK, RMII_RXD1_MARK, RMII_RX_ER_MARK, RMII_CRS_DV_MARK,
+       RMII_TXD0_MARK, RMII_TXD1_MARK, RMII_TX_EN_MARK, RMII_REF50CK_MARK,
+       RMII_MDC_MARK, RMII_MDIO_MARK,
+};
+static const unsigned int gether_mii_pins[] = {
+       /* RXD[0:3], RX_CLK, RX_DV, RX_ER
+        * TXD[0:3], TX_CLK, TX_EN, TX_ER
+        * CRS, COL, MDC, MDIO,
+        */
+       185, 186, 187, 188, 174, 161, 204,
+       171, 170, 169, 168, 184, 183, 203,
+       205, 163, 206, 207,
+};
+static const unsigned int gether_mii_mux[] = {
+       ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK,
+       ET_RX_CLK_MARK, ET_RX_DV_MARK, ET_RX_ER_MARK,
+       ET_ETXD0_MARK, ET_ETXD1_MARK, ET_ETXD2_MARK, ET_ETXD3_MARK,
+       ET_TX_CLK_MARK, ET_TX_EN_MARK, ET_TX_ER_MARK,
+       ET_CRS_MARK, ET_COL_MARK, ET_MDC_MARK, ET_MDIO_MARK,
+};
+static const unsigned int gether_gmii_pins[] = {
+       /* RXD[0:7], RX_CLK, RX_DV, RX_ER
+        * TXD[0:7], GTX_CLK, TX_CLK, TX_EN, TX_ER
+        * CRS, COL, MDC, MDIO, REF125CK_MARK,
+        */
+       185, 186, 187, 188, 189, 190, 191, 192, 174, 161, 204,
+       171, 170, 169, 168, 167, 166, 173, 172, 176, 184, 183, 203,
+       205, 163, 206, 207,
+};
+static const unsigned int gether_gmii_mux[] = {
+       ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK,
+       ET_ERXD4_MARK, ET_ERXD5_MARK, ET_ERXD6_MARK, ET_ERXD7_MARK,
+       ET_RX_CLK_MARK, ET_RX_DV_MARK, ET_RX_ER_MARK,
+       ET_ETXD0_MARK, ET_ETXD1_MARK, ET_ETXD2_MARK, ET_ETXD3_MARK,
+       ET_ETXD4_MARK, ET_ETXD5_MARK, ET_ETXD6_MARK, ET_ETXD7_MARK,
+       ET_GTX_CLK_MARK, ET_TX_CLK_MARK, ET_TX_EN_MARK, ET_TX_ER_MARK,
+       ET_CRS_MARK, ET_COL_MARK, ET_MDC_MARK, ET_MDIO_MARK,
+       RMII_REF125CK_MARK,
+};
+static const unsigned int gether_int_pins[] = {
+       /* PHY_INT */
+       164,
+};
+static const unsigned int gether_int_mux[] = {
+       ET_PHY_INT_MARK,
+};
+static const unsigned int gether_link_pins[] = {
+       /* LINK */
+       177,
+};
+static const unsigned int gether_link_mux[] = {
+       ET_LINK_MARK,
+};
+static const unsigned int gether_wol_pins[] = {
+       /* WOL */
+       175,
+};
+static const unsigned int gether_wol_mux[] = {
+       ET_WOL_MARK,
+};
+/* - HDMI ------------------------------------------------------------------- */
+static const unsigned int hdmi_pins[] = {
+       /* HPD, CEC */
+       210, 211,
+};
+static const unsigned int hdmi_mux[] = {
+       HDMI_HPD_MARK, HDMI_CEC_MARK,
+};
+/* - INTC ------------------------------------------------------------------- */
+IRQC_PINS_MUX(0, 0, 2);
+IRQC_PINS_MUX(0, 1, 13);
+IRQC_PIN_MUX(1, 20);
+IRQC_PINS_MUX(2, 0, 11);
+IRQC_PINS_MUX(2, 1, 12);
+IRQC_PINS_MUX(3, 0, 10);
+IRQC_PINS_MUX(3, 1, 14);
+IRQC_PINS_MUX(4, 0, 15);
+IRQC_PINS_MUX(4, 1, 172);
+IRQC_PINS_MUX(5, 0, 0);
+IRQC_PINS_MUX(5, 1, 1);
+IRQC_PINS_MUX(6, 0, 121);
+IRQC_PINS_MUX(6, 1, 173);
+IRQC_PINS_MUX(7, 0, 120);
+IRQC_PINS_MUX(7, 1, 209);
+IRQC_PIN_MUX(8, 119);
+IRQC_PINS_MUX(9, 0, 118);
+IRQC_PINS_MUX(9, 1, 210);
+IRQC_PIN_MUX(10, 19);
+IRQC_PIN_MUX(11, 104);
+IRQC_PINS_MUX(12, 0, 42);
+IRQC_PINS_MUX(12, 1, 97);
+IRQC_PINS_MUX(13, 0, 64);
+IRQC_PINS_MUX(13, 1, 98);
+IRQC_PINS_MUX(14, 0, 63);
+IRQC_PINS_MUX(14, 1, 99);
+IRQC_PINS_MUX(15, 0, 62);
+IRQC_PINS_MUX(15, 1, 100);
+IRQC_PINS_MUX(16, 0, 68);
+IRQC_PINS_MUX(16, 1, 211);
+IRQC_PIN_MUX(17, 69);
+IRQC_PIN_MUX(18, 70);
+IRQC_PIN_MUX(19, 71);
+IRQC_PIN_MUX(20, 67);
+IRQC_PIN_MUX(21, 202);
+IRQC_PIN_MUX(22, 95);
+IRQC_PIN_MUX(23, 96);
+IRQC_PIN_MUX(24, 180);
+IRQC_PIN_MUX(25, 38);
+IRQC_PINS_MUX(26, 0, 58);
+IRQC_PINS_MUX(26, 1, 81);
+IRQC_PINS_MUX(27, 0, 57);
+IRQC_PINS_MUX(27, 1, 168);
+IRQC_PINS_MUX(28, 0, 56);
+IRQC_PINS_MUX(28, 1, 169);
+IRQC_PINS_MUX(29, 0, 50);
+IRQC_PINS_MUX(29, 1, 170);
+IRQC_PINS_MUX(30, 0, 49);
+IRQC_PINS_MUX(30, 1, 171);
+IRQC_PINS_MUX(31, 0, 41);
+IRQC_PINS_MUX(31, 1, 167);
 
 /* - LCD0 ------------------------------------------------------------------- */
 static const unsigned int lcd0_data8_pins[] = {
@@ -1930,6 +2369,260 @@ static const unsigned int mmc0_ctrl_1_pins[] = {
 static const unsigned int mmc0_ctrl_1_mux[] = {
        MMC1_CMD_PORT104_MARK, MMC1_CLK_PORT103_MARK,
 };
+/* - SCIFA0 ----------------------------------------------------------------- */
+static const unsigned int scifa0_data_pins[] = {
+       /* RXD, TXD */
+       197, 198,
+};
+static const unsigned int scifa0_data_mux[] = {
+       SCIFA0_RXD_MARK, SCIFA0_TXD_MARK,
+};
+static const unsigned int scifa0_clk_pins[] = {
+       /* SCK */
+       188,
+};
+static const unsigned int scifa0_clk_mux[] = {
+       SCIFA0_SCK_MARK,
+};
+static const unsigned int scifa0_ctrl_pins[] = {
+       /* RTS, CTS */
+       194, 193,
+};
+static const unsigned int scifa0_ctrl_mux[] = {
+       SCIFA0_RTS_MARK, SCIFA0_CTS_MARK,
+};
+/* - SCIFA1 ----------------------------------------------------------------- */
+static const unsigned int scifa1_data_pins[] = {
+       /* RXD, TXD */
+       195, 196,
+};
+static const unsigned int scifa1_data_mux[] = {
+       SCIFA1_RXD_MARK, SCIFA1_TXD_MARK,
+};
+static const unsigned int scifa1_clk_pins[] = {
+       /* SCK */
+       185,
+};
+static const unsigned int scifa1_clk_mux[] = {
+       SCIFA1_SCK_MARK,
+};
+static const unsigned int scifa1_ctrl_pins[] = {
+       /* RTS, CTS */
+       23, 21,
+};
+static const unsigned int scifa1_ctrl_mux[] = {
+       SCIFA1_RTS_MARK, SCIFA1_CTS_MARK,
+};
+/* - SCIFA2 ----------------------------------------------------------------- */
+static const unsigned int scifa2_data_pins[] = {
+       /* RXD, TXD */
+       200, 201,
+};
+static const unsigned int scifa2_data_mux[] = {
+       SCIFA2_RXD_MARK, SCIFA2_TXD_MARK,
+};
+static const unsigned int scifa2_clk_0_pins[] = {
+       /* SCK */
+       22,
+};
+static const unsigned int scifa2_clk_0_mux[] = {
+       SCIFA2_SCK_PORT22_MARK,
+};
+static const unsigned int scifa2_clk_1_pins[] = {
+       /* SCK */
+       199,
+};
+static const unsigned int scifa2_clk_1_mux[] = {
+       SCIFA2_SCK_PORT199_MARK,
+};
+static const unsigned int scifa2_ctrl_pins[] = {
+       /* RTS, CTS */
+       96, 95,
+};
+static const unsigned int scifa2_ctrl_mux[] = {
+       SCIFA2_RTS_MARK, SCIFA2_CTS_MARK,
+};
+/* - SCIFA3 ----------------------------------------------------------------- */
+static const unsigned int scifa3_data_0_pins[] = {
+       /* RXD, TXD */
+       174, 175,
+};
+static const unsigned int scifa3_data_0_mux[] = {
+       SCIFA3_RXD_PORT174_MARK, SCIFA3_TXD_PORT175_MARK,
+};
+static const unsigned int scifa3_clk_0_pins[] = {
+       /* SCK */
+       116,
+};
+static const unsigned int scifa3_clk_0_mux[] = {
+       SCIFA3_SCK_PORT116_MARK,
+};
+static const unsigned int scifa3_ctrl_0_pins[] = {
+       /* RTS, CTS */
+       105, 117,
+};
+static const unsigned int scifa3_ctrl_0_mux[] = {
+       SCIFA3_RTS_PORT105_MARK, SCIFA3_CTS_PORT117_MARK,
+};
+static const unsigned int scifa3_data_1_pins[] = {
+       /* RXD, TXD */
+       159, 160,
+};
+static const unsigned int scifa3_data_1_mux[] = {
+       SCIFA3_RXD_PORT159_MARK, SCIFA3_TXD_PORT160_MARK,
+};
+static const unsigned int scifa3_clk_1_pins[] = {
+       /* SCK */
+       158,
+};
+static const unsigned int scifa3_clk_1_mux[] = {
+       SCIFA3_SCK_PORT158_MARK,
+};
+static const unsigned int scifa3_ctrl_1_pins[] = {
+       /* RTS, CTS */
+       161, 162,
+};
+static const unsigned int scifa3_ctrl_1_mux[] = {
+       SCIFA3_RTS_PORT161_MARK, SCIFA3_CTS_PORT162_MARK,
+};
+/* - SCIFA4 ----------------------------------------------------------------- */
+static const unsigned int scifa4_data_0_pins[] = {
+       /* RXD, TXD */
+       12, 13,
+};
+static const unsigned int scifa4_data_0_mux[] = {
+       SCIFA4_RXD_PORT12_MARK, SCIFA4_TXD_PORT13_MARK,
+};
+static const unsigned int scifa4_data_1_pins[] = {
+       /* RXD, TXD */
+       204, 203,
+};
+static const unsigned int scifa4_data_1_mux[] = {
+       SCIFA4_RXD_PORT204_MARK, SCIFA4_TXD_PORT203_MARK,
+};
+static const unsigned int scifa4_data_2_pins[] = {
+       /* RXD, TXD */
+       94, 93,
+};
+static const unsigned int scifa4_data_2_mux[] = {
+       SCIFA4_RXD_PORT94_MARK, SCIFA4_TXD_PORT93_MARK,
+};
+static const unsigned int scifa4_clk_0_pins[] = {
+       /* SCK */
+       21,
+};
+static const unsigned int scifa4_clk_0_mux[] = {
+       SCIFA4_SCK_PORT21_MARK,
+};
+static const unsigned int scifa4_clk_1_pins[] = {
+       /* SCK */
+       205,
+};
+static const unsigned int scifa4_clk_1_mux[] = {
+       SCIFA4_SCK_PORT205_MARK,
+};
+/* - SCIFA5 ----------------------------------------------------------------- */
+static const unsigned int scifa5_data_0_pins[] = {
+       /* RXD, TXD */
+       10, 20,
+};
+static const unsigned int scifa5_data_0_mux[] = {
+       SCIFA5_RXD_PORT10_MARK, SCIFA5_TXD_PORT20_MARK,
+};
+static const unsigned int scifa5_data_1_pins[] = {
+       /* RXD, TXD */
+       207, 208,
+};
+static const unsigned int scifa5_data_1_mux[] = {
+       SCIFA5_RXD_PORT207_MARK, SCIFA5_TXD_PORT208_MARK,
+};
+static const unsigned int scifa5_data_2_pins[] = {
+       /* RXD, TXD */
+       92, 91,
+};
+static const unsigned int scifa5_data_2_mux[] = {
+       SCIFA5_RXD_PORT92_MARK, SCIFA5_TXD_PORT91_MARK,
+};
+static const unsigned int scifa5_clk_0_pins[] = {
+       /* SCK */
+       23,
+};
+static const unsigned int scifa5_clk_0_mux[] = {
+       SCIFA5_SCK_PORT23_MARK,
+};
+static const unsigned int scifa5_clk_1_pins[] = {
+       /* SCK */
+       206,
+};
+static const unsigned int scifa5_clk_1_mux[] = {
+       SCIFA5_SCK_PORT206_MARK,
+};
+/* - SCIFA6 ----------------------------------------------------------------- */
+static const unsigned int scifa6_data_pins[] = {
+       /* RXD, TXD */
+       25, 26,
+};
+static const unsigned int scifa6_data_mux[] = {
+       SCIFA6_RXD_MARK, SCIFA6_TXD_MARK,
+};
+static const unsigned int scifa6_clk_pins[] = {
+       /* SCK */
+       24,
+};
+static const unsigned int scifa6_clk_mux[] = {
+       SCIFA6_SCK_MARK,
+};
+/* - SCIFA7 ----------------------------------------------------------------- */
+static const unsigned int scifa7_data_pins[] = {
+       /* RXD, TXD */
+       0, 1,
+};
+static const unsigned int scifa7_data_mux[] = {
+       SCIFA7_RXD_MARK, SCIFA7_TXD_MARK,
+};
+/* - SCIFB ------------------------------------------------------------------ */
+static const unsigned int scifb_data_0_pins[] = {
+       /* RXD, TXD */
+       191, 192,
+};
+static const unsigned int scifb_data_0_mux[] = {
+       SCIFB_RXD_PORT191_MARK, SCIFB_TXD_PORT192_MARK,
+};
+static const unsigned int scifb_clk_0_pins[] = {
+       /* SCK */
+       190,
+};
+static const unsigned int scifb_clk_0_mux[] = {
+       SCIFB_SCK_PORT190_MARK,
+};
+static const unsigned int scifb_ctrl_0_pins[] = {
+       /* RTS, CTS */
+       186, 187,
+};
+static const unsigned int scifb_ctrl_0_mux[] = {
+       SCIFB_RTS_PORT186_MARK, SCIFB_CTS_PORT187_MARK,
+};
+static const unsigned int scifb_data_1_pins[] = {
+       /* RXD, TXD */
+       3, 4,
+};
+static const unsigned int scifb_data_1_mux[] = {
+       SCIFB_RXD_PORT3_MARK, SCIFB_TXD_PORT4_MARK,
+};
+static const unsigned int scifb_clk_1_pins[] = {
+       /* SCK */
+       2,
+};
+static const unsigned int scifb_clk_1_mux[] = {
+       SCIFB_SCK_PORT2_MARK,
+};
+static const unsigned int scifb_ctrl_1_pins[] = {
+       /* RTS, CTS */
+       172, 173,
+};
+static const unsigned int scifb_ctrl_1_mux[] = {
+       SCIFB_RTS_PORT172_MARK, SCIFB_CTS_PORT173_MARK,
+};
 /* - SDHI0 ------------------------------------------------------------------ */
 static const unsigned int sdhi0_data1_pins[] = {
        /* D0 */
@@ -2052,8 +2745,141 @@ static const unsigned int sdhi2_wp_1_pins[] = {
 static const unsigned int sdhi2_wp_1_mux[] = {
        SDHI2_WP_PORT25_MARK,
 };
+/* - TPU0 ------------------------------------------------------------------- */
+static const unsigned int tpu0_to0_pins[] = {
+       /* TO */
+       23,
+};
+static const unsigned int tpu0_to0_mux[] = {
+       TPU0TO0_MARK,
+};
+static const unsigned int tpu0_to1_pins[] = {
+       /* TO */
+       21,
+};
+static const unsigned int tpu0_to1_mux[] = {
+       TPU0TO1_MARK,
+};
+static const unsigned int tpu0_to2_0_pins[] = {
+       /* TO */
+       66,
+};
+static const unsigned int tpu0_to2_0_mux[] = {
+       TPU0TO2_PORT66_MARK,
+};
+static const unsigned int tpu0_to2_1_pins[] = {
+       /* TO */
+       202,
+};
+static const unsigned int tpu0_to2_1_mux[] = {
+       TPU0TO2_PORT202_MARK,
+};
+static const unsigned int tpu0_to3_pins[] = {
+       /* TO */
+       180,
+};
+static const unsigned int tpu0_to3_mux[] = {
+       TPU0TO3_MARK,
+};
 
 static const struct sh_pfc_pin_group pinmux_groups[] = {
+       SH_PFC_PIN_GROUP(bsc_data8),
+       SH_PFC_PIN_GROUP(bsc_data16),
+       SH_PFC_PIN_GROUP(bsc_data32),
+       SH_PFC_PIN_GROUP(bsc_cs0),
+       SH_PFC_PIN_GROUP(bsc_cs2),
+       SH_PFC_PIN_GROUP(bsc_cs4),
+       SH_PFC_PIN_GROUP(bsc_cs5a_0),
+       SH_PFC_PIN_GROUP(bsc_cs5a_1),
+       SH_PFC_PIN_GROUP(bsc_cs5b),
+       SH_PFC_PIN_GROUP(bsc_cs6a),
+       SH_PFC_PIN_GROUP(bsc_rd_we8),
+       SH_PFC_PIN_GROUP(bsc_rd_we16),
+       SH_PFC_PIN_GROUP(bsc_rd_we32),
+       SH_PFC_PIN_GROUP(bsc_bs),
+       SH_PFC_PIN_GROUP(bsc_rdwr),
+       SH_PFC_PIN_GROUP(ceu0_data_0_7),
+       SH_PFC_PIN_GROUP(ceu0_data_8_15_0),
+       SH_PFC_PIN_GROUP(ceu0_data_8_15_1),
+       SH_PFC_PIN_GROUP(ceu0_clk_0),
+       SH_PFC_PIN_GROUP(ceu0_clk_1),
+       SH_PFC_PIN_GROUP(ceu0_clk_2),
+       SH_PFC_PIN_GROUP(ceu0_sync),
+       SH_PFC_PIN_GROUP(ceu0_field),
+       SH_PFC_PIN_GROUP(ceu1_data),
+       SH_PFC_PIN_GROUP(ceu1_clk),
+       SH_PFC_PIN_GROUP(ceu1_sync),
+       SH_PFC_PIN_GROUP(ceu1_field),
+       SH_PFC_PIN_GROUP(fsia_mclk_in),
+       SH_PFC_PIN_GROUP(fsia_mclk_out),
+       SH_PFC_PIN_GROUP(fsia_sclk_in),
+       SH_PFC_PIN_GROUP(fsia_sclk_out),
+       SH_PFC_PIN_GROUP(fsia_data_in_0),
+       SH_PFC_PIN_GROUP(fsia_data_in_1),
+       SH_PFC_PIN_GROUP(fsia_data_out_0),
+       SH_PFC_PIN_GROUP(fsia_data_out_1),
+       SH_PFC_PIN_GROUP(fsia_data_out_2),
+       SH_PFC_PIN_GROUP(fsia_spdif_0),
+       SH_PFC_PIN_GROUP(fsia_spdif_1),
+       SH_PFC_PIN_GROUP(fsib_mclk_in),
+       SH_PFC_PIN_GROUP(gether_rmii),
+       SH_PFC_PIN_GROUP(gether_mii),
+       SH_PFC_PIN_GROUP(gether_gmii),
+       SH_PFC_PIN_GROUP(gether_int),
+       SH_PFC_PIN_GROUP(gether_link),
+       SH_PFC_PIN_GROUP(gether_wol),
+       SH_PFC_PIN_GROUP(hdmi),
+       SH_PFC_PIN_GROUP(intc_irq0_0),
+       SH_PFC_PIN_GROUP(intc_irq0_1),
+       SH_PFC_PIN_GROUP(intc_irq1),
+       SH_PFC_PIN_GROUP(intc_irq2_0),
+       SH_PFC_PIN_GROUP(intc_irq2_1),
+       SH_PFC_PIN_GROUP(intc_irq3_0),
+       SH_PFC_PIN_GROUP(intc_irq3_1),
+       SH_PFC_PIN_GROUP(intc_irq4_0),
+       SH_PFC_PIN_GROUP(intc_irq4_1),
+       SH_PFC_PIN_GROUP(intc_irq5_0),
+       SH_PFC_PIN_GROUP(intc_irq5_1),
+       SH_PFC_PIN_GROUP(intc_irq6_0),
+       SH_PFC_PIN_GROUP(intc_irq6_1),
+       SH_PFC_PIN_GROUP(intc_irq7_0),
+       SH_PFC_PIN_GROUP(intc_irq7_1),
+       SH_PFC_PIN_GROUP(intc_irq8),
+       SH_PFC_PIN_GROUP(intc_irq9_0),
+       SH_PFC_PIN_GROUP(intc_irq9_1),
+       SH_PFC_PIN_GROUP(intc_irq10),
+       SH_PFC_PIN_GROUP(intc_irq11),
+       SH_PFC_PIN_GROUP(intc_irq12_0),
+       SH_PFC_PIN_GROUP(intc_irq12_1),
+       SH_PFC_PIN_GROUP(intc_irq13_0),
+       SH_PFC_PIN_GROUP(intc_irq13_1),
+       SH_PFC_PIN_GROUP(intc_irq14_0),
+       SH_PFC_PIN_GROUP(intc_irq14_1),
+       SH_PFC_PIN_GROUP(intc_irq15_0),
+       SH_PFC_PIN_GROUP(intc_irq15_1),
+       SH_PFC_PIN_GROUP(intc_irq16_0),
+       SH_PFC_PIN_GROUP(intc_irq16_1),
+       SH_PFC_PIN_GROUP(intc_irq17),
+       SH_PFC_PIN_GROUP(intc_irq18),
+       SH_PFC_PIN_GROUP(intc_irq19),
+       SH_PFC_PIN_GROUP(intc_irq20),
+       SH_PFC_PIN_GROUP(intc_irq21),
+       SH_PFC_PIN_GROUP(intc_irq22),
+       SH_PFC_PIN_GROUP(intc_irq23),
+       SH_PFC_PIN_GROUP(intc_irq24),
+       SH_PFC_PIN_GROUP(intc_irq25),
+       SH_PFC_PIN_GROUP(intc_irq26_0),
+       SH_PFC_PIN_GROUP(intc_irq26_1),
+       SH_PFC_PIN_GROUP(intc_irq27_0),
+       SH_PFC_PIN_GROUP(intc_irq27_1),
+       SH_PFC_PIN_GROUP(intc_irq28_0),
+       SH_PFC_PIN_GROUP(intc_irq28_1),
+       SH_PFC_PIN_GROUP(intc_irq29_0),
+       SH_PFC_PIN_GROUP(intc_irq29_1),
+       SH_PFC_PIN_GROUP(intc_irq30_0),
+       SH_PFC_PIN_GROUP(intc_irq30_1),
+       SH_PFC_PIN_GROUP(intc_irq31_0),
+       SH_PFC_PIN_GROUP(intc_irq31_1),
        SH_PFC_PIN_GROUP(lcd0_data8),
        SH_PFC_PIN_GROUP(lcd0_data9),
        SH_PFC_PIN_GROUP(lcd0_data12),
@@ -2084,6 +2910,41 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(mmc0_data4_1),
        SH_PFC_PIN_GROUP(mmc0_data8_1),
        SH_PFC_PIN_GROUP(mmc0_ctrl_1),
+       SH_PFC_PIN_GROUP(scifa0_data),
+       SH_PFC_PIN_GROUP(scifa0_clk),
+       SH_PFC_PIN_GROUP(scifa0_ctrl),
+       SH_PFC_PIN_GROUP(scifa1_data),
+       SH_PFC_PIN_GROUP(scifa1_clk),
+       SH_PFC_PIN_GROUP(scifa1_ctrl),
+       SH_PFC_PIN_GROUP(scifa2_data),
+       SH_PFC_PIN_GROUP(scifa2_clk_0),
+       SH_PFC_PIN_GROUP(scifa2_clk_1),
+       SH_PFC_PIN_GROUP(scifa2_ctrl),
+       SH_PFC_PIN_GROUP(scifa3_data_0),
+       SH_PFC_PIN_GROUP(scifa3_clk_0),
+       SH_PFC_PIN_GROUP(scifa3_ctrl_0),
+       SH_PFC_PIN_GROUP(scifa3_data_1),
+       SH_PFC_PIN_GROUP(scifa3_clk_1),
+       SH_PFC_PIN_GROUP(scifa3_ctrl_1),
+       SH_PFC_PIN_GROUP(scifa4_data_0),
+       SH_PFC_PIN_GROUP(scifa4_data_1),
+       SH_PFC_PIN_GROUP(scifa4_data_2),
+       SH_PFC_PIN_GROUP(scifa4_clk_0),
+       SH_PFC_PIN_GROUP(scifa4_clk_1),
+       SH_PFC_PIN_GROUP(scifa5_data_0),
+       SH_PFC_PIN_GROUP(scifa5_data_1),
+       SH_PFC_PIN_GROUP(scifa5_data_2),
+       SH_PFC_PIN_GROUP(scifa5_clk_0),
+       SH_PFC_PIN_GROUP(scifa5_clk_1),
+       SH_PFC_PIN_GROUP(scifa6_data),
+       SH_PFC_PIN_GROUP(scifa6_clk),
+       SH_PFC_PIN_GROUP(scifa7_data),
+       SH_PFC_PIN_GROUP(scifb_data_0),
+       SH_PFC_PIN_GROUP(scifb_clk_0),
+       SH_PFC_PIN_GROUP(scifb_ctrl_0),
+       SH_PFC_PIN_GROUP(scifb_data_1),
+       SH_PFC_PIN_GROUP(scifb_clk_1),
+       SH_PFC_PIN_GROUP(scifb_ctrl_1),
        SH_PFC_PIN_GROUP(sdhi0_data1),
        SH_PFC_PIN_GROUP(sdhi0_data4),
        SH_PFC_PIN_GROUP(sdhi0_ctrl),
@@ -2101,6 +2962,132 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(sdhi2_wp_0),
        SH_PFC_PIN_GROUP(sdhi2_cd_1),
        SH_PFC_PIN_GROUP(sdhi2_wp_1),
+       SH_PFC_PIN_GROUP(tpu0_to0),
+       SH_PFC_PIN_GROUP(tpu0_to1),
+       SH_PFC_PIN_GROUP(tpu0_to2_0),
+       SH_PFC_PIN_GROUP(tpu0_to2_1),
+       SH_PFC_PIN_GROUP(tpu0_to3),
+};
+
+static const char * const bsc_groups[] = {
+       "bsc_data8",
+       "bsc_data16",
+       "bsc_data32",
+       "bsc_cs0",
+       "bsc_cs2",
+       "bsc_cs4",
+       "bsc_cs5a_0",
+       "bsc_cs5a_1",
+       "bsc_cs5b",
+       "bsc_cs6a",
+       "bsc_rd_we8",
+       "bsc_rd_we16",
+       "bsc_rd_we32",
+       "bsc_bs",
+       "bsc_rdwr",
+};
+
+static const char * const ceu0_groups[] = {
+       "ceu0_data_0_7",
+       "ceu0_data_8_15_0",
+       "ceu0_data_8_15_1",
+       "ceu0_clk_0",
+       "ceu0_clk_1",
+       "ceu0_clk_2",
+       "ceu0_sync",
+       "ceu0_field",
+};
+
+static const char * const ceu1_groups[] = {
+       "ceu1_data",
+       "ceu1_clk",
+       "ceu1_sync",
+       "ceu1_field",
+};
+
+static const char * const fsia_groups[] = {
+       "fsia_mclk_in",
+       "fsia_mclk_out",
+       "fsia_sclk_in",
+       "fsia_sclk_out",
+       "fsia_data_in_0",
+       "fsia_data_in_1",
+       "fsia_data_out_0",
+       "fsia_data_out_1",
+       "fsia_data_out_2",
+       "fsia_spdif_0",
+       "fsia_spdif_1",
+};
+
+static const char * const fsib_groups[] = {
+       "fsib_mclk_in",
+};
+
+static const char * const gether_groups[] = {
+       "gether_rmii",
+       "gether_mii",
+       "gether_gmii",
+       "gether_int",
+       "gether_link",
+       "gether_wol",
+};
+
+static const char * const hdmi_groups[] = {
+       "hdmi",
+};
+
+static const char * const intc_groups[] = {
+       "intc_irq0_0",
+       "intc_irq0_1",
+       "intc_irq1",
+       "intc_irq2_0",
+       "intc_irq2_1",
+       "intc_irq3_0",
+       "intc_irq3_1",
+       "intc_irq4_0",
+       "intc_irq4_1",
+       "intc_irq5_0",
+       "intc_irq5_1",
+       "intc_irq6_0",
+       "intc_irq6_1",
+       "intc_irq7_0",
+       "intc_irq7_1",
+       "intc_irq8",
+       "intc_irq9_0",
+       "intc_irq9_1",
+       "intc_irq10",
+       "intc_irq11",
+       "intc_irq12_0",
+       "intc_irq12_1",
+       "intc_irq13_0",
+       "intc_irq13_1",
+       "intc_irq14_0",
+       "intc_irq14_1",
+       "intc_irq15_0",
+       "intc_irq15_1",
+       "intc_irq16_0",
+       "intc_irq16_1",
+       "intc_irq17",
+       "intc_irq18",
+       "intc_irq19",
+       "intc_irq20",
+       "intc_irq21",
+       "intc_irq22",
+       "intc_irq23",
+       "intc_irq24",
+       "intc_irq25",
+       "intc_irq26_0",
+       "intc_irq26_1",
+       "intc_irq27_0",
+       "intc_irq27_1",
+       "intc_irq28_0",
+       "intc_irq28_1",
+       "intc_irq29_0",
+       "intc_irq29_1",
+       "intc_irq30_0",
+       "intc_irq30_1",
+       "intc_irq31_0",
+       "intc_irq31_1",
 };
 
 static const char * const lcd0_groups[] = {
@@ -2142,6 +3129,68 @@ static const char * const mmc0_groups[] = {
        "mmc0_ctrl_1",
 };
 
+static const char * const scifa0_groups[] = {
+       "scifa0_data",
+       "scifa0_clk",
+       "scifa0_ctrl",
+};
+
+static const char * const scifa1_groups[] = {
+       "scifa1_data",
+       "scifa1_clk",
+       "scifa1_ctrl",
+};
+
+static const char * const scifa2_groups[] = {
+       "scifa2_data",
+       "scifa2_clk_0",
+       "scifa2_clk_1",
+       "scifa2_ctrl",
+};
+
+static const char * const scifa3_groups[] = {
+       "scifa3_data_0",
+       "scifa3_clk_0",
+       "scifa3_ctrl_0",
+       "scifa3_data_1",
+       "scifa3_clk_1",
+       "scifa3_ctrl_1",
+};
+
+static const char * const scifa4_groups[] = {
+       "scifa4_data_0",
+       "scifa4_data_1",
+       "scifa4_data_2",
+       "scifa4_clk_0",
+       "scifa4_clk_1",
+};
+
+static const char * const scifa5_groups[] = {
+       "scifa5_data_0",
+       "scifa5_data_1",
+       "scifa5_data_2",
+       "scifa5_clk_0",
+       "scifa5_clk_1",
+};
+
+static const char * const scifa6_groups[] = {
+       "scifa6_data",
+       "scifa6_clk",
+};
+
+static const char * const scifa7_groups[] = {
+       "scifa7_data",
+};
+
+static const char * const scifb_groups[] = {
+       "scifb_data_0",
+       "scifb_clk_0",
+       "scifb_ctrl_0",
+       "scifb_data_1",
+       "scifb_clk_1",
+       "scifb_ctrl_1",
+};
+
 static const char * const sdhi0_groups[] = {
        "sdhi0_data1",
        "sdhi0_data4",
@@ -2168,412 +3217,51 @@ static const char * const sdhi2_groups[] = {
        "sdhi2_wp_1",
 };
 
+static const char * const tpu0_groups[] = {
+       "tpu0_to0",
+       "tpu0_to1",
+       "tpu0_to2_0",
+       "tpu0_to2_1",
+       "tpu0_to3",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
+       SH_PFC_FUNCTION(bsc),
+       SH_PFC_FUNCTION(ceu0),
+       SH_PFC_FUNCTION(ceu1),
+       SH_PFC_FUNCTION(fsia),
+       SH_PFC_FUNCTION(fsib),
+       SH_PFC_FUNCTION(gether),
+       SH_PFC_FUNCTION(hdmi),
+       SH_PFC_FUNCTION(intc),
        SH_PFC_FUNCTION(lcd0),
        SH_PFC_FUNCTION(lcd1),
        SH_PFC_FUNCTION(mmc0),
+       SH_PFC_FUNCTION(scifa0),
+       SH_PFC_FUNCTION(scifa1),
+       SH_PFC_FUNCTION(scifa2),
+       SH_PFC_FUNCTION(scifa3),
+       SH_PFC_FUNCTION(scifa4),
+       SH_PFC_FUNCTION(scifa5),
+       SH_PFC_FUNCTION(scifa6),
+       SH_PFC_FUNCTION(scifa7),
+       SH_PFC_FUNCTION(scifb),
        SH_PFC_FUNCTION(sdhi0),
        SH_PFC_FUNCTION(sdhi1),
        SH_PFC_FUNCTION(sdhi2),
+       SH_PFC_FUNCTION(tpu0),
 };
 
-#define PINMUX_FN_BASE ARRAY_SIZE(pinmux_pins)
-
-static const struct pinmux_func pinmux_func_gpios[] = {
-       /* IRQ */
-       GPIO_FN(IRQ0_PORT2),    GPIO_FN(IRQ0_PORT13),
-       GPIO_FN(IRQ1),
-       GPIO_FN(IRQ2_PORT11),   GPIO_FN(IRQ2_PORT12),
-       GPIO_FN(IRQ3_PORT10),   GPIO_FN(IRQ3_PORT14),
-       GPIO_FN(IRQ4_PORT15),   GPIO_FN(IRQ4_PORT172),
-       GPIO_FN(IRQ5_PORT0),    GPIO_FN(IRQ5_PORT1),
-       GPIO_FN(IRQ6_PORT121),  GPIO_FN(IRQ6_PORT173),
-       GPIO_FN(IRQ7_PORT120),  GPIO_FN(IRQ7_PORT209),
-       GPIO_FN(IRQ8),
-       GPIO_FN(IRQ9_PORT118),  GPIO_FN(IRQ9_PORT210),
-       GPIO_FN(IRQ10),
-       GPIO_FN(IRQ11),
-       GPIO_FN(IRQ12_PORT42),  GPIO_FN(IRQ12_PORT97),
-       GPIO_FN(IRQ13_PORT64),  GPIO_FN(IRQ13_PORT98),
-       GPIO_FN(IRQ14_PORT63),  GPIO_FN(IRQ14_PORT99),
-       GPIO_FN(IRQ15_PORT62),  GPIO_FN(IRQ15_PORT100),
-       GPIO_FN(IRQ16_PORT68),  GPIO_FN(IRQ16_PORT211),
-       GPIO_FN(IRQ17),
-       GPIO_FN(IRQ18),
-       GPIO_FN(IRQ19),
-       GPIO_FN(IRQ20),
-       GPIO_FN(IRQ21),
-       GPIO_FN(IRQ22),
-       GPIO_FN(IRQ23),
-       GPIO_FN(IRQ24),
-       GPIO_FN(IRQ25),
-       GPIO_FN(IRQ26_PORT58),  GPIO_FN(IRQ26_PORT81),
-       GPIO_FN(IRQ27_PORT57),  GPIO_FN(IRQ27_PORT168),
-       GPIO_FN(IRQ28_PORT56),  GPIO_FN(IRQ28_PORT169),
-       GPIO_FN(IRQ29_PORT50),  GPIO_FN(IRQ29_PORT170),
-       GPIO_FN(IRQ30_PORT49),  GPIO_FN(IRQ30_PORT171),
-       GPIO_FN(IRQ31_PORT41),  GPIO_FN(IRQ31_PORT167),
-
-       /* Function */
-
-       /* DBGT */
-       GPIO_FN(DBGMDT2),       GPIO_FN(DBGMDT1),       GPIO_FN(DBGMDT0),
-       GPIO_FN(DBGMD10),       GPIO_FN(DBGMD11),       GPIO_FN(DBGMD20),
-       GPIO_FN(DBGMD21),
-
-       /* FSI-A */
-       GPIO_FN(FSIAISLD_PORT0),        /* FSIAISLD Port 0/5 */
-       GPIO_FN(FSIAISLD_PORT5),
-       GPIO_FN(FSIASPDIF_PORT9),       /* FSIASPDIF Port 9/18 */
-       GPIO_FN(FSIASPDIF_PORT18),
-       GPIO_FN(FSIAOSLD1),     GPIO_FN(FSIAOSLD2),     GPIO_FN(FSIAOLR),
-       GPIO_FN(FSIAOBT),       GPIO_FN(FSIAOSLD),      GPIO_FN(FSIAOMC),
-       GPIO_FN(FSIACK),        GPIO_FN(FSIAILR),       GPIO_FN(FSIAIBT),
-
-       /* FSI-B */
-       GPIO_FN(FSIBCK),
-
-       /* FMSI */
-       GPIO_FN(FMSISLD_PORT1), /* FMSISLD Port 1/6 */
-       GPIO_FN(FMSISLD_PORT6),
-       GPIO_FN(FMSIILR),       GPIO_FN(FMSIIBT),       GPIO_FN(FMSIOLR),
-       GPIO_FN(FMSIOBT),       GPIO_FN(FMSICK),        GPIO_FN(FMSOILR),
-       GPIO_FN(FMSOIBT),       GPIO_FN(FMSOOLR),       GPIO_FN(FMSOOBT),
-       GPIO_FN(FMSOSLD),       GPIO_FN(FMSOCK),
-
-       /* SCIFA0 */
-       GPIO_FN(SCIFA0_SCK),    GPIO_FN(SCIFA0_CTS),    GPIO_FN(SCIFA0_RTS),
-       GPIO_FN(SCIFA0_RXD),    GPIO_FN(SCIFA0_TXD),
-
-       /* SCIFA1 */
-       GPIO_FN(SCIFA1_CTS),    GPIO_FN(SCIFA1_SCK),
-       GPIO_FN(SCIFA1_RXD),    GPIO_FN(SCIFA1_TXD),    GPIO_FN(SCIFA1_RTS),
-
-       /* SCIFA2 */
-       GPIO_FN(SCIFA2_SCK_PORT22), /* SCIFA2_SCK Port 22/199 */
-       GPIO_FN(SCIFA2_SCK_PORT199),
-       GPIO_FN(SCIFA2_RXD),    GPIO_FN(SCIFA2_TXD),
-       GPIO_FN(SCIFA2_CTS),    GPIO_FN(SCIFA2_RTS),
-
-       /* SCIFA3 */
-       GPIO_FN(SCIFA3_RTS_PORT105), /* MSEL5CR_8_0 */
-       GPIO_FN(SCIFA3_SCK_PORT116),
-       GPIO_FN(SCIFA3_CTS_PORT117),
-       GPIO_FN(SCIFA3_RXD_PORT174),
-       GPIO_FN(SCIFA3_TXD_PORT175),
-
-       GPIO_FN(SCIFA3_RTS_PORT161), /* MSEL5CR_8_1 */
-       GPIO_FN(SCIFA3_SCK_PORT158),
-       GPIO_FN(SCIFA3_CTS_PORT162),
-       GPIO_FN(SCIFA3_RXD_PORT159),
-       GPIO_FN(SCIFA3_TXD_PORT160),
-
-       /* SCIFA4 */
-       GPIO_FN(SCIFA4_RXD_PORT12), /* MSEL5CR[12:11] = 00 */
-       GPIO_FN(SCIFA4_TXD_PORT13),
-
-       GPIO_FN(SCIFA4_RXD_PORT204), /* MSEL5CR[12:11] = 01 */
-       GPIO_FN(SCIFA4_TXD_PORT203),
-
-       GPIO_FN(SCIFA4_RXD_PORT94), /* MSEL5CR[12:11] = 10 */
-       GPIO_FN(SCIFA4_TXD_PORT93),
-
-       GPIO_FN(SCIFA4_SCK_PORT21), /* SCIFA4_SCK Port 21/205 */
-       GPIO_FN(SCIFA4_SCK_PORT205),
-
-       /* SCIFA5 */
-       GPIO_FN(SCIFA5_TXD_PORT20), /* MSEL5CR[15:14] = 00 */
-       GPIO_FN(SCIFA5_RXD_PORT10),
-
-       GPIO_FN(SCIFA5_RXD_PORT207), /* MSEL5CR[15:14] = 01 */
-       GPIO_FN(SCIFA5_TXD_PORT208),
-
-       GPIO_FN(SCIFA5_TXD_PORT91), /* MSEL5CR[15:14] = 10 */
-       GPIO_FN(SCIFA5_RXD_PORT92),
-
-       GPIO_FN(SCIFA5_SCK_PORT23), /* SCIFA5_SCK Port 23/206 */
-       GPIO_FN(SCIFA5_SCK_PORT206),
-
-       /* SCIFA6 */
-       GPIO_FN(SCIFA6_SCK),    GPIO_FN(SCIFA6_RXD),    GPIO_FN(SCIFA6_TXD),
-
-       /* SCIFA7 */
-       GPIO_FN(SCIFA7_TXD),    GPIO_FN(SCIFA7_RXD),
-
-       /* SCIFAB */
-       GPIO_FN(SCIFB_SCK_PORT190), /* MSEL5CR_17_0 */
-       GPIO_FN(SCIFB_RXD_PORT191),
-       GPIO_FN(SCIFB_TXD_PORT192),
-       GPIO_FN(SCIFB_RTS_PORT186),
-       GPIO_FN(SCIFB_CTS_PORT187),
-
-       GPIO_FN(SCIFB_SCK_PORT2), /* MSEL5CR_17_1 */
-       GPIO_FN(SCIFB_RXD_PORT3),
-       GPIO_FN(SCIFB_TXD_PORT4),
-       GPIO_FN(SCIFB_RTS_PORT172),
-       GPIO_FN(SCIFB_CTS_PORT173),
-
-       /* RSPI */
-       GPIO_FN(RSPI_SSL0_A),   GPIO_FN(RSPI_SSL1_A),   GPIO_FN(RSPI_SSL2_A),
-       GPIO_FN(RSPI_SSL3_A),   GPIO_FN(RSPI_CK_A),     GPIO_FN(RSPI_MOSI_A),
-       GPIO_FN(RSPI_MISO_A),
-
-       /* VIO CKO */
-       GPIO_FN(VIO_CKO1),
-       GPIO_FN(VIO_CKO2),
-       GPIO_FN(VIO_CKO_1),
-       GPIO_FN(VIO_CKO),
-
-       /* VIO0 */
-       GPIO_FN(VIO0_D0),       GPIO_FN(VIO0_D1),       GPIO_FN(VIO0_D2),
-       GPIO_FN(VIO0_D3),       GPIO_FN(VIO0_D4),       GPIO_FN(VIO0_D5),
-       GPIO_FN(VIO0_D6),       GPIO_FN(VIO0_D7),       GPIO_FN(VIO0_D8),
-       GPIO_FN(VIO0_D9),       GPIO_FN(VIO0_D10),      GPIO_FN(VIO0_D11),
-       GPIO_FN(VIO0_D12),      GPIO_FN(VIO0_VD),       GPIO_FN(VIO0_HD),
-       GPIO_FN(VIO0_CLK),      GPIO_FN(VIO0_FIELD),
-
-       GPIO_FN(VIO0_D13_PORT26), /* MSEL5CR_27_0 */
-       GPIO_FN(VIO0_D14_PORT25),
-       GPIO_FN(VIO0_D15_PORT24),
-
-       GPIO_FN(VIO0_D13_PORT22), /* MSEL5CR_27_1 */
-       GPIO_FN(VIO0_D14_PORT95),
-       GPIO_FN(VIO0_D15_PORT96),
-
-       /* VIO1 */
-       GPIO_FN(VIO1_D0),       GPIO_FN(VIO1_D1),       GPIO_FN(VIO1_D2),
-       GPIO_FN(VIO1_D3),       GPIO_FN(VIO1_D4),       GPIO_FN(VIO1_D5),
-       GPIO_FN(VIO1_D6),       GPIO_FN(VIO1_D7),       GPIO_FN(VIO1_VD),
-       GPIO_FN(VIO1_HD),       GPIO_FN(VIO1_CLK),      GPIO_FN(VIO1_FIELD),
-
-       /* TPU0 */
-       GPIO_FN(TPU0TO0),       GPIO_FN(TPU0TO1),       GPIO_FN(TPU0TO3),
-       GPIO_FN(TPU0TO2_PORT66), /* TPU0TO2 Port 66/202 */
-       GPIO_FN(TPU0TO2_PORT202),
-
-       /* SSP1 0 */
-       GPIO_FN(STP0_IPD0),     GPIO_FN(STP0_IPD1),     GPIO_FN(STP0_IPD2),
-       GPIO_FN(STP0_IPD3),     GPIO_FN(STP0_IPD4),     GPIO_FN(STP0_IPD5),
-       GPIO_FN(STP0_IPD6),     GPIO_FN(STP0_IPD7),     GPIO_FN(STP0_IPEN),
-       GPIO_FN(STP0_IPCLK),    GPIO_FN(STP0_IPSYNC),
-
-       /* SSP1 1 */
-       GPIO_FN(STP1_IPD1),     GPIO_FN(STP1_IPD2),     GPIO_FN(STP1_IPD3),
-       GPIO_FN(STP1_IPD4),     GPIO_FN(STP1_IPD5),     GPIO_FN(STP1_IPD6),
-       GPIO_FN(STP1_IPD7),     GPIO_FN(STP1_IPCLK),    GPIO_FN(STP1_IPSYNC),
-
-       GPIO_FN(STP1_IPD0_PORT186), /* MSEL5CR_23_0 */
-       GPIO_FN(STP1_IPEN_PORT187),
-
-       GPIO_FN(STP1_IPD0_PORT194), /* MSEL5CR_23_1 */
-       GPIO_FN(STP1_IPEN_PORT193),
-
-       /* SIM */
-       GPIO_FN(SIM_RST),       GPIO_FN(SIM_CLK),
-       GPIO_FN(SIM_D_PORT22), /* SIM_D  Port 22/199 */
-       GPIO_FN(SIM_D_PORT199),
-
-       /* MSIOF2 */
-       GPIO_FN(MSIOF2_TXD),    GPIO_FN(MSIOF2_RXD),    GPIO_FN(MSIOF2_TSCK),
-       GPIO_FN(MSIOF2_SS2),    GPIO_FN(MSIOF2_TSYNC),  GPIO_FN(MSIOF2_SS1),
-       GPIO_FN(MSIOF2_MCK1),   GPIO_FN(MSIOF2_MCK0),   GPIO_FN(MSIOF2_RSYNC),
-       GPIO_FN(MSIOF2_RSCK),
-
-       /* KEYSC */
-       GPIO_FN(KEYIN4),        GPIO_FN(KEYIN5),
-       GPIO_FN(KEYIN6),        GPIO_FN(KEYIN7),
-       GPIO_FN(KEYOUT0),       GPIO_FN(KEYOUT1),       GPIO_FN(KEYOUT2),
-       GPIO_FN(KEYOUT3),       GPIO_FN(KEYOUT4),       GPIO_FN(KEYOUT5),
-       GPIO_FN(KEYOUT6),       GPIO_FN(KEYOUT7),
-
-       GPIO_FN(KEYIN0_PORT43), /* MSEL4CR_18_0 */
-       GPIO_FN(KEYIN1_PORT44),
-       GPIO_FN(KEYIN2_PORT45),
-       GPIO_FN(KEYIN3_PORT46),
-
-       GPIO_FN(KEYIN0_PORT58), /* MSEL4CR_18_1 */
-       GPIO_FN(KEYIN1_PORT57),
-       GPIO_FN(KEYIN2_PORT56),
-       GPIO_FN(KEYIN3_PORT55),
-
-       /* VOU */
-       GPIO_FN(DV_D0),         GPIO_FN(DV_D1),         GPIO_FN(DV_D2),
-       GPIO_FN(DV_D3),         GPIO_FN(DV_D4),         GPIO_FN(DV_D5),
-       GPIO_FN(DV_D6),         GPIO_FN(DV_D7),         GPIO_FN(DV_D8),
-       GPIO_FN(DV_D9),         GPIO_FN(DV_D10),        GPIO_FN(DV_D11),
-       GPIO_FN(DV_D12),        GPIO_FN(DV_D13),        GPIO_FN(DV_D14),
-       GPIO_FN(DV_D15),        GPIO_FN(DV_CLK),
-       GPIO_FN(DV_VSYNC),      GPIO_FN(DV_HSYNC),
-
-       /* MEMC */
-       GPIO_FN(MEMC_AD0),      GPIO_FN(MEMC_AD1),      GPIO_FN(MEMC_AD2),
-       GPIO_FN(MEMC_AD3),      GPIO_FN(MEMC_AD4),      GPIO_FN(MEMC_AD5),
-       GPIO_FN(MEMC_AD6),      GPIO_FN(MEMC_AD7),      GPIO_FN(MEMC_AD8),
-       GPIO_FN(MEMC_AD9),      GPIO_FN(MEMC_AD10),     GPIO_FN(MEMC_AD11),
-       GPIO_FN(MEMC_AD12),     GPIO_FN(MEMC_AD13),     GPIO_FN(MEMC_AD14),
-       GPIO_FN(MEMC_AD15),     GPIO_FN(MEMC_CS0),      GPIO_FN(MEMC_INT),
-       GPIO_FN(MEMC_NWE),      GPIO_FN(MEMC_NOE),      GPIO_FN(MEMC_CS1),
-       GPIO_FN(MEMC_A1),       GPIO_FN(MEMC_ADV),      GPIO_FN(MEMC_DREQ0),
-       GPIO_FN(MEMC_WAIT),     GPIO_FN(MEMC_DREQ1),    GPIO_FN(MEMC_BUSCLK),
-       GPIO_FN(MEMC_A0),
-
-       /* MSIOF0 */
-       GPIO_FN(MSIOF0_SS1),    GPIO_FN(MSIOF0_SS2),    GPIO_FN(MSIOF0_RXD),
-       GPIO_FN(MSIOF0_TXD),    GPIO_FN(MSIOF0_MCK0),   GPIO_FN(MSIOF0_MCK1),
-       GPIO_FN(MSIOF0_RSYNC),  GPIO_FN(MSIOF0_RSCK),   GPIO_FN(MSIOF0_TSCK),
-       GPIO_FN(MSIOF0_TSYNC),
-
-       /* MSIOF1 */
-       GPIO_FN(MSIOF1_RSCK),   GPIO_FN(MSIOF1_RSYNC),
-       GPIO_FN(MSIOF1_MCK0),   GPIO_FN(MSIOF1_MCK1),
-
-       GPIO_FN(MSIOF1_SS2_PORT116),    GPIO_FN(MSIOF1_SS1_PORT117),
-       GPIO_FN(MSIOF1_RXD_PORT118),    GPIO_FN(MSIOF1_TXD_PORT119),
-       GPIO_FN(MSIOF1_TSYNC_PORT120),
-       GPIO_FN(MSIOF1_TSCK_PORT121),   /* MSEL4CR_10_0 */
-
-       GPIO_FN(MSIOF1_SS1_PORT67),     GPIO_FN(MSIOF1_TSCK_PORT72),
-       GPIO_FN(MSIOF1_TSYNC_PORT73),   GPIO_FN(MSIOF1_TXD_PORT74),
-       GPIO_FN(MSIOF1_RXD_PORT75),
-       GPIO_FN(MSIOF1_SS2_PORT202),    /* MSEL4CR_10_1 */
-
-       /* GPIO */
-       GPIO_FN(GPO0),  GPIO_FN(GPI0),
-       GPIO_FN(GPO1),  GPIO_FN(GPI1),
-
-       /* USB0 */
-       GPIO_FN(USB0_OCI),      GPIO_FN(USB0_PPON),     GPIO_FN(VBUS),
-
-       /* USB1 */
-       GPIO_FN(USB1_OCI),      GPIO_FN(USB1_PPON),
-
-       /* BBIF1 */
-       GPIO_FN(BBIF1_RXD),     GPIO_FN(BBIF1_TXD),     GPIO_FN(BBIF1_TSYNC),
-       GPIO_FN(BBIF1_TSCK),    GPIO_FN(BBIF1_RSCK),    GPIO_FN(BBIF1_RSYNC),
-       GPIO_FN(BBIF1_FLOW),    GPIO_FN(BBIF1_RX_FLOW_N),
-
-       /* BBIF2 */
-       GPIO_FN(BBIF2_TXD2_PORT5), /* MSEL5CR_0_0 */
-       GPIO_FN(BBIF2_RXD2_PORT60),
-       GPIO_FN(BBIF2_TSYNC2_PORT6),
-       GPIO_FN(BBIF2_TSCK2_PORT59),
-
-       GPIO_FN(BBIF2_RXD2_PORT90), /* MSEL5CR_0_1 */
-       GPIO_FN(BBIF2_TXD2_PORT183),
-       GPIO_FN(BBIF2_TSCK2_PORT89),
-       GPIO_FN(BBIF2_TSYNC2_PORT184),
-
-       /* BSC / FLCTL / PCMCIA */
-       GPIO_FN(CS0),   GPIO_FN(CS2),   GPIO_FN(CS4),
-       GPIO_FN(CS5B),  GPIO_FN(CS6A),
-       GPIO_FN(CS5A_PORT105), /* CS5A PORT 19/105 */
-       GPIO_FN(CS5A_PORT19),
-       GPIO_FN(IOIS16), /* ? */
-
-       GPIO_FN(A0),    GPIO_FN(A1),    GPIO_FN(A2),    GPIO_FN(A3),
-       GPIO_FN(A4_FOE),        GPIO_FN(A5_FCDE),       /* share with FLCTL */
-       GPIO_FN(A6),    GPIO_FN(A7),    GPIO_FN(A8),    GPIO_FN(A9),
-       GPIO_FN(A10),   GPIO_FN(A11),   GPIO_FN(A12),   GPIO_FN(A13),
-       GPIO_FN(A14),   GPIO_FN(A15),   GPIO_FN(A16),   GPIO_FN(A17),
-       GPIO_FN(A18),   GPIO_FN(A19),   GPIO_FN(A20),   GPIO_FN(A21),
-       GPIO_FN(A22),   GPIO_FN(A23),   GPIO_FN(A24),   GPIO_FN(A25),
-       GPIO_FN(A26),
-
-       GPIO_FN(D0_NAF0),       GPIO_FN(D1_NAF1),       /* share with FLCTL */
-       GPIO_FN(D2_NAF2),       GPIO_FN(D3_NAF3),       /* share with FLCTL */
-       GPIO_FN(D4_NAF4),       GPIO_FN(D5_NAF5),       /* share with FLCTL */
-       GPIO_FN(D6_NAF6),       GPIO_FN(D7_NAF7),       /* share with FLCTL */
-       GPIO_FN(D8_NAF8),       GPIO_FN(D9_NAF9),       /* share with FLCTL */
-       GPIO_FN(D10_NAF10),     GPIO_FN(D11_NAF11),     /* share with FLCTL */
-       GPIO_FN(D12_NAF12),     GPIO_FN(D13_NAF13),     /* share with FLCTL */
-       GPIO_FN(D14_NAF14),     GPIO_FN(D15_NAF15),     /* share with FLCTL */
-       GPIO_FN(D16),   GPIO_FN(D17),   GPIO_FN(D18),   GPIO_FN(D19),
-       GPIO_FN(D20),   GPIO_FN(D21),   GPIO_FN(D22),   GPIO_FN(D23),
-       GPIO_FN(D24),   GPIO_FN(D25),   GPIO_FN(D26),   GPIO_FN(D27),
-       GPIO_FN(D28),   GPIO_FN(D29),   GPIO_FN(D30),   GPIO_FN(D31),
-
-       GPIO_FN(WE0_FWE),       /* share with FLCTL */
-       GPIO_FN(WE1),
-       GPIO_FN(WE2_ICIORD),    /* share with PCMCIA */
-       GPIO_FN(WE3_ICIOWR),    /* share with PCMCIA */
-       GPIO_FN(CKO),   GPIO_FN(BS),    GPIO_FN(RDWR),
-       GPIO_FN(RD_FSC),        /* share with FLCTL */
-       GPIO_FN(WAIT_PORT177), /* WAIT Port 90/177 */
-       GPIO_FN(WAIT_PORT90),
-
-       GPIO_FN(FCE0),  GPIO_FN(FCE1),  GPIO_FN(FRB), /* FLCTL */
-
-       /* IRDA */
-       GPIO_FN(IRDA_FIRSEL),   GPIO_FN(IRDA_IN),       GPIO_FN(IRDA_OUT),
-
-       /* ATAPI */
-       GPIO_FN(IDE_D0),        GPIO_FN(IDE_D1),        GPIO_FN(IDE_D2),
-       GPIO_FN(IDE_D3),        GPIO_FN(IDE_D4),        GPIO_FN(IDE_D5),
-       GPIO_FN(IDE_D6),        GPIO_FN(IDE_D7),        GPIO_FN(IDE_D8),
-       GPIO_FN(IDE_D9),        GPIO_FN(IDE_D10),       GPIO_FN(IDE_D11),
-       GPIO_FN(IDE_D12),       GPIO_FN(IDE_D13),       GPIO_FN(IDE_D14),
-       GPIO_FN(IDE_D15),       GPIO_FN(IDE_A0),        GPIO_FN(IDE_A1),
-       GPIO_FN(IDE_A2),        GPIO_FN(IDE_CS0),       GPIO_FN(IDE_CS1),
-       GPIO_FN(IDE_IOWR),      GPIO_FN(IDE_IORD),      GPIO_FN(IDE_IORDY),
-       GPIO_FN(IDE_INT),       GPIO_FN(IDE_RST),       GPIO_FN(IDE_DIRECTION),
-       GPIO_FN(IDE_EXBUF_ENB), GPIO_FN(IDE_IODACK),    GPIO_FN(IDE_IODREQ),
-
-       /* RMII */
-       GPIO_FN(RMII_CRS_DV),   GPIO_FN(RMII_RX_ER),    GPIO_FN(RMII_RXD0),
-       GPIO_FN(RMII_RXD1),     GPIO_FN(RMII_TX_EN),    GPIO_FN(RMII_TXD0),
-       GPIO_FN(RMII_MDC),      GPIO_FN(RMII_TXD1),     GPIO_FN(RMII_MDIO),
-       GPIO_FN(RMII_REF50CK),  GPIO_FN(RMII_REF125CK), /* for GMII */
-
-       /* GEther */
-       GPIO_FN(ET_TX_CLK),     GPIO_FN(ET_TX_EN),      GPIO_FN(ET_ETXD0),
-       GPIO_FN(ET_ETXD1),      GPIO_FN(ET_ETXD2),      GPIO_FN(ET_ETXD3),
-       GPIO_FN(ET_ETXD4),      GPIO_FN(ET_ETXD5), /* for GEther */
-       GPIO_FN(ET_ETXD6),      GPIO_FN(ET_ETXD7), /* for GEther */
-       GPIO_FN(ET_COL),        GPIO_FN(ET_TX_ER),      GPIO_FN(ET_RX_CLK),
-       GPIO_FN(ET_RX_DV),      GPIO_FN(ET_ERXD0),      GPIO_FN(ET_ERXD1),
-       GPIO_FN(ET_ERXD2),      GPIO_FN(ET_ERXD3),
-       GPIO_FN(ET_ERXD4),      GPIO_FN(ET_ERXD5), /* for GEther */
-       GPIO_FN(ET_ERXD6),      GPIO_FN(ET_ERXD7), /* for GEther */
-       GPIO_FN(ET_RX_ER),      GPIO_FN(ET_CRS),        GPIO_FN(ET_MDC),
-       GPIO_FN(ET_MDIO),       GPIO_FN(ET_LINK),       GPIO_FN(ET_PHY_INT),
-       GPIO_FN(ET_WOL),        GPIO_FN(ET_GTX_CLK),
-
-       /* DMA0 */
-       GPIO_FN(DREQ0), GPIO_FN(DACK0),
-
-       /* DMA1 */
-       GPIO_FN(DREQ1), GPIO_FN(DACK1),
-
-       /* SYSC */
-       GPIO_FN(RESETOUTS),
-
-       /* IRREM */
-       GPIO_FN(IROUT),
-
-       /* LCDC */
-       GPIO_FN(LCDC0_SELECT),
-       GPIO_FN(LCDC1_SELECT),
-
-       /* SDENC */
-       GPIO_FN(SDENC_CPG),
-       GPIO_FN(SDENC_DV_CLKI),
-
-       /* HDMI */
-       GPIO_FN(HDMI_HPD),
-       GPIO_FN(HDMI_CEC),
-
-       /* SYSC */
-       GPIO_FN(RESETP_PULLUP),
-       GPIO_FN(RESETP_PLAIN),
-
-       /* DEBUG */
-       GPIO_FN(EDEBGREQ_PULLDOWN),
-       GPIO_FN(EDEBGREQ_PULLUP),
-
-       GPIO_FN(TRACEAUD_FROM_VIO),
-       GPIO_FN(TRACEAUD_FROM_LCDC0),
-       GPIO_FN(TRACEAUD_FROM_MEMC),
-};
+#undef PORTCR
+#define PORTCR(nr, reg)                                                        \
+       {                                                               \
+               PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) {             \
+                       _PCRH(PORT##nr##_IN, 0, 0, PORT##nr##_OUT),     \
+                               PORT##nr##_FN0, PORT##nr##_FN1,         \
+                               PORT##nr##_FN2, PORT##nr##_FN3,         \
+                               PORT##nr##_FN4, PORT##nr##_FN5,         \
+                               PORT##nr##_FN6, PORT##nr##_FN7 }        \
+       }
 
 static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        PORTCR(0,       0xe6050000), /* PORT0CR */
@@ -2994,48 +3682,114 @@ static const struct pinmux_data_reg pinmux_data_regs[] = {
 };
 
 static const struct pinmux_irq pinmux_irqs[] = {
-       PINMUX_IRQ(irq_pin(0), GPIO_PORT2,   GPIO_PORT13),      /* IRQ0A */
-       PINMUX_IRQ(irq_pin(1), GPIO_PORT20),            /* IRQ1A */
-       PINMUX_IRQ(irq_pin(2), GPIO_PORT11,  GPIO_PORT12),      /* IRQ2A */
-       PINMUX_IRQ(irq_pin(3), GPIO_PORT10,  GPIO_PORT14),      /* IRQ3A */
-       PINMUX_IRQ(irq_pin(4), GPIO_PORT15,  GPIO_PORT172),/* IRQ4A */
-       PINMUX_IRQ(irq_pin(5), GPIO_PORT0,   GPIO_PORT1),       /* IRQ5A */
-       PINMUX_IRQ(irq_pin(6), GPIO_PORT121, GPIO_PORT173),/* IRQ6A */
-       PINMUX_IRQ(irq_pin(7), GPIO_PORT120, GPIO_PORT209),/* IRQ7A */
-       PINMUX_IRQ(irq_pin(8), GPIO_PORT119),           /* IRQ8A */
-       PINMUX_IRQ(irq_pin(9), GPIO_PORT118, GPIO_PORT210),/* IRQ9A */
-       PINMUX_IRQ(irq_pin(10), GPIO_PORT19),           /* IRQ10A */
-       PINMUX_IRQ(irq_pin(11), GPIO_PORT104),          /* IRQ11A */
-       PINMUX_IRQ(irq_pin(12), GPIO_PORT42,  GPIO_PORT97),     /* IRQ12A */
-       PINMUX_IRQ(irq_pin(13), GPIO_PORT64,  GPIO_PORT98),     /* IRQ13A */
-       PINMUX_IRQ(irq_pin(14), GPIO_PORT63,  GPIO_PORT99),     /* IRQ14A */
-       PINMUX_IRQ(irq_pin(15), GPIO_PORT62,  GPIO_PORT100),/* IRQ15A */
-       PINMUX_IRQ(irq_pin(16), GPIO_PORT68,  GPIO_PORT211),/* IRQ16A */
-       PINMUX_IRQ(irq_pin(17), GPIO_PORT69),           /* IRQ17A */
-       PINMUX_IRQ(irq_pin(18), GPIO_PORT70),           /* IRQ18A */
-       PINMUX_IRQ(irq_pin(19), GPIO_PORT71),           /* IRQ19A */
-       PINMUX_IRQ(irq_pin(20), GPIO_PORT67),           /* IRQ20A */
-       PINMUX_IRQ(irq_pin(21), GPIO_PORT202),          /* IRQ21A */
-       PINMUX_IRQ(irq_pin(22), GPIO_PORT95),           /* IRQ22A */
-       PINMUX_IRQ(irq_pin(23), GPIO_PORT96),           /* IRQ23A */
-       PINMUX_IRQ(irq_pin(24), GPIO_PORT180),          /* IRQ24A */
-       PINMUX_IRQ(irq_pin(25), GPIO_PORT38),           /* IRQ25A */
-       PINMUX_IRQ(irq_pin(26), GPIO_PORT58,  GPIO_PORT81),     /* IRQ26A */
-       PINMUX_IRQ(irq_pin(27), GPIO_PORT57,  GPIO_PORT168),/* IRQ27A */
-       PINMUX_IRQ(irq_pin(28), GPIO_PORT56,  GPIO_PORT169),/* IRQ28A */
-       PINMUX_IRQ(irq_pin(29), GPIO_PORT50,  GPIO_PORT170),/* IRQ29A */
-       PINMUX_IRQ(irq_pin(30), GPIO_PORT49,  GPIO_PORT171),/* IRQ30A */
-       PINMUX_IRQ(irq_pin(31), GPIO_PORT41,  GPIO_PORT167),/* IRQ31A */
+       PINMUX_IRQ(irq_pin(0), 2,   13),        /* IRQ0A */
+       PINMUX_IRQ(irq_pin(1), 20),             /* IRQ1A */
+       PINMUX_IRQ(irq_pin(2), 11,  12),        /* IRQ2A */
+       PINMUX_IRQ(irq_pin(3), 10,  14),        /* IRQ3A */
+       PINMUX_IRQ(irq_pin(4), 15,  172),       /* IRQ4A */
+       PINMUX_IRQ(irq_pin(5), 0,   1),         /* IRQ5A */
+       PINMUX_IRQ(irq_pin(6), 121, 173),       /* IRQ6A */
+       PINMUX_IRQ(irq_pin(7), 120, 209),       /* IRQ7A */
+       PINMUX_IRQ(irq_pin(8), 119),            /* IRQ8A */
+       PINMUX_IRQ(irq_pin(9), 118, 210),       /* IRQ9A */
+       PINMUX_IRQ(irq_pin(10), 19),            /* IRQ10A */
+       PINMUX_IRQ(irq_pin(11), 104),           /* IRQ11A */
+       PINMUX_IRQ(irq_pin(12), 42,  97),       /* IRQ12A */
+       PINMUX_IRQ(irq_pin(13), 64,  98),       /* IRQ13A */
+       PINMUX_IRQ(irq_pin(14), 63,  99),       /* IRQ14A */
+       PINMUX_IRQ(irq_pin(15), 62,  100),      /* IRQ15A */
+       PINMUX_IRQ(irq_pin(16), 68,  211),      /* IRQ16A */
+       PINMUX_IRQ(irq_pin(17), 69),            /* IRQ17A */
+       PINMUX_IRQ(irq_pin(18), 70),            /* IRQ18A */
+       PINMUX_IRQ(irq_pin(19), 71),            /* IRQ19A */
+       PINMUX_IRQ(irq_pin(20), 67),            /* IRQ20A */
+       PINMUX_IRQ(irq_pin(21), 202),           /* IRQ21A */
+       PINMUX_IRQ(irq_pin(22), 95),            /* IRQ22A */
+       PINMUX_IRQ(irq_pin(23), 96),            /* IRQ23A */
+       PINMUX_IRQ(irq_pin(24), 180),           /* IRQ24A */
+       PINMUX_IRQ(irq_pin(25), 38),            /* IRQ25A */
+       PINMUX_IRQ(irq_pin(26), 58,  81),       /* IRQ26A */
+       PINMUX_IRQ(irq_pin(27), 57,  168),      /* IRQ27A */
+       PINMUX_IRQ(irq_pin(28), 56,  169),      /* IRQ28A */
+       PINMUX_IRQ(irq_pin(29), 50,  170),      /* IRQ29A */
+       PINMUX_IRQ(irq_pin(30), 49,  171),      /* IRQ30A */
+       PINMUX_IRQ(irq_pin(31), 41,  167),      /* IRQ31A */
+};
+
+#define PORTnCR_PULMD_OFF      (0 << 6)
+#define PORTnCR_PULMD_DOWN     (2 << 6)
+#define PORTnCR_PULMD_UP       (3 << 6)
+#define PORTnCR_PULMD_MASK     (3 << 6)
+
+struct r8a7740_portcr_group {
+       unsigned int end_pin;
+       unsigned int offset;
+};
+
+static const struct r8a7740_portcr_group r8a7740_portcr_offsets[] = {
+       { 83, 0x0000 }, { 114, 0x1000 }, { 209, 0x2000 }, { 211, 0x3000 },
+};
+
+static void __iomem *r8a7740_pinmux_portcr(struct sh_pfc *pfc, unsigned int pin)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(r8a7740_portcr_offsets); ++i) {
+               const struct r8a7740_portcr_group *group =
+                       &r8a7740_portcr_offsets[i];
+
+               if (i <= group->end_pin)
+                       return pfc->window->virt + group->offset + pin;
+       }
+
+       return NULL;
+}
+
+static unsigned int r8a7740_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin)
+{
+       void __iomem *addr = r8a7740_pinmux_portcr(pfc, pin);
+       u32 value = ioread8(addr) & PORTnCR_PULMD_MASK;
+
+       switch (value) {
+       case PORTnCR_PULMD_UP:
+               return PIN_CONFIG_BIAS_PULL_UP;
+       case PORTnCR_PULMD_DOWN:
+               return PIN_CONFIG_BIAS_PULL_DOWN;
+       case PORTnCR_PULMD_OFF:
+       default:
+               return PIN_CONFIG_BIAS_DISABLE;
+       }
+}
+
+static void r8a7740_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
+                                  unsigned int bias)
+{
+       void __iomem *addr = r8a7740_pinmux_portcr(pfc, pin);
+       u32 value = ioread8(addr) & ~PORTnCR_PULMD_MASK;
+
+       switch (bias) {
+       case PIN_CONFIG_BIAS_PULL_UP:
+               value |= PORTnCR_PULMD_UP;
+               break;
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               value |= PORTnCR_PULMD_DOWN;
+               break;
+       }
+
+       iowrite8(value, addr);
+}
+
+static const struct sh_pfc_soc_operations r8a7740_pinmux_ops = {
+       .get_bias = r8a7740_pinmux_get_bias,
+       .set_bias = r8a7740_pinmux_set_bias,
 };
 
 const struct sh_pfc_soc_info r8a7740_pinmux_info = {
        .name           = "r8a7740_pfc",
+       .ops            = &r8a7740_pinmux_ops,
+
        .input          = { PINMUX_INPUT_BEGIN,
                            PINMUX_INPUT_END },
-       .input_pu       = { PINMUX_INPUT_PULLUP_BEGIN,
-                           PINMUX_INPUT_PULLUP_END },
-       .input_pd       = { PINMUX_INPUT_PULLDOWN_BEGIN,
-                           PINMUX_INPUT_PULLDOWN_END },
        .output         = { PINMUX_OUTPUT_BEGIN,
                            PINMUX_OUTPUT_END },
        .function       = { PINMUX_FUNCTION_BEGIN,
@@ -3048,9 +3802,6 @@ const struct sh_pfc_soc_info r8a7740_pinmux_info = {
        .functions      = pinmux_functions,
        .nr_functions   = ARRAY_SIZE(pinmux_functions),
 
-       .func_gpios     = pinmux_func_gpios,
-       .nr_func_gpios  = ARRAY_SIZE(pinmux_func_gpios),
-
        .cfg_regs       = pinmux_config_regs,
        .data_regs      = pinmux_data_regs,
 
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7778.c b/drivers/pinctrl/sh-pfc/pfc-r8a7778.c
new file mode 100644 (file)
index 0000000..1dcbabc
--- /dev/null
@@ -0,0 +1,2783 @@
+/*
+ * r8a7778 processor support - PFC hardware block
+ *
+ * Copyright (C) 2013  Renesas Solutions Corp.
+ * Copyright (C) 2013  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ * Copyright (C) 2013  Cogent Embedded, Inc.
+ *
+ * based on
+ * Copyright (C) 2011  Renesas Solutions Corp.
+ * Copyright (C) 2011  Magnus Damm
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/platform_data/gpio-rcar.h>
+#include <linux/kernel.h>
+#include "sh_pfc.h"
+
+#define PORT_GP_1(bank, pin, fn, sfx) fn(bank, pin, GP_##bank##_##pin, sfx)
+
+#define PORT_GP_32(bank, fn, sfx)                                      \
+       PORT_GP_1(bank, 0,  fn, sfx), PORT_GP_1(bank, 1,  fn, sfx),     \
+       PORT_GP_1(bank, 2,  fn, sfx), PORT_GP_1(bank, 3,  fn, sfx),     \
+       PORT_GP_1(bank, 4,  fn, sfx), PORT_GP_1(bank, 5,  fn, sfx),     \
+       PORT_GP_1(bank, 6,  fn, sfx), PORT_GP_1(bank, 7,  fn, sfx),     \
+       PORT_GP_1(bank, 8,  fn, sfx), PORT_GP_1(bank, 9,  fn, sfx),     \
+       PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx),     \
+       PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx),     \
+       PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx),     \
+       PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx),     \
+       PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx),     \
+       PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx),     \
+       PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx),     \
+       PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx),     \
+       PORT_GP_1(bank, 26, fn, sfx), PORT_GP_1(bank, 27, fn, sfx),     \
+       PORT_GP_1(bank, 28, fn, sfx), PORT_GP_1(bank, 29, fn, sfx),     \
+       PORT_GP_1(bank, 30, fn, sfx), PORT_GP_1(bank, 31, fn, sfx)
+
+#define PORT_GP_27(bank, fn, sfx)                                      \
+       PORT_GP_1(bank, 0,  fn, sfx), PORT_GP_1(bank, 1,  fn, sfx),     \
+       PORT_GP_1(bank, 2,  fn, sfx), PORT_GP_1(bank, 3,  fn, sfx),     \
+       PORT_GP_1(bank, 4,  fn, sfx), PORT_GP_1(bank, 5,  fn, sfx),     \
+       PORT_GP_1(bank, 6,  fn, sfx), PORT_GP_1(bank, 7,  fn, sfx),     \
+       PORT_GP_1(bank, 8,  fn, sfx), PORT_GP_1(bank, 9,  fn, sfx),     \
+       PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx),     \
+       PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx),     \
+       PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx),     \
+       PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx),     \
+       PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx),     \
+       PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx),     \
+       PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx),     \
+       PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx),     \
+       PORT_GP_1(bank, 26, fn, sfx)
+
+#define CPU_ALL_PORT(fn, sfx)          \
+       PORT_GP_32(0, fn, sfx),         \
+       PORT_GP_32(1, fn, sfx),         \
+       PORT_GP_32(2, fn, sfx),         \
+       PORT_GP_32(3, fn, sfx),         \
+       PORT_GP_27(4, fn, sfx)
+
+#define _GP_PORT_ALL(bank, pin, name, sfx)     name##_##sfx
+
+#define _GP_GPIO(bank, pin, _name, sfx)                \
+       [RCAR_GP_PIN(bank, pin)] = {            \
+               .name = __stringify(_name),     \
+               .enum_id = _name##_DATA,        \
+       }
+
+#define _GP_DATA(bank, pin, name, sfx)         \
+       PINMUX_DATA(name##_DATA, name##_FN)
+
+#define GP_ALL(str)            CPU_ALL_PORT(_GP_PORT_ALL, str)
+#define PINMUX_GPIO_GP_ALL()   CPU_ALL_PORT(_GP_GPIO, unused)
+#define PINMUX_DATA_GP_ALL()   CPU_ALL_PORT(_GP_DATA, unused)
+
+#define PINMUX_IPSR_NOGP(ispr, fn)     PINMUX_DATA(fn##_MARK, FN_##fn)
+#define PINMUX_IPSR_DATA(ipsr, fn)     PINMUX_DATA(fn##_MARK, FN_##fn, FN_##ipsr)
+#define PINMUX_IPSR_MSEL(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##fn, FN_##ipsr, FN_##ms)
+#define PINMUX_IPSR_NOGM(ispr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##fn,            FN_##ms)
+
+enum {
+       PINMUX_RESERVED = 0,
+
+       PINMUX_DATA_BEGIN,
+       GP_ALL(DATA), /* GP_0_0_DATA -> GP_4_26_DATA */
+       PINMUX_DATA_END,
+
+       PINMUX_FUNCTION_BEGIN,
+       GP_ALL(FN), /* GP_0_0_FN -> GP_4_26_FN */
+
+       /* GPSR0 */
+       FN_IP0_1_0,     FN_PENC0,       FN_PENC1,       FN_IP0_4_2,
+       FN_IP0_7_5,     FN_IP0_11_8,    FN_IP0_14_12,   FN_A1,
+       FN_A2,          FN_A3,          FN_IP0_15,      FN_IP0_16,
+       FN_IP0_17,      FN_IP0_18,      FN_IP0_19,      FN_IP0_20,
+       FN_IP0_21,      FN_IP0_22,      FN_IP0_23,      FN_IP0_24,
+       FN_IP0_25,      FN_IP0_26,      FN_IP0_27,      FN_IP0_28,
+       FN_IP0_29,      FN_IP0_30,      FN_IP1_0,       FN_IP1_1,
+       FN_IP1_4_2,     FN_IP1_7_5,     FN_IP1_10_8,    FN_IP1_14_11,
+
+       /* GPSR1 */
+       FN_IP1_23_21,   FN_WE0,         FN_IP1_24,      FN_IP1_27_25,
+       FN_IP1_29_28,   FN_IP2_2_0,     FN_IP2_5_3,     FN_IP2_8_6,
+       FN_IP2_11_9,    FN_IP2_13_12,   FN_IP2_16_14,   FN_IP2_17,
+       FN_IP2_30,      FN_IP2_31,      FN_IP3_1_0,     FN_IP3_4_2,
+       FN_IP3_7_5,     FN_IP3_9_8,     FN_IP3_12_10,   FN_IP3_15_13,
+       FN_IP3_18_16,   FN_IP3_20_19,   FN_IP3_23_21,   FN_IP3_26_24,
+       FN_IP3_27,      FN_IP3_28,      FN_IP3_29,      FN_IP3_30,
+       FN_IP3_31,      FN_IP4_0,       FN_IP4_3_1,     FN_IP4_6_4,
+
+       /* GPSR2 */
+       FN_IP4_7,       FN_IP4_8,       FN_IP4_10_9,    FN_IP4_12_11,
+       FN_IP4_14_13,   FN_IP4_16_15,   FN_IP4_20_17,   FN_IP4_24_21,
+       FN_IP4_26_25,   FN_IP4_28_27,   FN_IP4_30_29,   FN_IP5_1_0,
+       FN_IP5_3_2,     FN_IP5_5_4,     FN_IP5_6,       FN_IP5_7,
+       FN_IP5_9_8,     FN_IP5_11_10,   FN_IP5_12,      FN_IP5_14_13,
+       FN_IP5_17_15,   FN_IP5_20_18,   FN_AUDIO_CLKA,  FN_AUDIO_CLKB,
+       FN_IP5_22_21,   FN_IP5_25_23,   FN_IP5_28_26,   FN_IP5_30_29,
+       FN_IP6_1_0,     FN_IP6_4_2,     FN_IP6_6_5,     FN_IP6_7,
+
+       /* GPSR3 */
+       FN_IP6_8,       FN_IP6_9,       FN_SSI_SCK34,   FN_IP6_10,
+       FN_IP6_12_11,   FN_IP6_13,      FN_IP6_15_14,   FN_IP6_16,
+       FN_IP6_18_17,   FN_IP6_20_19,   FN_IP6_21,      FN_IP6_23_22,
+       FN_IP6_25_24,   FN_IP6_27_26,   FN_IP6_29_28,   FN_IP6_31_30,
+       FN_IP7_1_0,     FN_IP7_3_2,     FN_IP7_5_4,     FN_IP7_8_6,
+       FN_IP7_11_9,    FN_IP7_14_12,   FN_IP7_17_15,   FN_IP7_20_18,
+       FN_IP7_21,      FN_IP7_24_22,   FN_IP7_28_25,   FN_IP7_31_29,
+       FN_IP8_2_0,     FN_IP8_5_3,     FN_IP8_8_6,     FN_IP8_10_9,
+
+       /* GPSR4 */
+       FN_IP8_13_11,   FN_IP8_15_14,   FN_IP8_18_16,   FN_IP8_21_19,
+       FN_IP8_23_22,   FN_IP8_26_24,   FN_IP8_29_27,   FN_IP9_2_0,
+       FN_IP9_5_3,     FN_IP9_8_6,     FN_IP9_11_9,    FN_IP9_14_12,
+       FN_IP9_17_15,   FN_IP9_20_18,   FN_IP9_23_21,   FN_IP9_26_24,
+       FN_IP9_29_27,   FN_IP10_2_0,    FN_IP10_5_3,    FN_IP10_8_6,
+       FN_IP10_12_9,   FN_IP10_15_13,  FN_IP10_18_16,  FN_IP10_21_19,
+       FN_IP10_24_22,  FN_AVS1,        FN_AVS2,
+
+       /* IPSR0 */
+       FN_PRESETOUT,   FN_PWM1,        FN_AUDATA0,     FN_ARM_TRACEDATA_0,
+       FN_GPSCLK_C,    FN_USB_OVC0,    FN_TX2_E,       FN_SDA2_B,
+       FN_AUDATA1,     FN_ARM_TRACEDATA_1,             FN_GPSIN_C,
+       FN_USB_OVC1,    FN_RX2_E,       FN_SCL2_B,      FN_SD1_DAT2_A,
+       FN_MMC_D2,      FN_BS,          FN_ATADIR0_A,   FN_SDSELF_A,
+       FN_PWM4_B,      FN_SD1_DAT3_A,  FN_MMC_D3,      FN_A0,
+       FN_ATAG0_A,     FN_REMOCON_B,   FN_A4,          FN_A5,
+       FN_A6,          FN_A7,          FN_A8,          FN_A9,
+       FN_A10,         FN_A11,         FN_A12,         FN_A13,
+       FN_A14,         FN_A15,         FN_A16,         FN_A17,
+       FN_A18,         FN_A19,
+
+       /* IPSR1 */
+       FN_A20,         FN_HSPI_CS1_B,  FN_A21,         FN_HSPI_CLK1_B,
+       FN_A22,         FN_HRTS0_B,     FN_RX2_B,       FN_DREQ2_A,
+       FN_A23,         FN_HTX0_B,      FN_TX2_B,       FN_DACK2_A,
+       FN_TS_SDEN0_A,  FN_SD1_CD_A,    FN_MMC_D6,      FN_A24,
+       FN_DREQ1_A,     FN_HRX0_B,      FN_TS_SPSYNC0_A,
+       FN_SD1_WP_A,    FN_MMC_D7,      FN_A25, FN_DACK1_A,
+       FN_HCTS0_B,     FN_RX3_C,       FN_TS_SDAT0_A,  FN_CLKOUT,
+       FN_HSPI_TX1_B,  FN_PWM0_B,      FN_CS0,         FN_HSPI_RX1_B,
+       FN_SSI_SCK1_B,  FN_ATAG0_B,     FN_CS1_A26,     FN_SDA2_A,
+       FN_SCK2_B,      FN_MMC_D5,      FN_ATADIR0_B,   FN_RD_WR,
+       FN_WE1,         FN_ATAWR0_B,    FN_SSI_WS1_B,   FN_EX_CS0,
+       FN_SCL2_A,      FN_TX3_C,       FN_TS_SCK0_A,   FN_EX_CS1,
+       FN_MMC_D4,
+
+       /* IPSR2 */
+       FN_SD1_CLK_A,   FN_MMC_CLK,     FN_ATACS00,     FN_EX_CS2,
+       FN_SD1_CMD_A,   FN_MMC_CMD,     FN_ATACS10,     FN_EX_CS3,
+       FN_SD1_DAT0_A,  FN_MMC_D0,      FN_ATARD0,      FN_EX_CS4,
+       FN_EX_WAIT1_A,  FN_SD1_DAT1_A,  FN_MMC_D1,      FN_ATAWR0_A,
+       FN_EX_CS5,      FN_EX_WAIT2_A,  FN_DREQ0_A,     FN_RX3_A,
+       FN_DACK0,       FN_TX3_A,       FN_DRACK0,      FN_EX_WAIT0,
+       FN_PWM0_C,      FN_D0,          FN_D1,          FN_D2,
+       FN_D3,          FN_D4,          FN_D5,          FN_D6,
+       FN_D7,          FN_D8,          FN_D9,          FN_D10,
+       FN_D11,         FN_RD_WR_B,     FN_IRQ0,        FN_MLB_CLK,
+       FN_IRQ1_A,
+
+       /* IPSR3 */
+       FN_MLB_SIG,     FN_RX5_B,       FN_SDA3_A,      FN_IRQ2_A,
+       FN_MLB_DAT,     FN_TX5_B,       FN_SCL3_A,      FN_IRQ3_A,
+       FN_SDSELF_B,    FN_SD1_CMD_B,   FN_SCIF_CLK,    FN_AUDIO_CLKOUT_B,
+       FN_CAN_CLK_B,   FN_SDA3_B,      FN_SD1_CLK_B,   FN_HTX0_A,
+       FN_TX0_A,       FN_SD1_DAT0_B,  FN_HRX0_A,      FN_RX0_A,
+       FN_SD1_DAT1_B,  FN_HSCK0,       FN_SCK0,        FN_SCL3_B,
+       FN_SD1_DAT2_B,  FN_HCTS0_A,     FN_CTS0,        FN_SD1_DAT3_B,
+       FN_HRTS0_A,     FN_RTS0,        FN_SSI_SCK4,    FN_DU0_DR0,
+       FN_LCDOUT0,     FN_AUDATA2,     FN_ARM_TRACEDATA_2,
+       FN_SDA3_C,      FN_ADICHS1,     FN_TS_SDEN0_B,  FN_SSI_WS4,
+       FN_DU0_DR1,     FN_LCDOUT1,     FN_AUDATA3,     FN_ARM_TRACEDATA_3,
+       FN_SCL3_C,      FN_ADICHS2,     FN_TS_SPSYNC0_B,
+       FN_DU0_DR2,     FN_LCDOUT2,     FN_DU0_DR3,     FN_LCDOUT3,
+       FN_DU0_DR4,     FN_LCDOUT4,     FN_DU0_DR5,     FN_LCDOUT5,
+       FN_DU0_DR6,     FN_LCDOUT6,
+
+       /* IPSR4 */
+       FN_DU0_DR7,     FN_LCDOUT7,     FN_DU0_DG0,     FN_LCDOUT8,
+       FN_AUDATA4,     FN_ARM_TRACEDATA_4,             FN_TX1_D,
+       FN_CAN0_TX_A,   FN_ADICHS0,     FN_DU0_DG1,     FN_LCDOUT9,
+       FN_AUDATA5,     FN_ARM_TRACEDATA_5,             FN_RX1_D,
+       FN_CAN0_RX_A,   FN_ADIDATA,     FN_DU0_DG2,     FN_LCDOUT10,
+       FN_DU0_DG3,     FN_LCDOUT11,    FN_DU0_DG4,     FN_LCDOUT12,
+       FN_RX0_B,       FN_DU0_DG5,     FN_LCDOUT13,    FN_TX0_B,
+       FN_DU0_DG6,     FN_LCDOUT14,    FN_RX4_A,       FN_DU0_DG7,
+       FN_LCDOUT15,    FN_TX4_A,       FN_SSI_SCK2_B,  FN_VI0_R0_B,
+       FN_DU0_DB0,     FN_LCDOUT16,    FN_AUDATA6,     FN_ARM_TRACEDATA_6,
+       FN_GPSCLK_A,    FN_PWM0_A,      FN_ADICLK,      FN_TS_SDAT0_B,
+       FN_AUDIO_CLKC,  FN_VI0_R1_B,    FN_DU0_DB1,     FN_LCDOUT17,
+       FN_AUDATA7,     FN_ARM_TRACEDATA_7,             FN_GPSIN_A,
+       FN_ADICS_SAMP,  FN_TS_SCK0_B,   FN_VI0_R2_B,    FN_DU0_DB2,
+       FN_LCDOUT18,    FN_VI0_R3_B,    FN_DU0_DB3,     FN_LCDOUT19,
+       FN_VI0_R4_B,    FN_DU0_DB4,     FN_LCDOUT20,
+
+       /* IPSR5 */
+       FN_VI0_R5_B,    FN_DU0_DB5,     FN_LCDOUT21,    FN_VI1_DATA10_B,
+       FN_DU0_DB6,     FN_LCDOUT22,    FN_VI1_DATA11_B,
+       FN_DU0_DB7,     FN_LCDOUT23,    FN_DU0_DOTCLKIN,
+       FN_QSTVA_QVS,   FN_DU0_DOTCLKO_UT0,             FN_QCLK,
+       FN_DU0_DOTCLKO_UT1,             FN_QSTVB_QVE,   FN_AUDIO_CLKOUT_A,
+       FN_REMOCON_C,   FN_SSI_WS2_B,   FN_DU0_EXHSYNC_DU0_HSYNC,
+       FN_QSTH_QHS,    FN_DU0_EXVSYNC_DU0_VSYNC,       FN_QSTB_QHE,
+       FN_DU0_EXODDF_DU0_ODDF_DISP_CDE,
+       FN_QCPV_QDE,    FN_FMCLK_D,     FN_SSI_SCK1_A,  FN_DU0_DISP,
+       FN_QPOLA,       FN_AUDCK,       FN_ARM_TRACECLK,
+       FN_BPFCLK_D,    FN_SSI_WS1_A,   FN_DU0_CDE,     FN_QPOLB,
+       FN_AUDSYNC,     FN_ARM_TRACECTL,                FN_FMIN_D,
+       FN_SD1_CD_B,    FN_SSI_SCK78,   FN_HSPI_RX0_B,  FN_TX1_B,
+       FN_SD1_WP_B,    FN_SSI_WS78,    FN_HSPI_CLK0_B, FN_RX1_B,
+       FN_CAN_CLK_D,   FN_SSI_SDATA8,  FN_SSI_SCK2_A,  FN_HSPI_CS0_B,
+       FN_TX2_A,       FN_CAN0_TX_B,   FN_SSI_SDATA7,  FN_HSPI_TX0_B,
+       FN_RX2_A,       FN_CAN0_RX_B,
+
+       /* IPSR6 */
+       FN_SSI_SCK6,    FN_HSPI_RX2_A,  FN_FMCLK_B,     FN_CAN1_TX_B,
+       FN_SSI_WS6,     FN_HSPI_CLK2_A, FN_BPFCLK_B,    FN_CAN1_RX_B,
+       FN_SSI_SDATA6,  FN_HSPI_TX2_A,  FN_FMIN_B,      FN_SSI_SCK5,
+       FN_RX4_C,       FN_SSI_WS5,     FN_TX4_C,       FN_SSI_SDATA5,
+       FN_RX0_D,       FN_SSI_WS34,    FN_ARM_TRACEDATA_8,
+       FN_SSI_SDATA4,  FN_SSI_WS2_A,   FN_ARM_TRACEDATA_9,
+       FN_SSI_SDATA3,  FN_ARM_TRACEDATA_10,
+       FN_SSI_SCK012,  FN_ARM_TRACEDATA_11,
+       FN_TX0_D,       FN_SSI_WS012,   FN_ARM_TRACEDATA_12,
+       FN_SSI_SDATA2,  FN_HSPI_CS2_A,  FN_ARM_TRACEDATA_13,
+       FN_SDA1_A,      FN_SSI_SDATA1,  FN_ARM_TRACEDATA_14,
+       FN_SCL1_A,      FN_SCK2_A,      FN_SSI_SDATA0,
+       FN_ARM_TRACEDATA_15,
+       FN_SD0_CLK,     FN_SUB_TDO,     FN_SD0_CMD,     FN_SUB_TRST,
+       FN_SD0_DAT0,    FN_SUB_TMS,     FN_SD0_DAT1,    FN_SUB_TCK,
+       FN_SD0_DAT2,    FN_SUB_TDI,
+
+       /* IPSR7 */
+       FN_SD0_DAT3,    FN_IRQ1_B,      FN_SD0_CD,      FN_TX5_A,
+       FN_SD0_WP,      FN_RX5_A,       FN_VI1_CLKENB,  FN_HSPI_CLK0_A,
+       FN_HTX1_A,      FN_RTS1_C,      FN_VI1_FIELD,   FN_HSPI_CS0_A,
+       FN_HRX1_A,      FN_SCK1_C,      FN_VI1_HSYNC,   FN_HSPI_RX0_A,
+       FN_HRTS1_A,     FN_FMCLK_A,     FN_RX1_C,       FN_VI1_VSYNC,
+       FN_HSPI_TX0,    FN_HCTS1_A,     FN_BPFCLK_A,    FN_TX1_C,
+       FN_TCLK0,       FN_HSCK1_A,     FN_FMIN_A,      FN_IRQ2_C,
+       FN_CTS1_C,      FN_SPEEDIN,     FN_VI0_CLK,     FN_CAN_CLK_A,
+       FN_VI0_CLKENB,  FN_SD2_DAT2_B,  FN_VI1_DATA0,   FN_DU1_DG6,
+       FN_HSPI_RX1_A,  FN_RX4_B,       FN_VI0_FIELD,   FN_SD2_DAT3_B,
+       FN_VI0_R3_C,    FN_VI1_DATA1,   FN_DU1_DG7,     FN_HSPI_CLK1_A,
+       FN_TX4_B,       FN_VI0_HSYNC,   FN_SD2_CD_B,    FN_VI1_DATA2,
+       FN_DU1_DR2,     FN_HSPI_CS1_A,  FN_RX3_B,
+
+       /* IPSR8 */
+       FN_VI0_VSYNC,   FN_SD2_WP_B,    FN_VI1_DATA3,   FN_DU1_DR3,
+       FN_HSPI_TX1_A,  FN_TX3_B,       FN_VI0_DATA0_VI0_B0,
+       FN_DU1_DG2,     FN_IRQ2_B,      FN_RX3_D,       FN_VI0_DATA1_VI0_B1,
+       FN_DU1_DG3,     FN_IRQ3_B,      FN_TX3_D,       FN_VI0_DATA2_VI0_B2,
+       FN_DU1_DG4,     FN_RX0_C,       FN_VI0_DATA3_VI0_B3,
+       FN_DU1_DG5,     FN_TX1_A,       FN_TX0_C,       FN_VI0_DATA4_VI0_B4,
+       FN_DU1_DB2,     FN_RX1_A,       FN_VI0_DATA5_VI0_B5,
+       FN_DU1_DB3,     FN_SCK1_A,      FN_PWM4,        FN_HSCK1_B,
+       FN_VI0_DATA6_VI0_G0,            FN_DU1_DB4,     FN_CTS1_A,
+       FN_PWM5,        FN_VI0_DATA7_VI0_G1,            FN_DU1_DB5,
+       FN_RTS1_A,      FN_VI0_G2,      FN_SD2_CLK_B,   FN_VI1_DATA4,
+       FN_DU1_DR4,     FN_HTX1_B,      FN_VI0_G3,      FN_SD2_CMD_B,
+       FN_VI1_DATA5,   FN_DU1_DR5,     FN_HRX1_B,
+
+       /* IPSR9 */
+       FN_VI0_G4,      FN_SD2_DAT0_B,  FN_VI1_DATA6,   FN_DU1_DR6,
+       FN_HRTS1_B,     FN_VI0_G5,      FN_SD2_DAT1_B,  FN_VI1_DATA7,
+       FN_DU1_DR7,     FN_HCTS1_B,     FN_VI0_R0_A,    FN_VI1_CLK,
+       FN_ETH_REF_CLK, FN_DU1_DOTCLKIN,                FN_VI0_R1_A,
+       FN_VI1_DATA8,   FN_DU1_DB6,     FN_ETH_TXD0,    FN_PWM2,
+       FN_TCLK1,       FN_VI0_R2_A,    FN_VI1_DATA9,   FN_DU1_DB7,
+       FN_ETH_TXD1,    FN_PWM3,        FN_VI0_R3_A,    FN_ETH_CRS_DV,
+       FN_IECLK,       FN_SCK2_C,      FN_VI0_R4_A,    FN_ETH_TX_EN,
+       FN_IETX,        FN_TX2_C,       FN_VI0_R5_A,    FN_ETH_RX_ER,
+       FN_FMCLK_C,     FN_IERX,        FN_RX2_C,       FN_VI1_DATA10_A,
+       FN_DU1_DOTCLKOUT,               FN_ETH_RXD0,    FN_BPFCLK_C,
+       FN_TX2_D,       FN_SDA2_C,      FN_VI1_DATA11_A,
+       FN_DU1_EXHSYNC_DU1_HSYNC,       FN_ETH_RXD1,    FN_FMIN_C,
+       FN_RX2_D,       FN_SCL2_C,
+
+       /* IPSR10 */
+       FN_SD2_CLK_A,   FN_DU1_EXVSYNC_DU1_VSYNC,       FN_ATARD1,
+       FN_ETH_MDC,     FN_SDA1_B,      FN_SD2_CMD_A,
+       FN_DU1_EXODDF_DU1_ODDF_DISP_CDE,                FN_ATAWR1,
+       FN_ETH_MDIO,    FN_SCL1_B,      FN_SD2_DAT0_A,  FN_DU1_DISP,
+       FN_ATACS01,     FN_DREQ1_B,     FN_ETH_LINK,    FN_CAN1_RX_A,
+       FN_SD2_DAT1_A,  FN_DU1_CDE,     FN_ATACS11,     FN_DACK1_B,
+       FN_ETH_MAGIC,   FN_CAN1_TX_A,   FN_PWM6,        FN_SD2_DAT2_A,
+       FN_VI1_DATA12,  FN_DREQ2_B,     FN_ATADIR1,     FN_HSPI_CLK2_B,
+       FN_GPSCLK_B,    FN_SD2_DAT3_A,  FN_VI1_DATA13,  FN_DACK2_B,
+       FN_ATAG1,       FN_HSPI_CS2_B,  FN_GPSIN_B,     FN_SD2_CD_A,
+       FN_VI1_DATA14,  FN_EX_WAIT1_B,  FN_DREQ0_B,     FN_HSPI_RX2_B,
+       FN_REMOCON_A,   FN_SD2_WP_A,    FN_VI1_DATA15,  FN_EX_WAIT2_B,
+       FN_DACK0_B,     FN_HSPI_TX2_B,  FN_CAN_CLK_C,
+
+       /* SEL */
+       FN_SEL_SCIF5_A, FN_SEL_SCIF5_B,
+       FN_SEL_SCIF4_A, FN_SEL_SCIF4_B, FN_SEL_SCIF4_C,
+       FN_SEL_SCIF3_A, FN_SEL_SCIF3_B, FN_SEL_SCIF3_C, FN_SEL_SCIF3_D,
+       FN_SEL_SCIF2_A, FN_SEL_SCIF2_B, FN_SEL_SCIF2_C, FN_SEL_SCIF2_D, FN_SEL_SCIF2_E,
+       FN_SEL_SCIF1_A, FN_SEL_SCIF1_B, FN_SEL_SCIF1_C, FN_SEL_SCIF1_D,
+       FN_SEL_SCIF0_A, FN_SEL_SCIF0_B, FN_SEL_SCIF0_C, FN_SEL_SCIF0_D,
+       FN_SEL_SSI2_A,  FN_SEL_SSI2_B,
+       FN_SEL_SSI1_A,  FN_SEL_SSI1_B,
+       FN_SEL_VI1_A,   FN_SEL_VI1_B,
+       FN_SEL_VI0_A,   FN_SEL_VI0_B,   FN_SEL_VI0_C,   FN_SEL_VI0_D,
+       FN_SEL_SD2_A,   FN_SEL_SD2_B,
+       FN_SEL_SD1_A,   FN_SEL_SD1_B,
+       FN_SEL_IRQ3_A,  FN_SEL_IRQ3_B,
+       FN_SEL_IRQ2_A,  FN_SEL_IRQ2_B,  FN_SEL_IRQ2_C,
+       FN_SEL_IRQ1_A,  FN_SEL_IRQ1_B,
+       FN_SEL_DREQ2_A, FN_SEL_DREQ2_B,
+       FN_SEL_DREQ1_A, FN_SEL_DREQ1_B,
+       FN_SEL_DREQ0_A, FN_SEL_DREQ0_B,
+       FN_SEL_WAIT2_A, FN_SEL_WAIT2_B,
+       FN_SEL_WAIT1_A, FN_SEL_WAIT1_B,
+       FN_SEL_CAN1_A,  FN_SEL_CAN1_B,
+       FN_SEL_CAN0_A,  FN_SEL_CAN0_B,
+       FN_SEL_CANCLK_A,        FN_SEL_CANCLK_B,
+       FN_SEL_CANCLK_C,        FN_SEL_CANCLK_D,
+       FN_SEL_HSCIF1_A,        FN_SEL_HSCIF1_B,
+       FN_SEL_HSCIF0_A,        FN_SEL_HSCIF0_B,
+       FN_SEL_REMOCON_A,       FN_SEL_REMOCON_B,       FN_SEL_REMOCON_C,
+       FN_SEL_FM_A,    FN_SEL_FM_B,    FN_SEL_FM_C,    FN_SEL_FM_D,
+       FN_SEL_GPS_A,   FN_SEL_GPS_B,   FN_SEL_GPS_C,
+       FN_SEL_TSIF0_A, FN_SEL_TSIF0_B,
+       FN_SEL_HSPI2_A, FN_SEL_HSPI2_B,
+       FN_SEL_HSPI1_A, FN_SEL_HSPI1_B,
+       FN_SEL_HSPI0_A, FN_SEL_HSPI0_B,
+       FN_SEL_I2C3_A,  FN_SEL_I2C3_B,  FN_SEL_I2C3_C,
+       FN_SEL_I2C2_A,  FN_SEL_I2C2_B,  FN_SEL_I2C2_C,
+       FN_SEL_I2C1_A,  FN_SEL_I2C1_B,
+       PINMUX_FUNCTION_END,
+
+       PINMUX_MARK_BEGIN,
+
+       /* GPSR0 */
+       PENC0_MARK,     PENC1_MARK,     A1_MARK,        A2_MARK,        A3_MARK,
+
+       /* GPSR1 */
+       WE0_MARK,
+
+       /* GPSR2 */
+       AUDIO_CLKA_MARK,
+       AUDIO_CLKB_MARK,
+
+       /* GPSR3 */
+       SSI_SCK34_MARK,
+
+       /* GPSR4 */
+       AVS1_MARK,
+       AVS2_MARK,
+
+       VI0_R0_C_MARK,          /* see sel_vi0 */
+       VI0_R1_C_MARK,          /* see sel_vi0 */
+       VI0_R2_C_MARK,          /* see sel_vi0 */
+       /* VI0_R3_C_MARK, */
+       VI0_R4_C_MARK,          /* see sel_vi0 */
+       VI0_R5_C_MARK,          /* see sel_vi0 */
+
+       VI0_R0_D_MARK,          /* see sel_vi0 */
+       VI0_R1_D_MARK,          /* see sel_vi0 */
+       VI0_R2_D_MARK,          /* see sel_vi0 */
+       VI0_R3_D_MARK,          /* see sel_vi0 */
+       VI0_R4_D_MARK,          /* see sel_vi0 */
+       VI0_R5_D_MARK,          /* see sel_vi0 */
+
+       /* IPSR0 */
+       PRESETOUT_MARK, PWM1_MARK,      AUDATA0_MARK,
+       ARM_TRACEDATA_0_MARK,           GPSCLK_C_MARK,  USB_OVC0_MARK,
+       TX2_E_MARK,     SDA2_B_MARK,    AUDATA1_MARK,   ARM_TRACEDATA_1_MARK,
+       GPSIN_C_MARK,   USB_OVC1_MARK,  RX2_E_MARK,     SCL2_B_MARK,
+       SD1_DAT2_A_MARK,                MMC_D2_MARK,    BS_MARK,
+       ATADIR0_A_MARK, SDSELF_A_MARK,  PWM4_B_MARK,    SD1_DAT3_A_MARK,
+       MMC_D3_MARK,    A0_MARK,        ATAG0_A_MARK,   REMOCON_B_MARK,
+       A4_MARK,        A5_MARK,        A6_MARK,        A7_MARK,
+       A8_MARK,        A9_MARK,        A10_MARK,       A11_MARK,
+       A12_MARK,       A13_MARK,       A14_MARK,       A15_MARK,
+       A16_MARK,       A17_MARK,       A18_MARK,       A19_MARK,
+
+       /* IPSR1 */
+       A20_MARK,       HSPI_CS1_B_MARK,                A21_MARK,
+       HSPI_CLK1_B_MARK,               A22_MARK,       HRTS0_B_MARK,
+       RX2_B_MARK,     DREQ2_A_MARK,   A23_MARK,       HTX0_B_MARK,
+       TX2_B_MARK,     DACK2_A_MARK,   TS_SDEN0_A_MARK,
+       SD1_CD_A_MARK,  MMC_D6_MARK,    A24_MARK,       DREQ1_A_MARK,
+       HRX0_B_MARK,    TS_SPSYNC0_A_MARK,              SD1_WP_A_MARK,
+       MMC_D7_MARK,    A25_MARK,       DACK1_A_MARK,   HCTS0_B_MARK,
+       RX3_C_MARK,     TS_SDAT0_A_MARK,                CLKOUT_MARK,
+       HSPI_TX1_B_MARK,                PWM0_B_MARK,    CS0_MARK,
+       HSPI_RX1_B_MARK,                SSI_SCK1_B_MARK,
+       ATAG0_B_MARK,   CS1_A26_MARK,   SDA2_A_MARK,    SCK2_B_MARK,
+       MMC_D5_MARK,    ATADIR0_B_MARK, RD_WR_MARK,     WE1_MARK,
+       ATAWR0_B_MARK,  SSI_WS1_B_MARK, EX_CS0_MARK,    SCL2_A_MARK,
+       TX3_C_MARK,     TS_SCK0_A_MARK, EX_CS1_MARK,    MMC_D4_MARK,
+
+       /* IPSR2 */
+       SD1_CLK_A_MARK, MMC_CLK_MARK,   ATACS00_MARK,   EX_CS2_MARK,
+       SD1_CMD_A_MARK, MMC_CMD_MARK,   ATACS10_MARK,   EX_CS3_MARK,
+       SD1_DAT0_A_MARK,                MMC_D0_MARK,    ATARD0_MARK,
+       EX_CS4_MARK,    EX_WAIT1_A_MARK,                SD1_DAT1_A_MARK,
+       MMC_D1_MARK,    ATAWR0_A_MARK,  EX_CS5_MARK,    EX_WAIT2_A_MARK,
+       DREQ0_A_MARK,   RX3_A_MARK,     DACK0_MARK,     TX3_A_MARK,
+       DRACK0_MARK,    EX_WAIT0_MARK,  PWM0_C_MARK,    D0_MARK,
+       D1_MARK,        D2_MARK,        D3_MARK,        D4_MARK,
+       D5_MARK,        D6_MARK,        D7_MARK,        D8_MARK,
+       D9_MARK,        D10_MARK,       D11_MARK,       RD_WR_B_MARK,
+       IRQ0_MARK,      MLB_CLK_MARK,   IRQ1_A_MARK,
+
+       /* IPSR3 */
+       MLB_SIG_MARK,   RX5_B_MARK,     SDA3_A_MARK,    IRQ2_A_MARK,
+       MLB_DAT_MARK,   TX5_B_MARK,     SCL3_A_MARK,    IRQ3_A_MARK,
+       SDSELF_B_MARK,  SD1_CMD_B_MARK, SCIF_CLK_MARK,  AUDIO_CLKOUT_B_MARK,
+       CAN_CLK_B_MARK, SDA3_B_MARK,    SD1_CLK_B_MARK, HTX0_A_MARK,
+       TX0_A_MARK,     SD1_DAT0_B_MARK,                HRX0_A_MARK,
+       RX0_A_MARK,     SD1_DAT1_B_MARK,                HSCK0_MARK,
+       SCK0_MARK,      SCL3_B_MARK,    SD1_DAT2_B_MARK,
+       HCTS0_A_MARK,   CTS0_MARK,      SD1_DAT3_B_MARK,
+       HRTS0_A_MARK,   RTS0_MARK,      SSI_SCK4_MARK,
+       DU0_DR0_MARK,   LCDOUT0_MARK,   AUDATA2_MARK,   ARM_TRACEDATA_2_MARK,
+       SDA3_C_MARK,    ADICHS1_MARK,   TS_SDEN0_B_MARK,
+       SSI_WS4_MARK,   DU0_DR1_MARK,   LCDOUT1_MARK,   AUDATA3_MARK,
+       ARM_TRACEDATA_3_MARK,           SCL3_C_MARK,    ADICHS2_MARK,
+       TS_SPSYNC0_B_MARK,              DU0_DR2_MARK,   LCDOUT2_MARK,
+       DU0_DR3_MARK,   LCDOUT3_MARK,   DU0_DR4_MARK,   LCDOUT4_MARK,
+       DU0_DR5_MARK,   LCDOUT5_MARK,   DU0_DR6_MARK,   LCDOUT6_MARK,
+
+       /* IPSR4 */
+       DU0_DR7_MARK,   LCDOUT7_MARK,   DU0_DG0_MARK,   LCDOUT8_MARK,
+       AUDATA4_MARK,   ARM_TRACEDATA_4_MARK,
+       TX1_D_MARK,     CAN0_TX_A_MARK, ADICHS0_MARK,   DU0_DG1_MARK,
+       LCDOUT9_MARK,   AUDATA5_MARK,   ARM_TRACEDATA_5_MARK,
+       RX1_D_MARK,     CAN0_RX_A_MARK, ADIDATA_MARK,   DU0_DG2_MARK,
+       LCDOUT10_MARK,  DU0_DG3_MARK,   LCDOUT11_MARK,  DU0_DG4_MARK,
+       LCDOUT12_MARK,  RX0_B_MARK,     DU0_DG5_MARK,   LCDOUT13_MARK,
+       TX0_B_MARK,     DU0_DG6_MARK,   LCDOUT14_MARK,  RX4_A_MARK,
+       DU0_DG7_MARK,   LCDOUT15_MARK,  TX4_A_MARK,     SSI_SCK2_B_MARK,
+       VI0_R0_B_MARK,  DU0_DB0_MARK,   LCDOUT16_MARK,  AUDATA6_MARK,
+       ARM_TRACEDATA_6_MARK,           GPSCLK_A_MARK,  PWM0_A_MARK,
+       ADICLK_MARK,    TS_SDAT0_B_MARK,                AUDIO_CLKC_MARK,
+       VI0_R1_B_MARK,  DU0_DB1_MARK,   LCDOUT17_MARK,  AUDATA7_MARK,
+       ARM_TRACEDATA_7_MARK,           GPSIN_A_MARK,   ADICS_SAMP_MARK,
+       TS_SCK0_B_MARK, VI0_R2_B_MARK,  DU0_DB2_MARK,   LCDOUT18_MARK,
+       VI0_R3_B_MARK,  DU0_DB3_MARK,   LCDOUT19_MARK,  VI0_R4_B_MARK,
+       DU0_DB4_MARK,   LCDOUT20_MARK,
+
+       /* IPSR5 */
+       VI0_R5_B_MARK,  DU0_DB5_MARK,   LCDOUT21_MARK,  VI1_DATA10_B_MARK,
+       DU0_DB6_MARK,   LCDOUT22_MARK,  VI1_DATA11_B_MARK,
+       DU0_DB7_MARK,   LCDOUT23_MARK,  DU0_DOTCLKIN_MARK,
+       QSTVA_QVS_MARK, DU0_DOTCLKO_UT0_MARK,
+       QCLK_MARK,      DU0_DOTCLKO_UT1_MARK,           QSTVB_QVE_MARK,
+       AUDIO_CLKOUT_A_MARK,            REMOCON_C_MARK, SSI_WS2_B_MARK,
+       DU0_EXHSYNC_DU0_HSYNC_MARK,     QSTH_QHS_MARK,
+       DU0_EXVSYNC_DU0_VSYNC_MARK,     QSTB_QHE_MARK,
+       DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK,
+       QCPV_QDE_MARK,  FMCLK_D_MARK,   SSI_SCK1_A_MARK,
+       DU0_DISP_MARK,  QPOLA_MARK,     AUDCK_MARK,     ARM_TRACECLK_MARK,
+       BPFCLK_D_MARK,  SSI_WS1_A_MARK, DU0_CDE_MARK,   QPOLB_MARK,
+       AUDSYNC_MARK,   ARM_TRACECTL_MARK,              FMIN_D_MARK,
+       SD1_CD_B_MARK,  SSI_SCK78_MARK, HSPI_RX0_B_MARK,
+       TX1_B_MARK,     SD1_WP_B_MARK,  SSI_WS78_MARK,  HSPI_CLK0_B_MARK,
+       RX1_B_MARK,     CAN_CLK_D_MARK, SSI_SDATA8_MARK,
+       SSI_SCK2_A_MARK,                HSPI_CS0_B_MARK,
+       TX2_A_MARK,     CAN0_TX_B_MARK, SSI_SDATA7_MARK,
+       HSPI_TX0_B_MARK,                RX2_A_MARK,     CAN0_RX_B_MARK,
+
+       /* IPSR6 */
+       SSI_SCK6_MARK,  HSPI_RX2_A_MARK,                FMCLK_B_MARK,
+       CAN1_TX_B_MARK, SSI_WS6_MARK,   HSPI_CLK2_A_MARK,
+       BPFCLK_B_MARK,  CAN1_RX_B_MARK, SSI_SDATA6_MARK,
+       HSPI_TX2_A_MARK,                FMIN_B_MARK,    SSI_SCK5_MARK,
+       RX4_C_MARK,     SSI_WS5_MARK,   TX4_C_MARK,     SSI_SDATA5_MARK,
+       RX0_D_MARK,     SSI_WS34_MARK,  ARM_TRACEDATA_8_MARK,
+       SSI_SDATA4_MARK,                SSI_WS2_A_MARK, ARM_TRACEDATA_9_MARK,
+       SSI_SDATA3_MARK,                ARM_TRACEDATA_10_MARK,
+       SSI_SCK012_MARK,                ARM_TRACEDATA_11_MARK,
+       TX0_D_MARK,     SSI_WS012_MARK, ARM_TRACEDATA_12_MARK,
+       SSI_SDATA2_MARK,                HSPI_CS2_A_MARK,
+       ARM_TRACEDATA_13_MARK,          SDA1_A_MARK,    SSI_SDATA1_MARK,
+       ARM_TRACEDATA_14_MARK,          SCL1_A_MARK,    SCK2_A_MARK,
+       SSI_SDATA0_MARK,                ARM_TRACEDATA_15_MARK,
+       SD0_CLK_MARK,   SUB_TDO_MARK,   SD0_CMD_MARK,   SUB_TRST_MARK,
+       SD0_DAT0_MARK,  SUB_TMS_MARK,   SD0_DAT1_MARK,  SUB_TCK_MARK,
+       SD0_DAT2_MARK,  SUB_TDI_MARK,
+
+       /* IPSR7 */
+       SD0_DAT3_MARK,  IRQ1_B_MARK,    SD0_CD_MARK,    TX5_A_MARK,
+       SD0_WP_MARK,    RX5_A_MARK,     VI1_CLKENB_MARK,
+       HSPI_CLK0_A_MARK,       HTX1_A_MARK,    RTS1_C_MARK,    VI1_FIELD_MARK,
+       HSPI_CS0_A_MARK,        HRX1_A_MARK,    SCK1_C_MARK,    VI1_HSYNC_MARK,
+       HSPI_RX0_A_MARK,        HRTS1_A_MARK,   FMCLK_A_MARK,   RX1_C_MARK,
+       VI1_VSYNC_MARK, HSPI_TX0_MARK,  HCTS1_A_MARK,   BPFCLK_A_MARK,
+       TX1_C_MARK,     TCLK0_MARK,     HSCK1_A_MARK,   FMIN_A_MARK,
+       IRQ2_C_MARK,    CTS1_C_MARK,    SPEEDIN_MARK,   VI0_CLK_MARK,
+       CAN_CLK_A_MARK, VI0_CLKENB_MARK,                SD2_DAT2_B_MARK,
+       VI1_DATA0_MARK, DU1_DG6_MARK,   HSPI_RX1_A_MARK,
+       RX4_B_MARK,     VI0_FIELD_MARK, SD2_DAT3_B_MARK,
+       VI0_R3_C_MARK,  VI1_DATA1_MARK, DU1_DG7_MARK,   HSPI_CLK1_A_MARK,
+       TX4_B_MARK,     VI0_HSYNC_MARK, SD2_CD_B_MARK,  VI1_DATA2_MARK,
+       DU1_DR2_MARK,   HSPI_CS1_A_MARK,                RX3_B_MARK,
+
+       /* IPSR8 */
+       VI0_VSYNC_MARK, SD2_WP_B_MARK,  VI1_DATA3_MARK, DU1_DR3_MARK,
+       HSPI_TX1_A_MARK,                TX3_B_MARK,     VI0_DATA0_VI0_B0_MARK,
+       DU1_DG2_MARK,   IRQ2_B_MARK,    RX3_D_MARK,     VI0_DATA1_VI0_B1_MARK,
+       DU1_DG3_MARK,   IRQ3_B_MARK,    TX3_D_MARK,     VI0_DATA2_VI0_B2_MARK,
+       DU1_DG4_MARK,   RX0_C_MARK,     VI0_DATA3_VI0_B3_MARK,
+       DU1_DG5_MARK,   TX1_A_MARK,     TX0_C_MARK,     VI0_DATA4_VI0_B4_MARK,
+       DU1_DB2_MARK,   RX1_A_MARK,     VI0_DATA5_VI0_B5_MARK,
+       DU1_DB3_MARK,   SCK1_A_MARK,    PWM4_MARK,      HSCK1_B_MARK,
+       VI0_DATA6_VI0_G0_MARK,          DU1_DB4_MARK,   CTS1_A_MARK,
+       PWM5_MARK,      VI0_DATA7_VI0_G1_MARK,          DU1_DB5_MARK,
+       RTS1_A_MARK,    VI0_G2_MARK,    SD2_CLK_B_MARK, VI1_DATA4_MARK,
+       DU1_DR4_MARK,   HTX1_B_MARK,    VI0_G3_MARK,    SD2_CMD_B_MARK,
+       VI1_DATA5_MARK, DU1_DR5_MARK,   HRX1_B_MARK,
+
+       /* IPSR9 */
+       VI0_G4_MARK,    SD2_DAT0_B_MARK,                VI1_DATA6_MARK,
+       DU1_DR6_MARK,   HRTS1_B_MARK,   VI0_G5_MARK,    SD2_DAT1_B_MARK,
+       VI1_DATA7_MARK, DU1_DR7_MARK,   HCTS1_B_MARK,   VI0_R0_A_MARK,
+       VI1_CLK_MARK,   ETH_REF_CLK_MARK,               DU1_DOTCLKIN_MARK,
+       VI0_R1_A_MARK,  VI1_DATA8_MARK, DU1_DB6_MARK,   ETH_TXD0_MARK,
+       PWM2_MARK,      TCLK1_MARK,     VI0_R2_A_MARK,  VI1_DATA9_MARK,
+       DU1_DB7_MARK,   ETH_TXD1_MARK,  PWM3_MARK,      VI0_R3_A_MARK,
+       ETH_CRS_DV_MARK,                IECLK_MARK,     SCK2_C_MARK,
+       VI0_R4_A_MARK,                  ETH_TX_EN_MARK, IETX_MARK,
+       TX2_C_MARK,     VI0_R5_A_MARK,  ETH_RX_ER_MARK, FMCLK_C_MARK,
+       IERX_MARK,      RX2_C_MARK,     VI1_DATA10_A_MARK,
+       DU1_DOTCLKOUT_MARK,             ETH_RXD0_MARK,
+       BPFCLK_C_MARK,  TX2_D_MARK,     SDA2_C_MARK,    VI1_DATA11_A_MARK,
+       DU1_EXHSYNC_DU1_HSYNC_MARK,     ETH_RXD1_MARK,  FMIN_C_MARK,
+       RX2_D_MARK,     SCL2_C_MARK,
+
+       /* IPSR10 */
+       SD2_CLK_A_MARK, DU1_EXVSYNC_DU1_VSYNC_MARK,     ATARD1_MARK,
+       ETH_MDC_MARK,   SDA1_B_MARK,    SD2_CMD_A_MARK,
+       DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK,              ATAWR1_MARK,
+       ETH_MDIO_MARK,  SCL1_B_MARK,    SD2_DAT0_A_MARK,
+       DU1_DISP_MARK,  ATACS01_MARK,   DREQ1_B_MARK,   ETH_LINK_MARK,
+       CAN1_RX_A_MARK, SD2_DAT1_A_MARK,                DU1_CDE_MARK,
+       ATACS11_MARK,   DACK1_B_MARK,   ETH_MAGIC_MARK, CAN1_TX_A_MARK,
+       PWM6_MARK,      SD2_DAT2_A_MARK,                VI1_DATA12_MARK,
+       DREQ2_B_MARK,   ATADIR1_MARK,   HSPI_CLK2_B_MARK,
+       GPSCLK_B_MARK,  SD2_DAT3_A_MARK,                VI1_DATA13_MARK,
+       DACK2_B_MARK,   ATAG1_MARK,     HSPI_CS2_B_MARK,
+       GPSIN_B_MARK,   SD2_CD_A_MARK,  VI1_DATA14_MARK,
+       EX_WAIT1_B_MARK,                DREQ0_B_MARK,   HSPI_RX2_B_MARK,
+       REMOCON_A_MARK, SD2_WP_A_MARK,  VI1_DATA15_MARK,
+       EX_WAIT2_B_MARK,                DACK0_B_MARK,
+       HSPI_TX2_B_MARK,                CAN_CLK_C_MARK,
+
+       PINMUX_MARK_END,
+};
+
+static const pinmux_enum_t pinmux_data[] = {
+       PINMUX_DATA_GP_ALL(), /* PINMUX_DATA(GP_M_N_DATA, GP_M_N_FN...), */
+
+       PINMUX_DATA(PENC0_MARK,         FN_PENC0),
+       PINMUX_DATA(PENC1_MARK,         FN_PENC1),
+       PINMUX_DATA(A1_MARK,            FN_A1),
+       PINMUX_DATA(A2_MARK,            FN_A2),
+       PINMUX_DATA(A3_MARK,            FN_A3),
+       PINMUX_DATA(WE0_MARK,           FN_WE0),
+       PINMUX_DATA(AUDIO_CLKA_MARK,    FN_AUDIO_CLKA),
+       PINMUX_DATA(AUDIO_CLKB_MARK,    FN_AUDIO_CLKB),
+       PINMUX_DATA(SSI_SCK34_MARK,     FN_SSI_SCK34),
+       PINMUX_DATA(AVS1_MARK,          FN_AVS1),
+       PINMUX_DATA(AVS2_MARK,          FN_AVS2),
+
+       /* IPSR0 */
+       PINMUX_IPSR_DATA(IP0_1_0,       PRESETOUT),
+       PINMUX_IPSR_DATA(IP0_1_0,       PWM1),
+
+       PINMUX_IPSR_DATA(IP0_4_2,       AUDATA0),
+       PINMUX_IPSR_DATA(IP0_4_2,       ARM_TRACEDATA_0),
+       PINMUX_IPSR_MSEL(IP0_4_2,       GPSCLK_C,       SEL_GPS_C),
+       PINMUX_IPSR_DATA(IP0_4_2,       USB_OVC0),
+       PINMUX_IPSR_DATA(IP0_4_2,       TX2_E),
+       PINMUX_IPSR_MSEL(IP0_4_2,       SDA2_B,         SEL_I2C2_B),
+
+       PINMUX_IPSR_DATA(IP0_7_5,       AUDATA1),
+       PINMUX_IPSR_DATA(IP0_7_5,       ARM_TRACEDATA_1),
+       PINMUX_IPSR_MSEL(IP0_7_5,       GPSIN_C,        SEL_GPS_C),
+       PINMUX_IPSR_DATA(IP0_7_5,       USB_OVC1),
+       PINMUX_IPSR_MSEL(IP0_7_5,       RX2_E,          SEL_SCIF2_E),
+       PINMUX_IPSR_MSEL(IP0_7_5,       SCL2_B,         SEL_I2C2_B),
+
+       PINMUX_IPSR_MSEL(IP0_11_8,      SD1_DAT2_A,     SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP0_11_8,      MMC_D2),
+       PINMUX_IPSR_DATA(IP0_11_8,      BS),
+       PINMUX_IPSR_DATA(IP0_11_8,      ATADIR0_A),
+       PINMUX_IPSR_DATA(IP0_11_8,      SDSELF_A),
+       PINMUX_IPSR_DATA(IP0_11_8,      PWM4_B),
+
+       PINMUX_IPSR_MSEL(IP0_14_12,     SD1_DAT3_A,     SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP0_14_12,     MMC_D3),
+       PINMUX_IPSR_DATA(IP0_14_12,     A0),
+       PINMUX_IPSR_DATA(IP0_14_12,     ATAG0_A),
+       PINMUX_IPSR_MSEL(IP0_14_12,     REMOCON_B,      SEL_REMOCON_B),
+
+       PINMUX_IPSR_DATA(IP0_15,        A4),
+       PINMUX_IPSR_DATA(IP0_16,        A5),
+       PINMUX_IPSR_DATA(IP0_17,        A6),
+       PINMUX_IPSR_DATA(IP0_18,        A7),
+       PINMUX_IPSR_DATA(IP0_19,        A8),
+       PINMUX_IPSR_DATA(IP0_20,        A9),
+       PINMUX_IPSR_DATA(IP0_21,        A10),
+       PINMUX_IPSR_DATA(IP0_22,        A11),
+       PINMUX_IPSR_DATA(IP0_23,        A12),
+       PINMUX_IPSR_DATA(IP0_24,        A13),
+       PINMUX_IPSR_DATA(IP0_25,        A14),
+       PINMUX_IPSR_DATA(IP0_26,        A15),
+       PINMUX_IPSR_DATA(IP0_27,        A16),
+       PINMUX_IPSR_DATA(IP0_28,        A17),
+       PINMUX_IPSR_DATA(IP0_29,        A18),
+       PINMUX_IPSR_DATA(IP0_30,        A19),
+
+       /* IPSR1 */
+       PINMUX_IPSR_DATA(IP1_0,         A20),
+       PINMUX_IPSR_MSEL(IP1_0,         HSPI_CS1_B,     SEL_HSPI1_B),
+
+       PINMUX_IPSR_DATA(IP1_1,         A21),
+       PINMUX_IPSR_MSEL(IP1_1,         HSPI_CLK1_B,    SEL_HSPI1_B),
+
+       PINMUX_IPSR_DATA(IP1_4_2,       A22),
+       PINMUX_IPSR_MSEL(IP1_4_2,       HRTS0_B,        SEL_HSCIF0_B),
+       PINMUX_IPSR_MSEL(IP1_4_2,       RX2_B,          SEL_SCIF2_B),
+       PINMUX_IPSR_MSEL(IP1_4_2,       DREQ2_A,        SEL_DREQ2_A),
+
+       PINMUX_IPSR_DATA(IP1_7_5,       A23),
+       PINMUX_IPSR_DATA(IP1_7_5,       HTX0_B),
+       PINMUX_IPSR_DATA(IP1_7_5,       TX2_B),
+       PINMUX_IPSR_DATA(IP1_7_5,       DACK2_A),
+       PINMUX_IPSR_MSEL(IP1_7_5,       TS_SDEN0_A,     SEL_TSIF0_A),
+
+       PINMUX_IPSR_MSEL(IP1_10_8,      SD1_CD_A,       SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP1_10_8,      MMC_D6),
+       PINMUX_IPSR_DATA(IP1_10_8,      A24),
+       PINMUX_IPSR_MSEL(IP1_10_8,      DREQ1_A,        SEL_DREQ1_A),
+       PINMUX_IPSR_MSEL(IP1_10_8,      HRX0_B,         SEL_HSCIF0_B),
+       PINMUX_IPSR_MSEL(IP1_10_8,      TS_SPSYNC0_A,   SEL_TSIF0_A),
+
+       PINMUX_IPSR_MSEL(IP1_14_11,     SD1_WP_A,       SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP1_14_11,     MMC_D7),
+       PINMUX_IPSR_DATA(IP1_14_11,     A25),
+       PINMUX_IPSR_DATA(IP1_14_11,     DACK1_A),
+       PINMUX_IPSR_MSEL(IP1_14_11,     HCTS0_B,        SEL_HSCIF0_B),
+       PINMUX_IPSR_MSEL(IP1_14_11,     RX3_C,          SEL_SCIF3_C),
+       PINMUX_IPSR_MSEL(IP1_14_11,     TS_SDAT0_A,     SEL_TSIF0_A),
+
+       PINMUX_IPSR_NOGP(IP1_16_15,     CLKOUT),
+       PINMUX_IPSR_NOGP(IP1_16_15,     HSPI_TX1_B),
+       PINMUX_IPSR_NOGP(IP1_16_15,     PWM0_B),
+
+       PINMUX_IPSR_NOGP(IP1_17,        CS0),
+       PINMUX_IPSR_NOGM(IP1_17,        HSPI_RX1_B,     SEL_HSPI1_B),
+
+       PINMUX_IPSR_NOGM(IP1_20_18,     SSI_SCK1_B,     SEL_SSI1_B),
+       PINMUX_IPSR_NOGP(IP1_20_18,     ATAG0_B),
+       PINMUX_IPSR_NOGP(IP1_20_18,     CS1_A26),
+       PINMUX_IPSR_NOGM(IP1_20_18,     SDA2_A,         SEL_I2C2_A),
+       PINMUX_IPSR_NOGM(IP1_20_18,     SCK2_B,         SEL_SCIF2_B),
+
+       PINMUX_IPSR_DATA(IP1_23_21,     MMC_D5),
+       PINMUX_IPSR_DATA(IP1_23_21,     ATADIR0_B),
+       PINMUX_IPSR_DATA(IP1_23_21,     RD_WR),
+
+       PINMUX_IPSR_DATA(IP1_24,        WE1),
+       PINMUX_IPSR_DATA(IP1_24,        ATAWR0_B),
+
+       PINMUX_IPSR_MSEL(IP1_27_25,     SSI_WS1_B,      SEL_SSI1_B),
+       PINMUX_IPSR_DATA(IP1_27_25,     EX_CS0),
+       PINMUX_IPSR_MSEL(IP1_27_25,     SCL2_A,         SEL_I2C2_A),
+       PINMUX_IPSR_DATA(IP1_27_25,     TX3_C),
+       PINMUX_IPSR_MSEL(IP1_27_25,     TS_SCK0_A,      SEL_TSIF0_A),
+
+       PINMUX_IPSR_DATA(IP1_29_28,     EX_CS1),
+       PINMUX_IPSR_DATA(IP1_29_28,     MMC_D4),
+
+       /* IPSR2 */
+       PINMUX_IPSR_DATA(IP2_2_0,       SD1_CLK_A),
+       PINMUX_IPSR_DATA(IP2_2_0,       MMC_CLK),
+       PINMUX_IPSR_DATA(IP2_2_0,       ATACS00),
+       PINMUX_IPSR_DATA(IP2_2_0,       EX_CS2),
+
+       PINMUX_IPSR_MSEL(IP2_5_3,       SD1_CMD_A,      SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP2_5_3,       MMC_CMD),
+       PINMUX_IPSR_DATA(IP2_5_3,       ATACS10),
+       PINMUX_IPSR_DATA(IP2_5_3,       EX_CS3),
+
+       PINMUX_IPSR_MSEL(IP2_8_6,       SD1_DAT0_A,     SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP2_8_6,       MMC_D0),
+       PINMUX_IPSR_DATA(IP2_8_6,       ATARD0),
+       PINMUX_IPSR_DATA(IP2_8_6,       EX_CS4),
+       PINMUX_IPSR_MSEL(IP2_8_6,       EX_WAIT1_A,     SEL_WAIT1_A),
+
+       PINMUX_IPSR_MSEL(IP2_11_9,      SD1_DAT1_A,     SEL_SD1_A),
+       PINMUX_IPSR_DATA(IP2_11_9,      MMC_D1),
+       PINMUX_IPSR_DATA(IP2_11_9,      ATAWR0_A),
+       PINMUX_IPSR_DATA(IP2_11_9,      EX_CS5),
+       PINMUX_IPSR_MSEL(IP2_11_9,      EX_WAIT2_A,     SEL_WAIT2_A),
+
+       PINMUX_IPSR_MSEL(IP2_13_12,     DREQ0_A,        SEL_DREQ0_A),
+       PINMUX_IPSR_MSEL(IP2_13_12,     RX3_A,          SEL_SCIF3_A),
+
+       PINMUX_IPSR_DATA(IP2_16_14,     DACK0),
+       PINMUX_IPSR_DATA(IP2_16_14,     TX3_A),
+       PINMUX_IPSR_DATA(IP2_16_14,     DRACK0),
+
+       PINMUX_IPSR_DATA(IP2_17,        EX_WAIT0),
+       PINMUX_IPSR_DATA(IP2_17,        PWM0_C),
+
+       PINMUX_IPSR_NOGP(IP2_18,        D0),
+       PINMUX_IPSR_NOGP(IP2_19,        D1),
+       PINMUX_IPSR_NOGP(IP2_20,        D2),
+       PINMUX_IPSR_NOGP(IP2_21,        D3),
+       PINMUX_IPSR_NOGP(IP2_22,        D4),
+       PINMUX_IPSR_NOGP(IP2_23,        D5),
+       PINMUX_IPSR_NOGP(IP2_24,        D6),
+       PINMUX_IPSR_NOGP(IP2_25,        D7),
+       PINMUX_IPSR_NOGP(IP2_26,        D8),
+       PINMUX_IPSR_NOGP(IP2_27,        D9),
+       PINMUX_IPSR_NOGP(IP2_28,        D10),
+       PINMUX_IPSR_NOGP(IP2_29,        D11),
+
+       PINMUX_IPSR_DATA(IP2_30,        RD_WR_B),
+       PINMUX_IPSR_DATA(IP2_30,        IRQ0),
+
+       PINMUX_IPSR_DATA(IP2_31,        MLB_CLK),
+       PINMUX_IPSR_MSEL(IP2_31,        IRQ1_A,         SEL_IRQ1_A),
+
+       /* IPSR3 */
+       PINMUX_IPSR_DATA(IP3_1_0,       MLB_SIG),
+       PINMUX_IPSR_MSEL(IP3_1_0,       RX5_B,          SEL_SCIF5_B),
+       PINMUX_IPSR_MSEL(IP3_1_0,       SDA3_A,         SEL_I2C3_A),
+       PINMUX_IPSR_MSEL(IP3_1_0,       IRQ2_A,         SEL_IRQ2_A),
+
+       PINMUX_IPSR_DATA(IP3_4_2,       MLB_DAT),
+       PINMUX_IPSR_DATA(IP3_4_2,       TX5_B),
+       PINMUX_IPSR_MSEL(IP3_4_2,       SCL3_A,         SEL_I2C3_A),
+       PINMUX_IPSR_MSEL(IP3_4_2,       IRQ3_A,         SEL_IRQ3_A),
+       PINMUX_IPSR_DATA(IP3_4_2,       SDSELF_B),
+
+       PINMUX_IPSR_MSEL(IP3_7_5,       SD1_CMD_B,      SEL_SD1_B),
+       PINMUX_IPSR_DATA(IP3_7_5,       SCIF_CLK),
+       PINMUX_IPSR_DATA(IP3_7_5,       AUDIO_CLKOUT_B),
+       PINMUX_IPSR_MSEL(IP3_7_5,       CAN_CLK_B,      SEL_CANCLK_B),
+       PINMUX_IPSR_MSEL(IP3_7_5,       SDA3_B,         SEL_I2C3_B),
+
+       PINMUX_IPSR_DATA(IP3_9_8,       SD1_CLK_B),
+       PINMUX_IPSR_DATA(IP3_9_8,       HTX0_A),
+       PINMUX_IPSR_DATA(IP3_9_8,       TX0_A),
+
+       PINMUX_IPSR_MSEL(IP3_12_10,     SD1_DAT0_B,     SEL_SD1_B),
+       PINMUX_IPSR_MSEL(IP3_12_10,     HRX0_A,         SEL_HSCIF0_A),
+       PINMUX_IPSR_MSEL(IP3_12_10,     RX0_A,          SEL_SCIF0_A),
+
+       PINMUX_IPSR_MSEL(IP3_15_13,     SD1_DAT1_B,     SEL_SD1_B),
+       PINMUX_IPSR_MSEL(IP3_15_13,     HSCK0,          SEL_HSCIF0_A),
+       PINMUX_IPSR_DATA(IP3_15_13,     SCK0),
+       PINMUX_IPSR_MSEL(IP3_15_13,     SCL3_B,         SEL_I2C3_B),
+
+       PINMUX_IPSR_MSEL(IP3_18_16,     SD1_DAT2_B,     SEL_SD1_B),
+       PINMUX_IPSR_MSEL(IP3_18_16,     HCTS0_A,        SEL_HSCIF0_A),
+       PINMUX_IPSR_DATA(IP3_18_16,     CTS0),
+
+       PINMUX_IPSR_MSEL(IP3_20_19,     SD1_DAT3_B,     SEL_SD1_B),
+       PINMUX_IPSR_MSEL(IP3_20_19,     HRTS0_A,        SEL_HSCIF0_A),
+       PINMUX_IPSR_DATA(IP3_20_19,     RTS0),
+
+       PINMUX_IPSR_DATA(IP3_23_21,     SSI_SCK4),
+       PINMUX_IPSR_DATA(IP3_23_21,     DU0_DR0),
+       PINMUX_IPSR_DATA(IP3_23_21,     LCDOUT0),
+       PINMUX_IPSR_DATA(IP3_23_21,     AUDATA2),
+       PINMUX_IPSR_DATA(IP3_23_21,     ARM_TRACEDATA_2),
+       PINMUX_IPSR_MSEL(IP3_23_21,     SDA3_C,         SEL_I2C3_C),
+       PINMUX_IPSR_DATA(IP3_23_21,     ADICHS1),
+       PINMUX_IPSR_MSEL(IP3_23_21,     TS_SDEN0_B,     SEL_TSIF0_B),
+
+       PINMUX_IPSR_DATA(IP3_26_24,     SSI_WS4),
+       PINMUX_IPSR_DATA(IP3_26_24,     DU0_DR1),
+       PINMUX_IPSR_DATA(IP3_26_24,     LCDOUT1),
+       PINMUX_IPSR_DATA(IP3_26_24,     AUDATA3),
+       PINMUX_IPSR_DATA(IP3_26_24,     ARM_TRACEDATA_3),
+       PINMUX_IPSR_MSEL(IP3_26_24,     SCL3_C,         SEL_I2C3_C),
+       PINMUX_IPSR_DATA(IP3_26_24,     ADICHS2),
+       PINMUX_IPSR_MSEL(IP3_26_24,     TS_SPSYNC0_B,   SEL_TSIF0_B),
+
+       PINMUX_IPSR_DATA(IP3_27,        DU0_DR2),
+       PINMUX_IPSR_DATA(IP3_27,        LCDOUT2),
+
+       PINMUX_IPSR_DATA(IP3_28,        DU0_DR3),
+       PINMUX_IPSR_DATA(IP3_28,        LCDOUT3),
+
+       PINMUX_IPSR_DATA(IP3_29,        DU0_DR4),
+       PINMUX_IPSR_DATA(IP3_29,        LCDOUT4),
+
+       PINMUX_IPSR_DATA(IP3_30,        DU0_DR5),
+       PINMUX_IPSR_DATA(IP3_30,        LCDOUT5),
+
+       PINMUX_IPSR_DATA(IP3_31,        DU0_DR6),
+       PINMUX_IPSR_DATA(IP3_31,        LCDOUT6),
+
+       /* IPSR4 */
+       PINMUX_IPSR_DATA(IP4_0,         DU0_DR7),
+       PINMUX_IPSR_DATA(IP4_0,         LCDOUT7),
+
+       PINMUX_IPSR_DATA(IP4_3_1,       DU0_DG0),
+       PINMUX_IPSR_DATA(IP4_3_1,       LCDOUT8),
+       PINMUX_IPSR_DATA(IP4_3_1,       AUDATA4),
+       PINMUX_IPSR_DATA(IP4_3_1,       ARM_TRACEDATA_4),
+       PINMUX_IPSR_DATA(IP4_3_1,       TX1_D),
+       PINMUX_IPSR_DATA(IP4_3_1,       CAN0_TX_A),
+       PINMUX_IPSR_DATA(IP4_3_1,       ADICHS0),
+
+       PINMUX_IPSR_DATA(IP4_6_4,       DU0_DG1),
+       PINMUX_IPSR_DATA(IP4_6_4,       LCDOUT9),
+       PINMUX_IPSR_DATA(IP4_6_4,       AUDATA5),
+       PINMUX_IPSR_DATA(IP4_6_4,       ARM_TRACEDATA_5),
+       PINMUX_IPSR_MSEL(IP4_6_4,       RX1_D,          SEL_SCIF1_D),
+       PINMUX_IPSR_MSEL(IP4_6_4,       CAN0_RX_A,      SEL_CAN0_A),
+       PINMUX_IPSR_DATA(IP4_6_4,       ADIDATA),
+
+       PINMUX_IPSR_DATA(IP4_7,         DU0_DG2),
+       PINMUX_IPSR_DATA(IP4_7,         LCDOUT10),
+
+       PINMUX_IPSR_DATA(IP4_8,         DU0_DG3),
+       PINMUX_IPSR_DATA(IP4_8,         LCDOUT11),
+
+       PINMUX_IPSR_DATA(IP4_10_9,      DU0_DG4),
+       PINMUX_IPSR_DATA(IP4_10_9,      LCDOUT12),
+       PINMUX_IPSR_MSEL(IP4_10_9,      RX0_B,          SEL_SCIF0_B),
+
+       PINMUX_IPSR_DATA(IP4_12_11,     DU0_DG5),
+       PINMUX_IPSR_DATA(IP4_12_11,     LCDOUT13),
+       PINMUX_IPSR_DATA(IP4_12_11,     TX0_B),
+
+       PINMUX_IPSR_DATA(IP4_14_13,     DU0_DG6),
+       PINMUX_IPSR_DATA(IP4_14_13,     LCDOUT14),
+       PINMUX_IPSR_MSEL(IP4_14_13,     RX4_A,          SEL_SCIF4_A),
+
+       PINMUX_IPSR_DATA(IP4_16_15,     DU0_DG7),
+       PINMUX_IPSR_DATA(IP4_16_15,     LCDOUT15),
+       PINMUX_IPSR_DATA(IP4_16_15,     TX4_A),
+
+       PINMUX_IPSR_MSEL(IP4_20_17,     SSI_SCK2_B,     SEL_SSI2_B),
+       PINMUX_DATA(VI0_R0_B_MARK,      FN_IP4_20_17,   FN_VI0_R0_B,    FN_SEL_VI0_B), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R0_D_MARK,      FN_IP4_20_17,   FN_VI0_R0_B,    FN_SEL_VI0_D), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP4_20_17,     DU0_DB0),
+       PINMUX_IPSR_DATA(IP4_20_17,     LCDOUT16),
+       PINMUX_IPSR_DATA(IP4_20_17,     AUDATA6),
+       PINMUX_IPSR_DATA(IP4_20_17,     ARM_TRACEDATA_6),
+       PINMUX_IPSR_MSEL(IP4_20_17,     GPSCLK_A,       SEL_GPS_A),
+       PINMUX_IPSR_DATA(IP4_20_17,     PWM0_A),
+       PINMUX_IPSR_DATA(IP4_20_17,     ADICLK),
+       PINMUX_IPSR_MSEL(IP4_20_17,     TS_SDAT0_B,     SEL_TSIF0_B),
+
+       PINMUX_IPSR_DATA(IP4_24_21,     AUDIO_CLKC),
+       PINMUX_DATA(VI0_R1_B_MARK,      FN_IP4_24_21,   FN_VI0_R1_B,    FN_SEL_VI0_B), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R1_D_MARK,      FN_IP4_24_21,   FN_VI0_R1_B,    FN_SEL_VI0_D), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP4_24_21,     DU0_DB1),
+       PINMUX_IPSR_DATA(IP4_24_21,     LCDOUT17),
+       PINMUX_IPSR_DATA(IP4_24_21,     AUDATA7),
+       PINMUX_IPSR_DATA(IP4_24_21,     ARM_TRACEDATA_7),
+       PINMUX_IPSR_MSEL(IP4_24_21,     GPSIN_A,        SEL_GPS_A),
+       PINMUX_IPSR_DATA(IP4_24_21,     ADICS_SAMP),
+       PINMUX_IPSR_MSEL(IP4_24_21,     TS_SCK0_B,      SEL_TSIF0_B),
+
+       PINMUX_DATA(VI0_R2_B_MARK,      FN_IP4_26_25,   FN_VI0_R2_B,    FN_SEL_VI0_B), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R2_D_MARK,      FN_IP4_26_25,   FN_VI0_R2_B,    FN_SEL_VI0_D), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP4_26_25,     DU0_DB2),
+       PINMUX_IPSR_DATA(IP4_26_25,     LCDOUT18),
+
+       PINMUX_IPSR_MSEL(IP4_28_27,     VI0_R3_B,       SEL_VI0_B),
+       PINMUX_IPSR_DATA(IP4_28_27,     DU0_DB3),
+       PINMUX_IPSR_DATA(IP4_28_27,     LCDOUT19),
+
+       PINMUX_DATA(VI0_R4_B_MARK,      FN_IP4_30_29,   FN_VI0_R4_B,    FN_SEL_VI0_B), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R4_D_MARK,      FN_IP4_30_29,   FN_VI0_R4_B,    FN_SEL_VI0_D), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP4_30_29,     DU0_DB4),
+       PINMUX_IPSR_DATA(IP4_30_29,     LCDOUT20),
+
+       /* IPSR5 */
+       PINMUX_DATA(VI0_R5_B_MARK,      FN_IP5_1_0,     FN_VI0_R5_B,    FN_SEL_VI0_B), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R5_D_MARK,      FN_IP5_1_0,     FN_VI0_R5_B,    FN_SEL_VI0_D), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP5_1_0,       DU0_DB5),
+       PINMUX_IPSR_DATA(IP5_1_0,       LCDOUT21),
+
+       PINMUX_IPSR_MSEL(IP5_3_2,       VI1_DATA10_B,   SEL_VI1_B),
+       PINMUX_IPSR_DATA(IP5_3_2,       DU0_DB6),
+       PINMUX_IPSR_DATA(IP5_3_2,       LCDOUT22),
+
+       PINMUX_IPSR_MSEL(IP5_5_4,       VI1_DATA11_B,   SEL_VI1_B),
+       PINMUX_IPSR_DATA(IP5_5_4,       DU0_DB7),
+       PINMUX_IPSR_DATA(IP5_5_4,       LCDOUT23),
+
+       PINMUX_IPSR_DATA(IP5_6,         DU0_DOTCLKIN),
+       PINMUX_IPSR_DATA(IP5_6,         QSTVA_QVS),
+
+       PINMUX_IPSR_DATA(IP5_7,         DU0_DOTCLKO_UT0),
+       PINMUX_IPSR_DATA(IP5_7,         QCLK),
+
+       PINMUX_IPSR_DATA(IP5_9_8,       DU0_DOTCLKO_UT1),
+       PINMUX_IPSR_DATA(IP5_9_8,       QSTVB_QVE),
+       PINMUX_IPSR_DATA(IP5_9_8,       AUDIO_CLKOUT_A),
+       PINMUX_IPSR_MSEL(IP5_9_8,       REMOCON_C,      SEL_REMOCON_C),
+
+       PINMUX_IPSR_MSEL(IP5_11_10,     SSI_WS2_B,      SEL_SSI2_B),
+       PINMUX_IPSR_DATA(IP5_11_10,     DU0_EXHSYNC_DU0_HSYNC),
+       PINMUX_IPSR_DATA(IP5_11_10,     QSTH_QHS),
+
+       PINMUX_IPSR_DATA(IP5_12,        DU0_EXVSYNC_DU0_VSYNC),
+       PINMUX_IPSR_DATA(IP5_12,        QSTB_QHE),
+
+       PINMUX_IPSR_DATA(IP5_14_13,     DU0_EXODDF_DU0_ODDF_DISP_CDE),
+       PINMUX_IPSR_DATA(IP5_14_13,     QCPV_QDE),
+       PINMUX_IPSR_MSEL(IP5_14_13,     FMCLK_D,        SEL_FM_D),
+
+       PINMUX_IPSR_MSEL(IP5_17_15,     SSI_SCK1_A,     SEL_SSI1_A),
+       PINMUX_IPSR_DATA(IP5_17_15,     DU0_DISP),
+       PINMUX_IPSR_DATA(IP5_17_15,     QPOLA),
+       PINMUX_IPSR_DATA(IP5_17_15,     AUDCK),
+       PINMUX_IPSR_DATA(IP5_17_15,     ARM_TRACECLK),
+       PINMUX_IPSR_DATA(IP5_17_15,     BPFCLK_D),
+
+       PINMUX_IPSR_MSEL(IP5_20_18,     SSI_WS1_A,      SEL_SSI1_A),
+       PINMUX_IPSR_DATA(IP5_20_18,     DU0_CDE),
+       PINMUX_IPSR_DATA(IP5_20_18,     QPOLB),
+       PINMUX_IPSR_DATA(IP5_20_18,     AUDSYNC),
+       PINMUX_IPSR_DATA(IP5_20_18,     ARM_TRACECTL),
+       PINMUX_IPSR_MSEL(IP5_20_18,     FMIN_D,         SEL_FM_D),
+
+       PINMUX_IPSR_MSEL(IP5_22_21,     SD1_CD_B,       SEL_SD1_B),
+       PINMUX_IPSR_DATA(IP5_22_21,     SSI_SCK78),
+       PINMUX_IPSR_MSEL(IP5_22_21,     HSPI_RX0_B,     SEL_HSPI0_B),
+       PINMUX_IPSR_DATA(IP5_22_21,     TX1_B),
+
+       PINMUX_IPSR_MSEL(IP5_25_23,     SD1_WP_B,       SEL_SD1_B),
+       PINMUX_IPSR_DATA(IP5_25_23,     SSI_WS78),
+       PINMUX_IPSR_MSEL(IP5_25_23,     HSPI_CLK0_B,    SEL_HSPI0_B),
+       PINMUX_IPSR_MSEL(IP5_25_23,     RX1_B,          SEL_SCIF1_B),
+       PINMUX_IPSR_MSEL(IP5_25_23,     CAN_CLK_D,      SEL_CANCLK_D),
+
+       PINMUX_IPSR_DATA(IP5_28_26,     SSI_SDATA8),
+       PINMUX_IPSR_MSEL(IP5_28_26,     SSI_SCK2_A,     SEL_SSI2_A),
+       PINMUX_IPSR_MSEL(IP5_28_26,     HSPI_CS0_B,     SEL_HSPI0_B),
+       PINMUX_IPSR_DATA(IP5_28_26,     TX2_A),
+       PINMUX_IPSR_DATA(IP5_28_26,     CAN0_TX_B),
+
+       PINMUX_IPSR_DATA(IP5_30_29,     SSI_SDATA7),
+       PINMUX_IPSR_DATA(IP5_30_29,     HSPI_TX0_B),
+       PINMUX_IPSR_MSEL(IP5_30_29,     RX2_A,          SEL_SCIF2_A),
+       PINMUX_IPSR_MSEL(IP5_30_29,     CAN0_RX_B,      SEL_CAN0_B),
+
+       /* IPSR6 */
+       PINMUX_IPSR_DATA(IP6_1_0,       SSI_SCK6),
+       PINMUX_IPSR_MSEL(IP6_1_0,       HSPI_RX2_A,     SEL_HSPI2_A),
+       PINMUX_IPSR_MSEL(IP6_1_0,       FMCLK_B,        SEL_FM_B),
+       PINMUX_IPSR_DATA(IP6_1_0,       CAN1_TX_B),
+
+       PINMUX_IPSR_DATA(IP6_4_2,       SSI_WS6),
+       PINMUX_IPSR_MSEL(IP6_4_2,       HSPI_CLK2_A,    SEL_HSPI2_A),
+       PINMUX_IPSR_DATA(IP6_4_2,       BPFCLK_B),
+       PINMUX_IPSR_MSEL(IP6_4_2,       CAN1_RX_B,      SEL_CAN1_B),
+
+       PINMUX_IPSR_DATA(IP6_6_5,       SSI_SDATA6),
+       PINMUX_IPSR_DATA(IP6_6_5,       HSPI_TX2_A),
+       PINMUX_IPSR_MSEL(IP6_6_5,       FMIN_B,         SEL_FM_B),
+
+       PINMUX_IPSR_DATA(IP6_7,         SSI_SCK5),
+       PINMUX_IPSR_MSEL(IP6_7,         RX4_C,          SEL_SCIF4_C),
+
+       PINMUX_IPSR_DATA(IP6_8,         SSI_WS5),
+       PINMUX_IPSR_DATA(IP6_8,         TX4_C),
+
+       PINMUX_IPSR_DATA(IP6_9,         SSI_SDATA5),
+       PINMUX_IPSR_MSEL(IP6_9,         RX0_D,          SEL_SCIF0_D),
+
+       PINMUX_IPSR_DATA(IP6_10,        SSI_WS34),
+       PINMUX_IPSR_DATA(IP6_10,        ARM_TRACEDATA_8),
+
+       PINMUX_IPSR_DATA(IP6_12_11,     SSI_SDATA4),
+       PINMUX_IPSR_MSEL(IP6_12_11,     SSI_WS2_A,      SEL_SSI2_A),
+       PINMUX_IPSR_DATA(IP6_12_11,     ARM_TRACEDATA_9),
+
+       PINMUX_IPSR_DATA(IP6_13,        SSI_SDATA3),
+       PINMUX_IPSR_DATA(IP6_13,        ARM_TRACEDATA_10),
+
+       PINMUX_IPSR_DATA(IP6_15_14,     SSI_SCK012),
+       PINMUX_IPSR_DATA(IP6_15_14,     ARM_TRACEDATA_11),
+       PINMUX_IPSR_DATA(IP6_15_14,     TX0_D),
+
+       PINMUX_IPSR_DATA(IP6_16,        SSI_WS012),
+       PINMUX_IPSR_DATA(IP6_16,        ARM_TRACEDATA_12),
+
+       PINMUX_IPSR_DATA(IP6_18_17,     SSI_SDATA2),
+       PINMUX_IPSR_MSEL(IP6_18_17,     HSPI_CS2_A,     SEL_HSPI2_A),
+       PINMUX_IPSR_DATA(IP6_18_17,     ARM_TRACEDATA_13),
+       PINMUX_IPSR_MSEL(IP6_18_17,     SDA1_A,         SEL_I2C1_A),
+
+       PINMUX_IPSR_DATA(IP6_20_19,     SSI_SDATA1),
+       PINMUX_IPSR_DATA(IP6_20_19,     ARM_TRACEDATA_14),
+       PINMUX_IPSR_MSEL(IP6_20_19,     SCL1_A,         SEL_I2C1_A),
+       PINMUX_IPSR_MSEL(IP6_20_19,     SCK2_A,         SEL_SCIF2_A),
+
+       PINMUX_IPSR_DATA(IP6_21,        SSI_SDATA0),
+       PINMUX_IPSR_DATA(IP6_21,        ARM_TRACEDATA_15),
+
+       PINMUX_IPSR_DATA(IP6_23_22,     SD0_CLK),
+       PINMUX_IPSR_DATA(IP6_23_22,     SUB_TDO),
+
+       PINMUX_IPSR_DATA(IP6_25_24,     SD0_CMD),
+       PINMUX_IPSR_DATA(IP6_25_24,     SUB_TRST),
+
+       PINMUX_IPSR_DATA(IP6_27_26,     SD0_DAT0),
+       PINMUX_IPSR_DATA(IP6_27_26,     SUB_TMS),
+
+       PINMUX_IPSR_DATA(IP6_29_28,     SD0_DAT1),
+       PINMUX_IPSR_DATA(IP6_29_28,     SUB_TCK),
+
+       PINMUX_IPSR_DATA(IP6_31_30,     SD0_DAT2),
+       PINMUX_IPSR_DATA(IP6_31_30,     SUB_TDI),
+
+       /* IPSR7 */
+       PINMUX_IPSR_DATA(IP7_1_0,       SD0_DAT3),
+       PINMUX_IPSR_MSEL(IP7_1_0,       IRQ1_B,         SEL_IRQ1_B),
+
+       PINMUX_IPSR_DATA(IP7_3_2,       SD0_CD),
+       PINMUX_IPSR_DATA(IP7_3_2,       TX5_A),
+
+       PINMUX_IPSR_DATA(IP7_5_4,       SD0_WP),
+       PINMUX_IPSR_MSEL(IP7_5_4,       RX5_A,          SEL_SCIF5_A),
+
+       PINMUX_IPSR_DATA(IP7_8_6,       VI1_CLKENB),
+       PINMUX_IPSR_MSEL(IP7_8_6,       HSPI_CLK0_A,    SEL_HSPI0_A),
+       PINMUX_IPSR_DATA(IP7_8_6,       HTX1_A),
+       PINMUX_IPSR_MSEL(IP7_8_6,       RTS1_C,         SEL_SCIF1_C),
+
+       PINMUX_IPSR_DATA(IP7_11_9,      VI1_FIELD),
+       PINMUX_IPSR_MSEL(IP7_11_9,      HSPI_CS0_A,     SEL_HSPI0_A),
+       PINMUX_IPSR_MSEL(IP7_11_9,      HRX1_A,         SEL_HSCIF1_A),
+       PINMUX_IPSR_MSEL(IP7_11_9,      SCK1_C,         SEL_SCIF1_C),
+
+       PINMUX_IPSR_DATA(IP7_14_12,     VI1_HSYNC),
+       PINMUX_IPSR_MSEL(IP7_14_12,     HSPI_RX0_A,     SEL_HSPI0_A),
+       PINMUX_IPSR_MSEL(IP7_14_12,     HRTS1_A,        SEL_HSCIF1_A),
+       PINMUX_IPSR_MSEL(IP7_14_12,     FMCLK_A,        SEL_FM_A),
+       PINMUX_IPSR_MSEL(IP7_14_12,     RX1_C,          SEL_SCIF1_C),
+
+       PINMUX_IPSR_DATA(IP7_17_15,     VI1_VSYNC),
+       PINMUX_IPSR_DATA(IP7_17_15,     HSPI_TX0),
+       PINMUX_IPSR_MSEL(IP7_17_15,     HCTS1_A,        SEL_HSCIF1_A),
+       PINMUX_IPSR_DATA(IP7_17_15,     BPFCLK_A),
+       PINMUX_IPSR_DATA(IP7_17_15,     TX1_C),
+
+       PINMUX_IPSR_DATA(IP7_20_18,     TCLK0),
+       PINMUX_IPSR_MSEL(IP7_20_18,     HSCK1_A,        SEL_HSCIF1_A),
+       PINMUX_IPSR_MSEL(IP7_20_18,     FMIN_A,         SEL_FM_A),
+       PINMUX_IPSR_MSEL(IP7_20_18,     IRQ2_C,         SEL_IRQ2_C),
+       PINMUX_IPSR_MSEL(IP7_20_18,     CTS1_C,         SEL_SCIF1_C),
+       PINMUX_IPSR_DATA(IP7_20_18,     SPEEDIN),
+
+       PINMUX_IPSR_DATA(IP7_21,        VI0_CLK),
+       PINMUX_IPSR_MSEL(IP7_21,        CAN_CLK_A,      SEL_CANCLK_A),
+
+       PINMUX_IPSR_DATA(IP7_24_22,     VI0_CLKENB),
+       PINMUX_IPSR_MSEL(IP7_24_22,     SD2_DAT2_B,     SEL_SD2_B),
+       PINMUX_IPSR_DATA(IP7_24_22,     VI1_DATA0),
+       PINMUX_IPSR_DATA(IP7_24_22,     DU1_DG6),
+       PINMUX_IPSR_MSEL(IP7_24_22,     HSPI_RX1_A,     SEL_HSPI1_A),
+       PINMUX_IPSR_MSEL(IP7_24_22,     RX4_B,          SEL_SCIF4_B),
+
+       PINMUX_IPSR_DATA(IP7_28_25,     VI0_FIELD),
+       PINMUX_IPSR_MSEL(IP7_28_25,     SD2_DAT3_B,     SEL_SD2_B),
+       PINMUX_DATA(VI0_R3_C_MARK,      FN_IP7_28_25,   FN_VI0_R3_C,    FN_SEL_VI0_C), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R3_D_MARK,      FN_IP7_28_25,   FN_VI0_R3_C,    FN_SEL_VI0_D), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP7_28_25,     VI1_DATA1),
+       PINMUX_IPSR_DATA(IP7_28_25,     DU1_DG7),
+       PINMUX_IPSR_MSEL(IP7_28_25,     HSPI_CLK1_A,    SEL_HSPI1_A),
+       PINMUX_IPSR_DATA(IP7_28_25,     TX4_B),
+
+       PINMUX_IPSR_DATA(IP7_31_29,     VI0_HSYNC),
+       PINMUX_IPSR_MSEL(IP7_31_29,     SD2_CD_B,       SEL_SD2_B),
+       PINMUX_IPSR_DATA(IP7_31_29,     VI1_DATA2),
+       PINMUX_IPSR_DATA(IP7_31_29,     DU1_DR2),
+       PINMUX_IPSR_MSEL(IP7_31_29,     HSPI_CS1_A,     SEL_HSPI1_A),
+       PINMUX_IPSR_MSEL(IP7_31_29,     RX3_B,          SEL_SCIF3_B),
+
+       /* IPSR8 */
+       PINMUX_IPSR_DATA(IP8_2_0,       VI0_VSYNC),
+       PINMUX_IPSR_MSEL(IP8_2_0,       SD2_WP_B,       SEL_SD2_B),
+       PINMUX_IPSR_DATA(IP8_2_0,       VI1_DATA3),
+       PINMUX_IPSR_DATA(IP8_2_0,       DU1_DR3),
+       PINMUX_IPSR_DATA(IP8_2_0,       HSPI_TX1_A),
+       PINMUX_IPSR_DATA(IP8_2_0,       TX3_B),
+
+       PINMUX_IPSR_DATA(IP8_5_3,       VI0_DATA0_VI0_B0),
+       PINMUX_IPSR_DATA(IP8_5_3,       DU1_DG2),
+       PINMUX_IPSR_MSEL(IP8_5_3,       IRQ2_B,         SEL_IRQ2_B),
+       PINMUX_IPSR_MSEL(IP8_5_3,       RX3_D,          SEL_SCIF3_D),
+
+       PINMUX_IPSR_DATA(IP8_8_6,       VI0_DATA1_VI0_B1),
+       PINMUX_IPSR_DATA(IP8_8_6,       DU1_DG3),
+       PINMUX_IPSR_MSEL(IP8_8_6,       IRQ3_B,         SEL_IRQ3_B),
+       PINMUX_IPSR_DATA(IP8_8_6,       TX3_D),
+
+       PINMUX_IPSR_DATA(IP8_10_9,      VI0_DATA2_VI0_B2),
+       PINMUX_IPSR_DATA(IP8_10_9,      DU1_DG4),
+       PINMUX_IPSR_MSEL(IP8_10_9,      RX0_C,          SEL_SCIF0_C),
+
+       PINMUX_IPSR_DATA(IP8_13_11,     VI0_DATA3_VI0_B3),
+       PINMUX_IPSR_DATA(IP8_13_11,     DU1_DG5),
+       PINMUX_IPSR_DATA(IP8_13_11,     TX1_A),
+       PINMUX_IPSR_DATA(IP8_13_11,     TX0_C),
+
+       PINMUX_IPSR_DATA(IP8_15_14,     VI0_DATA4_VI0_B4),
+       PINMUX_IPSR_DATA(IP8_15_14,     DU1_DB2),
+       PINMUX_IPSR_MSEL(IP8_15_14,     RX1_A,          SEL_SCIF1_A),
+
+       PINMUX_IPSR_DATA(IP8_18_16,     VI0_DATA5_VI0_B5),
+       PINMUX_IPSR_DATA(IP8_18_16,     DU1_DB3),
+       PINMUX_IPSR_MSEL(IP8_18_16,     SCK1_A,         SEL_SCIF1_A),
+       PINMUX_IPSR_DATA(IP8_18_16,     PWM4),
+       PINMUX_IPSR_MSEL(IP8_18_16,     HSCK1_B,        SEL_HSCIF1_B),
+
+       PINMUX_IPSR_DATA(IP8_21_19,     VI0_DATA6_VI0_G0),
+       PINMUX_IPSR_DATA(IP8_21_19,     DU1_DB4),
+       PINMUX_IPSR_MSEL(IP8_21_19,     CTS1_A,         SEL_SCIF1_A),
+       PINMUX_IPSR_DATA(IP8_21_19,     PWM5),
+
+       PINMUX_IPSR_DATA(IP8_23_22,     VI0_DATA7_VI0_G1),
+       PINMUX_IPSR_DATA(IP8_23_22,     DU1_DB5),
+       PINMUX_IPSR_MSEL(IP8_23_22,     RTS1_A,         SEL_SCIF1_A),
+
+       PINMUX_IPSR_DATA(IP8_26_24,     VI0_G2),
+       PINMUX_IPSR_DATA(IP8_26_24,     SD2_CLK_B),
+       PINMUX_IPSR_DATA(IP8_26_24,     VI1_DATA4),
+       PINMUX_IPSR_DATA(IP8_26_24,     DU1_DR4),
+       PINMUX_IPSR_DATA(IP8_26_24,     HTX1_B),
+
+       PINMUX_IPSR_DATA(IP8_29_27,     VI0_G3),
+       PINMUX_IPSR_MSEL(IP8_29_27,     SD2_CMD_B,      SEL_SD2_B),
+       PINMUX_IPSR_DATA(IP8_29_27,     VI1_DATA5),
+       PINMUX_IPSR_DATA(IP8_29_27,     DU1_DR5),
+       PINMUX_IPSR_MSEL(IP8_29_27,     HRX1_B,         SEL_HSCIF1_B),
+
+       /* IPSR9 */
+       PINMUX_IPSR_DATA(IP9_2_0,       VI0_G4),
+       PINMUX_IPSR_MSEL(IP9_2_0,       SD2_DAT0_B,     SEL_SD2_B),
+       PINMUX_IPSR_DATA(IP9_2_0,       VI1_DATA6),
+       PINMUX_IPSR_DATA(IP9_2_0,       DU1_DR6),
+       PINMUX_IPSR_MSEL(IP9_2_0,       HRTS1_B,        SEL_HSCIF1_B),
+
+       PINMUX_IPSR_DATA(IP9_5_3,       VI0_G5),
+       PINMUX_IPSR_MSEL(IP9_5_3,       SD2_DAT1_B,     SEL_SD2_B),
+       PINMUX_IPSR_DATA(IP9_5_3,       VI1_DATA7),
+       PINMUX_IPSR_DATA(IP9_5_3,       DU1_DR7),
+       PINMUX_IPSR_MSEL(IP9_5_3,       HCTS1_B,        SEL_HSCIF1_B),
+
+       PINMUX_DATA(VI0_R0_A_MARK,      FN_IP9_8_6,     FN_VI0_R0_A,    FN_SEL_VI0_A), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R0_C_MARK,      FN_IP9_8_6,     FN_VI0_R0_A,    FN_SEL_VI0_C), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP9_8_6,       VI1_CLK),
+       PINMUX_IPSR_DATA(IP9_8_6,       ETH_REF_CLK),
+       PINMUX_IPSR_DATA(IP9_8_6,       DU1_DOTCLKIN),
+
+       PINMUX_DATA(VI0_R1_A_MARK,      FN_IP9_11_9,    FN_VI0_R1_A,    FN_SEL_VI0_A), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R1_C_MARK,      FN_IP9_11_9,    FN_VI0_R1_A,    FN_SEL_VI0_C), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP9_11_9,      VI1_DATA8),
+       PINMUX_IPSR_DATA(IP9_11_9,      DU1_DB6),
+       PINMUX_IPSR_DATA(IP9_11_9,      ETH_TXD0),
+       PINMUX_IPSR_DATA(IP9_11_9,      PWM2),
+       PINMUX_IPSR_DATA(IP9_11_9,      TCLK1),
+
+       PINMUX_DATA(VI0_R2_A_MARK,      FN_IP9_14_12,   FN_VI0_R2_A,    FN_SEL_VI0_A), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R2_C_MARK,      FN_IP9_14_12,   FN_VI0_R2_A,    FN_SEL_VI0_C), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP9_14_12,     VI1_DATA9),
+       PINMUX_IPSR_DATA(IP9_14_12,     DU1_DB7),
+       PINMUX_IPSR_DATA(IP9_14_12,     ETH_TXD1),
+       PINMUX_IPSR_DATA(IP9_14_12,     PWM3),
+
+       PINMUX_IPSR_MSEL(IP9_17_15,     VI0_R3_A,       SEL_VI0_A),
+       PINMUX_IPSR_DATA(IP9_17_15,     ETH_CRS_DV),
+       PINMUX_IPSR_DATA(IP9_17_15,     IECLK),
+       PINMUX_IPSR_MSEL(IP9_17_15,     SCK2_C,         SEL_SCIF2_C),
+
+       PINMUX_DATA(VI0_R4_A_MARK,      FN_IP9_20_18,   FN_VI0_R4_A,    FN_SEL_VI0_A), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R3_C_MARK,      FN_IP9_20_18,   FN_VI0_R4_A,    FN_SEL_VI0_C), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP9_20_18,     ETH_TX_EN),
+       PINMUX_IPSR_DATA(IP9_20_18,     IETX),
+       PINMUX_IPSR_DATA(IP9_20_18,     TX2_C),
+
+       PINMUX_DATA(VI0_R5_A_MARK,      FN_IP9_23_21,   FN_VI0_R5_A,    FN_SEL_VI0_A), /* see sel_vi0 */
+       PINMUX_DATA(VI0_R5_C_MARK,      FN_IP9_23_21,   FN_VI0_R5_A,    FN_SEL_VI0_C), /* see sel_vi0 */
+       PINMUX_IPSR_DATA(IP9_23_21,     ETH_RX_ER),
+       PINMUX_IPSR_MSEL(IP9_23_21,     FMCLK_C,        SEL_FM_C),
+       PINMUX_IPSR_DATA(IP9_23_21,     IERX),
+       PINMUX_IPSR_MSEL(IP9_23_21,     RX2_C,          SEL_SCIF2_C),
+
+       PINMUX_IPSR_MSEL(IP9_26_24,     VI1_DATA10_A,   SEL_VI1_A),
+       PINMUX_IPSR_DATA(IP9_26_24,     DU1_DOTCLKOUT),
+       PINMUX_IPSR_DATA(IP9_26_24,     ETH_RXD0),
+       PINMUX_IPSR_DATA(IP9_26_24,     BPFCLK_C),
+       PINMUX_IPSR_DATA(IP9_26_24,     TX2_D),
+       PINMUX_IPSR_MSEL(IP9_26_24,     SDA2_C,         SEL_I2C2_C),
+
+       PINMUX_IPSR_MSEL(IP9_29_27,     VI1_DATA11_A,   SEL_VI1_A),
+       PINMUX_IPSR_DATA(IP9_29_27,     DU1_EXHSYNC_DU1_HSYNC),
+       PINMUX_IPSR_DATA(IP9_29_27,     ETH_RXD1),
+       PINMUX_IPSR_MSEL(IP9_29_27,     FMIN_C,         SEL_FM_C),
+       PINMUX_IPSR_MSEL(IP9_29_27,     RX2_D,          SEL_SCIF2_D),
+       PINMUX_IPSR_MSEL(IP9_29_27,     SCL2_C,         SEL_I2C2_C),
+
+       /* IPSR10 */
+       PINMUX_IPSR_DATA(IP10_2_0,      SD2_CLK_A),
+       PINMUX_IPSR_DATA(IP10_2_0,      DU1_EXVSYNC_DU1_VSYNC),
+       PINMUX_IPSR_DATA(IP10_2_0,      ATARD1),
+       PINMUX_IPSR_DATA(IP10_2_0,      ETH_MDC),
+       PINMUX_IPSR_MSEL(IP10_2_0,      SDA1_B,         SEL_I2C1_B),
+
+       PINMUX_IPSR_MSEL(IP10_5_3,      SD2_CMD_A,      SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_5_3,      DU1_EXODDF_DU1_ODDF_DISP_CDE),
+       PINMUX_IPSR_DATA(IP10_5_3,      ATAWR1),
+       PINMUX_IPSR_DATA(IP10_5_3,      ETH_MDIO),
+       PINMUX_IPSR_MSEL(IP10_5_3,      SCL1_B,         SEL_I2C1_B),
+
+       PINMUX_IPSR_MSEL(IP10_8_6,      SD2_DAT0_A,     SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_8_6,      DU1_DISP),
+       PINMUX_IPSR_DATA(IP10_8_6,      ATACS01),
+       PINMUX_IPSR_MSEL(IP10_8_6,      DREQ1_B,        SEL_DREQ1_B),
+       PINMUX_IPSR_DATA(IP10_8_6,      ETH_LINK),
+       PINMUX_IPSR_MSEL(IP10_8_6,      CAN1_RX_A,      SEL_CAN1_A),
+
+       PINMUX_IPSR_MSEL(IP10_12_9,     SD2_DAT1_A,     SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_12_9,     DU1_CDE),
+       PINMUX_IPSR_DATA(IP10_12_9,     ATACS11),
+       PINMUX_IPSR_DATA(IP10_12_9,     DACK1_B),
+       PINMUX_IPSR_DATA(IP10_12_9,     ETH_MAGIC),
+       PINMUX_IPSR_DATA(IP10_12_9,     CAN1_TX_A),
+       PINMUX_IPSR_DATA(IP10_12_9,     PWM6),
+
+       PINMUX_IPSR_MSEL(IP10_15_13,    SD2_DAT2_A,     SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_15_13,    VI1_DATA12),
+       PINMUX_IPSR_MSEL(IP10_15_13,    DREQ2_B,        SEL_DREQ2_B),
+       PINMUX_IPSR_DATA(IP10_15_13,    ATADIR1),
+       PINMUX_IPSR_MSEL(IP10_15_13,    HSPI_CLK2_B,    SEL_HSPI2_B),
+       PINMUX_IPSR_MSEL(IP10_15_13,    GPSCLK_B,       SEL_GPS_B),
+
+       PINMUX_IPSR_MSEL(IP10_18_16,    SD2_DAT3_A,     SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_18_16,    VI1_DATA13),
+       PINMUX_IPSR_DATA(IP10_18_16,    DACK2_B),
+       PINMUX_IPSR_DATA(IP10_18_16,    ATAG1),
+       PINMUX_IPSR_MSEL(IP10_18_16,    HSPI_CS2_B,     SEL_HSPI2_B),
+       PINMUX_IPSR_MSEL(IP10_18_16,    GPSIN_B,        SEL_GPS_B),
+
+       PINMUX_IPSR_MSEL(IP10_21_19,    SD2_CD_A,       SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_21_19,    VI1_DATA14),
+       PINMUX_IPSR_MSEL(IP10_21_19,    EX_WAIT1_B,     SEL_WAIT1_B),
+       PINMUX_IPSR_MSEL(IP10_21_19,    DREQ0_B,        SEL_DREQ0_B),
+       PINMUX_IPSR_MSEL(IP10_21_19,    HSPI_RX2_B,     SEL_HSPI2_B),
+       PINMUX_IPSR_MSEL(IP10_21_19,    REMOCON_A,      SEL_REMOCON_A),
+
+       PINMUX_IPSR_MSEL(IP10_24_22,    SD2_WP_A,       SEL_SD2_A),
+       PINMUX_IPSR_DATA(IP10_24_22,    VI1_DATA15),
+       PINMUX_IPSR_MSEL(IP10_24_22,    EX_WAIT2_B,     SEL_WAIT2_B),
+       PINMUX_IPSR_DATA(IP10_24_22,    DACK0_B),
+       PINMUX_IPSR_DATA(IP10_24_22,    HSPI_TX2_B),
+       PINMUX_IPSR_MSEL(IP10_24_22,    CAN_CLK_C,      SEL_CANCLK_C),
+};
+
+static struct sh_pfc_pin pinmux_pins[] = {
+       PINMUX_GPIO_GP_ALL(),
+};
+
+/* Pin numbers for pins without a corresponding GPIO port number are computed
+ * from the row and column numbers with a 1000 offset to avoid collisions with
+ * GPIO port numbers.
+ */
+#define PIN_NUMBER(row, col)           (1000+((row)-1)*25+(col)-1)
+
+/* - macro */
+#define SH_PFC_PINS(name, args...) \
+       static const unsigned int name ##_pins[] = { args }
+#define SH_PFC_MUX1(name, arg1)                                        \
+       static const unsigned int name ##_mux[]  = { arg1##_MARK }
+#define SH_PFC_MUX2(name, arg1, arg2)                                  \
+       static const unsigned int name ##_mux[]  = { arg1##_MARK, arg2##_MARK, }
+#define SH_PFC_MUX3(name, arg1, arg2, arg3)                                    \
+       static const unsigned int name ##_mux[]  = { arg1##_MARK, arg2##_MARK,  \
+                                                    arg3##_MARK }
+#define SH_PFC_MUX4(name, arg1, arg2, arg3, arg4)                      \
+       static const unsigned int name ##_mux[]  = { arg1##_MARK, arg2##_MARK, \
+                                                    arg3##_MARK, arg4##_MARK }
+#define SH_PFC_MUX8(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
+       static const unsigned int name ##_mux[]  = { arg1##_MARK, arg2##_MARK, \
+                                                    arg3##_MARK, arg4##_MARK, \
+                                                    arg5##_MARK, arg6##_MARK, \
+                                                    arg7##_MARK, arg8##_MARK, }
+
+/* - Ether ------------------------------------------------------------------ */
+SH_PFC_PINS(ether_rmii,                RCAR_GP_PIN(4, 10),     RCAR_GP_PIN(4, 11),
+                               RCAR_GP_PIN(4, 13),     RCAR_GP_PIN(4, 9),
+                               RCAR_GP_PIN(4, 15),     RCAR_GP_PIN(4, 16),
+                               RCAR_GP_PIN(4, 12),     RCAR_GP_PIN(4, 14),
+                               RCAR_GP_PIN(4, 18),     RCAR_GP_PIN(4, 17));
+static const unsigned int ether_rmii_mux[] = {
+       ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK,  ETH_REF_CLK_MARK,
+       ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_CRS_DV_MARK, ETH_RX_ER_MARK,
+       ETH_MDIO_MARK, ETH_MDC_MARK,
+};
+SH_PFC_PINS(ether_link,                RCAR_GP_PIN(4, 19));
+SH_PFC_MUX1(ether_link,                ETH_LINK);
+SH_PFC_PINS(ether_magic,       RCAR_GP_PIN(4, 20));
+SH_PFC_MUX1(ether_magic,       ETH_MAGIC);
+
+/* - SCIF macro ------------------------------------------------------------- */
+#define SCIF_PFC_PIN(name, args...)    SH_PFC_PINS(name, args)
+#define SCIF_PFC_DAT(name, tx, rx)     SH_PFC_MUX2(name, tx, rx)
+#define SCIF_PFC_CTR(name, cts, rts)   SH_PFC_MUX2(name, cts, rts)
+#define SCIF_PFC_CLK(name, sck)                SH_PFC_MUX1(name, sck)
+
+/* - HSCIF0 ----------------------------------------------------------------- */
+SCIF_PFC_PIN(hscif0_data_a,    RCAR_GP_PIN(1, 17),     RCAR_GP_PIN(1, 18));
+SCIF_PFC_DAT(hscif0_data_a,    HTX0_A,                 HRX0_A);
+SCIF_PFC_PIN(hscif0_data_b,    RCAR_GP_PIN(0, 29),     RCAR_GP_PIN(0, 30));
+SCIF_PFC_DAT(hscif0_data_b,    HTX0_B,                 HRX0_B);
+SCIF_PFC_PIN(hscif0_ctrl_a,    RCAR_GP_PIN(1, 20),     RCAR_GP_PIN(1, 21));
+SCIF_PFC_CTR(hscif0_ctrl_a,    HCTS0_A,                HRTS0_A);
+SCIF_PFC_PIN(hscif0_ctrl_b,    RCAR_GP_PIN(0, 31),     RCAR_GP_PIN(0, 28));
+SCIF_PFC_CTR(hscif0_ctrl_b,    HCTS0_B,                HRTS0_B);
+SCIF_PFC_PIN(hscif0_clk,       RCAR_GP_PIN(1, 19));
+SCIF_PFC_CLK(hscif0_clk,       HSCK0);
+
+/* - HSCIF1 ----------------------------------------------------------------- */
+SCIF_PFC_PIN(hscif1_data_a,    RCAR_GP_PIN(3, 19),     RCAR_GP_PIN(3, 20));
+SCIF_PFC_DAT(hscif1_data_a,    HTX1_A,                 HRX1_A);
+SCIF_PFC_PIN(hscif1_data_b,    RCAR_GP_PIN(4, 5),      RCAR_GP_PIN(4, 6));
+SCIF_PFC_DAT(hscif1_data_b,    HTX1_B,                 HRX1_B);
+SCIF_PFC_PIN(hscif1_ctrl_a,    RCAR_GP_PIN(3, 22),     RCAR_GP_PIN(3, 21));
+SCIF_PFC_CTR(hscif1_ctrl_a,    HCTS1_A,                HRTS1_A);
+SCIF_PFC_PIN(hscif1_ctrl_b,    RCAR_GP_PIN(4, 8),      RCAR_GP_PIN(4, 7));
+SCIF_PFC_CTR(hscif1_ctrl_b,    HCTS1_B,                HRTS1_B);
+SCIF_PFC_PIN(hscif1_clk_a,     RCAR_GP_PIN(3, 23));
+SCIF_PFC_CLK(hscif1_clk_a,     HSCK1_A);
+SCIF_PFC_PIN(hscif1_clk_b,     RCAR_GP_PIN(4, 2));
+SCIF_PFC_CLK(hscif1_clk_b,     HSCK1_B);
+
+/* - HSPI macro --------------------------------------------------------------*/
+#define HSPI_PFC_PIN(name, args...)            SH_PFC_PINS(name, args)
+#define HSPI_PFC_DAT(name, clk, cs, rx, tx)    SH_PFC_MUX4(name, clk, cs, rx, tx)
+
+/* - HSPI0 -------------------------------------------------------------------*/
+HSPI_PFC_PIN(hspi0_a,  RCAR_GP_PIN(3, 19),     RCAR_GP_PIN(3, 20),
+                       RCAR_GP_PIN(3, 21),     RCAR_GP_PIN(3, 22));
+HSPI_PFC_DAT(hspi0_a,  HSPI_CLK0_A,            HSPI_CS0_A,
+                       HSPI_RX0_A,             HSPI_TX0);
+
+HSPI_PFC_PIN(hspi0_b,  RCAR_GP_PIN(2, 25),     RCAR_GP_PIN(2, 26),
+                       RCAR_GP_PIN(2, 24),     RCAR_GP_PIN(2, 27));
+HSPI_PFC_DAT(hspi0_b,  HSPI_CLK0_B,            HSPI_CS0_B,
+                       HSPI_RX0_B,             HSPI_TX0_B);
+
+/* - HSPI1 -------------------------------------------------------------------*/
+HSPI_PFC_PIN(hspi1_a,  RCAR_GP_PIN(3, 26),     RCAR_GP_PIN(3, 27),
+                       RCAR_GP_PIN(3, 25),     RCAR_GP_PIN(3, 28));
+HSPI_PFC_DAT(hspi1_a,  HSPI_CLK1_A,            HSPI_CS1_A,
+                       HSPI_RX1_A,             HSPI_TX1_A);
+
+HSPI_PFC_PIN(hspi1_b,  RCAR_GP_PIN(0, 27),     RCAR_GP_PIN(0, 26),
+                       PIN_NUMBER(20, 1),      PIN_NUMBER(25, 2));
+HSPI_PFC_DAT(hspi1_b,  HSPI_CLK1_B,            HSPI_CS1_B,
+                       HSPI_RX1_B,             HSPI_TX1_B);
+
+/* - HSPI2 -------------------------------------------------------------------*/
+HSPI_PFC_PIN(hspi2_a,  RCAR_GP_PIN(2, 29),     RCAR_GP_PIN(3, 8),
+                       RCAR_GP_PIN(2, 28),     RCAR_GP_PIN(2, 30));
+HSPI_PFC_DAT(hspi2_a,  HSPI_CLK2_A,            HSPI_CS2_A,
+                       HSPI_RX2_A,             HSPI_TX2_A);
+
+HSPI_PFC_PIN(hspi2_b,  RCAR_GP_PIN(4, 21),     RCAR_GP_PIN(4, 22),
+                       RCAR_GP_PIN(4, 23),     RCAR_GP_PIN(4, 24));
+HSPI_PFC_DAT(hspi2_b,  HSPI_CLK2_B,            HSPI_CS2_B,
+                       HSPI_RX2_B,             HSPI_TX2_B);
+
+/* - I2C macro ------------------------------------------------------------- */
+#define I2C_PFC_PIN(name, args...)     SH_PFC_PINS(name, args)
+#define I2C_PFC_MUX(name, sda, scl)    SH_PFC_MUX2(name, sda, scl)
+
+/* - I2C1 ------------------------------------------------------------------ */
+I2C_PFC_PIN(i2c1_a,    RCAR_GP_PIN(3, 8),      RCAR_GP_PIN(3, 9));
+I2C_PFC_MUX(i2c1_a,    SDA1_A,                 SCL1_A);
+I2C_PFC_PIN(i2c1_b,    RCAR_GP_PIN(4, 17),     RCAR_GP_PIN(4, 18));
+I2C_PFC_MUX(i2c1_b,    SDA1_B,                 SCL1_B);
+
+/* - I2C2 ------------------------------------------------------------------ */
+I2C_PFC_PIN(i2c2_a,    PIN_NUMBER(3, 20),      RCAR_GP_PIN(1, 3));
+I2C_PFC_MUX(i2c2_a,    SDA2_A,                 SCL2_A);
+I2C_PFC_PIN(i2c2_b,    RCAR_GP_PIN(0, 3),      RCAR_GP_PIN(0, 4));
+I2C_PFC_MUX(i2c2_b,    SDA2_B,                 SCL2_B);
+I2C_PFC_PIN(i2c2_c,    RCAR_GP_PIN(4, 15),     RCAR_GP_PIN(4, 16));
+I2C_PFC_MUX(i2c2_c,    SDA2_C,                 SCL2_C);
+
+/* - I2C3 ------------------------------------------------------------------ */
+I2C_PFC_PIN(i2c3_a,    RCAR_GP_PIN(1, 14),     RCAR_GP_PIN(1, 15));
+I2C_PFC_MUX(i2c3_a,    SDA3_A,                 SCL3_A);
+I2C_PFC_PIN(i2c3_b,    RCAR_GP_PIN(1, 16),     RCAR_GP_PIN(1, 19));
+I2C_PFC_MUX(i2c3_b,    SDA3_B,                 SCL3_B);
+I2C_PFC_PIN(i2c3_c,    RCAR_GP_PIN(1, 22),     RCAR_GP_PIN(1, 23));
+I2C_PFC_MUX(i2c3_c,    SDA3_C,                 SCL3_C);
+
+/* - MMC macro -------------------------------------------------------------- */
+#define MMC_PFC_PINS(name, args...)            SH_PFC_PINS(name, args)
+#define MMC_PFC_CTRL(name, clk, cmd)           SH_PFC_MUX2(name, clk, cmd)
+#define MMC_PFC_DAT1(name, d0)                 SH_PFC_MUX1(name, d0)
+#define MMC_PFC_DAT4(name, d0, d1, d2, d3)     SH_PFC_MUX4(name, d0, d1, d2, d3)
+#define MMC_PFC_DAT8(name, d0, d1, d2, d3, d4, d5, d6, d7)     \
+                       SH_PFC_MUX8(name, d0, d1, d2, d3, d4, d5, d6, d7)
+
+/* - MMC -------------------------------------------------------------------- */
+MMC_PFC_PINS(mmc_ctrl,         RCAR_GP_PIN(1, 5),      RCAR_GP_PIN(1, 6));
+MMC_PFC_CTRL(mmc_ctrl,         MMC_CLK,                MMC_CMD);
+MMC_PFC_PINS(mmc_data1,                RCAR_GP_PIN(1, 7));
+MMC_PFC_DAT1(mmc_data1,                MMC_D0);
+MMC_PFC_PINS(mmc_data4,                RCAR_GP_PIN(1, 7),      RCAR_GP_PIN(2, 8),
+                               RCAR_GP_PIN(0, 5),      RCAR_GP_PIN(0, 6));
+MMC_PFC_DAT4(mmc_data4,                MMC_D0,                 MMC_D1,
+                               MMC_D2,                 MMC_D3);
+MMC_PFC_PINS(mmc_data8,                RCAR_GP_PIN(1, 7),      RCAR_GP_PIN(2, 8),
+                               RCAR_GP_PIN(0, 5),      RCAR_GP_PIN(0, 6),
+                               RCAR_GP_PIN(1, 4),      RCAR_GP_PIN(1, 0),
+                               RCAR_GP_PIN(0, 30),     RCAR_GP_PIN(0, 31));
+MMC_PFC_DAT8(mmc_data8,                MMC_D0,                 MMC_D1,
+                               MMC_D2,                 MMC_D3,
+                               MMC_D4,                 MMC_D5,
+                               MMC_D6,                 MMC_D7);
+
+/* - SCIF CLOCK ------------------------------------------------------------- */
+SCIF_PFC_PIN(scif_clk,         RCAR_GP_PIN(1, 16));
+SCIF_PFC_CLK(scif_clk,         SCIF_CLK);
+
+/* - SCIF0 ------------------------------------------------------------------ */
+SCIF_PFC_PIN(scif0_data_a,     RCAR_GP_PIN(1, 17),     RCAR_GP_PIN(1, 18));
+SCIF_PFC_DAT(scif0_data_a,     TX0_A,                  RX0_A);
+SCIF_PFC_PIN(scif0_data_b,     RCAR_GP_PIN(2, 3),      RCAR_GP_PIN(2, 2));
+SCIF_PFC_DAT(scif0_data_b,     TX0_B,                  RX0_B);
+SCIF_PFC_PIN(scif0_data_c,     RCAR_GP_PIN(4, 0),      RCAR_GP_PIN(3, 31));
+SCIF_PFC_DAT(scif0_data_c,     TX0_C,                  RX0_C);
+SCIF_PFC_PIN(scif0_data_d,     RCAR_GP_PIN(3, 6),      RCAR_GP_PIN(3, 1));
+SCIF_PFC_DAT(scif0_data_d,     TX0_D,                  RX0_D);
+SCIF_PFC_PIN(scif0_ctrl,       RCAR_GP_PIN(1, 20),     RCAR_GP_PIN(1, 21));
+SCIF_PFC_CTR(scif0_ctrl,       CTS0,                   RTS0);
+SCIF_PFC_PIN(scif0_clk,                RCAR_GP_PIN(1, 19));
+SCIF_PFC_CLK(scif0_clk,                SCK0);
+
+/* - SCIF1 ------------------------------------------------------------------ */
+SCIF_PFC_PIN(scif1_data_a,     RCAR_GP_PIN(4, 0),      RCAR_GP_PIN(4, 1));
+SCIF_PFC_DAT(scif1_data_a,     TX1_A,                  RX1_A);
+SCIF_PFC_PIN(scif1_data_b,     RCAR_GP_PIN(2, 24),     RCAR_GP_PIN(2, 25));
+SCIF_PFC_DAT(scif1_data_b,     TX1_B,                  RX1_B);
+SCIF_PFC_PIN(scif1_data_c,     RCAR_GP_PIN(3, 22),     RCAR_GP_PIN(3, 21));
+SCIF_PFC_DAT(scif1_data_c,     TX1_C,                  RX1_C);
+SCIF_PFC_PIN(scif1_data_d,     RCAR_GP_PIN(1, 30),     RCAR_GP_PIN(1, 31));
+SCIF_PFC_DAT(scif1_data_d,     TX1_D,                  RX1_D);
+SCIF_PFC_PIN(scif1_ctrl_a,     RCAR_GP_PIN(4, 3),      RCAR_GP_PIN(4, 4));
+SCIF_PFC_CTR(scif1_ctrl_a,     CTS1_A,                 RTS1_A);
+SCIF_PFC_PIN(scif1_ctrl_c,     RCAR_GP_PIN(3, 23),     RCAR_GP_PIN(3, 19));
+SCIF_PFC_CTR(scif1_ctrl_c,     CTS1_C,                 RTS1_C);
+SCIF_PFC_PIN(scif1_clk_a,      RCAR_GP_PIN(4, 2));
+SCIF_PFC_CLK(scif1_clk_a,      SCK1_A);
+SCIF_PFC_PIN(scif1_clk_c,      RCAR_GP_PIN(3, 20));
+SCIF_PFC_CLK(scif1_clk_c,      SCK1_C);
+
+/* - SCIF2 ------------------------------------------------------------------ */
+SCIF_PFC_PIN(scif2_data_a,     RCAR_GP_PIN(2, 26),     RCAR_GP_PIN(2, 27));
+SCIF_PFC_DAT(scif2_data_a,     TX2_A,                  RX2_A);
+SCIF_PFC_PIN(scif2_data_b,     RCAR_GP_PIN(0, 29),     RCAR_GP_PIN(0, 28));
+SCIF_PFC_DAT(scif2_data_b,     TX2_B,                  RX2_B);
+SCIF_PFC_PIN(scif2_data_c,     RCAR_GP_PIN(4, 13),     RCAR_GP_PIN(4, 14));
+SCIF_PFC_DAT(scif2_data_c,     TX2_C,                  RX2_C);
+SCIF_PFC_PIN(scif2_data_d,     RCAR_GP_PIN(4, 15),     RCAR_GP_PIN(4, 16));
+SCIF_PFC_DAT(scif2_data_d,     TX2_D,                  RX2_D);
+SCIF_PFC_PIN(scif2_data_e,     RCAR_GP_PIN(0, 3),      RCAR_GP_PIN(0, 4));
+SCIF_PFC_DAT(scif2_data_e,     TX2_E,                  RX2_E);
+SCIF_PFC_PIN(scif2_clk_a,      RCAR_GP_PIN(3, 9));
+SCIF_PFC_CLK(scif2_clk_a,      SCK2_A);
+SCIF_PFC_PIN(scif2_clk_b,      PIN_NUMBER(3, 20));
+SCIF_PFC_CLK(scif2_clk_b,      SCK2_B);
+SCIF_PFC_PIN(scif2_clk_c,      RCAR_GP_PIN(4, 12));
+SCIF_PFC_CLK(scif2_clk_c,      SCK2_C);
+
+/* - SCIF3 ------------------------------------------------------------------ */
+SCIF_PFC_PIN(scif3_data_a,     RCAR_GP_PIN(1, 10),     RCAR_GP_PIN(1, 9));
+SCIF_PFC_DAT(scif3_data_a,     TX3_A,                  RX3_A);
+SCIF_PFC_PIN(scif3_data_b,     RCAR_GP_PIN(3, 28),     RCAR_GP_PIN(3, 27));
+SCIF_PFC_DAT(scif3_data_b,     TX3_B,                  RX3_B);
+SCIF_PFC_PIN(scif3_data_c,     RCAR_GP_PIN(1, 3),      RCAR_GP_PIN(0, 31));
+SCIF_PFC_DAT(scif3_data_c,     TX3_C,                  RX3_C);
+SCIF_PFC_PIN(scif3_data_d,     RCAR_GP_PIN(3, 30),     RCAR_GP_PIN(3, 29));
+SCIF_PFC_DAT(scif3_data_d,     TX3_D,                  RX3_D);
+
+/* - SCIF4 ------------------------------------------------------------------ */
+SCIF_PFC_PIN(scif4_data_a,     RCAR_GP_PIN(2, 5),      RCAR_GP_PIN(2, 4));
+SCIF_PFC_DAT(scif4_data_a,     TX4_A,                  RX4_A);
+SCIF_PFC_PIN(scif4_data_b,     RCAR_GP_PIN(3, 26),     RCAR_GP_PIN(3, 25));
+SCIF_PFC_DAT(scif4_data_b,     TX4_B,                  RX4_B);
+SCIF_PFC_PIN(scif4_data_c,     RCAR_GP_PIN(3, 0),      RCAR_GP_PIN(2, 31));
+SCIF_PFC_DAT(scif4_data_c,     TX4_C,                  RX4_C);
+
+/* - SCIF5 ------------------------------------------------------------------ */
+SCIF_PFC_PIN(scif5_data_a,     RCAR_GP_PIN(3, 17),     RCAR_GP_PIN(3, 18));
+SCIF_PFC_DAT(scif5_data_a,     TX5_A,                  RX5_A);
+SCIF_PFC_PIN(scif5_data_b,     RCAR_GP_PIN(1, 15),     RCAR_GP_PIN(1, 14));
+SCIF_PFC_DAT(scif5_data_b,     TX5_B,                  RX5_B);
+
+/* - SDHI macro ------------------------------------------------------------- */
+#define SDHI_PFC_PINS(name, args...)           SH_PFC_PINS(name, args)
+#define SDHI_PFC_DAT1(name, d0)                        SH_PFC_MUX1(name, d0)
+#define SDHI_PFC_DAT4(name, d0, d1, d2, d3)    SH_PFC_MUX4(name, d0, d1, d2, d3)
+#define SDHI_PFC_CTRL(name, clk, cmd)          SH_PFC_MUX2(name, clk, cmd)
+#define SDHI_PFC_CDPN(name, cd)                        SH_PFC_MUX1(name, cd)
+#define SDHI_PFC_WPPN(name, wp)                        SH_PFC_MUX1(name, wp)
+
+/* - SDHI0 ------------------------------------------------------------------ */
+SDHI_PFC_PINS(sdhi0_cd,                RCAR_GP_PIN(3, 17));
+SDHI_PFC_CDPN(sdhi0_cd,                SD0_CD);
+SDHI_PFC_PINS(sdhi0_ctrl,      RCAR_GP_PIN(3, 11),     RCAR_GP_PIN(3, 12));
+SDHI_PFC_CTRL(sdhi0_ctrl,      SD0_CLK,                SD0_CMD);
+SDHI_PFC_PINS(sdhi0_data1,     RCAR_GP_PIN(3, 13));
+SDHI_PFC_DAT1(sdhi0_data1,     SD0_DAT0);
+SDHI_PFC_PINS(sdhi0_data4,     RCAR_GP_PIN(3, 13),     RCAR_GP_PIN(3, 14),
+                               RCAR_GP_PIN(3, 15),     RCAR_GP_PIN(3, 16));
+SDHI_PFC_DAT4(sdhi0_data4,     SD0_DAT0,               SD0_DAT1,
+                               SD0_DAT2,               SD0_DAT3);
+SDHI_PFC_PINS(sdhi0_wp,                RCAR_GP_PIN(3, 18));
+SDHI_PFC_WPPN(sdhi0_wp,                SD0_WP);
+
+/* - SDHI1 ------------------------------------------------------------------ */
+SDHI_PFC_PINS(sdhi1_cd_a,      RCAR_GP_PIN(0, 30));
+SDHI_PFC_CDPN(sdhi1_cd_a,      SD1_CD_A);
+SDHI_PFC_PINS(sdhi1_cd_b,      RCAR_GP_PIN(2, 24));
+SDHI_PFC_CDPN(sdhi1_cd_b,      SD1_CD_B);
+SDHI_PFC_PINS(sdhi1_ctrl_a,    RCAR_GP_PIN(1, 5),      RCAR_GP_PIN(1, 6));
+SDHI_PFC_CTRL(sdhi1_ctrl_a,    SD1_CLK_A,              SD1_CMD_A);
+SDHI_PFC_PINS(sdhi1_ctrl_b,    RCAR_GP_PIN(1, 17),     RCAR_GP_PIN(1, 16));
+SDHI_PFC_CTRL(sdhi1_ctrl_b,    SD1_CLK_B,              SD1_CMD_B);
+SDHI_PFC_PINS(sdhi1_data1_a,   RCAR_GP_PIN(1, 7));
+SDHI_PFC_DAT1(sdhi1_data1_a,   SD1_DAT0_A);
+SDHI_PFC_PINS(sdhi1_data1_b,   RCAR_GP_PIN(1, 18));
+SDHI_PFC_DAT1(sdhi1_data1_b,   SD1_DAT0_B);
+SDHI_PFC_PINS(sdhi1_data4_a,   RCAR_GP_PIN(1, 7),      RCAR_GP_PIN(1, 8),
+                               RCAR_GP_PIN(0, 5),      RCAR_GP_PIN(0, 6));
+SDHI_PFC_DAT4(sdhi1_data4_a,   SD1_DAT0_A,             SD1_DAT1_A,
+                               SD1_DAT2_A,             SD1_DAT3_A);
+SDHI_PFC_PINS(sdhi1_data4_b,   RCAR_GP_PIN(1, 18),     RCAR_GP_PIN(1, 19),
+                               RCAR_GP_PIN(1, 20),     RCAR_GP_PIN(1, 21));
+SDHI_PFC_DAT4(sdhi1_data4_b,   SD1_DAT0_B,             SD1_DAT1_B,
+                               SD1_DAT2_B,             SD1_DAT3_B);
+SDHI_PFC_PINS(sdhi1_wp_a,      RCAR_GP_PIN(0, 31));
+SDHI_PFC_WPPN(sdhi1_wp_a,      SD1_WP_A);
+SDHI_PFC_PINS(sdhi1_wp_b,      RCAR_GP_PIN(2, 25));
+SDHI_PFC_WPPN(sdhi1_wp_b,      SD1_WP_B);
+
+/* - SDH2 ------------------------------------------------------------------- */
+SDHI_PFC_PINS(sdhi2_cd_a,      RCAR_GP_PIN(4, 23));
+SDHI_PFC_CDPN(sdhi2_cd_a,      SD2_CD_A);
+SDHI_PFC_PINS(sdhi2_cd_b,      RCAR_GP_PIN(3, 27));
+SDHI_PFC_CDPN(sdhi2_cd_b,      SD2_CD_B);
+SDHI_PFC_PINS(sdhi2_ctrl_a,    RCAR_GP_PIN(4, 17),     RCAR_GP_PIN(4, 18));
+SDHI_PFC_CTRL(sdhi2_ctrl_a,    SD2_CLK_A,              SD2_CMD_A);
+SDHI_PFC_PINS(sdhi2_ctrl_b,    RCAR_GP_PIN(4, 5),      RCAR_GP_PIN(4, 6));
+SDHI_PFC_CTRL(sdhi2_ctrl_b,    SD2_CLK_B,              SD2_CMD_B);
+SDHI_PFC_PINS(sdhi2_data1_a,   RCAR_GP_PIN(4, 19));
+SDHI_PFC_DAT1(sdhi2_data1_a,   SD2_DAT0_A);
+SDHI_PFC_PINS(sdhi2_data1_b,   RCAR_GP_PIN(4, 7));
+SDHI_PFC_DAT1(sdhi2_data1_b,   SD2_DAT0_B);
+SDHI_PFC_PINS(sdhi2_data4_a,   RCAR_GP_PIN(4, 19),     RCAR_GP_PIN(4, 20),
+                               RCAR_GP_PIN(4, 21),     RCAR_GP_PIN(4, 22));
+SDHI_PFC_DAT4(sdhi2_data4_a,   SD2_DAT0_A,             SD2_DAT1_A,
+                               SD2_DAT2_A,             SD2_DAT3_A);
+SDHI_PFC_PINS(sdhi2_data4_b,   RCAR_GP_PIN(4, 7),      RCAR_GP_PIN(4, 8),
+                               RCAR_GP_PIN(3, 25),     RCAR_GP_PIN(3, 26));
+SDHI_PFC_DAT4(sdhi2_data4_b,   SD2_DAT0_B,             SD2_DAT1_B,
+                               SD2_DAT2_B,             SD2_DAT3_B);
+SDHI_PFC_PINS(sdhi2_wp_a,      RCAR_GP_PIN(4, 24));
+SDHI_PFC_WPPN(sdhi2_wp_a,      SD2_WP_A);
+SDHI_PFC_PINS(sdhi2_wp_b,      RCAR_GP_PIN(3, 28));
+SDHI_PFC_WPPN(sdhi2_wp_b,      SD2_WP_B);
+
+/* - USB0 ------------------------------------------------------------------- */
+SH_PFC_PINS(usb0,              RCAR_GP_PIN(0, 1));
+SH_PFC_MUX1(usb0,              PENC0);
+SH_PFC_PINS(usb0_ovc,          RCAR_GP_PIN(0, 3));
+SH_PFC_MUX1(usb0_ovc,          USB_OVC0);
+
+/* - USB1 ------------------------------------------------------------------- */
+SH_PFC_PINS(usb1,              RCAR_GP_PIN(0, 2));
+SH_PFC_MUX1(usb1,              PENC1);
+SH_PFC_PINS(usb1_ovc,          RCAR_GP_PIN(0, 4));
+SH_PFC_MUX1(usb1_ovc,          USB_OVC1);
+
+/* - VIN macros ------------------------------------------------------------- */
+#define VIN_PFC_PINS(name, args...)            SH_PFC_PINS(name, args)
+#define VIN_PFC_DAT8(name, d0, d1, d2, d3, d4, d5, d6, d7)     \
+       SH_PFC_MUX8(name, d0, d1, d2, d3, d4, d5, d6, d7)
+#define VIN_PFC_CLK(name, clk)                 SH_PFC_MUX1(name, clk)
+#define VIN_PFC_SYNC(name, hsync, vsync)       SH_PFC_MUX2(name, hsync, vsync)
+
+/* - VIN0 ------------------------------------------------------------------- */
+VIN_PFC_PINS(vin0_data8,       RCAR_GP_PIN(3, 29),     RCAR_GP_PIN(3, 30),
+                               RCAR_GP_PIN(3, 31),     RCAR_GP_PIN(4, 0),
+                               RCAR_GP_PIN(4, 1),      RCAR_GP_PIN(4, 2),
+                               RCAR_GP_PIN(4, 3),      RCAR_GP_PIN(4, 4));
+VIN_PFC_DAT8(vin0_data8,       VI0_DATA0_VI0_B0,       VI0_DATA1_VI0_B1,
+                               VI0_DATA2_VI0_B2,       VI0_DATA3_VI0_B3,
+                               VI0_DATA4_VI0_B4,       VI0_DATA5_VI0_B5,
+                               VI0_DATA6_VI0_G0,       VI0_DATA7_VI0_G1);
+VIN_PFC_PINS(vin0_clk,         RCAR_GP_PIN(3, 24));
+VIN_PFC_CLK(vin0_clk,          VI0_CLK);
+VIN_PFC_PINS(vin0_sync,                RCAR_GP_PIN(3, 27),     RCAR_GP_PIN(3, 28));
+VIN_PFC_SYNC(vin0_sync,                VI0_HSYNC,              VI0_VSYNC);
+/* - VIN1 ------------------------------------------------------------------- */
+VIN_PFC_PINS(vin1_data8,       RCAR_GP_PIN(3, 25),     RCAR_GP_PIN(3, 26),
+                               RCAR_GP_PIN(3, 27),     RCAR_GP_PIN(3, 28),
+                               RCAR_GP_PIN(4, 5),      RCAR_GP_PIN(4, 6),
+                               RCAR_GP_PIN(4, 7),      RCAR_GP_PIN(4, 8));
+VIN_PFC_DAT8(vin1_data8,       VI1_DATA0,              VI1_DATA1,
+                               VI1_DATA2,              VI1_DATA3,
+                               VI1_DATA4,              VI1_DATA5,
+                               VI1_DATA6,              VI1_DATA7);
+VIN_PFC_PINS(vin1_clk,         RCAR_GP_PIN(4, 9));
+VIN_PFC_CLK(vin1_clk,          VI1_CLK);
+VIN_PFC_PINS(vin1_sync,                RCAR_GP_PIN(3, 21),     RCAR_GP_PIN(3, 22));
+VIN_PFC_SYNC(vin1_sync,                VI1_HSYNC,              VI1_VSYNC);
+
+static const struct sh_pfc_pin_group pinmux_groups[] = {
+       SH_PFC_PIN_GROUP(ether_rmii),
+       SH_PFC_PIN_GROUP(ether_link),
+       SH_PFC_PIN_GROUP(ether_magic),
+       SH_PFC_PIN_GROUP(hscif0_data_a),
+       SH_PFC_PIN_GROUP(hscif0_data_b),
+       SH_PFC_PIN_GROUP(hscif0_ctrl_a),
+       SH_PFC_PIN_GROUP(hscif0_ctrl_b),
+       SH_PFC_PIN_GROUP(hscif0_clk),
+       SH_PFC_PIN_GROUP(hscif1_data_a),
+       SH_PFC_PIN_GROUP(hscif1_data_b),
+       SH_PFC_PIN_GROUP(hscif1_ctrl_a),
+       SH_PFC_PIN_GROUP(hscif1_ctrl_b),
+       SH_PFC_PIN_GROUP(hscif1_clk_a),
+       SH_PFC_PIN_GROUP(hscif1_clk_b),
+       SH_PFC_PIN_GROUP(hspi0_a),
+       SH_PFC_PIN_GROUP(hspi0_b),
+       SH_PFC_PIN_GROUP(hspi1_a),
+       SH_PFC_PIN_GROUP(hspi1_b),
+       SH_PFC_PIN_GROUP(hspi2_a),
+       SH_PFC_PIN_GROUP(hspi2_b),
+       SH_PFC_PIN_GROUP(i2c1_a),
+       SH_PFC_PIN_GROUP(i2c1_b),
+       SH_PFC_PIN_GROUP(i2c2_a),
+       SH_PFC_PIN_GROUP(i2c2_b),
+       SH_PFC_PIN_GROUP(i2c2_c),
+       SH_PFC_PIN_GROUP(i2c3_a),
+       SH_PFC_PIN_GROUP(i2c3_b),
+       SH_PFC_PIN_GROUP(i2c3_c),
+       SH_PFC_PIN_GROUP(mmc_ctrl),
+       SH_PFC_PIN_GROUP(mmc_data1),
+       SH_PFC_PIN_GROUP(mmc_data4),
+       SH_PFC_PIN_GROUP(mmc_data8),
+       SH_PFC_PIN_GROUP(scif_clk),
+       SH_PFC_PIN_GROUP(scif0_data_a),
+       SH_PFC_PIN_GROUP(scif0_data_b),
+       SH_PFC_PIN_GROUP(scif0_data_c),
+       SH_PFC_PIN_GROUP(scif0_data_d),
+       SH_PFC_PIN_GROUP(scif0_ctrl),
+       SH_PFC_PIN_GROUP(scif0_clk),
+       SH_PFC_PIN_GROUP(scif1_data_a),
+       SH_PFC_PIN_GROUP(scif1_data_b),
+       SH_PFC_PIN_GROUP(scif1_data_c),
+       SH_PFC_PIN_GROUP(scif1_data_d),
+       SH_PFC_PIN_GROUP(scif1_ctrl_a),
+       SH_PFC_PIN_GROUP(scif1_ctrl_c),
+       SH_PFC_PIN_GROUP(scif1_clk_a),
+       SH_PFC_PIN_GROUP(scif1_clk_c),
+       SH_PFC_PIN_GROUP(scif2_data_a),
+       SH_PFC_PIN_GROUP(scif2_data_b),
+       SH_PFC_PIN_GROUP(scif2_data_c),
+       SH_PFC_PIN_GROUP(scif2_data_d),
+       SH_PFC_PIN_GROUP(scif2_data_e),
+       SH_PFC_PIN_GROUP(scif2_clk_a),
+       SH_PFC_PIN_GROUP(scif2_clk_b),
+       SH_PFC_PIN_GROUP(scif2_clk_c),
+       SH_PFC_PIN_GROUP(scif3_data_a),
+       SH_PFC_PIN_GROUP(scif3_data_b),
+       SH_PFC_PIN_GROUP(scif3_data_c),
+       SH_PFC_PIN_GROUP(scif3_data_d),
+       SH_PFC_PIN_GROUP(scif4_data_a),
+       SH_PFC_PIN_GROUP(scif4_data_b),
+       SH_PFC_PIN_GROUP(scif4_data_c),
+       SH_PFC_PIN_GROUP(scif5_data_a),
+       SH_PFC_PIN_GROUP(scif5_data_b),
+       SH_PFC_PIN_GROUP(sdhi0_cd),
+       SH_PFC_PIN_GROUP(sdhi0_ctrl),
+       SH_PFC_PIN_GROUP(sdhi0_data1),
+       SH_PFC_PIN_GROUP(sdhi0_data4),
+       SH_PFC_PIN_GROUP(sdhi0_wp),
+       SH_PFC_PIN_GROUP(sdhi1_cd_a),
+       SH_PFC_PIN_GROUP(sdhi1_cd_b),
+       SH_PFC_PIN_GROUP(sdhi1_ctrl_a),
+       SH_PFC_PIN_GROUP(sdhi1_ctrl_b),
+       SH_PFC_PIN_GROUP(sdhi1_data1_a),
+       SH_PFC_PIN_GROUP(sdhi1_data1_b),
+       SH_PFC_PIN_GROUP(sdhi1_data4_a),
+       SH_PFC_PIN_GROUP(sdhi1_data4_b),
+       SH_PFC_PIN_GROUP(sdhi1_wp_a),
+       SH_PFC_PIN_GROUP(sdhi1_wp_b),
+       SH_PFC_PIN_GROUP(sdhi2_cd_a),
+       SH_PFC_PIN_GROUP(sdhi2_cd_b),
+       SH_PFC_PIN_GROUP(sdhi2_ctrl_a),
+       SH_PFC_PIN_GROUP(sdhi2_ctrl_b),
+       SH_PFC_PIN_GROUP(sdhi2_data1_a),
+       SH_PFC_PIN_GROUP(sdhi2_data1_b),
+       SH_PFC_PIN_GROUP(sdhi2_data4_a),
+       SH_PFC_PIN_GROUP(sdhi2_data4_b),
+       SH_PFC_PIN_GROUP(sdhi2_wp_a),
+       SH_PFC_PIN_GROUP(sdhi2_wp_b),
+       SH_PFC_PIN_GROUP(usb0),
+       SH_PFC_PIN_GROUP(usb0_ovc),
+       SH_PFC_PIN_GROUP(usb1),
+       SH_PFC_PIN_GROUP(usb1_ovc),
+       SH_PFC_PIN_GROUP(vin0_data8),
+       SH_PFC_PIN_GROUP(vin0_clk),
+       SH_PFC_PIN_GROUP(vin0_sync),
+       SH_PFC_PIN_GROUP(vin1_data8),
+       SH_PFC_PIN_GROUP(vin1_clk),
+       SH_PFC_PIN_GROUP(vin1_sync),
+};
+
+static const char * const ether_groups[] = {
+       "ether_rmii",
+       "ether_link",
+       "ether_magic",
+};
+
+static const char * const hscif0_groups[] = {
+       "hscif0_data_a",
+       "hscif0_data_b",
+       "hscif0_ctrl_a",
+       "hscif0_ctrl_b",
+       "hscif0_clk",
+};
+
+static const char * const hscif1_groups[] = {
+       "hscif1_data_a",
+       "hscif1_data_b",
+       "hscif1_ctrl_a",
+       "hscif1_ctrl_b",
+       "hscif1_clk_a",
+       "hscif1_clk_b",
+};
+
+static const char * const hspi0_groups[] = {
+       "hspi0_a",
+       "hspi0_b",
+};
+
+static const char * const hspi1_groups[] = {
+       "hspi1_a",
+       "hspi1_b",
+};
+
+static const char * const hspi2_groups[] = {
+       "hspi2_a",
+       "hspi2_b",
+};
+
+static const char * const i2c1_groups[] = {
+       "i2c1_a",
+       "i2c1_b",
+};
+
+static const char * const i2c2_groups[] = {
+       "i2c2_a",
+       "i2c2_b",
+       "i2c2_c",
+};
+
+static const char * const i2c3_groups[] = {
+       "i2c3_a",
+       "i2c3_b",
+       "i2c3_c",
+};
+
+static const char * const mmc_groups[] = {
+       "mmc_ctrl",
+       "mmc_data1",
+       "mmc_data4",
+       "mmc_data8",
+};
+
+static const char * const scif_clk_groups[] = {
+       "scif_clk",
+};
+
+static const char * const scif0_groups[] = {
+       "scif0_data_a",
+       "scif0_data_b",
+       "scif0_data_c",
+       "scif0_data_d",
+       "scif0_ctrl",
+       "scif0_clk",
+};
+
+static const char * const scif1_groups[] = {
+       "scif1_data_a",
+       "scif1_data_b",
+       "scif1_data_c",
+       "scif1_data_d",
+       "scif1_ctrl_a",
+       "scif1_ctrl_c",
+       "scif1_clk_a",
+       "scif1_clk_c",
+};
+
+static const char * const scif2_groups[] = {
+       "scif2_data_a",
+       "scif2_data_b",
+       "scif2_data_c",
+       "scif2_data_d",
+       "scif2_data_e",
+       "scif2_clk_a",
+       "scif2_clk_b",
+       "scif2_clk_c",
+};
+
+static const char * const scif3_groups[] = {
+       "scif3_data_a",
+       "scif3_data_b",
+       "scif3_data_c",
+       "scif3_data_d",
+};
+
+static const char * const scif4_groups[] = {
+       "scif4_data_a",
+       "scif4_data_b",
+       "scif4_data_c",
+};
+
+static const char * const scif5_groups[] = {
+       "scif5_data_a",
+       "scif5_data_b",
+};
+
+
+static const char * const sdhi0_groups[] = {
+       "sdhi0_cd",
+       "sdhi0_ctrl",
+       "sdhi0_data1",
+       "sdhi0_data4",
+       "sdhi0_wp",
+};
+
+static const char * const sdhi1_groups[] = {
+       "sdhi1_cd_a",
+       "sdhi1_cd_b",
+       "sdhi1_ctrl_a",
+       "sdhi1_ctrl_b",
+       "sdhi1_data1_a",
+       "sdhi1_data1_b",
+       "sdhi1_data4_a",
+       "sdhi1_data4_b",
+       "sdhi1_wp_a",
+       "sdhi1_wp_b",
+};
+
+static const char * const sdhi2_groups[] = {
+       "sdhi2_cd_a",
+       "sdhi2_cd_b",
+       "sdhi2_ctrl_a",
+       "sdhi2_ctrl_b",
+       "sdhi2_data1_a",
+       "sdhi2_data1_b",
+       "sdhi2_data4_a",
+       "sdhi2_data4_b",
+       "sdhi2_wp_a",
+       "sdhi2_wp_b",
+};
+
+static const char * const usb0_groups[] = {
+       "usb0",
+       "usb0_ovc",
+};
+
+static const char * const usb1_groups[] = {
+       "usb1",
+       "usb1_ovc",
+};
+
+static const char * const vin0_groups[] = {
+       "vin0_data8",
+       "vin0_clk",
+       "vin0_sync",
+};
+
+static const char * const vin1_groups[] = {
+       "vin1_data8",
+       "vin1_clk",
+       "vin1_sync",
+};
+
+static const struct sh_pfc_function pinmux_functions[] = {
+       SH_PFC_FUNCTION(ether),
+       SH_PFC_FUNCTION(hscif0),
+       SH_PFC_FUNCTION(hscif1),
+       SH_PFC_FUNCTION(hspi0),
+       SH_PFC_FUNCTION(hspi1),
+       SH_PFC_FUNCTION(hspi2),
+       SH_PFC_FUNCTION(i2c1),
+       SH_PFC_FUNCTION(i2c2),
+       SH_PFC_FUNCTION(i2c3),
+       SH_PFC_FUNCTION(mmc),
+       SH_PFC_FUNCTION(scif_clk),
+       SH_PFC_FUNCTION(scif0),
+       SH_PFC_FUNCTION(scif1),
+       SH_PFC_FUNCTION(scif2),
+       SH_PFC_FUNCTION(scif3),
+       SH_PFC_FUNCTION(scif4),
+       SH_PFC_FUNCTION(scif5),
+       SH_PFC_FUNCTION(sdhi0),
+       SH_PFC_FUNCTION(sdhi1),
+       SH_PFC_FUNCTION(sdhi2),
+       SH_PFC_FUNCTION(usb0),
+       SH_PFC_FUNCTION(usb1),
+       SH_PFC_FUNCTION(vin0),
+       SH_PFC_FUNCTION(vin1),
+};
+
+static struct pinmux_cfg_reg pinmux_config_regs[] = {
+       { PINMUX_CFG_REG("GPSR0", 0xfffc0004, 32, 1) {
+               GP_0_31_FN,     FN_IP1_14_11,
+               GP_0_30_FN,     FN_IP1_10_8,
+               GP_0_29_FN,     FN_IP1_7_5,
+               GP_0_28_FN,     FN_IP1_4_2,
+               GP_0_27_FN,     FN_IP1_1,
+               GP_0_26_FN,     FN_IP1_0,
+               GP_0_25_FN,     FN_IP0_30,
+               GP_0_24_FN,     FN_IP0_29,
+               GP_0_23_FN,     FN_IP0_28,
+               GP_0_22_FN,     FN_IP0_27,
+               GP_0_21_FN,     FN_IP0_26,
+               GP_0_20_FN,     FN_IP0_25,
+               GP_0_19_FN,     FN_IP0_24,
+               GP_0_18_FN,     FN_IP0_23,
+               GP_0_17_FN,     FN_IP0_22,
+               GP_0_16_FN,     FN_IP0_21,
+               GP_0_15_FN,     FN_IP0_20,
+               GP_0_14_FN,     FN_IP0_19,
+               GP_0_13_FN,     FN_IP0_18,
+               GP_0_12_FN,     FN_IP0_17,
+               GP_0_11_FN,     FN_IP0_16,
+               GP_0_10_FN,     FN_IP0_15,
+               GP_0_9_FN,      FN_A3,
+               GP_0_8_FN,      FN_A2,
+               GP_0_7_FN,      FN_A1,
+               GP_0_6_FN,      FN_IP0_14_12,
+               GP_0_5_FN,      FN_IP0_11_8,
+               GP_0_4_FN,      FN_IP0_7_5,
+               GP_0_3_FN,      FN_IP0_4_2,
+               GP_0_2_FN,      FN_PENC1,
+               GP_0_1_FN,      FN_PENC0,
+               GP_0_0_FN,      FN_IP0_1_0 }
+       },
+       { PINMUX_CFG_REG("GPSR1", 0xfffc0008, 32, 1) {
+               GP_1_31_FN,     FN_IP4_6_4,
+               GP_1_30_FN,     FN_IP4_3_1,
+               GP_1_29_FN,     FN_IP4_0,
+               GP_1_28_FN,     FN_IP3_31,
+               GP_1_27_FN,     FN_IP3_30,
+               GP_1_26_FN,     FN_IP3_29,
+               GP_1_25_FN,     FN_IP3_28,
+               GP_1_24_FN,     FN_IP3_27,
+               GP_1_23_FN,     FN_IP3_26_24,
+               GP_1_22_FN,     FN_IP3_23_21,
+               GP_1_21_FN,     FN_IP3_20_19,
+               GP_1_20_FN,     FN_IP3_18_16,
+               GP_1_19_FN,     FN_IP3_15_13,
+               GP_1_18_FN,     FN_IP3_12_10,
+               GP_1_17_FN,     FN_IP3_9_8,
+               GP_1_16_FN,     FN_IP3_7_5,
+               GP_1_15_FN,     FN_IP3_4_2,
+               GP_1_14_FN,     FN_IP3_1_0,
+               GP_1_13_FN,     FN_IP2_31,
+               GP_1_12_FN,     FN_IP2_30,
+               GP_1_11_FN,     FN_IP2_17,
+               GP_1_10_FN,     FN_IP2_16_14,
+               GP_1_9_FN,      FN_IP2_13_12,
+               GP_1_8_FN,      FN_IP2_11_9,
+               GP_1_7_FN,      FN_IP2_8_6,
+               GP_1_6_FN,      FN_IP2_5_3,
+               GP_1_5_FN,      FN_IP2_2_0,
+               GP_1_4_FN,      FN_IP1_29_28,
+               GP_1_3_FN,      FN_IP1_27_25,
+               GP_1_2_FN,      FN_IP1_24,
+               GP_1_1_FN,      FN_WE0,
+               GP_1_0_FN,      FN_IP1_23_21 }
+       },
+       { PINMUX_CFG_REG("GPSR2", 0xfffc000c, 32, 1) {
+               GP_2_31_FN,     FN_IP6_7,
+               GP_2_30_FN,     FN_IP6_6_5,
+               GP_2_29_FN,     FN_IP6_4_2,
+               GP_2_28_FN,     FN_IP6_1_0,
+               GP_2_27_FN,     FN_IP5_30_29,
+               GP_2_26_FN,     FN_IP5_28_26,
+               GP_2_25_FN,     FN_IP5_25_23,
+               GP_2_24_FN,     FN_IP5_22_21,
+               GP_2_23_FN,     FN_AUDIO_CLKB,
+               GP_2_22_FN,     FN_AUDIO_CLKA,
+               GP_2_21_FN,     FN_IP5_20_18,
+               GP_2_20_FN,     FN_IP5_17_15,
+               GP_2_19_FN,     FN_IP5_14_13,
+               GP_2_18_FN,     FN_IP5_12,
+               GP_2_17_FN,     FN_IP5_11_10,
+               GP_2_16_FN,     FN_IP5_9_8,
+               GP_2_15_FN,     FN_IP5_7,
+               GP_2_14_FN,     FN_IP5_6,
+               GP_2_13_FN,     FN_IP5_5_4,
+               GP_2_12_FN,     FN_IP5_3_2,
+               GP_2_11_FN,     FN_IP5_1_0,
+               GP_2_10_FN,     FN_IP4_30_29,
+               GP_2_9_FN,      FN_IP4_28_27,
+               GP_2_8_FN,      FN_IP4_26_25,
+               GP_2_7_FN,      FN_IP4_24_21,
+               GP_2_6_FN,      FN_IP4_20_17,
+               GP_2_5_FN,      FN_IP4_16_15,
+               GP_2_4_FN,      FN_IP4_14_13,
+               GP_2_3_FN,      FN_IP4_12_11,
+               GP_2_2_FN,      FN_IP4_10_9,
+               GP_2_1_FN,      FN_IP4_8,
+               GP_2_0_FN,      FN_IP4_7 }
+       },
+       { PINMUX_CFG_REG("GPSR3", 0xfffc0010, 32, 1) {
+               GP_3_31_FN,     FN_IP8_10_9,
+               GP_3_30_FN,     FN_IP8_8_6,
+               GP_3_29_FN,     FN_IP8_5_3,
+               GP_3_28_FN,     FN_IP8_2_0,
+               GP_3_27_FN,     FN_IP7_31_29,
+               GP_3_26_FN,     FN_IP7_28_25,
+               GP_3_25_FN,     FN_IP7_24_22,
+               GP_3_24_FN,     FN_IP7_21,
+               GP_3_23_FN,     FN_IP7_20_18,
+               GP_3_22_FN,     FN_IP7_17_15,
+               GP_3_21_FN,     FN_IP7_14_12,
+               GP_3_20_FN,     FN_IP7_11_9,
+               GP_3_19_FN,     FN_IP7_8_6,
+               GP_3_18_FN,     FN_IP7_5_4,
+               GP_3_17_FN,     FN_IP7_3_2,
+               GP_3_16_FN,     FN_IP7_1_0,
+               GP_3_15_FN,     FN_IP6_31_30,
+               GP_3_14_FN,     FN_IP6_29_28,
+               GP_3_13_FN,     FN_IP6_27_26,
+               GP_3_12_FN,     FN_IP6_25_24,
+               GP_3_11_FN,     FN_IP6_23_22,
+               GP_3_10_FN,     FN_IP6_21,
+               GP_3_9_FN,      FN_IP6_20_19,
+               GP_3_8_FN,      FN_IP6_18_17,
+               GP_3_7_FN,      FN_IP6_16,
+               GP_3_6_FN,      FN_IP6_15_14,
+               GP_3_5_FN,      FN_IP6_13,
+               GP_3_4_FN,      FN_IP6_12_11,
+               GP_3_3_FN,      FN_IP6_10,
+               GP_3_2_FN,      FN_SSI_SCK34,
+               GP_3_1_FN,      FN_IP6_9,
+               GP_3_0_FN,      FN_IP6_8 }
+       },
+       { PINMUX_CFG_REG("GPSR4", 0xfffc0014, 32, 1) {
+               0, 0,
+               0, 0,
+               0, 0,
+               0, 0,
+               0, 0,
+               GP_4_26_FN,     FN_AVS2,
+               GP_4_25_FN,     FN_AVS1,
+               GP_4_24_FN,     FN_IP10_24_22,
+               GP_4_23_FN,     FN_IP10_21_19,
+               GP_4_22_FN,     FN_IP10_18_16,
+               GP_4_21_FN,     FN_IP10_15_13,
+               GP_4_20_FN,     FN_IP10_12_9,
+               GP_4_19_FN,     FN_IP10_8_6,
+               GP_4_18_FN,     FN_IP10_5_3,
+               GP_4_17_FN,     FN_IP10_2_0,
+               GP_4_16_FN,     FN_IP9_29_27,
+               GP_4_15_FN,     FN_IP9_26_24,
+               GP_4_14_FN,     FN_IP9_23_21,
+               GP_4_13_FN,     FN_IP9_20_18,
+               GP_4_12_FN,     FN_IP9_17_15,
+               GP_4_11_FN,     FN_IP9_14_12,
+               GP_4_10_FN,     FN_IP9_11_9,
+               GP_4_9_FN,      FN_IP9_8_6,
+               GP_4_8_FN,      FN_IP9_5_3,
+               GP_4_7_FN,      FN_IP9_2_0,
+               GP_4_6_FN,      FN_IP8_29_27,
+               GP_4_5_FN,      FN_IP8_26_24,
+               GP_4_4_FN,      FN_IP8_23_22,
+               GP_4_3_FN,      FN_IP8_21_19,
+               GP_4_2_FN,      FN_IP8_18_16,
+               GP_4_1_FN,      FN_IP8_15_14,
+               GP_4_0_FN,      FN_IP8_13_11 }
+       },
+
+       { PINMUX_CFG_REG_VAR("IPSR0", 0xfffc0020, 32,
+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                            1, 1, 1, 1, 1, 1, 3, 4, 3, 3, 2) {
+               /* IP0_31 [1] */
+               0,      0,
+               /* IP0_30 [1] */
+               FN_A19, 0,
+               /* IP0_29 [1] */
+               FN_A18, 0,
+               /* IP0_28 [1] */
+               FN_A17, 0,
+               /* IP0_27 [1] */
+               FN_A16, 0,
+               /* IP0_26 [1] */
+               FN_A15, 0,
+               /* IP0_25 [1] */
+               FN_A14, 0,
+               /* IP0_24 [1] */
+               FN_A13, 0,
+               /* IP0_23 [1] */
+               FN_A12, 0,
+               /* IP0_22 [1] */
+               FN_A11, 0,
+               /* IP0_21 [1] */
+               FN_A10, 0,
+               /* IP0_20 [1] */
+               FN_A9,  0,
+               /* IP0_19 [1] */
+               FN_A8,  0,
+               /* IP0_18 [1] */
+               FN_A7,  0,
+               /* IP0_17 [1] */
+               FN_A6,  0,
+               /* IP0_16 [1] */
+               FN_A5,  0,
+               /* IP0_15 [1] */
+               FN_A4,  0,
+               /* IP0_14_12 [3] */
+               FN_SD1_DAT3_A,  FN_MMC_D3,      0,              FN_A0,
+               FN_ATAG0_A,     0,              FN_REMOCON_B,   0,
+               /* IP0_11_8 [4] */
+               FN_SD1_DAT2_A,  FN_MMC_D2,      0,              FN_BS,
+               FN_ATADIR0_A,   0,              FN_SDSELF_B,    0,
+               FN_PWM4_B,      0,              0,              0,
+               0,              0,              0,              0,
+               /* IP0_7_5 [3] */
+               FN_AUDATA1,     FN_ARM_TRACEDATA_1,     FN_GPSIN_C,     FN_USB_OVC1,
+               FN_RX2_E,       FN_SCL2_B,              0,              0,
+               /* IP0_4_2 [3] */
+               FN_AUDATA0,     FN_ARM_TRACEDATA_0,     FN_GPSCLK_C,    FN_USB_OVC0,
+               FN_TX2_E,       FN_SDA2_B,              0,              0,
+               /* IP0_1_0 [2] */
+               FN_PRESETOUT,   0,      FN_PWM1,        0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR1", 0xfffc0024, 32,
+                            1, 1, 2, 3, 1, 3, 3, 1, 2, 4, 3, 3, 3, 1, 1) {
+               /* IP1_31 [1] */
+               0,      0,
+               /* IP1_30 [1] */
+               0,      0,
+               /* IP1_29_28 [2] */
+               FN_EX_CS1,      FN_MMC_D4,      0,      0,
+               /* IP1_27_25 [3] */
+               FN_SSI_WS1_B,   FN_EX_CS0,      FN_SCL2_A,      FN_TX3_C,
+               FN_TS_SCK0_A,   0,              0,              0,
+               /* IP1_24 [1] */
+               FN_WE1,         FN_ATAWR0_B,
+               /* IP1_23_21 [3] */
+               FN_MMC_D5,      FN_ATADIR0_B,   0,              FN_RD_WR,
+               0,              0,              0,              0,
+               /* IP1_20_18 [3] */
+               FN_SSI_SCK1_B,  FN_ATAG0_B,     FN_CS1_A26,     FN_SDA2_A,
+               FN_SCK2_B,      0,              0,              0,
+               /* IP1_17 [1] */
+               FN_CS0,         FN_HSPI_RX1_B,
+               /* IP1_16_15 [2] */
+               FN_CLKOUT,      FN_HSPI_TX1_B,  FN_PWM0_B,      0,
+               /* IP1_14_11 [4] */
+               FN_SD1_WP_A,    FN_MMC_D7,      0,              FN_A25,
+               FN_DACK1_A,     0,              FN_HCTS0_B,     FN_RX3_C,
+               FN_TS_SDAT0_A,  0,              0,              0,
+               0,              0,              0,              0,
+               /* IP1_10_8 [3] */
+               FN_SD1_CLK_B,   FN_MMC_D6,      0,              FN_A24,
+               FN_DREQ1_A,     0,              FN_HRX0_B,      FN_TS_SPSYNC0_A,
+               /* IP1_7_5 [3] */
+               FN_A23,         FN_HTX0_B,      FN_TX2_B,       FN_DACK2_A,
+               FN_TS_SDEN0_A,  0,              0,              0,
+               /* IP1_4_2 [3] */
+               FN_A22,         FN_HRTS0_B,     FN_RX2_B,       FN_DREQ2_A,
+               0,              0,              0,              0,
+               /* IP1_1 [1] */
+               FN_A21,         FN_HSPI_CLK1_B,
+               /* IP1_0 [1] */
+               FN_A20,         FN_HSPI_CS1_B,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR2", 0xfffc0028, 32,
+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                            1, 1, 1, 1, 3, 2, 3, 3, 3, 3) {
+               /* IP2_31 [1] */
+               FN_MLB_CLK,     FN_IRQ1_A,
+               /* IP2_30 [1] */
+               FN_RD_WR_B,     FN_IRQ0,
+               /* IP2_29 [1] */
+               FN_D11,         0,
+               /* IP2_28 [1] */
+               FN_D10,         0,
+               /* IP2_27 [1] */
+               FN_D9,          0,
+               /* IP2_26 [1] */
+               FN_D8,          0,
+               /* IP2_25 [1] */
+               FN_D7,          0,
+               /* IP2_24 [1] */
+               FN_D6,          0,
+               /* IP2_23 [1] */
+               FN_D5,          0,
+               /* IP2_22 [1] */
+               FN_D4,          0,
+               /* IP2_21 [1] */
+               FN_D3,          0,
+               /* IP2_20 [1] */
+               FN_D2,          0,
+               /* IP2_19 [1] */
+               FN_D1,          0,
+               /* IP2_18 [1] */
+               FN_D0,          0,
+               /* IP2_17 [1] */
+               FN_EX_WAIT0,    FN_PWM0_C,
+               /* IP2_16_14 [3] */
+               FN_DACK0,       0,      0,      FN_TX3_A,
+               FN_DRACK0,      0,      0,      0,
+               /* IP2_13_12 [2] */
+               FN_DREQ0_A,     0,      0,      FN_RX3_A,
+               /* IP2_11_9 [3] */
+               FN_SD1_DAT1_A,  FN_MMC_D1,      0,      FN_ATAWR0_A,
+               FN_EX_CS5,      FN_EX_WAIT2_A,  0,      0,
+               /* IP2_8_6 [3] */
+               FN_SD1_DAT0_A,  FN_MMC_D0,      0,      FN_ATARD0,
+               FN_EX_CS4,      FN_EX_WAIT1_A,  0,      0,
+               /* IP2_5_3 [3] */
+               FN_SD1_CMD_A,   FN_MMC_CMD,     0,      FN_ATACS10,
+               FN_EX_CS3,      0,              0,      0,
+               /* IP2_2_0 [3] */
+               FN_SD1_CLK_A,   FN_MMC_CLK,     0,      FN_ATACS00,
+               FN_EX_CS2,      0,              0,      0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR3", 0xfffc002c, 32,
+                            1, 1, 1, 1, 1, 3, 3, 2,
+                            3, 3, 3, 2, 3, 3, 2) {
+               /* IP3_31 [1] */
+               FN_DU0_DR6,     FN_LCDOUT6,
+               /* IP3_30 [1] */
+               FN_DU0_DR5,     FN_LCDOUT5,
+               /* IP3_29 [1] */
+               FN_DU0_DR4,     FN_LCDOUT4,
+               /* IP3_28 [1] */
+               FN_DU0_DR3,     FN_LCDOUT3,
+               /* IP3_27 [1] */
+               FN_DU0_DR2,     FN_LCDOUT2,
+               /* IP3_26_24 [3] */
+               FN_SSI_WS4,             FN_DU0_DR1,     FN_LCDOUT1,     FN_AUDATA3,
+               FN_ARM_TRACEDATA_3,     FN_SCL3_C,      FN_ADICHS2,     FN_TS_SPSYNC0_B,
+               /* IP3_23_21 [3] */
+               FN_SSI_SCK4,            FN_DU0_DR0,     FN_LCDOUT0,     FN_AUDATA2,
+               FN_ARM_TRACEDATA_2,     FN_SDA3_C,      FN_ADICHS1,     FN_TS_SDEN0_B,
+               /* IP3_20_19 [2] */
+               FN_SD1_DAT3_B,  FN_HRTS0_A,     FN_RTS0,        0,
+               /* IP3_18_16 [3] */
+               FN_SD1_DAT2_B,  FN_HCTS0_A,     FN_CTS0,        0,
+               0,              0,              0,              0,
+               /* IP3_15_13 [3] */
+               FN_SD1_DAT1_B,  FN_HSCK0,       FN_SCK0,        FN_SCL3_B,
+               0,              0,              0,              0,
+               /* IP3_12_10 [3] */
+               FN_SD1_DAT0_B,  FN_HRX0_A,      FN_RX0_A,       0,
+               0,              0,              0,              0,
+               /* IP3_9_8 [2] */
+               FN_SD1_CLK_B,   FN_HTX0_A,      FN_TX0_A,       0,
+               /* IP3_7_5 [3] */
+               FN_SD1_CMD_B,   FN_SCIF_CLK,    FN_AUDIO_CLKOUT_B,      FN_CAN_CLK_B,
+               FN_SDA3_B,      0,              0,                      0,
+               /* IP3_4_2 [3] */
+               FN_MLB_DAT,     FN_TX5_B,       FN_SCL3_A,      FN_IRQ3_A,
+               FN_SDSELF_B,    0,              0,              0,
+               /* IP3_1_0 [2] */
+               FN_MLB_SIG,     FN_RX5_B,       FN_SDA3_A,      FN_IRQ2_A,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR4", 0xfffc0030, 32,
+                            1, 2, 2, 2, 4, 4, 2, 2, 2, 2, 1, 1, 3, 3, 1) {
+               /* IP4_31 [1] */
+               0,      0,
+               /* IP4_30_29 [2] */
+               FN_VI0_R4_B,    FN_DU0_DB4,     FN_LCDOUT20,    0,
+               /* IP4_28_27 [2] */
+               FN_VI0_R3_B,    FN_DU0_DB3,     FN_LCDOUT19,    0,
+               /* IP4_26_25 [2] */
+               FN_VI0_R2_B,    FN_DU0_DB2,     FN_LCDOUT18,    0,
+               /* IP4_24_21 [4] */
+               FN_AUDIO_CLKC,  FN_VI0_R1_B,            FN_DU0_DB1,     FN_LCDOUT17,
+               FN_AUDATA7,     FN_ARM_TRACEDATA_7,     FN_GPSIN_A,     0,
+               FN_ADICS_SAMP,  FN_TS_SCK0_B,           0,              0,
+               0,              0,                      0,              0,
+               /* IP4_20_17 [4] */
+               FN_SSI_SCK2_B,  FN_VI0_R0_B,            FN_DU0_DB0,     FN_LCDOUT16,
+               FN_AUDATA6,     FN_ARM_TRACEDATA_6,     FN_GPSCLK_A,    FN_PWM0_A,
+               FN_ADICLK,      FN_TS_SDAT0_B,          0,              0,
+               0,              0,                      0,              0,
+               /* IP4_16_15 [2] */
+               FN_DU0_DG7,     FN_LCDOUT15,    FN_TX4_A,       0,
+               /* IP4_14_13 [2] */
+               FN_DU0_DG6,     FN_LCDOUT14,    FN_RX4_A,       0,
+               /* IP4_12_11 [2] */
+               FN_DU0_DG5,     FN_LCDOUT13,    FN_TX0_B,       0,
+               /* IP4_10_9 [2] */
+               FN_DU0_DG4,     FN_LCDOUT12,    FN_RX0_B,       0,
+               /* IP4_8 [1] */
+               FN_DU0_DG3,     FN_LCDOUT11,
+               /* IP4_7 [1] */
+               FN_DU0_DG2,     FN_LCDOUT10,
+               /* IP4_6_4 [3] */
+               FN_DU0_DG1,     FN_LCDOUT9,     FN_AUDATA5,     FN_ARM_TRACEDATA_5,
+               FN_RX1_D,       FN_CAN0_RX_A,   FN_ADIDATA,     0,
+               /* IP4_3_1 [3] */
+               FN_DU0_DG0,     FN_LCDOUT8,     FN_AUDATA4,     FN_ARM_TRACEDATA_4,
+               FN_TX1_D,       FN_CAN0_TX_A,   FN_ADICHS0,     0,
+               /* IP4_0 [1] */
+               FN_DU0_DR7,     FN_LCDOUT7,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR5", 0xfffc0034, 32,
+                            1, 2, 3, 3, 2, 3, 3, 2, 1, 2, 2, 1, 1, 2, 2, 2) {
+
+               /* IP5_31 [1] */
+               0, 0,
+               /* IP5_30_29 [2] */
+               FN_SSI_SDATA7,  FN_HSPI_TX0_B,  FN_RX2_A,       FN_CAN0_RX_B,
+               /* IP5_28_26 [3] */
+               FN_SSI_SDATA8,  FN_SSI_SCK2_A,  FN_HSPI_CS0_B,  FN_TX2_A,
+               FN_CAN0_TX_B,   0,              0,              0,
+               /* IP5_25_23 [3] */
+               FN_SD1_WP_B,    FN_SSI_WS78,    FN_HSPI_CLK0_B, FN_RX1_B,
+               FN_CAN_CLK_D,   0,              0,              0,
+               /* IP5_22_21 [2] */
+               FN_SD1_CD_B,    FN_SSI_SCK78,   FN_HSPI_RX0_B,  FN_TX1_B,
+               /* IP5_20_18 [3] */
+               FN_SSI_WS1_A,           FN_DU0_CDE,     FN_QPOLB,       FN_AUDSYNC,
+               FN_ARM_TRACECTL,        FN_FMIN_D,      0,              0,
+               /* IP5_17_15 [3] */
+               FN_SSI_SCK1_A,          FN_DU0_DISP,    FN_QPOLA,       FN_AUDCK,
+               FN_ARM_TRACECLK,        FN_BPFCLK_D,    0,              0,
+               /* IP5_14_13 [2] */
+               FN_DU0_EXODDF_DU0_ODDF_DISP_CDE,        FN_QCPV_QDE,
+               FN_FMCLK_D,                             0,
+               /* IP5_12 [1] */
+               FN_DU0_EXVSYNC_DU0_VSYNC,       FN_QSTB_QHE,
+               /* IP5_11_10 [2] */
+               FN_SSI_WS2_B,   FN_DU0_EXHSYNC_DU0_HSYNC,
+               FN_QSTH_QHS,    0,
+               /* IP5_9_8 [2] */
+               FN_DU0_DOTCLKO_UT1,     FN_QSTVB_QVE,
+               FN_AUDIO_CLKOUT_A,      FN_REMOCON_C,
+               /* IP5_7 [1] */
+               FN_DU0_DOTCLKO_UT0,     FN_QCLK,
+               /* IP5_6 [1] */
+               FN_DU0_DOTCLKIN,        FN_QSTVA_QVS,
+               /* IP5_5_4 [2] */
+               FN_VI1_DATA11_B,        FN_DU0_DB7,     FN_LCDOUT23,    0,
+               /* IP5_3_2 [2] */
+               FN_VI1_DATA10_B,        FN_DU0_DB6,     FN_LCDOUT22,    0,
+               /* IP5_1_0 [2] */
+               FN_VI0_R5_B,            FN_DU0_DB5,     FN_LCDOUT21,    0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR6", 0xfffc0038, 32,
+                            2, 2, 2, 2, 2, 1, 2, 2, 1, 2,
+                            1, 2, 1, 1, 1, 1, 2, 3, 2) {
+               /* IP6_31_30 [2] */
+               FN_SD0_DAT2,    0,      FN_SUB_TDI,     0,
+               /* IP6_29_28 [2] */
+               FN_SD0_DAT1,    0,      FN_SUB_TCK,     0,
+               /* IP6_27_26 [2] */
+               FN_SD0_DAT0,    0,      FN_SUB_TMS,     0,
+               /* IP6_25_24 [2] */
+               FN_SD0_CMD,     0,      FN_SUB_TRST,    0,
+               /* IP6_23_22 [2] */
+               FN_SD0_CLK,     0,      FN_SUB_TDO,     0,
+               /* IP6_21 [1] */
+               FN_SSI_SDATA0,          FN_ARM_TRACEDATA_15,
+               /* IP6_20_19 [2] */
+               FN_SSI_SDATA1,          FN_ARM_TRACEDATA_14,
+               FN_SCL1_A,              FN_SCK2_A,
+               /* IP6_18_17 [2] */
+               FN_SSI_SDATA2,          FN_HSPI_CS2_A,
+               FN_ARM_TRACEDATA_13,    FN_SDA1_A,
+               /* IP6_16 [1] */
+               FN_SSI_WS012,           FN_ARM_TRACEDATA_12,
+               /* IP6_15_14 [2] */
+               FN_SSI_SCK012,          FN_ARM_TRACEDATA_11,
+               FN_TX0_D,               0,
+               /* IP6_13 [1] */
+               FN_SSI_SDATA3,          FN_ARM_TRACEDATA_10,
+               /* IP6_12_11 [2] */
+               FN_SSI_SDATA4,          FN_SSI_WS2_A,
+               FN_ARM_TRACEDATA_9,     0,
+               /* IP6_10 [1] */
+               FN_SSI_WS34,            FN_ARM_TRACEDATA_8,
+               /* IP6_9 [1] */
+               FN_SSI_SDATA5,          FN_RX0_D,
+               /* IP6_8 [1] */
+               FN_SSI_WS5,             FN_TX4_C,
+               /* IP6_7 [1] */
+               FN_SSI_SCK5,            FN_RX4_C,
+               /* IP6_6_5 [2] */
+               FN_SSI_SDATA6,          FN_HSPI_TX2_A,
+               FN_FMIN_B,              0,
+               /* IP6_4_2 [3] */
+               FN_SSI_WS6,             FN_HSPI_CLK2_A,
+               FN_BPFCLK_B,            FN_CAN1_RX_B,
+               0,      0,      0,      0,
+               /* IP6_1_0 [2] */
+               FN_SSI_SCK6,            FN_HSPI_RX2_A,
+               FN_FMCLK_B,             FN_CAN1_TX_B,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR7", 0xfffc003c, 32,
+                            3, 4, 3, 1, 3, 3, 3, 3, 3, 2, 2, 2) {
+
+               /* IP7_31_29 [3] */
+               FN_VI0_HSYNC,   FN_SD2_CD_B,    FN_VI1_DATA2,   FN_DU1_DR2,
+               0,              FN_HSPI_CS1_A,  FN_RX3_B,       0,
+               /* IP7_28_25 [4] */
+               FN_VI0_FIELD,   FN_SD2_DAT3_B,  FN_VI0_R3_C,    FN_VI1_DATA1,
+               FN_DU1_DG7,     0,              FN_HSPI_CLK1_A, FN_TX4_B,
+               0,      0,      0,      0,
+               0,      0,      0,      0,
+               /* IP7_24_22 [3] */
+               FN_VI0_CLKENB,  FN_SD2_DAT2_B,  FN_VI1_DATA0,   FN_DU1_DG6,
+               0,              FN_HSPI_RX1_A,  FN_RX4_B,       0,
+               /* IP7_21 [1] */
+               FN_VI0_CLK,     FN_CAN_CLK_A,
+               /* IP7_20_18 [3] */
+               FN_TCLK0,       FN_HSCK1_A,     FN_FMIN_A,      0,
+               FN_IRQ2_C,      FN_CTS1_C,      FN_SPEEDIN,     0,
+               /* IP7_17_15 [3] */
+               FN_VI1_VSYNC,   FN_HSPI_TX0,    FN_HCTS1_A,     FN_BPFCLK_A,
+               0,              FN_TX1_C,       0,              0,
+               /* IP7_14_12 [3] */
+               FN_VI1_HSYNC,   FN_HSPI_RX0_A,  FN_HRTS1_A,     FN_FMCLK_A,
+               0,              FN_RX1_C,       0,              0,
+               /* IP7_11_9 [3] */
+               FN_VI1_FIELD,   FN_HSPI_CS0_A,  FN_HRX1_A,      0,
+               FN_SCK1_C,      0,              0,              0,
+               /* IP7_8_6 [3] */
+               FN_VI1_CLKENB,  FN_HSPI_CLK0_A, FN_HTX1_A,      0,
+               FN_RTS1_C,      0,              0,              0,
+               /* IP7_5_4 [2] */
+               FN_SD0_WP,      0,              FN_RX5_A,       0,
+               /* IP7_3_2 [2] */
+               FN_SD0_CD,      0,              FN_TX5_A,       0,
+               /* IP7_1_0 [2] */
+               FN_SD0_DAT3,    0,              FN_IRQ1_B,      0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR8", 0xfffc0040, 32,
+                            1, 1, 3, 3, 2, 3, 3, 2, 3, 2, 3, 3, 3) {
+               /* IP8_31 [1] */
+               0, 0,
+               /* IP8_30 [1] */
+               0, 0,
+               /* IP8_29_27 [3] */
+               FN_VI0_G3,      FN_SD2_CMD_B,   FN_VI1_DATA5,   FN_DU1_DR5,
+               0,              FN_HRX1_B,      0,              0,
+               /* IP8_26_24 [3] */
+               FN_VI0_G2,      FN_SD2_CLK_B,   FN_VI1_DATA4,   FN_DU1_DR4,
+               0,              FN_HTX1_B,      0,              0,
+               /* IP8_23_22 [2] */
+               FN_VI0_DATA7_VI0_G1,    FN_DU1_DB5,
+               FN_RTS1_A,              0,
+               /* IP8_21_19 [3] */
+               FN_VI0_DATA6_VI0_G0,    FN_DU1_DB4,
+               FN_CTS1_A,              FN_PWM5,
+               0,      0,      0,      0,
+               /* IP8_18_16 [3] */
+               FN_VI0_DATA5_VI0_B5,    FN_DU1_DB3,     FN_SCK1_A,      FN_PWM4,
+               0,                      FN_HSCK1_B,     0,              0,
+               /* IP8_15_14 [2] */
+               FN_VI0_DATA4_VI0_B4,    FN_DU1_DB2,     FN_RX1_A,       0,
+               /* IP8_13_11 [3] */
+               FN_VI0_DATA3_VI0_B3,    FN_DU1_DG5,     FN_TX1_A,       FN_TX0_C,
+               0,                       0,             0,              0,
+               /* IP8_10_9 [2] */
+               FN_VI0_DATA2_VI0_B2,    FN_DU1_DG4,     FN_RX0_C,       0,
+               /* IP8_8_6 [3] */
+               FN_VI0_DATA1_VI0_B1,    FN_DU1_DG3,     FN_IRQ3_B,      FN_TX3_D,
+               0,                       0,             0,              0,
+               /* IP8_5_3 [3] */
+               FN_VI0_DATA0_VI0_B0,    FN_DU1_DG2,     FN_IRQ2_B,      FN_RX3_D,
+               0,                       0,             0,              0,
+               /* IP8_2_0 [3] */
+               FN_VI0_VSYNC,           FN_SD2_WP_B,    FN_VI1_DATA3,   FN_DU1_DR3,
+               0,                      FN_HSPI_TX1_A,  FN_TX3_B,       0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR9", 0xfffc0044, 32,
+                            1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) {
+               /* IP9_31 [1] */
+               0, 0,
+               /* IP9_30 [1] */
+               0, 0,
+               /* IP9_29_27 [3] */
+               FN_VI1_DATA11_A,        FN_DU1_EXHSYNC_DU1_HSYNC,
+               FN_ETH_RXD1,            FN_FMIN_C,
+               0,                      FN_RX2_D,
+               FN_SCL2_C,              0,
+               /* IP9_26_24 [3] */
+               FN_VI1_DATA10_A,        FN_DU1_DOTCLKOUT,
+               FN_ETH_RXD0,            FN_BPFCLK_C,
+               0,                      FN_TX2_D,
+               FN_SDA2_C,              0,
+               /* IP9_23_21 [3] */
+               FN_VI0_R5_A,    0,              FN_ETH_RX_ER,   FN_FMCLK_C,
+               FN_IERX,        FN_RX2_C,       0,              0,
+               /* IP9_20_18 [3] */
+               FN_VI0_R4_A,    FN_ETH_TX_EN,   0,              0,
+               FN_IETX,        FN_TX2_C,       0,              0,
+               /* IP9_17_15 [3] */
+               FN_VI0_R3_A,    FN_ETH_CRS_DV,  0,              FN_IECLK,
+               FN_SCK2_C,      0,              0,              0,
+               /* IP9_14_12 [3] */
+               FN_VI0_R2_A,    FN_VI1_DATA9,   FN_DU1_DB7,     FN_ETH_TXD1,
+               0,              FN_PWM3,        0,              0,
+               /* IP9_11_9 [3] */
+               FN_VI0_R1_A,    FN_VI1_DATA8,   FN_DU1_DB6,     FN_ETH_TXD0,
+               0,              FN_PWM2,        FN_TCLK1,       0,
+               /* IP9_8_6 [3] */
+               FN_VI0_R0_A,    FN_VI1_CLK,     FN_ETH_REF_CLK, FN_DU1_DOTCLKIN,
+               0,              0,              0,              0,
+               /* IP9_5_3 [3] */
+               FN_VI0_G5,      FN_SD2_DAT1_B,  FN_VI1_DATA7,   FN_DU1_DR7,
+               0,              FN_HCTS1_B,     0,              0,
+               /* IP9_2_0 [3] */
+               FN_VI0_G4,      FN_SD2_DAT0_B,  FN_VI1_DATA6,   FN_DU1_DR6,
+               0,              FN_HRTS1_B,     0,              0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR10", 0xfffc0048, 32,
+                            1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 4, 3, 3, 3) {
+
+               /* IP10_31 [1] */
+               0, 0,
+               /* IP10_30 [1] */
+               0, 0,
+               /* IP10_29 [1] */
+               0, 0,
+               /* IP10_28 [1] */
+               0, 0,
+               /* IP10_27 [1] */
+               0, 0,
+               /* IP10_26 [1] */
+               0, 0,
+               /* IP10_25 [1] */
+               0, 0,
+               /* IP10_24_22 [3] */
+               FN_SD2_WP_A,    FN_VI1_DATA15,  FN_EX_WAIT2_B,  FN_DACK0_B,
+               FN_HSPI_TX2_B,  FN_CAN_CLK_C,   0,              0,
+               /* IP10_21_19 [3] */
+               FN_SD2_CD_A,    FN_VI1_DATA14,  FN_EX_WAIT1_B,  FN_DREQ0_B,
+               FN_HSPI_RX2_B,  FN_REMOCON_A,   0,              0,
+               /* IP10_18_16 [3] */
+               FN_SD2_DAT3_A,  FN_VI1_DATA13,  FN_DACK2_B,     FN_ATAG1,
+               FN_HSPI_CS2_B,  FN_GPSIN_B,     0,              0,
+               /* IP10_15_13 [3] */
+               FN_SD2_DAT2_A,  FN_VI1_DATA12,  FN_DREQ2_B,     FN_ATADIR1,
+               FN_HSPI_CLK2_B, FN_GPSCLK_B,    0,              0,
+               /* IP10_12_9 [4] */
+               FN_SD2_DAT1_A,  FN_DU1_CDE,     FN_ATACS11,     FN_DACK1_B,
+               FN_ETH_MAGIC,   FN_CAN1_TX_A,   0,              FN_PWM6,
+               0, 0, 0, 0,
+               0, 0, 0, 0,
+               /* IP10_8_6 [3] */
+               FN_SD2_DAT0_A,  FN_DU1_DISP,    FN_ATACS01,     FN_DREQ1_B,
+               FN_ETH_LINK,    FN_CAN1_RX_A,   0,              0,
+               /* IP10_5_3 [3] */
+               FN_SD2_CMD_A,   FN_DU1_EXODDF_DU1_ODDF_DISP_CDE,
+               FN_ATAWR1,      FN_ETH_MDIO,
+               FN_SCL1_B,      0,
+               0,              0,
+               /* IP10_2_0 [3] */
+               FN_SD2_CLK_A,   FN_DU1_EXVSYNC_DU1_VSYNC,
+               FN_ATARD1,      FN_ETH_MDC,
+               FN_SDA1_B,      0,
+               0,              0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL0", 0xfffc0050, 32,
+                            1, 1, 2, 2, 3, 2, 2, 1, 1, 1, 1, 2,
+                            1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1) {
+
+               /* SEL 31  [1] */
+               0, 0,
+               /* SEL_30 (SCIF5) [1] */
+               FN_SEL_SCIF5_A,         FN_SEL_SCIF5_B,
+               /* SEL_29_28 (SCIF4) [2] */
+               FN_SEL_SCIF4_A,         FN_SEL_SCIF4_B,
+               FN_SEL_SCIF4_C,         0,
+               /* SEL_27_26 (SCIF3) [2] */
+               FN_SEL_SCIF3_A,         FN_SEL_SCIF3_B,
+               FN_SEL_SCIF3_C,         FN_SEL_SCIF3_D,
+               /* SEL_25_23 (SCIF2) [3] */
+               FN_SEL_SCIF2_A,         FN_SEL_SCIF2_B,
+               FN_SEL_SCIF2_C,         FN_SEL_SCIF2_D,
+               FN_SEL_SCIF2_E,         0,
+               0,                      0,
+               /* SEL_22_21 (SCIF1) [2] */
+               FN_SEL_SCIF1_A,         FN_SEL_SCIF1_B,
+               FN_SEL_SCIF1_C,         FN_SEL_SCIF1_D,
+               /* SEL_20_19 (SCIF0) [2] */
+               FN_SEL_SCIF0_A,         FN_SEL_SCIF0_B,
+               FN_SEL_SCIF0_C,         FN_SEL_SCIF0_D,
+               /* SEL_18 [1] */
+               0, 0,
+               /* SEL_17 (SSI2) [1] */
+               FN_SEL_SSI2_A,          FN_SEL_SSI2_B,
+               /* SEL_16 (SSI1) [1] */
+               FN_SEL_SSI1_A,          FN_SEL_SSI1_B,
+               /* SEL_15 (VI1) [1] */
+               FN_SEL_VI1_A,           FN_SEL_VI1_B,
+               /* SEL_14_13 (VI0) [2] */
+               FN_SEL_VI0_A,           FN_SEL_VI0_B,
+               FN_SEL_VI0_C,           FN_SEL_VI0_D,
+               /* SEL_12 [1] */
+               0, 0,
+               /* SEL_11 (SD2) [1] */
+               FN_SEL_SD2_A,           FN_SEL_SD2_B,
+               /* SEL_10 (SD1) [1] */
+               FN_SEL_SD1_A,           FN_SEL_SD1_B,
+               /* SEL_9 (IRQ3) [1] */
+               FN_SEL_IRQ3_A,          FN_SEL_IRQ3_B,
+               /* SEL_8_7 (IRQ2) [2] */
+               FN_SEL_IRQ2_A,          FN_SEL_IRQ2_B,
+               FN_SEL_IRQ2_C,          0,
+               /* SEL_6 (IRQ1) [1] */
+               FN_SEL_IRQ1_A,          FN_SEL_IRQ1_B,
+               /* SEL_5 [1] */
+               0, 0,
+               /* SEL_4 (DREQ2) [1] */
+               FN_SEL_DREQ2_A,         FN_SEL_DREQ2_B,
+               /* SEL_3 (DREQ1) [1] */
+               FN_SEL_DREQ1_A,         FN_SEL_DREQ1_B,
+               /* SEL_2 (DREQ0) [1] */
+               FN_SEL_DREQ0_A,         FN_SEL_DREQ0_B,
+               /* SEL_1 (WAIT2) [1] */
+               FN_SEL_WAIT2_A,         FN_SEL_WAIT2_B,
+               /* SEL_0 (WAIT1) [1] */
+               FN_SEL_WAIT1_A,         FN_SEL_WAIT1_B,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL1", 0xfffc0054, 32,
+                            1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
+                            1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1) {
+
+               /* SEL_31 [1] */
+               0, 0,
+               /* SEL_30 [1] */
+               0, 0,
+               /* SEL_29 [1] */
+               0, 0,
+               /* SEL_28 [1] */
+               0, 0,
+               /* SEL_27 (CAN1) [1] */
+               FN_SEL_CAN1_A,          FN_SEL_CAN1_B,
+               /* SEL_26 (CAN0) [1] */
+               FN_SEL_CAN0_A,          FN_SEL_CAN0_B,
+               /* SEL_25_24 (CANCLK) [2] */
+               FN_SEL_CANCLK_A,        FN_SEL_CANCLK_B,
+               FN_SEL_CANCLK_C,        FN_SEL_CANCLK_D,
+               /* SEL_23 (HSCIF1) [1] */
+               FN_SEL_HSCIF1_A,        FN_SEL_HSCIF1_B,
+               /* SEL_22 (HSCIF0) [1] */
+               FN_SEL_HSCIF0_A,        FN_SEL_HSCIF0_B,
+               /* SEL_21 [1] */
+               0, 0,
+               /* SEL_20 [1] */
+               0, 0,
+               /* SEL_19 [1] */
+               0, 0,
+               /* SEL_18 [1] */
+               0, 0,
+               /* SEL_17 [1] */
+               0, 0,
+               /* SEL_16 [1] */
+               0, 0,
+               /* SEL_15 [1] */
+               0, 0,
+               /* SEL_14_13 (REMOCON) [2] */
+               FN_SEL_REMOCON_A,       FN_SEL_REMOCON_B,
+               FN_SEL_REMOCON_C,       0,
+               /* SEL_12_11 (FM) [2] */
+               FN_SEL_FM_A,            FN_SEL_FM_B,
+               FN_SEL_FM_C,            FN_SEL_FM_D,
+               /* SEL_10_9 (GPS) [2] */
+               FN_SEL_GPS_A,           FN_SEL_GPS_B,
+               FN_SEL_GPS_C,           0,
+               /* SEL_8 (TSIF0) [1] */
+               FN_SEL_TSIF0_A,         FN_SEL_TSIF0_B,
+               /* SEL_7 (HSPI2) [1] */
+               FN_SEL_HSPI2_A,         FN_SEL_HSPI2_B,
+               /* SEL_6 (HSPI1) [1] */
+               FN_SEL_HSPI1_A,         FN_SEL_HSPI1_B,
+               /* SEL_5 (HSPI0) [1] */
+               FN_SEL_HSPI0_A,         FN_SEL_HSPI0_B,
+               /* SEL_4_3 (I2C3) [2] */
+               FN_SEL_I2C3_A,          FN_SEL_I2C3_B,
+               FN_SEL_I2C3_C,          0,
+               /* SEL_2_1 (I2C2) [2] */
+               FN_SEL_I2C2_A,          FN_SEL_I2C2_B,
+               FN_SEL_I2C2_C,          0,
+               /* SEL_0 (I2C1) [1] */
+               FN_SEL_I2C1_A,          FN_SEL_I2C1_B,
+               }
+       },
+       { },
+};
+
+const struct sh_pfc_soc_info r8a7778_pinmux_info = {
+       .name = "r8a7778_pfc",
+
+       .unlock_reg = 0xfffc0000, /* PMMR */
+
+       .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
+
+       .pins = pinmux_pins,
+       .nr_pins = ARRAY_SIZE(pinmux_pins),
+
+       .groups = pinmux_groups,
+       .nr_groups = ARRAY_SIZE(pinmux_groups),
+
+       .functions = pinmux_functions,
+       .nr_functions = ARRAY_SIZE(pinmux_functions),
+
+       .cfg_regs = pinmux_config_regs,
+
+       .gpio_data = pinmux_data,
+       .gpio_data_size = ARRAY_SIZE(pinmux_data),
+};
index 8cd90e7e945ae2317c73e42d6aa48bb6ffa4a160..8e22ca6c1044b252c93e86f2c744b28ba1d08c6a 100644 (file)
@@ -1,8 +1,9 @@
 /*
  * r8a7779 processor support - PFC hardware block
  *
- * Copyright (C) 2011  Renesas Solutions Corp.
+ * Copyright (C) 2011, 2013  Renesas Solutions Corp.
  * Copyright (C) 2011  Magnus Damm
+ * Copyright (C) 2013  Cogent Embedded, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,6 +20,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/platform_data/gpio-rcar.h>
 
 #include "sh_pfc.h"
 
@@ -79,7 +81,7 @@
 #define _GP_PORT_ALL(bank, pin, name, sfx)     name##_##sfx
 
 #define _GP_GPIO(bank, pin, _name, sfx)                                        \
-       [(bank * 32) + pin] = {                                         \
+       [RCAR_GP_PIN(bank, pin)] = {                                    \
                .name = __stringify(_name),                             \
                .enum_id = _name##_DATA,                                \
        }
@@ -1472,9 +1474,12 @@ static struct sh_pfc_pin pinmux_pins[] = {
 /* - DU0 -------------------------------------------------------------------- */
 static const unsigned int du0_rgb666_pins[] = {
        /* R[7:2], G[7:2], B[7:2] */
-       188, 187, 186, 185, 184, 183,
-       194, 193, 192, 191, 190, 189,
-       200, 199, 198, 197, 196, 195,
+       RCAR_GP_PIN(5, 28), RCAR_GP_PIN(5, 27), RCAR_GP_PIN(5, 26),
+       RCAR_GP_PIN(5, 25), RCAR_GP_PIN(5, 24), RCAR_GP_PIN(5, 23),
+       RCAR_GP_PIN(6, 2),  RCAR_GP_PIN(6, 1),  RCAR_GP_PIN(6, 0),
+       RCAR_GP_PIN(5, 31), RCAR_GP_PIN(5, 30), RCAR_GP_PIN(5, 29),
+       RCAR_GP_PIN(6, 8),  RCAR_GP_PIN(6, 7),  RCAR_GP_PIN(6, 6),
+       RCAR_GP_PIN(6, 5),  RCAR_GP_PIN(6, 4),  RCAR_GP_PIN(6, 3),
 };
 static const unsigned int du0_rgb666_mux[] = {
        DU0_DR7_MARK, DU0_DR6_MARK, DU0_DR5_MARK, DU0_DR4_MARK,
@@ -1486,9 +1491,14 @@ static const unsigned int du0_rgb666_mux[] = {
 };
 static const unsigned int du0_rgb888_pins[] = {
        /* R[7:0], G[7:0], B[7:0] */
-       188, 187, 186, 185, 184, 183, 24, 23,
-       194, 193, 192, 191, 190, 189, 26, 25,
-       200, 199, 198, 197, 196, 195, 28, 27,
+       RCAR_GP_PIN(5, 28), RCAR_GP_PIN(5, 27), RCAR_GP_PIN(5, 26),
+       RCAR_GP_PIN(5, 25), RCAR_GP_PIN(5, 24), RCAR_GP_PIN(5, 23),
+       RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 23), RCAR_GP_PIN(6, 2),
+       RCAR_GP_PIN(6, 1),  RCAR_GP_PIN(6, 0),  RCAR_GP_PIN(5, 31),
+       RCAR_GP_PIN(5, 30), RCAR_GP_PIN(5, 29), RCAR_GP_PIN(0, 26),
+       RCAR_GP_PIN(0, 25), RCAR_GP_PIN(6, 8),  RCAR_GP_PIN(6, 7),
+       RCAR_GP_PIN(6, 6),  RCAR_GP_PIN(6, 5),  RCAR_GP_PIN(6, 4),
+       RCAR_GP_PIN(6, 3),  RCAR_GP_PIN(0, 28), RCAR_GP_PIN(0, 27),
 };
 static const unsigned int du0_rgb888_mux[] = {
        DU0_DR7_MARK, DU0_DR6_MARK, DU0_DR5_MARK, DU0_DR4_MARK,
@@ -1500,28 +1510,28 @@ static const unsigned int du0_rgb888_mux[] = {
 };
 static const unsigned int du0_clk_in_pins[] = {
        /* CLKIN */
-       29,
+       RCAR_GP_PIN(0, 29),
 };
 static const unsigned int du0_clk_in_mux[] = {
        DU0_DOTCLKIN_MARK,
 };
 static const unsigned int du0_clk_out_0_pins[] = {
        /* CLKOUT */
-       180,
+       RCAR_GP_PIN(5, 20),
 };
 static const unsigned int du0_clk_out_0_mux[] = {
        DU0_DOTCLKOUT0_MARK,
 };
 static const unsigned int du0_clk_out_1_pins[] = {
        /* CLKOUT */
-       30,
+       RCAR_GP_PIN(0, 30),
 };
 static const unsigned int du0_clk_out_1_mux[] = {
        DU0_DOTCLKOUT1_MARK,
 };
 static const unsigned int du0_sync_0_pins[] = {
        /* VSYNC, HSYNC, DISP */
-       182, 181, 31,
+       RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 21), RCAR_GP_PIN(0, 31),
 };
 static const unsigned int du0_sync_0_mux[] = {
        DU0_EXHSYNC_DU0_HSYNC_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK,
@@ -1529,7 +1539,7 @@ static const unsigned int du0_sync_0_mux[] = {
 };
 static const unsigned int du0_sync_1_pins[] = {
        /* VSYNC, HSYNC, DISP */
-       182, 181, 32,
+       RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 21), RCAR_GP_PIN(1, 0),
 };
 static const unsigned int du0_sync_1_mux[] = {
        DU0_EXHSYNC_DU0_HSYNC_MARK, DU0_EXVSYNC_DU0_VSYNC_MARK,
@@ -1537,14 +1547,14 @@ static const unsigned int du0_sync_1_mux[] = {
 };
 static const unsigned int du0_oddf_pins[] = {
        /* ODDF */
-       31,
+       RCAR_GP_PIN(0, 31),
 };
 static const unsigned int du0_oddf_mux[] = {
        DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK
 };
 static const unsigned int du0_cde_pins[] = {
        /* CDE */
-       33,
+       RCAR_GP_PIN(1, 1),
 };
 static const unsigned int du0_cde_mux[] = {
        DU0_CDE_MARK
@@ -1552,9 +1562,12 @@ static const unsigned int du0_cde_mux[] = {
 /* - DU1 -------------------------------------------------------------------- */
 static const unsigned int du1_rgb666_pins[] = {
        /* R[7:2], G[7:2], B[7:2] */
-       41, 40, 39, 38, 37, 36,
-       49, 48, 47, 46, 45, 44,
-       57, 56, 55, 54, 53, 52,
+       RCAR_GP_PIN(1, 9),  RCAR_GP_PIN(1, 8),  RCAR_GP_PIN(1, 7),
+       RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 5),  RCAR_GP_PIN(1, 4),
+       RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 15),
+       RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 12),
+       RCAR_GP_PIN(1, 25), RCAR_GP_PIN(1, 24), RCAR_GP_PIN(1, 23),
+       RCAR_GP_PIN(1, 22), RCAR_GP_PIN(1, 21), RCAR_GP_PIN(1, 20),
 };
 static const unsigned int du1_rgb666_mux[] = {
        DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK,
@@ -1566,9 +1579,14 @@ static const unsigned int du1_rgb666_mux[] = {
 };
 static const unsigned int du1_rgb888_pins[] = {
        /* R[7:0], G[7:0], B[7:0] */
-       41, 40, 39, 38, 37, 36, 35, 34,
-       49, 48, 47, 46, 45, 44, 43, 32,
-       57, 56, 55, 54, 53, 52, 51, 50,
+       RCAR_GP_PIN(1, 9),  RCAR_GP_PIN(1, 8),  RCAR_GP_PIN(1, 7),
+       RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 5),  RCAR_GP_PIN(1, 4),
+       RCAR_GP_PIN(1, 3),  RCAR_GP_PIN(1, 2),  RCAR_GP_PIN(1, 17),
+       RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 14),
+       RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 11),
+       RCAR_GP_PIN(1, 0),  RCAR_GP_PIN(1, 25), RCAR_GP_PIN(1, 24),
+       RCAR_GP_PIN(1, 23), RCAR_GP_PIN(1, 22), RCAR_GP_PIN(1, 21),
+       RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 18),
 };
 static const unsigned int du1_rgb888_mux[] = {
        DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK,
@@ -1580,21 +1598,21 @@ static const unsigned int du1_rgb888_mux[] = {
 };
 static const unsigned int du1_clk_in_pins[] = {
        /* CLKIN */
-       58,
+       RCAR_GP_PIN(1, 26),
 };
 static const unsigned int du1_clk_in_mux[] = {
        DU1_DOTCLKIN_MARK,
 };
 static const unsigned int du1_clk_out_pins[] = {
        /* CLKOUT */
-       59,
+       RCAR_GP_PIN(1, 27),
 };
 static const unsigned int du1_clk_out_mux[] = {
        DU1_DOTCLKOUT_MARK,
 };
 static const unsigned int du1_sync_0_pins[] = {
        /* VSYNC, HSYNC, DISP */
-       61, 60, 62,
+       RCAR_GP_PIN(1, 29), RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 30),
 };
 static const unsigned int du1_sync_0_mux[] = {
        DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK,
@@ -1602,7 +1620,7 @@ static const unsigned int du1_sync_0_mux[] = {
 };
 static const unsigned int du1_sync_1_pins[] = {
        /* VSYNC, HSYNC, DISP */
-       61, 60, 63,
+       RCAR_GP_PIN(1, 29), RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 31),
 };
 static const unsigned int du1_sync_1_mux[] = {
        DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK,
@@ -1610,22 +1628,55 @@ static const unsigned int du1_sync_1_mux[] = {
 };
 static const unsigned int du1_oddf_pins[] = {
        /* ODDF */
-       62,
+       RCAR_GP_PIN(1, 30),
 };
 static const unsigned int du1_oddf_mux[] = {
        DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK
 };
 static const unsigned int du1_cde_pins[] = {
        /* CDE */
-       64,
+       RCAR_GP_PIN(2, 0),
 };
 static const unsigned int du1_cde_mux[] = {
        DU1_CDE_MARK
 };
+/* - Ether ------------------------------------------------------------------ */
+static const unsigned int ether_rmii_pins[] = {
+       /*
+        * ETH_TXD0, ETH_TXD1, ETH_TX_EN,  ETH_REFCLK,
+        * ETH_RXD0, ETH_RXD1, ETH_CRS_DV, ETH_RX_ER,
+        * ETH_MDIO, ETH_MDC
+        */
+       RCAR_GP_PIN(2, 27), RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 18),
+       RCAR_GP_PIN(2, 26),
+       RCAR_GP_PIN(2, 20), RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 17),
+       RCAR_GP_PIN(2, 19),
+       RCAR_GP_PIN(2, 29), RCAR_GP_PIN(2, 28),
+};
+static const unsigned int ether_rmii_mux[] = {
+       ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK,  ETH_REFCLK_MARK,
+       ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_CRS_DV_MARK, ETH_RX_ER_MARK,
+       ETH_MDIO_MARK, ETH_MDC_MARK,
+};
+static const unsigned int ether_link_pins[] = {
+       /* ETH_LINK */
+       RCAR_GP_PIN(2, 24),
+};
+static const unsigned int ether_link_mux[] = {
+       ETH_LINK_MARK,
+};
+static const unsigned int ether_magic_pins[] = {
+       /* ETH_MAGIC */
+       RCAR_GP_PIN(2, 25),
+};
+static const unsigned int ether_magic_mux[] = {
+       ETH_MAGIC_MARK,
+};
 /* - HSPI0 ------------------------------------------------------------------ */
 static const unsigned int hspi0_pins[] = {
        /* CLK, CS, RX, TX */
-       150, 151, 153, 152,
+       RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23), RCAR_GP_PIN(4, 25),
+       RCAR_GP_PIN(4, 24),
 };
 static const unsigned int hspi0_mux[] = {
        HSPI_CLK0_MARK, HSPI_CS0_MARK, HSPI_RX0_MARK, HSPI_TX0_MARK,
@@ -1633,28 +1684,32 @@ static const unsigned int hspi0_mux[] = {
 /* - HSPI1 ------------------------------------------------------------------ */
 static const unsigned int hspi1_pins[] = {
        /* CLK, CS, RX, TX */
-       63, 58, 64, 62,
+       RCAR_GP_PIN(1, 31), RCAR_GP_PIN(1, 26), RCAR_GP_PIN(2, 0),
+       RCAR_GP_PIN(1, 30),
 };
 static const unsigned int hspi1_mux[] = {
        HSPI_CLK1_MARK, HSPI_CS1_MARK, HSPI_RX1_MARK, HSPI_TX1_MARK,
 };
 static const unsigned int hspi1_b_pins[] = {
        /* CLK, CS, RX, TX */
-       90, 91, 93, 92,
+       RCAR_GP_PIN(2, 26), RCAR_GP_PIN(2, 27), RCAR_GP_PIN(2, 29),
+       RCAR_GP_PIN(2, 28),
 };
 static const unsigned int hspi1_b_mux[] = {
        HSPI_CLK1_B_MARK, HSPI_CS1_B_MARK, HSPI_RX1_B_MARK, HSPI_TX1_B_MARK,
 };
 static const unsigned int hspi1_c_pins[] = {
        /* CLK, CS, RX, TX */
-       141, 142, 144, 143,
+       RCAR_GP_PIN(4, 13), RCAR_GP_PIN(4, 14), RCAR_GP_PIN(4, 16),
+       RCAR_GP_PIN(4, 15),
 };
 static const unsigned int hspi1_c_mux[] = {
        HSPI_CLK1_C_MARK, HSPI_CS1_C_MARK, HSPI_RX1_C_MARK, HSPI_TX1_C_MARK,
 };
 static const unsigned int hspi1_d_pins[] = {
        /* CLK, CS, RX, TX */
-       101, 102, 104, 103,
+       RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 8),
+       RCAR_GP_PIN(3, 7),
 };
 static const unsigned int hspi1_d_mux[] = {
        HSPI_CLK1_D_MARK, HSPI_CS1_D_MARK, HSPI_RX1_D_MARK, HSPI_TX1_D_MARK,
@@ -1662,14 +1717,16 @@ static const unsigned int hspi1_d_mux[] = {
 /* - HSPI2 ------------------------------------------------------------------ */
 static const unsigned int hspi2_pins[] = {
        /* CLK, CS, RX, TX */
-       9, 10, 11, 14,
+       RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 11),
+       RCAR_GP_PIN(0, 14),
 };
 static const unsigned int hspi2_mux[] = {
        HSPI_CLK2_MARK, HSPI_CS2_MARK, HSPI_RX2_MARK, HSPI_TX2_MARK,
 };
 static const unsigned int hspi2_b_pins[] = {
        /* CLK, CS, RX, TX */
-       7, 13, 8, 6,
+       RCAR_GP_PIN(0, 7), RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 8),
+       RCAR_GP_PIN(0, 6),
 };
 static const unsigned int hspi2_b_mux[] = {
        HSPI_CLK2_B_MARK, HSPI_CS2_B_MARK, HSPI_RX2_B_MARK, HSPI_TX2_B_MARK,
@@ -1677,56 +1734,56 @@ static const unsigned int hspi2_b_mux[] = {
 /* - INTC ------------------------------------------------------------------- */
 static const unsigned int intc_irq0_pins[] = {
        /* IRQ */
-       78,
+       RCAR_GP_PIN(2, 14),
 };
 static const unsigned int intc_irq0_mux[] = {
        IRQ0_MARK,
 };
 static const unsigned int intc_irq0_b_pins[] = {
        /* IRQ */
-       141,
+       RCAR_GP_PIN(4, 13),
 };
 static const unsigned int intc_irq0_b_mux[] = {
        IRQ0_B_MARK,
 };
 static const unsigned int intc_irq1_pins[] = {
        /* IRQ */
-       79,
+       RCAR_GP_PIN(2, 15),
 };
 static const unsigned int intc_irq1_mux[] = {
        IRQ1_MARK,
 };
 static const unsigned int intc_irq1_b_pins[] = {
        /* IRQ */
-       142,
+       RCAR_GP_PIN(4, 14),
 };
 static const unsigned int intc_irq1_b_mux[] = {
        IRQ1_B_MARK,
 };
 static const unsigned int intc_irq2_pins[] = {
        /* IRQ */
-       88,
+       RCAR_GP_PIN(2, 24),
 };
 static const unsigned int intc_irq2_mux[] = {
        IRQ2_MARK,
 };
 static const unsigned int intc_irq2_b_pins[] = {
        /* IRQ */
-       143,
+       RCAR_GP_PIN(4, 15),
 };
 static const unsigned int intc_irq2_b_mux[] = {
        IRQ2_B_MARK,
 };
 static const unsigned int intc_irq3_pins[] = {
        /* IRQ */
-       89,
+       RCAR_GP_PIN(2, 25),
 };
 static const unsigned int intc_irq3_mux[] = {
        IRQ3_MARK,
 };
 static const unsigned int intc_irq3_b_pins[] = {
        /* IRQ */
-       144,
+       RCAR_GP_PIN(4, 16),
 };
 static const unsigned int intc_irq3_b_mux[] = {
        IRQ3_B_MARK,
@@ -1734,56 +1791,56 @@ static const unsigned int intc_irq3_b_mux[] = {
 /* - LSBC ------------------------------------------------------------------- */
 static const unsigned int lbsc_cs0_pins[] = {
        /* CS */
-       13,
+       RCAR_GP_PIN(0, 13),
 };
 static const unsigned int lbsc_cs0_mux[] = {
        CS0_MARK,
 };
 static const unsigned int lbsc_cs1_pins[] = {
        /* CS */
-       14,
+       RCAR_GP_PIN(0, 14),
 };
 static const unsigned int lbsc_cs1_mux[] = {
        CS1_A26_MARK,
 };
 static const unsigned int lbsc_ex_cs0_pins[] = {
        /* CS */
-       15,
+       RCAR_GP_PIN(0, 15),
 };
 static const unsigned int lbsc_ex_cs0_mux[] = {
        EX_CS0_MARK,
 };
 static const unsigned int lbsc_ex_cs1_pins[] = {
        /* CS */
-       16,
+       RCAR_GP_PIN(0, 16),
 };
 static const unsigned int lbsc_ex_cs1_mux[] = {
        EX_CS1_MARK,
 };
 static const unsigned int lbsc_ex_cs2_pins[] = {
        /* CS */
-       17,
+       RCAR_GP_PIN(0, 17),
 };
 static const unsigned int lbsc_ex_cs2_mux[] = {
        EX_CS2_MARK,
 };
 static const unsigned int lbsc_ex_cs3_pins[] = {
        /* CS */
-       18,
+       RCAR_GP_PIN(0, 18),
 };
 static const unsigned int lbsc_ex_cs3_mux[] = {
        EX_CS3_MARK,
 };
 static const unsigned int lbsc_ex_cs4_pins[] = {
        /* CS */
-       19,
+       RCAR_GP_PIN(0, 19),
 };
 static const unsigned int lbsc_ex_cs4_mux[] = {
        EX_CS4_MARK,
 };
 static const unsigned int lbsc_ex_cs5_pins[] = {
        /* CS */
-       20,
+       RCAR_GP_PIN(0, 20),
 };
 static const unsigned int lbsc_ex_cs5_mux[] = {
        EX_CS5_MARK,
@@ -1791,21 +1848,24 @@ static const unsigned int lbsc_ex_cs5_mux[] = {
 /* - MMCIF ------------------------------------------------------------------ */
 static const unsigned int mmc0_data1_pins[] = {
        /* D[0] */
-       19,
+       RCAR_GP_PIN(0, 19),
 };
 static const unsigned int mmc0_data1_mux[] = {
        MMC0_D0_MARK,
 };
 static const unsigned int mmc0_data4_pins[] = {
        /* D[0:3] */
-       19, 20, 21, 2,
+       RCAR_GP_PIN(0, 19), RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 21),
+       RCAR_GP_PIN(0, 2),
 };
 static const unsigned int mmc0_data4_mux[] = {
        MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK,
 };
 static const unsigned int mmc0_data8_pins[] = {
        /* D[0:7] */
-       19, 20, 21, 2, 10, 11, 15, 16,
+       RCAR_GP_PIN(0, 19), RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 21),
+       RCAR_GP_PIN(0, 2),  RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 11),
+       RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 16),
 };
 static const unsigned int mmc0_data8_mux[] = {
        MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK,
@@ -1813,28 +1873,31 @@ static const unsigned int mmc0_data8_mux[] = {
 };
 static const unsigned int mmc0_ctrl_pins[] = {
        /* CMD, CLK */
-       18, 17,
+       RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 17),
 };
 static const unsigned int mmc0_ctrl_mux[] = {
        MMC0_CMD_MARK, MMC0_CLK_MARK,
 };
 static const unsigned int mmc1_data1_pins[] = {
        /* D[0] */
-       72,
+       RCAR_GP_PIN(2, 8),
 };
 static const unsigned int mmc1_data1_mux[] = {
        MMC1_D0_MARK,
 };
 static const unsigned int mmc1_data4_pins[] = {
        /* D[0:3] */
-       72, 73, 74, 75,
+       RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 9), RCAR_GP_PIN(2, 10),
+       RCAR_GP_PIN(2, 11),
 };
 static const unsigned int mmc1_data4_mux[] = {
        MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK,
 };
 static const unsigned int mmc1_data8_pins[] = {
        /* D[0:7] */
-       72, 73, 74, 75, 76, 77, 80, 81,
+       RCAR_GP_PIN(2, 8),  RCAR_GP_PIN(2, 9),  RCAR_GP_PIN(2, 10),
+       RCAR_GP_PIN(2, 11), RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13),
+       RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 17),
 };
 static const unsigned int mmc1_data8_mux[] = {
        MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK,
@@ -1842,7 +1905,7 @@ static const unsigned int mmc1_data8_mux[] = {
 };
 static const unsigned int mmc1_ctrl_pins[] = {
        /* CMD, CLK */
-       68, 65,
+       RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 1),
 };
 static const unsigned int mmc1_ctrl_mux[] = {
        MMC1_CMD_MARK, MMC1_CLK_MARK,
@@ -1850,84 +1913,84 @@ static const unsigned int mmc1_ctrl_mux[] = {
 /* - SCIF0 ------------------------------------------------------------------ */
 static const unsigned int scif0_data_pins[] = {
        /* RXD, TXD */
-       153, 152,
+       RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 24),
 };
 static const unsigned int scif0_data_mux[] = {
        RX0_MARK, TX0_MARK,
 };
 static const unsigned int scif0_clk_pins[] = {
        /* SCK */
-       156,
+       RCAR_GP_PIN(4, 28),
 };
 static const unsigned int scif0_clk_mux[] = {
        SCK0_MARK,
 };
 static const unsigned int scif0_ctrl_pins[] = {
        /* RTS, CTS */
-       151, 150,
+       RCAR_GP_PIN(4, 23), RCAR_GP_PIN(4, 22),
 };
 static const unsigned int scif0_ctrl_mux[] = {
        RTS0_TANS_MARK, CTS0_MARK,
 };
 static const unsigned int scif0_data_b_pins[] = {
        /* RXD, TXD */
-       20, 19,
+       RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 19),
 };
 static const unsigned int scif0_data_b_mux[] = {
        RX0_B_MARK, TX0_B_MARK,
 };
 static const unsigned int scif0_clk_b_pins[] = {
        /* SCK */
-       33,
+       RCAR_GP_PIN(1, 1),
 };
 static const unsigned int scif0_clk_b_mux[] = {
        SCK0_B_MARK,
 };
 static const unsigned int scif0_ctrl_b_pins[] = {
        /* RTS, CTS */
-       18, 11,
+       RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 11),
 };
 static const unsigned int scif0_ctrl_b_mux[] = {
        RTS0_B_TANS_B_MARK, CTS0_B_MARK,
 };
 static const unsigned int scif0_data_c_pins[] = {
        /* RXD, TXD */
-       146, 147,
+       RCAR_GP_PIN(4, 18), RCAR_GP_PIN(4, 19),
 };
 static const unsigned int scif0_data_c_mux[] = {
        RX0_C_MARK, TX0_C_MARK,
 };
 static const unsigned int scif0_clk_c_pins[] = {
        /* SCK */
-       145,
+       RCAR_GP_PIN(4, 17),
 };
 static const unsigned int scif0_clk_c_mux[] = {
        SCK0_C_MARK,
 };
 static const unsigned int scif0_ctrl_c_pins[] = {
        /* RTS, CTS */
-       149, 148,
+       RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 20),
 };
 static const unsigned int scif0_ctrl_c_mux[] = {
        RTS0_C_TANS_C_MARK, CTS0_C_MARK,
 };
 static const unsigned int scif0_data_d_pins[] = {
        /* RXD, TXD */
-       43, 42,
+       RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 10),
 };
 static const unsigned int scif0_data_d_mux[] = {
        RX0_D_MARK, TX0_D_MARK,
 };
 static const unsigned int scif0_clk_d_pins[] = {
        /* SCK */
-       50,
+       RCAR_GP_PIN(1, 18),
 };
 static const unsigned int scif0_clk_d_mux[] = {
        SCK0_D_MARK,
 };
 static const unsigned int scif0_ctrl_d_pins[] = {
        /* RTS, CTS */
-       51, 35,
+       RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 3),
 };
 static const unsigned int scif0_ctrl_d_mux[] = {
        RTS0_D_TANS_D_MARK, CTS0_D_MARK,
@@ -1935,63 +1998,63 @@ static const unsigned int scif0_ctrl_d_mux[] = {
 /* - SCIF1 ------------------------------------------------------------------ */
 static const unsigned int scif1_data_pins[] = {
        /* RXD, TXD */
-       149, 148,
+       RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 20),
 };
 static const unsigned int scif1_data_mux[] = {
        RX1_MARK, TX1_MARK,
 };
 static const unsigned int scif1_clk_pins[] = {
        /* SCK */
-       145,
+       RCAR_GP_PIN(4, 17),
 };
 static const unsigned int scif1_clk_mux[] = {
        SCK1_MARK,
 };
 static const unsigned int scif1_ctrl_pins[] = {
        /* RTS, CTS */
-       147, 146,
+       RCAR_GP_PIN(4, 19), RCAR_GP_PIN(4, 18),
 };
 static const unsigned int scif1_ctrl_mux[] = {
        RTS1_TANS_MARK, CTS1_MARK,
 };
 static const unsigned int scif1_data_b_pins[] = {
        /* RXD, TXD */
-       117, 114,
+       RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 18),
 };
 static const unsigned int scif1_data_b_mux[] = {
        RX1_B_MARK, TX1_B_MARK,
 };
 static const unsigned int scif1_clk_b_pins[] = {
        /* SCK */
-       113,
+       RCAR_GP_PIN(3, 17),
 };
 static const unsigned int scif1_clk_b_mux[] = {
        SCK1_B_MARK,
 };
 static const unsigned int scif1_ctrl_b_pins[] = {
        /* RTS, CTS */
-       115, 116,
+       RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 20),
 };
 static const unsigned int scif1_ctrl_b_mux[] = {
        RTS1_B_TANS_B_MARK, CTS1_B_MARK,
 };
 static const unsigned int scif1_data_c_pins[] = {
        /* RXD, TXD */
-       67, 66,
+       RCAR_GP_PIN(2, 3), RCAR_GP_PIN(2, 2),
 };
 static const unsigned int scif1_data_c_mux[] = {
        RX1_C_MARK, TX1_C_MARK,
 };
 static const unsigned int scif1_clk_c_pins[] = {
        /* SCK */
-       86,
+       RCAR_GP_PIN(2, 22),
 };
 static const unsigned int scif1_clk_c_mux[] = {
        SCK1_C_MARK,
 };
 static const unsigned int scif1_ctrl_c_pins[] = {
        /* RTS, CTS */
-       69, 68,
+       RCAR_GP_PIN(2, 5), RCAR_GP_PIN(2, 4),
 };
 static const unsigned int scif1_ctrl_c_mux[] = {
        RTS1_C_TANS_C_MARK, CTS1_C_MARK,
@@ -1999,63 +2062,63 @@ static const unsigned int scif1_ctrl_c_mux[] = {
 /* - SCIF2 ------------------------------------------------------------------ */
 static const unsigned int scif2_data_pins[] = {
        /* RXD, TXD */
-       106, 105,
+       RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 9),
 };
 static const unsigned int scif2_data_mux[] = {
        RX2_MARK, TX2_MARK,
 };
 static const unsigned int scif2_clk_pins[] = {
        /* SCK */
-       107,
+       RCAR_GP_PIN(3, 11),
 };
 static const unsigned int scif2_clk_mux[] = {
        SCK2_MARK,
 };
 static const unsigned int scif2_data_b_pins[] = {
        /* RXD, TXD */
-       120, 119,
+       RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 23),
 };
 static const unsigned int scif2_data_b_mux[] = {
        RX2_B_MARK, TX2_B_MARK,
 };
 static const unsigned int scif2_clk_b_pins[] = {
        /* SCK */
-       118,
+       RCAR_GP_PIN(3, 22),
 };
 static const unsigned int scif2_clk_b_mux[] = {
        SCK2_B_MARK,
 };
 static const unsigned int scif2_data_c_pins[] = {
        /* RXD, TXD */
-       33, 31,
+       RCAR_GP_PIN(1, 1), RCAR_GP_PIN(0, 31),
 };
 static const unsigned int scif2_data_c_mux[] = {
        RX2_C_MARK, TX2_C_MARK,
 };
 static const unsigned int scif2_clk_c_pins[] = {
        /* SCK */
-       32,
+       RCAR_GP_PIN(1, 0),
 };
 static const unsigned int scif2_clk_c_mux[] = {
        SCK2_C_MARK,
 };
 static const unsigned int scif2_data_d_pins[] = {
        /* RXD, TXD */
-       64, 62,
+       RCAR_GP_PIN(2, 0), RCAR_GP_PIN(1, 30),
 };
 static const unsigned int scif2_data_d_mux[] = {
        RX2_D_MARK, TX2_D_MARK,
 };
 static const unsigned int scif2_clk_d_pins[] = {
        /* SCK */
-       63,
+       RCAR_GP_PIN(1, 31),
 };
 static const unsigned int scif2_clk_d_mux[] = {
        SCK2_D_MARK,
 };
 static const unsigned int scif2_data_e_pins[] = {
        /* RXD, TXD */
-       20, 19,
+       RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 19),
 };
 static const unsigned int scif2_data_e_mux[] = {
        RX2_E_MARK, TX2_E_MARK,
@@ -2063,14 +2126,14 @@ static const unsigned int scif2_data_e_mux[] = {
 /* - SCIF3 ------------------------------------------------------------------ */
 static const unsigned int scif3_data_pins[] = {
        /* RXD, TXD */
-       137, 136,
+       RCAR_GP_PIN(4, 9), RCAR_GP_PIN(4, 8),
 };
 static const unsigned int scif3_data_mux[] = {
        RX3_IRDA_RX_MARK, TX3_IRDA_TX_MARK,
 };
 static const unsigned int scif3_clk_pins[] = {
        /* SCK */
-       135,
+       RCAR_GP_PIN(4, 7),
 };
 static const unsigned int scif3_clk_mux[] = {
        SCK3_MARK,
@@ -2078,35 +2141,35 @@ static const unsigned int scif3_clk_mux[] = {
 
 static const unsigned int scif3_data_b_pins[] = {
        /* RXD, TXD */
-       64, 62,
+       RCAR_GP_PIN(2, 0), RCAR_GP_PIN(1, 30),
 };
 static const unsigned int scif3_data_b_mux[] = {
        RX3_B_IRDA_RX_B_MARK, TX3_B_IRDA_TX_B_MARK,
 };
 static const unsigned int scif3_data_c_pins[] = {
        /* RXD, TXD */
-       15, 12,
+       RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 12),
 };
 static const unsigned int scif3_data_c_mux[] = {
        RX3_C_IRDA_RX_C_MARK, TX3C_IRDA_TX_C_MARK,
 };
 static const unsigned int scif3_data_d_pins[] = {
        /* RXD, TXD */
-       30, 29,
+       RCAR_GP_PIN(0, 30), RCAR_GP_PIN(0, 29),
 };
 static const unsigned int scif3_data_d_mux[] = {
        RX3_D_IRDA_RX_D_MARK, TX3_D_IRDA_TX_D_MARK,
 };
 static const unsigned int scif3_data_e_pins[] = {
        /* RXD, TXD */
-       35, 34,
+       RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 2),
 };
 static const unsigned int scif3_data_e_mux[] = {
        RX3_E_IRDA_RX_E_MARK, TX3_E_IRDA_TX_E_MARK,
 };
 static const unsigned int scif3_clk_e_pins[] = {
        /* SCK */
-       42,
+       RCAR_GP_PIN(1, 10),
 };
 static const unsigned int scif3_clk_e_mux[] = {
        SCK3_E_MARK,
@@ -2114,42 +2177,42 @@ static const unsigned int scif3_clk_e_mux[] = {
 /* - SCIF4 ------------------------------------------------------------------ */
 static const unsigned int scif4_data_pins[] = {
        /* RXD, TXD */
-       123, 122,
+       RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 26),
 };
 static const unsigned int scif4_data_mux[] = {
        RX4_MARK, TX4_MARK,
 };
 static const unsigned int scif4_clk_pins[] = {
        /* SCK */
-       121,
+       RCAR_GP_PIN(3, 25),
 };
 static const unsigned int scif4_clk_mux[] = {
        SCK4_MARK,
 };
 static const unsigned int scif4_data_b_pins[] = {
        /* RXD, TXD */
-       111, 110,
+       RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 14),
 };
 static const unsigned int scif4_data_b_mux[] = {
        RX4_B_MARK, TX4_B_MARK,
 };
 static const unsigned int scif4_clk_b_pins[] = {
        /* SCK */
-       112,
+       RCAR_GP_PIN(3, 16),
 };
 static const unsigned int scif4_clk_b_mux[] = {
        SCK4_B_MARK,
 };
 static const unsigned int scif4_data_c_pins[] = {
        /* RXD, TXD */
-       22, 21,
+       RCAR_GP_PIN(0, 22), RCAR_GP_PIN(0, 21),
 };
 static const unsigned int scif4_data_c_mux[] = {
        RX4_C_MARK, TX4_C_MARK,
 };
 static const unsigned int scif4_data_d_pins[] = {
        /* RXD, TXD */
-       69, 68,
+       RCAR_GP_PIN(2, 5), RCAR_GP_PIN(2, 4),
 };
 static const unsigned int scif4_data_d_mux[] = {
        RX4_D_MARK, TX4_D_MARK,
@@ -2157,56 +2220,56 @@ static const unsigned int scif4_data_d_mux[] = {
 /* - SCIF5 ------------------------------------------------------------------ */
 static const unsigned int scif5_data_pins[] = {
        /* RXD, TXD */
-       51, 50,
+       RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 18),
 };
 static const unsigned int scif5_data_mux[] = {
        RX5_MARK, TX5_MARK,
 };
 static const unsigned int scif5_clk_pins[] = {
        /* SCK */
-       43,
+       RCAR_GP_PIN(1, 11),
 };
 static const unsigned int scif5_clk_mux[] = {
        SCK5_MARK,
 };
 static const unsigned int scif5_data_b_pins[] = {
        /* RXD, TXD */
-       18, 11,
+       RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 11),
 };
 static const unsigned int scif5_data_b_mux[] = {
        RX5_B_MARK, TX5_B_MARK,
 };
 static const unsigned int scif5_clk_b_pins[] = {
        /* SCK */
-       19,
+       RCAR_GP_PIN(0, 19),
 };
 static const unsigned int scif5_clk_b_mux[] = {
        SCK5_B_MARK,
 };
 static const unsigned int scif5_data_c_pins[] = {
        /* RXD, TXD */
-       24, 23,
+       RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 23),
 };
 static const unsigned int scif5_data_c_mux[] = {
        RX5_C_MARK, TX5_C_MARK,
 };
 static const unsigned int scif5_clk_c_pins[] = {
        /* SCK */
-       28,
+       RCAR_GP_PIN(0, 28),
 };
 static const unsigned int scif5_clk_c_mux[] = {
        SCK5_C_MARK,
 };
 static const unsigned int scif5_data_d_pins[] = {
        /* RXD, TXD */
-       8, 6,
+       RCAR_GP_PIN(0, 8), RCAR_GP_PIN(0, 6),
 };
 static const unsigned int scif5_data_d_mux[] = {
        RX5_D_MARK, TX5_D_MARK,
 };
 static const unsigned int scif5_clk_d_pins[] = {
        /* SCK */
-       7,
+       RCAR_GP_PIN(0, 7),
 };
 static const unsigned int scif5_clk_d_mux[] = {
        SCK5_D_MARK,
@@ -2214,35 +2277,36 @@ static const unsigned int scif5_clk_d_mux[] = {
 /* - SDHI0 ------------------------------------------------------------------ */
 static const unsigned int sdhi0_data1_pins[] = {
        /* D0 */
-       117,
+       RCAR_GP_PIN(3, 21),
 };
 static const unsigned int sdhi0_data1_mux[] = {
        SD0_DAT0_MARK,
 };
 static const unsigned int sdhi0_data4_pins[] = {
        /* D[0:3] */
-       117, 118, 119, 120,
+       RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 23),
+       RCAR_GP_PIN(3, 24),
 };
 static const unsigned int sdhi0_data4_mux[] = {
        SD0_DAT0_MARK, SD0_DAT1_MARK, SD0_DAT2_MARK, SD0_DAT3_MARK,
 };
 static const unsigned int sdhi0_ctrl_pins[] = {
        /* CMD, CLK */
-       114, 113,
+       RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 17),
 };
 static const unsigned int sdhi0_ctrl_mux[] = {
        SD0_CMD_MARK, SD0_CLK_MARK,
 };
 static const unsigned int sdhi0_cd_pins[] = {
        /* CD */
-       115,
+       RCAR_GP_PIN(3, 19),
 };
 static const unsigned int sdhi0_cd_mux[] = {
        SD0_CD_MARK,
 };
 static const unsigned int sdhi0_wp_pins[] = {
        /* WP */
-       116,
+       RCAR_GP_PIN(3, 20),
 };
 static const unsigned int sdhi0_wp_mux[] = {
        SD0_WP_MARK,
@@ -2250,35 +2314,36 @@ static const unsigned int sdhi0_wp_mux[] = {
 /* - SDHI1 ------------------------------------------------------------------ */
 static const unsigned int sdhi1_data1_pins[] = {
        /* D0 */
-       19,
+       RCAR_GP_PIN(0, 19),
 };
 static const unsigned int sdhi1_data1_mux[] = {
        SD1_DAT0_MARK,
 };
 static const unsigned int sdhi1_data4_pins[] = {
        /* D[0:3] */
-       19, 20, 21, 2,
+       RCAR_GP_PIN(0, 19), RCAR_GP_PIN(0, 20), RCAR_GP_PIN(0, 21),
+       RCAR_GP_PIN(0, 2),
 };
 static const unsigned int sdhi1_data4_mux[] = {
        SD1_DAT0_MARK, SD1_DAT1_MARK, SD1_DAT2_MARK, SD1_DAT3_MARK,
 };
 static const unsigned int sdhi1_ctrl_pins[] = {
        /* CMD, CLK */
-       18, 17,
+       RCAR_GP_PIN(0, 18), RCAR_GP_PIN(0, 17),
 };
 static const unsigned int sdhi1_ctrl_mux[] = {
        SD1_CMD_MARK, SD1_CLK_MARK,
 };
 static const unsigned int sdhi1_cd_pins[] = {
        /* CD */
-       10,
+       RCAR_GP_PIN(0, 10),
 };
 static const unsigned int sdhi1_cd_mux[] = {
        SD1_CD_MARK,
 };
 static const unsigned int sdhi1_wp_pins[] = {
        /* WP */
-       11,
+       RCAR_GP_PIN(0, 11),
 };
 static const unsigned int sdhi1_wp_mux[] = {
        SD1_WP_MARK,
@@ -2286,35 +2351,36 @@ static const unsigned int sdhi1_wp_mux[] = {
 /* - SDHI2 ------------------------------------------------------------------ */
 static const unsigned int sdhi2_data1_pins[] = {
        /* D0 */
-       97,
+       RCAR_GP_PIN(3, 1),
 };
 static const unsigned int sdhi2_data1_mux[] = {
        SD2_DAT0_MARK,
 };
 static const unsigned int sdhi2_data4_pins[] = {
        /* D[0:3] */
-       97, 98, 99, 100,
+       RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3),
+       RCAR_GP_PIN(3, 4),
 };
 static const unsigned int sdhi2_data4_mux[] = {
        SD2_DAT0_MARK, SD2_DAT1_MARK, SD2_DAT2_MARK, SD2_DAT3_MARK,
 };
 static const unsigned int sdhi2_ctrl_pins[] = {
        /* CMD, CLK */
-       102, 101,
+       RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 5),
 };
 static const unsigned int sdhi2_ctrl_mux[] = {
        SD2_CMD_MARK, SD2_CLK_MARK,
 };
 static const unsigned int sdhi2_cd_pins[] = {
        /* CD */
-       103,
+       RCAR_GP_PIN(3, 7),
 };
 static const unsigned int sdhi2_cd_mux[] = {
        SD2_CD_MARK,
 };
 static const unsigned int sdhi2_wp_pins[] = {
        /* WP */
-       104,
+       RCAR_GP_PIN(3, 8),
 };
 static const unsigned int sdhi2_wp_mux[] = {
        SD2_WP_MARK,
@@ -2322,35 +2388,36 @@ static const unsigned int sdhi2_wp_mux[] = {
 /* - SDHI3 ------------------------------------------------------------------ */
 static const unsigned int sdhi3_data1_pins[] = {
        /* D0 */
-       50,
+       RCAR_GP_PIN(1, 18),
 };
 static const unsigned int sdhi3_data1_mux[] = {
        SD3_DAT0_MARK,
 };
 static const unsigned int sdhi3_data4_pins[] = {
        /* D[0:3] */
-       50, 51, 52, 53,
+       RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 20),
+       RCAR_GP_PIN(1, 21),
 };
 static const unsigned int sdhi3_data4_mux[] = {
        SD3_DAT0_MARK, SD3_DAT1_MARK, SD3_DAT2_MARK, SD3_DAT3_MARK,
 };
 static const unsigned int sdhi3_ctrl_pins[] = {
        /* CMD, CLK */
-       35, 34,
+       RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 2),
 };
 static const unsigned int sdhi3_ctrl_mux[] = {
        SD3_CMD_MARK, SD3_CLK_MARK,
 };
 static const unsigned int sdhi3_cd_pins[] = {
        /* CD */
-       62,
+       RCAR_GP_PIN(1, 30),
 };
 static const unsigned int sdhi3_cd_mux[] = {
        SD3_CD_MARK,
 };
 static const unsigned int sdhi3_wp_pins[] = {
        /* WP */
-       64,
+       RCAR_GP_PIN(2, 0),
 };
 static const unsigned int sdhi3_wp_mux[] = {
        SD3_WP_MARK,
@@ -2358,14 +2425,14 @@ static const unsigned int sdhi3_wp_mux[] = {
 /* - USB0 ------------------------------------------------------------------- */
 static const unsigned int usb0_pins[] = {
        /* PENC */
-       154,
+       RCAR_GP_PIN(4, 26),
 };
 static const unsigned int usb0_mux[] = {
        USB_PENC0_MARK,
 };
 static const unsigned int usb0_ovc_pins[] = {
        /* USB_OVC */
-       150
+       RCAR_GP_PIN(4, 22),
 };
 static const unsigned int usb0_ovc_mux[] = {
        USB_OVC0_MARK,
@@ -2373,14 +2440,14 @@ static const unsigned int usb0_ovc_mux[] = {
 /* - USB1 ------------------------------------------------------------------- */
 static const unsigned int usb1_pins[] = {
        /* PENC */
-       155,
+       RCAR_GP_PIN(4, 27),
 };
 static const unsigned int usb1_mux[] = {
        USB_PENC1_MARK,
 };
 static const unsigned int usb1_ovc_pins[] = {
        /* USB_OVC */
-       152,
+       RCAR_GP_PIN(4, 24),
 };
 static const unsigned int usb1_ovc_mux[] = {
        USB_OVC1_MARK,
@@ -2388,18 +2455,122 @@ static const unsigned int usb1_ovc_mux[] = {
 /* - USB2 ------------------------------------------------------------------- */
 static const unsigned int usb2_pins[] = {
        /* PENC */
-       156,
+       RCAR_GP_PIN(4, 28),
 };
 static const unsigned int usb2_mux[] = {
        USB_PENC2_MARK,
 };
 static const unsigned int usb2_ovc_pins[] = {
        /* USB_OVC */
-       125,
+       RCAR_GP_PIN(3, 29),
 };
 static const unsigned int usb2_ovc_mux[] = {
        USB_OVC2_MARK,
 };
+/* - VIN0 ------------------------------------------------------------------- */
+static const unsigned int vin0_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(2, 6),  RCAR_GP_PIN(2, 7),  RCAR_GP_PIN(2, 8),
+       RCAR_GP_PIN(2, 9),  RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 11),
+       RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13),
+};
+static const unsigned int vin0_data8_mux[] = {
+       VI0_DATA0_VI0_B0_MARK, VI0_DATA1_VI0_B1_MARK, VI0_DATA2_VI0_B2_MARK,
+       VI0_DATA3_VI0_B3_MARK, VI0_DATA4_VI0_B4_MARK, VI0_DATA5_VI0_B5_MARK,
+       VI0_DATA6_VI0_B6_MARK, VI0_DATA7_VI0_B7_MARK,
+};
+static const unsigned int vin0_clk_pins[] = {
+       /* CLK */
+       RCAR_GP_PIN(2, 1),
+};
+static const unsigned int vin0_clk_mux[] = {
+       VI0_CLK_MARK,
+};
+static const unsigned int vin0_sync_pins[] = {
+       /* HSYNC, VSYNC */
+       RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 5),
+};
+static const unsigned int vin0_sync_mux[] = {
+       VI0_HSYNC_MARK, VI0_VSYNC_MARK,
+};
+/* - VIN1 ------------------------------------------------------------------- */
+static const unsigned int vin1_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3),
+       RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 6),
+       RCAR_GP_PIN(3, 7), RCAR_GP_PIN(3, 8),
+};
+static const unsigned int vin1_data8_mux[] = {
+       VI1_DATA0_VI1_B0_MARK, VI1_DATA1_VI1_B1_MARK, VI1_DATA2_VI1_B2_MARK,
+       VI1_DATA3_VI1_B3_MARK, VI1_DATA4_VI1_B4_MARK, VI1_DATA5_VI1_B5_MARK,
+       VI1_DATA6_VI1_B6_MARK, VI1_DATA7_VI1_B7_MARK,
+};
+static const unsigned int vin1_clk_pins[] = {
+       /* CLK */
+       RCAR_GP_PIN(2, 30),
+};
+static const unsigned int vin1_clk_mux[] = {
+       VI1_CLK_MARK,
+};
+static const unsigned int vin1_sync_pins[] = {
+       /* HSYNC, VSYNC */
+       RCAR_GP_PIN(2, 31), RCAR_GP_PIN(3, 0),
+};
+static const unsigned int vin1_sync_mux[] = {
+       VI1_HSYNC_MARK, VI1_VSYNC_MARK,
+};
+/* - VIN2 ------------------------------------------------------------------- */
+static const unsigned int vin2_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(1, 2),  RCAR_GP_PIN(1, 3),  RCAR_GP_PIN(1, 10),
+       RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 19),
+       RCAR_GP_PIN(1, 31), RCAR_GP_PIN(2, 0),
+};
+static const unsigned int vin2_data8_mux[] = {
+       VI2_DATA0_VI2_B0_MARK, VI2_DATA1_VI2_B1_MARK, VI2_DATA2_VI2_B2_MARK,
+       VI2_DATA3_VI2_B3_MARK, VI2_DATA4_VI2_B4_MARK, VI2_DATA5_VI2_B5_MARK,
+       VI2_DATA6_VI2_B6_MARK, VI2_DATA7_VI2_B7_MARK,
+};
+static const unsigned int vin2_clk_pins[] = {
+       /* CLK */
+       RCAR_GP_PIN(1, 30),
+};
+static const unsigned int vin2_clk_mux[] = {
+       VI2_CLK_MARK,
+};
+static const unsigned int vin2_sync_pins[] = {
+       /* HSYNC, VSYNC */
+       RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 29),
+};
+static const unsigned int vin2_sync_mux[] = {
+       VI2_HSYNC_MARK, VI2_VSYNC_MARK,
+};
+/* - VIN3 ------------------------------------------------------------------- */
+static const unsigned int vin3_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(3, 9),  RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11),
+       RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14),
+       RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 16),
+};
+static const unsigned int vin3_data8_mux[] = {
+       VI3_DATA0_MARK, VI3_DATA1_MARK, VI3_DATA2_MARK,
+       VI3_DATA3_MARK, VI3_DATA4_MARK, VI3_DATA5_MARK,
+       VI3_DATA6_MARK, VI3_DATA7_MARK,
+};
+static const unsigned int vin3_clk_pins[] = {
+       /* CLK */
+       RCAR_GP_PIN(2, 31),
+};
+static const unsigned int vin3_clk_mux[] = {
+       VI3_CLK_MARK,
+};
+static const unsigned int vin3_sync_pins[] = {
+       /* HSYNC, VSYNC */
+       RCAR_GP_PIN(1, 28), RCAR_GP_PIN(1, 29),
+};
+static const unsigned int vin3_sync_mux[] = {
+       VI3_HSYNC_MARK, VI3_VSYNC_MARK,
+};
 
 static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(du0_rgb666),
@@ -2419,6 +2590,9 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(du1_sync_1),
        SH_PFC_PIN_GROUP(du1_oddf),
        SH_PFC_PIN_GROUP(du1_cde),
+       SH_PFC_PIN_GROUP(ether_rmii),
+       SH_PFC_PIN_GROUP(ether_link),
+       SH_PFC_PIN_GROUP(ether_magic),
        SH_PFC_PIN_GROUP(hspi0),
        SH_PFC_PIN_GROUP(hspi1),
        SH_PFC_PIN_GROUP(hspi1_b),
@@ -2527,6 +2701,18 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(usb1_ovc),
        SH_PFC_PIN_GROUP(usb2),
        SH_PFC_PIN_GROUP(usb2_ovc),
+       SH_PFC_PIN_GROUP(vin0_data8),
+       SH_PFC_PIN_GROUP(vin0_clk),
+       SH_PFC_PIN_GROUP(vin0_sync),
+       SH_PFC_PIN_GROUP(vin1_data8),
+       SH_PFC_PIN_GROUP(vin1_clk),
+       SH_PFC_PIN_GROUP(vin1_sync),
+       SH_PFC_PIN_GROUP(vin2_data8),
+       SH_PFC_PIN_GROUP(vin2_clk),
+       SH_PFC_PIN_GROUP(vin2_sync),
+       SH_PFC_PIN_GROUP(vin3_data8),
+       SH_PFC_PIN_GROUP(vin3_clk),
+       SH_PFC_PIN_GROUP(vin3_sync),
 };
 
 static const char * const du0_groups[] = {
@@ -2552,6 +2738,12 @@ static const char * const du1_groups[] = {
        "du1_cde",
 };
 
+static const char * const ether_groups[] = {
+       "ether_rmii",
+       "ether_link",
+       "ether_magic",
+};
+
 static const char * const hspi0_groups[] = {
        "hspi0",
 };
@@ -2720,9 +2912,34 @@ static const char * const usb2_groups[] = {
        "usb2_ovc",
 };
 
+static const char * const vin0_groups[] = {
+       "vin0_data8",
+       "vin0_clk",
+       "vin0_sync",
+};
+
+static const char * const vin1_groups[] = {
+       "vin1_data8",
+       "vin1_clk",
+       "vin1_sync",
+};
+
+static const char * const vin2_groups[] = {
+       "vin2_data8",
+       "vin2_clk",
+       "vin2_sync",
+};
+
+static const char * const vin3_groups[] = {
+       "vin3_data8",
+       "vin3_clk",
+       "vin3_sync",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(du0),
        SH_PFC_FUNCTION(du1),
+       SH_PFC_FUNCTION(ether),
        SH_PFC_FUNCTION(hspi0),
        SH_PFC_FUNCTION(hspi1),
        SH_PFC_FUNCTION(hspi2),
@@ -2743,6 +2960,10 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(usb0),
        SH_PFC_FUNCTION(usb1),
        SH_PFC_FUNCTION(usb2),
+       SH_PFC_FUNCTION(vin0),
+       SH_PFC_FUNCTION(vin1),
+       SH_PFC_FUNCTION(vin2),
+       SH_PFC_FUNCTION(vin3),
 };
 
 static const struct pinmux_cfg_reg pinmux_config_regs[] = {
@@ -3547,7 +3768,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
            /* SEL_SCIF [2] */
            FN_SEL_SCIF_0, FN_SEL_SCIF_1, FN_SEL_SCIF_2, FN_SEL_SCIF_3,
            /* SEL_CANCLK [2] */
-           FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2,
+           FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2, 0,
            /* SEL_CAN0 [1] */
            FN_SEL_CAN0_0, FN_SEL_CAN0_1,
            /* SEL_HSCIF1 [1] */
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7790.c b/drivers/pinctrl/sh-pfc/pfc-r8a7790.c
new file mode 100644 (file)
index 0000000..85d77a4
--- /dev/null
@@ -0,0 +1,3835 @@
+/*
+ * R8A7790 processor support
+ *
+ * Copyright (C) 2013  Renesas Electronics Corporation
+ * Copyright (C) 2013  Magnus Damm
+ * Copyright (C) 2012  Renesas Solutions Corp.
+ * Copyright (C) 2012  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <linux/kernel.h>
+#include <linux/platform_data/gpio-rcar.h>
+
+#include "core.h"
+#include "sh_pfc.h"
+
+#define PORT_GP_1(bank, pin, fn, sfx) fn(bank, pin, GP_##bank##_##pin, sfx)
+
+#define PORT_GP_32(bank, fn, sfx)                                      \
+       PORT_GP_1(bank, 0,  fn, sfx), PORT_GP_1(bank, 1,  fn, sfx),     \
+       PORT_GP_1(bank, 2,  fn, sfx), PORT_GP_1(bank, 3,  fn, sfx),     \
+       PORT_GP_1(bank, 4,  fn, sfx), PORT_GP_1(bank, 5,  fn, sfx),     \
+       PORT_GP_1(bank, 6,  fn, sfx), PORT_GP_1(bank, 7,  fn, sfx),     \
+       PORT_GP_1(bank, 8,  fn, sfx), PORT_GP_1(bank, 9,  fn, sfx),     \
+       PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx),     \
+       PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx),     \
+       PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx),     \
+       PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx),     \
+       PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx),     \
+       PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx),     \
+       PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx),     \
+       PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx),     \
+       PORT_GP_1(bank, 26, fn, sfx), PORT_GP_1(bank, 27, fn, sfx),     \
+       PORT_GP_1(bank, 28, fn, sfx), PORT_GP_1(bank, 29, fn, sfx),     \
+       PORT_GP_1(bank, 30, fn, sfx), PORT_GP_1(bank, 31, fn, sfx)
+
+#define PORT_GP_32_REV(bank, fn, sfx)                                  \
+       PORT_GP_1(bank, 31, fn, sfx), PORT_GP_1(bank, 30, fn, sfx),     \
+       PORT_GP_1(bank, 29, fn, sfx), PORT_GP_1(bank, 28, fn, sfx),     \
+       PORT_GP_1(bank, 27, fn, sfx), PORT_GP_1(bank, 26, fn, sfx),     \
+       PORT_GP_1(bank, 25, fn, sfx), PORT_GP_1(bank, 24, fn, sfx),     \
+       PORT_GP_1(bank, 23, fn, sfx), PORT_GP_1(bank, 22, fn, sfx),     \
+       PORT_GP_1(bank, 21, fn, sfx), PORT_GP_1(bank, 20, fn, sfx),     \
+       PORT_GP_1(bank, 19, fn, sfx), PORT_GP_1(bank, 18, fn, sfx),     \
+       PORT_GP_1(bank, 17, fn, sfx), PORT_GP_1(bank, 16, fn, sfx),     \
+       PORT_GP_1(bank, 15, fn, sfx), PORT_GP_1(bank, 14, fn, sfx),     \
+       PORT_GP_1(bank, 13, fn, sfx), PORT_GP_1(bank, 12, fn, sfx),     \
+       PORT_GP_1(bank, 11, fn, sfx), PORT_GP_1(bank, 10, fn, sfx),     \
+       PORT_GP_1(bank, 9,  fn, sfx), PORT_GP_1(bank, 8,  fn, sfx),     \
+       PORT_GP_1(bank, 7,  fn, sfx), PORT_GP_1(bank, 6,  fn, sfx),     \
+       PORT_GP_1(bank, 5,  fn, sfx), PORT_GP_1(bank, 4,  fn, sfx),     \
+       PORT_GP_1(bank, 3,  fn, sfx), PORT_GP_1(bank, 2,  fn, sfx),     \
+       PORT_GP_1(bank, 1,  fn, sfx), PORT_GP_1(bank, 0,  fn, sfx)
+
+#define CPU_ALL_PORT(fn, sfx)                                          \
+       PORT_GP_32(0, fn, sfx),                                         \
+       PORT_GP_32(1, fn, sfx),                                         \
+       PORT_GP_32(2, fn, sfx),                                         \
+       PORT_GP_32(3, fn, sfx),                                         \
+       PORT_GP_32(4, fn, sfx),                                         \
+       PORT_GP_32(5, fn, sfx)
+
+#define _GP_PORT_ALL(bank, pin, name, sfx)     name##_##sfx
+
+#define _GP_GPIO(bank, pin, _name, sfx)                                        \
+       [(bank * 32) + pin] = {                                         \
+               .name = __stringify(_name),                             \
+               .enum_id = _name##_DATA,                                \
+       }
+
+#define _GP_DATA(bank, pin, name, sfx)                                 \
+       PINMUX_DATA(name##_DATA, name##_FN)
+
+#define GP_ALL(str)            CPU_ALL_PORT(_GP_PORT_ALL, str)
+#define PINMUX_GPIO_GP_ALL()   CPU_ALL_PORT(_GP_GPIO, unused)
+#define PINMUX_DATA_GP_ALL()   CPU_ALL_PORT(_GP_DATA, unused)
+
+#define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##ipsr, FN_##fn)
+#define PINMUX_IPSR_MODSEL_DATA(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##ms, \
+                                                         FN_##ipsr, FN_##fn)
+
+enum {
+       PINMUX_RESERVED = 0,
+
+       PINMUX_DATA_BEGIN,
+       GP_ALL(DATA),
+       PINMUX_DATA_END,
+
+       PINMUX_FUNCTION_BEGIN,
+       GP_ALL(FN),
+
+       /* GPSR0 */
+       FN_IP0_2_0, FN_IP0_5_3, FN_IP0_8_6, FN_IP0_11_9, FN_IP0_15_12,
+       FN_IP0_19_16, FN_IP0_22_20, FN_IP0_26_23, FN_IP0_30_27,
+       FN_IP1_3_0, FN_IP1_7_4, FN_IP1_11_8, FN_IP1_14_12,
+       FN_IP1_17_15, FN_IP1_21_18, FN_IP1_25_22, FN_IP1_27_26,
+       FN_IP1_29_28, FN_IP2_2_0, FN_IP2_5_3, FN_IP2_8_6, FN_IP2_11_9,
+       FN_IP2_14_12, FN_IP2_17_15, FN_IP2_21_18, FN_IP2_25_22,
+       FN_IP2_28_26, FN_IP3_3_0, FN_IP3_7_4, FN_IP3_11_8,
+       FN_IP3_14_12, FN_IP3_17_15,
+
+       /* GPSR1 */
+       FN_IP3_19_18, FN_IP3_22_20, FN_IP3_25_23, FN_IP3_28_26,
+       FN_IP3_31_29, FN_IP4_2_0, FN_IP4_5_3, FN_IP4_8_6, FN_IP4_11_9,
+       FN_IP4_14_12, FN_IP4_17_15, FN_IP4_20_18, FN_IP4_23_21,
+       FN_IP4_26_24, FN_IP4_29_27, FN_IP5_2_0, FN_IP5_5_3, FN_IP5_9_6,
+       FN_IP5_12_10, FN_IP5_14_13, FN_IP5_17_15, FN_IP5_20_18,
+       FN_IP5_23_21, FN_IP5_26_24, FN_IP5_29_27, FN_IP6_2_0,
+       FN_IP6_5_3, FN_IP6_8_6, FN_IP6_10_9, FN_IP6_13_11,
+
+       /* GPSR2 */
+       FN_IP7_28_27, FN_IP7_30_29, FN_IP8_1_0, FN_IP8_3_2, FN_IP8_5_4,
+       FN_IP8_7_6, FN_IP8_9_8, FN_IP8_11_10, FN_IP8_13_12, FN_IP8_15_14,
+       FN_IP8_17_16, FN_IP8_19_18, FN_IP8_21_20, FN_IP8_23_22,
+       FN_IP8_25_24, FN_IP8_26, FN_IP8_27, FN_VI1_DATA7_VI1_B7,
+       FN_IP6_16_14, FN_IP6_19_17, FN_IP6_22_20, FN_IP6_25_23,
+       FN_IP6_28_26, FN_IP6_31_29, FN_IP7_2_0, FN_IP7_5_3, FN_IP7_7_6,
+       FN_IP7_9_8, FN_IP7_12_10, FN_IP7_15_13,
+
+       /* GPSR3 */
+       FN_IP8_28, FN_IP8_30_29, FN_IP9_1_0, FN_IP9_3_2, FN_IP9_5_4,
+       FN_IP9_7_6, FN_IP9_11_8, FN_IP9_15_12, FN_IP9_17_16, FN_IP9_19_18,
+       FN_IP9_21_20, FN_IP9_23_22, FN_IP9_25_24, FN_IP9_27_26,
+       FN_IP9_31_28, FN_IP10_3_0, FN_IP10_6_4, FN_IP10_10_7, FN_IP10_14_11,
+       FN_IP10_18_15, FN_IP10_22_19, FN_IP10_25_23, FN_IP10_29_26,
+       FN_IP11_3_0, FN_IP11_4, FN_IP11_6_5, FN_IP11_8_7, FN_IP11_10_9,
+       FN_IP11_12_11, FN_IP11_14_13, FN_IP11_17_15, FN_IP11_21_18,
+
+       /* GPSR4 */
+       FN_IP11_23_22, FN_IP11_26_24, FN_IP11_29_27, FN_IP11_31_30,
+       FN_IP12_1_0, FN_IP12_3_2, FN_IP12_5_4, FN_IP12_7_6, FN_IP12_10_8,
+       FN_IP12_13_11, FN_IP12_16_14, FN_IP12_19_17, FN_IP12_22_20,
+       FN_IP12_24_23, FN_IP12_27_25, FN_IP12_30_28, FN_IP13_2_0,
+       FN_IP13_6_3, FN_IP13_9_7, FN_IP13_12_10, FN_IP13_15_13,
+       FN_IP13_18_16, FN_IP13_22_19, FN_IP13_25_23, FN_IP13_28_26,
+       FN_IP13_30_29, FN_IP14_2_0, FN_IP14_5_3, FN_IP14_8_6, FN_IP14_11_9,
+       FN_IP14_15_12, FN_IP14_18_16,
+
+       /* GPSR5 */
+       FN_IP14_21_19, FN_IP14_24_22, FN_IP14_27_25, FN_IP14_30_28,
+       FN_IP15_2_0, FN_IP15_5_3, FN_IP15_8_6, FN_IP15_11_9, FN_IP15_13_12,
+       FN_IP15_15_14, FN_IP15_17_16, FN_IP15_19_18, FN_IP15_22_20,
+       FN_IP15_25_23, FN_IP15_27_26, FN_IP15_29_28, FN_IP16_2_0,
+       FN_IP16_5_3, FN_USB0_PWEN, FN_USB0_OVC_VBUS, FN_IP16_6, FN_IP16_7,
+       FN_USB2_PWEN, FN_USB2_OVC, FN_AVS1, FN_AVS2, FN_DU_DOTCLKIN0,
+       FN_IP7_26_25, FN_DU_DOTCLKIN2, FN_IP7_18_16, FN_IP7_21_19, FN_IP7_24_22,
+
+       /* IPSR0 */
+       FN_D0, FN_MSIOF3_SCK_B, FN_VI3_DATA0, FN_VI0_G4, FN_VI0_G4_B,
+       FN_D1, FN_MSIOF3_SYNC_B, FN_VI3_DATA1, FN_VI0_G5,
+       FN_VI0_G5_B, FN_D2, FN_MSIOF3_RXD_B, FN_VI3_DATA2,
+       FN_VI0_G6, FN_VI0_G6_B, FN_D3, FN_MSIOF3_TXD_B,
+       FN_VI3_DATA3, FN_VI0_G7, FN_VI0_G7_B, FN_D4,
+       FN_SCIFB1_RXD_F, FN_SCIFB0_RXD_C, FN_VI3_DATA4,
+       FN_VI0_R0, FN_VI0_R0_B, FN_RX0_B, FN_D5,
+       FN_SCIFB1_TXD_F, FN_SCIFB0_TXD_C, FN_VI3_DATA5,
+       FN_VI0_R1, FN_VI0_R1_B, FN_TX0_B, FN_D6,
+       FN_SCL2_C, FN_VI3_DATA6, FN_VI0_R2, FN_VI0_R2_B,
+       FN_SCL2_CIS_C, FN_D7, FN_AD_DI_B, FN_SDA2_C,
+       FN_VI3_DATA7, FN_VI0_R3, FN_VI0_R3_B, FN_SDA2_CIS_C,
+       FN_D8, FN_SCIFA1_SCK_C, FN_AVB_TXD0, FN_MII_TXD0,
+       FN_VI0_G0, FN_VI0_G0_B, FN_VI2_DATA0_VI2_B0,
+
+       /* IPSR1 */
+       FN_D9, FN_SCIFA1_RXD_C, FN_AVB_TXD1, FN_MII_TXD1,
+       FN_VI0_G1, FN_VI0_G1_B, FN_VI2_DATA1_VI2_B1, FN_D10,
+       FN_SCIFA1_TXD_C, FN_AVB_TXD2, FN_MII_TXD2,
+       FN_VI0_G2, FN_VI0_G2_B, FN_VI2_DATA2_VI2_B2, FN_D11,
+       FN_SCIFA1_CTS_N_C, FN_AVB_TXD3, FN_MII_TXD3,
+       FN_VI0_G3, FN_VI0_G3_B, FN_VI2_DATA3_VI2_B3,
+       FN_D12, FN_SCIFA1_RTS_N_C, FN_AVB_TXD4,
+       FN_VI0_HSYNC_N, FN_VI0_HSYNC_N_B, FN_VI2_DATA4_VI2_B4,
+       FN_D13, FN_AVB_TXD5, FN_VI0_VSYNC_N,
+       FN_VI0_VSYNC_N_B, FN_VI2_DATA5_VI2_B5, FN_D14,
+       FN_SCIFB1_RXD_C, FN_AVB_TXD6, FN_RX1_B,
+       FN_VI0_CLKENB, FN_VI0_CLKENB_B, FN_VI2_DATA6_VI2_B6,
+       FN_D15, FN_SCIFB1_TXD_C, FN_AVB_TXD7, FN_TX1_B,
+       FN_VI0_FIELD, FN_VI0_FIELD_B, FN_VI2_DATA7_VI2_B7,
+       FN_A0, FN_PWM3, FN_A1, FN_PWM4,
+
+       /* IPSR2 */
+       FN_A2, FN_PWM5, FN_MSIOF1_SS1_B, FN_A3,
+       FN_PWM6, FN_MSIOF1_SS2_B, FN_A4, FN_MSIOF1_TXD_B,
+       FN_TPU0TO0, FN_A5, FN_SCIFA1_TXD_B, FN_TPU0TO1,
+       FN_A6, FN_SCIFA1_RTS_N_B, FN_TPU0TO2, FN_A7,
+       FN_SCIFA1_SCK_B, FN_AUDIO_CLKOUT_B, FN_TPU0TO3,
+       FN_A8, FN_SCIFA1_RXD_B, FN_SSI_SCK5_B, FN_VI0_R4,
+       FN_VI0_R4_B, FN_SCIFB2_RXD_C, FN_VI2_DATA0_VI2_B0_B,
+       FN_A9, FN_SCIFA1_CTS_N_B, FN_SSI_WS5_B, FN_VI0_R5,
+       FN_VI0_R5_B, FN_SCIFB2_TXD_C, FN_VI2_DATA1_VI2_B1_B,
+       FN_A10, FN_SSI_SDATA5_B, FN_MSIOF2_SYNC, FN_VI0_R6,
+       FN_VI0_R6_B, FN_VI2_DATA2_VI2_B2_B,
+
+       /* IPSR3 */
+       FN_A11, FN_SCIFB2_CTS_N_B, FN_MSIOF2_SCK, FN_VI1_R0,
+       FN_VI1_R0_B, FN_VI2_G0, FN_VI2_DATA3_VI2_B3_B,
+       FN_A12, FN_SCIFB2_RXD_B, FN_MSIOF2_TXD, FN_VI1_R1,
+       FN_VI1_R1_B, FN_VI2_G1, FN_VI2_DATA4_VI2_B4_B,
+       FN_A13, FN_SCIFB2_RTS_N_B, FN_EX_WAIT2,
+       FN_MSIOF2_RXD, FN_VI1_R2, FN_VI1_R2_B, FN_VI2_G2,
+       FN_VI2_DATA5_VI2_B5_B, FN_A14, FN_SCIFB2_TXD_B,
+       FN_ATACS11_N, FN_MSIOF2_SS1, FN_A15, FN_SCIFB2_SCK_B,
+       FN_ATARD1_N, FN_MSIOF2_SS2, FN_A16, FN_ATAWR1_N,
+       FN_A17, FN_AD_DO_B, FN_ATADIR1_N, FN_A18,
+       FN_AD_CLK_B, FN_ATAG1_N, FN_A19, FN_AD_NCS_N_B,
+       FN_ATACS01_N, FN_EX_WAIT0_B, FN_A20, FN_SPCLK,
+       FN_VI1_R3, FN_VI1_R3_B, FN_VI2_G4,
+
+       /* IPSR4 */
+       FN_A21, FN_MOSI_IO0, FN_VI1_R4, FN_VI1_R4_B, FN_VI2_G5,
+       FN_A22, FN_MISO_IO1, FN_VI1_R5, FN_VI1_R5_B,
+       FN_VI2_G6, FN_A23, FN_IO2, FN_VI1_G7,
+       FN_VI1_G7_B, FN_VI2_G7, FN_A24, FN_IO3,
+       FN_VI1_R7, FN_VI1_R7_B, FN_VI2_CLKENB,
+       FN_VI2_CLKENB_B, FN_A25, FN_SSL, FN_VI1_G6,
+       FN_VI1_G6_B, FN_VI2_FIELD, FN_VI2_FIELD_B, FN_CS0_N,
+       FN_VI1_R6, FN_VI1_R6_B, FN_VI2_G3, FN_MSIOF0_SS2_B,
+       FN_CS1_N_A26, FN_SPEEDIN, FN_VI0_R7, FN_VI0_R7_B,
+       FN_VI2_CLK, FN_VI2_CLK_B, FN_EX_CS0_N, FN_HRX1_B,
+       FN_VI1_G5, FN_VI1_G5_B, FN_VI2_R0, FN_HTX0_B,
+       FN_MSIOF0_SS1_B, FN_EX_CS1_N, FN_GPS_CLK,
+       FN_HCTS1_N_B, FN_VI1_FIELD, FN_VI1_FIELD_B,
+       FN_VI2_R1, FN_EX_CS2_N, FN_GPS_SIGN, FN_HRTS1_N_B,
+       FN_VI3_CLKENB, FN_VI1_G0, FN_VI1_G0_B, FN_VI2_R2,
+
+       /* IPSR5 */
+       FN_EX_CS3_N, FN_GPS_MAG, FN_VI3_FIELD, FN_VI1_G1, FN_VI1_G1_B,
+       FN_VI2_R3, FN_EX_CS4_N, FN_MSIOF1_SCK_B, FN_VI3_HSYNC_N,
+       FN_VI2_HSYNC_N, FN_SCL1, FN_VI2_HSYNC_N_B,
+       FN_INTC_EN0_N, FN_SCL1_CIS, FN_EX_CS5_N, FN_CAN0_RX,
+       FN_MSIOF1_RXD_B, FN_VI3_VSYNC_N, FN_VI1_G2,
+       FN_VI1_G2_B, FN_VI2_R4, FN_SDA1, FN_INTC_EN1_N,
+       FN_SDA1_CIS, FN_BS_N, FN_IETX, FN_HTX1_B,
+       FN_CAN1_TX, FN_DRACK0, FN_IETX_C, FN_RD_N,
+       FN_CAN0_TX, FN_SCIFA0_SCK_B, FN_RD_WR_N, FN_VI1_G3,
+       FN_VI1_G3_B, FN_VI2_R5, FN_SCIFA0_RXD_B,
+       FN_INTC_IRQ4_N, FN_WE0_N, FN_IECLK, FN_CAN_CLK,
+       FN_VI2_VSYNC_N, FN_SCIFA0_TXD_B, FN_VI2_VSYNC_N_B,
+       FN_WE1_N, FN_IERX, FN_CAN1_RX, FN_VI1_G4,
+       FN_VI1_G4_B, FN_VI2_R6, FN_SCIFA0_CTS_N_B,
+       FN_IERX_C, FN_EX_WAIT0, FN_IRQ3, FN_INTC_IRQ3_N,
+       FN_VI3_CLK, FN_SCIFA0_RTS_N_B, FN_HRX0_B,
+       FN_MSIOF0_SCK_B, FN_DREQ0_N, FN_VI1_HSYNC_N,
+       FN_VI1_HSYNC_N_B, FN_VI2_R7, FN_SSI_SCK78_C,
+       FN_SSI_WS78_B,
+
+       /* IPSR6 */
+       FN_DACK0, FN_IRQ0, FN_INTC_IRQ0_N, FN_SSI_SCK6_B,
+       FN_VI1_VSYNC_N, FN_VI1_VSYNC_N_B, FN_SSI_WS78_C,
+       FN_DREQ1_N, FN_VI1_CLKENB, FN_VI1_CLKENB_B,
+       FN_SSI_SDATA7_C, FN_SSI_SCK78_B, FN_DACK1, FN_IRQ1,
+       FN_INTC_IRQ1_N, FN_SSI_WS6_B, FN_SSI_SDATA8_C,
+       FN_DREQ2_N, FN_HSCK1_B, FN_HCTS0_N_B,
+       FN_MSIOF0_TXD_B, FN_DACK2, FN_IRQ2, FN_INTC_IRQ2_N,
+       FN_SSI_SDATA6_B, FN_HRTS0_N_B, FN_MSIOF0_RXD_B,
+       FN_ETH_CRS_DV, FN_RMII_CRS_DV, FN_STP_ISCLK_0_B,
+       FN_TS_SDEN0_D, FN_GLO_Q0_C, FN_SCL2_E,
+       FN_SCL2_CIS_E, FN_ETH_RX_ER, FN_RMII_RX_ER,
+       FN_STP_ISD_0_B, FN_TS_SPSYNC0_D, FN_GLO_Q1_C,
+       FN_SDA2_E, FN_SDA2_CIS_E, FN_ETH_RXD0, FN_RMII_RXD0,
+       FN_STP_ISEN_0_B, FN_TS_SDAT0_D, FN_GLO_I0_C,
+       FN_SCIFB1_SCK_G, FN_SCK1_E, FN_ETH_RXD1,
+       FN_RMII_RXD1, FN_HRX0_E, FN_STP_ISSYNC_0_B,
+       FN_TS_SCK0_D, FN_GLO_I1_C, FN_SCIFB1_RXD_G,
+       FN_RX1_E, FN_ETH_LINK, FN_RMII_LINK, FN_HTX0_E,
+       FN_STP_IVCXO27_0_B, FN_SCIFB1_TXD_G, FN_TX1_E,
+       FN_ETH_REF_CLK, FN_RMII_REF_CLK, FN_HCTS0_N_E,
+       FN_STP_IVCXO27_1_B, FN_HRX0_F,
+
+       /* IPSR7 */
+       FN_ETH_MDIO, FN_RMII_MDIO, FN_HRTS0_N_E,
+       FN_SIM0_D_C, FN_HCTS0_N_F, FN_ETH_TXD1,
+       FN_RMII_TXD1, FN_HTX0_F, FN_BPFCLK_G, FN_RDS_CLK_F,
+       FN_ETH_TX_EN, FN_RMII_TX_EN, FN_SIM0_CLK_C,
+       FN_HRTS0_N_F, FN_ETH_MAGIC, FN_RMII_MAGIC,
+       FN_SIM0_RST_C, FN_ETH_TXD0, FN_RMII_TXD0,
+       FN_STP_ISCLK_1_B, FN_TS_SDEN1_C, FN_GLO_SCLK_C,
+       FN_ETH_MDC, FN_RMII_MDC, FN_STP_ISD_1_B,
+       FN_TS_SPSYNC1_C, FN_GLO_SDATA_C, FN_PWM0,
+       FN_SCIFA2_SCK_C, FN_STP_ISEN_1_B, FN_TS_SDAT1_C,
+       FN_GLO_SS_C, FN_PWM1, FN_SCIFA2_TXD_C,
+       FN_STP_ISSYNC_1_B, FN_TS_SCK1_C, FN_GLO_RFON_C,
+       FN_PCMOE_N, FN_PWM2, FN_PWMFSW0, FN_SCIFA2_RXD_C,
+       FN_PCMWE_N, FN_IECLK_C, FN_DU1_DOTCLKIN,
+       FN_AUDIO_CLKC, FN_AUDIO_CLKOUT_C, FN_VI0_CLK,
+       FN_ATACS00_N, FN_AVB_RXD1, FN_MII_RXD1,
+       FN_VI0_DATA0_VI0_B0, FN_ATACS10_N, FN_AVB_RXD2,
+       FN_MII_RXD2,
+
+       /* IPSR8 */
+       FN_VI0_DATA1_VI0_B1, FN_ATARD0_N, FN_AVB_RXD3,
+       FN_MII_RXD3, FN_VI0_DATA2_VI0_B2, FN_ATAWR0_N,
+       FN_AVB_RXD4, FN_VI0_DATA3_VI0_B3, FN_ATADIR0_N,
+       FN_AVB_RXD5, FN_VI0_DATA4_VI0_B4, FN_ATAG0_N,
+       FN_AVB_RXD6, FN_VI0_DATA5_VI0_B5, FN_EX_WAIT1,
+       FN_AVB_RXD7, FN_VI0_DATA6_VI0_B6, FN_AVB_RX_ER,
+       FN_MII_RX_ER, FN_VI0_DATA7_VI0_B7, FN_AVB_RX_CLK,
+       FN_MII_RX_CLK, FN_VI1_CLK, FN_AVB_RX_DV,
+       FN_MII_RX_DV, FN_VI1_DATA0_VI1_B0, FN_SCIFA1_SCK_D,
+       FN_AVB_CRS, FN_MII_CRS, FN_VI1_DATA1_VI1_B1,
+       FN_SCIFA1_RXD_D, FN_AVB_MDC, FN_MII_MDC,
+       FN_VI1_DATA2_VI1_B2, FN_SCIFA1_TXD_D, FN_AVB_MDIO,
+       FN_MII_MDIO, FN_VI1_DATA3_VI1_B3, FN_SCIFA1_CTS_N_D,
+       FN_AVB_GTX_CLK, FN_VI1_DATA4_VI1_B4, FN_SCIFA1_RTS_N_D,
+       FN_AVB_MAGIC, FN_MII_MAGIC, FN_VI1_DATA5_VI1_B5,
+       FN_AVB_PHY_INT, FN_VI1_DATA6_VI1_B6, FN_AVB_GTXREFCLK,
+       FN_SD0_CLK, FN_VI1_DATA0_VI1_B0_B, FN_SD0_CMD,
+       FN_SCIFB1_SCK_B, FN_VI1_DATA1_VI1_B1_B,
+
+       /* IPSR9 */
+       FN_SD0_DAT0, FN_SCIFB1_RXD_B, FN_VI1_DATA2_VI1_B2_B,
+       FN_SD0_DAT1, FN_SCIFB1_TXD_B, FN_VI1_DATA3_VI1_B3_B,
+       FN_SD0_DAT2, FN_SCIFB1_CTS_N_B, FN_VI1_DATA4_VI1_B4_B,
+       FN_SD0_DAT3, FN_SCIFB1_RTS_N_B, FN_VI1_DATA5_VI1_B5_B,
+       FN_SD0_CD, FN_MMC0_D6, FN_TS_SDEN0_B, FN_USB0_EXTP,
+       FN_GLO_SCLK, FN_VI1_DATA6_VI1_B6_B, FN_SCL1_B,
+       FN_SCL1_CIS_B, FN_VI2_DATA6_VI2_B6_B, FN_SD0_WP,
+       FN_MMC0_D7, FN_TS_SPSYNC0_B, FN_USB0_IDIN,
+       FN_GLO_SDATA, FN_VI1_DATA7_VI1_B7_B, FN_SDA1_B,
+       FN_SDA1_CIS_B, FN_VI2_DATA7_VI2_B7_B, FN_SD1_CLK,
+       FN_AVB_TX_EN, FN_MII_TX_EN, FN_SD1_CMD,
+       FN_AVB_TX_ER, FN_MII_TX_ER, FN_SCIFB0_SCK_B,
+       FN_SD1_DAT0, FN_AVB_TX_CLK, FN_MII_TX_CLK,
+       FN_SCIFB0_RXD_B, FN_SD1_DAT1, FN_AVB_LINK,
+       FN_MII_LINK, FN_SCIFB0_TXD_B, FN_SD1_DAT2,
+       FN_AVB_COL, FN_MII_COL, FN_SCIFB0_CTS_N_B,
+       FN_SD1_DAT3, FN_AVB_RXD0, FN_MII_RXD0,
+       FN_SCIFB0_RTS_N_B, FN_SD1_CD, FN_MMC1_D6,
+       FN_TS_SDEN1, FN_USB1_EXTP, FN_GLO_SS, FN_VI0_CLK_B,
+       FN_SCL2_D, FN_SCL2_CIS_D, FN_SIM0_CLK_B,
+       FN_VI3_CLK_B,
+
+       /* IPSR10 */
+       FN_SD1_WP, FN_MMC1_D7, FN_TS_SPSYNC1, FN_USB1_IDIN,
+       FN_GLO_RFON, FN_VI1_CLK_B, FN_SDA2_D, FN_SDA2_CIS_D,
+       FN_SIM0_D_B, FN_SD2_CLK, FN_MMC0_CLK, FN_SIM0_CLK,
+       FN_VI0_DATA0_VI0_B0_B, FN_TS_SDEN0_C, FN_GLO_SCLK_B,
+       FN_VI3_DATA0_B, FN_SD2_CMD, FN_MMC0_CMD, FN_SIM0_D,
+       FN_VI0_DATA1_VI0_B1_B, FN_SCIFB1_SCK_E, FN_SCK1_D,
+       FN_TS_SPSYNC0_C, FN_GLO_SDATA_B, FN_VI3_DATA1_B,
+       FN_SD2_DAT0, FN_MMC0_D0, FN_FMCLK_B,
+       FN_VI0_DATA2_VI0_B2_B, FN_SCIFB1_RXD_E, FN_RX1_D,
+       FN_TS_SDAT0_C, FN_GLO_SS_B, FN_VI3_DATA2_B,
+       FN_SD2_DAT1, FN_MMC0_D1, FN_FMIN_B, FN_RDS_DATA,
+       FN_VI0_DATA3_VI0_B3_B, FN_SCIFB1_TXD_E, FN_TX1_D,
+       FN_TS_SCK0_C, FN_GLO_RFON_B, FN_VI3_DATA3_B,
+       FN_SD2_DAT2, FN_MMC0_D2, FN_BPFCLK_B, FN_RDS_CLK,
+       FN_VI0_DATA4_VI0_B4_B, FN_HRX0_D, FN_TS_SDEN1_B,
+       FN_GLO_Q0_B, FN_VI3_DATA4_B, FN_SD2_DAT3,
+       FN_MMC0_D3, FN_SIM0_RST, FN_VI0_DATA5_VI0_B5_B,
+       FN_HTX0_D, FN_TS_SPSYNC1_B, FN_GLO_Q1_B,
+       FN_VI3_DATA5_B, FN_SD2_CD, FN_MMC0_D4,
+       FN_TS_SDAT0_B, FN_USB2_EXTP, FN_GLO_I0,
+       FN_VI0_DATA6_VI0_B6_B, FN_HCTS0_N_D, FN_TS_SDAT1_B,
+       FN_GLO_I0_B, FN_VI3_DATA6_B,
+
+       /* IPSR11 */
+       FN_SD2_WP, FN_MMC0_D5, FN_TS_SCK0_B, FN_USB2_IDIN,
+       FN_GLO_I1, FN_VI0_DATA7_VI0_B7_B, FN_HRTS0_N_D,
+       FN_TS_SCK1_B, FN_GLO_I1_B, FN_VI3_DATA7_B,
+       FN_SD3_CLK, FN_MMC1_CLK, FN_SD3_CMD, FN_MMC1_CMD,
+       FN_MTS_N, FN_SD3_DAT0, FN_MMC1_D0, FN_STM_N,
+       FN_SD3_DAT1, FN_MMC1_D1, FN_MDATA, FN_SD3_DAT2,
+       FN_MMC1_D2, FN_SDATA, FN_SD3_DAT3, FN_MMC1_D3,
+       FN_SCKZ, FN_SD3_CD, FN_MMC1_D4, FN_TS_SDAT1,
+       FN_VSP, FN_GLO_Q0, FN_SIM0_RST_B, FN_SD3_WP,
+       FN_MMC1_D5, FN_TS_SCK1, FN_GLO_Q1, FN_FMIN_C,
+       FN_RDS_DATA_B, FN_FMIN_E, FN_RDS_DATA_D, FN_FMIN_F,
+       FN_RDS_DATA_E, FN_MLB_CLK, FN_SCL2_B, FN_SCL2_CIS_B,
+       FN_MLB_SIG, FN_SCIFB1_RXD_D, FN_RX1_C, FN_SDA2_B,
+       FN_SDA2_CIS_B, FN_MLB_DAT, FN_SPV_EVEN,
+       FN_SCIFB1_TXD_D, FN_TX1_C, FN_BPFCLK_C,
+       FN_RDS_CLK_B, FN_SSI_SCK0129, FN_CAN_CLK_B,
+       FN_MOUT0,
+
+       /* IPSR12 */
+       FN_SSI_WS0129, FN_CAN0_TX_B, FN_MOUT1,
+       FN_SSI_SDATA0, FN_CAN0_RX_B, FN_MOUT2,
+       FN_SSI_SDATA1, FN_CAN1_TX_B, FN_MOUT5,
+       FN_SSI_SDATA2, FN_CAN1_RX_B, FN_SSI_SCK1, FN_MOUT6,
+       FN_SSI_SCK34, FN_STP_OPWM_0, FN_SCIFB0_SCK,
+       FN_MSIOF1_SCK, FN_CAN_DEBUG_HW_TRIGGER, FN_SSI_WS34,
+       FN_STP_IVCXO27_0, FN_SCIFB0_RXD, FN_MSIOF1_SYNC,
+       FN_CAN_STEP0, FN_SSI_SDATA3, FN_STP_ISCLK_0,
+       FN_SCIFB0_TXD, FN_MSIOF1_SS1, FN_CAN_TXCLK,
+       FN_SSI_SCK4, FN_STP_ISD_0, FN_SCIFB0_CTS_N,
+       FN_MSIOF1_SS2, FN_SSI_SCK5_C, FN_CAN_DEBUGOUT0,
+       FN_SSI_WS4, FN_STP_ISEN_0, FN_SCIFB0_RTS_N,
+       FN_MSIOF1_TXD, FN_SSI_WS5_C, FN_CAN_DEBUGOUT1,
+       FN_SSI_SDATA4, FN_STP_ISSYNC_0, FN_MSIOF1_RXD,
+       FN_CAN_DEBUGOUT2, FN_SSI_SCK5, FN_SCIFB1_SCK,
+       FN_IERX_B, FN_DU2_EXHSYNC_DU2_HSYNC, FN_QSTH_QHS,
+       FN_CAN_DEBUGOUT3, FN_SSI_WS5, FN_SCIFB1_RXD,
+       FN_IECLK_B, FN_DU2_EXVSYNC_DU2_VSYNC, FN_QSTB_QHE,
+       FN_CAN_DEBUGOUT4,
+
+       /* IPSR13 */
+       FN_SSI_SDATA5, FN_SCIFB1_TXD, FN_IETX_B, FN_DU2_DR2,
+       FN_LCDOUT2, FN_CAN_DEBUGOUT5, FN_SSI_SCK6,
+       FN_SCIFB1_CTS_N, FN_BPFCLK_D, FN_RDS_CLK_C,
+       FN_DU2_DR3, FN_LCDOUT3, FN_CAN_DEBUGOUT6,
+       FN_BPFCLK_F, FN_RDS_CLK_E, FN_SSI_WS6,
+       FN_SCIFB1_RTS_N, FN_CAN0_TX_D, FN_DU2_DR4,
+       FN_LCDOUT4, FN_CAN_DEBUGOUT7, FN_SSI_SDATA6,
+       FN_FMIN_D, FN_RDS_DATA_C, FN_DU2_DR5, FN_LCDOUT5,
+       FN_CAN_DEBUGOUT8, FN_SSI_SCK78, FN_STP_IVCXO27_1,
+       FN_SCK1, FN_SCIFA1_SCK, FN_DU2_DR6, FN_LCDOUT6,
+       FN_CAN_DEBUGOUT9, FN_SSI_WS78, FN_STP_ISCLK_1,
+       FN_SCIFB2_SCK, FN_SCIFA2_CTS_N, FN_DU2_DR7,
+       FN_LCDOUT7, FN_CAN_DEBUGOUT10, FN_SSI_SDATA7,
+       FN_STP_ISD_1, FN_SCIFB2_RXD, FN_SCIFA2_RTS_N,
+       FN_TCLK2, FN_QSTVA_QVS, FN_CAN_DEBUGOUT11,
+       FN_BPFCLK_E, FN_RDS_CLK_D, FN_SSI_SDATA7_B,
+       FN_FMIN_G, FN_RDS_DATA_F, FN_SSI_SDATA8,
+       FN_STP_ISEN_1, FN_SCIFB2_TXD, FN_CAN0_TX_C,
+       FN_CAN_DEBUGOUT12, FN_SSI_SDATA8_B, FN_SSI_SDATA9,
+       FN_STP_ISSYNC_1, FN_SCIFB2_CTS_N, FN_SSI_WS1,
+       FN_SSI_SDATA5_C, FN_CAN_DEBUGOUT13, FN_AUDIO_CLKA,
+       FN_SCIFB2_RTS_N, FN_CAN_DEBUGOUT14,
+
+       /* IPSR14 */
+       FN_AUDIO_CLKB, FN_SCIF_CLK, FN_CAN0_RX_D,
+       FN_DVC_MUTE, FN_CAN0_RX_C, FN_CAN_DEBUGOUT15,
+       FN_REMOCON, FN_SCIFA0_SCK, FN_HSCK1, FN_SCK0,
+       FN_MSIOF3_SS2, FN_DU2_DG2, FN_LCDOUT10, FN_SDA1_C,
+       FN_SDA1_CIS_C, FN_SCIFA0_RXD, FN_HRX1, FN_RX0,
+       FN_DU2_DR0, FN_LCDOUT0, FN_SCIFA0_TXD, FN_HTX1,
+       FN_TX0, FN_DU2_DR1, FN_LCDOUT1, FN_SCIFA0_CTS_N,
+       FN_HCTS1_N, FN_CTS0_N, FN_MSIOF3_SYNC, FN_DU2_DG3,
+       FN_LCDOUT11, FN_PWM0_B, FN_SCL1_C, FN_SCL1_CIS_C,
+       FN_SCIFA0_RTS_N, FN_HRTS1_N, FN_RTS0_N_TANS,
+       FN_MSIOF3_SS1, FN_DU2_DG0, FN_LCDOUT8, FN_PWM1_B,
+       FN_SCIFA1_RXD, FN_AD_DI, FN_RX1,
+       FN_DU2_EXODDF_DU2_ODDF_DISP_CDE, FN_QCPV_QDE,
+       FN_SCIFA1_TXD, FN_AD_DO, FN_TX1, FN_DU2_DG1,
+       FN_LCDOUT9, FN_SCIFA1_CTS_N, FN_AD_CLK,
+       FN_CTS1_N, FN_MSIOF3_RXD, FN_DU0_DOTCLKOUT, FN_QCLK,
+       FN_SCIFA1_RTS_N, FN_AD_NCS_N, FN_RTS1_N_TANS,
+       FN_MSIOF3_TXD, FN_DU1_DOTCLKOUT, FN_QSTVB_QVE,
+       FN_HRTS0_N_C,
+
+       /* IPSR15 */
+       FN_SCIFA2_SCK, FN_FMCLK, FN_MSIOF3_SCK, FN_DU2_DG7,
+       FN_LCDOUT15, FN_SCIF_CLK_B, FN_SCIFA2_RXD, FN_FMIN,
+       FN_DU2_DB0, FN_LCDOUT16, FN_SCL2, FN_SCL2_CIS,
+       FN_SCIFA2_TXD, FN_BPFCLK, FN_DU2_DB1, FN_LCDOUT17,
+       FN_SDA2, FN_SDA2_CIS, FN_HSCK0, FN_TS_SDEN0,
+       FN_DU2_DG4, FN_LCDOUT12, FN_HCTS0_N_C, FN_HRX0,
+       FN_DU2_DB2, FN_LCDOUT18, FN_HTX0, FN_DU2_DB3,
+       FN_LCDOUT19, FN_HCTS0_N, FN_SSI_SCK9, FN_DU2_DB4,
+       FN_LCDOUT20, FN_HRTS0_N, FN_SSI_WS9, FN_DU2_DB5,
+       FN_LCDOUT21, FN_MSIOF0_SCK, FN_TS_SDAT0, FN_ADICLK,
+       FN_DU2_DB6, FN_LCDOUT22, FN_MSIOF0_SYNC, FN_TS_SCK0,
+       FN_SSI_SCK2, FN_ADIDATA, FN_DU2_DB7, FN_LCDOUT23,
+       FN_SCIFA2_RXD_B, FN_MSIOF0_SS1, FN_ADICHS0,
+       FN_DU2_DG5, FN_LCDOUT13, FN_MSIOF0_TXD, FN_ADICHS1,
+       FN_DU2_DG6, FN_LCDOUT14,
+
+       /* IPSR16 */
+       FN_MSIOF0_SS2, FN_AUDIO_CLKOUT, FN_ADICHS2,
+       FN_DU2_DISP, FN_QPOLA, FN_HTX0_C, FN_SCIFA2_TXD_B,
+       FN_MSIOF0_RXD, FN_TS_SPSYNC0, FN_SSI_WS2,
+       FN_ADICS_SAMP, FN_DU2_CDE, FN_QPOLB, FN_HRX0_C,
+       FN_USB1_PWEN, FN_AUDIO_CLKOUT_D, FN_USB1_OVC,
+       FN_TCLK1_B,
+
+       FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3,
+       FN_SEL_SCIF1_4,
+       FN_SEL_SCIFB_0, FN_SEL_SCIFB_1, FN_SEL_SCIFB_2,
+       FN_SEL_SCIFB2_0, FN_SEL_SCIFB2_1, FN_SEL_SCIFB2_2,
+       FN_SEL_SCIFB1_0, FN_SEL_SCIFB1_1, FN_SEL_SCIFB1_2, FN_SEL_SCIFB1_3,
+       FN_SEL_SCIFB1_4,
+       FN_SEL_SCIFB1_5, FN_SEL_SCIFB1_6,
+       FN_SEL_SCIFA1_0, FN_SEL_SCIFA1_1, FN_SEL_SCIFA1_2, FN_SEL_SCIFA1_3,
+       FN_SEL_SCIF0_0, FN_SEL_SCIF0_1,
+       FN_SEL_SCFA_0, FN_SEL_SCFA_1,
+       FN_SEL_SOF1_0, FN_SEL_SOF1_1,
+       FN_SEL_SSI7_0, FN_SEL_SSI7_1, FN_SEL_SSI7_2,
+       FN_SEL_SSI6_0, FN_SEL_SSI6_1,
+       FN_SEL_SSI5_0, FN_SEL_SSI5_1, FN_SEL_SSI5_2,
+       FN_SEL_VI3_0, FN_SEL_VI3_1,
+       FN_SEL_VI2_0, FN_SEL_VI2_1,
+       FN_SEL_VI1_0, FN_SEL_VI1_1,
+       FN_SEL_VI0_0, FN_SEL_VI0_1,
+       FN_SEL_TSIF1_0, FN_SEL_TSIF1_1, FN_SEL_TSIF1_2,
+       FN_SEL_LBS_0, FN_SEL_LBS_1,
+       FN_SEL_TSIF0_0, FN_SEL_TSIF0_1, FN_SEL_TSIF0_2, FN_SEL_TSIF0_3,
+       FN_SEL_SOF3_0, FN_SEL_SOF3_1,
+       FN_SEL_SOF0_0, FN_SEL_SOF0_1,
+
+       FN_SEL_TMU1_0, FN_SEL_TMU1_1,
+       FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1,
+       FN_SEL_SCIFCLK_0, FN_SEL_SCIFCLK_1,
+       FN_SEL_CAN0_0, FN_SEL_CAN0_1, FN_SEL_CAN0_2, FN_SEL_CAN0_3,
+       FN_SEL_CANCLK_0, FN_SEL_CANCLK_1,
+       FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1, FN_SEL_SCIFA2_2,
+       FN_SEL_CAN1_0, FN_SEL_CAN1_1,
+       FN_SEL_ADI_0, FN_SEL_ADI_1,
+       FN_SEL_SSP_0, FN_SEL_SSP_1,
+       FN_SEL_FM_0, FN_SEL_FM_1, FN_SEL_FM_2, FN_SEL_FM_3,
+       FN_SEL_FM_4, FN_SEL_FM_5, FN_SEL_FM_6,
+       FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, FN_SEL_HSCIF0_2, FN_SEL_HSCIF0_3,
+       FN_SEL_HSCIF0_4, FN_SEL_HSCIF0_5,
+       FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2,
+       FN_SEL_RDS_0, FN_SEL_RDS_1, FN_SEL_RDS_2,
+       FN_SEL_RDS_3, FN_SEL_RDS_4, FN_SEL_RDS_5,
+       FN_SEL_SIM_0, FN_SEL_SIM_1, FN_SEL_SIM_2,
+       FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2,
+
+       FN_SEL_IICDVFS_0, FN_SEL_IICDVFS_1,
+       FN_SEL_IIC0_0, FN_SEL_IIC0_1,
+       FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2,
+       FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3,
+       FN_SEL_IIC2_4,
+       FN_SEL_IIC1_0, FN_SEL_IIC1_1, FN_SEL_IIC1_2,
+       FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3,
+       FN_SEL_I2C2_4,
+       FN_SEL_I2C1_0, FN_SEL_I2C1_1, FN_SEL_I2C1_2,
+       PINMUX_FUNCTION_END,
+
+       PINMUX_MARK_BEGIN,
+
+       VI1_DATA7_VI1_B7_MARK,
+
+       USB0_PWEN_MARK, USB0_OVC_VBUS_MARK,
+       USB2_PWEN_MARK, USB2_OVC_MARK, AVS1_MARK, AVS2_MARK,
+       DU_DOTCLKIN0_MARK, DU_DOTCLKIN2_MARK,
+
+       D0_MARK, MSIOF3_SCK_B_MARK, VI3_DATA0_MARK, VI0_G4_MARK, VI0_G4_B_MARK,
+       D1_MARK, MSIOF3_SYNC_B_MARK, VI3_DATA1_MARK, VI0_G5_MARK,
+       VI0_G5_B_MARK, D2_MARK, MSIOF3_RXD_B_MARK, VI3_DATA2_MARK,
+       VI0_G6_MARK, VI0_G6_B_MARK, D3_MARK, MSIOF3_TXD_B_MARK,
+       VI3_DATA3_MARK, VI0_G7_MARK, VI0_G7_B_MARK, D4_MARK,
+       SCIFB1_RXD_F_MARK, SCIFB0_RXD_C_MARK, VI3_DATA4_MARK,
+       VI0_R0_MARK, VI0_R0_B_MARK, RX0_B_MARK, D5_MARK,
+       SCIFB1_TXD_F_MARK, SCIFB0_TXD_C_MARK, VI3_DATA5_MARK,
+       VI0_R1_MARK, VI0_R1_B_MARK, TX0_B_MARK, D6_MARK,
+       SCL2_C_MARK, VI3_DATA6_MARK, VI0_R2_MARK, VI0_R2_B_MARK,
+       SCL2_CIS_C_MARK, D7_MARK, AD_DI_B_MARK, SDA2_C_MARK,
+       VI3_DATA7_MARK, VI0_R3_MARK, VI0_R3_B_MARK, SDA2_CIS_C_MARK,
+       D8_MARK, SCIFA1_SCK_C_MARK, AVB_TXD0_MARK, MII_TXD0_MARK,
+       VI0_G0_MARK, VI0_G0_B_MARK, VI2_DATA0_VI2_B0_MARK,
+
+       D9_MARK, SCIFA1_RXD_C_MARK, AVB_TXD1_MARK, MII_TXD1_MARK,
+       VI0_G1_MARK, VI0_G1_B_MARK, VI2_DATA1_VI2_B1_MARK, D10_MARK,
+       SCIFA1_TXD_C_MARK, AVB_TXD2_MARK, MII_TXD2_MARK,
+       VI0_G2_MARK, VI0_G2_B_MARK, VI2_DATA2_VI2_B2_MARK, D11_MARK,
+       SCIFA1_CTS_N_C_MARK, AVB_TXD3_MARK, MII_TXD3_MARK,
+       VI0_G3_MARK, VI0_G3_B_MARK, VI2_DATA3_VI2_B3_MARK,
+       D12_MARK, SCIFA1_RTS_N_C_MARK, AVB_TXD4_MARK,
+       VI0_HSYNC_N_MARK, VI0_HSYNC_N_B_MARK, VI2_DATA4_VI2_B4_MARK,
+       D13_MARK, AVB_TXD5_MARK, VI0_VSYNC_N_MARK,
+       VI0_VSYNC_N_B_MARK, VI2_DATA5_VI2_B5_MARK, D14_MARK,
+       SCIFB1_RXD_C_MARK, AVB_TXD6_MARK, RX1_B_MARK,
+       VI0_CLKENB_MARK, VI0_CLKENB_B_MARK, VI2_DATA6_VI2_B6_MARK,
+       D15_MARK, SCIFB1_TXD_C_MARK, AVB_TXD7_MARK, TX1_B_MARK,
+       VI0_FIELD_MARK, VI0_FIELD_B_MARK, VI2_DATA7_VI2_B7_MARK,
+       A0_MARK, PWM3_MARK, A1_MARK, PWM4_MARK,
+
+       A2_MARK, PWM5_MARK, MSIOF1_SS1_B_MARK, A3_MARK,
+       PWM6_MARK, MSIOF1_SS2_B_MARK, A4_MARK, MSIOF1_TXD_B_MARK,
+       TPU0TO0_MARK, A5_MARK, SCIFA1_TXD_B_MARK, TPU0TO1_MARK,
+       A6_MARK, SCIFA1_RTS_N_B_MARK, TPU0TO2_MARK, A7_MARK,
+       SCIFA1_SCK_B_MARK, AUDIO_CLKOUT_B_MARK, TPU0TO3_MARK,
+       A8_MARK, SCIFA1_RXD_B_MARK, SSI_SCK5_B_MARK, VI0_R4_MARK,
+       VI0_R4_B_MARK, SCIFB2_RXD_C_MARK, VI2_DATA0_VI2_B0_B_MARK,
+       A9_MARK, SCIFA1_CTS_N_B_MARK, SSI_WS5_B_MARK, VI0_R5_MARK,
+       VI0_R5_B_MARK, SCIFB2_TXD_C_MARK, VI2_DATA1_VI2_B1_B_MARK,
+       A10_MARK, SSI_SDATA5_B_MARK, MSIOF2_SYNC_MARK, VI0_R6_MARK,
+       VI0_R6_B_MARK, VI2_DATA2_VI2_B2_B_MARK,
+
+       A11_MARK, SCIFB2_CTS_N_B_MARK, MSIOF2_SCK_MARK, VI1_R0_MARK,
+       VI1_R0_B_MARK, VI2_G0_MARK, VI2_DATA3_VI2_B3_B_MARK,
+       A12_MARK, SCIFB2_RXD_B_MARK, MSIOF2_TXD_MARK, VI1_R1_MARK,
+       VI1_R1_B_MARK, VI2_G1_MARK, VI2_DATA4_VI2_B4_B_MARK,
+       A13_MARK, SCIFB2_RTS_N_B_MARK, EX_WAIT2_MARK,
+       MSIOF2_RXD_MARK, VI1_R2_MARK, VI1_R2_B_MARK, VI2_G2_MARK,
+       VI2_DATA5_VI2_B5_B_MARK, A14_MARK, SCIFB2_TXD_B_MARK,
+       ATACS11_N_MARK, MSIOF2_SS1_MARK, A15_MARK, SCIFB2_SCK_B_MARK,
+       ATARD1_N_MARK, MSIOF2_SS2_MARK, A16_MARK, ATAWR1_N_MARK,
+       A17_MARK, AD_DO_B_MARK, ATADIR1_N_MARK, A18_MARK,
+       AD_CLK_B_MARK, ATAG1_N_MARK, A19_MARK, AD_NCS_N_B_MARK,
+       ATACS01_N_MARK, EX_WAIT0_B_MARK, A20_MARK, SPCLK_MARK,
+       VI1_R3_MARK, VI1_R3_B_MARK, VI2_G4_MARK,
+
+       A21_MARK, MOSI_IO0_MARK, VI1_R4_MARK, VI1_R4_B_MARK, VI2_G5_MARK,
+       A22_MARK, MISO_IO1_MARK, VI1_R5_MARK, VI1_R5_B_MARK,
+       VI2_G6_MARK, A23_MARK, IO2_MARK, VI1_G7_MARK,
+       VI1_G7_B_MARK, VI2_G7_MARK, A24_MARK, IO3_MARK,
+       VI1_R7_MARK, VI1_R7_B_MARK, VI2_CLKENB_MARK,
+       VI2_CLKENB_B_MARK, A25_MARK, SSL_MARK, VI1_G6_MARK,
+       VI1_G6_B_MARK, VI2_FIELD_MARK, VI2_FIELD_B_MARK, CS0_N_MARK,
+       VI1_R6_MARK, VI1_R6_B_MARK, VI2_G3_MARK, MSIOF0_SS2_B_MARK,
+       CS1_N_A26_MARK, SPEEDIN_MARK, VI0_R7_MARK, VI0_R7_B_MARK,
+       VI2_CLK_MARK, VI2_CLK_B_MARK, EX_CS0_N_MARK, HRX1_B_MARK,
+       VI1_G5_MARK, VI1_G5_B_MARK, VI2_R0_MARK, HTX0_B_MARK,
+       MSIOF0_SS1_B_MARK, EX_CS1_N_MARK, GPS_CLK_MARK,
+       HCTS1_N_B_MARK, VI1_FIELD_MARK, VI1_FIELD_B_MARK,
+       VI2_R1_MARK, EX_CS2_N_MARK, GPS_SIGN_MARK, HRTS1_N_B_MARK,
+       VI3_CLKENB_MARK, VI1_G0_MARK, VI1_G0_B_MARK, VI2_R2_MARK,
+
+       EX_CS3_N_MARK, GPS_MAG_MARK, VI3_FIELD_MARK,
+       VI1_G1_MARK, VI1_G1_B_MARK, VI2_R3_MARK,
+       EX_CS4_N_MARK, MSIOF1_SCK_B_MARK, VI3_HSYNC_N_MARK,
+       VI2_HSYNC_N_MARK, SCL1_MARK, VI2_HSYNC_N_B_MARK,
+       INTC_EN0_N_MARK, SCL1_CIS_MARK, EX_CS5_N_MARK, CAN0_RX_MARK,
+       MSIOF1_RXD_B_MARK, VI3_VSYNC_N_MARK, VI1_G2_MARK,
+       VI1_G2_B_MARK, VI2_R4_MARK, SDA1_MARK, INTC_EN1_N_MARK,
+       SDA1_CIS_MARK, BS_N_MARK, IETX_MARK, HTX1_B_MARK,
+       CAN1_TX_MARK, DRACK0_MARK, IETX_C_MARK, RD_N_MARK,
+       CAN0_TX_MARK, SCIFA0_SCK_B_MARK, RD_WR_N_MARK, VI1_G3_MARK,
+       VI1_G3_B_MARK, VI2_R5_MARK, SCIFA0_RXD_B_MARK,
+       INTC_IRQ4_N_MARK, WE0_N_MARK, IECLK_MARK, CAN_CLK_MARK,
+       VI2_VSYNC_N_MARK, SCIFA0_TXD_B_MARK, VI2_VSYNC_N_B_MARK,
+       WE1_N_MARK, IERX_MARK, CAN1_RX_MARK, VI1_G4_MARK,
+       VI1_G4_B_MARK, VI2_R6_MARK, SCIFA0_CTS_N_B_MARK,
+       IERX_C_MARK, EX_WAIT0_MARK, IRQ3_MARK, INTC_IRQ3_N_MARK,
+       VI3_CLK_MARK, SCIFA0_RTS_N_B_MARK, HRX0_B_MARK,
+       MSIOF0_SCK_B_MARK, DREQ0_N_MARK, VI1_HSYNC_N_MARK,
+       VI1_HSYNC_N_B_MARK, VI2_R7_MARK, SSI_SCK78_C_MARK,
+       SSI_WS78_B_MARK,
+
+       DACK0_MARK, IRQ0_MARK, INTC_IRQ0_N_MARK, SSI_SCK6_B_MARK,
+       VI1_VSYNC_N_MARK, VI1_VSYNC_N_B_MARK, SSI_WS78_C_MARK,
+       DREQ1_N_MARK, VI1_CLKENB_MARK, VI1_CLKENB_B_MARK,
+       SSI_SDATA7_C_MARK, SSI_SCK78_B_MARK, DACK1_MARK, IRQ1_MARK,
+       INTC_IRQ1_N_MARK, SSI_WS6_B_MARK, SSI_SDATA8_C_MARK,
+       DREQ2_N_MARK, HSCK1_B_MARK, HCTS0_N_B_MARK,
+       MSIOF0_TXD_B_MARK, DACK2_MARK, IRQ2_MARK, INTC_IRQ2_N_MARK,
+       SSI_SDATA6_B_MARK, HRTS0_N_B_MARK, MSIOF0_RXD_B_MARK,
+       ETH_CRS_DV_MARK, RMII_CRS_DV_MARK, STP_ISCLK_0_B_MARK,
+       TS_SDEN0_D_MARK, GLO_Q0_C_MARK, SCL2_E_MARK,
+       SCL2_CIS_E_MARK, ETH_RX_ER_MARK, RMII_RX_ER_MARK,
+       STP_ISD_0_B_MARK, TS_SPSYNC0_D_MARK, GLO_Q1_C_MARK,
+       SDA2_E_MARK, SDA2_CIS_E_MARK, ETH_RXD0_MARK, RMII_RXD0_MARK,
+       STP_ISEN_0_B_MARK, TS_SDAT0_D_MARK, GLO_I0_C_MARK,
+       SCIFB1_SCK_G_MARK, SCK1_E_MARK, ETH_RXD1_MARK,
+       RMII_RXD1_MARK, HRX0_E_MARK, STP_ISSYNC_0_B_MARK,
+       TS_SCK0_D_MARK, GLO_I1_C_MARK, SCIFB1_RXD_G_MARK,
+       RX1_E_MARK, ETH_LINK_MARK, RMII_LINK_MARK, HTX0_E_MARK,
+       STP_IVCXO27_0_B_MARK, SCIFB1_TXD_G_MARK, TX1_E_MARK,
+       ETH_REF_CLK_MARK, RMII_REF_CLK_MARK, HCTS0_N_E_MARK,
+       STP_IVCXO27_1_B_MARK, HRX0_F_MARK,
+
+       ETH_MDIO_MARK, RMII_MDIO_MARK, HRTS0_N_E_MARK,
+       SIM0_D_C_MARK, HCTS0_N_F_MARK, ETH_TXD1_MARK,
+       RMII_TXD1_MARK, HTX0_F_MARK, BPFCLK_G_MARK, RDS_CLK_F_MARK,
+       ETH_TX_EN_MARK, RMII_TX_EN_MARK, SIM0_CLK_C_MARK,
+       HRTS0_N_F_MARK, ETH_MAGIC_MARK, RMII_MAGIC_MARK,
+       SIM0_RST_C_MARK, ETH_TXD0_MARK, RMII_TXD0_MARK,
+       STP_ISCLK_1_B_MARK, TS_SDEN1_C_MARK, GLO_SCLK_C_MARK,
+       ETH_MDC_MARK, RMII_MDC_MARK, STP_ISD_1_B_MARK,
+       TS_SPSYNC1_C_MARK, GLO_SDATA_C_MARK, PWM0_MARK,
+       SCIFA2_SCK_C_MARK, STP_ISEN_1_B_MARK, TS_SDAT1_C_MARK,
+       GLO_SS_C_MARK, PWM1_MARK, SCIFA2_TXD_C_MARK,
+       STP_ISSYNC_1_B_MARK, TS_SCK1_C_MARK, GLO_RFON_C_MARK,
+       PCMOE_N_MARK, PWM2_MARK, PWMFSW0_MARK, SCIFA2_RXD_C_MARK,
+       PCMWE_N_MARK, IECLK_C_MARK, DU1_DOTCLKIN_MARK,
+       AUDIO_CLKC_MARK, AUDIO_CLKOUT_C_MARK, VI0_CLK_MARK,
+       ATACS00_N_MARK, AVB_RXD1_MARK, MII_RXD1_MARK,
+       VI0_DATA0_VI0_B0_MARK, ATACS10_N_MARK, AVB_RXD2_MARK,
+       MII_RXD2_MARK,
+
+       VI0_DATA1_VI0_B1_MARK, ATARD0_N_MARK, AVB_RXD3_MARK,
+       MII_RXD3_MARK, VI0_DATA2_VI0_B2_MARK, ATAWR0_N_MARK,
+       AVB_RXD4_MARK, VI0_DATA3_VI0_B3_MARK, ATADIR0_N_MARK,
+       AVB_RXD5_MARK, VI0_DATA4_VI0_B4_MARK, ATAG0_N_MARK,
+       AVB_RXD6_MARK, VI0_DATA5_VI0_B5_MARK, EX_WAIT1_MARK,
+       AVB_RXD7_MARK, VI0_DATA6_VI0_B6_MARK, AVB_RX_ER_MARK,
+       MII_RX_ER_MARK, VI0_DATA7_VI0_B7_MARK, AVB_RX_CLK_MARK,
+       MII_RX_CLK_MARK, VI1_CLK_MARK, AVB_RX_DV_MARK,
+       MII_RX_DV_MARK, VI1_DATA0_VI1_B0_MARK, SCIFA1_SCK_D_MARK,
+       AVB_CRS_MARK, MII_CRS_MARK, VI1_DATA1_VI1_B1_MARK,
+       SCIFA1_RXD_D_MARK, AVB_MDC_MARK, MII_MDC_MARK,
+       VI1_DATA2_VI1_B2_MARK, SCIFA1_TXD_D_MARK, AVB_MDIO_MARK,
+       MII_MDIO_MARK, VI1_DATA3_VI1_B3_MARK, SCIFA1_CTS_N_D_MARK,
+       AVB_GTX_CLK_MARK, VI1_DATA4_VI1_B4_MARK, SCIFA1_RTS_N_D_MARK,
+       AVB_MAGIC_MARK, MII_MAGIC_MARK, VI1_DATA5_VI1_B5_MARK,
+       AVB_PHY_INT_MARK, VI1_DATA6_VI1_B6_MARK, AVB_GTXREFCLK_MARK,
+       SD0_CLK_MARK, VI1_DATA0_VI1_B0_B_MARK, SD0_CMD_MARK,
+       SCIFB1_SCK_B_MARK, VI1_DATA1_VI1_B1_B_MARK,
+
+       SD0_DAT0_MARK, SCIFB1_RXD_B_MARK, VI1_DATA2_VI1_B2_B_MARK,
+       SD0_DAT1_MARK, SCIFB1_TXD_B_MARK, VI1_DATA3_VI1_B3_B_MARK,
+       SD0_DAT2_MARK, SCIFB1_CTS_N_B_MARK, VI1_DATA4_VI1_B4_B_MARK,
+       SD0_DAT3_MARK, SCIFB1_RTS_N_B_MARK, VI1_DATA5_VI1_B5_B_MARK,
+       SD0_CD_MARK, MMC0_D6_MARK, TS_SDEN0_B_MARK, USB0_EXTP_MARK,
+       GLO_SCLK_MARK, VI1_DATA6_VI1_B6_B_MARK, SCL1_B_MARK,
+       SCL1_CIS_B_MARK, VI2_DATA6_VI2_B6_B_MARK, SD0_WP_MARK,
+       MMC0_D7_MARK, TS_SPSYNC0_B_MARK, USB0_IDIN_MARK,
+       GLO_SDATA_MARK, VI1_DATA7_VI1_B7_B_MARK, SDA1_B_MARK,
+       SDA1_CIS_B_MARK, VI2_DATA7_VI2_B7_B_MARK, SD1_CLK_MARK,
+       AVB_TX_EN_MARK, MII_TX_EN_MARK, SD1_CMD_MARK,
+       AVB_TX_ER_MARK, MII_TX_ER_MARK, SCIFB0_SCK_B_MARK,
+       SD1_DAT0_MARK, AVB_TX_CLK_MARK, MII_TX_CLK_MARK,
+       SCIFB0_RXD_B_MARK, SD1_DAT1_MARK, AVB_LINK_MARK,
+       MII_LINK_MARK, SCIFB0_TXD_B_MARK, SD1_DAT2_MARK,
+       AVB_COL_MARK, MII_COL_MARK, SCIFB0_CTS_N_B_MARK,
+       SD1_DAT3_MARK, AVB_RXD0_MARK, MII_RXD0_MARK,
+       SCIFB0_RTS_N_B_MARK, SD1_CD_MARK, MMC1_D6_MARK,
+       TS_SDEN1_MARK, USB1_EXTP_MARK, GLO_SS_MARK, VI0_CLK_B_MARK,
+       SCL2_D_MARK, SCL2_CIS_D_MARK, SIM0_CLK_B_MARK,
+       VI3_CLK_B_MARK,
+
+       SD1_WP_MARK, MMC1_D7_MARK, TS_SPSYNC1_MARK, USB1_IDIN_MARK,
+       GLO_RFON_MARK, VI1_CLK_B_MARK, SDA2_D_MARK, SDA2_CIS_D_MARK,
+       SIM0_D_B_MARK, SD2_CLK_MARK, MMC0_CLK_MARK, SIM0_CLK_MARK,
+       VI0_DATA0_VI0_B0_B_MARK, TS_SDEN0_C_MARK, GLO_SCLK_B_MARK,
+       VI3_DATA0_B_MARK, SD2_CMD_MARK, MMC0_CMD_MARK, SIM0_D_MARK,
+       VI0_DATA1_VI0_B1_B_MARK, SCIFB1_SCK_E_MARK, SCK1_D_MARK,
+       TS_SPSYNC0_C_MARK, GLO_SDATA_B_MARK, VI3_DATA1_B_MARK,
+       SD2_DAT0_MARK, MMC0_D0_MARK, FMCLK_B_MARK,
+       VI0_DATA2_VI0_B2_B_MARK, SCIFB1_RXD_E_MARK, RX1_D_MARK,
+       TS_SDAT0_C_MARK, GLO_SS_B_MARK, VI3_DATA2_B_MARK,
+       SD2_DAT1_MARK, MMC0_D1_MARK, FMIN_B_MARK, RDS_DATA_MARK,
+       VI0_DATA3_VI0_B3_B_MARK, SCIFB1_TXD_E_MARK, TX1_D_MARK,
+       TS_SCK0_C_MARK, GLO_RFON_B_MARK, VI3_DATA3_B_MARK,
+       SD2_DAT2_MARK, MMC0_D2_MARK, BPFCLK_B_MARK, RDS_CLK_MARK,
+       VI0_DATA4_VI0_B4_B_MARK, HRX0_D_MARK, TS_SDEN1_B_MARK,
+       GLO_Q0_B_MARK, VI3_DATA4_B_MARK, SD2_DAT3_MARK,
+       MMC0_D3_MARK, SIM0_RST_MARK, VI0_DATA5_VI0_B5_B_MARK,
+       HTX0_D_MARK, TS_SPSYNC1_B_MARK, GLO_Q1_B_MARK,
+       VI3_DATA5_B_MARK, SD2_CD_MARK, MMC0_D4_MARK,
+       TS_SDAT0_B_MARK, USB2_EXTP_MARK, GLO_I0_MARK,
+       VI0_DATA6_VI0_B6_B_MARK, HCTS0_N_D_MARK, TS_SDAT1_B_MARK,
+       GLO_I0_B_MARK, VI3_DATA6_B_MARK,
+
+       SD2_WP_MARK, MMC0_D5_MARK, TS_SCK0_B_MARK, USB2_IDIN_MARK,
+       GLO_I1_MARK, VI0_DATA7_VI0_B7_B_MARK, HRTS0_N_D_MARK,
+       TS_SCK1_B_MARK, GLO_I1_B_MARK, VI3_DATA7_B_MARK,
+       SD3_CLK_MARK, MMC1_CLK_MARK, SD3_CMD_MARK, MMC1_CMD_MARK,
+       MTS_N_MARK, SD3_DAT0_MARK, MMC1_D0_MARK, STM_N_MARK,
+       SD3_DAT1_MARK, MMC1_D1_MARK, MDATA_MARK, SD3_DAT2_MARK,
+       MMC1_D2_MARK, SDATA_MARK, SD3_DAT3_MARK, MMC1_D3_MARK,
+       SCKZ_MARK, SD3_CD_MARK, MMC1_D4_MARK, TS_SDAT1_MARK,
+       VSP_MARK, GLO_Q0_MARK, SIM0_RST_B_MARK, SD3_WP_MARK,
+       MMC1_D5_MARK, TS_SCK1_MARK, GLO_Q1_MARK, FMIN_C_MARK,
+       RDS_DATA_B_MARK, FMIN_E_MARK, RDS_DATA_D_MARK, FMIN_F_MARK,
+       RDS_DATA_E_MARK, MLB_CLK_MARK, SCL2_B_MARK, SCL2_CIS_B_MARK,
+       MLB_SIG_MARK, SCIFB1_RXD_D_MARK, RX1_C_MARK, SDA2_B_MARK,
+       SDA2_CIS_B_MARK, MLB_DAT_MARK, SPV_EVEN_MARK,
+       SCIFB1_TXD_D_MARK, TX1_C_MARK, BPFCLK_C_MARK,
+       RDS_CLK_B_MARK, SSI_SCK0129_MARK, CAN_CLK_B_MARK,
+       MOUT0_MARK,
+
+       SSI_WS0129_MARK, CAN0_TX_B_MARK, MOUT1_MARK,
+       SSI_SDATA0_MARK, CAN0_RX_B_MARK, MOUT2_MARK,
+       SSI_SDATA1_MARK, CAN1_TX_B_MARK, MOUT5_MARK,
+       SSI_SDATA2_MARK, CAN1_RX_B_MARK, SSI_SCK1_MARK, MOUT6_MARK,
+       SSI_SCK34_MARK, STP_OPWM_0_MARK, SCIFB0_SCK_MARK,
+       MSIOF1_SCK_MARK, CAN_DEBUG_HW_TRIGGER_MARK, SSI_WS34_MARK,
+       STP_IVCXO27_0_MARK, SCIFB0_RXD_MARK, MSIOF1_SYNC_MARK,
+       CAN_STEP0_MARK, SSI_SDATA3_MARK, STP_ISCLK_0_MARK,
+       SCIFB0_TXD_MARK, MSIOF1_SS1_MARK, CAN_TXCLK_MARK,
+       SSI_SCK4_MARK, STP_ISD_0_MARK, SCIFB0_CTS_N_MARK,
+       MSIOF1_SS2_MARK, SSI_SCK5_C_MARK, CAN_DEBUGOUT0_MARK,
+       SSI_WS4_MARK, STP_ISEN_0_MARK, SCIFB0_RTS_N_MARK,
+       MSIOF1_TXD_MARK, SSI_WS5_C_MARK, CAN_DEBUGOUT1_MARK,
+       SSI_SDATA4_MARK, STP_ISSYNC_0_MARK, MSIOF1_RXD_MARK,
+       CAN_DEBUGOUT2_MARK, SSI_SCK5_MARK, SCIFB1_SCK_MARK,
+       IERX_B_MARK, DU2_EXHSYNC_DU2_HSYNC_MARK, QSTH_QHS_MARK,
+       CAN_DEBUGOUT3_MARK, SSI_WS5_MARK, SCIFB1_RXD_MARK,
+       IECLK_B_MARK, DU2_EXVSYNC_DU2_VSYNC_MARK, QSTB_QHE_MARK,
+       CAN_DEBUGOUT4_MARK,
+
+       SSI_SDATA5_MARK, SCIFB1_TXD_MARK, IETX_B_MARK, DU2_DR2_MARK,
+       LCDOUT2_MARK, CAN_DEBUGOUT5_MARK, SSI_SCK6_MARK,
+       SCIFB1_CTS_N_MARK, BPFCLK_D_MARK, RDS_CLK_C_MARK,
+       DU2_DR3_MARK, LCDOUT3_MARK, CAN_DEBUGOUT6_MARK,
+       BPFCLK_F_MARK, RDS_CLK_E_MARK, SSI_WS6_MARK,
+       SCIFB1_RTS_N_MARK, CAN0_TX_D_MARK, DU2_DR4_MARK,
+       LCDOUT4_MARK, CAN_DEBUGOUT7_MARK, SSI_SDATA6_MARK,
+       FMIN_D_MARK, RDS_DATA_C_MARK, DU2_DR5_MARK, LCDOUT5_MARK,
+       CAN_DEBUGOUT8_MARK, SSI_SCK78_MARK, STP_IVCXO27_1_MARK,
+       SCK1_MARK, SCIFA1_SCK_MARK, DU2_DR6_MARK, LCDOUT6_MARK,
+       CAN_DEBUGOUT9_MARK, SSI_WS78_MARK, STP_ISCLK_1_MARK,
+       SCIFB2_SCK_MARK, SCIFA2_CTS_N_MARK, DU2_DR7_MARK,
+       LCDOUT7_MARK, CAN_DEBUGOUT10_MARK, SSI_SDATA7_MARK,
+       STP_ISD_1_MARK, SCIFB2_RXD_MARK, SCIFA2_RTS_N_MARK,
+       TCLK2_MARK, QSTVA_QVS_MARK, CAN_DEBUGOUT11_MARK,
+       BPFCLK_E_MARK, RDS_CLK_D_MARK, SSI_SDATA7_B_MARK,
+       FMIN_G_MARK, RDS_DATA_F_MARK, SSI_SDATA8_MARK,
+       STP_ISEN_1_MARK, SCIFB2_TXD_MARK, CAN0_TX_C_MARK,
+       CAN_DEBUGOUT12_MARK, SSI_SDATA8_B_MARK, SSI_SDATA9_MARK,
+       STP_ISSYNC_1_MARK, SCIFB2_CTS_N_MARK, SSI_WS1_MARK,
+       SSI_SDATA5_C_MARK, CAN_DEBUGOUT13_MARK, AUDIO_CLKA_MARK,
+       SCIFB2_RTS_N_MARK, CAN_DEBUGOUT14_MARK,
+
+       AUDIO_CLKB_MARK, SCIF_CLK_MARK, CAN0_RX_D_MARK,
+       DVC_MUTE_MARK, CAN0_RX_C_MARK, CAN_DEBUGOUT15_MARK,
+       REMOCON_MARK, SCIFA0_SCK_MARK, HSCK1_MARK, SCK0_MARK,
+       MSIOF3_SS2_MARK, DU2_DG2_MARK, LCDOUT10_MARK, SDA1_C_MARK,
+       SDA1_CIS_C_MARK, SCIFA0_RXD_MARK, HRX1_MARK, RX0_MARK,
+       DU2_DR0_MARK, LCDOUT0_MARK, SCIFA0_TXD_MARK, HTX1_MARK,
+       TX0_MARK, DU2_DR1_MARK, LCDOUT1_MARK, SCIFA0_CTS_N_MARK,
+       HCTS1_N_MARK, CTS0_N_MARK, MSIOF3_SYNC_MARK, DU2_DG3_MARK,
+       LCDOUT11_MARK, PWM0_B_MARK, SCL1_C_MARK, SCL1_CIS_C_MARK,
+       SCIFA0_RTS_N_MARK, HRTS1_N_MARK, RTS0_N_TANS_MARK,
+       MSIOF3_SS1_MARK, DU2_DG0_MARK, LCDOUT8_MARK, PWM1_B_MARK,
+       SCIFA1_RXD_MARK, AD_DI_MARK, RX1_MARK,
+       DU2_EXODDF_DU2_ODDF_DISP_CDE_MARK, QCPV_QDE_MARK,
+       SCIFA1_TXD_MARK, AD_DO_MARK, TX1_MARK, DU2_DG1_MARK,
+       LCDOUT9_MARK, SCIFA1_CTS_N_MARK, AD_CLK_MARK,
+       CTS1_N_MARK, MSIOF3_RXD_MARK, DU0_DOTCLKOUT_MARK, QCLK_MARK,
+       SCIFA1_RTS_N_MARK, AD_NCS_N_MARK, RTS1_N_TANS_MARK,
+       MSIOF3_TXD_MARK, DU1_DOTCLKOUT_MARK, QSTVB_QVE_MARK,
+       HRTS0_N_C_MARK,
+
+       SCIFA2_SCK_MARK, FMCLK_MARK, MSIOF3_SCK_MARK, DU2_DG7_MARK,
+       LCDOUT15_MARK, SCIF_CLK_B_MARK, SCIFA2_RXD_MARK, FMIN_MARK,
+       DU2_DB0_MARK, LCDOUT16_MARK, SCL2_MARK, SCL2_CIS_MARK,
+       SCIFA2_TXD_MARK, BPFCLK_MARK, DU2_DB1_MARK, LCDOUT17_MARK,
+       SDA2_MARK, SDA2_CIS_MARK, HSCK0_MARK, TS_SDEN0_MARK,
+       DU2_DG4_MARK, LCDOUT12_MARK, HCTS0_N_C_MARK, HRX0_MARK,
+       DU2_DB2_MARK, LCDOUT18_MARK, HTX0_MARK, DU2_DB3_MARK,
+       LCDOUT19_MARK, HCTS0_N_MARK, SSI_SCK9_MARK, DU2_DB4_MARK,
+       LCDOUT20_MARK, HRTS0_N_MARK, SSI_WS9_MARK, DU2_DB5_MARK,
+       LCDOUT21_MARK, MSIOF0_SCK_MARK, TS_SDAT0_MARK, ADICLK_MARK,
+       DU2_DB6_MARK, LCDOUT22_MARK, MSIOF0_SYNC_MARK, TS_SCK0_MARK,
+       SSI_SCK2_MARK, ADIDATA_MARK, DU2_DB7_MARK, LCDOUT23_MARK,
+       SCIFA2_RXD_B_MARK, MSIOF0_SS1_MARK, ADICHS0_MARK,
+       DU2_DG5_MARK, LCDOUT13_MARK, MSIOF0_TXD_MARK, ADICHS1_MARK,
+       DU2_DG6_MARK, LCDOUT14_MARK,
+
+       MSIOF0_SS2_MARK, AUDIO_CLKOUT_MARK, ADICHS2_MARK,
+       DU2_DISP_MARK, QPOLA_MARK, HTX0_C_MARK, SCIFA2_TXD_B_MARK,
+       MSIOF0_RXD_MARK, TS_SPSYNC0_MARK, SSI_WS2_MARK,
+       ADICS_SAMP_MARK, DU2_CDE_MARK, QPOLB_MARK, HRX0_C_MARK,
+       USB1_PWEN_MARK, AUDIO_CLKOUT_D_MARK, USB1_OVC_MARK,
+       TCLK1_B_MARK,
+       PINMUX_MARK_END,
+};
+
+static const pinmux_enum_t pinmux_data[] = {
+       PINMUX_DATA_GP_ALL(), /* PINMUX_DATA(GP_M_N_DATA, GP_M_N_FN...), */
+
+       PINMUX_DATA(VI1_DATA7_VI1_B7_MARK, FN_VI1_DATA7_VI1_B7),
+       PINMUX_DATA(USB0_PWEN_MARK, FN_USB0_PWEN),
+       PINMUX_DATA(USB0_OVC_VBUS_MARK, FN_USB0_OVC_VBUS),
+       PINMUX_DATA(USB2_PWEN_MARK, FN_USB2_PWEN),
+       PINMUX_DATA(USB2_OVC_MARK, FN_USB2_OVC),
+       PINMUX_DATA(AVS1_MARK, FN_AVS1),
+       PINMUX_DATA(AVS2_MARK, FN_AVS2),
+       PINMUX_DATA(DU_DOTCLKIN0_MARK, FN_DU_DOTCLKIN0),
+       PINMUX_DATA(DU_DOTCLKIN2_MARK, FN_DU_DOTCLKIN2),
+
+       PINMUX_IPSR_DATA(IP0_2_0, D0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_2_0, MSIOF3_SCK_B, SEL_SOF3_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_2_0, VI3_DATA0, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_2_0, VI0_G4, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_2_0, VI0_G4_B, SEL_VI0_1),
+       PINMUX_IPSR_DATA(IP0_5_3, D1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_5_3, MSIOF3_SYNC_B, SEL_SOF3_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_5_3, VI3_DATA1, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_5_3, VI0_G5, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_5_3, VI0_G5_B, SEL_VI0_1),
+       PINMUX_IPSR_DATA(IP0_8_6, D2),
+       PINMUX_IPSR_MODSEL_DATA(IP0_8_6, MSIOF3_RXD_B, SEL_SOF3_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_8_6, VI3_DATA2, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_8_6, VI0_G6, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_8_6, VI0_G6_B, SEL_VI0_1),
+       PINMUX_IPSR_DATA(IP0_11_9, D3),
+       PINMUX_IPSR_MODSEL_DATA(IP0_11_9, MSIOF3_TXD_B, SEL_SOF3_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_11_9, VI3_DATA3, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_11_9, VI0_G7, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_11_9, VI0_G7_B, SEL_VI0_1),
+       PINMUX_IPSR_DATA(IP0_15_12, D4),
+       PINMUX_IPSR_MODSEL_DATA(IP0_15_12, SCIFB1_RXD_F, SEL_SCIFB1_5),
+       PINMUX_IPSR_MODSEL_DATA(IP0_15_12, SCIFB0_RXD_C, SEL_SCIFB_2),
+       PINMUX_IPSR_MODSEL_DATA(IP0_15_12, VI3_DATA4, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_15_12, VI0_R0, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_15_12, VI0_R0_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_15_12, RX0_B, SEL_SCIF0_1),
+       PINMUX_IPSR_DATA(IP0_19_16, D5),
+       PINMUX_IPSR_MODSEL_DATA(IP0_19_16, SCIFB1_TXD_F, SEL_SCIFB1_5),
+       PINMUX_IPSR_MODSEL_DATA(IP0_19_16, SCIFB0_TXD_C, SEL_SCIFB_2),
+       PINMUX_IPSR_MODSEL_DATA(IP0_19_16, VI3_DATA5, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_19_16, VI0_R1, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_19_16, VI0_R1_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_19_16, TX0_B, SEL_SCIF0_1),
+       PINMUX_IPSR_DATA(IP0_22_20, D6),
+       PINMUX_IPSR_MODSEL_DATA(IP0_22_20, SCL2_C, SEL_IIC2_2),
+       PINMUX_IPSR_MODSEL_DATA(IP0_22_20, VI3_DATA6, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_22_20, VI0_R2, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_22_20, VI0_R2_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_22_20, SCL2_CIS_C, SEL_I2C2_2),
+       PINMUX_IPSR_DATA(IP0_26_23, D7),
+       PINMUX_IPSR_MODSEL_DATA(IP0_26_23, AD_DI_B, SEL_ADI_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_26_23, SDA2_C, SEL_IIC2_2),
+       PINMUX_IPSR_MODSEL_DATA(IP0_26_23, VI3_DATA7, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_26_23, VI0_R3, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_26_23, VI0_R3_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_26_23, SDA2_CIS_C, SEL_I2C2_2),
+       PINMUX_IPSR_DATA(IP0_30_27, D8),
+       PINMUX_IPSR_MODSEL_DATA(IP0_30_27, SCIFA1_SCK_C, SEL_SCIFA1_2),
+       PINMUX_IPSR_DATA(IP0_30_27, AVB_TXD0),
+       PINMUX_IPSR_DATA(IP0_30_27, MII_TXD0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_30_27, VI0_G0, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP0_30_27, VI0_G0_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP0_30_27, VI2_DATA0_VI2_B0, SEL_VI2_0),
+
+       PINMUX_IPSR_DATA(IP1_3_0, D9),
+       PINMUX_IPSR_MODSEL_DATA(IP1_3_0, SCIFA1_RXD_C, SEL_SCIFA1_2),
+       PINMUX_IPSR_DATA(IP1_3_0, AVB_TXD1),
+       PINMUX_IPSR_DATA(IP1_3_0, MII_TXD1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_3_0, VI0_G1, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_3_0, VI0_G1_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_3_0, VI2_DATA1_VI2_B1, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_7_4, D10),
+       PINMUX_IPSR_MODSEL_DATA(IP1_7_4, SCIFA1_TXD_C, SEL_SCIFA1_2),
+       PINMUX_IPSR_DATA(IP1_7_4, AVB_TXD2),
+       PINMUX_IPSR_DATA(IP1_7_4, MII_TXD2),
+       PINMUX_IPSR_MODSEL_DATA(IP1_7_4, VI0_G2, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_7_4, VI0_G2_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_7_4, VI2_DATA2_VI2_B2, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_11_8, D11),
+       PINMUX_IPSR_MODSEL_DATA(IP1_11_8, SCIFA1_CTS_N_C, SEL_SCIFA1_2),
+       PINMUX_IPSR_DATA(IP1_11_8, AVB_TXD3),
+       PINMUX_IPSR_DATA(IP1_11_8, MII_TXD3),
+       PINMUX_IPSR_MODSEL_DATA(IP1_11_8, VI0_G3, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_11_8, VI0_G3_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_11_8, VI2_DATA3_VI2_B3, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_14_12, D12),
+       PINMUX_IPSR_MODSEL_DATA(IP1_14_12, SCIFA1_RTS_N_C, SEL_SCIFA1_2),
+       PINMUX_IPSR_DATA(IP1_14_12, AVB_TXD4),
+       PINMUX_IPSR_MODSEL_DATA(IP1_14_12, VI0_HSYNC_N, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_14_12, VI0_HSYNC_N_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_14_12, VI2_DATA4_VI2_B4, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_17_15, D13),
+       PINMUX_IPSR_MODSEL_DATA(IP1_17_15, AVB_TXD5, SEL_SCIFA1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP1_17_15, VI0_VSYNC_N, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_17_15, VI0_VSYNC_N_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_17_15, VI2_DATA5_VI2_B5, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_21_18, D14),
+       PINMUX_IPSR_MODSEL_DATA(IP1_21_18, SCIFB1_RXD_C, SEL_SCIFB1_2),
+       PINMUX_IPSR_DATA(IP1_21_18, AVB_TXD6),
+       PINMUX_IPSR_MODSEL_DATA(IP1_21_18, RX1_B, SEL_SCIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_21_18, VI0_CLKENB, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_21_18, VI0_CLKENB_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_21_18, VI2_DATA6_VI2_B6, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_25_22, D15),
+       PINMUX_IPSR_MODSEL_DATA(IP1_25_22, SCIFB1_TXD_C, SEL_SCIFB1_2),
+       PINMUX_IPSR_DATA(IP1_25_22, AVB_TXD7),
+       PINMUX_IPSR_MODSEL_DATA(IP1_25_22, TX1_B, SEL_SCIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_25_22, VI0_FIELD, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP1_25_22, VI0_FIELD_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP1_25_22, VI2_DATA7_VI2_B7, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP1_27_26, A0),
+       PINMUX_IPSR_DATA(IP1_27_26, PWM3),
+       PINMUX_IPSR_DATA(IP1_29_28, A1),
+       PINMUX_IPSR_DATA(IP1_29_28, PWM4),
+
+       PINMUX_IPSR_DATA(IP2_2_0, A2),
+       PINMUX_IPSR_DATA(IP2_2_0, PWM5),
+       PINMUX_IPSR_MODSEL_DATA(IP2_2_0, MSIOF1_SS1_B, SEL_SOF1_1),
+       PINMUX_IPSR_DATA(IP2_5_3, A3),
+       PINMUX_IPSR_DATA(IP2_5_3, PWM6),
+       PINMUX_IPSR_MODSEL_DATA(IP2_5_3, MSIOF1_SS2_B, SEL_SOF1_1),
+       PINMUX_IPSR_DATA(IP2_8_6, A4),
+       PINMUX_IPSR_MODSEL_DATA(IP2_8_6, MSIOF1_TXD_B, SEL_SOF1_1),
+       PINMUX_IPSR_DATA(IP2_8_6, TPU0TO0),
+       PINMUX_IPSR_DATA(IP2_11_9, A5),
+       PINMUX_IPSR_MODSEL_DATA(IP2_11_9, SCIFA1_TXD_B, SEL_SCIFA1_1),
+       PINMUX_IPSR_DATA(IP2_11_9, TPU0TO1),
+       PINMUX_IPSR_DATA(IP2_14_12, A6),
+       PINMUX_IPSR_MODSEL_DATA(IP2_14_12, SCIFA1_RTS_N_B, SEL_SCIFA1_1),
+       PINMUX_IPSR_DATA(IP2_14_12, TPU0TO2),
+       PINMUX_IPSR_DATA(IP2_17_15, A7),
+       PINMUX_IPSR_MODSEL_DATA(IP2_17_15, SCIFA1_SCK_B, SEL_SCIFA1_1),
+       PINMUX_IPSR_DATA(IP2_17_15, AUDIO_CLKOUT_B),
+       PINMUX_IPSR_DATA(IP2_17_15, TPU0TO3),
+       PINMUX_IPSR_DATA(IP2_21_18, A8),
+       PINMUX_IPSR_MODSEL_DATA(IP2_21_18, SCIFA1_RXD_B, SEL_SCIFA1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_21_18, SSI_SCK5_B, SEL_SSI5_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_21_18, VI0_R4, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP2_21_18, VI0_R4_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_21_18, SCIFB2_RXD_C, SEL_SCIFB2_2),
+       PINMUX_IPSR_MODSEL_DATA(IP2_21_18, VI2_DATA0_VI2_B0_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP2_25_22, A9),
+       PINMUX_IPSR_MODSEL_DATA(IP2_25_22, SCIFA1_CTS_N_B, SEL_SCIFA1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_25_22, SSI_WS5_B, SEL_SSI5_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_25_22, VI0_R5, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP2_25_22, VI0_R5_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_25_22, SCIFB2_TXD_C, SEL_SCIFB2_2),
+       PINMUX_IPSR_MODSEL_DATA(IP2_25_22, VI2_DATA1_VI2_B1_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP2_28_26, A10),
+       PINMUX_IPSR_MODSEL_DATA(IP2_28_26, SSI_SDATA5_B, SEL_SSI5_1),
+       PINMUX_IPSR_DATA(IP2_28_26, MSIOF2_SYNC),
+       PINMUX_IPSR_MODSEL_DATA(IP2_28_26, VI0_R6, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP2_28_26, VI0_R6_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP2_28_26, VI2_DATA2_VI2_B2_B, SEL_VI2_1),
+
+       PINMUX_IPSR_DATA(IP3_3_0, A11),
+       PINMUX_IPSR_MODSEL_DATA(IP3_3_0, SCIFB2_CTS_N_B, SEL_SCIFB2_1),
+       PINMUX_IPSR_DATA(IP3_3_0, MSIOF2_SCK),
+       PINMUX_IPSR_MODSEL_DATA(IP3_3_0, VI1_R0, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP3_3_0, VI1_R0_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP3_3_0, VI2_G0),
+       PINMUX_IPSR_DATA(IP3_3_0, VI2_DATA3_VI2_B3_B),
+       PINMUX_IPSR_DATA(IP3_7_4, A12),
+       PINMUX_IPSR_MODSEL_DATA(IP3_7_4, SCIFB2_RXD_B, SEL_SCIFB2_1),
+       PINMUX_IPSR_DATA(IP3_7_4, MSIOF2_TXD),
+       PINMUX_IPSR_MODSEL_DATA(IP3_7_4, VI1_R1, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP3_7_4, VI1_R1_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP3_7_4, VI2_G1),
+       PINMUX_IPSR_DATA(IP3_7_4, VI2_DATA4_VI2_B4_B),
+       PINMUX_IPSR_DATA(IP3_11_8, A13),
+       PINMUX_IPSR_MODSEL_DATA(IP3_11_8, SCIFB2_RTS_N_B, SEL_SCIFB2_1),
+       PINMUX_IPSR_DATA(IP3_11_8, EX_WAIT2),
+       PINMUX_IPSR_DATA(IP3_11_8, MSIOF2_RXD),
+       PINMUX_IPSR_MODSEL_DATA(IP3_11_8, VI1_R2, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP3_11_8, VI1_R2_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP3_11_8, VI2_G2),
+       PINMUX_IPSR_MODSEL_DATA(IP3_11_8, VI2_DATA5_VI2_B5_B, SEL_VI2_0),
+       PINMUX_IPSR_DATA(IP3_14_12, A14),
+       PINMUX_IPSR_MODSEL_DATA(IP3_14_12, SCIFB2_TXD_B, SEL_SCIFB2_1),
+       PINMUX_IPSR_DATA(IP3_14_12, ATACS11_N),
+       PINMUX_IPSR_DATA(IP3_14_12, MSIOF2_SS1),
+       PINMUX_IPSR_DATA(IP3_17_15, A15),
+       PINMUX_IPSR_MODSEL_DATA(IP3_17_15, SCIFB2_SCK_B, SEL_SCIFB2_1),
+       PINMUX_IPSR_DATA(IP3_17_15, ATARD1_N),
+       PINMUX_IPSR_DATA(IP3_17_15, MSIOF2_SS2),
+       PINMUX_IPSR_DATA(IP3_19_18, A16),
+       PINMUX_IPSR_DATA(IP3_19_18, ATAWR1_N),
+       PINMUX_IPSR_DATA(IP3_22_20, A17),
+       PINMUX_IPSR_MODSEL_DATA(IP3_22_20, AD_DO_B, SEL_ADI_1),
+       PINMUX_IPSR_DATA(IP3_22_20, ATADIR1_N),
+       PINMUX_IPSR_DATA(IP3_25_23, A18),
+       PINMUX_IPSR_MODSEL_DATA(IP3_25_23, AD_CLK_B, SEL_ADI_1),
+       PINMUX_IPSR_DATA(IP3_25_23, ATAG1_N),
+       PINMUX_IPSR_DATA(IP3_28_26, A19),
+       PINMUX_IPSR_MODSEL_DATA(IP3_28_26, AD_NCS_N_B, SEL_ADI_1),
+       PINMUX_IPSR_DATA(IP3_28_26, ATACS01_N),
+       PINMUX_IPSR_MODSEL_DATA(IP3_28_26, EX_WAIT0_B, SEL_LBS_1),
+       PINMUX_IPSR_DATA(IP3_31_29, A20),
+       PINMUX_IPSR_DATA(IP3_31_29, SPCLK),
+       PINMUX_IPSR_MODSEL_DATA(IP3_31_29, VI1_R3, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP3_31_29, VI1_R3_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP3_31_29, VI2_G4),
+
+       PINMUX_IPSR_DATA(IP4_2_0, A21),
+       PINMUX_IPSR_DATA(IP4_2_0, MOSI_IO0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_2_0, VI1_R4, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_2_0, VI1_R4_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_2_0, VI2_G5),
+       PINMUX_IPSR_DATA(IP4_5_3, A22),
+       PINMUX_IPSR_DATA(IP4_5_3, MISO_IO1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_5_3, VI1_R5, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_5_3, VI1_R5_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_5_3, VI2_G6),
+       PINMUX_IPSR_DATA(IP4_8_6, A23),
+       PINMUX_IPSR_DATA(IP4_8_6, IO2),
+       PINMUX_IPSR_MODSEL_DATA(IP4_8_6, VI1_G7, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_8_6, VI1_G7_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_8_6, VI2_G7),
+       PINMUX_IPSR_DATA(IP4_11_9, A24),
+       PINMUX_IPSR_DATA(IP4_11_9, IO3),
+       PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI1_R7, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI1_R7_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI2_CLKENB, SEL_VI2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_11_9, VI2_CLKENB_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP4_14_12, A25),
+       PINMUX_IPSR_DATA(IP4_14_12, SSL),
+       PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI1_G6, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI1_G6_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI2_FIELD, SEL_VI2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_14_12, VI2_FIELD_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP4_17_15, CS0_N),
+       PINMUX_IPSR_MODSEL_DATA(IP4_17_15, VI1_R6, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_17_15, VI1_R6_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_17_15, VI2_G3),
+       PINMUX_IPSR_MODSEL_DATA(IP4_17_15, MSIOF0_SS2_B, SEL_SOF0_1),
+       PINMUX_IPSR_DATA(IP4_20_18, CS1_N_A26),
+       PINMUX_IPSR_DATA(IP4_20_18, SPEEDIN),
+       PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI0_R7, SEL_VI0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI0_R7_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI2_CLK, SEL_VI2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_20_18, VI2_CLK_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP4_23_21, EX_CS0_N),
+       PINMUX_IPSR_MODSEL_DATA(IP4_23_21, HRX1_B, SEL_HSCIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_23_21, VI1_G5, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_23_21, VI1_G5_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_23_21, VI2_R0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_23_21, HTX0_B, SEL_HSCIF0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_23_21, MSIOF0_SS1_B, SEL_SOF0_1),
+       PINMUX_IPSR_DATA(IP4_26_24, EX_CS1_N),
+       PINMUX_IPSR_DATA(IP4_26_24, GPS_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP4_26_24, HCTS1_N_B, SEL_HSCIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP4_26_24, VI1_FIELD, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_26_24, VI1_FIELD_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_26_24, VI2_R1),
+       PINMUX_IPSR_DATA(IP4_29_27, EX_CS2_N),
+       PINMUX_IPSR_DATA(IP4_29_27, GPS_SIGN),
+       PINMUX_IPSR_MODSEL_DATA(IP4_29_27, HRTS1_N_B, SEL_HSCIF1_1),
+       PINMUX_IPSR_DATA(IP4_29_27, VI3_CLKENB),
+       PINMUX_IPSR_MODSEL_DATA(IP4_29_27, VI1_G0, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP4_29_27, VI1_G0_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP4_29_27, VI2_R2),
+
+       PINMUX_IPSR_DATA(IP5_2_0, EX_CS3_N),
+       PINMUX_IPSR_DATA(IP5_2_0, GPS_MAG),
+       PINMUX_IPSR_DATA(IP5_2_0, VI3_FIELD),
+       PINMUX_IPSR_MODSEL_DATA(IP5_2_0, VI1_G1, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_2_0, VI1_G1_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP5_2_0, VI2_R3),
+       PINMUX_IPSR_MODSEL_DATA(IP5_5_3, EX_CS4_N, SEL_I2C1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_5_3, MSIOF1_SCK_B, SEL_SOF1_1),
+       PINMUX_IPSR_DATA(IP5_5_3, VI3_HSYNC_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_5_3, VI2_HSYNC_N, SEL_VI2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_5_3, SCL1, SEL_IIC1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_5_3, VI2_HSYNC_N_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP5_5_3, INTC_EN0_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_5_3, SCL1_CIS, SEL_I2C1_0),
+       PINMUX_IPSR_DATA(IP5_9_6, EX_CS5_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_9_6, CAN0_RX, SEL_CAN0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_9_6, MSIOF1_RXD_B, SEL_SOF1_1),
+       PINMUX_IPSR_DATA(IP5_9_6, VI3_VSYNC_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_9_6, VI1_G2, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_9_6, VI1_G2_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP5_9_6, VI2_R4),
+       PINMUX_IPSR_MODSEL_DATA(IP5_9_6, SDA1, SEL_IIC1_0),
+       PINMUX_IPSR_DATA(IP5_9_6, INTC_EN1_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_9_6, SDA1_CIS, SEL_I2C1_0),
+       PINMUX_IPSR_DATA(IP5_12_10, BS_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_12_10, IETX, SEL_IEB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_12_10, HTX1_B, SEL_HSCIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP5_12_10, CAN1_TX, SEL_CAN1_0),
+       PINMUX_IPSR_DATA(IP5_12_10, DRACK0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_12_10, IETX_C, SEL_IEB_2),
+       PINMUX_IPSR_DATA(IP5_14_13, RD_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_14_13, CAN0_TX, SEL_CAN0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_14_13, SCIFA0_SCK_B, SEL_SCFA_1),
+       PINMUX_IPSR_DATA(IP5_17_15, RD_WR_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_17_15, VI1_G3, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_17_15, VI1_G3_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP5_17_15, VI2_R5),
+       PINMUX_IPSR_MODSEL_DATA(IP5_17_15, SCIFA0_RXD_B, SEL_SCFA_1),
+       PINMUX_IPSR_DATA(IP5_17_15, INTC_IRQ4_N),
+       PINMUX_IPSR_DATA(IP5_20_18, WE0_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_20_18, IECLK, SEL_IEB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_20_18, CAN_CLK, SEL_CANCLK_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_20_18, VI2_VSYNC_N, SEL_VI2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_20_18, SCIFA0_TXD_B, SEL_SCFA_1),
+       PINMUX_IPSR_MODSEL_DATA(IP5_20_18, VI2_VSYNC_N_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP5_23_21, WE1_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_23_21, IERX, SEL_IEB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_23_21, CAN1_RX, SEL_CAN1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_23_21, VI1_G4, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_23_21, VI1_G4_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP5_23_21, VI2_R6),
+       PINMUX_IPSR_MODSEL_DATA(IP5_23_21, SCIFA0_CTS_N_B, SEL_SCFA_1),
+       PINMUX_IPSR_MODSEL_DATA(IP5_23_21, IERX_C, SEL_IEB_2),
+       PINMUX_IPSR_DATA(IP5_26_24, EX_WAIT0),
+       PINMUX_IPSR_DATA(IP5_26_24, IRQ3),
+       PINMUX_IPSR_DATA(IP5_26_24, INTC_IRQ3_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_26_24, VI3_CLK, SEL_VI3_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_26_24, SCIFA0_RTS_N_B, SEL_SCFA_1),
+       PINMUX_IPSR_MODSEL_DATA(IP5_26_24, HRX0_B, SEL_HSCIF0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP5_26_24, MSIOF0_SCK_B, SEL_SOF0_1),
+       PINMUX_IPSR_DATA(IP5_29_27, DREQ0_N),
+       PINMUX_IPSR_MODSEL_DATA(IP5_29_27, VI1_HSYNC_N, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP5_29_27, VI1_HSYNC_N_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP5_29_27, VI2_R7),
+       PINMUX_IPSR_MODSEL_DATA(IP5_29_27, SSI_SCK78_C, SEL_SSI7_2),
+       PINMUX_IPSR_MODSEL_DATA(IP5_29_27, SSI_WS78_B, SEL_SSI7_1),
+
+       PINMUX_IPSR_DATA(IP6_2_0, DACK0),
+       PINMUX_IPSR_DATA(IP6_2_0, IRQ0),
+       PINMUX_IPSR_DATA(IP6_2_0, INTC_IRQ0_N),
+       PINMUX_IPSR_MODSEL_DATA(IP6_2_0, SSI_SCK6_B, SEL_SSI6_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_2_0, VI1_VSYNC_N, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP6_2_0, VI1_VSYNC_N_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_2_0, SSI_WS78_C, SEL_SSI7_2),
+       PINMUX_IPSR_DATA(IP6_5_3, DREQ1_N),
+       PINMUX_IPSR_MODSEL_DATA(IP6_5_3, VI1_CLKENB, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP6_5_3, VI1_CLKENB_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_5_3, SSI_SDATA7_C, SEL_SSI7_2),
+       PINMUX_IPSR_MODSEL_DATA(IP6_5_3, SSI_SCK78_B, SEL_SSI7_1),
+       PINMUX_IPSR_DATA(IP6_8_6, DACK1),
+       PINMUX_IPSR_DATA(IP6_8_6, IRQ1),
+       PINMUX_IPSR_DATA(IP6_8_6, INTC_IRQ1_N),
+       PINMUX_IPSR_MODSEL_DATA(IP6_8_6, SSI_WS6_B, SEL_SSI6_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_8_6, SSI_SDATA8_C, SEL_SSI8_2),
+       PINMUX_IPSR_DATA(IP6_10_9, DREQ2_N),
+       PINMUX_IPSR_MODSEL_DATA(IP6_10_9, HSCK1_B, SEL_HSCIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_10_9, HCTS0_N_B, SEL_HSCIF0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_10_9, MSIOF0_TXD_B, SEL_SOF0_1),
+       PINMUX_IPSR_DATA(IP6_13_11, DACK2),
+       PINMUX_IPSR_DATA(IP6_13_11, IRQ2),
+       PINMUX_IPSR_DATA(IP6_13_11, INTC_IRQ2_N),
+       PINMUX_IPSR_MODSEL_DATA(IP6_13_11, SSI_SDATA6_B, SEL_SSI6_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_13_11, HRTS0_N_B, SEL_HSCIF0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_13_11, MSIOF0_RXD_B, SEL_SOF0_1),
+       PINMUX_IPSR_DATA(IP6_16_14, ETH_CRS_DV),
+       PINMUX_IPSR_DATA(IP6_16_14, RMII_CRS_DV),
+       PINMUX_IPSR_MODSEL_DATA(IP6_16_14, STP_ISCLK_0_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_16_14, TS_SDEN0_D, SEL_TSIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP6_16_14, GLO_Q0_C, SEL_GPS_2),
+       PINMUX_IPSR_MODSEL_DATA(IP6_16_14, SCL2_E, SEL_IIC2_4),
+       PINMUX_IPSR_MODSEL_DATA(IP6_16_14, SCL2_CIS_E, SEL_I2C2_4),
+       PINMUX_IPSR_DATA(IP6_19_17, ETH_RX_ER),
+       PINMUX_IPSR_DATA(IP6_19_17, RMII_RX_ER),
+       PINMUX_IPSR_MODSEL_DATA(IP6_19_17, STP_ISD_0_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_19_17, TS_SPSYNC0_D, SEL_TSIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP6_19_17, GLO_Q1_C, SEL_GPS_2),
+       PINMUX_IPSR_MODSEL_DATA(IP6_19_17, SDA2_E, SEL_IIC2_4),
+       PINMUX_IPSR_MODSEL_DATA(IP6_19_17, SDA2_CIS_E, SEL_I2C2_4),
+       PINMUX_IPSR_DATA(IP6_22_20, ETH_RXD0),
+       PINMUX_IPSR_DATA(IP6_22_20, RMII_RXD0),
+       PINMUX_IPSR_MODSEL_DATA(IP6_22_20, STP_ISEN_0_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_22_20, TS_SDAT0_D, SEL_TSIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP6_22_20, GLO_I0_C, SEL_GPS_2),
+       PINMUX_IPSR_MODSEL_DATA(IP6_22_20, SCIFB1_SCK_G, SEL_SCIFB1_6),
+       PINMUX_IPSR_MODSEL_DATA(IP6_22_20, SCK1_E, SEL_SCIF1_4),
+       PINMUX_IPSR_DATA(IP6_25_23, ETH_RXD1),
+       PINMUX_IPSR_DATA(IP6_25_23, RMII_RXD1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_25_23, HRX0_E, SEL_HSCIF0_4),
+       PINMUX_IPSR_MODSEL_DATA(IP6_25_23, STP_ISSYNC_0_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_25_23, TS_SCK0_D, SEL_TSIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP6_25_23, GLO_I1_C, SEL_GPS_2),
+       PINMUX_IPSR_MODSEL_DATA(IP6_25_23, SCIFB1_RXD_G, SEL_SCIFB1_6),
+       PINMUX_IPSR_MODSEL_DATA(IP6_25_23, RX1_E, SEL_SCIF1_4),
+       PINMUX_IPSR_DATA(IP6_28_26, ETH_LINK),
+       PINMUX_IPSR_DATA(IP6_28_26, RMII_LINK),
+       PINMUX_IPSR_MODSEL_DATA(IP6_28_26, HTX0_E, SEL_HSCIF0_4),
+       PINMUX_IPSR_MODSEL_DATA(IP6_28_26, STP_IVCXO27_0_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_28_26, SCIFB1_TXD_G, SEL_SCIFB1_6),
+       PINMUX_IPSR_MODSEL_DATA(IP6_28_26, TX1_E, SEL_SCIF1_4),
+       PINMUX_IPSR_DATA(IP6_31_29, ETH_REF_CLK),
+       PINMUX_IPSR_DATA(IP6_31_29, RMII_REF_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP6_31_29, HCTS0_N_E, SEL_HSCIF0_4),
+       PINMUX_IPSR_MODSEL_DATA(IP6_31_29, STP_IVCXO27_1_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP6_31_29, HRX0_F, SEL_HSCIF0_5),
+
+       PINMUX_IPSR_DATA(IP7_2_0, ETH_MDIO),
+       PINMUX_IPSR_DATA(IP7_2_0, RMII_MDIO),
+       PINMUX_IPSR_MODSEL_DATA(IP7_2_0, HRTS0_N_E, SEL_HSCIF0_4),
+       PINMUX_IPSR_MODSEL_DATA(IP7_2_0, SIM0_D_C, SEL_SIM_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_2_0, HCTS0_N_F, SEL_HSCIF0_5),
+       PINMUX_IPSR_DATA(IP7_5_3, ETH_TXD1),
+       PINMUX_IPSR_DATA(IP7_5_3, RMII_TXD1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_5_3, HTX0_F, SEL_HSCIF0_4),
+       PINMUX_IPSR_MODSEL_DATA(IP7_5_3, BPFCLK_G, SEL_SIM_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_5_3, RDS_CLK_F, SEL_HSCIF0_5),
+       PINMUX_IPSR_DATA(IP7_7_6, ETH_TX_EN),
+       PINMUX_IPSR_DATA(IP7_7_6, RMII_TX_EN),
+       PINMUX_IPSR_MODSEL_DATA(IP7_7_6, SIM0_CLK_C, SEL_SIM_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_7_6, HRTS0_N_F, SEL_HSCIF0_5),
+       PINMUX_IPSR_DATA(IP7_9_8, ETH_MAGIC),
+       PINMUX_IPSR_DATA(IP7_9_8, RMII_MAGIC),
+       PINMUX_IPSR_MODSEL_DATA(IP7_9_8, SIM0_RST_C, SEL_SIM_2),
+       PINMUX_IPSR_DATA(IP7_12_10, ETH_TXD0),
+       PINMUX_IPSR_DATA(IP7_12_10, RMII_TXD0),
+       PINMUX_IPSR_MODSEL_DATA(IP7_12_10, STP_ISCLK_1_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_12_10, TS_SDEN1_C, SEL_TSIF1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_12_10, GLO_SCLK_C, SEL_GPS_2),
+       PINMUX_IPSR_DATA(IP7_15_13, ETH_MDC),
+       PINMUX_IPSR_DATA(IP7_15_13, RMII_MDC),
+       PINMUX_IPSR_MODSEL_DATA(IP7_15_13, STP_ISD_1_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_15_13, TS_SPSYNC1_C, SEL_TSIF1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_15_13, GLO_SDATA_C, SEL_GPS_2),
+       PINMUX_IPSR_DATA(IP7_18_16, PWM0),
+       PINMUX_IPSR_MODSEL_DATA(IP7_18_16, SCIFA2_SCK_C, SEL_SCIFA2_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_18_16, STP_ISEN_1_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_18_16, TS_SDAT1_C, SEL_TSIF1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_18_16, GLO_SS_C, SEL_GPS_2),
+       PINMUX_IPSR_DATA(IP7_21_19, PWM1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_21_19, SCIFA2_TXD_C, SEL_SCIFA2_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_21_19, STP_ISSYNC_1_B, SEL_SSP_1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_21_19, TS_SCK1_C, SEL_TSIF1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP7_21_19, GLO_RFON_C, SEL_GPS_2),
+       PINMUX_IPSR_DATA(IP7_21_19, PCMOE_N),
+       PINMUX_IPSR_DATA(IP7_24_22, PWM2),
+       PINMUX_IPSR_DATA(IP7_24_22, PWMFSW0),
+       PINMUX_IPSR_MODSEL_DATA(IP7_24_22, SCIFA2_RXD_C, SEL_SCIFA2_2),
+       PINMUX_IPSR_DATA(IP7_24_22, PCMWE_N),
+       PINMUX_IPSR_MODSEL_DATA(IP7_24_22, IECLK_C, SEL_IEB_2),
+       PINMUX_IPSR_DATA(IP7_26_25, DU1_DOTCLKIN),
+       PINMUX_IPSR_DATA(IP7_26_25, AUDIO_CLKC),
+       PINMUX_IPSR_DATA(IP7_26_25, AUDIO_CLKOUT_C),
+       PINMUX_IPSR_MODSEL_DATA(IP7_28_27, VI0_CLK, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP7_28_27, ATACS00_N),
+       PINMUX_IPSR_DATA(IP7_28_27, AVB_RXD1),
+       PINMUX_IPSR_DATA(IP7_28_27, MII_RXD1),
+       PINMUX_IPSR_MODSEL_DATA(IP7_30_29, VI0_DATA0_VI0_B0, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP7_30_29, ATACS10_N),
+       PINMUX_IPSR_DATA(IP7_30_29, AVB_RXD2),
+       PINMUX_IPSR_DATA(IP7_30_29, MII_RXD2),
+
+       PINMUX_IPSR_MODSEL_DATA(IP8_1_0, VI0_DATA1_VI0_B1, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_1_0, ATARD0_N),
+       PINMUX_IPSR_DATA(IP8_1_0, AVB_RXD3),
+       PINMUX_IPSR_DATA(IP8_1_0, MII_RXD3),
+       PINMUX_IPSR_MODSEL_DATA(IP8_3_2, VI0_DATA2_VI0_B2, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_3_2, ATAWR0_N),
+       PINMUX_IPSR_DATA(IP8_3_2, AVB_RXD4),
+       PINMUX_IPSR_MODSEL_DATA(IP8_5_4, VI0_DATA3_VI0_B3, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_5_4, ATADIR0_N),
+       PINMUX_IPSR_DATA(IP8_5_4, AVB_RXD5),
+       PINMUX_IPSR_MODSEL_DATA(IP8_7_6, VI0_DATA4_VI0_B4, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_7_6, ATAG0_N),
+       PINMUX_IPSR_DATA(IP8_7_6, AVB_RXD6),
+       PINMUX_IPSR_MODSEL_DATA(IP8_9_8, VI0_DATA5_VI0_B5, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_9_8, EX_WAIT1),
+       PINMUX_IPSR_DATA(IP8_9_8, AVB_RXD7),
+       PINMUX_IPSR_MODSEL_DATA(IP8_11_10, VI0_DATA6_VI0_B6, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_11_10, AVB_RX_ER),
+       PINMUX_IPSR_DATA(IP8_11_10, MII_RX_ER),
+       PINMUX_IPSR_MODSEL_DATA(IP8_13_12, VI0_DATA7_VI0_B7, SEL_VI0_0),
+       PINMUX_IPSR_DATA(IP8_13_12, AVB_RX_CLK),
+       PINMUX_IPSR_DATA(IP8_13_12, MII_RX_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP8_15_14, VI1_CLK, SEL_VI1_0),
+       PINMUX_IPSR_DATA(IP8_15_14, AVB_RX_DV),
+       PINMUX_IPSR_DATA(IP8_15_14, MII_RX_DV),
+       PINMUX_IPSR_MODSEL_DATA(IP8_17_16, VI1_DATA0_VI1_B0, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP8_17_16, SCIFA1_SCK_D, SEL_SCIFA1_3),
+       PINMUX_IPSR_DATA(IP8_17_16, AVB_CRS),
+       PINMUX_IPSR_DATA(IP8_17_16, MII_CRS),
+       PINMUX_IPSR_MODSEL_DATA(IP8_19_18, VI1_DATA1_VI1_B1, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP8_19_18, SCIFA1_RXD_D, SEL_SCIFA1_3),
+       PINMUX_IPSR_DATA(IP8_19_18, AVB_MDC),
+       PINMUX_IPSR_DATA(IP8_19_18, MII_MDC),
+       PINMUX_IPSR_MODSEL_DATA(IP8_21_20, VI1_DATA2_VI1_B2, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP8_21_20, SCIFA1_TXD_D, SEL_SCIFA1_3),
+       PINMUX_IPSR_DATA(IP8_21_20, AVB_MDIO),
+       PINMUX_IPSR_DATA(IP8_21_20, MII_MDIO),
+       PINMUX_IPSR_MODSEL_DATA(IP8_23_22, VI1_DATA3_VI1_B3, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP8_23_22, SCIFA1_CTS_N_D, SEL_SCIFA1_3),
+       PINMUX_IPSR_DATA(IP8_23_22, AVB_GTX_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP8_25_24, VI1_DATA4_VI1_B4, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP8_25_24, SCIFA1_RTS_N_D, SEL_SCIFA1_3),
+       PINMUX_IPSR_DATA(IP8_25_24, AVB_MAGIC),
+       PINMUX_IPSR_DATA(IP8_25_24, MII_MAGIC),
+       PINMUX_IPSR_MODSEL_DATA(IP8_26, VI1_DATA5_VI1_B5, SEL_VI1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP8_26, AVB_PHY_INT, SEL_SCIFA1_3),
+       PINMUX_IPSR_MODSEL_DATA(IP8_27, VI1_DATA6_VI1_B6, SEL_VI1_0),
+       PINMUX_IPSR_DATA(IP8_27, AVB_GTXREFCLK),
+       PINMUX_IPSR_DATA(IP8_28, SD0_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP8_28, VI1_DATA0_VI1_B0_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP8_30_29, SD0_CMD),
+       PINMUX_IPSR_MODSEL_DATA(IP8_30_29, SCIFB1_SCK_B, SEL_SCIFB1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP8_30_29, VI1_DATA1_VI1_B1_B, SEL_VI1_1),
+
+       PINMUX_IPSR_DATA(IP9_1_0, SD0_DAT0),
+       PINMUX_IPSR_MODSEL_DATA(IP9_1_0, SCIFB1_RXD_B, SEL_SCIFB1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_1_0, VI1_DATA2_VI1_B2_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP9_3_2, SD0_DAT1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_3_2, SCIFB1_TXD_B, SEL_SCIFB1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_3_2, VI1_DATA3_VI1_B3_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP9_5_4, SD0_DAT2),
+       PINMUX_IPSR_MODSEL_DATA(IP9_5_4, SCIFB1_CTS_N_B, SEL_SCIFB1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_5_4, VI1_DATA4_VI1_B4_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP9_7_6, SD0_DAT3),
+       PINMUX_IPSR_MODSEL_DATA(IP9_7_6, SCIFB1_RTS_N_B, SEL_SCIFB1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_7_6, VI1_DATA5_VI1_B5_B, SEL_VI1_1),
+       PINMUX_IPSR_DATA(IP9_11_8, SD0_CD),
+       PINMUX_IPSR_DATA(IP9_11_8, MMC0_D6),
+       PINMUX_IPSR_MODSEL_DATA(IP9_11_8, TS_SDEN0_B, SEL_TSIF0_1),
+       PINMUX_IPSR_DATA(IP9_11_8, USB0_EXTP),
+       PINMUX_IPSR_MODSEL_DATA(IP9_11_8, GLO_SCLK, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP9_11_8, VI1_DATA6_VI1_B6_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_11_8, SCL1_B, SEL_IIC1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_11_8, SCL1_CIS_B, SEL_I2C1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_11_8, VI2_DATA6_VI2_B6_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP9_15_12, SD0_WP),
+       PINMUX_IPSR_DATA(IP9_15_12, MMC0_D7),
+       PINMUX_IPSR_MODSEL_DATA(IP9_15_12, TS_SPSYNC0_B, SEL_TSIF0_1),
+       PINMUX_IPSR_DATA(IP9_15_12, USB0_IDIN),
+       PINMUX_IPSR_MODSEL_DATA(IP9_15_12, GLO_SDATA, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP9_15_12, VI1_DATA7_VI1_B7_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_15_12, SDA1_B, SEL_IIC1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_15_12, SDA1_CIS_B, SEL_I2C1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_15_12, VI2_DATA7_VI2_B7_B, SEL_VI2_1),
+       PINMUX_IPSR_DATA(IP9_17_16, SD1_CLK),
+       PINMUX_IPSR_DATA(IP9_17_16, AVB_TX_EN),
+       PINMUX_IPSR_DATA(IP9_17_16, MII_TX_EN),
+       PINMUX_IPSR_DATA(IP9_19_18, SD1_CMD),
+       PINMUX_IPSR_DATA(IP9_19_18, AVB_TX_ER),
+       PINMUX_IPSR_DATA(IP9_19_18, MII_TX_ER),
+       PINMUX_IPSR_MODSEL_DATA(IP9_19_18, SCIFB0_SCK_B, SEL_SCIFB_1),
+       PINMUX_IPSR_DATA(IP9_21_20, SD1_DAT0),
+       PINMUX_IPSR_DATA(IP9_21_20, AVB_TX_CLK),
+       PINMUX_IPSR_DATA(IP9_21_20, MII_TX_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP9_21_20, SCIFB0_RXD_B, SEL_SCIFB_1),
+       PINMUX_IPSR_DATA(IP9_23_22, SD1_DAT1),
+       PINMUX_IPSR_DATA(IP9_23_22, AVB_LINK),
+       PINMUX_IPSR_DATA(IP9_23_22, MII_LINK),
+       PINMUX_IPSR_MODSEL_DATA(IP9_23_22, SCIFB0_TXD_B, SEL_SCIFB_1),
+       PINMUX_IPSR_DATA(IP9_25_24, SD1_DAT2),
+       PINMUX_IPSR_DATA(IP9_25_24, AVB_COL),
+       PINMUX_IPSR_DATA(IP9_25_24, MII_COL),
+       PINMUX_IPSR_MODSEL_DATA(IP9_25_24, SCIFB0_CTS_N_B, SEL_SCIFB_1),
+       PINMUX_IPSR_DATA(IP9_27_26, SD1_DAT3),
+       PINMUX_IPSR_DATA(IP9_27_26, AVB_RXD0),
+       PINMUX_IPSR_DATA(IP9_27_26, MII_RXD0),
+       PINMUX_IPSR_MODSEL_DATA(IP9_27_26, SCIFB0_RTS_N_B, SEL_SCIFB_1),
+       PINMUX_IPSR_DATA(IP9_31_28, SD1_CD),
+       PINMUX_IPSR_DATA(IP9_31_28, MMC1_D6),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, TS_SDEN1, SEL_TSIF1_0),
+       PINMUX_IPSR_DATA(IP9_31_28, USB1_EXTP),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, GLO_SS, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, VI0_CLK_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, SCL2_D, SEL_IIC2_3),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, SCL2_CIS_D, SEL_I2C2_3),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, SIM0_CLK_B, SEL_SIM_1),
+       PINMUX_IPSR_MODSEL_DATA(IP9_31_28, VI3_CLK_B, SEL_VI3_1),
+
+       PINMUX_IPSR_DATA(IP10_3_0, SD1_WP),
+       PINMUX_IPSR_DATA(IP10_3_0, MMC1_D7),
+       PINMUX_IPSR_MODSEL_DATA(IP10_3_0, TS_SPSYNC1, SEL_TSIF1_0),
+       PINMUX_IPSR_DATA(IP10_3_0, USB1_IDIN),
+       PINMUX_IPSR_MODSEL_DATA(IP10_3_0, GLO_RFON, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_3_0, VI1_CLK_B, SEL_VI1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_3_0, SDA2_D, SEL_IIC2_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_3_0, SDA2_CIS_D, SEL_I2C2_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_3_0, SIM0_D_B, SEL_SIM_1),
+       PINMUX_IPSR_DATA(IP10_6_4, SD2_CLK),
+       PINMUX_IPSR_DATA(IP10_6_4, MMC0_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP10_6_4, SIM0_CLK, SEL_SIM_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_6_4, VI0_DATA0_VI0_B0_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_6_4, TS_SDEN0_C, SEL_TSIF0_2),
+       PINMUX_IPSR_MODSEL_DATA(IP10_6_4, GLO_SCLK_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_6_4, VI3_DATA0_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP10_10_7, SD2_CMD),
+       PINMUX_IPSR_DATA(IP10_10_7, MMC0_CMD),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, SIM0_D, SEL_SIM_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, VI0_DATA1_VI0_B1_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, SCIFB1_SCK_E, SEL_SCIFB1_4),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, SCK1_D, SEL_SCIF1_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, TS_SPSYNC0_C, SEL_TSIF0_2),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, GLO_SDATA_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_10_7, VI3_DATA1_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP10_14_11, SD2_DAT0),
+       PINMUX_IPSR_DATA(IP10_14_11, MMC0_D0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, FMCLK_B, SEL_FM_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, VI0_DATA2_VI0_B2_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, SCIFB1_RXD_E, SEL_SCIFB1_4),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, RX1_D, SEL_SCIF1_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, TS_SDAT0_C, SEL_TSIF0_2),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, GLO_SS_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_14_11, VI3_DATA2_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP10_18_15, SD2_DAT1),
+       PINMUX_IPSR_DATA(IP10_18_15, MMC0_D1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, FMIN_B, SEL_FM_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, RDS_DATA, SEL_RDS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, VI0_DATA3_VI0_B3_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, SCIFB1_TXD_E, SEL_SCIFB1_4),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, TX1_D, SEL_SCIF1_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, TS_SCK0_C, SEL_TSIF0_2),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, GLO_RFON_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_18_15, VI3_DATA3_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP10_22_19, SD2_DAT2),
+       PINMUX_IPSR_DATA(IP10_22_19, MMC0_D2),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, BPFCLK_B, SEL_FM_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, RDS_CLK, SEL_RDS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, VI0_DATA4_VI0_B4_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, HRX0_D, SEL_HSCIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, TS_SDEN1_B, SEL_TSIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, GLO_Q0_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_22_19, VI3_DATA4_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP10_25_23, SD2_DAT3),
+       PINMUX_IPSR_DATA(IP10_25_23, MMC0_D3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_25_23, SIM0_RST, SEL_SIM_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_25_23, VI0_DATA5_VI0_B5_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_25_23, HTX0_D, SEL_HSCIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_25_23, TS_SPSYNC1_B, SEL_TSIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_25_23, GLO_Q1_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_25_23, VI3_DATA5_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP10_29_26, SD2_CD),
+       PINMUX_IPSR_DATA(IP10_29_26, MMC0_D4),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, TS_SDAT0_B, SEL_TSIF0_1),
+       PINMUX_IPSR_DATA(IP10_29_26, USB2_EXTP),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, GLO_I0, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, VI0_DATA6_VI0_B6_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, HCTS0_N_D, SEL_HSCIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, TS_SDAT1_B, SEL_TSIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, GLO_I0_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP10_29_26, VI3_DATA6_B, SEL_VI3_1),
+
+       PINMUX_IPSR_DATA(IP11_3_0, SD2_WP),
+       PINMUX_IPSR_DATA(IP11_3_0, MMC0_D5),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, TS_SCK0_B, SEL_TSIF0_1),
+       PINMUX_IPSR_DATA(IP11_3_0, USB2_IDIN),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, GLO_I1, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, VI0_DATA7_VI0_B7_B, SEL_VI0_1),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, HRTS0_N_D, SEL_HSCIF0_3),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, TS_SCK1_B, SEL_TSIF1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, GLO_I1_B, SEL_GPS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP11_3_0, VI3_DATA7_B, SEL_VI3_1),
+       PINMUX_IPSR_DATA(IP11_4, SD3_CLK),
+       PINMUX_IPSR_DATA(IP11_4, MMC1_CLK),
+       PINMUX_IPSR_DATA(IP11_6_5, SD3_CMD),
+       PINMUX_IPSR_DATA(IP11_6_5, MMC1_CMD),
+       PINMUX_IPSR_DATA(IP11_6_5, MTS_N),
+       PINMUX_IPSR_DATA(IP11_8_7, SD3_DAT0),
+       PINMUX_IPSR_DATA(IP11_8_7, MMC1_D0),
+       PINMUX_IPSR_DATA(IP11_8_7, STM_N),
+       PINMUX_IPSR_DATA(IP11_10_9, SD3_DAT1),
+       PINMUX_IPSR_DATA(IP11_10_9, MMC1_D1),
+       PINMUX_IPSR_DATA(IP11_10_9, MDATA),
+       PINMUX_IPSR_DATA(IP11_12_11, SD3_DAT2),
+       PINMUX_IPSR_DATA(IP11_12_11, MMC1_D2),
+       PINMUX_IPSR_DATA(IP11_12_11, SDATA),
+       PINMUX_IPSR_DATA(IP11_14_13, SD3_DAT3),
+       PINMUX_IPSR_DATA(IP11_14_13, MMC1_D3),
+       PINMUX_IPSR_DATA(IP11_14_13, SCKZ),
+       PINMUX_IPSR_DATA(IP11_17_15, SD3_CD),
+       PINMUX_IPSR_DATA(IP11_17_15, MMC1_D4),
+       PINMUX_IPSR_MODSEL_DATA(IP11_17_15, TS_SDAT1, SEL_TSIF1_0),
+       PINMUX_IPSR_DATA(IP11_17_15, VSP),
+       PINMUX_IPSR_MODSEL_DATA(IP11_17_15, GLO_Q0, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP11_17_15, SIM0_RST_B, SEL_SIM_1),
+       PINMUX_IPSR_DATA(IP11_21_18, SD3_WP),
+       PINMUX_IPSR_DATA(IP11_21_18, MMC1_D5),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, TS_SCK1, SEL_TSIF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, GLO_Q1, SEL_GPS_0),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, FMIN_C, SEL_FM_2),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, RDS_DATA_B, SEL_RDS_1),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, FMIN_E, SEL_FM_4),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, RDS_DATA_D, SEL_RDS_3),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, FMIN_F, SEL_FM_5),
+       PINMUX_IPSR_MODSEL_DATA(IP11_21_18, RDS_DATA_E, SEL_RDS_4),
+       PINMUX_IPSR_DATA(IP11_23_22, MLB_CLK),
+       PINMUX_IPSR_MODSEL_DATA(IP11_23_22, SCL2_B, SEL_IIC2_1),
+       PINMUX_IPSR_MODSEL_DATA(IP11_23_22, SCL2_CIS_B, SEL_I2C2_1),
+       PINMUX_IPSR_DATA(IP11_26_24, MLB_SIG),
+       PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SCIFB1_RXD_D, SEL_SCIFB1_3),
+       PINMUX_IPSR_MODSEL_DATA(IP11_26_24, RX1_C, SEL_SCIF1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SDA2_B, SEL_IIC2_1),
+       PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SDA2_CIS_B, SEL_I2C2_1),
+       PINMUX_IPSR_DATA(IP11_29_27, MLB_DAT),
+       PINMUX_IPSR_DATA(IP11_29_27, SPV_EVEN),
+       PINMUX_IPSR_MODSEL_DATA(IP11_29_27, SCIFB1_TXD_D, SEL_SCIFB1_3),
+       PINMUX_IPSR_MODSEL_DATA(IP11_29_27, TX1_C, SEL_SCIF1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP11_29_27, BPFCLK_C, SEL_FM_2),
+       PINMUX_IPSR_MODSEL_DATA(IP11_29_27, RDS_CLK_B, SEL_RDS_1),
+       PINMUX_IPSR_DATA(IP11_31_30, SSI_SCK0129),
+       PINMUX_IPSR_MODSEL_DATA(IP11_31_30, CAN_CLK_B, SEL_CANCLK_1),
+       PINMUX_IPSR_DATA(IP11_31_30, MOUT0),
+
+       PINMUX_IPSR_DATA(IP12_1_0, SSI_WS0129),
+       PINMUX_IPSR_MODSEL_DATA(IP12_1_0, CAN0_TX_B, SEL_CAN0_1),
+       PINMUX_IPSR_DATA(IP12_1_0, MOUT1),
+       PINMUX_IPSR_DATA(IP12_3_2, SSI_SDATA0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_3_2, CAN0_RX_B, SEL_CAN0_1),
+       PINMUX_IPSR_DATA(IP12_3_2, MOUT2),
+       PINMUX_IPSR_DATA(IP12_5_4, SSI_SDATA1),
+       PINMUX_IPSR_MODSEL_DATA(IP12_5_4, CAN1_TX_B, SEL_CAN1_1),
+       PINMUX_IPSR_DATA(IP12_5_4, MOUT5),
+       PINMUX_IPSR_DATA(IP12_7_6, SSI_SDATA2),
+       PINMUX_IPSR_MODSEL_DATA(IP12_7_6, CAN1_RX_B, SEL_CAN1_1),
+       PINMUX_IPSR_MODSEL_DATA(IP12_7_6, CAN1_TX_B, SEL_CAN1_1),
+       PINMUX_IPSR_DATA(IP12_7_6, MOUT6),
+       PINMUX_IPSR_DATA(IP12_10_8, SSI_SCK34),
+       PINMUX_IPSR_DATA(IP12_10_8, STP_OPWM_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_10_8, SCIFB0_SCK, SEL_SCIFB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_10_8, MSIOF1_SCK, SEL_SOF1_0),
+       PINMUX_IPSR_DATA(IP12_10_8, CAN_DEBUG_HW_TRIGGER),
+       PINMUX_IPSR_DATA(IP12_13_11, SSI_WS34),
+       PINMUX_IPSR_MODSEL_DATA(IP12_13_11, STP_IVCXO27_0, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_13_11, SCIFB0_RXD, SEL_SCIFB_0),
+       PINMUX_IPSR_DATA(IP12_13_11, MSIOF1_SYNC),
+       PINMUX_IPSR_DATA(IP12_13_11, CAN_STEP0),
+       PINMUX_IPSR_DATA(IP12_16_14, SSI_SDATA3),
+       PINMUX_IPSR_MODSEL_DATA(IP12_16_14, STP_ISCLK_0, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_16_14, SCIFB0_TXD, SEL_SCIFB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_16_14, MSIOF1_SS1, SEL_SOF1_0),
+       PINMUX_IPSR_DATA(IP12_16_14, CAN_TXCLK),
+       PINMUX_IPSR_DATA(IP12_19_17, SSI_SCK4),
+       PINMUX_IPSR_MODSEL_DATA(IP12_19_17, STP_ISD_0, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_19_17, SCIFB0_CTS_N, SEL_SCIFB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_19_17, MSIOF1_SS2, SEL_SOF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_19_17, SSI_SCK5_C, SEL_SSI5_2),
+       PINMUX_IPSR_DATA(IP12_19_17, CAN_DEBUGOUT0),
+       PINMUX_IPSR_DATA(IP12_22_20, SSI_WS4),
+       PINMUX_IPSR_MODSEL_DATA(IP12_22_20, STP_ISEN_0, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_22_20, SCIFB0_RTS_N, SEL_SCIFB_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_22_20, MSIOF1_TXD, SEL_SOF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_22_20, SSI_WS5_C, SEL_SSI5_2),
+       PINMUX_IPSR_DATA(IP12_22_20, CAN_DEBUGOUT1),
+       PINMUX_IPSR_DATA(IP12_24_23, SSI_SDATA4),
+       PINMUX_IPSR_MODSEL_DATA(IP12_24_23, STP_ISSYNC_0, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_24_23, MSIOF1_RXD, SEL_SOF1_0),
+       PINMUX_IPSR_DATA(IP12_24_23, CAN_DEBUGOUT2),
+       PINMUX_IPSR_MODSEL_DATA(IP12_27_25, SSI_SCK5, SEL_SSI5_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_27_25, SCIFB1_SCK, SEL_SCIFB1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_27_25, IERX_B, SEL_IEB_1),
+       PINMUX_IPSR_DATA(IP12_27_25, DU2_EXHSYNC_DU2_HSYNC),
+       PINMUX_IPSR_DATA(IP12_27_25, QSTH_QHS),
+       PINMUX_IPSR_DATA(IP12_27_25, CAN_DEBUGOUT3),
+       PINMUX_IPSR_MODSEL_DATA(IP12_30_28, SSI_WS5, SEL_SSI5_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_30_28, SCIFB1_RXD, SEL_SCIFB1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP12_30_28, IECLK_B, SEL_IEB_1),
+       PINMUX_IPSR_DATA(IP12_30_28, DU2_EXVSYNC_DU2_VSYNC),
+       PINMUX_IPSR_DATA(IP12_30_28, QSTB_QHE),
+       PINMUX_IPSR_DATA(IP12_30_28, CAN_DEBUGOUT4),
+
+       PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SSI_SDATA5, SEL_SSI5_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SCIFB1_TXD, SEL_SCIFB1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_2_0, IETX_B, SEL_IEB_1),
+       PINMUX_IPSR_DATA(IP13_2_0, DU2_DR2),
+       PINMUX_IPSR_DATA(IP13_2_0, LCDOUT2),
+       PINMUX_IPSR_DATA(IP13_2_0, CAN_DEBUGOUT5),
+       PINMUX_IPSR_MODSEL_DATA(IP13_6_3, SSI_SCK6, SEL_SSI6_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_6_3, SCIFB1_CTS_N, SEL_SCIFB1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_6_3, BPFCLK_D, SEL_FM_3),
+       PINMUX_IPSR_MODSEL_DATA(IP13_6_3, RDS_CLK_C, SEL_RDS_2),
+       PINMUX_IPSR_DATA(IP13_6_3, DU2_DR3),
+       PINMUX_IPSR_DATA(IP13_6_3, LCDOUT3),
+       PINMUX_IPSR_DATA(IP13_6_3, CAN_DEBUGOUT6),
+       PINMUX_IPSR_MODSEL_DATA(IP13_6_3, BPFCLK_F, SEL_FM_5),
+       PINMUX_IPSR_MODSEL_DATA(IP13_6_3, RDS_CLK_E, SEL_RDS_4),
+       PINMUX_IPSR_MODSEL_DATA(IP13_9_7, SSI_WS6, SEL_SSI6_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_9_7, SCIFB1_RTS_N, SEL_SCIFB1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_9_7, CAN0_TX_D, SEL_CAN0_3),
+       PINMUX_IPSR_DATA(IP13_9_7, DU2_DR4),
+       PINMUX_IPSR_DATA(IP13_9_7, LCDOUT4),
+       PINMUX_IPSR_DATA(IP13_9_7, CAN_DEBUGOUT7),
+       PINMUX_IPSR_MODSEL_DATA(IP13_12_10, SSI_SDATA6, SEL_SSI6_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_12_10, FMIN_D, SEL_FM_3),
+       PINMUX_IPSR_MODSEL_DATA(IP13_12_10, RDS_DATA_C, SEL_RDS_2),
+       PINMUX_IPSR_DATA(IP13_12_10, DU2_DR5),
+       PINMUX_IPSR_DATA(IP13_12_10, LCDOUT5),
+       PINMUX_IPSR_DATA(IP13_12_10, CAN_DEBUGOUT8),
+       PINMUX_IPSR_MODSEL_DATA(IP13_15_13, SSI_SCK78, SEL_SSI7_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_15_13, STP_IVCXO27_1, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_15_13, SCK1, SEL_SCIF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_15_13, SCIFA1_SCK, SEL_SCIFA1_0),
+       PINMUX_IPSR_DATA(IP13_15_13, DU2_DR6),
+       PINMUX_IPSR_DATA(IP13_15_13, LCDOUT6),
+       PINMUX_IPSR_DATA(IP13_15_13, CAN_DEBUGOUT9),
+       PINMUX_IPSR_MODSEL_DATA(IP13_18_16, SSI_WS78, SEL_SSI7_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_18_16, STP_ISCLK_1, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_18_16, SCIFB2_SCK, SEL_SCIFB2_0),
+       PINMUX_IPSR_DATA(IP13_18_16, SCIFA2_CTS_N),
+       PINMUX_IPSR_DATA(IP13_18_16, DU2_DR7),
+       PINMUX_IPSR_DATA(IP13_18_16, LCDOUT7),
+       PINMUX_IPSR_DATA(IP13_18_16, CAN_DEBUGOUT10),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, SSI_SDATA7, SEL_SSI7_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, STP_ISD_1, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, SCIFB2_RXD, SEL_SCIFB2_0),
+       PINMUX_IPSR_DATA(IP13_22_19, SCIFA2_RTS_N),
+       PINMUX_IPSR_DATA(IP13_22_19, TCLK2),
+       PINMUX_IPSR_DATA(IP13_22_19, QSTVA_QVS),
+       PINMUX_IPSR_DATA(IP13_22_19, CAN_DEBUGOUT11),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, BPFCLK_E, SEL_FM_4),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, RDS_CLK_D, SEL_RDS_3),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, SSI_SDATA7_B, SEL_SSI7_1),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, FMIN_G, SEL_FM_6),
+       PINMUX_IPSR_MODSEL_DATA(IP13_22_19, RDS_DATA_F, SEL_RDS_5),
+       PINMUX_IPSR_MODSEL_DATA(IP13_25_23, SSI_SDATA8, SEL_SSI8_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_25_23, STP_ISEN_1, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_25_23, SCIFB2_TXD, SEL_SCIFB2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_25_23, CAN0_TX_C, SEL_CAN0_2),
+       PINMUX_IPSR_DATA(IP13_25_23, CAN_DEBUGOUT12),
+       PINMUX_IPSR_MODSEL_DATA(IP13_25_23, SSI_SDATA8_B, SEL_SSI8_1),
+       PINMUX_IPSR_DATA(IP13_28_26, SSI_SDATA9),
+       PINMUX_IPSR_MODSEL_DATA(IP13_28_26, STP_ISSYNC_1, SEL_SSP_0),
+       PINMUX_IPSR_MODSEL_DATA(IP13_28_26, SCIFB2_CTS_N, SEL_SCIFB2_0),
+       PINMUX_IPSR_DATA(IP13_28_26, SSI_WS1),
+       PINMUX_IPSR_MODSEL_DATA(IP13_28_26, SSI_SDATA5_C, SEL_SSI5_2),
+       PINMUX_IPSR_DATA(IP13_28_26, CAN_DEBUGOUT13),
+       PINMUX_IPSR_DATA(IP13_30_29, AUDIO_CLKA),
+       PINMUX_IPSR_MODSEL_DATA(IP13_30_29, SCIFB2_RTS_N, SEL_SCIFB2_0),
+       PINMUX_IPSR_DATA(IP13_30_29, CAN_DEBUGOUT14),
+
+       PINMUX_IPSR_DATA(IP14_2_0, AUDIO_CLKB),
+       PINMUX_IPSR_MODSEL_DATA(IP14_2_0, SCIF_CLK, SEL_SCIFCLK_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_2_0, CAN0_RX_D, SEL_CAN0_3),
+       PINMUX_IPSR_DATA(IP14_2_0, DVC_MUTE),
+       PINMUX_IPSR_MODSEL_DATA(IP14_2_0, CAN0_RX_C, SEL_CAN0_2),
+       PINMUX_IPSR_DATA(IP14_2_0, CAN_DEBUGOUT15),
+       PINMUX_IPSR_DATA(IP14_2_0, REMOCON),
+       PINMUX_IPSR_MODSEL_DATA(IP14_5_3, SCIFA0_SCK, SEL_SCFA_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_5_3, HSCK1, SEL_HSCIF1_0),
+       PINMUX_IPSR_DATA(IP14_5_3, SCK0),
+       PINMUX_IPSR_DATA(IP14_5_3, MSIOF3_SS2),
+       PINMUX_IPSR_DATA(IP14_5_3, DU2_DG2),
+       PINMUX_IPSR_DATA(IP14_5_3, LCDOUT10),
+       PINMUX_IPSR_MODSEL_DATA(IP14_5_3, SDA1_C, SEL_IIC1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP14_5_3, SDA1_CIS_C, SEL_I2C1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP14_8_6, SCIFA0_RXD, SEL_SCFA_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_8_6, HRX1, SEL_HSCIF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_8_6, RX0, SEL_SCIF0_0),
+       PINMUX_IPSR_DATA(IP14_8_6, DU2_DR0),
+       PINMUX_IPSR_DATA(IP14_8_6, LCDOUT0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_11_9, SCIFA0_TXD, SEL_SCFA_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_11_9, HTX1, SEL_HSCIF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_11_9, TX0, SEL_SCIF0_0),
+       PINMUX_IPSR_DATA(IP14_11_9, DU2_DR1),
+       PINMUX_IPSR_DATA(IP14_11_9, LCDOUT1),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, SCIFA0_CTS_N, SEL_SCFA_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, HCTS1_N, SEL_HSCIF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, CTS0_N, SEL_SCIF0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, MSIOF3_SYNC, SEL_SOF3_0),
+       PINMUX_IPSR_DATA(IP14_15_12, DU2_DG3),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, LCDOUT11, SEL_HSCIF1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, PWM0_B, SEL_SCIF0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, SCL1_C, SEL_IIC1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP14_15_12, SCL1_CIS_C, SEL_I2C1_2),
+       PINMUX_IPSR_MODSEL_DATA(IP14_18_16, SCIFA0_RTS_N, SEL_SCFA_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_18_16, HRTS1_N, SEL_HSCIF1_0),
+       PINMUX_IPSR_DATA(IP14_18_16, RTS0_N_TANS),
+       PINMUX_IPSR_DATA(IP14_18_16, MSIOF3_SS1),
+       PINMUX_IPSR_DATA(IP14_18_16, DU2_DG0),
+       PINMUX_IPSR_DATA(IP14_18_16, LCDOUT8),
+       PINMUX_IPSR_DATA(IP14_18_16, PWM1_B),
+       PINMUX_IPSR_MODSEL_DATA(IP14_21_19, SCIFA1_RXD, SEL_SCIFA1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_21_19, AD_DI, SEL_ADI_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_21_19, RX1, SEL_SCIF1_0),
+       PINMUX_IPSR_DATA(IP14_21_19, DU2_EXODDF_DU2_ODDF_DISP_CDE),
+       PINMUX_IPSR_DATA(IP14_21_19, QCPV_QDE),
+       PINMUX_IPSR_MODSEL_DATA(IP14_24_22, SCIFA1_TXD, SEL_SCIFA1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_24_22, AD_DO, SEL_ADI_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_24_22, TX1, SEL_SCIF1_0),
+       PINMUX_IPSR_DATA(IP14_24_22, DU2_DG1),
+       PINMUX_IPSR_DATA(IP14_24_22, LCDOUT9),
+       PINMUX_IPSR_MODSEL_DATA(IP14_27_25, SCIFA1_CTS_N, SEL_SCIFA1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_27_25, AD_CLK, SEL_ADI_0),
+       PINMUX_IPSR_DATA(IP14_27_25, CTS1_N),
+       PINMUX_IPSR_MODSEL_DATA(IP14_27_25, MSIOF3_RXD, SEL_SOF3_0),
+       PINMUX_IPSR_DATA(IP14_27_25, DU0_DOTCLKOUT),
+       PINMUX_IPSR_DATA(IP14_27_25, QCLK),
+       PINMUX_IPSR_MODSEL_DATA(IP14_30_28, SCIFA1_RTS_N, SEL_SCIFA1_0),
+       PINMUX_IPSR_MODSEL_DATA(IP14_30_28, AD_NCS_N, SEL_ADI_0),
+       PINMUX_IPSR_DATA(IP14_30_28, RTS1_N_TANS),
+       PINMUX_IPSR_MODSEL_DATA(IP14_30_28, MSIOF3_TXD, SEL_SOF3_0),
+       PINMUX_IPSR_DATA(IP14_30_28, DU1_DOTCLKOUT),
+       PINMUX_IPSR_DATA(IP14_30_28, QSTVB_QVE),
+       PINMUX_IPSR_MODSEL_DATA(IP14_30_28, HRTS0_N_C, SEL_HSCIF0_2),
+
+       PINMUX_IPSR_MODSEL_DATA(IP15_2_0, SCIFA2_SCK, SEL_SCIFA2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_2_0, FMCLK, SEL_FM_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_2_0, MSIOF3_SCK, SEL_SOF3_0),
+       PINMUX_IPSR_DATA(IP15_2_0, DU2_DG7),
+       PINMUX_IPSR_DATA(IP15_2_0, LCDOUT15),
+       PINMUX_IPSR_MODSEL_DATA(IP15_2_0, SCIF_CLK_B, SEL_SCIFCLK_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_5_3, SCIFA2_RXD, SEL_SCIFA2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_5_3, FMIN, SEL_FM_0),
+       PINMUX_IPSR_DATA(IP15_5_3, DU2_DB0),
+       PINMUX_IPSR_DATA(IP15_5_3, LCDOUT16),
+       PINMUX_IPSR_MODSEL_DATA(IP15_5_3, SCL2, SEL_IIC2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_5_3, SCL2_CIS, SEL_I2C2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_8_6, SCIFA2_TXD, SEL_SCIFA2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_8_6, BPFCLK, SEL_FM_0),
+       PINMUX_IPSR_DATA(IP15_8_6, DU2_DB1),
+       PINMUX_IPSR_DATA(IP15_8_6, LCDOUT17),
+       PINMUX_IPSR_MODSEL_DATA(IP15_8_6, SDA2, SEL_IIC2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_8_6, SDA2_CIS, SEL_I2C2_0),
+       PINMUX_IPSR_DATA(IP15_11_9, HSCK0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_11_9, TS_SDEN0, SEL_TSIF0_0),
+       PINMUX_IPSR_DATA(IP15_11_9, DU2_DG4),
+       PINMUX_IPSR_DATA(IP15_11_9, LCDOUT12),
+       PINMUX_IPSR_MODSEL_DATA(IP15_11_9, HCTS0_N_C, SEL_IIC2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_11_9, SDA2_CIS, SEL_I2C2_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_13_12, HRX0, SEL_HSCIF0_0),
+       PINMUX_IPSR_DATA(IP15_13_12, DU2_DB2),
+       PINMUX_IPSR_DATA(IP15_13_12, LCDOUT18),
+       PINMUX_IPSR_MODSEL_DATA(IP15_15_14, HTX0, SEL_HSCIF0_0),
+       PINMUX_IPSR_DATA(IP15_15_14, DU2_DB3),
+       PINMUX_IPSR_DATA(IP15_15_14, LCDOUT19),
+       PINMUX_IPSR_MODSEL_DATA(IP15_17_16, HCTS0_N, SEL_HSCIF0_0),
+       PINMUX_IPSR_DATA(IP15_17_16, SSI_SCK9),
+       PINMUX_IPSR_DATA(IP15_17_16, DU2_DB4),
+       PINMUX_IPSR_DATA(IP15_17_16, LCDOUT20),
+       PINMUX_IPSR_MODSEL_DATA(IP15_19_18, HRTS0_N, SEL_HSCIF0_0),
+       PINMUX_IPSR_DATA(IP15_19_18, SSI_WS9),
+       PINMUX_IPSR_DATA(IP15_19_18, DU2_DB5),
+       PINMUX_IPSR_DATA(IP15_19_18, LCDOUT21),
+       PINMUX_IPSR_MODSEL_DATA(IP15_22_20, MSIOF0_SCK, SEL_SOF0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP15_22_20, TS_SDAT0, SEL_TSIF0_0),
+       PINMUX_IPSR_DATA(IP15_22_20, ADICLK),
+       PINMUX_IPSR_DATA(IP15_22_20, DU2_DB6),
+       PINMUX_IPSR_DATA(IP15_22_20, LCDOUT22),
+       PINMUX_IPSR_DATA(IP15_25_23, MSIOF0_SYNC),
+       PINMUX_IPSR_MODSEL_DATA(IP15_25_23, TS_SCK0, SEL_TSIF0_0),
+       PINMUX_IPSR_DATA(IP15_25_23, SSI_SCK2),
+       PINMUX_IPSR_DATA(IP15_25_23, ADIDATA),
+       PINMUX_IPSR_DATA(IP15_25_23, DU2_DB7),
+       PINMUX_IPSR_DATA(IP15_25_23, LCDOUT23),
+       PINMUX_IPSR_MODSEL_DATA(IP15_25_23, SCIFA2_RXD_B, SEL_SCIFA2_1),
+       PINMUX_IPSR_MODSEL_DATA(IP15_27_26, MSIOF0_SS1, SEL_SOF0_0),
+       PINMUX_IPSR_DATA(IP15_27_26, ADICHS0),
+       PINMUX_IPSR_DATA(IP15_27_26, DU2_DG5),
+       PINMUX_IPSR_DATA(IP15_27_26, LCDOUT13),
+       PINMUX_IPSR_MODSEL_DATA(IP15_29_28, MSIOF0_TXD, SEL_SOF0_0),
+       PINMUX_IPSR_DATA(IP15_29_28, ADICHS1),
+       PINMUX_IPSR_DATA(IP15_29_28, DU2_DG6),
+       PINMUX_IPSR_DATA(IP15_29_28, LCDOUT14),
+
+       PINMUX_IPSR_MODSEL_DATA(IP16_2_0, MSIOF0_SS2, SEL_SOF0_0),
+       PINMUX_IPSR_DATA(IP16_2_0, AUDIO_CLKOUT),
+       PINMUX_IPSR_DATA(IP16_2_0, ADICHS2),
+       PINMUX_IPSR_DATA(IP16_2_0, DU2_DISP),
+       PINMUX_IPSR_DATA(IP16_2_0, QPOLA),
+       PINMUX_IPSR_MODSEL_DATA(IP16_2_0, HTX0_C, SEL_HSCIF0_2),
+       PINMUX_IPSR_MODSEL_DATA(IP16_2_0, SCIFA2_TXD_B, SEL_SCIFA2_1),
+       PINMUX_IPSR_MODSEL_DATA(IP16_5_3, MSIOF0_RXD, SEL_SOF0_0),
+       PINMUX_IPSR_MODSEL_DATA(IP16_5_3, TS_SPSYNC0, SEL_TSIF0_0),
+       PINMUX_IPSR_DATA(IP16_5_3, SSI_WS2),
+       PINMUX_IPSR_DATA(IP16_5_3, ADICS_SAMP),
+       PINMUX_IPSR_DATA(IP16_5_3, DU2_CDE),
+       PINMUX_IPSR_DATA(IP16_5_3, QPOLB),
+       PINMUX_IPSR_MODSEL_DATA(IP16_5_3, HRX0_C, SEL_HSCIF0_2),
+       PINMUX_IPSR_DATA(IP16_6, USB1_PWEN),
+       PINMUX_IPSR_DATA(IP16_6, AUDIO_CLKOUT_D),
+       PINMUX_IPSR_DATA(IP16_7, USB1_OVC),
+       PINMUX_IPSR_MODSEL_DATA(IP16_7, TCLK1_B, SEL_TMU1_1),
+};
+
+static struct sh_pfc_pin pinmux_pins[] = {
+       PINMUX_GPIO_GP_ALL(),
+};
+
+/* - ETH -------------------------------------------------------------------- */
+static const unsigned int eth_link_pins[] = {
+       /* LINK */
+       RCAR_GP_PIN(2, 22),
+};
+static const unsigned int eth_link_mux[] = {
+       ETH_LINK_MARK,
+};
+static const unsigned int eth_magic_pins[] = {
+       /* MAGIC */
+       RCAR_GP_PIN(2, 27),
+};
+static const unsigned int eth_magic_mux[] = {
+       ETH_MAGIC_MARK,
+};
+static const unsigned int eth_mdio_pins[] = {
+       /* MDC, MDIO */
+       RCAR_GP_PIN(2, 29), RCAR_GP_PIN(2, 24),
+};
+static const unsigned int eth_mdio_mux[] = {
+       ETH_MDC_MARK, ETH_MDIO_MARK,
+};
+static const unsigned int eth_rmii_pins[] = {
+       /* RXD[0:1], RX_ER, CRS_DV, TXD[0:1], TX_EN, REF_CLK */
+       RCAR_GP_PIN(2, 20), RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 19),
+       RCAR_GP_PIN(2, 18), RCAR_GP_PIN(2, 28), RCAR_GP_PIN(2, 25),
+       RCAR_GP_PIN(2, 26), RCAR_GP_PIN(2, 23),
+};
+static const unsigned int eth_rmii_mux[] = {
+       ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_RX_ER_MARK, ETH_CRS_DV_MARK,
+       ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK, ETH_REF_CLK_MARK,
+};
+/* - INTC ------------------------------------------------------------------- */
+static const unsigned int intc_irq0_pins[] = {
+       /* IRQ */
+       RCAR_GP_PIN(1, 25),
+};
+static const unsigned int intc_irq0_mux[] = {
+       IRQ0_MARK,
+};
+static const unsigned int intc_irq1_pins[] = {
+       /* IRQ */
+       RCAR_GP_PIN(1, 27),
+};
+static const unsigned int intc_irq1_mux[] = {
+       IRQ1_MARK,
+};
+static const unsigned int intc_irq2_pins[] = {
+       /* IRQ */
+       RCAR_GP_PIN(1, 29),
+};
+static const unsigned int intc_irq2_mux[] = {
+       IRQ2_MARK,
+};
+static const unsigned int intc_irq3_pins[] = {
+       /* IRQ */
+       RCAR_GP_PIN(1, 23),
+};
+static const unsigned int intc_irq3_mux[] = {
+       IRQ3_MARK,
+};
+/* - SCIF0 ----------------------------------------------------------------- */
+static const unsigned int scif0_data_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(4, 28), RCAR_GP_PIN(4, 29),
+};
+static const unsigned int scif0_data_mux[] = {
+       RX0_MARK, TX0_MARK,
+};
+static const unsigned int scif0_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 27),
+};
+static const unsigned int scif0_clk_mux[] = {
+       SCK0_MARK,
+};
+static const unsigned int scif0_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(4, 31), RCAR_GP_PIN(4, 30),
+};
+static const unsigned int scif0_ctrl_mux[] = {
+       RTS0_N_TANS_MARK, CTS0_N_MARK,
+};
+static const unsigned int scif0_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
+};
+static const unsigned int scif0_data_b_mux[] = {
+       RX0_B_MARK, TX0_B_MARK,
+};
+/* - SCIF1 ----------------------------------------------------------------- */
+static const unsigned int scif1_data_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 1),
+};
+static const unsigned int scif1_data_mux[] = {
+       RX1_MARK, TX1_MARK,
+};
+static const unsigned int scif1_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 20),
+};
+static const unsigned int scif1_clk_mux[] = {
+       SCK1_MARK,
+};
+static const unsigned int scif1_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(5, 3), RCAR_GP_PIN(5, 2),
+};
+static const unsigned int scif1_ctrl_mux[] = {
+       RTS1_N_TANS_MARK, CTS1_N_MARK,
+};
+static const unsigned int scif1_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15),
+};
+static const unsigned int scif1_data_b_mux[] = {
+       RX1_B_MARK, TX1_B_MARK,
+};
+static const unsigned int scif1_data_c_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(4, 1), RCAR_GP_PIN(4, 2),
+};
+static const unsigned int scif1_data_c_mux[] = {
+       RX1_C_MARK, TX1_C_MARK,
+};
+static const unsigned int scif1_data_d_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19),
+};
+static const unsigned int scif1_data_d_mux[] = {
+       RX1_D_MARK, TX1_D_MARK,
+};
+static const unsigned int scif1_clk_d_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(3, 17),
+};
+static const unsigned int scif1_clk_d_mux[] = {
+       SCK1_D_MARK,
+};
+static const unsigned int scif1_data_e_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 22),
+};
+static const unsigned int scif1_data_e_mux[] = {
+       RX1_E_MARK, TX1_E_MARK,
+};
+static const unsigned int scif1_clk_e_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 20),
+};
+static const unsigned int scif1_clk_e_mux[] = {
+       SCK1_E_MARK,
+};
+/* - SCIFA0 ----------------------------------------------------------------- */
+static const unsigned int scifa0_data_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(4, 28), RCAR_GP_PIN(4, 29),
+};
+static const unsigned int scifa0_data_mux[] = {
+       SCIFA0_RXD_MARK, SCIFA0_TXD_MARK,
+};
+static const unsigned int scifa0_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 27),
+};
+static const unsigned int scifa0_clk_mux[] = {
+       SCIFA0_SCK_MARK,
+};
+static const unsigned int scifa0_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(4, 31), RCAR_GP_PIN(4, 30),
+};
+static const unsigned int scifa0_ctrl_mux[] = {
+       SCIFA0_RTS_N_MARK, SCIFA0_CTS_N_MARK,
+};
+static const unsigned int scifa0_data_b_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(1, 20), RCAR_GP_PIN(1, 21),
+};
+static const unsigned int scifa0_data_b_mux[] = {
+       SCIFA0_RXD_B_MARK, SCIFA0_TXD_B_MARK
+};
+static const unsigned int scifa0_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(1, 19),
+};
+static const unsigned int scifa0_clk_b_mux[] = {
+       SCIFA0_SCK_B_MARK,
+};
+static const unsigned int scifa0_ctrl_b_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(1, 23), RCAR_GP_PIN(1, 22),
+};
+static const unsigned int scifa0_ctrl_b_mux[] = {
+       SCIFA0_RTS_N_B_MARK, SCIFA0_CTS_N_B_MARK,
+};
+/* - SCIFA1 ----------------------------------------------------------------- */
+static const unsigned int scifa1_data_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 1),
+};
+static const unsigned int scifa1_data_mux[] = {
+       SCIFA1_RXD_MARK, SCIFA1_TXD_MARK,
+};
+static const unsigned int scifa1_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 20),
+};
+static const unsigned int scifa1_clk_mux[] = {
+       SCIFA1_SCK_MARK,
+};
+static const unsigned int scifa1_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(5, 3), RCAR_GP_PIN(5, 2),
+};
+static const unsigned int scifa1_ctrl_mux[] = {
+       SCIFA1_RTS_N_MARK, SCIFA1_CTS_N_MARK,
+};
+static const unsigned int scifa1_data_b_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 21),
+};
+static const unsigned int scifa1_data_b_mux[] = {
+       SCIFA1_RXD_B_MARK, SCIFA1_TXD_B_MARK,
+};
+static const unsigned int scifa1_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(0, 23),
+};
+static const unsigned int scifa1_clk_b_mux[] = {
+       SCIFA1_SCK_B_MARK,
+};
+static const unsigned int scifa1_ctrl_b_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(0, 22), RCAR_GP_PIN(0, 25),
+};
+static const unsigned int scifa1_ctrl_b_mux[] = {
+       SCIFA1_RTS_N_B_MARK, SCIFA1_CTS_N_B_MARK,
+};
+static const unsigned int scifa1_data_c_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10),
+};
+static const unsigned int scifa1_data_c_mux[] = {
+       SCIFA1_RXD_C_MARK, SCIFA1_TXD_C_MARK,
+};
+static const unsigned int scifa1_clk_c_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(0, 8),
+};
+static const unsigned int scifa1_clk_c_mux[] = {
+       SCIFA1_SCK_C_MARK,
+};
+static const unsigned int scifa1_ctrl_c_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 11),
+};
+static const unsigned int scifa1_ctrl_c_mux[] = {
+       SCIFA1_RTS_N_C_MARK, SCIFA1_CTS_N_C_MARK,
+};
+static const unsigned int scifa1_data_d_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(2, 11), RCAR_GP_PIN(2, 12),
+};
+static const unsigned int scifa1_data_d_mux[] = {
+       SCIFA1_RXD_D_MARK, SCIFA1_TXD_D_MARK,
+};
+static const unsigned int scifa1_clk_d_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 10),
+};
+static const unsigned int scifa1_clk_d_mux[] = {
+       SCIFA1_SCK_D_MARK,
+};
+static const unsigned int scifa1_ctrl_d_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(2, 14), RCAR_GP_PIN(2, 13),
+};
+static const unsigned int scifa1_ctrl_d_mux[] = {
+       SCIFA1_RTS_N_D_MARK, SCIFA1_CTS_N_D_MARK,
+};
+/* - SCIFA2 ----------------------------------------------------------------- */
+static const unsigned int scifa2_data_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 6),
+};
+static const unsigned int scifa2_data_mux[] = {
+       SCIFA2_RXD_MARK, SCIFA2_TXD_MARK,
+};
+static const unsigned int scifa2_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 4),
+};
+static const unsigned int scifa2_clk_mux[] = {
+       SCIFA2_SCK_MARK,
+};
+static const unsigned int scifa2_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 21),
+};
+static const unsigned int scifa2_ctrl_mux[] = {
+       SCIFA2_RTS_N_MARK, SCIFA2_CTS_N_MARK,
+};
+static const unsigned int scifa2_data_b_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5, 16),
+};
+static const unsigned int scifa2_data_b_mux[] = {
+       SCIFA2_RXD_B_MARK, SCIFA2_TXD_B_MARK,
+};
+static const unsigned int scifa2_data_c_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(5, 31), RCAR_GP_PIN(5, 30),
+};
+static const unsigned int scifa2_data_c_mux[] = {
+       SCIFA2_RXD_C_MARK, SCIFA2_TXD_C_MARK,
+};
+static const unsigned int scifa2_clk_c_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 29),
+};
+static const unsigned int scifa2_clk_c_mux[] = {
+       SCIFA2_SCK_C_MARK,
+};
+/* - SCIFB0 ----------------------------------------------------------------- */
+static const unsigned int scifb0_data_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(4, 9), RCAR_GP_PIN(4, 10),
+};
+static const unsigned int scifb0_data_mux[] = {
+       SCIFB0_RXD_MARK, SCIFB0_TXD_MARK,
+};
+static const unsigned int scifb0_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 8),
+};
+static const unsigned int scifb0_clk_mux[] = {
+       SCIFB0_SCK_MARK,
+};
+static const unsigned int scifb0_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(4, 12), RCAR_GP_PIN(4, 11),
+};
+static const unsigned int scifb0_ctrl_mux[] = {
+       SCIFB0_RTS_N_MARK, SCIFB0_CTS_N_MARK,
+};
+static const unsigned int scifb0_data_b_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11),
+};
+static const unsigned int scifb0_data_b_mux[] = {
+       SCIFB0_RXD_B_MARK, SCIFB0_TXD_B_MARK,
+};
+static const unsigned int scifb0_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(3, 9),
+};
+static const unsigned int scifb0_clk_b_mux[] = {
+       SCIFB0_SCK_B_MARK,
+};
+static const unsigned int scifb0_ctrl_b_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 12),
+};
+static const unsigned int scifb0_ctrl_b_mux[] = {
+       SCIFB0_RTS_N_B_MARK, SCIFB0_CTS_N_B_MARK,
+};
+static const unsigned int scifb0_data_c_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
+};
+static const unsigned int scifb0_data_c_mux[] = {
+       SCIFB0_RXD_C_MARK, SCIFB0_TXD_C_MARK,
+};
+/* - SCIFB1 ----------------------------------------------------------------- */
+static const unsigned int scifb1_data_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(4, 15), RCAR_GP_PIN(4, 16),
+};
+static const unsigned int scifb1_data_mux[] = {
+       SCIFB1_RXD_MARK, SCIFB1_TXD_MARK,
+};
+static const unsigned int scifb1_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 14),
+};
+static const unsigned int scifb1_clk_mux[] = {
+       SCIFB1_SCK_MARK,
+};
+static const unsigned int scifb1_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(4, 18), RCAR_GP_PIN(4, 17),
+};
+static const unsigned int scifb1_ctrl_mux[] = {
+       SCIFB1_RTS_N_MARK, SCIFB1_CTS_N_MARK,
+};
+static const unsigned int scifb1_data_b_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3),
+};
+static const unsigned int scifb1_data_b_mux[] = {
+       SCIFB1_RXD_B_MARK, SCIFB1_TXD_B_MARK,
+};
+static const unsigned int scifb1_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(3, 1),
+};
+static const unsigned int scifb1_clk_b_mux[] = {
+       SCIFB1_SCK_B_MARK,
+};
+static const unsigned int scifb1_ctrl_b_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 4),
+};
+static const unsigned int scifb1_ctrl_b_mux[] = {
+       SCIFB1_RTS_N_B_MARK, SCIFB1_CTS_N_B_MARK,
+};
+static const unsigned int scifb1_data_c_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15),
+};
+static const unsigned int scifb1_data_c_mux[] = {
+       SCIFB1_RXD_C_MARK, SCIFB1_TXD_C_MARK,
+};
+static const unsigned int scifb1_data_d_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(4, 1), RCAR_GP_PIN(4, 2),
+};
+static const unsigned int scifb1_data_d_mux[] = {
+       SCIFB1_RXD_D_MARK, SCIFB1_TXD_D_MARK,
+};
+static const unsigned int scifb1_data_e_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19),
+};
+static const unsigned int scifb1_data_e_mux[] = {
+       SCIFB1_RXD_E_MARK, SCIFB1_TXD_E_MARK,
+};
+static const unsigned int scifb1_clk_e_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(3, 17),
+};
+static const unsigned int scifb1_clk_e_mux[] = {
+       SCIFB1_SCK_E_MARK,
+};
+static const unsigned int scifb1_data_f_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
+};
+static const unsigned int scifb1_data_f_mux[] = {
+       SCIFB1_RXD_F_MARK, SCIFB1_TXD_F_MARK,
+};
+static const unsigned int scifb1_data_g_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(2, 21), RCAR_GP_PIN(2, 22),
+};
+static const unsigned int scifb1_data_g_mux[] = {
+       SCIFB1_RXD_G_MARK, SCIFB1_TXD_G_MARK,
+};
+static const unsigned int scifb1_clk_g_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 20),
+};
+static const unsigned int scifb1_clk_g_mux[] = {
+       SCIFB1_SCK_G_MARK,
+};
+/* - SCIFB2 ----------------------------------------------------------------- */
+static const unsigned int scifb2_data_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23),
+};
+static const unsigned int scifb2_data_mux[] = {
+       SCIFB2_RXD_MARK, SCIFB2_TXD_MARK,
+};
+static const unsigned int scifb2_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(4, 21),
+};
+static const unsigned int scifb2_clk_mux[] = {
+       SCIFB2_SCK_MARK,
+};
+static const unsigned int scifb2_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 24),
+};
+static const unsigned int scifb2_ctrl_mux[] = {
+       SCIFB2_RTS_N_MARK, SCIFB2_CTS_N_MARK,
+};
+static const unsigned int scifb2_data_b_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 28), RCAR_GP_PIN(0, 30),
+};
+static const unsigned int scifb2_data_b_mux[] = {
+       SCIFB2_RXD_B_MARK, SCIFB2_TXD_B_MARK,
+};
+static const unsigned int scifb2_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(0, 31),
+};
+static const unsigned int scifb2_clk_b_mux[] = {
+       SCIFB2_SCK_B_MARK,
+};
+static const unsigned int scifb2_ctrl_b_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(0, 29), RCAR_GP_PIN(0, 27),
+};
+static const unsigned int scifb2_ctrl_b_mux[] = {
+       SCIFB2_RTS_N_B_MARK, SCIFB2_CTS_N_B_MARK,
+};
+static const unsigned int scifb2_data_c_pins[] = {
+       /* RXD, TXD */
+       RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 25),
+};
+static const unsigned int scifb2_data_c_mux[] = {
+       SCIFB2_RXD_C_MARK, SCIFB2_TXD_C_MARK,
+};
+/* - TPU0 ------------------------------------------------------------------- */
+static const unsigned int tpu0_to0_pins[] = {
+       /* TO */
+       RCAR_GP_PIN(0, 20),
+};
+static const unsigned int tpu0_to0_mux[] = {
+       TPU0TO0_MARK,
+};
+static const unsigned int tpu0_to1_pins[] = {
+       /* TO */
+       RCAR_GP_PIN(0, 21),
+};
+static const unsigned int tpu0_to1_mux[] = {
+       TPU0TO1_MARK,
+};
+static const unsigned int tpu0_to2_pins[] = {
+       /* TO */
+       RCAR_GP_PIN(0, 22),
+};
+static const unsigned int tpu0_to2_mux[] = {
+       TPU0TO2_MARK,
+};
+static const unsigned int tpu0_to3_pins[] = {
+       /* TO */
+       RCAR_GP_PIN(0, 23),
+};
+static const unsigned int tpu0_to3_mux[] = {
+       TPU0TO3_MARK,
+};
+
+/* - MMCIF ------------------------------------------------------------------ */
+static const unsigned int mmc0_data1_pins[] = {
+       /* D[0] */
+       RCAR_GP_PIN(3, 18),
+};
+static const unsigned int mmc0_data1_mux[] = {
+       MMC0_D0_MARK,
+};
+static const unsigned int mmc0_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19),
+       RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21),
+};
+static const unsigned int mmc0_data4_mux[] = {
+       MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK,
+};
+static const unsigned int mmc0_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19),
+       RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21),
+       RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 23),
+       RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 7),
+};
+static const unsigned int mmc0_data8_mux[] = {
+       MMC0_D0_MARK, MMC0_D1_MARK, MMC0_D2_MARK, MMC0_D3_MARK,
+       MMC0_D4_MARK, MMC0_D5_MARK, MMC0_D6_MARK, MMC0_D7_MARK,
+};
+static const unsigned int mmc0_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 16), RCAR_GP_PIN(3, 17),
+};
+static const unsigned int mmc0_ctrl_mux[] = {
+       MMC0_CLK_MARK, MMC0_CMD_MARK,
+};
+
+static const unsigned int mmc1_data1_pins[] = {
+       /* D[0] */
+       RCAR_GP_PIN(3, 26),
+};
+static const unsigned int mmc1_data1_mux[] = {
+       MMC1_D0_MARK,
+};
+static const unsigned int mmc1_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27),
+       RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 29),
+};
+static const unsigned int mmc1_data4_mux[] = {
+       MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK,
+};
+static const unsigned int mmc1_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27),
+       RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 29),
+       RCAR_GP_PIN(3, 30), RCAR_GP_PIN(3, 31),
+       RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14),
+};
+static const unsigned int mmc1_data8_mux[] = {
+       MMC1_D0_MARK, MMC1_D1_MARK, MMC1_D2_MARK, MMC1_D3_MARK,
+       MMC1_D4_MARK, MMC1_D5_MARK, MMC1_D6_MARK, MMC1_D7_MARK,
+};
+static const unsigned int mmc1_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 25),
+};
+static const unsigned int mmc1_ctrl_mux[] = {
+       MMC1_CLK_MARK, MMC1_CMD_MARK,
+};
+
+/* - SDHI ------------------------------------------------------------------- */
+static const unsigned int sdhi0_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(3, 2),
+};
+static const unsigned int sdhi0_data1_mux[] = {
+       SD0_DAT0_MARK,
+};
+static const unsigned int sdhi0_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3), RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 5),
+};
+static const unsigned int sdhi0_data4_mux[] = {
+       SD0_DAT0_MARK, SD0_DAT1_MARK, SD0_DAT2_MARK, SD0_DAT3_MARK,
+};
+static const unsigned int sdhi0_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 0), RCAR_GP_PIN(3, 1),
+};
+static const unsigned int sdhi0_ctrl_mux[] = {
+       SD0_CLK_MARK, SD0_CMD_MARK,
+};
+static const unsigned int sdhi0_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 6),
+};
+static const unsigned int sdhi0_cd_mux[] = {
+       SD0_CD_MARK,
+};
+static const unsigned int sdhi0_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 7),
+};
+static const unsigned int sdhi0_wp_mux[] = {
+       SD0_WP_MARK,
+};
+
+static const unsigned int sdhi1_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(3, 10),
+};
+static const unsigned int sdhi1_data1_mux[] = {
+       SD1_DAT0_MARK,
+};
+static const unsigned int sdhi1_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11), RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13),
+};
+static const unsigned int sdhi1_data4_mux[] = {
+       SD1_DAT0_MARK, SD1_DAT1_MARK, SD1_DAT2_MARK, SD1_DAT3_MARK,
+};
+static const unsigned int sdhi1_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 8), RCAR_GP_PIN(3, 9),
+};
+static const unsigned int sdhi1_ctrl_mux[] = {
+       SD1_CLK_MARK, SD1_CMD_MARK,
+};
+static const unsigned int sdhi1_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 14),
+};
+static const unsigned int sdhi1_cd_mux[] = {
+       SD1_CD_MARK,
+};
+static const unsigned int sdhi1_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 15),
+};
+static const unsigned int sdhi1_wp_mux[] = {
+       SD1_WP_MARK,
+};
+
+static const unsigned int sdhi2_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(3, 18),
+};
+static const unsigned int sdhi2_data1_mux[] = {
+       SD2_DAT0_MARK,
+};
+static const unsigned int sdhi2_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 18), RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21),
+};
+static const unsigned int sdhi2_data4_mux[] = {
+       SD2_DAT0_MARK, SD2_DAT1_MARK, SD2_DAT2_MARK, SD2_DAT3_MARK,
+};
+static const unsigned int sdhi2_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 16), RCAR_GP_PIN(3, 17),
+};
+static const unsigned int sdhi2_ctrl_mux[] = {
+       SD2_CLK_MARK, SD2_CMD_MARK,
+};
+static const unsigned int sdhi2_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 22),
+};
+static const unsigned int sdhi2_cd_mux[] = {
+       SD2_CD_MARK,
+};
+static const unsigned int sdhi2_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 23),
+};
+static const unsigned int sdhi2_wp_mux[] = {
+       SD2_WP_MARK,
+};
+
+static const unsigned int sdhi3_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(3, 26),
+};
+static const unsigned int sdhi3_data1_mux[] = {
+       SD3_DAT0_MARK,
+};
+static const unsigned int sdhi3_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 26), RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 29),
+};
+static const unsigned int sdhi3_data4_mux[] = {
+       SD3_DAT0_MARK, SD3_DAT1_MARK, SD3_DAT2_MARK, SD3_DAT3_MARK,
+};
+static const unsigned int sdhi3_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 25),
+};
+static const unsigned int sdhi3_ctrl_mux[] = {
+       SD3_CLK_MARK, SD3_CMD_MARK,
+};
+static const unsigned int sdhi3_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 30),
+};
+static const unsigned int sdhi3_cd_mux[] = {
+       SD3_CD_MARK,
+};
+static const unsigned int sdhi3_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 31),
+};
+static const unsigned int sdhi3_wp_mux[] = {
+       SD3_WP_MARK,
+};
+
+static const struct sh_pfc_pin_group pinmux_groups[] = {
+       SH_PFC_PIN_GROUP(eth_link),
+       SH_PFC_PIN_GROUP(eth_magic),
+       SH_PFC_PIN_GROUP(eth_mdio),
+       SH_PFC_PIN_GROUP(eth_rmii),
+       SH_PFC_PIN_GROUP(intc_irq0),
+       SH_PFC_PIN_GROUP(intc_irq1),
+       SH_PFC_PIN_GROUP(intc_irq2),
+       SH_PFC_PIN_GROUP(intc_irq3),
+       SH_PFC_PIN_GROUP(scif0_data),
+       SH_PFC_PIN_GROUP(scif0_clk),
+       SH_PFC_PIN_GROUP(scif0_ctrl),
+       SH_PFC_PIN_GROUP(scif0_data_b),
+       SH_PFC_PIN_GROUP(scif1_data),
+       SH_PFC_PIN_GROUP(scif1_clk),
+       SH_PFC_PIN_GROUP(scif1_ctrl),
+       SH_PFC_PIN_GROUP(scif1_data_b),
+       SH_PFC_PIN_GROUP(scif1_data_c),
+       SH_PFC_PIN_GROUP(scif1_data_d),
+       SH_PFC_PIN_GROUP(scif1_clk_d),
+       SH_PFC_PIN_GROUP(scif1_data_e),
+       SH_PFC_PIN_GROUP(scif1_clk_e),
+       SH_PFC_PIN_GROUP(scifa0_data),
+       SH_PFC_PIN_GROUP(scifa0_clk),
+       SH_PFC_PIN_GROUP(scifa0_ctrl),
+       SH_PFC_PIN_GROUP(scifa0_data_b),
+       SH_PFC_PIN_GROUP(scifa0_clk_b),
+       SH_PFC_PIN_GROUP(scifa0_ctrl_b),
+       SH_PFC_PIN_GROUP(scifa1_data),
+       SH_PFC_PIN_GROUP(scifa1_clk),
+       SH_PFC_PIN_GROUP(scifa1_ctrl),
+       SH_PFC_PIN_GROUP(scifa1_data_b),
+       SH_PFC_PIN_GROUP(scifa1_clk_b),
+       SH_PFC_PIN_GROUP(scifa1_ctrl_b),
+       SH_PFC_PIN_GROUP(scifa1_data_c),
+       SH_PFC_PIN_GROUP(scifa1_clk_c),
+       SH_PFC_PIN_GROUP(scifa1_ctrl_c),
+       SH_PFC_PIN_GROUP(scifa1_data_d),
+       SH_PFC_PIN_GROUP(scifa1_clk_d),
+       SH_PFC_PIN_GROUP(scifa1_ctrl_d),
+       SH_PFC_PIN_GROUP(scifa2_data),
+       SH_PFC_PIN_GROUP(scifa2_clk),
+       SH_PFC_PIN_GROUP(scifa2_ctrl),
+       SH_PFC_PIN_GROUP(scifa2_data_b),
+       SH_PFC_PIN_GROUP(scifa2_data_c),
+       SH_PFC_PIN_GROUP(scifa2_clk_c),
+       SH_PFC_PIN_GROUP(scifb0_data),
+       SH_PFC_PIN_GROUP(scifb0_clk),
+       SH_PFC_PIN_GROUP(scifb0_ctrl),
+       SH_PFC_PIN_GROUP(scifb0_data_b),
+       SH_PFC_PIN_GROUP(scifb0_clk_b),
+       SH_PFC_PIN_GROUP(scifb0_ctrl_b),
+       SH_PFC_PIN_GROUP(scifb0_data_c),
+       SH_PFC_PIN_GROUP(scifb1_data),
+       SH_PFC_PIN_GROUP(scifb1_clk),
+       SH_PFC_PIN_GROUP(scifb1_ctrl),
+       SH_PFC_PIN_GROUP(scifb1_data_b),
+       SH_PFC_PIN_GROUP(scifb1_clk_b),
+       SH_PFC_PIN_GROUP(scifb1_ctrl_b),
+       SH_PFC_PIN_GROUP(scifb1_data_c),
+       SH_PFC_PIN_GROUP(scifb1_data_d),
+       SH_PFC_PIN_GROUP(scifb1_data_e),
+       SH_PFC_PIN_GROUP(scifb1_clk_e),
+       SH_PFC_PIN_GROUP(scifb1_data_f),
+       SH_PFC_PIN_GROUP(scifb1_data_g),
+       SH_PFC_PIN_GROUP(scifb1_clk_g),
+       SH_PFC_PIN_GROUP(scifb2_data),
+       SH_PFC_PIN_GROUP(scifb2_clk),
+       SH_PFC_PIN_GROUP(scifb2_ctrl),
+       SH_PFC_PIN_GROUP(scifb2_data_b),
+       SH_PFC_PIN_GROUP(scifb2_clk_b),
+       SH_PFC_PIN_GROUP(scifb2_ctrl_b),
+       SH_PFC_PIN_GROUP(scifb2_data_c),
+       SH_PFC_PIN_GROUP(tpu0_to0),
+       SH_PFC_PIN_GROUP(tpu0_to1),
+       SH_PFC_PIN_GROUP(tpu0_to2),
+       SH_PFC_PIN_GROUP(tpu0_to3),
+       SH_PFC_PIN_GROUP(mmc0_data1),
+       SH_PFC_PIN_GROUP(mmc0_data4),
+       SH_PFC_PIN_GROUP(mmc0_data8),
+       SH_PFC_PIN_GROUP(mmc0_ctrl),
+       SH_PFC_PIN_GROUP(mmc1_data1),
+       SH_PFC_PIN_GROUP(mmc1_data4),
+       SH_PFC_PIN_GROUP(mmc1_data8),
+       SH_PFC_PIN_GROUP(mmc1_ctrl),
+       SH_PFC_PIN_GROUP(sdhi0_data1),
+       SH_PFC_PIN_GROUP(sdhi0_data4),
+       SH_PFC_PIN_GROUP(sdhi0_ctrl),
+       SH_PFC_PIN_GROUP(sdhi0_cd),
+       SH_PFC_PIN_GROUP(sdhi0_wp),
+       SH_PFC_PIN_GROUP(sdhi1_data1),
+       SH_PFC_PIN_GROUP(sdhi1_data4),
+       SH_PFC_PIN_GROUP(sdhi1_ctrl),
+       SH_PFC_PIN_GROUP(sdhi1_cd),
+       SH_PFC_PIN_GROUP(sdhi1_wp),
+       SH_PFC_PIN_GROUP(sdhi2_data1),
+       SH_PFC_PIN_GROUP(sdhi2_data4),
+       SH_PFC_PIN_GROUP(sdhi2_ctrl),
+       SH_PFC_PIN_GROUP(sdhi2_cd),
+       SH_PFC_PIN_GROUP(sdhi2_wp),
+       SH_PFC_PIN_GROUP(sdhi3_data1),
+       SH_PFC_PIN_GROUP(sdhi3_data4),
+       SH_PFC_PIN_GROUP(sdhi3_ctrl),
+       SH_PFC_PIN_GROUP(sdhi3_cd),
+       SH_PFC_PIN_GROUP(sdhi3_wp),
+};
+
+static const char * const eth_groups[] = {
+       "eth_link",
+       "eth_magic",
+       "eth_mdio",
+       "eth_rmii",
+};
+
+static const char * const intc_groups[] = {
+       "intc_irq0",
+       "intc_irq1",
+       "intc_irq2",
+       "intc_irq3",
+};
+
+static const char * const scif0_groups[] = {
+       "scif0_data",
+       "scif0_clk",
+       "scif0_ctrl",
+       "scif0_data_b",
+};
+
+static const char * const scif1_groups[] = {
+       "scif1_data",
+       "scif1_clk",
+       "scif1_ctrl",
+       "scif1_data_b",
+       "scif1_data_c",
+       "scif1_data_d",
+       "scif1_clk_d",
+       "scif1_data_e",
+       "scif1_clk_e",
+};
+
+static const char * const scifa0_groups[] = {
+       "scifa0_data",
+       "scifa0_clk",
+       "scifa0_ctrl",
+       "scifa0_data_b",
+       "scifa0_clk_b",
+       "scifa0_ctrl_b",
+};
+
+static const char * const scifa1_groups[] = {
+       "scifa1_data",
+       "scifa1_clk",
+       "scifa1_ctrl",
+       "scifa1_data_b",
+       "scifa1_clk_b",
+       "scifa1_ctrl_b",
+       "scifa1_data_c",
+       "scifa1_clk_c",
+       "scifa1_ctrl_c",
+       "scifa1_data_d",
+       "scifa1_clk_d",
+       "scifa1_ctrl_d",
+};
+
+static const char * const scifa2_groups[] = {
+       "scifa2_data",
+       "scifa2_clk",
+       "scifa2_ctrl",
+       "scifa2_data_b",
+       "scifa2_data_c",
+       "scifa2_clk_c",
+};
+
+static const char * const scifb0_groups[] = {
+       "scifb0_data",
+       "scifb0_clk",
+       "scifb0_ctrl",
+       "scifb0_data_b",
+       "scifb0_clk_b",
+       "scifb0_ctrl_b",
+       "scifb0_data_c",
+};
+
+static const char * const scifb1_groups[] = {
+       "scifb1_data",
+       "scifb1_clk",
+       "scifb1_ctrl",
+       "scifb1_data_b",
+       "scifb1_clk_b",
+       "scifb1_ctrl_b",
+       "scifb1_data_c",
+       "scifb1_data_d",
+       "scifb1_data_e",
+       "scifb1_clk_e",
+       "scifb1_data_f",
+       "scifb1_data_g",
+       "scifb1_clk_g",
+};
+
+static const char * const scifb2_groups[] = {
+       "scifb2_data",
+       "scifb2_clk",
+       "scifb2_ctrl",
+       "scifb2_data_b",
+       "scifb2_clk_b",
+       "scifb2_ctrl_b",
+       "scifb2_data_c",
+};
+
+static const char * const tpu0_groups[] = {
+       "tpu0_to0",
+       "tpu0_to1",
+       "tpu0_to2",
+       "tpu0_to3",
+};
+
+static const char * const mmc0_groups[] = {
+       "mmc0_data1",
+       "mmc0_data4",
+       "mmc0_data8",
+       "mmc0_ctrl",
+};
+
+static const char * const mmc1_groups[] = {
+       "mmc1_data1",
+       "mmc1_data4",
+       "mmc1_data8",
+       "mmc1_ctrl",
+};
+
+static const char * const sdhi0_groups[] = {
+       "sdhi0_data1",
+       "sdhi0_data4",
+       "sdhi0_ctrl",
+       "sdhi0_cd",
+       "sdhi0_wp",
+};
+
+static const char * const sdhi1_groups[] = {
+       "sdhi1_data1",
+       "sdhi1_data4",
+       "sdhi1_ctrl",
+       "sdhi1_cd",
+       "sdhi1_wp",
+};
+
+static const char * const sdhi2_groups[] = {
+       "sdhi2_data1",
+       "sdhi2_data4",
+       "sdhi2_ctrl",
+       "sdhi2_cd",
+       "sdhi2_wp",
+};
+
+static const char * const sdhi3_groups[] = {
+       "sdhi3_data1",
+       "sdhi3_data4",
+       "sdhi3_ctrl",
+       "sdhi3_cd",
+       "sdhi3_wp",
+};
+
+static const struct sh_pfc_function pinmux_functions[] = {
+       SH_PFC_FUNCTION(eth),
+       SH_PFC_FUNCTION(intc),
+       SH_PFC_FUNCTION(scif0),
+       SH_PFC_FUNCTION(scif1),
+       SH_PFC_FUNCTION(scifa0),
+       SH_PFC_FUNCTION(scifa1),
+       SH_PFC_FUNCTION(scifa2),
+       SH_PFC_FUNCTION(scifb0),
+       SH_PFC_FUNCTION(scifb1),
+       SH_PFC_FUNCTION(scifb2),
+       SH_PFC_FUNCTION(tpu0),
+       SH_PFC_FUNCTION(mmc0),
+       SH_PFC_FUNCTION(mmc1),
+       SH_PFC_FUNCTION(sdhi0),
+       SH_PFC_FUNCTION(sdhi1),
+       SH_PFC_FUNCTION(sdhi2),
+       SH_PFC_FUNCTION(sdhi3),
+};
+
+static struct pinmux_cfg_reg pinmux_config_regs[] = {
+       { PINMUX_CFG_REG("GPSR0", 0xE6060004, 32, 1) {
+               GP_0_31_FN, FN_IP3_17_15,
+               GP_0_30_FN, FN_IP3_14_12,
+               GP_0_29_FN, FN_IP3_11_8,
+               GP_0_28_FN, FN_IP3_7_4,
+               GP_0_27_FN, FN_IP3_3_0,
+               GP_0_26_FN, FN_IP2_28_26,
+               GP_0_25_FN, FN_IP2_25_22,
+               GP_0_24_FN, FN_IP2_21_18,
+               GP_0_23_FN, FN_IP2_17_15,
+               GP_0_22_FN, FN_IP2_14_12,
+               GP_0_21_FN, FN_IP2_11_9,
+               GP_0_20_FN, FN_IP2_8_6,
+               GP_0_19_FN, FN_IP2_5_3,
+               GP_0_18_FN, FN_IP2_2_0,
+               GP_0_17_FN, FN_IP1_29_28,
+               GP_0_16_FN, FN_IP1_27_26,
+               GP_0_15_FN, FN_IP1_25_22,
+               GP_0_14_FN, FN_IP1_21_18,
+               GP_0_13_FN, FN_IP1_17_15,
+               GP_0_12_FN, FN_IP1_14_12,
+               GP_0_11_FN, FN_IP1_11_8,
+               GP_0_10_FN, FN_IP1_7_4,
+               GP_0_9_FN, FN_IP1_3_0,
+               GP_0_8_FN, FN_IP0_30_27,
+               GP_0_7_FN, FN_IP0_26_23,
+               GP_0_6_FN, FN_IP0_22_20,
+               GP_0_5_FN, FN_IP0_19_16,
+               GP_0_4_FN, FN_IP0_15_12,
+               GP_0_3_FN, FN_IP0_11_9,
+               GP_0_2_FN, FN_IP0_8_6,
+               GP_0_1_FN, FN_IP0_5_3,
+               GP_0_0_FN, FN_IP0_2_0 }
+       },
+       { PINMUX_CFG_REG("GPSR1", 0xE6060008, 32, 1) {
+               0, 0,
+               0, 0,
+               GP_1_29_FN, FN_IP6_13_11,
+               GP_1_28_FN, FN_IP6_10_9,
+               GP_1_27_FN, FN_IP6_8_6,
+               GP_1_26_FN, FN_IP6_5_3,
+               GP_1_25_FN, FN_IP6_2_0,
+               GP_1_24_FN, FN_IP5_29_27,
+               GP_1_23_FN, FN_IP5_26_24,
+               GP_1_22_FN, FN_IP5_23_21,
+               GP_1_21_FN, FN_IP5_20_18,
+               GP_1_20_FN, FN_IP5_17_15,
+               GP_1_19_FN, FN_IP5_14_13,
+               GP_1_18_FN, FN_IP5_12_10,
+               GP_1_17_FN, FN_IP5_9_6,
+               GP_1_16_FN, FN_IP5_5_3,
+               GP_1_15_FN, FN_IP5_2_0,
+               GP_1_14_FN, FN_IP4_29_27,
+               GP_1_13_FN, FN_IP4_26_24,
+               GP_1_12_FN, FN_IP4_23_21,
+               GP_1_11_FN, FN_IP4_20_18,
+               GP_1_10_FN, FN_IP4_17_15,
+               GP_1_9_FN, FN_IP4_14_12,
+               GP_1_8_FN, FN_IP4_11_9,
+               GP_1_7_FN, FN_IP4_8_6,
+               GP_1_6_FN, FN_IP4_5_3,
+               GP_1_5_FN, FN_IP4_2_0,
+               GP_1_4_FN, FN_IP3_31_29,
+               GP_1_3_FN, FN_IP3_28_26,
+               GP_1_2_FN, FN_IP3_25_23,
+               GP_1_1_FN, FN_IP3_22_20,
+               GP_1_0_FN, FN_IP3_19_18, }
+       },
+       { PINMUX_CFG_REG("GPSR2", 0xE606000C, 32, 1) {
+               0, 0,
+               0, 0,
+               GP_2_29_FN, FN_IP7_15_13,
+               GP_2_28_FN, FN_IP7_12_10,
+               GP_2_27_FN, FN_IP7_9_8,
+               GP_2_26_FN, FN_IP7_7_6,
+               GP_2_25_FN, FN_IP7_5_3,
+               GP_2_24_FN, FN_IP7_2_0,
+               GP_2_23_FN, FN_IP6_31_29,
+               GP_2_22_FN, FN_IP6_28_26,
+               GP_2_21_FN, FN_IP6_25_23,
+               GP_2_20_FN, FN_IP6_22_20,
+               GP_2_19_FN, FN_IP6_19_17,
+               GP_2_18_FN, FN_IP6_16_14,
+               GP_2_17_FN, FN_VI1_DATA7_VI1_B7,
+               GP_2_16_FN, FN_IP8_27,
+               GP_2_15_FN, FN_IP8_26,
+               GP_2_14_FN, FN_IP8_25_24,
+               GP_2_13_FN, FN_IP8_23_22,
+               GP_2_12_FN, FN_IP8_21_20,
+               GP_2_11_FN, FN_IP8_19_18,
+               GP_2_10_FN, FN_IP8_17_16,
+               GP_2_9_FN, FN_IP8_15_14,
+               GP_2_8_FN, FN_IP8_13_12,
+               GP_2_7_FN, FN_IP8_11_10,
+               GP_2_6_FN, FN_IP8_9_8,
+               GP_2_5_FN, FN_IP8_7_6,
+               GP_2_4_FN, FN_IP8_5_4,
+               GP_2_3_FN, FN_IP8_3_2,
+               GP_2_2_FN, FN_IP8_1_0,
+               GP_2_1_FN, FN_IP7_30_29,
+               GP_2_0_FN, FN_IP7_28_27 }
+       },
+       { PINMUX_CFG_REG("GPSR3", 0xE6060010, 32, 1) {
+               GP_3_31_FN, FN_IP11_21_18,
+               GP_3_30_FN, FN_IP11_17_15,
+               GP_3_29_FN, FN_IP11_14_13,
+               GP_3_28_FN, FN_IP11_12_11,
+               GP_3_27_FN, FN_IP11_10_9,
+               GP_3_26_FN, FN_IP11_8_7,
+               GP_3_25_FN, FN_IP11_6_5,
+               GP_3_24_FN, FN_IP11_4,
+               GP_3_23_FN, FN_IP11_3_0,
+               GP_3_22_FN, FN_IP10_29_26,
+               GP_3_21_FN, FN_IP10_25_23,
+               GP_3_20_FN, FN_IP10_22_19,
+               GP_3_19_FN, FN_IP10_18_15,
+               GP_3_18_FN, FN_IP10_14_11,
+               GP_3_17_FN, FN_IP10_10_7,
+               GP_3_16_FN, FN_IP10_6_4,
+               GP_3_15_FN, FN_IP10_3_0,
+               GP_3_14_FN, FN_IP9_31_28,
+               GP_3_13_FN, FN_IP9_27_26,
+               GP_3_12_FN, FN_IP9_25_24,
+               GP_3_11_FN, FN_IP9_23_22,
+               GP_3_10_FN, FN_IP9_21_20,
+               GP_3_9_FN, FN_IP9_19_18,
+               GP_3_8_FN, FN_IP9_17_16,
+               GP_3_7_FN, FN_IP9_15_12,
+               GP_3_6_FN, FN_IP9_11_8,
+               GP_3_5_FN, FN_IP9_7_6,
+               GP_3_4_FN, FN_IP9_5_4,
+               GP_3_3_FN, FN_IP9_3_2,
+               GP_3_2_FN, FN_IP9_1_0,
+               GP_3_1_FN, FN_IP8_30_29,
+               GP_3_0_FN, FN_IP8_28 }
+       },
+       { PINMUX_CFG_REG("GPSR4", 0xE6060014, 32, 1) {
+               GP_4_31_FN, FN_IP14_18_16,
+               GP_4_30_FN, FN_IP14_15_12,
+               GP_4_29_FN, FN_IP14_11_9,
+               GP_4_28_FN, FN_IP14_8_6,
+               GP_4_27_FN, FN_IP14_5_3,
+               GP_4_26_FN, FN_IP14_2_0,
+               GP_4_25_FN, FN_IP13_30_29,
+               GP_4_24_FN, FN_IP13_28_26,
+               GP_4_23_FN, FN_IP13_25_23,
+               GP_4_22_FN, FN_IP13_22_19,
+               GP_4_21_FN, FN_IP13_18_16,
+               GP_4_20_FN, FN_IP13_15_13,
+               GP_4_19_FN, FN_IP13_12_10,
+               GP_4_18_FN, FN_IP13_9_7,
+               GP_4_17_FN, FN_IP13_6_3,
+               GP_4_16_FN, FN_IP13_2_0,
+               GP_4_15_FN, FN_IP12_30_28,
+               GP_4_14_FN, FN_IP12_27_25,
+               GP_4_13_FN, FN_IP12_24_23,
+               GP_4_12_FN, FN_IP12_22_20,
+               GP_4_11_FN, FN_IP12_19_17,
+               GP_4_10_FN, FN_IP12_16_14,
+               GP_4_9_FN, FN_IP12_13_11,
+               GP_4_8_FN, FN_IP12_10_8,
+               GP_4_7_FN, FN_IP12_7_6,
+               GP_4_6_FN, FN_IP12_5_4,
+               GP_4_5_FN, FN_IP12_3_2,
+               GP_4_4_FN, FN_IP12_1_0,
+               GP_4_3_FN, FN_IP11_31_30,
+               GP_4_2_FN, FN_IP11_29_27,
+               GP_4_1_FN, FN_IP11_26_24,
+               GP_4_0_FN, FN_IP11_23_22 }
+       },
+       { PINMUX_CFG_REG("GPSR5", 0xE6060018, 32, 1) {
+               GP_5_31_FN, FN_IP7_24_22,
+               GP_5_30_FN, FN_IP7_21_19,
+               GP_5_29_FN, FN_IP7_18_16,
+               GP_5_28_FN, FN_DU_DOTCLKIN2,
+               GP_5_27_FN, FN_IP7_26_25,
+               GP_5_26_FN, FN_DU_DOTCLKIN0,
+               GP_5_25_FN, FN_AVS2,
+               GP_5_24_FN, FN_AVS1,
+               GP_5_23_FN, FN_USB2_OVC,
+               GP_5_22_FN, FN_USB2_PWEN,
+               GP_5_21_FN, FN_IP16_7,
+               GP_5_20_FN, FN_IP16_6,
+               GP_5_19_FN, FN_USB0_OVC_VBUS,
+               GP_5_18_FN, FN_USB0_PWEN,
+               GP_5_17_FN, FN_IP16_5_3,
+               GP_5_16_FN, FN_IP16_2_0,
+               GP_5_15_FN, FN_IP15_29_28,
+               GP_5_14_FN, FN_IP15_27_26,
+               GP_5_13_FN, FN_IP15_25_23,
+               GP_5_12_FN, FN_IP15_22_20,
+               GP_5_11_FN, FN_IP15_19_18,
+               GP_5_10_FN, FN_IP15_17_16,
+               GP_5_9_FN, FN_IP15_15_14,
+               GP_5_8_FN, FN_IP15_13_12,
+               GP_5_7_FN, FN_IP15_11_9,
+               GP_5_6_FN, FN_IP15_8_6,
+               GP_5_5_FN, FN_IP15_5_3,
+               GP_5_4_FN, FN_IP15_2_0,
+               GP_5_3_FN, FN_IP14_30_28,
+               GP_5_2_FN, FN_IP14_27_25,
+               GP_5_1_FN, FN_IP14_24_22,
+               GP_5_0_FN, FN_IP14_21_19 }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR0", 0xE6060020, 32,
+                            1, 4, 4, 3, 4, 4, 3, 3, 3, 3) {
+               /* IP0_31 [1] */
+               0, 0,
+               /* IP0_30_27 [4] */
+               FN_D8, FN_SCIFA1_SCK_C, FN_AVB_TXD0, FN_MII_TXD0,
+               FN_VI0_G0, FN_VI0_G0_B, FN_VI2_DATA0_VI2_B0,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP0_26_23 [4] */
+               FN_D7, FN_AD_DI_B, FN_SDA2_C,
+               FN_VI3_DATA7, FN_VI0_R3, FN_VI0_R3_B, FN_SDA2_CIS_C,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP0_22_20 [3] */
+               FN_D6, FN_SCL2_C, FN_VI3_DATA6, FN_VI0_R2, FN_VI0_R2_B,
+               FN_SCL2_CIS_C, 0, 0,
+               /* IP0_19_16 [4] */
+               FN_D5, FN_SCIFB1_TXD_F, FN_SCIFB0_TXD_C, FN_VI3_DATA5,
+               FN_VI0_R1, FN_VI0_R1_B, FN_TX0_B,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP0_15_12 [4] */
+               FN_D4, FN_SCIFB1_RXD_F, FN_SCIFB0_RXD_C, FN_VI3_DATA4,
+               FN_VI0_R0, FN_VI0_R0_B, FN_RX0_B,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP0_11_9 [3] */
+               FN_D3, FN_MSIOF3_TXD_B, FN_VI3_DATA3, FN_VI0_G7, FN_VI0_G7_B,
+               0, 0, 0,
+               /* IP0_8_6 [3] */
+               FN_D2, FN_MSIOF3_RXD_B, FN_VI3_DATA2, FN_VI0_G6, FN_VI0_G6_B,
+               0, 0, 0,
+               /* IP0_5_3 [3] */
+               FN_D1, FN_MSIOF3_SYNC_B, FN_VI3_DATA1, FN_VI0_G5, FN_VI0_G5_B,
+               0, 0, 0,
+               /* IP0_2_0 [3] */
+               FN_D0, FN_MSIOF3_SCK_B, FN_VI3_DATA0, FN_VI0_G4, FN_VI0_G4_B,
+               0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR1", 0xE6060024, 32,
+                            2, 2, 2, 4, 4, 3, 3, 4, 4, 4) {
+               /* IP1_31_30 [2] */
+               0, 0, 0, 0,
+               /* IP1_29_28 [2] */
+               FN_A1, FN_PWM4, 0, 0,
+               /* IP1_27_26 [2] */
+               FN_A0, FN_PWM3, 0, 0,
+               /* IP1_25_22 [4] */
+               FN_D15, FN_SCIFB1_TXD_C, FN_AVB_TXD7, FN_TX1_B,
+               FN_VI0_FIELD, FN_VI0_FIELD_B, FN_VI2_DATA7_VI2_B7,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP1_21_18 [4] */
+               FN_D14, FN_SCIFB1_RXD_C, FN_AVB_TXD6, FN_RX1_B,
+               FN_VI0_CLKENB, FN_VI0_CLKENB_B, FN_VI2_DATA6_VI2_B6,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP1_17_15 [3] */
+               FN_D13, FN_AVB_TXD5, FN_VI0_VSYNC_N,
+               FN_VI0_VSYNC_N_B, FN_VI2_DATA5_VI2_B5,
+               0, 0, 0,
+               /* IP1_14_12 [3] */
+               FN_D12, FN_SCIFA1_RTS_N_C, FN_AVB_TXD4,
+               FN_VI0_HSYNC_N, FN_VI0_HSYNC_N_B, FN_VI2_DATA4_VI2_B4,
+               0, 0,
+               /* IP1_11_8 [4] */
+               FN_D11, FN_SCIFA1_CTS_N_C, FN_AVB_TXD3, FN_MII_TXD3,
+               FN_VI0_G3, FN_VI0_G3_B, FN_VI2_DATA3_VI2_B3,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP1_7_4 [4] */
+               FN_D10, FN_SCIFA1_TXD_C, FN_AVB_TXD2, FN_MII_TXD2,
+               FN_VI0_G2, FN_VI0_G2_B, FN_VI2_DATA2_VI2_B2,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP1_3_0 [4] */
+               FN_D9, FN_SCIFA1_RXD_C, FN_AVB_TXD1, FN_MII_TXD1,
+               FN_VI0_G1, FN_VI0_G1_B, FN_VI2_DATA1_VI2_B1,
+               0, 0, 0, 0, 0, 0, 0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR2", 0xE6060028, 32,
+                            3, 3, 4, 4, 3, 3, 3, 3, 3, 3) {
+               /* IP2_31_29 [3] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP2_28_26 [3] */
+               FN_A10, FN_SSI_SDATA5_B, FN_MSIOF2_SYNC, FN_VI0_R6,
+               FN_VI0_R6_B, FN_VI2_DATA2_VI2_B2_B, 0, 0,
+               /* IP2_25_22 [4] */
+               FN_A9, FN_SCIFA1_CTS_N_B, FN_SSI_WS5_B, FN_VI0_R5,
+               FN_VI0_R5_B, FN_SCIFB2_TXD_C, 0, FN_VI2_DATA1_VI2_B1_B,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP2_21_18 [4] */
+               FN_A8, FN_SCIFA1_RXD_B, FN_SSI_SCK5_B, FN_VI0_R4,
+               FN_VI0_R4_B, FN_SCIFB2_RXD_C, 0, FN_VI2_DATA0_VI2_B0_B,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP2_17_15 [3] */
+               FN_A7, FN_SCIFA1_SCK_B, FN_AUDIO_CLKOUT_B, FN_TPU0TO3,
+               0, 0, 0, 0,
+               /* IP2_14_12 [3] */
+               FN_A6, FN_SCIFA1_RTS_N_B, FN_TPU0TO2, 0, 0, 0, 0, 0,
+               /* IP2_11_9 [3] */
+               FN_A5, FN_SCIFA1_TXD_B, FN_TPU0TO1, 0, 0, 0, 0, 0,
+               /* IP2_8_6 [3] */
+               FN_A4, FN_MSIOF1_TXD_B, FN_TPU0TO0, 0, 0, 0, 0, 0,
+               /* IP2_5_3 [3] */
+               FN_A3, FN_PWM6, FN_MSIOF1_SS2_B, 0, 0, 0, 0, 0,
+               /* IP2_2_0 [3] */
+               FN_A2, FN_PWM5, FN_MSIOF1_SS1_B, 0, 0, 0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR3", 0xE606002C, 32,
+                            3, 3, 3, 3, 2, 3, 3, 4, 4, 4) {
+               /* IP3_31_29 [3] */
+               FN_A20, FN_SPCLK, FN_VI1_R3, FN_VI1_R3_B, FN_VI2_G4,
+               0, 0, 0,
+               /* IP3_28_26 [3] */
+               FN_A19, FN_AD_NCS_N_B, FN_ATACS01_N, FN_EX_WAIT0_B,
+               0, 0, 0, 0,
+               /* IP3_25_23 [3] */
+               FN_A18, FN_AD_CLK_B, FN_ATAG1_N, 0, 0, 0, 0, 0,
+               /* IP3_22_20 [3] */
+               FN_A17, FN_AD_DO_B, FN_ATADIR1_N, 0, 0, 0, 0, 0,
+               /* IP3_19_18 [2] */
+               FN_A16, FN_ATAWR1_N, 0, 0,
+               /* IP3_17_15 [3] */
+               FN_A15, FN_SCIFB2_SCK_B, FN_ATARD1_N, FN_MSIOF2_SS2,
+               0, 0, 0, 0,
+               /* IP3_14_12 [3] */
+               FN_A14, FN_SCIFB2_TXD_B, FN_ATACS11_N, FN_MSIOF2_SS1,
+               0, 0, 0, 0,
+               /* IP3_11_8 [4] */
+               FN_A13, FN_SCIFB2_RTS_N_B, FN_EX_WAIT2,
+               FN_MSIOF2_RXD, FN_VI1_R2, FN_VI1_R2_B, FN_VI2_G2,
+               FN_VI2_DATA5_VI2_B5_B, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP3_7_4 [4] */
+               FN_A12, FN_SCIFB2_RXD_B, FN_MSIOF2_TXD, FN_VI1_R1,
+               FN_VI1_R1_B, FN_VI2_G1, FN_VI2_DATA4_VI2_B4_B,
+               0, 0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP3_3_0 [4] */
+               FN_A11, FN_SCIFB2_CTS_N_B, FN_MSIOF2_SCK, FN_VI1_R0,
+               FN_VI1_R0_B, FN_VI2_G0, FN_VI2_DATA3_VI2_B3_B, 0,
+               0, 0, 0, 0, 0, 0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR4", 0xE6060030, 32,
+                            2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) {
+               /* IP4_31_30 [2] */
+               0, 0, 0, 0,
+               /* IP4_29_27 [3] */
+               FN_EX_CS2_N, FN_GPS_SIGN, FN_HRTS1_N_B,
+               FN_VI3_CLKENB, FN_VI1_G0, FN_VI1_G0_B, FN_VI2_R2, 0,
+               /* IP4_26_24 [3] */
+               FN_EX_CS1_N, FN_GPS_CLK, FN_HCTS1_N_B, FN_VI1_FIELD,
+               FN_VI1_FIELD_B, FN_VI2_R1, 0, 0,
+               /* IP4_23_21 [3] */
+               FN_EX_CS0_N, FN_HRX1_B, FN_VI1_G5, FN_VI1_G5_B, FN_VI2_R0,
+               FN_HTX0_B, FN_MSIOF0_SS1_B, 0,
+               /* IP4_20_18 [3] */
+               FN_CS1_N_A26, FN_SPEEDIN, FN_VI0_R7, FN_VI0_R7_B,
+               FN_VI2_CLK, FN_VI2_CLK_B, 0, 0,
+               /* IP4_17_15 [3] */
+               FN_CS0_N, FN_VI1_R6, FN_VI1_R6_B, FN_VI2_G3, FN_MSIOF0_SS2_B,
+               0, 0, 0,
+               /* IP4_14_12 [3] */
+               FN_A25, FN_SSL, FN_VI1_G6, FN_VI1_G6_B, FN_VI2_FIELD,
+               FN_VI2_FIELD_B, 0, 0,
+               /* IP4_11_9 [3] */
+               FN_A24, FN_IO3, FN_VI1_R7, FN_VI1_R7_B, FN_VI2_CLKENB,
+               FN_VI2_CLKENB_B, 0, 0,
+               /* IP4_8_6 [3] */
+               FN_A23, FN_IO2, FN_VI1_G7, FN_VI1_G7_B, FN_VI2_G7, 0, 0, 0,
+               /* IP4_5_3 [3] */
+               FN_A22, FN_MISO_IO1, FN_VI1_R5, FN_VI1_R5_B, FN_VI2_G6, 0, 0, 0,
+               /* IP4_2_0 [3] */
+               FN_A21, FN_MOSI_IO0, FN_VI1_R4, FN_VI1_R4_B, FN_VI2_G5, 0, 0, 0,
+               }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR5", 0xE6060034, 32,
+                            2, 3, 3, 3, 3, 3, 2, 3, 4, 3, 3) {
+               /* IP5_31_30 [2] */
+               0, 0, 0, 0,
+               /* IP5_29_27 [3] */
+               FN_DREQ0_N, FN_VI1_HSYNC_N, FN_VI1_HSYNC_N_B, FN_VI2_R7,
+               FN_SSI_SCK78_C, FN_SSI_WS78_B, 0, 0,
+               /* IP5_26_24 [3] */
+               FN_EX_WAIT0, FN_IRQ3, FN_INTC_IRQ3_N,
+               FN_VI3_CLK, FN_SCIFA0_RTS_N_B, FN_HRX0_B,
+               FN_MSIOF0_SCK_B, 0,
+               /* IP5_23_21 [3] */
+               FN_WE1_N, FN_IERX, FN_CAN1_RX, FN_VI1_G4,
+               FN_VI1_G4_B, FN_VI2_R6, FN_SCIFA0_CTS_N_B,
+               FN_IERX_C, 0,
+               /* IP5_20_18 [3] */
+               FN_WE0_N, FN_IECLK, FN_CAN_CLK,
+               FN_VI2_VSYNC_N, FN_SCIFA0_TXD_B, FN_VI2_VSYNC_N_B, 0, 0,
+               /* IP5_17_15 [3] */
+               FN_RD_WR_N, FN_VI1_G3, FN_VI1_G3_B, FN_VI2_R5, FN_SCIFA0_RXD_B,
+               FN_INTC_IRQ4_N, 0, 0,
+               /* IP5_14_13 [2] */
+               FN_RD_N, FN_CAN0_TX, FN_SCIFA0_SCK_B, 0,
+               /* IP5_12_10 [3] */
+               FN_BS_N, FN_IETX, FN_HTX1_B, FN_CAN1_TX, FN_DRACK0, FN_IETX_C,
+               0, 0,
+               /* IP5_9_6 [4] */
+               FN_EX_CS5_N, FN_CAN0_RX, FN_MSIOF1_RXD_B, FN_VI3_VSYNC_N,
+               FN_VI1_G2, FN_VI1_G2_B, FN_VI2_R4, FN_SDA1, FN_INTC_EN1_N,
+               FN_SDA1_CIS, 0, 0, 0, 0, 0, 0,
+               /* IP5_5_3 [3] */
+               FN_EX_CS4_N, FN_MSIOF1_SCK_B, FN_VI3_HSYNC_N,
+               FN_VI2_HSYNC_N, FN_SCL1, FN_VI2_HSYNC_N_B,
+               FN_INTC_EN0_N, FN_SCL1_CIS,
+               /* IP5_2_0 [3] */
+               FN_EX_CS3_N, FN_GPS_MAG, FN_VI3_FIELD, FN_VI1_G1, FN_VI1_G1_B,
+               FN_VI2_R3, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR6", 0xE6060038, 32,
+                            3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3) {
+               /* IP6_31_29 [3] */
+               FN_ETH_REF_CLK, FN_RMII_REF_CLK, FN_HCTS0_N_E,
+               FN_STP_IVCXO27_1_B, FN_HRX0_F, 0, 0, 0,
+               /* IP6_28_26 [3] */
+               FN_ETH_LINK, FN_RMII_LINK, FN_HTX0_E,
+               FN_STP_IVCXO27_0_B, FN_SCIFB1_TXD_G, FN_TX1_E, 0, 0,
+               /* IP6_25_23 [3] */
+               FN_ETH_RXD1, FN_RMII_RXD1, FN_HRX0_E, FN_STP_ISSYNC_0_B,
+               FN_TS_SCK0_D, FN_GLO_I1_C, FN_SCIFB1_RXD_G, FN_RX1_E,
+               /* IP6_22_20 [3] */
+               FN_ETH_RXD0, FN_RMII_RXD0, FN_STP_ISEN_0_B, FN_TS_SDAT0_D,
+               FN_GLO_I0_C, FN_SCIFB1_SCK_G, FN_SCK1_E, 0,
+               /* IP6_19_17 [3] */
+               FN_ETH_RX_ER, FN_RMII_RX_ER, FN_STP_ISD_0_B,
+               FN_TS_SPSYNC0_D, FN_GLO_Q1_C, FN_SDA2_E, FN_SDA2_CIS_E, 0,
+               /* IP6_16_14 [3] */
+               FN_ETH_CRS_DV, FN_RMII_CRS_DV, FN_STP_ISCLK_0_B,
+               FN_TS_SDEN0_D, FN_GLO_Q0_C, FN_SCL2_E,
+               FN_SCL2_CIS_E, 0,
+               /* IP6_13_11 [3] */
+               FN_DACK2, FN_IRQ2, FN_INTC_IRQ2_N,
+               FN_SSI_SDATA6_B, FN_HRTS0_N_B, FN_MSIOF0_RXD_B, 0, 0,
+               /* IP6_10_9 [2] */
+               FN_DREQ2_N, FN_HSCK1_B, FN_HCTS0_N_B, FN_MSIOF0_TXD_B,
+               /* IP6_8_6 [3] */
+               FN_DACK1, FN_IRQ1, FN_INTC_IRQ1_N, FN_SSI_WS6_B,
+               FN_SSI_SDATA8_C, 0, 0, 0,
+               /* IP6_5_3 [3] */
+               FN_DREQ1_N, FN_VI1_CLKENB, FN_VI1_CLKENB_B,
+               FN_SSI_SDATA7_C, FN_SSI_SCK78_B, 0, 0, 0,
+               /* IP6_2_0 [3] */
+               FN_DACK0, FN_IRQ0, FN_INTC_IRQ0_N, FN_SSI_SCK6_B,
+               FN_VI1_VSYNC_N, FN_VI1_VSYNC_N_B, FN_SSI_WS78_C, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32,
+                            1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3) {
+               /* IP7_31 [1] */
+               0, 0,
+               /* IP7_30_29 [2] */
+               FN_VI0_DATA0_VI0_B0, FN_ATACS10_N, FN_AVB_RXD2,
+               FN_MII_RXD2,
+               /* IP7_28_27 [2] */
+               FN_VI0_CLK, FN_ATACS00_N, FN_AVB_RXD1, FN_MII_RXD1,
+               /* IP7_26_25 [2] */
+               FN_DU1_DOTCLKIN, FN_AUDIO_CLKC, FN_AUDIO_CLKOUT_C, 0,
+               /* IP7_24_22 [3] */
+               FN_PWM2, FN_PWMFSW0, FN_SCIFA2_RXD_C, FN_PCMWE_N, FN_IECLK_C,
+               0, 0, 0,
+               /* IP7_21_19 [3] */
+               FN_PWM1, FN_SCIFA2_TXD_C, FN_STP_ISSYNC_1_B, FN_TS_SCK1_C,
+               FN_GLO_RFON_C, FN_PCMOE_N, 0, 0,
+               /* IP7_18_16 [3] */
+               FN_PWM0, FN_SCIFA2_SCK_C, FN_STP_ISEN_1_B, FN_TS_SDAT1_C,
+               FN_GLO_SS_C, 0, 0, 0,
+               /* IP7_15_13 [3] */
+               FN_ETH_MDC, FN_RMII_MDC, FN_STP_ISD_1_B,
+               FN_TS_SPSYNC1_C, FN_GLO_SDATA_C, 0, 0, 0,
+               /* IP7_12_10 [3] */
+               FN_ETH_TXD0, FN_RMII_TXD0, FN_STP_ISCLK_1_B, FN_TS_SDEN1_C,
+               FN_GLO_SCLK_C, 0, 0, 0,
+               /* IP7_9_8 [2] */
+               FN_ETH_MAGIC, FN_RMII_MAGIC, FN_SIM0_RST_C, 0,
+               /* IP7_7_6 [2] */
+               FN_ETH_TX_EN, FN_RMII_TX_EN, FN_SIM0_CLK_C, FN_HRTS0_N_F,
+               /* IP7_5_3 [3] */
+               FN_ETH_TXD1, FN_RMII_TXD1, FN_HTX0_F, FN_BPFCLK_G, FN_RDS_CLK_F,
+               0, 0, 0,
+               /* IP7_2_0 [3] */
+               FN_ETH_MDIO, FN_RMII_MDIO, FN_HRTS0_N_E,
+               FN_SIM0_D_C, FN_HCTS0_N_F, 0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR8", 0xE6060040, 32,
+                            1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+                            2, 2, 2, 2, 2, 2, 2) {
+               /* IP8_31 [1] */
+               0, 0,
+               /* IP8_30_29 [2] */
+               FN_SD0_CMD, FN_SCIFB1_SCK_B, FN_VI1_DATA1_VI1_B1_B, 0,
+               /* IP8_28 [1] */
+               FN_SD0_CLK, FN_VI1_DATA0_VI1_B0_B,
+               /* IP8_27 [1] */
+               FN_VI1_DATA6_VI1_B6, FN_AVB_GTXREFCLK,
+               /* IP8_26 [1] */
+               FN_VI1_DATA5_VI1_B5, FN_AVB_PHY_INT,
+               /* IP8_25_24 [2] */
+               FN_VI1_DATA4_VI1_B4, FN_SCIFA1_RTS_N_D,
+               FN_AVB_MAGIC, FN_MII_MAGIC,
+               /* IP8_23_22 [2] */
+               FN_VI1_DATA3_VI1_B3, FN_SCIFA1_CTS_N_D, FN_AVB_GTX_CLK, 0,
+               /* IP8_21_20 [2] */
+               FN_VI1_DATA2_VI1_B2, FN_SCIFA1_TXD_D, FN_AVB_MDIO,
+               FN_MII_MDIO,
+               /* IP8_19_18 [2] */
+               FN_VI1_DATA1_VI1_B1, FN_SCIFA1_RXD_D, FN_AVB_MDC, FN_MII_MDC,
+               /* IP8_17_16 [2] */
+               FN_VI1_DATA0_VI1_B0, FN_SCIFA1_SCK_D, FN_AVB_CRS, FN_MII_CRS,
+               /* IP8_15_14 [2] */
+               FN_VI1_CLK, FN_AVB_RX_DV, FN_MII_RX_DV, 0,
+               /* IP8_13_12 [2] */
+               FN_VI0_DATA7_VI0_B7, FN_AVB_RX_CLK, FN_MII_RX_CLK, 0,
+               /* IP8_11_10 [2] */
+               FN_VI0_DATA6_VI0_B6, FN_AVB_RX_ER, FN_MII_RX_ER, 0,
+               /* IP8_9_8 [2] */
+               FN_VI0_DATA5_VI0_B5, FN_EX_WAIT1, FN_AVB_RXD7, 0,
+               /* IP8_7_6 [2] */
+               FN_VI0_DATA4_VI0_B4, FN_ATAG0_N, FN_AVB_RXD6, 0,
+               /* IP8_5_4 [2] */
+               FN_VI0_DATA3_VI0_B3, FN_ATADIR0_N, FN_AVB_RXD5, 0,
+               /* IP8_3_2 [2] */
+               FN_VI0_DATA2_VI0_B2, FN_ATAWR0_N, FN_AVB_RXD4, 0,
+               /* IP8_1_0 [2] */
+               FN_VI0_DATA1_VI0_B1, FN_ATARD0_N, FN_AVB_RXD3, FN_MII_RXD3, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR9", 0xE6060044, 32,
+                            4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2) {
+               /* IP9_31_28 [4] */
+               FN_SD1_CD, FN_MMC1_D6, FN_TS_SDEN1, FN_USB1_EXTP,
+               FN_GLO_SS, FN_VI0_CLK_B, FN_SCL2_D, FN_SCL2_CIS_D,
+               FN_SIM0_CLK_B, FN_VI3_CLK_B, 0, 0, 0, 0, 0, 0,
+               /* IP9_27_26 [2] */
+               FN_SD1_DAT3, FN_AVB_RXD0, FN_MII_RXD0, FN_SCIFB0_RTS_N_B,
+               /* IP9_25_24 [2] */
+               FN_SD1_DAT2, FN_AVB_COL, FN_MII_COL, FN_SCIFB0_CTS_N_B,
+               /* IP9_23_22 [2] */
+               FN_SD1_DAT1, FN_AVB_LINK, FN_MII_LINK, FN_SCIFB0_TXD_B,
+               /* IP9_21_20 [2] */
+               FN_SD1_DAT0, FN_AVB_TX_CLK, FN_MII_TX_CLK, FN_SCIFB0_RXD_B,
+               /* IP9_19_18 [2] */
+               FN_SD1_CMD, FN_AVB_TX_ER, FN_MII_TX_ER, FN_SCIFB0_SCK_B,
+               /* IP9_17_16 [2] */
+               FN_SD1_CLK, FN_AVB_TX_EN, FN_MII_TX_EN, 0,
+               /* IP9_15_12 [4] */
+               FN_SD0_WP, FN_MMC0_D7, FN_TS_SPSYNC0_B, FN_USB0_IDIN,
+               FN_GLO_SDATA, FN_VI1_DATA7_VI1_B7_B, FN_SDA1_B,
+               FN_SDA1_CIS_B, FN_VI2_DATA7_VI2_B7_B, 0, 0, 0, 0, 0, 0, 0,
+               /* IP9_11_8 [4] */
+               FN_SD0_CD, FN_MMC0_D6, FN_TS_SDEN0_B, FN_USB0_EXTP,
+               FN_GLO_SCLK, FN_VI1_DATA6_VI1_B6_B, FN_SCL1_B,
+               FN_SCL1_CIS_B, FN_VI2_DATA6_VI2_B6_B, 0, 0, 0, 0, 0, 0, 0,
+               /* IP9_7_6 [2] */
+               FN_SD0_DAT3, FN_SCIFB1_RTS_N_B, FN_VI1_DATA5_VI1_B5_B, 0,
+               /* IP9_5_4 [2] */
+               FN_SD0_DAT2, FN_SCIFB1_CTS_N_B, FN_VI1_DATA4_VI1_B4_B, 0,
+               /* IP9_3_2 [2] */
+               FN_SD0_DAT1, FN_SCIFB1_TXD_B, FN_VI1_DATA3_VI1_B3_B, 0,
+               /* IP9_1_0 [2] */
+               FN_SD0_DAT0, FN_SCIFB1_RXD_B, FN_VI1_DATA2_VI1_B2_B, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR10", 0xE6060048, 32,
+                            2, 4, 3, 4, 4, 4, 4, 3, 4) {
+               /* IP10_31_30 [2] */
+               0, 0, 0, 0,
+               /* IP10_29_26 [4] */
+               FN_SD2_CD, FN_MMC0_D4, FN_TS_SDAT0_B, FN_USB2_EXTP, FN_GLO_I0,
+               FN_VI0_DATA6_VI0_B6_B, FN_HCTS0_N_D, FN_TS_SDAT1_B,
+               FN_GLO_I0_B, FN_VI3_DATA6_B, 0, 0, 0, 0, 0, 0,
+               /* IP10_25_23 [3] */
+               FN_SD2_DAT3, FN_MMC0_D3, FN_SIM0_RST, FN_VI0_DATA5_VI0_B5_B,
+               FN_HTX0_D, FN_TS_SPSYNC1_B, FN_GLO_Q1_B, FN_VI3_DATA5_B,
+               /* IP10_22_19 [4] */
+               FN_SD2_DAT2, FN_MMC0_D2, FN_BPFCLK_B, FN_RDS_CLK,
+               FN_VI0_DATA4_VI0_B4_B, FN_HRX0_D, FN_TS_SDEN1_B,
+               FN_GLO_Q0_B, FN_VI3_DATA4_B, 0, 0, 0, 0, 0, 0, 0,
+               /* IP10_18_15 [4] */
+               FN_SD2_DAT1, FN_MMC0_D1, FN_FMIN_B, FN_RDS_DATA,
+               FN_VI0_DATA3_VI0_B3_B, FN_SCIFB1_TXD_E, FN_TX1_D,
+               FN_TS_SCK0_C, FN_GLO_RFON_B, FN_VI3_DATA3_B,
+               0, 0, 0, 0, 0, 0,
+               /* IP10_14_11 [4] */
+               FN_SD2_DAT0, FN_MMC0_D0, FN_FMCLK_B,
+               FN_VI0_DATA2_VI0_B2_B, FN_SCIFB1_RXD_E, FN_RX1_D,
+               FN_TS_SDAT0_C, FN_GLO_SS_B, FN_VI3_DATA2_B,
+               0, 0, 0, 0, 0, 0, 0,
+               /* IP10_10_7 [4] */
+               FN_SD2_CMD, FN_MMC0_CMD, FN_SIM0_D,
+               FN_VI0_DATA1_VI0_B1_B, FN_SCIFB1_SCK_E, FN_SCK1_D,
+               FN_TS_SPSYNC0_C, FN_GLO_SDATA_B, FN_VI3_DATA1_B,
+               0, 0, 0, 0, 0, 0, 0,
+               /* IP10_6_4 [3] */
+               FN_SD2_CLK, FN_MMC0_CLK, FN_SIM0_CLK,
+               FN_VI0_DATA0_VI0_B0_B, FN_TS_SDEN0_C, FN_GLO_SCLK_B,
+               FN_VI3_DATA0_B, 0,
+               /* IP10_3_0 [4] */
+               FN_SD1_WP, FN_MMC1_D7, FN_TS_SPSYNC1, FN_USB1_IDIN,
+               FN_GLO_RFON, FN_VI1_CLK_B, FN_SDA2_D, FN_SDA2_CIS_D,
+               FN_SIM0_D_B, 0, 0, 0, 0, 0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR11", 0xE606004C, 32,
+                            2, 3, 3, 2, 4, 3, 2, 2, 2, 2, 2, 1, 4) {
+               /* IP11_31_30 [2] */
+               FN_SSI_SCK0129, FN_CAN_CLK_B, FN_MOUT0, 0,
+               /* IP11_29_27 [3] */
+               FN_MLB_DAT, FN_SPV_EVEN, FN_SCIFB1_TXD_D, FN_TX1_C, FN_BPFCLK_C,
+               FN_RDS_CLK_B, 0, 0,
+               /* IP11_26_24 [3] */
+               FN_MLB_SIG, FN_SCIFB1_RXD_D, FN_RX1_C, FN_SDA2_B, FN_SDA2_CIS_B,
+               0, 0, 0,
+               /* IP11_23_22 [2] */
+               FN_MLB_CLK, FN_SCL2_B, FN_SCL2_CIS_B, 0,
+               /* IP11_21_18 [4] */
+               FN_SD3_WP, FN_MMC1_D5, FN_TS_SCK1, FN_GLO_Q1, FN_FMIN_C,
+               FN_RDS_DATA_B, FN_FMIN_E, FN_RDS_DATA_D, FN_FMIN_F,
+               FN_RDS_DATA_E, 0, 0, 0, 0, 0, 0,
+               /* IP11_17_15 [3] */
+               FN_SD3_CD, FN_MMC1_D4, FN_TS_SDAT1,
+               FN_VSP, FN_GLO_Q0, FN_SIM0_RST_B, 0, 0,
+               /* IP11_14_13 [2] */
+               FN_SD3_DAT3, FN_MMC1_D3, FN_SCKZ, 0,
+               /* IP11_12_11 [2] */
+               FN_SD3_DAT2, FN_MMC1_D2, FN_SDATA, 0,
+               /* IP11_10_9 [2] */
+               FN_SD3_DAT1, FN_MMC1_D1, FN_MDATA, 0,
+               /* IP11_8_7 [2] */
+               FN_SD3_DAT0, FN_MMC1_D0, FN_STM_N, 0,
+               /* IP11_6_5 [2] */
+               FN_SD3_CMD, FN_MMC1_CMD, FN_MTS_N, 0,
+               /* IP11_4 [1] */
+               FN_SD3_CLK, FN_MMC1_CLK,
+               /* IP11_3_0 [4] */
+               FN_SD2_WP, FN_MMC0_D5, FN_TS_SCK0_B, FN_USB2_IDIN,
+               FN_GLO_I1, FN_VI0_DATA7_VI0_B7_B, FN_HRTS0_N_D,
+               FN_TS_SCK1_B, FN_GLO_I1_B, FN_VI3_DATA7_B, 0, 0, 0, 0, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR12", 0xE6060050, 32,
+                            1, 3, 3, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2) {
+               /* IP12_31 [1] */
+               0, 0,
+               /* IP12_30_28 [3] */
+               FN_SSI_WS5, FN_SCIFB1_RXD, FN_IECLK_B,
+               FN_DU2_EXVSYNC_DU2_VSYNC, FN_QSTB_QHE,
+               FN_CAN_DEBUGOUT4, 0, 0,
+               /* IP12_27_25 [3] */
+               FN_SSI_SCK5, FN_SCIFB1_SCK,
+               FN_IERX_B, FN_DU2_EXHSYNC_DU2_HSYNC, FN_QSTH_QHS,
+               FN_CAN_DEBUGOUT3, 0, 0,
+               /* IP12_24_23 [2] */
+               FN_SSI_SDATA4, FN_STP_ISSYNC_0, FN_MSIOF1_RXD,
+               FN_CAN_DEBUGOUT2,
+               /* IP12_22_20 [3] */
+               FN_SSI_WS4, FN_STP_ISEN_0, FN_SCIFB0_RTS_N,
+               FN_MSIOF1_TXD, FN_SSI_WS5_C, FN_CAN_DEBUGOUT1, 0, 0,
+               /* IP12_19_17 [3] */
+               FN_SSI_SCK4, FN_STP_ISD_0, FN_SCIFB0_CTS_N,
+               FN_MSIOF1_SS2, FN_SSI_SCK5_C, FN_CAN_DEBUGOUT0, 0, 0,
+               /* IP12_16_14 [3] */
+               FN_SSI_SDATA3, FN_STP_ISCLK_0,
+               FN_SCIFB0_TXD, FN_MSIOF1_SS1, FN_CAN_TXCLK, 0, 0, 0,
+               /* IP12_13_11 [3] */
+               FN_SSI_WS34, FN_STP_IVCXO27_0, FN_SCIFB0_RXD, FN_MSIOF1_SYNC,
+               FN_CAN_STEP0, 0, 0, 0,
+               /* IP12_10_8 [3] */
+               FN_SSI_SCK34, FN_STP_OPWM_0, FN_SCIFB0_SCK,
+               FN_MSIOF1_SCK, FN_CAN_DEBUG_HW_TRIGGER, 0, 0, 0,
+               /* IP12_7_6 [2] */
+               FN_SSI_SDATA2, FN_CAN1_RX_B, FN_SSI_SCK1, FN_MOUT6,
+               /* IP12_5_4 [2] */
+               FN_SSI_SDATA1, FN_CAN1_TX_B, FN_MOUT5, 0,
+               /* IP12_3_2 [2] */
+               FN_SSI_SDATA0, FN_CAN0_RX_B, FN_MOUT2, 0,
+               /* IP12_1_0 [2] */
+               FN_SSI_WS0129, FN_CAN0_TX_B, FN_MOUT1, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR13", 0xE6060054, 32,
+                            1, 2, 3, 3, 4, 3, 3, 3, 3, 4, 3) {
+               /* IP13_31 [1] */
+               0, 0,
+               /* IP13_30_29 [2] */
+               FN_AUDIO_CLKA, FN_SCIFB2_RTS_N, FN_CAN_DEBUGOUT14, 0,
+               /* IP13_28_26 [3] */
+               FN_SSI_SDATA9, FN_STP_ISSYNC_1, FN_SCIFB2_CTS_N, FN_SSI_WS1,
+               FN_SSI_SDATA5_C, FN_CAN_DEBUGOUT13, 0, 0,
+               /* IP13_25_23 [3] */
+               FN_SSI_SDATA8, FN_STP_ISEN_1, FN_SCIFB2_TXD, FN_CAN0_TX_C,
+               FN_CAN_DEBUGOUT12, FN_SSI_SDATA8_B, 0, 0,
+               /* IP13_22_19 [4] */
+               FN_SSI_SDATA7, FN_STP_ISD_1, FN_SCIFB2_RXD, FN_SCIFA2_RTS_N,
+               FN_TCLK2, FN_QSTVA_QVS, FN_CAN_DEBUGOUT11, FN_BPFCLK_E,
+               FN_RDS_CLK_D, FN_SSI_SDATA7_B, FN_FMIN_G, FN_RDS_DATA_F,
+               0, 0, 0, 0,
+               /* IP13_18_16 [3] */
+               FN_SSI_WS78, FN_STP_ISCLK_1, FN_SCIFB2_SCK, FN_SCIFA2_CTS_N,
+               FN_DU2_DR7, FN_LCDOUT7, FN_CAN_DEBUGOUT10, 0,
+               /* IP13_15_13 [3] */
+               FN_SSI_SCK78, FN_STP_IVCXO27_1, FN_SCK1, FN_SCIFA1_SCK,
+               FN_DU2_DR6, FN_LCDOUT6, FN_CAN_DEBUGOUT9, 0,
+               /* IP13_12_10 [3] */
+               FN_SSI_SDATA6, FN_FMIN_D, FN_RDS_DATA_C, FN_DU2_DR5, FN_LCDOUT5,
+               FN_CAN_DEBUGOUT8, 0, 0,
+               /* IP13_9_7 [3] */
+               FN_SSI_WS6, FN_SCIFB1_RTS_N, FN_CAN0_TX_D, FN_DU2_DR4,
+               FN_LCDOUT4, FN_CAN_DEBUGOUT7, 0, 0,
+               /* IP13_6_3 [4] */
+               FN_SSI_SCK6, FN_SCIFB1_CTS_N, FN_BPFCLK_D, FN_RDS_CLK_C,
+               FN_DU2_DR3, FN_LCDOUT3, FN_CAN_DEBUGOUT6,
+               FN_BPFCLK_F, FN_RDS_CLK_E, 0, 0, 0, 0, 0, 0, 0,
+               /* IP13_2_0 [3] */
+               FN_SSI_SDATA5, FN_SCIFB1_TXD, FN_IETX_B, FN_DU2_DR2,
+               FN_LCDOUT2, FN_CAN_DEBUGOUT5, 0, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR14", 0xE6060058, 32,
+                            1, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3) {
+               /* IP14_30 [1] */
+               0, 0,
+               /* IP14_30_28 [3] */
+               FN_SCIFA1_RTS_N, FN_AD_NCS_N, FN_RTS1_N_TANS,
+               FN_MSIOF3_TXD, FN_DU1_DOTCLKOUT, FN_QSTVB_QVE,
+               FN_HRTS0_N_C, 0,
+               /* IP14_27_25 [3] */
+               FN_SCIFA1_CTS_N, FN_AD_CLK, FN_CTS1_N, FN_MSIOF3_RXD,
+               FN_DU0_DOTCLKOUT, FN_QCLK, 0, 0,
+               /* IP14_24_22 [3] */
+               FN_SCIFA1_TXD, FN_AD_DO, FN_TX1, FN_DU2_DG1,
+               FN_LCDOUT9, 0, 0, 0,
+               /* IP14_21_19 [3] */
+               FN_SCIFA1_RXD, FN_AD_DI, FN_RX1,
+               FN_DU2_EXODDF_DU2_ODDF_DISP_CDE, FN_QCPV_QDE, 0, 0, 0,
+               /* IP14_18_16 [3] */
+               FN_SCIFA0_RTS_N, FN_HRTS1_N, FN_RTS0_N_TANS,
+               FN_MSIOF3_SS1, FN_DU2_DG0, FN_LCDOUT8, FN_PWM1_B, 0,
+               /* IP14_15_12 [4] */
+               FN_SCIFA0_CTS_N, FN_HCTS1_N, FN_CTS0_N, FN_MSIOF3_SYNC,
+               FN_DU2_DG3, FN_LCDOUT11, FN_PWM0_B, FN_SCL1_C, FN_SCL1_CIS_C,
+               0, 0, 0, 0, 0, 0, 0,
+               /* IP14_11_9 [3] */
+               FN_SCIFA0_TXD, FN_HTX1, FN_TX0, FN_DU2_DR1, FN_LCDOUT1,
+               0, 0, 0,
+               /* IP14_8_6 [3] */
+               FN_SCIFA0_RXD, FN_HRX1, FN_RX0, FN_DU2_DR0, FN_LCDOUT0,
+               0, 0, 0,
+               /* IP14_5_3 [3] */
+               FN_SCIFA0_SCK, FN_HSCK1, FN_SCK0, FN_MSIOF3_SS2, FN_DU2_DG2,
+               FN_LCDOUT10, FN_SDA1_C, FN_SDA1_CIS_C,
+               /* IP14_2_0 [3] */
+               FN_AUDIO_CLKB, FN_SCIF_CLK, FN_CAN0_RX_D,
+               FN_DVC_MUTE, FN_CAN0_RX_C, FN_CAN_DEBUGOUT15,
+               FN_REMOCON, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR15", 0xE606005C, 32,
+                            2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3) {
+               /* IP15_31_30 [2] */
+               0, 0, 0, 0,
+               /* IP15_29_28 [2] */
+               FN_MSIOF0_TXD, FN_ADICHS1, FN_DU2_DG6, FN_LCDOUT14,
+               /* IP15_27_26 [2] */
+               FN_MSIOF0_SS1, FN_ADICHS0, FN_DU2_DG5, FN_LCDOUT13,
+               /* IP15_25_23 [3] */
+               FN_MSIOF0_SYNC, FN_TS_SCK0, FN_SSI_SCK2, FN_ADIDATA,
+               FN_DU2_DB7, FN_LCDOUT23, FN_SCIFA2_RXD_B, 0,
+               /* IP15_22_20 [3] */
+               FN_MSIOF0_SCK, FN_TS_SDAT0, FN_ADICLK,
+               FN_DU2_DB6, FN_LCDOUT22, 0, 0, 0,
+               /* IP15_19_18 [2] */
+               FN_HRTS0_N, FN_SSI_WS9, FN_DU2_DB5, FN_LCDOUT21,
+               /* IP15_17_16 [2] */
+               FN_HCTS0_N, FN_SSI_SCK9, FN_DU2_DB4, FN_LCDOUT20,
+               /* IP15_15_14 [2] */
+               FN_HTX0, FN_DU2_DB3, FN_LCDOUT19, 0,
+               /* IP15_13_12 [2] */
+               FN_HRX0, FN_DU2_DB2, FN_LCDOUT18, 0,
+               /* IP15_11_9 [3] */
+               FN_HSCK0, FN_TS_SDEN0, FN_DU2_DG4, FN_LCDOUT12, FN_HCTS0_N_C,
+               0, 0, 0,
+               /* IP15_8_6 [3] */
+               FN_SCIFA2_TXD, FN_BPFCLK, 0, FN_DU2_DB1, FN_LCDOUT17,
+               FN_SDA2, FN_SDA2_CIS, 0,
+               /* IP15_5_3 [3] */
+               FN_SCIFA2_RXD, FN_FMIN, 0, FN_DU2_DB0, FN_LCDOUT16,
+               FN_SCL2, FN_SCL2_CIS, 0,
+               /* IP15_2_0 [3] */
+               FN_SCIFA2_SCK, FN_FMCLK, 0, FN_MSIOF3_SCK, FN_DU2_DG7,
+               FN_LCDOUT15, FN_SCIF_CLK_B, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("IPSR16", 0xE6060160, 32,
+                            4, 4, 4, 4, 4, 4, 1, 1, 3, 3) {
+               /* IP16_31_28 [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP16_27_24 [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP16_23_20 [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP16_19_16 [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP16_15_12 [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP16_11_8 [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* IP16_7 [1] */
+               FN_USB1_OVC, FN_TCLK1_B,
+               /* IP16_6 [1] */
+               FN_USB1_PWEN, FN_AUDIO_CLKOUT_D,
+               /* IP16_5_3 [3] */
+               FN_MSIOF0_RXD, FN_TS_SPSYNC0, FN_SSI_WS2,
+               FN_ADICS_SAMP, FN_DU2_CDE, FN_QPOLB, FN_HRX0_C, 0,
+               /* IP16_2_0 [3] */
+               FN_MSIOF0_SS2, FN_AUDIO_CLKOUT, FN_ADICHS2,
+               FN_DU2_DISP, FN_QPOLA, FN_HTX0_C, FN_SCIFA2_TXD_B, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32,
+                            3, 2, 2, 3, 2, 1, 1, 1, 2, 1,
+                            2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1) {
+               /* SEL_SCIF1 [3] */
+               FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3,
+               FN_SEL_SCIF1_4, 0, 0, 0,
+               /* SEL_SCIFB [2] */
+               FN_SEL_SCIFB_0, FN_SEL_SCIFB_1, FN_SEL_SCIFB_2, 0,
+               /* SEL_SCIFB2 [2] */
+               FN_SEL_SCIFB2_0, FN_SEL_SCIFB2_1, FN_SEL_SCIFB2_2, 0,
+               /* SEL_SCIFB1 [3] */
+               FN_SEL_SCIFB1_0, FN_SEL_SCIFB1_1, FN_SEL_SCIFB1_2,
+               FN_SEL_SCIFB1_3, FN_SEL_SCIFB1_4, FN_SEL_SCIFB1_5,
+               FN_SEL_SCIFB1_6, 0,
+               /* SEL_SCIFA1 [2] */
+               FN_SEL_SCIFA1_0, FN_SEL_SCIFA1_1, FN_SEL_SCIFA1_2,
+               FN_SEL_SCIFA1_3,
+               /* SEL_SCIF0 [1] */
+               FN_SEL_SCIF0_0, FN_SEL_SCIF0_1,
+               /* SEL_SCIFA [1] */
+               FN_SEL_SCFA_0, FN_SEL_SCFA_1,
+               /* SEL_SOF1 [1] */
+               FN_SEL_SOF1_0, FN_SEL_SOF1_1,
+               /* SEL_SSI7 [2] */
+               FN_SEL_SSI7_0, FN_SEL_SSI7_1, FN_SEL_SSI7_2, 0,
+               /* SEL_SSI6 [1] */
+               FN_SEL_SSI6_0, FN_SEL_SSI6_1,
+               /* SEL_SSI5 [2] */
+               FN_SEL_SSI5_0, FN_SEL_SSI5_1, FN_SEL_SSI5_2, 0,
+               /* SEL_VI3 [1] */
+               FN_SEL_VI3_0, FN_SEL_VI3_1,
+               /* SEL_VI2 [1] */
+               FN_SEL_VI2_0, FN_SEL_VI2_1,
+               /* SEL_VI1 [1] */
+               FN_SEL_VI1_0, FN_SEL_VI1_1,
+               /* SEL_VI0 [1] */
+               FN_SEL_VI0_0, FN_SEL_VI0_1,
+               /* SEL_TSIF1 [2] */
+               FN_SEL_TSIF1_0, FN_SEL_TSIF1_1, FN_SEL_TSIF1_2, 0,
+               /* RESERVED [1] */
+               0, 0,
+               /* SEL_LBS [1] */
+               FN_SEL_LBS_0, FN_SEL_LBS_1,
+               /* SEL_TSIF0 [2] */
+               FN_SEL_TSIF0_0, FN_SEL_TSIF0_1, FN_SEL_TSIF0_2, FN_SEL_TSIF0_3,
+               /* SEL_SOF3 [1] */
+               FN_SEL_SOF3_0, FN_SEL_SOF3_1,
+               /* SEL_SOF0 [1] */
+               FN_SEL_SOF0_0, FN_SEL_SOF0_1, }
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE6060094, 32,
+                            3, 1, 1, 1, 2, 1, 2, 1, 2,
+                            1, 1, 1, 3, 3, 2, 3, 2, 2) {
+               /* RESERVED [3] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* SEL_TMU1 [1] */
+               FN_SEL_TMU1_0, FN_SEL_TMU1_1,
+               /* SEL_HSCIF1 [1] */
+               FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1,
+               /* SEL_SCIFCLK [1] */
+               FN_SEL_SCIFCLK_0, FN_SEL_SCIFCLK_1,
+               /* SEL_CAN0 [2] */
+               FN_SEL_CAN0_0, FN_SEL_CAN0_1, FN_SEL_CAN0_2, FN_SEL_CAN0_3,
+               /* SEL_CANCLK [1] */
+               FN_SEL_CANCLK_0, FN_SEL_CANCLK_1,
+               /* SEL_SCIFA2 [2] */
+               FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1, FN_SEL_SCIFA2_2, 0,
+               /* SEL_CAN1 [1] */
+               FN_SEL_CAN1_0, FN_SEL_CAN1_1,
+               /* RESERVED [2] */
+               0, 0, 0, 0,
+               /* RESERVED [1] (actually TX2, RX2 vs. TX2_B, RX2_B of SCIF2) */
+               0, 0,
+               /* SEL_ADI [1] */
+               FN_SEL_ADI_0, FN_SEL_ADI_1,
+               /* SEL_SSP [1] */
+               FN_SEL_SSP_0, FN_SEL_SSP_1,
+               /* SEL_FM [3] */
+               FN_SEL_FM_0, FN_SEL_FM_1, FN_SEL_FM_2, FN_SEL_FM_3,
+               FN_SEL_FM_4, FN_SEL_FM_5, FN_SEL_FM_6, 0,
+               /* SEL_HSCIF0 [3] */
+               FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, FN_SEL_HSCIF0_2,
+               FN_SEL_HSCIF0_3, FN_SEL_HSCIF0_4, FN_SEL_HSCIF0_5, 0, 0,
+               /* SEL_GPS [2] */
+               FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, 0,
+               /* SEL_RDS [3] */
+               FN_SEL_RDS_0, FN_SEL_RDS_1, FN_SEL_RDS_2,
+               FN_SEL_RDS_3, FN_SEL_RDS_4, FN_SEL_RDS_5, 0, 0,
+               /* SEL_SIM [2] */
+               FN_SEL_SIM_0, FN_SEL_SIM_1, FN_SEL_SIM_2, 0,
+               /* SEL_SSI8 [2] */
+               FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2, 0, }
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL3", 0xE6060098, 32,
+                            1, 1, 2, 4, 4, 2, 2,
+                            4, 2, 3, 2, 3, 2) {
+               /* SEL_IICDVFS [1] */
+               FN_SEL_IICDVFS_0, FN_SEL_IICDVFS_1,
+               /* SEL_IIC0 [1] */
+               FN_SEL_IIC0_0, FN_SEL_IIC0_1,
+               /* RESERVED [2] */
+               0, 0, 0, 0,
+               /* RESERVED [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* RESERVED [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* RESERVED [2] */
+               0, 0, 0, 0,
+               /* SEL_IEB [2] */
+               FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, 0,
+               /* RESERVED [4] */
+               0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0,
+               /* RESERVED [2] */
+               0, 0, 0, 0,
+               /* SEL_IIC2 [3] */
+               FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3,
+               FN_SEL_IIC2_4, 0, 0, 0,
+               /* SEL_IIC1 [2] */
+               FN_SEL_IIC1_0, FN_SEL_IIC1_1, FN_SEL_IIC1_2, 0,
+               /* SEL_I2C2 [3] */
+               FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3,
+               FN_SEL_I2C2_4, 0, 0, 0,
+               /* SEL_I2C1 [2] */
+               FN_SEL_I2C1_0, FN_SEL_I2C1_1, FN_SEL_I2C1_2, 0, }
+       },
+       { },
+};
+
+const struct sh_pfc_soc_info r8a7790_pinmux_info = {
+       .name = "r8a77900_pfc",
+       .unlock_reg = 0xe6060000, /* PMMR */
+
+       .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
+
+       .pins = pinmux_pins,
+       .nr_pins = ARRAY_SIZE(pinmux_pins),
+       .groups = pinmux_groups,
+       .nr_groups = ARRAY_SIZE(pinmux_groups),
+       .functions = pinmux_functions,
+       .nr_functions = ARRAY_SIZE(pinmux_functions),
+
+       .cfg_regs = pinmux_config_regs,
+
+       .gpio_data = pinmux_data,
+       .gpio_data_size = ARRAY_SIZE(pinmux_data),
+};
index df0ae21a5ac8f98d428797bff49acabfd4aed3ff..6dfb18772574bba8d7c1da9bc4f5c8ecf950b72e 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
+#include <linux/io.h>
 #include <linux/kernel.h>
+#include <linux/pinctrl/pinconf-generic.h>
+
 #include <mach/irqs.h>
 #include <mach/sh7372.h>
 
+#include "core.h"
 #include "sh_pfc.h"
 
 #define CPU_ALL_PORT(fn, pfx, sfx) \
        PORT_10(fn, pfx##16, sfx),      PORT_10(fn, pfx##17, sfx), \
        PORT_10(fn, pfx##18, sfx),      PORT_1(fn, pfx##190, sfx)
 
+#undef _GPIO_PORT
+#define _GPIO_PORT(gpio, sfx)                                          \
+       [gpio] = {                                                      \
+               .name = __stringify(PORT##gpio),                        \
+               .enum_id = PORT##gpio##_DATA,                           \
+       }
+
+#define IRQC_PIN_MUX(irq, pin)                                         \
+static const unsigned int intc_irq##irq##_pins[] = {                   \
+       pin,                                                            \
+};                                                                     \
+static const unsigned int intc_irq##irq##_mux[] = {                    \
+       IRQ##irq##_MARK,                                                \
+}
+
+#define IRQC_PINS_MUX(irq, pin0, pin1)                                 \
+static const unsigned int intc_irq##irq##_0_pins[] = {                 \
+       pin0,                                                           \
+};                                                                     \
+static const unsigned int intc_irq##irq##_0_mux[] = {                  \
+       IRQ##irq##_##pin0##_MARK,                                       \
+};                                                                     \
+static const unsigned int intc_irq##irq##_1_pins[] = {                 \
+       pin1,                                                           \
+};                                                                     \
+static const unsigned int intc_irq##irq##_1_mux[] = {                  \
+       IRQ##irq##_##pin1##_MARK,                                       \
+}
+
 enum {
        PINMUX_RESERVED = 0,
 
@@ -47,16 +80,6 @@ enum {
        PORT_ALL(IN),
        PINMUX_INPUT_END,
 
-       /* PORT0_IN_PU -> PORT190_IN_PU */
-       PINMUX_INPUT_PULLUP_BEGIN,
-       PORT_ALL(IN_PU),
-       PINMUX_INPUT_PULLUP_END,
-
-       /* PORT0_IN_PD -> PORT190_IN_PD */
-       PINMUX_INPUT_PULLDOWN_BEGIN,
-       PORT_ALL(IN_PD),
-       PINMUX_INPUT_PULLDOWN_END,
-
        /* PORT0_OUT -> PORT190_OUT */
        PINMUX_OUTPUT_BEGIN,
        PORT_ALL(OUT),
@@ -368,124 +391,11 @@ enum {
        PINMUX_MARK_END,
 };
 
-static const pinmux_enum_t pinmux_data[] = {
+#define _PORT_DATA(pfx, sfx)   PORT_DATA_IO(pfx)
+#define PINMUX_DATA_GP_ALL()   CPU_ALL_PORT(_PORT_DATA, , unused)
 
-       /* specify valid pin states for each pin in GPIO mode */
-       PORT_DATA_IO_PD(0),             PORT_DATA_IO_PD(1),
-       PORT_DATA_O(2),                 PORT_DATA_I_PD(3),
-       PORT_DATA_I_PD(4),              PORT_DATA_I_PD(5),
-       PORT_DATA_IO_PU_PD(6),          PORT_DATA_I_PD(7),
-       PORT_DATA_IO_PD(8),             PORT_DATA_O(9),
-
-       PORT_DATA_O(10),                PORT_DATA_O(11),
-       PORT_DATA_IO_PU_PD(12),         PORT_DATA_IO_PD(13),
-       PORT_DATA_IO_PD(14),            PORT_DATA_O(15),
-       PORT_DATA_IO_PD(16),            PORT_DATA_IO_PD(17),
-       PORT_DATA_I_PD(18),             PORT_DATA_IO(19),
-
-       PORT_DATA_IO(20),               PORT_DATA_IO(21),
-       PORT_DATA_IO(22),               PORT_DATA_IO(23),
-       PORT_DATA_IO(24),               PORT_DATA_IO(25),
-       PORT_DATA_IO(26),               PORT_DATA_IO(27),
-       PORT_DATA_IO(28),               PORT_DATA_IO(29),
-
-       PORT_DATA_IO(30),               PORT_DATA_IO(31),
-       PORT_DATA_IO(32),               PORT_DATA_IO(33),
-       PORT_DATA_IO(34),               PORT_DATA_IO(35),
-       PORT_DATA_IO(36),               PORT_DATA_IO(37),
-       PORT_DATA_IO(38),               PORT_DATA_IO(39),
-
-       PORT_DATA_IO(40),               PORT_DATA_IO(41),
-       PORT_DATA_IO(42),               PORT_DATA_IO(43),
-       PORT_DATA_IO(44),               PORT_DATA_IO(45),
-       PORT_DATA_IO_PU(46),            PORT_DATA_IO_PU(47),
-       PORT_DATA_IO_PU(48),            PORT_DATA_IO_PU(49),
-
-       PORT_DATA_IO_PU(50),            PORT_DATA_IO_PU(51),
-       PORT_DATA_IO_PU(52),            PORT_DATA_IO_PU(53),
-       PORT_DATA_IO_PU(54),            PORT_DATA_IO_PU(55),
-       PORT_DATA_IO_PU(56),            PORT_DATA_IO_PU(57),
-       PORT_DATA_IO_PU(58),            PORT_DATA_IO_PU(59),
-
-       PORT_DATA_IO_PU(60),            PORT_DATA_IO_PU(61),
-       PORT_DATA_IO(62),               PORT_DATA_O(63),
-       PORT_DATA_O(64),                PORT_DATA_IO_PU(65),
-       PORT_DATA_O(66),                PORT_DATA_IO_PU(67),  /*66?*/
-       PORT_DATA_O(68),                PORT_DATA_IO(69),
-
-       PORT_DATA_IO(70),               PORT_DATA_IO(71),
-       PORT_DATA_O(72),                PORT_DATA_I_PU(73),
-       PORT_DATA_I_PU_PD(74),          PORT_DATA_IO_PU_PD(75),
-       PORT_DATA_IO_PU_PD(76),         PORT_DATA_IO_PU_PD(77),
-       PORT_DATA_IO_PU_PD(78),         PORT_DATA_IO_PU_PD(79),
-
-       PORT_DATA_IO_PU_PD(80),         PORT_DATA_IO_PU_PD(81),
-       PORT_DATA_IO_PU_PD(82),         PORT_DATA_IO_PU_PD(83),
-       PORT_DATA_IO_PU_PD(84),         PORT_DATA_IO_PU_PD(85),
-       PORT_DATA_IO_PU_PD(86),         PORT_DATA_IO_PU_PD(87),
-       PORT_DATA_IO_PU_PD(88),         PORT_DATA_IO_PU_PD(89),
-
-       PORT_DATA_IO_PU_PD(90),         PORT_DATA_IO_PU_PD(91),
-       PORT_DATA_IO_PU_PD(92),         PORT_DATA_IO_PU_PD(93),
-       PORT_DATA_IO_PU_PD(94),         PORT_DATA_IO_PU_PD(95),
-       PORT_DATA_IO_PU(96),            PORT_DATA_IO_PU_PD(97),
-       PORT_DATA_IO_PU_PD(98),         PORT_DATA_O(99), /*99?*/
-
-       PORT_DATA_IO_PD(100),           PORT_DATA_IO_PD(101),
-       PORT_DATA_IO_PD(102),           PORT_DATA_IO_PD(103),
-       PORT_DATA_IO_PD(104),           PORT_DATA_IO_PD(105),
-       PORT_DATA_IO_PU(106),           PORT_DATA_IO_PU(107),
-       PORT_DATA_IO_PU(108),           PORT_DATA_IO_PU(109),
-
-       PORT_DATA_IO_PU(110),           PORT_DATA_IO_PU(111),
-       PORT_DATA_IO_PD(112),           PORT_DATA_IO_PD(113),
-       PORT_DATA_IO_PU(114),           PORT_DATA_IO_PU(115),
-       PORT_DATA_IO_PU(116),           PORT_DATA_IO_PU(117),
-       PORT_DATA_IO_PU(118),           PORT_DATA_IO_PU(119),
-
-       PORT_DATA_IO_PU(120),           PORT_DATA_IO_PD(121),
-       PORT_DATA_IO_PD(122),           PORT_DATA_IO_PD(123),
-       PORT_DATA_IO_PD(124),           PORT_DATA_IO_PD(125),
-       PORT_DATA_IO_PD(126),           PORT_DATA_IO_PD(127),
-       PORT_DATA_IO_PD(128),           PORT_DATA_IO_PU_PD(129),
-
-       PORT_DATA_IO_PU_PD(130),        PORT_DATA_IO_PU_PD(131),
-       PORT_DATA_IO_PU_PD(132),        PORT_DATA_IO_PU_PD(133),
-       PORT_DATA_IO_PU_PD(134),        PORT_DATA_IO_PU_PD(135),
-       PORT_DATA_IO_PD(136),           PORT_DATA_IO_PD(137),
-       PORT_DATA_IO_PD(138),           PORT_DATA_IO_PD(139),
-
-       PORT_DATA_IO_PD(140),           PORT_DATA_IO_PD(141),
-       PORT_DATA_IO_PD(142),           PORT_DATA_IO_PU_PD(143),
-       PORT_DATA_IO_PD(144),           PORT_DATA_IO_PD(145),
-       PORT_DATA_IO_PD(146),           PORT_DATA_IO_PD(147),
-       PORT_DATA_IO_PD(148),           PORT_DATA_IO_PD(149),
-
-       PORT_DATA_IO_PD(150),           PORT_DATA_IO_PD(151),
-       PORT_DATA_IO_PU_PD(152),        PORT_DATA_I_PD(153),
-       PORT_DATA_IO_PU_PD(154),        PORT_DATA_I_PD(155),
-       PORT_DATA_IO_PD(156),           PORT_DATA_IO_PD(157),
-       PORT_DATA_I_PD(158),            PORT_DATA_IO_PD(159),
-
-       PORT_DATA_O(160),               PORT_DATA_IO_PD(161),
-       PORT_DATA_IO_PD(162),           PORT_DATA_IO_PD(163),
-       PORT_DATA_I_PD(164),            PORT_DATA_IO_PD(165),
-       PORT_DATA_I_PD(166),            PORT_DATA_I_PD(167),
-       PORT_DATA_I_PD(168),            PORT_DATA_I_PD(169),
-
-       PORT_DATA_I_PD(170),            PORT_DATA_O(171),
-       PORT_DATA_IO_PU_PD(172),        PORT_DATA_IO_PU_PD(173),
-       PORT_DATA_IO_PU_PD(174),        PORT_DATA_IO_PU_PD(175),
-       PORT_DATA_IO_PU_PD(176),        PORT_DATA_IO_PU_PD(177),
-       PORT_DATA_IO_PU_PD(178),        PORT_DATA_O(179),
-
-       PORT_DATA_IO_PU_PD(180),        PORT_DATA_IO_PU_PD(181),
-       PORT_DATA_IO_PU_PD(182),        PORT_DATA_IO_PU_PD(183),
-       PORT_DATA_IO_PU_PD(184),        PORT_DATA_O(185),
-       PORT_DATA_IO_PU_PD(186),        PORT_DATA_IO_PU_PD(187),
-       PORT_DATA_IO_PU_PD(188),        PORT_DATA_IO_PU_PD(189),
-
-       PORT_DATA_IO_PU_PD(190),
+static const pinmux_enum_t pinmux_data[] = {
+       PINMUX_DATA_GP_ALL(),
 
        /* IRQ */
        PINMUX_DATA(IRQ0_6_MARK,        PORT6_FN0,      MSEL1CR_0_0),
@@ -929,10 +839,582 @@ static const pinmux_enum_t pinmux_data[] = {
        PINMUX_DATA(MFIv4_MARK,         MSEL4CR_6_1),
 };
 
+#define SH7372_PIN(pin, cfgs)                                          \
+       {                                                               \
+               .name = __stringify(PORT##pin),                         \
+               .enum_id = PORT##pin##_DATA,                            \
+               .configs = cfgs,                                        \
+       }
+
+#define __I            (SH_PFC_PIN_CFG_INPUT)
+#define __O            (SH_PFC_PIN_CFG_OUTPUT)
+#define __IO           (SH_PFC_PIN_CFG_INPUT | SH_PFC_PIN_CFG_OUTPUT)
+#define __PD           (SH_PFC_PIN_CFG_PULL_DOWN)
+#define __PU           (SH_PFC_PIN_CFG_PULL_UP)
+#define __PUD          (SH_PFC_PIN_CFG_PULL_DOWN | SH_PFC_PIN_CFG_PULL_UP)
+
+#define SH7372_PIN_I_PD(pin)           SH7372_PIN(pin, __I | __PD)
+#define SH7372_PIN_I_PU(pin)           SH7372_PIN(pin, __I | __PU)
+#define SH7372_PIN_I_PU_PD(pin)                SH7372_PIN(pin, __I | __PUD)
+#define SH7372_PIN_IO(pin)             SH7372_PIN(pin, __IO)
+#define SH7372_PIN_IO_PD(pin)          SH7372_PIN(pin, __IO | __PD)
+#define SH7372_PIN_IO_PU(pin)          SH7372_PIN(pin, __IO | __PU)
+#define SH7372_PIN_IO_PU_PD(pin)       SH7372_PIN(pin, __IO | __PUD)
+#define SH7372_PIN_O(pin)              SH7372_PIN(pin, __O)
+#define SH7372_PIN_O_PU_PD(pin)                SH7372_PIN(pin, __O | __PUD)
+
 static struct sh_pfc_pin pinmux_pins[] = {
-       GPIO_PORT_ALL(),
+       /* Table 57-1 (I/O and Pull U/D) */
+       SH7372_PIN_IO_PD(0),            SH7372_PIN_IO_PD(1),
+       SH7372_PIN_O(2),                SH7372_PIN_I_PD(3),
+       SH7372_PIN_I_PD(4),             SH7372_PIN_I_PD(5),
+       SH7372_PIN_IO_PU_PD(6),         SH7372_PIN_I_PD(7),
+       SH7372_PIN_IO_PD(8),            SH7372_PIN_O(9),
+       SH7372_PIN_O(10),               SH7372_PIN_O(11),
+       SH7372_PIN_IO_PU_PD(12),        SH7372_PIN_IO_PD(13),
+       SH7372_PIN_IO_PD(14),           SH7372_PIN_O(15),
+       SH7372_PIN_IO_PD(16),           SH7372_PIN_IO_PD(17),
+       SH7372_PIN_I_PD(18),            SH7372_PIN_IO(19),
+       SH7372_PIN_IO(20),              SH7372_PIN_IO(21),
+       SH7372_PIN_IO(22),              SH7372_PIN_IO(23),
+       SH7372_PIN_IO(24),              SH7372_PIN_IO(25),
+       SH7372_PIN_IO(26),              SH7372_PIN_IO(27),
+       SH7372_PIN_IO(28),              SH7372_PIN_IO(29),
+       SH7372_PIN_IO(30),              SH7372_PIN_IO(31),
+       SH7372_PIN_IO(32),              SH7372_PIN_IO(33),
+       SH7372_PIN_IO(34),              SH7372_PIN_IO(35),
+       SH7372_PIN_IO(36),              SH7372_PIN_IO(37),
+       SH7372_PIN_IO(38),              SH7372_PIN_IO(39),
+       SH7372_PIN_IO(40),              SH7372_PIN_IO(41),
+       SH7372_PIN_IO(42),              SH7372_PIN_IO(43),
+       SH7372_PIN_IO(44),              SH7372_PIN_IO(45),
+       SH7372_PIN_IO_PU(46),           SH7372_PIN_IO_PU(47),
+       SH7372_PIN_IO_PU(48),           SH7372_PIN_IO_PU(49),
+       SH7372_PIN_IO_PU(50),           SH7372_PIN_IO_PU(51),
+       SH7372_PIN_IO_PU(52),           SH7372_PIN_IO_PU(53),
+       SH7372_PIN_IO_PU(54),           SH7372_PIN_IO_PU(55),
+       SH7372_PIN_IO_PU(56),           SH7372_PIN_IO_PU(57),
+       SH7372_PIN_IO_PU(58),           SH7372_PIN_IO_PU(59),
+       SH7372_PIN_IO_PU(60),           SH7372_PIN_IO_PU(61),
+       SH7372_PIN_IO(62),              SH7372_PIN_O(63),
+       SH7372_PIN_O(64),               SH7372_PIN_IO_PU(65),
+       SH7372_PIN_O_PU_PD(66),         SH7372_PIN_IO_PU(67),
+       SH7372_PIN_O(68),               SH7372_PIN_IO(69),
+       SH7372_PIN_IO(70),              SH7372_PIN_IO(71),
+       SH7372_PIN_O(72),               SH7372_PIN_I_PU(73),
+       SH7372_PIN_I_PU_PD(74),         SH7372_PIN_IO_PU_PD(75),
+       SH7372_PIN_IO_PU_PD(76),        SH7372_PIN_IO_PU_PD(77),
+       SH7372_PIN_IO_PU_PD(78),        SH7372_PIN_IO_PU_PD(79),
+       SH7372_PIN_IO_PU_PD(80),        SH7372_PIN_IO_PU_PD(81),
+       SH7372_PIN_IO_PU_PD(82),        SH7372_PIN_IO_PU_PD(83),
+       SH7372_PIN_IO_PU_PD(84),        SH7372_PIN_IO_PU_PD(85),
+       SH7372_PIN_IO_PU_PD(86),        SH7372_PIN_IO_PU_PD(87),
+       SH7372_PIN_IO_PU_PD(88),        SH7372_PIN_IO_PU_PD(89),
+       SH7372_PIN_IO_PU_PD(90),        SH7372_PIN_IO_PU_PD(91),
+       SH7372_PIN_IO_PU_PD(92),        SH7372_PIN_IO_PU_PD(93),
+       SH7372_PIN_IO_PU_PD(94),        SH7372_PIN_IO_PU_PD(95),
+       SH7372_PIN_IO_PU(96),           SH7372_PIN_IO_PU_PD(97),
+       SH7372_PIN_IO_PU_PD(98),        SH7372_PIN_O_PU_PD(99),
+       SH7372_PIN_IO_PD(100),          SH7372_PIN_IO_PD(101),
+       SH7372_PIN_IO_PD(102),          SH7372_PIN_IO_PD(103),
+       SH7372_PIN_IO_PD(104),          SH7372_PIN_IO_PD(105),
+       SH7372_PIN_IO_PU(106),          SH7372_PIN_IO_PU(107),
+       SH7372_PIN_IO_PU(108),          SH7372_PIN_IO_PU(109),
+       SH7372_PIN_IO_PU(110),          SH7372_PIN_IO_PU(111),
+       SH7372_PIN_IO_PD(112),          SH7372_PIN_IO_PD(113),
+       SH7372_PIN_IO_PU(114),          SH7372_PIN_IO_PU(115),
+       SH7372_PIN_IO_PU(116),          SH7372_PIN_IO_PU(117),
+       SH7372_PIN_IO_PU(118),          SH7372_PIN_IO_PU(119),
+       SH7372_PIN_IO_PU(120),          SH7372_PIN_IO_PD(121),
+       SH7372_PIN_IO_PD(122),          SH7372_PIN_IO_PD(123),
+       SH7372_PIN_IO_PD(124),          SH7372_PIN_IO_PD(125),
+       SH7372_PIN_IO_PD(126),          SH7372_PIN_IO_PD(127),
+       SH7372_PIN_IO_PD(128),          SH7372_PIN_IO_PU_PD(129),
+       SH7372_PIN_IO_PU_PD(130),       SH7372_PIN_IO_PU_PD(131),
+       SH7372_PIN_IO_PU_PD(132),       SH7372_PIN_IO_PU_PD(133),
+       SH7372_PIN_IO_PU_PD(134),       SH7372_PIN_IO_PU_PD(135),
+       SH7372_PIN_IO_PD(136),          SH7372_PIN_IO_PD(137),
+       SH7372_PIN_IO_PD(138),          SH7372_PIN_IO_PD(139),
+       SH7372_PIN_IO_PD(140),          SH7372_PIN_IO_PD(141),
+       SH7372_PIN_IO_PD(142),          SH7372_PIN_IO_PU_PD(143),
+       SH7372_PIN_IO_PD(144),          SH7372_PIN_IO_PD(145),
+       SH7372_PIN_IO_PD(146),          SH7372_PIN_IO_PD(147),
+       SH7372_PIN_IO_PD(148),          SH7372_PIN_IO_PD(149),
+       SH7372_PIN_IO_PD(150),          SH7372_PIN_IO_PD(151),
+       SH7372_PIN_IO_PU_PD(152),       SH7372_PIN_I_PD(153),
+       SH7372_PIN_IO_PU_PD(154),       SH7372_PIN_I_PD(155),
+       SH7372_PIN_IO_PD(156),          SH7372_PIN_IO_PD(157),
+       SH7372_PIN_I_PD(158),           SH7372_PIN_IO_PD(159),
+       SH7372_PIN_O(160),              SH7372_PIN_IO_PD(161),
+       SH7372_PIN_IO_PD(162),          SH7372_PIN_IO_PD(163),
+       SH7372_PIN_I_PD(164),           SH7372_PIN_IO_PD(165),
+       SH7372_PIN_I_PD(166),           SH7372_PIN_I_PD(167),
+       SH7372_PIN_I_PD(168),           SH7372_PIN_I_PD(169),
+       SH7372_PIN_I_PD(170),           SH7372_PIN_O(171),
+       SH7372_PIN_IO_PU_PD(172),       SH7372_PIN_IO_PU_PD(173),
+       SH7372_PIN_IO_PU_PD(174),       SH7372_PIN_IO_PU_PD(175),
+       SH7372_PIN_IO_PU_PD(176),       SH7372_PIN_IO_PU_PD(177),
+       SH7372_PIN_IO_PU_PD(178),       SH7372_PIN_O(179),
+       SH7372_PIN_IO_PU_PD(180),       SH7372_PIN_IO_PU_PD(181),
+       SH7372_PIN_IO_PU_PD(182),       SH7372_PIN_IO_PU_PD(183),
+       SH7372_PIN_IO_PU_PD(184),       SH7372_PIN_O(185),
+       SH7372_PIN_IO_PU_PD(186),       SH7372_PIN_IO_PU_PD(187),
+       SH7372_PIN_IO_PU_PD(188),       SH7372_PIN_IO_PU_PD(189),
+       SH7372_PIN_IO_PU_PD(190),
 };
 
+/* - BSC -------------------------------------------------------------------- */
+static const unsigned int bsc_data8_pins[] = {
+       /* D[0:7] */
+       46, 47, 48, 49, 50, 51, 52, 53,
+};
+static const unsigned int bsc_data8_mux[] = {
+       D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK,
+       D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK,
+};
+static const unsigned int bsc_data16_pins[] = {
+       /* D[0:15] */
+       46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+};
+static const unsigned int bsc_data16_mux[] = {
+       D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK,
+       D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK,
+       D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK,
+       D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK,
+};
+static const unsigned int bsc_cs0_pins[] = {
+       /* CS */
+       62,
+};
+static const unsigned int bsc_cs0_mux[] = {
+       CS0_MARK,
+};
+static const unsigned int bsc_cs2_pins[] = {
+       /* CS */
+       63,
+};
+static const unsigned int bsc_cs2_mux[] = {
+       CS2_MARK,
+};
+static const unsigned int bsc_cs4_pins[] = {
+       /* CS */
+       64,
+};
+static const unsigned int bsc_cs4_mux[] = {
+       CS4_MARK,
+};
+static const unsigned int bsc_cs5a_pins[] = {
+       /* CS */
+       65,
+};
+static const unsigned int bsc_cs5a_mux[] = {
+       CS5A_MARK,
+};
+static const unsigned int bsc_cs5b_pins[] = {
+       /* CS */
+       66,
+};
+static const unsigned int bsc_cs5b_mux[] = {
+       CS5B_MARK,
+};
+static const unsigned int bsc_cs6a_pins[] = {
+       /* CS */
+       67,
+};
+static const unsigned int bsc_cs6a_mux[] = {
+       CS6A_MARK,
+};
+static const unsigned int bsc_rd_we8_pins[] = {
+       /* RD, WE[0] */
+       69, 70,
+};
+static const unsigned int bsc_rd_we8_mux[] = {
+       RD_FSC_MARK, WE0_FWE_MARK,
+};
+static const unsigned int bsc_rd_we16_pins[] = {
+       /* RD, WE[0:1] */
+       69, 70, 71,
+};
+static const unsigned int bsc_rd_we16_mux[] = {
+       RD_FSC_MARK, WE0_FWE_MARK, WE1_MARK,
+};
+static const unsigned int bsc_bs_pins[] = {
+       /* BS */
+       19,
+};
+static const unsigned int bsc_bs_mux[] = {
+       BS_MARK,
+};
+static const unsigned int bsc_rdwr_pins[] = {
+       /* RDWR */
+       75,
+};
+static const unsigned int bsc_rdwr_mux[] = {
+       RDWR_MARK,
+};
+static const unsigned int bsc_wait_pins[] = {
+       /* WAIT */
+       74,
+};
+static const unsigned int bsc_wait_mux[] = {
+       WAIT_MARK,
+};
+/* - CEU -------------------------------------------------------------------- */
+static const unsigned int ceu_data_0_7_pins[] = {
+       /* D[0:7] */
+       102, 103, 104, 105, 106, 107, 108, 109,
+};
+static const unsigned int ceu_data_0_7_mux[] = {
+       VIO_D0_MARK, VIO_D1_MARK, VIO_D2_MARK, VIO_D3_MARK,
+       VIO_D4_MARK, VIO_D5_MARK, VIO_D6_MARK, VIO_D7_MARK,
+};
+static const unsigned int ceu_data_8_15_pins[] = {
+       /* D[8:15] */
+       110, 111, 112, 113, 114, 115, 116, 117,
+};
+static const unsigned int ceu_data_8_15_mux[] = {
+       VIO_D8_MARK, VIO_D9_MARK, VIO_D10_MARK, VIO_D11_MARK,
+       VIO_D12_MARK, VIO_D13_MARK, VIO_D14_MARK, VIO_D15_MARK,
+};
+static const unsigned int ceu_clk_0_pins[] = {
+       /* CKO */
+       120,
+};
+static const unsigned int ceu_clk_0_mux[] = {
+       VIO_CKO_MARK,
+};
+static const unsigned int ceu_clk_1_pins[] = {
+       /* CKO */
+       16,
+};
+static const unsigned int ceu_clk_1_mux[] = {
+       VIO_CKO1_MARK,
+};
+static const unsigned int ceu_clk_2_pins[] = {
+       /* CKO */
+       17,
+};
+static const unsigned int ceu_clk_2_mux[] = {
+       VIO_CKO2_MARK,
+};
+static const unsigned int ceu_sync_pins[] = {
+       /* CLK, VD, HD */
+       118, 100, 101,
+};
+static const unsigned int ceu_sync_mux[] = {
+       VIO_CLK_MARK, VIO_VD_MARK, VIO_HD_MARK,
+};
+static const unsigned int ceu_field_pins[] = {
+       /* FIELD */
+       119,
+};
+static const unsigned int ceu_field_mux[] = {
+       VIO_FIELD_MARK,
+};
+/* - FLCTL ------------------------------------------------------------------ */
+static const unsigned int flctl_data_pins[] = {
+       /* NAF[0:15] */
+       46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+};
+static const unsigned int flctl_data_mux[] = {
+       D0_NAF0_MARK, D1_NAF1_MARK, D2_NAF2_MARK, D3_NAF3_MARK,
+       D4_NAF4_MARK, D5_NAF5_MARK, D6_NAF6_MARK, D7_NAF7_MARK,
+       D8_NAF8_MARK, D9_NAF9_MARK, D10_NAF10_MARK, D11_NAF11_MARK,
+       D12_NAF12_MARK, D13_NAF13_MARK, D14_NAF14_MARK, D15_NAF15_MARK,
+};
+static const unsigned int flctl_ce0_pins[] = {
+       /* CE */
+       68,
+};
+static const unsigned int flctl_ce0_mux[] = {
+       FCE0_MARK,
+};
+static const unsigned int flctl_ce1_pins[] = {
+       /* CE */
+       66,
+};
+static const unsigned int flctl_ce1_mux[] = {
+       FCE1_MARK,
+};
+static const unsigned int flctl_ctrl_pins[] = {
+       /* FCDE, FOE, FSC, FWE, FRB */
+       24, 23, 69, 70, 73,
+};
+static const unsigned int flctl_ctrl_mux[] = {
+       A5_FCDE_MARK, A4_FOE_MARK, RD_FSC_MARK, WE0_FWE_MARK, FRB_MARK,
+};
+/* - FSIA ------------------------------------------------------------------- */
+static const unsigned int fsia_mclk_in_pins[] = {
+       /* CK */
+       4,
+};
+static const unsigned int fsia_mclk_in_mux[] = {
+       FSIACK_MARK,
+};
+static const unsigned int fsia_mclk_out_pins[] = {
+       /* OMC */
+       8,
+};
+static const unsigned int fsia_mclk_out_mux[] = {
+       FSIAOMC_MARK,
+};
+static const unsigned int fsia_sclk_in_pins[] = {
+       /* ILR, IBT */
+       5, 6,
+};
+static const unsigned int fsia_sclk_in_mux[] = {
+       FSIAILR_MARK, FSIAIBT_MARK,
+};
+static const unsigned int fsia_sclk_out_pins[] = {
+       /* OLR, OBT */
+       9, 10,
+};
+static const unsigned int fsia_sclk_out_mux[] = {
+       FSIAOLR_MARK, FSIAOBT_MARK,
+};
+static const unsigned int fsia_data_in_pins[] = {
+       /* ISLD */
+       7,
+};
+static const unsigned int fsia_data_in_mux[] = {
+       FSIAISLD_MARK,
+};
+static const unsigned int fsia_data_out_pins[] = {
+       /* OSLD */
+       11,
+};
+static const unsigned int fsia_data_out_mux[] = {
+       FSIAOSLD_MARK,
+};
+static const unsigned int fsia_spdif_0_pins[] = {
+       /* SPDIF */
+       11,
+};
+static const unsigned int fsia_spdif_0_mux[] = {
+       FSIASPDIF_11_MARK,
+};
+static const unsigned int fsia_spdif_1_pins[] = {
+       /* SPDIF */
+       15,
+};
+static const unsigned int fsia_spdif_1_mux[] = {
+       FSIASPDIF_15_MARK,
+};
+/* - FSIB ------------------------------------------------------------------- */
+static const unsigned int fsib_mclk_in_pins[] = {
+       /* CK */
+       4,
+};
+static const unsigned int fsib_mclk_in_mux[] = {
+       FSIBCK_MARK,
+};
+/* - HDMI ------------------------------------------------------------------- */
+static const unsigned int hdmi_pins[] = {
+       /* HPD, CEC */
+       169, 170,
+};
+static const unsigned int hdmi_mux[] = {
+       HDMI_HPD_MARK, HDMI_CEC_MARK,
+};
+/* - INTC ------------------------------------------------------------------- */
+IRQC_PINS_MUX(0, 6, 162);
+IRQC_PIN_MUX(1, 12);
+IRQC_PINS_MUX(2, 4, 5);
+IRQC_PINS_MUX(3, 8, 16);
+IRQC_PINS_MUX(4, 17, 163);
+IRQC_PIN_MUX(5, 18);
+IRQC_PINS_MUX(6, 39, 164);
+IRQC_PINS_MUX(7, 40, 167);
+IRQC_PINS_MUX(8, 41, 168);
+IRQC_PINS_MUX(9, 42, 169);
+IRQC_PIN_MUX(10, 65);
+IRQC_PIN_MUX(11, 67);
+IRQC_PINS_MUX(12, 80, 137);
+IRQC_PINS_MUX(13, 81, 145);
+IRQC_PINS_MUX(14, 82, 146);
+IRQC_PINS_MUX(15, 83, 147);
+IRQC_PINS_MUX(16, 84, 170);
+IRQC_PIN_MUX(17, 85);
+IRQC_PIN_MUX(18, 86);
+IRQC_PIN_MUX(19, 87);
+IRQC_PIN_MUX(20, 92);
+IRQC_PIN_MUX(21, 93);
+IRQC_PIN_MUX(22, 94);
+IRQC_PIN_MUX(23, 95);
+IRQC_PIN_MUX(24, 112);
+IRQC_PIN_MUX(25, 119);
+IRQC_PINS_MUX(26, 121, 172);
+IRQC_PINS_MUX(27, 122, 180);
+IRQC_PINS_MUX(28, 123, 181);
+IRQC_PINS_MUX(29, 129, 182);
+IRQC_PINS_MUX(30, 130, 183);
+IRQC_PINS_MUX(31, 138, 184);
+/* - KEYSC ------------------------------------------------------------------ */
+static const unsigned int keysc_in04_0_pins[] = {
+       /* KEYIN[0:4] */
+       136, 135, 134, 133, 132,
+};
+static const unsigned int keysc_in04_0_mux[] = {
+       KEYIN0_136_MARK, KEYIN1_135_MARK, KEYIN2_134_MARK, KEYIN3_133_MARK,
+       KEYIN4_MARK,
+};
+static const unsigned int keysc_in04_1_pins[] = {
+       /* KEYIN[0:4] */
+       121, 122, 123, 124, 132,
+};
+static const unsigned int keysc_in04_1_mux[] = {
+       KEYIN0_121_MARK, KEYIN1_122_MARK, KEYIN2_123_MARK, KEYIN3_124_MARK,
+       KEYIN4_MARK,
+};
+static const unsigned int keysc_in5_pins[] = {
+       /* KEYIN5 */
+       131,
+};
+static const unsigned int keysc_in5_mux[] = {
+       KEYIN5_MARK,
+};
+static const unsigned int keysc_in6_pins[] = {
+       /* KEYIN6 */
+       130,
+};
+static const unsigned int keysc_in6_mux[] = {
+       KEYIN6_MARK,
+};
+static const unsigned int keysc_in7_pins[] = {
+       /* KEYIN7 */
+       129,
+};
+static const unsigned int keysc_in7_mux[] = {
+       KEYIN7_MARK,
+};
+static const unsigned int keysc_out4_pins[] = {
+       /* KEYOUT[0:3] */
+       128, 127, 126, 125,
+};
+static const unsigned int keysc_out4_mux[] = {
+       KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK,
+};
+static const unsigned int keysc_out5_pins[] = {
+       /* KEYOUT[0:4] */
+       128, 127, 126, 125, 124,
+};
+static const unsigned int keysc_out5_mux[] = {
+       KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK,
+       KEYOUT4_MARK,
+};
+static const unsigned int keysc_out6_pins[] = {
+       /* KEYOUT[0:5] */
+       128, 127, 126, 125, 124, 123,
+};
+static const unsigned int keysc_out6_mux[] = {
+       KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK,
+       KEYOUT4_MARK, KEYOUT5_MARK,
+};
+static const unsigned int keysc_out8_pins[] = {
+       /* KEYOUT[0:7] */
+       128, 127, 126, 125, 124, 123, 122, 121,
+};
+static const unsigned int keysc_out8_mux[] = {
+       KEYOUT0_MARK, KEYOUT1_MARK, KEYOUT2_MARK, KEYOUT3_MARK,
+       KEYOUT4_MARK, KEYOUT5_MARK, KEYOUT6_MARK, KEYOUT7_MARK,
+};
+/* - LCD -------------------------------------------------------------------- */
+static const unsigned int lcd_data8_pins[] = {
+       /* D[0:7] */
+       121, 122, 123, 124, 125, 126, 127, 128,
+};
+static const unsigned int lcd_data8_mux[] = {
+       /* LCDC */
+       LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK,
+       LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK,
+};
+static const unsigned int lcd_data9_pins[] = {
+       /* D[0:8] */
+       121, 122, 123, 124, 125, 126, 127, 128,
+       129,
+       137, 138, 139, 140, 141, 142, 143, 144,
+};
+static const unsigned int lcd_data9_mux[] = {
+       LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK,
+       LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK,
+       LCDD8_MARK,
+};
+static const unsigned int lcd_data12_pins[] = {
+       /* D[0:11] */
+       121, 122, 123, 124, 125, 126, 127, 128,
+       129, 130, 131, 132,
+};
+static const unsigned int lcd_data12_mux[] = {
+       LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK,
+       LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK,
+       LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK,
+};
+static const unsigned int lcd_data16_pins[] = {
+       /* D[0:15] */
+       121, 122, 123, 124, 125, 126, 127, 128,
+       129, 130, 131, 132, 133, 134, 135, 136,
+};
+static const unsigned int lcd_data16_mux[] = {
+       LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK,
+       LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK,
+       LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK,
+       LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK,
+};
+static const unsigned int lcd_data18_pins[] = {
+       /* D[0:17] */
+       121, 122, 123, 124, 125, 126, 127, 128,
+       129, 130, 131, 132, 133, 134, 135, 136,
+       137, 138,
+};
+static const unsigned int lcd_data18_mux[] = {
+       LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK,
+       LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK,
+       LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK,
+       LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK,
+       LCDD16_MARK, LCDD17_MARK,
+};
+static const unsigned int lcd_data24_pins[] = {
+       /* D[0:23] */
+       121, 122, 123, 124, 125, 126, 127, 128,
+       129, 130, 131, 132, 133, 134, 135, 136,
+       137, 138, 139, 140, 141, 142, 143, 144,
+};
+static const unsigned int lcd_data24_mux[] = {
+       LCDD0_MARK, LCDD1_MARK, LCDD2_MARK, LCDD3_MARK,
+       LCDD4_MARK, LCDD5_MARK, LCDD6_MARK, LCDD7_MARK,
+       LCDD8_MARK, LCDD9_MARK, LCDD10_MARK, LCDD11_MARK,
+       LCDD12_MARK, LCDD13_MARK, LCDD14_MARK, LCDD15_MARK,
+       LCDD16_MARK, LCDD17_MARK, LCDD18_MARK, LCDD19_MARK,
+       LCDD20_MARK, LCDD21_MARK, LCDD22_MARK, LCDD23_MARK,
+};
+static const unsigned int lcd_display_pins[] = {
+       /* DON */
+       151,
+};
+static const unsigned int lcd_display_mux[] = {
+       LCDDON_MARK,
+};
+static const unsigned int lcd_lclk_pins[] = {
+       /* LCLK */
+       150,
+};
+static const unsigned int lcd_lclk_mux[] = {
+       LCDLCLK_MARK,
+};
+static const unsigned int lcd_sync_pins[] = {
+       /* VSYN, HSYN, DCK, DISP */
+       146, 145, 147, 149,
+};
+static const unsigned int lcd_sync_mux[] = {
+       LCDVSYN_MARK, LCDHSYN_MARK, LCDDCK_MARK, LCDDISP_MARK,
+};
+static const unsigned int lcd_sys_pins[] = {
+       /* CS, WR, RD, RS */
+       145, 147, 148, 149,
+};
+static const unsigned int lcd_sys_mux[] = {
+       LCDCS_MARK, LCDWR_MARK, LCDRD_MARK, LCDRS_MARK,
+};
 /* - MMCIF ------------------------------------------------------------------ */
 static const unsigned int mmc0_data1_0_pins[] = {
        /* D[0] */
@@ -993,6 +1475,139 @@ static const unsigned int mmc0_ctrl_1_pins[] = {
 static const unsigned int mmc0_ctrl_1_mux[] = {
        MMCCMD1_MARK, MMCCLK1_MARK,
 };
+/* - SCIFA0 ----------------------------------------------------------------- */
+static const unsigned int scifa0_data_pins[] = {
+       /* RXD, TXD */
+       153, 152,
+};
+static const unsigned int scifa0_data_mux[] = {
+       SCIFA0_RXD_MARK, SCIFA0_TXD_MARK,
+};
+static const unsigned int scifa0_clk_pins[] = {
+       /* SCK */
+       156,
+};
+static const unsigned int scifa0_clk_mux[] = {
+       SCIFA0_SCK_MARK,
+};
+static const unsigned int scifa0_ctrl_pins[] = {
+       /* RTS, CTS */
+       157, 158,
+};
+static const unsigned int scifa0_ctrl_mux[] = {
+       SCIFA0_RTS_MARK, SCIFA0_CTS_MARK,
+};
+/* - SCIFA1 ----------------------------------------------------------------- */
+static const unsigned int scifa1_data_pins[] = {
+       /* RXD, TXD */
+       155, 154,
+};
+static const unsigned int scifa1_data_mux[] = {
+       SCIFA1_RXD_MARK, SCIFA1_TXD_MARK,
+};
+static const unsigned int scifa1_clk_pins[] = {
+       /* SCK */
+       159,
+};
+static const unsigned int scifa1_clk_mux[] = {
+       SCIFA1_SCK_MARK,
+};
+static const unsigned int scifa1_ctrl_pins[] = {
+       /* RTS, CTS */
+       160, 161,
+};
+static const unsigned int scifa1_ctrl_mux[] = {
+       SCIFA1_RTS_MARK, SCIFA1_CTS_MARK,
+};
+/* - SCIFA2 ----------------------------------------------------------------- */
+static const unsigned int scifa2_data_pins[] = {
+       /* RXD, TXD */
+       97, 96,
+};
+static const unsigned int scifa2_data_mux[] = {
+       SCIFA2_RXD1_MARK, SCIFA2_TXD1_MARK,
+};
+static const unsigned int scifa2_clk_pins[] = {
+       /* SCK */
+       98,
+};
+static const unsigned int scifa2_clk_mux[] = {
+       SCIFA2_SCK1_MARK,
+};
+static const unsigned int scifa2_ctrl_pins[] = {
+       /* RTS, CTS */
+       95, 94,
+};
+static const unsigned int scifa2_ctrl_mux[] = {
+       SCIFA2_RTS1_MARK, SCIFA2_CTS1_MARK,
+};
+/* - SCIFA3 ----------------------------------------------------------------- */
+static const unsigned int scifa3_data_pins[] = {
+       /* RXD, TXD */
+       144, 143,
+};
+static const unsigned int scifa3_data_mux[] = {
+       SCIFA3_RXD_MARK, SCIFA3_TXD_MARK,
+};
+static const unsigned int scifa3_clk_pins[] = {
+       /* SCK */
+       142,
+};
+static const unsigned int scifa3_clk_mux[] = {
+       SCIFA3_SCK_MARK,
+};
+static const unsigned int scifa3_ctrl_0_pins[] = {
+       /* RTS, CTS */
+       44, 43,
+};
+static const unsigned int scifa3_ctrl_0_mux[] = {
+       SCIFA3_RTS_44_MARK, SCIFA3_CTS_43_MARK,
+};
+static const unsigned int scifa3_ctrl_1_pins[] = {
+       /* RTS, CTS */
+       141, 140,
+};
+static const unsigned int scifa3_ctrl_1_mux[] = {
+       SCIFA3_RTS_141_MARK, SCIFA3_CTS_140_MARK,
+};
+/* - SCIFA4 ----------------------------------------------------------------- */
+static const unsigned int scifa4_data_pins[] = {
+       /* RXD, TXD */
+       5, 6,
+};
+static const unsigned int scifa4_data_mux[] = {
+       SCIFA4_RXD_MARK, SCIFA4_TXD_MARK,
+};
+/* - SCIFA5 ----------------------------------------------------------------- */
+static const unsigned int scifa5_data_pins[] = {
+       /* RXD, TXD */
+       8, 12,
+};
+static const unsigned int scifa5_data_mux[] = {
+       SCIFA5_RXD_MARK, SCIFA5_TXD_MARK,
+};
+/* - SCIFB ------------------------------------------------------------------ */
+static const unsigned int scifb_data_pins[] = {
+       /* RXD, TXD */
+       166, 165,
+};
+static const unsigned int scifb_data_mux[] = {
+       SCIFB_RXD_MARK, SCIFB_TXD_MARK,
+};
+static const unsigned int scifb_clk_pins[] = {
+       /* SCK */
+       162,
+};
+static const unsigned int scifb_clk_mux[] = {
+       SCIFB_SCK_MARK,
+};
+static const unsigned int scifb_ctrl_pins[] = {
+       /* RTS, CTS */
+       163, 164,
+};
+static const unsigned int scifb_ctrl_mux[] = {
+       SCIFB_RTS_MARK, SCIFB_CTS_MARK,
+};
 /* - SDHI0 ------------------------------------------------------------------ */
 static const unsigned int sdhi0_data1_pins[] = {
        /* D0 */
@@ -1073,8 +1688,169 @@ static const unsigned int sdhi2_ctrl_pins[] = {
 static const unsigned int sdhi2_ctrl_mux[] = {
        SDHICMD2_MARK, SDHICLK2_MARK,
 };
+/* - USB0 ------------------------------------------------------------------- */
+static const unsigned int usb0_vbus_pins[] = {
+       /* VBUS */
+       167,
+};
+static const unsigned int usb0_vbus_mux[] = {
+       VBUS0_0_MARK,
+};
+static const unsigned int usb0_otg_id_pins[] = {
+       /* IDIN */
+       113,
+};
+static const unsigned int usb0_otg_id_mux[] = {
+       IDIN_0_MARK,
+};
+static const unsigned int usb0_otg_ctrl_pins[] = {
+       /* PWEN, EXTLP, OVCN, OVCN2 */
+       116, 114, 117, 115,
+};
+static const unsigned int usb0_otg_ctrl_mux[] = {
+       PWEN_0_MARK, EXTLP_0_MARK, OVCN_0_MARK, OVCN2_0_MARK,
+};
+/* - USB1 ------------------------------------------------------------------- */
+static const unsigned int usb1_vbus_pins[] = {
+       /* VBUS */
+       168,
+};
+static const unsigned int usb1_vbus_mux[] = {
+       VBUS0_1_MARK,
+};
+static const unsigned int usb1_otg_id_0_pins[] = {
+       /* IDIN */
+       113,
+};
+static const unsigned int usb1_otg_id_0_mux[] = {
+       IDIN_1_113_MARK,
+};
+static const unsigned int usb1_otg_id_1_pins[] = {
+       /* IDIN */
+       18,
+};
+static const unsigned int usb1_otg_id_1_mux[] = {
+       IDIN_1_18_MARK,
+};
+static const unsigned int usb1_otg_ctrl_0_pins[] = {
+       /* PWEN, EXTLP, OVCN, OVCN2 */
+       115, 116, 114, 117, 113,
+};
+static const unsigned int usb1_otg_ctrl_0_mux[] = {
+       PWEN_1_115_MARK, EXTLP_1_MARK, OVCN_1_114_MARK, OVCN2_1_MARK,
+};
+static const unsigned int usb1_otg_ctrl_1_pins[] = {
+       /* PWEN, EXTLP, OVCN, OVCN2 */
+       138, 116, 162, 117, 18,
+};
+static const unsigned int usb1_otg_ctrl_1_mux[] = {
+       PWEN_1_138_MARK, EXTLP_1_MARK, OVCN_1_162_MARK, OVCN2_1_MARK,
+};
 
 static const struct sh_pfc_pin_group pinmux_groups[] = {
+       SH_PFC_PIN_GROUP(bsc_data8),
+       SH_PFC_PIN_GROUP(bsc_data16),
+       SH_PFC_PIN_GROUP(bsc_cs0),
+       SH_PFC_PIN_GROUP(bsc_cs2),
+       SH_PFC_PIN_GROUP(bsc_cs4),
+       SH_PFC_PIN_GROUP(bsc_cs5a),
+       SH_PFC_PIN_GROUP(bsc_cs5b),
+       SH_PFC_PIN_GROUP(bsc_cs6a),
+       SH_PFC_PIN_GROUP(bsc_rd_we8),
+       SH_PFC_PIN_GROUP(bsc_rd_we16),
+       SH_PFC_PIN_GROUP(bsc_bs),
+       SH_PFC_PIN_GROUP(bsc_rdwr),
+       SH_PFC_PIN_GROUP(ceu_data_0_7),
+       SH_PFC_PIN_GROUP(ceu_data_8_15),
+       SH_PFC_PIN_GROUP(ceu_clk_0),
+       SH_PFC_PIN_GROUP(ceu_clk_1),
+       SH_PFC_PIN_GROUP(ceu_clk_2),
+       SH_PFC_PIN_GROUP(ceu_sync),
+       SH_PFC_PIN_GROUP(ceu_field),
+       SH_PFC_PIN_GROUP(flctl_data),
+       SH_PFC_PIN_GROUP(flctl_ce0),
+       SH_PFC_PIN_GROUP(flctl_ce1),
+       SH_PFC_PIN_GROUP(flctl_ctrl),
+       SH_PFC_PIN_GROUP(fsia_mclk_in),
+       SH_PFC_PIN_GROUP(fsia_mclk_out),
+       SH_PFC_PIN_GROUP(fsia_sclk_in),
+       SH_PFC_PIN_GROUP(fsia_sclk_out),
+       SH_PFC_PIN_GROUP(fsia_data_in),
+       SH_PFC_PIN_GROUP(fsia_data_out),
+       SH_PFC_PIN_GROUP(fsia_spdif_0),
+       SH_PFC_PIN_GROUP(fsia_spdif_1),
+       SH_PFC_PIN_GROUP(fsib_mclk_in),
+       SH_PFC_PIN_GROUP(hdmi),
+       SH_PFC_PIN_GROUP(intc_irq0_0),
+       SH_PFC_PIN_GROUP(intc_irq0_1),
+       SH_PFC_PIN_GROUP(intc_irq1),
+       SH_PFC_PIN_GROUP(intc_irq2_0),
+       SH_PFC_PIN_GROUP(intc_irq2_1),
+       SH_PFC_PIN_GROUP(intc_irq3_0),
+       SH_PFC_PIN_GROUP(intc_irq3_1),
+       SH_PFC_PIN_GROUP(intc_irq4_0),
+       SH_PFC_PIN_GROUP(intc_irq4_1),
+       SH_PFC_PIN_GROUP(intc_irq5),
+       SH_PFC_PIN_GROUP(intc_irq6_0),
+       SH_PFC_PIN_GROUP(intc_irq6_1),
+       SH_PFC_PIN_GROUP(intc_irq7_0),
+       SH_PFC_PIN_GROUP(intc_irq7_1),
+       SH_PFC_PIN_GROUP(intc_irq8_0),
+       SH_PFC_PIN_GROUP(intc_irq8_1),
+       SH_PFC_PIN_GROUP(intc_irq9_0),
+       SH_PFC_PIN_GROUP(intc_irq9_1),
+       SH_PFC_PIN_GROUP(intc_irq10),
+       SH_PFC_PIN_GROUP(intc_irq11),
+       SH_PFC_PIN_GROUP(intc_irq12_0),
+       SH_PFC_PIN_GROUP(intc_irq12_1),
+       SH_PFC_PIN_GROUP(intc_irq13_0),
+       SH_PFC_PIN_GROUP(intc_irq13_1),
+       SH_PFC_PIN_GROUP(intc_irq14_0),
+       SH_PFC_PIN_GROUP(intc_irq14_1),
+       SH_PFC_PIN_GROUP(intc_irq15_0),
+       SH_PFC_PIN_GROUP(intc_irq15_1),
+       SH_PFC_PIN_GROUP(intc_irq16_0),
+       SH_PFC_PIN_GROUP(intc_irq16_1),
+       SH_PFC_PIN_GROUP(intc_irq17),
+       SH_PFC_PIN_GROUP(intc_irq18),
+       SH_PFC_PIN_GROUP(intc_irq19),
+       SH_PFC_PIN_GROUP(intc_irq20),
+       SH_PFC_PIN_GROUP(intc_irq21),
+       SH_PFC_PIN_GROUP(intc_irq22),
+       SH_PFC_PIN_GROUP(intc_irq23),
+       SH_PFC_PIN_GROUP(intc_irq24),
+       SH_PFC_PIN_GROUP(intc_irq25),
+       SH_PFC_PIN_GROUP(intc_irq26_0),
+       SH_PFC_PIN_GROUP(intc_irq26_1),
+       SH_PFC_PIN_GROUP(intc_irq27_0),
+       SH_PFC_PIN_GROUP(intc_irq27_1),
+       SH_PFC_PIN_GROUP(intc_irq28_0),
+       SH_PFC_PIN_GROUP(intc_irq28_1),
+       SH_PFC_PIN_GROUP(intc_irq29_0),
+       SH_PFC_PIN_GROUP(intc_irq29_1),
+       SH_PFC_PIN_GROUP(intc_irq30_0),
+       SH_PFC_PIN_GROUP(intc_irq30_1),
+       SH_PFC_PIN_GROUP(intc_irq31_0),
+       SH_PFC_PIN_GROUP(intc_irq31_1),
+       SH_PFC_PIN_GROUP(keysc_in04_0),
+       SH_PFC_PIN_GROUP(keysc_in04_1),
+       SH_PFC_PIN_GROUP(keysc_in5),
+       SH_PFC_PIN_GROUP(keysc_in6),
+       SH_PFC_PIN_GROUP(keysc_in7),
+       SH_PFC_PIN_GROUP(keysc_out4),
+       SH_PFC_PIN_GROUP(keysc_out5),
+       SH_PFC_PIN_GROUP(keysc_out6),
+       SH_PFC_PIN_GROUP(keysc_out8),
+       SH_PFC_PIN_GROUP(lcd_data8),
+       SH_PFC_PIN_GROUP(lcd_data9),
+       SH_PFC_PIN_GROUP(lcd_data12),
+       SH_PFC_PIN_GROUP(lcd_data16),
+       SH_PFC_PIN_GROUP(lcd_data18),
+       SH_PFC_PIN_GROUP(lcd_data24),
+       SH_PFC_PIN_GROUP(lcd_display),
+       SH_PFC_PIN_GROUP(lcd_lclk),
+       SH_PFC_PIN_GROUP(lcd_sync),
+       SH_PFC_PIN_GROUP(lcd_sys),
        SH_PFC_PIN_GROUP(mmc0_data1_0),
        SH_PFC_PIN_GROUP(mmc0_data4_0),
        SH_PFC_PIN_GROUP(mmc0_data8_0),
@@ -1083,6 +1859,24 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(mmc0_data4_1),
        SH_PFC_PIN_GROUP(mmc0_data8_1),
        SH_PFC_PIN_GROUP(mmc0_ctrl_1),
+       SH_PFC_PIN_GROUP(scifa0_data),
+       SH_PFC_PIN_GROUP(scifa0_clk),
+       SH_PFC_PIN_GROUP(scifa0_ctrl),
+       SH_PFC_PIN_GROUP(scifa1_data),
+       SH_PFC_PIN_GROUP(scifa1_clk),
+       SH_PFC_PIN_GROUP(scifa1_ctrl),
+       SH_PFC_PIN_GROUP(scifa2_data),
+       SH_PFC_PIN_GROUP(scifa2_clk),
+       SH_PFC_PIN_GROUP(scifa2_ctrl),
+       SH_PFC_PIN_GROUP(scifa3_data),
+       SH_PFC_PIN_GROUP(scifa3_clk),
+       SH_PFC_PIN_GROUP(scifa3_ctrl_0),
+       SH_PFC_PIN_GROUP(scifa3_ctrl_1),
+       SH_PFC_PIN_GROUP(scifa4_data),
+       SH_PFC_PIN_GROUP(scifa5_data),
+       SH_PFC_PIN_GROUP(scifb_data),
+       SH_PFC_PIN_GROUP(scifb_clk),
+       SH_PFC_PIN_GROUP(scifb_ctrl),
        SH_PFC_PIN_GROUP(sdhi0_data1),
        SH_PFC_PIN_GROUP(sdhi0_data4),
        SH_PFC_PIN_GROUP(sdhi0_ctrl),
@@ -1094,6 +1888,144 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(sdhi2_data1),
        SH_PFC_PIN_GROUP(sdhi2_data4),
        SH_PFC_PIN_GROUP(sdhi2_ctrl),
+       SH_PFC_PIN_GROUP(usb0_vbus),
+       SH_PFC_PIN_GROUP(usb0_otg_id),
+       SH_PFC_PIN_GROUP(usb0_otg_ctrl),
+       SH_PFC_PIN_GROUP(usb1_vbus),
+       SH_PFC_PIN_GROUP(usb1_otg_id_0),
+       SH_PFC_PIN_GROUP(usb1_otg_id_1),
+       SH_PFC_PIN_GROUP(usb1_otg_ctrl_0),
+       SH_PFC_PIN_GROUP(usb1_otg_ctrl_1),
+};
+
+static const char * const bsc_groups[] = {
+       "bsc_data8",
+       "bsc_data16",
+       "bsc_cs0",
+       "bsc_cs2",
+       "bsc_cs4",
+       "bsc_cs5a",
+       "bsc_cs5b",
+       "bsc_cs6a",
+       "bsc_rd_we8",
+       "bsc_rd_we16",
+       "bsc_bs",
+       "bsc_rdwr",
+};
+
+static const char * const ceu_groups[] = {
+       "ceu_data_0_7",
+       "ceu_data_8_15",
+       "ceu_clk_0",
+       "ceu_clk_1",
+       "ceu_clk_2",
+       "ceu_sync",
+       "ceu_field",
+};
+
+static const char * const flctl_groups[] = {
+       "flctl_data",
+       "flctl_ce0",
+       "flctl_ce1",
+       "flctl_ctrl",
+};
+
+static const char * const fsia_groups[] = {
+       "fsia_mclk_in",
+       "fsia_mclk_out",
+       "fsia_sclk_in",
+       "fsia_sclk_out",
+       "fsia_data_in",
+       "fsia_data_out",
+       "fsia_spdif_0",
+       "fsia_spdif_1",
+};
+
+static const char * const fsib_groups[] = {
+       "fsib_mclk_in",
+};
+
+static const char * const hdmi_groups[] = {
+       "hdmi",
+};
+
+static const char * const intc_groups[] = {
+       "intc_irq0_0",
+       "intc_irq0_1",
+       "intc_irq1",
+       "intc_irq2_0",
+       "intc_irq2_1",
+       "intc_irq3_0",
+       "intc_irq3_1",
+       "intc_irq4_0",
+       "intc_irq4_1",
+       "intc_irq5",
+       "intc_irq6_0",
+       "intc_irq6_1",
+       "intc_irq7_0",
+       "intc_irq7_1",
+       "intc_irq8_0",
+       "intc_irq8_1",
+       "intc_irq9_0",
+       "intc_irq9_1",
+       "intc_irq10",
+       "intc_irq11",
+       "intc_irq12_0",
+       "intc_irq12_1",
+       "intc_irq13_0",
+       "intc_irq13_1",
+       "intc_irq14_0",
+       "intc_irq14_1",
+       "intc_irq15_0",
+       "intc_irq15_1",
+       "intc_irq16_0",
+       "intc_irq16_1",
+       "intc_irq17",
+       "intc_irq18",
+       "intc_irq19",
+       "intc_irq20",
+       "intc_irq21",
+       "intc_irq22",
+       "intc_irq23",
+       "intc_irq24",
+       "intc_irq25",
+       "intc_irq26_0",
+       "intc_irq26_1",
+       "intc_irq27_0",
+       "intc_irq27_1",
+       "intc_irq28_0",
+       "intc_irq28_1",
+       "intc_irq29_0",
+       "intc_irq29_1",
+       "intc_irq30_0",
+       "intc_irq30_1",
+       "intc_irq31_0",
+       "intc_irq31_1",
+};
+
+static const char * const keysc_groups[] = {
+       "keysc_in04_0",
+       "keysc_in04_1",
+       "keysc_in5",
+       "keysc_in6",
+       "keysc_in7",
+       "keysc_out4",
+       "keysc_out5",
+       "keysc_out6",
+       "keysc_out8",
+};
+
+static const char * const lcd_groups[] = {
+       "lcd_data8",
+       "lcd_data9",
+       "lcd_data12",
+       "lcd_data16",
+       "lcd_data18",
+       "lcd_data24",
+       "lcd_display",
+       "lcd_lclk",
+       "lcd_sync",
+       "lcd_sys",
 };
 
 static const char * const mmc0_groups[] = {
@@ -1107,6 +2039,45 @@ static const char * const mmc0_groups[] = {
        "mmc0_ctrl_1",
 };
 
+static const char * const scifa0_groups[] = {
+       "scifa0_data",
+       "scifa0_clk",
+       "scifa0_ctrl",
+};
+
+static const char * const scifa1_groups[] = {
+       "scifa1_data",
+       "scifa1_clk",
+       "scifa1_ctrl",
+};
+
+static const char * const scifa2_groups[] = {
+       "scifa2_data",
+       "scifa2_clk",
+       "scifa2_ctrl",
+};
+
+static const char * const scifa3_groups[] = {
+       "scifa3_data",
+       "scifa3_clk",
+       "scifa3_ctrl_0",
+       "scifa3_ctrl_1",
+};
+
+static const char * const scifa4_groups[] = {
+       "scifa4_data",
+};
+
+static const char * const scifa5_groups[] = {
+       "scifa5_data",
+};
+
+static const char * const scifb_groups[] = {
+       "scifb_data",
+       "scifb_clk",
+       "scifb_ctrl",
+};
+
 static const char * const sdhi0_groups[] = {
        "sdhi0_data1",
        "sdhi0_data4",
@@ -1127,256 +2098,55 @@ static const char * const sdhi2_groups[] = {
        "sdhi2_ctrl",
 };
 
+static const char * const usb0_groups[] = {
+       "usb0_vbus",
+       "usb0_otg_id",
+       "usb0_otg_ctrl",
+};
+
+static const char * const usb1_groups[] = {
+       "usb1_vbus",
+       "usb1_otg_id_0",
+       "usb1_otg_id_1",
+       "usb1_otg_ctrl_0",
+       "usb1_otg_ctrl_1",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
+       SH_PFC_FUNCTION(bsc),
+       SH_PFC_FUNCTION(ceu),
+       SH_PFC_FUNCTION(flctl),
+       SH_PFC_FUNCTION(fsia),
+       SH_PFC_FUNCTION(fsib),
+       SH_PFC_FUNCTION(hdmi),
+       SH_PFC_FUNCTION(intc),
+       SH_PFC_FUNCTION(keysc),
+       SH_PFC_FUNCTION(lcd),
        SH_PFC_FUNCTION(mmc0),
+       SH_PFC_FUNCTION(scifa0),
+       SH_PFC_FUNCTION(scifa1),
+       SH_PFC_FUNCTION(scifa2),
+       SH_PFC_FUNCTION(scifa3),
+       SH_PFC_FUNCTION(scifa4),
+       SH_PFC_FUNCTION(scifa5),
+       SH_PFC_FUNCTION(scifb),
        SH_PFC_FUNCTION(sdhi0),
        SH_PFC_FUNCTION(sdhi1),
        SH_PFC_FUNCTION(sdhi2),
+       SH_PFC_FUNCTION(usb0),
+       SH_PFC_FUNCTION(usb1),
 };
 
-#define PINMUX_FN_BASE ARRAY_SIZE(pinmux_pins)
-
-static const struct pinmux_func pinmux_func_gpios[] = {
-       /* IRQ */
-       GPIO_FN(IRQ0_6),        GPIO_FN(IRQ0_162),      GPIO_FN(IRQ1),
-       GPIO_FN(IRQ2_4),        GPIO_FN(IRQ2_5),        GPIO_FN(IRQ3_8),
-       GPIO_FN(IRQ3_16),       GPIO_FN(IRQ4_17),       GPIO_FN(IRQ4_163),
-       GPIO_FN(IRQ5),          GPIO_FN(IRQ6_39),       GPIO_FN(IRQ6_164),
-       GPIO_FN(IRQ7_40),       GPIO_FN(IRQ7_167),      GPIO_FN(IRQ8_41),
-       GPIO_FN(IRQ8_168),      GPIO_FN(IRQ9_42),       GPIO_FN(IRQ9_169),
-       GPIO_FN(IRQ10),         GPIO_FN(IRQ11),         GPIO_FN(IRQ12_80),
-       GPIO_FN(IRQ12_137),     GPIO_FN(IRQ13_81),      GPIO_FN(IRQ13_145),
-       GPIO_FN(IRQ14_82),      GPIO_FN(IRQ14_146),     GPIO_FN(IRQ15_83),
-       GPIO_FN(IRQ15_147),     GPIO_FN(IRQ16_84),      GPIO_FN(IRQ16_170),
-       GPIO_FN(IRQ17),         GPIO_FN(IRQ18),         GPIO_FN(IRQ19),
-       GPIO_FN(IRQ20),         GPIO_FN(IRQ21),         GPIO_FN(IRQ22),
-       GPIO_FN(IRQ23),         GPIO_FN(IRQ24),         GPIO_FN(IRQ25),
-       GPIO_FN(IRQ26_121),     GPIO_FN(IRQ26_172),     GPIO_FN(IRQ27_122),
-       GPIO_FN(IRQ27_180),     GPIO_FN(IRQ28_123),     GPIO_FN(IRQ28_181),
-       GPIO_FN(IRQ29_129),     GPIO_FN(IRQ29_182),     GPIO_FN(IRQ30_130),
-       GPIO_FN(IRQ30_183),     GPIO_FN(IRQ31_138),     GPIO_FN(IRQ31_184),
-
-       /* MSIOF0 */
-       GPIO_FN(MSIOF0_TSYNC),  GPIO_FN(MSIOF0_TSCK),   GPIO_FN(MSIOF0_RXD),
-       GPIO_FN(MSIOF0_RSCK),   GPIO_FN(MSIOF0_RSYNC),  GPIO_FN(MSIOF0_MCK0),
-       GPIO_FN(MSIOF0_MCK1),   GPIO_FN(MSIOF0_SS1),    GPIO_FN(MSIOF0_SS2),
-       GPIO_FN(MSIOF0_TXD),
-
-       /* MSIOF1 */
-       GPIO_FN(MSIOF1_TSCK_39),        GPIO_FN(MSIOF1_TSCK_88),
-       GPIO_FN(MSIOF1_TSYNC_40),       GPIO_FN(MSIOF1_TSYNC_89),
-       GPIO_FN(MSIOF1_TXD_41),         GPIO_FN(MSIOF1_TXD_90),
-       GPIO_FN(MSIOF1_RXD_42),         GPIO_FN(MSIOF1_RXD_91),
-       GPIO_FN(MSIOF1_SS1_43),         GPIO_FN(MSIOF1_SS1_92),
-       GPIO_FN(MSIOF1_SS2_44),         GPIO_FN(MSIOF1_SS2_93),
-       GPIO_FN(MSIOF1_RSCK),           GPIO_FN(MSIOF1_RSYNC),
-       GPIO_FN(MSIOF1_MCK0),           GPIO_FN(MSIOF1_MCK1),
-
-       /* MSIOF2 */
-       GPIO_FN(MSIOF2_RSCK),   GPIO_FN(MSIOF2_RSYNC),  GPIO_FN(MSIOF2_MCK0),
-       GPIO_FN(MSIOF2_MCK1),   GPIO_FN(MSIOF2_SS1),    GPIO_FN(MSIOF2_SS2),
-       GPIO_FN(MSIOF2_TSYNC),  GPIO_FN(MSIOF2_TSCK),   GPIO_FN(MSIOF2_RXD),
-       GPIO_FN(MSIOF2_TXD),
-
-       /* BBIF1 */
-       GPIO_FN(BBIF1_RXD),     GPIO_FN(BBIF1_TSYNC),   GPIO_FN(BBIF1_TSCK),
-       GPIO_FN(BBIF1_TXD),     GPIO_FN(BBIF1_RSCK),    GPIO_FN(BBIF1_RSYNC),
-       GPIO_FN(BBIF1_FLOW),    GPIO_FN(BB_RX_FLOW_N),
-
-       /* BBIF2 */
-       GPIO_FN(BBIF2_TSCK1),   GPIO_FN(BBIF2_TSYNC1),
-       GPIO_FN(BBIF2_TXD1),    GPIO_FN(BBIF2_RXD),
-
-       /* FSI */
-       GPIO_FN(FSIACK),        GPIO_FN(FSIBCK),        GPIO_FN(FSIAILR),
-       GPIO_FN(FSIAIBT),       GPIO_FN(FSIAISLD),      GPIO_FN(FSIAOMC),
-       GPIO_FN(FSIAOLR),       GPIO_FN(FSIAOBT),       GPIO_FN(FSIAOSLD),
-       GPIO_FN(FSIASPDIF_11),  GPIO_FN(FSIASPDIF_15),
-
-       /* FMSI */
-       GPIO_FN(FMSOCK),        GPIO_FN(FMSOOLR),       GPIO_FN(FMSIOLR),
-       GPIO_FN(FMSOOBT),       GPIO_FN(FMSIOBT),       GPIO_FN(FMSOSLD),
-       GPIO_FN(FMSOILR),       GPIO_FN(FMSIILR),       GPIO_FN(FMSOIBT),
-       GPIO_FN(FMSIIBT),       GPIO_FN(FMSISLD),       GPIO_FN(FMSICK),
-
-       /* SCIFA0 */
-       GPIO_FN(SCIFA0_TXD),    GPIO_FN(SCIFA0_RXD),    GPIO_FN(SCIFA0_SCK),
-       GPIO_FN(SCIFA0_RTS),    GPIO_FN(SCIFA0_CTS),
-
-       /* SCIFA1 */
-       GPIO_FN(SCIFA1_TXD),    GPIO_FN(SCIFA1_RXD),    GPIO_FN(SCIFA1_SCK),
-       GPIO_FN(SCIFA1_RTS),    GPIO_FN(SCIFA1_CTS),
-
-       /* SCIFA2 */
-       GPIO_FN(SCIFA2_CTS1),   GPIO_FN(SCIFA2_RTS1),   GPIO_FN(SCIFA2_TXD1),
-       GPIO_FN(SCIFA2_RXD1),   GPIO_FN(SCIFA2_SCK1),
-
-       /* SCIFA3 */
-       GPIO_FN(SCIFA3_CTS_43),         GPIO_FN(SCIFA3_CTS_140),
-       GPIO_FN(SCIFA3_RTS_44),         GPIO_FN(SCIFA3_RTS_141),
-       GPIO_FN(SCIFA3_SCK),            GPIO_FN(SCIFA3_TXD),
-       GPIO_FN(SCIFA3_RXD),
-
-       /* SCIFA4 */
-       GPIO_FN(SCIFA4_RXD),    GPIO_FN(SCIFA4_TXD),
-
-       /* SCIFA5 */
-       GPIO_FN(SCIFA5_RXD),    GPIO_FN(SCIFA5_TXD),
-
-       /* SCIFB */
-       GPIO_FN(SCIFB_SCK),     GPIO_FN(SCIFB_RTS),     GPIO_FN(SCIFB_CTS),
-       GPIO_FN(SCIFB_TXD),     GPIO_FN(SCIFB_RXD),
-
-       /* CEU */
-       GPIO_FN(VIO_HD),        GPIO_FN(VIO_CKO1),      GPIO_FN(VIO_CKO2),
-       GPIO_FN(VIO_VD),        GPIO_FN(VIO_CLK),       GPIO_FN(VIO_FIELD),
-       GPIO_FN(VIO_CKO),       GPIO_FN(VIO_D0),        GPIO_FN(VIO_D1),
-       GPIO_FN(VIO_D2),        GPIO_FN(VIO_D3),        GPIO_FN(VIO_D4),
-       GPIO_FN(VIO_D5),        GPIO_FN(VIO_D6),        GPIO_FN(VIO_D7),
-       GPIO_FN(VIO_D8),        GPIO_FN(VIO_D9),        GPIO_FN(VIO_D10),
-       GPIO_FN(VIO_D11),       GPIO_FN(VIO_D12),       GPIO_FN(VIO_D13),
-       GPIO_FN(VIO_D14),       GPIO_FN(VIO_D15),
-
-       /* USB0 */
-       GPIO_FN(IDIN_0),        GPIO_FN(EXTLP_0),       GPIO_FN(OVCN2_0),
-       GPIO_FN(PWEN_0),        GPIO_FN(OVCN_0),        GPIO_FN(VBUS0_0),
-
-       /* USB1 */
-       GPIO_FN(IDIN_1_18),     GPIO_FN(IDIN_1_113),
-       GPIO_FN(OVCN_1_114),    GPIO_FN(OVCN_1_162),
-       GPIO_FN(PWEN_1_115),    GPIO_FN(PWEN_1_138),
-       GPIO_FN(EXTLP_1),       GPIO_FN(OVCN2_1),
-       GPIO_FN(VBUS0_1),
-
-       /* GPIO */
-       GPIO_FN(GPI0),  GPIO_FN(GPI1),  GPIO_FN(GPO0),  GPIO_FN(GPO1),
-
-       /* BSC */
-       GPIO_FN(BS),    GPIO_FN(WE1),   GPIO_FN(CKO),
-       GPIO_FN(WAIT),  GPIO_FN(RDWR),
-
-       GPIO_FN(A0),    GPIO_FN(A1),    GPIO_FN(A2),
-       GPIO_FN(A3),    GPIO_FN(A6),    GPIO_FN(A7),
-       GPIO_FN(A8),    GPIO_FN(A9),    GPIO_FN(A10),
-       GPIO_FN(A11),   GPIO_FN(A12),   GPIO_FN(A13),
-       GPIO_FN(A14),   GPIO_FN(A15),   GPIO_FN(A16),
-       GPIO_FN(A17),   GPIO_FN(A18),   GPIO_FN(A19),
-       GPIO_FN(A20),   GPIO_FN(A21),   GPIO_FN(A22),
-       GPIO_FN(A23),   GPIO_FN(A24),   GPIO_FN(A25),
-       GPIO_FN(A26),
-
-       GPIO_FN(CS0),   GPIO_FN(CS2),   GPIO_FN(CS4),
-       GPIO_FN(CS5A),  GPIO_FN(CS5B),  GPIO_FN(CS6A),
-
-       /* BSC/FLCTL */
-       GPIO_FN(RD_FSC),        GPIO_FN(WE0_FWE),       GPIO_FN(A4_FOE),
-       GPIO_FN(A5_FCDE),       GPIO_FN(D0_NAF0),       GPIO_FN(D1_NAF1),
-       GPIO_FN(D2_NAF2),       GPIO_FN(D3_NAF3),       GPIO_FN(D4_NAF4),
-       GPIO_FN(D5_NAF5),       GPIO_FN(D6_NAF6),       GPIO_FN(D7_NAF7),
-       GPIO_FN(D8_NAF8),       GPIO_FN(D9_NAF9),       GPIO_FN(D10_NAF10),
-       GPIO_FN(D11_NAF11),     GPIO_FN(D12_NAF12),     GPIO_FN(D13_NAF13),
-       GPIO_FN(D14_NAF14),     GPIO_FN(D15_NAF15),
-
-       /* SPU2 */
-       GPIO_FN(VINT_I),
-
-       /* FLCTL */
-       GPIO_FN(FCE1),  GPIO_FN(FCE0),  GPIO_FN(FRB),
-
-       /* HSI */
-       GPIO_FN(GP_RX_FLAG),    GPIO_FN(GP_RX_DATA),    GPIO_FN(GP_TX_READY),
-       GPIO_FN(GP_RX_WAKE),    GPIO_FN(MP_TX_FLAG),    GPIO_FN(MP_TX_DATA),
-       GPIO_FN(MP_RX_READY),   GPIO_FN(MP_TX_WAKE),
-
-       /* MFI */
-       GPIO_FN(MFIv6),
-       GPIO_FN(MFIv4),
-
-       GPIO_FN(MEMC_BUSCLK_MEMC_A0),   GPIO_FN(MEMC_ADV_MEMC_DREQ0),
-       GPIO_FN(MEMC_WAIT_MEMC_DREQ1),  GPIO_FN(MEMC_CS1_MEMC_A1),
-       GPIO_FN(MEMC_CS0),      GPIO_FN(MEMC_NOE),
-       GPIO_FN(MEMC_NWE),      GPIO_FN(MEMC_INT),
-
-       GPIO_FN(MEMC_AD0),      GPIO_FN(MEMC_AD1),      GPIO_FN(MEMC_AD2),
-       GPIO_FN(MEMC_AD3),      GPIO_FN(MEMC_AD4),      GPIO_FN(MEMC_AD5),
-       GPIO_FN(MEMC_AD6),      GPIO_FN(MEMC_AD7),      GPIO_FN(MEMC_AD8),
-       GPIO_FN(MEMC_AD9),      GPIO_FN(MEMC_AD10),     GPIO_FN(MEMC_AD11),
-       GPIO_FN(MEMC_AD12),     GPIO_FN(MEMC_AD13),     GPIO_FN(MEMC_AD14),
-       GPIO_FN(MEMC_AD15),
-
-       /* SIM */
-       GPIO_FN(SIM_RST),       GPIO_FN(SIM_CLK),       GPIO_FN(SIM_D),
-
-       /* TPU */
-       GPIO_FN(TPU0TO0),       GPIO_FN(TPU0TO1),       GPIO_FN(TPU0TO2_93),
-       GPIO_FN(TPU0TO2_99),    GPIO_FN(TPU0TO3),
-
-       /* I2C2 */
-       GPIO_FN(I2C_SCL2),      GPIO_FN(I2C_SDA2),
-
-       /* I2C3(1) */
-       GPIO_FN(I2C_SCL3),      GPIO_FN(I2C_SDA3),
-
-       /* I2C3(2) */
-       GPIO_FN(I2C_SCL3S),     GPIO_FN(I2C_SDA3S),
-
-       /* I2C4(2) */
-       GPIO_FN(I2C_SCL4),      GPIO_FN(I2C_SDA4),
-
-       /* I2C4(2) */
-       GPIO_FN(I2C_SCL4S),     GPIO_FN(I2C_SDA4S),
-
-       /* KEYSC */
-       GPIO_FN(KEYOUT0),       GPIO_FN(KEYIN0_121),    GPIO_FN(KEYIN0_136),
-       GPIO_FN(KEYOUT1),       GPIO_FN(KEYIN1_122),    GPIO_FN(KEYIN1_135),
-       GPIO_FN(KEYOUT2),       GPIO_FN(KEYIN2_123),    GPIO_FN(KEYIN2_134),
-       GPIO_FN(KEYOUT3),       GPIO_FN(KEYIN3_124),    GPIO_FN(KEYIN3_133),
-       GPIO_FN(KEYOUT4),       GPIO_FN(KEYIN4),        GPIO_FN(KEYOUT5),
-       GPIO_FN(KEYIN5),        GPIO_FN(KEYOUT6),       GPIO_FN(KEYIN6),
-       GPIO_FN(KEYOUT7),       GPIO_FN(KEYIN7),
-
-       /* LCDC */
-       GPIO_FN(LCDHSYN),       GPIO_FN(LCDCS), GPIO_FN(LCDVSYN),
-       GPIO_FN(LCDDCK),        GPIO_FN(LCDWR), GPIO_FN(LCDRD),
-       GPIO_FN(LCDDISP),       GPIO_FN(LCDRS), GPIO_FN(LCDLCLK),
-       GPIO_FN(LCDDON),
-
-       GPIO_FN(LCDD0),         GPIO_FN(LCDD1),         GPIO_FN(LCDD2),
-       GPIO_FN(LCDD3),         GPIO_FN(LCDD4),         GPIO_FN(LCDD5),
-       GPIO_FN(LCDD6),         GPIO_FN(LCDD7),         GPIO_FN(LCDD8),
-       GPIO_FN(LCDD9),         GPIO_FN(LCDD10),        GPIO_FN(LCDD11),
-       GPIO_FN(LCDD12),        GPIO_FN(LCDD13),        GPIO_FN(LCDD14),
-       GPIO_FN(LCDD15),        GPIO_FN(LCDD16),        GPIO_FN(LCDD17),
-       GPIO_FN(LCDD18),        GPIO_FN(LCDD19),        GPIO_FN(LCDD20),
-       GPIO_FN(LCDD21),        GPIO_FN(LCDD22),        GPIO_FN(LCDD23),
-
-       GPIO_FN(LCDC0_SELECT),
-       GPIO_FN(LCDC1_SELECT),
-
-       /* IRDA */
-       GPIO_FN(IRDA_OUT),      GPIO_FN(IRDA_IN),       GPIO_FN(IRDA_FIRSEL),
-       GPIO_FN(IROUT_139),     GPIO_FN(IROUT_140),
-
-       /* TSIF1 */
-       GPIO_FN(TS0_1SELECT),
-       GPIO_FN(TS0_2SELECT),
-       GPIO_FN(TS1_1SELECT),
-       GPIO_FN(TS1_2SELECT),
-
-       GPIO_FN(TS_SPSYNC1),    GPIO_FN(TS_SDAT1),
-       GPIO_FN(TS_SDEN1),      GPIO_FN(TS_SCK1),
-
-       /* TSIF2 */
-       GPIO_FN(TS_SPSYNC2),    GPIO_FN(TS_SDAT2),
-       GPIO_FN(TS_SDEN2),      GPIO_FN(TS_SCK2),
-
-       /* HDMI */
-       GPIO_FN(HDMI_HPD),      GPIO_FN(HDMI_CEC),
-
-       /* SDENC */
-       GPIO_FN(SDENC_CPG),
-       GPIO_FN(SDENC_DV_CLKI),
-};
+#undef PORTCR
+#define PORTCR(nr, reg)                                                        \
+       {                                                               \
+               PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) {             \
+                       _PCRH(PORT##nr##_IN, 0, 0, PORT##nr##_OUT),     \
+                               PORT##nr##_FN0, PORT##nr##_FN1,         \
+                               PORT##nr##_FN2, PORT##nr##_FN3,         \
+                               PORT##nr##_FN4, PORT##nr##_FN5,         \
+                               PORT##nr##_FN6, PORT##nr##_FN7 }        \
+       }
 
 static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        PORTCR(0,       0xE6051000), /* PORT0CR */
@@ -1776,45 +2546,114 @@ static const struct pinmux_data_reg pinmux_data_regs[] = {
 #define EXT_IRQ16L(n) evt2irq(0x200 + ((n) << 5))
 #define EXT_IRQ16H(n) evt2irq(0x3200 + (((n) - 16) << 5))
 static const struct pinmux_irq pinmux_irqs[] = {
-       PINMUX_IRQ(EXT_IRQ16L(0), GPIO_PORT6, GPIO_PORT162),
-       PINMUX_IRQ(EXT_IRQ16L(1), GPIO_PORT12),
-       PINMUX_IRQ(EXT_IRQ16L(2), GPIO_PORT4, GPIO_PORT5),
-       PINMUX_IRQ(EXT_IRQ16L(3), GPIO_PORT8, GPIO_PORT16),
-       PINMUX_IRQ(EXT_IRQ16L(4), GPIO_PORT17, GPIO_PORT163),
-       PINMUX_IRQ(EXT_IRQ16L(5), GPIO_PORT18),
-       PINMUX_IRQ(EXT_IRQ16L(6), GPIO_PORT39, GPIO_PORT164),
-       PINMUX_IRQ(EXT_IRQ16L(7), GPIO_PORT40, GPIO_PORT167),
-       PINMUX_IRQ(EXT_IRQ16L(8), GPIO_PORT41, GPIO_PORT168),
-       PINMUX_IRQ(EXT_IRQ16L(9), GPIO_PORT42, GPIO_PORT169),
-       PINMUX_IRQ(EXT_IRQ16L(10), GPIO_PORT65),
-       PINMUX_IRQ(EXT_IRQ16L(11), GPIO_PORT67),
-       PINMUX_IRQ(EXT_IRQ16L(12), GPIO_PORT80, GPIO_PORT137),
-       PINMUX_IRQ(EXT_IRQ16L(13), GPIO_PORT81, GPIO_PORT145),
-       PINMUX_IRQ(EXT_IRQ16L(14), GPIO_PORT82, GPIO_PORT146),
-       PINMUX_IRQ(EXT_IRQ16L(15), GPIO_PORT83, GPIO_PORT147),
-       PINMUX_IRQ(EXT_IRQ16H(16), GPIO_PORT84, GPIO_PORT170),
-       PINMUX_IRQ(EXT_IRQ16H(17), GPIO_PORT85),
-       PINMUX_IRQ(EXT_IRQ16H(18), GPIO_PORT86),
-       PINMUX_IRQ(EXT_IRQ16H(19), GPIO_PORT87),
-       PINMUX_IRQ(EXT_IRQ16H(20), GPIO_PORT92),
-       PINMUX_IRQ(EXT_IRQ16H(21), GPIO_PORT93),
-       PINMUX_IRQ(EXT_IRQ16H(22), GPIO_PORT94),
-       PINMUX_IRQ(EXT_IRQ16H(23), GPIO_PORT95),
-       PINMUX_IRQ(EXT_IRQ16H(24), GPIO_PORT112),
-       PINMUX_IRQ(EXT_IRQ16H(25), GPIO_PORT119),
-       PINMUX_IRQ(EXT_IRQ16H(26), GPIO_PORT121, GPIO_PORT172),
-       PINMUX_IRQ(EXT_IRQ16H(27), GPIO_PORT122, GPIO_PORT180),
-       PINMUX_IRQ(EXT_IRQ16H(28), GPIO_PORT123, GPIO_PORT181),
-       PINMUX_IRQ(EXT_IRQ16H(29), GPIO_PORT129, GPIO_PORT182),
-       PINMUX_IRQ(EXT_IRQ16H(30), GPIO_PORT130, GPIO_PORT183),
-       PINMUX_IRQ(EXT_IRQ16H(31), GPIO_PORT138, GPIO_PORT184),
+       PINMUX_IRQ(EXT_IRQ16L(0), 6, 162),
+       PINMUX_IRQ(EXT_IRQ16L(1), 12),
+       PINMUX_IRQ(EXT_IRQ16L(2), 4, 5),
+       PINMUX_IRQ(EXT_IRQ16L(3), 8, 16),
+       PINMUX_IRQ(EXT_IRQ16L(4), 17, 163),
+       PINMUX_IRQ(EXT_IRQ16L(5), 18),
+       PINMUX_IRQ(EXT_IRQ16L(6), 39, 164),
+       PINMUX_IRQ(EXT_IRQ16L(7), 40, 167),
+       PINMUX_IRQ(EXT_IRQ16L(8), 41, 168),
+       PINMUX_IRQ(EXT_IRQ16L(9), 42, 169),
+       PINMUX_IRQ(EXT_IRQ16L(10), 65),
+       PINMUX_IRQ(EXT_IRQ16L(11), 67),
+       PINMUX_IRQ(EXT_IRQ16L(12), 80, 137),
+       PINMUX_IRQ(EXT_IRQ16L(13), 81, 145),
+       PINMUX_IRQ(EXT_IRQ16L(14), 82, 146),
+       PINMUX_IRQ(EXT_IRQ16L(15), 83, 147),
+       PINMUX_IRQ(EXT_IRQ16H(16), 84, 170),
+       PINMUX_IRQ(EXT_IRQ16H(17), 85),
+       PINMUX_IRQ(EXT_IRQ16H(18), 86),
+       PINMUX_IRQ(EXT_IRQ16H(19), 87),
+       PINMUX_IRQ(EXT_IRQ16H(20), 92),
+       PINMUX_IRQ(EXT_IRQ16H(21), 93),
+       PINMUX_IRQ(EXT_IRQ16H(22), 94),
+       PINMUX_IRQ(EXT_IRQ16H(23), 95),
+       PINMUX_IRQ(EXT_IRQ16H(24), 112),
+       PINMUX_IRQ(EXT_IRQ16H(25), 119),
+       PINMUX_IRQ(EXT_IRQ16H(26), 121, 172),
+       PINMUX_IRQ(EXT_IRQ16H(27), 122, 180),
+       PINMUX_IRQ(EXT_IRQ16H(28), 123, 181),
+       PINMUX_IRQ(EXT_IRQ16H(29), 129, 182),
+       PINMUX_IRQ(EXT_IRQ16H(30), 130, 183),
+       PINMUX_IRQ(EXT_IRQ16H(31), 138, 184),
+};
+
+#define PORTnCR_PULMD_OFF      (0 << 6)
+#define PORTnCR_PULMD_DOWN     (2 << 6)
+#define PORTnCR_PULMD_UP       (3 << 6)
+#define PORTnCR_PULMD_MASK     (3 << 6)
+
+struct sh7372_portcr_group {
+       unsigned int end_pin;
+       unsigned int offset;
+};
+
+static const struct sh7372_portcr_group sh7372_portcr_offsets[] = {
+       { 45,  0x1000 }, { 75,  0x2000 }, { 99,  0x0000 }, { 120, 0x3000 },
+       { 151, 0x0000 }, { 155, 0x3000 }, { 166, 0x0000 }, { 190, 0x2000 },
+};
+
+static void __iomem *sh7372_pinmux_portcr(struct sh_pfc *pfc, unsigned int pin)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(sh7372_portcr_offsets); ++i) {
+               const struct sh7372_portcr_group *group =
+                       &sh7372_portcr_offsets[i];
+
+               if (i <= group->end_pin)
+                       return pfc->window->virt + group->offset + pin;
+       }
+
+       return NULL;
+}
+
+static unsigned int sh7372_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin)
+{
+       void __iomem *addr = sh7372_pinmux_portcr(pfc, pin);
+       u32 value = ioread8(addr) & PORTnCR_PULMD_MASK;
+
+       switch (value) {
+       case PORTnCR_PULMD_UP:
+               return PIN_CONFIG_BIAS_PULL_UP;
+       case PORTnCR_PULMD_DOWN:
+               return PIN_CONFIG_BIAS_PULL_DOWN;
+       case PORTnCR_PULMD_OFF:
+       default:
+               return PIN_CONFIG_BIAS_DISABLE;
+       }
+}
+
+static void sh7372_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
+                                  unsigned int bias)
+{
+       void __iomem *addr = sh7372_pinmux_portcr(pfc, pin);
+       u32 value = ioread8(addr) & ~PORTnCR_PULMD_MASK;
+
+       switch (bias) {
+       case PIN_CONFIG_BIAS_PULL_UP:
+               value |= PORTnCR_PULMD_UP;
+               break;
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               value |= PORTnCR_PULMD_DOWN;
+               break;
+       }
+
+       iowrite8(value, addr);
+}
+
+static const struct sh_pfc_soc_operations sh7372_pinmux_ops = {
+       .get_bias = sh7372_pinmux_get_bias,
+       .set_bias = sh7372_pinmux_set_bias,
 };
 
 const struct sh_pfc_soc_info sh7372_pinmux_info = {
        .name = "sh7372_pfc",
+       .ops = &sh7372_pinmux_ops,
+
        .input = { PINMUX_INPUT_BEGIN, PINMUX_INPUT_END },
-       .input_pu = { PINMUX_INPUT_PULLUP_BEGIN, PINMUX_INPUT_PULLUP_END },
-       .input_pd = { PINMUX_INPUT_PULLDOWN_BEGIN, PINMUX_INPUT_PULLDOWN_END },
        .output = { PINMUX_OUTPUT_BEGIN, PINMUX_OUTPUT_END },
        .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
 
@@ -1825,9 +2664,6 @@ const struct sh_pfc_soc_info sh7372_pinmux_info = {
        .functions = pinmux_functions,
        .nr_functions = ARRAY_SIZE(pinmux_functions),
 
-       .func_gpios = pinmux_func_gpios,
-       .nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios),
-
        .cfg_regs = pinmux_config_regs,
        .data_regs = pinmux_data_regs,
 
index 587f7772abf2aa46b8608115829aad85d9cb500a..7956df58d751a3231db71b2c4f8c00f0cb231b7d 100644 (file)
  */
 #include <linux/io.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/pinctrl/pinconf-generic.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+#include <linux/slab.h>
 
-#include <mach/sh73a0.h>
 #include <mach/irqs.h>
 
 #include "core.h"
@@ -2538,6 +2541,157 @@ static const unsigned int sdhi2_ctrl_pins[] = {
 static const unsigned int sdhi2_ctrl_mux[] = {
        SDHICMD2_MARK, SDHICLK2_MARK,
 };
+/* - TPU0 ------------------------------------------------------------------- */
+static const unsigned int tpu0_to0_pins[] = {
+       /* TO */
+       55,
+};
+static const unsigned int tpu0_to0_mux[] = {
+       TPU0TO0_MARK,
+};
+static const unsigned int tpu0_to1_pins[] = {
+       /* TO */
+       59,
+};
+static const unsigned int tpu0_to1_mux[] = {
+       TPU0TO1_MARK,
+};
+static const unsigned int tpu0_to2_pins[] = {
+       /* TO */
+       140,
+};
+static const unsigned int tpu0_to2_mux[] = {
+       TPU0TO2_MARK,
+};
+static const unsigned int tpu0_to3_pins[] = {
+       /* TO */
+       141,
+};
+static const unsigned int tpu0_to3_mux[] = {
+       TPU0TO3_MARK,
+};
+/* - TPU1 ------------------------------------------------------------------- */
+static const unsigned int tpu1_to0_pins[] = {
+       /* TO */
+       246,
+};
+static const unsigned int tpu1_to0_mux[] = {
+       TPU1TO0_MARK,
+};
+static const unsigned int tpu1_to1_0_pins[] = {
+       /* TO */
+       28,
+};
+static const unsigned int tpu1_to1_0_mux[] = {
+       PORT28_TPU1TO1_MARK,
+};
+static const unsigned int tpu1_to1_1_pins[] = {
+       /* TO */
+       29,
+};
+static const unsigned int tpu1_to1_1_mux[] = {
+       PORT29_TPU1TO1_MARK,
+};
+static const unsigned int tpu1_to2_pins[] = {
+       /* TO */
+       153,
+};
+static const unsigned int tpu1_to2_mux[] = {
+       TPU1TO2_MARK,
+};
+static const unsigned int tpu1_to3_pins[] = {
+       /* TO */
+       145,
+};
+static const unsigned int tpu1_to3_mux[] = {
+       TPU1TO3_MARK,
+};
+/* - TPU2 ------------------------------------------------------------------- */
+static const unsigned int tpu2_to0_pins[] = {
+       /* TO */
+       248,
+};
+static const unsigned int tpu2_to0_mux[] = {
+       TPU2TO0_MARK,
+};
+static const unsigned int tpu2_to1_pins[] = {
+       /* TO */
+       197,
+};
+static const unsigned int tpu2_to1_mux[] = {
+       TPU2TO1_MARK,
+};
+static const unsigned int tpu2_to2_pins[] = {
+       /* TO */
+       50,
+};
+static const unsigned int tpu2_to2_mux[] = {
+       TPU2TO2_MARK,
+};
+static const unsigned int tpu2_to3_pins[] = {
+       /* TO */
+       51,
+};
+static const unsigned int tpu2_to3_mux[] = {
+       TPU2TO3_MARK,
+};
+/* - TPU3 ------------------------------------------------------------------- */
+static const unsigned int tpu3_to0_pins[] = {
+       /* TO */
+       163,
+};
+static const unsigned int tpu3_to0_mux[] = {
+       TPU3TO0_MARK,
+};
+static const unsigned int tpu3_to1_pins[] = {
+       /* TO */
+       247,
+};
+static const unsigned int tpu3_to1_mux[] = {
+       TPU3TO1_MARK,
+};
+static const unsigned int tpu3_to2_pins[] = {
+       /* TO */
+       54,
+};
+static const unsigned int tpu3_to2_mux[] = {
+       TPU3TO2_MARK,
+};
+static const unsigned int tpu3_to3_pins[] = {
+       /* TO */
+       53,
+};
+static const unsigned int tpu3_to3_mux[] = {
+       TPU3TO3_MARK,
+};
+/* - TPU4 ------------------------------------------------------------------- */
+static const unsigned int tpu4_to0_pins[] = {
+       /* TO */
+       241,
+};
+static const unsigned int tpu4_to0_mux[] = {
+       TPU4TO0_MARK,
+};
+static const unsigned int tpu4_to1_pins[] = {
+       /* TO */
+       199,
+};
+static const unsigned int tpu4_to1_mux[] = {
+       TPU4TO1_MARK,
+};
+static const unsigned int tpu4_to2_pins[] = {
+       /* TO */
+       58,
+};
+static const unsigned int tpu4_to2_mux[] = {
+       TPU4TO2_MARK,
+};
+static const unsigned int tpu4_to3_pins[] = {
+       /* TO */
+};
+static const unsigned int tpu4_to3_mux[] = {
+       TPU4TO3_MARK,
+};
 /* - USB -------------------------------------------------------------------- */
 static const unsigned int usb_vbus_pins[] = {
        /* VBUS */
@@ -2689,6 +2843,27 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(sdhi2_data1),
        SH_PFC_PIN_GROUP(sdhi2_data4),
        SH_PFC_PIN_GROUP(sdhi2_ctrl),
+       SH_PFC_PIN_GROUP(tpu0_to0),
+       SH_PFC_PIN_GROUP(tpu0_to1),
+       SH_PFC_PIN_GROUP(tpu0_to2),
+       SH_PFC_PIN_GROUP(tpu0_to3),
+       SH_PFC_PIN_GROUP(tpu1_to0),
+       SH_PFC_PIN_GROUP(tpu1_to1_0),
+       SH_PFC_PIN_GROUP(tpu1_to1_1),
+       SH_PFC_PIN_GROUP(tpu1_to2),
+       SH_PFC_PIN_GROUP(tpu1_to3),
+       SH_PFC_PIN_GROUP(tpu2_to0),
+       SH_PFC_PIN_GROUP(tpu2_to1),
+       SH_PFC_PIN_GROUP(tpu2_to2),
+       SH_PFC_PIN_GROUP(tpu2_to3),
+       SH_PFC_PIN_GROUP(tpu3_to0),
+       SH_PFC_PIN_GROUP(tpu3_to1),
+       SH_PFC_PIN_GROUP(tpu3_to2),
+       SH_PFC_PIN_GROUP(tpu3_to3),
+       SH_PFC_PIN_GROUP(tpu4_to0),
+       SH_PFC_PIN_GROUP(tpu4_to1),
+       SH_PFC_PIN_GROUP(tpu4_to2),
+       SH_PFC_PIN_GROUP(tpu4_to3),
        SH_PFC_PIN_GROUP(usb_vbus),
 };
 
@@ -2908,6 +3083,42 @@ static const char * const usb_groups[] = {
        "usb_vbus",
 };
 
+static const char * const tpu0_groups[] = {
+       "tpu0_to0",
+       "tpu0_to1",
+       "tpu0_to2",
+       "tpu0_to3",
+};
+
+static const char * const tpu1_groups[] = {
+       "tpu1_to0",
+       "tpu1_to1_0",
+       "tpu1_to1_1",
+       "tpu1_to2",
+       "tpu1_to3",
+};
+
+static const char * const tpu2_groups[] = {
+       "tpu2_to0",
+       "tpu2_to1",
+       "tpu2_to2",
+       "tpu2_to3",
+};
+
+static const char * const tpu3_groups[] = {
+       "tpu3_to0",
+       "tpu3_to1",
+       "tpu3_to2",
+       "tpu3_to3",
+};
+
+static const char * const tpu4_groups[] = {
+       "tpu4_to0",
+       "tpu4_to1",
+       "tpu4_to2",
+       "tpu4_to3",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(bsc),
        SH_PFC_FUNCTION(fsia),
@@ -2933,400 +3144,14 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(sdhi0),
        SH_PFC_FUNCTION(sdhi1),
        SH_PFC_FUNCTION(sdhi2),
+       SH_PFC_FUNCTION(tpu0),
+       SH_PFC_FUNCTION(tpu1),
+       SH_PFC_FUNCTION(tpu2),
+       SH_PFC_FUNCTION(tpu3),
+       SH_PFC_FUNCTION(tpu4),
        SH_PFC_FUNCTION(usb),
 };
 
-#define PINMUX_FN_BASE GPIO_FN_GPI0
-
-static const struct pinmux_func pinmux_func_gpios[] = {
-       /* Table 25-1 (Functions 0-7) */
-       GPIO_FN(GPI0),
-       GPIO_FN(GPI1),
-       GPIO_FN(GPI2),
-       GPIO_FN(GPI3),
-       GPIO_FN(GPI4),
-       GPIO_FN(GPI5),
-       GPIO_FN(GPI6),
-       GPIO_FN(GPI7),
-       GPIO_FN(GPO7), \
-       GPIO_FN(MFG0_OUT2),
-       GPIO_FN(GPO6), \
-       GPIO_FN(MFG1_OUT2),
-       GPIO_FN(GPO5), \
-       GPIO_FN(PORT16_VIO_CKOR),
-       GPIO_FN(PORT19_VIO_CKO2),
-       GPIO_FN(GPO0),
-       GPIO_FN(GPO1),
-       GPIO_FN(GPO2), \
-       GPIO_FN(STATUS0),
-       GPIO_FN(GPO3), \
-       GPIO_FN(STATUS1),
-       GPIO_FN(GPO4), \
-       GPIO_FN(STATUS2),
-       GPIO_FN(VINT),
-       GPIO_FN(TCKON),
-       GPIO_FN(XDVFS1), \
-       GPIO_FN(MFG0_OUT1), \
-       GPIO_FN(PORT27_IROUT),
-       GPIO_FN(XDVFS2), \
-       GPIO_FN(PORT28_TPU1TO1),
-       GPIO_FN(SIM_RST), \
-       GPIO_FN(PORT29_TPU1TO1),
-       GPIO_FN(SIM_CLK), \
-       GPIO_FN(PORT30_VIO_CKOR),
-       GPIO_FN(SIM_D), \
-       GPIO_FN(PORT31_IROUT),
-       GPIO_FN(XWUP),
-       GPIO_FN(VACK),
-       GPIO_FN(XTAL1L),
-       GPIO_FN(PORT49_IROUT), \
-       GPIO_FN(BBIF2_TSYNC2), \
-       GPIO_FN(TPU2TO2), \
-
-       GPIO_FN(BBIF2_TSCK2), \
-       GPIO_FN(TPU2TO3), \
-       GPIO_FN(BBIF2_TXD2),
-       GPIO_FN(TPU3TO3), \
-       GPIO_FN(TPU3TO2), \
-       GPIO_FN(TPU0TO0),
-       GPIO_FN(A0), \
-       GPIO_FN(BS_),
-       GPIO_FN(A12), \
-       GPIO_FN(TPU4TO2),
-       GPIO_FN(A13), \
-       GPIO_FN(TPU0TO1),
-       GPIO_FN(A14), \
-       GPIO_FN(A15), \
-       GPIO_FN(A16), \
-       GPIO_FN(MSIOF0_SS1),
-       GPIO_FN(A17), \
-       GPIO_FN(MSIOF0_TSYNC),
-       GPIO_FN(A18), \
-       GPIO_FN(MSIOF0_TSCK),
-       GPIO_FN(A19), \
-       GPIO_FN(MSIOF0_TXD),
-       GPIO_FN(A20), \
-       GPIO_FN(MSIOF0_RSCK),
-       GPIO_FN(A21), \
-       GPIO_FN(MSIOF0_RSYNC),
-       GPIO_FN(A22), \
-       GPIO_FN(MSIOF0_MCK0),
-       GPIO_FN(A23), \
-       GPIO_FN(MSIOF0_MCK1),
-       GPIO_FN(A24), \
-       GPIO_FN(MSIOF0_RXD),
-       GPIO_FN(A25), \
-       GPIO_FN(MSIOF0_SS2),
-       GPIO_FN(A26), \
-       GPIO_FN(FCE1_),
-       GPIO_FN(DACK0),
-       GPIO_FN(FCE0_), \
-       GPIO_FN(WAIT_), \
-       GPIO_FN(DREQ0),
-       GPIO_FN(FRB),
-       GPIO_FN(CKO),
-       GPIO_FN(NBRSTOUT_),
-       GPIO_FN(NBRST_),
-       GPIO_FN(BBIF2_TXD),
-       GPIO_FN(BBIF2_RXD),
-       GPIO_FN(BBIF2_SYNC),
-       GPIO_FN(BBIF2_SCK),
-       GPIO_FN(MFG3_IN2),
-       GPIO_FN(MFG3_IN1),
-       GPIO_FN(BBIF1_SS2), \
-       GPIO_FN(MFG3_OUT1),
-       GPIO_FN(HSI_RX_DATA), \
-       GPIO_FN(BBIF1_RXD),
-       GPIO_FN(HSI_TX_WAKE), \
-       GPIO_FN(BBIF1_TSCK),
-       GPIO_FN(HSI_TX_DATA), \
-       GPIO_FN(BBIF1_TSYNC),
-       GPIO_FN(HSI_TX_READY), \
-       GPIO_FN(BBIF1_TXD),
-       GPIO_FN(HSI_RX_READY), \
-       GPIO_FN(BBIF1_RSCK), \
-       GPIO_FN(HSI_RX_WAKE), \
-       GPIO_FN(BBIF1_RSYNC), \
-       GPIO_FN(HSI_RX_FLAG), \
-       GPIO_FN(BBIF1_SS1), \
-       GPIO_FN(BBIF1_FLOW),
-       GPIO_FN(HSI_TX_FLAG),
-       GPIO_FN(VIO_VD), \
-       GPIO_FN(VIO2_VD), \
-
-       GPIO_FN(VIO_HD), \
-       GPIO_FN(VIO2_HD), \
-       GPIO_FN(VIO_D0), \
-       GPIO_FN(PORT130_MSIOF2_RXD), \
-       GPIO_FN(VIO_D1), \
-       GPIO_FN(PORT131_MSIOF2_SS1), \
-       GPIO_FN(VIO_D2), \
-       GPIO_FN(PORT132_MSIOF2_SS2), \
-       GPIO_FN(VIO_D3), \
-       GPIO_FN(MSIOF2_TSYNC), \
-       GPIO_FN(VIO_D4), \
-       GPIO_FN(MSIOF2_TXD), \
-       GPIO_FN(VIO_D5), \
-       GPIO_FN(MSIOF2_TSCK), \
-       GPIO_FN(VIO_D6), \
-       GPIO_FN(VIO_D7), \
-       GPIO_FN(VIO_D8), \
-       GPIO_FN(VIO2_D0), \
-       GPIO_FN(VIO_D9), \
-       GPIO_FN(VIO2_D1), \
-       GPIO_FN(VIO_D10), \
-       GPIO_FN(TPU0TO2), \
-       GPIO_FN(VIO2_D2), \
-       GPIO_FN(VIO_D11), \
-       GPIO_FN(TPU0TO3), \
-       GPIO_FN(VIO2_D3), \
-       GPIO_FN(VIO_D12), \
-       GPIO_FN(VIO2_D4), \
-       GPIO_FN(VIO_D13), \
-       GPIO_FN(VIO2_D5), \
-       GPIO_FN(VIO_D14), \
-       GPIO_FN(VIO2_D6), \
-       GPIO_FN(VIO_D15), \
-       GPIO_FN(TPU1TO3), \
-       GPIO_FN(VIO2_D7), \
-       GPIO_FN(VIO_CLK), \
-       GPIO_FN(VIO2_CLK), \
-       GPIO_FN(VIO_FIELD), \
-       GPIO_FN(VIO2_FIELD), \
-       GPIO_FN(VIO_CKO),
-       GPIO_FN(A27), \
-       GPIO_FN(MFG0_IN1), \
-       GPIO_FN(MFG0_IN2),
-       GPIO_FN(TS_SPSYNC3), \
-       GPIO_FN(MSIOF2_RSCK),
-       GPIO_FN(TS_SDAT3), \
-       GPIO_FN(MSIOF2_RSYNC),
-       GPIO_FN(TPU1TO2), \
-       GPIO_FN(TS_SDEN3), \
-       GPIO_FN(PORT153_MSIOF2_SS1),
-       GPIO_FN(MSIOF2_MCK0),
-       GPIO_FN(MSIOF2_MCK1),
-       GPIO_FN(PORT156_MSIOF2_SS2),
-       GPIO_FN(PORT157_MSIOF2_RXD),
-       GPIO_FN(DINT_), \
-       GPIO_FN(TS_SCK3),
-       GPIO_FN(NMI),
-       GPIO_FN(TPU3TO0),
-       GPIO_FN(BBIF2_TSYNC1),
-       GPIO_FN(BBIF2_TSCK1),
-       GPIO_FN(BBIF2_TXD1),
-       GPIO_FN(MFG2_OUT2), \
-       GPIO_FN(TPU2TO1),
-       GPIO_FN(TPU4TO1), \
-       GPIO_FN(MFG4_OUT2),
-       GPIO_FN(D16),
-       GPIO_FN(D17),
-       GPIO_FN(D18),
-       GPIO_FN(D19),
-       GPIO_FN(D20),
-       GPIO_FN(D21),
-       GPIO_FN(D22),
-       GPIO_FN(PORT207_MSIOF0L_SS1), \
-       GPIO_FN(D23),
-       GPIO_FN(PORT208_MSIOF0L_SS2), \
-       GPIO_FN(D24),
-       GPIO_FN(D25),
-       GPIO_FN(DREQ2), \
-       GPIO_FN(PORT210_MSIOF0L_SS1), \
-       GPIO_FN(D26),
-       GPIO_FN(PORT211_MSIOF0L_SS2), \
-       GPIO_FN(D27),
-       GPIO_FN(TS_SPSYNC1), \
-       GPIO_FN(MSIOF0L_MCK0), \
-       GPIO_FN(D28),
-       GPIO_FN(TS_SDAT1), \
-       GPIO_FN(MSIOF0L_MCK1), \
-       GPIO_FN(D29),
-       GPIO_FN(TS_SDEN1), \
-       GPIO_FN(MSIOF0L_RSCK), \
-       GPIO_FN(D30),
-       GPIO_FN(TS_SCK1), \
-       GPIO_FN(MSIOF0L_RSYNC), \
-       GPIO_FN(D31),
-       GPIO_FN(DACK2), \
-       GPIO_FN(MSIOF0L_TSYNC), \
-       GPIO_FN(VIO2_FIELD3), \
-       GPIO_FN(DACK3), \
-       GPIO_FN(PORT218_VIO_CKOR),
-       GPIO_FN(DREQ3), \
-       GPIO_FN(MSIOF0L_TSCK), \
-       GPIO_FN(VIO2_CLK3), \
-       GPIO_FN(DREQ1), \
-       GPIO_FN(PWEN), \
-       GPIO_FN(MSIOF0L_RXD), \
-       GPIO_FN(VIO2_HD3), \
-       GPIO_FN(DACK1), \
-       GPIO_FN(OVCN), \
-       GPIO_FN(MSIOF0L_TXD), \
-       GPIO_FN(VIO2_VD3), \
-
-       GPIO_FN(OVCN2),
-       GPIO_FN(EXTLP), \
-       GPIO_FN(PORT226_VIO_CKO2),
-       GPIO_FN(IDIN),
-       GPIO_FN(MFG1_IN1),
-       GPIO_FN(MSIOF1_TXD), \
-       GPIO_FN(MSIOF1_TSYNC), \
-       GPIO_FN(MSIOF1_TSCK), \
-       GPIO_FN(MSIOF1_RXD), \
-       GPIO_FN(MSIOF1_RSCK), \
-       GPIO_FN(VIO2_CLK2), \
-       GPIO_FN(MSIOF1_RSYNC), \
-       GPIO_FN(MFG1_IN2), \
-       GPIO_FN(VIO2_VD2), \
-       GPIO_FN(MSIOF1_MCK0), \
-       GPIO_FN(MSIOF1_MCK1), \
-       GPIO_FN(MSIOF1_SS1), \
-       GPIO_FN(VIO2_FIELD2), \
-       GPIO_FN(MSIOF1_SS2), \
-       GPIO_FN(VIO2_HD2), \
-       GPIO_FN(PORT241_IROUT), \
-       GPIO_FN(MFG4_OUT1), \
-       GPIO_FN(TPU4TO0),
-       GPIO_FN(MFG4_IN2),
-       GPIO_FN(PORT243_VIO_CKO2),
-       GPIO_FN(MFG2_IN1), \
-       GPIO_FN(MSIOF2R_RXD),
-       GPIO_FN(MFG2_IN2), \
-       GPIO_FN(MSIOF2R_TXD),
-       GPIO_FN(MFG1_OUT1), \
-       GPIO_FN(TPU1TO0),
-       GPIO_FN(MFG3_OUT2), \
-       GPIO_FN(TPU3TO1),
-       GPIO_FN(MFG2_OUT1), \
-       GPIO_FN(TPU2TO0), \
-       GPIO_FN(MSIOF2R_TSCK),
-       GPIO_FN(PORT249_IROUT), \
-       GPIO_FN(MFG4_IN1), \
-       GPIO_FN(MSIOF2R_TSYNC),
-       GPIO_FN(SDHICLK0),
-       GPIO_FN(SDHICD0),
-       GPIO_FN(SDHID0_0),
-       GPIO_FN(SDHID0_1),
-       GPIO_FN(SDHID0_2),
-       GPIO_FN(SDHID0_3),
-       GPIO_FN(SDHICMD0),
-       GPIO_FN(SDHIWP0),
-       GPIO_FN(SDHICLK1),
-       GPIO_FN(SDHID1_0), \
-       GPIO_FN(TS_SPSYNC2),
-       GPIO_FN(SDHID1_1), \
-       GPIO_FN(TS_SDAT2),
-       GPIO_FN(SDHID1_2), \
-       GPIO_FN(TS_SDEN2),
-       GPIO_FN(SDHID1_3), \
-       GPIO_FN(TS_SCK2),
-       GPIO_FN(SDHICMD1),
-       GPIO_FN(SDHICLK2),
-       GPIO_FN(SDHID2_0), \
-       GPIO_FN(TS_SPSYNC4),
-       GPIO_FN(SDHID2_1), \
-       GPIO_FN(TS_SDAT4),
-       GPIO_FN(SDHID2_2), \
-       GPIO_FN(TS_SDEN4),
-       GPIO_FN(SDHID2_3), \
-       GPIO_FN(TS_SCK4),
-       GPIO_FN(SDHICMD2),
-       GPIO_FN(MMCCLK0),
-       GPIO_FN(MMCD0_0),
-       GPIO_FN(MMCD0_1),
-       GPIO_FN(MMCD0_2),
-       GPIO_FN(MMCD0_3),
-       GPIO_FN(MMCD0_4), \
-       GPIO_FN(TS_SPSYNC5),
-       GPIO_FN(MMCD0_5), \
-       GPIO_FN(TS_SDAT5),
-       GPIO_FN(MMCD0_6), \
-       GPIO_FN(TS_SDEN5),
-       GPIO_FN(MMCD0_7), \
-       GPIO_FN(TS_SCK5),
-       GPIO_FN(MMCCMD0),
-       GPIO_FN(RESETOUTS_), \
-       GPIO_FN(EXTAL2OUT),
-       GPIO_FN(MCP_WAIT__MCP_FRB),
-       GPIO_FN(MCP_CKO), \
-       GPIO_FN(MMCCLK1),
-       GPIO_FN(MCP_D15_MCP_NAF15),
-       GPIO_FN(MCP_D14_MCP_NAF14),
-       GPIO_FN(MCP_D13_MCP_NAF13),
-       GPIO_FN(MCP_D12_MCP_NAF12),
-       GPIO_FN(MCP_D11_MCP_NAF11),
-       GPIO_FN(MCP_D10_MCP_NAF10),
-       GPIO_FN(MCP_D9_MCP_NAF9),
-       GPIO_FN(MCP_D8_MCP_NAF8), \
-       GPIO_FN(MMCCMD1),
-       GPIO_FN(MCP_D7_MCP_NAF7), \
-       GPIO_FN(MMCD1_7),
-
-       GPIO_FN(MCP_D6_MCP_NAF6), \
-       GPIO_FN(MMCD1_6),
-       GPIO_FN(MCP_D5_MCP_NAF5), \
-       GPIO_FN(MMCD1_5),
-       GPIO_FN(MCP_D4_MCP_NAF4), \
-       GPIO_FN(MMCD1_4),
-       GPIO_FN(MCP_D3_MCP_NAF3), \
-       GPIO_FN(MMCD1_3),
-       GPIO_FN(MCP_D2_MCP_NAF2), \
-       GPIO_FN(MMCD1_2),
-       GPIO_FN(MCP_D1_MCP_NAF1), \
-       GPIO_FN(MMCD1_1),
-       GPIO_FN(MCP_D0_MCP_NAF0), \
-       GPIO_FN(MMCD1_0),
-       GPIO_FN(MCP_NBRSTOUT_),
-       GPIO_FN(MCP_WE0__MCP_FWE), \
-       GPIO_FN(MCP_RDWR_MCP_FWE),
-
-       /* MSEL2 special cases */
-       GPIO_FN(TSIF2_TS_XX1),
-       GPIO_FN(TSIF2_TS_XX2),
-       GPIO_FN(TSIF2_TS_XX3),
-       GPIO_FN(TSIF2_TS_XX4),
-       GPIO_FN(TSIF2_TS_XX5),
-       GPIO_FN(TSIF1_TS_XX1),
-       GPIO_FN(TSIF1_TS_XX2),
-       GPIO_FN(TSIF1_TS_XX3),
-       GPIO_FN(TSIF1_TS_XX4),
-       GPIO_FN(TSIF1_TS_XX5),
-       GPIO_FN(TSIF0_TS_XX1),
-       GPIO_FN(TSIF0_TS_XX2),
-       GPIO_FN(TSIF0_TS_XX3),
-       GPIO_FN(TSIF0_TS_XX4),
-       GPIO_FN(TSIF0_TS_XX5),
-       GPIO_FN(MST1_TS_XX1),
-       GPIO_FN(MST1_TS_XX2),
-       GPIO_FN(MST1_TS_XX3),
-       GPIO_FN(MST1_TS_XX4),
-       GPIO_FN(MST1_TS_XX5),
-       GPIO_FN(MST0_TS_XX1),
-       GPIO_FN(MST0_TS_XX2),
-       GPIO_FN(MST0_TS_XX3),
-       GPIO_FN(MST0_TS_XX4),
-       GPIO_FN(MST0_TS_XX5),
-
-       /* MSEL3 special cases */
-       GPIO_FN(SDHI0_VCCQ_MC0_ON),
-       GPIO_FN(SDHI0_VCCQ_MC0_OFF),
-       GPIO_FN(DEBUG_MON_VIO),
-       GPIO_FN(DEBUG_MON_LCDD),
-       GPIO_FN(LCDC_LCDC0),
-       GPIO_FN(LCDC_LCDC1),
-
-       /* MSEL4 special cases */
-       GPIO_FN(IRQ9_MEM_INT),
-       GPIO_FN(IRQ9_MCP_INT),
-       GPIO_FN(A11),
-       GPIO_FN(TPU4TO3),
-       GPIO_FN(RESETA_N_PU_ON),
-       GPIO_FN(RESETA_N_PU_OFF),
-       GPIO_FN(EDBGREQ_PD),
-       GPIO_FN(EDBGREQ_PU),
-};
-
 #undef PORTCR
 #define PORTCR(nr, reg)                                                        \
        {                                                               \
@@ -3888,6 +3713,92 @@ static const struct pinmux_irq pinmux_irqs[] = {
        PINMUX_IRQ(EXT_IRQ16L(9), 308),
 };
 
+/* -----------------------------------------------------------------------------
+ * VCCQ MC0 regulator
+ */
+
+static void sh73a0_vccq_mc0_endisable(struct regulator_dev *reg, bool enable)
+{
+       struct sh_pfc *pfc = reg->reg_data;
+       void __iomem *addr = pfc->window[1].virt + 4;
+       unsigned long flags;
+       u32 value;
+
+       spin_lock_irqsave(&pfc->lock, flags);
+
+       value = ioread32(addr);
+
+       if (enable)
+               value |= BIT(28);
+       else
+               value &= ~BIT(28);
+
+       iowrite32(value, addr);
+
+       spin_unlock_irqrestore(&pfc->lock, flags);
+}
+
+static int sh73a0_vccq_mc0_enable(struct regulator_dev *reg)
+{
+       sh73a0_vccq_mc0_endisable(reg, true);
+       return 0;
+}
+
+static int sh73a0_vccq_mc0_disable(struct regulator_dev *reg)
+{
+       sh73a0_vccq_mc0_endisable(reg, false);
+       return 0;
+}
+
+static int sh73a0_vccq_mc0_is_enabled(struct regulator_dev *reg)
+{
+       struct sh_pfc *pfc = reg->reg_data;
+       void __iomem *addr = pfc->window[1].virt + 4;
+       unsigned long flags;
+       u32 value;
+
+       spin_lock_irqsave(&pfc->lock, flags);
+       value = ioread32(addr);
+       spin_unlock_irqrestore(&pfc->lock, flags);
+
+       return !!(value & BIT(28));
+}
+
+static int sh73a0_vccq_mc0_get_voltage(struct regulator_dev *reg)
+{
+       return 3300000;
+}
+
+static struct regulator_ops sh73a0_vccq_mc0_ops = {
+       .enable = sh73a0_vccq_mc0_enable,
+       .disable = sh73a0_vccq_mc0_disable,
+       .is_enabled = sh73a0_vccq_mc0_is_enabled,
+       .get_voltage = sh73a0_vccq_mc0_get_voltage,
+};
+
+static const struct regulator_desc sh73a0_vccq_mc0_desc = {
+       .owner = THIS_MODULE,
+       .name = "vccq_mc0",
+       .type = REGULATOR_VOLTAGE,
+       .ops = &sh73a0_vccq_mc0_ops,
+};
+
+static struct regulator_consumer_supply sh73a0_vccq_mc0_consumers[] = {
+       REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
+};
+
+static const struct regulator_init_data sh73a0_vccq_mc0_init_data = {
+       .constraints = {
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies = ARRAY_SIZE(sh73a0_vccq_mc0_consumers),
+       .consumer_supplies = sh73a0_vccq_mc0_consumers,
+};
+
+/* -----------------------------------------------------------------------------
+ * Pin bias
+ */
+
 #define PORTnCR_PULMD_OFF      (0 << 6)
 #define PORTnCR_PULMD_DOWN     (2 << 6)
 #define PORTnCR_PULMD_UP       (3 << 6)
@@ -3934,7 +3845,51 @@ static void sh73a0_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
        iowrite8(value, addr);
 }
 
+/* -----------------------------------------------------------------------------
+ * SoC information
+ */
+
+struct sh73a0_pinmux_data {
+       struct regulator_dev *vccq_mc0;
+};
+
+static int sh73a0_pinmux_soc_init(struct sh_pfc *pfc)
+{
+       struct sh73a0_pinmux_data *data;
+       struct regulator_config cfg = { };
+       int ret;
+
+       data = devm_kzalloc(pfc->dev, sizeof(*data), GFP_KERNEL);
+       if (data == NULL)
+               return -ENOMEM;
+
+       cfg.dev = pfc->dev;
+       cfg.init_data = &sh73a0_vccq_mc0_init_data;
+       cfg.driver_data = pfc;
+
+       data->vccq_mc0 = regulator_register(&sh73a0_vccq_mc0_desc, &cfg);
+       if (IS_ERR(data->vccq_mc0)) {
+               ret = PTR_ERR(data->vccq_mc0);
+               dev_err(pfc->dev, "Failed to register VCCQ MC0 regulator: %d\n",
+                       ret);
+               return ret;
+       }
+
+       pfc->soc_data = data;
+
+       return 0;
+}
+
+static void sh73a0_pinmux_soc_exit(struct sh_pfc *pfc)
+{
+       struct sh73a0_pinmux_data *data = pfc->soc_data;
+
+       regulator_unregister(data->vccq_mc0);
+}
+
 static const struct sh_pfc_soc_operations sh73a0_pinmux_ops = {
+       .init = sh73a0_pinmux_soc_init,
+       .exit = sh73a0_pinmux_soc_exit,
        .get_bias = sh73a0_pinmux_get_bias,
        .set_bias = sh73a0_pinmux_set_bias,
 };
@@ -3956,9 +3911,6 @@ const struct sh_pfc_soc_info sh73a0_pinmux_info = {
        .functions = pinmux_functions,
        .nr_functions = ARRAY_SIZE(pinmux_functions),
 
-       .func_gpios = pinmux_func_gpios,
-       .nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios),
-
        .cfg_regs = pinmux_config_regs,
        .data_regs = pinmux_data_regs,
 
index 3b785fc428d5b1c9211c19fbceb0f763a721e385..830ae1ffd0b5e4d46495523415d888e8bbd72315 100644 (file)
@@ -11,8 +11,8 @@
 #ifndef __SH_PFC_H
 #define __SH_PFC_H
 
+#include <linux/bug.h>
 #include <linux/stringify.h>
-#include <asm-generic/gpio.h>
 
 typedef unsigned short pinmux_enum_t;
 
@@ -129,6 +129,8 @@ struct pinmux_range {
 struct sh_pfc;
 
 struct sh_pfc_soc_operations {
+       int (*init)(struct sh_pfc *pfc);
+       void (*exit)(struct sh_pfc *pfc);
        unsigned int (*get_bias)(struct sh_pfc *pfc, unsigned int pin);
        void (*set_bias)(struct sh_pfc *pfc, unsigned int pin,
                         unsigned int bias);
index 93c06588ddca58a18ec85025e0ef26f4e1945b3a..ad6863a76af9bd5201796d73591cf17bb127cd76 100644 (file)
@@ -274,11 +274,17 @@ static void coh901331_shutdown(struct platform_device *pdev)
        clk_disable_unprepare(rtap->clk);
 }
 
+static const struct of_device_id coh901331_dt_match[] = {
+       { .compatible = "stericsson,coh901331" },
+       {},
+};
+
 static struct platform_driver coh901331_driver = {
        .driver = {
                .name = "rtc-coh901331",
                .owner = THIS_MODULE,
                .pm = &coh901331_pm_ops,
+               .of_match_table = coh901331_dt_match,
        },
        .remove = __exit_p(coh901331_remove),
        .shutdown = coh901331_shutdown,
index 371cc66f1a0e9d4abfce97b8ee5fe3466cb28ad3..3b246543282f50a21a04397458097135c52693a3 100644 (file)
@@ -2083,6 +2083,7 @@ pl022_platform_data_dt_get(struct device *dev)
        }
 
        pd->bus_id = -1;
+       pd->enable_dma = 1;
        of_property_read_u32(np, "num-cs", &tmp);
        pd->num_chipselect = tmp;
        of_property_read_u32(np, "pl022,autosuspend-delay",
index 788b1ddcac6caa11709b0c383bc3d60295bdb8be..4cbe3eea6debd05989393d7b99fdb385594cec2d 100644 (file)
@@ -817,7 +817,8 @@ static struct exynos_tmu_platform_data const exynos4210_default_tmu_data = {
 #define EXYNOS4210_TMU_DRV_DATA (NULL)
 #endif
 
-#if defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412)
+#if defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412) || \
+       defined(CONFIG_SOC_EXYNOS4212)
 static struct exynos_tmu_platform_data const exynos_default_tmu_data = {
        .threshold_falling = 10,
        .trigger_levels[0] = 85,
index 6c9174530422953a2b1294ab0c1cf55d3e128882..7e4150aa69c65b34c44e526c5633bf456f1abe2f 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/platform_device.h>
 #include <linux/serial.h>
 #include <linux/serial_core.h>
+#include <linux/slab.h>
 #include <linux/tty.h>
 #include <linux/tty_flip.h>
 #include <linux/console.h>
 #define XUARTPS_SR_TXFULL      0x00000010 /* TX FIFO full */
 #define XUARTPS_SR_RXTRIG      0x00000001 /* Rx Trigger */
 
+/**
+ * struct xuartps - device data
+ * @refclk     Reference clock
+ * @aperclk    APB clock
+ */
+struct xuartps {
+       struct clk              *refclk;
+       struct clk              *aperclk;
+};
+
 /**
  * xuartps_isr - Interrupt handler
  * @irq: Irq number
@@ -936,34 +947,55 @@ static int xuartps_probe(struct platform_device *pdev)
        int rc;
        struct uart_port *port;
        struct resource *res, *res2;
-       struct clk *clk;
+       struct xuartps *xuartps_data;
 
-       clk = of_clk_get(pdev->dev.of_node, 0);
-       if (IS_ERR(clk)) {
-               dev_err(&pdev->dev, "no clock specified\n");
-               return PTR_ERR(clk);
+       xuartps_data = kzalloc(sizeof(*xuartps_data), GFP_KERNEL);
+       if (!xuartps_data)
+               return -ENOMEM;
+
+       xuartps_data->aperclk = clk_get(&pdev->dev, "aper_clk");
+       if (IS_ERR(xuartps_data->aperclk)) {
+               dev_err(&pdev->dev, "aper_clk clock not found.\n");
+               rc = PTR_ERR(xuartps_data->aperclk);
+               goto err_out_free;
+       }
+       xuartps_data->refclk = clk_get(&pdev->dev, "ref_clk");
+       if (IS_ERR(xuartps_data->refclk)) {
+               dev_err(&pdev->dev, "ref_clk clock not found.\n");
+               rc = PTR_ERR(xuartps_data->refclk);
+               goto err_out_clk_put_aper;
        }
 
-       rc = clk_prepare_enable(clk);
+       rc = clk_prepare_enable(xuartps_data->aperclk);
+       if (rc) {
+               dev_err(&pdev->dev, "Unable to enable APER clock.\n");
+               goto err_out_clk_put;
+       }
+       rc = clk_prepare_enable(xuartps_data->refclk);
        if (rc) {
-               dev_err(&pdev->dev, "could not enable clock\n");
-               return -EBUSY;
+               dev_err(&pdev->dev, "Unable to enable device clock.\n");
+               goto err_out_clk_dis_aper;
        }
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res)
-               return -ENODEV;
+       if (!res) {
+               rc = -ENODEV;
+               goto err_out_clk_disable;
+       }
 
        res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-       if (!res2)
-               return -ENODEV;
+       if (!res2) {
+               rc = -ENODEV;
+               goto err_out_clk_disable;
+       }
 
        /* Initialize the port structure */
        port = xuartps_get_port();
 
        if (!port) {
                dev_err(&pdev->dev, "Cannot get uart_port structure\n");
-               return -ENODEV;
+               rc = -ENODEV;
+               goto err_out_clk_disable;
        } else {
                /* Register the port.
                 * This function also registers this device with the tty layer
@@ -972,17 +1004,30 @@ static int xuartps_probe(struct platform_device *pdev)
                port->mapbase = res->start;
                port->irq = res2->start;
                port->dev = &pdev->dev;
-               port->uartclk = clk_get_rate(clk);
-               port->private_data = clk;
+               port->uartclk = clk_get_rate(xuartps_data->refclk);
+               port->private_data = xuartps_data;
                platform_set_drvdata(pdev, port);
                rc = uart_add_one_port(&xuartps_uart_driver, port);
                if (rc) {
                        dev_err(&pdev->dev,
                                "uart_add_one_port() failed; err=%i\n", rc);
-                       return rc;
+                       goto err_out_clk_disable;
                }
                return 0;
        }
+
+err_out_clk_disable:
+       clk_disable_unprepare(xuartps_data->refclk);
+err_out_clk_dis_aper:
+       clk_disable_unprepare(xuartps_data->aperclk);
+err_out_clk_put:
+       clk_put(xuartps_data->refclk);
+err_out_clk_put_aper:
+       clk_put(xuartps_data->aperclk);
+err_out_free:
+       kfree(xuartps_data);
+
+       return rc;
 }
 
 /**
@@ -994,13 +1039,17 @@ static int xuartps_probe(struct platform_device *pdev)
 static int xuartps_remove(struct platform_device *pdev)
 {
        struct uart_port *port = platform_get_drvdata(pdev);
-       struct clk *clk = port->private_data;
+       struct xuartps *xuartps_data = port->private_data;
        int rc;
 
        /* Remove the xuartps port from the serial core */
        rc = uart_remove_one_port(&xuartps_uart_driver, port);
        port->mapbase = 0;
-       clk_disable_unprepare(clk);
+       clk_disable_unprepare(xuartps_data->refclk);
+       clk_disable_unprepare(xuartps_data->aperclk);
+       clk_put(xuartps_data->refclk);
+       clk_put(xuartps_data->aperclk);
+       kfree(xuartps_data);
        return rc;
 }
 
index 7d0aa5f58f7a29d64ce9b926acaeab09df637b7d..2817013bceb1537a80a2e3ec58a91a339f4115f0 100644 (file)
@@ -223,7 +223,7 @@ config USB_EHCI_SH
 
 config USB_EHCI_S5P
        tristate "EHCI support for Samsung S5P/EXYNOS SoC Series"
-       depends on PLAT_S5P
+       depends on PLAT_S5P || ARCH_EXYNOS
        help
        Enable support for the Samsung S5Pxxxx and Exynos3/4/5 SOC's
        on-chip EHCI controller.
index 5733f8ed98f182c7bb0a579483989abef484cdc2..5196d728517d03474270888adbfd98fb9ab73d4c 100644 (file)
@@ -48,6 +48,12 @@ static int ehci_platform_reset(struct usb_hcd *hcd)
        ehci->big_endian_desc = pdata->big_endian_desc;
        ehci->big_endian_mmio = pdata->big_endian_mmio;
 
+       if (pdata->pre_setup) {
+               retval = pdata->pre_setup(hcd);
+               if (retval < 0)
+                       return retval;
+       }
+
        ehci->caps = hcd->regs + pdata->caps_offset;
        retval = ehci_setup(hcd);
        if (retval)
index a5a9552c25a1224876a51342a17f0af784e845c5..3622fff8b798adeeda9ba5a94f1b0b182d1fc839 100644 (file)
@@ -186,15 +186,15 @@ config USB_MXS_PHY
          MXS Phy is used by some of the i.MX SoCs, for example imx23/28/6x.
 
 config USB_RCAR_PHY
-       tristate "Renesas R-Car USB phy support"
+       tristate "Renesas R-Car USB PHY support"
        depends on USB || USB_GADGET
        help
-         Say Y here to add support for the Renesas R-Car USB phy driver.
-         This chip is typically used as USB phy for USB host, gadget.
-         This driver supports: R8A7779
+         Say Y here to add support for the Renesas R-Car USB common PHY driver.
+         This chip is typically used as USB PHY for USB host, gadget.
+         This driver supports R8A7778 and R8A7779.
 
          To compile this driver as a module, choose M here: the
-         module will be called rcar-phy.
+         module will be called phy-rcar-usb.
 
 config USB_ULPI
        bool "Generic ULPI Transceiver Driver"
index 23c3dd30b2f0e654437ff415ab562ecb9c42510f..ae909408958dcb8a9b0efcc2866d19d0cff7571b 100644 (file)
@@ -1,8 +1,9 @@
 /*
  * Renesas R-Car USB phy driver
  *
- * Copyright (C) 2012 Renesas Solutions Corp.
+ * Copyright (C) 2012-2013 Renesas Solutions Corp.
  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ * Copyright (C) 2013 Cogent Embedded, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
 #include <linux/platform_device.h>
 #include <linux/spinlock.h>
 #include <linux/module.h>
-
-/* USBH common register */
-#define USBPCTRL0      0x0800
-#define USBPCTRL1      0x0804
-#define USBST          0x0808
-#define USBEH0         0x080C
-#define USBOH0         0x081C
-#define USBCTL0                0x0858
-#define EIIBC1         0x0094
-#define EIIBC2         0x009C
-
+#include <linux/platform_data/usb-rcar-phy.h>
+
+/* REGS block */
+#define USBPCTRL0      0x00
+#define USBPCTRL1      0x04
+#define USBST          0x08
+#define USBEH0         0x0C
+#define USBOH0         0x1C
+#define USBCTL0                0x58
+
+/* High-speed signal quality characteristic control registers (R8A7778 only) */
+#define HSQCTL1                0x24
+#define HSQCTL2                0x28
+
+/* USBPCTRL0 */
+#define OVC2           (1 << 10) /* (R8A7779 only)                     */
+                               /* Switches the OVC input pin for port 2: */
+                               /* 1: USB_OVC2, 0: OVC2                 */
+#define OVC1_VBUS1     (1 << 9) /* Switches the OVC input pin for port 1: */
+                               /* 1: USB_OVC1, 0: OVC1/VBUS1           */
+                               /* Function mode: set to 0              */
+#define OVC0           (1 << 8) /* Switches the OVC input pin for port 0: */
+                               /* 1: USB_OVC0 pin, 0: OVC0             */
+#define OVC2_ACT       (1 << 6) /* (R8A7779 only)                      */
+                               /* Host mode: OVC2 polarity:            */
+                               /* 1: active-high, 0: active-low        */
+#define PENC           (1 << 4) /* Function mode: output level of PENC1 pin: */
+                               /* 1: high, 0: low                      */
+#define OVC0_ACT       (1 << 3) /* Host mode: OVC0 polarity:           */
+                               /* 1: active-high, 0: active-low        */
+#define OVC1_ACT       (1 << 1) /* Host mode: OVC1 polarity:           */
+                               /* 1: active-high, 0: active-low        */
+                               /* Function mode: be sure to set to 1   */
+#define PORT1          (1 << 0) /* Selects port 1 mode:                */
+                               /* 1: function, 0: host                 */
 /* USBPCTRL1 */
 #define PHY_RST                (1 << 2)
 #define PLL_ENB                (1 << 1)
@@ -58,8 +83,10 @@ static int rcar_usb_phy_init(struct usb_phy *phy)
 {
        struct rcar_usb_phy_priv *priv = usb_phy_to_priv(phy);
        struct device *dev = phy->dev;
+       struct rcar_phy_platform_data *pdata = dev->platform_data;
        void __iomem *reg0 = priv->reg0;
        void __iomem *reg1 = priv->reg1;
+       static const u8 ovcn_act[] = { OVC0_ACT, OVC1_ACT, OVC2_ACT };
        int i;
        u32 val;
        unsigned long flags;
@@ -77,7 +104,16 @@ static int rcar_usb_phy_init(struct usb_phy *phy)
                /* (2) start USB-PHY internal PLL */
                iowrite32(PHY_ENB | PLL_ENB, (reg0 + USBPCTRL1));
 
-               /* (3) USB module status check */
+               /* (3) set USB-PHY in accord with the conditions of usage */
+               if (reg1) {
+                       u32 hsqctl1 = pdata->ferrite_bead ? 0x41 : 0;
+                       u32 hsqctl2 = pdata->ferrite_bead ? 0x0d : 7;
+
+                       iowrite32(hsqctl1, reg1 + HSQCTL1);
+                       iowrite32(hsqctl2, reg1 + HSQCTL2);
+               }
+
+               /* (4) USB module status check */
                for (i = 0; i < 1024; i++) {
                        udelay(10);
                        val = ioread32(reg0 + USBST);
@@ -90,24 +126,24 @@ static int rcar_usb_phy_init(struct usb_phy *phy)
                        goto phy_init_end;
                }
 
-               /* (4) USB-PHY reset clear */
+               /* (5) USB-PHY reset clear */
                iowrite32(PHY_ENB | PLL_ENB | PHY_RST, (reg0 + USBPCTRL1));
 
-               /* set platform specific port settings */
-               iowrite32(0x00000000, (reg0 + USBPCTRL0));
-
-               /*
-                * EHCI IP internal buffer setting
-                * EHCI IP internal buffer enable
-                *
-                * These are recommended value of a datasheet
-                * see [USB :: EHCI internal buffer setting]
-                */
-               iowrite32(0x00ff0040, (reg0 + EIIBC1));
-               iowrite32(0x00ff0040, (reg1 + EIIBC1));
-
-               iowrite32(0x00000001, (reg0 + EIIBC2));
-               iowrite32(0x00000001, (reg1 + EIIBC2));
+               /* Board specific port settings */
+               val = 0;
+               if (pdata->port1_func)
+                       val |= PORT1;
+               if (pdata->penc1)
+                       val |= PENC;
+               for (i = 0; i < 3; i++) {
+                       /* OVCn bits follow each other in the right order */
+                       if (pdata->ovc_pin[i].select_3_3v)
+                               val |= OVC0 << i;
+                       /* OVCn_ACT bits are spaced by irregular intervals */
+                       if (pdata->ovc_pin[i].active_high)
+                               val |= ovcn_act[i];
+               }
+               iowrite32(val, (reg0 + USBPCTRL0));
 
                /*
                 * Bus alignment settings
@@ -134,10 +170,8 @@ static void rcar_usb_phy_shutdown(struct usb_phy *phy)
 
        spin_lock_irqsave(&priv->lock, flags);
 
-       if (priv->counter-- == 1) { /* last user */
-               iowrite32(0x00000000, (reg0 + USBPCTRL0));
+       if (priv->counter-- == 1)       /* last user */
                iowrite32(0x00000000, (reg0 + USBPCTRL1));
-       }
 
        spin_unlock_irqrestore(&priv->lock, flags);
 }
@@ -147,27 +181,29 @@ static int rcar_usb_phy_probe(struct platform_device *pdev)
        struct rcar_usb_phy_priv *priv;
        struct resource *res0, *res1;
        struct device *dev = &pdev->dev;
-       void __iomem *reg0, *reg1;
+       void __iomem *reg0, *reg1 = NULL;
        int ret;
 
+       if (!pdev->dev.platform_data) {
+               dev_err(dev, "No platform data\n");
+               return -EINVAL;
+       }
+
        res0 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       res1 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       if (!res0 || !res1) {
+       if (!res0) {
                dev_err(dev, "Not enough platform resources\n");
                return -EINVAL;
        }
 
-       /*
-        * CAUTION
-        *
-        * Because this phy address is also mapped under OHCI/EHCI address area,
-        * this driver can't use devm_ioremap_resource(dev, res) here
-        */
-       reg0 = devm_ioremap_nocache(dev, res0->start, resource_size(res0));
-       reg1 = devm_ioremap_nocache(dev, res1->start, resource_size(res1));
-       if (!reg0 || !reg1) {
-               dev_err(dev, "ioremap error\n");
-               return -ENOMEM;
+       reg0 = devm_ioremap_resource(dev, res0);
+       if (IS_ERR(reg0))
+               return PTR_ERR(reg0);
+
+       res1 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       if (res1) {
+               reg1 = devm_ioremap_resource(dev, res1);
+               if (IS_ERR(reg1))
+                       return PTR_ERR(reg1);
        }
 
        priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
index b9b8a8be6f125740e1ea70eaaf0f9e249559b845..4bd070f524e5b9ee17a0c064422358585cb86e3b 100644 (file)
@@ -354,9 +354,9 @@ static int __init coh901327_probe(struct platform_device *pdev)
 
        clk_disable(clk);
 
-       if (margin < 1 || margin > 327)
-               margin = 60;
-       coh901327_wdt.timeout = margin;
+       ret = watchdog_init_timeout(&coh901327_wdt, margin, &pdev->dev);
+       if (ret < 0)
+               coh901327_wdt.timeout = 60;
 
        ret = watchdog_register_device(&coh901327_wdt);
        if (ret == 0)
@@ -441,10 +441,16 @@ void coh901327_watchdog_reset(void)
        /* Return and await doom */
 }
 
+static const struct of_device_id coh901327_dt_match[] = {
+       { .compatible = "stericsson,coh901327" },
+       {},
+};
+
 static struct platform_driver coh901327_driver = {
        .driver = {
                .owner  = THIS_MODULE,
                .name   = "coh901327_wdog",
+               .of_match_table = coh901327_dt_match,
        },
        .remove         = __exit_p(coh901327_remove),
        .suspend        = coh901327_suspend,
diff --git a/include/dt-bindings/clock/imx6sl-clock.h b/include/dt-bindings/clock/imx6sl-clock.h
new file mode 100644 (file)
index 0000000..7fcdf90
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __DT_BINDINGS_CLOCK_IMX6SL_H
+#define __DT_BINDINGS_CLOCK_IMX6SL_H
+
+#define IMX6SL_CLK_DUMMY               0
+#define IMX6SL_CLK_CKIL                        1
+#define IMX6SL_CLK_OSC                 2
+#define IMX6SL_CLK_PLL1_SYS            3
+#define IMX6SL_CLK_PLL2_BUS            4
+#define IMX6SL_CLK_PLL3_USB_OTG                5
+#define IMX6SL_CLK_PLL4_AUDIO          6
+#define IMX6SL_CLK_PLL5_VIDEO          7
+#define IMX6SL_CLK_PLL6_ENET           8
+#define IMX6SL_CLK_PLL7_USB_HOST       9
+#define IMX6SL_CLK_USBPHY1             10
+#define IMX6SL_CLK_USBPHY2             11
+#define IMX6SL_CLK_USBPHY1_GATE                12
+#define IMX6SL_CLK_USBPHY2_GATE                13
+#define IMX6SL_CLK_PLL4_POST_DIV       14
+#define IMX6SL_CLK_PLL5_POST_DIV       15
+#define IMX6SL_CLK_PLL5_VIDEO_DIV      16
+#define IMX6SL_CLK_ENET_REF            17
+#define IMX6SL_CLK_PLL2_PFD0           18
+#define IMX6SL_CLK_PLL2_PFD1           19
+#define IMX6SL_CLK_PLL2_PFD2           20
+#define IMX6SL_CLK_PLL3_PFD0           21
+#define IMX6SL_CLK_PLL3_PFD1           22
+#define IMX6SL_CLK_PLL3_PFD2           23
+#define IMX6SL_CLK_PLL3_PFD3           24
+#define IMX6SL_CLK_PLL2_198M           25
+#define IMX6SL_CLK_PLL3_120M           26
+#define IMX6SL_CLK_PLL3_80M            27
+#define IMX6SL_CLK_PLL3_60M            28
+#define IMX6SL_CLK_STEP                        29
+#define IMX6SL_CLK_PLL1_SW             30
+#define IMX6SL_CLK_OCRAM_ALT_SEL       31
+#define IMX6SL_CLK_OCRAM_SEL           32
+#define IMX6SL_CLK_PRE_PERIPH2_SEL     33
+#define IMX6SL_CLK_PRE_PERIPH_SEL      34
+#define IMX6SL_CLK_PERIPH2_CLK2_SEL    35
+#define IMX6SL_CLK_PERIPH_CLK2_SEL     36
+#define IMX6SL_CLK_CSI_SEL             37
+#define IMX6SL_CLK_LCDIF_AXI_SEL       38
+#define IMX6SL_CLK_USDHC1_SEL          39
+#define IMX6SL_CLK_USDHC2_SEL          40
+#define IMX6SL_CLK_USDHC3_SEL          41
+#define IMX6SL_CLK_USDHC4_SEL          42
+#define IMX6SL_CLK_SSI1_SEL            43
+#define IMX6SL_CLK_SSI2_SEL            44
+#define IMX6SL_CLK_SSI3_SEL            45
+#define IMX6SL_CLK_PERCLK_SEL          46
+#define IMX6SL_CLK_PXP_AXI_SEL         47
+#define IMX6SL_CLK_EPDC_AXI_SEL                48
+#define IMX6SL_CLK_GPU2D_OVG_SEL       49
+#define IMX6SL_CLK_GPU2D_SEL           50
+#define IMX6SL_CLK_LCDIF_PIX_SEL       51
+#define IMX6SL_CLK_EPDC_PIX_SEL                52
+#define IMX6SL_CLK_SPDIF0_SEL          53
+#define IMX6SL_CLK_SPDIF1_SEL          54
+#define IMX6SL_CLK_EXTERN_AUDIO_SEL    55
+#define IMX6SL_CLK_ECSPI_SEL           56
+#define IMX6SL_CLK_UART_SEL            57
+#define IMX6SL_CLK_PERIPH              58
+#define IMX6SL_CLK_PERIPH2             59
+#define IMX6SL_CLK_OCRAM_PODF          60
+#define IMX6SL_CLK_PERIPH_CLK2_PODF    61
+#define IMX6SL_CLK_PERIPH2_CLK2_PODF   62
+#define IMX6SL_CLK_IPG                 63
+#define IMX6SL_CLK_CSI_PODF            64
+#define IMX6SL_CLK_LCDIF_AXI_PODF      65
+#define IMX6SL_CLK_USDHC1_PODF         66
+#define IMX6SL_CLK_USDHC2_PODF         67
+#define IMX6SL_CLK_USDHC3_PODF         68
+#define IMX6SL_CLK_USDHC4_PODF         69
+#define IMX6SL_CLK_SSI1_PRED           70
+#define IMX6SL_CLK_SSI1_PODF           71
+#define IMX6SL_CLK_SSI2_PRED           72
+#define IMX6SL_CLK_SSI2_PODF           73
+#define IMX6SL_CLK_SSI3_PRED           74
+#define IMX6SL_CLK_SSI3_PODF           75
+#define IMX6SL_CLK_PERCLK              76
+#define IMX6SL_CLK_PXP_AXI_PODF                77
+#define IMX6SL_CLK_EPDC_AXI_PODF       78
+#define IMX6SL_CLK_GPU2D_OVG_PODF      79
+#define IMX6SL_CLK_GPU2D_PODF          80
+#define IMX6SL_CLK_LCDIF_PIX_PRED      81
+#define IMX6SL_CLK_EPDC_PIX_PRED       82
+#define IMX6SL_CLK_LCDIF_PIX_PODF      83
+#define IMX6SL_CLK_EPDC_PIX_PODF       84
+#define IMX6SL_CLK_SPDIF0_PRED         85
+#define IMX6SL_CLK_SPDIF0_PODF         86
+#define IMX6SL_CLK_SPDIF1_PRED         87
+#define IMX6SL_CLK_SPDIF1_PODF         88
+#define IMX6SL_CLK_EXTERN_AUDIO_PRED   89
+#define IMX6SL_CLK_EXTERN_AUDIO_PODF   90
+#define IMX6SL_CLK_ECSPI_ROOT          91
+#define IMX6SL_CLK_UART_ROOT           92
+#define IMX6SL_CLK_AHB                 93
+#define IMX6SL_CLK_MMDC_ROOT           94
+#define IMX6SL_CLK_ARM                 95
+#define IMX6SL_CLK_ECSPI1              96
+#define IMX6SL_CLK_ECSPI2              97
+#define IMX6SL_CLK_ECSPI3              98
+#define IMX6SL_CLK_ECSPI4              99
+#define IMX6SL_CLK_EPIT1               100
+#define IMX6SL_CLK_EPIT2               101
+#define IMX6SL_CLK_EXTERN_AUDIO                102
+#define IMX6SL_CLK_GPT                 103
+#define IMX6SL_CLK_GPT_SERIAL          104
+#define IMX6SL_CLK_GPU2D_OVG           105
+#define IMX6SL_CLK_I2C1                        106
+#define IMX6SL_CLK_I2C2                        107
+#define IMX6SL_CLK_I2C3                        108
+#define IMX6SL_CLK_OCOTP               109
+#define IMX6SL_CLK_CSI                 110
+#define IMX6SL_CLK_PXP_AXI             111
+#define IMX6SL_CLK_EPDC_AXI            112
+#define IMX6SL_CLK_LCDIF_AXI           113
+#define IMX6SL_CLK_LCDIF_PIX           114
+#define IMX6SL_CLK_EPDC_PIX            115
+#define IMX6SL_CLK_OCRAM               116
+#define IMX6SL_CLK_PWM1                        117
+#define IMX6SL_CLK_PWM2                        118
+#define IMX6SL_CLK_PWM3                        119
+#define IMX6SL_CLK_PWM4                        120
+#define IMX6SL_CLK_SDMA                        121
+#define IMX6SL_CLK_SPDIF               122
+#define IMX6SL_CLK_SSI1                        123
+#define IMX6SL_CLK_SSI2                        124
+#define IMX6SL_CLK_SSI3                        125
+#define IMX6SL_CLK_UART                        126
+#define IMX6SL_CLK_UART_SERIAL         127
+#define IMX6SL_CLK_USBOH3              128
+#define IMX6SL_CLK_USDHC1              129
+#define IMX6SL_CLK_USDHC2              130
+#define IMX6SL_CLK_USDHC3              131
+#define IMX6SL_CLK_USDHC4              132
+#define IMX6SL_CLK_CLK_END             133
+
+#endif /* __DT_BINDINGS_CLOCK_IMX6SL_H */
diff --git a/include/dt-bindings/clock/vf610-clock.h b/include/dt-bindings/clock/vf610-clock.h
new file mode 100644 (file)
index 0000000..15e997f
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __DT_BINDINGS_CLOCK_VF610_H
+#define __DT_BINDINGS_CLOCK_VF610_H
+
+#define VF610_CLK_DUMMY                        0
+#define VF610_CLK_SIRC_128K            1
+#define VF610_CLK_SIRC_32K             2
+#define VF610_CLK_FIRC                 3
+#define VF610_CLK_SXOSC                        4
+#define VF610_CLK_FXOSC                        5
+#define VF610_CLK_FXOSC_HALF           6
+#define VF610_CLK_SLOW_CLK_SEL         7
+#define VF610_CLK_FASK_CLK_SEL         8
+#define VF610_CLK_AUDIO_EXT            9
+#define VF610_CLK_ENET_EXT             10
+#define VF610_CLK_PLL1_MAIN            11
+#define VF610_CLK_PLL1_PFD1            12
+#define VF610_CLK_PLL1_PFD2            13
+#define VF610_CLK_PLL1_PFD3            14
+#define VF610_CLK_PLL1_PFD4            15
+#define VF610_CLK_PLL2_MAIN            16
+#define VF610_CLK_PLL2_PFD1            17
+#define VF610_CLK_PLL2_PFD2            18
+#define VF610_CLK_PLL2_PFD3            19
+#define VF610_CLK_PLL2_PFD4            20
+#define VF610_CLK_PLL3_MAIN            21
+#define VF610_CLK_PLL3_PFD1            22
+#define VF610_CLK_PLL3_PFD2            23
+#define VF610_CLK_PLL3_PFD3            24
+#define VF610_CLK_PLL3_PFD4            25
+#define VF610_CLK_PLL4_MAIN            26
+#define VF610_CLK_PLL5_MAIN            27
+#define VF610_CLK_PLL6_MAIN            28
+#define VF610_CLK_PLL3_MAIN_DIV                29
+#define VF610_CLK_PLL4_MAIN_DIV                30
+#define VF610_CLK_PLL6_MAIN_DIV                31
+#define VF610_CLK_PLL1_PFD_SEL         32
+#define VF610_CLK_PLL2_PFD_SEL         33
+#define VF610_CLK_SYS_SEL              34
+#define VF610_CLK_DDR_SEL              35
+#define VF610_CLK_SYS_BUS              36
+#define VF610_CLK_PLATFORM_BUS         37
+#define VF610_CLK_IPG_BUS              38
+#define VF610_CLK_UART0                        39
+#define VF610_CLK_UART1                        40
+#define VF610_CLK_UART2                        41
+#define VF610_CLK_UART3                        42
+#define VF610_CLK_UART4                        43
+#define VF610_CLK_UART5                        44
+#define VF610_CLK_PIT                  45
+#define VF610_CLK_I2C0                 46
+#define VF610_CLK_I2C1                 47
+#define VF610_CLK_I2C2                 48
+#define VF610_CLK_I2C3                 49
+#define VF610_CLK_FTM0_EXT_SEL         50
+#define VF610_CLK_FTM0_FIX_SEL         51
+#define VF610_CLK_FTM0_EXT_FIX_EN      52
+#define VF610_CLK_FTM1_EXT_SEL         53
+#define VF610_CLK_FTM1_FIX_SEL         54
+#define VF610_CLK_FTM1_EXT_FIX_EN      55
+#define VF610_CLK_FTM2_EXT_SEL         56
+#define VF610_CLK_FTM2_FIX_SEL         57
+#define VF610_CLK_FTM2_EXT_FIX_EN      58
+#define VF610_CLK_FTM3_EXT_SEL         59
+#define VF610_CLK_FTM3_FIX_SEL         60
+#define VF610_CLK_FTM3_EXT_FIX_EN      61
+#define VF610_CLK_FTM0                 62
+#define VF610_CLK_FTM1                 63
+#define VF610_CLK_FTM2                 64
+#define VF610_CLK_FTM3                 65
+#define VF610_CLK_ENET_50M             66
+#define VF610_CLK_ENET_25M             67
+#define VF610_CLK_ENET_SEL             68
+#define VF610_CLK_ENET                 69
+#define VF610_CLK_ENET_TS_SEL          70
+#define VF610_CLK_ENET_TS              71
+#define VF610_CLK_DSPI0                        72
+#define VF610_CLK_DSPI1                        73
+#define VF610_CLK_DSPI2                        74
+#define VF610_CLK_DSPI3                        75
+#define VF610_CLK_WDT                  76
+#define VF610_CLK_ESDHC0_SEL           77
+#define VF610_CLK_ESDHC0_EN            78
+#define VF610_CLK_ESDHC0_DIV           79
+#define VF610_CLK_ESDHC0               80
+#define VF610_CLK_ESDHC1_SEL           81
+#define VF610_CLK_ESDHC1_EN            82
+#define VF610_CLK_ESDHC1_DIV           83
+#define VF610_CLK_ESDHC1               84
+#define VF610_CLK_DCU0_SEL             85
+#define VF610_CLK_DCU0_EN              86
+#define VF610_CLK_DCU0_DIV             87
+#define VF610_CLK_DCU0                 88
+#define VF610_CLK_DCU1_SEL             89
+#define VF610_CLK_DCU1_EN              90
+#define VF610_CLK_DCU1_DIV             91
+#define VF610_CLK_DCU1                 92
+#define VF610_CLK_ESAI_SEL             93
+#define VF610_CLK_ESAI_EN              94
+#define VF610_CLK_ESAI_DIV             95
+#define VF610_CLK_ESAI                 96
+#define VF610_CLK_SAI0_SEL             97
+#define VF610_CLK_SAI0_EN              98
+#define VF610_CLK_SAI0_DIV             99
+#define VF610_CLK_SAI0                 100
+#define VF610_CLK_SAI1_SEL             101
+#define VF610_CLK_SAI1_EN              102
+#define VF610_CLK_SAI1_DIV             103
+#define VF610_CLK_SAI1                 104
+#define VF610_CLK_SAI2_SEL             105
+#define VF610_CLK_SAI2_EN              106
+#define VF610_CLK_SAI2_DIV             107
+#define VF610_CLK_SAI2                 108
+#define VF610_CLK_SAI3_SEL             109
+#define VF610_CLK_SAI3_EN              110
+#define VF610_CLK_SAI3_DIV             111
+#define VF610_CLK_SAI3                 112
+#define VF610_CLK_USBC0                        113
+#define VF610_CLK_USBC1                        114
+#define VF610_CLK_QSPI0_SEL            115
+#define VF610_CLK_QSPI0_EN             116
+#define VF610_CLK_QSPI0_X4_DIV         117
+#define VF610_CLK_QSPI0_X2_DIV         118
+#define VF610_CLK_QSPI0_X1_DIV         119
+#define VF610_CLK_QSPI1_SEL            120
+#define VF610_CLK_QSPI1_EN             121
+#define VF610_CLK_QSPI1_X4_DIV         122
+#define VF610_CLK_QSPI1_X2_DIV         123
+#define VF610_CLK_QSPI1_X1_DIV         124
+#define VF610_CLK_QSPI0                        125
+#define VF610_CLK_QSPI1                        126
+#define VF610_CLK_NFC_SEL              127
+#define VF610_CLK_NFC_EN               128
+#define VF610_CLK_NFC_PRE_DIV          129
+#define VF610_CLK_NFC_FRAC_DIV         130
+#define VF610_CLK_NFC_INV              131
+#define VF610_CLK_NFC                  132
+#define VF610_CLK_VADC_SEL             133
+#define VF610_CLK_VADC_EN              134
+#define VF610_CLK_VADC_DIV             135
+#define VF610_CLK_VADC_DIV_HALF                136
+#define VF610_CLK_VADC                 137
+#define VF610_CLK_ADC0                 138
+#define VF610_CLK_ADC1                 139
+#define VF610_CLK_DAC0                 140
+#define VF610_CLK_DAC1                 141
+#define VF610_CLK_FLEXCAN0             142
+#define VF610_CLK_FLEXCAN1             143
+#define VF610_CLK_ASRC                 144
+#define VF610_CLK_GPU_SEL              145
+#define VF610_CLK_GPU_EN               146
+#define VF610_CLK_GPU2D                        147
+#define VF610_CLK_END                  148
+
+#endif /* __DT_BINDINGS_CLOCK_VF610_H */
diff --git a/include/linux/arm-cci.h b/include/linux/arm-cci.h
new file mode 100644 (file)
index 0000000..79d6edf
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * CCI cache coherent interconnect support
+ *
+ * Copyright (C) 2013 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_ARM_CCI_H
+#define __LINUX_ARM_CCI_H
+
+#include <linux/errno.h>
+#include <linux/types.h>
+
+struct device_node;
+
+#ifdef CONFIG_ARM_CCI
+extern bool cci_probed(void);
+extern int cci_ace_get_port(struct device_node *dn);
+extern int cci_disable_port_by_cpu(u64 mpidr);
+extern int __cci_control_port_by_device(struct device_node *dn, bool enable);
+extern int __cci_control_port_by_index(u32 port, bool enable);
+#else
+static inline bool cci_probed(void) { return false; }
+static inline int cci_ace_get_port(struct device_node *dn)
+{
+       return -ENODEV;
+}
+static inline int cci_disable_port_by_cpu(u64 mpidr) { return -ENODEV; }
+static inline int __cci_control_port_by_device(struct device_node *dn,
+                                              bool enable)
+{
+       return -ENODEV;
+}
+static inline int __cci_control_port_by_index(u32 port, bool enable)
+{
+       return -ENODEV;
+}
+#endif
+#define cci_disable_port_by_device(dev) \
+       __cci_control_port_by_device(dev, false)
+#define cci_enable_port_by_device(dev) \
+       __cci_control_port_by_device(dev, true)
+#define cci_disable_port_by_index(dev) \
+       __cci_control_port_by_index(dev, false)
+#define cci_enable_port_by_index(dev) \
+       __cci_control_port_by_index(dev, true)
+
+#endif
diff --git a/include/linux/clk/mvebu.h b/include/linux/clk/mvebu.h
deleted file mode 100644 (file)
index 8c4ae71..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __CLK_MVEBU_H_
-#define __CLK_MVEBU_H_
-
-void __init mvebu_clocks_init(void);
-
-#endif
index 56be7cd9aa8be535b8bca9a604e1a96444f69867..e062d317cccea96d5e6f6c236fc2cec8ef3108a1 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2013 Xilinx Inc.
  * Copyright (C) 2012 National Instruments
  *
  * This program is free software; you can redistribute it and/or modify
 #ifndef __LINUX_CLK_ZYNQ_H_
 #define __LINUX_CLK_ZYNQ_H_
 
-void __init xilinx_zynq_clocks_init(void __iomem *slcr);
+#include <linux/spinlock.h>
 
+void zynq_clock_init(void __iomem *slcr);
+
+struct clk *clk_register_zynq_pll(const char *name, const char *parent,
+               void __iomem *pll_ctrl, void __iomem *pll_status, u8 lock_index,
+               spinlock_t *lock);
 #endif
index dd755ce2a5ebdb867b959f6efc21b696500c5732..07261d52a6dfabee77c5ffbc34953a6faec1fdce 100644 (file)
@@ -53,5 +53,4 @@ void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
 cycle_t dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
 void dw_apb_clocksource_unregister(struct dw_apb_clocksource *dw_cs);
 
-extern void dw_apb_timer_init(void);
 #endif /* __DW_APB_TIMER_H__ */
index 0ab61320ffa8e2a239019b6169a0b2c2c3807a1c..7dd6524d2aac9becefa0103c69b60bb241a94bdf 100644 (file)
@@ -26,8 +26,7 @@
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/mfd/core.h>
-
-#include <mach/edma.h>
+#include <linux/platform_data/edma.h>
 
 /*
  * Register values.
diff --git a/include/linux/mfd/syscon/clps711x.h b/include/linux/mfd/syscon/clps711x.h
new file mode 100644 (file)
index 0000000..26355ab
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ *  CLPS711X system register bits definitions
+ *
+ *  Copyright (C) 2013 Alexander Shiyan <shc_work@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef _LINUX_MFD_SYSCON_CLPS711X_H_
+#define _LINUX_MFD_SYSCON_CLPS711X_H_
+
+#define SYSCON_OFFSET          (0x00)
+#define SYSFLG_OFFSET          (0x40)
+
+#define SYSCON1_KBDSCAN(x)     ((x) & 15)
+#define SYSCON1_KBDSCAN_MASK   (15)
+#define SYSCON1_TC1M           (1 << 4)
+#define SYSCON1_TC1S           (1 << 5)
+#define SYSCON1_TC2M           (1 << 6)
+#define SYSCON1_TC2S           (1 << 7)
+#define SYSCON1_BZTOG          (1 << 9)
+#define SYSCON1_BZMOD          (1 << 10)
+#define SYSCON1_DBGEN          (1 << 11)
+#define SYSCON1_LCDEN          (1 << 12)
+#define SYSCON1_CDENTX         (1 << 13)
+#define SYSCON1_CDENRX         (1 << 14)
+#define SYSCON1_SIREN          (1 << 15)
+#define SYSCON1_ADCKSEL(x)     (((x) & 3) << 16)
+#define SYSCON1_ADCKSEL_MASK   (3 << 16)
+#define SYSCON1_EXCKEN         (1 << 18)
+#define SYSCON1_WAKEDIS                (1 << 19)
+#define SYSCON1_IRTXM          (1 << 20)
+
+#define SYSCON2_SERSEL         (1 << 0)
+#define SYSCON2_KBD6           (1 << 1)
+#define SYSCON2_DRAMZ          (1 << 2)
+#define SYSCON2_KBWEN          (1 << 3)
+#define SYSCON2_SS2TXEN                (1 << 4)
+#define SYSCON2_PCCARD1                (1 << 5)
+#define SYSCON2_PCCARD2                (1 << 6)
+#define SYSCON2_SS2RXEN                (1 << 7)
+#define SYSCON2_SS2MAEN                (1 << 9)
+#define SYSCON2_OSTB           (1 << 12)
+#define SYSCON2_CLKENSL                (1 << 13)
+#define SYSCON2_BUZFREQ                (1 << 14)
+
+#define SYSCON3_ADCCON         (1 << 0)
+#define SYSCON3_CLKCTL0                (1 << 1)
+#define SYSCON3_CLKCTL1                (1 << 2)
+#define SYSCON3_DAISEL         (1 << 3)
+#define SYSCON3_ADCCKNSEN      (1 << 4)
+#define SYSCON3_VERSN(x)       (((x) >> 5) & 7)
+#define SYSCON3_VERSN_MASK     (7 << 5)
+#define SYSCON3_FASTWAKE       (1 << 8)
+#define SYSCON3_DAIEN          (1 << 9)
+#define SYSCON3_128FS          SYSCON3_DAIEN
+#define SYSCON3_ENPD67         (1 << 10)
+
+#define SYSCON_UARTEN          (1 << 8)
+
+#define SYSFLG1_MCDR           (1 << 0)
+#define SYSFLG1_DCDET          (1 << 1)
+#define SYSFLG1_WUDR           (1 << 2)
+#define SYSFLG1_WUON           (1 << 3)
+#define SYSFLG1_CTS            (1 << 8)
+#define SYSFLG1_DSR            (1 << 9)
+#define SYSFLG1_DCD            (1 << 10)
+#define SYSFLG1_NBFLG          (1 << 12)
+#define SYSFLG1_RSTFLG         (1 << 13)
+#define SYSFLG1_PFFLG          (1 << 14)
+#define SYSFLG1_CLDFLG         (1 << 15)
+#define SYSFLG1_CRXFE          (1 << 24)
+#define SYSFLG1_CTXFF          (1 << 25)
+#define SYSFLG1_SSIBUSY                (1 << 26)
+#define SYSFLG1_ID             (1 << 29)
+#define SYSFLG1_VERID(x)       (((x) >> 30) & 3)
+#define SYSFLG1_VERID_MASK     (3 << 30)
+
+#define SYSFLG2_SSRXOF         (1 << 0)
+#define SYSFLG2_RESVAL         (1 << 1)
+#define SYSFLG2_RESFRM         (1 << 2)
+#define SYSFLG2_SS2RXFE                (1 << 3)
+#define SYSFLG2_SS2TXFF                (1 << 4)
+#define SYSFLG2_SS2TXUF                (1 << 5)
+#define SYSFLG2_CKMODE         (1 << 6)
+
+#define SYSFLG_UBUSY           (1 << 11)
+#define SYSFLG_URXFE           (1 << 22)
+#define SYSFLG_UTXFF           (1 << 23)
+
+#endif
diff --git a/include/linux/platform_data/edma.h b/include/linux/platform_data/edma.h
new file mode 100644 (file)
index 0000000..57300fd
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ *  TI EDMA definitions
+ *
+ *  Copyright (C) 2006-2013 Texas Instruments.
+ *
+ *  This program is free software; you can redistribute  it and/or modify it
+ *  under  the terms of  the GNU General  Public License as published by the
+ *  Free Software Foundation;  either version 2 of the  License, or (at your
+ *  option) any later version.
+ */
+
+/*
+ * This EDMA3 programming framework exposes two basic kinds of resource:
+ *
+ *  Channel    Triggers transfers, usually from a hardware event but
+ *             also manually or by "chaining" from DMA completions.
+ *             Each channel is coupled to a Parameter RAM (PaRAM) slot.
+ *
+ *  Slot       Each PaRAM slot holds a DMA transfer descriptor (PaRAM
+ *             "set"), source and destination addresses, a link to a
+ *             next PaRAM slot (if any), options for the transfer, and
+ *             instructions for updating those addresses.  There are
+ *             more than twice as many slots as event channels.
+ *
+ * Each PaRAM set describes a sequence of transfers, either for one large
+ * buffer or for several discontiguous smaller buffers.  An EDMA transfer
+ * is driven only from a channel, which performs the transfers specified
+ * in its PaRAM slot until there are no more transfers.  When that last
+ * transfer completes, the "link" field may be used to reload the channel's
+ * PaRAM slot with a new transfer descriptor.
+ *
+ * The EDMA Channel Controller (CC) maps requests from channels into physical
+ * Transfer Controller (TC) requests when the channel triggers (by hardware
+ * or software events, or by chaining).  The two physical DMA channels provided
+ * by the TCs are thus shared by many logical channels.
+ *
+ * DaVinci hardware also has a "QDMA" mechanism which is not currently
+ * supported through this interface.  (DSP firmware uses it though.)
+ */
+
+#ifndef EDMA_H_
+#define EDMA_H_
+
+/* PaRAM slots are laid out like this */
+struct edmacc_param {
+       unsigned int opt;
+       unsigned int src;
+       unsigned int a_b_cnt;
+       unsigned int dst;
+       unsigned int src_dst_bidx;
+       unsigned int link_bcntrld;
+       unsigned int src_dst_cidx;
+       unsigned int ccnt;
+};
+
+/* fields in edmacc_param.opt */
+#define SAM            BIT(0)
+#define DAM            BIT(1)
+#define SYNCDIM                BIT(2)
+#define STATIC         BIT(3)
+#define EDMA_FWID      (0x07 << 8)
+#define TCCMODE                BIT(11)
+#define EDMA_TCC(t)    ((t) << 12)
+#define TCINTEN                BIT(20)
+#define ITCINTEN       BIT(21)
+#define TCCHEN         BIT(22)
+#define ITCCHEN                BIT(23)
+
+/*ch_status paramater of callback function possible values*/
+#define DMA_COMPLETE 1
+#define DMA_CC_ERROR 2
+#define DMA_TC1_ERROR 3
+#define DMA_TC2_ERROR 4
+
+enum address_mode {
+       INCR = 0,
+       FIFO = 1
+};
+
+enum fifo_width {
+       W8BIT = 0,
+       W16BIT = 1,
+       W32BIT = 2,
+       W64BIT = 3,
+       W128BIT = 4,
+       W256BIT = 5
+};
+
+enum dma_event_q {
+       EVENTQ_0 = 0,
+       EVENTQ_1 = 1,
+       EVENTQ_2 = 2,
+       EVENTQ_3 = 3,
+       EVENTQ_DEFAULT = -1
+};
+
+enum sync_dimension {
+       ASYNC = 0,
+       ABSYNC = 1
+};
+
+#define EDMA_CTLR_CHAN(ctlr, chan)     (((ctlr) << 16) | (chan))
+#define EDMA_CTLR(i)                   ((i) >> 16)
+#define EDMA_CHAN_SLOT(i)              ((i) & 0xffff)
+
+#define EDMA_CHANNEL_ANY               -1      /* for edma_alloc_channel() */
+#define EDMA_SLOT_ANY                  -1      /* for edma_alloc_slot() */
+#define EDMA_CONT_PARAMS_ANY            1001
+#define EDMA_CONT_PARAMS_FIXED_EXACT    1002
+#define EDMA_CONT_PARAMS_FIXED_NOT_EXACT 1003
+
+#define EDMA_MAX_CC               2
+
+/* alloc/free DMA channels and their dedicated parameter RAM slots */
+int edma_alloc_channel(int channel,
+       void (*callback)(unsigned channel, u16 ch_status, void *data),
+       void *data, enum dma_event_q);
+void edma_free_channel(unsigned channel);
+
+/* alloc/free parameter RAM slots */
+int edma_alloc_slot(unsigned ctlr, int slot);
+void edma_free_slot(unsigned slot);
+
+/* alloc/free a set of contiguous parameter RAM slots */
+int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count);
+int edma_free_cont_slots(unsigned slot, int count);
+
+/* calls that operate on part of a parameter RAM slot */
+void edma_set_src(unsigned slot, dma_addr_t src_port,
+                               enum address_mode mode, enum fifo_width);
+void edma_set_dest(unsigned slot, dma_addr_t dest_port,
+                                enum address_mode mode, enum fifo_width);
+void edma_get_position(unsigned slot, dma_addr_t *src, dma_addr_t *dst);
+void edma_set_src_index(unsigned slot, s16 src_bidx, s16 src_cidx);
+void edma_set_dest_index(unsigned slot, s16 dest_bidx, s16 dest_cidx);
+void edma_set_transfer_params(unsigned slot, u16 acnt, u16 bcnt, u16 ccnt,
+               u16 bcnt_rld, enum sync_dimension sync_mode);
+void edma_link(unsigned from, unsigned to);
+void edma_unlink(unsigned from);
+
+/* calls that operate on an entire parameter RAM slot */
+void edma_write_slot(unsigned slot, const struct edmacc_param *params);
+void edma_read_slot(unsigned slot, struct edmacc_param *params);
+
+/* channel control operations */
+int edma_start(unsigned channel);
+void edma_stop(unsigned channel);
+void edma_clean_channel(unsigned channel);
+void edma_clear_event(unsigned channel);
+void edma_pause(unsigned channel);
+void edma_resume(unsigned channel);
+
+struct edma_rsv_info {
+
+       const s16       (*rsv_chans)[2];
+       const s16       (*rsv_slots)[2];
+};
+
+/* platform_data for EDMA driver */
+struct edma_soc_info {
+
+       /* how many dma resources of each type */
+       unsigned        n_channel;
+       unsigned        n_region;
+       unsigned        n_slot;
+       unsigned        n_tc;
+       unsigned        n_cc;
+       /*
+        * Default queue is expected to be a low-priority queue.
+        * This way, long transfers on the default queue started
+        * by the codec engine will not cause audio defects.
+        */
+       enum dma_event_q        default_queue;
+
+       /* Resource reservation for other cores */
+       struct edma_rsv_info    *rsv;
+
+       s8      (*queue_tc_mapping)[2];
+       s8      (*queue_priority_mapping)[2];
+       const s16       (*xbar_chans)[2];
+};
+
+#endif
index b253f77a7ddf6ba4db532cdbeeae43cf7b1e16df..2d8d6943281376a72195f5363cc1126560764e43 100644 (file)
 #define __GPIO_RCAR_H__
 
 struct gpio_rcar_config {
-       unsigned int gpio_base;
+       int gpio_base;
        unsigned int irq_base;
        unsigned int number_of_pins;
        const char *pctl_name;
+       unsigned has_both_edge_trigger:1;
 };
 
+#define RCAR_GP_PIN(bank, pin)         (((bank) * 32) + (pin))
+
 #endif /* __GPIO_RCAR_H__ */
diff --git a/include/linux/platform_data/pinctrl-coh901.h b/include/linux/platform_data/pinctrl-coh901.h
deleted file mode 100644 (file)
index dfbc65d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2007-2012 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * GPIO block resgister definitions and inline macros for
- * U300 GPIO COH 901 335 or COH 901 571/3
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- */
-
-#ifndef __MACH_U300_GPIO_U300_H
-#define __MACH_U300_GPIO_U300_H
-
-/**
- * struct u300_gpio_platform - U300 GPIO platform data
- * @ports: number of GPIO block ports
- * @gpio_base: first GPIO number for this block (use a free range)
- */
-struct u300_gpio_platform {
-       u8 ports;
-       int gpio_base;
-};
-
-#endif /* __MACH_U300_GPIO_U300_H */
index 7af305b3786886ff5059fdccac2a45a92bc42fa4..8dc2fa47a2aa3c095f66f234d2975c5e18e10f53 100644 (file)
@@ -19,7 +19,7 @@
 #ifndef __ARCH_ARM_DAVINCI_SPI_H
 #define __ARCH_ARM_DAVINCI_SPI_H
 
-#include <mach/edma.h>
+#include <linux/platform_data/edma.h>
 
 #define SPI_INTERN_CS  0xFF
 
diff --git a/include/linux/platform_data/usb-rcar-phy.h b/include/linux/platform_data/usb-rcar-phy.h
new file mode 100644 (file)
index 0000000..8ec6964
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2013 Renesas Solutions Corp.
+ * Copyright (C) 2013 Cogent Embedded, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __USB_RCAR_PHY_H
+#define __USB_RCAR_PHY_H
+
+#include <linux/types.h>
+
+struct rcar_phy_platform_data {
+       bool ferrite_bead:1;    /* (R8A7778 only)                       */
+
+       bool port1_func:1;      /* true: port 1 used by function, false: host */
+       unsigned penc1:1;       /* Output of the PENC1 pin in function mode */
+       struct {                /* Overcurrent pin control for ports 0..2 */
+               bool select_3_3v:1; /* true: USB_OVCn pin, false: OVCn pin */
+                               /* Set to false on port 1 in function mode */
+               bool active_high:1; /* true: active  high, false: active low */
+                               /* Set to true  on port 1 in function mode */
+       } ovc_pin[3];           /* (R8A7778 only has 2 ports)           */
+};
+
+#endif /* __USB_RCAR_PHY_H */
index 99238b096f7e5ae4647ec49b14d828263853a4b2..7eb4dcd0d38663ab434919bd4d4e867788a4a6a0 100644 (file)
@@ -19,6 +19,9 @@
 #ifndef __USB_CORE_EHCI_PDRIVER_H
 #define __USB_CORE_EHCI_PDRIVER_H
 
+struct platform_device;
+struct usb_hcd;
+
 /**
  * struct usb_ehci_pdata - platform_data for generic ehci driver
  *
@@ -50,6 +53,7 @@ struct usb_ehci_pdata {
        /* Turn on only VBUS suspend power and hotplug detection,
         * turn off everything else */
        void (*power_suspend)(struct platform_device *pdev);
+       int (*pre_setup)(struct usb_hcd *hcd);
 };
 
 #endif /* __USB_CORE_EHCI_PDRIVER_H */
index 484b22c5df5df80a5a69d3a8745bb37f91eb49b8..fd7c45b9ed5a3836323a4d54af31df6f2929d050 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/timer.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
+#include <linux/platform_data/edma.h>
 #include <linux/i2c.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
index b2f27c2e5fdcedd91bae3e21447fec946fece8a2..8460edce1c3b6b5cc90dff481e5588c75e2285ad 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/dma-mapping.h>
 #include <linux/kernel.h>
 #include <linux/genalloc.h>
+#include <linux/platform_data/edma.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
index b6ef7039dd097b4ac99c6e9b14a0c35ed59fd203..fbb710c76c083ef90b9c442e1776ec00fcb8aa08 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <linux/genalloc.h>
 #include <linux/platform_data/davinci_asp.h>
-#include <mach/edma.h>
+#include <linux/platform_data/edma.h>
 
 struct davinci_pcm_dma_params {
        int channel;                    /* sync dma channel ID */
This page took 1.254152 seconds and 5 git commands to generate.