[U-Boot] [PATCH 6/9] Tegra30: Add Cardhu board files

Simon Glass sjg at chromium.org
Tue Sep 18 21:44:18 CEST 2012


Hi Tom,

On Wed, Sep 12, 2012 at 3:10 PM, Tom Warren <twarren.nvidia at gmail.com> wrote:
> Signed-off-by: Tom Warren <twarren at 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


More information about the U-Boot mailing list