From ef88e60902e31a23d963f52d3535ee8b2eb15642 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Thu, 28 Jun 2012 05:38:35 +0000 Subject: beagle: add eeprom expansion board info for bct brettl4 this is for a prototyping board vendor/product ids have been added to http://elinux.org/BeagleBoardPinMux#List_of_Vendor_and_Device_IDs Signed-off-by: Peter Meerwald --- board/ti/beagle/beagle.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c index 9edd3c5c4f..2ef22900d7 100644 --- a/board/ti/beagle/beagle.c +++ b/board/ti/beagle/beagle.c @@ -68,6 +68,7 @@ #define BBTOYS_VGA 0x02000B00 #define BBTOYS_LCD 0x03000B00 #define BCT_BRETTL3 0x01000F00 +#define BCT_BRETTL4 0x02000F00 #define BEAGLE_NO_EEPROM 0xffffffff DECLARE_GLOBAL_DATA_PTR; @@ -417,8 +418,11 @@ int misc_init_r(void) printf("Recognized BeagleBoardToys LCD board\n"); break;; case BCT_BRETTL3: - printf("Recognized bct electronic GmbH brettl3 board\n"); - break; + printf("Recognized bct electronic GmbH brettl3 board\n"); + break; + case BCT_BRETTL4: + printf("Recognized bct electronic GmbH brettl4 board\n"); + break; case BEAGLE_NO_EEPROM: printf("No EEPROM on expansion board\n"); setenv("buddy", "none"); -- cgit v1.2.1 From ed900c55c35a653a0d2ce5489cdeea9a4dd18b5b Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:24 +0000 Subject: tegra: Rework Tamonten support This commit uses the common Tegra board implementation instead of duplicating a lot of the code. In addition, the Plutux and Medcom specific board files can be removed as the MMC/SD setup is common among all Tamonten-based boards. Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- board/avionic-design/common/tamonten.c | 49 +++++----------------------------- board/avionic-design/common/tamonten.h | 32 ---------------------- board/avionic-design/medcom/Makefile | 6 ++--- board/avionic-design/medcom/medcom.c | 45 ------------------------------- board/avionic-design/plutux/Makefile | 6 ++--- board/avionic-design/plutux/plutux.c | 45 ------------------------------- 6 files changed, 13 insertions(+), 170 deletions(-) delete mode 100644 board/avionic-design/common/tamonten.h delete mode 100644 board/avionic-design/medcom/medcom.c delete mode 100644 board/avionic-design/plutux/plutux.c diff --git a/board/avionic-design/common/tamonten.c b/board/avionic-design/common/tamonten.c index f23b657041..d9ecd238d5 100644 --- a/board/avionic-design/common/tamonten.c +++ b/board/avionic-design/common/tamonten.c @@ -1,7 +1,7 @@ /* * (C) Copyright 2010,2011 * NVIDIA Corporation - * (C) Copyright 2011 + * (C) Copyright 2011-2012 * Avionic Design GmbH * * See file CREDITS for list of people who contributed to this @@ -36,25 +36,17 @@ #include #include #include -#include "tamonten.h" #ifdef CONFIG_TEGRA2_MMC #include #endif -DECLARE_GLOBAL_DATA_PTR; - -const struct tegra2_sysinfo sysinfo = { - CONFIG_TEGRA2_BOARD_STRING -}; - /* - * Routine: timer_init - * Description: init the timestamp and lastinc value + * Routine: gpio_config_uart + * Description: Does nothing on Tamonten - no conflict w/SPI. */ -int timer_init(void) +void gpio_config_uart(void) { - return 0; } #ifdef CONFIG_TEGRA2_MMC @@ -65,46 +57,19 @@ int timer_init(void) static void pin_mux_mmc(void) { funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT); + /* for CD GPIO PH2 */ + pinmux_tristate_disable(PINGRP_ATD); } -#endif - -/* - * Routine: board_init - * Description: Early hardware init. - */ -int board_init(void) -{ - clock_init(); - clock_verify(); - - /* boot param addr */ - gd->bd->bi_boot_params = (NV_PA_SDRAM_BASE + 0x100); - return 0; -} - -#ifdef CONFIG_TEGRA2_MMC /* 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(); - gpio_config_mmc(); - debug("board_mmc_init: init eMMC\n"); - /* init dev 0, eMMC chip, with 4-bit bus */ + /* init dev 0, SD slot, with 4-bit bus */ tegra2_mmc_init(0, 4, -1, GPIO_PH2); return 0; } #endif - -#ifdef CONFIG_BOARD_EARLY_INIT_F -int board_early_init_f(void) -{ - /* Initialize selected UARTs */ - board_init_uart_f(); - return 0; -} -#endif /* EARLY_INIT */ diff --git a/board/avionic-design/common/tamonten.h b/board/avionic-design/common/tamonten.h deleted file mode 100644 index 0e60b0fadc..0000000000 --- a/board/avionic-design/common/tamonten.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * (C) Copyright 2010,2011 - * NVIDIA Corporation - * (C) Copyright 2011 - * Avionic Design GmbH - * - * 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 _TAMONTEN_H_ -#define _TAMONTEN_H_ - -void tegra2_start(void); -void gpio_config_mmc(void); - -#endif /* TAMONTEN_H */ diff --git a/board/avionic-design/medcom/Makefile b/board/avionic-design/medcom/Makefile index b0c318c439..d96d04306c 100644 --- a/board/avionic-design/medcom/Makefile +++ b/board/avionic-design/medcom/Makefile @@ -1,7 +1,7 @@ # # (C) Copyright 2010,2011 # NVIDIA Corporation -# (C) Copyright 2011 +# (C) Copyright 2011,2012 # Avionic Design GmbH # # See file CREDITS for list of people who contributed to this @@ -26,12 +26,12 @@ include $(TOPDIR)/config.mk ifneq ($(OBJTREE),$(SRCTREE)) -$(shell mkdir -p $(obj)../common) +$(shell mkdir -p $(obj)../common $(obj)../../nvidia/common) endif LIB = $(obj)lib$(BOARD).o -COBJS := $(BOARD).o +COBJS := ../../nvidia/common/board.o COBJS += ../common/tamonten.o SRCS := $(COBJS:.o=.c) diff --git a/board/avionic-design/medcom/medcom.c b/board/avionic-design/medcom/medcom.c deleted file mode 100644 index 42c80940c1..0000000000 --- a/board/avionic-design/medcom/medcom.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * (C) Copyright 2010,2011 - * NVIDIA Corporation - * (C) Copyright 2011 - * Avionic Design GmbH - * - * 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 -#include -#include -#include -#ifdef CONFIG_TEGRA2_MMC -#include -#endif - -#ifdef CONFIG_TEGRA2_MMC -/* - * Routine: gpio_config_mmc - * Description: Set GPIOs for SD card - */ -void gpio_config_mmc(void) -{ - /* configure pin as input for card detect */ - gpio_request(GPIO_PH2, "SD4 CD"); - gpio_direction_input(GPIO_PH2); -} -#endif diff --git a/board/avionic-design/plutux/Makefile b/board/avionic-design/plutux/Makefile index b0c318c439..d96d04306c 100644 --- a/board/avionic-design/plutux/Makefile +++ b/board/avionic-design/plutux/Makefile @@ -1,7 +1,7 @@ # # (C) Copyright 2010,2011 # NVIDIA Corporation -# (C) Copyright 2011 +# (C) Copyright 2011,2012 # Avionic Design GmbH # # See file CREDITS for list of people who contributed to this @@ -26,12 +26,12 @@ include $(TOPDIR)/config.mk ifneq ($(OBJTREE),$(SRCTREE)) -$(shell mkdir -p $(obj)../common) +$(shell mkdir -p $(obj)../common $(obj)../../nvidia/common) endif LIB = $(obj)lib$(BOARD).o -COBJS := $(BOARD).o +COBJS := ../../nvidia/common/board.o COBJS += ../common/tamonten.o SRCS := $(COBJS:.o=.c) diff --git a/board/avionic-design/plutux/plutux.c b/board/avionic-design/plutux/plutux.c deleted file mode 100644 index 42c80940c1..0000000000 --- a/board/avionic-design/plutux/plutux.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * (C) Copyright 2010,2011 - * NVIDIA Corporation - * (C) Copyright 2011 - * Avionic Design GmbH - * - * 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 -#include -#include -#include -#ifdef CONFIG_TEGRA2_MMC -#include -#endif - -#ifdef CONFIG_TEGRA2_MMC -/* - * Routine: gpio_config_mmc - * Description: Set GPIOs for SD card - */ -void gpio_config_mmc(void) -{ - /* configure pin as input for card detect */ - gpio_request(GPIO_PH2, "SD4 CD"); - gpio_direction_input(GPIO_PH2); -} -#endif -- cgit v1.2.1 From 1cbdf2d7e1fc40ef0dcacf7ef03bbdc9b0a6382e Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:25 +0000 Subject: tegra: medcom: Add device tree support Device tree support is required for working USB host support, which in turn enables ethernet support. Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- board/avionic-design/dts/tegra2-medcom.dts | 58 ++++++++++++++++++++++++++++++ include/configs/medcom.h | 21 ++++++++++- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 board/avionic-design/dts/tegra2-medcom.dts diff --git a/board/avionic-design/dts/tegra2-medcom.dts b/board/avionic-design/dts/tegra2-medcom.dts new file mode 100644 index 0000000000..fc52f9ce4e --- /dev/null +++ b/board/avionic-design/dts/tegra2-medcom.dts @@ -0,0 +1,58 @@ +/dts-v1/; + +/include/ ARCH_CPU_DTS + +/ { + model = "Avionic Design Medcom-Wide"; + compatible = "avionic-design,medcom", "nvidia,tegra20"; + + aliases { + usb0 = "/usb@c5008000"; + }; + + memory { + reg = <0x00000000 0x20000000>; + }; + + clocks { + clk_32k: clk_32k { + clock-frequency = <32000>; + }; + + osc { + clock-frequency = <12000000>; + }; + }; + + clock@60006000 { + clocks = <&clk_32k &osc>; + }; + + serial@70006300 { + clock-frequency = <216000000>; + }; + + i2c@7000c000 { + status = "disabled"; + }; + + i2c@7000c400 { + status = "disabled"; + }; + + i2c@7000c500 { + status = "disabled"; + }; + + i2c@7000d000 { + status = "disabled"; + }; + + usb@c5000000 { + status = "disabled"; + }; + + usb@c5004000 { + status = "disabled"; + }; +}; diff --git a/include/configs/medcom.h b/include/configs/medcom.h index bdea7c9c53..c84db03e76 100644 --- a/include/configs/medcom.h +++ b/include/configs/medcom.h @@ -1,7 +1,7 @@ /* * (C) Copyright 2010,2011 * NVIDIA Corporation - * (C) Copyright 2011 + * (C) Copyright 2011-2012 * Avionic Design GmbH * * See file CREDITS for list of people who contributed to this @@ -28,6 +28,11 @@ #include "tegra2-common.h" +/* Enable fdt support for Medcom. Flash the image in u-boot-dtb.bin */ +#define CONFIG_DEFAULT_DEVICE_TREE tegra2-medcom +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE + /* High-level configuration options */ #define V_PROMPT "Tegra2 (Medcom) # " #define CONFIG_TEGRA2_BOARD_STRING "Avionic Design Medcom" @@ -47,6 +52,20 @@ #define CONFIG_TEGRA_MMC #define CONFIG_CMD_MMC +/* USB host support */ +#define CONFIG_USB_EHCI +#define CONFIG_USB_EHCI_TEGRA +#define CONFIG_USB_STORAGE +#define CONFIG_CMD_USB + +/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX + +/* General networking support */ +#define CONFIG_CMD_NET +#define CONFIG_CMD_DHCP + #define CONFIG_DOS_PARTITION #define CONFIG_EFI_PARTITION #define CONFIG_CMD_EXT2 -- cgit v1.2.1 From a7dafd7b1a980d0518473b02574307b153ccddb5 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:26 +0000 Subject: tegra: plutux: Add device tree support Device tree support is required for working USB host support, which in turn enables ethernet support. Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- board/avionic-design/dts/tegra2-plutux.dts | 58 ++++++++++++++++++++++++++++++ include/configs/plutux.h | 21 ++++++++++- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 board/avionic-design/dts/tegra2-plutux.dts diff --git a/board/avionic-design/dts/tegra2-plutux.dts b/board/avionic-design/dts/tegra2-plutux.dts new file mode 100644 index 0000000000..cef49ad804 --- /dev/null +++ b/board/avionic-design/dts/tegra2-plutux.dts @@ -0,0 +1,58 @@ +/dts-v1/; + +/include/ ARCH_CPU_DTS + +/ { + model = "Avionic Design Plutux"; + compatible = "avionic-design,plutux", "nvidia,tegra20"; + + aliases { + usb0 = "/usb@c5008000"; + }; + + memory { + reg = <0x00000000 0x20000000>; + }; + + clocks { + clk_32k: clk_32k { + clock-frequency = <32000>; + }; + + osc { + clock-frequency = <12000000>; + }; + }; + + clock@60006000 { + clocks = <&clk_32k &osc>; + }; + + serial@70006300 { + clock-frequency = <216000000>; + }; + + i2c@7000c000 { + status = "disabled"; + }; + + i2c@7000c400 { + status = "disabled"; + }; + + i2c@7000c500 { + status = "disabled"; + }; + + i2c@7000d000 { + status = "disabled"; + }; + + usb@c5000000 { + status = "disabled"; + }; + + usb@c5004000 { + status = "disabled"; + }; +}; diff --git a/include/configs/plutux.h b/include/configs/plutux.h index 6397eb104a..9870590bd6 100644 --- a/include/configs/plutux.h +++ b/include/configs/plutux.h @@ -1,7 +1,7 @@ /* * (C) Copyright 2010,2011 * NVIDIA Corporation - * (C) Copyright 2011 + * (C) Copyright 2011-2012 * Avionic Design GmbH * * See file CREDITS for list of people who contributed to this @@ -28,6 +28,11 @@ #include "tegra2-common.h" +/* Enable fdt support for Plutux. Flash the image in u-boot-dtb.bin */ +#define CONFIG_DEFAULT_DEVICE_TREE tegra2-plutux +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE + /* High-level configuration options */ #define V_PROMPT "Tegra2 (Plutux) # " #define CONFIG_TEGRA2_BOARD_STRING "Avionic Design Plutux" @@ -47,6 +52,20 @@ #define CONFIG_TEGRA_MMC #define CONFIG_CMD_MMC +/* USB host support */ +#define CONFIG_USB_EHCI +#define CONFIG_USB_EHCI_TEGRA +#define CONFIG_USB_STORAGE +#define CONFIG_CMD_USB + +/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX + +/* General networking support */ +#define CONFIG_CMD_NET +#define CONFIG_CMD_DHCP + #define CONFIG_DOS_PARTITION #define CONFIG_EFI_PARTITION #define CONFIG_CMD_EXT2 -- cgit v1.2.1 From cb7a1cf36a59772670adcd2c90cee40c2ed1bc60 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:27 +0000 Subject: tegra: Allow boards to perform early GPIO setup The new gpio_early_init() function, which does nothing by default, can be overridden by boards to configure GPIOs at an early stage. Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- board/nvidia/common/board.c | 7 +++++++ board/nvidia/common/board.h | 1 + 2 files changed, 8 insertions(+) diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index 2e22133591..a159deb675 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -132,11 +132,18 @@ int board_init(void) } #ifdef CONFIG_BOARD_EARLY_INIT_F +static void __gpio_early_init(void) +{ +} + +void gpio_early_init(void) __attribute__((weak, alias("__gpio_early_init"))); + int board_early_init_f(void) { board_init_uart_f(); /* Initialize periph GPIOs */ + gpio_early_init(); #ifdef CONFIG_SPI_UART_SWITCH gpio_early_init_uart(); #else diff --git a/board/nvidia/common/board.h b/board/nvidia/common/board.h index 09fb158f4e..dada4c4f9c 100644 --- a/board/nvidia/common/board.h +++ b/board/nvidia/common/board.h @@ -25,6 +25,7 @@ #define _BOARD_H_ void gpio_config_uart(void); +void gpio_early_init(void); void gpio_early_init_uart(void); /* -- cgit v1.2.1 From 22d58506f5d04918d2bde62c5fe71abee24e4ea8 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:28 +0000 Subject: tegra: Implement gpio_early_init() on Tamonten The PI4 GPIO is used on Tamonten to reset carrier board peripherals. Power sequencing hardware on the carrier pulls the reset low before powering up the Tegra, and the CPU is supposed to signal readiness, and therefore bring peripherals out of reset by pulling PI4 high. Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- board/avionic-design/common/tamonten.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/board/avionic-design/common/tamonten.c b/board/avionic-design/common/tamonten.c index d9ecd238d5..915247c760 100644 --- a/board/avionic-design/common/tamonten.c +++ b/board/avionic-design/common/tamonten.c @@ -49,6 +49,14 @@ void gpio_config_uart(void) { } +#ifdef CONFIG_BOARD_EARLY_INIT_F +void gpio_early_init(void) +{ + gpio_request(GPIO_PI4, NULL); + gpio_direction_output(GPIO_PI4, 1); +} +#endif + #ifdef CONFIG_TEGRA2_MMC /* * Routine: pin_mux_mmc -- cgit v1.2.1 From 792545430535c7fec7ecfcdf988dd3e9d46c0dd1 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:29 +0000 Subject: tegra: Use SD write-protect GPIO on Tamonten GPIO PI6 can be used to obtain the write-protect status of an SD card inserted into the SD slot. Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- board/avionic-design/common/tamonten.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/board/avionic-design/common/tamonten.c b/board/avionic-design/common/tamonten.c index 915247c760..610f188d1e 100644 --- a/board/avionic-design/common/tamonten.c +++ b/board/avionic-design/common/tamonten.c @@ -65,6 +65,8 @@ void gpio_early_init(void) static void pin_mux_mmc(void) { funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT); + /* for write-protect GPIO PI6 */ + pinmux_tristate_disable(PINGRP_ATA); /* for CD GPIO PH2 */ pinmux_tristate_disable(PINGRP_ATD); } @@ -76,7 +78,7 @@ int board_mmc_init(bd_t *bd) pin_mux_mmc(); /* init dev 0, SD slot, with 4-bit bus */ - tegra2_mmc_init(0, 4, -1, GPIO_PH2); + tegra2_mmc_init(0, 4, GPIO_PI6, GPIO_PH2); return 0; } -- cgit v1.2.1 From d70575b6d0d53492c0920b9a3d4479964909dc9b Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 4 Jun 2012 20:02:30 +0000 Subject: tegra: Add Tamonten Evaluation Carrier support The Tamonten Evaluation Carrier is an evaluation board for the Tamonten processor board. More information is available here: http://www.avionic-design.de/en/products/nvidia-tegra-tamonten-system-en/nvidia-tegra-tamonten-evboard-en.html Signed-off-by: Thierry Reding Acked-by: Stephen Warren Signed-off-by: Tom Warren --- MAINTAINERS | 1 + board/avionic-design/dts/tegra2-tec.dts | 58 +++++++++++++++++++++++ board/avionic-design/tec/Makefile | 50 ++++++++++++++++++++ boards.cfg | 1 + include/configs/tec.h | 82 +++++++++++++++++++++++++++++++++ 5 files changed, 192 insertions(+) create mode 100644 board/avionic-design/dts/tegra2-tec.dts create mode 100644 board/avionic-design/tec/Makefile create mode 100644 include/configs/tec.h diff --git a/MAINTAINERS b/MAINTAINERS index 54eeab7ba3..fd0c65c8d8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -813,6 +813,7 @@ Thierry Reding plutux Tegra2 (ARM7 & A9 Dual Core) medcom Tegra2 (ARM7 & A9 Dual Core) + tec Tegra2 (ARM7 & A9 Dual Core) Christian Riesch Manfred Rudigier diff --git a/board/avionic-design/dts/tegra2-tec.dts b/board/avionic-design/dts/tegra2-tec.dts new file mode 100644 index 0000000000..9faebd8bc6 --- /dev/null +++ b/board/avionic-design/dts/tegra2-tec.dts @@ -0,0 +1,58 @@ +/dts-v1/; + +/include/ ARCH_CPU_DTS + +/ { + model = "Avionic Design Tamonten Evaluation Carrier"; + compatible = "avionic-design,tec", "nvidia,tegra20"; + + aliases { + usb0 = "/usb@c5008000"; + }; + + memory { + reg = <0x00000000 0x20000000>; + }; + + clocks { + clk_32k: clk_32k { + clock-frequency = <32000>; + }; + + osc { + clock-frequency = <12000000>; + }; + }; + + clock@60006000 { + clocks = <&clk_32k &osc>; + }; + + serial@70006300 { + clock-frequency = <216000000>; + }; + + i2c@7000c000 { + status = "disabled"; + }; + + i2c@7000c400 { + status = "disabled"; + }; + + i2c@7000c500 { + status = "disabled"; + }; + + i2c@7000d000 { + status = "disabled"; + }; + + usb@c5000000 { + status = "disabled"; + }; + + usb@c5004000 { + status = "disabled"; + }; +}; diff --git a/board/avionic-design/tec/Makefile b/board/avionic-design/tec/Makefile new file mode 100644 index 0000000000..d96d04306c --- /dev/null +++ b/board/avionic-design/tec/Makefile @@ -0,0 +1,50 @@ +# +# (C) Copyright 2010,2011 +# NVIDIA Corporation +# (C) Copyright 2011,2012 +# Avionic Design GmbH +# +# 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 $(obj)../../nvidia/common) +endif + +LIB = $(obj)lib$(BOARD).o + +COBJS := ../../nvidia/common/board.o +COBJS += ../common/tamonten.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/boards.cfg b/boards.cfg index 1a5dcabe4d..2d36d83335 100644 --- a/boards.cfg +++ b/boards.cfg @@ -282,6 +282,7 @@ colibri_pxa270 arm pxa - toradex jornada arm sa1100 plutux arm armv7 plutux avionic-design tegra2 medcom arm armv7 medcom avionic-design tegra2 +tec arm armv7 tec avionic-design tegra2 paz00 arm armv7 paz00 compal tegra2 trimslice arm armv7 trimslice compulab tegra2 atngw100 avr32 at32ap - atmel at32ap700x diff --git a/include/configs/tec.h b/include/configs/tec.h new file mode 100644 index 0000000000..3d0a78825b --- /dev/null +++ b/include/configs/tec.h @@ -0,0 +1,82 @@ +/* + * (C) Copyright 2010,2011 + * NVIDIA Corporation + * (C) Copyright 2011-2012 + * Avionic Design GmbH + * + * 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 __CONFIG_H +#define __CONFIG_H + +#include "tegra2-common.h" + +/* Enable fdt support for TEC. Flash the image in u-boot-dtb.bin */ +#define CONFIG_DEFAULT_DEVICE_TREE tegra2-tec +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE + +/* High-level configuration options */ +#define V_PROMPT "Tegra2 (TEC) # " +#define CONFIG_TEGRA2_BOARD_STRING "Avionic Design Tamonten Evaluation Carrier" +#define CONFIG_SYS_BOARD_ODMDATA 0x2b0d8011 + +/* Board-specific serial config */ +#define CONFIG_SERIAL_MULTI +#define CONFIG_TEGRA2_ENABLE_UARTD /* UARTD: debug UART */ +#define CONFIG_SYS_NS16550_COM1 NV_PA_APB_UARTD_BASE + +#define CONFIG_BOARD_EARLY_INIT_F + +#define CONFIG_ENV_IS_NOWHERE + +/* SD/MMC */ +#define CONFIG_MMC +#define CONFIG_GENERIC_MMC +#define CONFIG_TEGRA_MMC +#define CONFIG_CMD_MMC + +/* USB host support */ +#define CONFIG_USB_EHCI +#define CONFIG_USB_EHCI_TEGRA +#define CONFIG_USB_STORAGE +#define CONFIG_CMD_USB + +/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX + +/* General networking support */ +#define CONFIG_CMD_NET +#define CONFIG_CMD_DHCP + +#define CONFIG_DOS_PARTITION +#define CONFIG_EFI_PARTITION +#define CONFIG_CMD_EXT2 +#define CONFIG_CMD_FAT + +#define CONFIG_FIT + +#define CONFIG_BOOTCOMMAND \ + "mmc rescan;" \ + "ext2load mmc 0 0x17000000 /boot/uImage;" \ + "bootm" + +#endif /* __CONFIG_H */ -- cgit v1.2.1 From 1e2d7859758499a25fa392deb5cfda95372d97ae Mon Sep 17 00:00:00 2001 From: Tom Warren Date: Fri, 1 Jun 2012 08:22:14 +0000 Subject: tegra: fix leftover CONFIG_TEGRA2_MMC & _SPI build switches Missed some boards after my tegra2_mmc.* -> tegra_mmc.* change, and one instance of CONFIG_TEGRA2_SPI. MAKEALL -s tegra2 AOK, Seaboard MMC AOK. Didn't test Tamonten, Paz00 or TrimSlice, as I have none here. Signed-off-by: Tom Warren Acked-by: Stephen Warren --- board/avionic-design/common/tamonten.c | 4 ++-- board/compal/paz00/paz00.c | 4 ++-- board/compulab/trimslice/trimslice.c | 2 +- board/nvidia/common/board.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/board/avionic-design/common/tamonten.c b/board/avionic-design/common/tamonten.c index 610f188d1e..2c14462eb6 100644 --- a/board/avionic-design/common/tamonten.c +++ b/board/avionic-design/common/tamonten.c @@ -37,7 +37,7 @@ #include #include -#ifdef CONFIG_TEGRA2_MMC +#ifdef CONFIG_TEGRA_MMC #include #endif @@ -57,7 +57,7 @@ void gpio_early_init(void) } #endif -#ifdef CONFIG_TEGRA2_MMC +#ifdef CONFIG_TEGRA_MMC /* * Routine: pin_mux_mmc * Description: setup the pin muxes/tristate values for the SDMMC(s) diff --git a/board/compal/paz00/paz00.c b/board/compal/paz00/paz00.c index 0c09ce0a46..ec678746d3 100644 --- a/board/compal/paz00/paz00.c +++ b/board/compal/paz00/paz00.c @@ -20,7 +20,7 @@ #include #include #include -#ifdef CONFIG_TEGRA2_MMC +#ifdef CONFIG_TEGRA_MMC #include #endif @@ -32,7 +32,7 @@ void gpio_config_uart(void) { } -#ifdef CONFIG_TEGRA2_MMC +#ifdef CONFIG_TEGRA_MMC /* * Routine: pin_mux_mmc * Description: setup the pin muxes/tristate values for the SDMMC(s) diff --git a/board/compulab/trimslice/trimslice.c b/board/compulab/trimslice/trimslice.c index 7167c914e0..f15fbd7df7 100644 --- a/board/compulab/trimslice/trimslice.c +++ b/board/compulab/trimslice/trimslice.c @@ -30,7 +30,7 @@ #include #include #include -#ifdef CONFIG_TEGRA2_MMC +#ifdef CONFIG_TEGRA_MMC #include #endif diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index a159deb675..fc8b928cfc 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -94,7 +94,7 @@ int board_init(void) #ifdef CONFIG_SPI_UART_SWITCH gpio_config_uart(); #endif -#ifdef CONFIG_TEGRA2_SPI +#ifdef CONFIG_TEGRA_SPI spi_init(); #endif /* boot param addr */ -- cgit v1.2.1 From f97daaa2317b68aacfbf19bb7566183e17db3349 Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Thu, 31 May 2012 01:51:01 +0000 Subject: tegra: add ULPI on USB2 funcmux entry This is needed as a prerequisite for Tegra USB ULPI support within U-Boot. Signed-off-by: Lucas Stach Acked-by: Stephen Warren CC: Stephen Warren CC: Tom Warren Signed-off-by: Tom Warren --- arch/arm/cpu/armv7/tegra2/funcmux.c | 13 ++++++++++++- arch/arm/include/asm/arch-tegra2/funcmux.h | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c index 820ba4e902..455d01011f 100644 --- a/arch/arm/cpu/armv7/tegra2/funcmux.c +++ b/arch/arm/cpu/armv7/tegra2/funcmux.c @@ -209,9 +209,20 @@ int funcmux_select(enum periph_id id, int config) pinmux_set_func(grp[i], PMUX_FUNC_KBC); pinmux_set_pullupdown(grp[i], PMUX_PULL_UP); } + } + break; - break; + case PERIPH_ID_USB2: + if (config == FUNCMUX_USB2_ULPI) { + pinmux_set_func(PINGRP_UAA, PMUX_FUNC_ULPI); + pinmux_set_func(PINGRP_UAB, PMUX_FUNC_ULPI); + pinmux_set_func(PINGRP_UDA, PMUX_FUNC_ULPI); + + pinmux_tristate_disable(PINGRP_UAA); + pinmux_tristate_disable(PINGRP_UAB); + pinmux_tristate_disable(PINGRP_UDA); } + break; default: debug("%s: invalid periph_id %d", __func__, id); diff --git a/arch/arm/include/asm/arch-tegra2/funcmux.h b/arch/arm/include/asm/arch-tegra2/funcmux.h index b16c496122..3cbc7d2fe1 100644 --- a/arch/arm/include/asm/arch-tegra2/funcmux.h +++ b/arch/arm/include/asm/arch-tegra2/funcmux.h @@ -51,6 +51,9 @@ enum { FUNCMUX_SDMMC4_ATC_ATD_8BIT = 0, FUNCMUX_SDMMC4_ATB_GMA_4_BIT, FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT, + + /* USB configs */ + FUNCMUX_USB2_ULPI = 0, }; /** -- cgit v1.2.1 From f857fff6068fe36a327a0ff6d837412caaf2e07d Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Thu, 31 May 2012 01:51:02 +0000 Subject: tegra: usb: fix wrong error check loop_count runs down from 10000, so the correct condition to error out is ==0. Signed-off-by: Lucas Stach Acked-by: Stephen Warren CC: Stephen Warren CC: Tom Warren Tested-by: Stephen Warren Signed-off-by: Tom Warren --- arch/arm/cpu/armv7/tegra2/usb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv7/tegra2/usb.c b/arch/arm/cpu/armv7/tegra2/usb.c index c80de7f6a3..5f2b243750 100644 --- a/arch/arm/cpu/armv7/tegra2/usb.c +++ b/arch/arm/cpu/armv7/tegra2/usb.c @@ -290,7 +290,7 @@ static int init_usb_controller(struct fdt_usb *config, break; udelay(1); } - if (loop_count == 100000) + if (!loop_count) return -1; return 0; -- cgit v1.2.1 From 5e724ca2b65cea97a5945b163c765427a7ebf3d1 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 22 May 2012 09:21:54 +0000 Subject: Add env vars describing U-Boot target board This can be useful for generic scripts. For example, rather than hard- coding a script to ext2load tegra-harmony.dtb, it could load ${soc}-${board}.dtb and hence not need adjustments to run on multiple boards. Signed-off-by: Stephen Warren Acked-by: Simon Glass Signed-off-by: Tom Warren --- README | 14 ++++++++++++++ common/env_common.c | 11 +++++++++++ common/env_embedded.c | 11 +++++++++++ mkconfig | 8 ++++++++ 4 files changed, 44 insertions(+) diff --git a/README b/README index bb1b725672..dac46f35b2 100644 --- a/README +++ b/README @@ -2229,6 +2229,20 @@ The following options need to be configured: the environment like the "source" command or the boot command first. + CONFIG_ENV_VARS_UBOOT_CONFIG + + Define this in order to add variables describing the + U-Boot build configuration to the default environment. + These will be named arch, cpu, board, vendor, and soc. + + Enabling this option will cause the following to be defined: + + - CONFIG_SYS_ARCH + - CONFIG_SYS_CPU + - CONFIG_SYS_BOARD + - CONFIG_SYS_VENDOR + - CONFIG_SYS_SOC + - DataFlash Support: CONFIG_HAS_DATAFLASH diff --git a/common/env_common.c b/common/env_common.c index c33d22d752..d9e990dbbe 100644 --- a/common/env_common.c +++ b/common/env_common.c @@ -116,6 +116,17 @@ const uchar default_environment[] = { #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0) "pcidelay=" MK_STR(CONFIG_PCI_BOOTDELAY) "\0" #endif +#ifdef CONFIG_ENV_VARS_UBOOT_CONFIG + "arch=" CONFIG_SYS_ARCH "\0" + "cpu=" CONFIG_SYS_CPU "\0" + "board=" CONFIG_SYS_BOARD "\0" +#ifdef CONFIG_SYS_VENDOR + "vendor=" CONFIG_SYS_VENDOR "\0" +#endif +#ifdef CONFIG_SYS_SOC + "soc=" CONFIG_SYS_SOC "\0" +#endif +#endif #ifdef CONFIG_EXTRA_ENV_SETTINGS CONFIG_EXTRA_ENV_SETTINGS #endif diff --git a/common/env_embedded.c b/common/env_embedded.c index 80fb29dd5e..3872878885 100644 --- a/common/env_embedded.c +++ b/common/env_embedded.c @@ -179,6 +179,17 @@ env_t environment __PPCENV__ = { #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0) "pcidelay=" MK_STR(CONFIG_PCI_BOOTDELAY) "\0" #endif +#ifdef CONFIG_ENV_VARS_UBOOT_CONFIG + "arch=" CONFIG_SYS_ARCH "\0" + "cpu=" CONFIG_SYS_CPU "\0" + "board=" CONFIG_SYS_BOARD "\0" +#ifdef CONFIG_SYS_VENDOR + "vendor=" CONFIG_SYS_VENDOR "\0" +#endif +#ifdef CONFIG_SYS_SOC + "soc=" CONFIG_SYS_SOC "\0" +#endif +#endif #ifdef CONFIG_EXTRA_ENV_SETTINGS CONFIG_EXTRA_ENV_SETTINGS #endif diff --git a/mkconfig b/mkconfig index daa1810e72..801f921296 100755 --- a/mkconfig +++ b/mkconfig @@ -161,6 +161,14 @@ for i in ${TARGETS} ; do echo "#define CONFIG_${i}" >>config.h ; done +echo "#define CONFIG_SYS_ARCH \"${arch}\"" >> config.h +echo "#define CONFIG_SYS_CPU \"${cpu}\"" >> config.h +echo "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h + +[ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h + +[ "${soc}" ] && echo "#define CONFIG_SYS_SOC \"${soc}\"" >> config.h + cat << EOF >> config.h #define CONFIG_BOARDDIR board/$BOARDDIR #include -- cgit v1.2.1 From 0a7bec7f991950da90c6ee6bc59f322abebccbb7 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 22 May 2012 09:21:55 +0000 Subject: tegra: enable CONFIG_ENV_VARS_UBOOT_CONFIG So that all Tegra boards define environment variables that describe themselves. Signed-off-by: Stephen Warren Acked-by: Simon Glass Signed-off-by: Tom Warren --- include/configs/tegra2-common.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h index 94e1aa628d..20f294e784 100644 --- a/include/configs/tegra2-common.h +++ b/include/configs/tegra2-common.h @@ -68,6 +68,7 @@ #endif /* Environment */ +#define CONFIG_ENV_VARS_UBOOT_CONFIG #define CONFIG_ENV_SIZE 0x2000 /* Total Size Environment */ /* -- cgit v1.2.1 From 9cd3f3adf03bdbc5ea4514f00e2cfacfb1ae5bed Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Mon, 4 Jun 2012 09:23:55 +0000 Subject: tegra: add enterrcm command Tegra's boot ROM supports a mode whereby code may be downloaded and flash programmed over a USB connection. On dev boards, this is typically entered by holding down a "force recovery" button and resetting the CPU. However, not all boards have such a button (one example is the Compulab Trimslice), so a method to enter RCM from software is useful. This change implements the command "enterrcm" to do this, and enables it for all Tegra boards by default. Even on boards other than Trimslice, controlling this over a UART may be useful, e.g. to allow simple remote control without the need for mechanical button actuators, or hooking up relays/... to the button. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- arch/arm/cpu/armv7/tegra2/Makefile | 1 + arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c | 65 ++++++++++++++++++++++++++++++++ include/configs/tegra2-common.h | 1 + 3 files changed, 67 insertions(+) create mode 100644 arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c diff --git a/arch/arm/cpu/armv7/tegra2/Makefile b/arch/arm/cpu/armv7/tegra2/Makefile index 08c4137a34..80da4536d3 100644 --- a/arch/arm/cpu/armv7/tegra2/Makefile +++ b/arch/arm/cpu/armv7/tegra2/Makefile @@ -39,6 +39,7 @@ COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o COBJS-$(CONFIG_TEGRA_PMU) += pmu.o COBJS-$(CONFIG_USB_EHCI_TEGRA) += usb.o COBJS-$(CONFIG_TEGRA2_LP0) += crypto.o warmboot.o warmboot_avp.o +COBJS-$(CONFIG_CMD_ENTERRCM) += cmd_enterrcm.o COBJS := $(COBJS-y) SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) diff --git a/arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c b/arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c new file mode 100644 index 0000000000..2fcd107df5 --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. + * + * Derived from code (arch/arm/lib/reset.c) that is: + * + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH + * Marius Groeger + * + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH + * Alex Zuepke + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, + * + * (C) Copyright 2004 + * DAVE Srl + * http://www.dave-tech.it + * http://www.wawnet.biz + * mailto:info@wawnet.biz + * + * (C) Copyright 2004 Texas Insturments + * + * 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, see . + */ + +#include +#include +#include + +static int do_enterrcm(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE; + + puts("Entering RCM...\n"); + udelay(50000); + + pmc->pmc_scratch0 = 2; + disable_interrupts(); + reset_cpu(0); + + return 0; +} + +U_BOOT_CMD( + enterrcm, 1, 0, do_enterrcm, + "reset Tegra and enter USB Recovery Mode", + "" +); diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h index 20f294e784..f61fb5a581 100644 --- a/include/configs/tegra2-common.h +++ b/include/configs/tegra2-common.h @@ -193,4 +193,5 @@ #define CONFIG_TEGRA_GPIO #define CONFIG_CMD_GPIO +#define CONFIG_CMD_ENTERRCM #endif /* __TEGRA2_COMMON_H */ -- cgit v1.2.1 From 03cddf28ebbaf402cdac495b71d7fb1bc5fa252f Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Mon, 4 Jun 2012 10:59:22 +0000 Subject: tegra: bootcmd enhancements Place the list of searched boot devices, file-system types, boot file locations/prefixes, and boot script names into variables. This allows the user to override them directly (e.g. to change boot order, or select the specific values they use) without having to edit the main bootcmd and script_boot variables. The default boot order is changed from USB, MMC, DHCP to MMC, USB, DHCP. This speeds up the typical MMC boot case. People who want USB boot can now edit variable boot_targets appropriately. Also, reformat BOOTCMDS_COMMON to fit within 80 columns. Potential future enhancements might be: * Allow boards to specify which of bootcmd_mmc0/... should be defined, based on the HW they contain. * Allow boards to influence the order that the boot targets are added into the boot_targets variable. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- include/configs/tegra2-common-post.h | 82 +++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/include/configs/tegra2-common-post.h b/include/configs/tegra2-common-post.h index 0484a522d5..85b037c22d 100644 --- a/include/configs/tegra2-common-post.h +++ b/include/configs/tegra2-common-post.h @@ -31,15 +31,15 @@ #else #ifdef CONFIG_CMD_EXT2 -#define BOOTCMD_FS_EXT2 "ext2 " +#define BOOT_FSTYPE_EXT2 "ext2 " #else -#define BOOTCMD_FS_EXT2 "" +#define BOOT_FSTYPE_EXT2 "" #endif #ifdef CONFIG_CMD_FAT -#define BOOTCMD_FS_FAT "fat" +#define BOOT_FSTYPE_FAT "fat" #else -#define BOOTCMD_FS_FAT "" +#define BOOT_FSTYPE_FAT "" #endif #ifdef CONFIG_CMD_MMC @@ -47,15 +47,14 @@ "mmc_boot=" \ "setenv devtype mmc; " \ "if mmc dev ${devnum}; then " \ - "run script_boot; " \ + "run scan_boot; " \ "fi\0" \ - "mmc0_boot=setenv devnum 0; run mmc_boot;\0" \ - "mmc1_boot=setenv devnum 1; run mmc_boot;\0" \ - "bootcmd_mmc=run mmc1_boot; run mmc0_boot\0" -#define BOOTCMD_MMC "run bootcmd_mmc; " + "bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0" \ + "bootcmd_mmc1=setenv devnum 1; run mmc_boot;\0" +#define BOOT_TARGETS_MMC "mmc1 mmc0" #else #define BOOTCMDS_MMC "" -#define BOOTCMD_MMC "" +#define BOOT_TARGETS_MMC "" #endif #ifdef CONFIG_CMD_USB @@ -63,15 +62,14 @@ "usb_boot=" \ "setenv devtype usb; " \ "if usb dev ${devnum}; then " \ - "run script_boot; " \ + "run scan_boot; " \ "fi\0" \ - "usb0_boot=setenv devnum 0; run usb_boot;\0" \ - "bootcmd_usb=run usb0_boot\0" -#define BOOTCMD_USB "run bootcmd_usb; " + "bootcmd_usb0=setenv devnum 0; run usb_boot;\0" +#define BOOT_TARGETS_USB "usb0" #define BOOTCMD_INIT_USB "usb start 0; " #else #define BOOTCMDS_USB "" -#define BOOTCMD_USB "" +#define BOOT_TARGETS_USB "" #define BOOTCMD_INIT_USB "" #endif @@ -81,32 +79,56 @@ "if dhcp ${scriptaddr} boot.scr.uimg; then "\ "source ${scriptaddr}; " \ "fi\0" -#define BOOTCMD_DHCP "run bootcmd_dhcp; " +#define BOOT_TARGETS_DHCP "dhcp" #else #define BOOTCMDS_DHCP "" -#define BOOTCMD_DHCP "" +#define BOOT_TARGETS_DHCP "" #endif #define BOOTCMDS_COMMON \ "scriptaddr=0x400000\0" \ + \ "rootpart=1\0" \ - "script_boot=" \ - "for fs in " BOOTCMD_FS_EXT2 BOOTCMD_FS_FAT "; do " \ - "for prefix in / /boot/; do " \ - "for script in boot.scr.uimg boot.scr; do " \ - "echo Scanning ${devtype} ${devnum}:${rootpart} ${fs} ${prefix}${script} ...; " \ - "if ${fs}load ${devtype} ${devnum}:${rootpart} ${scriptaddr} ${prefix}${script}; then " \ - "echo ${script} found! Executing ...;" \ - "source ${scriptaddr};" \ - "fi; " \ - "done; " \ - "done; " \ - "done;\0" \ + \ + "script_boot=" \ + "if ${fs}load ${devtype} ${devnum}:${rootpart} " \ + "${scriptaddr} ${prefix}${script}; then " \ + "echo ${script} found! Executing ...;" \ + "source ${scriptaddr};" \ + "fi;\0" \ + \ + "scan_boot=" \ + "echo Scanning ${devtype} ${devnum}...; " \ + "for fs in ${boot_fstypes}; do " \ + "for prefix in ${boot_prefixes}; do " \ + "for script in ${boot_scripts}; do " \ + "run script_boot; " \ + "done; " \ + "done; " \ + "done;\0" \ + \ + "boot_targets=" \ + BOOT_TARGETS_MMC " " \ + BOOT_TARGETS_USB " " \ + BOOT_TARGETS_DHCP " " \ + "\0" \ + \ + "boot_fstypes=" \ + BOOT_FSTYPE_EXT2 " " \ + BOOT_FSTYPE_FAT " " \ + "\0" \ + \ + "boot_prefixes=/ /boot/\0" \ + \ + "boot_scripts=boot.scr.uimg boot.scr\0" \ + \ BOOTCMDS_MMC \ BOOTCMDS_USB \ BOOTCMDS_DHCP -#define CONFIG_BOOTCOMMAND BOOTCMD_INIT_USB BOOTCMD_USB BOOTCMD_MMC BOOTCMD_DHCP +#define CONFIG_BOOTCOMMAND \ + BOOTCMD_INIT_USB \ + "for target in ${boot_targets}; do run bootcmd_${target}; done" #endif -- cgit v1.2.1 From f78d348cb8a4f5f69a80f914e84eabd8663783a3 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Mon, 4 Jun 2012 10:59:23 +0000 Subject: tegra: bootcmd: start USB only when needed Instead of initializing USB as soon as bootcmd is executed, defer it until the first boot device that (potentially in the case of network) uses USB is scanned. This avoids initializing USB when booting from MMC, so speeds that up. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- include/configs/tegra2-common-post.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/include/configs/tegra2-common-post.h b/include/configs/tegra2-common-post.h index 85b037c22d..80d9c3500d 100644 --- a/include/configs/tegra2-common-post.h +++ b/include/configs/tegra2-common-post.h @@ -58,24 +58,33 @@ #endif #ifdef CONFIG_CMD_USB +#define BOOTCMD_INIT_USB "run usb_init; " #define BOOTCMDS_USB \ + "usb_init=" \ + "if ${usb_need_init}; then " \ + "set usb_need_init false; " \ + "usb start 0; " \ + "fi\0" \ + \ "usb_boot=" \ "setenv devtype usb; " \ + BOOTCMD_INIT_USB \ "if usb dev ${devnum}; then " \ "run scan_boot; " \ "fi\0" \ + \ "bootcmd_usb0=setenv devnum 0; run usb_boot;\0" #define BOOT_TARGETS_USB "usb0" -#define BOOTCMD_INIT_USB "usb start 0; " #else +#define BOOTCMD_INIT_USB "" #define BOOTCMDS_USB "" #define BOOT_TARGETS_USB "" -#define BOOTCMD_INIT_USB "" #endif #ifdef CONFIG_CMD_DHCP #define BOOTCMDS_DHCP \ "bootcmd_dhcp=" \ + BOOTCMD_INIT_USB \ "if dhcp ${scriptaddr} boot.scr.uimg; then "\ "source ${scriptaddr}; " \ "fi\0" @@ -127,7 +136,6 @@ BOOTCMDS_DHCP #define CONFIG_BOOTCOMMAND \ - BOOTCMD_INIT_USB \ "for target in ${boot_targets}; do run bootcmd_${target}; done" #endif -- cgit v1.2.1 From a016e144ed6a7e17774d3371c29544c329459667 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 12 Jun 2012 08:33:39 +0000 Subject: tegra: add GMC/GMD funcmux entry for SFLASH This is used on TrimSlice. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- arch/arm/cpu/armv7/tegra2/funcmux.c | 10 ++++++++++ arch/arm/include/asm/arch-tegra2/funcmux.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c index 455d01011f..4a31a4cf0c 100644 --- a/arch/arm/cpu/armv7/tegra2/funcmux.c +++ b/arch/arm/cpu/armv7/tegra2/funcmux.c @@ -224,6 +224,16 @@ int funcmux_select(enum periph_id id, int config) } break; + case PERIPH_ID_SPI1: + if (config == FUNCMUX_SPI1_GMC_GMD) { + pinmux_set_func(PINGRP_GMC, PMUX_FUNC_SFLASH); + pinmux_set_func(PINGRP_GMD, PMUX_FUNC_SFLASH); + + pinmux_tristate_disable(PINGRP_GMC); + pinmux_tristate_disable(PINGRP_GMD); + } + break; + default: debug("%s: invalid periph_id %d", __func__, id); return -1; diff --git a/arch/arm/include/asm/arch-tegra2/funcmux.h b/arch/arm/include/asm/arch-tegra2/funcmux.h index 3cbc7d2fe1..dcd512f084 100644 --- a/arch/arm/include/asm/arch-tegra2/funcmux.h +++ b/arch/arm/include/asm/arch-tegra2/funcmux.h @@ -54,6 +54,9 @@ enum { /* USB configs */ FUNCMUX_USB2_ULPI = 0, + + /* Serial Flash configs */ + FUNCMUX_SPI1_GMC_GMD = 0, }; /** -- cgit v1.2.1 From e02849488724bdfdc36ef8105c59a49986db3ebc Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 12 Jun 2012 08:33:40 +0000 Subject: tegra: add pin_mux_spi() board initialization function Boards can override this to set up the pinmux correctly to access serial flash. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- board/nvidia/common/board.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index fc8b928cfc..e65fc9e843 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -64,6 +64,12 @@ void __pin_mux_usb(void) void pin_mux_usb(void) __attribute__((weak, alias("__pin_mux_usb"))); +void __pin_mux_spi(void) +{ +} + +void pin_mux_spi(void) __attribute__((weak, alias("__pin_mux_spi"))); + /* * Routine: power_det_init * Description: turn off power detects @@ -95,6 +101,7 @@ int board_init(void) gpio_config_uart(); #endif #ifdef CONFIG_TEGRA_SPI + pin_mux_spi(); spi_init(); #endif /* boot param addr */ -- cgit v1.2.1 From 2db7b952844f95c8299bb84bc3b2d38e8f48f5cd Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 12 Jun 2012 08:33:41 +0000 Subject: tegra: trimslice: set up serial flash pinmux When Trimslice is booted from serial flash, the boot ROM does this, so U-Boot doesn't need to. However, booting from the SD slot for recovery purposes, the boot ROM does not set up the pinmux for serial flash. Add code to U-Boot to set this up, so that an SD-based recovery U-Boot image can upgrade the U-Boot in serial flash. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- board/compulab/trimslice/trimslice.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/board/compulab/trimslice/trimslice.c b/board/compulab/trimslice/trimslice.c index f15fbd7df7..1ac15f8da5 100644 --- a/board/compulab/trimslice/trimslice.c +++ b/board/compulab/trimslice/trimslice.c @@ -42,6 +42,11 @@ void gpio_config_uart(void) { } +void pin_mux_spi(void) +{ + funcmux_select(PERIPH_ID_SPI1, FUNCMUX_SPI1_GMC_GMD); +} + /* * Routine: pin_mux_mmc * Description: setup the pin muxes/tristate values for the SDMMC(s) -- cgit v1.2.1 From 8b3f7bf7ec95816a7d2f89331e8877a351b3ec7c Mon Sep 17 00:00:00 2001 From: Jim Lin Date: Sun, 24 Jun 2012 20:40:57 +0000 Subject: tegra: usb: Fix device enumeration problem of USB1 A known hardware issue of USB1 port where bit 1 (connect status change) of PORTSC register will be set after issuing Port Reset (like "usb reset" in u-boot command line). This will be treated as an error and stops later device enumeration. Therefore we clear that bit after Port Reset in order to proceed later device enumeration. Signed-off-by: Jim Lin Acked-by: Stephen Warren Signed-off-by: Tom Warren --- arch/arm/include/asm/arch-tegra2/tegra2.h | 1 + drivers/usb/host/ehci-tegra.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/arch/arm/include/asm/arch-tegra2/tegra2.h b/arch/arm/include/asm/arch-tegra2/tegra2.h index 3c8d8a84b5..13d68c017c 100644 --- a/arch/arm/include/asm/arch-tegra2/tegra2.h +++ b/arch/arm/include/asm/arch-tegra2/tegra2.h @@ -45,6 +45,7 @@ #define NV_PA_CSITE_BASE 0x70040000 #define TEGRA_USB1_BASE 0xC5000000 #define TEGRA_USB3_BASE 0xC5008000 +#define TEGRA_USB_ADDR_MASK 0xFFFFC000 #define TEGRA2_SDRC_CS0 NV_PA_SDRAM_BASE #define LOW_LEVEL_SRAM_STACK 0x4000FFFC diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index a7e105b992..4646b29508 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009 NVIDIA Corporation + * Copyright (c) 2009-2012 NVIDIA Corporation * * See file CREDITS for list of people who contributed to this * project. @@ -29,6 +29,22 @@ #include #include +/* + * A known hardware issue where Connect Status Change bit of PORTSC register + * of USB1 controller will be set after Port Reset. + * We have to clear it in order for later device enumeration to proceed. + * This ehci_powerup_fixup overrides the weak function ehci_powerup_fixup + * in "ehci-hcd.c". + */ +void ehci_powerup_fixup(uint32_t *status_reg, uint32_t *reg) +{ + mdelay(50); + if (((u32) status_reg & TEGRA_USB_ADDR_MASK) != TEGRA_USB1_BASE) + return; + /* For EHCI_PS_CSC to be cleared in ehci_hcd.c */ + if (ehci_readl(status_reg) & EHCI_PS_CSC) + *reg |= EHCI_PS_CSC; +} /* * Create the appropriate control structures to manage -- cgit v1.2.1 From dd8ab953444798a5a34360f962bbbc42ba835af9 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Wed, 13 Jun 2012 09:55:11 +0000 Subject: tegra: enable bootz command bootz is just like bootm, except that it can boot a raw zImage, without requiring it to be wrapped inside a uImage. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- include/configs/tegra2-common.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h index f61fb5a581..680776270b 100644 --- a/include/configs/tegra2-common.h +++ b/include/configs/tegra2-common.h @@ -194,4 +194,5 @@ #define CONFIG_TEGRA_GPIO #define CONFIG_CMD_GPIO #define CONFIG_CMD_ENTERRCM +#define CONFIG_CMD_BOOTZ #endif /* __TEGRA2_COMMON_H */ -- cgit v1.2.1 From 63905f1616fc2f827e986d8e82a5a2b69f4a0e6a Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Wed, 13 Jun 2012 09:55:12 +0000 Subject: tegra: define fdt_load/fdt_high variables These variables act like loadaddr, but for a device tree image. Defining them in the environment allows boot scripts to be identical on Tegra20 and Tegra30, which have different memory base addresses, and hence need different values for these variables. Signed-off-by: Stephen Warren Signed-off-by: Tom Warren --- include/configs/tegra2-common-post.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/configs/tegra2-common-post.h b/include/configs/tegra2-common-post.h index 80d9c3500d..c21fc28dfe 100644 --- a/include/configs/tegra2-common-post.h +++ b/include/configs/tegra2-common-post.h @@ -142,6 +142,8 @@ #define CONFIG_EXTRA_ENV_SETTINGS \ TEGRA2_DEVICE_SETTINGS \ + "fdt_load=0x01000000\0" \ + "fdt_high=01100000\0" \ BOOTCMDS_COMMON #endif /* __TEGRA2_COMMON_POST_H */ -- cgit v1.2.1