diff options
Diffstat (limited to 'arch/arm/include')
| -rw-r--r-- | arch/arm/include/asm/arch-tegra/mmc.h | 2 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra/tegra_i2c.h | 6 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra/tegra_mmc.h | 48 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra/usb.h (renamed from arch/arm/include/asm/arch-tegra20/usb.h) | 22 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra114/gp_padctrl.h | 34 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra114/pinmux.h | 246 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra20/tegra.h | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra30/gp_padctrl.h | 6 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra30/pinmux.h | 67 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-tegra30/tegra.h | 2 | 
10 files changed, 267 insertions, 167 deletions
| diff --git a/arch/arm/include/asm/arch-tegra/mmc.h b/arch/arm/include/asm/arch-tegra/mmc.h index 5c9504799..71ad40751 100644 --- a/arch/arm/include/asm/arch-tegra/mmc.h +++ b/arch/arm/include/asm/arch-tegra/mmc.h @@ -22,6 +22,6 @@  #ifndef _TEGRA_MMC_H_  #define _TEGRA_MMC_H_ -int tegra_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio); +void tegra_mmc_init(void);  #endif /* _TEGRA_MMC_H_ */ diff --git a/arch/arm/include/asm/arch-tegra/tegra_i2c.h b/arch/arm/include/asm/arch-tegra/tegra_i2c.h index 265074471..853e59bb6 100644 --- a/arch/arm/include/asm/arch-tegra/tegra_i2c.h +++ b/arch/arm/include/asm/arch-tegra/tegra_i2c.h @@ -105,6 +105,7 @@ struct i2c_ctlr {  	u32 sl_delay_count;		/* 3C: I2C_I2C_SL_DELAY_COUNT */  	u32 reserved_2[4];		/* 40: */  	struct i2c_control control;	/* 50 ~ 68 */ +	u32 clk_div;			/* 6C: I2C_I2C_CLOCK_DIVISOR */  };  /* bit fields definitions for IO Packet Header 1 format */ @@ -154,6 +155,11 @@ struct i2c_ctlr {  #define I2C_INT_ARBITRATION_LOST_SHIFT	2  #define I2C_INT_ARBITRATION_LOST_MASK	(1 << I2C_INT_ARBITRATION_LOST_SHIFT) +/* I2C_CLK_DIVISOR_REGISTER */ +#define CLK_DIV_STD_FAST_MODE		0x19 +#define CLK_DIV_HS_MODE			1 +#define CLK_MULT_STD_FAST_MODE		8 +  /**   * Returns the bus number of the DVC controller   * diff --git a/arch/arm/include/asm/arch-tegra/tegra_mmc.h b/arch/arm/include/asm/arch-tegra/tegra_mmc.h index dd746cae0..2a3f830cc 100644 --- a/arch/arm/include/asm/arch-tegra/tegra_mmc.h +++ b/arch/arm/include/asm/arch-tegra/tegra_mmc.h @@ -22,10 +22,9 @@  #ifndef __TEGRA_MMC_H_  #define __TEGRA_MMC_H_ -#define TEGRA_SDMMC1_BASE	0xC8000000 -#define TEGRA_SDMMC2_BASE	0xC8000200 -#define TEGRA_SDMMC3_BASE	0xC8000400 -#define TEGRA_SDMMC4_BASE	0xC8000600 +#include <fdtdec.h> + +#define MAX_HOSTS		4	/* Max number of 'hosts'/controllers */  #ifndef __ASSEMBLY__  struct tegra_mmc { @@ -62,12 +61,30 @@ struct tegra_mmc {  	unsigned char	admaerr;	/* offset 54h */  	unsigned char	res4[3];	/* RESERVED, offset 55h-57h */  	unsigned long	admaaddr;	/* offset 58h-5Fh */ -	unsigned char	res5[0x9c];	/* RESERVED, offset 60h-FBh */ +	unsigned char	res5[0xa0];	/* RESERVED, offset 60h-FBh */  	unsigned short	slotintstatus;	/* offset FCh */  	unsigned short	hcver;		/* HOST Version */ -	unsigned char	res6[0x100];	/* RESERVED, offset 100h-1FFh */ +	unsigned int	venclkctl;	/* _VENDOR_CLOCK_CNTRL_0,    100h */ +	unsigned int	venspictl;	/* _VENDOR_SPI_CNTRL_0,      104h */ +	unsigned int	venspiintsts;	/* _VENDOR_SPI_INT_STATUS_0, 108h */ +	unsigned int	venceatactl;	/* _VENDOR_CEATA_CNTRL_0,    10Ch */ +	unsigned int	venbootctl;	/* _VENDOR_BOOT_CNTRL_0,     110h */ +	unsigned int	venbootacktout;	/* _VENDOR_BOOT_ACK_TIMEOUT, 114h */ +	unsigned int	venbootdattout;	/* _VENDOR_BOOT_DAT_TIMEOUT, 118h */ +	unsigned int	vendebouncecnt;	/* _VENDOR_DEBOUNCE_COUNT_0, 11Ch */ +	unsigned int	venmiscctl;	/* _VENDOR_MISC_CNTRL_0,     120h */ +	unsigned int	res6[47];	/* 0x124 ~ 0x1DC */ +	unsigned int	sdmemcmppadctl;	/* _SDMEMCOMPPADCTRL_0,      1E0h */ +	unsigned int	autocalcfg;	/* _AUTO_CAL_CONFIG_0,       1E4h */ +	unsigned int	autocalintval;	/* _AUTO_CAL_INTERVAL_0,     1E8h */ +	unsigned int	autocalsts;	/* _AUTO_CAL_STATUS_0,       1ECh */  }; +#define TEGRA_MMC_PWRCTL_SD_BUS_POWER				(1 << 0) +#define TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V1_8			(5 << 1) +#define TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V3_0			(6 << 1) +#define TEGRA_MMC_PWRCTL_SD_BUS_VOLTAGE_V3_3			(7 << 1) +  #define TEGRA_MMC_HOSTCTL_DMASEL_MASK				(3 << 3)  #define TEGRA_MMC_HOSTCTL_DMASEL_SDMA				(0 << 3)  #define TEGRA_MMC_HOSTCTL_DMASEL_ADMA2_32BIT			(2 << 3) @@ -117,15 +134,26 @@ struct tegra_mmc {  #define TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE			(1 << 1) +/* SDMMC1/3 settings from section 24.6 of T30 TRM */ +#define MEMCOMP_PADCTRL_VREF	7 +#define AUTO_CAL_ENABLED	(1 << 29) +#define AUTO_CAL_PD_OFFSET	(0x70 << 8) +#define AUTO_CAL_PU_OFFSET	(0x62 << 0) +  struct mmc_host {  	struct tegra_mmc *reg; +	int id;			/* device id/number, 0-3 */ +	int enabled;		/* 1 to enable, 0 to disable */ +	int width;		/* Bus Width, 1, 4 or 8 */ +	enum periph_id mmc_id;	/* Peripheral ID: PERIPH_ID_... */ +	struct fdt_gpio_state cd_gpio;		/* Change Detect GPIO */ +	struct fdt_gpio_state pwr_gpio;		/* Power GPIO */ +	struct fdt_gpio_state wp_gpio;		/* Write Protect GPIO */  	unsigned int version;	/* SDHCI spec. version */  	unsigned int clock;	/* Current clock (MHz) */ -	unsigned int base;	/* Base address, SDMMC1/2/3/4 */ -	enum periph_id mmc_id;	/* Peripheral ID: PERIPH_ID_... */ -	int pwr_gpio;		/* Power GPIO */ -	int cd_gpio;		/* Change Detect GPIO */  }; +void pad_init_mmc(struct mmc_host *host); +  #endif	/* __ASSEMBLY__ */  #endif	/* __TEGRA_MMC_H_ */ diff --git a/arch/arm/include/asm/arch-tegra20/usb.h b/arch/arm/include/asm/arch-tegra/usb.h index fdbd127e6..ef6c089be 100644 --- a/arch/arm/include/asm/arch-tegra20/usb.h +++ b/arch/arm/include/asm/arch-tegra/usb.h @@ -243,29 +243,7 @@ struct usb_ctlr {  #define VBUS_VLD_STS			(1 << 26) -/* Change the USB host port into host mode */ -void usb_set_host_mode(void); -  /* Setup USB on the board */  int board_usb_init(const void *blob); -/** - * Start up the given port number (ports are numbered from 0 on each board). - * This returns values for the appropriate hccr and hcor addresses to use for - * USB EHCI operations. - * - * @param portnum	port number to start - * @param hccr		returns start address of EHCI HCCR registers - * @param hcor		returns start address of EHCI HCOR registers - * @return 0 if ok, -1 on error (generally invalid port number) - */ -int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor); - -/** - * Stop the current port - * - * @return 0 if ok, -1 if no port was active - */ -int tegrausb_stop_port(int portnum); -  #endif	/* _TEGRA_USB_H_ */ diff --git a/arch/arm/include/asm/arch-tegra114/gp_padctrl.h b/arch/arm/include/asm/arch-tegra114/gp_padctrl.h index c538bdd05..1ef1a1484 100644 --- a/arch/arm/include/asm/arch-tegra114/gp_padctrl.h +++ b/arch/arm/include/asm/arch-tegra114/gp_padctrl.h @@ -27,7 +27,7 @@ struct apb_misc_gp_ctlr {  	u32	emu_revid;	/* 0x60: APB_MISC_GP_EMU_REVID */  	u32	xactor_scratch;	/* 0x64: APB_MISC_GP_XACTOR_SCRATCH */  	u32	aocfg1;		/* 0x68: APB_MISC_GP_AOCFG1PADCTRL */ -	u32	aocfg2;		/* 0x6c: APB_MISC_GP_AOCFG2PADCTRL */ +	u32	aocfg2;		/* 0x6C: APB_MISC_GP_AOCFG2PADCTRL */  	u32	atcfg1;		/* 0x70: APB_MISC_GP_ATCFG1PADCTRL */  	u32	atcfg2;		/* 0x74: APB_MISC_GP_ATCFG2PADCTRL */  	u32	atcfg3;		/* 0x78: APB_MISC_GP_ATCFG3PADCTRL */ @@ -35,25 +35,43 @@ struct apb_misc_gp_ctlr {  	u32	atcfg5;		/* 0x80: APB_MISC_GP_ATCFG5PADCTRL */  	u32	cdev1cfg;	/* 0x84: APB_MISC_GP_CDEV1CFGPADCTRL */  	u32	cdev2cfg;	/* 0x88: APB_MISC_GP_CDEV2CFGPADCTRL */ -	u32	csuscfg;	/* 0x8C: APB_MISC_GP_CSUSCFGPADCTRL */ +	u32	reserved1;	/* 0x8C: */  	u32	dap1cfg;	/* 0x90: APB_MISC_GP_DAP1CFGPADCTRL */  	u32	dap2cfg;	/* 0x94: APB_MISC_GP_DAP2CFGPADCTRL */  	u32	dap3cfg;	/* 0x98: APB_MISC_GP_DAP3CFGPADCTRL */  	u32	dap4cfg;	/* 0x9C: APB_MISC_GP_DAP4CFGPADCTRL */  	u32	dbgcfg;		/* 0xA0: APB_MISC_GP_DBGCFGPADCTRL */ -	u32	lcdcfg1;	/* 0xA4: APB_MISC_GP_LCDCFG1PADCTRL */ -	u32	lcdcfg2;	/* 0xA8: APB_MISC_GP_LCDCFG2PADCTRL */ -	u32	sdio2cfg;	/* 0xAC: APB_MISC_GP_SDIO2CFGPADCTRL */ +	u32	reserved2[3];	/* 0xA4 - 0xAC: */  	u32	sdio3cfg;	/* 0xB0: APB_MISC_GP_SDIO3CFGPADCTRL */  	u32	spicfg;		/* 0xB4: APB_MISC_GP_SPICFGPADCTRL */  	u32	uaacfg;		/* 0xB8: APB_MISC_GP_UAACFGPADCTRL */  	u32	uabcfg;		/* 0xBC: APB_MISC_GP_UABCFGPADCTRL */  	u32	uart2cfg;	/* 0xC0: APB_MISC_GP_UART2CFGPADCTRL */  	u32	uart3cfg;	/* 0xC4: APB_MISC_GP_UART3CFGPADCTRL */ -	u32	vicfg1;		/* 0xC8: APB_MISC_GP_VICFG1PADCTRL */ -	u32	vivttgen;	/* 0xCC: APB_MISC_GP_VIVTTGENPADCTRL */ -	u32	reserved1[7];	/* 0xD0-0xE8: */ +	u32	reserved3[9];	/* 0xC8-0xE8: */  	u32	sdio1cfg;	/* 0xEC: APB_MISC_GP_SDIO1CFGPADCTRL */ +	u32	reserved4[3];	/* 0xF0-0xF8: */ +	u32	ddccfg;		/* 0xFC: APB_MISC_GP_DDCCFGPADCTRL */ +	u32	gmacfg;		/* 0x100: APB_MISC_GP_GMACFGPADCTRL */ +	u32	reserved5[3];	/* 0x104-0x10C: */ +	u32	gmecfg;		/* 0x110: APB_MISC_GP_GMECFGPADCTRL */ +	u32	gmfcfg;		/* 0x114: APB_MISC_GP_GMFCFGPADCTRL */ +	u32	gmgcfg;		/* 0x118: APB_MISC_GP_GMGCFGPADCTRL */ +	u32	gmhcfg;		/* 0x11C: APB_MISC_GP_GMHCFGPADCTRL */ +	u32	owrcfg;		/* 0x120: APB_MISC_GP_OWRCFGPADCTRL */ +	u32	uadcfg;		/* 0x124: APB_MISC_GP_UADCFGPADCTRL */ +	u32	reserved6;	/* 0x128: */ +	u32	dev3cfg;	/* 0x12C: APB_MISC_GP_DEV3CFGPADCTRL */ +	u32	reserved7[2];	/* 0x130 - 0x134: */ +	u32	ceccfg;		/* 0x138: APB_MISC_GP_CECCFGPADCTRL */ +	u32	reserved8[22];	/* 0x13C - 0x190: */ +	u32	atcfg6;		/* 0x194: APB_MISC_GP_ATCFG6PADCTRL */ +	u32	dap5cfg;	/* 0x198: APB_MISC_GP_DAP5CFGPADCTRL */ +	u32	vbuscfg;	/* 0x19C: APB_MISC_GP_USBVBUSENCFGPADCTRL */ +	u32	aocfg3;		/* 0x1A0: APB_MISC_GP_AOCFG3PADCTRL */ +	u32	hvccfg0;	/* 0x1A4: APB_MISC_GP_HVCCFG0PADCTRL */ +	u32	sdio4cfg;	/* 0x1A8: APB_MISC_GP_SDIO4CFGPADCTRL */ +	u32	aocfg0;		/* 0x1AC: APB_MISC_GP_AOCFG0PADCTRL */  };  #endif	/* _TEGRA114_GP_PADCTRL_H_ */ diff --git a/arch/arm/include/asm/arch-tegra114/pinmux.h b/arch/arm/include/asm/arch-tegra114/pinmux.h index fd2293039..9c22c08b6 100644 --- a/arch/arm/include/asm/arch-tegra114/pinmux.h +++ b/arch/arm/include/asm/arch-tegra114/pinmux.h @@ -50,72 +50,12 @@ enum pmux_pingrp {  	PINGRP_SDMMC1_DAT2,  	PINGRP_SDMMC1_DAT1,  	PINGRP_SDMMC1_DAT0, -	PINGRP_GPIO_PV2, -	PINGRP_GPIO_PV3, -	PINGRP_CLK2_OUT, +	PINGRP_CLK2_OUT = PINGRP_SDMMC1_DAT0 + 3,  	PINGRP_CLK2_REQ, -	PINGRP_LCD_PWR1, -	PINGRP_LCD_PWR2, -	PINGRP_LCD_SDIN, -	PINGRP_LCD_SDOUT, -	PINGRP_LCD_WR_N, -	PINGRP_LCD_CS0_N, -	PINGRP_LCD_DC0, -	PINGRP_LCD_SCK, -	PINGRP_LCD_PWR0, -	PINGRP_LCD_PCLK, -	PINGRP_LCD_DE, -	PINGRP_LCD_HSYNC, -	PINGRP_LCD_VSYNC, -	PINGRP_LCD_D0, -	PINGRP_LCD_D1, -	PINGRP_LCD_D2, -	PINGRP_LCD_D3, -	PINGRP_LCD_D4, -	PINGRP_LCD_D5, -	PINGRP_LCD_D6, -	PINGRP_LCD_D7, -	PINGRP_LCD_D8, -	PINGRP_LCD_D9, -	PINGRP_LCD_D10, -	PINGRP_LCD_D11, -	PINGRP_LCD_D12, -	PINGRP_LCD_D13, -	PINGRP_LCD_D14, -	PINGRP_LCD_D15, -	PINGRP_LCD_D16, -	PINGRP_LCD_D17, -	PINGRP_LCD_D18, -	PINGRP_LCD_D19, -	PINGRP_LCD_D20, -	PINGRP_LCD_D21, -	PINGRP_LCD_D22, -	PINGRP_LCD_D23, -	PINGRP_LCD_CS1_N, -	PINGRP_LCD_M1, -	PINGRP_LCD_DC1, -	PINGRP_HDMI_INT, +	PINGRP_HDMI_INT = PINGRP_CLK2_REQ + 41,  	PINGRP_DDC_SCL,  	PINGRP_DDC_SDA, -	PINGRP_CRT_HSYNC, -	PINGRP_CRT_VSYNC, -	PINGRP_VI_D0, -	PINGRP_VI_D1, -	PINGRP_VI_D2, -	PINGRP_VI_D3, -	PINGRP_VI_D4, -	PINGRP_VI_D5, -	PINGRP_VI_D6, -	PINGRP_VI_D7, -	PINGRP_VI_D8, -	PINGRP_VI_D9, -	PINGRP_VI_D10, -	PINGRP_VI_D11, -	PINGRP_VI_PCLK, -	PINGRP_VI_MCLK, -	PINGRP_VI_VSYNC, -	PINGRP_VI_HSYNC, -	PINGRP_UART2_RXD, +	PINGRP_UART2_RXD = PINGRP_DDC_SDA + 19,  	PINGRP_UART2_TXD,  	PINGRP_UART2_RTS_N,  	PINGRP_UART2_CTS_N, @@ -186,8 +126,7 @@ enum pmux_pingrp {  	PINGRP_SDMMC4_DAT5,  	PINGRP_SDMMC4_DAT6,  	PINGRP_SDMMC4_DAT7, -	PINGRP_SDMMC4_RST_N, -	PINGRP_CAM_MCLK, +	PINGRP_CAM_MCLK = PINGRP_SDMMC4_DAT7 + 2,  	PINGRP_GPIO_PCC1,  	PINGRP_GPIO_PBB0,  	PINGRP_CAM_I2C_SCL, @@ -212,12 +151,7 @@ enum pmux_pingrp {  	PINGRP_KB_ROW8,  	PINGRP_KB_ROW9,  	PINGRP_KB_ROW10, -	PINGRP_KB_ROW11, -	PINGRP_KB_ROW12, -	PINGRP_KB_ROW13, -	PINGRP_KB_ROW14, -	PINGRP_KB_ROW15, -	PINGRP_KB_COL0, +	PINGRP_KB_COL0 = PINGRP_KB_ROW10 + 6,  	PINGRP_KB_COL1,  	PINGRP_KB_COL2,  	PINGRP_KB_COL3, @@ -244,47 +178,30 @@ enum pmux_pingrp {  	PINGRP_DAP2_DIN,  	PINGRP_DAP2_DOUT,  	PINGRP_DAP2_SCLK, -	PINGRP_SPI2_MOSI, -	PINGRP_SPI2_MISO, -	PINGRP_SPI2_CS0_N, -	PINGRP_SPI2_SCK, -	PINGRP_SPI1_MOSI, -	PINGRP_SPI1_SCK, -	PINGRP_SPI1_CS0_N, -	PINGRP_SPI1_MISO, -	PINGRP_SPI2_CS1_N, -	PINGRP_SPI2_CS2_N, -	PINGRP_SDMMC3_CLK, +	PINGRP_DVFS_PWM, +	PINGRP_GPIO_X1_AUD, +	PINGRP_GPIO_X3_AUD, +	PINGRP_DVFS_CLK, +	PINGRP_GPIO_X4_AUD, +	PINGRP_GPIO_X5_AUD, +	PINGRP_GPIO_X6_AUD, +	PINGRP_GPIO_X7_AUD, +	PINGRP_SDMMC3_CLK = PINGRP_GPIO_X7_AUD + 3,  	PINGRP_SDMMC3_CMD,  	PINGRP_SDMMC3_DAT0,  	PINGRP_SDMMC3_DAT1,  	PINGRP_SDMMC3_DAT2,  	PINGRP_SDMMC3_DAT3, -	PINGRP_SDMMC3_DAT4, -	PINGRP_SDMMC3_DAT5, -	PINGRP_SDMMC3_DAT6, -	PINGRP_SDMMC3_DAT7, -	PINGRP_PEX_L0_PRSNT_N, -	PINGRP_PEX_L0_RST_N, -	PINGRP_PEX_L0_CLKREQ_N, -	PINGRP_PEX_WAKE_N, -	PINGRP_PEX_L1_PRSNT_N, -	PINGRP_PEX_L1_RST_N, -	PINGRP_PEX_L1_CLKREQ_N, -	PINGRP_PEX_L2_PRSNT_N, -	PINGRP_PEX_L2_RST_N, -	PINGRP_PEX_L2_CLKREQ_N, -	PINGRP_HDMI_CEC,	/* offset 0x33e0 */ +	PINGRP_HDMI_CEC = PINGRP_SDMMC3_DAT3 + 15, /* offset 0x33e0 */  	PINGRP_SDMMC1_WP_N,  	PINGRP_SDMMC3_CD_N, -	PINGRP_SPI1_CS1_N, -	PINGRP_SPI1_CS2_N, -	PINGRP_USB_VBUS_EN0,    /* offset 0x33f4 */ +	PINGRP_GPIO_W2_AUD, +	PINGRP_GPIO_W3_AUD, +	PINGRP_USB_VBUS_EN0,	/* offset 0x33f4 */  	PINGRP_USB_VBUS_EN1,  	PINGRP_SDMMC3_CLK_LB_IN,  	PINGRP_SDMMC3_CLK_LB_OUT, -	PINGRP_NAND_GMI_CLK_LB, -	PINGRP_RESET_OUT_N, +	PINGRP_RESET_OUT_N = PINGRP_SDMMC3_CLK_LB_OUT + 2,  	PINGRP_COUNT,  }; @@ -298,41 +215,35 @@ enum pdrive_pingrp {  	PDRIVE_PINGROUP_AT5,  	PDRIVE_PINGROUP_CDEV1,  	PDRIVE_PINGROUP_CDEV2, -	PDRIVE_PINGROUP_CSUS, -	PDRIVE_PINGROUP_DAP1, +	PDRIVE_PINGROUP_DAP1 = 10,	/* offset 0x890 */  	PDRIVE_PINGROUP_DAP2,  	PDRIVE_PINGROUP_DAP3,  	PDRIVE_PINGROUP_DAP4,  	PDRIVE_PINGROUP_DBG, -	PDRIVE_PINGROUP_LCD1, -	PDRIVE_PINGROUP_LCD2, -	PDRIVE_PINGROUP_SDIO2, -	PDRIVE_PINGROUP_SDIO3, +	PDRIVE_PINGROUP_SDIO3 = 18,	/* offset 0x8B0 */  	PDRIVE_PINGROUP_SPI,  	PDRIVE_PINGROUP_UAA,  	PDRIVE_PINGROUP_UAB,  	PDRIVE_PINGROUP_UART2,  	PDRIVE_PINGROUP_UART3, -	PDRIVE_PINGROUP_VI1 = 24,       /* offset 0x8c8 */ -	PDRIVE_PINGROUP_SDIO1 = 33,     /* offset 0x8ec */ -	PDRIVE_PINGROUP_CRT = 36,       /* offset 0x8f8 */ -	PDRIVE_PINGROUP_DDC, +	PDRIVE_PINGROUP_SDIO1 = 33,     /* offset 0x8EC */ +	PDRIVE_PINGROUP_DDC = 37,       /* offset 0x8FC */  	PDRIVE_PINGROUP_GMA, -	PDRIVE_PINGROUP_GMB, -	PDRIVE_PINGROUP_GMC, -	PDRIVE_PINGROUP_GMD, -	PDRIVE_PINGROUP_GME, +	PDRIVE_PINGROUP_GME = 42,	/* offset 0x910 */  	PDRIVE_PINGROUP_GMF,  	PDRIVE_PINGROUP_GMG,  	PDRIVE_PINGROUP_GMH,  	PDRIVE_PINGROUP_OWR,  	PDRIVE_PINGROUP_UAD, -	PDRIVE_PINGROUP_GPV,  	PDRIVE_PINGROUP_DEV3 = 49,      /* offset 0x92c */  	PDRIVE_PINGROUP_CEC = 52,       /* offset 0x938 */ -	PDRIVE_PINGROUP_AT6, +	PDRIVE_PINGROUP_AT6 = 75,	/* offset 0x994 */  	PDRIVE_PINGROUP_DAP5,  	PDRIVE_PINGROUP_VBUS, +	PDRIVE_PINGROUP_AO3, +	PDRIVE_PINGROUP_HVC, +	PDRIVE_PINGROUP_SDIO4, +	PDRIVE_PINGROUP_AO0,  	PDRIVE_PINGROUP_COUNT,  }; @@ -401,6 +312,7 @@ enum pmux_func {  	PMUX_FUNC_VI,  	PMUX_FUNC_VI_SENSOR_CLK,  	PMUX_FUNC_XIO, +	/* End of Tegra2 MUX selectors */  	PMUX_FUNC_BLINK,  	PMUX_FUNC_CEC,  	PMUX_FUNC_CLK12, @@ -444,7 +356,7 @@ enum pmux_func {  	PMUX_FUNC_VGP4,  	PMUX_FUNC_VGP5,  	PMUX_FUNC_VGP6, - +	/* End of Tegra3 MUX selectors */  	PMUX_FUNC_USB,  	PMUX_FUNC_SOC,  	PMUX_FUNC_CPU, @@ -453,10 +365,12 @@ enum pmux_func {  	PMUX_FUNC_PMI,  	PMUX_FUNC_CLDVFS,  	PMUX_FUNC_RESET_OUT_N, +	/* End of Tegra114 MUX selectors */  	PMUX_FUNC_SAFE,  	PMUX_FUNC_MAX, +	PMUX_FUNC_INVALID = 0x4000,  	PMUX_FUNC_RSVD1 = 0x8000,  	PMUX_FUNC_RSVD2 = 0x8001,  	PMUX_FUNC_RSVD3 = 0x8002, @@ -492,6 +406,7 @@ enum pmux_tristate {  enum pmux_pin_io {  	PMUX_PIN_OUTPUT = 0,  	PMUX_PIN_INPUT = 1, +	PMUX_PIN_NONE,  };  /* return 1 if a pin_io_is in range */  #define pmux_pin_io_isvalid(io) (((io) >= PMUX_PIN_OUTPUT) && \ @@ -525,6 +440,16 @@ enum pmux_pin_ioreset {  				(((ioreset) >= PMUX_PIN_IO_RESET_DEFAULT) && \  				((ioreset) <= PMUX_PIN_IO_RESET_ENABLE)) +enum pmux_pin_rcv_sel { +	PMUX_PIN_RCV_SEL_DEFAULT = 0, +	PMUX_PIN_RCV_SEL_NORMAL, +	PMUX_PIN_RCV_SEL_HIGH, +}; +/* return 1 if a pin_rcv_sel_is in range */ +#define pmux_pin_rcv_sel_isvalid(rcv_sel) \ +				(((rcv_sel) >= PMUX_PIN_RCV_SEL_DEFAULT) && \ +				((rcv_sel) <= PMUX_PIN_RCV_SEL_HIGH)) +  /* Available power domains used by pin groups */  enum pmux_vddio {  	PMUX_VDDIO_BB = 0, @@ -546,10 +471,73 @@ enum pmux_vddio {  	PMUX_VDDIO_NONE  }; -/* T114 pin drive group and pin mux registers */ -#define PDRIVE_PINGROUP_OFFSET  (0x868 >> 2) -#define PMUX_OFFSET     ((0x3000 >> 2) - PDRIVE_PINGROUP_OFFSET - \ -			PDRIVE_PINGROUP_COUNT) +#define PGRP_SLWF_NONE	-1 +#define PGRP_SLWF_MAX	3 +#define PGRP_SLWR_NONE	PGRP_SLWF_NONE +#define PGRP_SLWR_MAX	PGRP_SLWF_MAX + +#define PGRP_DRVUP_NONE	-1 +#define PGRP_DRVUP_MAX	127 +#define PGRP_DRVDN_NONE	PGRP_DRVUP_NONE +#define PGRP_DRVDN_MAX	PGRP_DRVUP_MAX + +#define PGRP_SCHMT_NONE	-1 +#define PGRP_HSM_NONE	PGRP_SCHMT_NONE + +/* return 1 if a padgrp is in range */ +#define pmux_padgrp_isvalid(pd) (((pd) >= 0) && ((pd) < PDRIVE_PINGROUP_COUNT)) + +/* return 1 if a slew-rate rising/falling edge value is in range */ +#define pmux_pad_slw_isvalid(slw) (((slw) == PGRP_SLWF_NONE) || \ +				(((slw) >= 0) && ((slw) <= PGRP_SLWF_MAX))) + +/* return 1 if a driver output pull-up/down strength code value is in range */ +#define pmux_pad_drv_isvalid(drv) (((drv) == PGRP_DRVUP_NONE) || \ +				(((drv) >= 0) && ((drv) <= PGRP_DRVUP_MAX))) + +/* return 1 if a low-power mode value is in range */ +#define pmux_pad_lpmd_isvalid(lpm) (((lpm) == PGRP_LPMD_NONE) || \ +				(((lpm) >= 0) && ((lpm) <= PGRP_LPMD_X))) + +/* Defines a pin group cfg's low-power mode select */ +enum pgrp_lpmd { +	PGRP_LPMD_X8 = 0, +	PGRP_LPMD_X4, +	PGRP_LPMD_X2, +	PGRP_LPMD_X, +	PGRP_LPMD_NONE = -1, +}; + +/* Defines whether a pin group cfg's schmidt is enabled or not */ +enum pgrp_schmt { +	PGRP_SCHMT_DISABLE = 0, +	PGRP_SCHMT_ENABLE = 1, +}; + +/* Defines whether a pin group cfg's high-speed mode is enabled or not */ +enum pgrp_hsm { +	PGRP_HSM_DISABLE = 0, +	PGRP_HSM_ENABLE = 1, +}; + +/* + * This defines the configuration for a pin group's pad control config + */ +struct padctrl_config { +	enum pdrive_pingrp padgrp;	/* pin group PDRIVE_PINGRP_x */ +	int slwf;			/* falling edge slew         */ +	int slwr;			/* rising edge slew          */ +	int drvup;			/* pull-up drive strength    */ +	int drvdn;			/* pull-down drive strength  */ +	enum pgrp_lpmd lpmd;		/* low-power mode selection  */ +	enum pgrp_schmt schmt;		/* schmidt enable            */ +	enum pgrp_hsm hsm;		/* high-speed mode enable    */ +}; + +/* t114 pin drive group and pin mux registers */ +#define PDRIVE_PINGROUP_OFFSET	(0x868 >> 2) +#define PMUX_OFFSET	((0x3000 >> 2) - PDRIVE_PINGROUP_OFFSET - \ +				PDRIVE_PINGROUP_COUNT)  struct pmux_tri_ctlr {  	uint pmt_reserved0;		/* ABP_MISC_PP_ reserved offset 00 */  	uint pmt_reserved1;		/* ABP_MISC_PP_ reserved offset 04 */ @@ -581,6 +569,8 @@ struct pingroup_config {  	enum pmux_pin_lock lock;	/* lock enable/disable PMUX_PIN...  */  	enum pmux_pin_od od;		/* open-drain or push-pull driver  */  	enum pmux_pin_ioreset ioreset;	/* input/output reset PMUX_PIN...  */ +	enum pmux_pin_rcv_sel rcv_sel;	/* select between High and Normal  */ +					/* VIL/VIH receivers */  };  /* Set a pin group to tristate */ @@ -615,4 +605,12 @@ void pinmux_config_table(struct pingroup_config *config, int len);  /* Set a group of pins from a table */  void pinmux_init(void); -#endif  /* _TEGRA114_PINMUX_H_ */ +/** + * Set the GP pad configs + * + * @param config	List of config items + * @param len		Number of config items in list + */ +void padgrp_config_table(struct padctrl_config *config, int len); + +#endif	/* _TEGRA114_PINMUX_H_ */ diff --git a/arch/arm/include/asm/arch-tegra20/tegra.h b/arch/arm/include/asm/arch-tegra20/tegra.h index e1de0447f..ad5c01d1f 100644 --- a/arch/arm/include/asm/arch-tegra20/tegra.h +++ b/arch/arm/include/asm/arch-tegra20/tegra.h @@ -29,7 +29,6 @@  #include <asm/arch-tegra/tegra.h>  #define TEGRA_USB1_BASE		0xC5000000 -#define TEGRA_USB3_BASE		0xC5008000  #define BCT_ODMDATA_OFFSET	4068	/* 12 bytes from end of BCT */ diff --git a/arch/arm/include/asm/arch-tegra30/gp_padctrl.h b/arch/arm/include/asm/arch-tegra30/gp_padctrl.h index 9b383d0e7..23d184f2d 100644 --- a/arch/arm/include/asm/arch-tegra30/gp_padctrl.h +++ b/arch/arm/include/asm/arch-tegra30/gp_padctrl.h @@ -56,4 +56,10 @@ struct apb_misc_gp_ctlr {  	u32	sdio1cfg;	/* 0xEC: APB_MISC_GP_SDIO1CFGPADCTRL */  }; +/* SDMMC1/3 settings from section 24.6 of T30 TRM */ +#define SDIOCFG_DRVUP_SLWF	1 +#define SDIOCFG_DRVDN_SLWR	1 +#define SDIOCFG_DRVUP		0x2E +#define SDIOCFG_DRVDN		0x2A +  #endif	/* _TEGRA30_GP_PADCTRL_H_ */ diff --git a/arch/arm/include/asm/arch-tegra30/pinmux.h b/arch/arm/include/asm/arch-tegra30/pinmux.h index 341951bfc..a9e1b462c 100644 --- a/arch/arm/include/asm/arch-tegra30/pinmux.h +++ b/arch/arm/include/asm/arch-tegra30/pinmux.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2012, NVIDIA CORPORATION.  All rights reserved. + * Copyright (c) 2010-2013, NVIDIA CORPORATION.  All rights reserved.   *   * This program is free software; you can redistribute it and/or modify it   * under the terms and conditions of the GNU General Public License, @@ -531,6 +531,63 @@ enum pmux_vddio {  	PMUX_VDDIO_NONE  }; +#define PGRP_SLWF_NONE	-1 +#define PGRP_SLWF_MAX	3 +#define	PGRP_SLWR_NONE	PGRP_SLWF_NONE +#define PGRP_SLWR_MAX	PGRP_SLWF_MAX + +#define PGRP_DRVUP_NONE	-1 +#define PGRP_DRVUP_MAX	127 +#define	PGRP_DRVDN_NONE	PGRP_DRVUP_NONE +#define PGRP_DRVDN_MAX	PGRP_DRVUP_MAX + +/* return 1 if a padgrp is in range */ +#define pmux_padgrp_isvalid(pd) (((pd) >= 0) && ((pd) < PDRIVE_PINGROUP_COUNT)) + +/* return 1 if a slew-rate rising/falling edge value is in range */ +#define pmux_pad_slw_isvalid(slw) (((slw) >= 0) && ((slw) <= PGRP_SLWF_MAX)) + +/* return 1 if a driver output pull-up/down strength code value is in range */ +#define pmux_pad_drv_isvalid(drv) (((drv) >= 0) && ((drv) <= PGRP_DRVUP_MAX)) + +/* return 1 if a low-power mode value is in range */ +#define pmux_pad_lpmd_isvalid(lpm) (((lpm) >= 0) && ((lpm) <= PGRP_LPMD_X)) + +/* Defines a pin group cfg's low-power mode select */ +enum pgrp_lpmd { +	PGRP_LPMD_X8 = 0, +	PGRP_LPMD_X4, +	PGRP_LPMD_X2, +	PGRP_LPMD_X, +	PGRP_LPMD_NONE = -1, +}; + +/* Defines whether a pin group cfg's schmidt is enabled or not */ +enum pgrp_schmt { +	PGRP_SCHMT_DISABLE = 0, +	PGRP_SCHMT_ENABLE = 1, +}; + +/* Defines whether a pin group cfg's high-speed mode is enabled or not */ +enum pgrp_hsm { +	PGRP_HSM_DISABLE = 0, +	PGRP_HSM_ENABLE = 1, +}; + +/* + * This defines the configuration for a pin group's pad control config + */ +struct padctrl_config { +	enum pdrive_pingrp padgrp;	/* pin group PDRIVE_PINGRP_x */ +	int slwf;			/* falling edge slew         */ +	int slwr;			/* rising edge slew          */ +	int drvup;			/* pull-up drive strength    */ +	int drvdn;			/* pull-down drive strength  */ +	enum pgrp_lpmd lpmd;		/* low-power mode selection  */ +	enum pgrp_schmt schmt;		/* schmidt enable            */ +	enum pgrp_hsm hsm;		/* high-speed mode enable    */ +}; +  /* t30 pin drive group and pin mux registers */  #define PDRIVE_PINGROUP_OFFSET	(0x868 >> 2)  #define PMUX_OFFSET	((0x3000 >> 2) - PDRIVE_PINGROUP_OFFSET - \ @@ -600,4 +657,12 @@ void pinmux_config_table(struct pingroup_config *config, int len);  /* Set a group of pins from a table */  void pinmux_init(void); +/** + * Set the GP pad configs + * + * @param config	List of config items + * @param len		Number of config items in list + */ +void padgrp_config_table(struct padctrl_config *config, int len); +  #endif	/* _TEGRA30_PINMUX_H_ */ diff --git a/arch/arm/include/asm/arch-tegra30/tegra.h b/arch/arm/include/asm/arch-tegra30/tegra.h index decf564d1..c02c5d850 100644 --- a/arch/arm/include/asm/arch-tegra30/tegra.h +++ b/arch/arm/include/asm/arch-tegra30/tegra.h @@ -21,6 +21,8 @@  #include <asm/arch-tegra/tegra.h> +#define TEGRA_USB1_BASE		0x7D000000 +  #define BCT_ODMDATA_OFFSET	6116	/* 12 bytes from end of BCT */  #define MAX_NUM_CPU		4 |