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

Simon Glass
2012-09-18T19:44:18Z

Hi Tom,

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