Hi Tom, On Wed, Sep 12, 2012 at 3:10 PM, Tom Warren <twarren.nvi...@gmail.com> wrote: > Signed-off-by: Tom Warren <twar...@nvidia.com> > --- > board/nvidia/cardhu/Makefile | 48 ++++ > board/nvidia/cardhu/cardhu.c | 87 +++++++ > board/nvidia/cardhu/pinmux-config-common.h | 346 > ++++++++++++++++++++++++++++ > 3 files changed, 481 insertions(+), 0 deletions(-) > create mode 100644 board/nvidia/cardhu/Makefile > create mode 100644 board/nvidia/cardhu/cardhu.c > create mode 100644 board/nvidia/cardhu/pinmux-config-common.h > > diff --git a/board/nvidia/cardhu/Makefile b/board/nvidia/cardhu/Makefile > new file mode 100644 > index 0000000..a910577 > --- /dev/null > +++ b/board/nvidia/cardhu/Makefile > @@ -0,0 +1,48 @@ > +# > +# (C) Copyright 2010-2012 > +# NVIDIA Corporation <www.nvidia.com> > +# > +# > +# See file CREDITS for list of people who contributed to this > +# project. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation; either version 2 of > +# the License, or (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, > +# MA 02111-1307 USA > +# > + > +include $(TOPDIR)/config.mk > + > +ifneq ($(OBJTREE),$(SRCTREE)) > +$(shell mkdir -p $(obj)../common) > +endif > + > +LIB = $(obj)lib$(BOARD).o > + > +COBJS := $(BOARD).o > + > +SRCS := $(COBJS:.o=.c) > +OBJS := $(addprefix $(obj),$(COBJS)) > + > +$(LIB): $(obj).depend $(OBJS) > + $(call cmd_link_o_target, $(OBJS)) > + > +######################################################################### > + > +# defines $(obj).depend target > +include $(SRCTREE)/rules.mk > + > +sinclude $(obj).depend > + > +######################################################################### > diff --git a/board/nvidia/cardhu/cardhu.c b/board/nvidia/cardhu/cardhu.c > new file mode 100644 > index 0000000..f907906 > --- /dev/null > +++ b/board/nvidia/cardhu/cardhu.c > @@ -0,0 +1,87 @@ > +/* > + * (C) Copyright 2010-2012 > + * NVIDIA Corporation <www.nvidia.com> > + * > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <common.h> > +#include <asm/io.h> > +#include <asm/arch/tegra30.h> > +#include <asm/arch/clock.h> > +#include <asm/arch/funcmux.h> > +#include <asm/arch/pinmux.h> > +#include <asm/arch/mmc.h> > +#include <asm/gpio.h> > +#ifdef CONFIG_TEGRA_MMC > +#include <mmc.h> > +#endif > + > +/* > + * Routine: gpio_config_uart > + * Description: Does nothing on Cardhu - no conflict w/SPI. > + */ > +void gpio_config_uart(void) > +{ > +} > + > +#ifdef CONFIG_TEGRA_MMC > +/* > + * Routine: pin_mux_mmc > + * Description: setup the pin muxes/tristate values for the SDMMC(s) > + */ > +static void pin_mux_mmc(void) > +{ > + funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT); > + funcmux_select(PERIPH_ID_SDMMC3, FUNCMUX_SDMMC3_SDB_4BIT); > + > + /* For power GPIO PI6 */ > + pinmux_tristate_disable(PINGRP_ATA); > + /* For CD GPIO PI5 */ > + pinmux_tristate_disable(PINGRP_ATC); > +} > + > +/* this is a weak define that we are overriding */ > +int board_mmc_init(bd_t *bd) > +{ > + debug("board_mmc_init called\n"); > + > + /* Enable muxes, etc. for SDMMC controllers */ > + pin_mux_mmc(); > + > + debug("board_mmc_init: init eMMC\n"); > + /* init dev 0, eMMC chip, with 4-bit bus */ > + /* The board has an 8-bit bus, but 8-bit doesn't work yet */ > + tegra_mmc_init(0, 4, -1, -1); > + > + debug("board_mmc_init: init SD slot\n"); > + /* init dev 1, SD slot, with 4-bit bus */ > + tegra_mmc_init(1, 4, GPIO_PI6, GPIO_PI5); > + > + return 0; > +} > +#endif > + > +#ifdef CONFIG_USB_EHCI_TEGRA > +void pin_mux_usb(void) > +{ > + /* For USB's GPIO PD0. For now, since we have no pinmux in fdt */ > + pinmux_tristate_disable(PINGRP_SLXK); > +} > +#endif > diff --git a/board/nvidia/cardhu/pinmux-config-common.h > b/board/nvidia/cardhu/pinmux-config-common.h > new file mode 100644 > index 0000000..20583c9 > --- /dev/null > +++ b/board/nvidia/cardhu/pinmux-config-common.h > @@ -0,0 +1,346 @@ > +/* > + * (C) Copyright 2010-2012 > + * NVIDIA Corporation <www.nvidia.com> > + * > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#ifndef PINMUX_CONFIG_COMMON_H > +#define PINMUX_CONFIG_COMMON_H > + > +#define DEFAULT_PINMUX(_pingroup, _mux, _pull, _tri, _io) \ > + { \ > + .pingroup = PINGRP_##_pingroup, \ > + .func = PMUX_FUNC_##_mux, \ > + .pull = PMUX_PULL_##_pull, \ > + .tristate = PMUX_TRI_##_tri, \ > + .io = PMUX_PIN_##_io, \ > + .lock = PMUX_PIN_LOCK_DEFAULT, \ > + .od = PMUX_PIN_OD_DEFAULT, \ > + .ioreset = PMUX_PIN_IO_RESET_DEFAULT, \ > + } > + > +#define I2C_PINMUX(_pingroup, _mux, _pull, _tri, _io, _lock, _od) \ > + { \ > + .pingroup = PINGRP_##_pingroup, \ > + .func = PMUX_FUNC_##_mux, \ > + .pull = PMUX_PULL_##_pull, \ > + .tristate = PMUX_TRI_##_tri, \ > + .io = PMUX_PIN_##_io, \ > + .lock = PMUX_PIN_LOCK_##_lock, \ > + .od = PMUX_PIN_OD_##_od, \ > + .ioreset = PMUX_PIN_IO_RESET_DEFAULT, \ > + } > + > +#define LV_PINMUX(_pingroup, _mux, _pull, _tri, _io, _lock, _ioreset) \ > + { \ > + .pingroup = PINGRP_##_pingroup, \ > + .func = PMUX_FUNC_##_mux, \ > + .pull = PMUX_PULL_##_pull, \ > + .tristate = PMUX_TRI_##_tri, \ > + .io = PMUX_PIN_##_io, \ > + .lock = PMUX_PIN_LOCK_##_lock, \ > + .od = PMUX_PIN_OD_DEFAULT, \ > + .ioreset = PMUX_PIN_IO_RESET_##_ioreset \ > + } > + > +static struct pingroup_config tegra3_pinmux_common[] = { > + /* SDMMC1 pinmux */ > + DEFAULT_PINMUX(SDMMC1_CLK, SDMMC1, NORMAL, NORMAL, INPUT),
This is using a fixed table instead of selecting based on individual settings or the fdt, and presumably each board will need its own table. The funcmux approach is a half-way house towards the fdt. The intent with that was to define particular configurations for each peripheral, that board vendors can select from. Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot