| // SPDX-License-Identifier: GPL-2.0+ |
| /* |
| * Copyright (c) 2011 The Chromium OS Authors. |
| */ |
| |
| /* 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; |