[U-Boot] [PATCH 0/3] Add basic NVIDIA Tegra2 SoC support

This series of patches adds preliminary/baseline support for NVIDIA's Tegra2 Soc. Basic CPU (AVP), RAM and UART init are covered so that the system (Harmony and/or Seaboard) can boot to the U-Boot serial prompt.
Further support (for Coretex-A9 CPU(s), USB, SD/MMC, etc.) to follow.
Tom Warren (3): arm: Tegra2: Add generic Tegra2 SoC support arm: Tegra2: Add support for NVIDIA Harmony board arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
MAINTAINERS | 5 + arch/arm/cpu/armv7/tegra2/Makefile | 48 +++++ arch/arm/cpu/armv7/tegra2/board.c | 91 ++++++++++ arch/arm/cpu/armv7/tegra2/config.mk | 28 +++ arch/arm/cpu/armv7/tegra2/lowlevel_init.S | 66 +++++++ arch/arm/cpu/armv7/tegra2/sys_info.c | 35 ++++ arch/arm/cpu/armv7/tegra2/timer.c | 122 +++++++++++++ arch/arm/include/asm/arch-tegra2/clk_rst.h | 155 ++++++++++++++++ arch/arm/include/asm/arch-tegra2/pinmux.h | 52 ++++++ arch/arm/include/asm/arch-tegra2/pmc.h | 126 +++++++++++++ arch/arm/include/asm/arch-tegra2/sys_proto.h | 33 ++++ arch/arm/include/asm/arch-tegra2/tegra2.h | 56 ++++++ arch/arm/include/asm/arch-tegra2/uart.h | 45 +++++ arch/arm/include/asm/mach-types.h | 1 + board/tegra2/common/board.c | 242 ++++++++++++++++++++++++++ board/tegra2/common/board.h | 59 +++++++ board/tegra2/harmony/Makefile | 50 ++++++ board/tegra2/seaboard/Makefile | 50 ++++++ boards.cfg | 2 + common/serial.c | 3 +- include/configs/harmony.h | 48 +++++ include/configs/nv-common.h | 166 ++++++++++++++++++ include/configs/seaboard.h | 43 +++++ include/serial.h | 3 +- 24 files changed, 1527 insertions(+), 2 deletions(-) create mode 100644 arch/arm/cpu/armv7/tegra2/Makefile create mode 100644 arch/arm/cpu/armv7/tegra2/board.c create mode 100644 arch/arm/cpu/armv7/tegra2/config.mk create mode 100644 arch/arm/cpu/armv7/tegra2/lowlevel_init.S create mode 100644 arch/arm/cpu/armv7/tegra2/sys_info.c create mode 100644 arch/arm/cpu/armv7/tegra2/timer.c create mode 100644 arch/arm/include/asm/arch-tegra2/clk_rst.h create mode 100644 arch/arm/include/asm/arch-tegra2/pinmux.h create mode 100644 arch/arm/include/asm/arch-tegra2/pmc.h create mode 100644 arch/arm/include/asm/arch-tegra2/sys_proto.h create mode 100644 arch/arm/include/asm/arch-tegra2/tegra2.h create mode 100644 arch/arm/include/asm/arch-tegra2/uart.h create mode 100644 board/tegra2/common/board.c create mode 100644 board/tegra2/common/board.h create mode 100644 board/tegra2/harmony/Makefile create mode 100644 board/tegra2/seaboard/Makefile create mode 100644 include/configs/harmony.h create mode 100644 include/configs/nv-common.h create mode 100644 include/configs/seaboard.h

--- arch/arm/cpu/armv7/tegra2/Makefile | 48 +++++ arch/arm/cpu/armv7/tegra2/board.c | 91 ++++++++++ arch/arm/cpu/armv7/tegra2/config.mk | 28 +++ arch/arm/cpu/armv7/tegra2/lowlevel_init.S | 66 +++++++ arch/arm/cpu/armv7/tegra2/sys_info.c | 35 ++++ arch/arm/cpu/armv7/tegra2/timer.c | 122 +++++++++++++ arch/arm/include/asm/arch-tegra2/clk_rst.h | 155 ++++++++++++++++ arch/arm/include/asm/arch-tegra2/pinmux.h | 52 ++++++ arch/arm/include/asm/arch-tegra2/pmc.h | 126 +++++++++++++ arch/arm/include/asm/arch-tegra2/sys_proto.h | 33 ++++ arch/arm/include/asm/arch-tegra2/tegra2.h | 56 ++++++ arch/arm/include/asm/arch-tegra2/uart.h | 45 +++++ board/tegra2/common/board.c | 242 ++++++++++++++++++++++++++ board/tegra2/common/board.h | 59 +++++++ common/serial.c | 3 +- include/serial.h | 3 +- 16 files changed, 1162 insertions(+), 2 deletions(-) create mode 100644 arch/arm/cpu/armv7/tegra2/Makefile create mode 100644 arch/arm/cpu/armv7/tegra2/board.c create mode 100644 arch/arm/cpu/armv7/tegra2/config.mk create mode 100644 arch/arm/cpu/armv7/tegra2/lowlevel_init.S create mode 100644 arch/arm/cpu/armv7/tegra2/sys_info.c create mode 100644 arch/arm/cpu/armv7/tegra2/timer.c create mode 100644 arch/arm/include/asm/arch-tegra2/clk_rst.h create mode 100644 arch/arm/include/asm/arch-tegra2/pinmux.h create mode 100644 arch/arm/include/asm/arch-tegra2/pmc.h create mode 100644 arch/arm/include/asm/arch-tegra2/sys_proto.h create mode 100644 arch/arm/include/asm/arch-tegra2/tegra2.h create mode 100644 arch/arm/include/asm/arch-tegra2/uart.h create mode 100644 board/tegra2/common/board.c create mode 100644 board/tegra2/common/board.h
diff --git a/arch/arm/cpu/armv7/tegra2/Makefile b/arch/arm/cpu/armv7/tegra2/Makefile new file mode 100644 index 0000000..75fba0b --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/Makefile @@ -0,0 +1,48 @@ +# +# (C) Copyright 2010,2011 Nvidia Corporation. +# +# (C) Copyright 2000-2003 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 + +LIB = $(obj)lib$(SOC).o + +SOBJS := lowlevel_init.o +COBJS := sys_info.o board.o timer.o + +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS)) + +all: $(obj).depend $(LIB) + +$(LIB): $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/arch/arm/cpu/armv7/tegra2/board.c b/arch/arm/cpu/armv7/tegra2/board.c new file mode 100644 index 0000000..e180f05 --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/board.c @@ -0,0 +1,91 @@ +/* + * (C) Copyright 2010,2011 + * 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/sys_proto.h> +#include <asm/arch/tegra2.h> +#include <asm/arch/pmc.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* + * Boot ROM initializes the odmdata in APBDEV_PMC_SCRATCH20_0, + * so we are using this value to identify memory size. + */ + +static unsigned int query_sdram_size(void) +{ + pmc_ctlr *const pmc = (pmc_ctlr *)NV_PA_PMC_BASE; + u32 reg; + + reg = pmc->pmc_scratch20; + debug("pmc->pmc_scratch20 (ODMData) = 0x%08lX\n", reg); + + /* bits 31:28 in OdmData are used for RAM size */ + switch ((reg) >> 28) { + case 1: + return 0x10000000; /* 256 MB */ + case 2: + return 0x20000000; /* 512 MB */ + case 3: + default: + return 0x40000000; /* 1GB */ + } +} + +void s_init(void) +{ +#ifndef CONFIG_ICACHE_OFF + icache_enable(); +#endif + invalidate_dcache(); +} + +int dram_init(void) +{ + unsigned long rs; + + /* We do not initialise DRAM here. We just query the size */ + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; + gd->bd->bi_dram[0].size = gd->ram_size = query_sdram_size(); + + /* Now check it dynamically */ + rs = get_ram_size(CONFIG_SYS_SDRAM_BASE, gd->ram_size); + if (rs) { + printf("dynamic ram_size = %lu\n", rs); + gd->bd->bi_dram[0].size = gd->ram_size = rs; + } + return 0; +} + +#ifdef CONFIG_DISPLAY_BOARDINFO + +extern tegra2_sysinfo sysinfo; + +int checkboard(void) +{ + printf("Board: %s\n", sysinfo.board_string); + return 0; +} +#endif /* CONFIG_DISPLAY_BOARDINFO */ diff --git a/arch/arm/cpu/armv7/tegra2/config.mk b/arch/arm/cpu/armv7/tegra2/config.mk new file mode 100644 index 0000000..96c0795 --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/config.mk @@ -0,0 +1,28 @@ +# +# (C) Copyright 2010,2011 +# NVIDIA Corporation <www.nvidia.com> +# +# (C) Copyright 2002 +# Gary Jennejohn, DENX Software Engineering, garyj@denx.de +# +# 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 +# + +# Use ARMv4 for Tegra2 - initial code runs on the AVP, which is an ARM7TDI. +PLATFORM_CPPFLAGS += -march=armv4 diff --git a/arch/arm/cpu/armv7/tegra2/lowlevel_init.S b/arch/arm/cpu/armv7/tegra2/lowlevel_init.S new file mode 100644 index 0000000..c0e3aa1 --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/lowlevel_init.S @@ -0,0 +1,66 @@ +/* + * Board specific setup info + * + * (C) Copyright 2010,2011 + * 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 <config.h> +#include <version.h> + +_TEXT_BASE: + .word CONFIG_SYS_TEXT_BASE @ sdram load addr from config file + +.global invalidate_dcache +invalidate_dcache: + mov pc, lr + + + .align 5 +.global reset_cpu +reset_cpu: + ldr r1, rstctl @ get addr for global reset + @ reg + ldr r3, [r1] + orr r3, r3, #0x10 + str r3, [r1] @ force reset + mov r0, r0 +_loop_forever: + b _loop_forever +rstctl: + .word PRM_RSTCTRL + +.globl lowlevel_init +lowlevel_init: + ldr sp, SRAM_STACK + str ip, [sp] + mov ip, lr + bl s_init @ go setup pll, mux & memory + ldr ip, [sp] + mov lr, ip + + mov pc, lr @ back to arch calling code + + @ the literal pools origin + .ltorg + +SRAM_STACK: + .word LOW_LEVEL_SRAM_STACK diff --git a/arch/arm/cpu/armv7/tegra2/sys_info.c b/arch/arm/cpu/armv7/tegra2/sys_info.c new file mode 100644 index 0000000..6d11dc1 --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/sys_info.c @@ -0,0 +1,35 @@ +/* + * (C) Copyright 2010,2011 + * 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> + +#ifdef CONFIG_DISPLAY_CPUINFO +/* Print CPU information */ +int print_cpuinfo(void) +{ + puts("TEGRA2\n"); + + /* TBD: Add printf of major/minor rev info, stepping, etc. */ + return 0; +} +#endif /* CONFIG_DISPLAY_CPUINFO */ diff --git a/arch/arm/cpu/armv7/tegra2/timer.c b/arch/arm/cpu/armv7/tegra2/timer.c new file mode 100644 index 0000000..858af0f --- /dev/null +++ b/arch/arm/cpu/armv7/tegra2/timer.c @@ -0,0 +1,122 @@ +/* + * (C) Copyright 2010,2011 + * NVIDIA Corporation <www.nvidia.com> + * + * (C) Copyright 2008 + * Texas Instruments + * + * Richard Woodruff r-woodruff2@ti.com + * Syed Moahmmed Khasim khasim@ti.com + * + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger mgroeger@sysgo.de + * Alex Zuepke azu@sysgo.de + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, garyj@denx.de + * + * 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/tegra2.h> + +DECLARE_GLOBAL_DATA_PTR; + +static timerus_t *timer_base = (timerus_t *)NV_PA_TMRUS_BASE; + +/* counter runs at 1MHz */ +#define TIMER_CLK (1000000) +#define TIMER_LOAD_VAL 0xffffffff + +/* timer without interrupts */ +void reset_timer(void) +{ + reset_timer_masked(); +} + +ulong get_timer(ulong base) +{ + return get_timer_masked() - base; +} + +void set_timer(ulong t) +{ + gd->tbl = t; +} + +/* delay x useconds */ +void __udelay(unsigned long usec) +{ + long tmo = usec * (TIMER_CLK / 1000) / 1000; + unsigned long now, last = readl(&timer_base->cntr_1us); + + while (tmo > 0) { + now = readl(&timer_base->cntr_1us); + if (last > now) /* count up timer overflow */ + tmo -= TIMER_LOAD_VAL - last + now; + else + tmo -= now - last; + last = now; + } +} + +void reset_timer_masked(void) +{ + /* reset time, capture current incrementer value time */ + gd->lastinc = readl(&timer_base->cntr_1us) / (TIMER_CLK/CONFIG_SYS_HZ); + gd->tbl = 0; /* start "advancing" time stamp from 0 */ +} + +ulong get_timer_masked(void) +{ + ulong now; + + /* current tick value */ + now = readl(&timer_base->cntr_1us) / (TIMER_CLK / CONFIG_SYS_HZ); + + if (now >= gd->lastinc) /* normal mode (non roll) */ + /* move stamp forward with absolute diff ticks */ + gd->tbl += (now - gd->lastinc); + else /* we have rollover of incrementer */ + gd->tbl += ((TIMER_LOAD_VAL / (TIMER_CLK / CONFIG_SYS_HZ)) + - gd->lastinc) + now; + gd->lastinc = now; + return gd->tbl; +} + +/* + * This function is derived from PowerPC code (read timebase as long long). + * On ARM it just returns the timer value. + */ +unsigned long long get_ticks(void) +{ + return get_timer(0); +} + +/* + * This function is derived from PowerPC code (timebase clock frequency). + * On ARM it returns the number of timer ticks per second. + */ +ulong get_tbclk(void) +{ + return CONFIG_SYS_HZ; +} diff --git a/arch/arm/include/asm/arch-tegra2/clk_rst.h b/arch/arm/include/asm/arch-tegra2/clk_rst.h new file mode 100644 index 0000000..c3ed30e --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/clk_rst.h @@ -0,0 +1,155 @@ +/* + * (C) Copyright 2010,2011 + * 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 _CLK_RST_H_ +#define _CLK_RST_H_ + +/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */ + +typedef struct clk_rst_ctlr { + vol_uint crc_rst_src; /* _RST_SOURCE_0, 0x00*/ + vol_uint crc_rst_dev_l; /* _RST_DEVICES_L_0, 0x04*/ + vol_uint crc_rst_dev_h; /* _RST_DEVICES_H_0, 0x08*/ + vol_uint crc_rst_dev_u; /* _RST_DEVICES_U_0, 0x0C*/ + vol_uint crc_clk_out_enb_l; /* _CLK_OUT_ENB_L_0, 0x10*/ + vol_uint crc_clk_out_enb_h; /* _CLK_OUT_ENB_H_0, 0x14*/ + vol_uint crc_clk_out_enb_u; /* _CLK_OUT_ENB_U_0, 0x18*/ + vol_uint crc_reserved0; /* reserved_0, 0x1c*/ + vol_uint crc_cclk_brst_pol; /* _CCLK_BURST_POLICY_0,0x20*/ + vol_uint crc_super_cclk_div; /* _SUPER_CCLK_DIVIDER_0,0x24*/ + vol_uint crc_sclk_brst_pol; /* _SCLK_BURST_POLICY_0, 0x28*/ + vol_uint crc_super_sclk_div; /* _SUPER_SCLK_DIVIDER_0,0x2C*/ + vol_uint crc_clk_sys_rate; /* _CLK_SYSTEM_RATE_0, 0x30*/ + vol_uint crc_prog_dly_clk; /* _PROG_DLY_CLK_0, 0x34*/ + vol_uint crc_aud_sync_clk_rate; /* _AUDIO_SYNC_CLK_RATE_0,0x38*/ + vol_uint crc_reserved1; /* reserved_1, 0x3c*/ + vol_uint crc_cop_clk_skip_plcy; /* _COP_CLK_SKIP_POLICY_0,0x40*/ + vol_uint crc_clk_mask_arm; /* _CLK_MASK_ARM_0, 0x44*/ + vol_uint crc_misc_clk_enb; /* _MISC_CLK_ENB_0, 0x48*/ + vol_uint crc_clk_cpu_cmplx; /* _CLK_CPU_CMPLX_0, 0x4C*/ + vol_uint crc_osc_ctrl; /* _OSC_CTRL_0, 0x50*/ + vol_uint crc_pll_lfsr; /* _PLL_LFSR_0, 0x54*/ + vol_uint crc_osc_freq_det; /* _OSC_FREQ_DET_0, 0x58*/ + vol_uint crc_osc_freq_det_stat; /* _OSC_FREQ_DET_STATUS_0,0x5C*/ + vol_uint crc_reserved2[8]; /* reserved_2[8], 0x60-7C*/ + + vol_uint crc_pllc_base; /* _PLLC_BASE_0, 0x80*/ + vol_uint crc_pllc_out; /* _PLLC_OUT_0, 0x84*/ + vol_uint crc_reserved3; /* reserved_3, 0x88*/ + vol_uint crc_pllc_misc; /* _PLLC_MISC_0, 0x8C*/ + + vol_uint crc_pllm_base; /* _PLLM_BASE_0, 0x90*/ + vol_uint crc_pllm_out; /* _PLLM_OUT_0, 0x94*/ + vol_uint crc_reserved4; /* reserved_4, 0x98*/ + vol_uint crc_pllm_misc; /* _PLLM_MISC_0, 0x9C*/ + + vol_uint crc_pllp_base; /* _PLLP_BASE_0, 0xA0*/ + vol_uint crc_pllp_outa; /* _PLLP_OUTA_0, 0xA4*/ + vol_uint crc_pllp_outb; /* _PLLP_OUTB_0, 0xA8*/ + vol_uint crc_pllp_misc; /* _PLLP_MISC_0, 0xAC*/ + + vol_uint crc_plla_base; /* _PLLA_BASE_0, 0xB0*/ + vol_uint crc_plla_out; /* _PLLA_OUT_0, 0xB4*/ + vol_uint crc_reserved5; /* reserved_5, 0xB8*/ + vol_uint crc_plla_misc; /* _PLLA_MISC_0, 0xBC*/ + + vol_uint crc_pllu_base; /* _PLLU_BASE_0, 0xC0*/ + vol_uint crc_reserved6; /* _reserved_6, 0xC4*/ + vol_uint crc_reserved7; /* _reserved_7, 0xC8*/ + vol_uint crc_pllu_misc; /* _PLLU_MISC_0, 0xCC*/ + + vol_uint crc_plld_base; /* _PLLD_BASE_0, 0xD0*/ + vol_uint crc_reserved8; /* _reserved_8, 0xD4*/ + vol_uint crc_reserved9; /* _reserved_9, 0xD8*/ + vol_uint crc_plld_misc; /* _PLLD_MISC_0, 0xDC*/ + + vol_uint crc_pllx_base; /* _PLLX_BASE_0, 0xE0*/ + vol_uint crc_pllx_misc; /* _PLLX_MISC_0, 0xE4*/ + + vol_uint crc_plle_base; /* _PLLE_BASE_0, 0xE8*/ + vol_uint crc_plle_misc; /* _PLLE_MISC_0, 0xEC*/ + + vol_uint crc_plls_base; /* _PLLS_BASE_0, 0xF0*/ + vol_uint crc_plls_misc; /* _PLLS_MISC_0, 0xF4*/ + vol_uint crc_reserved10; /* _reserved_10, 0xF8*/ + vol_uint crc_reserved11; /* _reserved_11, 0xFC*/ + + vol_uint crc_clk_src_i2s1; /*_I2S1_0, 0x100*/ + vol_uint crc_clk_src_i2s2; /*_I2S2_0, 0x104*/ + vol_uint crc_clk_src_spdif_out; /*_SPDIF_OUT_0, 0x108*/ + vol_uint crc_clk_src_spdif_in; /*_SPDIF_IN_0, 0x10C*/ + vol_uint crc_clk_src_pwm; /*_PWM_0, 0x110*/ + vol_uint crc_clk_src_spi1; /*_SPI1_0, 0x114*/ + vol_uint crc_clk_src_sbc2; /*_SBC2_0, 0x118*/ + vol_uint crc_clk_src_sbc3; /*_SBC3_0, 0x11C*/ + vol_uint crc_clk_src_xio; /*_XIO_0, 0x120*/ + vol_uint crc_clk_src_i2c1; /*_I2C1_0, 0x124*/ + vol_uint crc_clk_src_dvc_i2c; /*_DVC_I2C_0, 0x128*/ + vol_uint crc_clk_src_twc; /*_TWC_0, 0x12C*/ + vol_uint crc_reserved12; /* 0x130*/ + vol_uint crc_clk_src_sbc1; /*_SBC1_0, 0x134*/ + vol_uint crc_clk_src_disp1; /*_DISP1_0, 0x138*/ + vol_uint crc_clk_src_disp2; /*_DISP2_0, 0x13C*/ + vol_uint crc_clk_src_cve; /*_CVE_0, 0x140*/ + vol_uint crc_clk_src_ide; /*_IDE_0, 0x144*/ + vol_uint crc_clk_src_vi; /*_VI_0, 0x148*/ + vol_uint crc_reserved13; /* 0x14c*/ + vol_uint crc_clk_src_sdmmc1; /*_SDMMC1_0, 0x150*/ + vol_uint crc_clk_src_sdmmc2; /*_SDMMC2_0, 0x154*/ + vol_uint crc_clk_src_g3d; /*_G3D_0, 0x158*/ + vol_uint crc_clk_src_g2d; /*_G2D_0, 0x15C*/ + vol_uint crc_clk_src_ndflash; /*_NDFLASH_0, 0x160*/ + vol_uint crc_clk_src_sdmmc4; /*_SDMMC4_0, 0x164*/ + vol_uint crc_clk_src_vfir; /*_VFIR_0, 0x168*/ + vol_uint crc_clk_src_epp; /*_EPP_0, 0x16C*/ + vol_uint crc_clk_src_mp3; /*_MPE_0, 0x170*/ + vol_uint crc_clk_src_mipi; /*_MIPI_0, 0x174*/ + vol_uint crc_clk_src_uarta; /*_UARTA_0, 0x178*/ + vol_uint crc_clk_src_uartb; /*_UARTB_0, 0x17C*/ + vol_uint crc_clk_src_host1x; /*_HOST1X_0, 0x180*/ + vol_uint crc_reserved14; /* 0x184*/ + vol_uint crc_clk_src_tvo; /*_TVO_0, 0x188*/ + vol_uint crc_clk_src_hdmi; /*_HDMI_0, 0x18C*/ + vol_uint crc_reserved15; /* 0x190*/ + vol_uint crc_clk_src_tvdac; /*_TVDAC_0, 0x194*/ + vol_uint crc_clk_src_i2c2; /*_I2C2_0, 0x198*/ + vol_uint crc_clk_src_emc; /*_EMC_0, 0x19C*/ + vol_uint crc_clk_src_uartc; /*_UARTC_0, 0x1A0*/ + vol_uint crc_reserved16; /* 0x1a4*/ + vol_uint crc_clk_src_vi_sensor; /*_VI_SENSOR_0, 0x1A8*/ + vol_uint crc_reserved17; /* 0x1ac*/ + vol_uint crc_reserved18; /* 0x1b0*/ + vol_uint crc_clk_src_sbc4; /*_SBC4_0, 0x1B4*/ + vol_uint crc_clk_src_i2c3; /*_I2C3_0, 0x1B8*/ + vol_uint crc_clk_src_sdmmc3; /*_SDMMC3_0, 0x1BC*/ + vol_uint crc_clk_src_uartd; /*_UARTD_0, 0x1C0*/ + vol_uint crc_clk_src_uarte; /*_UARTE_0, 0x1C4*/ + vol_uint crc_clk_src_vde; /*_VDE_0, 0x1C8*/ + vol_uint crc_clk_src_owr; /*_OWR_0, 0x1CC*/ + vol_uint crc_clk_src_nor; /*_NOR_0, 0x1D0*/ + vol_uint crc_clk_src_csite; /*_CSITE_0, 0x1D4*/ + vol_uint crc_reserved19[9]; /* 0x1d8-1F8*/ + vol_uint crc_clk_src_osc; /*_OSC_0, 0x1FC*/ +} clk_rst_ctlr; + +#endif /* CLK_RST_H */ diff --git a/arch/arm/include/asm/arch-tegra2/pinmux.h b/arch/arm/include/asm/arch-tegra2/pinmux.h new file mode 100644 index 0000000..9dd009d --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/pinmux.h @@ -0,0 +1,52 @@ +/* + * (C) Copyright 2010,2011 + * 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_H_ +#define _PINMUX_H_ + +/* APB MISC Pin Mux and Tristate (APB_MISC_PP_) registers */ + +typedef struct pinmux_tri_ctlr { + u32 pmt_reserved0; /* ABP_MISC_PP_ reserved offset 00 */ + u32 pmt_reserved1; /* ABP_MISC_PP_ reserved offset 04 */ + vol_uint pmt_strap_opt_a; /* _STRAPPING_OPT_A_0, offset 08 */ + u32 pmt_reserved2; /* ABP_MISC_PP_ reserved offset 0C */ + u32 pmt_reserved3; /* ABP_MISC_PP_ reserved offset 10 */ + vol_uint pmt_tri_a; /* _TRI_STATE_REG_A_0, offset 14 */ + vol_uint pmt_tri_b; /* _TRI_STATE_REG_B_0, offset 18 */ + vol_uint pmt_tri_c; /* _TRI_STATE_REG_C_0, offset 1C */ + vol_uint pmt_tri_d; /* _TRI_STATE_REG_D_0, offset 20 */ + vol_uint pmt_cfg_ctl; /* _CONFIG_CTL_0, offset 24 */ + + u32 pmt_reserved[22]; /* ABP_MISC_PP_ reserved offs 28-7C */ + + vol_uint pmt_ctl_a; /* _PIN_MUX_CTL_A_0, offset 80 */ + vol_uint pmt_ctl_b; /* _PIN_MUX_CTL_B_0, offset 84 */ + vol_uint pmt_ctl_c; /* _PIN_MUX_CTL_C_0, offset 88 */ + vol_uint pmt_ctl_d; /* _PIN_MUX_CTL_D_0, offset 8C */ + vol_uint pmt_ctl_e; /* _PIN_MUX_CTL_E_0, offset 90 */ + vol_uint pmt_ctl_f; /* _PIN_MUX_CTL_F_0, offset 94 */ + vol_uint pmt_ctl_g; /* _PIN_MUX_CTL_G_0, offset 98 */ +} pinmux_tri_ctlr; + +#endif /* PINMUX_H */ diff --git a/arch/arm/include/asm/arch-tegra2/pmc.h b/arch/arm/include/asm/arch-tegra2/pmc.h new file mode 100644 index 0000000..9f8551f --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/pmc.h @@ -0,0 +1,126 @@ +/* + * (C) Copyright 2010,2011 + * 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 _PMC_H_ +#define _PMC_H_ +typedef unsigned int volatile vol_uint; + +/* Power Management Controller (APBDEV_PMC_) registers */ + +typedef struct pmc_ctlr { + vol_uint pmc_cntrl; /* _CNTRL_0, offset 00 */ + vol_uint pmc_sec_disable; /* _SEC_DISABLE_0, offset 04 */ + vol_uint pmc_pmc_swrst; /* _PMC_SWRST_0, offset 08 */ + vol_uint pmc_wake_mask; /* _WAKE_MASK_0, offset 0C */ + vol_uint pmc_wake_lvl; /* _WAKE_LVL_0, offset 10 */ + vol_uint pmc_wake_status; /* _WAKE_STATUS_0, offset 14 */ + vol_uint pmc_sw_wake_status; /* _SW_WAKE_STATUS_0, offset 18 */ + vol_uint pmc_dpd_pads_oride; /* _DPD_PADS_ORIDE_0, offset 1C */ + vol_uint pmc_dpd_sample; /* _DPD_PADS_SAMPLE_0, offset 20 */ + vol_uint pmc_dpd_enable; /* _DPD_PADS_ENABLE_0, offset 24 */ + vol_uint pmc_pwrgate_timer_off; /* _PWRGATE_TIMER_OFF_0, offset 28 */ + vol_uint pmc_pwrgate_timer_on; /* _PWRGATE_TIMER_ON_0, offset 2C */ + vol_uint pmc_pwrgate_toggle; /* _PWRGATE_TOGGLE_0, offset 30 */ + vol_uint pmc_remove_clamping; /* _REMOVE_CLAMPING_CMD_0, offset 34 */ + vol_uint pmc_pwrgate_status; /* _PWRGATE_STATUS_0, offset 38 */ + vol_uint pmc_pwrgood_timer; /* _PWRGOOD_TIMER_0, offset 3C */ + vol_uint pmc_blink_timer; /* _BLINK_TIMER_0, offset 40 */ + vol_uint pmc_no_iopower; /* _NO_IOPOWER_0, offset 44 */ + vol_uint pmc_pwr_det; /* _PWR_DET_0, offset 48 */ + vol_uint pmc_pwr_det_latch; /* _PWR_DET_LATCH_0, offset 4C */ + + vol_uint pmc_scratch0; /* _SCRATCH0_0, offset 50 */ + vol_uint pmc_scratch1; /* _SCRATCH1_0, offset 54 */ + vol_uint pmc_scratch2; /* _SCRATCH2_0, offset 58 */ + vol_uint pmc_scratch3; /* _SCRATCH3_0, offset 5C */ + vol_uint pmc_scratch4; /* _SCRATCH4_0, offset 60 */ + vol_uint pmc_scratch5; /* _SCRATCH5_0, offset 64 */ + vol_uint pmc_scratch6; /* _SCRATCH6_0, offset 68 */ + vol_uint pmc_scratch7; /* _SCRATCH7_0, offset 6C */ + vol_uint pmc_scratch8; /* _SCRATCH8_0, offset 70 */ + vol_uint pmc_scratch9; /* _SCRATCH9_0, offset 74 */ + vol_uint pmc_scratch10; /* _SCRATCH10_0, offset 78 */ + vol_uint pmc_scratch11; /* _SCRATCH11_0, offset 7C */ + vol_uint pmc_scratch12; /* _SCRATCH12_0, offset 80 */ + vol_uint pmc_scratch13; /* _SCRATCH13_0, offset 84 */ + vol_uint pmc_scratch14; /* _SCRATCH14_0, offset 88 */ + vol_uint pmc_scratch15; /* _SCRATCH15_0, offset 8C */ + vol_uint pmc_scratch16; /* _SCRATCH16_0, offset 90 */ + vol_uint pmc_scratch17; /* _SCRATCH17_0, offset 94 */ + vol_uint pmc_scratch18; /* _SCRATCH18_0, offset 98 */ + vol_uint pmc_scratch19; /* _SCRATCH19_0, offset 9C */ + vol_uint pmc_scratch20; /* _SCRATCH20_0, offset A0 */ + vol_uint pmc_scratch21; /* _SCRATCH21_0, offset A4 */ + vol_uint pmc_scratch22; /* _SCRATCH22_0, offset A8 */ + vol_uint pmc_scratch23; /* _SCRATCH23_0, offset AC */ + + vol_uint pmc_secure_scratch0; /* _SECURE_SCRATCH0_0, offset B0 */ + vol_uint pmc_secure_scratch1; /* _SECURE_SCRATCH1_0, offset B4 */ + vol_uint pmc_secure_scratch2; /* _SECURE_SCRATCH2_0, offset B8 */ + vol_uint pmc_secure_scratch3; /* _SECURE_SCRATCH3_0, offset BC */ + vol_uint pmc_secure_scratch4; /* _SECURE_SCRATCH4_0, offset C0 */ + vol_uint pmc_secure_scratch5; /* _SECURE_SCRATCH5_0, offset C4 */ + + vol_uint pmc_cpupwrgood_timer; /* _CPUPWRGOOD_TIMER_0, offset C8 */ + vol_uint pmc_cpupwroff_timer; /* _CPUPWROFF_TIMER_0, offset CC */ + vol_uint pmc_pg_mask; /* _PG_MASK_0, offset D0 */ + vol_uint pmc_pg_mask_1; /* _PG_MASK_1_0, offset D4 */ + vol_uint pmc_auto_wake_lvl; /* _AUTO_WAKE_LVL_0, offset D8 */ + vol_uint pmc_auto_wake_lvl_mask; /* _AUTO_WAKE_LVL_MASK_0, offset DC */ + vol_uint pmc_wake_delay; /* _WAKE_DELAY_0, offset E0 */ + vol_uint pmc_pwr_det_val; /* _PWR_DET_VAL_0, offset E4 */ + vol_uint pmc_ddr_pwr; /* _DDR_PWR_0, offset E8 */ + vol_uint pmc_usb_debounce_del; /* _USB_DEBOUNCE_DEL_0, offset EC */ + vol_uint pmc_usb_ao; /* _USB_AO_0, offset F0 */ + vol_uint pmc_crypto_op; /* _CRYPTO_OP__0, offset F4 */ + vol_uint pmc_pllp_wb0_override; /* _PLLP_WB0_OVERRIDE_0, offset F8 */ + + vol_uint pmc_scratch24; /* _SCRATCH24_0, offset FC */ + vol_uint pmc_scratch25; /* _SCRATCH24_0, offset 100 */ + vol_uint pmc_scratch26; /* _SCRATCH24_0, offset 104 */ + vol_uint pmc_scratch27; /* _SCRATCH24_0, offset 108 */ + vol_uint pmc_scratch28; /* _SCRATCH24_0, offset 10C */ + vol_uint pmc_scratch29; /* _SCRATCH24_0, offset 110 */ + vol_uint pmc_scratch30; /* _SCRATCH24_0, offset 114 */ + vol_uint pmc_scratch31; /* _SCRATCH24_0, offset 118 */ + vol_uint pmc_scratch32; /* _SCRATCH24_0, offset 11C */ + vol_uint pmc_scratch33; /* _SCRATCH24_0, offset 120 */ + vol_uint pmc_scratch34; /* _SCRATCH24_0, offset 124 */ + vol_uint pmc_scratch35; /* _SCRATCH24_0, offset 128 */ + vol_uint pmc_scratch36; /* _SCRATCH24_0, offset 12C */ + vol_uint pmc_scratch37; /* _SCRATCH24_0, offset 130 */ + vol_uint pmc_scratch38; /* _SCRATCH24_0, offset 134 */ + vol_uint pmc_scratch39; /* _SCRATCH24_0, offset 138 */ + vol_uint pmc_scratch40; /* _SCRATCH24_0, offset 13C */ + vol_uint pmc_scratch41; /* _SCRATCH24_0, offset 140 */ + vol_uint pmc_scratch42; /* _SCRATCH24_0, offset 144 */ + + vol_uint pmc_bo_mirror0; /* _BOUNDOUT_MIRROR0_0, offset 148 */ + vol_uint pmc_bo_mirror1; /* _BOUNDOUT_MIRROR1_0, offset 14C */ + vol_uint pmc_bo_mirror2; /* _BOUNDOUT_MIRROR2_0, offset 150 */ + vol_uint pmc_sys_33v_en; /* _SYS_33V_EN_0, offset 154 */ + vol_uint pmc_bo_mirror_access; /* _BOUNDOUT_MIRROR_ACCESS_0, off158 */ + vol_uint pmc_gate; /* _GATE_0, offset 15C */ +} pmc_ctlr; + +#endif /* PMC_H */ diff --git a/arch/arm/include/asm/arch-tegra2/sys_proto.h b/arch/arm/include/asm/arch-tegra2/sys_proto.h new file mode 100644 index 0000000..70e63a8 --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/sys_proto.h @@ -0,0 +1,33 @@ +/* + * (C) Copyright 2010,2011 + * 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 _SYS_PROTO_H_ +#define _SYS_PROTO_H_ + +typedef struct { + char *board_string; +} tegra2_sysinfo; + +void invalidate_dcache(void); + +#endif diff --git a/arch/arm/include/asm/arch-tegra2/tegra2.h b/arch/arm/include/asm/arch-tegra2/tegra2.h new file mode 100644 index 0000000..ebe56f2 --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/tegra2.h @@ -0,0 +1,56 @@ +/* + * (C) Copyright 2010,2011 + * 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 _TEGRA2_H_ +#define _TEGRA2_H_ + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#define NV_PA_SDRAM_BASE 0x00000000 +#define NV_PA_TMRUS_BASE 0x60005010 +#define NV_PA_CLK_RST_BASE 0x60006000 +#define NV_PA_APB_MISC_BASE 0x70000000 +#define NV_PA_APB_UARTA_BASE (NV_PA_APB_MISC_BASE + 0x6000) +#define NV_PA_APB_UARTB_BASE (NV_PA_APB_MISC_BASE + 0x6040) +#define NV_PA_APB_UARTC_BASE (NV_PA_APB_MISC_BASE + 0x6200) +#define NV_PA_APB_UARTD_BASE (NV_PA_APB_MISC_BASE + 0x6300) +#define NV_PA_APB_UARTE_BASE (NV_PA_APB_MISC_BASE + 0x6400) +#define NV_PA_PMC_BASE 0x7000E400 + +#define TEGRA2_SDRC_CS0 NV_PA_SDRAM_BASE +#define LOW_LEVEL_SRAM_STACK 0x4000FFFC + +#ifndef __ASSEMBLY__ +typedef volatile struct timerus { + unsigned int cntr_1us; +} timerus_t; +#else /* __ASSEMBLY__ */ +#define PRM_RSTCTRL NV_PA_PMC_BASE +#endif + +#endif /* TEGRA2_H */ diff --git a/arch/arm/include/asm/arch-tegra2/uart.h b/arch/arm/include/asm/arch-tegra2/uart.h new file mode 100644 index 0000000..99f83a6 --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/uart.h @@ -0,0 +1,45 @@ +/* + * (C) Copyright 2010,2011 + * 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 _UART_H_ +#define _UART_H_ + +/* UART registers */ + +typedef struct uart_ctlr { + vol_uint uart_thr_dlab_0; /* UART_THR_DLAB_0_0, offset 00 */ + vol_uint uart_ier_dlab_0; /* UART_IER_DLAB_0_0, offset 04 */ + vol_uint uart_iir_fcr; /* UART_IIR_FCR_0, offset 08 */ + vol_uint uart_lcr; /* UART_LCR_0, offset 0C */ + vol_uint uart_mcr; /* UART_MCR_0, offset 10 */ + vol_uint uart_lsr; /* UART_LSR_0, offset 14 */ + vol_uint uart_msr; /* UART_MSR_0, offset 18 */ + vol_uint uart_spr; /* UART_SPR_0, offset 1C */ + vol_uint uart_irda_csr; /* UART_IRDA_CSR_0, offset 20 */ + vol_uint uart_reserved[6]; /* Reserved, unused */ + vol_uint uart_asr; /* UART_ASR_0, offset 3C */ +} uart_ctlr; + +#define LSR_RDR (1 << 0) + +#endif /* UART_H */ diff --git a/board/tegra2/common/board.c b/board/tegra2/common/board.c new file mode 100644 index 0000000..1132f89 --- /dev/null +++ b/board/tegra2/common/board.c @@ -0,0 +1,242 @@ +/* + * (C) Copyright 2010,2011 + * 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 <nand.h> +#include <asm/io.h> +#include <asm/mach-types.h> +#include <asm/arch/tegra2.h> +#include <asm/arch/sys_proto.h> +#include "board.h" + +DECLARE_GLOBAL_DATA_PTR; + +const tegra2_sysinfo sysinfo = { + CONFIG_TEGRA2_BOARD_STRING +}; + +/* + * Routine: board_init + * Description: Early hardware init. + */ +int board_init(void) +{ + /* boot param addr */ + gd->bd->bi_boot_params = (NV_PA_SDRAM_BASE + 0x100); + /* board id for Linux */ + gd->bd->bi_arch_number = CONFIG_MACH_TYPE; + + return 0; +} + +/* + * Routine: timer_init + * Description: init the timestamp and lastinc value + */ +int timer_init(void) +{ + reset_timer(); + return 0; +} + +/* + * Routine: uart_clock_init + * Description: init the PLL and clock for the UART in uart_num + */ +void uart_clock_init(int uart_num) +{ + clk_rst_ctlr *const clkrst = (clk_rst_ctlr *)NV_PA_CLK_RST_BASE; + static int pllp_init_done; + u32 reg; + + if (!pllp_init_done) { + + /* Override pllp setup for 216MHz operation. */ + reg = (PLL_BYPASS | PLL_BASE_OVRRIDE | PLL_DIVP); + reg |= (((NVRM_PLLP_FIXED_FREQ_KHZ/500) << 8) | PLL_DIVM); + clkrst->crc_pllp_base = reg; + + reg |= PLL_ENABLE; + clkrst->crc_pllp_base = reg; + + reg &= ~PLL_BYPASS; + clkrst->crc_pllp_base = reg; + + pllp_init_done++; + } + + /* Now do the UART reset/clock enable based on uart_num */ + + if (uart_num == UART_D) { + + /* Assert Reset to UART */ + reg = clkrst->crc_rst_dev_u; + reg |= SWR_UARTD_RST; /* SWR_UARTD_RST = 1 */ + clkrst->crc_rst_dev_u = reg; + + /* Enable clk to UART */ + reg = clkrst->crc_clk_out_enb_u; + reg |= CLK_ENB_UARTD; /* CLK_ENB_UARTD = 1 */ + clkrst->crc_clk_out_enb_u = reg; + + /* Enable pllp_out0 to UART */ + reg = clkrst->crc_clk_src_uartd; + reg &= 0x3FFFFFFF; /* UARTD_CLK_SRC = 00, PLLP_OUT0 */ + clkrst->crc_clk_src_uartd = reg; + + /* wait for 2us */ + udelay(2); + + /* De-assert reset to UART */ + reg = clkrst->crc_rst_dev_u; + reg &= ~SWR_UARTD_RST; /* SWR_UARTD_RST = 0 */ + clkrst->crc_rst_dev_u = reg; + + } else if (uart_num == UART_A) { + + /* Assert Reset to UART */ + reg = clkrst->crc_rst_dev_l; + reg |= SWR_UARTA_RST; /* SWR_UARTA_RST = 1 */ + clkrst->crc_rst_dev_l = reg; + + /* Enable clk to UART */ + reg = clkrst->crc_clk_out_enb_l; + reg |= CLK_ENB_UARTA; /* CLK_ENB_UARTA = 1 */ + clkrst->crc_clk_out_enb_l = reg; + + /* Enable pllp_out0 to UART */ + reg = clkrst->crc_clk_src_uarta; + reg &= 0x3FFFFFFF; /* UARTA_CLK_SRC = 00, PLLP_OUT0 */ + clkrst->crc_clk_src_uarta = reg; + + /* wait for 2us */ + udelay(2); + + /* De-assert reset to UART */ + reg = clkrst->crc_rst_dev_l; + reg &= ~SWR_UARTA_RST; /* SWR_UARTA_RST = 0 */ + clkrst->crc_rst_dev_l = reg; + + } +} + +/* + * Routine: pin_mux_uart + * Description: setup the pin muxes/tristate values for UART based on uart_num + */ +void pin_mux_uart(int uart_num) +{ + pinmux_tri_ctlr *const pmt = (pinmux_tri_ctlr *)NV_PA_APB_MISC_BASE; + u32 reg; + + if (uart_num == UART_D) { + + reg = pmt->pmt_ctl_b; + reg &= 0xFFFFFFF3; /* GMC_SEL [3:2] = 00, UARTD */ + pmt->pmt_ctl_b = reg; + + reg = pmt->pmt_tri_a; + reg &= ~Z_GMC; /* Z_GMC = normal (0) */ + pmt->pmt_tri_a = reg; + + } else if (uart_num == UART_A) { + + reg = pmt->pmt_ctl_c; + reg &= 0xFFF0FFFF; /* IRRX_/IRTX_SEL [19:16] = 00 UARTA */ + pmt->pmt_ctl_c = reg; + + reg = pmt->pmt_tri_a; + reg &= ~Z_IRRX; /* Z_IRRX = normal (0) */ + reg &= ~Z_IRTX; /* Z_IRTX = normal (0) */ + pmt->pmt_tri_a = reg; + } +} + +void do_uart(uart_ctlr *u) +{ + u32 reg; + + /* Prepare the divisor value */ + reg = NVRM_PLLP_FIXED_FREQ_KHZ * 1000 / NV_DEFAULT_DEBUG_BAUD / 16; + + /* Set up UART parameters */ + u->uart_lcr = 0x80; + u->uart_thr_dlab_0 = reg; + u->uart_ier_dlab_0 = 0; + u->uart_lcr = 0; + u->uart_iir_fcr = 0x37; + u->uart_ier_dlab_0 = 0; + u->uart_lcr = 3; /* 8N1 */ + u->uart_mcr = 2; + u->uart_msr = 0; + u->uart_spr = 0; + u->uart_irda_csr = 0; + u->uart_asr = 0; + u->uart_iir_fcr = 0x31; + + /* Flush any old characters out of the RX FIFO */ + reg = u->uart_lsr; + + while (reg & LSR_RDR) { + reg = u->uart_thr_dlab_0; + reg = u->uart_lsr; + } +} + +/* + * Routine: init_uart + * Description: init the UART clocks, muxes, and baudrate/parity/etc. + */ +void init_uart(int uart_num) +{ + if (uart_num == UART_A) { + uart_ctlr *const uart = (uart_ctlr *)NV_PA_APB_UARTA_BASE; + + uart_clock_init(UART_A); + + /* Enable UARTA - uses config 0 */ + pin_mux_uart(UART_A); + + do_uart(uart); + + } else if (uart_num == UART_D) { + uart_ctlr *const uart = (uart_ctlr *)NV_PA_APB_UARTD_BASE; + + uart_clock_init(UART_D); + + /* Enable UARTD - uses config 0 */ + pin_mux_uart(UART_D); + + do_uart(uart); + } +} + +void uart_init(void) +{ +#if (CONFIG_TEGRA2_ENABLE_UARTA) + init_uart(UART_A); +#endif +#if (CONFIG_TEGRA2_ENABLE_UARTD) + init_uart(UART_D); +#endif +} diff --git a/board/tegra2/common/board.h b/board/tegra2/common/board.h new file mode 100644 index 0000000..60525a8 --- /dev/null +++ b/board/tegra2/common/board.h @@ -0,0 +1,59 @@ +/* + * (C) Copyright 2010,2011 + * 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 _COMMON_BOARD_H_ +#define _COMMON_BOARD_H_ + +typedef unsigned int volatile vol_uint; + +#include <asm/arch/clk_rst.h> +#include <asm/arch/pinmux.h> +#include <asm/arch/uart.h> + +#define NVRM_PLLP_FIXED_FREQ_KHZ 216000 +#define NV_DEFAULT_DEBUG_BAUD 115200 + +#define PLL_BYPASS (1 << 31) +#define PLL_ENABLE (1 << 30) +#define PLL_BASE_OVRRIDE (1 << 28) +#define PLL_DIVP (1 << 20) /* post divider, b22:20 */ +#define PLL_DIVM 0x0C /* input divider, b4:0 */ + +#define SWR_UARTD_RST (1 << 2) +#define CLK_ENB_UARTD (1 << 2) +#define SWR_UARTA_RST (1 << 6) +#define CLK_ENB_UARTA (1 << 6) + +#define Z_GMC (1 << 29) +#define Z_IRRX (1 << 20) +#define Z_IRTX (1 << 19) + +enum { + UART_A = 1, + UART_B, + UART_C, + UART_D, + UART_E +}; + +#endif /* _COMMON_BOARD_H_ */ diff --git a/common/serial.c b/common/serial.c index 051ae4e..8ebf9a5 100644 --- a/common/serial.c +++ b/common/serial.c @@ -41,7 +41,8 @@ struct serial_device *__default_serial_console (void) #elif defined(CONFIG_4xx) \ || defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) \ || defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) \ - || defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) + || defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) \ + || defined(CONFIG_TEGRA2) #if defined(CONFIG_CONS_INDEX) && defined(CONFIG_SYS_NS16550_SERIAL) #if (CONFIG_CONS_INDEX==1) return &eserial1_device; diff --git a/include/serial.h b/include/serial.h index 15ab73c..f21d961 100644 --- a/include/serial.h +++ b/include/serial.h @@ -27,7 +27,8 @@ extern struct serial_device * default_serial_console (void); defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) || \ defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \ defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \ - defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) + defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \ + defined(CONFIG_TEGRA2) extern struct serial_device serial0_device; extern struct serial_device serial1_device; #if defined(CONFIG_SYS_NS16550_SERIAL)

Hi,
Your Signed-off-by seems to have made its way into the subject line. It should be moved into the email contents. A brief description of what this patch does, what peripherals are supported, etc would be nice too.
<snip>
create mode 100644 board/tegra2/common/board.c create mode 100644 board/tegra2/common/board.h
The format of the board directory is generally board/<vendor>/<board> or board/<board> if the vendor only plans on maintaining 1 board. If these are nvidia-supported boards I'd think board/nvidia is the proper place to add files board-specific files.
<snip>
+/*
- Boot ROM initializes the odmdata in APBDEV_PMC_SCRATCH20_0,
- so we are using this value to identify memory size.
- */
+static unsigned int query_sdram_size(void) +{
- pmc_ctlr *const pmc = (pmc_ctlr *)NV_PA_PMC_BASE;
- u32 reg;
- reg = pmc->pmc_scratch20;
In powerpc-land we use io access functions to access registers, eg in_be32(). I'm not familiar with ARM, but I'd guess they should be used in general. Someone with ARM experience feel free to chime in here.
- debug("pmc->pmc_scratch20 (ODMData) = 0x%08lX\n", reg);
- /* bits 31:28 in OdmData are used for RAM size */
- switch ((reg) >> 28) {
- case 1:
return 0x10000000; /* 256 MB */
- case 2:
return 0x20000000; /* 512 MB */
- case 3:
- default:
return 0x40000000; /* 1GB */
- }
+}
<snip>
+#ifndef _CLK_RST_H_ +#define _CLK_RST_H_
+/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */
Instead of adding a new vol_uint typedef and making each field of this struct vol_uint, you can make each one uint, then instantiate the structure as volatile.
There are a mixture of lower and upper case hex digits in the comments below too - it'd be good to be consistent.
+typedef struct clk_rst_ctlr {
- vol_uint crc_rst_src; /* _RST_SOURCE_0, 0x00*/
- vol_uint crc_rst_dev_l; /* _RST_DEVICES_L_0, 0x04*/
- vol_uint crc_rst_dev_h; /* _RST_DEVICES_H_0, 0x08*/
- vol_uint crc_rst_dev_u; /* _RST_DEVICES_U_0, 0x0C*/
- vol_uint crc_clk_out_enb_l; /* _CLK_OUT_ENB_L_0, 0x10*/
- vol_uint crc_clk_out_enb_h; /* _CLK_OUT_ENB_H_0, 0x14*/
- vol_uint crc_clk_out_enb_u; /* _CLK_OUT_ENB_U_0, 0x18*/
- vol_uint crc_reserved0; /* reserved_0, 0x1c*/
- vol_uint crc_cclk_brst_pol; /* _CCLK_BURST_POLICY_0,0x20*/
- vol_uint crc_super_cclk_div; /* _SUPER_CCLK_DIVIDER_0,0x24*/
- vol_uint crc_sclk_brst_pol; /* _SCLK_BURST_POLICY_0, 0x28*/
- vol_uint crc_super_sclk_div; /* _SUPER_SCLK_DIVIDER_0,0x2C*/
- vol_uint crc_clk_sys_rate; /* _CLK_SYSTEM_RATE_0, 0x30*/
- vol_uint crc_prog_dly_clk; /* _PROG_DLY_CLK_0, 0x34*/
- vol_uint crc_aud_sync_clk_rate; /* _AUDIO_SYNC_CLK_RATE_0,0x38*/
- vol_uint crc_reserved1; /* reserved_1, 0x3c*/
- vol_uint crc_cop_clk_skip_plcy; /* _COP_CLK_SKIP_POLICY_0,0x40*/
- vol_uint crc_clk_mask_arm; /* _CLK_MASK_ARM_0, 0x44*/
- vol_uint crc_misc_clk_enb; /* _MISC_CLK_ENB_0, 0x48*/
- vol_uint crc_clk_cpu_cmplx; /* _CLK_CPU_CMPLX_0, 0x4C*/
- vol_uint crc_osc_ctrl; /* _OSC_CTRL_0, 0x50*/
- vol_uint crc_pll_lfsr; /* _PLL_LFSR_0, 0x54*/
- vol_uint crc_osc_freq_det; /* _OSC_FREQ_DET_0, 0x58*/
- vol_uint crc_osc_freq_det_stat; /* _OSC_FREQ_DET_STATUS_0,0x5C*/
- vol_uint crc_reserved2[8]; /* reserved_2[8], 0x60-7C*/
- vol_uint crc_pllc_base; /* _PLLC_BASE_0, 0x80*/
- vol_uint crc_pllc_out; /* _PLLC_OUT_0, 0x84*/
- vol_uint crc_reserved3; /* reserved_3, 0x88*/
- vol_uint crc_pllc_misc; /* _PLLC_MISC_0, 0x8C*/
- vol_uint crc_pllm_base; /* _PLLM_BASE_0, 0x90*/
- vol_uint crc_pllm_out; /* _PLLM_OUT_0, 0x94*/
- vol_uint crc_reserved4; /* reserved_4, 0x98*/
- vol_uint crc_pllm_misc; /* _PLLM_MISC_0, 0x9C*/
- vol_uint crc_pllp_base; /* _PLLP_BASE_0, 0xA0*/
- vol_uint crc_pllp_outa; /* _PLLP_OUTA_0, 0xA4*/
- vol_uint crc_pllp_outb; /* _PLLP_OUTB_0, 0xA8*/
- vol_uint crc_pllp_misc; /* _PLLP_MISC_0, 0xAC*/
- vol_uint crc_plla_base; /* _PLLA_BASE_0, 0xB0*/
- vol_uint crc_plla_out; /* _PLLA_OUT_0, 0xB4*/
- vol_uint crc_reserved5; /* reserved_5, 0xB8*/
- vol_uint crc_plla_misc; /* _PLLA_MISC_0, 0xBC*/
- vol_uint crc_pllu_base; /* _PLLU_BASE_0, 0xC0*/
- vol_uint crc_reserved6; /* _reserved_6, 0xC4*/
- vol_uint crc_reserved7; /* _reserved_7, 0xC8*/
- vol_uint crc_pllu_misc; /* _PLLU_MISC_0, 0xCC*/
- vol_uint crc_plld_base; /* _PLLD_BASE_0, 0xD0*/
- vol_uint crc_reserved8; /* _reserved_8, 0xD4*/
- vol_uint crc_reserved9; /* _reserved_9, 0xD8*/
- vol_uint crc_plld_misc; /* _PLLD_MISC_0, 0xDC*/
- vol_uint crc_pllx_base; /* _PLLX_BASE_0, 0xE0*/
- vol_uint crc_pllx_misc; /* _PLLX_MISC_0, 0xE4*/
- vol_uint crc_plle_base; /* _PLLE_BASE_0, 0xE8*/
- vol_uint crc_plle_misc; /* _PLLE_MISC_0, 0xEC*/
- vol_uint crc_plls_base; /* _PLLS_BASE_0, 0xF0*/
- vol_uint crc_plls_misc; /* _PLLS_MISC_0, 0xF4*/
- vol_uint crc_reserved10; /* _reserved_10, 0xF8*/
- vol_uint crc_reserved11; /* _reserved_11, 0xFC*/
- vol_uint crc_clk_src_i2s1; /*_I2S1_0, 0x100*/
- vol_uint crc_clk_src_i2s2; /*_I2S2_0, 0x104*/
- vol_uint crc_clk_src_spdif_out; /*_SPDIF_OUT_0, 0x108*/
- vol_uint crc_clk_src_spdif_in; /*_SPDIF_IN_0, 0x10C*/
- vol_uint crc_clk_src_pwm; /*_PWM_0, 0x110*/
- vol_uint crc_clk_src_spi1; /*_SPI1_0, 0x114*/
- vol_uint crc_clk_src_sbc2; /*_SBC2_0, 0x118*/
- vol_uint crc_clk_src_sbc3; /*_SBC3_0, 0x11C*/
- vol_uint crc_clk_src_xio; /*_XIO_0, 0x120*/
- vol_uint crc_clk_src_i2c1; /*_I2C1_0, 0x124*/
- vol_uint crc_clk_src_dvc_i2c; /*_DVC_I2C_0, 0x128*/
- vol_uint crc_clk_src_twc; /*_TWC_0, 0x12C*/
- vol_uint crc_reserved12; /* 0x130*/
- vol_uint crc_clk_src_sbc1; /*_SBC1_0, 0x134*/
- vol_uint crc_clk_src_disp1; /*_DISP1_0, 0x138*/
- vol_uint crc_clk_src_disp2; /*_DISP2_0, 0x13C*/
- vol_uint crc_clk_src_cve; /*_CVE_0, 0x140*/
- vol_uint crc_clk_src_ide; /*_IDE_0, 0x144*/
- vol_uint crc_clk_src_vi; /*_VI_0, 0x148*/
- vol_uint crc_reserved13; /* 0x14c*/
- vol_uint crc_clk_src_sdmmc1; /*_SDMMC1_0, 0x150*/
- vol_uint crc_clk_src_sdmmc2; /*_SDMMC2_0, 0x154*/
- vol_uint crc_clk_src_g3d; /*_G3D_0, 0x158*/
- vol_uint crc_clk_src_g2d; /*_G2D_0, 0x15C*/
- vol_uint crc_clk_src_ndflash; /*_NDFLASH_0, 0x160*/
- vol_uint crc_clk_src_sdmmc4; /*_SDMMC4_0, 0x164*/
- vol_uint crc_clk_src_vfir; /*_VFIR_0, 0x168*/
- vol_uint crc_clk_src_epp; /*_EPP_0, 0x16C*/
- vol_uint crc_clk_src_mp3; /*_MPE_0, 0x170*/
- vol_uint crc_clk_src_mipi; /*_MIPI_0, 0x174*/
- vol_uint crc_clk_src_uarta; /*_UARTA_0, 0x178*/
- vol_uint crc_clk_src_uartb; /*_UARTB_0, 0x17C*/
- vol_uint crc_clk_src_host1x; /*_HOST1X_0, 0x180*/
- vol_uint crc_reserved14; /* 0x184*/
- vol_uint crc_clk_src_tvo; /*_TVO_0, 0x188*/
- vol_uint crc_clk_src_hdmi; /*_HDMI_0, 0x18C*/
- vol_uint crc_reserved15; /* 0x190*/
- vol_uint crc_clk_src_tvdac; /*_TVDAC_0, 0x194*/
- vol_uint crc_clk_src_i2c2; /*_I2C2_0, 0x198*/
- vol_uint crc_clk_src_emc; /*_EMC_0, 0x19C*/
- vol_uint crc_clk_src_uartc; /*_UARTC_0, 0x1A0*/
- vol_uint crc_reserved16; /* 0x1a4*/
- vol_uint crc_clk_src_vi_sensor; /*_VI_SENSOR_0, 0x1A8*/
- vol_uint crc_reserved17; /* 0x1ac*/
- vol_uint crc_reserved18; /* 0x1b0*/
- vol_uint crc_clk_src_sbc4; /*_SBC4_0, 0x1B4*/
- vol_uint crc_clk_src_i2c3; /*_I2C3_0, 0x1B8*/
- vol_uint crc_clk_src_sdmmc3; /*_SDMMC3_0, 0x1BC*/
- vol_uint crc_clk_src_uartd; /*_UARTD_0, 0x1C0*/
- vol_uint crc_clk_src_uarte; /*_UARTE_0, 0x1C4*/
- vol_uint crc_clk_src_vde; /*_VDE_0, 0x1C8*/
- vol_uint crc_clk_src_owr; /*_OWR_0, 0x1CC*/
- vol_uint crc_clk_src_nor; /*_NOR_0, 0x1D0*/
- vol_uint crc_clk_src_csite; /*_CSITE_0, 0x1D4*/
- vol_uint crc_reserved19[9]; /* 0x1d8-1F8*/
- vol_uint crc_clk_src_osc; /*_OSC_0, 0x1FC*/
+} clk_rst_ctlr;
<snip>
+#ifndef _PMC_H_ +#define _PMC_H_ +typedef unsigned int volatile vol_uint;
Same volatile comment applies here. Probably applies to the remainder of the patch.
+/* Power Management Controller (APBDEV_PMC_) registers */
+typedef struct pmc_ctlr {
- vol_uint pmc_cntrl; /* _CNTRL_0, offset 00 */
- vol_uint pmc_sec_disable; /* _SEC_DISABLE_0, offset 04 */
- vol_uint pmc_pmc_swrst; /* _PMC_SWRST_0, offset 08 */
- vol_uint pmc_wake_mask; /* _WAKE_MASK_0, offset 0C */
- vol_uint pmc_wake_lvl; /* _WAKE_LVL_0, offset 10 */
- vol_uint pmc_wake_status; /* _WAKE_STATUS_0, offset 14 */
- vol_uint pmc_sw_wake_status; /* _SW_WAKE_STATUS_0, offset 18 */
- vol_uint pmc_dpd_pads_oride; /* _DPD_PADS_ORIDE_0, offset 1C */
- vol_uint pmc_dpd_sample; /* _DPD_PADS_SAMPLE_0, offset 20 */
- vol_uint pmc_dpd_enable; /* _DPD_PADS_ENABLE_0, offset 24 */
- vol_uint pmc_pwrgate_timer_off; /* _PWRGATE_TIMER_OFF_0, offset 28 */
- vol_uint pmc_pwrgate_timer_on; /* _PWRGATE_TIMER_ON_0, offset 2C */
- vol_uint pmc_pwrgate_toggle; /* _PWRGATE_TOGGLE_0, offset 30 */
- vol_uint pmc_remove_clamping; /* _REMOVE_CLAMPING_CMD_0, offset 34 */
- vol_uint pmc_pwrgate_status; /* _PWRGATE_STATUS_0, offset 38 */
- vol_uint pmc_pwrgood_timer; /* _PWRGOOD_TIMER_0, offset 3C */
- vol_uint pmc_blink_timer; /* _BLINK_TIMER_0, offset 40 */
- vol_uint pmc_no_iopower; /* _NO_IOPOWER_0, offset 44 */
- vol_uint pmc_pwr_det; /* _PWR_DET_0, offset 48 */
- vol_uint pmc_pwr_det_latch; /* _PWR_DET_LATCH_0, offset 4C */
- vol_uint pmc_scratch0; /* _SCRATCH0_0, offset 50 */
- vol_uint pmc_scratch1; /* _SCRATCH1_0, offset 54 */
- vol_uint pmc_scratch2; /* _SCRATCH2_0, offset 58 */
- vol_uint pmc_scratch3; /* _SCRATCH3_0, offset 5C */
- vol_uint pmc_scratch4; /* _SCRATCH4_0, offset 60 */
- vol_uint pmc_scratch5; /* _SCRATCH5_0, offset 64 */
- vol_uint pmc_scratch6; /* _SCRATCH6_0, offset 68 */
- vol_uint pmc_scratch7; /* _SCRATCH7_0, offset 6C */
- vol_uint pmc_scratch8; /* _SCRATCH8_0, offset 70 */
- vol_uint pmc_scratch9; /* _SCRATCH9_0, offset 74 */
- vol_uint pmc_scratch10; /* _SCRATCH10_0, offset 78 */
- vol_uint pmc_scratch11; /* _SCRATCH11_0, offset 7C */
- vol_uint pmc_scratch12; /* _SCRATCH12_0, offset 80 */
- vol_uint pmc_scratch13; /* _SCRATCH13_0, offset 84 */
- vol_uint pmc_scratch14; /* _SCRATCH14_0, offset 88 */
- vol_uint pmc_scratch15; /* _SCRATCH15_0, offset 8C */
- vol_uint pmc_scratch16; /* _SCRATCH16_0, offset 90 */
- vol_uint pmc_scratch17; /* _SCRATCH17_0, offset 94 */
- vol_uint pmc_scratch18; /* _SCRATCH18_0, offset 98 */
- vol_uint pmc_scratch19; /* _SCRATCH19_0, offset 9C */
- vol_uint pmc_scratch20; /* _SCRATCH20_0, offset A0 */
- vol_uint pmc_scratch21; /* _SCRATCH21_0, offset A4 */
- vol_uint pmc_scratch22; /* _SCRATCH22_0, offset A8 */
- vol_uint pmc_scratch23; /* _SCRATCH23_0, offset AC */
- vol_uint pmc_secure_scratch0; /* _SECURE_SCRATCH0_0, offset B0 */
- vol_uint pmc_secure_scratch1; /* _SECURE_SCRATCH1_0, offset B4 */
- vol_uint pmc_secure_scratch2; /* _SECURE_SCRATCH2_0, offset B8 */
- vol_uint pmc_secure_scratch3; /* _SECURE_SCRATCH3_0, offset BC */
- vol_uint pmc_secure_scratch4; /* _SECURE_SCRATCH4_0, offset C0 */
- vol_uint pmc_secure_scratch5; /* _SECURE_SCRATCH5_0, offset C4 */
- vol_uint pmc_cpupwrgood_timer; /* _CPUPWRGOOD_TIMER_0, offset C8 */
- vol_uint pmc_cpupwroff_timer; /* _CPUPWROFF_TIMER_0, offset CC */
- vol_uint pmc_pg_mask; /* _PG_MASK_0, offset D0 */
- vol_uint pmc_pg_mask_1; /* _PG_MASK_1_0, offset D4 */
- vol_uint pmc_auto_wake_lvl; /* _AUTO_WAKE_LVL_0, offset D8 */
- vol_uint pmc_auto_wake_lvl_mask; /* _AUTO_WAKE_LVL_MASK_0, offset DC */
- vol_uint pmc_wake_delay; /* _WAKE_DELAY_0, offset E0 */
- vol_uint pmc_pwr_det_val; /* _PWR_DET_VAL_0, offset E4 */
- vol_uint pmc_ddr_pwr; /* _DDR_PWR_0, offset E8 */
- vol_uint pmc_usb_debounce_del; /* _USB_DEBOUNCE_DEL_0, offset EC */
- vol_uint pmc_usb_ao; /* _USB_AO_0, offset F0 */
- vol_uint pmc_crypto_op; /* _CRYPTO_OP__0, offset F4 */
- vol_uint pmc_pllp_wb0_override; /* _PLLP_WB0_OVERRIDE_0, offset F8 */
- vol_uint pmc_scratch24; /* _SCRATCH24_0, offset FC */
- vol_uint pmc_scratch25; /* _SCRATCH24_0, offset 100 */
- vol_uint pmc_scratch26; /* _SCRATCH24_0, offset 104 */
- vol_uint pmc_scratch27; /* _SCRATCH24_0, offset 108 */
- vol_uint pmc_scratch28; /* _SCRATCH24_0, offset 10C */
- vol_uint pmc_scratch29; /* _SCRATCH24_0, offset 110 */
- vol_uint pmc_scratch30; /* _SCRATCH24_0, offset 114 */
- vol_uint pmc_scratch31; /* _SCRATCH24_0, offset 118 */
- vol_uint pmc_scratch32; /* _SCRATCH24_0, offset 11C */
- vol_uint pmc_scratch33; /* _SCRATCH24_0, offset 120 */
- vol_uint pmc_scratch34; /* _SCRATCH24_0, offset 124 */
- vol_uint pmc_scratch35; /* _SCRATCH24_0, offset 128 */
- vol_uint pmc_scratch36; /* _SCRATCH24_0, offset 12C */
- vol_uint pmc_scratch37; /* _SCRATCH24_0, offset 130 */
- vol_uint pmc_scratch38; /* _SCRATCH24_0, offset 134 */
- vol_uint pmc_scratch39; /* _SCRATCH24_0, offset 138 */
- vol_uint pmc_scratch40; /* _SCRATCH24_0, offset 13C */
- vol_uint pmc_scratch41; /* _SCRATCH24_0, offset 140 */
- vol_uint pmc_scratch42; /* _SCRATCH24_0, offset 144 */
- vol_uint pmc_bo_mirror0; /* _BOUNDOUT_MIRROR0_0, offset 148 */
- vol_uint pmc_bo_mirror1; /* _BOUNDOUT_MIRROR1_0, offset 14C */
- vol_uint pmc_bo_mirror2; /* _BOUNDOUT_MIRROR2_0, offset 150 */
- vol_uint pmc_sys_33v_en; /* _SYS_33V_EN_0, offset 154 */
- vol_uint pmc_bo_mirror_access; /* _BOUNDOUT_MIRROR_ACCESS_0, off158 */
- vol_uint pmc_gate; /* _GATE_0, offset 15C */
+} pmc_ctlr;
+#endif /* PMC_H */ diff --git a/arch/arm/include/asm/arch-tegra2/sys_proto.h b/arch/arm/include/asm/arch-tegra2/sys_proto.h new file mode 100644 index 0000000..70e63a8 --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/sys_proto.h @@ -0,0 +1,33 @@ +/*
- (C) Copyright 2010,2011
- 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 _SYS_PROTO_H_ +#define _SYS_PROTO_H_
+typedef struct {
- char *board_string;
+} tegra2_sysinfo;
+void invalidate_dcache(void);
+#endif diff --git a/arch/arm/include/asm/arch-tegra2/tegra2.h b/arch/arm/include/asm/arch-tegra2/tegra2.h new file mode 100644 index 0000000..ebe56f2 --- /dev/null +++ b/arch/arm/include/asm/arch-tegra2/tegra2.h @@ -0,0 +1,56 @@ +/*
- (C) Copyright 2010,2011
- 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 _TEGRA2_H_ +#define _TEGRA2_H_
+#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif
It'd be better to either consolidate the existing definitions of TRUE/FALSE to some place in a common header, or just use 0 and 1.
<snip>
+typedef struct uart_ctlr {
- vol_uint uart_thr_dlab_0; /* UART_THR_DLAB_0_0, offset 00 */
- vol_uint uart_ier_dlab_0; /* UART_IER_DLAB_0_0, offset 04 */
- vol_uint uart_iir_fcr; /* UART_IIR_FCR_0, offset 08 */
- vol_uint uart_lcr; /* UART_LCR_0, offset 0C */
- vol_uint uart_mcr; /* UART_MCR_0, offset 10 */
- vol_uint uart_lsr; /* UART_LSR_0, offset 14 */
- vol_uint uart_msr; /* UART_MSR_0, offset 18 */
- vol_uint uart_spr; /* UART_SPR_0, offset 1C */
- vol_uint uart_irda_csr; /* UART_IRDA_CSR_0, offset 20 */
- vol_uint uart_reserved[6]; /* Reserved, unused */
- vol_uint uart_asr; /* UART_ASR_0, offset 3C */
+} uart_ctlr;
+#define LSR_RDR (1 << 0)
The tab after the define should be a space. Same with defines throughout the patch.
<snip>
+/*
- Routine: uart_clock_init
- Description: init the PLL and clock for the UART in uart_num
- */
+void uart_clock_init(int uart_num) +{
- clk_rst_ctlr *const clkrst = (clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
- static int pllp_init_done;
- u32 reg;
- if (!pllp_init_done) {
/* Override pllp setup for 216MHz operation. */
reg = (PLL_BYPASS | PLL_BASE_OVRRIDE | PLL_DIVP);
reg |= (((NVRM_PLLP_FIXED_FREQ_KHZ/500) << 8) | PLL_DIVM);
clkrst->crc_pllp_base = reg;
reg |= PLL_ENABLE;
clkrst->crc_pllp_base = reg;
reg &= ~PLL_BYPASS;
clkrst->crc_pllp_base = reg;
pllp_init_done++;
- }
- /* Now do the UART reset/clock enable based on uart_num */
Above empty newline should be removed.
- if (uart_num == UART_D) {
Remove empty newline after if() globally.
/* Assert Reset to UART */
reg = clkrst->crc_rst_dev_u;
reg |= SWR_UARTD_RST; /* SWR_UARTD_RST = 1 */
clkrst->crc_rst_dev_u = reg;
/* Enable clk to UART */
reg = clkrst->crc_clk_out_enb_u;
reg |= CLK_ENB_UARTD; /* CLK_ENB_UARTD = 1 */
clkrst->crc_clk_out_enb_u = reg;
/* Enable pllp_out0 to UART */
reg = clkrst->crc_clk_src_uartd;
reg &= 0x3FFFFFFF; /* UARTD_CLK_SRC = 00, PLLP_OUT0 */
clkrst->crc_clk_src_uartd = reg;
/* wait for 2us */
udelay(2);
/* De-assert reset to UART */
reg = clkrst->crc_rst_dev_u;
reg &= ~SWR_UARTD_RST; /* SWR_UARTD_RST = 0 */
clkrst->crc_rst_dev_u = reg;
Same with empty newlines before the end of an if().
- } else if (uart_num == UART_A) {
/* Assert Reset to UART */
reg = clkrst->crc_rst_dev_l;
reg |= SWR_UARTA_RST; /* SWR_UARTA_RST = 1 */
clkrst->crc_rst_dev_l = reg;
/* Enable clk to UART */
reg = clkrst->crc_clk_out_enb_l;
reg |= CLK_ENB_UARTA; /* CLK_ENB_UARTA = 1 */
clkrst->crc_clk_out_enb_l = reg;
/* Enable pllp_out0 to UART */
reg = clkrst->crc_clk_src_uarta;
reg &= 0x3FFFFFFF; /* UARTA_CLK_SRC = 00, PLLP_OUT0 */
clkrst->crc_clk_src_uarta = reg;
/* wait for 2us */
udelay(2);
/* De-assert reset to UART */
reg = clkrst->crc_rst_dev_l;
reg &= ~SWR_UARTA_RST; /* SWR_UARTA_RST = 0 */
clkrst->crc_rst_dev_l = reg;
- }
+}
+/*
- Routine: pin_mux_uart
- Description: setup the pin muxes/tristate values for UART based on uart_num
- */
+void pin_mux_uart(int uart_num) +{
- pinmux_tri_ctlr *const pmt = (pinmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
- u32 reg;
- if (uart_num == UART_D) {
reg = pmt->pmt_ctl_b;
reg &= 0xFFFFFFF3; /* GMC_SEL [3:2] = 00, UARTD */
pmt->pmt_ctl_b = reg;
reg = pmt->pmt_tri_a;
reg &= ~Z_GMC; /* Z_GMC = normal (0) */
pmt->pmt_tri_a = reg;
- } else if (uart_num == UART_A) {
reg = pmt->pmt_ctl_c;
reg &= 0xFFF0FFFF; /* IRRX_/IRTX_SEL [19:16] = 00 UARTA */
pmt->pmt_ctl_c = reg;
reg = pmt->pmt_tri_a;
reg &= ~Z_IRRX; /* Z_IRRX = normal (0) */
reg &= ~Z_IRTX; /* Z_IRTX = normal (0) */
pmt->pmt_tri_a = reg;
- }
+}
+void do_uart(uart_ctlr *u) +{
U-Boot command implementations are generally are prefixed with do_ (eg do_md5sum). It'd be nice to pick a more descriptive function name that doesn't start with do_.
- u32 reg;
- /* Prepare the divisor value */
- reg = NVRM_PLLP_FIXED_FREQ_KHZ * 1000 / NV_DEFAULT_DEBUG_BAUD / 16;
- /* Set up UART parameters */
- u->uart_lcr = 0x80;
- u->uart_thr_dlab_0 = reg;
- u->uart_ier_dlab_0 = 0;
- u->uart_lcr = 0;
- u->uart_iir_fcr = 0x37;
- u->uart_ier_dlab_0 = 0;
- u->uart_lcr = 3; /* 8N1 */
- u->uart_mcr = 2;
- u->uart_msr = 0;
- u->uart_spr = 0;
- u->uart_irda_csr = 0;
- u->uart_asr = 0;
- u->uart_iir_fcr = 0x31;
There should be defines for the serial port registers in ns16550. Using them would make it more clear what is being set up.
- /* Flush any old characters out of the RX FIFO */
- reg = u->uart_lsr;
- while (reg & LSR_RDR) {
reg = u->uart_thr_dlab_0;
reg = u->uart_lsr;
- }
+}
+/*
- Routine: init_uart
- Description: init the UART clocks, muxes, and baudrate/parity/etc.
- */
+void init_uart(int uart_num) +{
- if (uart_num == UART_A) {
uart_ctlr *const uart = (uart_ctlr *)NV_PA_APB_UARTA_BASE;
uart_clock_init(UART_A);
/* Enable UARTA - uses config 0 */
pin_mux_uart(UART_A);
do_uart(uart);
- } else if (uart_num == UART_D) {
uart_ctlr *const uart = (uart_ctlr *)NV_PA_APB_UARTD_BASE;
uart_clock_init(UART_D);
/* Enable UARTD - uses config 0 */
pin_mux_uart(UART_D);
do_uart(uart);
- }
This block could be surrounded by #ifdef CONFIG_TEGRA2_ENABLE_UARTD to save some space. Same with UARTA if its ever disabled. Same comment with other areas that choose between UART A/D.
+}
+void uart_init(void) +{ +#if (CONFIG_TEGRA2_ENABLE_UARTA)
- init_uart(UART_A);
+#endif +#if (CONFIG_TEGRA2_ENABLE_UARTD)
- init_uart(UART_D);
+#endif +} diff --git a/board/tegra2/common/board.h b/board/tegra2/common/board.h new file mode 100644 index 0000000..60525a8 --- /dev/null +++ b/board/tegra2/common/board.h @@ -0,0 +1,59 @@ +/*
- (C) Copyright 2010,2011
- 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 _COMMON_BOARD_H_ +#define _COMMON_BOARD_H_
+typedef unsigned int volatile vol_uint;
If you do need to add this typedef (which hopefully you don't), it'd probably be better somewhere global so every board vendor doesn't have the same chunk of code. Eg along with vu_long.
+#include <asm/arch/clk_rst.h> +#include <asm/arch/pinmux.h> +#include <asm/arch/uart.h>
+#define NVRM_PLLP_FIXED_FREQ_KHZ 216000 +#define NV_DEFAULT_DEBUG_BAUD 115200
+#define PLL_BYPASS (1 << 31) +#define PLL_ENABLE (1 << 30) +#define PLL_BASE_OVRRIDE (1 << 28) +#define PLL_DIVP (1 << 20) /* post divider, b22:20 */ +#define PLL_DIVM 0x0C /* input divider, b4:0 */
+#define SWR_UARTD_RST (1 << 2) +#define CLK_ENB_UARTD (1 << 2) +#define SWR_UARTA_RST (1 << 6) +#define CLK_ENB_UARTA (1 << 6)
Tabs should be removed. Are the above CPU-specifc defines? If so, they should be moved somewhere cpu-specific so other board vendors don't need to define them too. Actually, looking over it again, perhaps the entire contents of board/tegra2/ should be moved somewhere in arch/arm?
Regards, Peter

--- MAINTAINERS | 4 + board/tegra2/harmony/Makefile | 50 ++++++++++++ boards.cfg | 1 + include/configs/harmony.h | 48 ++++++++++++ include/configs/nv-common.h | 166 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 269 insertions(+), 0 deletions(-) create mode 100644 board/tegra2/harmony/Makefile create mode 100644 include/configs/harmony.h create mode 100644 include/configs/nv-common.h
diff --git a/MAINTAINERS b/MAINTAINERS index ba83f71..b5cff19 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -841,6 +841,10 @@ Prafulla Wadaskar prafulla@marvell.com rd6281a ARM926EJS (Kirkwood SoC) sheevaplug ARM926EJS (Kirkwood SoC)
+Tom Warren twarren@nvidia.com + + harmony Tegra2 (ARM7 & A9 Dual Core) + Matthias Weisser weisserm@arcor.de
jadecpu ARM926EJS (MB86R01 SoC) diff --git a/board/tegra2/harmony/Makefile b/board/tegra2/harmony/Makefile new file mode 100644 index 0000000..3a146cb --- /dev/null +++ b/board/tegra2/harmony/Makefile @@ -0,0 +1,50 @@ +# +# (C) Copyright 2010,2011 +# 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 + +LIB = $(obj)lib$(BOARD).o + +COBJS += ../common/board.o + +SRCS := $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) + +$(LIB): $(obj).depend $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + +clean: + rm -f $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/boards.cfg b/boards.cfg index 94b8745..6562bf5 100644 --- a/boards.cfg +++ b/boards.cfg @@ -122,6 +122,7 @@ omap4_panda arm armv7 panda ti omap4_sdp4430 arm armv7 sdp4430 ti omap4 s5p_goni arm armv7 goni samsung s5pc1xx smdkc100 arm armv7 smdkc100 samsung s5pc1xx +harmony arm armv7 harmony tegra2 tegra2 actux1 arm ixp actux2 arm ixp actux3 arm ixp diff --git a/include/configs/harmony.h b/include/configs/harmony.h new file mode 100644 index 0000000..781ea45 --- /dev/null +++ b/include/configs/harmony.h @@ -0,0 +1,48 @@ +/* + * (C) Copyright 2010,2011 + * 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 __CONFIG_H +#define __CONFIG_H + +#include <asm/sizes.h> +#include "nv-common.h" + +/* High-level configuration options */ +#define TEGRA2_SYSMEM "mem=384M@0M nvmem=128M@384M mem=512M@512M" +#define V_PROMPT "Tegra2 (Harmony) # " +#define CONFIG_TEGRA2_BOARD_STRING "NVIDIA Harmony" + +/* Board-specific serial config */ +#define CONFIG_SERIAL_MULTI +#define CONFIG_TEGRA2_ENABLE_UARTD 1 +#define CONFIG_TEGRA2_ENABLE_UARTA 0 + +/* UARTD: keyboard satellite board uart, default */ +#define CONFIG_SYS_NS16550_COM1 NV_PA_APB_UARTD_BASE +/* UARTA: debug board uart */ +#define CONFIG_SYS_NS16550_COM2 NV_PA_APB_UARTA_BASE + +#define CONFIG_MACH_TYPE MACH_TYPE_HARMONY +#define CONFIG_SYS_BOARD_ODMDATA 0x300d8011 /* lp1, 1GB */ + +#endif /* __CONFIG_H */ diff --git a/include/configs/nv-common.h b/include/configs/nv-common.h new file mode 100644 index 0000000..46872d3 --- /dev/null +++ b/include/configs/nv-common.h @@ -0,0 +1,166 @@ +/* + * (C) Copyright 2010,2011 + * 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 __TEGRA2_COMMON_H +#define __TEGRA2_COMMON_H +#include <asm/sizes.h> + +/* + * High Level Configuration Options + */ +#define CONFIG_ARMCORTEXA9 /* This is an ARM V7 CPU core */ +#define CONFIG_TEGRA2 /* in a NVidia Tegra2 core */ +#define CONFIG_MACH_TEGRA_GENERIC /* which is a Tegra generic machine */ +#define CONFIG_L2_OFF /* No L2 cache */ + +#include <asm/arch/tegra2.h> /* get chip and board defs */ + +/* + * Display CPU and Board information + */ +#define CONFIG_DISPLAY_CPUINFO +#define CONFIG_DISPLAY_BOARDINFO + +#undef CONFIG_USE_IRQ + +#define CONFIG_SKIP_RELOCATE_UBOOT +#define CONFIG_SKIP_LOWLEVEL_INIT + +#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */ + +/* Environment */ +#define CONFIG_ENV_IS_NOWHERE +#define CONFIG_ENV_SIZE 0x20000 /* Total Size Environment */ + +/* + * Size of malloc() pool + */ +#define CONFIG_SYS_MALLOC_LEN (4 << 20) /* 4MB */ + +/* + * PllX Configuration + */ +#define CONFIG_SYS_CPU_OSC_FREQUENCY 1000000 /* Set CPU clock to 1GHz */ + +/* + * NS16550 Configuration + */ +#define V_NS16550_CLK 216000000 /* 216MHz (pllp_out0) */ + +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE (-4) +#define CONFIG_SYS_NS16550_CLK V_NS16550_CLK + +/* + * select serial console configuration + */ +#define CONFIG_CONS_INDEX 1 + +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_BAUDRATE 115200 +#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600,\ + 115200} + +/* include default commands */ +#include <config_cmd_default.h> + +/* remove unused commands */ +#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */ +#undef CONFIG_CMD_FPGA /* FPGA configuration support */ +#undef CONFIG_CMD_IMI +#undef CONFIG_CMD_IMLS +#undef CONFIG_CMD_NFS /* NFS support */ +#undef CONFIG_CMD_NET /* network support */ + +/* turn on command-line edit/hist/auto */ +#define CONFIG_CMDLINE_EDITING +#define CONFIG_COMMAND_HISTORY +#define CONFIG_AUTOCOMPLETE + +#define CONFIG_SYS_NO_FLASH + +/* Environment information */ +#define CONFIG_EXTRA_ENV_SETTINGS \ + "console=ttyS0,115200n8\0" \ + "mem=" TEGRA2_SYSMEM "\0" \ + "smpflag=smp\0" \ + +#define CONFIG_LOADADDR 0x408000 /* def. location for kernel */ +#define CONFIG_BOOTDELAY 2 /* -1 to disable auto boot */ + +/* + * Miscellaneous configurable options + */ +#define CONFIG_SYS_LONGHELP /* undef to save memory */ +#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */ +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " +#define CONFIG_SYS_PROMPT V_PROMPT +/* + * Increasing the size of the IO buffer as default nfsargs size is more + * than 256 and so it is not possible to edit it + */ +#define CONFIG_SYS_CBSIZE (256 * 2) /* Console I/O Buffer Size */ +/* Print Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ + sizeof(CONFIG_SYS_PROMPT) + 16) +#define CONFIG_SYS_MAXARGS 16 /* max number of command args */ +/* Boot Argument Buffer Size */ +#define CONFIG_SYS_BARGSIZE (CONFIG_SYS_CBSIZE) + +#define CONFIG_SYS_MEMTEST_START (TEGRA2_SDRC_CS0 + 0x600000) +#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x100000) + +#define CONFIG_SYS_LOAD_ADDR (0xA00800) /* default */ +#define CONFIG_SYS_HZ 1000 + +/*----------------------------------------------------------------------- + * Stack sizes + * + * The stack sizes are set up in start.S using the settings below + */ +#define CONFIG_STACKBASE 0x2800000 /* 40MB */ +#define CONFIG_STACKSIZE 0x20000 /* 128K regular stack*/ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ 0x1000 /* 4K IRQ stack */ +#define CONFIG_STACKSIZE_FIQ 0x1000 /* 4K FIQ stack */ +#endif + +/*----------------------------------------------------------------------- + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS 1 +#define PHYS_SDRAM_1 TEGRA2_SDRC_CS0 +#define PHYS_SDRAM_1_SIZE 0x20000000 /* 512M */ + +#define CONFIG_SYS_TEXT_BASE 0x00E08000 +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 + +#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_STACKBASE +#define CONFIG_SYS_INIT_RAM_SIZE CONFIG_SYS_MALLOC_LEN +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \ + CONFIG_SYS_INIT_RAM_SIZE - \ + GENERATED_GBL_DATA_SIZE) + +#endif /* __CONFIG_H */

<snip>
--- a/boards.cfg +++ b/boards.cfg @@ -122,6 +122,7 @@ omap4_panda arm armv7 panda ti omap4_sdp4430 arm armv7 sdp4430 ti omap4 s5p_goni arm armv7 goni samsung s5pc1xx smdkc100 arm armv7 smdkc100 samsung s5pc1xx +harmony arm armv7 harmony tegra2 tegra2
I think 1st "tegra2" above should be changed to "nvidia".
actux1 arm ixp actux2 arm ixp actux3 arm ixp
<snip>
diff --git a/include/configs/nv-common.h b/include/configs/nv-common.h
Perhaps a more descriptive name could be used? NV == non-volatile to me at first glance, and if this is tegra2-specific maybe tegra2-common.h would be more appropriate?
new file mode 100644 index 0000000..46872d3 --- /dev/null +++ b/include/configs/nv-common.h @@ -0,0 +1,166 @@ +/*
- (C) Copyright 2010,2011
- 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 __TEGRA2_COMMON_H +#define __TEGRA2_COMMON_H
This define should match the name of the file.
+#include <asm/sizes.h>
+/*
- High Level Configuration Options
- */
+#define CONFIG_ARMCORTEXA9 /* This is an ARM V7 CPU core */ +#define CONFIG_TEGRA2 /* in a NVidia Tegra2 core */ +#define CONFIG_MACH_TEGRA_GENERIC /* which is a Tegra generic machine */ +#define CONFIG_L2_OFF /* No L2 cache */
+#include <asm/arch/tegra2.h> /* get chip and board defs */
+/*
- Display CPU and Board information
- */
+#define CONFIG_DISPLAY_CPUINFO +#define CONFIG_DISPLAY_BOARDINFO
+#undef CONFIG_USE_IRQ
The general policy is not to undef things unless its necessary. Assuming CONFIG_USE_IRQ isn't defined elsewhere I'd remove the above line.
+#define CONFIG_SKIP_RELOCATE_UBOOT +#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
+/* Environment */ +#define CONFIG_ENV_IS_NOWHERE +#define CONFIG_ENV_SIZE 0x20000 /* Total Size Environment */
+/*
- Size of malloc() pool
- */
+#define CONFIG_SYS_MALLOC_LEN (4 << 20) /* 4MB */
+/*
- PllX Configuration
- */
+#define CONFIG_SYS_CPU_OSC_FREQUENCY 1000000 /* Set CPU clock to 1GHz */
+/*
- NS16550 Configuration
- */
+#define V_NS16550_CLK 216000000 /* 216MHz (pllp_out0) */
+#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE (-4) +#define CONFIG_SYS_NS16550_CLK V_NS16550_CLK
+/*
- select serial console configuration
- */
+#define CONFIG_CONS_INDEX 1
+/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_BAUDRATE 115200 +#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600,\
115200}
+/* include default commands */ +#include <config_cmd_default.h>
+/* remove unused commands */ +#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */ +#undef CONFIG_CMD_FPGA /* FPGA configuration support */ +#undef CONFIG_CMD_IMI +#undef CONFIG_CMD_IMLS +#undef CONFIG_CMD_NFS /* NFS support */ +#undef CONFIG_CMD_NET /* network support */
+/* turn on command-line edit/hist/auto */ +#define CONFIG_CMDLINE_EDITING +#define CONFIG_COMMAND_HISTORY +#define CONFIG_AUTOCOMPLETE
+#define CONFIG_SYS_NO_FLASH
+/* Environment information */ +#define CONFIG_EXTRA_ENV_SETTINGS \
- "console=ttyS0,115200n8\0" \
- "mem=" TEGRA2_SYSMEM "\0" \
- "smpflag=smp\0" \
+#define CONFIG_LOADADDR 0x408000 /* def. location for kernel */ +#define CONFIG_BOOTDELAY 2 /* -1 to disable auto boot */
+/*
- Miscellaneous configurable options
- */
+#define CONFIG_SYS_LONGHELP /* undef to save memory */ +#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */ +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " +#define CONFIG_SYS_PROMPT V_PROMPT +/*
- Increasing the size of the IO buffer as default nfsargs size is more
- than 256 and so it is not possible to edit it
- */
+#define CONFIG_SYS_CBSIZE (256 * 2) /* Console I/O Buffer Size */ +/* Print Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */ +/* Boot Argument Buffer Size */ +#define CONFIG_SYS_BARGSIZE (CONFIG_SYS_CBSIZE)
+#define CONFIG_SYS_MEMTEST_START (TEGRA2_SDRC_CS0 + 0x600000) +#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x100000)
+#define CONFIG_SYS_LOAD_ADDR (0xA00800) /* default */ +#define CONFIG_SYS_HZ 1000
+/*-----------------------------------------------------------------------
- Stack sizes
- The stack sizes are set up in start.S using the settings below
- */
+#define CONFIG_STACKBASE 0x2800000 /* 40MB */ +#define CONFIG_STACKSIZE 0x20000 /* 128K regular stack*/ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ 0x1000 /* 4K IRQ stack */ +#define CONFIG_STACKSIZE_FIQ 0x1000 /* 4K FIQ stack */ +#endif
+/*-----------------------------------------------------------------------
- Physical Memory Map
- */
+#define CONFIG_NR_DRAM_BANKS 1 +#define PHYS_SDRAM_1 TEGRA2_SDRC_CS0 +#define PHYS_SDRAM_1_SIZE 0x20000000 /* 512M */
+#define CONFIG_SYS_TEXT_BASE 0x00E08000 +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
+#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_STACKBASE +#define CONFIG_SYS_INIT_RAM_SIZE CONFIG_SYS_MALLOC_LEN +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
CONFIG_SYS_INIT_RAM_SIZE - \
GENERATED_GBL_DATA_SIZE)
+#endif /* __CONFIG_H */
The endif comment should be changed to match the define at the top of the file.
Regards, Peter

--- MAINTAINERS | 1 + arch/arm/include/asm/mach-types.h | 1 + board/tegra2/seaboard/Makefile | 50 +++++++++++++++++++++++++++++++++++++ boards.cfg | 1 + include/configs/seaboard.h | 43 +++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 0 deletions(-) create mode 100644 board/tegra2/seaboard/Makefile create mode 100644 include/configs/seaboard.h
diff --git a/MAINTAINERS b/MAINTAINERS index b5cff19..f4795d3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -844,6 +844,7 @@ Prafulla Wadaskar prafulla@marvell.com Tom Warren twarren@nvidia.com
harmony Tegra2 (ARM7 & A9 Dual Core) + seaboard Tegra2 (ARM7 & A9 Dual Core)
Matthias Weisser weisserm@arcor.de
diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h index 8b0208a..45239f3 100644 --- a/arch/arm/include/asm/mach-types.h +++ b/arch/arm/include/asm/mach-types.h @@ -2984,6 +2984,7 @@ extern unsigned int __machine_arch_type; #define MACH_TYPE_AWM2 3003 #define MACH_TYPE_TI8148EVM 3004 #define MACH_TYPE_TEGRA_SEABOARD 3005 +#define MACH_TYPE_SEABOARD 3005 #define MACH_TYPE_LINKSTATION_CHLV2 3006 #define MACH_TYPE_TERA_PRO2_RACK 3007 #define MACH_TYPE_RUBYS 3008 diff --git a/board/tegra2/seaboard/Makefile b/board/tegra2/seaboard/Makefile new file mode 100644 index 0000000..3a146cb --- /dev/null +++ b/board/tegra2/seaboard/Makefile @@ -0,0 +1,50 @@ +# +# (C) Copyright 2010,2011 +# 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 + +LIB = $(obj)lib$(BOARD).o + +COBJS += ../common/board.o + +SRCS := $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) + +$(LIB): $(obj).depend $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + +clean: + rm -f $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/boards.cfg b/boards.cfg index 6562bf5..abdb06d 100644 --- a/boards.cfg +++ b/boards.cfg @@ -123,6 +123,7 @@ omap4_sdp4430 arm armv7 sdp4430 ti s5p_goni arm armv7 goni samsung s5pc1xx smdkc100 arm armv7 smdkc100 samsung s5pc1xx harmony arm armv7 harmony tegra2 tegra2 +seaboard arm armv7 seaboard tegra2 tegra2 actux1 arm ixp actux2 arm ixp actux3 arm ixp diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h new file mode 100644 index 0000000..f21849f --- /dev/null +++ b/include/configs/seaboard.h @@ -0,0 +1,43 @@ +/* + * (C) Copyright 2010,2011 + * 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 __CONFIG_H +#define __CONFIG_H + +#include <asm/sizes.h> +#include "nv-common.h" + +/* High-level configuration options */ +#define TEGRA2_SYSMEM "mem=384M@0M nvmem=128M@384M mem=512M@512M" +#define V_PROMPT "Tegra2 (SeaBoard) # " +#define CONFIG_TEGRA2_BOARD_STRING "NVIDIA Seaboard" + +/* Board-specific serial config */ +#define CONFIG_SERIAL_MULTI +#define CONFIG_TEGRA2_ENABLE_UARTD 1 +#define CONFIG_SYS_NS16550_COM1 NV_PA_APB_UARTD_BASE + +#define CONFIG_MACH_TYPE MACH_TYPE_SEABOARD +#define CONFIG_SYS_BOARD_ODMDATA 0x300d8011 /* lp1, 1GB */ + +#endif /* __CONFIG_H */

Hi Tom,
Nice to see support for this board
#define MACH_TYPE_TI8148EVM 3004 #define MACH_TYPE_TEGRA_SEABOARD 3005 +#define MACH_TYPE_SEABOARD 3005
I don't think this is the way it is supposed to be done. Patches should not contain an addition to mach-types.h. What is generally done is you ask for an ARM sync request and in the past Tom Rix and I have updated mach-types.h.
I did this some weeks ago.
Also i think we cannot have 2 EVMs with same MACH_TYPE_ You should probably go to ARM Linux website and register as a separate EVM. The Number you get from there should be used. I beleive you can also change the name of the board there; assu,ing you intend to use MACH_TYPE_SEABOARD instead of MACH_TYPE_TEGRA_SEABOARD.
It usually takes a little bit of time for the mach-types to be updated in the linux kernel. Once that is done we sync up with the kernel.
Regards, Sandeep

Thanks, Sandeep.
As I understand it, one of our Tegra2 kernel jockeys (Allen Martin or similar) has already had the kernel version of mach-types.h updated for Seaboard - I was just attempting to use the correct #define (MACH_TYPE_SEABOARD - we dropped all of the MACH_TYPE_TEGRA_ names AFAIK) so my patch would build/boot. Of course this define doesn't matter until the kernel is booting w/the upstreamed U-Boot, which is a ways off (it boots fine here w/our private version of U-Boot based on V2010-09).
Assuming I'm correct about the Linux version of mach-types already having been updated, how do I get a sync request in? And how is that phased in to match with my patches so that it all builds/boots?
Thanks,
Tom
-----Original Message----- From: Paulraj, Sandeep [mailto:s-paulraj@ti.com] Sent: Tuesday, January 11, 2011 5:16 PM To: Tom Warren; u-boot@lists.denx.de Cc: Tom Warren Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Hi Tom,
Nice to see support for this board
#define MACH_TYPE_TI8148EVM 3004 #define MACH_TYPE_TEGRA_SEABOARD 3005 +#define MACH_TYPE_SEABOARD 3005
I don't think this is the way it is supposed to be done. Patches should not contain an addition to mach-types.h. What is generally done is you ask for an ARM sync request and in the past Tom Rix and I have updated mach-types.h.
I did this some weeks ago.
Also i think we cannot have 2 EVMs with same MACH_TYPE_ You should probably go to ARM Linux website and register as a separate EVM. The Number you get from there should be used. I beleive you can also change the name of the board there; assu,ing you intend to use MACH_TYPE_SEABOARD instead of MACH_TYPE_TEGRA_SEABOARD.
It usually takes a little bit of time for the mach-types to be updated in the linux kernel. Once that is done we sync up with the kernel.
Regards, Sandeep
----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. -----------------------------------------------------------------------------------

Hi Tom,
We keep the U-Boot in sync with what is at
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f...
I can see that the kernel does not have the updated name yet.
Since it is only required while booting a kernel, i would just keep the old name for the time being. When the kernel has this update, we will update U-Boot and then you will have to send in a patch to reflect this change. In any case u mention that you have follow up patches. By the time u get all the patches accepted, the mach-types would have been updated in the kernel and in U-boot.
Also in one of ur patches you had updates to serial driver. You will have to keep that change in a separte patch.
Regards, Sandeep ________________________________________ From: Tom Warren [TWarren@nvidia.com] Sent: Tuesday, January 11, 2011 7:43 PM To: Paulraj, Sandeep; Tom Warren; u-boot@lists.denx.de Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Thanks, Sandeep.
As I understand it, one of our Tegra2 kernel jockeys (Allen Martin or similar) has already had the kernel version of mach-types.h updated for Seaboard - I was just attempting to use the correct #define (MACH_TYPE_SEABOARD - we dropped all of the MACH_TYPE_TEGRA_ names AFAIK) so my patch would build/boot. Of course this define doesn't matter until the kernel is booting w/the upstreamed U-Boot, which is a ways off (it boots fine here w/our private version of U-Boot based on V2010-09).
Assuming I'm correct about the Linux version of mach-types already having been updated, how do I get a sync request in? And how is that phased in to match with my patches so that it all builds/boots?
Thanks,
Tom
-----Original Message----- From: Paulraj, Sandeep [mailto:s-paulraj@ti.com] Sent: Tuesday, January 11, 2011 5:16 PM To: Tom Warren; u-boot@lists.denx.de Cc: Tom Warren Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Hi Tom,
Nice to see support for this board
#define MACH_TYPE_TI8148EVM 3004 #define MACH_TYPE_TEGRA_SEABOARD 3005 +#define MACH_TYPE_SEABOARD 3005
I don't think this is the way it is supposed to be done. Patches should not contain an addition to mach-types.h. What is generally done is you ask for an ARM sync request and in the past Tom Rix and I have updated mach-types.h.
I did this some weeks ago.
Also i think we cannot have 2 EVMs with same MACH_TYPE_ You should probably go to ARM Linux website and register as a separate EVM. The Number you get from there should be used. I beleive you can also change the name of the board there; assu,ing you intend to use MACH_TYPE_SEABOARD instead of MACH_TYPE_TEGRA_SEABOARD.
It usually takes a little bit of time for the mach-types to be updated in the linux kernel. Once that is done we sync up with the kernel.
Regards, Sandeep
----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. -----------------------------------------------------------------------------------

-----Original Message----- From: Paulraj, Sandeep [mailto:s-paulraj@ti.com] Sent: Tuesday, January 11, 2011 7:00 PM To: Tom Warren; Tom Warren; u-boot@lists.denx.de Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Hi Tom,
[Tom Warren] Hi. Sorry for top-quoting before. My comments are now in-line. Note that I've put in a request to my IT department to remove the 'confidential information' b.s. disclaimer that is appended to all my outgoing Outlook emails. If anyone knows how to get Gmail to use the standard ">" reply-to quoting, I can start using my Gmail account instead.
We keep the U-Boot in sync with what is at
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux- 2.6.git;a=history;f=arch/arm/tools/mach- types;h=2fea897ebeb12959415120a7c1cdcaf5d8ac8fee;hb=4162cf64973df51fc885825b c9ca4d055891c49f
I can see that the kernel does not have the updated name yet.
[Tom Warren] I'm surprised, since I was told the kernel's copy had been updated. I'll check with the kernel guys - perhaps it only went into Android's kernel, etc.
Since it is only required while booting a kernel, i would just keep the old name for the time being. When the kernel has this update, we will update U-Boot and then you will have to send in a patch to reflect this change. In any case u mention that you have follow up patches. By the time u get all the patches accepted, the mach-types would have been updated in the kernel and in U- boot.
[Tom Warren] Good idea. I'll pull out the mach-types.h change in the next (V2) patch series.
Also in one of ur patches you had updates to serial driver. You will have to keep that change in a separate patch.
[Tom Warren] Why separate? It's an integral part of adding Tegra2 support, which is what the 1st patch does. But if that's required, then I'll change that, too, in V2.
Regards, Sandeep ________________________________________ From: Tom Warren [TWarren@nvidia.com] Sent: Tuesday, January 11, 2011 7:43 PM To: Paulraj, Sandeep; Tom Warren; u-boot@lists.denx.de Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Thanks, Sandeep.
As I understand it, one of our Tegra2 kernel jockeys (Allen Martin or similar) has already had the kernel version of mach-types.h updated for Seaboard - I was just attempting to use the correct #define (MACH_TYPE_SEABOARD - we dropped all of the MACH_TYPE_TEGRA_ names AFAIK) so my patch would build/boot. Of course this define doesn't matter until the kernel is booting w/the upstreamed U-Boot, which is a ways off (it boots fine here w/our private version of U-Boot based on V2010-09).
Assuming I'm correct about the Linux version of mach-types already having been updated, how do I get a sync request in? And how is that phased in to match with my patches so that it all builds/boots?
Thanks,
Tom
-----Original Message----- From: Paulraj, Sandeep [mailto:s-paulraj@ti.com] Sent: Tuesday, January 11, 2011 5:16 PM To: Tom Warren; u-boot@lists.denx.de Cc: Tom Warren Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Hi Tom,
Nice to see support for this board
#define MACH_TYPE_TI8148EVM 3004 #define MACH_TYPE_TEGRA_SEABOARD 3005 +#define MACH_TYPE_SEABOARD 3005
I don't think this is the way it is supposed to be done. Patches should not contain an addition to mach-types.h. What is generally done is you ask for an ARM sync request and in the past Tom Rix and I have updated mach-types.h.
I did this some weeks ago.
Also i think we cannot have 2 EVMs with same MACH_TYPE_ You should probably go to ARM Linux website and register as a separate
EVM.
The Number you get from there should be used. I beleive you can also
change
the name of the board there; assu,ing you intend to use MACH_TYPE_SEABOARD instead of MACH_TYPE_TEGRA_SEABOARD.
It usually takes a little bit of time for the mach-types to be updated in the linux kernel. Once that is done we sync up with the kernel.
Regards, Sandeep
This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.

Replying from my Gmail account until NVIDIA IT can remove the canned disclaimer.
Sorry for the top-quote - just wanted to see if Gmail would correctly quote previous text.
If there are no other critiques or NAKs, etc., then I'll start working on a V2 patch with Sandeep's changes.
Thanks,
Tom
On Wed, Jan 12, 2011 at 10:05 AM, Tom Warren TWarren@nvidia.com wrote:
-----Original Message----- From: Paulraj, Sandeep [mailto:s-paulraj@ti.com] Sent: Tuesday, January 11, 2011 7:00 PM To: Tom Warren; Tom Warren; u-boot@lists.denx.de Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Hi Tom,
[Tom Warren] Hi. Sorry for top-quoting before. My comments are now in-line. Note that I've put in a request to my IT department to remove the 'confidential information' b.s. disclaimer that is appended to all my outgoing Outlook emails. If anyone knows how to get Gmail to use the standard ">" reply-to quoting, I can start using my Gmail account instead.
We keep the U-Boot in sync with what is at
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux- 2.6.git;a=history;f=arch/arm/tools/mach- types;h=2fea897ebeb12959415120a7c1cdcaf5d8ac8fee;hb=4162cf64973df51fc885825b c9ca4d055891c49f
I can see that the kernel does not have the updated name yet.
[Tom Warren] I'm surprised, since I was told the kernel's copy had been updated. I'll check with the kernel guys - perhaps it only went into Android's kernel, etc.
Since it is only required while booting a kernel, i would just keep the old name for the time being. When the kernel has this update, we will update U-Boot and then you will have to send in a patch to reflect this change. In any case u mention that you have follow up patches. By the time u get all the patches accepted, the mach-types would have been updated in the kernel and in U- boot.
[Tom Warren] Good idea. I'll pull out the mach-types.h change in the next (V2) patch series.
Also in one of ur patches you had updates to serial driver. You will have to keep that change in a separate patch.
[Tom Warren] Why separate? It's an integral part of adding Tegra2 support, which is what the 1st patch does. But if that's required, then I'll change that, too, in V2.
Regards, Sandeep ________________________________________ From: Tom Warren [TWarren@nvidia.com] Sent: Tuesday, January 11, 2011 7:43 PM To: Paulraj, Sandeep; Tom Warren; u-boot@lists.denx.de Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Thanks, Sandeep.
As I understand it, one of our Tegra2 kernel jockeys (Allen Martin or similar) has already had the kernel version of mach-types.h updated for Seaboard - I was just attempting to use the correct #define (MACH_TYPE_SEABOARD - we dropped all of the MACH_TYPE_TEGRA_ names AFAIK) so my patch would build/boot. Of course this define doesn't matter until the kernel is booting w/the upstreamed U-Boot, which is a ways off (it boots fine here w/our private version of U-Boot based on V2010-09).
Assuming I'm correct about the Linux version of mach-types already having been updated, how do I get a sync request in? And how is that phased in to match with my patches so that it all builds/boots?
Thanks,
Tom
-----Original Message----- From: Paulraj, Sandeep [mailto:s-paulraj@ti.com] Sent: Tuesday, January 11, 2011 5:16 PM To: Tom Warren; u-boot@lists.denx.de Cc: Tom Warren Subject: RE: [U-Boot] [PATCH 3/3] arm: Tegra2: Add support for NVIDIA Seaboard board Signed-off-by: Tom Warren twarren@nvidia.com
Hi Tom,
Nice to see support for this board
#define MACH_TYPE_TI8148EVM 3004 #define MACH_TYPE_TEGRA_SEABOARD 3005 +#define MACH_TYPE_SEABOARD 3005
I don't think this is the way it is supposed to be done. Patches should not contain an addition to mach-types.h. What is generally done is you ask for an ARM sync request and in the past Tom Rix and I have updated mach-types.h.
I did this some weeks ago.
Also i think we cannot have 2 EVMs with same MACH_TYPE_ You should probably go to ARM Linux website and register as a separate
EVM.
The Number you get from there should be used. I beleive you can also
change
the name of the board there; assu,ing you intend to use MACH_TYPE_SEABOARD instead of MACH_TYPE_TEGRA_SEABOARD.
It usually takes a little bit of time for the mach-types to be updated in the linux kernel. Once that is done we sync up with the kernel.
Regards, Sandeep
This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.
participants (4)
-
Paulraj, Sandeep
-
Peter Tyser
-
Tom Warren
-
Tom Warren