diff options
Diffstat (limited to 'board/freescale')
21 files changed, 1508 insertions, 1151 deletions
| diff --git a/board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg b/board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg index d0f581582..bae5c2320 100644 --- a/board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg +++ b/board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg @@ -172,3 +172,14 @@ DATA 4 0x020e0010 0xF00000CF  /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */  DATA 4 0x020e0018 0x007F007F  DATA 4 0x020e001c 0x007F007F + +/* + * Setup CCM_CCOSR register as follows: + * + * cko1_en  = 1	   --> CKO1 enabled + * cko1_div = 111  --> divide by 8 + * cko1_sel = 1011 --> ahb_clk_root + * + * This sets CKO1 at ahb_clk_root/8 = 132/8 = 16.5 MHz + */ +DATA 4 0x020c4060 0x000000fb diff --git a/board/freescale/mx23evk/spl_boot.c b/board/freescale/mx23evk/spl_boot.c index b6f4e7eff..6be8c8d9d 100644 --- a/board/freescale/mx23evk/spl_boot.c +++ b/board/freescale/mx23evk/spl_boot.c @@ -25,8 +25,8 @@  #include <asm/arch/imx-regs.h>  #include <asm/arch/sys_proto.h> -#define	MUX_CONFIG_SSP1	(MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) -#define	MUX_CONFIG_EMI	(MXS_PAD_3V3 | MXS_PAD_16MA | MXS_PAD_PULLUP) +#define	MUX_CONFIG_SSP1	(MXS_PAD_8MA | MXS_PAD_PULLUP) +#define	MUX_CONFIG_EMI	(MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP)  const iomux_cfg_t iomux_setup[] = {  	/* DUART */ diff --git a/board/freescale/mx25pdk/mx25pdk.c b/board/freescale/mx25pdk/mx25pdk.c index d73e27e54..5e6047f83 100644 --- a/board/freescale/mx25pdk/mx25pdk.c +++ b/board/freescale/mx25pdk/mx25pdk.c @@ -21,8 +21,7 @@  #include <asm/io.h>  #include <asm/gpio.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/imx25-pinmux.h> -#include <asm/arch/sys_proto.h> +#include <asm/arch/iomux-mx25.h>  #include <asm/arch/clock.h>  #include <mmc.h>  #include <fsl_esdhc.h> @@ -31,8 +30,8 @@  #include <fsl_pmic.h>  #include <mc34704.h> -#define FEC_RESET_B		IMX_GPIO_NR(2, 3) -#define FEC_ENABLE_B		IMX_GPIO_NR(4, 8) +#define FEC_RESET_B		IMX_GPIO_NR(4, 8) +#define FEC_ENABLE_B		IMX_GPIO_NR(2, 3)  #define CARD_DETECT		IMX_GPIO_NR(2, 1)  DECLARE_GLOBAL_DATA_PTR; @@ -43,29 +42,42 @@ struct fsl_esdhc_cfg esdhc_cfg[1] = {  };  #endif +/* + * FIXME: need to revisit this + * The original code enabled PUE and 100-k pull-down without PKE, so the right + * value here is likely: + *	0 for no pull + * or: + *	PAD_CTL_PUS_100K_DOWN for 100-k pull-down + */ +#define FEC_OUT_PAD_CTRL	0 + +#define I2C_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | \ +				 PAD_CTL_ODE) +  static void mx25pdk_fec_init(void)  { -	struct iomuxc_mux_ctl *muxctl; -	struct iomuxc_pad_ctl *padctl; -	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5); -	u32 gpio_mux_mode0_sion = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION; +	static const iomux_v3_cfg_t fec_pads[] = { +		MX25_PAD_FEC_TX_CLK__FEC_TX_CLK, +		MX25_PAD_FEC_RX_DV__FEC_RX_DV, +		MX25_PAD_FEC_RDATA0__FEC_RDATA0, +		NEW_PAD_CTRL(MX25_PAD_FEC_TDATA0__FEC_TDATA0, FEC_OUT_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_FEC_TX_EN__FEC_TX_EN, FEC_OUT_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_FEC_MDC__FEC_MDC, FEC_OUT_PAD_CTRL), +		MX25_PAD_FEC_MDIO__FEC_MDIO, +		MX25_PAD_FEC_RDATA1__FEC_RDATA1, +		NEW_PAD_CTRL(MX25_PAD_FEC_TDATA1__FEC_TDATA1, FEC_OUT_PAD_CTRL), -	/* FEC pin init is generic */ -	mx25_fec_init_pins(); +		NEW_PAD_CTRL(MX25_PAD_D12__GPIO_4_8, 0), /* FEC_RESET_B */ +		NEW_PAD_CTRL(MX25_PAD_A17__GPIO_2_3, 0), /* FEC_ENABLE_B */ +	}; -	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; -	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE; -	/* -	 * Set up FEC_RESET_B and FEC_ENABLE_B -	 * -	 * FEC_RESET_B: gpio2_3 is ALT 5 mode of pin D12 -	 * FEC_ENABLE_B: gpio4_8 is ALT 5 mode of pin A17 -	 */ -	writel(gpio_mux_mode, &muxctl->pad_d12); -	writel(gpio_mux_mode, &muxctl->pad_a17); +	static const iomux_v3_cfg_t i2c_pads[] = { +		NEW_PAD_CTRL(MX25_PAD_I2C1_CLK__I2C1_CLK, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_I2C1_DAT__I2C1_DAT, I2C_PAD_CTRL), +	}; -	writel(0x0, &padctl->pad_d12); -	writel(0x0, &padctl->pad_a17); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  	/* Assert RESET and ENABLE low */  	gpio_direction_output(FEC_RESET_B, 0); @@ -78,10 +90,7 @@ static void mx25pdk_fec_init(void)  	gpio_set_value(FEC_ENABLE_B, 1);  	/* Setup I2C pins so that PMIC can turn on PHY supply */ -	writel(gpio_mux_mode0_sion, &muxctl->pad_i2c1_clk); -	writel(gpio_mux_mode0_sion, &muxctl->pad_i2c1_dat); -	writel(0x1E8, &padctl->pad_i2c1_clk); -	writel(0x1E8, &padctl->pad_i2c1_dat); +	imx_iomux_v3_setup_multiple_pads(i2c_pads, ARRAY_SIZE(i2c_pads));  }  int dram_init(void) @@ -92,9 +101,35 @@ int dram_init(void)  	return 0;  } +/* + * Set up input pins with hysteresis and 100-k pull-ups + */ +#define UART1_IN_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PUS_100K_UP) +/* + * FIXME: need to revisit this + * The original code enabled PUE and 100-k pull-down without PKE, so the right + * value here is likely: + *	0 for no pull + * or: + *	PAD_CTL_PUS_100K_DOWN for 100-k pull-down + */ +#define UART1_OUT_PAD_CTRL	0 + +static void mx25pdk_uart1_init(void) +{ +	static const iomux_v3_cfg_t uart1_pads[] = { +		NEW_PAD_CTRL(MX25_PAD_UART1_RXD__UART1_RXD, UART1_IN_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_UART1_TXD__UART1_TXD, UART1_OUT_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_UART1_RTS__UART1_RTS, UART1_OUT_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_UART1_CTS__UART1_CTS, UART1_IN_PAD_CTRL), +	}; + +	imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); +} +  int board_early_init_f(void)  { -	mx25_uart1_init_pins(); +	mx25pdk_uart1_init();  	return 0;  } @@ -131,21 +166,8 @@ int board_late_init(void)  #ifdef CONFIG_FSL_ESDHC  int board_mmc_getcd(struct mmc *mmc)  { -	struct iomuxc_mux_ctl *muxctl; -	struct iomuxc_pad_ctl *padctl; -	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5); - -	/* -	 * Set up the Card Detect pin. -	 * -	 * SD1_GPIO_CD: gpio2_1 is ALT 5 mode of pin A15 -	 * -	 */ -	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; -	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE; - -	writel(gpio_mux_mode, &muxctl->pad_a15); -	writel(0x0, &padctl->pad_a15); +	/* Set up the Card Detect pin. */ +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX25_PAD_A15__GPIO_2_1, 0));  	gpio_direction_input(CARD_DETECT);  	return !gpio_get_value(CARD_DETECT); @@ -153,16 +175,16 @@ int board_mmc_getcd(struct mmc *mmc)  int board_mmc_init(bd_t *bis)  { -	struct iomuxc_mux_ctl *muxctl; -	u32 sdhc1_mux_mode = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION; +	static const iomux_v3_cfg_t sdhc1_pads[] = { +		NEW_PAD_CTRL(MX25_PAD_SD1_CMD__SD1_CMD, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_SD1_CLK__SD1_CLK, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_SD1_DATA0__SD1_DATA0, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_SD1_DATA1__SD1_DATA1, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_SD1_DATA2__SD1_DATA2, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_SD1_DATA3__SD1_DATA3, NO_PAD_CTRL), +	}; -	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; -	writel(sdhc1_mux_mode, &muxctl->pad_sd1_cmd); -	writel(sdhc1_mux_mode, &muxctl->pad_sd1_clk); -	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data0); -	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data1); -	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data2); -	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data3); +	imx_iomux_v3_setup_multiple_pads(sdhc1_pads, ARRAY_SIZE(sdhc1_pads));  	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);  	return fsl_esdhc_initialize(bis, &esdhc_cfg[0]); diff --git a/board/freescale/mx35pdk/mx35pdk.c b/board/freescale/mx35pdk/mx35pdk.c index b7f474e5e..9f667d2de 100644 --- a/board/freescale/mx35pdk/mx35pdk.c +++ b/board/freescale/mx35pdk/mx35pdk.c @@ -28,8 +28,7 @@  #include <asm/arch/imx-regs.h>  #include <asm/arch/crm_regs.h>  #include <asm/arch/clock.h> -#include <asm/arch/mx35_pins.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx35.h>  #include <i2c.h>  #include <power/pmic.h>  #include <fsl_pmic.h> @@ -73,114 +72,88 @@ void dram_init_banksize(void)  	gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;  } +#define I2C_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN | PAD_CTL_ODE) +  static void setup_iomux_i2c(void)  { -	int pad; +	static const iomux_v3_cfg_t i2c1_pads[] = { +		NEW_PAD_CTRL(MX35_PAD_I2C1_CLK__I2C1_SCL, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_I2C1_DAT__I2C1_SDA, I2C_PAD_CTRL), +	};  	/* setup pins for I2C1 */ -	mxc_request_iomux(MX35_PIN_I2C1_CLK, MUX_CONFIG_SION); -	mxc_request_iomux(MX35_PIN_I2C1_DAT, MUX_CONFIG_SION); - -	pad = (PAD_CTL_HYS_SCHMITZ | PAD_CTL_PKE_ENABLE \ -			| PAD_CTL_PUE_PUD | PAD_CTL_ODE_OpenDrain); - -	mxc_iomux_set_pad(MX35_PIN_I2C1_CLK, pad); -	mxc_iomux_set_pad(MX35_PIN_I2C1_DAT, pad); +	imx_iomux_v3_setup_multiple_pads(i2c1_pads, ARRAY_SIZE(i2c1_pads));  }  static void setup_iomux_spi(void)  { -	mxc_request_iomux(MX35_PIN_CSPI1_MOSI, MUX_CONFIG_SION); -	mxc_request_iomux(MX35_PIN_CSPI1_MISO, MUX_CONFIG_SION); -	mxc_request_iomux(MX35_PIN_CSPI1_SS0, MUX_CONFIG_SION); -	mxc_request_iomux(MX35_PIN_CSPI1_SS1, MUX_CONFIG_SION); -	mxc_request_iomux(MX35_PIN_CSPI1_SCLK, MUX_CONFIG_SION); +	static const iomux_v3_cfg_t spi_pads[] = { +		MX35_PAD_CSPI1_MOSI__CSPI1_MOSI, +		MX35_PAD_CSPI1_MISO__CSPI1_MISO, +		MX35_PAD_CSPI1_SS0__CSPI1_SS0, +		MX35_PAD_CSPI1_SS1__CSPI1_SS1, +		MX35_PAD_CSPI1_SCLK__CSPI1_SCLK, +	}; + +	imx_iomux_v3_setup_multiple_pads(spi_pads, ARRAY_SIZE(spi_pads));  } +#define USBOTG_IN_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN | \ +				 PAD_CTL_DSE_LOW | PAD_CTL_SRE_SLOW) +#define USBOTG_OUT_PAD_CTRL	(PAD_CTL_DSE_LOW | PAD_CTL_SRE_SLOW) +  static void setup_iomux_usbotg(void)  { -	int in_pad, out_pad; +	static const iomux_v3_cfg_t usbotg_pads[] = { +		NEW_PAD_CTRL(MX35_PAD_USBOTG_PWR__USB_TOP_USBOTG_PWR, +				USBOTG_OUT_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_USBOTG_OC__USB_TOP_USBOTG_OC, +				USBOTG_IN_PAD_CTRL), +	};  	/* Set up pins for USBOTG. */ -	mxc_request_iomux(MX35_PIN_USBOTG_PWR, -			  MUX_CONFIG_SION | MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_USBOTG_OC, -			  MUX_CONFIG_SION | MUX_CONFIG_FUNC); - -	in_pad = PAD_CTL_DRV_3_3V | PAD_CTL_HYS_SCHMITZ | PAD_CTL_PKE_ENABLE | -		PAD_CTL_PUE_PUD | PAD_CTL_100K_PD | PAD_CTL_ODE_CMOS | -		PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW; -	out_pad = PAD_CTL_DRV_3_3V | PAD_CTL_HYS_CMOS | PAD_CTL_PKE_NONE | -		PAD_CTL_ODE_CMOS | PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW; - -	mxc_iomux_set_pad(MX35_PIN_USBOTG_PWR, out_pad); -	mxc_iomux_set_pad(MX35_PIN_USBOTG_OC, in_pad); +	imx_iomux_v3_setup_multiple_pads(usbotg_pads, ARRAY_SIZE(usbotg_pads));  } +#define FEC_PAD_CTRL	(PAD_CTL_DSE_LOW | PAD_CTL_SRE_SLOW) +  static void setup_iomux_fec(void)  { -	int pad; +	static const iomux_v3_cfg_t fec_pads[] = { +		NEW_PAD_CTRL(MX35_PAD_FEC_TX_CLK__FEC_TX_CLK, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_RX_CLK__FEC_RX_CLK, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_RX_DV__FEC_RX_DV, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_COL__FEC_COL, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_RDATA0__FEC_RDATA_0, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_TDATA0__FEC_TDATA_0, FEC_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_FEC_TX_EN__FEC_TX_EN, FEC_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_FEC_MDC__FEC_MDC, FEC_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_FEC_MDIO__FEC_MDIO, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_22K_UP), +		NEW_PAD_CTRL(MX35_PAD_FEC_TX_ERR__FEC_TX_ERR, FEC_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_FEC_RX_ERR__FEC_RX_ERR, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_CRS__FEC_CRS, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_RDATA1__FEC_RDATA_1, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_TDATA1__FEC_TDATA_1, FEC_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_FEC_RDATA2__FEC_RDATA_2, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_TDATA2__FEC_TDATA_2, FEC_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_FEC_RDATA3__FEC_RDATA_3, FEC_PAD_CTRL | +					PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN), +		NEW_PAD_CTRL(MX35_PAD_FEC_TDATA3__FEC_TDATA_3, FEC_PAD_CTRL), +	};  	/* setup pins for FEC */ -	mxc_request_iomux(MX35_PIN_FEC_TX_CLK, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RX_CLK, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RX_DV, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_COL, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RDATA0, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_TDATA0, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_TX_EN, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_MDC, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_MDIO, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_TX_ERR, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RX_ERR, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_CRS, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RDATA1, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_TDATA1, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RDATA2, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_TDATA2, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_RDATA3, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_FEC_TDATA3, MUX_CONFIG_FUNC); - -	pad = (PAD_CTL_DRV_3_3V | PAD_CTL_PUE_PUD | PAD_CTL_ODE_CMOS | \ -			PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW); - -	mxc_iomux_set_pad(MX35_PIN_FEC_TX_CLK, pad | PAD_CTL_HYS_SCHMITZ | \ -			PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RX_CLK, pad | PAD_CTL_HYS_SCHMITZ | \ -			PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RX_DV, pad | PAD_CTL_HYS_SCHMITZ | \ -			 PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_COL, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RDATA0, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_TDATA0, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_TX_EN, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_MDC, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_MDIO, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_22K_PU); -	mxc_iomux_set_pad(MX35_PIN_FEC_TX_ERR, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RX_ERR, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_CRS, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RDATA1, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_TDATA1, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RDATA2, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_TDATA2, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_RDATA3, pad | PAD_CTL_HYS_SCHMITZ | \ -			  PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PD); -	mxc_iomux_set_pad(MX35_PIN_FEC_TDATA3, pad | PAD_CTL_HYS_CMOS | \ -			  PAD_CTL_PKE_NONE | PAD_CTL_100K_PD); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  int board_early_init_f(void) @@ -262,8 +235,7 @@ int board_late_init(void)  	if (pmic_detect()) {  		p = pmic_get("FSL_PMIC"); -		mxc_request_iomux(MX35_PIN_WATCHDOG_RST, MUX_CONFIG_SION | -					MUX_CONFIG_ALT1); +		imx_iomux_v3_setup_pad(MX35_PAD_WDOG_RST__WDOG_WDOG_B);  		pmic_reg_read(p, REG_SETTING_0, &pmic_val);  		pmic_reg_write(p, REG_SETTING_0, @@ -271,10 +243,9 @@ int board_late_init(void)  		pmic_reg_read(p, REG_MODE_0, &pmic_val);  		pmic_reg_write(p, REG_MODE_0, pmic_val | VGEN3EN); -		mxc_request_iomux(MX35_PIN_COMPARE, MUX_CONFIG_GPIO); -		mxc_iomux_set_input(MUX_IN_GPIO1_IN_5, INPUT_CTL_PATH0); +		imx_iomux_v3_setup_pad(MX35_PAD_COMPARE__GPIO1_5); -		gpio_direction_output(IMX_GPIO_NR(2, 5), 1); +		gpio_direction_output(IMX_GPIO_NR(1, 5), 1);  	}  	val = mc9sdz60_reg_read(MC9SDZ60_REG_GPIO_1) | 0x04; @@ -312,13 +283,17 @@ struct fsl_esdhc_cfg esdhc_cfg = {MMC_SDHC1_BASE_ADDR};  int board_mmc_init(bd_t *bis)  { +	static const iomux_v3_cfg_t sdhc1_pads[] = { +		MX35_PAD_SD1_CMD__ESDHC1_CMD, +		MX35_PAD_SD1_CLK__ESDHC1_CLK, +		MX35_PAD_SD1_DATA0__ESDHC1_DAT0, +		MX35_PAD_SD1_DATA1__ESDHC1_DAT1, +		MX35_PAD_SD1_DATA2__ESDHC1_DAT2, +		MX35_PAD_SD1_DATA3__ESDHC1_DAT3, +	}; +  	/* configure pins for SDHC1 only */ -	mxc_request_iomux(MX35_PIN_SD1_CMD, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_SD1_CLK, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_SD1_DATA0, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_SD1_DATA1, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_SD1_DATA2, MUX_CONFIG_FUNC); -	mxc_request_iomux(MX35_PIN_SD1_DATA3, MUX_CONFIG_FUNC); +	imx_iomux_v3_setup_multiple_pads(sdhc1_pads, ARRAY_SIZE(sdhc1_pads));  	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);  	return fsl_esdhc_initialize(bis, &esdhc_cfg); diff --git a/board/freescale/mx51evk/mx51evk.c b/board/freescale/mx51evk/mx51evk.c index 54c16b1f9..369da6de5 100644 --- a/board/freescale/mx51evk/mx51evk.c +++ b/board/freescale/mx51evk/mx51evk.c @@ -24,8 +24,7 @@  #include <asm/io.h>  #include <asm/gpio.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/mx5x_pins.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx51.h>  #include <asm/errno.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/crm_regs.h> @@ -64,160 +63,103 @@ u32 get_board_rev(void)  	return rev;  } +#define UART_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN | PAD_CTL_DSE_HIGH) +  static void setup_iomux_uart(void)  { -	unsigned int pad = PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | -			PAD_CTL_PUE_PULL | PAD_CTL_DRV_HIGH; +	static const iomux_v3_cfg_t uart_pads[] = { +		MX51_PAD_UART1_RXD__UART1_RXD, +		MX51_PAD_UART1_TXD__UART1_TXD, +		NEW_PAD_CTRL(MX51_PAD_UART1_RTS__UART1_RTS, UART_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_UART1_CTS__UART1_CTS, UART_PAD_CTRL), +	}; -	mxc_request_iomux(MX51_PIN_UART1_RXD, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_UART1_RXD, pad | PAD_CTL_SRE_FAST); -	mxc_request_iomux(MX51_PIN_UART1_TXD, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_UART1_TXD, pad | PAD_CTL_SRE_FAST); -	mxc_request_iomux(MX51_PIN_UART1_RTS, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_UART1_RTS, pad); -	mxc_request_iomux(MX51_PIN_UART1_CTS, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_UART1_CTS, pad); +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));  }  static void setup_iomux_fec(void)  { -	/*FEC_MDIO*/ -	mxc_request_iomux(MX51_PIN_EIM_EB2 , IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_EB2 , 0x1FD); - -	/*FEC_MDC*/ -	mxc_request_iomux(MX51_PIN_NANDF_CS3, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_CS3, 0x2004); - -	/* FEC RDATA[3] */ -	mxc_request_iomux(MX51_PIN_EIM_CS3, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_CS3, 0x180); - -	/* FEC RDATA[2] */ -	mxc_request_iomux(MX51_PIN_EIM_CS2, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_CS2, 0x180); - -	/* FEC RDATA[1] */ -	mxc_request_iomux(MX51_PIN_EIM_EB3, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_EB3, 0x180); - -	/* FEC RDATA[0] */ -	mxc_request_iomux(MX51_PIN_NANDF_D9, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_D9, 0x2180); - -	/* FEC TDATA[3] */ -	mxc_request_iomux(MX51_PIN_NANDF_CS6, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_CS6, 0x2004); - -	/* FEC TDATA[2] */ -	mxc_request_iomux(MX51_PIN_NANDF_CS5, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_CS5, 0x2004); - -	/* FEC TDATA[1] */ -	mxc_request_iomux(MX51_PIN_NANDF_CS4, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_CS4, 0x2004); - -	/* FEC TDATA[0] */ -	mxc_request_iomux(MX51_PIN_NANDF_D8, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_D8, 0x2004); - -	/* FEC TX_EN */ -	mxc_request_iomux(MX51_PIN_NANDF_CS7, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_NANDF_CS7, 0x2004); - -	/* FEC TX_ER */ -	mxc_request_iomux(MX51_PIN_NANDF_CS2, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_CS2, 0x2004); - -	/* FEC TX_CLK */ -	mxc_request_iomux(MX51_PIN_NANDF_RDY_INT, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_NANDF_RDY_INT, 0x2180); +	static const iomux_v3_cfg_t fec_pads[] = { +		NEW_PAD_CTRL(MX51_PAD_EIM_EB2__FEC_MDIO, PAD_CTL_HYS | +				PAD_CTL_PUS_22K_UP | PAD_CTL_ODE | +				PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST), +		MX51_PAD_NANDF_CS3__FEC_MDC, +		NEW_PAD_CTRL(MX51_PAD_EIM_CS3__FEC_RDATA3, MX51_PAD_CTRL_2), +		NEW_PAD_CTRL(MX51_PAD_EIM_CS2__FEC_RDATA2, MX51_PAD_CTRL_2), +		NEW_PAD_CTRL(MX51_PAD_EIM_EB3__FEC_RDATA1, MX51_PAD_CTRL_2), +		MX51_PAD_NANDF_D9__FEC_RDATA0, +		MX51_PAD_NANDF_CS6__FEC_TDATA3, +		MX51_PAD_NANDF_CS5__FEC_TDATA2, +		MX51_PAD_NANDF_CS4__FEC_TDATA1, +		MX51_PAD_NANDF_D8__FEC_TDATA0, +		MX51_PAD_NANDF_CS7__FEC_TX_EN, +		MX51_PAD_NANDF_CS2__FEC_TX_ER, +		MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK, +		NEW_PAD_CTRL(MX51_PAD_NANDF_RB2__FEC_COL, MX51_PAD_CTRL_4), +		NEW_PAD_CTRL(MX51_PAD_NANDF_RB3__FEC_RX_CLK, MX51_PAD_CTRL_4), +		MX51_PAD_EIM_CS5__FEC_CRS, +		MX51_PAD_EIM_CS4__FEC_RX_ER, +		NEW_PAD_CTRL(MX51_PAD_NANDF_D11__FEC_RX_DV, MX51_PAD_CTRL_4), +	}; -	/* FEC TX_COL */ -	mxc_request_iomux(MX51_PIN_NANDF_RB2, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_NANDF_RB2, 0x2180); - -	/* FEC RX_CLK */ -	mxc_request_iomux(MX51_PIN_NANDF_RB3, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_NANDF_RB3, 0x2180); - -	/* FEC RX_CRS */ -	mxc_request_iomux(MX51_PIN_EIM_CS5, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_CS5, 0x180); - -	/* FEC RX_ER */ -	mxc_request_iomux(MX51_PIN_EIM_CS4, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_CS4, 0x180); - -	/* FEC RX_DV */ -	mxc_request_iomux(MX51_PIN_NANDF_D11, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX51_PIN_NANDF_D11, 0x2180); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  #ifdef CONFIG_MXC_SPI  static void setup_iomux_spi(void)  { -	/* 000: Select mux mode: ALT0 mux port: MOSI of instance: ecspi1 */ -	mxc_request_iomux(MX51_PIN_CSPI1_MOSI, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_MOSI, 0x105); - -	/* 000: Select mux mode: ALT0 mux port: MISO of instance: ecspi1. */ -	mxc_request_iomux(MX51_PIN_CSPI1_MISO, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_MISO, 0x105); - -	/* de-select SS1 of instance: ecspi1. */ -	mxc_request_iomux(MX51_PIN_CSPI1_SS1, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_SS1, 0x85); +	static const iomux_v3_cfg_t spi_pads[] = { +		NEW_PAD_CTRL(MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI, PAD_CTL_HYS | +				PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_MISO__ECSPI1_MISO, PAD_CTL_HYS | +				PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_SS1__ECSPI1_SS1, +				MX51_GPIO_PAD_CTRL), +		MX51_PAD_CSPI1_SS0__ECSPI1_SS0, +		NEW_PAD_CTRL(MX51_PAD_CSPI1_RDY__ECSPI1_RDY, MX51_PAD_CTRL_2), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK, PAD_CTL_HYS | +				PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST), +	}; -	/* 000: Select mux mode: ALT0 mux port: SS0 ecspi1 */ -	mxc_request_iomux(MX51_PIN_CSPI1_SS0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_SS0, 0x185); - -	/* 000: Select mux mode: ALT0 mux port: RDY of instance: ecspi1. */ -	mxc_request_iomux(MX51_PIN_CSPI1_RDY, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_RDY, 0x180); - -	/* 000: Select mux mode: ALT0 mux port: SCLK of instance: ecspi1. */ -	mxc_request_iomux(MX51_PIN_CSPI1_SCLK, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_SCLK, 0x105); +	imx_iomux_v3_setup_multiple_pads(spi_pads, ARRAY_SIZE(spi_pads));  }  #endif  #ifdef CONFIG_USB_EHCI_MX5 -#define MX51EVK_USBH1_HUB_RST	IOMUX_TO_GPIO(MX51_PIN_GPIO1_7) /* GPIO1_7 */ -#define MX51EVK_USBH1_STP	IOMUX_TO_GPIO(MX51_PIN_USBH1_STP) /* GPIO1_27 */ -#define MX51EVK_USB_CLK_EN_B	IOMUX_TO_GPIO(MX51_PIN_EIM_D18) /* GPIO2_1 */ -#define MX51EVK_USB_PHY_RESET	IOMUX_TO_GPIO(MX51_PIN_EIM_D21) /* GPIO2_5 */ - -#define USBH1_PAD	(PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH |		\ -			 PAD_CTL_100K_PU | PAD_CTL_PUE_PULL |		\ -			 PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE) -#define GPIO_PAD	(PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE |	\ -			 PAD_CTL_SRE_FAST) -#define NO_PAD		(1 << 16) +#define MX51EVK_USBH1_HUB_RST	IMX_GPIO_NR(1, 7) +#define MX51EVK_USBH1_STP	IMX_GPIO_NR(1, 27) +#define MX51EVK_USB_CLK_EN_B	IMX_GPIO_NR(2, 2) +#define MX51EVK_USB_PHY_RESET	IMX_GPIO_NR(2, 5)  static void setup_usb_h1(void)  { -	setup_iomux_usb_h1(); +	static const iomux_v3_cfg_t usb_h1_pads[] = { +		MX51_PAD_USBH1_CLK__USBH1_CLK, +		MX51_PAD_USBH1_DIR__USBH1_DIR, +		MX51_PAD_USBH1_STP__USBH1_STP, +		MX51_PAD_USBH1_NXT__USBH1_NXT, +		MX51_PAD_USBH1_DATA0__USBH1_DATA0, +		MX51_PAD_USBH1_DATA1__USBH1_DATA1, +		MX51_PAD_USBH1_DATA2__USBH1_DATA2, +		MX51_PAD_USBH1_DATA3__USBH1_DATA3, +		MX51_PAD_USBH1_DATA4__USBH1_DATA4, +		MX51_PAD_USBH1_DATA5__USBH1_DATA5, +		MX51_PAD_USBH1_DATA6__USBH1_DATA6, +		MX51_PAD_USBH1_DATA7__USBH1_DATA7, -	/* GPIO_1_7 for USBH1 hub reset */ -	mxc_request_iomux(MX51_PIN_GPIO1_7, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_GPIO1_7, NO_PAD); +		NEW_PAD_CTRL(MX51_PAD_GPIO1_7__GPIO1_7, 0), /* H1 hub reset */ +		MX51_PAD_EIM_D17__GPIO2_1, +		MX51_PAD_EIM_D21__GPIO2_5, /* PHY reset */ +	}; -	/* GPIO_2_1 */ -	mxc_request_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_EIM_D17, GPIO_PAD); - -	/* GPIO_2_5 for USB PHY reset */ -	mxc_request_iomux(MX51_PIN_EIM_D21, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_EIM_D21, GPIO_PAD); +	imx_iomux_v3_setup_multiple_pads(usb_h1_pads, ARRAY_SIZE(usb_h1_pads));  }  int board_ehci_hcd_init(int port)  {  	/* Set USBH1_STP to GPIO and toggle it */ -	mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO); -	mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USBH1_PAD); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_USBH1_STP__GPIO1_27, +						MX51_USBH_PAD_CTRL));  	gpio_direction_output(MX51EVK_USBH1_STP, 0);  	gpio_direction_output(MX51EVK_USB_PHY_RESET, 0); @@ -225,8 +167,7 @@ int board_ehci_hcd_init(int port)  	gpio_set_value(MX51EVK_USBH1_STP, 1);  	/* Set back USBH1_STP to be function */ -	mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USBH1_PAD); +	imx_iomux_v3_setup_pad(MX51_PAD_USBH1_STP__USBH1_STP);  	/* De-assert USB PHY RESETB */  	gpio_set_value(MX51EVK_USB_PHY_RESET, 1); @@ -328,7 +269,8 @@ static void power_init(void)  		VVIDEOEN | VAUDIOEN  | VSDEN;  	pmic_reg_write(p, REG_MODE_1, val); -	mxc_request_iomux(MX51_PIN_EIM_A20, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_EIM_A20__GPIO2_14, +						NO_PAD_CTRL));  	gpio_direction_output(IMX_GPIO_NR(2, 14), 0);  	udelay(500); @@ -342,9 +284,11 @@ int board_mmc_getcd(struct mmc *mmc)  	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;  	int ret; -	mxc_request_iomux(MX51_PIN_GPIO1_0, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_GPIO1_0__GPIO1_0, +						NO_PAD_CTRL));  	gpio_direction_input(IMX_GPIO_NR(1, 0)); -	mxc_request_iomux(MX51_PIN_GPIO1_6, IOMUX_CONFIG_ALT0); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_GPIO1_6__GPIO1_6, +						NO_PAD_CTRL));  	gpio_direction_input(IMX_GPIO_NR(1, 6));  	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) @@ -357,6 +301,40 @@ int board_mmc_getcd(struct mmc *mmc)  int board_mmc_init(bd_t *bis)  { +	static const iomux_v3_cfg_t sd1_pads[] = { +		NEW_PAD_CTRL(MX51_PAD_SD1_CMD__SD1_CMD, PAD_CTL_DSE_MAX | +			PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD1_CLK__SD1_CLK, PAD_CTL_DSE_MAX | +			PAD_CTL_PUS_47K_UP | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD1_DATA0__SD1_DATA0, PAD_CTL_DSE_MAX | +			PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD1_DATA1__SD1_DATA1, PAD_CTL_DSE_MAX | +			PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD1_DATA2__SD1_DATA2, PAD_CTL_DSE_MAX | +			PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD1_DATA3__SD1_DATA3, PAD_CTL_DSE_MAX | +			PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_GPIO1_0__SD1_CD, PAD_CTL_HYS), +		NEW_PAD_CTRL(MX51_PAD_GPIO1_1__SD1_WP, PAD_CTL_HYS), +	}; + +	static const iomux_v3_cfg_t sd2_pads[] = { +		NEW_PAD_CTRL(MX51_PAD_SD2_CMD__SD2_CMD, +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD2_CLK__SD2_CLK, +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD2_DATA0__SD2_DATA0, +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD2_DATA1__SD2_DATA1, +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD2_DATA2__SD2_DATA2, +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_SD2_DATA3__SD2_DATA3, +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_GPIO1_6__GPIO1_6, PAD_CTL_HYS), +		NEW_PAD_CTRL(MX51_PAD_GPIO1_5__GPIO1_5, PAD_CTL_HYS), +	}; +  	u32 index;  	s32 status = 0; @@ -367,98 +345,12 @@ int board_mmc_init(bd_t *bis)  			index++) {  		switch (index) {  		case 0: -			mxc_request_iomux(MX51_PIN_SD1_CMD, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD1_CLK, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD1_DATA0, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD1_DATA1, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD1_DATA2, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD1_DATA3, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_iomux_set_pad(MX51_PIN_SD1_CMD, -				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_PUE_PULL | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD1_CLK, -				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | -				PAD_CTL_HYS_NONE | PAD_CTL_47K_PU | -				PAD_CTL_PUE_PULL | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD1_DATA0, -				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_PUE_PULL | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD1_DATA1, -				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_PUE_PULL | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD1_DATA2, -				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_PUE_PULL | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD1_DATA3, -				PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PD | -				PAD_CTL_PUE_PULL | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -			mxc_request_iomux(MX51_PIN_GPIO1_0, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_iomux_set_pad(MX51_PIN_GPIO1_0, -				PAD_CTL_HYS_ENABLE); -			mxc_request_iomux(MX51_PIN_GPIO1_1, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_iomux_set_pad(MX51_PIN_GPIO1_1, -				PAD_CTL_HYS_ENABLE); +			imx_iomux_v3_setup_multiple_pads(sd1_pads, +							 ARRAY_SIZE(sd1_pads));  			break;  		case 1: -			mxc_request_iomux(MX51_PIN_SD2_CMD, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD2_CLK, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_SD2_DATA0, -				IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX51_PIN_SD2_DATA1, -				IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX51_PIN_SD2_DATA2, -				IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX51_PIN_SD2_DATA3, -				IOMUX_CONFIG_ALT0); -			mxc_iomux_set_pad(MX51_PIN_SD2_CMD, -				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | -				PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD2_CLK, -				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | -				PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD2_DATA0, -				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | -				PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD2_DATA1, -				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | -				PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD2_DATA2, -				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | -				PAD_CTL_SRE_FAST); -			mxc_iomux_set_pad(MX51_PIN_SD2_DATA3, -				PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | -				PAD_CTL_SRE_FAST); -			mxc_request_iomux(MX51_PIN_SD2_CMD, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX51_PIN_GPIO1_6, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_iomux_set_pad(MX51_PIN_GPIO1_6, -				PAD_CTL_HYS_ENABLE); -			mxc_request_iomux(MX51_PIN_GPIO1_5, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_iomux_set_pad(MX51_PIN_GPIO1_5, -				PAD_CTL_HYS_ENABLE); +			imx_iomux_v3_setup_multiple_pads(sd2_pads, +							 ARRAY_SIZE(sd2_pads));  			break;  		default:  			printf("Warning: you configured more ESDHC controller" diff --git a/board/freescale/mx51evk/mx51evk_video.c b/board/freescale/mx51evk/mx51evk_video.c index 7be5c9bef..556cb38ca 100644 --- a/board/freescale/mx51evk/mx51evk_video.c +++ b/board/freescale/mx51evk/mx51evk_video.c @@ -24,7 +24,7 @@  #include <common.h>  #include <linux/list.h>  #include <asm/gpio.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx51.h>  #include <linux/fb.h>  #include <ipu_pixfmt.h> @@ -67,25 +67,25 @@ static struct fb_videomode const dvi = {  void setup_iomux_lcd(void)  {  	/* DI2_PIN15 */ -	mxc_request_iomux(MX51_PIN_DI_GP4, IOMUX_CONFIG_ALT4); +	imx_iomux_v3_setup_pad(MX51_PAD_DI_GP4__DI2_PIN15); -	/* Pad settings for MX51_PIN_DI2_DISP_CLK */ -	mxc_iomux_set_pad(MX51_PIN_DI2_DISP_CLK, PAD_CTL_HYS_NONE | -			  PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -			  PAD_CTL_DRV_MAX | PAD_CTL_SRE_SLOW); +	/* Pad settings for DI2_DISP_CLK */ +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK, +			    PAD_CTL_PKE | PAD_CTL_DSE_MAX | PAD_CTL_SRE_SLOW));  	/* Turn on 3.3V voltage for LCD */ -	mxc_request_iomux(MX51_PIN_CSI2_D12, IOMUX_CONFIG_ALT3); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_CSI2_D12__GPIO4_9, +						NO_PAD_CTRL));  	gpio_direction_output(MX51EVK_LCD_3V3, 1);  	/* Turn on 5V voltage for LCD */ -	mxc_request_iomux(MX51_PIN_CSI2_D13, IOMUX_CONFIG_ALT3); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_CSI2_D13__GPIO4_10, +						NO_PAD_CTRL));  	gpio_direction_output(MX51EVK_LCD_5V, 1);  	/* Turn on GPIO backlight */ -	mxc_request_iomux(MX51_PIN_DI1_D1_CS, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_input(MX51_GPIO3_IPP_IND_G_IN_4_SELECT_INPUT, -							INPUT_CTL_PATH1); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_DI1_D1_CS__GPIO3_4, +						NO_PAD_CTRL));  	gpio_direction_output(MX51EVK_LCD_BACKLIGHT, 1);  } diff --git a/board/freescale/mx53ard/mx53ard.c b/board/freescale/mx53ard/mx53ard.c index 8d433a3d8..e2dbf6352 100644 --- a/board/freescale/mx53ard/mx53ard.c +++ b/board/freescale/mx53ard/mx53ard.c @@ -23,11 +23,10 @@  #include <common.h>  #include <asm/io.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/mx5x_pins.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/crm_regs.h>  #include <asm/arch/clock.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx53.h>  #include <asm/errno.h>  #include <netdev.h>  #include <mmc.h> @@ -61,9 +60,42 @@ void dram_init_banksize(void)  #ifdef CONFIG_NAND_MXC  static void setup_iomux_nand(void)  { +	static const iomux_v3_cfg_t nand_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_NANDF_CS1__EMI_NANDF_CS_1, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0, +				PAD_CTL_PUS_100K_UP), +		NEW_PAD_CTRL(MX53_PAD_NANDF_CLE__EMI_NANDF_CLE, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_NANDF_ALE__EMI_NANDF_ALE, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B, +				PAD_CTL_PUS_100K_UP), +		NEW_PAD_CTRL(MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA7__EMI_NAND_WEIM_DA_7, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +	}; +  	u32 i, reg; -	#define M4IF_GENP_WEIM_MM_MASK		0x00000001 -	#define WEIM_GCR2_MUX16_BYP_GRANT_MASK	0x00001000  	reg = __raw_readl(M4IF_BASE_ADDR + 0xc);  	reg &= ~M4IF_GENP_WEIM_MM_MASK; @@ -74,48 +106,7 @@ static void setup_iomux_nand(void)  		__raw_writel(reg, WEIM_BASE_ADDR + i);  	} -	mxc_request_iomux(MX53_PIN_NANDF_CS0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_CS0, PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_NANDF_CS1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_CS1, PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_NANDF_RB0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_RB0, PAD_CTL_PKE_ENABLE | -					PAD_CTL_PUE_PULL | PAD_CTL_100K_PU); -	mxc_request_iomux(MX53_PIN_NANDF_CLE, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_CLE, PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_NANDF_ALE, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_ALE, PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_NANDF_WP_B, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_WP_B, PAD_CTL_PKE_ENABLE | -					PAD_CTL_PUE_PULL | PAD_CTL_100K_PU); -	mxc_request_iomux(MX53_PIN_NANDF_RE_B, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_RE_B, PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_NANDF_WE_B, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_NANDF_WE_B, PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA0, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA1, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA2, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA2, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA3, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA3, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA4, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA4, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA5, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA5, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA6, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA6, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); -	mxc_request_iomux(MX53_PIN_EIM_DA7, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA7, PAD_CTL_PKE_ENABLE | -					PAD_CTL_100K_PU | PAD_CTL_DRV_HIGH); +	imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads));  }  #else  static void setup_iomux_nand(void) @@ -123,24 +114,17 @@ static void setup_iomux_nand(void)  }  #endif +#define UART_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +			 PAD_CTL_PUS_100K_UP | PAD_CTL_ODE) +  static void setup_iomux_uart(void)  { -	/* UART1 RXD */ -	mxc_request_iomux(MX53_PIN_ATA_DMACK, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX53_PIN_ATA_DMACK, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_UART1_IPP_UART_RXD_MUX_SELECT_INPUT, 0x3); +	static const iomux_v3_cfg_t uart_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_PATA_DMACK__UART1_RXD_MUX, UART_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DIOW__UART1_TXD_MUX, UART_PAD_CTRL), +	}; -	/* UART1 TXD */ -	mxc_request_iomux(MX53_PIN_ATA_DIOW, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX53_PIN_ATA_DIOW, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));  }  #ifdef CONFIG_FSL_ESDHC @@ -154,9 +138,9 @@ int board_mmc_getcd(struct mmc *mmc)  	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;  	int ret; -	mxc_request_iomux(MX53_PIN_GPIO_1, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_GPIO_1__GPIO1_1);  	gpio_direction_input(IMX_GPIO_NR(1, 1)); -	mxc_request_iomux(MX53_PIN_GPIO_4, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_GPIO_4__GPIO1_4);  	gpio_direction_input(IMX_GPIO_NR(1, 4));  	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) @@ -167,8 +151,36 @@ int board_mmc_getcd(struct mmc *mmc)  	return ret;  } +#define SD_CMD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +				 PAD_CTL_PUS_100K_UP) +#define SD_CLK_PAD_CTRL		(PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_HIGH) +#define SD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | \ +				 PAD_CTL_DSE_HIGH) +  int board_mmc_init(bd_t *bis)  { +	static const iomux_v3_cfg_t sd1_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_SD1_CMD__ESDHC1_CMD, SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_CLK__ESDHC1_CLK, SD_CLK_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA0__ESDHC1_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA1__ESDHC1_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA2__ESDHC1_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA3__ESDHC1_DAT3, SD_PAD_CTRL), +	}; + +	static const iomux_v3_cfg_t sd2_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_SD2_CMD__ESDHC2_CMD, SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD2_CLK__ESDHC2_CLK, SD_CLK_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD2_DATA0__ESDHC2_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD2_DATA1__ESDHC2_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD2_DATA2__ESDHC2_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD2_DATA3__ESDHC2_DAT3, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA12__ESDHC2_DAT4, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA13__ESDHC2_DAT5, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA14__ESDHC2_DAT6, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA15__ESDHC2_DAT7, SD_PAD_CTRL), +	}; +  	u32 index;  	s32 status = 0; @@ -178,56 +190,12 @@ int board_mmc_init(bd_t *bis)  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {  		switch (index) {  		case 0: -			mxc_request_iomux(MX53_PIN_SD1_CMD, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_CLK, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA0, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA1, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA2, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA3, -						IOMUX_CONFIG_ALT0); - -			mxc_iomux_set_pad(MX53_PIN_SD1_CMD, 0x1E4); -			mxc_iomux_set_pad(MX53_PIN_SD1_CLK, 0xD4); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA0, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA1, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA2, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA3, 0x1D4); +			imx_iomux_v3_setup_multiple_pads(sd1_pads, +							 ARRAY_SIZE(sd1_pads));  			break;  		case 1: -			mxc_request_iomux(MX53_PIN_SD2_CMD, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX53_PIN_SD2_CLK, -				IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); -			mxc_request_iomux(MX53_PIN_SD2_DATA0, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD2_DATA1, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD2_DATA2, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD2_DATA3, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_ATA_DATA12, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_DATA13, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_DATA14, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_DATA15, -						IOMUX_CONFIG_ALT2); - -			mxc_iomux_set_pad(MX53_PIN_SD2_CMD, 0x1E4); -			mxc_iomux_set_pad(MX53_PIN_SD2_CLK, 0xD4); -			mxc_iomux_set_pad(MX53_PIN_SD2_DATA0, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_SD2_DATA1, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_SD2_DATA2, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_SD2_DATA3, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA12, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA13, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA14, 0x1D4); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA15, 0x1D4); +			imx_iomux_v3_setup_multiple_pads(sd2_pads, +							 ARRAY_SIZE(sd2_pads));  			break;  		default:  			printf("Warning: you configured more ESDHC controller" @@ -244,85 +212,70 @@ int board_mmc_init(bd_t *bis)  static void weim_smc911x_iomux(void)  { -	/* ETHERNET_INT as GPIO2_31 */ -	mxc_request_iomux(MX53_PIN_EIM_EB3, IOMUX_CONFIG_ALT1); -	gpio_direction_input(ETHERNET_INT); - -	/* Data bus */ -	mxc_request_iomux(MX53_PIN_EIM_D16, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D16, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D17, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D17, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D18, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D18, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D19, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D19, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D20, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D20, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D21, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D21, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D22, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D22, 0xA4); +	static const iomux_v3_cfg_t weim_smc911x_pads[] = { +		/* Data bus */ +		NEW_PAD_CTRL(MX53_PAD_EIM_D16__EMI_WEIM_D_16, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D17__EMI_WEIM_D_17, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D18__EMI_WEIM_D_18, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D19__EMI_WEIM_D_19, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D20__EMI_WEIM_D_20, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D21__EMI_WEIM_D_21, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D22__EMI_WEIM_D_22, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D23__EMI_WEIM_D_23, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D24__EMI_WEIM_D_24, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D25__EMI_WEIM_D_25, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D26__EMI_WEIM_D_26, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D27__EMI_WEIM_D_27, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D28__EMI_WEIM_D_28, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D29__EMI_WEIM_D_29, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D30__EMI_WEIM_D_30, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_D31__EMI_WEIM_D_31, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), -	mxc_request_iomux(MX53_PIN_EIM_D23, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D23, 0xA4); +		/* Address lines */ +		NEW_PAD_CTRL(MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6, +				PAD_CTL_PKE | PAD_CTL_DSE_HIGH), -	mxc_request_iomux(MX53_PIN_EIM_D24, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D24, 0xA4); +		/* other EIM signals for ethernet */ +		MX53_PAD_EIM_OE__EMI_WEIM_OE, +		MX53_PAD_EIM_RW__EMI_WEIM_RW, +		MX53_PAD_EIM_CS1__EMI_WEIM_CS_1, +	}; -	mxc_request_iomux(MX53_PIN_EIM_D25, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D25, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D26, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D26, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D27, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D27, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D28, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D28, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D29, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D29, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D30, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D30, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_D31, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_D31, 0xA4); - -	/* Address lines */ -	mxc_request_iomux(MX53_PIN_EIM_DA0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA0, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_DA1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA1, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_DA2, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA2, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_DA3, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA3, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_DA4, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA4, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_DA5, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA5, 0xA4); - -	mxc_request_iomux(MX53_PIN_EIM_DA6, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_EIM_DA6, 0xA4); +	/* ETHERNET_INT as GPIO2_31 */ +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_EB3__GPIO2_31); +	gpio_direction_input(ETHERNET_INT); -	/* other EIM signals for ethernet */ -	mxc_request_iomux(MX53_PIN_EIM_OE, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_EIM_RW, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_EIM_CS1, IOMUX_CONFIG_ALT0); +	/* WEIM bus */ +	imx_iomux_v3_setup_multiple_pads(weim_smc911x_pads, +						ARRAY_SIZE(weim_smc911x_pads));  }  static void weim_cs1_settings(void) diff --git a/board/freescale/mx53evk/mx53evk.c b/board/freescale/mx53evk/mx53evk.c index 127350147..727ad65c3 100644 --- a/board/freescale/mx53evk/mx53evk.c +++ b/board/freescale/mx53evk/mx53evk.c @@ -23,11 +23,10 @@  #include <common.h>  #include <asm/io.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/mx5x_pins.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/crm_regs.h>  #include <asm/arch/clock.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx53.h>  #include <asm/errno.h>  #include <asm/imx-common/boot_mode.h>  #include <netdev.h> @@ -49,69 +48,42 @@ int dram_init(void)  	return 0;  } +#define UART_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +			 PAD_CTL_PUS_100K_UP | PAD_CTL_ODE) +  static void setup_iomux_uart(void)  { -	/* UART1 RXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D11, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D11, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_UART1_IPP_UART_RXD_MUX_SELECT_INPUT, 0x1); +	static const iomux_v3_cfg_t uart_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT11__UART1_RXD_MUX, UART_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT10__UART1_TXD_MUX, UART_PAD_CTRL), +	}; -	/* UART1 TXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D10, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D10, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));  } +#define I2C_PAD_CTRL	(PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH | \ +			 PAD_CTL_HYS | PAD_CTL_ODE) +  static void setup_i2c(unsigned int port_number)  { +	static const iomux_v3_cfg_t i2c1_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT8__I2C1_SDA, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT9__I2C1_SCL, I2C_PAD_CTRL), +	}; + +	static const iomux_v3_cfg_t i2c2_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_KEY_ROW3__I2C2_SDA, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL3__I2C2_SCL, I2C_PAD_CTRL), +	}; +  	switch (port_number) {  	case 0: -		/* i2c1 SDA */ -		mxc_request_iomux(MX53_PIN_CSI0_D8, -				IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION); -		mxc_iomux_set_input(MX53_I2C1_IPP_SDA_IN_SELECT_INPUT, -				INPUT_CTL_PATH0); -		mxc_iomux_set_pad(MX53_PIN_CSI0_D8, -				PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | -				PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); -		/* i2c1 SCL */ -		mxc_request_iomux(MX53_PIN_CSI0_D9, -				IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION); -		mxc_iomux_set_input(MX53_I2C1_IPP_SCL_IN_SELECT_INPUT, -				INPUT_CTL_PATH0); -		mxc_iomux_set_pad(MX53_PIN_CSI0_D9, -				PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | -				PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); +		imx_iomux_v3_setup_multiple_pads(i2c1_pads, +							ARRAY_SIZE(i2c1_pads));  		break;  	case 1: -		/* i2c2 SDA */ -		mxc_request_iomux(MX53_PIN_KEY_ROW3, -				IOMUX_CONFIG_ALT4 | IOMUX_CONFIG_SION); -		mxc_iomux_set_input(MX53_I2C2_IPP_SDA_IN_SELECT_INPUT, -				INPUT_CTL_PATH0); -		mxc_iomux_set_pad(MX53_PIN_KEY_ROW3, -				PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | -				PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); - -		/* i2c2 SCL */ -		mxc_request_iomux(MX53_PIN_KEY_COL3, -				IOMUX_CONFIG_ALT4 | IOMUX_CONFIG_SION); -		mxc_iomux_set_input(MX53_I2C2_IPP_SCL_IN_SELECT_INPUT, -				INPUT_CTL_PATH0); -		mxc_iomux_set_pad(MX53_PIN_KEY_COL3, -				PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | -				PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); +		imx_iomux_v3_setup_multiple_pads(i2c2_pads, +							ARRAY_SIZE(i2c2_pads));  		break;  	default:  		printf("Warning: Wrong I2C port number\n"); @@ -160,54 +132,26 @@ void power_init(void)  static void setup_iomux_fec(void)  { -	/*FEC_MDIO*/ -	mxc_request_iomux(MX53_PIN_FEC_MDIO, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_MDIO, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_22K_PU | PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_FEC_FEC_MDI_SELECT_INPUT, 0x1); - -	/*FEC_MDC*/ -	mxc_request_iomux(MX53_PIN_FEC_MDC, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_MDC, PAD_CTL_DRV_HIGH); - -	/* FEC RXD1 */ -	mxc_request_iomux(MX53_PIN_FEC_RXD1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RXD1, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC RXD0 */ -	mxc_request_iomux(MX53_PIN_FEC_RXD0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RXD0, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	 /* FEC TXD1 */ -	mxc_request_iomux(MX53_PIN_FEC_TXD1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TXD1, PAD_CTL_DRV_HIGH); - -	/* FEC TXD0 */ -	mxc_request_iomux(MX53_PIN_FEC_TXD0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TXD0, PAD_CTL_DRV_HIGH); +	static const iomux_v3_cfg_t fec_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_FEC_MDIO__FEC_MDIO, PAD_CTL_HYS | +			PAD_CTL_DSE_HIGH | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE), +		NEW_PAD_CTRL(MX53_PAD_FEC_MDC__FEC_MDC, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD1__FEC_RDATA_1, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD0__FEC_RDATA_0, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD1__FEC_TDATA_1, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD0__FEC_TDATA_0, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TX_EN__FEC_TX_EN, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_REF_CLK__FEC_TX_CLK, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RX_ER__FEC_RX_ER, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_CRS_DV__FEC_RX_DV, +				PAD_CTL_HYS | PAD_CTL_PKE), +	}; -	/* FEC TX_EN */ -	mxc_request_iomux(MX53_PIN_FEC_TX_EN, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TX_EN, PAD_CTL_DRV_HIGH); - -	/* FEC TX_CLK */ -	mxc_request_iomux(MX53_PIN_FEC_REF_CLK, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_REF_CLK, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC RX_ER */ -	mxc_request_iomux(MX53_PIN_FEC_RX_ER, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RX_ER, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC CRS */ -	mxc_request_iomux(MX53_PIN_FEC_CRS_DV, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_CRS_DV, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  #ifdef CONFIG_FSL_ESDHC @@ -221,9 +165,9 @@ int board_mmc_getcd(struct mmc *mmc)  	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;  	int ret; -	mxc_request_iomux(MX53_PIN_EIM_DA11, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_DA11__GPIO3_11);  	gpio_direction_input(IMX_GPIO_NR(3, 11)); -	mxc_request_iomux(MX53_PIN_EIM_DA13, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_DA13__GPIO3_13);  	gpio_direction_input(IMX_GPIO_NR(3, 13));  	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) @@ -234,8 +178,38 @@ int board_mmc_getcd(struct mmc *mmc)  	return ret;  } +#define SD_CMD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +				 PAD_CTL_PUS_100K_UP) +#define SD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | \ +				 PAD_CTL_DSE_HIGH) +  int board_mmc_init(bd_t *bis)  { +	static const iomux_v3_cfg_t sd1_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_SD1_CMD__ESDHC1_CMD, SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_CLK__ESDHC1_CLK, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA0__ESDHC1_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA1__ESDHC1_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA2__ESDHC1_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA3__ESDHC1_DAT3, SD_PAD_CTRL), +		MX53_PAD_EIM_DA13__GPIO3_13, +	}; + +	static const iomux_v3_cfg_t sd2_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_PATA_RESET_B__ESDHC3_CMD, +				SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_IORDY__ESDHC3_CLK, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA8__ESDHC3_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA9__ESDHC3_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA10__ESDHC3_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA11__ESDHC3_DAT3, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA0__ESDHC3_DAT4, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA1__ESDHC3_DAT5, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA2__ESDHC3_DAT6, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA3__ESDHC3_DAT7, SD_PAD_CTRL), +		MX53_PAD_EIM_DA11__GPIO3_11, +	}; +  	u32 index;  	s32 status = 0; @@ -245,109 +219,12 @@ int board_mmc_init(bd_t *bis)  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {  		switch (index) {  		case 0: -			mxc_request_iomux(MX53_PIN_SD1_CMD, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_CLK, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA0, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA1, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA2, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA3, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_EIM_DA13, -						IOMUX_CONFIG_ALT1); - -			mxc_iomux_set_pad(MX53_PIN_SD1_CMD, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_CLK, -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_DRV_HIGH); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA0, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA1, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA2, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA3, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); +			imx_iomux_v3_setup_multiple_pads(sd1_pads, +							 ARRAY_SIZE(sd1_pads));  			break;  		case 1: -			mxc_request_iomux(MX53_PIN_ATA_RESET_B, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_IORDY, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_DATA8, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA9, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA10, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA11, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA0, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA1, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA2, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA3, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_EIM_DA11, -						IOMUX_CONFIG_ALT1); - -			mxc_iomux_set_pad(MX53_PIN_ATA_RESET_B, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_IORDY, -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_DRV_HIGH); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA8, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA9, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA10, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA11, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA0, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA1, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA2, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA3, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); - +			imx_iomux_v3_setup_multiple_pads(sd2_pads, +							 ARRAY_SIZE(sd2_pads));  			break;  		default:  			printf("Warning: you configured more ESDHC controller" diff --git a/board/freescale/mx53loco/mx53loco.c b/board/freescale/mx53loco/mx53loco.c index 8f39c383f..10e9d36e5 100644 --- a/board/freescale/mx53loco/mx53loco.c +++ b/board/freescale/mx53loco/mx53loco.c @@ -24,11 +24,10 @@  #include <common.h>  #include <asm/io.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/mx5x_pins.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/crm_regs.h>  #include <asm/arch/clock.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx53.h>  #include <asm/arch/clock.h>  #include <asm/errno.h>  #include <asm/imx-common/mx5_video.h> @@ -82,86 +81,51 @@ u32 get_board_rev(void)  	return (get_cpu_rev() & ~(0xF << 8)) | (rev & 0xF) << 8;  } +#define UART_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +			 PAD_CTL_PUS_100K_UP | PAD_CTL_ODE) +  static void setup_iomux_uart(void)  { -	/* UART1 RXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D11, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D11, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_UART1_IPP_UART_RXD_MUX_SELECT_INPUT, 0x1); +	static const iomux_v3_cfg_t uart_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT11__UART1_RXD_MUX, UART_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT10__UART1_TXD_MUX, UART_PAD_CTRL), +	}; -	/* UART1 TXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D10, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D10, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));  }  #ifdef CONFIG_USB_EHCI_MX5  int board_ehci_hcd_init(int port)  {  	/* request VBUS power enable pin, GPIO7_8 */ -	mxc_request_iomux(MX53_PIN_ATA_DA_2, IOMUX_CONFIG_ALT1); -	gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 1); +	imx_iomux_v3_setup_pad(MX53_PAD_PATA_DA_2__GPIO7_8); +	gpio_direction_output(IMX_GPIO_NR(7, 8), 1);  	return 0;  }  #endif  static void setup_iomux_fec(void)  { -	/*FEC_MDIO*/ -	mxc_request_iomux(MX53_PIN_FEC_MDIO, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_MDIO, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_22K_PU | PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_FEC_FEC_MDI_SELECT_INPUT, 0x1); - -	/*FEC_MDC*/ -	mxc_request_iomux(MX53_PIN_FEC_MDC, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_MDC, PAD_CTL_DRV_HIGH); - -	/* FEC RXD1 */ -	mxc_request_iomux(MX53_PIN_FEC_RXD1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RXD1, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC RXD0 */ -	mxc_request_iomux(MX53_PIN_FEC_RXD0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RXD0, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	 /* FEC TXD1 */ -	mxc_request_iomux(MX53_PIN_FEC_TXD1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TXD1, PAD_CTL_DRV_HIGH); - -	/* FEC TXD0 */ -	mxc_request_iomux(MX53_PIN_FEC_TXD0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TXD0, PAD_CTL_DRV_HIGH); - -	/* FEC TX_EN */ -	mxc_request_iomux(MX53_PIN_FEC_TX_EN, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TX_EN, PAD_CTL_DRV_HIGH); - -	/* FEC TX_CLK */ -	mxc_request_iomux(MX53_PIN_FEC_REF_CLK, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_REF_CLK, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC RX_ER */ -	mxc_request_iomux(MX53_PIN_FEC_RX_ER, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RX_ER, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); +	static const iomux_v3_cfg_t fec_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_FEC_MDIO__FEC_MDIO, PAD_CTL_HYS | +			PAD_CTL_DSE_HIGH | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE), +		NEW_PAD_CTRL(MX53_PAD_FEC_MDC__FEC_MDC, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD1__FEC_RDATA_1, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD0__FEC_RDATA_0, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD1__FEC_TDATA_1, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD0__FEC_TDATA_0, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TX_EN__FEC_TX_EN, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_REF_CLK__FEC_TX_CLK, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RX_ER__FEC_RX_ER, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_CRS_DV__FEC_RX_DV, +				PAD_CTL_HYS | PAD_CTL_PKE), +	}; -	/* FEC CRS */ -	mxc_request_iomux(MX53_PIN_FEC_CRS_DV, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_CRS_DV, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  #ifdef CONFIG_FSL_ESDHC @@ -175,9 +139,9 @@ int board_mmc_getcd(struct mmc *mmc)  	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;  	int ret; -	mxc_request_iomux(MX53_PIN_EIM_DA11, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_DA11__GPIO3_11);  	gpio_direction_input(IMX_GPIO_NR(3, 11)); -	mxc_request_iomux(MX53_PIN_EIM_DA13, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_DA13__GPIO3_13);  	gpio_direction_input(IMX_GPIO_NR(3, 13));  	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) @@ -188,8 +152,38 @@ int board_mmc_getcd(struct mmc *mmc)  	return ret;  } +#define SD_CMD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +				 PAD_CTL_PUS_100K_UP) +#define SD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | \ +				 PAD_CTL_DSE_HIGH) +  int board_mmc_init(bd_t *bis)  { +	static const iomux_v3_cfg_t sd1_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_SD1_CMD__ESDHC1_CMD, SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_CLK__ESDHC1_CLK, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA0__ESDHC1_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA1__ESDHC1_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA2__ESDHC1_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA3__ESDHC1_DAT3, SD_PAD_CTRL), +		MX53_PAD_EIM_DA13__GPIO3_13, +	}; + +	static const iomux_v3_cfg_t sd2_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_PATA_RESET_B__ESDHC3_CMD, +				SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_IORDY__ESDHC3_CLK, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA8__ESDHC3_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA9__ESDHC3_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA10__ESDHC3_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA11__ESDHC3_DAT3, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA0__ESDHC3_DAT4, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA1__ESDHC3_DAT5, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA2__ESDHC3_DAT6, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA3__ESDHC3_DAT7, SD_PAD_CTRL), +		MX53_PAD_EIM_DA11__GPIO3_11, +	}; +  	u32 index;  	s32 status = 0; @@ -199,109 +193,12 @@ int board_mmc_init(bd_t *bis)  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {  		switch (index) {  		case 0: -			mxc_request_iomux(MX53_PIN_SD1_CMD, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_CLK, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA0, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA1, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA2, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA3, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_EIM_DA13, -						IOMUX_CONFIG_ALT1); - -			mxc_iomux_set_pad(MX53_PIN_SD1_CMD, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_CLK, -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_DRV_HIGH); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA0, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA1, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA2, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA3, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); +			imx_iomux_v3_setup_multiple_pads(sd1_pads, +							 ARRAY_SIZE(sd1_pads));  			break;  		case 1: -			mxc_request_iomux(MX53_PIN_ATA_RESET_B, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_IORDY, -						IOMUX_CONFIG_ALT2); -			mxc_request_iomux(MX53_PIN_ATA_DATA8, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA9, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA10, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA11, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA0, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA1, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA2, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_ATA_DATA3, -						IOMUX_CONFIG_ALT4); -			mxc_request_iomux(MX53_PIN_EIM_DA11, -						IOMUX_CONFIG_ALT1); - -			mxc_iomux_set_pad(MX53_PIN_ATA_RESET_B, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_IORDY, -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_DRV_HIGH); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA8, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA9, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA10, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA11, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA0, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA1, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA2, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_ATA_DATA3, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); - +			imx_iomux_v3_setup_multiple_pads(sd2_pads, +							 ARRAY_SIZE(sd2_pads));  			break;  		default:  			printf("Warning: you configured more ESDHC controller" @@ -316,28 +213,17 @@ int board_mmc_init(bd_t *bis)  }  #endif +#define I2C_PAD_CTRL	(PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH | \ +			 PAD_CTL_PUS_100K_UP | PAD_CTL_ODE) +  static void setup_iomux_i2c(void)  { -	/* I2C1 SDA */ -	mxc_request_iomux(MX53_PIN_CSI0_D8, -		IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION); -	mxc_iomux_set_input(MX53_I2C1_IPP_SDA_IN_SELECT_INPUT, -		INPUT_CTL_PATH0); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D8, -		PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | -		PAD_CTL_100K_PU | PAD_CTL_PKE_ENABLE | -		PAD_CTL_PUE_PULL | -		PAD_CTL_ODE_OPENDRAIN_ENABLE); -	/* I2C1 SCL */ -	mxc_request_iomux(MX53_PIN_CSI0_D9, -		IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION); -	mxc_iomux_set_input(MX53_I2C1_IPP_SCL_IN_SELECT_INPUT, -		INPUT_CTL_PATH0); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D9, -		PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | -		PAD_CTL_100K_PU | PAD_CTL_PKE_ENABLE | -		PAD_CTL_PUE_PULL | -		PAD_CTL_ODE_OPENDRAIN_ENABLE); +	static const iomux_v3_cfg_t i2c1_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT8__I2C1_SDA, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT9__I2C1_SCL, I2C_PAD_CTRL), +	}; + +	imx_iomux_v3_setup_multiple_pads(i2c1_pads, ARRAY_SIZE(i2c1_pads));  }  static int power_init(void) diff --git a/board/freescale/mx53loco/mx53loco_video.c b/board/freescale/mx53loco/mx53loco_video.c index a4d5a6a36..c4654c9b9 100644 --- a/board/freescale/mx53loco/mx53loco_video.c +++ b/board/freescale/mx53loco/mx53loco_video.c @@ -24,7 +24,7 @@  #include <common.h>  #include <linux/list.h>  #include <asm/gpio.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx53.h>  #include <linux/fb.h>  #include <ipu_pixfmt.h> @@ -63,42 +63,46 @@ static struct fb_videomode const seiko_wvga = {  void setup_iomux_lcd(void)  { -	mxc_request_iomux(MX53_PIN_DI0_DISP_CLK, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DI0_PIN15, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DI0_PIN2, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DI0_PIN3, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT0, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT1, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT2, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT3, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT4, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT5, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT6, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT7, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT8, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT9, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT10, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT11, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT12, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT13, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT14, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT15, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT16, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT17, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT18, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT19, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT20, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT21, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT22, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX53_PIN_DISP0_DAT23, IOMUX_CONFIG_ALT0); +	static const iomux_v3_cfg_t lcd_pads[] = { +		MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK, +		MX53_PAD_DI0_PIN15__IPU_DI0_PIN15, +		MX53_PAD_DI0_PIN2__IPU_DI0_PIN2, +		MX53_PAD_DI0_PIN3__IPU_DI0_PIN3, +		MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0, +		MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1, +		MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2, +		MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3, +		MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4, +		MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5, +		MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6, +		MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7, +		MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8, +		MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9, +		MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10, +		MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11, +		MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12, +		MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13, +		MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14, +		MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15, +		MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16, +		MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17, +		MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18, +		MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19, +		MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20, +		MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21, +		MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22, +		MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23, +	}; + +	imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));  	/* Turn on GPIO backlight */ -	mxc_request_iomux(MX53_PIN_EIM_D24, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_D24__GPIO3_24);  	gpio_direction_output(MX53LOCO_LCD_POWER, 1);  	/* Turn on display contrast */ -	mxc_request_iomux(MX53_PIN_GPIO_1, IOMUX_CONFIG_ALT1); -	gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_1), 1); +	imx_iomux_v3_setup_pad(MX53_PAD_GPIO_1__GPIO1_1); +	gpio_direction_output(IMX_GPIO_NR(1, 1), 1);  }  int board_video_skip(void) diff --git a/board/freescale/mx53smd/mx53smd.c b/board/freescale/mx53smd/mx53smd.c index 761f727d0..d04f44fb3 100644 --- a/board/freescale/mx53smd/mx53smd.c +++ b/board/freescale/mx53smd/mx53smd.c @@ -23,11 +23,10 @@  #include <common.h>  #include <asm/io.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/mx5x_pins.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/crm_regs.h>  #include <asm/arch/clock.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx53.h>  #include <asm/errno.h>  #include <netdev.h>  #include <mmc.h> @@ -56,76 +55,41 @@ void dram_init_banksize(void)  	gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;  } +#define UART_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +			 PAD_CTL_PUS_100K_UP | PAD_CTL_ODE) +  static void setup_iomux_uart(void)  { -	/* UART1 RXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D11, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D11, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_UART1_IPP_UART_RXD_MUX_SELECT_INPUT, 0x1); +	static const iomux_v3_cfg_t uart_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT11__UART1_RXD_MUX, UART_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT10__UART1_TXD_MUX, UART_PAD_CTRL), +	}; -	/* UART1 TXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D10, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D10, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU | -				PAD_CTL_ODE_OPENDRAIN_ENABLE); +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));  }  static void setup_iomux_fec(void)  { -	/*FEC_MDIO*/ -	mxc_request_iomux(MX53_PIN_FEC_MDIO, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_MDIO, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_22K_PU | PAD_CTL_ODE_OPENDRAIN_ENABLE); -	mxc_iomux_set_input(MX53_FEC_FEC_MDI_SELECT_INPUT, 0x1); - -	/*FEC_MDC*/ -	mxc_request_iomux(MX53_PIN_FEC_MDC, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_MDC, PAD_CTL_DRV_HIGH); - -	/* FEC RXD1 */ -	mxc_request_iomux(MX53_PIN_FEC_RXD1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RXD1, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC RXD0 */ -	mxc_request_iomux(MX53_PIN_FEC_RXD0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RXD0, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	 /* FEC TXD1 */ -	mxc_request_iomux(MX53_PIN_FEC_TXD1, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TXD1, PAD_CTL_DRV_HIGH); - -	/* FEC TXD0 */ -	mxc_request_iomux(MX53_PIN_FEC_TXD0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TXD0, PAD_CTL_DRV_HIGH); +	static const iomux_v3_cfg_t fec_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_FEC_MDIO__FEC_MDIO, PAD_CTL_HYS | +			PAD_CTL_DSE_HIGH | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE), +		NEW_PAD_CTRL(MX53_PAD_FEC_MDC__FEC_MDC, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD1__FEC_RDATA_1, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD0__FEC_RDATA_0, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD1__FEC_TDATA_1, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD0__FEC_TDATA_0, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TX_EN__FEC_TX_EN, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_REF_CLK__FEC_TX_CLK, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RX_ER__FEC_RX_ER, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_CRS_DV__FEC_RX_DV, +				PAD_CTL_HYS | PAD_CTL_PKE), +	}; -	/* FEC TX_EN */ -	mxc_request_iomux(MX53_PIN_FEC_TX_EN, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_TX_EN, PAD_CTL_DRV_HIGH); - -	/* FEC TX_CLK */ -	mxc_request_iomux(MX53_PIN_FEC_REF_CLK, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_REF_CLK, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC RX_ER */ -	mxc_request_iomux(MX53_PIN_FEC_RX_ER, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_RX_ER, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); - -	/* FEC CRS */ -	mxc_request_iomux(MX53_PIN_FEC_CRS_DV, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX53_PIN_FEC_CRS_DV, -			PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  #ifdef CONFIG_FSL_ESDHC @@ -135,13 +99,28 @@ struct fsl_esdhc_cfg esdhc_cfg[1] = {  int board_mmc_getcd(struct mmc *mmc)  { -	mxc_request_iomux(MX53_PIN_EIM_DA13, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_pad(MX53_PAD_EIM_DA13__GPIO3_13);  	gpio_direction_input(IMX_GPIO_NR(3, 13));  	return !gpio_get_value(IMX_GPIO_NR(3, 13));  } +#define SD_CMD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \ +				 PAD_CTL_PUS_100K_UP) +#define SD_PAD_CTRL		(PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | \ +				 PAD_CTL_DSE_HIGH) +  int board_mmc_init(bd_t *bis)  { +	static const iomux_v3_cfg_t sd1_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_SD1_CMD__ESDHC1_CMD, SD_CMD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_CLK__ESDHC1_CLK, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA0__ESDHC1_DAT0, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA1__ESDHC1_DAT1, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA2__ESDHC1_DAT2, SD_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_SD1_DATA3__ESDHC1_DAT3, SD_PAD_CTRL), +		MX53_PAD_EIM_DA13__GPIO3_13, +	}; +  	u32 index;  	s32 status = 0; @@ -150,43 +129,8 @@ int board_mmc_init(bd_t *bis)  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {  		switch (index) {  		case 0: -			mxc_request_iomux(MX53_PIN_SD1_CMD, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_CLK, IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA0, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA1, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA2, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_SD1_DATA3, -						IOMUX_CONFIG_ALT0); -			mxc_request_iomux(MX53_PIN_EIM_DA13, -						IOMUX_CONFIG_ALT1); - -			mxc_iomux_set_pad(MX53_PIN_SD1_CMD, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_CLK, -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | -				PAD_CTL_DRV_HIGH); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA0, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA1, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA2, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); -			mxc_iomux_set_pad(MX53_PIN_SD1_DATA3, -				PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | -				PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | -				PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU); +			imx_iomux_v3_setup_multiple_pads(sd1_pads, +							 ARRAY_SIZE(sd1_pads));  			break;  		default: diff --git a/board/freescale/mx6qarm2/mx6qarm2.c b/board/freescale/mx6qarm2/mx6qarm2.c index ff7f5e83a..e33674665 100644 --- a/board/freescale/mx6qarm2/mx6qarm2.c +++ b/board/freescale/mx6qarm2/mx6qarm2.c @@ -35,17 +35,16 @@  DECLARE_GLOBAL_DATA_PTR; -#define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |		\ -	PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_47K_UP  | PAD_CTL_SPEED_LOW |		\ -	PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\ +	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define ENET_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED   |		\ -	PAD_CTL_DSE_40ohm   | PAD_CTL_HYS) +#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)  int dram_init(void)  { diff --git a/board/freescale/mx6qsabreauto/mx6qsabreauto.c b/board/freescale/mx6qsabreauto/mx6qsabreauto.c index aec3286e2..bfe4868e8 100644 --- a/board/freescale/mx6qsabreauto/mx6qsabreauto.c +++ b/board/freescale/mx6qsabreauto/mx6qsabreauto.c @@ -35,17 +35,16 @@  DECLARE_GLOBAL_DATA_PTR; -#define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |            \ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |               \ -	PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |            \ -	PAD_CTL_PUS_47K_UP  | PAD_CTL_SPEED_LOW |               \ -	PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\ +	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define ENET_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED   |		\ -	PAD_CTL_DSE_40ohm   | PAD_CTL_HYS) +#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)  int dram_init(void)  { @@ -179,7 +178,10 @@ static int mx6sabre_rev(void)  	 * i.MX6Q ARD RevB: 0x02  	 */  	struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; -	int reg = readl(&ocotp->gp1); +	struct fuse_bank *bank = &ocotp->bank[4]; +	struct fuse_bank4_regs *fuse = +			(struct fuse_bank4_regs *)bank->fuse_regs; +	int reg = readl(&fuse->gp1);  	int ret;  	switch (reg >> 8 & 0x0F) { diff --git a/board/freescale/mx6qsabrelite/mx6qsabrelite.c b/board/freescale/mx6qsabrelite/mx6qsabrelite.c index 9f9cac82c..8ce054e42 100644 --- a/board/freescale/mx6qsabrelite/mx6qsabrelite.c +++ b/board/freescale/mx6qsabrelite/mx6qsabrelite.c @@ -45,29 +45,25 @@  DECLARE_GLOBAL_DATA_PTR; -#define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |	       \ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |	       \ -	PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |	       \ -	PAD_CTL_PUS_47K_UP  | PAD_CTL_SPEED_LOW |	       \ -	PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\ +	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define ENET_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED	  |		\ -	PAD_CTL_DSE_40ohm   | PAD_CTL_HYS) +#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS) -#define SPI_PAD_CTRL (PAD_CTL_HYS |				\ -	PAD_CTL_PUS_100K_DOWN | PAD_CTL_SPEED_MED |		\ +#define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED |		\  	PAD_CTL_DSE_40ohm     | PAD_CTL_SRE_FAST) -#define BUTTON_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED   |		\ -	PAD_CTL_DSE_40ohm   | PAD_CTL_HYS) +#define BUTTON_PAD_CTRL (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS) -#define I2C_PAD_CTRL	(PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |		\ -	PAD_CTL_DSE_40ohm | PAD_CTL_HYS |			\ +#define I2C_PAD_CTRL	(PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |	\  	PAD_CTL_ODE | PAD_CTL_SRE_FAST)  int dram_init(void) diff --git a/board/freescale/mx6qsabresd/mx6qsabresd.c b/board/freescale/mx6qsabresd/mx6qsabresd.c index 0d7cb9efd..252982614 100644 --- a/board/freescale/mx6qsabresd/mx6qsabresd.c +++ b/board/freescale/mx6qsabresd/mx6qsabresd.c @@ -34,17 +34,16 @@  DECLARE_GLOBAL_DATA_PTR; -#define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |            \ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |               \ -	PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |            \ -	PAD_CTL_PUS_47K_UP  | PAD_CTL_SPEED_LOW |               \ -	PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\ +	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) -#define ENET_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED   |		\ -	PAD_CTL_DSE_40ohm   | PAD_CTL_HYS) +#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)  int dram_init(void)  { @@ -166,6 +165,7 @@ int board_mmc_getcd(struct mmc *mmc)  int board_mmc_init(bd_t *bis)  { +	s32 status = 0;  	int i;  	/* @@ -196,15 +196,15 @@ int board_mmc_init(bd_t *bis)  			break;  		default:  			printf("Warning: you configured more USDHC controllers" -				"(%d) than supported by the board\n", i + 1); -			return 0; -	       } +			       "(%d) then supported by the board (%d)\n", +			       i + 1, CONFIG_SYS_FSL_USDHC_NUM); +			return status; +		} -	       if (fsl_esdhc_initialize(bis, &usdhc_cfg[i])) -			printf("Warning: failed to initialize mmc dev %d\n", i); +		status |= fsl_esdhc_initialize(bis, &usdhc_cfg[i]);  	} -	return 0; +	return status;  }  #endif diff --git a/board/freescale/mx6slevk/Makefile b/board/freescale/mx6slevk/Makefile new file mode 100644 index 000000000..43af351ba --- /dev/null +++ b/board/freescale/mx6slevk/Makefile @@ -0,0 +1,28 @@ +# (C) 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. +# + +include $(TOPDIR)/config.mk + +LIB    = $(obj)lib$(BOARD).o + +COBJS  := mx6slevk.o + +SRCS   := $(COBJS:.o=.c) +OBJS   := $(addprefix $(obj),$(COBJS)) + +$(LIB):        $(obj).depend $(OBJS) +	$(call cmd_link_o_target, $(OBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/freescale/mx6slevk/imximage.cfg b/board/freescale/mx6slevk/imximage.cfg new file mode 100644 index 000000000..df39a1665 --- /dev/null +++ b/board/freescale/mx6slevk/imximage.cfg @@ -0,0 +1,118 @@ +/* + * Copyright (C) 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. + * + * Refer docs/README.imxmage for more details about how-to configure + * and create imximage boot image + * + * The syntax is taken as close as possible with the kwbimage + */ + +/* image version */ + +IMAGE_VERSION 2 + +/* + * Boot Device : one of + * spi, sd (the board has no nand neither onenand) + */ + +BOOT_FROM	sd + +/* + * Device Configuration Data (DCD) + * + * Each entry must have the format: + * Addr-type           Address        Value + * + * where: + *	Addr-type register length (1,2 or 4 bytes) + *	Address	  absolute address of the register + *	value	  value to be stored in the register + */ +DATA 4 0x020c4018 0x00260324 + +DATA 4 0x020c4068 0xffffffff +DATA 4 0x020c406c 0xffffffff +DATA 4 0x020c4070 0xffffffff +DATA 4 0x020c4074 0xffffffff +DATA 4 0x020c4078 0xffffffff +DATA 4 0x020c407c 0xffffffff +DATA 4 0x020c4080 0xffffffff + +DATA 4 0x020e0344 0x00003030 +DATA 4 0x020e0348 0x00003030 +DATA 4 0x020e034c 0x00003030 +DATA 4 0x020e0350 0x00003030 +DATA 4 0x020e030c 0x00000030 +DATA 4 0x020e0310 0x00000030 +DATA 4 0x020e0314 0x00000030 +DATA 4 0x020e0318 0x00000030 +DATA 4 0x020e0300 0x00000030 +DATA 4 0x020e031c 0x00000030 +DATA 4 0x020e0338 0x00000028 +DATA 4 0x020e0320 0x00000030 +DATA 4 0x020e032c 0x00000000 +DATA 4 0x020e033c 0x00000008 +DATA 4 0x020e0340 0x00000008 +DATA 4 0x020e05c4 0x00000030 +DATA 4 0x020e05cc 0x00000030 +DATA 4 0x020e05d4 0x00000030 +DATA 4 0x020e05d8 0x00000030 +DATA 4 0x020e05ac 0x00000030 +DATA 4 0x020e05c8 0x00000030 +DATA 4 0x020e05b0 0x00020000 +DATA 4 0x020e05b4 0x00000000 +DATA 4 0x020e05c0 0x00020000 +DATA 4 0x020e05d0 0x00080000 + +DATA 4 0x021b001c 0x00008000 +DATA 4 0x021b085c 0x1b4700c7 +DATA 4 0x021b0800 0xa1390003 +DATA 4 0x021b0890 0x00300000 +DATA 4 0x021b08b8 0x00000800 +DATA 4 0x021b081c 0x33333333 +DATA 4 0x021b0820 0x33333333 +DATA 4 0x021b0824 0x33333333 +DATA 4 0x021b0828 0x33333333 +DATA 4 0x021b082c 0xf3333333 +DATA 4 0x021b0830 0xf3333333 +DATA 4 0x021b0834 0xf3333333 +DATA 4 0x021b0838 0xf3333333 +DATA 4 0x021b0848 0x4241444a +DATA 4 0x021b0850 0x3030312b +DATA 4 0x021b083c 0x20000000 +DATA 4 0x021b0840 0x00000000 +DATA 4 0x021b08c0 0x24911492 +DATA 4 0x021b08b8 0x00000800 +DATA 4 0x021b000c 0x33374133 +DATA 4 0x021b0004 0x00020024 +DATA 4 0x021b0010 0x00100A82 +DATA 4 0x021b0014 0x00000093 +DATA 4 0x021b0018 0x00001688 +DATA 4 0x021b002c 0x0f9f26d2 +DATA 4 0x021b0030 0x0000020e +DATA 4 0x021b0038 0x00190778 +DATA 4 0x021b0008 0x00000000 +DATA 4 0x021b0040 0x0000004f +DATA 4 0x021b0000 0xc3110000 +DATA 4 0x021b001c 0x003f8030 +DATA 4 0x021b001c 0xff0a8030 +DATA 4 0x021b001c 0x82018030 +DATA 4 0x021b001c 0x04028030 +DATA 4 0x021b001c 0x02038030 +DATA 4 0x021b001c 0xff0a8038 +DATA 4 0x021b001c 0x82018038 +DATA 4 0x021b001c 0x04028038 +DATA 4 0x021b001c 0x02038038 +DATA 4 0x021b0800 0xa1310003 +DATA 4 0x021b0020 0x00001800 +DATA 4 0x021b0818 0x00000000 +DATA 4 0x021b08b8 0x00000800 +DATA 4 0x021b0004 0x00025564 +DATA 4 0x021b0404 0x00011006 +DATA 4 0x021b001c 0x00000000 diff --git a/board/freescale/mx6slevk/mx6slevk.c b/board/freescale/mx6slevk/mx6slevk.c new file mode 100644 index 000000000..69fe8fc0e --- /dev/null +++ b/board/freescale/mx6slevk/mx6slevk.c @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. + * + * Author: Fabio Estevam <fabio.estevam@freescale.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 <asm/arch/clock.h> +#include <asm/arch/iomux.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/mx6-pins.h> +#include <asm/arch/sys_proto.h> +#include <asm/gpio.h> +#include <asm/imx-common/iomux-v3.h> +#include <asm/io.h> +#include <asm/sizes.h> +#include <common.h> +#include <fsl_esdhc.h> +#include <mmc.h> + +DECLARE_GLOBAL_DATA_PTR; + +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) + +#define USDHC_PAD_CTRL (PAD_CTL_PUS_22K_UP |			\ +	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\ +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS) + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE); + +	return 0; +} + +static iomux_v3_cfg_t const uart1_pads[] = { +	MX6_PAD_UART1_TXD__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL), +	MX6_PAD_UART1_RXD__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL), +}; + +static iomux_v3_cfg_t const usdhc2_pads[] = { +	MX6_PAD_SD2_CLK__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD2_CMD__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD2_DAT0__USDHC2_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD2_DAT1__USDHC2_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD2_DAT2__USDHC2_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD2_DAT3__USDHC2_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +}; + +static void setup_iomux_uart(void) +{ +	imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); +} + +static struct fsl_esdhc_cfg usdhc_cfg[1] = { +	{USDHC2_BASE_ADDR}, +}; + +int board_mmc_getcd(struct mmc *mmc) +{ +	return 1;	/* Assume boot SD always present */ +} + +int board_mmc_init(bd_t *bis) +{ +	imx_iomux_v3_setup_multiple_pads(usdhc2_pads, ARRAY_SIZE(usdhc2_pads)); + +	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); +	return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); +} + +int board_early_init_f(void) +{ +	setup_iomux_uart(); +	return 0; +} + +int board_init(void) +{ +	/* address of boot parameters */ +	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + +	return 0; +} + +u32 get_board_rev(void) +{ +	return get_cpu_rev(); +} + +int checkboard(void) +{ +	puts("Board: MX6SLEVK\n"); + +	return 0; +} diff --git a/board/freescale/titanium/Makefile b/board/freescale/titanium/Makefile new file mode 100644 index 000000000..46827f818 --- /dev/null +++ b/board/freescale/titanium/Makefile @@ -0,0 +1,36 @@ +# +# Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de> +# +# (C) Copyright 2011 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. +# +# 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 $(TOPDIR)/config.mk + +LIB    = $(obj)lib$(BOARD).o + +COBJS  := titanium.o + +SRCS   := $(COBJS:.o=.c) +OBJS   := $(addprefix $(obj),$(COBJS)) + +$(LIB):        $(obj).depend $(OBJS) +	$(call cmd_link_o_target, $(OBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/freescale/titanium/imximage.cfg b/board/freescale/titanium/imximage.cfg new file mode 100644 index 000000000..193434341 --- /dev/null +++ b/board/freescale/titanium/imximage.cfg @@ -0,0 +1,178 @@ +/* + * Projectiondesign AS + * Derived from ./board/freescale/mx6qsabrelite/imximage.cfg + * + * Copyright (C) 2011 Freescale Semiconductor, Inc. + * Jason Liu <r64343@freescale.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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. + * + * Refer docs/README.imxmage for more details about how-to configure + * and create imximage boot image + * + * The syntax is taken as close as possible with the kwbimage + */ + +/* image version */ + +IMAGE_VERSION 2 + +/* + * Boot Device : one of + * sd, nand + */ +BOOT_FROM      nand + +/* + * Device Configuration Data (DCD) + * + * Each entry must have the format: + * Addr-type           Address        Value + * + * where: + *      Addr-type register length (1,2 or 4 bytes) + *      Address   absolute address of the register + *      value     value to be stored in the register + */ + +#define __ASSEMBLY__ +#include <config.h> +#include "asm/arch/mx6-ddr.h" +#include "asm/arch/iomux.h" +#include "asm/arch/crm_regs.h" + +DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS4, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS5, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS6, 0x00000030 +DATA 4, MX6_IOM_DRAM_SDQS7, 0x00000030 + +DATA 4, MX6_IOM_DRAM_DQM0, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM1, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM2, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM3, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM4, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM5, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM6, 0x00020030 +DATA 4, MX6_IOM_DRAM_DQM7, 0x00020030 + +DATA 4, MX6_IOM_DRAM_CAS, 0x00020030 +DATA 4, MX6_IOM_DRAM_RAS, 0x00020030 +DATA 4, MX6_IOM_DRAM_SDCLK_0, 0x00020030 +DATA 4, MX6_IOM_DRAM_SDCLK_1, 0x00020030 + +DATA 4, MX6_IOM_DRAM_RESET, 0x00020030 +DATA 4, MX6_IOM_DRAM_SDCKE0, 0x00003000 +DATA 4, MX6_IOM_DRAM_SDCKE1, 0x00003000 + +DATA 4, MX6_IOM_DRAM_SDBA2, 0x00000000 + +DATA 4, MX6_IOM_DRAM_SDODT0, 0x00003030 +DATA 4, MX6_IOM_DRAM_SDODT1, 0x00003030 + +DATA 4, MX6_IOM_GRP_B0DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B1DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B2DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B3DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B4DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B5DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B6DS, 0x00000030 +DATA 4, MX6_IOM_GRP_B7DS, 0x00000030 +DATA 4, MX6_IOM_GRP_ADDDS, 0x00000030 + +/* (differential input) */ +DATA 4, MX6_IOM_DDRMODE_CTL, 0x00020000 +/* disable ddr pullups */ +DATA 4, MX6_IOM_GRP_DDRPKE, 0x00000000 +/* (differential input) */ +DATA 4, MX6_IOM_GRP_DDRMODE, 0x00020000 +/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ +DATA 4, MX6_IOM_GRP_CTLDS, 0x00000030 +/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ +DATA 4, MX6_IOM_GRP_DDR_TYPE, 0x000C0000 + +/* Read data DQ Byte0-3 delay */ +DATA 4, MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333 +DATA 4, MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333 +DATA 4, MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333 +DATA 4, MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333 +DATA 4, MX6_MMDC_P1_MPRDDQBY0DL, 0x33333333 +DATA 4, MX6_MMDC_P1_MPRDDQBY1DL, 0x33333333 +DATA 4, MX6_MMDC_P1_MPRDDQBY2DL, 0x33333333 +DATA 4, MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333 + +/* + * MDMISC	mirroring	interleaved (row/bank/col) + */ +DATA 4, MX6_MMDC_P0_MDMISC, 0x00081740 + +DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000 +DATA 4, MX6_MMDC_P0_MDCFG0, 0x555A7975 +DATA 4, MX6_MMDC_P0_MDCFG1, 0xFF538E64 +DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB +DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 +DATA 4, MX6_MMDC_P0_MDOR, 0x005B0E21 +DATA 4, MX6_MMDC_P0_MDOTC, 0x09444040 +DATA 4, MX6_MMDC_P0_MDPDC, 0x00025576 +DATA 4, MX6_MMDC_P0_MDASP, 0x00000017 +DATA 4, MX6_MMDC_P0_MDCTL, 0x83190000 +DATA 4, MX6_MMDC_P0_MDSCR, 0x04088032 +DATA 4, MX6_MMDC_P0_MDSCR, 0x0408803A +DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 +DATA 4, MX6_MMDC_P0_MDSCR, 0x0000803B +DATA 4, MX6_MMDC_P0_MDSCR, 0x00428031 +DATA 4, MX6_MMDC_P0_MDSCR, 0x00428039 +DATA 4, MX6_MMDC_P0_MDSCR, 0x09408030 +DATA 4, MX6_MMDC_P0_MDSCR, 0x09408038 +DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 +DATA 4, MX6_MMDC_P0_MDSCR, 0x04008048 +DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1380003 +DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1380003 +DATA 4, MX6_MMDC_P0_MDREF, 0x00005800 +DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00022227 +DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00022227 +DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x434B0350 +DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x034C0359 +DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x434B0350 +DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x03650348 +DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x4436383B +DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x39393341 +DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x35373933 +DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x48254A36 +DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x001F001F +DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x001F001F +DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x00440044 +DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x00440044 +DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 +DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 +DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 +DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 + +/* set the default clock gate to save power */ +DATA 4, CCM_CCGR0, 0x00C03F3F +DATA 4, CCM_CCGR1, 0x0030FC03 +DATA 4, CCM_CCGR2, 0x0FFFC000 +DATA 4, CCM_CCGR3, 0x3FF00000 +DATA 4, CCM_CCGR4, 0xFFFFF300 /* enable NAND/GPMI/BCH clocks */ +DATA 4, CCM_CCGR5, 0x0F0000C3 +DATA 4, CCM_CCGR6, 0x000003FF + +/* enable AXI cache for VDOA/VPU/IPU */ +DATA 4, MX6_IOMUXC_GPR4, 0xF00000CF +/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ +DATA 4, MX6_IOMUXC_GPR6, 0x007F007F +DATA 4, MX6_IOMUXC_GPR7, 0x007F007F diff --git a/board/freescale/titanium/titanium.c b/board/freescale/titanium/titanium.c new file mode 100644 index 000000000..5250522d9 --- /dev/null +++ b/board/freescale/titanium/titanium.c @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2013 Stefan Roese <sr@denx.de> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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 <common.h> +#include <asm/io.h> +#include <asm/arch/clock.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/iomux.h> +#include <asm/arch/mx6q_pins.h> +#include <asm/arch/crm_regs.h> +#include <asm/arch/sys_proto.h> +#include <asm/gpio.h> +#include <asm/imx-common/iomux-v3.h> +#include <asm/imx-common/mxc_i2c.h> +#include <asm/imx-common/boot_mode.h> +#include <mmc.h> +#include <fsl_esdhc.h> +#include <micrel.h> +#include <miiphy.h> +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |	\ +			PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) + +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP  | PAD_CTL_SPEED_LOW |	\ +			PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS) + +#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED	  |	\ +			PAD_CTL_DSE_40ohm   | PAD_CTL_HYS) + +#define I2C_PAD_CTRL	(PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |	\ +			 PAD_CTL_DSE_40ohm | PAD_CTL_HYS |		\ +			 PAD_CTL_ODE | PAD_CTL_SRE_FAST) + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE); + +	return 0; +} + +iomux_v3_cfg_t const uart1_pads[] = { +	MX6_PAD_SD3_DAT6__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL), +	MX6_PAD_SD3_DAT7__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL), +}; + +iomux_v3_cfg_t const uart2_pads[] = { +	MX6_PAD_EIM_D26__UART2_TXD | MUX_PAD_CTRL(UART_PAD_CTRL), +	MX6_PAD_EIM_D27__UART2_RXD | MUX_PAD_CTRL(UART_PAD_CTRL), +}; + +iomux_v3_cfg_t const uart4_pads[] = { +	MX6_PAD_CSI0_DAT12__UART4_TXD | MUX_PAD_CTRL(UART_PAD_CTRL), +	MX6_PAD_CSI0_DAT13__UART4_RXD | MUX_PAD_CTRL(UART_PAD_CTRL), +}; + +#define PC MUX_PAD_CTRL(I2C_PAD_CTRL) + +struct i2c_pads_info i2c_pad_info0 = { +	.scl = { +		.i2c_mode  = MX6_PAD_CSI0_DAT9__I2C1_SCL | PC, +		.gpio_mode = MX6_PAD_CSI0_DAT9__GPIO_5_27 | PC, +		.gp = IMX_GPIO_NR(5, 27) +	}, +	.sda = { +		 .i2c_mode = MX6_PAD_CSI0_DAT8__I2C1_SDA | PC, +		 .gpio_mode = MX6_PAD_CSI0_DAT8__GPIO_5_26 | PC, +		 .gp = IMX_GPIO_NR(5, 26) +	 } +}; + +struct i2c_pads_info i2c_pad_info2 = { +	.scl = { +		.i2c_mode = MX6_PAD_GPIO_3__I2C3_SCL | PC, +		.gpio_mode = MX6_PAD_GPIO_3__GPIO_1_3 | PC, +		.gp = IMX_GPIO_NR(1, 3) +	}, +	.sda = { +		 .i2c_mode = MX6_PAD_GPIO_16__I2C3_SDA | PC, +		 .gpio_mode = MX6_PAD_GPIO_16__GPIO_7_11 | PC, +		 .gp = IMX_GPIO_NR(7, 11) +	 } +}; + +iomux_v3_cfg_t const usdhc3_pads[] = { +	MX6_PAD_SD3_CLK__USDHC3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD3_CMD__USDHC3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD3_DAT5__GPIO_7_0    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */ +}; + +iomux_v3_cfg_t const enet_pads1[] = { +	MX6_PAD_ENET_MDIO__ENET_MDIO		| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_ENET_MDC__ENET_MDC		| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_TXC__ENET_RGMII_TXC	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_TD0__ENET_RGMII_TD0	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_TD1__ENET_RGMII_TD1	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_TD2__ENET_RGMII_TD2	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_TD3__ENET_RGMII_TD3	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_ENET_REF_CLK__ENET_TX_CLK	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	/* pin 35 - 1 (PHY_AD2) on reset */ +	MX6_PAD_RGMII_RXC__GPIO_6_30		| MUX_PAD_CTRL(NO_PAD_CTRL), +	/* pin 32 - 1 - (MODE0) all */ +	MX6_PAD_RGMII_RD0__GPIO_6_25		| MUX_PAD_CTRL(NO_PAD_CTRL), +	/* pin 31 - 1 - (MODE1) all */ +	MX6_PAD_RGMII_RD1__GPIO_6_27		| MUX_PAD_CTRL(NO_PAD_CTRL), +	/* pin 28 - 1 - (MODE2) all */ +	MX6_PAD_RGMII_RD2__GPIO_6_28		| MUX_PAD_CTRL(NO_PAD_CTRL), +	/* pin 27 - 1 - (MODE3) all */ +	MX6_PAD_RGMII_RD3__GPIO_6_29		| MUX_PAD_CTRL(NO_PAD_CTRL), +	/* pin 33 - 1 - (CLK125_EN) 125Mhz clockout enabled */ +	MX6_PAD_RGMII_RX_CTL__GPIO_6_24		| MUX_PAD_CTRL(NO_PAD_CTRL), +	/* pin 42 PHY nRST */ +	MX6_PAD_EIM_D23__GPIO_3_23		| MUX_PAD_CTRL(NO_PAD_CTRL), +}; + +iomux_v3_cfg_t const enet_pads2[] = { +	MX6_PAD_RGMII_RXC__ENET_RGMII_RXC	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_RD0__ENET_RGMII_RD0	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_RD1__ENET_RGMII_RD1	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_RD2__ENET_RGMII_RD2	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_RD3__ENET_RGMII_RD3	| MUX_PAD_CTRL(ENET_PAD_CTRL), +	MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL	| MUX_PAD_CTRL(ENET_PAD_CTRL), +}; + +iomux_v3_cfg_t nfc_pads[] = { +	MX6_PAD_NANDF_CLE__RAWNAND_CLE		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_ALE__RAWNAND_ALE		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_WP_B__RAWNAND_RESETN	| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_RB0__RAWNAND_READY0	| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_CS0__RAWNAND_CE0N		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_CS1__RAWNAND_CE1N		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_CS2__RAWNAND_CE2N		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_CS3__RAWNAND_CE3N		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_SD4_CMD__RAWNAND_RDN		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_SD4_CLK__RAWNAND_WRN		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D0__RAWNAND_D0		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D1__RAWNAND_D1		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D2__RAWNAND_D2		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D3__RAWNAND_D3		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D4__RAWNAND_D4		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D5__RAWNAND_D5		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D6__RAWNAND_D6		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_NANDF_D7__RAWNAND_D7		| MUX_PAD_CTRL(NO_PAD_CTRL), +	MX6_PAD_SD4_DAT0__RAWNAND_DQS		| MUX_PAD_CTRL(NO_PAD_CTRL), +}; + +static void setup_gpmi_nand(void) +{ +	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; + +	/* config gpmi nand iomux */ +	imx_iomux_v3_setup_multiple_pads(nfc_pads, +					 ARRAY_SIZE(nfc_pads)); + +	/* config gpmi and bch clock to 100 MHz */ +	clrsetbits_le32(&mxc_ccm->cs2cdr, +			MXC_CCM_CS2CDR_ENFC_CLK_PODF_MASK | +			MXC_CCM_CS2CDR_ENFC_CLK_PRED_MASK | +			MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK, +			MXC_CCM_CS2CDR_ENFC_CLK_PODF(0) | +			MXC_CCM_CS2CDR_ENFC_CLK_PRED(3) | +			MXC_CCM_CS2CDR_ENFC_CLK_SEL(3)); + +	/* enable gpmi and bch clock gating */ +	setbits_le32(&mxc_ccm->CCGR4, +		     MXC_CCM_CCGR4_RAWNAND_U_BCH_INPUT_APB_MASK | +		     MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_BCH_MASK | +		     MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_MASK | +		     MXC_CCM_CCGR4_RAWNAND_U_GPMI_INPUT_APB_MASK | +		     MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_OFFSET); + +	/* enable apbh clock gating */ +	setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK); +} + +static void setup_iomux_enet(void) +{ +	gpio_direction_output(IMX_GPIO_NR(3, 23), 0); +	gpio_direction_output(IMX_GPIO_NR(6, 30), 1); +	gpio_direction_output(IMX_GPIO_NR(6, 25), 1); +	gpio_direction_output(IMX_GPIO_NR(6, 27), 1); +	gpio_direction_output(IMX_GPIO_NR(6, 28), 1); +	gpio_direction_output(IMX_GPIO_NR(6, 29), 1); +	imx_iomux_v3_setup_multiple_pads(enet_pads1, ARRAY_SIZE(enet_pads1)); +	gpio_direction_output(IMX_GPIO_NR(6, 24), 1); + +	/* Need delay 10ms according to KSZ9021 spec */ +	udelay(1000 * 10); +	gpio_set_value(IMX_GPIO_NR(3, 23), 1); + +	imx_iomux_v3_setup_multiple_pads(enet_pads2, ARRAY_SIZE(enet_pads2)); +} + +static void setup_iomux_uart(void) +{ +	imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); +	imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); +	imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads)); +} + +#ifdef CONFIG_USB_EHCI_MX6 +int board_ehci_hcd_init(int port) +{ +	return 0; +} + +#endif + +#ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg usdhc_cfg[1] = { +	{ USDHC3_BASE_ADDR }, +}; + +int board_mmc_getcd(struct mmc *mmc) +{ +	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; + +	if (cfg->esdhc_base == USDHC3_BASE_ADDR) { +		gpio_direction_input(IMX_GPIO_NR(7, 0)); +		return !gpio_get_value(IMX_GPIO_NR(7, 0)); +	} + +	return 0; +} + +int board_mmc_init(bd_t *bis) +{ +	/* +	 * Only one USDHC controller on titianium +	 */ +	imx_iomux_v3_setup_multiple_pads(usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); +	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); + +	return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); +} +#endif + +int board_phy_config(struct phy_device *phydev) +{ +	/* min rx data delay */ +	ksz9021_phy_extended_write(phydev, +				   MII_KSZ9021_EXT_RGMII_RX_DATA_SKEW, 0x0); +	/* min tx data delay */ +	ksz9021_phy_extended_write(phydev, +				   MII_KSZ9021_EXT_RGMII_TX_DATA_SKEW, 0x0); +	/* max rx/tx clock delay, min rx/tx control */ +	ksz9021_phy_extended_write(phydev, +				   MII_KSZ9021_EXT_RGMII_CLOCK_SKEW, 0xf0f0); +	if (phydev->drv->config) +		phydev->drv->config(phydev); + +	return 0; +} + +int board_eth_init(bd_t *bis) +{ +	int ret; + +	setup_iomux_enet(); + +	ret = cpu_eth_init(bis); +	if (ret) +		printf("FEC MXC: %s:failed\n", __func__); + +	return 0; +} + +int board_early_init_f(void) +{ +	setup_iomux_uart(); + +	return 0; +} + +int board_init(void) +{ +	/* address of boot parameters */ +	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + +	setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info0); +	setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2); + +	setup_gpmi_nand(); + +	return 0; +} + +int checkboard(void) +{ +	puts("Board: Titanium\n"); + +	return 0; +} + +#ifdef CONFIG_CMD_BMODE +static const struct boot_mode board_boot_modes[] = { +	/* NAND */ +	{ "nand", MAKE_CFGVAL(0x80, 0x02, 0x00, 0x00) }, +	/* 4 bit bus width */ +	{ "mmc0", MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00) }, +	{ "mmc1", MAKE_CFGVAL(0x40, 0x38, 0x00, 0x00) }, +	{ NULL, 0 }, +}; +#endif + +int misc_init_r(void) +{ +#ifdef CONFIG_CMD_BMODE +	add_board_boot_modes(board_boot_modes); +#endif + +	return 0; +} |