Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / u-boot / arch / arm / cpu / tegra20-common / pinmux.c
diff --git a/qemu/roms/u-boot/arch/arm/cpu/tegra20-common/pinmux.c b/qemu/roms/u-boot/arch/arm/cpu/tegra20-common/pinmux.c
new file mode 100644 (file)
index 0000000..e484f99
--- /dev/null
@@ -0,0 +1,425 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/* Tegra20 pin multiplexing functions */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/pinmux.h>
+
+/*
+ * This defines the order of the pin mux control bits in the registers. For
+ * some reason there is no correspendence between the tristate, pin mux and
+ * pullup/pulldown registers.
+ */
+enum pmux_ctlid {
+       /* 0: APB_MISC_PP_PIN_MUX_CTL_A_0 */
+       MUXCTL_UAA,
+       MUXCTL_UAB,
+       MUXCTL_UAC,
+       MUXCTL_UAD,
+       MUXCTL_UDA,
+       MUXCTL_RESERVED5,
+       MUXCTL_ATE,
+       MUXCTL_RM,
+
+       MUXCTL_ATB,
+       MUXCTL_RESERVED9,
+       MUXCTL_ATD,
+       MUXCTL_ATC,
+       MUXCTL_ATA,
+       MUXCTL_KBCF,
+       MUXCTL_KBCE,
+       MUXCTL_SDMMC1,
+
+       /* 16: APB_MISC_PP_PIN_MUX_CTL_B_0 */
+       MUXCTL_GMA,
+       MUXCTL_GMC,
+       MUXCTL_HDINT,
+       MUXCTL_SLXA,
+       MUXCTL_OWC,
+       MUXCTL_SLXC,
+       MUXCTL_SLXD,
+       MUXCTL_SLXK,
+
+       MUXCTL_UCA,
+       MUXCTL_UCB,
+       MUXCTL_DTA,
+       MUXCTL_DTB,
+       MUXCTL_RESERVED28,
+       MUXCTL_DTC,
+       MUXCTL_DTD,
+       MUXCTL_DTE,
+
+       /* 32: APB_MISC_PP_PIN_MUX_CTL_C_0 */
+       MUXCTL_DDC,
+       MUXCTL_CDEV1,
+       MUXCTL_CDEV2,
+       MUXCTL_CSUS,
+       MUXCTL_I2CP,
+       MUXCTL_KBCA,
+       MUXCTL_KBCB,
+       MUXCTL_KBCC,
+
+       MUXCTL_IRTX,
+       MUXCTL_IRRX,
+       MUXCTL_DAP1,
+       MUXCTL_DAP2,
+       MUXCTL_DAP3,
+       MUXCTL_DAP4,
+       MUXCTL_GMB,
+       MUXCTL_GMD,
+
+       /* 48: APB_MISC_PP_PIN_MUX_CTL_D_0 */
+       MUXCTL_GME,
+       MUXCTL_GPV,
+       MUXCTL_GPU,
+       MUXCTL_SPDO,
+       MUXCTL_SPDI,
+       MUXCTL_SDB,
+       MUXCTL_SDC,
+       MUXCTL_SDD,
+
+       MUXCTL_SPIH,
+       MUXCTL_SPIG,
+       MUXCTL_SPIF,
+       MUXCTL_SPIE,
+       MUXCTL_SPID,
+       MUXCTL_SPIC,
+       MUXCTL_SPIB,
+       MUXCTL_SPIA,
+
+       /* 64: APB_MISC_PP_PIN_MUX_CTL_E_0 */
+       MUXCTL_LPW0,
+       MUXCTL_LPW1,
+       MUXCTL_LPW2,
+       MUXCTL_LSDI,
+       MUXCTL_LSDA,
+       MUXCTL_LSPI,
+       MUXCTL_LCSN,
+       MUXCTL_LDC,
+
+       MUXCTL_LSCK,
+       MUXCTL_LSC0,
+       MUXCTL_LSC1,
+       MUXCTL_LHS,
+       MUXCTL_LVS,
+       MUXCTL_LM0,
+       MUXCTL_LM1,
+       MUXCTL_LVP0,
+
+       /* 80: APB_MISC_PP_PIN_MUX_CTL_F_0 */
+       MUXCTL_LD0,
+       MUXCTL_LD1,
+       MUXCTL_LD2,
+       MUXCTL_LD3,
+       MUXCTL_LD4,
+       MUXCTL_LD5,
+       MUXCTL_LD6,
+       MUXCTL_LD7,
+
+       MUXCTL_LD8,
+       MUXCTL_LD9,
+       MUXCTL_LD10,
+       MUXCTL_LD11,
+       MUXCTL_LD12,
+       MUXCTL_LD13,
+       MUXCTL_LD14,
+       MUXCTL_LD15,
+
+       /* 96: APB_MISC_PP_PIN_MUX_CTL_G_0 */
+       MUXCTL_LD16,
+       MUXCTL_LD17,
+       MUXCTL_LHP1,
+       MUXCTL_LHP2,
+       MUXCTL_LVP1,
+       MUXCTL_LHP0,
+       MUXCTL_RESERVED102,
+       MUXCTL_LPP,
+
+       MUXCTL_LDI,
+       MUXCTL_PMC,
+       MUXCTL_CRTP,
+       MUXCTL_PTA,
+       MUXCTL_RESERVED108,
+       MUXCTL_KBCD,
+       MUXCTL_GPU7,
+       MUXCTL_DTF,
+
+       MUXCTL_NONE = -1,
+};
+
+/*
+ * And this defines the order of the pullup/pulldown controls which are again
+ * in a different order
+ */
+enum pmux_pullid {
+       /* 0: APB_MISC_PP_PULLUPDOWN_REG_A_0 */
+       PUCTL_ATA,
+       PUCTL_ATB,
+       PUCTL_ATC,
+       PUCTL_ATD,
+       PUCTL_ATE,
+       PUCTL_DAP1,
+       PUCTL_DAP2,
+       PUCTL_DAP3,
+
+       PUCTL_DAP4,
+       PUCTL_DTA,
+       PUCTL_DTB,
+       PUCTL_DTC,
+       PUCTL_DTD,
+       PUCTL_DTE,
+       PUCTL_DTF,
+       PUCTL_GPV,
+
+       /* 16: APB_MISC_PP_PULLUPDOWN_REG_B_0 */
+       PUCTL_RM,
+       PUCTL_I2CP,
+       PUCTL_PTA,
+       PUCTL_GPU7,
+       PUCTL_KBCA,
+       PUCTL_KBCB,
+       PUCTL_KBCC,
+       PUCTL_KBCD,
+
+       PUCTL_SPDI,
+       PUCTL_SPDO,
+       PUCTL_GPSLXAU,
+       PUCTL_CRTP,
+       PUCTL_SLXC,
+       PUCTL_SLXD,
+       PUCTL_SLXK,
+
+       /* 32: APB_MISC_PP_PULLUPDOWN_REG_C_0 */
+       PUCTL_CDEV1,
+       PUCTL_CDEV2,
+       PUCTL_SPIA,
+       PUCTL_SPIB,
+       PUCTL_SPIC,
+       PUCTL_SPID,
+       PUCTL_SPIE,
+       PUCTL_SPIF,
+
+       PUCTL_SPIG,
+       PUCTL_SPIH,
+       PUCTL_IRTX,
+       PUCTL_IRRX,
+       PUCTL_GME,
+       PUCTL_RESERVED45,
+       PUCTL_XM2D,
+       PUCTL_XM2C,
+
+       /* 48: APB_MISC_PP_PULLUPDOWN_REG_D_0 */
+       PUCTL_UAA,
+       PUCTL_UAB,
+       PUCTL_UAC,
+       PUCTL_UAD,
+       PUCTL_UCA,
+       PUCTL_UCB,
+       PUCTL_LD17,
+       PUCTL_LD19_18,
+
+       PUCTL_LD21_20,
+       PUCTL_LD23_22,
+       PUCTL_LS,
+       PUCTL_LC,
+       PUCTL_CSUS,
+       PUCTL_DDRC,
+       PUCTL_SDC,
+       PUCTL_SDD,
+
+       /* 64: APB_MISC_PP_PULLUPDOWN_REG_E_0 */
+       PUCTL_KBCF,
+       PUCTL_KBCE,
+       PUCTL_PMCA,
+       PUCTL_PMCB,
+       PUCTL_PMCC,
+       PUCTL_PMCD,
+       PUCTL_PMCE,
+       PUCTL_CK32,
+
+       PUCTL_UDA,
+       PUCTL_SDMMC1,
+       PUCTL_GMA,
+       PUCTL_GMB,
+       PUCTL_GMC,
+       PUCTL_GMD,
+       PUCTL_DDC,
+       PUCTL_OWC,
+
+       PUCTL_NONE = -1
+};
+
+/* Convenient macro for defining pin group properties */
+#define PINALL(pingrp, f0, f1, f2, f3, mux, pupd)      \
+       {                                               \
+               .funcs = {                              \
+                       PMUX_FUNC_ ## f0,               \
+                       PMUX_FUNC_ ## f1,               \
+                       PMUX_FUNC_ ## f2,               \
+                       PMUX_FUNC_ ## f3,               \
+               },                                      \
+               .ctl_id = mux,                          \
+               .pull_id = pupd                         \
+       }
+
+/* A normal pin group where the mux name and pull-up name match */
+#define PIN(pingrp, f0, f1, f2, f3) \
+       PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pingrp)
+
+/* A pin group where the pull-up name doesn't have a 1-1 mapping */
+#define PINP(pingrp, f0, f1, f2, f3, pupd) \
+       PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pupd)
+
+/* A pin group number which is not used */
+#define PIN_RESERVED \
+       PIN(NONE, RSVD1, RSVD2, RSVD3, RSVD4)
+
+#define DRVGRP(drvgrp) \
+       PINALL(drvgrp, RSVD1, RSVD2, RSVD3, RSVD4, MUXCTL_NONE, PUCTL_NONE)
+
+static const struct pmux_pingrp_desc tegra20_pingroups[] = {
+       PIN(ATA,    IDE,       NAND,      GMI,       RSVD4),
+       PIN(ATB,    IDE,       NAND,      GMI,       SDIO4),
+       PIN(ATC,    IDE,       NAND,      GMI,       SDIO4),
+       PIN(ATD,    IDE,       NAND,      GMI,       SDIO4),
+       PIN(CDEV1,  OSC,       PLLA_OUT,  PLLM_OUT1, AUDIO_SYNC),
+       PIN(CDEV2,  OSC,       AHB_CLK,   APB_CLK,   PLLP_OUT4),
+       PIN(CSUS,   PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK),
+       PIN(DAP1,   DAP1,      RSVD2,     GMI,       SDIO2),
+
+       PIN(DAP2,   DAP2,      TWC,       RSVD3,     GMI),
+       PIN(DAP3,   DAP3,      RSVD2,     RSVD3,     RSVD4),
+       PIN(DAP4,   DAP4,      RSVD2,     GMI,       RSVD4),
+       PIN(DTA,    RSVD1,     SDIO2,     VI,        RSVD4),
+       PIN(DTB,    RSVD1,     RSVD2,     VI,        SPI1),
+       PIN(DTC,    RSVD1,     RSVD2,     VI,        RSVD4),
+       PIN(DTD,    RSVD1,     SDIO2,     VI,        RSVD4),
+       PIN(DTE,    RSVD1,     RSVD2,     VI,        SPI1),
+
+       PINP(GPU,   PWM,       UARTA,     GMI,       RSVD4,         GPSLXAU),
+       PIN(GPV,    PCIE,      RSVD2,     RSVD3,     RSVD4),
+       PIN(I2CP,   I2C,       RSVD2,     RSVD3,     RSVD4),
+       PIN(IRTX,   UARTA,     UARTB,     GMI,       SPI4),
+       PIN(IRRX,   UARTA,     UARTB,     GMI,       SPI4),
+       PIN(KBCB,   KBC,       NAND,      SDIO2,     MIO),
+       PIN(KBCA,   KBC,       NAND,      SDIO2,     EMC_TEST0_DLL),
+       PINP(PMC,   PWR_ON,    PWR_INTR,  RSVD3,     RSVD4,         NONE),
+
+       PIN(PTA,    I2C2,      HDMI,      GMI,       RSVD4),
+       PIN(RM,     I2C,       RSVD2,     RSVD3,     RSVD4),
+       PIN(KBCE,   KBC,       NAND,      OWR,       RSVD4),
+       PIN(KBCF,   KBC,       NAND,      TRACE,     MIO),
+       PIN(GMA,    UARTE,     SPI3,      GMI,       SDIO4),
+       PIN(GMC,    UARTD,     SPI4,      GMI,       SFLASH),
+       PIN(SDMMC1, SDIO1,     RSVD2,     UARTE,     UARTA),
+       PIN(OWC,    OWR,       RSVD2,     RSVD3,     RSVD4),
+
+       PIN(GME,    RSVD1,     DAP5,      GMI,       SDIO4),
+       PIN(SDC,    PWM,       TWC,       SDIO3,     SPI3),
+       PIN(SDD,    UARTA,     PWM,       SDIO3,     SPI3),
+       PIN_RESERVED,
+       PINP(SLXA,  PCIE,      SPI4,      SDIO3,     SPI2,          CRTP),
+       PIN(SLXC,   SPDIF,     SPI4,      SDIO3,     SPI2),
+       PIN(SLXD,   SPDIF,     SPI4,      SDIO3,     SPI2),
+       PIN(SLXK,   PCIE,      SPI4,      SDIO3,     SPI2),
+
+       PIN(SPDI,   SPDIF,     RSVD2,     I2C,       SDIO2),
+       PIN(SPDO,   SPDIF,     RSVD2,     I2C,       SDIO2),
+       PIN(SPIA,   SPI1,      SPI2,      SPI3,      GMI),
+       PIN(SPIB,   SPI1,      SPI2,      SPI3,      GMI),
+       PIN(SPIC,   SPI1,      SPI2,      SPI3,      GMI),
+       PIN(SPID,   SPI2,      SPI1,      SPI2_ALT,  GMI),
+       PIN(SPIE,   SPI2,      SPI1,      SPI2_ALT,  GMI),
+       PIN(SPIF,   SPI3,      SPI1,      SPI2,      RSVD4),
+
+       PIN(SPIG,   SPI3,      SPI2,      SPI2_ALT,  I2C),
+       PIN(SPIH,   SPI3,      SPI2,      SPI2_ALT,  I2C),
+       PIN(UAA,    SPI3,      MIPI_HS,   UARTA,     ULPI),
+       PIN(UAB,    SPI2,      MIPI_HS,   UARTA,     ULPI),
+       PIN(UAC,    OWR,       RSVD2,     RSVD3,     RSVD4),
+       PIN(UAD,    UARTB,     SPDIF,     UARTA,     SPI4),
+       PIN(UCA,    UARTC,     RSVD2,     GMI,       RSVD4),
+       PIN(UCB,    UARTC,     PWM,       GMI,       RSVD4),
+
+       PIN_RESERVED,
+       PIN(ATE,    IDE,       NAND,      GMI,       RSVD4),
+       PIN(KBCC,   KBC,       NAND,      TRACE,     EMC_TEST1_DLL),
+       PIN_RESERVED,
+       PIN_RESERVED,
+       PIN(GMB,    IDE,       NAND,      GMI,       GMI_INT),
+       PIN(GMD,    RSVD1,     NAND,      GMI,       SFLASH),
+       PIN(DDC,    I2C2,      RSVD2,     RSVD3,     RSVD4),
+
+       /* 64 */
+       PINP(LD0,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD1,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD2,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD3,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD4,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD5,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD6,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD7,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+
+       PINP(LD8,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD9,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD10,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD11,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD12,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD13,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD14,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD15,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+
+       PINP(LD16,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
+       PINP(LD17,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD17),
+       PINP(LHP0,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD21_20),
+       PINP(LHP1,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD19_18),
+       PINP(LHP2,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD19_18),
+       PINP(LVP0,  DISPA,     DISPB,     RSVD3,     RSVD4,         LC),
+       PINP(LVP1,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD21_20),
+       PINP(HDINT, HDMI,      RSVD2,     RSVD3,     RSVD4,         LC),
+
+       PINP(LM0,   DISPA,     DISPB,     SPI3,      RSVD4,         LC),
+       PINP(LM1,   DISPA,     DISPB,     RSVD3,     CRT,           LC),
+       PINP(LVS,   DISPA,     DISPB,     XIO,       RSVD4,         LC),
+       PINP(LSC0,  DISPA,     DISPB,     XIO,       RSVD4,         LC),
+       PINP(LSC1,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
+       PINP(LSCK,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
+       PINP(LDC,   DISPA,     DISPB,     RSVD3,     RSVD4,         LS),
+       PINP(LCSN,  DISPA,     DISPB,     SPI3,      RSVD4,         LS),
+
+       /* 96 */
+       PINP(LSPI,  DISPA,     DISPB,     XIO,       HDMI,          LC),
+       PINP(LSDA,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
+       PINP(LSDI,  DISPA,     DISPB,     SPI3,      RSVD4,         LS),
+       PINP(LPW0,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
+       PINP(LPW1,  DISPA,     DISPB,     RSVD3,     RSVD4,         LS),
+       PINP(LPW2,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
+       PINP(LDI,   DISPA,     DISPB,     RSVD3,     RSVD4,         LD23_22),
+       PINP(LHS,   DISPA,     DISPB,     XIO,       RSVD4,         LC),
+
+       PINP(LPP,   DISPA,     DISPB,     RSVD3,     RSVD4,         LD23_22),
+       PIN_RESERVED,
+       PIN(KBCD,   KBC,       NAND,      SDIO2,     MIO),
+       PIN(GPU7,   RTCK,      RSVD2,     RSVD3,     RSVD4),
+       PIN(DTF,    I2C3,      RSVD2,     VI,        RSVD4),
+       PIN(UDA,    SPI1,      RSVD2,     UARTD,     ULPI),
+       PIN(CRTP,   CRT,       RSVD2,     RSVD3,     RSVD4),
+       PINP(SDB,   UARTA,     PWM,       SDIO3,     SPI2,          NONE),
+
+       /* these pin groups only have pullup and pull down control */
+       DRVGRP(CK32),
+       DRVGRP(DDRC),
+       DRVGRP(PMCA),
+       DRVGRP(PMCB),
+       DRVGRP(PMCC),
+       DRVGRP(PMCD),
+       DRVGRP(PMCE),
+       DRVGRP(XM2C),
+       DRVGRP(XM2D),
+};
+const struct pmux_pingrp_desc *tegra_soc_pingroups = tegra20_pingroups;