diff options
Diffstat (limited to 'board')
68 files changed, 4415 insertions, 2009 deletions
| diff --git a/board/CarMediaLab/flea3/flea3.c b/board/CarMediaLab/flea3/flea3.c index f2b428426..af5338eb5 100644 --- a/board/CarMediaLab/flea3/flea3.c +++ b/board/CarMediaLab/flea3/flea3.c @@ -29,8 +29,7 @@  #include <asm/errno.h>  #include <asm/arch/imx-regs.h>  #include <asm/arch/crm_regs.h> -#include <asm/arch/mx35_pins.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx35.h>  #include <i2c.h>  #include <linux/types.h>  #include <asm/gpio.h> @@ -165,62 +164,68 @@ static void board_setup_sdram(void)  static void setup_iomux_uart3(void)  { -	mxc_request_iomux(MX35_PIN_RTS2, MUX_CONFIG_ALT7); -	mxc_request_iomux(MX35_PIN_CTS2, MUX_CONFIG_ALT7); +	static const iomux_v3_cfg_t uart3_pads[] = { +		MX35_PAD_RTS2__UART3_RXD_MUX, +		MX35_PAD_CTS2__UART3_TXD_MUX, +	}; + +	imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));  } +#define I2C_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN | PAD_CTL_ODE) +  static void setup_iomux_i2c(void)  { -	int pad; - -	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); +	static const iomux_v3_cfg_t i2c_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), -	mxc_iomux_set_pad(MX35_PIN_I2C1_CLK, pad); -	mxc_iomux_set_pad(MX35_PIN_I2C1_DAT, pad); +		NEW_PAD_CTRL(MX35_PAD_TX3_RX2__I2C3_SCL, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX35_PAD_TX2_RX3__I2C3_SDA, I2C_PAD_CTRL), +	}; -	mxc_request_iomux(MX35_PIN_TX3_RX2, MUX_CONFIG_ALT1); -	mxc_request_iomux(MX35_PIN_TX2_RX3, MUX_CONFIG_ALT1); - -	mxc_iomux_set_pad(MX35_PIN_TX3_RX2, pad); -	mxc_iomux_set_pad(MX35_PIN_TX2_RX3, pad); +	imx_iomux_v3_setup_multiple_pads(i2c_pads, ARRAY_SIZE(i2c_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));  }  static void setup_iomux_fec(void)  { -	/* 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); +	static const iomux_v3_cfg_t fec_pads[] = { +		MX35_PAD_FEC_TX_CLK__FEC_TX_CLK, +		MX35_PAD_FEC_RX_CLK__FEC_RX_CLK, +		MX35_PAD_FEC_RX_DV__FEC_RX_DV, +		MX35_PAD_FEC_COL__FEC_COL, +		MX35_PAD_FEC_RDATA0__FEC_RDATA_0, +		MX35_PAD_FEC_TDATA0__FEC_TDATA_0, +		MX35_PAD_FEC_TX_EN__FEC_TX_EN, +		MX35_PAD_FEC_MDC__FEC_MDC, +		MX35_PAD_FEC_MDIO__FEC_MDIO, +		MX35_PAD_FEC_TX_ERR__FEC_TX_ERR, +		MX35_PAD_FEC_RX_ERR__FEC_RX_ERR, +		MX35_PAD_FEC_CRS__FEC_CRS, +		MX35_PAD_FEC_RDATA1__FEC_RDATA_1, +		MX35_PAD_FEC_TDATA1__FEC_TDATA_1, +		MX35_PAD_FEC_RDATA2__FEC_RDATA_2, +		MX35_PAD_FEC_TDATA2__FEC_TDATA_2, +		MX35_PAD_FEC_RDATA3__FEC_RDATA_3, +		MX35_PAD_FEC_TDATA3__FEC_TDATA_3, +	}; +	/* setup pins for FEC */ +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  int board_early_init_f(void) @@ -229,7 +234,7 @@ int board_early_init_f(void)  		(struct ccm_regs *)IMX_CCM_BASE;  	/* setup GPIO3_1 to set HighVCore signal */ -	mxc_request_iomux(MX35_PIN_ATA_DA1, MUX_CONFIG_ALT5); +	imx_iomux_v3_setup_pad(MX35_PAD_ATA_DA1__GPIO3_1);  	gpio_direction_output(65, 1);  	/* initialize PLL and clock configuration */ diff --git a/board/Seagate/goflexhome/Makefile b/board/Seagate/goflexhome/Makefile new file mode 100644 index 000000000..9948fe22d --- /dev/null +++ b/board/Seagate/goflexhome/Makefile @@ -0,0 +1,51 @@ +# +# Copyright (C) 2013 Suriyan Ramasami <suriyan.r@gmail.com> +# +# Based on dockstar/Makefile originally written by +# Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu> +# +# Based on sheevaplug/Makefile originally written by +# Prafulla Wadaskar <prafulla@marvell.com> +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS	:= goflexhome.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/Seagate/goflexhome/goflexhome.c b/board/Seagate/goflexhome/goflexhome.c new file mode 100644 index 000000000..17c19053f --- /dev/null +++ b/board/Seagate/goflexhome/goflexhome.c @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2013 Suriyan Ramasami <suriyan.r@gmail.com> + * + * Based on dockstar.c originally written by + * Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu> + * + * Based on sheevaplug.c originally written by + * Prafulla Wadaskar <prafulla@marvell.com> + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <common.h> +#include <miiphy.h> +#include <asm/arch/kirkwood.h> +#include <asm/arch/mpp.h> +#include <asm/arch/cpu.h> +#include <asm/io.h> + +DECLARE_GLOBAL_DATA_PTR; + +int board_early_init_f(void) +{ +	/* Multi-Purpose Pins Functionality configuration */ +	static const u32 kwmpp_config[] = { +		MPP0_NF_IO2, +		MPP1_NF_IO3, +		MPP2_NF_IO4, +		MPP3_NF_IO5, +		MPP4_NF_IO6, +		MPP5_NF_IO7, +		MPP6_SYSRST_OUTn, +		MPP7_GPO, +		MPP8_UART0_RTS, +		MPP9_UART0_CTS, +		MPP10_UART0_TXD, +		MPP11_UART0_RXD, +		MPP12_SD_CLK, +		MPP13_SD_CMD, +		MPP14_SD_D0, +		MPP15_SD_D1, +		MPP16_SD_D2, +		MPP17_SD_D3, +		MPP18_NF_IO0, +		MPP19_NF_IO1, +		MPP20_GPIO, +		MPP21_GPIO, +		MPP22_GPIO, +		MPP23_GPIO, +		MPP24_GPIO, +		MPP25_GPIO, +		MPP26_GPIO, +		MPP27_GPIO, +		MPP28_GPIO, +		MPP29_TSMP9, +		MPP30_GPIO, +		MPP31_GPIO, +		MPP32_GPIO, +		MPP33_GPIO, +		MPP34_GPIO, +		MPP35_GPIO, +		MPP36_GPIO, +		MPP37_GPIO, +		MPP38_GPIO, +		MPP39_GPIO, +		MPP40_GPIO, +		MPP41_GPIO, +		MPP42_GPIO, +		MPP43_GPIO, +		MPP44_GPIO, +		MPP45_GPIO, +		MPP46_GPIO, +		MPP47_GPIO, +		MPP48_GPIO, +		MPP49_GPIO, +		0 +	}; + +	/* +	 * default gpio configuration +	 * There are maximum 64 gpios controlled through 2 sets of registers +	 * the  below configuration configures mainly initial LED status +	 */ +	kw_config_gpio(GOFLEXHOME_OE_VAL_LOW, +		       GOFLEXHOME_OE_VAL_HIGH, +		       GOFLEXHOME_OE_LOW, GOFLEXHOME_OE_HIGH); +	kirkwood_mpp_conf(kwmpp_config, NULL); +	return 0; +} + +int board_init(void) +{ +	/* +	 * arch number of board +	 */ +	gd->bd->bi_arch_number = MACH_TYPE_GOFLEXHOME; + +	/* address of boot parameters */ +	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100; + +	return 0; +} + +#ifdef CONFIG_RESET_PHY_R +/* Configure and enable MV88E1116 PHY */ +void reset_phy(void) +{ +	u16 reg; +	u16 devadr; +	char *name = "egiga0"; + +	if (miiphy_set_current_dev(name)) +		return; + +	/* command to read PHY dev address */ +	if (miiphy_read(name, 0xEE, 0xEE, (u16 *)&devadr)) { +		printf("Err..%s could not read PHY dev address\n", +		       __func__); +		return; +	} + +	/* +	 * Enable RGMII delay on Tx and Rx for CPU port +	 * Ref: sec 4.7.2 of chip datasheet +	 */ +	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2); +	miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, ®); +	reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL); +	miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg); +	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0); + +	/* reset the phy */ +	miiphy_reset(name, devadr); + +	printf("88E1116 Initialized on %s\n", name); +} +#endif /* CONFIG_RESET_PHY_R */ + +#define GREEN_LED	(1 << 14) +#define ORANGE_LED	(1 << 15) +#define BOTH_LEDS	(GREEN_LED | ORANGE_LED) +#define NEITHER_LED	0 + +static void set_leds(u32 leds, u32 blinking) +{ +	struct kwgpio_registers *r; +	u32 oe; +	u32 bl; + +	r = (struct kwgpio_registers *)KW_GPIO1_BASE; +	oe = readl(&r->oe) | BOTH_LEDS; +	writel(oe & ~leds, &r->oe);	/* active low */ +	bl = readl(&r->blink_en) & ~BOTH_LEDS; +	writel(bl | blinking, &r->blink_en); +} + +void show_boot_progress(int val) +{ +	switch (val) { +	case BOOTSTAGE_ID_RUN_OS:		/* booting Linux */ +		set_leds(BOTH_LEDS, NEITHER_LED); +		break; +	case BOOTSTAGE_ID_NET_ETH_START:	/* Ethernet initialization */ +		set_leds(GREEN_LED, GREEN_LED); +		break; +	default: +		if (val < 0)	/* error */ +			set_leds(ORANGE_LED, ORANGE_LED); +		break; +	} +} diff --git a/board/Seagate/goflexhome/kwbimage.cfg b/board/Seagate/goflexhome/kwbimage.cfg new file mode 100644 index 000000000..e984d7224 --- /dev/null +++ b/board/Seagate/goflexhome/kwbimage.cfg @@ -0,0 +1,168 @@ +# +# Copyright (C) 2013 Suriyan Ramasami <suriyan.r@gmail.com> +# +# Based on dockstar/kwbimage.cfg originally written by +# Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu> +# +# Based on sheevaplug/kwbimage.cfg originally written by +# Prafulla Wadaskar <prafulla@marvell.com> +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA +# +# Refer docs/README.kwimage for more details about how-to configure +# and create kirkwood boot image +# + +# Boot Media configurations +BOOT_FROM	nand +NAND_ECC_MODE	default +NAND_PAGE_SIZE	0x0800 + +# SOC registers configuration using bootrom header extension +# Maximum KWBIMAGE_MAX_CONFIG configurations allowed + +# Configure RGMII-0 interface pad voltage to 1.8V +DATA 0xFFD100e0 0x1b1b1b9b + +#Dram initalization for SINGLE x16 CL=5 @ 400MHz +DATA 0xFFD01400 0x43000c30	# DDR Configuration register +# bit13-0:  0xc30 (3120 DDR2 clks refresh rate) +# bit23-14: zero +# bit24: 1= enable exit self refresh mode on DDR access +# bit25: 1 required +# bit29-26: zero +# bit31-30: 01 + +DATA 0xFFD01404 0x37543000	# DDR Controller Control Low +# bit 4:    0=addr/cmd in smame cycle +# bit 5:    0=clk is driven during self refresh, we don't care for APX +# bit 6:    0=use recommended falling edge of clk for addr/cmd +# bit14:    0=input buffer always powered up +# bit18:    1=cpu lock transaction enabled +# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0 +# bit27-24: 7= CL+2, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM +# bit30-28: 3 required +# bit31:    0=no additional STARTBURST delay + +DATA 0xFFD01408 0x22125451	# DDR Timing (Low) (active cycles value +1) +# bit3-0:   TRAS lsbs +# bit7-4:   TRCD +# bit11- 8: TRP +# bit15-12: TWR +# bit19-16: TWTR +# bit20:    TRAS msb +# bit23-21: 0x0 +# bit27-24: TRRD +# bit31-28: TRTP + +DATA 0xFFD0140C 0x00000a33	#  DDR Timing (High) +# bit6-0:   TRFC +# bit8-7:   TR2R +# bit10-9:  TR2W +# bit12-11: TW2W +# bit31-13: zero required + +DATA 0xFFD01410 0x0000000d	#  DDR Address Control +# bit1-0:   00, Cs0width=x8 +# bit3-2:   11, Cs0size=1Gb +# bit5-4:   00, Cs1width=nonexistent +# bit7-6:   00, Cs1size =nonexistent +# bit9-8:   00, Cs2width=nonexistent +# bit11-10: 00, Cs2size =nonexistent +# bit13-12: 00, Cs3width=nonexistent +# bit15-14: 00, Cs3size =nonexistent +# bit16:    0,  Cs0AddrSel +# bit17:    0,  Cs1AddrSel +# bit18:    0,  Cs2AddrSel +# bit19:    0,  Cs3AddrSel +# bit31-20: 0 required + +DATA 0xFFD01414 0x00000000	#  DDR Open Pages Control +# bit0:    0,  OpenPage enabled +# bit31-1: 0 required + +DATA 0xFFD01418 0x00000000	#  DDR Operation +# bit3-0:   0x0, DDR cmd +# bit31-4:  0 required + +DATA 0xFFD0141C 0x00000C52	#  DDR Mode +# bit2-0:   2, BurstLen=2 required +# bit3:     0, BurstType=0 required +# bit6-4:   4, CL=5 +# bit7:     0, TestMode=0 normal +# bit8:     0, DLL reset=0 normal +# bit11-9:  6, auto-precharge write recovery ???????????? +# bit12:    0, PD must be zero +# bit31-13: 0 required + +DATA 0xFFD01420 0x00000040	#  DDR Extended Mode +# bit0:    0,  DDR DLL enabled +# bit1:    0,  DDR drive strenght normal +# bit2:    0,  DDR ODT control lsd (disabled) +# bit5-3:  000, required +# bit6:    1,  DDR ODT control msb, (disabled) +# bit9-7:  000, required +# bit10:   0,  differential DQS enabled +# bit11:   0, required +# bit12:   0, DDR output buffer enabled +# bit31-13: 0 required + +DATA 0xFFD01424 0x0000F17F	#  DDR Controller Control High +# bit2-0:  111, required +# bit3  :  1  , MBUS Burst Chop disabled +# bit6-4:  111, required +# bit7  :  0 +# bit8  :  1  , add writepath sample stage, must be 1 for DDR freq >= 300MHz +# bit9  :  0  , no half clock cycle addition to dataout +# bit10 :  0  , 1/4 clock cycle skew enabled for addr/ctl signals +# bit11 :  0  , 1/4 clock cycle skew disabled for write mesh +# bit15-12: 1111 required +# bit31-16: 0    required + +DATA 0xFFD01428 0x00085520	# DDR2 ODT Read Timing (default values) +DATA 0xFFD0147C 0x00008552	# DDR2 ODT Write Timing (default values) + +DATA 0xFFD01500 0x00000000	# CS[0]n Base address to 0x0 +DATA 0xFFD01504 0x07FFFFF1	# CS[0]n Size +# bit0:    1,  Window enabled +# bit1:    0,  Write Protect disabled +# bit3-2:  00, CS0 hit selected +# bit23-4: ones, required +# bit31-24: 0x07, Size (i.e. 128MB) + +DATA 0xFFD01508 0x10000000	# CS[1]n Base address to 256Mb +DATA 0xFFD0150C 0x00000000	# CS[1]n Size, window disabled + +DATA 0xFFD01514 0x00000000	# CS[2]n Size, window disabled +DATA 0xFFD0151C 0x00000000	# CS[3]n Size, window disabled + +DATA 0xFFD01494 0x00030000	#  DDR ODT Control (Low) +DATA 0xFFD01498 0x00000000	#  DDR ODT Control (High) +# bit1-0:  00, ODT0 controlled by ODT Control (low) register above +# bit3-2:  01, ODT1 active NEVER! +# bit31-4: zero, required + +DATA 0xFFD0149C 0x0000E803	# CPU ODT Control +DATA 0xFFD01480 0x00000001	# DDR Initialization Control +#bit0=1, enable DDR init upon this register write + +# End of Header extension +DATA 0x0 0x0 diff --git a/board/armltd/vexpress/Makefile b/board/armltd/vexpress/Makefile index 87495901f..6719f3d44 100644 --- a/board/armltd/vexpress/Makefile +++ b/board/armltd/vexpress/Makefile @@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(BOARD).o -COBJS	:= ca9x4_ct_vxp.o +COBJS	:= vexpress_common.o  SRCS	:= $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS)) diff --git a/board/armltd/vexpress/ca9x4_ct_vxp.c b/board/armltd/vexpress/vexpress_common.c index d5e109ec0..2c54869e2 100644 --- a/board/armltd/vexpress/ca9x4_ct_vxp.c +++ b/board/armltd/vexpress/vexpress_common.c @@ -45,8 +45,7 @@  static ulong timestamp;  static ulong lastdec; -static struct wdt *wdt_base = (struct wdt *)WDT_BASE; -static struct systimer *systimer_base = (struct systimer *)SYSTIMER_BASE; +static struct systimer *systimer_base = (struct systimer *)V2M_TIMER01;  static struct sysctrl *sysctrl_base = (struct sysctrl *)SCTL_BASE;  static void flash__init(void); @@ -166,20 +165,38 @@ static void vexpress_timer_init(void)  	 */  	writel(SYSTIMER_RELOAD, &systimer_base->timer0load);  	writel(SYSTIMER_RELOAD, &systimer_base->timer0value); -	writel(SYSTIMER_EN | SYSTIMER_32BIT | \ -	       readl(&systimer_base->timer0control), \ +	writel(SYSTIMER_EN | SYSTIMER_32BIT | +	       readl(&systimer_base->timer0control),  	       &systimer_base->timer0control);  	reset_timer_masked();  } +int v2m_cfg_write(u32 devfn, u32 data) +{ +	/* Configuration interface broken? */ +	u32 val; + +	devfn |= SYS_CFG_START | SYS_CFG_WRITE; + +	val = readl(V2M_SYS_CFGSTAT); +	writel(val & ~SYS_CFG_COMPLETE, V2M_SYS_CFGSTAT); + +	writel(data, V2M_SYS_CFGDATA); +	writel(devfn, V2M_SYS_CFGCTRL); + +	do { +		val = readl(V2M_SYS_CFGSTAT); +	} while (val == 0); + +	return !!(val & SYS_CFG_ERR); +} +  /* Use the ARM Watchdog System to cause reset */  void reset_cpu(ulong addr)  { -	writeb(WDT_EN, &wdt_base->wdogcontrol); -	writel(WDT_RESET_LOAD, &wdt_base->wdogload); -	while (1) -		; +	if (v2m_cfg_write(SYS_CFG_REBOOT | SYS_CFG_SITE_MB, 0)) +		printf("Unable to reboot\n");  }  /* @@ -251,7 +268,7 @@ unsigned long long get_ticks(void)  	return get_timer(0);  } -ulong get_tbclk (void) +ulong get_tbclk(void)  {  	return (ulong)CONFIG_SYS_HZ;  } diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c index 3aa394a4b..8d3fc75cd 100644 --- a/board/atmel/at91sam9260ek/at91sam9260ek.c +++ b/board/atmel/at91sam9260ek/at91sam9260ek.c @@ -30,6 +30,7 @@  #include <asm/arch/at91_pmc.h>  #include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h> +#include <atmel_mci.h>  #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)  # include <net.h> @@ -143,6 +144,15 @@ static void at91sam9260ek_macb_hw_init(void)  }  #endif +#ifdef CONFIG_GENERIC_ATMEL_MCI +int board_mmc_init(bd_t *bd) +{ +	at91_mci_hw_init(); + +	return atmel_mci_init((void *)ATMEL_BASE_MCI); +} +#endif +  int board_early_init_f(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; @@ -157,18 +167,6 @@ int board_early_init_f(void)  int board_init(void)  { -#ifdef CONFIG_AT91SAM9G20EK_2MMC -	/* arch number of AT91SAM9G20EK_2MMC-Board */ -	gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G20EK_2MMC; -#else -#ifdef CONFIG_AT91SAM9G20EK -	/* arch number of AT91SAM9G20EK-Board */ -	gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G20EK; -#else -	/* arch number of AT91SAM9260EK-Board */ -	gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9260EK; -#endif -#endif  	/* adress of boot parameters */  	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; diff --git a/board/atmel/at91sam9n12ek/Makefile b/board/atmel/at91sam9n12ek/Makefile new file mode 100644 index 000000000..3aa67d5eb --- /dev/null +++ b/board/atmel/at91sam9n12ek/Makefile @@ -0,0 +1,52 @@ +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop <stelian.pop@leadtechdesign.com> +# Lead Tech Design <www.leadtechdesign.com> +# +# (C) Copyright 2013 +# Josh Wu <josh.wu@atmel.com> +# Atmel corporation <www.atmel.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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS-y	+= at91sam9n12ek.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS-y:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS-y)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/atmel/at91sam9n12ek/at91sam9n12ek.c b/board/atmel/at91sam9n12ek/at91sam9n12ek.c new file mode 100644 index 000000000..8752794c8 --- /dev/null +++ b/board/atmel/at91sam9n12ek/at91sam9n12ek.c @@ -0,0 +1,228 @@ +/* + * (C) Copyright 2013 Atmel Corporation + * Josh Wu <josh.wu@atmel.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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/at91sam9x5_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/at91_pio.h> +#include <asm/arch/clk.h> +#include <lcd.h> +#include <atmel_hlcdc.h> +#include <atmel_mci.h> + +#ifdef CONFIG_LCD_INFO +#include <nand.h> +#include <version.h> +#endif + +DECLARE_GLOBAL_DATA_PTR; + +/* ------------------------------------------------------------------------- */ +/* + * Miscelaneous platform dependent initialisations + */ +#ifdef CONFIG_NAND_ATMEL +static void at91sam9n12ek_nand_hw_init(void) +{ +	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; +	struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; +	unsigned long csa; + +	/* Assign CS3 to NAND/SmartMedia Interface */ +	csa = readl(&matrix->ebicsa); +	csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA; +	/* Configure databus */ +	csa &= ~AT91_MATRIX_NFD0_ON_D16; /* nandflash connect to D0~D15 */ +	/* Configure IO drive */ +	csa &= ~AT91_MATRIX_EBI_EBI_IOSR_NORMAL; + +	writel(csa, &matrix->ebicsa); + +	/* Configure SMC CS3 for NAND/SmartMedia */ +	writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) | +		AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0), +		&smc->cs[3].setup); +	writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(5) | +		AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(6), +		&smc->cs[3].pulse); +	writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(7), +		&smc->cs[3].cycle); +	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | +		AT91_SMC_MODE_EXNW_DISABLE | +#ifdef CONFIG_SYS_NAND_DBW_16 +		AT91_SMC_MODE_DBW_16 | +#else /* CONFIG_SYS_NAND_DBW_8 */ +		AT91_SMC_MODE_DBW_8 | +#endif +		AT91_SMC_MODE_TDF_CYCLE(1), +		&smc->cs[3].mode); + +	/* Configure RDY/BSY pin */ +	at91_set_pio_input(AT91_PIO_PORTD, 5, 1); + +	/* Configure ENABLE pin for NandFlash */ +	at91_set_pio_output(AT91_PIO_PORTD, 4, 1); + +	at91_set_a_periph(AT91_PIO_PORTD, 0, 1);    /* NAND OE */ +	at91_set_a_periph(AT91_PIO_PORTD, 1, 1);    /* NAND WE */ +	at91_set_a_periph(AT91_PIO_PORTD, 2, 1);    /* ALE */ +	at91_set_a_periph(AT91_PIO_PORTD, 3, 1);    /* CLE */ +} +#endif + +#ifdef CONFIG_LCD +vidinfo_t panel_info = { +	.vl_col = 480, +	.vl_row = 272, +	.vl_clk = 9000000, +	.vl_bpix = LCD_BPP, +	.vl_sync = 0, +	.vl_tft = 1, +	.vl_hsync_len = 5, +	.vl_left_margin = 8, +	.vl_right_margin = 43, +	.vl_vsync_len = 10, +	.vl_upper_margin = 4, +	.vl_lower_margin = 12, +	.mmio = ATMEL_BASE_LCDC, +}; + +void lcd_enable(void) +{ +	at91_set_pio_output(AT91_PIO_PORTC, 25, 0);	/* power up */ +} + +void lcd_disable(void) +{ +	at91_set_pio_output(AT91_PIO_PORTC, 25, 1);	/* power down */ +} + +#ifdef CONFIG_LCD_INFO +void lcd_show_board_info(void) +{ +	ulong dram_size, nand_size; +	int i; +	char temp[32]; + +	lcd_printf("%s\n", U_BOOT_VERSION); +	lcd_printf("ATMEL Corp\n"); +	lcd_printf("at91@atmel.com\n"); +	lcd_printf("%s CPU at %s MHz\n", +		ATMEL_CPU_NAME, +		strmhz(temp, get_cpu_clk_rate())); + +	dram_size = 0; +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) +		dram_size += gd->bd->bi_dram[i].size; +	nand_size = 0; +	for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++) +		nand_size += nand_info[i].size; +	lcd_printf("  %ld MB SDRAM, %ld MB NAND\n", +		dram_size >> 20, +		nand_size >> 20); +} +#endif /* CONFIG_LCD_INFO */ +#endif /* CONFIG_LCD */ + +/* SPI chip select control */ +#ifdef CONFIG_ATMEL_SPI +#include <spi.h> +int spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ +	return bus == 0 && cs < 2; +} + +void spi_cs_activate(struct spi_slave *slave) +{ +	switch (slave->cs) { +	case 0: +		at91_set_pio_output(AT91_PIO_PORTA, 14, 0); +		break; +	case 1: +		at91_set_pio_output(AT91_PIO_PORTA, 7, 0); +		break; +	} +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ +	switch (slave->cs) { +	case 0: +		at91_set_pio_output(AT91_PIO_PORTA, 14, 1); +		break; +	case 1: +		at91_set_pio_output(AT91_PIO_PORTA, 7, 1); +		break; +	} +} +#endif /* CONFIG_ATMEL_SPI */ + +#ifdef CONFIG_GENERIC_ATMEL_MCI +int board_mmc_init(bd_t *bd) +{ +	at91_mci_hw_init(); + +	return atmel_mci_init((void *)ATMEL_BASE_HSMCI0); +} +#endif + +int board_early_init_f(void) +{ +	/* Enable clocks for all PIOs */ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; +	writel((1 << ATMEL_ID_PIOAB) | (1 << ATMEL_ID_PIOCD), &pmc->pcer); + +	at91_seriald_hw_init(); +	return 0; +} + +int board_init(void) +{ +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +#ifdef CONFIG_NAND_ATMEL +	at91sam9n12ek_nand_hw_init(); +#endif + +#ifdef CONFIG_ATMEL_SPI +	at91_spi0_hw_init(1 << 0); +#endif + +#ifdef CONFIG_LCD +	at91_lcd_hw_init(); +#endif + +	return 0; +} + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, +					CONFIG_SYS_SDRAM_SIZE); +	return 0; +} diff --git a/board/atmel/sama5d3xek/Makefile b/board/atmel/sama5d3xek/Makefile new file mode 100644 index 000000000..45d24d23d --- /dev/null +++ b/board/atmel/sama5d3xek/Makefile @@ -0,0 +1,51 @@ +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop <stelian@popies.net> +# Lead Tech Design <www.leadtechdesign.com> +# +# (C) Copyright 2013 +# Bo Shen <voice.shen@atmel.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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS-y += sama5d3xek.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS-y:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS-y)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/atmel/sama5d3xek/sama5d3xek.c b/board/atmel/sama5d3xek/sama5d3xek.c new file mode 100644 index 000000000..541296dbd --- /dev/null +++ b/board/atmel/sama5d3xek/sama5d3xek.c @@ -0,0 +1,275 @@ +/* + * Copyright (C) 2012 - 2013 Atmel Corporation + * Bo Shen <voice.shen@atmel.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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <mmc.h> +#include <asm/io.h> +#include <asm/arch/sama5d3_smc.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/clk.h> +#include <lcd.h> +#include <atmel_lcdc.h> +#include <atmel_mci.h> +#include <net.h> +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* ------------------------------------------------------------------------- */ +/* + * Miscelaneous platform dependent initialisations + */ + +#ifdef CONFIG_NAND_ATMEL +void sama5d3xek_nand_hw_init(void) +{ +	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; + +	at91_periph_clk_enable(ATMEL_ID_SMC); + +	/* Configure SMC CS3 for NAND/SmartMedia */ +	writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(1) | +	       AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(1), +	       &smc->cs[3].setup); +	writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(5) | +	       AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(5), +	       &smc->cs[3].pulse); +	writel(AT91_SMC_CYCLE_NWE(8) | AT91_SMC_CYCLE_NRD(8), +	       &smc->cs[3].cycle); +	writel(AT91_SMC_TIMINGS_TCLR(3) | AT91_SMC_TIMINGS_TADL(10) | +	       AT91_SMC_TIMINGS_TAR(3)  | AT91_SMC_TIMINGS_TRR(4)   | +	       AT91_SMC_TIMINGS_TWB(5)  | AT91_SMC_TIMINGS_RBNSEL(3)| +	       AT91_SMC_TIMINGS_NFSEL(1), &smc->cs[3].timings); +	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | +	       AT91_SMC_MODE_EXNW_DISABLE | +#ifdef CONFIG_SYS_NAND_DBW_16 +	       AT91_SMC_MODE_DBW_16 | +#else /* CONFIG_SYS_NAND_DBW_8 */ +	       AT91_SMC_MODE_DBW_8 | +#endif +	       AT91_SMC_MODE_TDF_CYCLE(3), +	       &smc->cs[3].mode); +} +#endif + +#ifdef CONFIG_CMD_USB +static void sama5d3xek_usb_hw_init(void) +{ +	at91_set_pio_output(AT91_PIO_PORTD, 25, 0); +	at91_set_pio_output(AT91_PIO_PORTD, 26, 0); +	at91_set_pio_output(AT91_PIO_PORTD, 27, 0); +} +#endif + +#ifdef CONFIG_GENERIC_ATMEL_MCI +static void sama5d3xek_mci_hw_init(void) +{ +	at91_mci_hw_init(); + +	at91_set_pio_output(AT91_PIO_PORTB, 10, 0);	/* MCI0 Power */ +} +#endif + +#ifdef CONFIG_LCD +vidinfo_t panel_info = { +	.vl_col = 800, +	.vl_row = 480, +	.vl_clk = 24000000, +	.vl_sync = ATMEL_LCDC_INVLINE_NORMAL | ATMEL_LCDC_INVFRAME_NORMAL, +	.vl_bpix = LCD_BPP, +	.vl_tft = 1, +	.vl_hsync_len = 128, +	.vl_left_margin = 64, +	.vl_right_margin = 64, +	.vl_vsync_len = 2, +	.vl_upper_margin = 22, +	.vl_lower_margin = 21, +	.mmio = ATMEL_BASE_LCDC, +}; + +void lcd_enable(void) +{ +} + +void lcd_disable(void) +{ +} + +static void sama5d3xek_lcd_hw_init(void) +{ +	gd->fb_base = CONFIG_SAMA5D3_LCD_BASE; + +	/* The higher 8 bit of LCD is board related */ +	at91_set_c_periph(AT91_PIO_PORTC, 14, 0);	/* LCDD16 */ +	at91_set_c_periph(AT91_PIO_PORTC, 13, 0);	/* LCDD17 */ +	at91_set_c_periph(AT91_PIO_PORTC, 12, 0);	/* LCDD18 */ +	at91_set_c_periph(AT91_PIO_PORTC, 11, 0);	/* LCDD19 */ +	at91_set_c_periph(AT91_PIO_PORTC, 10, 0);	/* LCDD20 */ +	at91_set_c_periph(AT91_PIO_PORTC, 15, 0);	/* LCDD21 */ +	at91_set_c_periph(AT91_PIO_PORTE, 27, 0);	/* LCDD22 */ +	at91_set_c_periph(AT91_PIO_PORTE, 28, 0);	/* LCDD23 */ + +	/* Configure lower 16 bit of LCD and enable clock */ +	at91_lcd_hw_init(); +} + +#ifdef CONFIG_LCD_INFO +#include <nand.h> +#include <version.h> + +void lcd_show_board_info(void) +{ +	ulong dram_size, nand_size; +	int i; +	char temp[32]; + +	lcd_printf("%s\n", U_BOOT_VERSION); +	lcd_printf("(C) 2013 ATMEL Corp\n"); +	lcd_printf("at91@atmel.com\n"); +	lcd_printf("%s CPU at %s MHz\n", get_cpu_name(), +		   strmhz(temp, get_cpu_clk_rate())); + +	dram_size = 0; +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) +		dram_size += gd->bd->bi_dram[i].size; + +	nand_size = 0; +#ifdef CONFIG_NAND_ATMEL +	for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++) +		nand_size += nand_info[i].size; +#endif +	lcd_printf("%ld MB SDRAM, %ld MB NAND\n", +		   dram_size >> 20, nand_size >> 20); +} +#endif /* CONFIG_LCD_INFO */ +#endif /* CONFIG_LCD */ + +int board_early_init_f(void) +{ +	at91_seriald_hw_init(); + +	return 0; +} + +int board_init(void) +{ +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +#ifdef CONFIG_NAND_ATMEL +	sama5d3xek_nand_hw_init(); +#endif +#ifdef CONFIG_CMD_USB +	sama5d3xek_usb_hw_init(); +#endif +#ifdef CONFIG_GENERIC_ATMEL_MCI +	sama5d3xek_mci_hw_init(); +#endif +#ifdef CONFIG_ATMEL_SPI +	at91_spi0_hw_init(1 << 0); +#endif +#ifdef CONFIG_MACB +	if (has_emac()) +		at91_macb_hw_init(); +#endif +#ifdef CONFIG_LCD +	if (has_lcdc()) +		sama5d3xek_lcd_hw_init(); +#endif +	return 0; +} + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, +				    CONFIG_SYS_SDRAM_SIZE); +	return 0; +} + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; + +#ifdef CONFIG_MACB +	if (has_emac()) +		rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC, 0x00); +#endif + +	return rc; +} + +#ifdef CONFIG_GENERIC_ATMEL_MCI +int board_mmc_init(bd_t *bis) +{ +	int rc = 0; + +	rc = atmel_mci_init((void *)ATMEL_BASE_MCI0); + +	return rc; +} +#endif + +/* SPI chip select control */ +#ifdef CONFIG_ATMEL_SPI +#include <spi.h> + +int spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ +	return bus == 0 && cs < 4; +} + +void spi_cs_activate(struct spi_slave *slave) +{ +	switch (slave->cs) { +	case 0: +		at91_set_pio_output(AT91_PIO_PORTD, 13, 0); +	case 1: +		at91_set_pio_output(AT91_PIO_PORTD, 14, 0); +	case 2: +		at91_set_pio_output(AT91_PIO_PORTD, 15, 0); +	case 3: +		at91_set_pio_output(AT91_PIO_PORTD, 16, 0); +	default: +		break; +	} +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ +	switch (slave->cs) { +	case 0: +		at91_set_pio_output(AT91_PIO_PORTD, 13, 1); +	case 1: +		at91_set_pio_output(AT91_PIO_PORTD, 14, 1); +	case 2: +		at91_set_pio_output(AT91_PIO_PORTD, 15, 1); +	case 3: +		at91_set_pio_output(AT91_PIO_PORTD, 16, 1); +	default: +		break; +	} +} +#endif /* CONFIG_ATMEL_SPI */ diff --git a/board/boundary/nitrogen6x/clocks.cfg b/board/boundary/nitrogen6x/clocks.cfg index e7d1f86cd..0a3b47b5d 100644 --- a/board/boundary/nitrogen6x/clocks.cfg +++ b/board/boundary/nitrogen6x/clocks.cfg @@ -44,3 +44,14 @@ 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 + +/* + * 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, CCM_CCOSR, 0x000000fb diff --git a/board/boundary/nitrogen6x/nitrogen6x.c b/board/boundary/nitrogen6x/nitrogen6x.c index cc071d6d3..e155556ce 100644 --- a/board/boundary/nitrogen6x/nitrogen6x.c +++ b/board/boundary/nitrogen6x/nitrogen6x.c @@ -47,40 +47,34 @@  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) -#define WEAK_PULLUP	(PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |		\ -	PAD_CTL_DSE_40ohm | PAD_CTL_HYS |			\ +#define WEAK_PULLUP	(PAD_CTL_PUS_100K_UP |			\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |	\  	PAD_CTL_SRE_SLOW) -#define WEAK_PULLDOWN	(PAD_CTL_PKE | PAD_CTL_PUE |		\ -	PAD_CTL_PUS_100K_DOWN | PAD_CTL_SPEED_MED |		\ -	PAD_CTL_DSE_40ohm | PAD_CTL_HYS |			\ -	PAD_CTL_SRE_SLOW) +#define WEAK_PULLDOWN	(PAD_CTL_PUS_100K_DOWN |		\ +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\ +	PAD_CTL_HYS | PAD_CTL_SRE_SLOW)  #define OUTPUT_40OHM (PAD_CTL_SPEED_MED|PAD_CTL_DSE_40ohm) diff --git a/board/cm_t35/Makefile b/board/compulab/cm_t35/Makefile index bde56e61f..31d9bbbfe 100644 --- a/board/cm_t35/Makefile +++ b/board/compulab/cm_t35/Makefile @@ -1,6 +1,8 @@  # -# (C) Copyright 2000, 2001, 2002 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# (C) Copyright 2011 - 2013 CompuLab, Ltd. <www.compulab.co.il> +# +# Authors: Nikita Kiryanov <nikita@compulab.co.il> +#	   Igor Grinberg <grinberg@compulab.co.il>  #  # See file CREDITS for list of people who contributed to this  # project. @@ -17,9 +19,7 @@  #  # You should have received a copy of the GNU General Public License  # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, -# MA 02111-1307 USA -# +# Foundation, Inc.  include $(TOPDIR)/config.mk @@ -42,3 +42,5 @@ $(LIB):	$(obj).depend $(OBJS)  include $(SRCTREE)/rules.mk  sinclude $(obj).depend + +######################################################################### diff --git a/board/cm_t35/cm_t35.c b/board/compulab/cm_t35/cm_t35.c index 84c36bafb..b0b80e5bc 100644 --- a/board/cm_t35/cm_t35.c +++ b/board/compulab/cm_t35/cm_t35.c @@ -1,5 +1,5 @@  /* - * (C) Copyright 2011 CompuLab, Ltd. <www.compulab.co.il> + * (C) Copyright 2011 - 2013 CompuLab, Ltd. <www.compulab.co.il>   *   * Authors: Mike Rapoport <mike@compulab.co.il>   *	    Igor Grinberg <grinberg@compulab.co.il> @@ -448,7 +448,7 @@ int board_mmc_getcd(struct mmc *mmc)  {  	u8 val; -	if (twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, &val, TWL4030_BASEADD_GPIO)) +	if (twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, TWL4030_BASEADD_GPIO, &val))  		return -1;  	return !(val & 1); @@ -493,17 +493,17 @@ static void setup_net_chip_gmpc(void)  static void reset_net_chip(void)  {  	/* Set GPIO1 of TPS65930 as output */ -	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02, -				TWL4030_BASEADD_GPIO + 0x03); +	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, TWL4030_BASEADD_GPIO + 0x03, +			     0x02);  	/* Send a pulse on the GPIO pin */ -	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02, -				TWL4030_BASEADD_GPIO + 0x0C); +	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, TWL4030_BASEADD_GPIO + 0x0C, +			     0x02);  	udelay(1); -	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02, -				TWL4030_BASEADD_GPIO + 0x09); +	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, TWL4030_BASEADD_GPIO + 0x09, +			     0x02);  	mdelay(40); -	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02, -				TWL4030_BASEADD_GPIO + 0x0C); +	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, TWL4030_BASEADD_GPIO + 0x0C, +			     0x02);  	mdelay(1);  }  #else @@ -597,13 +597,13 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)  	udelay(1000);  	offset = TWL4030_BASEADD_GPIO + TWL4030_GPIO_GPIODATADIR1; -	twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, &val, offset); +	twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, offset, &val);  	/* Set GPIO6 and GPIO7 of TPS65930 as output */  	val |= 0xC0; -	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, val, offset); +	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, offset, val);  	offset = TWL4030_BASEADD_GPIO + TWL4030_GPIO_SETGPIODATAOUT1;  	/* Take both PHYs out of reset */ -	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0xC0, offset); +	twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, offset, 0xC0);  	udelay(1);  	return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor); diff --git a/board/cm_t35/display.c b/board/compulab/cm_t35/display.c index a004ea1d8..adc485365 100644 --- a/board/cm_t35/display.c +++ b/board/compulab/cm_t35/display.c @@ -1,5 +1,5 @@  /* - * (C) Copyright 2012 CompuLab, Ltd. <www.compulab.co.il> + * (C) Copyright 2012 - 2013 CompuLab, Ltd. <www.compulab.co.il>   *   * Authors: Nikita Kiryanov <nikita@compulab.co.il>   * diff --git a/board/cm_t35/eeprom.c b/board/compulab/cm_t35/eeprom.c index b0af103cd..b0af103cd 100644 --- a/board/cm_t35/eeprom.c +++ b/board/compulab/cm_t35/eeprom.c diff --git a/board/cm_t35/eeprom.h b/board/compulab/cm_t35/eeprom.h index 38824d162..38824d162 100644 --- a/board/cm_t35/eeprom.h +++ b/board/compulab/cm_t35/eeprom.h diff --git a/board/cm_t35/leds.c b/board/compulab/cm_t35/leds.c index 48ad598d9..dcae135c1 100644 --- a/board/cm_t35/leds.c +++ b/board/compulab/cm_t35/leds.c @@ -1,6 +1,5 @@  /* - * (C) Copyright 2011 - * CompuLab, Ltd. <www.compulab.co.il> + * (C) Copyright 2011 - 2013 CompuLab, Ltd. <www.compulab.co.il>   *   * Author: Igor Grinberg <grinberg@compulab.co.il>   * diff --git a/board/denx/m53evk/Makefile b/board/denx/m53evk/Makefile new file mode 100644 index 000000000..bfb040a07 --- /dev/null +++ b/board/denx/m53evk/Makefile @@ -0,0 +1,40 @@ +# +# DENX M53EVK +# Copyright (C) 2012-2013 Marek Vasut <marex@denx.de> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS	:= m53evk.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/denx/m53evk/imximage.cfg b/board/denx/m53evk/imximage.cfg new file mode 100644 index 000000000..27c593a5e --- /dev/null +++ b/board/denx/m53evk/imximage.cfg @@ -0,0 +1,108 @@ +/* + * DENX M53 DRAM init values + * Copyright (C) 2012-2013 Marek Vasut <marex@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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not write to the Free Software + * Foundation Inc. 51 Franklin Street Fifth Floor Boston, + * MA 02110-1301 USA + * + * 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 + */ +#include <asm/imx-common/imximage.cfg> + +/* image version */ +IMAGE_VERSION	2 + + +/* Boot Offset 0x400, valid for both SD and NAND boot. */ +BOOT_OFFSET	FLASH_OFFSET_STANDARD + +/* + * 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 0x53fa86f4 0x00000000	 /* GRP_DDRMODE_CTL */ +DATA 4 0x53fa8714 0x00000000	 /* GRP_DDRMODE */ +DATA 4 0x53fa86fc 0x00000000	 /* GRP_DDRPKE */ +DATA 4 0x53fa8724 0x04000000	 /* GRP_DDR_TYPE */ + +DATA 4 0x53fa872c 0x00300000	 /* GRP_B3DS */ +DATA 4 0x53fa8554 0x00300000	 /* DRAM_DQM3 */ +DATA 4 0x53fa8558 0x00300040	 /* DRAM_SDQS3 */ + +DATA 4 0x53fa8728 0x00300000	 /* GRP_B2DS */ +DATA 4 0x53fa8560 0x00300000	 /* DRAM_DQM2 */ +DATA 4 0x53fa8568 0x00300040	 /* DRAM_SDQS2 */ + +DATA 4 0x53fa871c 0x00300000	 /* GRP_B1DS */ +DATA 4 0x53fa8594 0x00300000	 /* DRAM_DQM1 */ +DATA 4 0x53fa8590 0x00300040	 /* DRAM_SDQS1 */ + +DATA 4 0x53fa8718 0x00300000	 /* GRP_B0DS */ +DATA 4 0x53fa8584 0x00300000	 /* DRAM_DQM0 */ +DATA 4 0x53fa857c 0x00300040	 /* DRAM_SDQS0 */ + +DATA 4 0x53fa8578 0x00300000	 /* DRAM_SDCLK_0 */ +DATA 4 0x53fa8570 0x00300000	 /* DRAM_SDCLK_1 */ + +DATA 4 0x53fa8574 0x00300000	 /* DRAM_CAS */ +DATA 4 0x53fa8588 0x00300000	 /* DRAM_RAS */ +DATA 4 0x53fa86f0 0x00300000	 /* GRP_ADDDS */ +DATA 4 0x53fa8720 0x00300000	 /* GRP_CTLDS */ + +DATA 4 0x53fa8564 0x00300040	 /* DRAM_SDODT1 */ +DATA 4 0x53fa8580 0x00300040	 /* DRAM_SDODT0 */ + +/* ESDCTL */ +DATA 4 0x63fd9088 0x32383535 +DATA 4 0x63fd9090 0x40383538 +DATA 4 0x63fd907c 0x0136014d +DATA 4 0x63fd9080 0x01510141 + +DATA 4 0x63fd9018 0x00011740 +DATA 4 0x63fd9000 0xc3190000 +DATA 4 0x63fd900c 0x555952e3 +DATA 4 0x63fd9010 0xb68e8b63 +DATA 4 0x63fd9014 0x01ff00db +DATA 4 0x63fd902c 0x000026d2 +DATA 4 0x63fd9030 0x009f0e21 +DATA 4 0x63fd9008 0x12273030 +DATA 4 0x63fd9004 0x0002002d +DATA 4 0x63fd901c 0x00008032 +DATA 4 0x63fd901c 0x00008033 +DATA 4 0x63fd901c 0x00028031 +DATA 4 0x63fd901c 0x092080b0 +DATA 4 0x63fd901c 0x04008040 +DATA 4 0x63fd901c 0x0000803a +DATA 4 0x63fd901c 0x0000803b +DATA 4 0x63fd901c 0x00028039 +DATA 4 0x63fd901c 0x09208138 +DATA 4 0x63fd901c 0x04008048 +DATA 4 0x63fd9020 0x00001800 +DATA 4 0x63fd9040 0x04b80003 +DATA 4 0x63fd9058 0x00022227 +DATA 4 0x63fd901c 0x00000000 diff --git a/board/denx/m53evk/m53evk.c b/board/denx/m53evk/m53evk.c new file mode 100644 index 000000000..12917fd31 --- /dev/null +++ b/board/denx/m53evk/m53evk.c @@ -0,0 +1,328 @@ +/* + * DENX M53 module + * + * Copyright (C) 2012-2013 Marek Vasut <marex@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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/crm_regs.h> +#include <asm/arch/clock.h> +#include <asm/arch/iomux-mx53.h> +#include <asm/arch/spl.h> +#include <asm/errno.h> +#include <netdev.h> +#include <i2c.h> +#include <mmc.h> +#include <spl.h> +#include <fsl_esdhc.h> +#include <asm/gpio.h> +#include <usb/ehci-fsl.h> + +DECLARE_GLOBAL_DATA_PTR; + +int dram_init(void) +{ +	u32 size1, size2; + +	size1 = get_ram_size((void *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE); +	size2 = get_ram_size((void *)PHYS_SDRAM_2, PHYS_SDRAM_2_SIZE); + +	gd->ram_size = size1 + size2; + +	return 0; +} +void dram_init_banksize(void) +{ +	gd->bd->bi_dram[0].start = PHYS_SDRAM_1; +	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + +	gd->bd->bi_dram[1].start = PHYS_SDRAM_2; +	gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; +} + +static void setup_iomux_uart(void) +{ +	static const iomux_v3_cfg_t uart_pads[] = { +		MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX, +		MX53_PAD_PATA_DMARQ__UART2_TXD_MUX, +	}; + +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads)); +} + +#ifdef CONFIG_USB_EHCI_MX5 +int board_ehci_hcd_init(int port) +{ +	if (port == 0) { +		/* USB OTG PWRON */ +		imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX53_PAD_GPIO_4__GPIO1_4, +					PAD_CTL_PKE | PAD_CTL_DSE_HIGH)); +		gpio_direction_output(IMX_GPIO_NR(1, 4), 0); + +		/* USB OTG Over Current */ +		imx_iomux_v3_setup_pad(MX53_PAD_GPIO_18__GPIO7_13); +	} else if (port == 1) { +		/* USB Host PWRON */ +		imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX53_PAD_GPIO_2__GPIO1_2, +					PAD_CTL_PKE | PAD_CTL_DSE_HIGH)); +		gpio_direction_output(IMX_GPIO_NR(1, 2), 0); + +		/* USB Host Over Current */ +		imx_iomux_v3_setup_pad(MX53_PAD_GPIO_3__USBOH3_USBH1_OC); +	} + +	return 0; +} +#endif + +static void setup_iomux_fec(void) +{ +	static const iomux_v3_cfg_t fec_pads[] = { +		/* MDIO 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), + +		/* FEC 0 pads */ +		NEW_PAD_CTRL(MX53_PAD_FEC_CRS_DV__FEC_RX_DV, +				PAD_CTL_HYS | PAD_CTL_PKE), +		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_TX_EN__FEC_TX_EN, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD0__FEC_RDATA_0, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_RXD1__FEC_RDATA_1, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD0__FEC_TDATA_0, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_FEC_TXD1__FEC_TDATA_1, PAD_CTL_DSE_HIGH), + +		/* FEC 1 pads */ +		NEW_PAD_CTRL(MX53_PAD_KEY_COL0__FEC_RDATA_3, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_ROW0__FEC_TX_ER, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL1__FEC_RX_CLK, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_ROW1__FEC_COL, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL2__FEC_RDATA_2, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_ROW2__FEC_TDATA_2, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL3__FEC_CRS, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_GPIO_19__FEC_TDATA_3, PAD_CTL_DSE_HIGH), +	}; + +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads)); +} + +#ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg esdhc_cfg = { +	MMC_SDHC1_BASE_ADDR, +}; + +int board_mmc_getcd(struct mmc *mmc) +{ +	imx_iomux_v3_setup_pad(MX53_PAD_GPIO_1__GPIO1_1); +	gpio_direction_input(IMX_GPIO_NR(1, 1)); + +	return !gpio_get_value(IMX_GPIO_NR(1, 1)); +} + +#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, + +		MX53_PAD_EIM_EB3__GPIO2_31, /* SD power */ +	}; + +	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); + +	imx_iomux_v3_setup_multiple_pads(sd1_pads, ARRAY_SIZE(sd1_pads)); + +	/* GPIO 2_31 is SD power */ +	gpio_direction_output(IMX_GPIO_NR(2, 31), 0); + +	return fsl_esdhc_initialize(bis, &esdhc_cfg); +} +#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) +{ +	static const iomux_v3_cfg_t i2c_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_EIM_D16__I2C2_SDA, I2C_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_EIM_EB2__I2C2_SCL, I2C_PAD_CTRL), +	}; + +	imx_iomux_v3_setup_multiple_pads(i2c_pads, ARRAY_SIZE(i2c_pads)); +} + +static void setup_iomux_nand(void) +{ +	static const iomux_v3_cfg_t nand_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B, +				PAD_CTL_DSE_HIGH), +		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_RB0__EMI_NANDF_RB_0, +				PAD_CTL_PUS_100K_UP), +		NEW_PAD_CTRL(MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0, +				PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA0__EMI_NANDF_D_0, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA1__EMI_NANDF_D_1, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA2__EMI_NANDF_D_2, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA3__EMI_NANDF_D_3, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA4__EMI_NANDF_D_4, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA5__EMI_NANDF_D_5, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA6__EMI_NANDF_D_6, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_PATA_DATA7__EMI_NANDF_D_7, +				PAD_CTL_DSE_HIGH | PAD_CTL_PKE), +	}; + +	imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads)); +} + +static void m53_set_clock(void) +{ +	int ret; +	const uint32_t ref_clk = MXC_HCLK; +	const uint32_t dramclk = 400; +	uint32_t cpuclk; + +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX53_PAD_GPIO_10__GPIO4_0, +					    PAD_CTL_DSE_HIGH | PAD_CTL_PKE)); +	gpio_direction_input(IMX_GPIO_NR(4, 0)); + +	/* GPIO10 selects modules' CPU speed, 1 = 1200MHz ; 0 = 800MHz */ +	cpuclk = gpio_get_value(IMX_GPIO_NR(4, 0)) ? 1200 : 800; + +	ret = mxc_set_clock(ref_clk, cpuclk, MXC_ARM_CLK); +	if (ret) +		printf("CPU:   Switch CPU clock to %dMHz failed\n", cpuclk); + +	ret = mxc_set_clock(ref_clk, dramclk, MXC_PERIPH_CLK); +	if (ret) { +		printf("CPU:   Switch peripheral clock to %dMHz failed\n", +			dramclk); +	} + +	ret = mxc_set_clock(ref_clk, dramclk, MXC_DDR_CLK); +	if (ret) +		printf("CPU:   Switch DDR clock to %dMHz failed\n", dramclk); +} + +static void m53_set_nand(void) +{ +	u32 i; + +	/* NAND flash is muxed on ATA pins */ +	setbits_le32(M4IF_BASE_ADDR + 0xc, M4IF_GENP_WEIM_MM_MASK); + +	/* Wait for Grant/Ack sequence (see EIM_CSnGCR2:MUX16_BYP_GRANT) */ +	for (i = 0x4; i < 0x94; i += 0x18) { +		clrbits_le32(WEIM_BASE_ADDR + i, +			     WEIM_GCR2_MUX16_BYP_GRANT_MASK); +	} + +	mxc_set_clock(0, 33, MXC_NFC_CLK); +	enable_nfc_clk(1); +} + +int board_early_init_f(void) +{ +	setup_iomux_uart(); +	setup_iomux_fec(); +	setup_iomux_i2c(); +	setup_iomux_nand(); + +	m53_set_clock(); + +	mxc_set_sata_internal_clock(); + +	/* NAND clock @ 33MHz */ +	m53_set_nand(); + +	return 0; +} + +int board_init(void) +{ +	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; + +	return 0; +} + +int checkboard(void) +{ +	puts("Board: DENX M53EVK\n"); + +	return 0; +} + +/* + * NAND SPL + */ +#ifdef CONFIG_SPL_BUILD +void spl_board_init(void) +{ +	setup_iomux_nand(); +	m53_set_clock(); +	m53_set_nand(); +} + +u32 spl_boot_device(void) +{ +	return BOOT_DEVICE_NAND; +} +#endif diff --git a/board/esg/ima3-mx53/ima3-mx53.c b/board/esg/ima3-mx53/ima3-mx53.c index 41d6bb6a9..051fa6e4d 100644 --- a/board/esg/ima3-mx53/ima3-mx53.c +++ b/board/esg/ima3-mx53/ima3-mx53.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> @@ -66,109 +65,53 @@ 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)  { -	/* UART4 RXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D13, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D13, -		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_UART4_IPP_UART_RXD_MUX_SELECT_INPUT, 0x3); +	static const iomux_v3_cfg_t uart_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT13__UART4_RXD_MUX, UART_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT12__UART4_TXD_MUX, UART_PAD_CTRL), +	}; -	/* UART4 TXD */ -	mxc_request_iomux(MX53_PIN_CSI0_D12, IOMUX_CONFIG_ALT2); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D12, -		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 RXD3 */ -	mxc_request_iomux(MX53_PIN_KEY_COL0, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_KEY_COL0, PAD_CTL_HYS_ENABLE | -		PAD_CTL_PKE_ENABLE); - -	/* FEC RXD2 */ -	mxc_request_iomux(MX53_PIN_KEY_COL2, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_KEY_COL2, PAD_CTL_HYS_ENABLE | -		PAD_CTL_PKE_ENABLE); - -	/* 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 TXD3 */ -	mxc_request_iomux(MX53_PIN_GPIO_19, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_GPIO_19, PAD_CTL_DRV_HIGH); - -	/* FEC TXD2 */ -	mxc_request_iomux(MX53_PIN_KEY_ROW2, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_KEY_ROW2, PAD_CTL_DRV_HIGH); - -	/* 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_KEY_COL0__FEC_RDATA_3, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL2__FEC_RDATA_2, +				PAD_CTL_HYS | PAD_CTL_PKE), +		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_GPIO_19__FEC_TDATA_3, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX53_PAD_KEY_ROW2__FEC_TDATA_2, PAD_CTL_DSE_HIGH), +		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), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL3__FEC_CRS, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_ROW1__FEC_COL, +				PAD_CTL_HYS | PAD_CTL_PKE), +		NEW_PAD_CTRL(MX53_PAD_KEY_COL1__FEC_RX_CLK, +				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 RX_DV */ -	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); - -	/* FEC CRS */ -	mxc_request_iomux(MX53_PIN_KEY_COL3, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_KEY_COL3, PAD_CTL_HYS_ENABLE | -		PAD_CTL_PKE_ENABLE); - -	/* FEC COL */ -	mxc_request_iomux(MX53_PIN_KEY_ROW1, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_KEY_ROW1, PAD_CTL_HYS_ENABLE | -		PAD_CTL_PKE_ENABLE); -	mxc_iomux_set_input(MX53_FEC_FEC_COL_SELECT_INPUT, 0x0); - -	/* FEC RX_CLK */ -	mxc_request_iomux(MX53_PIN_KEY_COL1, IOMUX_CONFIG_ALT6); -	mxc_iomux_set_pad(MX53_PIN_KEY_COL1, PAD_CTL_HYS_ENABLE | -		PAD_CTL_PKE_ENABLE); -	mxc_iomux_set_input(MX53_FEC_FEC_RX_CLK_SELECT_INPUT, 0x0); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  #ifdef CONFIG_FSL_ESDHC @@ -178,76 +121,51 @@ int board_mmc_getcd(struct mmc *mmc)  {  	int ret; -	ret = !gpio_get_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_1)); +	ret = !gpio_get_value(IMX_GPIO_NR(1, 1));  	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) +#define SD_CD_PAD_CTRL		(PAD_CTL_DSE_HIGH | PAD_CTL_HYS | PAD_CTL_PKE) +  int board_mmc_init(bd_t *bis)  { -	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_GPIO_1, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX53_PIN_GPIO_1, -		PAD_CTL_DRV_HIGH | PAD_CTL_HYS_ENABLE | -		PAD_CTL_PUE_KEEPER | PAD_CTL_100K_PU | -		PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_PKE_ENABLE); -	gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_GPIO_1)); +	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), +		NEW_PAD_CTRL(MX53_PAD_GPIO_1__GPIO1_1, SD_CD_PAD_CTRL), +	}; -	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)); +	gpio_direction_input(IMX_GPIO_NR(1, 1));  	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);  	return fsl_esdhc_initialize(bis, &esdhc_cfg);  }  #endif +#define SPI_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_DSE_HIGH | PAD_CTL_PUS_47K_UP) +  static void setup_iomux_spi(void)  { -	/* SCLK */ -	mxc_request_iomux(MX53_PIN_CSI0_D8, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D8, -		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_input(MX53_ECSPI2_IPP_CSPI_CLK_IN_SELECT_INPUT, 0x1); -	/* MOSI */ -	mxc_request_iomux(MX53_PIN_CSI0_D9, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX53_PIN_CSI0_D9, -		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_input(MX53_ECSPI2_IPP_IND_MOSI_SELECT_INPUT, 0x1); -	/* MISO */ -	mxc_request_iomux(MX53_PIN_CSI0_D10, IOMUX_CONFIG_ALT3); -	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_47K_PU); -	mxc_iomux_set_input(MX53_ECSPI2_IPP_IND_MISO_SELECT_INPUT, 0x1); -	/* SSEL 0 */ -	mxc_request_iomux(MX53_PIN_CSI0_D11, IOMUX_CONFIG_GPIO); -	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_47K_PU); -	gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_D11), 1); +	static const iomux_v3_cfg_t spi_pads[] = { +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT8__ECSPI2_SCLK, SPI_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT9__ECSPI2_MOSI, SPI_PAD_CTRL), +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT10__ECSPI2_MISO, SPI_PAD_CTRL), +		/* SSEL 0 */ +		NEW_PAD_CTRL(MX53_PAD_CSI0_DAT11__GPIO5_29, SPI_PAD_CTRL), +	}; + +	imx_iomux_v3_setup_multiple_pads(spi_pads, ARRAY_SIZE(spi_pads)); +	gpio_direction_output(IMX_GPIO_NR(5, 29), 1);  }  int board_early_init_f(void) 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; +} diff --git a/board/genesi/mx51_efikamx/efikamx-usb.c b/board/genesi/mx51_efikamx/efikamx-usb.c index cf020c35c..cabad70af 100644 --- a/board/genesi/mx51_efikamx/efikamx-usb.c +++ b/board/genesi/mx51_efikamx/efikamx-usb.c @@ -26,8 +26,7 @@  #include <usb.h>  #include <asm/io.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/gpio.h>  #include <usb/ehci-fsl.h>  #include <usb/ulpi.h> @@ -35,40 +34,57 @@  #include "../../../drivers/usb/host/ehci.h" -/* USB pin configuration */ -#define USB_PAD_CONFIG	(PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST | \ -			PAD_CTL_DRV_HIGH | PAD_CTL_100K_PU | \ -			PAD_CTL_HYS_ENABLE | PAD_CTL_PUE_PULL) -  /*   * Configure the USB H1 and USB H2 IOMUX   */  void setup_iomux_usb(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, +	}; + +	static const iomux_v3_cfg_t usb_pads[] = { +		MX51_PAD_EIM_D27__GPIO2_9, /* USB PHY reset */ +		MX51_PAD_GPIO1_5__GPIO1_5, /* USB HUB reset */ +		NEW_PAD_CTRL(MX51_PAD_EIM_A22__GPIO2_16, 0), /* WIFI /EN */ +		NEW_PAD_CTRL(MX51_PAD_EIM_A16__GPIO2_10, 0), /* WIFI RESET */ +		NEW_PAD_CTRL(MX51_PAD_EIM_A17__GPIO2_11, 0), /* BT /EN */ +	}; -	if (machine_is_efikasb()) -		setup_iomux_usb_h2(); +	imx_iomux_v3_setup_multiple_pads(usb_h1_pads, ARRAY_SIZE(usb_h1_pads)); -	/* USB PHY reset */ -	mxc_request_iomux(MX51_PIN_EIM_D27, IOMUX_CONFIG_ALT1); -	mxc_iomux_set_pad(MX51_PIN_EIM_D27, PAD_CTL_PKE_ENABLE | -			PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH); +	if (machine_is_efikasb()) { +		static const iomux_v3_cfg_t usb_h2_pads[] = { +			MX51_PAD_EIM_A24__USBH2_CLK, +			MX51_PAD_EIM_A25__USBH2_DIR, +			MX51_PAD_EIM_A26__USBH2_STP, +			MX51_PAD_EIM_A27__USBH2_NXT, +			MX51_PAD_EIM_D16__USBH2_DATA0, +			MX51_PAD_EIM_D17__USBH2_DATA1, +			MX51_PAD_EIM_D18__USBH2_DATA2, +			MX51_PAD_EIM_D19__USBH2_DATA3, +			MX51_PAD_EIM_D20__USBH2_DATA4, +			MX51_PAD_EIM_D21__USBH2_DATA5, +			MX51_PAD_EIM_D22__USBH2_DATA6, +			MX51_PAD_EIM_D23__USBH2_DATA7, +		}; -	/* USB HUB reset */ -	mxc_request_iomux(MX51_PIN_GPIO1_5, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_GPIO1_5, PAD_CTL_PKE_ENABLE | -			PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH); +		imx_iomux_v3_setup_multiple_pads(usb_h2_pads, +						 ARRAY_SIZE(usb_h2_pads)); +	} -	/* WIFI EN (act low) */ -	mxc_request_iomux(MX51_PIN_EIM_A22, IOMUX_CONFIG_GPIO); -	mxc_iomux_set_pad(MX51_PIN_EIM_A22, 0); -	/* WIFI RESET */ -	mxc_request_iomux(MX51_PIN_EIM_A16, IOMUX_CONFIG_GPIO); -	mxc_iomux_set_pad(MX51_PIN_EIM_A16, 0); -	/* BT EN (act low) */ -	mxc_request_iomux(MX51_PIN_EIM_A17, IOMUX_CONFIG_GPIO); -	mxc_iomux_set_pad(MX51_PIN_EIM_A17, 0); +	imx_iomux_v3_setup_multiple_pads(usb_pads, ARRAY_SIZE(usb_pads));  }  /* @@ -77,18 +93,18 @@ void setup_iomux_usb(void)  static void efika_usb_enable_devices(void)  {  	/* Enable Bluetooth */ -	gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A17), 0); +	gpio_direction_output(IMX_GPIO_NR(2, 11), 0);  	udelay(10000); -	gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A17), 1); +	gpio_set_value(IMX_GPIO_NR(2, 11), 1);  	/* Enable WiFi */ -	gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A22), 1); +	gpio_direction_output(IMX_GPIO_NR(2, 16), 1);  	udelay(10000);  	/* Reset the WiFi chip */ -	gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A16), 0); +	gpio_direction_output(IMX_GPIO_NR(2, 10), 0);  	udelay(10000); -	gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A16), 1); +	gpio_set_value(IMX_GPIO_NR(2, 10), 1);  }  /* @@ -97,11 +113,11 @@ static void efika_usb_enable_devices(void)  static void efika_usb_hub_reset(void)  {  	/* HUB reset */ -	gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5), 1); +	gpio_direction_output(IMX_GPIO_NR(1, 5), 1);  	udelay(1000); -	gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5), 0); +	gpio_set_value(IMX_GPIO_NR(1, 5), 0);  	udelay(1000); -	gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5), 1); +	gpio_set_value(IMX_GPIO_NR(1, 5), 1);  }  /* @@ -110,28 +126,26 @@ static void efika_usb_hub_reset(void)  static void efika_usb_phy_reset(void)  {  	/* SMSC 3317 PHY reset */ -	gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D27), 0); +	gpio_direction_output(IMX_GPIO_NR(2, 9), 0);  	udelay(1000); -	gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D27), 1); +	gpio_set_value(IMX_GPIO_NR(2, 9), 1);  }  static void efika_ehci_init(struct usb_ehci *ehci, uint32_t stp_gpio, -				uint32_t alt0, uint32_t alt1) +				iomux_v3_cfg_t stp_pad_gpio, +				iomux_v3_cfg_t stp_pad_usb)  {  	int ret;  	struct ulpi_regs *ulpi = (struct ulpi_regs *)0;  	struct ulpi_viewport ulpi_vp; -	mxc_request_iomux(stp_gpio, alt0); -	mxc_iomux_set_pad(stp_gpio, PAD_CTL_DRV_HIGH | -				PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); -	gpio_direction_output(IOMUX_TO_GPIO(stp_gpio), 0); +	imx_iomux_v3_setup_pad(stp_pad_gpio); +	gpio_direction_output(stp_gpio, 0);  	udelay(1000); -	gpio_set_value(IOMUX_TO_GPIO(stp_gpio), 1); +	gpio_set_value(stp_gpio, 1);  	udelay(1000); -	mxc_request_iomux(stp_gpio, alt1); -	mxc_iomux_set_pad(stp_gpio, USB_PAD_CONFIG); +	imx_iomux_v3_setup_pad(stp_pad_usb);  	udelay(10000);  	ulpi_vp.viewport_addr = (u32)&ehci->ulpi_viewpoint; @@ -204,11 +218,13 @@ void board_ehci_hcd_postinit(struct usb_ehci *ehci, int port)  		tmp = (tmp & ~0x3) | 0x01;  		writel(tmp, OTG_BASE_ADDR + 0x80c);  	} else if (port == 1) { -		efika_ehci_init(ehci, MX51_PIN_USBH1_STP, -				IOMUX_CONFIG_ALT2, IOMUX_CONFIG_ALT0); +		efika_ehci_init(ehci, IMX_GPIO_NR(1, 27), +				MX51_PAD_USBH1_STP__GPIO1_27, +				MX51_PAD_USBH1_STP__USBH1_STP);  	} else if ((port == 2) && machine_is_efikasb()) { -		efika_ehci_init(ehci, MX51_PIN_EIM_A26, -				IOMUX_CONFIG_ALT1, IOMUX_CONFIG_ALT2); +		efika_ehci_init(ehci, IMX_GPIO_NR(2, 20), +				MX51_PAD_EIM_A26__GPIO2_20, +				MX51_PAD_EIM_A26__USBH2_STP);  	}  	if (port) diff --git a/board/genesi/mx51_efikamx/efikamx.c b/board/genesi/mx51_efikamx/efikamx.c index 69d41db53..13582a24e 100644 --- a/board/genesi/mx51_efikamx/efikamx.c +++ b/board/genesi/mx51_efikamx/efikamx.c @@ -293,7 +293,7 @@ static iomux_v3_cfg_t const efikamx_sdhc1_pads[] = {  static iomux_v3_cfg_t const efikamx_sdhc1_cd_pads[] = {  	MX51_PAD_GPIO1_0__SD1_CD, -	MX51_PAD_EIM_CS2__SD1_CD, +	NEW_PAD_CTRL(MX51_PAD_EIM_CS2__GPIO2_27, MX51_ESDHC_PAD_CTRL),  };  #define EFIKAMX_SDHC1_CD	IMX_GPIO_NR(1, 0) diff --git a/board/h2200/h2200.c b/board/h2200/h2200.c index 720b06e4c..738e480a4 100644 --- a/board/h2200/h2200.c +++ b/board/h2200/h2200.c @@ -32,6 +32,15 @@ int board_eth_init(bd_t *bis)  	return 0;  } +void reset_cpu(ulong ignore) +{ +	/* Enable VLIO interface on Hamcop */ +	writeb(0x1, 0x4000); + +	/* Reset board (cold reset) */ +	writeb(0xff, 0x4002); +} +  int board_init(void)  {  	/* We have RAM, disable cache */ diff --git a/board/isee/igep0033/Makefile b/board/isee/igep0033/Makefile new file mode 100644 index 000000000..54a4b7525 --- /dev/null +++ b/board/isee/igep0033/Makefile @@ -0,0 +1,46 @@ +# +# Makefile +# +# Copyright (C) 2013, ISEE 2007 SL - http://www.isee.biz/ +# +# 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 "as is" WITHOUT ANY WARRANTY of any +# kind, whether express or implied; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +ifdef CONFIG_SPL_BUILD +COBJS	:= mux.o +endif + +COBJS	+= board.o +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/isee/igep0033/board.c b/board/isee/igep0033/board.c new file mode 100644 index 000000000..d315516fe --- /dev/null +++ b/board/isee/igep0033/board.c @@ -0,0 +1,232 @@ +/* + * Board functions for IGEP COM AQUILA/CYGNUS based boards + * + * Copyright (C) 2013, ISEE 2007 SL - http://www.isee.biz/ + * + * 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 <errno.h> +#include <spl.h> +#include <asm/arch/cpu.h> +#include <asm/arch/hardware.h> +#include <asm/arch/omap.h> +#include <asm/arch/ddr_defs.h> +#include <asm/arch/clock.h> +#include <asm/arch/gpio.h> +#include <asm/arch/mmc_host_def.h> +#include <asm/arch/sys_proto.h> +#include <asm/io.h> +#include <asm/emif.h> +#include <asm/gpio.h> +#include <i2c.h> +#include <miiphy.h> +#include <cpsw.h> +#include "board.h" + +DECLARE_GLOBAL_DATA_PTR; + +static struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE; +#ifdef CONFIG_SPL_BUILD +static struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE; +#endif + +/* MII mode defines */ +#define RMII_MODE_ENABLE	0x4D + +static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; + +/* UART Defines */ +#ifdef CONFIG_SPL_BUILD +#define UART_RESET		(0x1 << 1) +#define UART_CLK_RUNNING_MASK	0x1 +#define UART_SMART_IDLE_EN	(0x1 << 0x3) + +static void rtc32k_enable(void) +{ +	struct rtc_regs *rtc = (struct rtc_regs *)RTC_BASE; + +	/* +	 * Unlock the RTC's registers.  For more details please see the +	 * RTC_SS section of the TRM.  In order to unlock we need to +	 * write these specific values (keys) in this order. +	 */ +	writel(0x83e70b13, &rtc->kick0r); +	writel(0x95a4f1e0, &rtc->kick1r); + +	/* Enable the RTC 32K OSC by setting bits 3 and 6. */ +	writel((1 << 3) | (1 << 6), &rtc->osc); +} + +static const struct ddr_data ddr3_data = { +	.datardsratio0 = K4B2G1646EBIH9_RD_DQS, +	.datawdsratio0 = K4B2G1646EBIH9_WR_DQS, +	.datafwsratio0 = K4B2G1646EBIH9_PHY_FIFO_WE, +	.datawrsratio0 = K4B2G1646EBIH9_PHY_WR_DATA, +	.datadldiff0 = PHY_DLL_LOCK_DIFF, +}; + +static const struct cmd_control ddr3_cmd_ctrl_data = { +	.cmd0csratio = K4B2G1646EBIH9_RATIO, +	.cmd0dldiff = K4B2G1646EBIH9_DLL_LOCK_DIFF, +	.cmd0iclkout = K4B2G1646EBIH9_INVERT_CLKOUT, + +	.cmd1csratio = K4B2G1646EBIH9_RATIO, +	.cmd1dldiff = K4B2G1646EBIH9_DLL_LOCK_DIFF, +	.cmd1iclkout = K4B2G1646EBIH9_INVERT_CLKOUT, + +	.cmd2csratio = K4B2G1646EBIH9_RATIO, +	.cmd2dldiff = K4B2G1646EBIH9_DLL_LOCK_DIFF, +	.cmd2iclkout = K4B2G1646EBIH9_INVERT_CLKOUT, +}; + +static struct emif_regs ddr3_emif_reg_data = { +	.sdram_config = K4B2G1646EBIH9_EMIF_SDCFG, +	.ref_ctrl = K4B2G1646EBIH9_EMIF_SDREF, +	.sdram_tim1 = K4B2G1646EBIH9_EMIF_TIM1, +	.sdram_tim2 = K4B2G1646EBIH9_EMIF_TIM2, +	.sdram_tim3 = K4B2G1646EBIH9_EMIF_TIM3, +	.zq_config = K4B2G1646EBIH9_ZQ_CFG, +	.emif_ddr_phy_ctlr_1 = K4B2G1646EBIH9_EMIF_READ_LATENCY, +}; +#endif + +/* + * Early system init of muxing and clocks. + */ +void s_init(void) +{ +	/* WDT1 is already running when the bootloader gets control +	 * Disable it to avoid "random" resets +	 */ +	writel(0xAAAA, &wdtimer->wdtwspr); +	while (readl(&wdtimer->wdtwwps) != 0x0) +		; +	writel(0x5555, &wdtimer->wdtwspr); +	while (readl(&wdtimer->wdtwwps) != 0x0) +		; + +#ifdef CONFIG_SPL_BUILD +	/* Setup the PLLs and the clocks for the peripherals */ +	pll_init(); + +	/* Enable RTC32K clock */ +	rtc32k_enable(); + +	/* UART softreset */ +	u32 regval; + +	enable_uart0_pin_mux(); + +	regval = readl(&uart_base->uartsyscfg); +	regval |= UART_RESET; +	writel(regval, &uart_base->uartsyscfg); +	while ((readl(&uart_base->uartsyssts) & +		UART_CLK_RUNNING_MASK) != UART_CLK_RUNNING_MASK) +		; + +	/* Disable smart idle */ +	regval = readl(&uart_base->uartsyscfg); +	regval |= UART_SMART_IDLE_EN; +	writel(regval, &uart_base->uartsyscfg); + +	gd = &gdata; + +	preloader_console_init(); + +	/* Configure board pin mux */ +	enable_board_pin_mux(); + +	config_ddr(303, K4B2G1646EBIH9_IOCTRL_VALUE, &ddr3_data, +		   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0); +#endif +} + +/* + * Basic board specific setup.  Pinmux has been handled already. + */ +int board_init(void) +{ +	gd->bd->bi_boot_params = PHYS_DRAM_1 + 0x100; + +	gpmc_init(); + +	return 0; +} + +#if defined(CONFIG_DRIVER_TI_CPSW) +static void cpsw_control(int enabled) +{ +	/* VTP can be added here */ + +	return; +} + +static struct cpsw_slave_data cpsw_slaves[] = { +	{ +		.slave_reg_ofs	= 0x208, +		.sliver_reg_ofs	= 0xd80, +		.phy_id		= 0, +		.phy_if		= PHY_INTERFACE_MODE_RMII, +	}, +}; + +static struct cpsw_platform_data cpsw_data = { +	.mdio_base		= CPSW_MDIO_BASE, +	.cpsw_base		= CPSW_BASE, +	.mdio_div		= 0xff, +	.channels		= 8, +	.cpdma_reg_ofs		= 0x800, +	.slaves			= 1, +	.slave_data		= cpsw_slaves, +	.ale_reg_ofs		= 0xd00, +	.ale_entries		= 1024, +	.host_port_reg_ofs	= 0x108, +	.hw_stats_reg_ofs	= 0x900, +	.mac_control		= (1 << 5), +	.control		= cpsw_control, +	.host_port_num		= 0, +	.version		= CPSW_CTRL_VERSION_2, +}; + +int board_eth_init(bd_t *bis) +{ +	int rv, ret = 0; +	uint8_t mac_addr[6]; +	uint32_t mac_hi, mac_lo; + +	if (!eth_getenv_enetaddr("ethaddr", mac_addr)) { +		/* try reading mac address from efuse */ +		mac_lo = readl(&cdev->macid0l); +		mac_hi = readl(&cdev->macid0h); +		mac_addr[0] = mac_hi & 0xFF; +		mac_addr[1] = (mac_hi & 0xFF00) >> 8; +		mac_addr[2] = (mac_hi & 0xFF0000) >> 16; +		mac_addr[3] = (mac_hi & 0xFF000000) >> 24; +		mac_addr[4] = mac_lo & 0xFF; +		mac_addr[5] = (mac_lo & 0xFF00) >> 8; +		if (is_valid_ether_addr(mac_addr)) +			eth_setenv_enetaddr("ethaddr", mac_addr); +	} + +	writel(RMII_MODE_ENABLE, &cdev->miisel); + +	rv = cpsw_register(&cpsw_data); +	if (rv < 0) +		printf("Error %d registering CPSW switch\n", rv); +	else +		ret += rv; + +	return ret; +} +#endif + diff --git a/board/isee/igep0033/board.h b/board/isee/igep0033/board.h new file mode 100644 index 000000000..37988e0fd --- /dev/null +++ b/board/isee/igep0033/board.h @@ -0,0 +1,27 @@ +/* + * IGEP COM AQUILA/CYGNUS boards information header + * + * Copyright (C) 2013, ISEE 2007 SL - http://www.isee.biz/ + * + * 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. + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * We must be able to enable uart0, for initial output. We then have a + * main pinmux function that can be overridden to enable all other pinmux that + * is required on the board. + */ +void enable_uart0_pin_mux(void); +void enable_board_pin_mux(void); +#endif diff --git a/board/isee/igep0033/mux.c b/board/isee/igep0033/mux.c new file mode 100644 index 000000000..16f4addf3 --- /dev/null +++ b/board/isee/igep0033/mux.c @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2013, ISEE 2007 SL - http://www.isee.biz/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <common.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/hardware.h> +#include <asm/arch/mux.h> +#include <asm/io.h> +#include <i2c.h> +#include "board.h" + +static struct module_pin_mux uart0_pin_mux[] = { +	{OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* UART0_RXD */ +	{OFFSET(uart0_txd), (MODE(0) | PULLUDEN)},		/* UART0_TXD */ +	{-1}, +}; + +static struct module_pin_mux mmc0_pin_mux[] = { +	{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},	/* MMC0_DAT3 */ +	{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},	/* MMC0_DAT2 */ +	{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},	/* MMC0_DAT1 */ +	{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},	/* MMC0_DAT0 */ +	{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},	/* MMC0_CLK */ +	{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},	/* MMC0_CMD */ +	{OFFSET(mcasp0_aclkx), (MODE(4) | RXACTIVE)},		/* MMC0_CD */ +	{-1}, +}; + +static struct module_pin_mux nand_pin_mux[] = { +	{OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD0 */ +	{OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD1 */ +	{OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD2 */ +	{OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD3 */ +	{OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD4 */ +	{OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD5 */ +	{OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD6 */ +	{OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD7 */ +	{OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */ +	{OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)},	/* NAND_WPN */ +	{OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)},		/* NAND_CS0 */ +	{OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)},	/* NAND_ADV_ALE */ +	{OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)},	/* NAND_OE */ +	{OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)},	/* NAND_WEN */ +	{OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)},	/* NAND_BE_CLE */ +	{-1}, +}; + +static struct module_pin_mux rmii1_pin_mux[] = { +	{OFFSET(mii1_txen), MODE(1)},			/* RMII1_TXEN */ +	{OFFSET(mii1_rxerr), MODE(1) | RXACTIVE},	/* RMII1_RXERR */ +	{OFFSET(mii1_crs), MODE(1) | RXACTIVE},		/* RMII1_CRS_DV */ +	{OFFSET(mii1_rxd0), MODE(1) | RXACTIVE},	/* RMII1_RXD0 */ +	{OFFSET(mii1_rxd1), MODE(1) | RXACTIVE},	/* RMII1_RXD1 */ +	{OFFSET(mii1_txd0), MODE(1)},			/* RMII1_TXD0 */ +	{OFFSET(mii1_txd1), MODE(1)},			/* RMII1_TXD1 */ +	{OFFSET(rmii1_refclk), MODE(0) | RXACTIVE},	/* RMII1_REF_CLK */ +	{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},	/* MDIO_DATA */ +	{OFFSET(mdio_clk), MODE(0) | PULLUP_EN},	/* MDIO_CLK */ +	{-1}, +}; + +void enable_uart0_pin_mux(void) +{ +	configure_module_pin_mux(uart0_pin_mux); +} + +/* + * Do board-specific muxes. + */ +void enable_board_pin_mux(void) +{ +	/* NAND Flash */ +	configure_module_pin_mux(nand_pin_mux); +	/* SD Card */ +	configure_module_pin_mux(mmc0_pin_mux); +	/* Ethernet pinmux. */ +	configure_module_pin_mux(rmii1_pin_mux); +} + diff --git a/board/karo/tx25/tx25.c b/board/karo/tx25/tx25.c index 85719a020..2952eba8c 100644 --- a/board/karo/tx25/tx25.c +++ b/board/karo/tx25/tx25.c @@ -27,9 +27,8 @@  #include <common.h>  #include <asm/io.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/imx25-pinmux.h> +#include <asm/arch/iomux-mx25.h>  #include <asm/gpio.h> -#include <asm/arch/sys_proto.h>  DECLARE_GLOBAL_DATA_PTR; @@ -42,36 +41,44 @@ void board_init_f(ulong bootflag)  #endif  #ifdef CONFIG_FEC_MXC +/* + * 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 GPIO_FEC_RESET_B	IMX_GPIO_NR(4, 7)  #define GPIO_FEC_ENABLE_B	IMX_GPIO_NR(4, 9)  void tx25_fec_init(void)  { -	struct iomuxc_mux_ctl *muxctl; -	struct iomuxc_pad_ctl *padctl; -	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5); -	u32 saved_rdata0_mode, saved_rdata1_mode, saved_rx_dv_mode; - -	debug("tx25_fec_init\n"); -	/* -	 * fec pin init is generic -	 */ -	mx25_fec_init_pins(); +	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), -	/* -	 * Set up the FEC_RESET_B and FEC_ENABLE GPIO pins. -	 * -	 * FEC_RESET_B: gpio4[7] is ALT 5 mode of pin D13 -	 * FEC_ENABLE_B: gpio4[9] is ALT 5 mode of pin D11 -	 */ -	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; -	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE; +		NEW_PAD_CTRL(MX25_PAD_D13__GPIO_4_7, 0), /* FEC_RESET_B */ +		NEW_PAD_CTRL(MX25_PAD_D11__GPIO_4_9, 0), /* FEC_ENABLE_B */ +	}; -	writel(gpio_mux_mode, &muxctl->pad_d13); -	writel(gpio_mux_mode, &muxctl->pad_d11); +	static const iomux_v3_cfg_t fec_cfg_pads[] = { +		MX25_PAD_FEC_RDATA0__GPIO_3_10, +		MX25_PAD_FEC_RDATA1__GPIO_3_11, +		MX25_PAD_FEC_RX_DV__GPIO_3_12, +	}; -	writel(0x0, &padctl->pad_d13); -	writel(0x0, &padctl->pad_d11); +	debug("tx25_fec_init\n"); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  	/* drop PHY power and assert reset (low) */  	gpio_direction_output(GPIO_FEC_RESET_B, 0); @@ -99,15 +106,10 @@ void tx25_fec_init(void)  	 *  RMII mode is selected by FEC_RX_DV which is GPIO 3_12 in mux mode  	 */  	/* -	 * save three current mux modes and set each to gpio mode +	 * set each mux mode to gpio mode  	 */ -	saved_rdata0_mode = readl(&muxctl->pad_fec_rdata0); -	saved_rdata1_mode = readl(&muxctl->pad_fec_rdata1); -	saved_rx_dv_mode = readl(&muxctl->pad_fec_rx_dv); - -	writel(gpio_mux_mode, &muxctl->pad_fec_rdata0); -	writel(gpio_mux_mode, &muxctl->pad_fec_rdata1); -	writel(gpio_mux_mode, &muxctl->pad_fec_rx_dv); +	imx_iomux_v3_setup_multiple_pads(fec_cfg_pads, +						ARRAY_SIZE(fec_cfg_pads));  	/*  	 * set each to 1 and make each an output @@ -128,19 +130,46 @@ void tx25_fec_init(void)  	/*  	 * set FEC pins back  	 */ -	writel(saved_rdata0_mode, &muxctl->pad_fec_rdata0); -	writel(saved_rdata1_mode, &muxctl->pad_fec_rdata1); -	writel(saved_rx_dv_mode, &muxctl->pad_fec_rx_dv); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  #else  #define tx25_fec_init()  #endif -int board_init() -{  #ifdef CONFIG_MXC_UART -	mx25_uart1_init_pins(); +/* + * 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 tx25_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)); +} +#else +#define tx25_uart1_init()  #endif + +int board_init() +{ +	tx25_uart1_init(); +  	/* board id for linux */  	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;  	return 0; diff --git a/board/nokia/rx51/rx51.c b/board/nokia/rx51/rx51.c index 48eb65f89..42bf8b669 100644 --- a/board/nokia/rx51/rx51.c +++ b/board/nokia/rx51/rx51.c @@ -332,10 +332,10 @@ void *video_hw_init(void)  static void twl4030_regulator_set_mode(u8 id, u8 mode)  {  	u16 msg = MSG_SINGULAR(DEV_GRP_P1, id, mode); -	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, msg >> 8, -			TWL4030_PM_MASTER_PB_WORD_MSB); -	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, msg & 0xff, -			TWL4030_PM_MASTER_PB_WORD_LSB); +	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, +			     TWL4030_PM_MASTER_PB_WORD_MSB, msg >> 8); +	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, +			     TWL4030_PM_MASTER_PB_WORD_LSB, msg & 0xff);  }  static void omap3_emu_romcode_call(u32 service_id, u32 *parameters) @@ -406,12 +406,12 @@ int misc_init_r(void)  				TWL4030_PM_RECEIVER_DEV_GRP_P1);  	/* store I2C access state */ -	twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER, &state, -			TWL4030_PM_MASTER_PB_CFG); +	twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER, TWL4030_PM_MASTER_PB_CFG, +			    &state);  	/* enable I2C access to powerbus (needed for twl4030 regulator) */ -	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, 0x02, -			TWL4030_PM_MASTER_PB_CFG); +	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, TWL4030_PM_MASTER_PB_CFG, +			     0x02);  	/* set VAUX3, VSIM and VMMC1 state to active - enable eMMC memory */  	twl4030_regulator_set_mode(RES_VAUX3, RES_STATE_ACTIVE); @@ -419,8 +419,8 @@ int misc_init_r(void)  	twl4030_regulator_set_mode(RES_VMMC1, RES_STATE_ACTIVE);  	/* restore I2C access state */ -	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, state, -			TWL4030_PM_MASTER_PB_CFG); +	twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER, TWL4030_PM_MASTER_PB_CFG, +			     state);  	/* set env variable attkernaddr for relocated kernel */  	sprintf(buf, "%#x", KERNEL_ADDRESS); @@ -475,14 +475,14 @@ void hw_watchdog_reset(void)  		return;  	/* read actual watchdog timeout */ -	twl4030_i2c_read_u8(TWL4030_CHIP_PM_RECEIVER, &timeout, -			TWL4030_PM_RECEIVER_WATCHDOG_CFG); +	twl4030_i2c_read_u8(TWL4030_CHIP_PM_RECEIVER, +			    TWL4030_PM_RECEIVER_WATCHDOG_CFG, &timeout);  	/* timeout 0 means watchdog is disabled */  	/* reset watchdog timeout to 31s (maximum) */  	if (timeout != 0) -		twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER, 31, -				TWL4030_PM_RECEIVER_WATCHDOG_CFG); +		twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER, +				     TWL4030_PM_RECEIVER_WATCHDOG_CFG, 31);  	/* store last watchdog reset time */  	twl_wd_time = get_timer(0); @@ -531,8 +531,8 @@ int rx51_kp_init(void)  {  	int ret = 0;  	u8 ctrl; -	ret = twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD, &ctrl, -		TWL4030_KEYPAD_KEYP_CTRL_REG); +	ret = twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD, +				  TWL4030_KEYPAD_KEYP_CTRL_REG, &ctrl);  	if (ret)  		return ret; @@ -541,18 +541,18 @@ int rx51_kp_init(void)  	ctrl |= TWL4030_KEYPAD_CTRL_KBD_ON;  	ctrl |= TWL4030_KEYPAD_CTRL_SOFT_NRST;  	ctrl |= TWL4030_KEYPAD_CTRL_SOFTMODEN; -	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, ctrl, -				TWL4030_KEYPAD_KEYP_CTRL_REG); +	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, +				    TWL4030_KEYPAD_KEYP_CTRL_REG, ctrl);  	/* enable key event status */ -	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, 0xfe, -				TWL4030_KEYPAD_KEYP_IMR1); +	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, +				    TWL4030_KEYPAD_KEYP_IMR1, 0xfe);  	/* enable interrupt generation on rising and falling */  	/* this is a workaround for qemu twl4030 emulation */ -	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, 0x57, -				TWL4030_KEYPAD_KEYP_EDR); +	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, +				    TWL4030_KEYPAD_KEYP_EDR, 0x57);  	/* enable ISR clear on read */ -	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, 0x05, -				TWL4030_KEYPAD_KEYP_SIH_CTRL); +	ret |= twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, +				    TWL4030_KEYPAD_KEYP_SIH_CTRL, 0x05);  	return 0;  } @@ -615,8 +615,8 @@ int rx51_kp_tstc(void)  	for (i = 0; i < 2; i++) {  		/* check interrupt register for events */ -		twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD, &intr, -				TWL4030_KEYPAD_KEYP_ISR1+(2*i)); +		twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD, +				    TWL4030_KEYPAD_KEYP_ISR1 + (2 * i), &intr);  		/* no event */  		if (!(intr&1)) diff --git a/board/nvidia/beaver/Makefile b/board/nvidia/beaver/Makefile new file mode 100644 index 000000000..9510f607a --- /dev/null +++ b/board/nvidia/beaver/Makefile @@ -0,0 +1,38 @@ +# +# Copyright (c) 2010-2013, NVIDIA CORPORATION.  All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +include $(TOPDIR)/config.mk + +$(shell mkdir -p $(obj)../cardhu) + +LIB	= $(obj)lib$(BOARD).o + +COBJS	= ../cardhu/cardhu.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/olimex/mx23_olinuxino/spl_boot.c b/board/olimex/mx23_olinuxino/spl_boot.c index a96c293c0..6ba8c86ea 100644 --- a/board/olimex/mx23_olinuxino/spl_boot.c +++ b/board/olimex/mx23_olinuxino/spl_boot.c @@ -29,8 +29,8 @@  #include <asm/arch/imx-regs.h>  #include <asm/arch/sys_proto.h> -#define	MUX_CONFIG_EMI	(MXS_PAD_3V3 | MXS_PAD_16MA | MXS_PAD_PULLUP) -#define	MUX_CONFIG_SSP	(MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) +#define	MUX_CONFIG_EMI	(MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP) +#define	MUX_CONFIG_SSP	(MXS_PAD_8MA | MXS_PAD_PULLUP)  const iomux_cfg_t iomux_setup[] = {  	/* DUART */ diff --git a/board/pandora/pandora.c b/board/pandora/pandora.c index 9ff5dd766..5f0c58d8d 100644 --- a/board/pandora/pandora.c +++ b/board/pandora/pandora.c @@ -114,8 +114,9 @@ int misc_init_r(void)  	/* Enable battery backup capacitor (3.2V, 0.5mA charge current) */  	twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER, +		TWL4030_PM_RECEIVER_BB_CFG,  		TWL4030_BB_CFG_BBCHEN | TWL4030_BB_CFG_BBSEL_3200MV | -		TWL4030_BB_CFG_BBISEL_500UA, TWL4030_PM_RECEIVER_BB_CFG); +		TWL4030_BB_CFG_BBISEL_500UA);  	dieid_num_r(); diff --git a/board/syteco/zmx25/zmx25.c b/board/syteco/zmx25/zmx25.c index 4f37c59d8..087d856b0 100644 --- a/board/syteco/zmx25/zmx25.c +++ b/board/syteco/zmx25/zmx25.c @@ -32,91 +32,85 @@  #include <asm/gpio.h>  #include <asm/io.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>  DECLARE_GLOBAL_DATA_PTR;  int board_init()  { -	struct iomuxc_mux_ctl *muxctl; -	struct iomuxc_pad_ctl *padctl; -	struct iomuxc_pad_input_select *inputselect; -	u32 gpio_mux_mode0_sion = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION; -	u32 gpio_mux_mode1 = MX25_PIN_MUX_MODE(1); -	u32 gpio_mux_mode5 = MX25_PIN_MUX_MODE(5); -	u32 gpio_mux_mode6 = MX25_PIN_MUX_MODE(6); -	u32 input_select1 = MX25_PAD_INPUT_SELECT_DAISY(1); -	u32 input_select2 = MX25_PAD_INPUT_SELECT_DAISY(2); +	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), +	}; -	icache_enable(); +	static const iomux_v3_cfg_t dig_out_pads[] = { +		MX25_PAD_CSI_D8__GPIO_1_7, /* Ouput 1 Ctrl */ +		MX25_PAD_CSI_D7__GPIO_1_6, /* Ouput 2 Ctrl */ +		NEW_PAD_CTRL(MX25_PAD_CSI_D6__GPIO_1_31, 0), /* Ouput 1 Stat */ +		NEW_PAD_CTRL(MX25_PAD_CSI_D5__GPIO_1_30, 0), /* Ouput 2 Stat */ +	}; + +	static const iomux_v3_cfg_t led_pads[] = { +		MX25_PAD_CSI_D9__GPIO_4_21, +		MX25_PAD_CSI_D4__GPIO_1_29, +	}; + +	static const iomux_v3_cfg_t can_pads[] = { +		NEW_PAD_CTRL(MX25_PAD_GPIO_A__CAN1_TX, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_GPIO_B__CAN1_RX, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_GPIO_C__CAN2_TX, NO_PAD_CTRL), +		NEW_PAD_CTRL(MX25_PAD_GPIO_D__CAN2_RX, NO_PAD_CTRL), +	}; -	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; -	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE; -	inputselect = (struct iomuxc_pad_input_select *)IMX_IOPADINPUTSEL_BASE; +	static const iomux_v3_cfg_t i2c3_pads[] = { +		MX25_PAD_CSPI1_SS1__I2C3_DAT, +		MX25_PAD_GPIO_E__I2C3_CLK, +	}; + +	icache_enable(); -	/* Setup of core volatage selection pin to run at 1.4V */ -	writel(gpio_mux_mode5, &muxctl->pad_ext_armclk); /* VCORE GPIO3[15] */ +	/* Setup of core voltage selection pin to run at 1.4V */ +	imx_iomux_v3_setup_pad(MX25_PAD_EXT_ARMCLK__GPIO_3_15); /* VCORE */  	gpio_direction_output(IMX_GPIO_NR(3, 15), 1); -	/* Setup of input daisy chains for SD card pins*/ -	writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_cmd); -	writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_clk); -	writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data0); -	writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data1); -	writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data2); -	writel(gpio_mux_mode0_sion, &muxctl->pad_sd1_data3); +	/* Setup of SD card pins*/ +	imx_iomux_v3_setup_multiple_pads(sdhc1_pads, ARRAY_SIZE(sdhc1_pads));  	/* Setup of digital output for USB power and OC */ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d3); /* USB Power GPIO1[28] */ +	imx_iomux_v3_setup_pad(MX25_PAD_CSI_D3__GPIO_1_28); /* USB Power */  	gpio_direction_output(IMX_GPIO_NR(1, 28), 1); -	writel(gpio_mux_mode5, &muxctl->pad_csi_d2); /* USB OC GPIO1[27] */ +	imx_iomux_v3_setup_pad(MX25_PAD_CSI_D2__GPIO_1_27); /* USB OC */  	gpio_direction_input(IMX_GPIO_NR(1, 18));  	/* Setup of digital output control pins */ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d8); /* Ouput 1 Ctrl GPIO1[7] */ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d7); /* Ouput 2 Ctrl GPIO1[6] */ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d6); /* Ouput 1 Stat GPIO1[31]*/ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d5); /* Ouput 2 Stat GPIO1[30]*/ - -	writel(0, &padctl->pad_csi_d6); /* Ouput 1 Stat pull up off */ -	writel(0, &padctl->pad_csi_d5); /* Ouput 2 Stat pull up off */ +	imx_iomux_v3_setup_multiple_pads(dig_out_pads, +						ARRAY_SIZE(dig_out_pads));  	/* Switch both output drivers off */  	gpio_direction_output(IMX_GPIO_NR(1, 7), 0);  	gpio_direction_output(IMX_GPIO_NR(1, 6), 0); -	/* Setup of key input pin GPIO2[29]*/ -	writel(gpio_mux_mode5 | MX25_PIN_MUX_SION, &muxctl->pad_kpp_row0); -	writel(0, &padctl->pad_kpp_row0); /* Key pull up off */ +	/* Setup of key input pin */ +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX25_PAD_KPP_ROW0__GPIO_2_29, 0));  	gpio_direction_input(IMX_GPIO_NR(2, 29));  	/* Setup of status LED outputs */ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d9);	/* GPIO4[21] */ -	writel(gpio_mux_mode5, &muxctl->pad_csi_d4);	/* GPIO1[29] */ +	imx_iomux_v3_setup_multiple_pads(led_pads, ARRAY_SIZE(led_pads));  	/* Switch both LEDs off */  	gpio_direction_output(IMX_GPIO_NR(4, 21), 0);  	gpio_direction_output(IMX_GPIO_NR(1, 29), 0);  	/* Setup of CAN1 and CAN2 signals */ -	writel(gpio_mux_mode6, &muxctl->pad_gpio_a);	/* CAN1 TX */ -	writel(gpio_mux_mode6, &muxctl->pad_gpio_b);	/* CAN1 RX */ -	writel(gpio_mux_mode6, &muxctl->pad_gpio_c);	/* CAN2 TX */ -	writel(gpio_mux_mode6, &muxctl->pad_gpio_d);	/* CAN2 RX */ - -	/* Setup of input daisy chains for CAN signals*/ -	writel(input_select1, &inputselect->can1_ipp_ind_canrx); /* CAN1 RX */ -	writel(input_select1, &inputselect->can2_ipp_ind_canrx); /* CAN2 RX */ +	imx_iomux_v3_setup_multiple_pads(can_pads, ARRAY_SIZE(can_pads));  	/* Setup of I2C3 signals */ -	writel(gpio_mux_mode1, &muxctl->pad_cspi1_ss1);	/* I2C3 SDA */ -	writel(gpio_mux_mode1, &muxctl->pad_gpio_e);	/* I2C3 SCL */ - -	/* Setup of input daisy chains for I2C3 signals*/ -	writel(input_select1, &inputselect->i2c3_ipp_sda_in);	/* I2C3 SDA */ -	writel(input_select2, &inputselect->i2c3_ipp_scl_in);	/* I2C3 SCL */ +	imx_iomux_v3_setup_multiple_pads(i2c3_pads, ARRAY_SIZE(i2c3_pads));  	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; @@ -128,25 +122,32 @@ int board_late_init(void)  	const char *e;  #ifdef CONFIG_FEC_MXC -	struct iomuxc_mux_ctl *muxctl; -	u32 gpio_mux_mode2 = MX25_PIN_MUX_MODE(2); -	u32 gpio_mux_mode5 = MX25_PIN_MUX_MODE(5); +/* + * 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 -	/* -	 * fec pin init is generic -	 */ -	mx25_fec_init_pins(); +	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), -	/* -	 * Set up LAN-RESET and FEC_RX_ERR -	 * -	 * LAN-RESET:  GPIO3[16] is ALT 5 mode of pin U20 -	 * FEC_RX_ERR: FEC_RX_ERR is ALT 2 mode of pin R2 -	 */ -	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; +		MX25_PAD_UPLL_BYPCLK__GPIO_3_16, /* LAN-RESET */ +		MX25_PAD_UART2_CTS__FEC_RX_ER, /* FEC_RX_ERR */ +	}; -	writel(gpio_mux_mode5, &muxctl->pad_upll_bypclk); -	writel(gpio_mux_mode2, &muxctl->pad_uart2_cts); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  	/* assert PHY reset (low) */  	gpio_direction_output(IMX_GPIO_NR(3, 16), 0); diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c index 3d9b6dd8f..c686f40a9 100644 --- a/board/ti/beagle/beagle.c +++ b/board/ti/beagle/beagle.c @@ -108,13 +108,14 @@ int board_init(void)  /*   * Routine: get_board_revision   * Description: Detect if we are running on a Beagle revision Ax/Bx, - *		C1/2/3, C4 or xM. This can be done by reading + *		C1/2/3, C4, xM Ax/Bx or xM Cx. This can be done by reading   *		the level of GPIO173, GPIO172 and GPIO171. This should   *		result in   *		GPIO173, GPIO172, GPIO171: 1 1 1 => Ax/Bx   *		GPIO173, GPIO172, GPIO171: 1 1 0 => C1/2/3   *		GPIO173, GPIO172, GPIO171: 1 0 1 => C4 - *		GPIO173, GPIO172, GPIO171: 0 0 0 => xM + *		GPIO173, GPIO172, GPIO171: 0 1 0 => xM Cx + *		GPIO173, GPIO172, GPIO171: 0 0 0 => xM Ax/Bx   */  static int get_board_revision(void)  { diff --git a/board/ti/dra7xx/evm.c b/board/ti/dra7xx/evm.c index 7bbb5492f..bf7e09196 100644 --- a/board/ti/dra7xx/evm.c +++ b/board/ti/dra7xx/evm.c @@ -27,7 +27,7 @@   * MA 02111-1307 USA   */  #include <common.h> -#include <twl6035.h> +#include <palmas.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/mmc_host_def.h> diff --git a/board/ti/omap5_uevm/evm.c b/board/ti/omap5_uevm/evm.c index 55337c09d..46db1bfe6 100644 --- a/board/ti/omap5_uevm/evm.c +++ b/board/ti/omap5_uevm/evm.c @@ -23,7 +23,7 @@   * MA 02111-1307 USA   */  #include <common.h> -#include <twl6035.h> +#include <palmas.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/mmc_host_def.h> @@ -63,8 +63,8 @@ int board_eth_init(bd_t *bis)   */  int misc_init_r(void)  { -#ifdef CONFIG_TWL6035_POWER -	twl6035_init_settings(); +#ifdef CONFIG_PALMAS_POWER +	palmas_init_settings();  #endif  	return 0;  } diff --git a/board/ti/panda/panda.c b/board/ti/panda/panda.c index cab059863..2bbe392d8 100644 --- a/board/ti/panda/panda.c +++ b/board/ti/panda/panda.c @@ -82,6 +82,12 @@ int misc_init_r(void)  	if (omap_revision() == OMAP4430_ES1_0)  		return 0; +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG +	if (omap_revision() >= OMAP4460_ES1_0 || +		omap_revision() <= OMAP4460_ES1_1) +		setenv("board_name", strcat(CONFIG_SYS_BOARD, "-es")); +#endif +  	gpio_direction_input(PANDA_ULPI_PHY_TYPE_GPIO);  	phy_type = gpio_get_value(PANDA_ULPI_PHY_TYPE_GPIO); diff --git a/board/ti/ti814x/evm.c b/board/ti/ti814x/evm.c index 446e36b84..7adb52405 100644 --- a/board/ti/ti814x/evm.c +++ b/board/ti/ti814x/evm.c @@ -17,6 +17,7 @@   */  #include <common.h> +#include <cpsw.h>  #include <errno.h>  #include <spl.h>  #include <asm/arch/cpu.h> @@ -39,6 +40,8 @@ static struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE;  static struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE;  #endif +static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; +  /* UART Defines */  #ifdef CONFIG_SPL_BUILD  #define UART_RESET		(0x1 << 1) @@ -151,6 +154,9 @@ void s_init(void)  	 */  	wdt_disable(); +	/* Enable timer */ +	timer_init(); +  	/* Setup the PLLs and the clocks for the peripherals */  	pll_init(); @@ -163,6 +169,9 @@ void s_init(void)  	/* Set MMC pins */  	enable_mmc1_pin_mux(); +	/* Set Ethernet pins */ +	enable_enet_pin_mux(); +  	/* Enable UART */  	uart_enable(); @@ -196,3 +205,69 @@ int board_mmc_init(bd_t *bis)  	return 0;  }  #endif + +#ifdef CONFIG_DRIVER_TI_CPSW +static void cpsw_control(int enabled) +{ +	/* VTP can be added here */ + +	return; +} + +static struct cpsw_slave_data cpsw_slaves[] = { +	{ +		.slave_reg_ofs	= 0x50, +		.sliver_reg_ofs	= 0x700, +		.phy_id		= 1, +	}, +	{ +		.slave_reg_ofs	= 0x90, +		.sliver_reg_ofs	= 0x740, +		.phy_id		= 0, +	}, +}; + +static struct cpsw_platform_data cpsw_data = { +	.mdio_base		= CPSW_MDIO_BASE, +	.cpsw_base		= CPSW_BASE, +	.mdio_div		= 0xff, +	.channels		= 8, +	.cpdma_reg_ofs		= 0x100, +	.slaves			= 1, +	.slave_data		= cpsw_slaves, +	.ale_reg_ofs		= 0x600, +	.ale_entries		= 1024, +	.host_port_reg_ofs	= 0x28, +	.hw_stats_reg_ofs	= 0x400, +	.mac_control		= (1 << 5), +	.control		= cpsw_control, +	.host_port_num		= 0, +	.version		= CPSW_CTRL_VERSION_1, +}; +#endif + +int board_eth_init(bd_t *bis) +{ +	uint8_t mac_addr[6]; +	uint32_t mac_hi, mac_lo; + +	if (!eth_getenv_enetaddr("ethaddr", mac_addr)) { +		printf("<ethaddr> not set. Reading from E-fuse\n"); +		/* try reading mac address from efuse */ +		mac_lo = readl(&cdev->macid0l); +		mac_hi = readl(&cdev->macid0h); +		mac_addr[0] = mac_hi & 0xFF; +		mac_addr[1] = (mac_hi & 0xFF00) >> 8; +		mac_addr[2] = (mac_hi & 0xFF0000) >> 16; +		mac_addr[3] = (mac_hi & 0xFF000000) >> 24; +		mac_addr[4] = mac_lo & 0xFF; +		mac_addr[5] = (mac_lo & 0xFF00) >> 8; + +		if (is_valid_ether_addr(mac_addr)) +			eth_setenv_enetaddr("ethaddr", mac_addr); +		else +			printf("Unable to read MAC address. Set <ethaddr>\n"); +	} + +	return cpsw_register(&cpsw_data); +} diff --git a/board/ti/ti814x/evm.h b/board/ti/ti814x/evm.h index 40f8710c8..6aebec62d 100644 --- a/board/ti/ti814x/evm.h +++ b/board/ti/ti814x/evm.h @@ -3,5 +3,6 @@  void enable_uart0_pin_mux(void);  void enable_mmc1_pin_mux(void); +void enable_enet_pin_mux(void);  #endif /* _EVM_H */ diff --git a/board/ti/ti814x/mux.c b/board/ti/ti814x/mux.c index 137acb452..fd9f36451 100644 --- a/board/ti/ti814x/mux.c +++ b/board/ti/ti814x/mux.c @@ -40,6 +40,36 @@ static struct module_pin_mux mmc1_pin_mux[] = {  	{-1},  }; +static struct module_pin_mux enet_pin_mux[] = { +	{OFFSET(pincntl232), MODE(0x01)},		/* EMAC_RMREFCLK */ +	{OFFSET(pincntl233), PULLUP_EN | MODE(0x01)},	/* MDCLK */ +	{OFFSET(pincntl234), PULLUP_EN | MODE(0x01)},	/* MDIO */ +	{OFFSET(pincntl235), MODE(0x01)},		/* EMAC[0]_MTCLK */ +	{OFFSET(pincntl236), MODE(0x01)},		/* EMAC[0]_MCOL */ +	{OFFSET(pincntl237), MODE(0x01)},		/* EMAC[0]_MCRS */ +	{OFFSET(pincntl238), MODE(0x01)},		/* EMAC[0]_MRXER */ +	{OFFSET(pincntl239), MODE(0x01)},		/* EMAC[0]_MRCLK */ +	{OFFSET(pincntl240), MODE(0x01)},		/* EMAC[0]_MRXD[0] */ +	{OFFSET(pincntl241), MODE(0x01)},		/* EMAC[0]_MRXD[1] */ +	{OFFSET(pincntl242), MODE(0x01)},		/* EMAC[0]_MRXD[2] */ +	{OFFSET(pincntl243), MODE(0x01)},		/* EMAC[0]_MRXD[3] */ +	{OFFSET(pincntl244), MODE(0x01)},		/* EMAC[0]_MRXD[4] */ +	{OFFSET(pincntl245), MODE(0x01)},		/* EMAC[0]_MRXD[5] */ +	{OFFSET(pincntl246), MODE(0x01)},		/* EMAC[0]_MRXD[6] */ +	{OFFSET(pincntl247), MODE(0x01)},		/* EMAC[0]_MRXD[7] */ +	{OFFSET(pincntl248), MODE(0x01)},		/* EMAC[0]_MRXDV */ +	{OFFSET(pincntl249), MODE(0x01)},		/* EMAC[0]_GMTCLK */ +	{OFFSET(pincntl250), MODE(0x01)},		/* EMAC[0]_MTXD[0] */ +	{OFFSET(pincntl251), MODE(0x01)},		/* EMAC[0]_MTXD[1] */ +	{OFFSET(pincntl252), MODE(0x01)},		/* EMAC[0]_MTXD[2] */ +	{OFFSET(pincntl253), MODE(0x01)},		/* EMAC[0]_MTXD[3] */ +	{OFFSET(pincntl254), MODE(0x01)},		/* EMAC[0]_MTXD[4] */ +	{OFFSET(pincntl255), MODE(0x01)},		/* EMAC[0]_MTXD[5] */ +	{OFFSET(pincntl256), MODE(0x01)},		/* EMAC[0]_MTXD[6] */ +	{OFFSET(pincntl257), MODE(0x01)},		/* EMAC[0]_MTXD[7] */ +	{OFFSET(pincntl258), MODE(0x01)},		/* EMAC[0]_MTXEN */ +}; +  void enable_uart0_pin_mux(void)  {  	configure_module_pin_mux(uart0_pin_mux); @@ -49,3 +79,8 @@ void enable_mmc1_pin_mux(void)  {  	configure_module_pin_mux(mmc1_pin_mux);  } + +void enable_enet_pin_mux(void) +{ +	configure_module_pin_mux(enet_pin_mux); +} diff --git a/board/ttcontrol/vision2/vision2.c b/board/ttcontrol/vision2/vision2.c index a471fec23..9cc758a17 100644 --- a/board/ttcontrol/vision2/vision2.c +++ b/board/ttcontrol/vision2/vision2.c @@ -26,10 +26,9 @@  #include <common.h>  #include <asm/io.h>  #include <asm/arch/imx-regs.h> -#include <asm/arch/mx5x_pins.h>  #include <asm/arch/crm_regs.h>  #include <asm/arch/clock.h> -#include <asm/arch/iomux.h> +#include <asm/arch/iomux-mx51.h>  #include <asm/gpio.h>  #include <asm/arch/sys_proto.h>  #include <i2c.h> @@ -68,85 +67,67 @@ void hw_watchdog_reset(void)  	int val;  	/* toggle watchdog trigger pin */ -	val = gpio_get_value(66); +	val = gpio_get_value(IMX_GPIO_NR(3, 2));  	val = val ? 0 : 1; -	gpio_set_value(66, val); +	gpio_set_value(IMX_GPIO_NR(3, 2), val);  }  #endif  static void init_drive_strength(void)  { -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_PKEDDR, PAD_CTL_DDR_INPUT_CMOS); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_PKEADDR, PAD_CTL_PKE_ENABLE); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDRAPKS, PAD_CTL_PUE_KEEPER); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDRAPUS, PAD_CTL_100K_PU); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_SR_A1, PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_A0, PAD_CTL_DRV_HIGH); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_A1, PAD_CTL_DRV_HIGH); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_RAS, -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_CAS, -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_PKEDDR, PAD_CTL_PKE_ENABLE); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDRPKS, PAD_CTL_PUE_KEEPER); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_HYSDDR0, PAD_CTL_HYS_NONE); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_HYSDDR1, PAD_CTL_HYS_NONE); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_HYSDDR2, PAD_CTL_HYS_NONE); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_HYSDDR3, PAD_CTL_HYS_NONE); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_SR_B0, PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_SR_B1, PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_SR_B2, PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDR_SR_B4, PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DDRPUS, PAD_CTL_100K_PU); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_INMODE1, PAD_CTL_DDR_INPUT_CMOS); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DRAM_B0, PAD_CTL_DRV_MEDIUM); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DRAM_B1, PAD_CTL_DRV_MEDIUM); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DRAM_B2, PAD_CTL_DRV_MEDIUM); -	mxc_iomux_set_pad(MX51_PIN_CTL_GRP_DRAM_B4, PAD_CTL_DRV_MEDIUM); +	static const iomux_v3_cfg_t ddr_pads[] = { +		NEW_PAD_CTRL(MX51_GRP_PKEDDR, 0), +		NEW_PAD_CTRL(MX51_GRP_PKEADDR, PAD_CTL_PKE), +		NEW_PAD_CTRL(MX51_GRP_DDRAPKS, 0), +		NEW_PAD_CTRL(MX51_GRP_DDRAPUS, PAD_CTL_PUS_100K_UP), +		NEW_PAD_CTRL(MX51_GRP_DDR_SR_A1, PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_GRP_DDR_A0, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX51_GRP_DDR_A1, PAD_CTL_DSE_HIGH), +		NEW_PAD_CTRL(MX51_PAD_DRAM_RAS__DRAM_RAS, +				PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_DRAM_CAS__DRAM_CAS, +				PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_GRP_PKEDDR, PAD_CTL_PKE), +		NEW_PAD_CTRL(MX51_GRP_DDRPKS, 0), +		NEW_PAD_CTRL(MX51_GRP_HYSDDR0, 0), +		NEW_PAD_CTRL(MX51_GRP_HYSDDR1, 0), +		NEW_PAD_CTRL(MX51_GRP_HYSDDR2, 0), +		NEW_PAD_CTRL(MX51_GRP_HYSDDR3, 0), +		NEW_PAD_CTRL(MX51_GRP_DRAM_SR_B0, PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_GRP_DRAM_SR_B1, PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_GRP_DRAM_SR_B2, PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_GRP_DRAM_SR_B4, PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_GRP_DDRPUS, PAD_CTL_PUS_100K_UP), +		NEW_PAD_CTRL(MX51_GRP_INMODE1, 0), +		NEW_PAD_CTRL(MX51_GRP_DRAM_B0, PAD_CTL_DSE_MED), +		NEW_PAD_CTRL(MX51_GRP_DRAM_B1, PAD_CTL_DSE_MED), +		NEW_PAD_CTRL(MX51_GRP_DRAM_B2, PAD_CTL_DSE_MED), +		NEW_PAD_CTRL(MX51_GRP_DRAM_B4, PAD_CTL_DSE_MED), -	/* Setting pad options */ -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDWE, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDCKE0, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDCKE1, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDCLK, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDQS0, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDQS1, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDQS2, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_SDQS3, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_CS0, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_CS1, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_DQM0, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_DQM1, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_DQM2, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); -	mxc_iomux_set_pad(MX51_PIN_CTL_DRAM_DQM3, -		PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | -		PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDWE__DRAM_SDWE, MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDCKE0__DRAM_SDCKE0, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDCKE1__DRAM_SDCKE1, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDCLK__DRAM_SDCLK, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDQS0__DRAM_SDQS0, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDQS1__DRAM_SDQS1, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDQS2__DRAM_SDQS2, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_SDQS3__DRAM_SDQS3, +				MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_CS0__DRAM_CS0, MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_CS1__DRAM_CS1, MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_DQM0__DRAM_DQM0, MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_DQM1__DRAM_DQM1, MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_DQM2__DRAM_DQM2, MX51_GPIO_PAD_CTRL), +		NEW_PAD_CTRL(MX51_PAD_DRAM_DQM3__DRAM_DQM3, MX51_GPIO_PAD_CTRL), +	}; + +	imx_iomux_v3_setup_multiple_pads(ddr_pads, ARRAY_SIZE(ddr_pads));  }  int dram_init(void) @@ -170,134 +151,102 @@ static void setup_weim(void)  static void setup_uart(void)  { -	unsigned int pad = PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | -			 PAD_CTL_PUE_PULL | PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST; -	/* console RX on Pin EIM_D25 */ -	mxc_request_iomux(MX51_PIN_EIM_D25, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_D25, pad); -	/* console TX on Pin EIM_D26 */ -	mxc_request_iomux(MX51_PIN_EIM_D26, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_EIM_D26, pad); +	static const iomux_v3_cfg_t uart_pads[] = { +		MX51_PAD_EIM_D25__UART3_RXD, /* console RX */ +		MX51_PAD_EIM_D26__UART3_TXD, /* console TX */ +	}; + +	imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));  }  #ifdef CONFIG_MXC_SPI  void spi_io_init(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, -		PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); - -	/* 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, -		PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); - -	/* 000: Select mux mode: ALT0 mux port: SS0 of instance: ecspi1. */ -	mxc_request_iomux(MX51_PIN_CSPI1_SS0, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_SS0, -		PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | -		PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); - -	/* -	 * SS1 will be used as GPIO because of uninterrupted -	 * long SPI transmissions (GPIO4_25) -	 */ -	mxc_request_iomux(MX51_PIN_CSPI1_SS1, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_SS1, -		PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | -		PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); - -	/* 000: Select mux mode: ALT0 mux port: SS2 of instance: ecspi1. */ -	mxc_request_iomux(MX51_PIN_DI1_PIN11, IOMUX_CONFIG_ALT7); -	mxc_iomux_set_pad(MX51_PIN_DI1_PIN11, -		PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | -		PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); +	static const iomux_v3_cfg_t spi_pads[] = { +		NEW_PAD_CTRL(MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI, PAD_CTL_HYS | +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_MISO__ECSPI1_MISO, PAD_CTL_HYS | +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_SS0__ECSPI1_SS0, PAD_CTL_HYS | +			PAD_CTL_PKE | PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_SS1__ECSPI1_SS1, PAD_CTL_HYS | +			PAD_CTL_PKE | PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_DI1_PIN11__ECSPI1_SS2, PAD_CTL_HYS | +			PAD_CTL_PKE | PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +		NEW_PAD_CTRL(MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK, PAD_CTL_HYS | +				PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST), +	}; -	/* 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, -		PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); +	imx_iomux_v3_setup_multiple_pads(spi_pads, ARRAY_SIZE(spi_pads));  }  static void reset_peripherals(int reset)  { +#ifdef CONFIG_VISION2_HW_1_0 +	static const iomux_v3_cfg_t fec_cfg_pads[] = { +		/* RXD1 */ +		NEW_PAD_CTRL(MX51_PAD_EIM_EB3__GPIO2_23, NO_PAD_CTRL), +		/* RXD2 */ +		NEW_PAD_CTRL(MX51_PAD_EIM_CS2__GPIO2_27, NO_PAD_CTRL), +		/* RXD3 */ +		NEW_PAD_CTRL(MX51_PAD_EIM_CS3__GPIO2_28, NO_PAD_CTRL), +		/* RXER */ +		NEW_PAD_CTRL(MX51_PAD_EIM_CS4__GPIO2_29, NO_PAD_CTRL), +		/* COL */ +		NEW_PAD_CTRL(MX51_PAD_NANDF_RB2__GPIO3_10, NO_PAD_CTRL), +		/* RCLK */ +		NEW_PAD_CTRL(MX51_PAD_NANDF_RB3__GPIO3_11, NO_PAD_CTRL), +		/* RXD0 */ +		NEW_PAD_CTRL(MX51_PAD_NANDF_D9__GPIO3_31, NO_PAD_CTRL), +	}; + +	static const iomux_v3_cfg_t fec_pads[] = { +		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, +		NEW_PAD_CTRL(MX51_PAD_NANDF_RB3__FEC_RX_CLK, MX51_PAD_CTRL_4), +		MX51_PAD_EIM_CS4__FEC_RX_ER, +		NEW_PAD_CTRL(MX51_PAD_NANDF_RB2__FEC_COL, MX51_PAD_CTRL_4), +	}; +#endif +  	if (reset) {  		/* reset_n is on NANDF_D15 */ -		gpio_direction_output(89, 0); +		gpio_direction_output(IMX_GPIO_NR(3, 25), 0);  #ifdef CONFIG_VISION2_HW_1_0  		/*  		 * set FEC Configuration lines  		 * set levels of FEC config lines  		 */ -		gpio_direction_output(75, 0); -		gpio_direction_output(74, 1); -		gpio_direction_output(95, 1); +		gpio_direction_output(IMX_GPIO_NR(3, 11), 0); +		gpio_direction_output(IMX_GPIO_NR(3, 10), 1); +		gpio_direction_output(IMX_GPIO_NR(3, 31), 1);  		/* set direction of FEC config lines */ -		gpio_direction_output(59, 0); -		gpio_direction_output(60, 0); -		gpio_direction_output(61, 0); -		gpio_direction_output(55, 1); +		gpio_direction_output(IMX_GPIO_NR(2, 27), 0); +		gpio_direction_output(IMX_GPIO_NR(2, 28), 0); +		gpio_direction_output(IMX_GPIO_NR(2, 29), 0); +		gpio_direction_output(IMX_GPIO_NR(2, 23), 1); -		/* FEC_RXD1 - sel GPIO (2-23) for configuration -> 1 */ -		mxc_request_iomux(MX51_PIN_EIM_EB3, IOMUX_CONFIG_ALT1); -		/* FEC_RXD2 - sel GPIO (2-27) for configuration -> 0 */ -		mxc_request_iomux(MX51_PIN_EIM_CS2, IOMUX_CONFIG_ALT1); -		/* FEC_RXD3 - sel GPIO (2-28) for configuration -> 0 */ -		mxc_request_iomux(MX51_PIN_EIM_CS3, IOMUX_CONFIG_ALT1); -		/* FEC_RXER - sel GPIO (2-29) for configuration -> 0 */ -		mxc_request_iomux(MX51_PIN_EIM_CS4, IOMUX_CONFIG_ALT1); -		/* FEC_COL  - sel GPIO (3-10) for configuration -> 1 */ -		mxc_request_iomux(MX51_PIN_NANDF_RB2, IOMUX_CONFIG_ALT3); -		/* FEC_RCLK - sel GPIO (3-11) for configuration -> 0 */ -		mxc_request_iomux(MX51_PIN_NANDF_RB3, IOMUX_CONFIG_ALT3); -		/* FEC_RXD0 - sel GPIO (3-31) for configuration -> 1 */ -		mxc_request_iomux(MX51_PIN_NANDF_D9, IOMUX_CONFIG_ALT3); +		imx_iomux_v3_setup_multiple_pads(fec_cfg_pads, +						 ARRAY_SIZE(fec_cfg_pads));  #endif -		/* -		 * activate reset_n pin -		 * Select mux mode: ALT3 mux port: NAND D15 -		 */ -		mxc_request_iomux(MX51_PIN_NANDF_D15, IOMUX_CONFIG_ALT3); -		mxc_iomux_set_pad(MX51_PIN_NANDF_D15, -			PAD_CTL_DRV_VOT_HIGH | PAD_CTL_DRV_MAX); +		/* activate reset_n pin */ +		imx_iomux_v3_setup_pad( +				NEW_PAD_CTRL(MX51_PAD_NANDF_D15__GPIO3_25, +						PAD_CTL_DSE_MAX));  	} else {  		/* set FEC Control lines */ -		gpio_direction_input(89); +		gpio_direction_input(IMX_GPIO_NR(3, 25));  		udelay(500);  #ifdef CONFIG_VISION2_HW_1_0 -		/* 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 RX_CLK */ -		mxc_request_iomux(MX51_PIN_NANDF_RB3, IOMUX_CONFIG_ALT1); -		mxc_iomux_set_pad(MX51_PIN_NANDF_RB3, 0x2180); - -		/* FEC RX_ER */ -		mxc_request_iomux(MX51_PIN_EIM_CS4, IOMUX_CONFIG_ALT3); -		mxc_iomux_set_pad(MX51_PIN_EIM_CS4, 0x180); - -		/* FEC COL */ -		mxc_request_iomux(MX51_PIN_NANDF_RB2, IOMUX_CONFIG_ALT1); -		mxc_iomux_set_pad(MX51_PIN_NANDF_RB2, 0x2180); +		imx_iomux_v3_setup_multiple_pads(fec_pads, +							ARRAY_SIZE(fec_pads));  #endif  	}  } @@ -376,155 +325,94 @@ static void power_init_mx51(void)  static void setup_gpios(void)  { -	unsigned int i; +	static const iomux_v3_cfg_t gpio_pads_1[] = { +		NEW_PAD_CTRL(MX51_PAD_GPIO1_7__GPIO1_7, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* CAM_SUP_DISn */ +		NEW_PAD_CTRL(MX51_PAD_DI1_PIN12__GPIO3_1, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* DAB Display EN */ +		NEW_PAD_CTRL(MX51_PAD_DI1_PIN13__GPIO3_2, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* WDOG_TRIGGER */ +	}; -	/* CAM_SUP_DISn, GPIO1_7 */ -	mxc_request_iomux(MX51_PIN_GPIO1_7, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_GPIO1_7, 0x82); +	static const iomux_v3_cfg_t gpio_pads_2[] = { +		NEW_PAD_CTRL(MX51_PAD_DI1_D0_CS__GPIO3_3, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* Display2 TxEN */ +		NEW_PAD_CTRL(MX51_PAD_DI1_D1_CS__GPIO3_4, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* DAB Light EN */ +		NEW_PAD_CTRL(MX51_PAD_DISPB2_SER_DIN__GPIO3_5, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* AUDIO_MUTE */ +		NEW_PAD_CTRL(MX51_PAD_DISPB2_SER_DIO__GPIO3_6, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* SPARE_OUT */ +		NEW_PAD_CTRL(MX51_PAD_NANDF_D14__GPIO3_26, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* BEEPER_EN */ +		NEW_PAD_CTRL(MX51_PAD_NANDF_D13__GPIO3_27, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* POWER_OFF */ +		NEW_PAD_CTRL(MX51_PAD_NANDF_D10__GPIO3_30, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* FRAM_WE */ +		NEW_PAD_CTRL(MX51_PAD_CSPI1_RDY__GPIO4_26, PAD_CTL_PKE | +				PAD_CTL_DSE_MED), /* EXPANSION_EN */ +		MX51_PAD_GPIO1_2__PWM1_PWMO, +	}; -	/* DAB Display EN, GPIO3_1 */ -	mxc_request_iomux(MX51_PIN_DI1_PIN12, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_pad(MX51_PIN_DI1_PIN12, 0x82); +	unsigned int i; -	/* WDOG_TRIGGER, GPIO3_2 */ -	mxc_request_iomux(MX51_PIN_DI1_PIN13, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_pad(MX51_PIN_DI1_PIN13, 0x82); +	imx_iomux_v3_setup_multiple_pads(gpio_pads_1, ARRAY_SIZE(gpio_pads_1));  	/* Now we need to trigger the watchdog */  	WATCHDOG_RESET(); -	/* Display2 TxEN, GPIO3_3 */ -	mxc_request_iomux(MX51_PIN_DI1_D0_CS, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_pad(MX51_PIN_DI1_D0_CS, 0x82); - -	/* DAB Light EN, GPIO3_4 */ -	mxc_request_iomux(MX51_PIN_DI1_D1_CS, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_pad(MX51_PIN_DI1_D1_CS, 0x82); - -	/* AUDIO_MUTE, GPIO3_5 */ -	mxc_request_iomux(MX51_PIN_DISPB2_SER_DIN, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_pad(MX51_PIN_DISPB2_SER_DIN, 0x82); - -	/* SPARE_OUT, GPIO3_6 */ -	mxc_request_iomux(MX51_PIN_DISPB2_SER_DIO, IOMUX_CONFIG_ALT4); -	mxc_iomux_set_pad(MX51_PIN_DISPB2_SER_DIO, 0x82); - -	/* BEEPER_EN, GPIO3_26 */ -	mxc_request_iomux(MX51_PIN_NANDF_D14, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_NANDF_D14, 0x82); - -	/* POWER_OFF, GPIO3_27 */ -	mxc_request_iomux(MX51_PIN_NANDF_D13, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_NANDF_D13, 0x82); - -	/* FRAM_WE, GPIO3_30 */ -	mxc_request_iomux(MX51_PIN_NANDF_D10, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_NANDF_D10, 0x82); - -	/* EXPANSION_EN, GPIO4_26 */ -	mxc_request_iomux(MX51_PIN_CSPI1_RDY, IOMUX_CONFIG_ALT3); -	mxc_iomux_set_pad(MX51_PIN_CSPI1_RDY, 0x82); - -	/* PWM Output GPIO1_2 */ -	mxc_request_iomux(MX51_PIN_GPIO1_2, IOMUX_CONFIG_ALT1); +	imx_iomux_v3_setup_multiple_pads(gpio_pads_2, ARRAY_SIZE(gpio_pads_2));  	/*  	 * Set GPIO1_4 to high and output; it is used to reset  	 * the system on reboot  	 */ -	gpio_direction_output(4, 1); +	gpio_direction_output(IMX_GPIO_NR(1, 4), 1); -	gpio_direction_output(7, 0); -	for (i = 65; i < 71; i++) +	gpio_direction_output(IMX_GPIO_NR(1, 7), 0); +	for (i = IMX_GPIO_NR(3, 1); i < IMX_GPIO_NR(3, 7); i++)  		gpio_direction_output(i, 0); -	gpio_direction_output(94, 0); +	gpio_direction_output(IMX_GPIO_NR(3, 30), 0);  	/* Set POWER_OFF high */ -	gpio_direction_output(91, 1); +	gpio_direction_output(IMX_GPIO_NR(3, 27), 1); -	gpio_direction_output(90, 0); +	gpio_direction_output(IMX_GPIO_NR(3, 26), 0); -	gpio_direction_output(122, 0); +	gpio_direction_output(IMX_GPIO_NR(4, 26), 0); -	gpio_direction_output(121, 1); +	gpio_direction_output(IMX_GPIO_NR(4, 25), 1);  	WATCHDOG_RESET();  }  static void setup_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); +	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 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); - -	/* 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));  }  struct fsl_esdhc_cfg esdhc_cfg[1] = { @@ -536,7 +424,7 @@ int get_mmc_getcd(u8 *cd, struct mmc *mmc)  	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;  	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) -		*cd = gpio_get_value(0); +		*cd = gpio_get_value(IMX_GPIO_NR(1, 0));  	else  		*cd = 0; @@ -546,56 +434,24 @@ int get_mmc_getcd(u8 *cd, struct mmc *mmc)  #ifdef CONFIG_FSL_ESDHC  int board_mmc_init(bd_t *bis)  { -	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); +	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), +	}; + +	imx_iomux_v3_setup_multiple_pads(sd1_pads, ARRAY_SIZE(sd1_pads));  	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);  	return fsl_esdhc_initialize(bis, &esdhc_cfg[0]); @@ -604,13 +460,18 @@ int board_mmc_init(bd_t *bis)  void lcd_enable(void)  { +	static const iomux_v3_cfg_t lcd_pads[] = { +		MX51_PAD_DI1_PIN2__DI1_PIN2, +		MX51_PAD_DI1_PIN3__DI1_PIN3, +	}; +  	int ret; -	mxc_request_iomux(MX51_PIN_DI1_PIN2, IOMUX_CONFIG_ALT0); -	mxc_request_iomux(MX51_PIN_DI1_PIN3, IOMUX_CONFIG_ALT0); +	imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads)); -	gpio_set_value(2, 1); -	mxc_request_iomux(MX51_PIN_GPIO1_2, IOMUX_CONFIG_ALT0); +	gpio_set_value(IMX_GPIO_NR(1, 2), 1); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_GPIO1_2__GPIO1_2, +						NO_PAD_CTRL));  	ret = ipuv3_fb_init(&nec_nl6448bc26_09c, 0, IPU_PIX_FMT_RGB666);  	if (ret) @@ -624,9 +485,9 @@ int board_early_init_f(void)  	init_drive_strength();  	/* Setup debug led */ -	gpio_direction_output(6, 0); -	mxc_request_iomux(MX51_PIN_GPIO1_6, IOMUX_CONFIG_ALT0); -	mxc_iomux_set_pad(MX51_PIN_GPIO1_6, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST); +	gpio_direction_output(IMX_GPIO_NR(1, 6), 0); +	imx_iomux_v3_setup_pad(NEW_PAD_CTRL(MX51_PAD_GPIO1_6__GPIO1_6, +					PAD_CTL_DSE_MAX | PAD_CTL_SRE_FAST));  	/* wait a little while to give the pll time to settle */  	sdelay(100000); @@ -644,12 +505,12 @@ int board_early_init_f(void)  static void backlight(int on)  {  	if (on) { -		gpio_set_value(65, 1); +		gpio_set_value(IMX_GPIO_NR(3, 1), 1);  		udelay(10000); -		gpio_set_value(68, 1); +		gpio_set_value(IMX_GPIO_NR(3, 4), 1);  	} else { -		gpio_set_value(65, 0); -		gpio_set_value(68, 0); +		gpio_set_value(IMX_GPIO_NR(3, 1), 0); +		gpio_set_value(IMX_GPIO_NR(3, 4), 0);  	}  } diff --git a/board/wandboard/wandboard.c b/board/wandboard/wandboard.c index ac7b89aae..bb983528b 100644 --- a/board/wandboard/wandboard.c +++ b/board/wandboard/wandboard.c @@ -16,6 +16,7 @@  #include <asm/arch/sys_proto.h>  #include <asm/gpio.h>  #include <asm/imx-common/iomux-v3.h> +#include <asm/imx-common/boot_mode.h>  #include <asm/io.h>  #include <asm/sizes.h>  #include <common.h> @@ -26,18 +27,19 @@  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 USDHC1_CD_GPIO		IMX_GPIO_NR(1, 2) +#define USDHC3_CD_GPIO		IMX_GPIO_NR(3, 9)  #define ETH_PHY_RESET		IMX_GPIO_NR(3, 29)  int dram_init(void) @@ -52,6 +54,17 @@ static iomux_v3_cfg_t const uart1_pads[] = {  	MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),  }; +iomux_v3_cfg_t const usdhc1_pads[] = { +	MX6_PAD_SD1_CLK__USDHC1_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD1_CMD__USDHC1_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD1_DAT0__USDHC1_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD1_DAT1__USDHC1_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD1_DAT2__USDHC1_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	MX6_PAD_SD1_DAT3__USDHC1_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), +	/* Carrier MicroSD Card Detect */ +	MX6_PAD_GPIO_2__GPIO_1_2      | MUX_PAD_CTRL(NO_PAD_CTRL), +}; +  static 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), @@ -59,6 +72,8 @@ static iomux_v3_cfg_t const usdhc3_pads[] = {  	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), +	/* SOM MicroSD Card Detect */ +	MX6_PAD_EIM_DA9__GPIO_3_9     | MUX_PAD_CTRL(NO_PAD_CTRL),  };  static iomux_v3_cfg_t const enet_pads[] = { @@ -96,18 +111,66 @@ static void setup_iomux_enet(void)  	gpio_set_value(ETH_PHY_RESET, 1);  } -static struct fsl_esdhc_cfg usdhc_cfg[1] = { +static struct fsl_esdhc_cfg usdhc_cfg[2] = {  	{USDHC3_BASE_ADDR}, +	{USDHC1_BASE_ADDR},  }; +int board_mmc_getcd(struct mmc *mmc) +{ +	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; +	int ret = 0; + +	switch (cfg->esdhc_base) { +	case USDHC1_BASE_ADDR: +		ret = !gpio_get_value(USDHC1_CD_GPIO); +		break; +	case USDHC3_BASE_ADDR: +		ret = !gpio_get_value(USDHC3_CD_GPIO); +		break; +	} + +	return ret; +} +  int board_mmc_init(bd_t *bis)  { -	imx_iomux_v3_setup_multiple_pads(usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); +	s32 status = 0; +	u32 index = 0; + +	/* +	 * Following map is done: +	 * (U-boot device node)    (Physical Port) +	 * mmc0                    SOM MicroSD +	 * mmc1                    Carrier board MicroSD +	 */ +	for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) { +		switch (index) { +		case 0: +			imx_iomux_v3_setup_multiple_pads( +				usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); +			usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); +			usdhc_cfg[0].max_bus_width = 4; +			gpio_direction_input(USDHC3_CD_GPIO); +			break; +		case 1: +			imx_iomux_v3_setup_multiple_pads( +				usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); +			usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); +			usdhc_cfg[1].max_bus_width = 4; +			gpio_direction_input(USDHC1_CD_GPIO); +			break; +		default: +			printf("Warning: you configured more USDHC controllers" +			       "(%d) then supported by the board (%d)\n", +			       index + 1, CONFIG_SYS_FSL_USDHC_NUM); +			return status; +		} -	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); -	usdhc_cfg[0].max_bus_width = 4; +		status |= fsl_esdhc_initialize(bis, &usdhc_cfg[index]); +	} -	return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); +	return status;  }  static int mx6_rgmii_rework(struct phy_device *phydev) @@ -162,6 +225,24 @@ int board_early_init_f(void)  	return 0;  } +#ifdef CONFIG_CMD_BMODE +static const struct boot_mode board_boot_modes[] = { +	/* 4 bit bus width */ +	{"mmc0",	  MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)}, +	{"mmc1",	  MAKE_CFGVAL(0x40, 0x20, 0x00, 0x00)}, +	{NULL,	 0}, +}; +#endif + +int board_late_init(void) +{ +#ifdef CONFIG_CMD_BMODE +	add_board_boot_modes(board_boot_modes); +#endif + +	return 0; +} +  int board_init(void)  {  	/* address of boot parameters */ diff --git a/board/woodburn/woodburn.c b/board/woodburn/woodburn.c index 7c36af080..3f2e6b52a 100644 --- a/board/woodburn/woodburn.c +++ b/board/woodburn/woodburn.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> @@ -74,25 +73,29 @@ static void board_setup_sdram(void)  static void setup_iomux_fec(void)  { +	static const iomux_v3_cfg_t fec_pads[] = { +		MX35_PAD_FEC_TX_CLK__FEC_TX_CLK, +		MX35_PAD_FEC_RX_CLK__FEC_RX_CLK, +		MX35_PAD_FEC_RX_DV__FEC_RX_DV, +		MX35_PAD_FEC_COL__FEC_COL, +		MX35_PAD_FEC_RDATA0__FEC_RDATA_0, +		MX35_PAD_FEC_TDATA0__FEC_TDATA_0, +		MX35_PAD_FEC_TX_EN__FEC_TX_EN, +		MX35_PAD_FEC_MDC__FEC_MDC, +		MX35_PAD_FEC_MDIO__FEC_MDIO, +		MX35_PAD_FEC_TX_ERR__FEC_TX_ERR, +		MX35_PAD_FEC_RX_ERR__FEC_RX_ERR, +		MX35_PAD_FEC_CRS__FEC_CRS, +		MX35_PAD_FEC_RDATA1__FEC_RDATA_1, +		MX35_PAD_FEC_TDATA1__FEC_TDATA_1, +		MX35_PAD_FEC_RDATA2__FEC_RDATA_2, +		MX35_PAD_FEC_TDATA2__FEC_TDATA_2, +		MX35_PAD_FEC_RDATA3__FEC_RDATA_3, +		MX35_PAD_FEC_TDATA3__FEC_TDATA_3, +	}; +  	/* 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); +	imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));  }  int woodburn_init(void) @@ -130,9 +133,9 @@ int woodburn_init(void)  	setup_iomux_fec();  	/* setup GPIO1_4 FEC_ENABLE signal */ -	mxc_request_iomux(MX35_PIN_SCKR, MUX_CONFIG_ALT5); +	imx_iomux_v3_setup_pad(MX35_PAD_SCKR__GPIO1_4);  	gpio_direction_output(4, 1); -	mxc_request_iomux(MX35_PIN_HCKT, MUX_CONFIG_ALT5); +	imx_iomux_v3_setup_pad(MX35_PAD_HCKT__GPIO1_9);  	gpio_direction_output(9, 1);  	return 0; @@ -228,22 +231,24 @@ 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));  	/* MMC Card Detect on GPIO1_7 */ -	mxc_request_iomux(MX35_PIN_SCKT, MUX_CONFIG_ALT5); -	mxc_iomux_set_input(MUX_IN_GPIO1_IN_7, 0x1); +	imx_iomux_v3_setup_pad(MX35_PAD_SCKT__GPIO1_7);  	gpio_direction_input(GPIO_MMC_CD);  	/* MMC Write Protection on GPIO1_8 */ -	mxc_request_iomux(MX35_PIN_FST, MUX_CONFIG_ALT5); -	mxc_iomux_set_input(MUX_IN_GPIO1_IN_8, 0x1); +	imx_iomux_v3_setup_pad(MX35_PAD_FST__GPIO1_8);  	gpio_direction_input(GPIO_MMC_WP);  	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK); diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 8ed75c3d3..b02c364dc 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -22,13 +22,52 @@  #include <common.h>  #include <netdev.h> +#include <zynqpl.h> +#include <asm/arch/hardware.h> +#include <asm/arch/sys_proto.h>  DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_FPGA +Xilinx_desc fpga; + +/* It can be done differently */ +Xilinx_desc fpga010 = XILINX_XC7Z010_DESC(0x10); +Xilinx_desc fpga020 = XILINX_XC7Z020_DESC(0x20); +Xilinx_desc fpga030 = XILINX_XC7Z030_DESC(0x30); +Xilinx_desc fpga045 = XILINX_XC7Z045_DESC(0x45); +#endif +  int board_init(void)  { +#ifdef CONFIG_FPGA +	u32 idcode; + +	idcode = zynq_slcr_get_idcode(); + +	switch (idcode) { +	case XILINX_ZYNQ_7010: +		fpga = fpga010; +		break; +	case XILINX_ZYNQ_7020: +		fpga = fpga020; +		break; +	case XILINX_ZYNQ_7030: +		fpga = fpga030; +		break; +	case XILINX_ZYNQ_7045: +		fpga = fpga045; +		break; +	} +#endif +  	icache_enable(); +#ifdef CONFIG_FPGA +	fpga_init(); +	fpga_add(fpga_xilinx, &fpga); +#endif +  	return 0;  } @@ -38,10 +77,33 @@ int board_eth_init(bd_t *bis)  {  	u32 ret = 0; -#if defined(CONFIG_ZYNQ_GEM) && defined(CONFIG_ZYNQ_GEM_BASEADDR0) -	ret = zynq_gem_initialize(bis, CONFIG_ZYNQ_GEM_BASEADDR0); +#if defined(CONFIG_ZYNQ_GEM) +# if defined(CONFIG_ZYNQ_GEM0) +	ret |= zynq_gem_initialize(bis, ZYNQ_GEM_BASEADDR0, +						CONFIG_ZYNQ_GEM_PHY_ADDR0, 0); +# endif +# if defined(CONFIG_ZYNQ_GEM1) +	ret |= zynq_gem_initialize(bis, ZYNQ_GEM_BASEADDR1, +						CONFIG_ZYNQ_GEM_PHY_ADDR1, 0); +# endif +#endif +	return ret; +}  #endif +#ifdef CONFIG_CMD_MMC +int board_mmc_init(bd_t *bd) +{ +	int ret = 0; + +#if defined(CONFIG_ZYNQ_SDHCI) +# if defined(CONFIG_ZYNQ_SDHCI0) +	ret = zynq_sdhci_init(ZYNQ_SDHCI_BASEADDR0); +# endif +# if defined(CONFIG_ZYNQ_SDHCI1) +	ret |= zynq_sdhci_init(ZYNQ_SDHCI_BASEADDR1); +# endif +#endif  	return ret;  }  #endif |