efikamx: update Efika MX support
Subsystems (2)
cover efikamx: update Efika MX support
This patchset relies on the previously submitted patch "mx5: add iomux-mx51.h include"
It may not boot reliably, completely at random, on Efika MX boards, without the previously submitted (series) "spi: fix mxc_spi_slave structure allocation to clear memory"
Matt Sealey (4):
efikamx: move efikamx into a new directory in preparation for new
boards
efikamx: remove drive strength hack from early_init_f and move it to
the DCD
efikamx: update to Efika MX Smarttop and Smartbook boards
efikamx: port USB setup to new iomux model
arch/arm/include/asm/arch-mx5/iomux-mx51.h | 28 ++ board/efikamx/Makefile | 49 -- board/efikamx/efikamx-usb.c | 216 -------- board/efikamx/efikamx.c | 735 ---------------------------- board/efikamx/imximage_mx.cfg | 122 ----- board/efikamx/imximage_sb.cfg | 122 ----- board/genesi/mx51_efikamx/Makefile | 49 ++ board/genesi/mx51_efikamx/efikamx-usb.c | 203 ++++++++ board/genesi/mx51_efikamx/efikamx.c | 507 +++++++++++++++++++ board/genesi/mx51_efikamx/imximage_mx.cfg | 113 +++++ board/genesi/mx51_efikamx/imximage_sb.cfg | 122 +++++ boards.cfg | 4 +- include/configs/efikamx.h | 274 ----------- include/configs/mx51_efikamx.h | 274 +++++++++++ 14 files changed, 1298 insertions(+), 1520 deletions(-) delete mode 100644 board/efikamx/Makefile delete mode 100644 board/efikamx/efikamx-usb.c delete mode 100644 board/efikamx/efikamx.c delete mode 100644 board/efikamx/imximage_mx.cfg delete mode 100644 board/efikamx/imximage_sb.cfg create mode 100644 board/genesi/mx51_efikamx/Makefile create mode 100644 board/genesi/mx51_efikamx/efikamx-usb.c create mode 100644 board/genesi/mx51_efikamx/efikamx.c create mode 100644 board/genesi/mx51_efikamx/imximage_mx.cfg create mode 100644 board/genesi/mx51_efikamx/imximage_sb.cfg delete mode 100644 include/configs/efikamx.h create mode 100644 include/configs/mx51_efikamx.h
Signature · 1 line
1.7.9.5
PATCH 1/4 efikamx: move efikamx into a new directory in preparation for new boards
* Move Efika MX boards into "genesi" directory.
* Rename it to "mx51_efikamx" since there's an mx53 version out there.
--- board/efikamx/Makefile | 49 -- board/efikamx/efikamx-usb.c | 216 --------- board/efikamx/efikamx.c | 735 ----------------------------- board/efikamx/imximage_mx.cfg | 122 ----- board/efikamx/imximage_sb.cfg | 122 ----- board/genesi/mx51_efikamx/Makefile | 49 ++ board/genesi/mx51_efikamx/efikamx-usb.c | 216 +++++++++ board/genesi/mx51_efikamx/efikamx.c | 735 +++++++++++++++++++++++++++++ board/genesi/mx51_efikamx/imximage_mx.cfg | 122 +++++ board/genesi/mx51_efikamx/imximage_sb.cfg | 122 +++++ boards.cfg | 4 +- include/configs/efikamx.h | 274 ----------- include/configs/mx51_efikamx.h | 274 +++++++++++ 13 files changed, 1520 insertions(+), 1520 deletions(-) delete mode 100644 board/efikamx/Makefile delete mode 100644 board/efikamx/efikamx-usb.c delete mode 100644 board/efikamx/efikamx.c delete mode 100644 board/efikamx/imximage_mx.cfg delete mode 100644 board/efikamx/imximage_sb.cfg create mode 100644 board/genesi/mx51_efikamx/Makefile create mode 100644 board/genesi/mx51_efikamx/efikamx-usb.c create mode 100644 board/genesi/mx51_efikamx/efikamx.c create mode 100644 board/genesi/mx51_efikamx/imximage_mx.cfg create mode 100644 board/genesi/mx51_efikamx/imximage_sb.cfg delete mode 100644 include/configs/efikamx.h create mode 100644 include/configs/mx51_efikamx.h
board/efikamx/Makefile deleted +0 -49
@@ -1,49 +0,0 @@ -# -# Copyright (C) 2010, Marek Vasut <[email protected]> -# -# BASED ON: imx51evk -# -# Copyright (C) 2007, Guennadi Liakhovetski <[email protected]> -# -# (C) Copyright 2009 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. -# -# 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 := efikamx.o - -ifdef CONFIG_CMD_USB -COBJS += efikamx-usb.o -endif - -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 - -#########################################################################
board/efikamx/efikamx-usb.c deleted +0 -216
216 lines not on this page · raw message
board/efikamx/efikamx.c deleted +0 -735
735 lines not on this page · raw message
board/efikamx/imximage_mx.cfg deleted +0 -122
122 lines not on this page · raw message
board/efikamx/imximage_sb.cfg deleted +0 -122
122 lines not on this page · raw message
board/genesi/mx51_efikamx/Makefile new file +49 -0
49 lines not on this page · raw message
board/genesi/mx51_efikamx/efikamx-usb.c new file +216 -0
216 lines not on this page · raw message
board/genesi/mx51_efikamx/efikamx.c new file +735 -0
735 lines not on this page · raw message
board/genesi/mx51_efikamx/imximage_mx.cfg new file +122 -0
122 lines not on this page · raw message
board/genesi/mx51_efikamx/imximage_sb.cfg new file +122 -0
122 lines not on this page · raw message
boards.cfg +2 -2
@@ -215,8 +215,8 @@ integratorcp_cm946es arm arm946es integrator armltd ca9x4_ct_vxp arm armv7 vexpress armltd am335x_evm arm armv7 am335x ti am33xx highbank arm armv7 highbank - highbank -efikamx arm armv7 efikamx - mx5 efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKAMX,IMX_CONFIG=board/efikamx/imximage_mx.cfg -efikasb arm armv7 efikamx - mx5 efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKASB,IMX_CONFIG=board/efikamx/imximage_sb.cfg +mx51_efikamx arm armv7 mx51_efikamx genesi mx5 mx51_efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKAMX,IMX_CONFIG=board/genesi/mx51_efikamx/imximage_mx.cfg +mx51_efikasb arm armv7 mx51_efikamx genesi mx5 mx51_efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKASB,IMX_CONFIG=board/genesi/mx51_efikamx/imximage_sb.cfg mx51evk arm armv7 mx51evk freescale mx5 mx51evk:IMX_CONFIG=board/freescale/mx51evk/imximage.cfg mx53ard arm armv7 mx53ard freescale mx5 mx53ard:IMX_CONFIG=board/freescale/mx53ard/imximage_dd3.cfg mx53evk arm armv7 mx53evk freescale mx5 mx53evk:IMX_CONFIG=board/freescale/mx53evk/imximage.cfg
include/configs/efikamx.h deleted +0 -274
274 lines not on this page · raw message
include/configs/mx51_efikamx.h new file +274 -0
228 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.7.9.5
Part of the diff is not shown here. View the raw message.
PATCH 1/4 efikamx: move efikamx into a new directory in preparation for new boards
Dear Matt Sealey,
Quoted 4 lines
* Move Efika MX boards into "genesi" directory.
* Rename it to "mx51_efikamx" since there's an mx53 version out there.Signed-off-by Matt Sealey <[email protected]>
[...]
git format-patch -M -C will not generate such a huge patch. Please use that and resent after Stefano reviews.
Best regards,
Marek Vasut
PATCH 1/4 efikamx: move efikamx into a new directory in preparation for new boards
Quoted 10 lines · Marek Vasut
Dear Matt Sealey,
Quoted 4 lines
* Move Efika MX boards into "genesi" directory.
* Rename it to "mx51_efikamx" since there's an mx53 version out there.Signed-off-by Matt Sealey <[email protected]>[...]
git format-patch -M -C will not generate such a huge patch. Please use that and resent after Stefano reviews.
Waiting for review, then.
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
In reply to Matt SealeyThe i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
--- board/genesi/mx51_efikamx/efikamx.c | 77 ------------------------- board/genesi/mx51_efikamx/imximage_mx.cfg | 89 +++++++++++++---------------- 2 files changed, 40 insertions(+), 126 deletions(-)
board/genesi/mx51_efikamx/efikamx.c +0 -77
@@ -597,85 +597,8 @@ void efikamx_toggle_led(uint32_t mask)/* * Board initialization */ -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 ); - -/* 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 ); -} -int board_early_init_f (void ) { -init_drive_strength (); -setup_iomux_uart ();setup_iomux_spi ();setup_iomux_led ();
board/genesi/mx51_efikamx/imximage_mx.cfg +40 -49
108 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Dear Matt Sealey,
Quoted 8 lines
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
[...]
board/genesi/mx51_efikamx/imximage_mx.cfg line 4
Quoted 10 lines
(quoted diff) +0
-0b/board/genesi/mx51_efikamx/imximage_mx.cfg index 6fe0ff9..ac9aa9a 100644
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-2@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation # Copyright (C) 2010 Marek Vasut <[email protected]> -# -# BASED ON: imx51evk
Adding and removing these at will won't work I'm afraid.
board/genesi/mx51_efikamx/imximage_mx.cfg BOOT_FROM spi · line 44
Quoted 7 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0+# Copyright (C) 2009-2012 Genesi USA, Inc. # # (C) Copyright 2009 # Stefano Babic DENX Software Engineering sbabic at denx.de.@@ -43,48 +43,44 @@ BOOT_FROM spi # Address absolute address of the register # value value to be stored in the register
So what is the actual change in the file? You replaced it with different file, which makes it hard to review particular changes made.
Quoted 97 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +38
-47-# Setting IOMUXC -DATA 4 0x73fa88a0 0x000 -DATA 4 0x73fa850c 0x20c5 -DATA 4 0x73fa8510 0x20c5 -DATA 4 0x73fa883c 0x5 -DATA 4 0x73fa8848 0x5 -DATA 4 0x73fa84b8 0xe7 -DATA 4 0x73fa84bc 0x45 -DATA 4 0x73fa84c0 0x45 -DATA 4 0x73fa84c4 0x45 -DATA 4 0x73fa84c8 0x45 -DATA 4 0x73fa8820 0x0 -DATA 4 0x73fa84a4 0x5 -DATA 4 0x73fa84a8 0x5 -DATA 4 0x73fa84ac 0xe5 -DATA 4 0x73fa84b0 0xe5 -DATA 4 0x73fa84b4 0xe5 -DATA 4 0x73fa84cc 0xe5 -DATA 4 0x73fa84d0 0xe4 +# Essential GPIO settings to be done as early as possible +# PCBID pad settings are all the defaults except #2 which needs HVE off +DATA 4 0x73fa8134 0x3 # PCBID0 ALT3 GPIO 3_16 +DATA 4 0x73fa8130 0x3 # PCBID1 ALT3 GPIO 3_17 +DATA 4 0x73fa8128 0x3 # PCBID2 ALT3 GPIO 3_11 +DATA 4 0x73fa8504 0xe4 # PCBID2 PAD ~HVE +DATA 4 0x73fa8198 0x3 # LED0 ALT3 GPIO 3_13 +DATA 4 0x73fa81c4 0x3 # LED1 ALT3 GPIO 3_14 +DATA 4 0x73fa81c8 0x3 # LED2 ALT3 GPIO 3_15 -DATA 4 0x73fa882c 0x4 -DATA 4 0x73fa88a4 0x4 -DATA 4 0x73fa88ac 0x4 -DATA 4 0x73fa88b8 0x4 +# DDR bus IOMUX PAD settings +DATA 4 0x73fa850c 0x20c5 # SDODT1 +DATA 4 0x73fa8510 0x20c5 # SDODT0 +DATA 4 0x73fa84ac 0xc5 # SDWE +DATA 4 0x73fa84b0 0xc5 # SDCKE0 +DATA 4 0x73fa84b4 0xc5 # SDCKE1 +DATA 4 0x73fa84cc 0xc5 # DRAM_CS0 +DATA 4 0x73fa84d0 0xc5 # DRAM_CS1 +DATA 4 0x73fa882c 0x2 # DRAM_B4 +DATA 4 0x73fa88a4 0x2 # DRAM_B0 +DATA 4 0x73fa88ac 0x2 # DRAM_B1 +DATA 4 0x73fa88b8 0x2 # DRAM_B2 +DATA 4 0x73fa84d4 0xc5 # DRAM_DQM0 +DATA 4 0x73fa84d8 0xc5 # DRAM_DQM1 +DATA 4 0x73fa84dc 0xc5 # DRAM_DQM2 +DATA 4 0x73fa84e0 0xc5 # DRAM_DQM3 -# Setting DDR for micron -# 13 Rows, 10 Cols, 32 bit, SREF=4 Micron Model -# CAS=3 BL=4 -# ESDCTL_ESDCTL0 -DATA 4 0x83fd9000 0x82a20000 -# ESDCTL_ESDCTL1 -DATA 4 0x83fd9008 0x82a20000 -# ESDCTL_ESDMISC -DATA 4 0x83fd9010 0xcaaaf6d0 -# ESDCTL_ESDCFG0 -DATA 4 0x83fd9004 0x3f3574aa -# ESDCTL_ESDCFG1 -DATA 4 0x83fd900c 0x3f3574aa +# Setting DDR for Micron +# 13 Rows, 10 Cols, 32 bit +# SREF=4 Micron Model CAS=3 BL=4 +DATA 4 0x83fd9000 0x82a20000 # ESDCTL_ESDCTL0 +DATA 4 0x83fd9008 0x82a20000 # ESDCTL_ESDCTL1 +DATA 4 0x83fd9010 0xcaaaf6d0 # ESDCTL_ESDMISC +DATA 4 0x83fd9004 0x3f3574aa # ESDCTL_ESDCFG0 +DATA 4 0x83fd900c 0x3f3574aa # ESDCTL_ESDCFG1 # Init DRAM on CS0 -# ESDCTL_ESDSCR -DATA 4 0x83fd9014 0x04008008 +DATA 4 0x83fd9014 0x04008008 # ESDCTL_ESDSCR DATA 4 0x83fd9014 0x0000801a DATA 4 0x83fd9014 0x0000801b DATA 4 0x83fd9014 0x00448019@@ -110,13 +106,8 @@ DATA 4 0x83fd9014 0x0632801c DATA 4 0x83fd9014 0x0380801d DATA 4 0x83fd9014 0x0040801d DATA 4 0x83fd9014 0x00008004 - -# Write to CTL0 -DATA 4 0x83fd9000 0xb2a20000 -# Write to CTL1 -DATA 4 0x83fd9008 0xb2a20000 -# ESDMISC -DATA 4 0x83fd9010 0x000ad6d0 -#ESDCTL_ESDCDLYGD -DATA 4 0x83fd9034 0x90000000 +DATA 4 0x83fd9000 0xb2a20000 # Write to CTL0 +DATA 4 0x83fd9008 0xb2a20000 # Write to CTL1 +DATA 4 0x83fd9010 0x000ad6d0 # ESDMISC +DATA 4 0x83fd9034 0x90000000 # ESDCTL_ESDCDLYGD DATA 4 0x83fd9014 0x00000000
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Quoted 26 lines · Marek Vasut
Dear Matt Sealey,
Quoted 8 lines
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
[...]
board/genesi/mx51_efikamx/imximage_mx.cfg line 4
Quoted 10 lines
(quoted diff) +0
-0b/board/genesi/mx51_efikamx/imximage_mx.cfg index 6fe0ff9..ac9aa9a 100644
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-2@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation # Copyright (C) 2010 Marek Vasut <[email protected]> -# -# BASED ON: imx51evkAdding and removing these at will won't work I'm afraid.
Quoted 10 lines
board/genesi/mx51_efikamx/imximage_mx.cfg BOOT_FROM spi · line 44
Quoted 7 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0+# Copyright (C) 2009-2012 Genesi USA, Inc. # # (C) Copyright 2009 # Stefano Babic DENX Software Engineering sbabic at denx.de.@@ -43,48 +43,44 @@ BOOT_FROM spi # Address absolute address of the register # value value to be stored in the registerSo what is the actual change in the file? You replaced it with different file, which makes it hard to review particular changes made.
Uhh no I edited each line manually and moved the comments to make it more readable. The actual changes is I reviewed the drive strength set function in efikamx.c and moved all the settings (minus any erroneously set bits and reproduced settings) into the DATA lines where necessary.
It's the same file but git doesn't do line-by-line diffs very well, it just seems to batch things into sections. I agree though I broke the copyright stuff, I got forced to use vim for about 10 minutes and I may have been a little heavy-handed :)
Signature · 1 line
Matt
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Dear Matt Sealey,
Quoted 45 lines · Marek Vasut
Quoted 36 lines
Dear Matt Sealey,
Quoted 8 lines
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
[...]
Quoted 5 lines
(quoted diff) +0
-0b/board/genesi/mx51_efikamx/imximage_mx.cfg index 6fe0ff9..ac9aa9a 100644 --- a/board/genesi/mx51_efikamx/imximage_mx.cfg +++ b/board/genesi/mx51_efikamx/imximage_mx.cfg
board/genesi/mx51_efikamx/imximage_mx.cfg line 4
Quoted 9 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-2@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation # Copyright (C) 2010 Marek Vasut <[email protected]> -# -# BASED ON: imx51evkAdding and removing these at will won't work I'm afraid.
Quoted 6 lines
+# Copyright (C) 2009-2012 Genesi USA, Inc.
#
# (C) Copyright 2009
# Stefano Babic DENX Software Engineering sbabic at denx.de.Quoted 7 lines
board/genesi/mx51_efikamx/imximage_mx.cfg BOOT_FROM spi · line 45
Quoted 4 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +0
-0@@ -43,48 +43,44 @@ BOOT_FROM spi # Address absolute address of the register # value value to be stored in the registerSo what is the actual change in the file? You replaced it with different file, which makes it hard to review particular changes made.
Quoted 5 lines
Uhh no I edited each line manually and moved the comments to make it more readable. The actual changes is I reviewed the drive strength set function in
efikamx.cand moved all the settings (minus any erroneously set bits and reproduced settings) into the DATA lines where necessary.
Maybe splitting it into smaller patches then won't hurt, with proper description etc.
Quoted 4 lines
It's the same file but git doesn't do line-by-line diffs very well, it just seems to batch things into sections. I agree though I broke the copyright stuff, I got forced to use vim for about 10 minutes and I may have been a little heavy-handed :)
Definitelly
Best regards,
Marek Vasut
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
In reply to Matt SealeyQuoted 11 lines · Matt Sealey
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
Signed-off-by Matt Sealey <[email protected]>---
Hi Matt,
board/genesi/mx51_efikamx/imximage_mx.cfg line 2
Quoted 7 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation
^---
Was this added for mistake ? I think you should add only yours.
board/genesi/mx51_efikamx/imximage_mx.cfg BOOT_FROM spi · line 45
Quoted 11 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-2# Copyright (C) 2010 Marek Vasut <[email protected]> -# -# BASED ON: imx51evk +# Copyright (C) 2009-2012 Genesi USA, Inc. # # (C) Copyright 2009 # Stefano Babic DENX Software Engineering sbabic at denx.de.@@ -43,48 +43,44 @@ BOOT_FROM spi # Address absolute address of the register # value value to be stored in the register
I agree with Marek that you break the copyright stuff.
Quoted 88 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +34
-42-# Setting IOMUXC -DATA 4 0x73fa88a0 0x000 -DATA 4 0x73fa850c 0x20c5 -DATA 4 0x73fa8510 0x20c5 -DATA 4 0x73fa883c 0x5 -DATA 4 0x73fa8848 0x5 -DATA 4 0x73fa84b8 0xe7 -DATA 4 0x73fa84bc 0x45 -DATA 4 0x73fa84c0 0x45 -DATA 4 0x73fa84c4 0x45 -DATA 4 0x73fa84c8 0x45 -DATA 4 0x73fa8820 0x0 -DATA 4 0x73fa84a4 0x5 -DATA 4 0x73fa84a8 0x5 -DATA 4 0x73fa84ac 0xe5 -DATA 4 0x73fa84b0 0xe5 -DATA 4 0x73fa84b4 0xe5 -DATA 4 0x73fa84cc 0xe5 -DATA 4 0x73fa84d0 0xe4 +# Essential GPIO settings to be done as early as possible +# PCBID pad settings are all the defaults except #2 which needs HVE off +DATA 4 0x73fa8134 0x3 # PCBID0 ALT3 GPIO 3_16 +DATA 4 0x73fa8130 0x3 # PCBID1 ALT3 GPIO 3_17 +DATA 4 0x73fa8128 0x3 # PCBID2 ALT3 GPIO 3_11 +DATA 4 0x73fa8504 0xe4 # PCBID2 PAD ~HVE +DATA 4 0x73fa8198 0x3 # LED0 ALT3 GPIO 3_13 +DATA 4 0x73fa81c4 0x3 # LED1 ALT3 GPIO 3_14 +DATA 4 0x73fa81c8 0x3 # LED2 ALT3 GPIO 3_15 -DATA 4 0x73fa882c 0x4 -DATA 4 0x73fa88a4 0x4 -DATA 4 0x73fa88ac 0x4 -DATA 4 0x73fa88b8 0x4 +# DDR bus IOMUX PAD settings +DATA 4 0x73fa850c 0x20c5 # SDODT1 +DATA 4 0x73fa8510 0x20c5 # SDODT0 +DATA 4 0x73fa84ac 0xc5 # SDWE +DATA 4 0x73fa84b0 0xc5 # SDCKE0 +DATA 4 0x73fa84b4 0xc5 # SDCKE1 +DATA 4 0x73fa84cc 0xc5 # DRAM_CS0 +DATA 4 0x73fa84d0 0xc5 # DRAM_CS1 +DATA 4 0x73fa882c 0x2 # DRAM_B4 +DATA 4 0x73fa88a4 0x2 # DRAM_B0 +DATA 4 0x73fa88ac 0x2 # DRAM_B1 +DATA 4 0x73fa88b8 0x2 # DRAM_B2 +DATA 4 0x73fa84d4 0xc5 # DRAM_DQM0 +DATA 4 0x73fa84d8 0xc5 # DRAM_DQM1 +DATA 4 0x73fa84dc 0xc5 # DRAM_DQM2 +DATA 4 0x73fa84e0 0xc5 # DRAM_DQM3 -# Setting DDR for micron -# 13 Rows, 10 Cols, 32 bit, SREF=4 Micron Model -# CAS=3 BL=4 -# ESDCTL_ESDCTL0 -DATA 4 0x83fd9000 0x82a20000 -# ESDCTL_ESDCTL1 -DATA 4 0x83fd9008 0x82a20000 -# ESDCTL_ESDMISC -DATA 4 0x83fd9010 0xcaaaf6d0 -# ESDCTL_ESDCFG0 -DATA 4 0x83fd9004 0x3f3574aa -# ESDCTL_ESDCFG1 -DATA 4 0x83fd900c 0x3f3574aa +# Setting DDR for Micron +# 13 Rows, 10 Cols, 32 bit +# SREF=4 Micron Model CAS=3 BL=4 +DATA 4 0x83fd9000 0x82a20000 # ESDCTL_ESDCTL0 +DATA 4 0x83fd9008 0x82a20000 # ESDCTL_ESDCTL1 +DATA 4 0x83fd9010 0xcaaaf6d0 # ESDCTL_ESDMISC +DATA 4 0x83fd9004 0x3f3574aa # ESDCTL_ESDCFG0 +DATA 4 0x83fd900c 0x3f3574aa # ESDCTL_ESDCFG1 # Init DRAM on CS0 -# ESDCTL_ESDSCR -DATA 4 0x83fd9014 0x04008008 +DATA 4 0x83fd9014 0x04008008 # ESDCTL_ESDSCR DATA 4 0x83fd9014 0x0000801a DATA 4 0x83fd9014 0x0000801b DATA 4 0x83fd9014 0x00448019@@ -110,13 +106,8 @@ DATA 4 0x83fd9014 0x0632801c DATA 4 0x83fd9014 0x0380801d DATA 4 0x83fd9014 0x0040801d DATA 4 0x83fd9014 0x00008004 - -# Write to CTL0 -DATA 4 0x83fd9000 0xb2a20000 -# Write to CTL1
board/genesi/mx51_efikamx/imximage_mx.cfg DATA 4 0x83fd9014 0x0632801c · line 113
Quoted 10 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +4
-5-DATA 4 0x83fd9008 0xb2a20000 -# ESDMISC -DATA 4 0x83fd9010 0x000ad6d0 -#ESDCTL_ESDCDLYGD -DATA 4 0x83fd9034 0x90000000 +DATA 4 0x83fd9000 0xb2a20000 # Write to CTL0 +DATA 4 0x83fd9008 0xb2a20000 # Write to CTL1 +DATA 4 0x83fd9010 0x000ad6d0 # ESDMISC +DATA 4 0x83fd9034 0x90000000 # ESDCTL_ESDCDLYGD DATA 4 0x83fd9014 0x00000000
I join Marek, it is quite difficult to review it and understand which was changed. It looks like a new file..
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Quoted 24 lines · Stefano Babic
Quoted 11 lines · Matt Sealey
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
Signed-off-by Matt Sealey <[email protected]>---
Hi Matt,
board/genesi/mx51_efikamx/imximage_mx.cfg line 2
Quoted 7 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation^---
Quoted 1 line
Was this added for mistake ? I think you should add only yours.
The drive strength settings came from Pegatron a long, long time ago (2009 :) and our old config and the function is copyrighted to them. Just because Marek took them out and recopyrighted the file I derived them from in this case doesn't mean they lost their copyright..
Quoted 2 lines
I join Marek, it is quite difficult to review it and understand which was changed. It looks like a new file..
It's just because I moved the comments to the end of the line, so it's blocking it up.
Sometimes it's nicer if it's
-this line
+that line
-this line
+that line
.. but that's not how git does it when the change is more than a few characters and multiple lines changed.. I can submit it differently but I can't change the way it's producing the diff.
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Dear Matt Sealey,
Quoted 29 lines · Stefano Babic
Quoted 28 lines · Matt Sealey
Quoted 11 lines
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
Signed-off-by Matt Sealey <[email protected]>---
Hi Matt,
board/genesi/mx51_efikamx/imximage_mx.cfg line 5
Quoted 11 lines
(quoted diff) +0
-0b/board/genesi/mx51_efikamx/imximage_mx.cfg index 6fe0ff9..ac9aa9a 100644
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation^---
Quoted 6 lines
Quoted 1 line
Was this added for mistake ? I think you should add only yours.
The drive strength settings came from Pegatron a long, long time ago (2009 :) and our old config and the function is copyrighted to them. Just because Marek took them out and recopyrighted the file I derived them from in this case doesn't mean they lost their copyright..
This file was taken from mx51evk. It's written there. Please stop this nonsense, it's troubling me.
Quoted 13 lines
Quoted 2 lines
I join Marek, it is quite difficult to review it and understand which was changed. It looks like a new file..
It's just because I moved the comments to the end of the line, so it's blocking it up.
Sometimes it's nicer if it's
(quoted diff) +2
-2-this line +that line -this line +that line
Quoted 3 lines
.. but that's not how git does it when the change is more than a few characters and multiple lines changed.. I can submit it differently but I can't change the way it's producing the diff.
Best regards,
Marek Vasut
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Am 19/08/2012 00:29, schrieb Marek Vasut:
Quoted 33 lines
Dear Matt Sealey,
Quoted 31 lines · Stefano Babic
Quoted 29 lines · Matt Sealey
Quoted 11 lines
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
Signed-off-by Matt Sealey <[email protected]>---
Hi Matt,
board/genesi/mx51_efikamx/imximage_mx.cfg line 5
Quoted 11 lines
(quoted diff) +0
-0b/board/genesi/mx51_efikamx/imximage_mx.cfg index 6fe0ff9..ac9aa9a 100644
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation^---Was this added for mistake ? I think you should add only yours.
Quoted 7 lines
Quoted 4 lines
The drive strength settings came from Pegatron a long, long time ago (2009 :) and our old config and the function is copyrighted to them. Just because Marek took them out and recopyrighted the file I derived them from in this case doesn't mean they lost their copyright..
This file was taken from mx51evk. It's written there. Please stop this nonsense, it's troubling me.
Then Pegatron has nothing to do with it. The original comes from Freescale, and the copyright was set.
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
Quoted 39 lines · stefano babic
Am 19/08/2012 00:29, schrieb Marek Vasut:
Quoted 38 lines
Dear Matt Sealey,
Quoted 35 lines · Stefano Babic
Quoted 22 lines · Matt Sealey
Quoted 11 lines
The i.MX Boot ROM lets us set up certain registers before U-Boot even gets executed. Rather than setting up DDR, putting U-Boot in place, and getting into pre-relocation init to set up DDR again, just do it once in the correct place. This also solves an issue where the Smarttop DDR pad settings were being applied on Smartbook.
While we're at it, configure PCBID0,1,2 and the LED GPIO since we've still got room in the DCD to do so.
Signed-off-by Matt Sealey <[email protected]>---
Hi Matt,
Quoted 7 lines
(quoted diff) +0
-0b/board/genesi/mx51_efikamx/imximage_mx.cfg index 6fe0ff9..ac9aa9a 100644
board/genesi/mx51_efikamx/imximage_mx.cfg +0
-0@@ -1,7 +1,7 @@Quoted 7 lines
board/genesi/mx51_efikamx/imximage_mx.cfg
Quoted 4 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0# +# Copyright (C) 2009 Pegatron Corporation^---Was this added for mistake ? I think you should add only yours.
The drive strength settings came from Pegatron a long, long time ago (2009 :) and our old config and the function is copyrighted to them. Just because Marek took them out and recopyrighted the file I derived them from in this case doesn't mean they lost their copyright..
Quoted 5 lines
Quoted 2 lines
This file was taken from mx51evk. It's written there. Please stop this nonsense, it's troubling me.
Then Pegatron has nothing to do with it. The original comes from Freescale, and the copyright was set.
Here is the pedigree of the code from initial table to current implementation, as it stands;
* 2009, Pegatron wrote their U-Boot port for the board
* 2009, Pegatron gave us these drive strength settings based on some very expensive and laborious testing and calibration of the DDR implementation on the board. They did not update the settings in the DCD table, they just implemented this function which persisted in Marek's port to mainline
* 2010, Marek took the mx51evk example and added the OLD DCD table to imximage.cfg and left the Pegatron drive strength code in there. Marek removed the Pegatron copyright, and Genesi's copyright, and Freescale's copyright but left the original code copyright he took from U-Boot. You cannot just remove the copyright pedigree from the chain just because you decided the "source" of the code was one guy when you copy paste it from some other place
* 2012, we put the Pegatron copyrights back in, removed the drive strength function from the board file, re-integrated it into the imximage.cfg layout, and added our copyrights since we did the expensive and laborious testing of the values and cross-referencing of the manual.
The copyrights on every Efika MX file, since they were ALL ported from the original Pegatron reference code should be;
Copyright (C) 2009 Freescale Semiconductor
Copyright (C) 2009 Pegatron Corporation
Copyright (C) 2009-2012 Genesi USA, Inc.
<name of the guy who you copied the mx51evk board file or imximage.cfg from> <your name here>
And that's that. We are looking to go about restoring the pedigree, that's all.
If this was a $5000 dog, you would be concerned if you found out someone had accidentally removed some history where it's grandmother bred with a mongrel and invalidated it's pure-bred status. I can assure you the money spent on coding this original code was more than the cost of a dog and the copyright chain should persist whether you think you "wrote" the code yourself or "copied" it from elsewhere in U-Boot.
The MX51EVK board files may have been where whoever originally committed them sourced it from, but this is not the true source of the code contained in the drive strength function we removed, the data contained in it, or the PCB ID table that's listed in the comments. The MX51EVK DDR settings in imximage.cfg are not the same as the ones in the old Efika MX file, so these have been ported from Pegatron's old DCD data. The new drive strength settings are sourced from the function and moved back into the DCD. All I did was verify they worked and we were not redundantly setting up the same register twice or pushing defaults information via the DCD to registers (since we only have 60 entries, doing every DDR pad control plus the required PCB ID setup overflows the maximum).
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 2/4 efikamx: remove drive strength hack from early_init_f and move it to the DCD
In reply to Matt SealeyAm 18/08/2012 23:11, schrieb Matt Sealey:
Quoted 11 lines
Quoted 6 lines
board/genesi/mx51_efikamx/imximage_mx.cfg line 2
Quoted 3 lines
board/genesi/mx51_efikamx/imximage_mx.cfg +1
-0@@ -1,7 +1,7 @@ # +# Copyright (C) 2009 Pegatron Corporation^---Was this added for mistake ? I think you should add only yours.
The drive strength settings came from Pegatron a long, long time ago (2009 :) and our old config and the function is copyrighted to them. Just because Marek took them out and recopyrighted the file I derived them from in this case doesn't mean they lost their copyright..
Ok, explained - then it is a fixed for a missing copyright.
Quoted 14 lines
Quoted 3 lines
I join Marek, it is quite difficult to review it and understand which was changed. It looks like a new file..
It's just because I moved the comments to the end of the line, so it's blocking it up.
Sometimes it's nicer if it's
(quoted diff) +2
-2-this line +that line -this line +that line
Quoted 3 lines
.. but that's not how git does it when the change is more than a few characters and multiple lines changed.. I can submit it differently but I can't change the way it's producing the diff.
In principle I have not a problem with it - you are the best tester for the DCD table, and you report it is well tested for your board. It is customized for your board and it is not common i.MX code - I can't only make a review because it is difficult to read it.
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
In reply to Matt SealeyChange summary:
* Use iomux-mx51.h include to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boards
--- board/genesi/mx51_efikamx/efikamx.c | 611 +++++++++++++---------------------- 1 file changed, 230 insertions(+), 381 deletions(-)
board/genesi/mx51_efikamx/efikamx.c +230 -381
@@ -1,7 +1,7 @@/* +* Copyright (C) 2009 Freescale Semiconductor, Inc. * Copyright (C) 2010 Marek Vasut <[email protected]> -* -* (C) Copyright 2009 Freescale Semiconductor, Inc. +* Copyright (C) 2009-2012 Genesi USA, Inc. * * See file CREDITS for list of people who contributed to this * project.
@@ -24,9 +24,7 @@#include <common.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 <asm/errno.h> #include <asm/arch/sys_proto.h>
@@ -48,16 +46,12 @@ DECLARE_GLOBAL_DATA_PTR;#endif /* -* Shared variables / local defines +* Board revisions +* +* Note that we get these revisions here for convenience, but we only set +* up for the production model Smarttop (1.3) and Smartbook (2.0). +* */ -/* LED */ -#define EFIKAMX_LED_BLUE 0x1 -#define EFIKAMX_LED_GREEN 0x2 -#define EFIKAMX_LED_RED 0x4 - -void efikamx_toggle_led (uint32_t mask); - -/* Board revisions */ #define EFIKAMX_BOARD_REV_11 0x1#define EFIKAMX_BOARD_REV_12 0x2#define EFIKAMX_BOARD_REV_13 0x3
@@ -69,66 +63,67 @@ void efikamx_toggle_led(uint32_t mask);/* * Board identification */ -u32 get_efikamx_rev (void ) +static u32 get_mx_rev (void ) {u32 rev =0 ;/* * Retrieve board ID: -* rev1.1: 1,1,1 -* rev1.2: 1,1,0 -* rev1.3: 1,0,1 -* rev1.4: 1,0,0 +* +* gpio: 16 17 11 +* ============== +* r1.1: 1+ 1 1 +* r1.2: 1 1 0 +* r1.3: 1 0 1 +* r1.4: 1 0 0 +* +* + note: r1.1 does not strap this pin properly so it needs to +* be hacked or ignored. */ -mxc_request_iomux (MX51_PIN_NANDF_CS0 ,IOMUX_CONFIG_GPIO ); -/* set to 1 in order to get correct value on board rev1.1 */ -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 ),1 ); + +/* set to 1 in order to get correct value on board rev 1.1 */ +gpio_direction_output (GPIO_NUMBER (3 ,16 ),1 ); +gpio_direction_input (GPIO_NUMBER (3 ,11 )); +gpio_direction_input (GPIO_NUMBER (3 ,16 )); +gpio_direction_input (GPIO_NUMBER (3 ,17 )); -mxc_request_iomux (MX51_PIN_NANDF_CS0 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS0 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 ))) <<0 ; - -mxc_request_iomux (MX51_PIN_NANDF_CS1 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS1 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS1 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS1 ))) <<1 ; - -mxc_request_iomux (MX51_PIN_NANDF_RB3 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB3 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_RB3 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_RB3 ))) <<2 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,16 ))) <<0 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,17 ))) <<1 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,11 ))) <<2 ;return (~rev &0x7 ) +1 ; } -inline u32 get_efikasb_rev (void ) +static iomux_v3_cfg_t efikasb_revision_pads[] = { +MX51_PAD_EIM_CS3__GPIO2_28 , +MX51_PAD_EIM_CS4__GPIO2_29 , +}; + +static inline u32 get_sb_rev (void ) {u32 rev =0 ; -mxc_request_iomux (MX51_PIN_EIM_CS3 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_EIM_CS3 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_EIM_CS3 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS3 ))) <<0 ; - -mxc_request_iomux (MX51_PIN_EIM_CS4 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_EIM_CS4 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_EIM_CS4 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS4 ))) <<1 ; +imx_iomux_v3_setup_multiple_pads (efikasb_revision_pads,ARRAY_SIZE (efikasb_revision_pads)); +gpio_direction_input (GPIO_NUMBER (2 ,28 )); +gpio_direction_input (GPIO_NUMBER (2 ,29 )); + + rev |= (!!gpio_get_value (GPIO_NUMBER (2 ,28 ))) <<0 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (2 ,29 ))) <<1 ;return rev; } -inline uint32_t get_efika_rev (void ) +inline uint32_t get_efikamx_rev (void ) { -if (machine_is_efikamx ()) -return get_efikamx_rev (); -else -return get_efikasb_rev (); +if (machine_is_efikamx ()) { +return get_mx_rev (); + }else if (machine_is_efikasb ()) { +return get_sb_rev (); + } }u32 get_board_rev (void ) { -return get_cpu_rev () | (get_efika_rev () <<8 ); +return get_cpu_rev () | (get_efikamx_rev () <<8 ); }/*
@@ -137,66 +132,35 @@ u32 get_board_rev(void)int dram_init (void ) {/* dram_init must store complete ramsize in gd->ram_size */ - gd->ram_size =get_ram_size ((void *)CONFIG_SYS_SDRAM_BASE , -PHYS_SDRAM_1_SIZE ); + gd->ram_size =get_ram_size ((void *)CONFIG_SYS_SDRAM_BASE ,PHYS_SDRAM_1_SIZE );return 0 ; }/* * UART configuration */ -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 ; - -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); -} +static iomux_v3_cfg_t efikamx_uart_pads[] = { +MX51_PAD_UART1_RXD__UART1_RXD , +MX51_PAD_UART1_TXD__UART1_TXD , +MX51_PAD_UART1_RTS__UART1_RTS , +MX51_PAD_UART1_CTS__UART1_CTS , +};/* * SPI configuration */ -#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 , -PAD_CTL_HYS_ENABLE |PAD_CTL_DRV_HIGH |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_HIGH |PAD_CTL_SRE_FAST ); - -/* Configure SS0 as a GPIO */ -mxc_request_iomux (MX51_PIN_CSPI1_SS0 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSPI1_SS0 ),0 ); - -/* Configure SS1 as a GPIO */ -mxc_request_iomux (MX51_PIN_CSPI1_SS1 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSPI1_SS1 ),1 ); - -/* 000: Select mux mode: ALT0 mux port: SS2 of instance: ecspi1. */ -mxc_request_iomux (MX51_PIN_CSPI1_RDY ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_CSPI1_RDY , -PAD_CTL_HYS_ENABLE |PAD_CTL_PKE_ENABLE ); - -/* 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_HIGH |PAD_CTL_SRE_FAST ); -} -#else -static inline void setup_iomux_spi (void ) { } -#endif +static iomux_v3_cfg_t efikamx_spi_pads[]= { +MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI , +MX51_PAD_CSPI1_MISO__ECSPI1_MISO , +MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK , +MX51_PAD_CSPI1_SS0__GPIO4_24 , +MX51_PAD_CSPI1_SS1__GPIO4_25 , +MX51_PAD_GPIO1_6__GPIO1_6 , +}; + +#define EFIKAMX_SPI_SS0 GPIO_NUMBER(4, 24) +#define EFIKAMX_SPI_SS1 GPIO_NUMBER(4, 25) +#define EFIKAMX_PMIC_IRQ GPIO_NUMBER(1, 6)/* * PMIC configuration
@@ -226,7 +190,7 @@ static void power_init(void)/* Set core voltage to 1.1V */ pmic_reg_read (p,REG_SW_0 , &val); - val = (val & ~SWx_VOLT_MASK) | SWx_1_200V; + val = (val & ~SWx_VOLT_MASK) | SWx_1_100V;pmic_reg_write (p,REG_SW_0 , val);/* Setup VCC (SW2) to 1.25 */
@@ -301,29 +265,64 @@ static inline void power_init(void) { }* MMC configuration */ #ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg esdhc_cfg[2 ] = { {MMC_SDHC1_BASE_ADDR ,1 }, {MMC_SDHC2_BASE_ADDR ,1 }, }; -static inline uint32_t efika_mmc_cd (void ) +static iomux_v3_cfg_t efikamx_sdhc1_pads[] = { +MX51_PAD_SD1_CMD__SD1_CMD , +MX51_PAD_SD1_CLK__SD1_CLK , +MX51_PAD_SD1_DATA0__SD1_DATA0 , +MX51_PAD_SD1_DATA1__SD1_DATA1 , +MX51_PAD_SD1_DATA2__SD1_DATA2 , +MX51_PAD_SD1_DATA3__SD1_DATA3 , +MX51_PAD_GPIO1_1__SD1_WP , +}; + +#define EFIKAMX_SDHC1_WP GPIO_NUMBER(1,1) + +static iomux_v3_cfg_t efikamx_sdhc1_cd_pads[] = { +MX51_PAD_GPIO1_0__SD1_CD , +MX51_PAD_EIM_CS2__SD1_CD , +}; + +#define EFIKAMX_SDHC1_CD GPIO_NUMBER(1,0) +#define EFIKASB_SDHC1_CD GPIO_NUMBER(2,27) + +static iomux_v3_cfg_t efikasb_sdhc2_pads[] = { +MX51_PAD_SD2_CMD__SD2_CMD , +MX51_PAD_SD2_CLK__SD2_CLK , +MX51_PAD_SD2_DATA0__SD2_DATA0 , +MX51_PAD_SD2_DATA1__SD2_DATA1 , +MX51_PAD_SD2_DATA2__SD2_DATA2 , +MX51_PAD_SD2_DATA3__SD2_DATA3 , +MX51_PAD_GPIO1_7__SD2_WP , +MX51_PAD_GPIO1_8__SD2_CD , +}; + +#define EFIKASB_SDHC2_CD GPIO_NUMBER(1,8) +#define EFIKASB_SDHC2_WP GPIO_NUMBER(1,7) + +static inline uint32_t efikamx_mmc_getcd (u32 base) { -if (machine_is_efikamx ()) -return MX51_PIN_GPIO1_0 ; -else -return MX51_PIN_EIM_CS2 ; +if (base ==MMC_SDHC1_BASE_ADDR ) { +if (machine_is_efikamx ()) { +return EFIKAMX_SDHC1_CD ; + }else { +return EFIKASB_SDHC1_CD ; + } + }else { +return EFIKASB_SDHC2_CD ; + } }int board_mmc_getcd (struct mmc *mmc) {struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; -uint32_t cd =efika_mmc_cd (); -int ret; - -if (cfg->esdhc_base ==MMC_SDHC1_BASE_ADDR ) - ret = !gpio_get_value (IOMUX_TO_GPIO (cd)); -else - ret = !gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_GPIO1_8 )); +uint32_t cd =efikamx_mmc_getcd (cfg->esdhc_base); +int ret = !gpio_get_value (cd);return ret; }
@@ -331,214 +330,73 @@ int board_mmc_getcd(struct mmc *mmc)int board_mmc_init (bd_t *bis) {int ret; -uint32_t cd =efika_mmc_cd (); - -/* SDHC1 is used on all revisions, setup control pins first */ -mxc_request_iomux (cd, -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (cd, -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 |PAD_CTL_SRE_FAST ); -mxc_request_iomux (MX51_PIN_GPIO1_1 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_1 , -PAD_CTL_DRV_HIGH |PAD_CTL_HYS_ENABLE | -PAD_CTL_100K_PU |PAD_CTL_ODE_OPENDRAIN_NONE | -PAD_CTL_SRE_FAST ); - -gpio_direction_input (IOMUX_TO_GPIO (cd)); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_1 )); - -/* Internal SDHC1 IOMUX + SDHC2 IOMUX on old boards */ -if (machine_is_efikasb () || (machine_is_efikamx () && - (get_efika_rev () <EFIKAMX_BOARD_REV_12 ))) { -/* SDHC1 IOMUX */ -mxc_request_iomux (MX51_PIN_SD1_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CMD , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CLK , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA0 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA1 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA2 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA3 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -/* SDHC2 IOMUX */ -mxc_request_iomux (MX51_PIN_SD2_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD2_CMD , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD2_CLK , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA0 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA1 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA2 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA3 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -/* SDHC2 Control lines IOMUX */ -mxc_request_iomux (MX51_PIN_GPIO1_7 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_7 , -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 |PAD_CTL_SRE_FAST ); -mxc_request_iomux (MX51_PIN_GPIO1_8 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_8 , -PAD_CTL_DRV_HIGH |PAD_CTL_HYS_ENABLE | -PAD_CTL_100K_PU |PAD_CTL_ODE_OPENDRAIN_NONE | -PAD_CTL_SRE_FAST ); - -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_8 )); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_7 )); - - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); -if (!ret) - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[1 ]); - }else {/* New boards use only SDHC1 */ -/* SDHC1 IOMUX */ -mxc_request_iomux (MX51_PIN_SD1_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CMD , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CLK , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA0 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA1 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA2 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA3 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); + +/* +* All Efika MX boards use eSDHC1 with a common write-protect GPIO +*/ +imx_iomux_v3_setup_multiple_pads (efikamx_sdhc1_pads,ARRAY_SIZE (efikamx_sdhc1_pads)); +gpio_direction_input (EFIKAMX_SDHC1_WP ); + +/* +* Smartbook and Smarttop differ on the location of eSDHC1 carrier-detect GPIO +*/ +if (machine_is_efikamx ()) { +imx_iomux_v3_setup_pad (efikamx_sdhc1_cd_pads[0 ]); +gpio_direction_input (EFIKAMX_SDHC1_CD ); + }else if (machine_is_efikasb ()) { +imx_iomux_v3_setup_pad (efikamx_sdhc1_cd_pads[1 ]); +gpio_direction_input (EFIKASB_SDHC1_CD ); } + + ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); + +if (machine_is_efikasb ()) { +imx_iomux_v3_setup_multiple_pads (efikasb_sdhc2_pads,ARRAY_SIZE (efikasb_sdhc2_pads)); +gpio_direction_input (EFIKASB_SDHC2_CD ); +gpio_direction_input (EFIKASB_SDHC2_WP ); +if (!ret) + ret =fsl_esdhc_initialize (bis, &esdhc_cfg[1 ]); + } +return ret; }#endif /* -* ATA +* PATA */ -#ifdef CONFIG_MX51_PATA -#define ATA_PAD_CONFIG (PAD_CTL_DRV_HIGH | PAD_CTL_DRV_VOT_HIGH) -void setup_iomux_ata (void ) -{ -mxc_request_iomux (MX51_PIN_NANDF_ALE ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_ALE ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS2 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS2 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS3 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS3 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS4 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS4 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS5 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS5 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS6 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS6 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RE_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RE_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_WE_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_WE_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CLE ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CLE ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RB0 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB0 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_WP_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_WP_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_GPIO_NAND ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_GPIO_NAND ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RB1 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB1 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D0 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D0 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D1 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D1 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D2 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D2 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D3 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D3 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D4 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D4 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D5 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D5 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D6 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D6 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D7 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D7 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D8 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D8 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D9 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D9 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D10 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D10 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D11 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D11 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D12 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D12 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D13 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D13 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D14 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D14 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D15 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D15 ,ATA_PAD_CONFIG ); -} -#else -static inline void setup_iomux_ata (void ) { } -#endif +static iomux_v3_cfg_t efikamx_pata_pads[] = { +MX51_PAD_NANDF_WE_B__PATA_DIOW , +MX51_PAD_NANDF_RE_B__PATA_DIOR , +MX51_PAD_NANDF_ALE__PATA_BUFFER_EN , +MX51_PAD_NANDF_CLE__PATA_RESET_B , +MX51_PAD_NANDF_WP_B__PATA_DMACK , +MX51_PAD_NANDF_RB0__PATA_DMARQ , +MX51_PAD_NANDF_RB1__PATA_IORDY , +MX51_PAD_GPIO_NAND__PATA_INTRQ , +MX51_PAD_NANDF_CS2__PATA_CS_0 , +MX51_PAD_NANDF_CS3__PATA_CS_1 , +MX51_PAD_NANDF_CS4__PATA_DA_0 , +MX51_PAD_NANDF_CS5__PATA_DA_1 , +MX51_PAD_NANDF_CS6__PATA_DA_2 , +MX51_PAD_NANDF_D15__PATA_DATA15 , +MX51_PAD_NANDF_D14__PATA_DATA14 , +MX51_PAD_NANDF_D13__PATA_DATA13 , +MX51_PAD_NANDF_D12__PATA_DATA12 , +MX51_PAD_NANDF_D11__PATA_DATA11 , +MX51_PAD_NANDF_D10__PATA_DATA10 , +MX51_PAD_NANDF_D9__PATA_DATA9 , +MX51_PAD_NANDF_D8__PATA_DATA8 , +MX51_PAD_NANDF_D7__PATA_DATA7 , +MX51_PAD_NANDF_D6__PATA_DATA6 , +MX51_PAD_NANDF_D5__PATA_DATA5 , +MX51_PAD_NANDF_D4__PATA_DATA4 , +MX51_PAD_NANDF_D3__PATA_DATA3 , +MX51_PAD_NANDF_D2__PATA_DATA2 , +MX51_PAD_NANDF_D1__PATA_DATA1 , +MX51_PAD_NANDF_D0__PATA_DATA0 , +};/* * EHCI USB
@@ -551,57 +409,55 @@ static inline void setup_iomux_usb(void) { }/* * LED configuration +* +* Smarttop LED pad config is done in the DCD +* */ -void setup_iomux_led (void ) -{ -if (machine_is_efikamx ()) { -/* Blue LED */ -mxc_request_iomux (MX51_PIN_CSI1_D9 ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_D9 ),0 ); - -/* Green LED */ -mxc_request_iomux (MX51_PIN_CSI1_VSYNC ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_VSYNC ),0 ); +#define EFIKAMX_LED_BLUE GPIO_NUMBER(3, 13) +#define EFIKAMX_LED_GREEN GPIO_NUMBER(3, 14) +#define EFIKAMX_LED_RED GPIO_NUMBER(3, 15) -/* Red LED */ -mxc_request_iomux (MX51_PIN_CSI1_HSYNC ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_HSYNC ),0 ); - }else { -/* CAPS-LOCK LED */ -mxc_request_iomux (MX51_PIN_EIM_CS0 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_EIM_CS0 ),0 ); - -/* ALARM-LED LED */ -mxc_request_iomux (MX51_PIN_GPIO1_3 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_GPIO1_3 ),0 ); - } -} +static iomux_v3_cfg_t efikasb_led_pads[] = { +MX51_PAD_GPIO1_3__GPIO1_3 , +MX51_PAD_EIM_CS0__GPIO2_25 , +}; -void efikamx_toggle_led (uint32_t mask) -{ -if (machine_is_efikamx ()) { -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_D9 ), - mask &EFIKAMX_LED_BLUE ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_VSYNC ), - mask &EFIKAMX_LED_GREEN ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_HSYNC ), - mask &EFIKAMX_LED_RED ); - }else { -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS0 ), - mask &EFIKAMX_LED_BLUE ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_GPIO1_3 ), - !(mask &EFIKAMX_LED_GREEN )); - } -} +#define EFIKASB_CAPSLOCK_LED GPIO_NUMBER(2, 25) +#define EFIKASB_MESSAGE_LED GPIO_NUMBER(1, 3)/* Note: active low */ /* * Board initialization */ int board_early_init_f (void ) { -setup_iomux_uart (); -setup_iomux_spi (); -setup_iomux_led (); +if (machine_is_efikasb ()) { +imx_iomux_v3_setup_multiple_pads (efikasb_led_pads,ARRAY_SIZE (efikasb_led_pads)); +gpio_direction_output (EFIKASB_CAPSLOCK_LED ,0 ); +gpio_direction_output (EFIKASB_MESSAGE_LED ,1 ); + }else if (machine_is_efikamx ()) { +/* +* Set up GPIO directions for LEDs. +* IOMUX has been done in the DCD already. +* Turn the red LED on for pre-relocation code. +*/ +gpio_direction_output (EFIKAMX_LED_BLUE ,0 ); +gpio_direction_output (EFIKAMX_LED_GREEN ,0 ); +gpio_direction_output (EFIKAMX_LED_RED ,1 ); + } + +/* +* Both these pad configurations for UART and SPI are kind of redundant +* since they are the Power-On Defaults for the i.MX51. But, it seems we +* should make absolutely sure that they are set up correctly. +*/ +imx_iomux_v3_setup_multiple_pads (efikamx_uart_pads,ARRAY_SIZE (efikamx_uart_pads)); +imx_iomux_v3_setup_multiple_pads (efikamx_spi_pads,ARRAY_SIZE (efikamx_spi_pads)); + +/* not technically required for U-Boot operation but set it up anyway. */ +gpio_direction_input (EFIKAMX_PMIC_IRQ ); +/* Deselect both CS for now.. any other way and NOR doesn't probe properly. */ +gpio_direction_output (EFIKAMX_SPI_SS0 ,0 ); +gpio_direction_output (EFIKAMX_SPI_SS1 ,1 );return 0 ; }
@@ -609,49 +465,42 @@ int board_early_init_f(void)int board_init (void ) { gd->bd->bi_boot_params =PHYS_SDRAM_1 +0x100 ; - +return 0 ; }int board_late_init (void ) { -setup_iomux_spi (); - +if (machine_is_efikamx ()) { +/* +* Set up Blue LED for "In U-Boot" status. +* We're all relocated and ready to U-Boot! +*/ +gpio_set_value (EFIKAMX_LED_RED ,0 ); +gpio_set_value (EFIKAMX_LED_GREEN ,0 ); +gpio_set_value (EFIKAMX_LED_BLUE ,1 ); + } +power_init (); -setup_iomux_led (); -setup_iomux_ata (); +imx_iomux_v3_setup_multiple_pads (efikamx_pata_pads,ARRAY_SIZE (efikamx_pata_pads));setup_iomux_usb ();if (machine_is_efikasb ())setenv ("preboot" ,"usb reset ; setenv stdin usbkbd\0" ); -setup_iomux_led (); - -efikamx_toggle_led (EFIKAMX_LED_BLUE ); -return 0 ; }int checkboard (void ) { -u32 rev =get_efika_rev (); +u32 rev =get_efikamx_rev (); +printf ("Board: Genesi Efika MX " );if (machine_is_efikamx ()) { -printf ("Board: Efika MX, rev1.%i\n" , rev &0xf ); -return 0 ; - }else { -switch (rev) { -case EFIKASB_BOARD_REV_13 : -printf ("Board: Efika SB rev1.3\n" ); -break ; -case EFIKASB_BOARD_REV_20 : -printf ("Board: Efika SB rev2.0\n" ); -break ; -default : -printf ("Board: Efika SB, rev Unknown\n" ); -break ; - } +printf ("Smarttop (1.%i)\n" , rev &0xf ); + }else if (machine_is_efikasb ()) { +printf ("Smartbook\n" ); }return 0 ;
Signature · 1 line
1.7.9.5
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Dear Matt Sealey,
Beno?t Th?baudeau
Application Engineer
benoit.thebaudeau at advansee.com
+33 2 40 50 21 73
ADVANSEE SARL
9, rue Alfred Kastler
CS 30750
44307 Nantes CEDEX 3
France
----- Original Message -----
Quoted 8 lines
From: "Matt Sealey" <[email protected]>
To: "U-Boot ML" <[email protected]>
Cc: "Steev Klimaszewski" <[email protected]>
Sent: Friday, August 17, 2012 8:19:21 PM
Subject: [U-Boot] [PATCH 3/4] efikamx: update to Efika MX Smarttop and Smartbook boardsChange summary:
Quoted 7 lines
* Use
iomux-mx51.hinclude to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boards
These are many unrelated changes that could be split.
Quoted 234 lines
Signed-off-by Matt Sealey <[email protected]>--- board/genesi/mx51_efikamx/efikamx.c | 611 +++++++++++++---------------------- 1 file changed, 230 insertions(+), 381 deletions(-)board/genesi/mx51_efikamx/efikamx.c +6
-6@@ -1,7 +1,7 @@/* +* Copyright (C) 2009 Freescale Semiconductor, Inc. * Copyright (C) 2010 Marek Vasut <[email protected]> -* -* (C) Copyright 2009 Freescale Semiconductor, Inc. +* Copyright (C) 2009-2012 Genesi USA, Inc. * * See file CREDITS for list of people who contributed to this * project. @@ -24,9 +24,7 @@#include <common.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 <asm/errno.h> #include <asm/arch/sys_proto.h> @@ -48,16 +46,12 @@ DECLARE_GLOBAL_DATA_PTR;#endif /* -* Shared variables / local defines +* Board revisions +* +* Note that we get these revisions here for convenience, but we only set
+ * up for the production model Smarttop (1.3) and Smartbook (2.0).
+ *
*/board/genesi/mx51_efikamx/efikamx.c +39
-46-/* LED */ -#define EFIKAMX_LED_BLUE 0x1 -#define EFIKAMX_LED_GREEN 0x2 -#define EFIKAMX_LED_RED 0x4 - -void efikamx_toggle_led (uint32_t mask); - -/* Board revisions */ #define EFIKAMX_BOARD_REV_11 0x1#define EFIKAMX_BOARD_REV_12 0x2#define EFIKAMX_BOARD_REV_13 0x3@@ -69,66 +63,67 @@ void efikamx_toggle_led(uint32_t mask);/* * Board identification */ -u32 get_efikamx_rev (void ) +static u32 get_mx_rev (void ) {u32 rev =0 ;/* * Retrieve board ID: -* rev1.1: 1,1,1 -* rev1.2: 1,1,0 -* rev1.3: 1,0,1 -* rev1.4: 1,0,0 +* +* gpio: 16 17 11 +* ============== +* r1.1: 1+ 1 1 +* r1.2: 1 1 0 +* r1.3: 1 0 1 +* r1.4: 1 0 0 +* +* + note: r1.1 does not strap this pin properly so it needs to +* be hacked or ignored. */ -mxc_request_iomux (MX51_PIN_NANDF_CS0 ,IOMUX_CONFIG_GPIO ); -/* set to 1 in order to get correct value on board rev1.1 */ -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 ),1 ); + +/* set to 1 in order to get correct value on board rev 1.1 */ +gpio_direction_output (GPIO_NUMBER (3 ,16 ),1 ); +gpio_direction_input (GPIO_NUMBER (3 ,11 )); +gpio_direction_input (GPIO_NUMBER (3 ,16 )); +gpio_direction_input (GPIO_NUMBER (3 ,17 )); -mxc_request_iomux (MX51_PIN_NANDF_CS0 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS0 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 ))) <<0 ; - -mxc_request_iomux (MX51_PIN_NANDF_CS1 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS1 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS1 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS1 ))) <<1 ; - -mxc_request_iomux (MX51_PIN_NANDF_RB3 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB3 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_RB3 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_RB3 ))) <<2 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,16 ))) <<0 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,17 ))) <<1 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,11 ))) <<2 ;return (~rev &0x7 ) +1 ; } -inline u32 get_efikasb_rev (void ) +static iomux_v3_cfg_t efikasb_revision_pads[] = { +MX51_PAD_EIM_CS3__GPIO2_28 , +MX51_PAD_EIM_CS4__GPIO2_29 , +}; + +static inline u32 get_sb_rev (void ) {u32 rev =0 ; -mxc_request_iomux (MX51_PIN_EIM_CS3 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_EIM_CS3 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_EIM_CS3 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS3 ))) <<0 ; - -mxc_request_iomux (MX51_PIN_EIM_CS4 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_EIM_CS4 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_EIM_CS4 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS4 ))) <<1 ; +imx_iomux_v3_setup_multiple_pads (efikasb_revision_pads,ARRAY_SIZE (efikasb_revision_pads)); +gpio_direction_input (GPIO_NUMBER (2 ,28 )); +gpio_direction_input (GPIO_NUMBER (2 ,29 )); + + rev |= (!!gpio_get_value (GPIO_NUMBER (2 ,28 ))) <<0 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (2 ,29 ))) <<1 ;return rev; } -inline uint32_t get_efika_rev (void ) +inline uint32_t get_efikamx_rev (void ) { -if (machine_is_efikamx ()) -return get_efikamx_rev (); -else -return get_efikasb_rev (); +if (machine_is_efikamx ()) { +return get_mx_rev (); + }else if (machine_is_efikasb ()) { +return get_sb_rev (); + } }u32 get_board_rev (void ) { -return get_cpu_rev () | (get_efika_rev () <<8 ); +return get_cpu_rev () | (get_efikamx_rev () <<8 ); }/*
board/genesi/mx51_efikamx/efikamx.c +7
-48@@ -137,66 +132,35 @@ u32 get_board_rev(void)int dram_init(void) { /* dram_init must store complete ramsize in gd->ram_size */ - gd->ram_size =get_ram_size ((void *)CONFIG_SYS_SDRAM_BASE , -PHYS_SDRAM_1_SIZE ); + gd->ram_size =get_ram_size ((void *)CONFIG_SYS_SDRAM_BASE ,PHYS_SDRAM_1_SIZE );return 0 ; }/* * UART configuration */ -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 ; - -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); -} +static iomux_v3_cfg_t efikamx_uart_pads[] = { +MX51_PAD_UART1_RXD__UART1_RXD , +MX51_PAD_UART1_TXD__UART1_TXD , +MX51_PAD_UART1_RTS__UART1_RTS , +MX51_PAD_UART1_CTS__UART1_CTS , +};/* * SPI configuration */ -#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 , -PAD_CTL_HYS_ENABLE |PAD_CTL_DRV_HIGH |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_HIGH |PAD_CTL_SRE_FAST ); - -/* Configure SS0 as a GPIO */ -mxc_request_iomux (MX51_PIN_CSPI1_SS0 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSPI1_SS0 ),0 ); - -/* Configure SS1 as a GPIO */ -mxc_request_iomux (MX51_PIN_CSPI1_SS1 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSPI1_SS1 ),1 ); - -/* 000: Select mux mode: ALT0 mux port: SS2 of instance: ecspi1. */ -mxc_request_iomux (MX51_PIN_CSPI1_RDY ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_CSPI1_RDY , -PAD_CTL_HYS_ENABLE |PAD_CTL_PKE_ENABLE ); - -/* 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_HIGH |PAD_CTL_SRE_FAST ); -} -#else
board/genesi/mx51_efikamx/efikamx.c u32 get_board_rev(void) · line 162
Quoted 10 lines
board/genesi/mx51_efikamx/efikamx.c +8
-2-static inline void setup_iomux_spi (void ) { } -#endif +static iomux_v3_cfg_t efikamx_spi_pads[]= { +MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI , +MX51_PAD_CSPI1_MISO__ECSPI1_MISO , +MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK , +MX51_PAD_CSPI1_SS0__GPIO4_24 , +MX51_PAD_CSPI1_SS1__GPIO4_25 , +MX51_PAD_GPIO1_6__GPIO1_6 , +};
Why don't you merge all these pad settings to a single board pad array, with a single call to imx_iomux_v3_setup_multiple_pads()?
Quoted 543 lines
board/genesi/mx51_efikamx/efikamx.c +4
-0+ +#define EFIKAMX_SPI_SS0 GPIO_NUMBER(4, 24) +#define EFIKAMX_SPI_SS1 GPIO_NUMBER(4, 25) +#define EFIKAMX_PMIC_IRQ GPIO_NUMBER(1, 6)/*
* PMIC configurationboard/genesi/mx51_efikamx/efikamx.c +57
-146@@ -226,7 +190,7 @@ static void power_init(void)/* Set core voltage to 1.1V */ pmic_reg_read (p,REG_SW_0 , &val); - val = (val & ~SWx_VOLT_MASK) | SWx_1_200V; + val = (val & ~SWx_VOLT_MASK) | SWx_1_100V;pmic_reg_write (p,REG_SW_0 , val);/* Setup VCC (SW2) to 1.25 */ @@ -301,29 +265,64 @@ static inline void power_init(void) { }* MMC configuration */ #ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg esdhc_cfg[2 ] = { {MMC_SDHC1_BASE_ADDR ,1 }, {MMC_SDHC2_BASE_ADDR ,1 }, }; -static inline uint32_t efika_mmc_cd (void ) +static iomux_v3_cfg_t efikamx_sdhc1_pads[] = { +MX51_PAD_SD1_CMD__SD1_CMD , +MX51_PAD_SD1_CLK__SD1_CLK , +MX51_PAD_SD1_DATA0__SD1_DATA0 , +MX51_PAD_SD1_DATA1__SD1_DATA1 , +MX51_PAD_SD1_DATA2__SD1_DATA2 , +MX51_PAD_SD1_DATA3__SD1_DATA3 , +MX51_PAD_GPIO1_1__SD1_WP , +}; + +#define EFIKAMX_SDHC1_WP GPIO_NUMBER(1,1) + +static iomux_v3_cfg_t efikamx_sdhc1_cd_pads[] = { +MX51_PAD_GPIO1_0__SD1_CD , +MX51_PAD_EIM_CS2__SD1_CD , +}; + +#define EFIKAMX_SDHC1_CD GPIO_NUMBER(1,0) +#define EFIKASB_SDHC1_CD GPIO_NUMBER(2,27) + +static iomux_v3_cfg_t efikasb_sdhc2_pads[] = { +MX51_PAD_SD2_CMD__SD2_CMD , +MX51_PAD_SD2_CLK__SD2_CLK , +MX51_PAD_SD2_DATA0__SD2_DATA0 , +MX51_PAD_SD2_DATA1__SD2_DATA1 , +MX51_PAD_SD2_DATA2__SD2_DATA2 , +MX51_PAD_SD2_DATA3__SD2_DATA3 , +MX51_PAD_GPIO1_7__SD2_WP , +MX51_PAD_GPIO1_8__SD2_CD , +}; + +#define EFIKASB_SDHC2_CD GPIO_NUMBER(1,8) +#define EFIKASB_SDHC2_WP GPIO_NUMBER(1,7) + +static inline uint32_t efikamx_mmc_getcd (u32 base) { -if (machine_is_efikamx ()) -return MX51_PIN_GPIO1_0 ; -else -return MX51_PIN_EIM_CS2 ; +if (base ==MMC_SDHC1_BASE_ADDR ) { +if (machine_is_efikamx ()) { +return EFIKAMX_SDHC1_CD ; + }else { +return EFIKASB_SDHC1_CD ; + } + }else { +return EFIKASB_SDHC2_CD ; + } }int board_mmc_getcd (struct mmc *mmc) {struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; -uint32_t cd =efika_mmc_cd (); -int ret; - -if (cfg->esdhc_base ==MMC_SDHC1_BASE_ADDR ) - ret = !gpio_get_value (IOMUX_TO_GPIO (cd)); -else - ret = !gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_GPIO1_8 )); +uint32_t cd =efikamx_mmc_getcd (cfg->esdhc_base); +int ret = !gpio_get_value (cd);return ret; }@@ -331,214 +330,73 @@ int board_mmc_getcd(struct mmc *mmc)int board_mmc_init (bd_t *bis) {int ret; -uint32_t cd =efika_mmc_cd (); - -/* SDHC1 is used on all revisions, setup control pins first */ -mxc_request_iomux (cd, -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (cd, -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 |PAD_CTL_SRE_FAST ); -mxc_request_iomux (MX51_PIN_GPIO1_1 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_1 , -PAD_CTL_DRV_HIGH |PAD_CTL_HYS_ENABLE | -PAD_CTL_100K_PU |PAD_CTL_ODE_OPENDRAIN_NONE | -PAD_CTL_SRE_FAST ); - -gpio_direction_input (IOMUX_TO_GPIO (cd)); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_1 )); - -/* Internal SDHC1 IOMUX + SDHC2 IOMUX on old boards */ -if (machine_is_efikasb () || (machine_is_efikamx () && - (get_efika_rev () <EFIKAMX_BOARD_REV_12 ))) { -/* SDHC1 IOMUX */ -mxc_request_iomux (MX51_PIN_SD1_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CMD , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CLK , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA0 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA1 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA2 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA3 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -/* SDHC2 IOMUX */ -mxc_request_iomux (MX51_PIN_SD2_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD2_CMD , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD2_CLK , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA0 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA1 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA2 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA3 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -/* SDHC2 Control lines IOMUX */ -mxc_request_iomux (MX51_PIN_GPIO1_7 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_7 , -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 |PAD_CTL_SRE_FAST ); -mxc_request_iomux (MX51_PIN_GPIO1_8 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_8 , -PAD_CTL_DRV_HIGH |PAD_CTL_HYS_ENABLE | -PAD_CTL_100K_PU |PAD_CTL_ODE_OPENDRAIN_NONE | -PAD_CTL_SRE_FAST ); - -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_8 )); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_7 )); - - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); -if (!ret) - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[1 ]); - }else {/* New boards use only SDHC1 */ -/* SDHC1 IOMUX */ -mxc_request_iomux (MX51_PIN_SD1_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CMD , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CLK , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA0 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA1 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA2 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA3 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); + +/* +* All Efika MX boards use eSDHC1 with a common write-protect GPIO +*/ +imx_iomux_v3_setup_multiple_pads (efikamx_sdhc1_pads,ARRAY_SIZE (efikamx_sdhc1_pads)); +gpio_direction_input (EFIKAMX_SDHC1_WP ); + +/* +* Smartbook and Smarttop differ on the location of eSDHC1 carrier-detect GPIO
board/genesi/mx51_efikamx/efikamx.c +12
-0+*/ +if (machine_is_efikamx ()) { +imx_iomux_v3_setup_pad (efikamx_sdhc1_cd_pads[0 ]); +gpio_direction_input (EFIKAMX_SDHC1_CD ); + }else if (machine_is_efikasb ()) { +imx_iomux_v3_setup_pad (efikamx_sdhc1_cd_pads[1 ]); +gpio_direction_input (EFIKASB_SDHC1_CD ); } + + ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); + +if (machine_is_efikasb ()) { + imx_iomux_v3_setup_multiple_pads(efikasb_sdhc2_pads,
ARRAY_SIZE(efikasb_sdhc2_pads));board/genesi/mx51_efikamx/efikamx.c +67
-109+gpio_direction_input (EFIKASB_SDHC2_CD ); +gpio_direction_input (EFIKASB_SDHC2_WP ); +if (!ret) + ret = fsl_esdhc_initialize(bis, &esdhc_cfg[1]); + } +return ret; }#endif /* -* ATA +* PATA */ -#ifdef CONFIG_MX51_PATA -#define ATA_PAD_CONFIG (PAD_CTL_DRV_HIGH | PAD_CTL_DRV_VOT_HIGH) -void setup_iomux_ata (void ) -{ -mxc_request_iomux (MX51_PIN_NANDF_ALE ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_ALE ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS2 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS2 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS3 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS3 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS4 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS4 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS5 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS5 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS6 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS6 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RE_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RE_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_WE_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_WE_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CLE ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CLE ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RB0 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB0 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_WP_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_WP_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_GPIO_NAND ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_GPIO_NAND ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RB1 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB1 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D0 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D0 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D1 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D1 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D2 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D2 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D3 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D3 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D4 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D4 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D5 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D5 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D6 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D6 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D7 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D7 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D8 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D8 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D9 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D9 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D10 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D10 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D11 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D11 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D12 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D12 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D13 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D13 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D14 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D14 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D15 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D15 ,ATA_PAD_CONFIG ); -} -#else -static inline void setup_iomux_ata (void ) { } -#endif +static iomux_v3_cfg_t efikamx_pata_pads[] = { +MX51_PAD_NANDF_WE_B__PATA_DIOW , +MX51_PAD_NANDF_RE_B__PATA_DIOR , +MX51_PAD_NANDF_ALE__PATA_BUFFER_EN , +MX51_PAD_NANDF_CLE__PATA_RESET_B , +MX51_PAD_NANDF_WP_B__PATA_DMACK , +MX51_PAD_NANDF_RB0__PATA_DMARQ , +MX51_PAD_NANDF_RB1__PATA_IORDY , +MX51_PAD_GPIO_NAND__PATA_INTRQ , +MX51_PAD_NANDF_CS2__PATA_CS_0 , +MX51_PAD_NANDF_CS3__PATA_CS_1 , +MX51_PAD_NANDF_CS4__PATA_DA_0 , +MX51_PAD_NANDF_CS5__PATA_DA_1 , +MX51_PAD_NANDF_CS6__PATA_DA_2 , +MX51_PAD_NANDF_D15__PATA_DATA15 , +MX51_PAD_NANDF_D14__PATA_DATA14 , +MX51_PAD_NANDF_D13__PATA_DATA13 , +MX51_PAD_NANDF_D12__PATA_DATA12 , +MX51_PAD_NANDF_D11__PATA_DATA11 , +MX51_PAD_NANDF_D10__PATA_DATA10 , +MX51_PAD_NANDF_D9__PATA_DATA9 , +MX51_PAD_NANDF_D8__PATA_DATA8 , +MX51_PAD_NANDF_D7__PATA_DATA7 , +MX51_PAD_NANDF_D6__PATA_DATA6 , +MX51_PAD_NANDF_D5__PATA_DATA5 , +MX51_PAD_NANDF_D4__PATA_DATA4 , +MX51_PAD_NANDF_D3__PATA_DATA3 , +MX51_PAD_NANDF_D2__PATA_DATA2 , +MX51_PAD_NANDF_D1__PATA_DATA1 , +MX51_PAD_NANDF_D0__PATA_DATA0 , +};/* * EHCI USB @@ -551,57 +409,55 @@ static inline void setup_iomux_usb(void) { }/* * LED configuration +* +* Smarttop LED pad config is done in the DCD +* */ -void setup_iomux_led (void ) -{ -if (machine_is_efikamx ()) { -/* Blue LED */ -mxc_request_iomux (MX51_PIN_CSI1_D9 ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_D9 ),0 ); - -/* Green LED */ -mxc_request_iomux (MX51_PIN_CSI1_VSYNC ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_VSYNC ),0 ); +#define EFIKAMX_LED_BLUE GPIO_NUMBER(3, 13) +#define EFIKAMX_LED_GREEN GPIO_NUMBER(3, 14) +#define EFIKAMX_LED_RED GPIO_NUMBER(3, 15) -/* Red LED */ -mxc_request_iomux (MX51_PIN_CSI1_HSYNC ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_HSYNC ),0 ); - }else { -/* CAPS-LOCK LED */ -mxc_request_iomux (MX51_PIN_EIM_CS0 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_EIM_CS0 ),0 ); - -/* ALARM-LED LED */ -mxc_request_iomux (MX51_PIN_GPIO1_3 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_GPIO1_3 ),0 ); - } -} +static iomux_v3_cfg_t efikasb_led_pads[] = { +MX51_PAD_GPIO1_3__GPIO1_3 , +MX51_PAD_EIM_CS0__GPIO2_25 , +}; -void efikamx_toggle_led (uint32_t mask) -{ -if (machine_is_efikamx ()) { -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_D9 ), - mask &EFIKAMX_LED_BLUE ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_VSYNC ), - mask &EFIKAMX_LED_GREEN ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_HSYNC ), - mask &EFIKAMX_LED_RED ); - }else { -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS0 ), - mask &EFIKAMX_LED_BLUE ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_GPIO1_3 ), - !(mask &EFIKAMX_LED_GREEN )); - } -} +#define EFIKASB_CAPSLOCK_LED GPIO_NUMBER(2, 25) +#define EFIKASB_MESSAGE_LED GPIO_NUMBER(1, 3)/* Note: active low */ /* * Board initialization */ int board_early_init_f (void ) { -setup_iomux_uart (); -setup_iomux_spi (); -setup_iomux_led (); +if (machine_is_efikasb ()) { +imx_iomux_v3_setup_multiple_pads (efikasb_led_pads,ARRAY_SIZE (efikasb_led_pads)); +gpio_direction_output (EFIKASB_CAPSLOCK_LED ,0 ); +gpio_direction_output (EFIKASB_MESSAGE_LED ,1 ); + }else if (machine_is_efikamx ()) { +/* +* Set up GPIO directions for LEDs. +* IOMUX has been done in the DCD already. +* Turn the red LED on for pre-relocation code. +*/ +gpio_direction_output (EFIKAMX_LED_BLUE ,0 ); +gpio_direction_output (EFIKAMX_LED_GREEN ,0 ); +gpio_direction_output (EFIKAMX_LED_RED ,1 ); + } + +/* +* Both these pad configurations for UART and SPI are kind of redundant
board/genesi/mx51_efikamx/efikamx.c +1
-0+* since they are the Power-On Defaults for the i.MX51. But, it seems we
board/genesi/mx51_efikamx/efikamx.c +3
-0+* should make absolutely sure that they are set up correctly. +*/ + imx_iomux_v3_setup_multiple_pads(efikamx_uart_pads,
ARRAY_SIZE(efikamx_uart_pads));board/genesi/mx51_efikamx/efikamx.c +1
-0+ imx_iomux_v3_setup_multiple_pads(efikamx_spi_pads,
ARRAY_SIZE(efikamx_spi_pads));board/genesi/mx51_efikamx/efikamx.c +2
-0+ +/* not technically required for U-Boot operation but set it up anyway. */
board/genesi/mx51_efikamx/efikamx.c +2
-0+gpio_direction_input (EFIKAMX_PMIC_IRQ ); +/* Deselect both CS for now.. any other way and NOR doesn't probe properly. */
board/genesi/mx51_efikamx/efikamx.c +19
-24+gpio_direction_output (EFIKAMX_SPI_SS0 ,0 ); +gpio_direction_output (EFIKAMX_SPI_SS1 ,1 );return 0 ; }@@ -609,49 +465,42 @@ int board_early_init_f(void)int board_init (void ) { gd->bd->bi_boot_params =PHYS_SDRAM_1 +0x100 ; - +return 0 ; }int board_late_init (void ) { -setup_iomux_spi (); - +if (machine_is_efikamx ()) { +/* +* Set up Blue LED for "In U-Boot" status. +* We're all relocated and ready to U-Boot! +*/ +gpio_set_value (EFIKAMX_LED_RED ,0 ); +gpio_set_value (EFIKAMX_LED_GREEN ,0 ); +gpio_set_value (EFIKAMX_LED_BLUE ,1 ); + } +power_init (); -setup_iomux_led (); -setup_iomux_ata (); +imx_iomux_v3_setup_multiple_pads (efikamx_pata_pads,ARRAY_SIZE (efikamx_pata_pads));setup_iomux_usb ();if (machine_is_efikasb ())setenv ("preboot" ,"usb reset ; setenv stdin usbkbd\0" ); -setup_iomux_led (); - -efikamx_toggle_led (EFIKAMX_LED_BLUE ); -return 0 ; }int checkboard (void ) { -u32 rev =get_efika_rev (); +u32 rev =get_efikamx_rev (); +printf ("Board: Genesi Efika MX " );if (machine_is_efikamx ()) { -printf ("Board: Efika MX, rev1.%i\n" , rev &0xf ); -return 0 ; - }else { -switch (rev) { -case EFIKASB_BOARD_REV_13 : -printf ("Board: Efika SB rev1.3\n" ); -break ; -case EFIKASB_BOARD_REV_20 : -printf ("Board: Efika SB rev2.0\n" ); -break ; -default : -printf ("Board: Efika SB, rev Unknown\n" ); -break ; - } +printf ("Smarttop (1.%i)\n" , rev &0xf ); + }else if (machine_is_efikasb ()) { +printf ("Smartbook\n" ); }
Quoted 1 line
return 0;
Best regards,
Beno?t
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Quoted 11 lines · Beno?t Th?baudeau
Dear Matt Sealey,
Quoted 8 lines
* Use
iomux-mx51.hinclude to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boardsThese are many unrelated changes that could be split.
Could be, but they're not going to be, the reasoning behind it being that it increases work for us to test each individual patch works in any particular order it may be committed to any tree, and increases work for patch maintainers whereby there are too many inter-dependent changes, extra fuzz, rebasing etc. which is just totally needless. In essence this is a cleanup patch intended to get rid of some things that made absolutely no sense but have persisted upstream for the longest time. It also ports to iomux-mx51.h as previously sent since that helps a lot on cleanup.
We tested every single part of this as a unit internally over 10 weeks, what's being sent to the list is the result. What isn't in the patch (or more accurately, what got removed) was code that would make more of a mess for very little functionality, code that was repeated or overcomplicated for no good reason (led setup for example) or was over-abstracted.
What went in to the process was the old code: functionality was tested and verified against expectations. What you get from the new code:
almost exactly the same behavior (actually it works a little better as some redundant things were removed).
The sign-off is not just me hitting "-s" on my git command line, it's my explicit assurance that this is highly tested code that I am willing to maintain and answer questions on. Marex has been asking me to submit it for a long, long time and I refused because we were still going through QA; that got finished, to a level I am happy with at least (still a few weird things happening but they existed with the old code too). However, QA got done, and the result is clear, and splitting it up means going through QA again just to respin patches, so I'm going to refuse on that basis alone. If we just consider it a cleanup patch for the board and a reasonable example of the benefits of the new iomux model code, does that make it easier to accept?
Quoted 1 line
Quoted 1 line
Signed-off-by Matt Sealey <[email protected]>
[snip]
Quoted 6 lines
board/genesi/mx51_efikamx/efikamx.c u32 get_board_rev(void) · line 159
Quoted 3 lines
board/genesi/mx51_efikamx/efikamx.c +3
-0+MX51_PAD_CSPI1_SS1__GPIO4_25 , + MX51_PAD_GPIO1_6__GPIO1_6, +};Why don't you merge all these pad settings to a single board pad array, with a single call to
imx_iomux_v3_setup_multiple_pads()?
That has been done before (it was the way we did it in our ancient Linux kernels, it was the way Freescale did it in their ancient Linux kernels). We feel a huge board-specific array is hard to maintain and ugly to read, and the few differences would end up in tiny, separate arrays anyway. The U-Boot code was written that way in the first place, it made a lot of sense to keep the status quo for now. My preferred solution would be to split each part into a seperate source file and call them from the board file (as efikamx-usb.c is done now, but for MMC, ATA too) where such code would clean up the main board file significantly, but I think that would be too big a change for a lot of people. We can perform a more egregious cleanup later.
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
In reply to Matt SealeyDear Matt Sealey,
Quoted 1 line
Change summary:
This patch does multiple unrelated changes, please split. You basically outlined how this should be split.
Quoted 7 lines
* Use
iomux-mx51.hinclude to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boards
There are TO2 baords out there, debian people do have some. Please do not remove this.
Quoted 2 lines
Signed-off-by Matt Sealey <[email protected]>---
[...]
Best regards,
Marek Vasut
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Quoted 15 lines · Marek Vasut
Dear Matt Sealey,
Quoted 1 line
Change summary:
This patch does multiple unrelated changes, please split. You basically outlined how this should be split.
Quoted 7 lines
* Use
iomux-mx51.hinclude to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boards
Quoted 2 lines
There are TO2 baords out there, debian people do have some. Please do not remove this.
The code I checked out from git master a week ago doesn't boot for precisely the same reason on TO2 r1.1 or r1.2 boards, so nothing changed here in real life. The TO2 code can't pass QA so it's been removed. Welcome to the wonderful world of commercial software development.
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Dear Matt Sealey,
Quoted 15 lines · Marek Vasut
Quoted 14 lines
Dear Matt Sealey,
Quoted 1 line
Change summary:
This patch does multiple unrelated changes, please split. You basically outlined how this should be split.
Quoted 7 lines
* Use
iomux-mx51.hinclude to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boards
Quoted 7 lines
Quoted 2 lines
There are TO2 baords out there, debian people do have some. Please do not remove this.
The code I checked out from git master a week ago doesn't boot for precisely the same reason on TO2 r1.1 or r1.2 boards, so nothing changed here in real life. The TO2 code can't pass QA so it's been removed.
CCing Hector so he can supply further details about what debian does.
Quoted 2 lines
Welcome to the wonderful world of commercial software development.
Your commercial goo has zero influence on any opensource project and noone gives a splat, welcome to the wonderful world of _freedom_.*
* ok, maybe I'm negatively biased actually, especially due to the way you put it.
Best regards,
Marek Vasut
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
In reply to Matt SealeyQuoted 10 lines · Matt Sealey
Change summary:
* Use
iomux-mx51.hinclude to simplify board configuration.
* Remove LED toggle function as it had no real users.
* Red LED is now on for pre-reloc, Blue LED for "in U-Boot"
* Function renames for readability.
* Some board identification string changes
* Reduce CPU core voltage to 1.1V (per TO3 spec)
* Implicitly remove support for TO2 boards
Quoted 2 lines
Signed-off-by Matt Sealey <[email protected]>---
Hi Matt,
Quoted 758 lines
board/genesi/mx51_efikamx/efikamx.c | 611 +++++++++++++---------------------- 1 file changed, 230 insertions(+), 381 deletions(-)board/genesi/mx51_efikamx/efikamx.c +227
-377@@ -1,7 +1,7 @@/* +* Copyright (C) 2009 Freescale Semiconductor, Inc. * Copyright (C) 2010 Marek Vasut <[email protected]> -* -* (C) Copyright 2009 Freescale Semiconductor, Inc. +* Copyright (C) 2009-2012 Genesi USA, Inc. * * See file CREDITS for list of people who contributed to this * project. @@ -24,9 +24,7 @@#include <common.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 <asm/errno.h> #include <asm/arch/sys_proto.h> @@ -48,16 +46,12 @@ DECLARE_GLOBAL_DATA_PTR;#endif /* -* Shared variables / local defines +* Board revisions +* +* Note that we get these revisions here for convenience, but we only set +* up for the production model Smarttop (1.3) and Smartbook (2.0). +* */ -/* LED */ -#define EFIKAMX_LED_BLUE 0x1 -#define EFIKAMX_LED_GREEN 0x2 -#define EFIKAMX_LED_RED 0x4 - -void efikamx_toggle_led (uint32_t mask); - -/* Board revisions */ #define EFIKAMX_BOARD_REV_11 0x1#define EFIKAMX_BOARD_REV_12 0x2#define EFIKAMX_BOARD_REV_13 0x3@@ -69,66 +63,67 @@ void efikamx_toggle_led(uint32_t mask);/* * Board identification */ -u32 get_efikamx_rev (void ) +static u32 get_mx_rev (void ) {u32 rev =0 ;/* * Retrieve board ID: -* rev1.1: 1,1,1 -* rev1.2: 1,1,0 -* rev1.3: 1,0,1 -* rev1.4: 1,0,0 +* +* gpio: 16 17 11 +* ============== +* r1.1: 1+ 1 1 +* r1.2: 1 1 0 +* r1.3: 1 0 1 +* r1.4: 1 0 0 +* +* + note: r1.1 does not strap this pin properly so it needs to +* be hacked or ignored. */ -mxc_request_iomux (MX51_PIN_NANDF_CS0 ,IOMUX_CONFIG_GPIO ); -/* set to 1 in order to get correct value on board rev1.1 */ -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 ),1 ); + +/* set to 1 in order to get correct value on board rev 1.1 */ +gpio_direction_output (GPIO_NUMBER (3 ,16 ),1 ); +gpio_direction_input (GPIO_NUMBER (3 ,11 )); +gpio_direction_input (GPIO_NUMBER (3 ,16 )); +gpio_direction_input (GPIO_NUMBER (3 ,17 )); -mxc_request_iomux (MX51_PIN_NANDF_CS0 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS0 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS0 ))) <<0 ; - -mxc_request_iomux (MX51_PIN_NANDF_CS1 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS1 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS1 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_CS1 ))) <<1 ; - -mxc_request_iomux (MX51_PIN_NANDF_RB3 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB3 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_NANDF_RB3 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_NANDF_RB3 ))) <<2 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,16 ))) <<0 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,17 ))) <<1 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (3 ,11 ))) <<2 ;return (~rev &0x7 ) +1 ; } -inline u32 get_efikasb_rev (void ) +static iomux_v3_cfg_t efikasb_revision_pads[] = { +MX51_PAD_EIM_CS3__GPIO2_28 , +MX51_PAD_EIM_CS4__GPIO2_29 , +}; + +static inline u32 get_sb_rev (void ) {u32 rev =0 ; -mxc_request_iomux (MX51_PIN_EIM_CS3 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_EIM_CS3 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_EIM_CS3 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS3 ))) <<0 ; - -mxc_request_iomux (MX51_PIN_EIM_CS4 ,IOMUX_CONFIG_GPIO ); -mxc_iomux_set_pad (MX51_PIN_EIM_CS4 ,PAD_CTL_100K_PU ); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_EIM_CS4 )); - rev |= (!!gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS4 ))) <<1 ; +imx_iomux_v3_setup_multiple_pads (efikasb_revision_pads,ARRAY_SIZE (efikasb_revision_pads)); +gpio_direction_input (GPIO_NUMBER (2 ,28 )); +gpio_direction_input (GPIO_NUMBER (2 ,29 )); + + rev |= (!!gpio_get_value (GPIO_NUMBER (2 ,28 ))) <<0 ; + rev |= (!!gpio_get_value (GPIO_NUMBER (2 ,29 ))) <<1 ;return rev; } -inline uint32_t get_efika_rev (void ) +inline uint32_t get_efikamx_rev (void ) { -if (machine_is_efikamx ()) -return get_efikamx_rev (); -else -return get_efikasb_rev (); +if (machine_is_efikamx ()) { +return get_mx_rev (); + }else if (machine_is_efikasb ()) { +return get_sb_rev (); + } }u32 get_board_rev (void ) { -return get_cpu_rev () | (get_efika_rev () <<8 ); +return get_cpu_rev () | (get_efikamx_rev () <<8 ); }/* @@ -137,66 +132,35 @@ u32 get_board_rev(void)int dram_init (void ) {/* dram_init must store complete ramsize in gd->ram_size */ - gd->ram_size =get_ram_size ((void *)CONFIG_SYS_SDRAM_BASE , -PHYS_SDRAM_1_SIZE ); + gd->ram_size =get_ram_size ((void *)CONFIG_SYS_SDRAM_BASE ,PHYS_SDRAM_1_SIZE );return 0 ; }/* * UART configuration */ -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 ; - -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); -} +static iomux_v3_cfg_t efikamx_uart_pads[] = { +MX51_PAD_UART1_RXD__UART1_RXD , +MX51_PAD_UART1_TXD__UART1_TXD , +MX51_PAD_UART1_RTS__UART1_RTS , +MX51_PAD_UART1_CTS__UART1_CTS , +};/* * SPI configuration */ -#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 , -PAD_CTL_HYS_ENABLE |PAD_CTL_DRV_HIGH |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_HIGH |PAD_CTL_SRE_FAST ); - -/* Configure SS0 as a GPIO */ -mxc_request_iomux (MX51_PIN_CSPI1_SS0 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSPI1_SS0 ),0 ); - -/* Configure SS1 as a GPIO */ -mxc_request_iomux (MX51_PIN_CSPI1_SS1 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSPI1_SS1 ),1 ); - -/* 000: Select mux mode: ALT0 mux port: SS2 of instance: ecspi1. */ -mxc_request_iomux (MX51_PIN_CSPI1_RDY ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_CSPI1_RDY , -PAD_CTL_HYS_ENABLE |PAD_CTL_PKE_ENABLE ); - -/* 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_HIGH |PAD_CTL_SRE_FAST ); -} -#else -static inline void setup_iomux_spi (void ) { } -#endif +static iomux_v3_cfg_t efikamx_spi_pads[]= { +MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI , +MX51_PAD_CSPI1_MISO__ECSPI1_MISO , +MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK , +MX51_PAD_CSPI1_SS0__GPIO4_24 , +MX51_PAD_CSPI1_SS1__GPIO4_25 , +MX51_PAD_GPIO1_6__GPIO1_6 , +}; + +#define EFIKAMX_SPI_SS0 GPIO_NUMBER(4, 24) +#define EFIKAMX_SPI_SS1 GPIO_NUMBER(4, 25) +#define EFIKAMX_PMIC_IRQ GPIO_NUMBER(1, 6)/* * PMIC configuration @@ -226,7 +190,7 @@ static void power_init(void)/* Set core voltage to 1.1V */ pmic_reg_read (p,REG_SW_0 , &val); - val = (val & ~SWx_VOLT_MASK) | SWx_1_200V; + val = (val & ~SWx_VOLT_MASK) | SWx_1_100V;pmic_reg_write (p,REG_SW_0 , val);/* Setup VCC (SW2) to 1.25 */ @@ -301,29 +265,64 @@ static inline void power_init(void) { }* MMC configuration */ #ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg esdhc_cfg[2 ] = { {MMC_SDHC1_BASE_ADDR ,1 }, {MMC_SDHC2_BASE_ADDR ,1 }, }; -static inline uint32_t efika_mmc_cd (void ) +static iomux_v3_cfg_t efikamx_sdhc1_pads[] = { +MX51_PAD_SD1_CMD__SD1_CMD , +MX51_PAD_SD1_CLK__SD1_CLK , +MX51_PAD_SD1_DATA0__SD1_DATA0 , +MX51_PAD_SD1_DATA1__SD1_DATA1 , +MX51_PAD_SD1_DATA2__SD1_DATA2 , +MX51_PAD_SD1_DATA3__SD1_DATA3 , +MX51_PAD_GPIO1_1__SD1_WP , +}; + +#define EFIKAMX_SDHC1_WP GPIO_NUMBER(1,1) + +static iomux_v3_cfg_t efikamx_sdhc1_cd_pads[] = { +MX51_PAD_GPIO1_0__SD1_CD , +MX51_PAD_EIM_CS2__SD1_CD , +}; + +#define EFIKAMX_SDHC1_CD GPIO_NUMBER(1,0) +#define EFIKASB_SDHC1_CD GPIO_NUMBER(2,27) + +static iomux_v3_cfg_t efikasb_sdhc2_pads[] = { +MX51_PAD_SD2_CMD__SD2_CMD , +MX51_PAD_SD2_CLK__SD2_CLK , +MX51_PAD_SD2_DATA0__SD2_DATA0 , +MX51_PAD_SD2_DATA1__SD2_DATA1 , +MX51_PAD_SD2_DATA2__SD2_DATA2 , +MX51_PAD_SD2_DATA3__SD2_DATA3 , +MX51_PAD_GPIO1_7__SD2_WP , +MX51_PAD_GPIO1_8__SD2_CD , +}; + +#define EFIKASB_SDHC2_CD GPIO_NUMBER(1,8) +#define EFIKASB_SDHC2_WP GPIO_NUMBER(1,7) + +static inline uint32_t efikamx_mmc_getcd (u32 base) { -if (machine_is_efikamx ()) -return MX51_PIN_GPIO1_0 ; -else -return MX51_PIN_EIM_CS2 ; +if (base ==MMC_SDHC1_BASE_ADDR ) { +if (machine_is_efikamx ()) { +return EFIKAMX_SDHC1_CD ; + }else { +return EFIKASB_SDHC1_CD ; + } + }else { +return EFIKASB_SDHC2_CD ; + } }int board_mmc_getcd (struct mmc *mmc) {struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; -uint32_t cd =efika_mmc_cd (); -int ret; - -if (cfg->esdhc_base ==MMC_SDHC1_BASE_ADDR ) - ret = !gpio_get_value (IOMUX_TO_GPIO (cd)); -else - ret = !gpio_get_value (IOMUX_TO_GPIO (MX51_PIN_GPIO1_8 )); +uint32_t cd =efikamx_mmc_getcd (cfg->esdhc_base); +int ret = !gpio_get_value (cd);return ret; }@@ -331,214 +330,73 @@ int board_mmc_getcd(struct mmc *mmc)int board_mmc_init (bd_t *bis) {int ret; -uint32_t cd =efika_mmc_cd (); - -/* SDHC1 is used on all revisions, setup control pins first */ -mxc_request_iomux (cd, -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (cd, -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 |PAD_CTL_SRE_FAST ); -mxc_request_iomux (MX51_PIN_GPIO1_1 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_1 , -PAD_CTL_DRV_HIGH |PAD_CTL_HYS_ENABLE | -PAD_CTL_100K_PU |PAD_CTL_ODE_OPENDRAIN_NONE | -PAD_CTL_SRE_FAST ); - -gpio_direction_input (IOMUX_TO_GPIO (cd)); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_1 )); - -/* Internal SDHC1 IOMUX + SDHC2 IOMUX on old boards */ -if (machine_is_efikasb () || (machine_is_efikamx () && - (get_efika_rev () <EFIKAMX_BOARD_REV_12 ))) { -/* SDHC1 IOMUX */ -mxc_request_iomux (MX51_PIN_SD1_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CMD , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CLK , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA0 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA1 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA2 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA3 , -PAD_CTL_PUE_KEEPER |PAD_CTL_PKE_ENABLE | -PAD_CTL_DRV_HIGH |PAD_CTL_47K_PU |PAD_CTL_SRE_FAST ); - -/* SDHC2 IOMUX */ -mxc_request_iomux (MX51_PIN_SD2_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD2_CMD , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD2_CLK , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA0 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA1 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA2 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD2_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD2_DATA3 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -/* SDHC2 Control lines IOMUX */ -mxc_request_iomux (MX51_PIN_GPIO1_7 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_7 , -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 |PAD_CTL_SRE_FAST ); -mxc_request_iomux (MX51_PIN_GPIO1_8 , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_GPIO1_8 , -PAD_CTL_DRV_HIGH |PAD_CTL_HYS_ENABLE | -PAD_CTL_100K_PU |PAD_CTL_ODE_OPENDRAIN_NONE | -PAD_CTL_SRE_FAST ); - -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_8 )); -gpio_direction_input (IOMUX_TO_GPIO (MX51_PIN_GPIO1_7 )); - - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); -if (!ret) - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[1 ]); - }else {/* New boards use only SDHC1 */ -/* SDHC1 IOMUX */ -mxc_request_iomux (MX51_PIN_SD1_CMD , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CMD , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_CLK , -IOMUX_CONFIG_ALT0 |IOMUX_CONFIG_SION ); -mxc_iomux_set_pad (MX51_PIN_SD1_CLK , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA0 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA0 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA1 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA1 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA2 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA2 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - -mxc_request_iomux (MX51_PIN_SD1_DATA3 ,IOMUX_CONFIG_ALT0 ); -mxc_iomux_set_pad (MX51_PIN_SD1_DATA3 , -PAD_CTL_DRV_MAX |PAD_CTL_22K_PU |PAD_CTL_SRE_FAST ); - - ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); + +/* +* All Efika MX boards use eSDHC1 with a common write-protect GPIO +*/ +imx_iomux_v3_setup_multiple_pads (efikamx_sdhc1_pads,ARRAY_SIZE (efikamx_sdhc1_pads)); +gpio_direction_input (EFIKAMX_SDHC1_WP ); + +/* +* Smartbook and Smarttop differ on the location of eSDHC1 carrier-detect GPIO +*/ +if (machine_is_efikamx ()) { +imx_iomux_v3_setup_pad (efikamx_sdhc1_cd_pads[0 ]); +gpio_direction_input (EFIKAMX_SDHC1_CD ); + }else if (machine_is_efikasb ()) { +imx_iomux_v3_setup_pad (efikamx_sdhc1_cd_pads[1 ]); +gpio_direction_input (EFIKASB_SDHC1_CD ); } + + ret =fsl_esdhc_initialize (bis, &esdhc_cfg[0 ]); + +if (machine_is_efikasb ()) { +imx_iomux_v3_setup_multiple_pads (efikasb_sdhc2_pads,ARRAY_SIZE (efikasb_sdhc2_pads)); +gpio_direction_input (EFIKASB_SDHC2_CD ); +gpio_direction_input (EFIKASB_SDHC2_WP ); +if (!ret) + ret =fsl_esdhc_initialize (bis, &esdhc_cfg[1 ]); + } +return ret; }#endif /* -* ATA +* PATA */ -#ifdef CONFIG_MX51_PATA -#define ATA_PAD_CONFIG (PAD_CTL_DRV_HIGH | PAD_CTL_DRV_VOT_HIGH) -void setup_iomux_ata (void ) -{ -mxc_request_iomux (MX51_PIN_NANDF_ALE ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_ALE ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS2 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS2 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS3 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS3 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS4 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS4 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS5 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS5 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CS6 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CS6 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RE_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RE_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_WE_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_WE_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_CLE ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_CLE ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RB0 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB0 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_WP_B ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_WP_B ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_GPIO_NAND ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_GPIO_NAND ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_RB1 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_RB1 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D0 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D0 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D1 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D1 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D2 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D2 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D3 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D3 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D4 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D4 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D5 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D5 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D6 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D6 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D7 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D7 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D8 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D8 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D9 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D9 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D10 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D10 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D11 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D11 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D12 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D12 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D13 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D13 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D14 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D14 ,ATA_PAD_CONFIG ); -mxc_request_iomux (MX51_PIN_NANDF_D15 ,IOMUX_CONFIG_ALT1 ); -mxc_iomux_set_pad (MX51_PIN_NANDF_D15 ,ATA_PAD_CONFIG ); -} -#else -static inline void setup_iomux_ata (void ) { } -#endif +static iomux_v3_cfg_t efikamx_pata_pads[] = { +MX51_PAD_NANDF_WE_B__PATA_DIOW , +MX51_PAD_NANDF_RE_B__PATA_DIOR , +MX51_PAD_NANDF_ALE__PATA_BUFFER_EN , +MX51_PAD_NANDF_CLE__PATA_RESET_B , +MX51_PAD_NANDF_WP_B__PATA_DMACK , +MX51_PAD_NANDF_RB0__PATA_DMARQ , +MX51_PAD_NANDF_RB1__PATA_IORDY , +MX51_PAD_GPIO_NAND__PATA_INTRQ , +MX51_PAD_NANDF_CS2__PATA_CS_0 , +MX51_PAD_NANDF_CS3__PATA_CS_1 , +MX51_PAD_NANDF_CS4__PATA_DA_0 , +MX51_PAD_NANDF_CS5__PATA_DA_1 , +MX51_PAD_NANDF_CS6__PATA_DA_2 , +MX51_PAD_NANDF_D15__PATA_DATA15 , +MX51_PAD_NANDF_D14__PATA_DATA14 , +MX51_PAD_NANDF_D13__PATA_DATA13 , +MX51_PAD_NANDF_D12__PATA_DATA12 , +MX51_PAD_NANDF_D11__PATA_DATA11 , +MX51_PAD_NANDF_D10__PATA_DATA10 , +MX51_PAD_NANDF_D9__PATA_DATA9 , +MX51_PAD_NANDF_D8__PATA_DATA8 , +MX51_PAD_NANDF_D7__PATA_DATA7 , +MX51_PAD_NANDF_D6__PATA_DATA6 , +MX51_PAD_NANDF_D5__PATA_DATA5 , +MX51_PAD_NANDF_D4__PATA_DATA4 , +MX51_PAD_NANDF_D3__PATA_DATA3 , +MX51_PAD_NANDF_D2__PATA_DATA2 , +MX51_PAD_NANDF_D1__PATA_DATA1 , +MX51_PAD_NANDF_D0__PATA_DATA0 , +};/* * EHCI USB @@ -551,57 +409,55 @@ static inline void setup_iomux_usb(void) { }/* * LED configuration +* +* Smarttop LED pad config is done in the DCD +* */ -void setup_iomux_led (void ) -{ -if (machine_is_efikamx ()) { -/* Blue LED */ -mxc_request_iomux (MX51_PIN_CSI1_D9 ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_D9 ),0 ); - -/* Green LED */ -mxc_request_iomux (MX51_PIN_CSI1_VSYNC ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_VSYNC ),0 ); +#define EFIKAMX_LED_BLUE GPIO_NUMBER(3, 13) +#define EFIKAMX_LED_GREEN GPIO_NUMBER(3, 14) +#define EFIKAMX_LED_RED GPIO_NUMBER(3, 15) -/* Red LED */ -mxc_request_iomux (MX51_PIN_CSI1_HSYNC ,IOMUX_CONFIG_ALT3 ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_CSI1_HSYNC ),0 ); - }else { -/* CAPS-LOCK LED */ -mxc_request_iomux (MX51_PIN_EIM_CS0 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_EIM_CS0 ),0 ); - -/* ALARM-LED LED */ -mxc_request_iomux (MX51_PIN_GPIO1_3 ,IOMUX_CONFIG_GPIO ); -gpio_direction_output (IOMUX_TO_GPIO (MX51_PIN_GPIO1_3 ),0 ); - } -} +static iomux_v3_cfg_t efikasb_led_pads[] = { +MX51_PAD_GPIO1_3__GPIO1_3 , +MX51_PAD_EIM_CS0__GPIO2_25 , +}; -void efikamx_toggle_led (uint32_t mask) -{ -if (machine_is_efikamx ()) { -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_D9 ), - mask &EFIKAMX_LED_BLUE ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_VSYNC ), - mask &EFIKAMX_LED_GREEN ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_CSI1_HSYNC ), - mask &EFIKAMX_LED_RED ); - }else { -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_EIM_CS0 ), - mask &EFIKAMX_LED_BLUE ); -gpio_set_value (IOMUX_TO_GPIO (MX51_PIN_GPIO1_3 ), - !(mask &EFIKAMX_LED_GREEN )); - } -} +#define EFIKASB_CAPSLOCK_LED GPIO_NUMBER(2, 25) +#define EFIKASB_MESSAGE_LED GPIO_NUMBER(1, 3)/* Note: active low */ /* * Board initialization */ int board_early_init_f (void ) { -setup_iomux_uart (); -setup_iomux_spi (); -setup_iomux_led (); +if (machine_is_efikasb ()) { +imx_iomux_v3_setup_multiple_pads (efikasb_led_pads,ARRAY_SIZE (efikasb_led_pads)); +gpio_direction_output (EFIKASB_CAPSLOCK_LED ,0 ); +gpio_direction_output (EFIKASB_MESSAGE_LED ,1 ); + }else if (machine_is_efikamx ()) { +/* +* Set up GPIO directions for LEDs. +* IOMUX has been done in the DCD already. +* Turn the red LED on for pre-relocation code. +*/ +gpio_direction_output (EFIKAMX_LED_BLUE ,0 ); +gpio_direction_output (EFIKAMX_LED_GREEN ,0 ); +gpio_direction_output (EFIKAMX_LED_RED ,1 ); + } + +/* +* Both these pad configurations for UART and SPI are kind of redundant +* since they are the Power-On Defaults for the i.MX51. But, it seems we +* should make absolutely sure that they are set up correctly. +*/ +imx_iomux_v3_setup_multiple_pads (efikamx_uart_pads,ARRAY_SIZE (efikamx_uart_pads)); +imx_iomux_v3_setup_multiple_pads (efikamx_spi_pads,ARRAY_SIZE (efikamx_spi_pads)); + +/* not technically required for U-Boot operation but set it up anyway. */ +gpio_direction_input (EFIKAMX_PMIC_IRQ ); +/* Deselect both CS for now.. any other way and NOR doesn't probe properly. */ +gpio_direction_output (EFIKAMX_SPI_SS0 ,0 ); +gpio_direction_output (EFIKAMX_SPI_SS1 ,1 );return 0 ; }@@ -609,49 +465,42 @@ int board_early_init_f(void)int board_init (void ) { gd->bd->bi_boot_params =PHYS_SDRAM_1 +0x100 ; - +return 0 ; }int board_late_init (void ) { -setup_iomux_spi (); - +if (machine_is_efikamx ()) { +/* +* Set up Blue LED for "In U-Boot" status. +* We're all relocated and ready to U-Boot! +*/ +gpio_set_value (EFIKAMX_LED_RED ,0 ); +gpio_set_value (EFIKAMX_LED_GREEN ,0 ); +gpio_set_value (EFIKAMX_LED_BLUE ,1 ); + } +power_init (); -setup_iomux_led (); -setup_iomux_ata (); +imx_iomux_v3_setup_multiple_pads (efikamx_pata_pads,ARRAY_SIZE (efikamx_pata_pads));setup_iomux_usb ();if (machine_is_efikasb ())setenv ("preboot" ,"usb reset ; setenv stdin usbkbd\0" ); -setup_iomux_led (); - -efikamx_toggle_led (EFIKAMX_LED_BLUE ); -return 0 ; }int checkboard (void ) { -u32 rev =get_efika_rev (); +u32 rev =get_efikamx_rev (); +printf ("Board: Genesi Efika MX " );if (machine_is_efikamx ()) { -printf ("Board: Efika MX, rev1.%i\n" , rev &0xf ); -return 0 ; - }else { -switch (rev) { -case EFIKASB_BOARD_REV_13 : -printf ("Board: Efika SB rev1.3\n" ); -break ; -case EFIKASB_BOARD_REV_20 : -printf ("Board: Efika SB rev2.0\n" ); -break ;
board/genesi/mx51_efikamx/efikamx.c int board_early_init_f(void) · line 506
Quoted 10 lines
board/genesi/mx51_efikamx/efikamx.c +3
-4-default : -printf ("Board: Efika SB, rev Unknown\n" ); -break ; - } +printf ("Smarttop (1.%i)\n" , rev &0xf ); + }else if (machine_is_efikasb ()) { +printf ("Smartbook\n" ); }return 0 ;
In principle I am fine with this patch - ok, I read also the other comments and I can tell you my opinion.
Generally, we have patches for each issues. But everything here concerns only the efika boards and only a single file was changed, and changes are described in the commit message. We have also other examples doing the same, if we check in the git history. And as single patch, we konw that it is surely bisectable.
Regarding if it is better to set a single pad array or use an array for each single peripheral, well, this is a question of taste. When one choose one of them, the choice should be consistent, but both choices are praticable and have advantages and disadvantages.
Anyway, who will maintain the efikas in future ? Marek, do you hold it, or Matt will take this job ? In last case I would like to see a patch for the MAINTAINER file.
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Quoted 4 lines · Stefano Babic
On 17/08/2012 20:19, Matt Sealey wrote:
Anyway, who will maintain the efikas in future ? Marek, do you hold it, or Matt will take this job ?
I'll do it but I doubt I'm going to be around as much as Marek. What I'm a little fearful of is having patches try and hit the Efika stuff and me not having much time that day to review, they either stagnate or get accepted anyway breaking something. I can't test every patch everyone sends, we just want to be sure it's hit a certain level of quality and solve some of the issues we hacked around at the Freescale BSP level are in mainline as we simply can't use the BSP version anymore (doesn't support bootz or device trees...)
Quoted 1 line
In last case I would like to see a patch for the MAINTAINER file.
I'll submit it when I feel like we're actually being "forced" to maintain it. I am of two minds; I will be the responsible party if needs be, but that means Efika MX stuff is going to be commercially driven by our needs (i.e. runs our boot scripts, supports the board the way we dictate (no video, no usb keyboards..), no changes to support "developers" if they are simply being too needy), and if it doesn't suit us in terms of breaking something or changing behaviour wildly, we'll NACK the crap out of it. If that's acceptable, sure... Marek says U-Boot doesn't follow this development model, but that would put Denx out of business.
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Dear Matt Sealey,
Quoted 10 lines · Stefano Babic
Quoted 4 lines · Matt Sealey
Anyway, who will maintain the efikas in future ? Marek, do you hold it, or Matt will take this job ?
I'll do it but I doubt I'm going to be around as much as Marek. What I'm a little fearful of is having patches try and hit the Efika stuff and me not having much time that day to review, they either stagnate or get accepted anyway breaking something.
So your commercial QA has to arrive at the RC stage and fix it if needed ... every around 3-4 months.
Quoted 8 lines
I can't test every patch
everyone sends, we just want to be sure it's hit a certain level of quality and solve some of the issues we hacked around at the Freescale BSP level are in mainline as we simply can't use the BSP version anymore (doesn't support bootz or device trees...)Quoted 1 line
In last case I would like to see a patch for the MAINTAINER file.
Quoted 8 lines
I'll submit it when I feel like we're actually being "forced" to maintain it. I am of two minds; I will be the responsible party if needs be, but that means Efika MX stuff is going to be commercially driven by our needs (i.e. runs our boot scripts, supports the board the way we dictate (no video, no usb keyboards..), no changes to support "developers" if they are simply being too needy), and if it doesn't suit us in terms of breaking something or changing behaviour wildly, we'll NACK the crap out of it.
I think you need to understand that FOSS is a cooperative effort. It is not any commercial crap which you roll out and throw away when it made enough money. We will not stop hacking on mx51 only because it might break your platform, that's not how it works.
To put it into more "commercial" terms, we are not paid to support your platform, on the other hand, we already gave you the source code. So to restore the balance, you help us keeping it working well by investing in QA. Everyone's happy.
Besides, if you want to deploy less potent version, you can always configure your u-boot in such way and deploy it to customer, noone can prevent you from that. But since there is support for certain additional hardware in upstream already, I'd object to remove it.
Quoted 3 lines
If that's acceptable, sure...
Marek says U-Boot doesn't follow this development model, but that would put Denx out of business.
Please stop putting words in my mouth, it is fairy insulting.
See how the mx28 stuff is being developed to see what I mean. Me, Fabio, Otavio and many others are adjusting each others boards and it works very well.
Best regards,
Marek Vasut
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Quoted 8 lines · Marek Vasut
Dear Matt Sealey,
Quoted 6 lines · Stefano Babic
Quoted 4 lines · Matt Sealey
Anyway, who will maintain the efikas in future ? Marek, do you hold it, or Matt will take this job ?
Quoted 7 lines
Quoted 4 lines
I'll do it but I doubt I'm going to be around as much as Marek. What I'm a little fearful of is having patches try and hit the Efika stuff and me not having much time that day to review, they either stagnate or get accepted anyway breaking something.
So your commercial QA has to arrive at the RC stage and fix it if needed ... every around 3-4 months.
That is in fact the plan.
If we can get TO2 support back in at that time, we will do it, but for now it cannot just go in broken. We cannot test the mux code on these boards if they don't boot...
Quoted 4 lines
I think you need to understand that FOSS is a cooperative effort. It is not any commercial crap which you roll out and throw away when it made enough money. We will not stop hacking on mx51 only because it might break your platform, that's not how it works.
The problem here is that we don't make any money from MX51 anymore; there are no Efika MX systems to sell, stock is basically depleted. So this work is an offshoot of some other code. If, on the other hand, you want to cooperate and test it on TO2 and report your results and tell us what is broken, that would be fine, but we can't expend time and effort fixing something which represents barely a percentage point of customers; if you don't have a TO2, then you can't help, and you can't complain if you can't run it let alone test it.
Quoted 9 lines
To put it into more "commercial" terms, we are not paid to support your platform, on the other hand, we already gave you the source code. So to restore the balance, you help us keeping it working well by investing in QA. Everyone's happy.
Besides, if you want to deploy less potent version, you can always configure your u-boot in such way and deploy it to customer, noone can prevent you from that. But since there is support for certain additional hardware in upstream already, I'd object to remove it.
That is the way we're doing it, but we can't in good conscience deploy a non-neutered version with such heavy cleanups that we cannot guarantee booted in the first place let alone with our changes. Modifying the IOMUX setup method did not fix booting, but we cannot tell if it worked properly in the first place. Number of users of TO2 Efika MX boards r1.1 and r1.2 is so low, it's hard to imagine these people giving a rat's ass about whether mainline works on it or not (especially since there's no mainline Linux support for these boards as it stands - even with the old U-Boot we shipped on the boards that works, the kernel is less than reliable for various reasons).
Quoted 2 lines
See how the mx28 stuff is being developed to see what I mean. Me, Fabio, Otavio and many others are adjusting each others boards and it works very well.
I would like to see you justify again updating code that supports a board that hasn't actually booted mainline U-Boot in several months, if not years, with a code change that cannot be tested.
Once it's gone through testing and we work out for sure why U-Boot simply does not run on a cpu-revision 51025 i.MX processor on the r1.1 and r1.2 boards in any version, before my changes or after, we will patch back in confirmed and working support, but we shouldn't be told we have to maintain broken code just so it sticks around. You have git, you can see the changes made to remove the code (it's literally all of 3 lines extra to add it back in, it is mainly the second SD card slot definition and CD/WP pins). It is not like the information is lost in time.
I just don't see the point in making sure we update every line of code that exists, if that code simply never gets run, or never has the opportunity to run due to other problems.
This is a dead product, we simply want to make sure that SOME mainline support is both reliable and usable. The work directly influences the design of new products and existing products which are not in mainline; to get MX53 stuff in there or MX6 design stuff in there, common IOMUX setup, common GPIO, other common things which are otherwise awful to define and add to designs. If we evaluate the software development will take too much time and money it may be cut from the design. If the feature makes the board less user-friendly as a result, it will definitely never make it into a prototype.
Right now, we're trying to lay a good foundation for MX53 and MX6 designs we currently sell. Supporting the MX51 models is purely laying that good foundation to make sure that the effort we expend later on actual shipping products can be tested across the entire line where common code and configuration can and should exist. Unfortunately i.MX51 TO2 designs exist in the world in some number, but fortunately the number of people running them who require U-Boot to build and run on their boards is a big fat zero. If there are no users, the code can go.. if there is a user for it later, it can be re-evaluated by someone out there.
Would it make a difference if I was the maintainer? Yes, because you would be automatically overridden in asking to keep TO2 code in there because as maintainer I would not be willing to maintain such code. It doesn't matter in that position if YOU think it MIGHT be useful for someone else, as the a) designers b) vendors c) support network for this hardware, we have decided flat out, Efika MX r1.1 and r1.2 boards are not worth supporting in this patch and should definitely not leave code around which could be mistakenly run, or possibly just exist to confuse the configuration of the board.
Crashing before even reaching the relocation code is not user-friendly. As it stands, removing the TO2 support to reduce the amount of testing we have to do (in the sense that it cannot be tested while the bug exists) and then adding it back in once that testing is actually completed, while providing the vast majority of users working code in the meantime, is more important right now, making that common code work.
Signature · 2 lines
Matt Sealey <[email protected]> Product Development Analyst, Genesi USA, Inc.
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
Dear Matt Sealey,
Quoted 111 lines · Marek Vasut
Quoted 8 lines
Dear Matt Sealey,
Quoted 6 lines · Stefano Babic
Quoted 4 lines · Matt Sealey
Anyway, who will maintain the efikas in future ? Marek, do you hold it, or Matt will take this job ?
Quoted 7 lines
Quoted 4 lines
I'll do it but I doubt I'm going to be around as much as Marek. What I'm a little fearful of is having patches try and hit the Efika stuff and me not having much time that day to review, they either stagnate or get accepted anyway breaking something.
So your commercial QA has to arrive at the RC stage and fix it if needed ... every around 3-4 months.
That is in fact the plan.
If we can get TO2 support back in at that time, we will do it, but for now it cannot just go in broken. We cannot test the mux code on these boards if they don't boot...
Quoted 4 lines
I think you need to understand that FOSS is a cooperative effort. It is not any commercial crap which you roll out and throw away when it made enough money. We will not stop hacking on mx51 only because it might break your platform, that's not how it works.
The problem here is that we don't make any money from MX51 anymore; there are no Efika MX systems to sell, stock is basically depleted. So this work is an offshoot of some other code. If, on the other hand, you want to cooperate and test it on TO2 and report your results and tell us what is broken, that would be fine, but we can't expend time and effort fixing something which represents barely a percentage point of customers; if you don't have a TO2, then you can't help, and you can't complain if you can't run it let alone test it.
Quoted 9 lines
To put it into more "commercial" terms, we are not paid to support your platform, on the other hand, we already gave you the source code. So to restore the balance, you help us keeping it working well by investing in QA. Everyone's happy.
Besides, if you want to deploy less potent version, you can always configure your u-boot in such way and deploy it to customer, noone can prevent you from that. But since there is support for certain additional hardware in upstream already, I'd object to remove it.
That is the way we're doing it, but we can't in good conscience deploy a non-neutered version with such heavy cleanups that we cannot guarantee booted in the first place let alone with our changes. Modifying the IOMUX setup method did not fix booting, but we cannot tell if it worked properly in the first place. Number of users of TO2 Efika MX boards r1.1 and r1.2 is so low, it's hard to imagine these people giving a rat's ass about whether mainline works on it or not (especially since there's no mainline Linux support for these boards as it stands - even with the old U-Boot we shipped on the boards that works, the kernel is less than reliable for various reasons).
Quoted 3 lines
See how the mx28 stuff is being developed to see what I mean. Me, Fabio, Otavio and many others are adjusting each others boards and it works very well.
I would like to see you justify again updating code that supports a board that hasn't actually booted mainline U-Boot in several months, if not years, with a code change that cannot be tested.
Once it's gone through testing and we work out for sure why U-Boot simply does not run on a cpu-revision 51025 i.MX processor on the r1.1 and r1.2 boards in any version, before my changes or after, we will patch back in confirmed and working support, but we shouldn't be told we have to maintain broken code just so it sticks around. You have git, you can see the changes made to remove the code (it's literally all of 3 lines extra to add it back in, it is mainly the second SD card slot definition and CD/WP pins). It is not like the information is lost in time.
I just don't see the point in making sure we update every line of code that exists, if that code simply never gets run, or never has the opportunity to run due to other problems.
This is a dead product, we simply want to make sure that SOME mainline support is both reliable and usable. The work directly influences the design of new products and existing products which are not in mainline; to get MX53 stuff in there or MX6 design stuff in there, common IOMUX setup, common GPIO, other common things which are otherwise awful to define and add to designs. If we evaluate the software development will take too much time and money it may be cut from the design. If the feature makes the board less user-friendly as a result, it will definitely never make it into a prototype.
Right now, we're trying to lay a good foundation for MX53 and MX6 designs we currently sell. Supporting the MX51 models is purely laying that good foundation to make sure that the effort we expend later on actual shipping products can be tested across the entire line where common code and configuration can and should exist. Unfortunately i.MX51 TO2 designs exist in the world in some number, but fortunately the number of people running them who require U-Boot to build and run on their boards is a big fat zero. If there are no users, the code can go.. if there is a user for it later, it can be re-evaluated by someone out there.
Would it make a difference if I was the maintainer? Yes, because you would be automatically overridden in asking to keep TO2 code in there because as maintainer I would not be willing to maintain such code. It doesn't matter in that position if YOU think it MIGHT be useful for someone else, as the a) designers b) vendors c) support network for this hardware, we have decided flat out, Efika MX r1.1 and r1.2 boards are not worth supporting in this patch and should definitely not leave code around which could be mistakenly run, or possibly just exist to confuse the configuration of the board.
Quoted 7 lines
Crashing before even reaching the relocation code is not user-friendly. As it stands, removing the TO2 support to reduce the amount of testing we have to do (in the sense that it cannot be tested while the bug exists) and then adding it back in once that testing is actually completed, while providing the vast majority of users working code in the meantime, is more important right now, making that common code work.
Can you concentrate the information that completely sunk in the text above? What's your point? In a _few_ sentences please. Mailing list is not highschool, you don't get graded for writing an essay. Besides, you waste both yours and mine time.
Best regards,
Marek Vasut
PATCH 3/4 efikamx: update to Efika MX Smarttop and Smartbook boards
In reply to Matt SealeyAm 18/08/2012 23:02, schrieb Matt Sealey:
Quoted 12 lines · Stefano Babic
Quoted 4 lines · Matt Sealey
Anyway, who will maintain the efikas in future ? Marek, do you hold it, or Matt will take this job ?
I can't test every patch
everyone sends, we just want to be sure it's hit a certain level of quality and solve some of the issues we hacked around at the Freescale BSP level are in mainline as we simply can't use the BSP version anymore (doesn't support bootz or device trees...)
Quoted 4 lines
Quoted 1 line
In last case I would like to see a patch for the MAINTAINER file.
I'll submit it when I feel like we're actually being "forced" to maintain it.
You are absolutely not forced - my was a simple question.
Quoted 5 lines
I am of two minds; I will be the responsible party if needs be, but that means Efika MX stuff is going to be commercially driven by our needs (i.e. runs our boot scripts, supports the board the way we dictate (no video, no usb keyboards..), no changes to support "developers" if they are simply being too needy),
You are confusing commercial goals with an open source project, as u-boot is.
Quoted 3 lines
and if it
doesn't suit us in terms of breaking something or changing behaviour wildly, we'll NACK the crap out of it. If that's acceptable, sure...
You can propose your boot scripts to the ML, and they can be accepted or not, depending if they are helpful for the project.
Quoted 2 lines
Marek says U-Boot doesn't follow this development model, but that would put Denx out of business.
Not really - again, you are confusing the way you want to put your products on the market with an open source project. You can sell of course your product with the software you decide and you think it is better - this is your commercial decision. An open source project is developped with different goals, that are not strictly bound to a single commercial product.
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================
PATCH 4/4 efikamx: port USB setup to new iomux model
In reply to Matt Sealey* Add required pin data to iomux-mx51.h
* Port old iomux model to new iomux-v3 model
* Remove some needless code
* Function renames for readability
--- arch/arm/include/asm/arch-mx5/iomux-mx51.h | 28 +++++ board/genesi/mx51_efikamx/efikamx-usb.c | 159 +++++++++++++--------------- board/genesi/mx51_efikamx/efikamx.c | 6 +- 3 files changed, 104 insertions(+), 89 deletions(-)
arch/arm/include/asm/arch-mx5/iomux-mx51.h +28 -0
@@ -79,6 +79,20 @@/* PAD MUX ALT INPSE PATH PADCTRL */ enum { +MX51_PAD_EIM_D16__USBH2_DATA0 =IOMUX_PAD (0x3f0 ,0x05c ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D17__USBH2_DATA1 =IOMUX_PAD (0x3f4 ,0x060 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D18__USBH2_DATA2 =IOMUX_PAD (0x3f8 ,0x064 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D19__USBH2_DATA3 =IOMUX_PAD (0x3fc ,0x068 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D20__USBH2_DATA4 =IOMUX_PAD (0x400 ,0x06c ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D21__USBH2_DATA5 =IOMUX_PAD (0x404 ,0x070 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D22__USBH2_DATA6 =IOMUX_PAD (0x408 ,0x074 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D23__USBH2_DATA7 =IOMUX_PAD (0x40c ,0x078 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_D27__GPIO2_9 =IOMUX_PAD (0x41c ,0x088 ,1 , __NA_,0 ,MX51_GPIO_PAD_CTRL ), +MX51_PAD_EIM_A24__USBH2_CLK =IOMUX_PAD (0x450 ,0x0bc ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_A25__USBH2_DIR =IOMUX_PAD (0x454 ,0x0c0 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_A26__GPIO2_20 =IOMUX_PAD (0x458 ,0x0c4 ,1 , __NA_,0 ,MX51_GPIO_PAD_CTRL ), +MX51_PAD_EIM_A26__USBH2_STP =IOMUX_PAD (0x458 ,0x0c4 ,2 , __NA_,0 ,NO_PAD_CTRL ), +MX51_PAD_EIM_A27__USBH2_NXT =IOMUX_PAD (0x45c ,0x0c8 ,2 , __NA_,0 ,NO_PAD_CTRL ),MX51_PAD_EIM_CS0__GPIO2_25 =IOMUX_PAD (0x474 ,0x0e0 ,1 , __NA_,0 ,MX51_GPIO_PAD_CTRL ),MX51_PAD_EIM_CS2__SD1_CD =IOMUX_PAD (0x47c ,0x0e8 ,1 , __NA_,0 ,MX51_ESDHC_PAD_CTRL ),MX51_PAD_EIM_CS3__GPIO2_28 =IOMUX_PAD (0x480 ,0x0ec ,1 , __NA_,0 ,MX51_GPIO_PAD_CTRL ),
@@ -121,6 +135,19 @@ enum {MX51_PAD_UART1_TXD__UART1_TXD =IOMUX_PAD (0x61c ,0x22c ,0 , __NA_,0 ,MX51_UART_PAD_CTRL ),MX51_PAD_UART1_RTS__UART1_RTS =IOMUX_PAD (0x620 ,0x230 ,0 ,0x9e0 ,0 ,MX51_UART_PAD_CTRL ),MX51_PAD_UART1_CTS__UART1_CTS =IOMUX_PAD (0x624 ,0x234 ,0 , __NA_,0 ,MX51_UART_PAD_CTRL ), +MX51_PAD_USBH1_CLK__USBH1_CLK =IOMUX_PAD (0x678 ,0x278 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DIR__USBH1_DIR =IOMUX_PAD (0x67c ,0x27c ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_STP__USBH1_STP =IOMUX_PAD (0x680 ,0x280 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_STP__GPIO1_27 =IOMUX_PAD (0x680 ,0x280 ,2 , __NA_,0 ,MX51_GPIO_PAD_CTRL ), +MX51_PAD_USBH1_NXT__USBH1_NXT =IOMUX_PAD (0x684 ,0x284 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA0__USBH1_DATA0 =IOMUX_PAD (0x688 ,0x288 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA1__USBH1_DATA1 =IOMUX_PAD (0x68c ,0x28c ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA2__USBH1_DATA2 =IOMUX_PAD (0x690 ,0x290 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA3__USBH1_DATA3 =IOMUX_PAD (0x694 ,0x294 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA4__USBH1_DATA4 =IOMUX_PAD (0x698 ,0x298 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA5__USBH1_DATA5 =IOMUX_PAD (0x69c ,0x29c ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA6__USBH1_DATA6 =IOMUX_PAD (0x6a0 ,0x2a0 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ), +MX51_PAD_USBH1_DATA7__USBH1_DATA7 =IOMUX_PAD (0x6a4 ,0x2a4 ,0 , __NA_,0 ,MX51_USBH1_PAD_CTRL ),MX51_PAD_SD1_CMD__SD1_CMD =IOMUX_PAD (0x79c ,0x394 ,0x10 , __NA_,0 ,MX51_SDHCI_PAD_CTRL ),MX51_PAD_SD1_CLK__SD1_CLK =IOMUX_PAD (0x7a0 ,0x398 ,0x10 , __NA_,0 ,MX51_SDHCI_PAD_CTRL |PAD_CTL_HYS ), MX51_PAD_SD1_DATA0__SD1_DATA0 = IOMUX_PAD(0x7a4, 0x39c, 0x10, __NA_, 0, MX51_SDHCI_PAD_CTRL),
@@ -136,6 +163,7 @@ enum {MX51_PAD_SD2_DATA2__SD2_DATA2 =IOMUX_PAD (0x7cc ,0x3c4 ,0x10 , __NA_,0 ,MX51_SDHCI_PAD_CTRL ),MX51_PAD_SD2_DATA3__SD2_DATA3 =IOMUX_PAD (0x7d0 ,0x3c8 ,0x10 , __NA_,0 ,MX51_SDHCI_PAD_CTRL ),MX51_PAD_GPIO1_3__GPIO1_3 =IOMUX_PAD (0x7d8 ,0x3d0 ,0 , __NA_,0 ,MX51_GPIO_PAD_CTRL ), +MX51_PAD_GPIO1_5__GPIO1_5 =IOMUX_PAD (0x808 ,0x3dc ,0 , __NA_,0 ,MX51_GPIO_PAD_CTRL ),MX51_PAD_GPIO1_6__GPIO1_6 =IOMUX_PAD (0x80c ,0x3e0 ,0 , __NA_,0 ,MX51_GPIO_PAD_CTRL ),MX51_PAD_GPIO1_7__SD2_WP =IOMUX_PAD (0x810 ,0x3e4 ,6 , __NA_,0 ,MX51_ESDHC_PAD_CTRL ), MX51_PAD_GPIO1_8__SD2_CD = IOMUX_PAD(0x814, 0x3e8, 6, __NA_, 0, MX51_ESDHC_PAD_CTRL),
board/genesi/mx51_efikamx/efikamx-usb.c +73 -86
223 lines not on this page · raw message
board/genesi/mx51_efikamx/efikamx.c +3 -3
@@ -402,9 +402,9 @@ static iomux_v3_cfg_t efikamx_pata_pads[] = {* EHCI USB */ #ifdef CONFIG_CMD_USB -extern void setup_iomux_usb (void ); +extern void efikamx_usb_setup_pads (void );#else -static inline void setup_iomux_usb (void ) { } +static inline void efikamx_usb_setup_pads (void ) { }#endif /*
@@ -484,7 +484,7 @@ int board_late_init(void)power_init ();imx_iomux_v3_setup_multiple_pads (efikamx_pata_pads,ARRAY_SIZE (efikamx_pata_pads)); -setup_iomux_usb (); +efikamx_usb_setup_pads ();if (machine_is_efikasb ())setenv ("preboot" ,"usb reset ; setenv stdin usbkbd\0" );
Signature · 1 line
1.7.9.5
cover efikamx: update Efika MX support
In reply to Matt SealeyDear Matt Sealey,
Quoted 6 lines
This patchset relies on the previously submitted patch "mx5: add
iomux-mx51.hinclude"It may not boot reliably, completely at random, on Efika MX boards, without the previously submitted (series) "spi: fix
mxc_spi_slavestructure allocation to clear memory"
Please _ALWAYS_ CC the custodian. Read here before submitting:
http://www.denx.de/wiki/U-Boot/Patches
Quoted 28 lines
Matt Sealey (4):
efikamx: move efikamx into a new directory in preparation for new
boards
efikamx: remove drive strength hack fromearly_init_fand move it to
the DCD
efikamx: update to Efika MX Smarttop and Smartbook boards
efikamx: port USB setup to new iomux modelarch/arm/include/asm/arch-mx5/iomux-mx51.h | 28 ++ board/efikamx/Makefile | 49 -- board/efikamx/efikamx-usb.c | 216 -------- board/efikamx/efikamx.c | 735 ---------------------------- board/efikamx/imximage_mx.cfg | 122 ----- board/efikamx/imximage_sb.cfg | 122 ----- board/genesi/mx51_efikamx/Makefile | 49 ++ board/genesi/mx51_efikamx/efikamx-usb.c | 203 ++++++++ board/genesi/mx51_efikamx/efikamx.c | 507 +++++++++++++++++++ board/genesi/mx51_efikamx/imximage_mx.cfg | 113 +++++ board/genesi/mx51_efikamx/imximage_sb.cfg | 122 +++++ boards.cfg | 4 +- include/configs/efikamx.h | 274 ----------- include/configs/mx51_efikamx.h | 274 +++++++++++ 14 files changed, 1298 insertions(+), 1520 deletions(-) delete mode 100644 board/efikamx/Makefile delete mode 100644 board/efikamx/efikamx-usb.c delete mode 100644 board/efikamx/efikamx.c delete mode 100644 board/efikamx/imximage_mx.cfg
Quoted 8 lines
delete mode 100644 board/efikamx/imximage_sb.cfg create mode 100644 board/genesi/mx51_efikamx/Makefile create mode 100644 board/genesi/mx51_efikamx/efikamx-usb.c create mode 100644 board/genesi/mx51_efikamx/efikamx.c create mode 100644 board/genesi/mx51_efikamx/imximage_mx.cfg create mode 100644 board/genesi/mx51_efikamx/imximage_sb.cfg delete mode 100644 include/configs/efikamx.h create mode 100644 include/configs/mx51_efikamx.h
Best regards,
Marek Vasut