tegra20: rename tegra2 -> tegra20
authorAllen Martin <amartin@nvidia.com>
Fri, 31 Aug 2012 08:30:00 +0000 (08:30 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sat, 1 Sep 2012 12:58:21 +0000 (14:58 +0200)
This is make naming consistent with the kernel and devicetree and in
preparation of pulling out the common tegra20 code.

Signed-off-by: Allen Martin <amartin@nvidia.com>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Tested-by: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Tom Warren <twarren@nvidia.com>
141 files changed:
MAINTAINERS
arch/arm/cpu/armv7/start.S
arch/arm/cpu/armv7/tegra2/Makefile [deleted file]
arch/arm/cpu/armv7/tegra2/ap20.c [deleted file]
arch/arm/cpu/armv7/tegra2/board.c [deleted file]
arch/arm/cpu/armv7/tegra2/clock.c [deleted file]
arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c [deleted file]
arch/arm/cpu/armv7/tegra2/config.mk [deleted file]
arch/arm/cpu/armv7/tegra2/crypto.c [deleted file]
arch/arm/cpu/armv7/tegra2/crypto.h [deleted file]
arch/arm/cpu/armv7/tegra2/emc.c [deleted file]
arch/arm/cpu/armv7/tegra2/funcmux.c [deleted file]
arch/arm/cpu/armv7/tegra2/lowlevel_init.S [deleted file]
arch/arm/cpu/armv7/tegra2/pinmux.c [deleted file]
arch/arm/cpu/armv7/tegra2/pmu.c [deleted file]
arch/arm/cpu/armv7/tegra2/sys_info.c [deleted file]
arch/arm/cpu/armv7/tegra2/timer.c [deleted file]
arch/arm/cpu/armv7/tegra2/usb.c [deleted file]
arch/arm/cpu/armv7/tegra2/warmboot.c [deleted file]
arch/arm/cpu/armv7/tegra2/warmboot_avp.c [deleted file]
arch/arm/cpu/armv7/tegra2/warmboot_avp.h [deleted file]
arch/arm/cpu/armv7/tegra20/Makefile [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/ap20.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/board.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/clock.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/cmd_enterrcm.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/config.mk [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/crypto.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/crypto.h [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/emc.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/funcmux.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/lowlevel_init.S [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/pinmux.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/pmu.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/sys_info.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/timer.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/usb.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/warmboot.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/warmboot_avp.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra20/warmboot_avp.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra2/ap20.h [deleted file]
arch/arm/include/asm/arch-tegra2/apb_misc.h [deleted file]
arch/arm/include/asm/arch-tegra2/board.h [deleted file]
arch/arm/include/asm/arch-tegra2/clk_rst.h [deleted file]
arch/arm/include/asm/arch-tegra2/clock.h [deleted file]
arch/arm/include/asm/arch-tegra2/emc.h [deleted file]
arch/arm/include/asm/arch-tegra2/flow.h [deleted file]
arch/arm/include/asm/arch-tegra2/funcmux.h [deleted file]
arch/arm/include/asm/arch-tegra2/fuse.h [deleted file]
arch/arm/include/asm/arch-tegra2/gp_padctrl.h [deleted file]
arch/arm/include/asm/arch-tegra2/gpio.h [deleted file]
arch/arm/include/asm/arch-tegra2/mmc.h [deleted file]
arch/arm/include/asm/arch-tegra2/pinmux.h [deleted file]
arch/arm/include/asm/arch-tegra2/pmc.h [deleted file]
arch/arm/include/asm/arch-tegra2/pmu.h [deleted file]
arch/arm/include/asm/arch-tegra2/scu.h [deleted file]
arch/arm/include/asm/arch-tegra2/sdram_param.h [deleted file]
arch/arm/include/asm/arch-tegra2/sys_proto.h [deleted file]
arch/arm/include/asm/arch-tegra2/tegra2.h [deleted file]
arch/arm/include/asm/arch-tegra2/tegra_i2c.h [deleted file]
arch/arm/include/asm/arch-tegra2/tegra_spi.h [deleted file]
arch/arm/include/asm/arch-tegra2/timer.h [deleted file]
arch/arm/include/asm/arch-tegra2/uart-spi-switch.h [deleted file]
arch/arm/include/asm/arch-tegra2/uart.h [deleted file]
arch/arm/include/asm/arch-tegra2/usb.h [deleted file]
arch/arm/include/asm/arch-tegra2/warmboot.h [deleted file]
arch/arm/include/asm/arch-tegra20/ap20.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/apb_misc.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/board.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/clk_rst.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/clock.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/emc.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/flow.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/funcmux.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/fuse.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/gp_padctrl.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/gpio.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/mmc.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/pinmux.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/pmc.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/pmu.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/scu.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/sdram_param.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/sys_proto.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/tegra20.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/tegra_i2c.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/tegra_spi.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/timer.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/uart-spi-switch.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/uart.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/usb.h [new file with mode: 0644]
arch/arm/include/asm/arch-tegra20/warmboot.h [new file with mode: 0644]
board/avionic-design/common/tamonten.c
board/avionic-design/dts/tegra2-medcom.dts [deleted file]
board/avionic-design/dts/tegra2-plutux.dts [deleted file]
board/avionic-design/dts/tegra2-tec.dts [deleted file]
board/avionic-design/dts/tegra20-medcom.dts [new file with mode: 0644]
board/avionic-design/dts/tegra20-plutux.dts [new file with mode: 0644]
board/avionic-design/dts/tegra20-tec.dts [new file with mode: 0644]
board/compal/dts/tegra2-paz00.dts [deleted file]
board/compal/dts/tegra20-paz00.dts [new file with mode: 0644]
board/compal/paz00/paz00.c
board/compulab/dts/tegra2-trimslice.dts [deleted file]
board/compulab/dts/tegra20-trimslice.dts [new file with mode: 0644]
board/compulab/trimslice/trimslice.c
board/nvidia/common/board.c
board/nvidia/common/emc.c
board/nvidia/common/uart-spi-switch.c
board/nvidia/dts/tegra2-harmony.dts [deleted file]
board/nvidia/dts/tegra2-seaboard.dts [deleted file]
board/nvidia/dts/tegra2-ventana.dts [deleted file]
board/nvidia/dts/tegra2-whistler.dts [deleted file]
board/nvidia/dts/tegra20-harmony.dts [new file with mode: 0644]
board/nvidia/dts/tegra20-seaboard.dts [new file with mode: 0644]
board/nvidia/dts/tegra20-ventana.dts [new file with mode: 0644]
board/nvidia/dts/tegra20-whistler.dts [new file with mode: 0644]
board/nvidia/harmony/harmony.c
board/nvidia/seaboard/seaboard.c
board/nvidia/whistler/whistler.c
boards.cfg
drivers/gpio/tegra_gpio.c
drivers/i2c/tegra_i2c.c
drivers/input/Makefile
drivers/mmc/tegra_mmc.c
drivers/mmc/tegra_mmc.h
drivers/spi/tegra_spi.c
include/configs/harmony.h
include/configs/medcom.h
include/configs/paz00.h
include/configs/plutux.h
include/configs/seaboard.h
include/configs/tec.h
include/configs/tegra2-common-post.h [deleted file]
include/configs/tegra2-common.h [deleted file]
include/configs/tegra20-common-post.h [new file with mode: 0644]
include/configs/tegra20-common.h [new file with mode: 0644]
include/configs/trimslice.h
include/configs/ventana.h
include/configs/whistler.h
include/fdtdec.h
include/serial.h

index 403b8d11d68786f8c8ac824a5d5668c3057178c8..d9e30c56339f58ecd631a6b28725b25c9f30a4b0 100644 (file)
@@ -831,9 +831,9 @@ Sricharan R <r.sricharan@ti.com>
 
 Thierry Reding <thierry.reding@avionic-design.de>
 
-       plutux          Tegra2 (ARM7 & A9 Dual Core)
-       medcom          Tegra2 (ARM7 & A9 Dual Core)
-       tec             Tegra2 (ARM7 & A9 Dual Core)
+       plutux          Tegra20 (ARM7 & A9 Dual Core)
+       medcom          Tegra20 (ARM7 & A9 Dual Core)
+       tec             Tegra20 (ARM7 & A9 Dual Core)
 
 Christian Riesch <christian.riesch@omicron.at>
 Manfred Rudigier <manfred.rudigier@omicron.at>
@@ -941,16 +941,16 @@ Michael Walle <michael@walle.cc>
 
 Tom Warren <twarren@nvidia.com>
 
-       harmony         Tegra2 (ARM7 & A9 Dual Core)
-       seaboard        Tegra2 (ARM7 & A9 Dual Core)
+       harmony         Tegra20 (ARM7 & A9 Dual Core)
+       seaboard        Tegra20 (ARM7 & A9 Dual Core)
 
 Tom Warren <twarren@nvidia.com>
 Stephen Warren <swarren@nvidia.com>
 
-       ventana         Tegra2 (ARM7 & A9 Dual Core)
-       paz00           Tegra2 (ARM7 & A9 Dual Core)
-       trimslice       Tegra2 (ARM7 & A9 Dual Core)
-       whistler        Tegra2 (ARM7 & A9 Dual Core)
+       ventana         Tegra20 (ARM7 & A9 Dual Core)
+       paz00           Tegra20 (ARM7 & A9 Dual Core)
+       trimslice       Tegra20 (ARM7 & A9 Dual Core)
+       whistler        Tegra20 (ARM7 & A9 Dual Core)
 
 Stephen Warren <swarren@wwwdotorg.org>
 
index aee27fdc4d33bac268b27961a28bd5504e1b908f..38cce938bad974512735d45617eaef8729c9a429 100644 (file)
@@ -133,7 +133,7 @@ reset:
        orr     r0, r0, #0xd3
        msr     cpsr,r0
 
-#if !defined(CONFIG_TEGRA2)
+#if !defined(CONFIG_TEGRA20)
 /*
  * Setup vector:
  * (OMAP4 spl TEXT_BASE is not 32 byte aligned.
@@ -149,7 +149,7 @@ reset:
        ldr     r0, =_start
        mcr     p15, 0, r0, c12, c0, 0  @Set VBAR
 #endif
-#endif /* !Tegra2 */
+#endif /* !Tegra20 */
 
        /* the mask ROM code should have PLL and others stable */
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
@@ -282,14 +282,14 @@ jump_2_ram:
 /*
  * Move vector table
  */
-#if !defined(CONFIG_TEGRA2)
+#if !defined(CONFIG_TEGRA20)
 #if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD))
        /* Set vector address in CP15 VBAR register */
        ldr     r0, =_start
        add     r0, r0, r9
        mcr     p15, 0, r0, c12, c0, 0  @Set VBAR
 #endif
-#endif /* !Tegra2 */
+#endif /* !Tegra20 */
 
        ldr     r0, _board_init_r_ofs
        adr     r1, _start
diff --git a/arch/arm/cpu/armv7/tegra2/Makefile b/arch/arm/cpu/armv7/tegra2/Makefile
deleted file mode 100644 (file)
index 80da453..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# (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
-#
-
-# The AVP is ARMv4T architecture so we must use special compiler
-# flags for any startup files it might use.
-CFLAGS_arch/arm/cpu/armv7/tegra2/ap20.o += -march=armv4t
-CFLAGS_arch/arm/cpu/armv7/tegra2/clock.o += -march=armv4t
-CFLAGS_arch/arm/cpu/armv7/tegra2/warmboot_avp.o += -march=armv4t
-
-include $(TOPDIR)/config.mk
-
-LIB    =  $(obj)lib$(SOC).o
-
-SOBJS  := lowlevel_init.o
-COBJS-y        := ap20.o board.o clock.o funcmux.o pinmux.o sys_info.o timer.o
-COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o
-COBJS-$(CONFIG_TEGRA_PMU) += pmu.o
-COBJS-$(CONFIG_USB_EHCI_TEGRA) += usb.o
-COBJS-$(CONFIG_TEGRA2_LP0) += crypto.o warmboot.o warmboot_avp.o
-COBJS-$(CONFIG_CMD_ENTERRCM) += cmd_enterrcm.o
-
-COBJS  := $(COBJS-y)
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
-
-all:    $(obj).depend $(LIB)
-
-$(LIB):        $(OBJS)
-       $(call cmd_link_o_target, $(OBJS))
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
diff --git a/arch/arm/cpu/armv7/tegra2/ap20.c b/arch/arm/cpu/armv7/tegra2/ap20.c
deleted file mode 100644 (file)
index 1aad387..0000000
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
-* (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 <asm/io.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/ap20.h>
-#include <asm/arch/clk_rst.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/fuse.h>
-#include <asm/arch/gp_padctrl.h>
-#include <asm/arch/pmc.h>
-#include <asm/arch/pinmux.h>
-#include <asm/arch/scu.h>
-#include <asm/arch/warmboot.h>
-#include <common.h>
-
-int tegra_get_chip_type(void)
-{
-       struct apb_misc_gp_ctlr *gp;
-       struct fuse_regs *fuse = (struct fuse_regs *)TEGRA2_FUSE_BASE;
-       uint tegra_sku_id, rev;
-
-       /*
-        * This is undocumented, Chip ID is bits 15:8 of the register
-        * APB_MISC + 0x804, and has value 0x20 for Tegra20, 0x30 for
-        * Tegra30
-        */
-       gp = (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
-       rev = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >> HIDREV_CHIPID_SHIFT;
-
-       tegra_sku_id = readl(&fuse->sku_info) & 0xff;
-
-       switch (rev) {
-       case CHIPID_TEGRA2:
-               switch (tegra_sku_id) {
-               case SKU_ID_T20:
-                       return TEGRA_SOC_T20;
-               case SKU_ID_T25SE:
-               case SKU_ID_AP25:
-               case SKU_ID_T25:
-               case SKU_ID_AP25E:
-               case SKU_ID_T25E:
-                       return TEGRA_SOC_T25;
-               }
-               break;
-       }
-       /* unknown sku id */
-       return TEGRA_SOC_UNKNOWN;
-}
-
-/* Returns 1 if the current CPU executing is a Cortex-A9, else 0 */
-static int ap20_cpu_is_cortexa9(void)
-{
-       u32 id = readb(NV_PA_PG_UP_BASE + PG_UP_TAG_0);
-       return id == (PG_UP_TAG_0_PID_CPU & 0xff);
-}
-
-void init_pllx(void)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       struct clk_pll_simple *pll =
-               &clkrst->crc_pll_simple[CLOCK_ID_XCPU - CLOCK_ID_FIRST_SIMPLE];
-       u32 reg;
-
-       /* If PLLX is already enabled, just return */
-       if (readl(&pll->pll_base) & PLL_ENABLE_MASK)
-               return;
-
-       /* Set PLLX_MISC */
-       writel(1 << PLL_CPCON_SHIFT, &pll->pll_misc);
-
-       /* Use 12MHz clock here */
-       reg = PLL_BYPASS_MASK | (12 << PLL_DIVM_SHIFT);
-       reg |= 1000 << PLL_DIVN_SHIFT;
-       writel(reg, &pll->pll_base);
-
-       reg |= PLL_ENABLE_MASK;
-       writel(reg, &pll->pll_base);
-
-       reg &= ~PLL_BYPASS_MASK;
-       writel(reg, &pll->pll_base);
-}
-
-static void enable_cpu_clock(int enable)
-{
-       struct clk_rst_ctlr *clkrst = (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       u32 clk;
-
-       /*
-        * NOTE:
-        * Regardless of whether the request is to enable or disable the CPU
-        * clock, every processor in the CPU complex except the master (CPU 0)
-        * will have it's clock stopped because the AVP only talks to the
-        * master. The AVP does not know (nor does it need to know) that there
-        * are multiple processors in the CPU complex.
-        */
-
-       if (enable) {
-               /* Initialize PLLX */
-               init_pllx();
-
-               /* Wait until all clocks are stable */
-               udelay(PLL_STABILIZATION_DELAY);
-
-               writel(CCLK_BURST_POLICY, &clkrst->crc_cclk_brst_pol);
-               writel(SUPER_CCLK_DIVIDER, &clkrst->crc_super_cclk_div);
-       }
-
-       /*
-        * Read the register containing the individual CPU clock enables and
-        * always stop the clock to CPU 1.
-        */
-       clk = readl(&clkrst->crc_clk_cpu_cmplx);
-       clk |= 1 << CPU1_CLK_STP_SHIFT;
-
-       /* Stop/Unstop the CPU clock */
-       clk &= ~CPU0_CLK_STP_MASK;
-       clk |= !enable << CPU0_CLK_STP_SHIFT;
-       writel(clk, &clkrst->crc_clk_cpu_cmplx);
-
-       clock_enable(PERIPH_ID_CPU);
-}
-
-static int is_cpu_powered(void)
-{
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-
-       return (readl(&pmc->pmc_pwrgate_status) & CPU_PWRED) ? 1 : 0;
-}
-
-static void remove_cpu_io_clamps(void)
-{
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       u32 reg;
-
-       /* Remove the clamps on the CPU I/O signals */
-       reg = readl(&pmc->pmc_remove_clamping);
-       reg |= CPU_CLMP;
-       writel(reg, &pmc->pmc_remove_clamping);
-
-       /* Give I/O signals time to stabilize */
-       udelay(IO_STABILIZATION_DELAY);
-}
-
-static void powerup_cpu(void)
-{
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       u32 reg;
-       int timeout = IO_STABILIZATION_DELAY;
-
-       if (!is_cpu_powered()) {
-               /* Toggle the CPU power state (OFF -> ON) */
-               reg = readl(&pmc->pmc_pwrgate_toggle);
-               reg &= PARTID_CP;
-               reg |= START_CP;
-               writel(reg, &pmc->pmc_pwrgate_toggle);
-
-               /* Wait for the power to come up */
-               while (!is_cpu_powered()) {
-                       if (timeout-- == 0)
-                               printf("CPU failed to power up!\n");
-                       else
-                               udelay(10);
-               }
-
-               /*
-                * Remove the I/O clamps from CPU power partition.
-                * Recommended only on a Warm boot, if the CPU partition gets
-                * power gated. Shouldn't cause any harm when called after a
-                * cold boot according to HW, probably just redundant.
-                */
-               remove_cpu_io_clamps();
-       }
-}
-
-static void enable_cpu_power_rail(void)
-{
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       u32 reg;
-
-       reg = readl(&pmc->pmc_cntrl);
-       reg |= CPUPWRREQ_OE;
-       writel(reg, &pmc->pmc_cntrl);
-
-       /*
-        * The TI PMU65861C needs a 3.75ms delay between enabling
-        * the power rail and enabling the CPU clock.  This delay
-        * between SM1EN and SM1 is for switching time + the ramp
-        * up of the voltage to the CPU (VDD_CPU from PMU).
-        */
-       udelay(3750);
-}
-
-static void reset_A9_cpu(int reset)
-{
-       /*
-       * NOTE:  Regardless of whether the request is to hold the CPU in reset
-       *        or take it out of reset, every processor in the CPU complex
-       *        except the master (CPU 0) will be held in reset because the
-       *        AVP only talks to the master. The AVP does not know that there
-       *        are multiple processors in the CPU complex.
-       */
-
-       /* Hold CPU 1 in reset, and CPU 0 if asked */
-       reset_cmplx_set_enable(1, crc_rst_cpu | crc_rst_de | crc_rst_debug, 1);
-       reset_cmplx_set_enable(0, crc_rst_cpu | crc_rst_de | crc_rst_debug,
-                              reset);
-
-       /* Enable/Disable master CPU reset */
-       reset_set_enable(PERIPH_ID_CPU, reset);
-}
-
-static void clock_enable_coresight(int enable)
-{
-       u32 rst, src;
-
-       clock_set_enable(PERIPH_ID_CORESIGHT, enable);
-       reset_set_enable(PERIPH_ID_CORESIGHT, !enable);
-
-       if (enable) {
-               /*
-                * Put CoreSight on PLLP_OUT0 (216 MHz) and divide it down by
-                *  1.5, giving an effective frequency of 144MHz.
-                * Set PLLP_OUT0 [bits31:30 = 00], and use a 7.1 divisor
-                *  (bits 7:0), so 00000001b == 1.5 (n+1 + .5)
-                */
-               src = CLK_DIVIDER(NVBL_PLLP_KHZ, 144000);
-               clock_ll_set_source_divisor(PERIPH_ID_CSI, 0, src);
-
-               /* Unlock the CPU CoreSight interfaces */
-               rst = 0xC5ACCE55;
-               writel(rst, CSITE_CPU_DBG0_LAR);
-               writel(rst, CSITE_CPU_DBG1_LAR);
-       }
-}
-
-void start_cpu(u32 reset_vector)
-{
-       /* Enable VDD_CPU */
-       enable_cpu_power_rail();
-
-       /* Hold the CPUs in reset */
-       reset_A9_cpu(1);
-
-       /* Disable the CPU clock */
-       enable_cpu_clock(0);
-
-       /* Enable CoreSight */
-       clock_enable_coresight(1);
-
-       /*
-        * Set the entry point for CPU execution from reset,
-        *  if it's a non-zero value.
-        */
-       if (reset_vector)
-               writel(reset_vector, EXCEP_VECTOR_CPU_RESET_VECTOR);
-
-       /* Enable the CPU clock */
-       enable_cpu_clock(1);
-
-       /* If the CPU doesn't already have power, power it up */
-       powerup_cpu();
-
-       /* Take the CPU out of reset */
-       reset_A9_cpu(0);
-}
-
-
-void halt_avp(void)
-{
-       for (;;) {
-               writel((HALT_COP_EVENT_JTAG | HALT_COP_EVENT_IRQ_1 \
-                       | HALT_COP_EVENT_FIQ_1 | (FLOW_MODE_STOP<<29)),
-                       FLOW_CTLR_HALT_COP_EVENTS);
-       }
-}
-
-void enable_scu(void)
-{
-       struct scu_ctlr *scu = (struct scu_ctlr *)NV_PA_ARM_PERIPHBASE;
-       u32 reg;
-
-       /* If SCU already setup/enabled, return */
-       if (readl(&scu->scu_ctrl) & SCU_CTRL_ENABLE)
-               return;
-
-       /* Invalidate all ways for all processors */
-       writel(0xFFFF, &scu->scu_inv_all);
-
-       /* Enable SCU - bit 0 */
-       reg = readl(&scu->scu_ctrl);
-       reg |= SCU_CTRL_ENABLE;
-       writel(reg, &scu->scu_ctrl);
-}
-
-static u32 get_odmdata(void)
-{
-       /*
-        * ODMDATA is stored in the BCT in IRAM by the BootROM.
-        * The BCT start and size are stored in the BIT in IRAM.
-        * Read the data @ bct_start + (bct_size - 12). This works
-        * on T20 and T30 BCTs, which are locked down. If this changes
-        * in new chips (T114, etc.), we can revisit this algorithm.
-        */
-
-       u32 bct_start, odmdata;
-
-       bct_start = readl(AP20_BASE_PA_SRAM + NVBOOTINFOTABLE_BCTPTR);
-       odmdata = readl(bct_start + BCT_ODMDATA_OFFSET);
-
-       return odmdata;
-}
-
-void init_pmc_scratch(void)
-{
-       struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       u32 odmdata;
-       int i;
-
-       /* SCRATCH0 is initialized by the boot ROM and shouldn't be cleared */
-       for (i = 0; i < 23; i++)
-               writel(0, &pmc->pmc_scratch1+i);
-
-       /* ODMDATA is for kernel use to determine RAM size, LP config, etc. */
-       odmdata = get_odmdata();
-       writel(odmdata, &pmc->pmc_scratch20);
-
-#ifdef CONFIG_TEGRA2_LP0
-       /* save Sdram params to PMC 2, 4, and 24 for WB0 */
-       warmboot_save_sdram_params();
-#endif
-}
-
-void tegra2_start(void)
-{
-       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-
-       /* If we are the AVP, start up the first Cortex-A9 */
-       if (!ap20_cpu_is_cortexa9()) {
-               /* enable JTAG */
-               writel(0xC0, &pmt->pmt_cfg_ctl);
-
-               /*
-                * If we are ARM7 - give it a different stack. We are about to
-                * start up the A9 which will want to use this one.
-                */
-               asm volatile("mov       sp, %0\n"
-                       : : "r"(AVP_EARLY_BOOT_STACK_LIMIT));
-
-               start_cpu((u32)_start);
-               halt_avp();
-               /* not reached */
-       }
-
-       /* Init PMC scratch memory */
-       init_pmc_scratch();
-
-       enable_scu();
-
-       /* enable SMP mode and FW for CPU0, by writing to Auxiliary Ctl reg */
-       asm volatile(
-               "mrc    p15, 0, r0, c1, c0, 1\n"
-               "orr    r0, r0, #0x41\n"
-               "mcr    p15, 0, r0, c1, c0, 1\n");
-
-       /* FIXME: should have ap20's L2 disabled too? */
-}
diff --git a/arch/arm/cpu/armv7/tegra2/board.c b/arch/arm/cpu/armv7/tegra2/board.c
deleted file mode 100644 (file)
index 923678d..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *  (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/ap20.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/funcmux.h>
-#include <asm/arch/pmc.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/arch/tegra2.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-enum {
-       /* UARTs which we can enable */
-       UARTA   = 1 << 0,
-       UARTB   = 1 << 1,
-       UARTD   = 1 << 3,
-       UART_COUNT = 4,
-};
-
-/*
- * Boot ROM initializes the odmdata in APBDEV_PMC_SCRATCH20_0,
- * so we are using this value to identify memory size.
- */
-
-unsigned int query_sdram_size(void)
-{
-       struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       u32 reg;
-
-       reg = readl(&pmc->pmc_scratch20);
-       debug("pmc->pmc_scratch20 (ODMData) = 0x%08x\n", reg);
-
-       /* bits 31:28 in OdmData are used for RAM size  */
-       switch ((reg) >> 28) {
-       case 1:
-               return 0x10000000;      /* 256 MB */
-       case 2:
-       default:
-               return 0x20000000;      /* 512 MB */
-       case 3:
-               return 0x40000000;      /* 1GB */
-       }
-}
-
-int dram_init(void)
-{
-       /* We do not initialise DRAM here. We just query the size */
-       gd->ram_size = query_sdram_size();
-       return 0;
-}
-
-#ifdef CONFIG_DISPLAY_BOARDINFO
-int checkboard(void)
-{
-       printf("Board: %s\n", sysinfo.board_string);
-       return 0;
-}
-#endif /* CONFIG_DISPLAY_BOARDINFO */
-
-#ifdef CONFIG_ARCH_CPU_INIT
-/*
- * Note this function is executed by the ARM7TDMI AVP. It does not return
- * in this case. It is also called once the A9 starts up, but does nothing in
- * that case.
- */
-int arch_cpu_init(void)
-{
-       /* Fire up the Cortex A9 */
-       tegra2_start();
-
-       /* We didn't do this init in start.S, so do it now */
-       cpu_init_cp15();
-
-       /* Initialize essential common plls */
-       clock_early_init();
-
-       return 0;
-}
-#endif
-
-static int uart_configs[] = {
-#if defined(CONFIG_TEGRA2_UARTA_UAA_UAB)
-       FUNCMUX_UART1_UAA_UAB,
-#elif defined(CONFIG_TEGRA2_UARTA_GPU)
-       FUNCMUX_UART1_GPU,
-#elif defined(CONFIG_TEGRA2_UARTA_SDIO1)
-       FUNCMUX_UART1_SDIO1,
-#else
-       FUNCMUX_UART1_IRRX_IRTX,
-#endif
-       FUNCMUX_UART2_IRDA,
-       -1,
-       FUNCMUX_UART4_GMC,
-       -1,
-};
-
-/**
- * Set up the specified uarts
- *
- * @param uarts_ids    Mask containing UARTs to init (UARTx)
- */
-static void setup_uarts(int uart_ids)
-{
-       static enum periph_id id_for_uart[] = {
-               PERIPH_ID_UART1,
-               PERIPH_ID_UART2,
-               PERIPH_ID_UART3,
-               PERIPH_ID_UART4,
-       };
-       size_t i;
-
-       for (i = 0; i < UART_COUNT; i++) {
-               if (uart_ids & (1 << i)) {
-                       enum periph_id id = id_for_uart[i];
-
-                       funcmux_select(id, uart_configs[i]);
-                       clock_ll_start_uart(id);
-               }
-       }
-}
-
-void board_init_uart_f(void)
-{
-       int uart_ids = 0;       /* bit mask of which UART ids to enable */
-
-#ifdef CONFIG_TEGRA2_ENABLE_UARTA
-       uart_ids |= UARTA;
-#endif
-#ifdef CONFIG_TEGRA2_ENABLE_UARTB
-       uart_ids |= UARTB;
-#endif
-#ifdef CONFIG_TEGRA2_ENABLE_UARTD
-       uart_ids |= UARTD;
-#endif
-       setup_uarts(uart_ids);
-}
-
-#ifndef CONFIG_SYS_DCACHE_OFF
-void enable_caches(void)
-{
-       /* Enable D-cache. I-cache is already enabled in start.S */
-       dcache_enable();
-}
-#endif
diff --git a/arch/arm/cpu/armv7/tegra2/clock.c b/arch/arm/cpu/armv7/tegra2/clock.c
deleted file mode 100644 (file)
index 602589c..0000000
+++ /dev/null
@@ -1,1087 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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
- */
-
-/* Tegra2 Clock control functions */
-
-#include <asm/io.h>
-#include <asm/arch/clk_rst.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/timer.h>
-#include <asm/arch/tegra2.h>
-#include <common.h>
-#include <div64.h>
-#include <fdtdec.h>
-
-/*
- * This is our record of the current clock rate of each clock. We don't
- * fill all of these in since we are only really interested in clocks which
- * we use as parents.
- */
-static unsigned pll_rate[CLOCK_ID_COUNT];
-
-/*
- * The oscillator frequency is fixed to one of four set values. Based on this
- * the other clocks are set up appropriately.
- */
-static unsigned osc_freq[CLOCK_OSC_FREQ_COUNT] = {
-       13000000,
-       19200000,
-       12000000,
-       26000000,
-};
-
-/*
- * Clock types that we can use as a source. The Tegra2 has muxes for the
- * peripheral clocks, and in most cases there are four options for the clock
- * source. This gives us a clock 'type' and exploits what commonality exists
- * in the device.
- *
- * Letters are obvious, except for T which means CLK_M, and S which means the
- * clock derived from 32KHz. Beware that CLK_M (also called OSC in the
- * datasheet) and PLL_M are different things. The former is the basic
- * clock supplied to the SOC from an external oscillator. The latter is the
- * memory clock PLL.
- *
- * See definitions in clock_id in the header file.
- */
-enum clock_type_id {
-       CLOCK_TYPE_AXPT,        /* PLL_A, PLL_X, PLL_P, CLK_M */
-       CLOCK_TYPE_MCPA,        /* and so on */
-       CLOCK_TYPE_MCPT,
-       CLOCK_TYPE_PCM,
-       CLOCK_TYPE_PCMT,
-       CLOCK_TYPE_PCMT16,      /* CLOCK_TYPE_PCMT with 16-bit divider */
-       CLOCK_TYPE_PCXTS,
-       CLOCK_TYPE_PDCT,
-
-       CLOCK_TYPE_COUNT,
-       CLOCK_TYPE_NONE = -1,   /* invalid clock type */
-};
-
-/* return 1 if a peripheral ID is in range */
-#define clock_type_id_isvalid(id) ((id) >= 0 && \
-               (id) < CLOCK_TYPE_COUNT)
-
-char pllp_valid = 1;   /* PLLP is set up correctly */
-
-enum {
-       CLOCK_MAX_MUX   = 4     /* number of source options for each clock */
-};
-
-/*
- * Clock source mux for each clock type. This just converts our enum into
- * a list of mux sources for use by the code. Note that CLOCK_TYPE_PCXTS
- * is special as it has 5 sources. Since it also has a different number of
- * bits in its register for the source, we just handle it with a special
- * case in the code.
- */
-#define CLK(x) CLOCK_ID_ ## x
-static enum clock_id clock_source[CLOCK_TYPE_COUNT][CLOCK_MAX_MUX] = {
-       { CLK(AUDIO),   CLK(XCPU),      CLK(PERIPH),    CLK(OSC)        },
-       { CLK(MEMORY),  CLK(CGENERAL),  CLK(PERIPH),    CLK(AUDIO)      },
-       { CLK(MEMORY),  CLK(CGENERAL),  CLK(PERIPH),    CLK(OSC)        },
-       { CLK(PERIPH),  CLK(CGENERAL),  CLK(MEMORY),    CLK(NONE)       },
-       { CLK(PERIPH),  CLK(CGENERAL),  CLK(MEMORY),    CLK(OSC)        },
-       { CLK(PERIPH),  CLK(CGENERAL),  CLK(MEMORY),    CLK(OSC)        },
-       { CLK(PERIPH),  CLK(CGENERAL),  CLK(XCPU),      CLK(OSC)        },
-       { CLK(PERIPH),  CLK(DISPLAY),   CLK(CGENERAL),  CLK(OSC)        },
-};
-
-/*
- * Clock peripheral IDs which sadly don't match up with PERIPH_ID. This is
- * not in the header file since it is for purely internal use - we want
- * callers to use the PERIPH_ID for all access to peripheral clocks to avoid
- * confusion bewteen PERIPH_ID_... and PERIPHC_...
- *
- * We don't call this CLOCK_PERIPH_ID or PERIPH_CLOCK_ID as it would just be
- * confusing.
- *
- * Note to SOC vendors: perhaps define a unified numbering for peripherals and
- * use it for reset, clock enable, clock source/divider and even pinmuxing
- * if you can.
- */
-enum periphc_internal_id {
-       /* 0x00 */
-       PERIPHC_I2S1,
-       PERIPHC_I2S2,
-       PERIPHC_SPDIF_OUT,
-       PERIPHC_SPDIF_IN,
-       PERIPHC_PWM,
-       PERIPHC_SPI1,
-       PERIPHC_SPI2,
-       PERIPHC_SPI3,
-
-       /* 0x08 */
-       PERIPHC_XIO,
-       PERIPHC_I2C1,
-       PERIPHC_DVC_I2C,
-       PERIPHC_TWC,
-       PERIPHC_0c,
-       PERIPHC_10,     /* PERIPHC_SPI1, what is this really? */
-       PERIPHC_DISP1,
-       PERIPHC_DISP2,
-
-       /* 0x10 */
-       PERIPHC_CVE,
-       PERIPHC_IDE0,
-       PERIPHC_VI,
-       PERIPHC_1c,
-       PERIPHC_SDMMC1,
-       PERIPHC_SDMMC2,
-       PERIPHC_G3D,
-       PERIPHC_G2D,
-
-       /* 0x18 */
-       PERIPHC_NDFLASH,
-       PERIPHC_SDMMC4,
-       PERIPHC_VFIR,
-       PERIPHC_EPP,
-       PERIPHC_MPE,
-       PERIPHC_MIPI,
-       PERIPHC_UART1,
-       PERIPHC_UART2,
-
-       /* 0x20 */
-       PERIPHC_HOST1X,
-       PERIPHC_21,
-       PERIPHC_TVO,
-       PERIPHC_HDMI,
-       PERIPHC_24,
-       PERIPHC_TVDAC,
-       PERIPHC_I2C2,
-       PERIPHC_EMC,
-
-       /* 0x28 */
-       PERIPHC_UART3,
-       PERIPHC_29,
-       PERIPHC_VI_SENSOR,
-       PERIPHC_2b,
-       PERIPHC_2c,
-       PERIPHC_SPI4,
-       PERIPHC_I2C3,
-       PERIPHC_SDMMC3,
-
-       /* 0x30 */
-       PERIPHC_UART4,
-       PERIPHC_UART5,
-       PERIPHC_VDE,
-       PERIPHC_OWR,
-       PERIPHC_NOR,
-       PERIPHC_CSITE,
-
-       PERIPHC_COUNT,
-
-       PERIPHC_NONE = -1,
-};
-
-/* return 1 if a periphc_internal_id is in range */
-#define periphc_internal_id_isvalid(id) ((id) >= 0 && \
-               (id) < PERIPHC_COUNT)
-
-/*
- * Clock type for each peripheral clock source. We put the name in each
- * record just so it is easy to match things up
- */
-#define TYPE(name, type) type
-static enum clock_type_id clock_periph_type[PERIPHC_COUNT] = {
-       /* 0x00 */
-       TYPE(PERIPHC_I2S1,      CLOCK_TYPE_AXPT),
-       TYPE(PERIPHC_I2S2,      CLOCK_TYPE_AXPT),
-       TYPE(PERIPHC_SPDIF_OUT, CLOCK_TYPE_AXPT),
-       TYPE(PERIPHC_SPDIF_IN,  CLOCK_TYPE_PCM),
-       TYPE(PERIPHC_PWM,       CLOCK_TYPE_PCXTS),
-       TYPE(PERIPHC_SPI1,      CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_SPI22,     CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_SPI3,      CLOCK_TYPE_PCMT),
-
-       /* 0x08 */
-       TYPE(PERIPHC_XIO,       CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_I2C1,      CLOCK_TYPE_PCMT16),
-       TYPE(PERIPHC_DVC_I2C,   CLOCK_TYPE_PCMT16),
-       TYPE(PERIPHC_TWC,       CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_SPI1,      CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_DISP1,     CLOCK_TYPE_PDCT),
-       TYPE(PERIPHC_DISP2,     CLOCK_TYPE_PDCT),
-
-       /* 0x10 */
-       TYPE(PERIPHC_CVE,       CLOCK_TYPE_PDCT),
-       TYPE(PERIPHC_IDE0,      CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_VI,        CLOCK_TYPE_MCPA),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_SDMMC1,    CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_SDMMC2,    CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_G3D,       CLOCK_TYPE_MCPA),
-       TYPE(PERIPHC_G2D,       CLOCK_TYPE_MCPA),
-
-       /* 0x18 */
-       TYPE(PERIPHC_NDFLASH,   CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_SDMMC4,    CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_VFIR,      CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_EPP,       CLOCK_TYPE_MCPA),
-       TYPE(PERIPHC_MPE,       CLOCK_TYPE_MCPA),
-       TYPE(PERIPHC_MIPI,      CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_UART1,     CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_UART2,     CLOCK_TYPE_PCMT),
-
-       /* 0x20 */
-       TYPE(PERIPHC_HOST1X,    CLOCK_TYPE_MCPA),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_TVO,       CLOCK_TYPE_PDCT),
-       TYPE(PERIPHC_HDMI,      CLOCK_TYPE_PDCT),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_TVDAC,     CLOCK_TYPE_PDCT),
-       TYPE(PERIPHC_I2C2,      CLOCK_TYPE_PCMT16),
-       TYPE(PERIPHC_EMC,       CLOCK_TYPE_MCPT),
-
-       /* 0x28 */
-       TYPE(PERIPHC_UART3,     CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_VI,        CLOCK_TYPE_MCPA),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
-       TYPE(PERIPHC_SPI4,      CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_I2C3,      CLOCK_TYPE_PCMT16),
-       TYPE(PERIPHC_SDMMC3,    CLOCK_TYPE_PCMT),
-
-       /* 0x30 */
-       TYPE(PERIPHC_UART4,     CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_UART5,     CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_VDE,       CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_OWR,       CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_NOR,       CLOCK_TYPE_PCMT),
-       TYPE(PERIPHC_CSITE,     CLOCK_TYPE_PCMT),
-};
-
-/*
- * This array translates a periph_id to a periphc_internal_id
- *
- * Not present/matched up:
- *     uint vi_sensor;  _VI_SENSOR_0,          0x1A8
- *     SPDIF - which is both 0x08 and 0x0c
- *
- */
-#define NONE(name) (-1)
-#define OFFSET(name, value) PERIPHC_ ## name
-static s8 periph_id_to_internal_id[PERIPH_ID_COUNT] = {
-       /* Low word: 31:0 */
-       NONE(CPU),
-       NONE(RESERVED1),
-       NONE(RESERVED2),
-       NONE(AC97),
-       NONE(RTC),
-       NONE(TMR),
-       PERIPHC_UART1,
-       PERIPHC_UART2,  /* and vfir 0x68 */
-
-       /* 0x08 */
-       NONE(GPIO),
-       PERIPHC_SDMMC2,
-       NONE(SPDIF),            /* 0x08 and 0x0c, unclear which to use */
-       PERIPHC_I2S1,
-       PERIPHC_I2C1,
-       PERIPHC_NDFLASH,
-       PERIPHC_SDMMC1,
-       PERIPHC_SDMMC4,
-
-       /* 0x10 */
-       PERIPHC_TWC,
-       PERIPHC_PWM,
-       PERIPHC_I2S2,
-       PERIPHC_EPP,
-       PERIPHC_VI,
-       PERIPHC_G2D,
-       NONE(USBD),
-       NONE(ISP),
-
-       /* 0x18 */
-       PERIPHC_G3D,
-       PERIPHC_IDE0,
-       PERIPHC_DISP2,
-       PERIPHC_DISP1,
-       PERIPHC_HOST1X,
-       NONE(VCP),
-       NONE(RESERVED30),
-       NONE(CACHE2),
-
-       /* Middle word: 63:32 */
-       NONE(MEM),
-       NONE(AHBDMA),
-       NONE(APBDMA),
-       NONE(RESERVED35),
-       NONE(KBC),
-       NONE(STAT_MON),
-       NONE(PMC),
-       NONE(FUSE),
-
-       /* 0x28 */
-       NONE(KFUSE),
-       NONE(SBC1),     /* SBC1, 0x34, is this SPI1? */
-       PERIPHC_NOR,
-       PERIPHC_SPI1,
-       PERIPHC_SPI2,
-       PERIPHC_XIO,
-       PERIPHC_SPI3,
-       PERIPHC_DVC_I2C,
-
-       /* 0x30 */
-       NONE(DSI),
-       PERIPHC_TVO,    /* also CVE 0x40 */
-       PERIPHC_MIPI,
-       PERIPHC_HDMI,
-       PERIPHC_CSITE,
-       PERIPHC_TVDAC,
-       PERIPHC_I2C2,
-       PERIPHC_UART3,
-
-       /* 0x38 */
-       NONE(RESERVED56),
-       PERIPHC_EMC,
-       NONE(USB2),
-       NONE(USB3),
-       PERIPHC_MPE,
-       PERIPHC_VDE,
-       NONE(BSEA),
-       NONE(BSEV),
-
-       /* Upper word 95:64 */
-       NONE(SPEEDO),
-       PERIPHC_UART4,
-       PERIPHC_UART5,
-       PERIPHC_I2C3,
-       PERIPHC_SPI4,
-       PERIPHC_SDMMC3,
-       NONE(PCIE),
-       PERIPHC_OWR,
-
-       /* 0x48 */
-       NONE(AFI),
-       NONE(CORESIGHT),
-       NONE(RESERVED74),
-       NONE(AVPUCQ),
-       NONE(RESERVED76),
-       NONE(RESERVED77),
-       NONE(RESERVED78),
-       NONE(RESERVED79),
-
-       /* 0x50 */
-       NONE(RESERVED80),
-       NONE(RESERVED81),
-       NONE(RESERVED82),
-       NONE(RESERVED83),
-       NONE(IRAMA),
-       NONE(IRAMB),
-       NONE(IRAMC),
-       NONE(IRAMD),
-
-       /* 0x58 */
-       NONE(CRAM2),
-};
-
-/*
- * Get the oscillator frequency, from the corresponding hardware configuration
- * field.
- */
-enum clock_osc_freq clock_get_osc_freq(void)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       u32 reg;
-
-       reg = readl(&clkrst->crc_osc_ctrl);
-       return (reg & OSC_FREQ_MASK) >> OSC_FREQ_SHIFT;
-}
-
-int clock_get_osc_bypass(void)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       u32 reg;
-
-       reg = readl(&clkrst->crc_osc_ctrl);
-       return (reg & OSC_XOBP_MASK) >> OSC_XOBP_SHIFT;
-}
-
-/* Returns a pointer to the registers of the given pll */
-static struct clk_pll *get_pll(enum clock_id clkid)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-
-       assert(clock_id_is_pll(clkid));
-       return &clkrst->crc_pll[clkid];
-}
-
-int clock_ll_read_pll(enum clock_id clkid, u32 *divm, u32 *divn,
-               u32 *divp, u32 *cpcon, u32 *lfcon)
-{
-       struct clk_pll *pll = get_pll(clkid);
-       u32 data;
-
-       assert(clkid != CLOCK_ID_USB);
-
-       /* Safety check, adds to code size but is small */
-       if (!clock_id_is_pll(clkid) || clkid == CLOCK_ID_USB)
-               return -1;
-       data = readl(&pll->pll_base);
-       *divm = (data & PLL_DIVM_MASK) >> PLL_DIVM_SHIFT;
-       *divn = (data & PLL_DIVN_MASK) >> PLL_DIVN_SHIFT;
-       *divp = (data & PLL_DIVP_MASK) >> PLL_DIVP_SHIFT;
-       data = readl(&pll->pll_misc);
-       *cpcon = (data & PLL_CPCON_MASK) >> PLL_CPCON_SHIFT;
-       *lfcon = (data & PLL_LFCON_MASK) >> PLL_LFCON_SHIFT;
-
-       return 0;
-}
-
-unsigned long clock_start_pll(enum clock_id clkid, u32 divm, u32 divn,
-               u32 divp, u32 cpcon, u32 lfcon)
-{
-       struct clk_pll *pll = get_pll(clkid);
-       u32 data;
-
-       /*
-        * We cheat by treating all PLL (except PLLU) in the same fashion.
-        * This works only because:
-        * - same fields are always mapped at same offsets, except DCCON
-        * - DCCON is always 0, doesn't conflict
-        * - M,N, P of PLLP values are ignored for PLLP
-        */
-       data = (cpcon << PLL_CPCON_SHIFT) | (lfcon << PLL_LFCON_SHIFT);
-       writel(data, &pll->pll_misc);
-
-       data = (divm << PLL_DIVM_SHIFT) | (divn << PLL_DIVN_SHIFT) |
-                       (0 << PLL_BYPASS_SHIFT) | (1 << PLL_ENABLE_SHIFT);
-
-       if (clkid == CLOCK_ID_USB)
-               data |= divp << PLLU_VCO_FREQ_SHIFT;
-       else
-               data |= divp << PLL_DIVP_SHIFT;
-       writel(data, &pll->pll_base);
-
-       /* calculate the stable time */
-       return timer_get_us() + CLOCK_PLL_STABLE_DELAY_US;
-}
-
-/* return 1 if a peripheral ID is in range and valid */
-static int clock_periph_id_isvalid(enum periph_id id)
-{
-       if (id < PERIPH_ID_FIRST || id >= PERIPH_ID_COUNT)
-               printf("Peripheral id %d out of range\n", id);
-       else {
-               switch (id) {
-               case PERIPH_ID_RESERVED1:
-               case PERIPH_ID_RESERVED2:
-               case PERIPH_ID_RESERVED30:
-               case PERIPH_ID_RESERVED35:
-               case PERIPH_ID_RESERVED56:
-               case PERIPH_ID_RESERVED74:
-               case PERIPH_ID_RESERVED76:
-               case PERIPH_ID_RESERVED77:
-               case PERIPH_ID_RESERVED78:
-               case PERIPH_ID_RESERVED79:
-               case PERIPH_ID_RESERVED80:
-               case PERIPH_ID_RESERVED81:
-               case PERIPH_ID_RESERVED82:
-               case PERIPH_ID_RESERVED83:
-                       printf("Peripheral id %d is reserved\n", id);
-                       break;
-               default:
-                       return 1;
-               }
-       }
-       return 0;
-}
-
-/* Returns a pointer to the clock source register for a peripheral */
-static u32 *get_periph_source_reg(enum periph_id periph_id)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       enum periphc_internal_id internal_id;
-
-       assert(clock_periph_id_isvalid(periph_id));
-       internal_id = periph_id_to_internal_id[periph_id];
-       assert(internal_id != -1);
-       return &clkrst->crc_clk_src[internal_id];
-}
-
-void clock_ll_set_source_divisor(enum periph_id periph_id, unsigned source,
-                             unsigned divisor)
-{
-       u32 *reg = get_periph_source_reg(periph_id);
-       u32 value;
-
-       value = readl(reg);
-
-       value &= ~OUT_CLK_SOURCE_MASK;
-       value |= source << OUT_CLK_SOURCE_SHIFT;
-
-       value &= ~OUT_CLK_DIVISOR_MASK;
-       value |= divisor << OUT_CLK_DIVISOR_SHIFT;
-
-       writel(value, reg);
-}
-
-void clock_ll_set_source(enum periph_id periph_id, unsigned source)
-{
-       u32 *reg = get_periph_source_reg(periph_id);
-
-       clrsetbits_le32(reg, OUT_CLK_SOURCE_MASK,
-                       source << OUT_CLK_SOURCE_SHIFT);
-}
-
-/**
- * Given the parent's rate and the required rate for the children, this works
- * out the peripheral clock divider to use, in 7.1 binary format.
- *
- * @param divider_bits number of divider bits (8 or 16)
- * @param parent_rate  clock rate of parent clock in Hz
- * @param rate         required clock rate for this clock
- * @return divider which should be used
- */
-static int clk_get_divider(unsigned divider_bits, unsigned long parent_rate,
-                          unsigned long rate)
-{
-       u64 divider = parent_rate * 2;
-       unsigned max_divider = 1 << divider_bits;
-
-       divider += rate - 1;
-       do_div(divider, rate);
-
-       if ((s64)divider - 2 < 0)
-               return 0;
-
-       if ((s64)divider - 2 >= max_divider)
-               return -1;
-
-       return divider - 2;
-}
-
-/**
- * Given the parent's rate and the divider in 7.1 format, this works out the
- * resulting peripheral clock rate.
- *
- * @param parent_rate  clock rate of parent clock in Hz
- * @param divider which should be used in 7.1 format
- * @return effective clock rate of peripheral
- */
-static unsigned long get_rate_from_divider(unsigned long parent_rate,
-                                          int divider)
-{
-       u64 rate;
-
-       rate = (u64)parent_rate * 2;
-       do_div(rate, divider + 2);
-       return rate;
-}
-
-unsigned long clock_get_periph_rate(enum periph_id periph_id,
-               enum clock_id parent)
-{
-       u32 *reg = get_periph_source_reg(periph_id);
-
-       return get_rate_from_divider(pll_rate[parent],
-               (readl(reg) & OUT_CLK_DIVISOR_MASK) >> OUT_CLK_DIVISOR_SHIFT);
-}
-
-/**
- * Find the best available 7.1 format divisor given a parent clock rate and
- * required child clock rate. This function assumes that a second-stage
- * divisor is available which can divide by powers of 2 from 1 to 256.
- *
- * @param divider_bits number of divider bits (8 or 16)
- * @param parent_rate  clock rate of parent clock in Hz
- * @param rate         required clock rate for this clock
- * @param extra_div    value for the second-stage divisor (not set if this
- *                     function returns -1.
- * @return divider which should be used, or -1 if nothing is valid
- *
- */
-static int find_best_divider(unsigned divider_bits, unsigned long parent_rate,
-                            unsigned long rate, int *extra_div)
-{
-       int shift;
-       int best_divider = -1;
-       int best_error = rate;
-
-       /* try dividers from 1 to 256 and find closest match */
-       for (shift = 0; shift <= 8 && best_error > 0; shift++) {
-               unsigned divided_parent = parent_rate >> shift;
-               int divider = clk_get_divider(divider_bits, divided_parent,
-                                             rate);
-               unsigned effective_rate = get_rate_from_divider(divided_parent,
-                                                      divider);
-               int error = rate - effective_rate;
-
-               /* Given a valid divider, look for the lowest error */
-               if (divider != -1 && error < best_error) {
-                       best_error = error;
-                       *extra_div = 1 << shift;
-                       best_divider = divider;
-               }
-       }
-
-       /* return what we found - *extra_div will already be set */
-       return best_divider;
-}
-
-/**
- * Given a peripheral ID and the required source clock, this returns which
- * value should be programmed into the source mux for that peripheral.
- *
- * There is special code here to handle the one source type with 5 sources.
- *
- * @param periph_id    peripheral to start
- * @param source       PLL id of required parent clock
- * @param mux_bits     Set to number of bits in mux register: 2 or 4
- * @param divider_bits Set to number of divider bits (8 or 16)
- * @return mux value (0-4, or -1 if not found)
- */
-static int get_periph_clock_source(enum periph_id periph_id,
-               enum clock_id parent, int *mux_bits, int *divider_bits)
-{
-       enum clock_type_id type;
-       enum periphc_internal_id internal_id;
-       int mux;
-
-       assert(clock_periph_id_isvalid(periph_id));
-
-       internal_id = periph_id_to_internal_id[periph_id];
-       assert(periphc_internal_id_isvalid(internal_id));
-
-       type = clock_periph_type[internal_id];
-       assert(clock_type_id_isvalid(type));
-
-       /*
-        * Special cases here for the clock with a 4-bit source mux and I2C
-        * with its 16-bit divisor
-        */
-       if (type == CLOCK_TYPE_PCXTS)
-               *mux_bits = 4;
-       else
-               *mux_bits = 2;
-       if (type == CLOCK_TYPE_PCMT16)
-               *divider_bits = 16;
-       else
-               *divider_bits = 8;
-
-       for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
-               if (clock_source[type][mux] == parent)
-                       return mux;
-
-       /*
-        * Not found: it might be looking for the 'S' in CLOCK_TYPE_PCXTS
-        * which is not in our table. If not, then they are asking for a
-        * source which this peripheral can't access through its mux.
-        */
-       assert(type == CLOCK_TYPE_PCXTS);
-       assert(parent == CLOCK_ID_SFROM32KHZ);
-       if (type == CLOCK_TYPE_PCXTS && parent == CLOCK_ID_SFROM32KHZ)
-               return 4;       /* mux value for this clock */
-
-       /* if we get here, either us or the caller has made a mistake */
-       printf("Caller requested bad clock: periph=%d, parent=%d\n", periph_id,
-               parent);
-       return -1;
-}
-
-/**
- * Adjust peripheral PLL to use the given divider and source.
- *
- * @param periph_id    peripheral to adjust
- * @param source       Source number (0-3 or 0-7)
- * @param mux_bits     Number of mux bits (2 or 4)
- * @param divider      Required divider in 7.1 or 15.1 format
- * @return 0 if ok, -1 on error (requesting a parent clock which is not valid
- *             for this peripheral)
- */
-static int adjust_periph_pll(enum periph_id periph_id, int source,
-                            int mux_bits, unsigned divider)
-{
-       u32 *reg = get_periph_source_reg(periph_id);
-
-       clrsetbits_le32(reg, OUT_CLK_DIVISOR_MASK,
-                       divider << OUT_CLK_DIVISOR_SHIFT);
-       udelay(1);
-
-       /* work out the source clock and set it */
-       if (source < 0)
-               return -1;
-       if (mux_bits == 4) {
-               clrsetbits_le32(reg, OUT_CLK_SOURCE4_MASK,
-                       source << OUT_CLK_SOURCE4_SHIFT);
-       } else {
-               clrsetbits_le32(reg, OUT_CLK_SOURCE_MASK,
-                       source << OUT_CLK_SOURCE_SHIFT);
-       }
-       udelay(2);
-       return 0;
-}
-
-unsigned clock_adjust_periph_pll_div(enum periph_id periph_id,
-               enum clock_id parent, unsigned rate, int *extra_div)
-{
-       unsigned effective_rate;
-       int mux_bits, divider_bits, source;
-       int divider;
-
-       /* work out the source clock and set it */
-       source = get_periph_clock_source(periph_id, parent, &mux_bits,
-                                        &divider_bits);
-
-       if (extra_div)
-               divider = find_best_divider(divider_bits, pll_rate[parent],
-                                           rate, extra_div);
-       else
-               divider = clk_get_divider(divider_bits, pll_rate[parent],
-                                         rate);
-       assert(divider >= 0);
-       if (adjust_periph_pll(periph_id, source, mux_bits, divider))
-               return -1U;
-       debug("periph %d, rate=%d, reg=%p = %x\n", periph_id, rate,
-               get_periph_source_reg(periph_id),
-               readl(get_periph_source_reg(periph_id)));
-
-       /* Check what we ended up with. This shouldn't matter though */
-       effective_rate = clock_get_periph_rate(periph_id, parent);
-       if (extra_div)
-               effective_rate /= *extra_div;
-       if (rate != effective_rate)
-               debug("Requested clock rate %u not honored (got %u)\n",
-                      rate, effective_rate);
-       return effective_rate;
-}
-
-unsigned clock_start_periph_pll(enum periph_id periph_id,
-               enum clock_id parent, unsigned rate)
-{
-       unsigned effective_rate;
-
-       reset_set_enable(periph_id, 1);
-       clock_enable(periph_id);
-
-       effective_rate = clock_adjust_periph_pll_div(periph_id, parent, rate,
-                                                NULL);
-
-       reset_set_enable(periph_id, 0);
-       return effective_rate;
-}
-
-void clock_set_enable(enum periph_id periph_id, int enable)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       u32 *clk = &clkrst->crc_clk_out_enb[PERIPH_REG(periph_id)];
-       u32 reg;
-
-       /* Enable/disable the clock to this peripheral */
-       assert(clock_periph_id_isvalid(periph_id));
-       reg = readl(clk);
-       if (enable)
-               reg |= PERIPH_MASK(periph_id);
-       else
-               reg &= ~PERIPH_MASK(periph_id);
-       writel(reg, clk);
-}
-
-void clock_enable(enum periph_id clkid)
-{
-       clock_set_enable(clkid, 1);
-}
-
-void clock_disable(enum periph_id clkid)
-{
-       clock_set_enable(clkid, 0);
-}
-
-void reset_set_enable(enum periph_id periph_id, int enable)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       u32 *reset = &clkrst->crc_rst_dev[PERIPH_REG(periph_id)];
-       u32 reg;
-
-       /* Enable/disable reset to the peripheral */
-       assert(clock_periph_id_isvalid(periph_id));
-       reg = readl(reset);
-       if (enable)
-               reg |= PERIPH_MASK(periph_id);
-       else
-               reg &= ~PERIPH_MASK(periph_id);
-       writel(reg, reset);
-}
-
-void reset_periph(enum periph_id periph_id, int us_delay)
-{
-       /* Put peripheral into reset */
-       reset_set_enable(periph_id, 1);
-       udelay(us_delay);
-
-       /* Remove reset */
-       reset_set_enable(periph_id, 0);
-
-       udelay(us_delay);
-}
-
-void reset_cmplx_set_enable(int cpu, int which, int reset)
-{
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       u32 mask;
-
-       /* Form the mask, which depends on the cpu chosen. Tegra2 has 2 */
-       assert(cpu >= 0 && cpu < 2);
-       mask = which << cpu;
-
-       /* either enable or disable those reset for that CPU */
-       if (reset)
-               writel(mask, &clkrst->crc_cpu_cmplx_set);
-       else
-               writel(mask, &clkrst->crc_cpu_cmplx_clr);
-}
-
-unsigned clock_get_rate(enum clock_id clkid)
-{
-       struct clk_pll *pll;
-       u32 base;
-       u32 divm;
-       u64 parent_rate;
-       u64 rate;
-
-       parent_rate = osc_freq[clock_get_osc_freq()];
-       if (clkid == CLOCK_ID_OSC)
-               return parent_rate;
-
-       pll = get_pll(clkid);
-       base = readl(&pll->pll_base);
-
-       /* Oh for bf_unpack()... */
-       rate = parent_rate * ((base & PLL_DIVN_MASK) >> PLL_DIVN_SHIFT);
-       divm = (base & PLL_DIVM_MASK) >> PLL_DIVM_SHIFT;
-       if (clkid == CLOCK_ID_USB)
-               divm <<= (base & PLLU_VCO_FREQ_MASK) >> PLLU_VCO_FREQ_SHIFT;
-       else
-               divm <<= (base & PLL_DIVP_MASK) >> PLL_DIVP_SHIFT;
-       do_div(rate, divm);
-       return rate;
-}
-
-/**
- * Set the output frequency you want for each PLL clock.
- * PLL output frequencies are programmed by setting their N, M and P values.
- * The governing equations are:
- *     VCO = (Fi / m) * n, Fo = VCO / (2^p)
- *     where Fo is the output frequency from the PLL.
- * Example: Set the output frequency to 216Mhz(Fo) with 12Mhz OSC(Fi)
- *     216Mhz = ((12Mhz / m) * n) / (2^p) so n=432,m=12,p=1
- * Please see Tegra TRM section 5.3 to get the detail for PLL Programming
- *
- * @param n PLL feedback divider(DIVN)
- * @param m PLL input divider(DIVN)
- * @param p post divider(DIVP)
- * @param cpcon base PLL charge pump(CPCON)
- * @return 0 if ok, -1 on error (the requested PLL is incorrect and cannot
- *             be overriden), 1 if PLL is already correct
- */
-static int clock_set_rate(enum clock_id clkid, u32 n, u32 m, u32 p, u32 cpcon)
-{
-       u32 base_reg;
-       u32 misc_reg;
-       struct clk_pll *pll;
-
-       pll = get_pll(clkid);
-
-       base_reg = readl(&pll->pll_base);
-
-       /* Set BYPASS, m, n and p to PLL_BASE */
-       base_reg &= ~PLL_DIVM_MASK;
-       base_reg |= m << PLL_DIVM_SHIFT;
-
-       base_reg &= ~PLL_DIVN_MASK;
-       base_reg |= n << PLL_DIVN_SHIFT;
-
-       base_reg &= ~PLL_DIVP_MASK;
-       base_reg |= p << PLL_DIVP_SHIFT;
-
-       if (clkid == CLOCK_ID_PERIPH) {
-               /*
-                * If the PLL is already set up, check that it is correct
-                * and record this info for clock_verify() to check.
-                */
-               if (base_reg & PLL_BASE_OVRRIDE_MASK) {
-                       base_reg |= PLL_ENABLE_MASK;
-                       if (base_reg != readl(&pll->pll_base))
-                               pllp_valid = 0;
-                       return pllp_valid ? 1 : -1;
-               }
-               base_reg |= PLL_BASE_OVRRIDE_MASK;
-       }
-
-       base_reg |= PLL_BYPASS_MASK;
-       writel(base_reg, &pll->pll_base);
-
-       /* Set cpcon to PLL_MISC */
-       misc_reg = readl(&pll->pll_misc);
-       misc_reg &= ~PLL_CPCON_MASK;
-       misc_reg |= cpcon << PLL_CPCON_SHIFT;
-       writel(misc_reg, &pll->pll_misc);
-
-       /* Enable PLL */
-       base_reg |= PLL_ENABLE_MASK;
-       writel(base_reg, &pll->pll_base);
-
-       /* Disable BYPASS */
-       base_reg &= ~PLL_BYPASS_MASK;
-       writel(base_reg, &pll->pll_base);
-
-       return 0;
-}
-
-void clock_ll_start_uart(enum periph_id periph_id)
-{
-       /* Assert UART reset and enable clock */
-       reset_set_enable(periph_id, 1);
-       clock_enable(periph_id);
-       clock_ll_set_source(periph_id, 0); /* UARTx_CLK_SRC = 00, PLLP_OUT0 */
-
-       /* wait for 2us */
-       udelay(2);
-
-       /* De-assert reset to UART */
-       reset_set_enable(periph_id, 0);
-}
-
-#ifdef CONFIG_OF_CONTROL
-/*
- * Convert a device tree clock ID to our peripheral ID. They are mostly
- * the same but we are very cautious so we check that a valid clock ID is
- * provided.
- *
- * @param clk_id       Clock ID according to tegra2 device tree binding
- * @return peripheral ID, or PERIPH_ID_NONE if the clock ID is invalid
- */
-static enum periph_id clk_id_to_periph_id(int clk_id)
-{
-       if (clk_id > 95)
-               return PERIPH_ID_NONE;
-
-       switch (clk_id) {
-       case 1:
-       case 2:
-       case 7:
-       case 10:
-       case 20:
-       case 30:
-       case 35:
-       case 49:
-       case 56:
-       case 74:
-       case 76:
-       case 77:
-       case 78:
-       case 79:
-       case 80:
-       case 81:
-       case 82:
-       case 83:
-       case 91:
-       case 95:
-               return PERIPH_ID_NONE;
-       default:
-               return clk_id;
-       }
-}
-
-int clock_decode_periph_id(const void *blob, int node)
-{
-       enum periph_id id;
-       u32 cell[2];
-       int err;
-
-       err = fdtdec_get_int_array(blob, node, "clocks", cell,
-                                  ARRAY_SIZE(cell));
-       if (err)
-               return -1;
-       id = clk_id_to_periph_id(cell[1]);
-       assert(clock_periph_id_isvalid(id));
-       return id;
-}
-#endif /* CONFIG_OF_CONTROL */
-
-int clock_verify(void)
-{
-       struct clk_pll *pll = get_pll(CLOCK_ID_PERIPH);
-       u32 reg = readl(&pll->pll_base);
-
-       if (!pllp_valid) {
-               printf("Warning: PLLP %x is not correct\n", reg);
-               return -1;
-       }
-       debug("PLLX %x is correct\n", reg);
-       return 0;
-}
-
-void clock_early_init(void)
-{
-       /*
-        * PLLP output frequency set to 216MHz
-        * PLLC output frequency set to 600Mhz
-        *
-        * TODO: Can we calculate these values instead of hard-coding?
-        */
-       switch (clock_get_osc_freq()) {
-       case CLOCK_OSC_FREQ_12_0: /* OSC is 12Mhz */
-               clock_set_rate(CLOCK_ID_PERIPH, 432, 12, 1, 8);
-               clock_set_rate(CLOCK_ID_CGENERAL, 600, 12, 0, 8);
-               break;
-
-       case CLOCK_OSC_FREQ_26_0: /* OSC is 26Mhz */
-               clock_set_rate(CLOCK_ID_PERIPH, 432, 26, 1, 8);
-               clock_set_rate(CLOCK_ID_CGENERAL, 600, 26, 0, 8);
-               break;
-
-       case CLOCK_OSC_FREQ_13_0: /* OSC is 13Mhz */
-               clock_set_rate(CLOCK_ID_PERIPH, 432, 13, 1, 8);
-               clock_set_rate(CLOCK_ID_CGENERAL, 600, 13, 0, 8);
-               break;
-       case CLOCK_OSC_FREQ_19_2:
-       default:
-               /*
-                * These are not supported. It is too early to print a
-                * message and the UART likely won't work anyway due to the
-                * oscillator being wrong.
-                */
-               break;
-       }
-}
-
-void clock_init(void)
-{
-       pll_rate[CLOCK_ID_MEMORY] = clock_get_rate(CLOCK_ID_MEMORY);
-       pll_rate[CLOCK_ID_PERIPH] = clock_get_rate(CLOCK_ID_PERIPH);
-       pll_rate[CLOCK_ID_CGENERAL] = clock_get_rate(CLOCK_ID_CGENERAL);
-       pll_rate[CLOCK_ID_OSC] = clock_get_rate(CLOCK_ID_OSC);
-       pll_rate[CLOCK_ID_SFROM32KHZ] = 32768;
-       debug("Osc = %d\n", pll_rate[CLOCK_ID_OSC]);
-       debug("PLLM = %d\n", pll_rate[CLOCK_ID_MEMORY]);
-       debug("PLLP = %d\n", pll_rate[CLOCK_ID_PERIPH]);
-}
diff --git a/arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c b/arch/arm/cpu/armv7/tegra2/cmd_enterrcm.c
deleted file mode 100644 (file)
index 2fcd107..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
- *
- * Derived from code (arch/arm/lib/reset.c) that is:
- *
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- *
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Alex Zuepke <azu@sysgo.de>
- *
- * (C) Copyright 2002
- * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
- *
- * (C) Copyright 2004
- * DAVE Srl
- * http://www.dave-tech.it
- * http://www.wawnet.biz
- * mailto:info@wawnet.biz
- *
- * (C) Copyright 2004 Texas Insturments
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <common.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/pmc.h>
-
-static int do_enterrcm(cmd_tbl_t *cmdtp, int flag, int argc,
-                      char * const argv[])
-{
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-
-       puts("Entering RCM...\n");
-       udelay(50000);
-
-       pmc->pmc_scratch0 = 2;
-       disable_interrupts();
-       reset_cpu(0);
-
-       return 0;
-}
-
-U_BOOT_CMD(
-       enterrcm, 1, 0, do_enterrcm,
-       "reset Tegra and enter USB Recovery Mode",
-       ""
-);
diff --git a/arch/arm/cpu/armv7/tegra2/config.mk b/arch/arm/cpu/armv7/tegra2/config.mk
deleted file mode 100644 (file)
index 4dd8cb8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# (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
-#
-
-# Tegra has an ARMv4T CPU which runs board_init_f(), so we must build these
-# files with compatible flags
-ifdef CONFIG_TEGRA2
-CFLAGS_arch/arm/lib/board.o += -march=armv4t
-CFLAGS_arch/arm/lib/memset.o += -march=armv4t
-CFLAGS_lib/string.o += -march=armv4t
-CFLAGS_common/cmd_nvedit.o += -march=armv4t
-endif
-
-USE_PRIVATE_LIBGCC = yes
-
-CONFIG_ARCH_DEVICE_TREE := tegra20
diff --git a/arch/arm/cpu/armv7/tegra2/crypto.c b/arch/arm/cpu/armv7/tegra2/crypto.c
deleted file mode 100644 (file)
index 5f0b240..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * (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/errno.h>
-#include "crypto.h"
-#include "aes.h"
-
-static u8 zero_key[16];
-
-#define AES_CMAC_CONST_RB 0x87  /* from RFC 4493, Figure 2.2 */
-
-enum security_op {
-       SECURITY_SIGN           = 1 << 0,       /* Sign the data */
-       SECURITY_ENCRYPT        = 1 << 1,       /* Encrypt the data */
-};
-
-static void debug_print_vector(char *name, u32 num_bytes, u8 *data)
-{
-       u32 i;
-
-       debug("%s [%d] @0x%08x", name, num_bytes, (u32)data);
-       for (i = 0; i < num_bytes; i++) {
-               if (i % 16 == 0)
-                       debug(" = ");
-               debug("%02x", data[i]);
-               if ((i+1) % 16 != 0)
-                       debug(" ");
-       }
-       debug("\n");
-}
-
-/**
- * Apply chain data to the destination using EOR
- *
- * Each array is of length AES_AES_KEY_LENGTH.
- *
- * \param cbc_chain_data       Chain data
- * \param src                  Source data
- * \param dst                  Destination data, which is modified here
- */
-static void apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               *dst++ = *src++ ^ *cbc_chain_data++;
-}
-
-/**
- * Encrypt some data with AES.
- *
- * \param key_schedule         Expanded key to use
- * \param src                  Source data to encrypt
- * \param dst                  Destination buffer
- * \param num_aes_blocks       Number of AES blocks to encrypt
- */
-static void encrypt_object(u8 *key_schedule, u8 *src, u8 *dst,
-                          u32 num_aes_blocks)
-{
-       u8 tmp_data[AES_KEY_LENGTH];
-       u8 *cbc_chain_data;
-       u32 i;
-
-       cbc_chain_data = zero_key;      /* Convenient array of 0's for IV */
-
-       for (i = 0; i < num_aes_blocks; i++) {
-               debug("encrypt_object: block %d of %d\n", i, num_aes_blocks);
-               debug_print_vector("AES Src", AES_KEY_LENGTH, src);
-
-               /* Apply the chain data */
-               apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
-               debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
-
-               /* encrypt the AES block */
-               aes_encrypt(tmp_data, key_schedule, dst);
-               debug_print_vector("AES Dst", AES_KEY_LENGTH, dst);
-
-               /* Update pointers for next loop. */
-               cbc_chain_data = dst;
-               src += AES_KEY_LENGTH;
-               dst += AES_KEY_LENGTH;
-       }
-}
-
-/**
- * Shift a vector left by one bit
- *
- * \param in   Input vector
- * \param out  Output vector
- * \param size Length of vector in bytes
- */
-static void left_shift_vector(u8 *in, u8 *out, int size)
-{
-       int carry = 0;
-       int i;
-
-       for (i = size - 1; i >= 0; i--) {
-               out[i] = (in[i] << 1) | carry;
-               carry = in[i] >> 7;     /* get most significant bit */
-       }
-}
-
-/**
- * Sign a block of data, putting the result into dst.
- *
- * \param key                  Input AES key, length AES_KEY_LENGTH
- * \param key_schedule         Expanded key to use
- * \param src                  Source data of length 'num_aes_blocks' blocks
- * \param dst                  Destination buffer, length AES_KEY_LENGTH
- * \param num_aes_blocks       Number of AES blocks to encrypt
- */
-static void sign_object(u8 *key, u8 *key_schedule, u8 *src, u8 *dst,
-                       u32 num_aes_blocks)
-{
-       u8 tmp_data[AES_KEY_LENGTH];
-       u8 left[AES_KEY_LENGTH];
-       u8 k1[AES_KEY_LENGTH];
-       u8 *cbc_chain_data;
-       unsigned i;
-
-       cbc_chain_data = zero_key;      /* Convenient array of 0's for IV */
-
-       /* compute K1 constant needed by AES-CMAC calculation */
-       for (i = 0; i < AES_KEY_LENGTH; i++)
-               tmp_data[i] = 0;
-
-       encrypt_object(key_schedule, tmp_data, left, 1);
-       debug_print_vector("AES(key, nonce)", AES_KEY_LENGTH, left);
-
-       left_shift_vector(left, k1, sizeof(left));
-       debug_print_vector("L", AES_KEY_LENGTH, left);
-
-       if ((left[0] >> 7) != 0) /* get MSB of L */
-               k1[AES_KEY_LENGTH-1] ^= AES_CMAC_CONST_RB;
-       debug_print_vector("K1", AES_KEY_LENGTH, k1);
-
-       /* compute the AES-CMAC value */
-       for (i = 0; i < num_aes_blocks; i++) {
-               /* Apply the chain data */
-               apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
-
-               /* for the final block, XOR K1 into the IV */
-               if (i == num_aes_blocks - 1)
-                       apply_cbc_chain_data(tmp_data, k1, tmp_data);
-
-               /* encrypt the AES block */
-               aes_encrypt(tmp_data, key_schedule, dst);
-
-               debug("sign_obj: block %d of %d\n", i, num_aes_blocks);
-               debug_print_vector("AES-CMAC Src", AES_KEY_LENGTH, src);
-               debug_print_vector("AES-CMAC Xor", AES_KEY_LENGTH, tmp_data);
-               debug_print_vector("AES-CMAC Dst", AES_KEY_LENGTH, dst);
-
-               /* Update pointers for next loop. */
-               cbc_chain_data = dst;
-               src += AES_KEY_LENGTH;
-       }
-
-       debug_print_vector("AES-CMAC Hash", AES_KEY_LENGTH, dst);
-}
-
-/**
- * Encrypt and sign a block of data (depending on security mode).
- *
- * \param key          Input AES key, length AES_KEY_LENGTH
- * \param oper         Security operations mask to perform (enum security_op)
- * \param src          Source data
- * \param length       Size of source data
- * \param sig_dst      Destination address for signature, AES_KEY_LENGTH bytes
- */
-static int encrypt_and_sign(u8 *key, enum security_op oper, u8 *src,
-                           u32 length, u8 *sig_dst)
-{
-       u32 num_aes_blocks;
-       u8 key_schedule[AES_EXPAND_KEY_LENGTH];
-
-       debug("encrypt_and_sign: length = %d\n", length);
-       debug_print_vector("AES key", AES_KEY_LENGTH, key);
-
-       /*
-        * The only need for a key is for signing/checksum purposes, so
-        * if not encrypting, expand a key of 0s.
-        */
-       aes_expand_key(oper & SECURITY_ENCRYPT ? key : zero_key, key_schedule);
-
-       num_aes_blocks = (length + AES_KEY_LENGTH - 1) / AES_KEY_LENGTH;
-
-       if (oper & SECURITY_ENCRYPT) {
-               /* Perform this in place, resulting in src being encrypted. */
-               debug("encrypt_and_sign: begin encryption\n");
-               encrypt_object(key_schedule, src, src, num_aes_blocks);
-               debug("encrypt_and_sign: end encryption\n");
-       }
-
-       if (oper & SECURITY_SIGN) {
-               /* encrypt the data, overwriting the result in signature. */
-               debug("encrypt_and_sign: begin signing\n");
-               sign_object(key, key_schedule, src, sig_dst, num_aes_blocks);
-               debug("encrypt_and_sign: end signing\n");
-       }
-
-       return 0;
-}
-
-int sign_data_block(u8 *source, unsigned length, u8 *signature)
-{
-       return encrypt_and_sign(zero_key, SECURITY_SIGN, source,
-                               length, signature);
-}
diff --git a/arch/arm/cpu/armv7/tegra2/crypto.h b/arch/arm/cpu/armv7/tegra2/crypto.h
deleted file mode 100644 (file)
index aff67e7..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * (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 _CRYPTO_H_
-#define _CRYPTO_H_
-
-/**
- * Sign a block of data
- *
- * \param source       Source data
- * \param length       Size of source data
- * \param signature    Destination address for signature, AES_KEY_LENGTH bytes
- */
-int sign_data_block(u8 *source, unsigned length, u8 *signature);
-
-#endif /* #ifndef _CRYPTO_H_ */
diff --git a/arch/arm/cpu/armv7/tegra2/emc.c b/arch/arm/cpu/armv7/tegra2/emc.c
deleted file mode 100644 (file)
index c0e5c56..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- *
- * 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 <fdtdec.h>
-#include <asm/io.h>
-#include <asm/arch/ap20.h>
-#include <asm/arch/apb_misc.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/emc.h>
-#include <asm/arch/tegra2.h>
-
-/*
- * The EMC registers have shadow registers.  When the EMC clock is updated
- * in the clock controller, the shadow registers are copied to the active
- * registers, allowing glitchless memory bus frequency changes.
- * This function updates the shadow registers for a new clock frequency,
- * and relies on the clock lock on the emc clock to avoid races between
- * multiple frequency changes
- */
-
-/*
- * This table defines the ordering of the registers provided to
- * tegra_set_mmc()
- * TODO: Convert to fdt version once available
- */
-static const unsigned long emc_reg_addr[TEGRA_EMC_NUM_REGS] = {
-       0x2c,   /* RC */
-       0x30,   /* RFC */
-       0x34,   /* RAS */
-       0x38,   /* RP */
-       0x3c,   /* R2W */
-       0x40,   /* W2R */
-       0x44,   /* R2P */
-       0x48,   /* W2P */
-       0x4c,   /* RD_RCD */
-       0x50,   /* WR_RCD */
-       0x54,   /* RRD */
-       0x58,   /* REXT */
-       0x5c,   /* WDV */
-       0x60,   /* QUSE */
-       0x64,   /* QRST */
-       0x68,   /* QSAFE */
-       0x6c,   /* RDV */
-       0x70,   /* REFRESH */
-       0x74,   /* BURST_REFRESH_NUM */
-       0x78,   /* PDEX2WR */
-       0x7c,   /* PDEX2RD */
-       0x80,   /* PCHG2PDEN */
-       0x84,   /* ACT2PDEN */
-       0x88,   /* AR2PDEN */
-       0x8c,   /* RW2PDEN */
-       0x90,   /* TXSR */
-       0x94,   /* TCKE */
-       0x98,   /* TFAW */
-       0x9c,   /* TRPAB */
-       0xa0,   /* TCLKSTABLE */
-       0xa4,   /* TCLKSTOP */
-       0xa8,   /* TREFBW */
-       0xac,   /* QUSE_EXTRA */
-       0x114,  /* FBIO_CFG6 */
-       0xb0,   /* ODT_WRITE */
-       0xb4,   /* ODT_READ */
-       0x104,  /* FBIO_CFG5 */
-       0x2bc,  /* CFG_DIG_DLL */
-       0x2c0,  /* DLL_XFORM_DQS */
-       0x2c4,  /* DLL_XFORM_QUSE */
-       0x2e0,  /* ZCAL_REF_CNT */
-       0x2e4,  /* ZCAL_WAIT_CNT */
-       0x2a8,  /* AUTO_CAL_INTERVAL */
-       0x2d0,  /* CFG_CLKTRIM_0 */
-       0x2d4,  /* CFG_CLKTRIM_1 */
-       0x2d8,  /* CFG_CLKTRIM_2 */
-};
-
-struct emc_ctlr *emc_get_controller(const void *blob)
-{
-       fdt_addr_t addr;
-       int node;
-
-       node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_EMC);
-       if (node > 0) {
-               addr = fdtdec_get_addr(blob, node, "reg");
-               if (addr != FDT_ADDR_T_NONE)
-                       return (struct emc_ctlr *)addr;
-       }
-       return NULL;
-}
-
-/* Error codes we use */
-enum {
-       ERR_NO_EMC_NODE = -10,
-       ERR_NO_EMC_REG,
-       ERR_NO_FREQ,
-       ERR_FREQ_NOT_FOUND,
-       ERR_BAD_REGS,
-       ERR_NO_RAM_CODE,
-       ERR_RAM_CODE_NOT_FOUND,
-};
-
-/**
- * Find EMC tables for the given ram code.
- *
- * The tegra EMC binding has two options, one using the ram code and one not.
- * We detect which is in use by looking for the nvidia,use-ram-code property.
- * If this is not present, then the EMC tables are directly below 'node',
- * otherwise we select the correct emc-tables subnode based on the 'ram_code'
- * value.
- *
- * @param blob         Device tree blob
- * @param node         EMC node (nvidia,tegra20-emc compatible string)
- * @param ram_code     RAM code to select (0-3, or -1 if unknown)
- * @return 0 if ok, otherwise a -ve ERR_ code (see enum above)
- */
-static int find_emc_tables(const void *blob, int node, int ram_code)
-{
-       int need_ram_code;
-       int depth;
-       int offset;
-
-       /* If we are using RAM codes, scan through the tables for our code */
-       need_ram_code = fdtdec_get_bool(blob, node, "nvidia,use-ram-code");
-       if (!need_ram_code)
-               return node;
-       if (ram_code == -1) {
-               debug("%s: RAM code required but not supplied\n", __func__);
-               return ERR_NO_RAM_CODE;
-       }
-
-       offset = node;
-       depth = 0;
-       do {
-               /*
-                * Sadly there is no compatible string so we cannot use
-                * fdtdec_next_compatible_subnode().
-                */
-               offset = fdt_next_node(blob, offset, &depth);
-               if (depth <= 0)
-                       break;
-
-               /* Make sure this is a direct subnode */
-               if (depth != 1)
-                       continue;
-               if (strcmp("emc-tables", fdt_get_name(blob, offset, NULL)))
-                       continue;
-
-               if (fdtdec_get_int(blob, offset, "nvidia,ram-code", -1)
-                               == ram_code)
-                       return offset;
-       } while (1);
-
-       debug("%s: Could not find tables for RAM code %d\n", __func__,
-             ram_code);
-       return ERR_RAM_CODE_NOT_FOUND;
-}
-
-/**
- * Decode the EMC node of the device tree, returning a pointer to the emc
- * controller and the table to be used for the given rate.
- *
- * @param blob Device tree blob
- * @param rate Clock speed of memory controller in Hz (=2x memory bus rate)
- * @param emcp Returns address of EMC controller registers
- * @param tablep Returns pointer to table to program into EMC. There are
- *             TEGRA_EMC_NUM_REGS entries, destined for offsets as per the
- *             emc_reg_addr array.
- * @return 0 if ok, otherwise a -ve error code which will allow someone to
- * figure out roughly what went wrong by looking at this code.
- */
-static int decode_emc(const void *blob, unsigned rate, struct emc_ctlr **emcp,
-                     const u32 **tablep)
-{
-       struct apb_misc_pp_ctlr *pp =
-               (struct apb_misc_pp_ctlr *)NV_PA_APB_MISC_BASE;
-       int ram_code;
-       int depth;
-       int node;
-
-       ram_code = (readl(&pp->strapping_opt_a) & RAM_CODE_MASK)
-                       >> RAM_CODE_SHIFT;
-       /*
-        * The EMC clock rate is twice the bus rate, and the bus rate is
-        * measured in kHz
-        */
-       rate = rate / 2 / 1000;
-
-       node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_EMC);
-       if (node < 0) {
-               debug("%s: No EMC node found in FDT\n", __func__);
-               return ERR_NO_EMC_NODE;
-       }
-       *emcp = (struct emc_ctlr *)fdtdec_get_addr(blob, node, "reg");
-       if (*emcp == (struct emc_ctlr *)FDT_ADDR_T_NONE) {
-               debug("%s: No EMC node reg property\n", __func__);
-               return ERR_NO_EMC_REG;
-       }
-
-       /* Work out the parent node which contains our EMC tables */
-       node = find_emc_tables(blob, node, ram_code & 3);
-       if (node < 0)
-               return node;
-
-       depth = 0;
-       for (;;) {
-               int node_rate;
-
-               node = fdtdec_next_compatible_subnode(blob, node,
-                               COMPAT_NVIDIA_TEGRA20_EMC_TABLE, &depth);
-               if (node < 0)
-                       break;
-               node_rate = fdtdec_get_int(blob, node, "clock-frequency", -1);
-               if (node_rate == -1) {
-                       debug("%s: Missing clock-frequency\n", __func__);
-                       return ERR_NO_FREQ; /* we expect this property */
-               }
-
-               if (node_rate == rate)
-                       break;
-       }
-       if (node < 0) {
-               debug("%s: No node found for clock frequency %d\n", __func__,
-                     rate);
-               return ERR_FREQ_NOT_FOUND;
-       }
-
-       *tablep = fdtdec_locate_array(blob, node, "nvidia,emc-registers",
-                                     TEGRA_EMC_NUM_REGS);
-       if (!*tablep) {
-               debug("%s: node '%s' array missing / wrong size\n", __func__,
-                     fdt_get_name(blob, node, NULL));
-               return ERR_BAD_REGS;
-       }
-
-       /* All seems well */
-       return 0;
-}
-
-int tegra_set_emc(const void *blob, unsigned rate)
-{
-       struct emc_ctlr *emc;
-       const u32 *table;
-       int err, i;
-
-       err = decode_emc(blob, rate, &emc, &table);
-       if (err) {
-               debug("Warning: no valid EMC (%d), memory timings unset\n",
-                      err);
-               return err;
-       }
-
-       debug("%s: Table found, setting EMC values as follows:\n", __func__);
-       for (i = 0; i < TEGRA_EMC_NUM_REGS; i++) {
-               u32 value = fdt32_to_cpu(table[i]);
-               u32 addr = (uintptr_t)emc + emc_reg_addr[i];
-
-               debug("   %#x: %#x\n", addr, value);
-               writel(value, addr);
-       }
-
-       /* trigger emc with new settings */
-       clock_adjust_periph_pll_div(PERIPH_ID_EMC, CLOCK_ID_MEMORY,
-                               clock_get_rate(CLOCK_ID_MEMORY), NULL);
-       debug("EMC clock set to %lu\n",
-             clock_get_periph_rate(PERIPH_ID_EMC, CLOCK_ID_MEMORY));
-
-       return 0;
-}
diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c
deleted file mode 100644 (file)
index 4a31a4c..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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
- */
-
-/* Tegra2 high-level function multiplexing */
-#include <common.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/funcmux.h>
-#include <asm/arch/pinmux.h>
-
-int funcmux_select(enum periph_id id, int config)
-{
-       int bad_config = config != FUNCMUX_DEFAULT;
-
-       switch (id) {
-       case PERIPH_ID_UART1:
-               switch (config) {
-               case FUNCMUX_UART1_IRRX_IRTX:
-                       pinmux_set_func(PINGRP_IRRX, PMUX_FUNC_UARTA);
-                       pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA);
-                       pinmux_tristate_disable(PINGRP_IRRX);
-                       pinmux_tristate_disable(PINGRP_IRTX);
-                       break;
-               case FUNCMUX_UART1_UAA_UAB:
-                       pinmux_set_func(PINGRP_UAA, PMUX_FUNC_UARTA);
-                       pinmux_set_func(PINGRP_UAB, PMUX_FUNC_UARTA);
-                       pinmux_tristate_disable(PINGRP_UAA);
-                       pinmux_tristate_disable(PINGRP_UAB);
-                       bad_config = 0;
-                       break;
-               case FUNCMUX_UART1_GPU:
-                       pinmux_set_func(PINGRP_GPU, PMUX_FUNC_UARTA);
-                       pinmux_tristate_disable(PINGRP_GPU);
-                       bad_config = 0;
-                       break;
-               case FUNCMUX_UART1_SDIO1:
-                       pinmux_set_func(PINGRP_SDIO1, PMUX_FUNC_UARTA);
-                       pinmux_tristate_disable(PINGRP_SDIO1);
-                       bad_config = 0;
-                       break;
-               }
-               if (!bad_config) {
-                       /*
-                        * Tegra appears to boot with function UARTA pre-
-                        * selected on mux group SDB. If two mux groups are
-                        * both set to the same function, it's unclear which
-                        * group's pins drive the RX signals into the HW.
-                        * For UARTA, SDB certainly overrides group IRTX in
-                        * practice. To solve this, configure some alternative
-                        * function on SDB to avoid the conflict. Also, tri-
-                        * state the group to avoid driving any signal onto it
-                        * until we know what's connected.
-                        */
-                       pinmux_tristate_enable(PINGRP_SDB);
-                       pinmux_set_func(PINGRP_SDB,  PMUX_FUNC_SDIO3);
-               }
-               break;
-
-       case PERIPH_ID_UART2:
-               if (config == FUNCMUX_UART2_IRDA) {
-                       pinmux_set_func(PINGRP_UAD, PMUX_FUNC_IRDA);
-                       pinmux_tristate_disable(PINGRP_UAD);
-               }
-               break;
-
-       case PERIPH_ID_UART4:
-               if (config == FUNCMUX_UART4_GMC) {
-                       pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);
-                       pinmux_tristate_disable(PINGRP_GMC);
-               }
-               break;
-
-       case PERIPH_ID_DVC_I2C:
-               /* there is only one selection, pinmux_config is ignored */
-               if (config == FUNCMUX_DVC_I2CP) {
-                       pinmux_set_func(PINGRP_I2CP, PMUX_FUNC_I2C);
-                       pinmux_tristate_disable(PINGRP_I2CP);
-               }
-               break;
-
-       case PERIPH_ID_I2C1:
-               /* support pinmux_config of 0 for now, */
-               if (config == FUNCMUX_I2C1_RM) {
-                       pinmux_set_func(PINGRP_RM, PMUX_FUNC_I2C);
-                       pinmux_tristate_disable(PINGRP_RM);
-               }
-               break;
-       case PERIPH_ID_I2C2: /* I2C2 */
-               switch (config) {
-               case FUNCMUX_I2C2_DDC:  /* DDC pin group, select I2C2 */
-                       pinmux_set_func(PINGRP_DDC, PMUX_FUNC_I2C2);
-                       /* PTA to HDMI */
-                       pinmux_set_func(PINGRP_PTA, PMUX_FUNC_HDMI);
-                       pinmux_tristate_disable(PINGRP_DDC);
-                       break;
-               case FUNCMUX_I2C2_PTA:  /* PTA pin group, select I2C2 */
-                       pinmux_set_func(PINGRP_PTA, PMUX_FUNC_I2C2);
-                       /* set DDC_SEL to RSVDx (RSVD2 works for now) */
-                       pinmux_set_func(PINGRP_DDC, PMUX_FUNC_RSVD2);
-                       pinmux_tristate_disable(PINGRP_PTA);
-                       bad_config = 0;
-                       break;
-               }
-               break;
-       case PERIPH_ID_I2C3: /* I2C3 */
-               /* support pinmux_config of 0 for now */
-               if (config == FUNCMUX_I2C3_DTF) {
-                       pinmux_set_func(PINGRP_DTF, PMUX_FUNC_I2C3);
-                       pinmux_tristate_disable(PINGRP_DTF);
-               }
-               break;
-
-       case PERIPH_ID_SDMMC1:
-               if (config == FUNCMUX_SDMMC1_SDIO1_4BIT) {
-                       pinmux_set_func(PINGRP_SDIO1, PMUX_FUNC_SDIO1);
-                       pinmux_tristate_disable(PINGRP_SDIO1);
-               }
-               break;
-
-       case PERIPH_ID_SDMMC2:
-               if (config == FUNCMUX_SDMMC2_DTA_DTD_8BIT) {
-                       pinmux_set_func(PINGRP_DTA, PMUX_FUNC_SDIO2);
-                       pinmux_set_func(PINGRP_DTD, PMUX_FUNC_SDIO2);
-
-                       pinmux_tristate_disable(PINGRP_DTA);
-                       pinmux_tristate_disable(PINGRP_DTD);
-               }
-               break;
-
-       case PERIPH_ID_SDMMC3:
-               switch (config) {
-               case FUNCMUX_SDMMC3_SDB_SLXA_8BIT:
-                       pinmux_set_func(PINGRP_SLXA, PMUX_FUNC_SDIO3);
-                       pinmux_set_func(PINGRP_SLXC, PMUX_FUNC_SDIO3);
-                       pinmux_set_func(PINGRP_SLXD, PMUX_FUNC_SDIO3);
-                       pinmux_set_func(PINGRP_SLXK, PMUX_FUNC_SDIO3);
-
-                       pinmux_tristate_disable(PINGRP_SLXA);
-                       pinmux_tristate_disable(PINGRP_SLXC);
-                       pinmux_tristate_disable(PINGRP_SLXD);
-                       pinmux_tristate_disable(PINGRP_SLXK);
-                       /* fall through */
-
-               case FUNCMUX_SDMMC3_SDB_4BIT:
-                       pinmux_set_func(PINGRP_SDB, PMUX_FUNC_SDIO3);
-                       pinmux_set_func(PINGRP_SDC, PMUX_FUNC_SDIO3);
-                       pinmux_set_func(PINGRP_SDD, PMUX_FUNC_SDIO3);
-
-                       pinmux_tristate_disable(PINGRP_SDB);
-                       pinmux_tristate_disable(PINGRP_SDC);
-                       pinmux_tristate_disable(PINGRP_SDD);
-                       bad_config = 0;
-                       break;
-               }
-               break;
-
-       case PERIPH_ID_SDMMC4:
-               switch (config) {
-               case FUNCMUX_SDMMC4_ATC_ATD_8BIT:
-                       pinmux_set_func(PINGRP_ATC, PMUX_FUNC_SDIO4);
-                       pinmux_set_func(PINGRP_ATD, PMUX_FUNC_SDIO4);
-
-                       pinmux_tristate_disable(PINGRP_ATC);
-                       pinmux_tristate_disable(PINGRP_ATD);
-                       break;
-
-               case FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT:
-                       pinmux_set_func(PINGRP_GME, PMUX_FUNC_SDIO4);
-                       pinmux_tristate_disable(PINGRP_GME);
-                       /* fall through */
-
-               case FUNCMUX_SDMMC4_ATB_GMA_4_BIT:
-                       pinmux_set_func(PINGRP_ATB, PMUX_FUNC_SDIO4);
-                       pinmux_set_func(PINGRP_GMA, PMUX_FUNC_SDIO4);
-
-                       pinmux_tristate_disable(PINGRP_ATB);
-                       pinmux_tristate_disable(PINGRP_GMA);
-                       bad_config = 0;
-                       break;
-               }
-               break;
-
-       case PERIPH_ID_KBC:
-               if (config == FUNCMUX_DEFAULT) {
-                       enum pmux_pingrp grp[] = {PINGRP_KBCA, PINGRP_KBCB,
-                               PINGRP_KBCC, PINGRP_KBCD, PINGRP_KBCE,
-                               PINGRP_KBCF};
-                       int i;
-
-                       for (i = 0; i < ARRAY_SIZE(grp); i++) {
-                               pinmux_tristate_disable(grp[i]);
-                               pinmux_set_func(grp[i], PMUX_FUNC_KBC);
-                               pinmux_set_pullupdown(grp[i], PMUX_PULL_UP);
-                       }
-               }
-               break;
-
-       case PERIPH_ID_USB2:
-               if (config == FUNCMUX_USB2_ULPI) {
-                       pinmux_set_func(PINGRP_UAA, PMUX_FUNC_ULPI);
-                       pinmux_set_func(PINGRP_UAB, PMUX_FUNC_ULPI);
-                       pinmux_set_func(PINGRP_UDA, PMUX_FUNC_ULPI);
-
-                       pinmux_tristate_disable(PINGRP_UAA);
-                       pinmux_tristate_disable(PINGRP_UAB);
-                       pinmux_tristate_disable(PINGRP_UDA);
-               }
-               break;
-
-       case PERIPH_ID_SPI1:
-               if (config == FUNCMUX_SPI1_GMC_GMD) {
-                       pinmux_set_func(PINGRP_GMC, PMUX_FUNC_SFLASH);
-                       pinmux_set_func(PINGRP_GMD, PMUX_FUNC_SFLASH);
-
-                       pinmux_tristate_disable(PINGRP_GMC);
-                       pinmux_tristate_disable(PINGRP_GMD);
-               }
-               break;
-
-       default:
-               debug("%s: invalid periph_id %d", __func__, id);
-               return -1;
-       }
-
-       if (bad_config) {
-               debug("%s: invalid config %d for periph_id %d", __func__,
-                     config, id);
-               return -1;
-       }
-
-       return 0;
-}
diff --git a/arch/arm/cpu/armv7/tegra2/lowlevel_init.S b/arch/arm/cpu/armv7/tegra2/lowlevel_init.S
deleted file mode 100644 (file)
index d117f23..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * SoC-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>
-#include <linux/linkage.h>
-
-       .align  5
-ENTRY(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
-ENDPROC(reset_cpu)
diff --git a/arch/arm/cpu/armv7/tegra2/pinmux.c b/arch/arm/cpu/armv7/tegra2/pinmux.c
deleted file mode 100644 (file)
index b053f90..0000000
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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
- */
-
-/* Tegra2 pin multiplexing functions */
-
-#include <asm/io.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/pinmux.h>
-#include <common.h>
-
-
-/*
- * This defines the order of the pin mux control bits in the registers. For
- * some reason there is no correspendence between the tristate, pin mux and
- * pullup/pulldown registers.
- */
-enum pmux_ctlid {
-       /* 0: APB_MISC_PP_PIN_MUX_CTL_A_0 */
-       MUXCTL_UAA,
-       MUXCTL_UAB,
-       MUXCTL_UAC,
-       MUXCTL_UAD,
-       MUXCTL_UDA,
-       MUXCTL_RESERVED5,
-       MUXCTL_ATE,
-       MUXCTL_RM,
-
-       MUXCTL_ATB,
-       MUXCTL_RESERVED9,
-       MUXCTL_ATD,
-       MUXCTL_ATC,
-       MUXCTL_ATA,
-       MUXCTL_KBCF,
-       MUXCTL_KBCE,
-       MUXCTL_SDMMC1,
-
-       /* 16: APB_MISC_PP_PIN_MUX_CTL_B_0 */
-       MUXCTL_GMA,
-       MUXCTL_GMC,
-       MUXCTL_HDINT,
-       MUXCTL_SLXA,
-       MUXCTL_OWC,
-       MUXCTL_SLXC,
-       MUXCTL_SLXD,
-       MUXCTL_SLXK,
-
-       MUXCTL_UCA,
-       MUXCTL_UCB,
-       MUXCTL_DTA,
-       MUXCTL_DTB,
-       MUXCTL_RESERVED28,
-       MUXCTL_DTC,
-       MUXCTL_DTD,
-       MUXCTL_DTE,
-
-       /* 32: APB_MISC_PP_PIN_MUX_CTL_C_0 */
-       MUXCTL_DDC,
-       MUXCTL_CDEV1,
-       MUXCTL_CDEV2,
-       MUXCTL_CSUS,
-       MUXCTL_I2CP,
-       MUXCTL_KBCA,
-       MUXCTL_KBCB,
-       MUXCTL_KBCC,
-
-       MUXCTL_IRTX,
-       MUXCTL_IRRX,
-       MUXCTL_DAP1,
-       MUXCTL_DAP2,
-       MUXCTL_DAP3,
-       MUXCTL_DAP4,
-       MUXCTL_GMB,
-       MUXCTL_GMD,
-
-       /* 48: APB_MISC_PP_PIN_MUX_CTL_D_0 */
-       MUXCTL_GME,
-       MUXCTL_GPV,
-       MUXCTL_GPU,
-       MUXCTL_SPDO,
-       MUXCTL_SPDI,
-       MUXCTL_SDB,
-       MUXCTL_SDC,
-       MUXCTL_SDD,
-
-       MUXCTL_SPIH,
-       MUXCTL_SPIG,
-       MUXCTL_SPIF,
-       MUXCTL_SPIE,
-       MUXCTL_SPID,
-       MUXCTL_SPIC,
-       MUXCTL_SPIB,
-       MUXCTL_SPIA,
-
-       /* 64: APB_MISC_PP_PIN_MUX_CTL_E_0 */
-       MUXCTL_LPW0,
-       MUXCTL_LPW1,
-       MUXCTL_LPW2,
-       MUXCTL_LSDI,
-       MUXCTL_LSDA,
-       MUXCTL_LSPI,
-       MUXCTL_LCSN,
-       MUXCTL_LDC,
-
-       MUXCTL_LSCK,
-       MUXCTL_LSC0,
-       MUXCTL_LSC1,
-       MUXCTL_LHS,
-       MUXCTL_LVS,
-       MUXCTL_LM0,
-       MUXCTL_LM1,
-       MUXCTL_LVP0,
-
-       /* 80: APB_MISC_PP_PIN_MUX_CTL_F_0 */
-       MUXCTL_LD0,
-       MUXCTL_LD1,
-       MUXCTL_LD2,
-       MUXCTL_LD3,
-       MUXCTL_LD4,
-       MUXCTL_LD5,
-       MUXCTL_LD6,
-       MUXCTL_LD7,
-
-       MUXCTL_LD8,
-       MUXCTL_LD9,
-       MUXCTL_LD10,
-       MUXCTL_LD11,
-       MUXCTL_LD12,
-       MUXCTL_LD13,
-       MUXCTL_LD14,
-       MUXCTL_LD15,
-
-       /* 96: APB_MISC_PP_PIN_MUX_CTL_G_0 */
-       MUXCTL_LD16,
-       MUXCTL_LD17,
-       MUXCTL_LHP1,
-       MUXCTL_LHP2,
-       MUXCTL_LVP1,
-       MUXCTL_LHP0,
-       MUXCTL_RESERVED102,
-       MUXCTL_LPP,
-
-       MUXCTL_LDI,
-       MUXCTL_PMC,
-       MUXCTL_CRTP,
-       MUXCTL_PTA,
-       MUXCTL_RESERVED108,
-       MUXCTL_KBCD,
-       MUXCTL_GPU7,
-       MUXCTL_DTF,
-
-       MUXCTL_NONE = -1,
-};
-
-/*
- * And this defines the order of the pullup/pulldown controls which are again
- * in a different order
- */
-enum pmux_pullid {
-       /* 0: APB_MISC_PP_PULLUPDOWN_REG_A_0 */
-       PUCTL_ATA,
-       PUCTL_ATB,
-       PUCTL_ATC,
-       PUCTL_ATD,
-       PUCTL_ATE,
-       PUCTL_DAP1,
-       PUCTL_DAP2,
-       PUCTL_DAP3,
-
-       PUCTL_DAP4,
-       PUCTL_DTA,
-       PUCTL_DTB,
-       PUCTL_DTC,
-       PUCTL_DTD,
-       PUCTL_DTE,
-       PUCTL_DTF,
-       PUCTL_GPV,
-
-       /* 16: APB_MISC_PP_PULLUPDOWN_REG_B_0 */
-       PUCTL_RM,
-       PUCTL_I2CP,
-       PUCTL_PTA,
-       PUCTL_GPU7,
-       PUCTL_KBCA,
-       PUCTL_KBCB,
-       PUCTL_KBCC,
-       PUCTL_KBCD,
-
-       PUCTL_SPDI,
-       PUCTL_SPDO,
-       PUCTL_GPSLXAU,
-       PUCTL_CRTP,
-       PUCTL_SLXC,
-       PUCTL_SLXD,
-       PUCTL_SLXK,
-
-       /* 32: APB_MISC_PP_PULLUPDOWN_REG_C_0 */
-       PUCTL_CDEV1,
-       PUCTL_CDEV2,
-       PUCTL_SPIA,
-       PUCTL_SPIB,
-       PUCTL_SPIC,
-       PUCTL_SPID,
-       PUCTL_SPIE,
-       PUCTL_SPIF,
-
-       PUCTL_SPIG,
-       PUCTL_SPIH,
-       PUCTL_IRTX,
-       PUCTL_IRRX,
-       PUCTL_GME,
-       PUCTL_RESERVED45,
-       PUCTL_XM2D,
-       PUCTL_XM2C,
-
-       /* 48: APB_MISC_PP_PULLUPDOWN_REG_D_0 */
-       PUCTL_UAA,
-       PUCTL_UAB,
-       PUCTL_UAC,
-       PUCTL_UAD,
-       PUCTL_UCA,
-       PUCTL_UCB,
-       PUCTL_LD17,
-       PUCTL_LD19_18,
-
-       PUCTL_LD21_20,
-       PUCTL_LD23_22,
-       PUCTL_LS,
-       PUCTL_LC,
-       PUCTL_CSUS,
-       PUCTL_DDRC,
-       PUCTL_SDC,
-       PUCTL_SDD,
-
-       /* 64: APB_MISC_PP_PULLUPDOWN_REG_E_0 */
-       PUCTL_KBCF,
-       PUCTL_KBCE,
-       PUCTL_PMCA,
-       PUCTL_PMCB,
-       PUCTL_PMCC,
-       PUCTL_PMCD,
-       PUCTL_PMCE,
-       PUCTL_CK32,
-
-       PUCTL_UDA,
-       PUCTL_SDMMC1,
-       PUCTL_GMA,
-       PUCTL_GMB,
-       PUCTL_GMC,
-       PUCTL_GMD,
-       PUCTL_DDC,
-       PUCTL_OWC,
-
-       PUCTL_NONE = -1
-};
-
-struct tegra_pingroup_desc {
-       const char *name;
-       enum pmux_func funcs[4];
-       enum pmux_func func_safe;
-       enum pmux_vddio vddio;
-       enum pmux_ctlid ctl_id;
-       enum pmux_pullid pull_id;
-};
-
-
-/* Converts a pmux_pingrp number to a tristate register: 0=A, 1=B, 2=C, 3=D */
-#define TRISTATE_REG(pmux_pingrp) ((pmux_pingrp) >> 5)
-
-/* Mask value for a tristate (within TRISTATE_REG(id)) */
-#define TRISTATE_MASK(pmux_pingrp) (1 << ((pmux_pingrp) & 0x1f))
-
-/* Converts a PUCTL id to a pull register: 0=A, 1=B...4=E */
-#define PULL_REG(pmux_pullid) ((pmux_pullid) >> 4)
-
-/* Converts a PUCTL id to a shift position */
-#define PULL_SHIFT(pmux_pullid) ((pmux_pullid << 1) & 0x1f)
-
-/* Converts a MUXCTL id to a ctl register: 0=A, 1=B...6=G */
-#define MUXCTL_REG(pmux_ctlid) ((pmux_ctlid) >> 4)
-
-/* Converts a MUXCTL id to a shift position */
-#define MUXCTL_SHIFT(pmux_ctlid) ((pmux_ctlid << 1) & 0x1f)
-
-/* Convenient macro for defining pin group properties */
-#define PINALL(pg_name, vdd, f0, f1, f2, f3, f_safe, mux, pupd)                \
-       {                                               \
-               .vddio = PMUX_VDDIO_ ## vdd,            \
-               .funcs = {                              \
-                       PMUX_FUNC_ ## f0,                       \
-                       PMUX_FUNC_ ## f1,                       \
-                       PMUX_FUNC_ ## f2,                       \
-                       PMUX_FUNC_ ## f3,                       \
-               },                                      \
-               .func_safe = PMUX_FUNC_ ## f_safe,              \
-               .ctl_id = mux,                          \
-               .pull_id = pupd                         \
-       }
-
-/* A normal pin group where the mux name and pull-up name match */
-#define PIN(pg_name, vdd, f0, f1, f2, f3, f_safe)              \
-               PINALL(pg_name, vdd, f0, f1, f2, f3, f_safe,    \
-                       MUXCTL_ ## pg_name, PUCTL_ ## pg_name)
-
-/* A pin group where the pull-up name doesn't have a 1-1 mapping */
-#define PINP(pg_name, vdd, f0, f1, f2, f3, f_safe, pupd)               \
-               PINALL(pg_name, vdd, f0, f1, f2, f3, f_safe,    \
-                       MUXCTL_ ## pg_name, PUCTL_ ## pupd)
-
-/* A pin group number which is not used */
-#define PIN_RESERVED \
-       PIN(NONE, NONE, NONE, NONE, NONE, NONE, NONE)
-
-const struct tegra_pingroup_desc tegra_soc_pingroups[PINGRP_COUNT] = {
-       PIN(ATA,  NAND,  IDE,    NAND,   GMI,       RSVD,        IDE),
-       PIN(ATB,  NAND,  IDE,    NAND,   GMI,       SDIO4,       IDE),
-       PIN(ATC,  NAND,  IDE,    NAND,   GMI,       SDIO4,       IDE),
-       PIN(ATD,  NAND,  IDE,    NAND,   GMI,       SDIO4,       IDE),
-       PIN(CDEV1, AUDIO, OSC,   PLLA_OUT, PLLM_OUT1, AUDIO_SYNC, OSC),
-       PIN(CDEV2, AUDIO, OSC,   AHB_CLK, APB_CLK, PLLP_OUT4,    OSC),
-       PIN(CSUS, VI, PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK,
-               PLLC_OUT1),
-       PIN(DAP1, AUDIO, DAP1,   RSVD,   GMI,       SDIO2,       DAP1),
-
-       PIN(DAP2, AUDIO, DAP2,   TWC,    RSVD,      GMI,         DAP2),
-       PIN(DAP3, BB,    DAP3,   RSVD,   RSVD,      RSVD,        DAP3),
-       PIN(DAP4, UART,  DAP4,   RSVD,   GMI,       RSVD,        DAP4),
-       PIN(DTA,  VI,    RSVD,   SDIO2,  VI,        RSVD,        RSVD4),
-       PIN(DTB,  VI,    RSVD,   RSVD,   VI,        SPI1,        RSVD1),
-       PIN(DTC,  VI,    RSVD,   RSVD,   VI,        RSVD,        RSVD1),
-       PIN(DTD,  VI,    RSVD,   SDIO2,  VI,        RSVD,        RSVD1),
-       PIN(DTE,  VI,    RSVD,   RSVD,   VI,        SPI1,        RSVD1),
-
-       PINP(GPU, UART,  PWM,    UARTA,  GMI,       RSVD,        RSVD4,
-               GPSLXAU),
-       PIN(GPV,  SD,    PCIE,   RSVD,   RSVD,      RSVD,        PCIE),
-       PIN(I2CP, SYS,   I2C,    RSVD,   RSVD,      RSVD,        RSVD4),
-       PIN(IRTX, UART,  UARTA,  UARTB,  GMI,       SPI4,        UARTB),
-       PIN(IRRX, UART,  UARTA,  UARTB,  GMI,       SPI4,        UARTB),
-       PIN(KBCB, SYS,   KBC,    NAND,   SDIO2,     MIO,         KBC),
-       PIN(KBCA, SYS,   KBC,    NAND,   SDIO2,     EMC_TEST0_DLL, KBC),
-       PINP(PMC, SYS,   PWR_ON, PWR_INTR, RSVD,    RSVD,        PWR_ON, NONE),
-
-       PIN(PTA,  NAND,  I2C2,   HDMI,   GMI,       RSVD,        RSVD4),
-       PIN(RM,   UART,  I2C,    RSVD,   RSVD,      RSVD,        RSVD4),
-       PIN(KBCE, SYS,   KBC,    NAND,   OWR,       RSVD,        KBC),
-       PIN(KBCF, SYS,   KBC,    NAND,   TRACE,     MIO,         KBC),
-       PIN(GMA,  NAND,  UARTE,  SPI3,   GMI,       SDIO4,       SPI3),
-       PIN(GMC,  NAND,  UARTD,  SPI4,   GMI,       SFLASH,      SPI4),
-       PIN(SDMMC1, BB,  SDIO1,  RSVD,   UARTE,     UARTA,       RSVD2),
-       PIN(OWC,  SYS,   OWR,    RSVD,   RSVD,      RSVD,        OWR),
-
-       PIN(GME,  NAND,  RSVD,   DAP5,   GMI,       SDIO4,       GMI),
-       PIN(SDC,  SD,    PWM,    TWC,    SDIO3,     SPI3,        TWC),
-       PIN(SDD,  SD,    UARTA,  PWM,    SDIO3,     SPI3,        PWM),
-       PIN_RESERVED,
-       PINP(SLXA, SD,   PCIE,   SPI4,   SDIO3,     SPI2,        PCIE, CRTP),
-       PIN(SLXC, SD,    SPDIF,  SPI4,   SDIO3,     SPI2,        SPI4),
-       PIN(SLXD, SD,    SPDIF,  SPI4,   SDIO3,     SPI2,        SPI4),
-       PIN(SLXK, SD,    PCIE,   SPI4,   SDIO3,     SPI2,        PCIE),
-
-       PIN(SPDI, AUDIO, SPDIF,  RSVD,   I2C,       SDIO2,       RSVD2),
-       PIN(SPDO, AUDIO, SPDIF,  RSVD,   I2C,       SDIO2,       RSVD2),
-       PIN(SPIA, AUDIO, SPI1,   SPI2,   SPI3,      GMI,         GMI),
-       PIN(SPIB, AUDIO, SPI1,   SPI2,   SPI3,      GMI,         GMI),
-       PIN(SPIC, AUDIO, SPI1,   SPI2,   SPI3,      GMI,         GMI),
-       PIN(SPID, AUDIO, SPI2,   SPI1,   SPI2_ALT,  GMI,         GMI),
-       PIN(SPIE, AUDIO, SPI2,   SPI1,   SPI2_ALT,  GMI,         GMI),
-       PIN(SPIF, AUDIO, SPI3,   SPI1,   SPI2,      RSVD,        RSVD4),
-
-       PIN(SPIG, AUDIO, SPI3,   SPI2,   SPI2_ALT,  I2C,         SPI2_ALT),
-       PIN(SPIH, AUDIO, SPI3,   SPI2,   SPI2_ALT,  I2C,         SPI2_ALT),
-       PIN(UAA,  BB,    SPI3,   MIPI_HS, UARTA,    ULPI,        MIPI_HS),
-       PIN(UAB,  BB,    SPI2,   MIPI_HS, UARTA,    ULPI,        MIPI_HS),
-       PIN(UAC,  BB,    OWR,    RSVD,   RSVD,      RSVD,        RSVD4),
-       PIN(UAD,  UART,  IRDA,   SPDIF,  UARTA,     SPI4,        SPDIF),
-       PIN(UCA,  UART,  UARTC,  RSVD,   GMI,       RSVD,        RSVD4),
-       PIN(UCB,  UART,  UARTC,  PWM,    GMI,       RSVD,        RSVD4),
-
-       PIN_RESERVED,
-       PIN(ATE,  NAND,  IDE,    NAND,   GMI,       RSVD,        IDE),
-       PIN(KBCC, SYS,   KBC,    NAND,   TRACE,     EMC_TEST1_DLL, KBC),
-       PIN_RESERVED,
-       PIN_RESERVED,
-       PIN(GMB,  NAND,  IDE,    NAND,   GMI,       GMI_INT,     GMI),
-       PIN(GMD,  NAND,  RSVD,   NAND,   GMI,       SFLASH,      GMI),
-       PIN(DDC,  LCD,   I2C2,   RSVD,   RSVD,      RSVD,        RSVD4),
-
-       /* 64 */
-       PINP(LD0,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD1,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD2,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD3,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD4,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD5,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD6,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD7,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-
-       PINP(LD8,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD9,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD10, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD11, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD12, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD13, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD14, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD15, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-
-       PINP(LD16, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
-       PINP(LD17, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD17),
-       PINP(LHP0, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD21_20),
-       PINP(LHP1, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD19_18),
-       PINP(LHP2, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD19_18),
-       PINP(LVP0, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LC),
-       PINP(LVP1, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD21_20),
-       PINP(HDINT, LCD, HDMI,   RSVD,   RSVD,      RSVD,     HDMI , LC),
-
-       PINP(LM0,  LCD,  DISPA,  DISPB,  SPI3,      RSVD,     RSVD4, LC),
-       PINP(LM1,  LCD,  DISPA,  DISPB,  RSVD,      CRT,      RSVD3, LC),
-       PINP(LVS,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LC),
-       PINP(LSC0, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LC),
-       PINP(LSC1, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
-       PINP(LSCK, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
-       PINP(LDC,  LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LS),
-       PINP(LCSN, LCD,  DISPA,  DISPB,  SPI3,      RSVD,     RSVD4, LS),
-
-       /* 96 */
-       PINP(LSPI, LCD,  DISPA,  DISPB,  XIO,       HDMI,     DISPA, LC),
-       PINP(LSDA, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
-       PINP(LSDI, LCD,  DISPA,  DISPB,  SPI3,      RSVD,     DISPA, LS),
-       PINP(LPW0, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
-       PINP(LPW1, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LS),
-       PINP(LPW2, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
-       PINP(LDI,  LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD23_22),
-       PINP(LHS,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LC),
-
-       PINP(LPP,  LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD23_22),
-       PIN_RESERVED,
-       PIN(KBCD,  SYS,  KBC,    NAND,   SDIO2,     MIO,      KBC),
-       PIN(GPU7,  SYS,  RTCK,   RSVD,   RSVD,      RSVD,     RTCK),
-       PIN(DTF,   VI,   I2C3,   RSVD,   VI,        RSVD,     RSVD4),
-       PIN(UDA,   BB,   SPI1,   RSVD,   UARTD,     ULPI,     RSVD2),
-       PIN(CRTP,  LCD,  CRT,    RSVD,   RSVD,      RSVD,     RSVD),
-       PINP(SDB,  SD,   UARTA,  PWM,    SDIO3,     SPI2,     PWM,   NONE),
-
-       /* these pin groups only have pullup and pull down control */
-       PINALL(CK32,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(DDRC,  DDR,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(PMCA,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(PMCB,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(PMCC,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(PMCD,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(PMCE,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(XM2C,  DDR,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-       PINALL(XM2D,  DDR,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
-               PUCTL_NONE),
-};
-
-void pinmux_set_tristate(enum pmux_pingrp pin, int enable)
-{
-       struct pmux_tri_ctlr *pmt =
-                       (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-       u32 *tri = &pmt->pmt_tri[TRISTATE_REG(pin)];
-       u32 reg;
-
-       reg = readl(tri);
-       if (enable)
-               reg |= TRISTATE_MASK(pin);
-       else
-               reg &= ~TRISTATE_MASK(pin);
-       writel(reg, tri);
-}
-
-void pinmux_tristate_enable(enum pmux_pingrp pin)
-{
-       pinmux_set_tristate(pin, 1);
-}
-
-void pinmux_tristate_disable(enum pmux_pingrp pin)
-{
-       pinmux_set_tristate(pin, 0);
-}
-
-void pinmux_set_pullupdown(enum pmux_pingrp pin, enum pmux_pull pupd)
-{
-       struct pmux_tri_ctlr *pmt =
-                       (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-       enum pmux_pullid pull_id = tegra_soc_pingroups[pin].pull_id;
-       u32 *pull = &pmt->pmt_pull[PULL_REG(pull_id)];
-       u32 mask_bit;
-       u32 reg;
-       mask_bit = PULL_SHIFT(pull_id);
-
-       reg = readl(pull);
-       reg &= ~(0x3 << mask_bit);
-       reg |= pupd << mask_bit;
-       writel(reg, pull);
-}
-
-void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func)
-{
-       struct pmux_tri_ctlr *pmt =
-                       (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-       enum pmux_ctlid mux_id = tegra_soc_pingroups[pin].ctl_id;
-       u32 *muxctl = &pmt->pmt_ctl[MUXCTL_REG(mux_id)];
-       u32 mask_bit;
-       int i, mux = -1;
-       u32 reg;
-
-       assert(pmux_func_isvalid(func));
-
-       /* Handle special values */
-       if (func >= PMUX_FUNC_RSVD1) {
-               mux = (func - PMUX_FUNC_RSVD1) & 0x3;
-       } else {
-               /* Search for the appropriate function */
-               for (i = 0; i < 4; i++) {
-                       if (tegra_soc_pingroups[pin].funcs[i] == func) {
-                               mux = i;
-                               break;
-                       }
-               }
-       }
-       assert(mux != -1);
-
-       mask_bit = MUXCTL_SHIFT(mux_id);
-       reg = readl(muxctl);
-       reg &= ~(0x3 << mask_bit);
-       reg |= mux << mask_bit;
-       writel(reg, muxctl);
-}
-
-void pinmux_config_pingroup(struct pingroup_config *config)
-{
-       enum pmux_pingrp pin = config->pingroup;
-
-       pinmux_set_func(pin, config->func);
-       pinmux_set_pullupdown(pin, config->pull);
-       pinmux_set_tristate(pin, config->tristate);
-}
-
-void pinmux_config_table(struct pingroup_config *config, int len)
-{
-       int i;
-
-       for (i = 0; i < len; i++)
-               pinmux_config_pingroup(&config[i]);
-}
diff --git a/arch/arm/cpu/armv7/tegra2/pmu.c b/arch/arm/cpu/armv7/tegra2/pmu.c
deleted file mode 100644 (file)
index 4673802..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * (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 <tps6586x.h>
-#include <asm/io.h>
-#include <asm/arch/ap20.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/tegra_i2c.h>
-#include <asm/arch/sys_proto.h>
-
-#define VDD_CORE_NOMINAL_T25   0x17    /* 1.3v */
-#define VDD_CPU_NOMINAL_T25    0x10    /* 1.125v */
-
-#define VDD_CORE_NOMINAL_T20   0x16    /* 1.275v */
-#define VDD_CPU_NOMINAL_T20    0x0f    /* 1.1v */
-
-#define VDD_RELATION           0x02    /*  50mv */
-#define VDD_TRANSITION_STEP    0x06    /* 150mv */
-#define VDD_TRANSITION_RATE    0x06    /* 3.52mv/us */
-
-int pmu_set_nominal(void)
-{
-       int core, cpu, bus;
-
-       /* by default, the table has been filled with T25 settings */
-       switch (tegra_get_chip_type()) {
-       case TEGRA_SOC_T20:
-               core = VDD_CORE_NOMINAL_T20;
-               cpu = VDD_CPU_NOMINAL_T20;
-               break;
-       case TEGRA_SOC_T25:
-               core = VDD_CORE_NOMINAL_T25;
-               cpu = VDD_CPU_NOMINAL_T25;
-               break;
-       default:
-               debug("%s: Unknown chip type\n", __func__);
-               return -1;
-       }
-
-       bus = tegra_i2c_get_dvc_bus_num();
-       if (bus == -1) {
-               debug("%s: Cannot find DVC I2C bus\n", __func__);
-               return -1;
-       }
-       tps6586x_init(bus);
-       tps6586x_set_pwm_mode(TPS6586X_PWM_SM1);
-       return tps6586x_adjust_sm0_sm1(core, cpu, VDD_TRANSITION_STEP,
-                               VDD_TRANSITION_RATE, VDD_RELATION);
-}
diff --git a/arch/arm/cpu/armv7/tegra2/sys_info.c b/arch/arm/cpu/armv7/tegra2/sys_info.c
deleted file mode 100644 (file)
index 6d11dc1..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * (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
deleted file mode 100644 (file)
index b12b12c..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * (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>
-#include <asm/arch/timer.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* counter runs at 1MHz */
-#define TIMER_CLK      1000000
-#define TIMER_LOAD_VAL 0xffffffff
-
-/* timer without interrupts */
-ulong get_timer(ulong base)
-{
-       return get_timer_masked() - base;
-}
-
-/* delay x useconds */
-void __udelay(unsigned long usec)
-{
-       long tmo = usec * (TIMER_CLK / 1000) / 1000;
-       unsigned long now, last = timer_get_us();
-
-       while (tmo > 0) {
-               now = timer_get_us();
-               if (last > now) /* count up timer overflow */
-                       tmo -= TIMER_LOAD_VAL - last + now;
-               else
-                       tmo -= now - last;
-               last = now;
-       }
-}
-
-ulong get_timer_masked(void)
-{
-       ulong now;
-
-       /* current tick value */
-       now = timer_get_us() / (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;
-}
-
-unsigned long timer_get_us(void)
-{
-       struct timerus *timer_base = (struct timerus *)NV_PA_TMRUS_BASE;
-
-       return readl(&timer_base->cntr_1us);
-}
diff --git a/arch/arm/cpu/armv7/tegra2/usb.c b/arch/arm/cpu/armv7/tegra2/usb.c
deleted file mode 100644 (file)
index 5f2b243..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * (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-generic/gpio.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/clk_rst.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/pinmux.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/arch/uart.h>
-#include <asm/arch/usb.h>
-#include <libfdt.h>
-#include <fdtdec.h>
-
-enum {
-       USB_PORTS_MAX   = 4,                    /* Maximum ports we allow */
-};
-
-/* Parameters we need for USB */
-enum {
-       PARAM_DIVN,                     /* PLL FEEDBACK DIVIDer */
-       PARAM_DIVM,                     /* PLL INPUT DIVIDER */
-       PARAM_DIVP,                     /* POST DIVIDER (2^N) */
-       PARAM_CPCON,                    /* BASE PLLC CHARGE Pump setup ctrl */
-       PARAM_LFCON,                    /* BASE PLLC LOOP FILter setup ctrl */
-       PARAM_ENABLE_DELAY_COUNT,       /* PLL-U Enable Delay Count */
-       PARAM_STABLE_COUNT,             /* PLL-U STABLE count */
-       PARAM_ACTIVE_DELAY_COUNT,       /* PLL-U Active delay count */
-       PARAM_XTAL_FREQ_COUNT,          /* PLL-U XTAL frequency count */
-       PARAM_DEBOUNCE_A_TIME,          /* 10MS DELAY for BIAS_DEBOUNCE_A */
-       PARAM_BIAS_TIME,                /* 20US DELAY AFter bias cell op */
-
-       PARAM_COUNT
-};
-
-/* Possible port types (dual role mode) */
-enum dr_mode {
-       DR_MODE_NONE = 0,
-       DR_MODE_HOST,           /* supports host operation */
-       DR_MODE_DEVICE,         /* supports device operation */
-       DR_MODE_OTG,            /* supports both */
-};
-
-/* Information about a USB port */
-struct fdt_usb {
-       struct usb_ctlr *reg;   /* address of registers in physical memory */
-       unsigned utmi:1;        /* 1 if port has external tranceiver, else 0 */
-       unsigned enabled:1;     /* 1 to enable, 0 to disable */
-       unsigned has_legacy_mode:1; /* 1 if this port has legacy mode */
-       enum dr_mode dr_mode;   /* dual role mode */
-       enum periph_id periph_id;/* peripheral id */
-       struct fdt_gpio_state vbus_gpio;        /* GPIO for vbus enable */
-};
-
-static struct fdt_usb port[USB_PORTS_MAX];     /* List of valid USB ports */
-static unsigned port_count;                    /* Number of available ports */
-static int port_current;                       /* Current port (-1 = none) */
-
-/*
- * This table has USB timing parameters for each Oscillator frequency we
- * support. There are four sets of values:
- *
- * 1. PLLU configuration information (reference clock is osc/clk_m and
- * PLLU-FOs are fixed at 12MHz/60MHz/480MHz).
- *
- *  Reference frequency     13.0MHz      19.2MHz      12.0MHz      26.0MHz
- *  ----------------------------------------------------------------------
- *      DIVN                960 (0x3c0)  200 (0c8)    960 (3c0h)   960 (3c0)
- *      DIVM                13 (0d)      4 (04)       12 (0c)      26 (1a)
- * Filter frequency (MHz)   1            4.8          6            2
- * CPCON                    1100b        0011b        1100b        1100b
- * LFCON0                   0            0            0            0
- *
- * 2. PLL CONFIGURATION & PARAMETERS for different clock generators:
- *
- * Reference frequency     13.0MHz         19.2MHz         12.0MHz     26.0MHz
- * ---------------------------------------------------------------------------
- * PLLU_ENABLE_DLY_COUNT   02 (0x02)       03 (03)         02 (02)     04 (04)
- * PLLU_STABLE_COUNT       51 (33)         75 (4B)         47 (2F)    102 (66)
- * PLL_ACTIVE_DLY_COUNT    05 (05)         06 (06)         04 (04)     09 (09)
- * XTAL_FREQ_COUNT        127 (7F)        187 (BB)        118 (76)    254 (FE)
- *
- * 3. Debounce values IdDig, Avalid, Bvalid, VbusValid, VbusWakeUp, and
- * SessEnd. Each of these signals have their own debouncer and for each of
- * those one out of two debouncing times can be chosen (BIAS_DEBOUNCE_A or
- * BIAS_DEBOUNCE_B).
- *
- * The values of DEBOUNCE_A and DEBOUNCE_B are calculated as follows:
- *    0xffff -> No debouncing at all
- *    <n> ms = <n> *1000 / (1/19.2MHz) / 4
- *
- * So to program a 1 ms debounce for BIAS_DEBOUNCE_A, we have:
- * BIAS_DEBOUNCE_A[15:0] = 1000 * 19.2 / 4  = 4800 = 0x12c0
- *
- * We need to use only DebounceA for BOOTROM. We don't need the DebounceB
- * values, so we can keep those to default.
- *
- * 4. The 20 microsecond delay after bias cell operation.
- */
-static const unsigned usb_pll[CLOCK_OSC_FREQ_COUNT][PARAM_COUNT] = {
-       /* DivN, DivM, DivP, CPCON, LFCON, Delays             Debounce, Bias */
-       { 0x3C0, 0x0D, 0x00, 0xC,   0,  0x02, 0x33, 0x05, 0x7F, 0x7EF4, 5 },
-       { 0x0C8, 0x04, 0x00, 0x3,   0,  0x03, 0x4B, 0x06, 0xBB, 0xBB80, 7 },
-       { 0x3C0, 0x0C, 0x00, 0xC,   0,  0x02, 0x2F, 0x04, 0x76, 0x7530, 5 },
-       { 0x3C0, 0x1A, 0x00, 0xC,   0,  0x04, 0x66, 0x09, 0xFE, 0xFDE8, 9 }
-};
-
-/* UTMIP Idle Wait Delay */
-static const u8 utmip_idle_wait_delay = 17;
-
-/* UTMIP Elastic limit */
-static const u8 utmip_elastic_limit = 16;
-
-/* UTMIP High Speed Sync Start Delay */
-static const u8 utmip_hs_sync_start_delay = 9;
-
-/* Put the port into host mode (this only works for OTG ports) */
-static void set_host_mode(struct fdt_usb *config)
-{
-       if (config->dr_mode == DR_MODE_OTG) {
-               /* Check whether remote host from USB1 is driving VBus */
-               if (readl(&config->reg->phy_vbus_sensors) & VBUS_VLD_STS)
-                       return;
-
-               /*
-                * If not driving, we set the GPIO to enable VBUS. We assume
-                * that the pinmux is set up correctly for this.
-                */
-               if (fdt_gpio_isvalid(&config->vbus_gpio)) {
-                       fdtdec_setup_gpio(&config->vbus_gpio);
-                       gpio_direction_output(config->vbus_gpio.gpio, 1);
-                       debug("set_host_mode: GPIO %d high\n",
-                             config->vbus_gpio.gpio);
-               }
-       }
-}
-
-void usbf_reset_controller(struct fdt_usb *config, struct usb_ctlr *usbctlr)
-{
-       /* Reset the USB controller with 2us delay */
-       reset_periph(config->periph_id, 2);
-
-       /*
-        * Set USB1_NO_LEGACY_MODE to 1, Registers are accessible under
-        * base address
-        */
-       if (config->has_legacy_mode)
-               setbits_le32(&usbctlr->usb1_legacy_ctrl, USB1_NO_LEGACY_MODE);
-
-       /* Put UTMIP1/3 in reset */
-       setbits_le32(&usbctlr->susp_ctrl, UTMIP_RESET);
-
-       /* Enable the UTMIP PHY */
-       if (config->utmi)
-               setbits_le32(&usbctlr->susp_ctrl, UTMIP_PHY_ENB);
-
-       /*
-        * TODO: where do we take the USB1 out of reset? The old code would
-        * take USB3 out of reset, but not USB1. This code doesn't do either.
-        */
-}
-
-/* set up the USB controller with the parameters provided */
-static int init_usb_controller(struct fdt_usb *config,
-                               struct usb_ctlr *usbctlr, const u32 timing[])
-{
-       u32 val;
-       int loop_count;
-
-       clock_enable(config->periph_id);
-
-       /* Reset the usb controller */
-       usbf_reset_controller(config, usbctlr);
-
-       /* Stop crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN low */
-       clrbits_le32(&usbctlr->utmip_misc_cfg1, UTMIP_PHY_XTAL_CLOCKEN);
-
-       /* Follow the crystal clock disable by >100ns delay */
-       udelay(1);
-
-       /*
-        * To Use the A Session Valid for cable detection logic, VBUS_WAKEUP
-        * mux must be switched to actually use a_sess_vld threshold.
-        */
-       if (fdt_gpio_isvalid(&config->vbus_gpio)) {
-               clrsetbits_le32(&usbctlr->usb1_legacy_ctrl,
-                       VBUS_SENSE_CTL_MASK,
-                       VBUS_SENSE_CTL_A_SESS_VLD << VBUS_SENSE_CTL_SHIFT);
-       }
-
-       /*
-        * PLL Delay CONFIGURATION settings. The following parameters control
-        * the bring up of the plls.
-        */
-       val = readl(&usbctlr->utmip_misc_cfg1);
-       clrsetbits_le32(&val, UTMIP_PLLU_STABLE_COUNT_MASK,
-               timing[PARAM_STABLE_COUNT] << UTMIP_PLLU_STABLE_COUNT_SHIFT);
-       clrsetbits_le32(&val, UTMIP_PLL_ACTIVE_DLY_COUNT_MASK,
-               timing[PARAM_ACTIVE_DELAY_COUNT] <<
-                       UTMIP_PLL_ACTIVE_DLY_COUNT_SHIFT);
-       writel(val, &usbctlr->utmip_misc_cfg1);
-
-       /* Set PLL enable delay count and crystal frequency count */
-       val = readl(&usbctlr->utmip_pll_cfg1);
-       clrsetbits_le32(&val, UTMIP_PLLU_ENABLE_DLY_COUNT_MASK,
-               timing[PARAM_ENABLE_DELAY_COUNT] <<
-                       UTMIP_PLLU_ENABLE_DLY_COUNT_SHIFT);
-       clrsetbits_le32(&val, UTMIP_XTAL_FREQ_COUNT_MASK,
-               timing[PARAM_XTAL_FREQ_COUNT] <<
-                       UTMIP_XTAL_FREQ_COUNT_SHIFT);
-       writel(val, &usbctlr->utmip_pll_cfg1);
-
-       /* Setting the tracking length time */
-       clrsetbits_le32(&usbctlr->utmip_bias_cfg1,
-               UTMIP_BIAS_PDTRK_COUNT_MASK,
-               timing[PARAM_BIAS_TIME] << UTMIP_BIAS_PDTRK_COUNT_SHIFT);
-
-       /* Program debounce time for VBUS to become valid */
-       clrsetbits_le32(&usbctlr->utmip_debounce_cfg0,
-               UTMIP_DEBOUNCE_CFG0_MASK,
-               timing[PARAM_DEBOUNCE_A_TIME] << UTMIP_DEBOUNCE_CFG0_SHIFT);
-
-       setbits_le32(&usbctlr->utmip_tx_cfg0, UTMIP_FS_PREAMBLE_J);
-
-       /* Disable battery charge enabling bit */
-       setbits_le32(&usbctlr->utmip_bat_chrg_cfg0, UTMIP_PD_CHRG);
-
-       clrbits_le32(&usbctlr->utmip_xcvr_cfg0, UTMIP_XCVR_LSBIAS_SE);
-       setbits_le32(&usbctlr->utmip_spare_cfg0, FUSE_SETUP_SEL);
-
-       /*
-        * Configure the UTMIP_IDLE_WAIT and UTMIP_ELASTIC_LIMIT
-        * Setting these fields, together with default values of the
-        * other fields, results in programming the registers below as
-        * follows:
-        *         UTMIP_HSRX_CFG0 = 0x9168c000
-        *         UTMIP_HSRX_CFG1 = 0x13
-        */
-
-       /* Set PLL enable delay count and Crystal frequency count */
-       val = readl(&usbctlr->utmip_hsrx_cfg0);
-       clrsetbits_le32(&val, UTMIP_IDLE_WAIT_MASK,
-               utmip_idle_wait_delay << UTMIP_IDLE_WAIT_SHIFT);
-       clrsetbits_le32(&val, UTMIP_ELASTIC_LIMIT_MASK,
-               utmip_elastic_limit << UTMIP_ELASTIC_LIMIT_SHIFT);
-       writel(val, &usbctlr->utmip_hsrx_cfg0);
-
-       /* Configure the UTMIP_HS_SYNC_START_DLY */
-       clrsetbits_le32(&usbctlr->utmip_hsrx_cfg1,
-               UTMIP_HS_SYNC_START_DLY_MASK,
-               utmip_hs_sync_start_delay << UTMIP_HS_SYNC_START_DLY_SHIFT);
-
-       /* Preceed the crystal clock disable by >100ns delay. */
-       udelay(1);
-
-       /* Resuscitate crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN */
-       setbits_le32(&usbctlr->utmip_misc_cfg1, UTMIP_PHY_XTAL_CLOCKEN);
-
-       /* Finished the per-controller init. */
-
-       /* De-assert UTMIP_RESET to bring out of reset. */
-       clrbits_le32(&usbctlr->susp_ctrl, UTMIP_RESET);
-
-       /* Wait for the phy clock to become valid in 100 ms */
-       for (loop_count = 100000; loop_count != 0; loop_count--) {
-               if (readl(&usbctlr->susp_ctrl) & USB_PHY_CLK_VALID)
-                       break;
-               udelay(1);
-       }
-       if (!loop_count)
-               return -1;
-
-       return 0;
-}
-
-static void power_up_port(struct usb_ctlr *usbctlr)
-{
-       /* Deassert power down state */
-       clrbits_le32(&usbctlr->utmip_xcvr_cfg0, UTMIP_FORCE_PD_POWERDOWN |
-               UTMIP_FORCE_PD2_POWERDOWN | UTMIP_FORCE_PDZI_POWERDOWN);
-       clrbits_le32(&usbctlr->utmip_xcvr_cfg1, UTMIP_FORCE_PDDISC_POWERDOWN |
-               UTMIP_FORCE_PDCHRP_POWERDOWN | UTMIP_FORCE_PDDR_POWERDOWN);
-}
-
-static void config_clock(const u32 timing[])
-{
-       clock_start_pll(CLOCK_ID_USB,
-               timing[PARAM_DIVM], timing[PARAM_DIVN], timing[PARAM_DIVP],
-               timing[PARAM_CPCON], timing[PARAM_LFCON]);
-}
-
-/**
- * Add a new USB port to the list of available ports.
- *
- * @param config       USB port configuration
- * @return 0 if ok, -1 if error (too many ports)
- */
-static int add_port(struct fdt_usb *config, const u32 timing[])
-{
-       struct usb_ctlr *usbctlr = config->reg;
-
-       if (port_count == USB_PORTS_MAX) {
-               debug("tegrausb: Cannot register more than %d ports\n",
-                     USB_PORTS_MAX);
-               return -1;
-       }
-       if (init_usb_controller(config, usbctlr, timing)) {
-               debug("tegrausb: Cannot init port\n");
-               return -1;
-       }
-       if (config->utmi) {
-               /* Disable ICUSB FS/LS transceiver */
-               clrbits_le32(&usbctlr->icusb_ctrl, IC_ENB1);
-
-               /* Select UTMI parallel interface */
-               clrsetbits_le32(&usbctlr->port_sc1, PTS_MASK,
-                               PTS_UTMI << PTS_SHIFT);
-               clrbits_le32(&usbctlr->port_sc1, STS);
-               power_up_port(usbctlr);
-       }
-       port[port_count++] = *config;
-
-       return 0;
-}
-
-int tegrausb_start_port(unsigned portnum, u32 *hccr, u32 *hcor)
-{
-       struct usb_ctlr *usbctlr;
-
-       if (portnum >= port_count)
-               return -1;
-       tegrausb_stop_port();
-       set_host_mode(&port[portnum]);
-
-       usbctlr = port[portnum].reg;
-       *hccr = (u32)&usbctlr->cap_length;
-       *hcor = (u32)&usbctlr->usb_cmd;
-       port_current = portnum;
-       return 0;
-}
-
-int tegrausb_stop_port(void)
-{
-       struct usb_ctlr *usbctlr;
-
-       if (port_current == -1)
-               return -1;
-
-       usbctlr = port[port_current].reg;
-
-       /* Stop controller */
-       writel(0, &usbctlr->usb_cmd);
-       udelay(1000);
-
-       /* Initiate controller reset */
-       writel(2, &usbctlr->usb_cmd);
-       udelay(1000);
-       port_current = -1;
-       return 0;
-}
-
-int fdt_decode_usb(const void *blob, int node, unsigned osc_frequency_mhz,
-                  struct fdt_usb *config)
-{
-       const char *phy, *mode;
-
-       config->reg = (struct usb_ctlr *)fdtdec_get_addr(blob, node, "reg");
-       mode = fdt_getprop(blob, node, "dr_mode", NULL);
-       if (mode) {
-               if (0 == strcmp(mode, "host"))
-                       config->dr_mode = DR_MODE_HOST;
-               else if (0 == strcmp(mode, "peripheral"))
-                       config->dr_mode = DR_MODE_DEVICE;
-               else if (0 == strcmp(mode, "otg"))
-                       config->dr_mode = DR_MODE_OTG;
-               else {
-                       debug("%s: Cannot decode dr_mode '%s'\n", __func__,
-                             mode);
-                       return -FDT_ERR_NOTFOUND;
-               }
-       } else {
-               config->dr_mode = DR_MODE_HOST;
-       }
-
-       phy = fdt_getprop(blob, node, "phy_type", NULL);
-       config->utmi = phy && 0 == strcmp("utmi", phy);
-       config->enabled = fdtdec_get_is_enabled(blob, node);
-       config->has_legacy_mode = fdtdec_get_bool(blob, node,
-                                                 "nvidia,has-legacy-mode");
-       config->periph_id = clock_decode_periph_id(blob, node);
-       if (config->periph_id == PERIPH_ID_NONE) {
-               debug("%s: Missing/invalid peripheral ID\n", __func__);
-               return -FDT_ERR_NOTFOUND;
-       }
-       fdtdec_decode_gpio(blob, node, "nvidia,vbus-gpio", &config->vbus_gpio);
-       debug("enabled=%d, legacy_mode=%d, utmi=%d, periph_id=%d, vbus=%d, "
-             "dr_mode=%d\n", config->enabled, config->has_legacy_mode,
-             config->utmi, config->periph_id, config->vbus_gpio.gpio,
-             config->dr_mode);
-
-       return 0;
-}
-
-int board_usb_init(const void *blob)
-{
-       struct fdt_usb config;
-       unsigned osc_freq = clock_get_rate(CLOCK_ID_OSC);
-       enum clock_osc_freq freq;
-       int node_list[USB_PORTS_MAX];
-       int node, count, i;
-
-       /* Set up the USB clocks correctly based on our oscillator frequency */
-       freq = clock_get_osc_freq();
-       config_clock(usb_pll[freq]);
-
-       /* count may return <0 on error */
-       count = fdtdec_find_aliases_for_id(blob, "usb",
-                       COMPAT_NVIDIA_TEGRA20_USB, node_list, USB_PORTS_MAX);
-       for (i = 0; i < count; i++) {
-               debug("USB %d: ", i);
-               node = node_list[i];
-               if (!node)
-                       continue;
-               if (fdt_decode_usb(blob, node, osc_freq, &config)) {
-                       debug("Cannot decode USB node %s\n",
-                             fdt_get_name(blob, node, NULL));
-                       return -1;
-               }
-
-               if (add_port(&config, usb_pll[freq]))
-                       return -1;
-               set_host_mode(&config);
-       }
-       port_current = -1;
-
-       return 0;
-}
diff --git a/arch/arm/cpu/armv7/tegra2/warmboot.c b/arch/arm/cpu/armv7/tegra2/warmboot.c
deleted file mode 100644 (file)
index 25d8968..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * (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/errno.h>
-#include <asm/arch/ap20.h>
-#include <asm/arch/clk_rst.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/pmc.h>
-#include <asm/arch/pinmux.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/fuse.h>
-#include <asm/arch/emc.h>
-#include <asm/arch/gp_padctrl.h>
-#include <asm/arch/warmboot.h>
-#include <asm/arch/sdram_param.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#ifndef CONFIG_TEGRA_CLOCK_SCALING
-#error "You must enable CONFIG_TEGRA_CLOCK_SCALING to use CONFIG_TEGRA2_LP0"
-#endif
-
-/*
- * This is the place in SRAM where the SDRAM parameters are stored. There
- * are 4 blocks, one for each RAM code
- */
-#define SDRAM_PARAMS_BASE      (AP20_BASE_PA_SRAM + 0x188)
-
-/* TODO: If we later add support for the Misc GP controller, refactor this */
-union xm2cfga_reg {
-       struct {
-               u32 reserved0:2;
-               u32 hsm_en:1;
-               u32 reserved1:2;
-               u32 preemp_en:1;
-               u32 vref_en:1;
-               u32 reserved2:5;
-               u32 cal_drvdn:5;
-               u32 reserved3:3;
-               u32 cal_drvup:5;
-               u32 reserved4:3;
-               u32 cal_drvdn_slwr:2;
-               u32 cal_drvup_slwf:2;
-       };
-       u32 word;
-};
-
-union xm2cfgd_reg {
-       struct {
-               u32 reserved0:2;
-               u32 hsm_en:1;
-               u32 schmt_en:1;
-               u32 lpmd:2;
-               u32 vref_en:1;
-               u32 reserved1:5;
-               u32 cal_drvdn:5;
-               u32 reserved2:3;
-               u32 cal_drvup:5;
-               u32 reserved3:3;
-               u32 cal_drvdn_slwr:2;
-               u32 cal_drvup_slwf:2;
-       };
-       u32 word;
-};
-
-/*
- * TODO: This register is not documented in the TRM yet. We could move this
- * into the EMC and give it a proper interface, but not while it is
- * undocumented.
- */
-union fbio_spare_reg {
-       struct {
-               u32 reserved:24;
-               u32 cfg_wb0:8;
-       };
-       u32 word;
-};
-
-/* We pack the resume information into these unions for later */
-union scratch2_reg {
-       struct {
-               u32 pllm_base_divm:5;
-               u32 pllm_base_divn:10;
-               u32 pllm_base_divp:3;
-               u32 pllm_misc_lfcon:4;
-               u32 pllm_misc_cpcon:4;
-               u32 gp_xm2cfga_padctrl_preemp:1;
-               u32 gp_xm2cfgd_padctrl_schmt:1;
-               u32 osc_ctrl_xobp:1;
-               u32 memory_type:3;
-       };
-       u32 word;
-};
-
-union scratch4_reg {
-       struct {
-               u32 emc_clock_divider:8;
-               u32 pllm_stable_time:8;
-               u32 pllx_stable_time:8;
-               u32 emc_fbio_spare_cfg_wb0:8;
-       };
-       u32 word;
-};
-
-union scratch24_reg {
-       struct {
-               u32 emc_auto_cal_wait:8;
-               u32 emc_pin_program_wait:8;
-               u32 warmboot_wait:8;
-               u32 reserved:8;
-       };
-       u32 word;
-};
-
-int warmboot_save_sdram_params(void)
-{
-       u32 ram_code;
-       struct sdram_params sdram;
-       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       struct apb_misc_gp_ctlr *gp =
-                       (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
-       struct emc_ctlr *emc = emc_get_controller(gd->fdt_blob);
-       union scratch2_reg scratch2;
-       union scratch4_reg scratch4;
-       union scratch24_reg scratch24;
-       union xm2cfga_reg xm2cfga;
-       union xm2cfgd_reg xm2cfgd;
-       union fbio_spare_reg fbio_spare;
-
-       /* get ram code that is used as index to array sdram_params in BCT */
-       ram_code = (readl(&pmt->pmt_strap_opt_a) >>
-                       STRAP_OPT_A_RAM_CODE_SHIFT) & 3;
-       memcpy(&sdram,
-              (char *)((struct sdram_params *)SDRAM_PARAMS_BASE + ram_code),
-              sizeof(sdram));
-
-       xm2cfga.word = readl(&gp->xm2cfga);
-       xm2cfgd.word = readl(&gp->xm2cfgd);
-
-       scratch2.word = 0;
-       scratch2.osc_ctrl_xobp = clock_get_osc_bypass();
-
-       /* Get the memory PLL settings */
-       {
-               u32 divm, divn, divp, cpcon, lfcon;
-
-               if (clock_ll_read_pll(CLOCK_ID_MEMORY, &divm, &divn, &divp,
-                                       &cpcon, &lfcon))
-                       return -1;
-               scratch2.pllm_base_divm = divm;
-               scratch2.pllm_base_divn = divn;
-               scratch2.pllm_base_divp = divp;
-               scratch2.pllm_misc_cpcon = cpcon;
-               scratch2.pllm_misc_lfcon = lfcon;
-       }
-
-       scratch2.gp_xm2cfga_padctrl_preemp = xm2cfga.preemp_en;
-       scratch2.gp_xm2cfgd_padctrl_schmt = xm2cfgd.schmt_en;
-       scratch2.memory_type = sdram.memory_type;
-       writel(scratch2.word, &pmc->pmc_scratch2);
-
-       /* collect data from various sources for pmc_scratch4 */
-       fbio_spare.word = readl(&emc->fbio_spare);
-       scratch4.word = 0;
-       scratch4.emc_fbio_spare_cfg_wb0 = fbio_spare.cfg_wb0;
-       scratch4.emc_clock_divider = sdram.emc_clock_divider;
-       scratch4.pllm_stable_time = -1;
-       scratch4.pllx_stable_time = -1;
-       writel(scratch4.word, &pmc->pmc_scratch4);
-
-       /* collect various data from sdram for pmc_scratch24 */
-       scratch24.word = 0;
-       scratch24.emc_pin_program_wait = sdram.emc_pin_program_wait;
-       scratch24.emc_auto_cal_wait = sdram.emc_auto_cal_wait;
-       scratch24.warmboot_wait = sdram.warm_boot_wait;
-       writel(scratch24.word, &pmc->pmc_scratch24);
-
-       return 0;
-}
-
-static u32 get_major_version(void)
-{
-       u32 major_id;
-       struct apb_misc_gp_ctlr *gp =
-               (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
-
-       major_id = (readl(&gp->hidrev) & HIDREV_MAJORPREV_MASK) >>
-                       HIDREV_MAJORPREV_SHIFT;
-       return major_id;
-}
-
-static int is_production_mode_fuse_set(struct fuse_regs *fuse)
-{
-       return readl(&fuse->production_mode);
-}
-
-static int is_odm_production_mode_fuse_set(struct fuse_regs *fuse)
-{
-       return readl(&fuse->security_mode);
-}
-
-static int is_failure_analysis_mode(struct fuse_regs *fuse)
-{
-       return readl(&fuse->fa);
-}
-
-static int ap20_is_odm_production_mode(void)
-{
-       struct fuse_regs *fuse = (struct fuse_regs *)TEGRA2_FUSE_BASE;
-
-       if (!is_failure_analysis_mode(fuse) &&
-           is_odm_production_mode_fuse_set(fuse))
-               return 1;
-       else
-               return 0;
-}
-
-static int ap20_is_production_mode(void)
-{
-       struct fuse_regs *fuse = (struct fuse_regs *)TEGRA2_FUSE_BASE;
-
-       if (get_major_version() == 0)
-               return 1;
-
-       if (!is_failure_analysis_mode(fuse) &&
-           is_production_mode_fuse_set(fuse) &&
-           !is_odm_production_mode_fuse_set(fuse))
-               return 1;
-       else
-               return 0;
-}
-
-static enum fuse_operating_mode fuse_get_operation_mode(void)
-{
-       u32 chip_id;
-       struct apb_misc_gp_ctlr *gp =
-               (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
-
-       chip_id = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >>
-                       HIDREV_CHIPID_SHIFT;
-       if (chip_id == CHIPID_TEGRA2) {
-               if (ap20_is_odm_production_mode()) {
-                       printf("!! odm_production_mode is not supported !!\n");
-                       return MODE_UNDEFINED;
-               } else
-                       if (ap20_is_production_mode())
-                               return MODE_PRODUCTION;
-                       else
-                               return MODE_UNDEFINED;
-       }
-       return MODE_UNDEFINED;
-}
-
-static void determine_crypto_options(int *is_encrypted, int *is_signed,
-                                    int *use_zero_key)
-{
-       switch (fuse_get_operation_mode()) {
-       case MODE_PRODUCTION:
-               *is_encrypted = 0;
-               *is_signed = 1;
-               *use_zero_key = 1;
-               break;
-       case MODE_UNDEFINED:
-       default:
-               *is_encrypted = 0;
-               *is_signed = 0;
-               *use_zero_key  = 0;
-               break;
-       }
-}
-
-static int sign_wb_code(u32 start, u32 length, int use_zero_key)
-{
-       int err;
-       u8 *source;             /* Pointer to source */
-       u8 *hash;
-
-       /* Calculate AES block parameters. */
-       source = (u8 *)(start + offsetof(struct wb_header, random_aes_block));
-       length -= offsetof(struct wb_header, random_aes_block);
-       hash = (u8 *)(start + offsetof(struct wb_header, hash));
-       err = sign_data_block(source, length, hash);
-
-       return err;
-}
-
-int warmboot_prepare_code(u32 seg_address, u32 seg_length)
-{
-       int err = 0;
-       u32 length;                     /* length of the signed/encrypt code */
-       struct wb_header *dst_header;   /* Pointer to dest WB header */
-       int is_encrypted;               /* Segment is encrypted */
-       int is_signed;                  /* Segment is signed */
-       int use_zero_key;               /* Use key of all zeros */
-
-       /* Determine crypto options. */
-       determine_crypto_options(&is_encrypted, &is_signed, &use_zero_key);
-
-       /* Get the actual code limits. */
-       length = roundup(((u32)wb_end - (u32)wb_start), 16);
-
-       /*
-        * The region specified by seg_address must be in SDRAM and must be
-        * nonzero in length.
-        */
-       if (seg_length == 0 || seg_address < NV_PA_SDRAM_BASE ||
-               seg_address + seg_length >= NV_PA_SDRAM_BASE + gd->ram_size) {
-               err = -EFAULT;
-               goto fail;
-       }
-
-       /* Things must be 16-byte aligned. */
-       if ((seg_length & 0xF) || (seg_address & 0xF)) {
-               err = -EINVAL;
-               goto fail;
-       }
-
-       /* Will the code fit? (destination includes wb_header + wb code) */
-       if (seg_length < (length + sizeof(struct wb_header))) {
-               err = -EINVAL;
-               goto fail;
-       }
-
-       dst_header = (struct wb_header *)seg_address;
-       memset((char *)dst_header, 0, sizeof(struct wb_header));
-
-       /* Populate the random_aes_block as requested. */
-       {
-               u32 *aes_block = (u32 *)&(dst_header->random_aes_block);
-               u32 *end = (u32 *)(((u32)aes_block) +
-                                  sizeof(dst_header->random_aes_block));
-
-               do {
-                       *aes_block++ = 0;
-               } while (aes_block < end);
-       }
-
-       /* Populate the header. */
-       dst_header->length_insecure = length + sizeof(struct wb_header);
-       dst_header->length_secure = length + sizeof(struct wb_header);
-       dst_header->destination = AP20_WB_RUN_ADDRESS;
-       dst_header->entry_point = AP20_WB_RUN_ADDRESS;
-       dst_header->code_length = length;
-
-       if (is_encrypted) {
-               printf("!!!! Encryption is not supported !!!!\n");
-               dst_header->length_insecure = 0;
-               err = -EACCES;
-               goto fail;
-       } else
-               /* copy the wb code directly following dst_header. */
-               memcpy((char *)(dst_header+1), (char *)wb_start, length);
-
-       if (is_signed)
-               err = sign_wb_code(seg_address, dst_header->length_insecure,
-                                  use_zero_key);
-
-fail:
-       if (err)
-               printf("Warning: warmboot code copy failed (error=%d)\n", err);
-
-       return err;
-}
diff --git a/arch/arm/cpu/armv7/tegra2/warmboot_avp.c b/arch/arm/cpu/armv7/tegra2/warmboot_avp.c
deleted file mode 100644 (file)
index 70bcd8e..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * (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/ap20.h>
-#include <asm/arch/clk_rst.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/flow.h>
-#include <asm/arch/pinmux.h>
-#include <asm/arch/pmc.h>
-#include <asm/arch/tegra2.h>
-#include <asm/arch/warmboot.h>
-#include "warmboot_avp.h"
-
-#define DEBUG_RESET_CORESIGHT
-
-void wb_start(void)
-{
-       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
-       struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE;
-       struct clk_rst_ctlr *clkrst =
-                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
-       union osc_ctrl_reg osc_ctrl;
-       union pllx_base_reg pllx_base;
-       union pllx_misc_reg pllx_misc;
-       union scratch3_reg scratch3;
-       u32 reg;
-
-       /* enable JTAG & TBE */
-       writel(CONFIG_CTL_TBE | CONFIG_CTL_JTAG, &pmt->pmt_cfg_ctl);
-
-       /* Are we running where we're supposed to be? */
-       asm volatile (
-               "adr    %0, wb_start;"  /* reg: wb_start address */
-               : "=r"(reg)             /* output */
-                                       /* no input, no clobber list */
-       );
-
-       if (reg != AP20_WB_RUN_ADDRESS)
-               goto do_reset;
-
-       /* Are we running with AVP? */
-       if (readl(NV_PA_PG_UP_BASE + PG_UP_TAG_0) != PG_UP_TAG_AVP)
-               goto do_reset;
-
-#ifdef DEBUG_RESET_CORESIGHT
-       /* Assert CoreSight reset */
-       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_U]);
-       reg |= SWR_CSITE_RST;
-       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_U]);
-#endif
-
-       /* TODO: Set the drive strength - maybe make this a board parameter? */
-       osc_ctrl.word = readl(&clkrst->crc_osc_ctrl);
-       osc_ctrl.xofs = 4;
-       osc_ctrl.xoe = 1;
-       writel(osc_ctrl.word, &clkrst->crc_osc_ctrl);
-
-       /* Power up the CPU complex if necessary */
-       if (!(readl(&pmc->pmc_pwrgate_status) & PWRGATE_STATUS_CPU)) {
-               reg = PWRGATE_TOGGLE_PARTID_CPU | PWRGATE_TOGGLE_START;
-               writel(reg, &pmc->pmc_pwrgate_toggle);
-               while (!(readl(&pmc->pmc_pwrgate_status) & PWRGATE_STATUS_CPU))
-                       ;
-       }
-
-       /* Remove the I/O clamps from the CPU power partition. */
-       reg = readl(&pmc->pmc_remove_clamping);
-       reg |= CPU_CLMP;
-       writel(reg, &pmc->pmc_remove_clamping);
-
-       reg = EVENT_ZERO_VAL_20 | EVENT_MSEC | EVENT_MODE_STOP;
-       writel(reg, &flow->halt_cop_events);
-
-       /* Assert CPU complex reset */
-       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_L]);
-       reg |= CPU_RST;
-       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
-
-       /* Hold both CPUs in reset */
-       reg = CPU_CMPLX_CPURESET0 | CPU_CMPLX_CPURESET1 | CPU_CMPLX_DERESET0 |
-             CPU_CMPLX_DERESET1 | CPU_CMPLX_DBGRESET0 | CPU_CMPLX_DBGRESET1;
-       writel(reg, &clkrst->crc_cpu_cmplx_set);
-
-       /* Halt CPU1 at the flow controller for uni-processor configurations */
-       writel(EVENT_MODE_STOP, &flow->halt_cpu1_events);
-
-       /*
-        * Set the CPU reset vector. SCRATCH41 contains the physical
-        * address of the CPU-side restoration code.
-        */
-       reg = readl(&pmc->pmc_scratch41);
-       writel(reg, EXCEP_VECTOR_CPU_RESET_VECTOR);
-
-       /* Select CPU complex clock source */
-       writel(CCLK_PLLP_BURST_POLICY, &clkrst->crc_cclk_brst_pol);
-
-       /* Start the CPU0 clock and stop the CPU1 clock */
-       reg = CPU_CMPLX_CPU_BRIDGE_CLKDIV_4 | CPU_CMPLX_CPU0_CLK_STP_RUN |
-             CPU_CMPLX_CPU1_CLK_STP_STOP;
-       writel(reg, &clkrst->crc_clk_cpu_cmplx);
-
-       /* Enable the CPU complex clock */
-       reg = readl(&clkrst->crc_clk_out_enb[TEGRA_DEV_L]);
-       reg |= CLK_ENB_CPU;
-       writel(reg, &clkrst->crc_clk_out_enb[TEGRA_DEV_L]);
-
-       /* Make sure the resets were held for at least 2 microseconds */
-       reg = readl(TIMER_USEC_CNTR);
-       while (readl(TIMER_USEC_CNTR) <= (reg + 2))
-               ;
-
-#ifdef DEBUG_RESET_CORESIGHT
-       /*
-        * De-assert CoreSight reset.
-        * NOTE: We're leaving the CoreSight clock on the oscillator for
-        *      now. It will be restored to its original clock source
-        *      when the CPU-side restoration code runs.
-        */
-       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_U]);
-       reg &= ~SWR_CSITE_RST;
-       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_U]);
-#endif
-
-       /* Unlock the CPU CoreSight interfaces */
-       reg = 0xC5ACCE55;
-       writel(reg, CSITE_CPU_DBG0_LAR);
-       writel(reg, CSITE_CPU_DBG1_LAR);
-
-       /*
-        * Sample the microsecond timestamp again. This is the time we must
-        * use when returning from LP0 for PLL stabilization delays.
-        */
-       reg = readl(TIMER_USEC_CNTR);
-       writel(reg, &pmc->pmc_scratch1);
-
-       pllx_base.word = 0;
-       pllx_misc.word = 0;
-       scratch3.word = readl(&pmc->pmc_scratch3);
-
-       /* Get the OSC. For 19.2 MHz, use 19 to make the calculations easier */
-       reg = (readl(TIMER_USEC_CFG) & USEC_CFG_DIVISOR_MASK) + 1;
-
-       /*
-        * According to the TRM, for 19.2MHz OSC, the USEC_DIVISOR is 0x5f, and
-        * USEC_DIVIDEND is 0x04. So, if USEC_DIVISOR > 26, OSC is 19.2 MHz.
-        *
-        * reg is used to calculate the pllx freq, which is used to determine if
-        * to set dccon or not.
-        */
-       if (reg > 26)
-               reg = 19;
-
-       /* PLLX_BASE.PLLX_DIVM */
-       if (scratch3.pllx_base_divm == reg)
-               reg = 0;
-       else
-               reg = 1;
-
-       /* PLLX_BASE.PLLX_DIVN */
-       pllx_base.divn = scratch3.pllx_base_divn;
-       reg = scratch3.pllx_base_divn << reg;
-
-       /* PLLX_BASE.PLLX_DIVP */
-       pllx_base.divp = scratch3.pllx_base_divp;
-       reg = reg >> scratch3.pllx_base_divp;
-
-       pllx_base.bypass = 1;
-
-       /* PLLX_MISC_DCCON must be set for pllx frequency > 600 MHz. */
-       if (reg > 600)
-               pllx_misc.dccon = 1;
-
-       /* PLLX_MISC_LFCON */
-       pllx_misc.lfcon = scratch3.pllx_misc_lfcon;
-
-       /* PLLX_MISC_CPCON */
-       pllx_misc.cpcon = scratch3.pllx_misc_cpcon;
-
-       writel(pllx_misc.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_misc);
-       writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
-
-       pllx_base.enable = 1;
-       writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
-       pllx_base.bypass = 0;
-       writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
-
-       writel(0, flow->halt_cpu_events);
-
-       reg = CPU_CMPLX_CPURESET0 | CPU_CMPLX_DBGRESET0 | CPU_CMPLX_DERESET0;
-       writel(reg, &clkrst->crc_cpu_cmplx_clr);
-
-       reg = PLLM_OUT1_RSTN_RESET_DISABLE | PLLM_OUT1_CLKEN_ENABLE |
-             PLLM_OUT1_RATIO_VAL_8;
-       writel(reg, &clkrst->crc_pll[CLOCK_ID_MEMORY].pll_out);
-
-       reg = SCLK_SWAKE_FIQ_SRC_PLLM_OUT1 | SCLK_SWAKE_IRQ_SRC_PLLM_OUT1 |
-             SCLK_SWAKE_RUN_SRC_PLLM_OUT1 | SCLK_SWAKE_IDLE_SRC_PLLM_OUT1 |
-             SCLK_SYS_STATE_IDLE;
-       writel(reg, &clkrst->crc_sclk_brst_pol);
-
-       /* avp_resume: no return after the write */
-       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_L]);
-       reg &= ~CPU_RST;
-       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
-
-       /* avp_halt: */
-avp_halt:
-       reg = EVENT_MODE_STOP | EVENT_JTAG;
-       writel(reg, flow->halt_cop_events);
-       goto avp_halt;
-
-do_reset:
-       /*
-        * Execution comes here if something goes wrong. The chip is reset and
-        * a cold boot is performed.
-        */
-       writel(SWR_TRIG_SYS_RST, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
-       goto do_reset;
-}
-
-/*
- * wb_end() is a dummy function, and must be directly following wb_start(),
- * and is used to calculate the size of wb_start().
- */
-void wb_end(void)
-{
-}
diff --git a/arch/arm/cpu/armv7/tegra2/warmboot_avp.h b/arch/arm/cpu/armv7/tegra2/warmboot_avp.h
deleted file mode 100644 (file)
index 4b71c07..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * (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 _WARMBOOT_AVP_H_
-#define _WARMBOOT_AVP_H_
-
-#define TEGRA_DEV_L                    0
-#define TEGRA_DEV_H                    1
-#define TEGRA_DEV_U                    2
-
-#define SIMPLE_PLLX                    (CLOCK_ID_XCPU - CLOCK_ID_FIRST_SIMPLE)
-#define SIMPLE_PLLE                    (CLOCK_ID_EPCI - CLOCK_ID_FIRST_SIMPLE)
-
-#define TIMER_USEC_CNTR                        (NV_PA_TMRUS_BASE + 0)
-#define TIMER_USEC_CFG                 (NV_PA_TMRUS_BASE + 4)
-
-#define USEC_CFG_DIVISOR_MASK          0xffff
-
-#define CONFIG_CTL_TBE                 (1 << 7)
-#define CONFIG_CTL_JTAG                        (1 << 6)
-
-#define CPU_RST                                (1 << 0)
-#define CLK_ENB_CPU                    (1 << 0)
-#define SWR_TRIG_SYS_RST               (1 << 2)
-#define SWR_CSITE_RST                  (1 << 9)
-
-#define PWRGATE_STATUS_CPU             (1 << 0)
-#define PWRGATE_TOGGLE_PARTID_CPU      (0 << 0)
-#define PWRGATE_TOGGLE_START           (1 << 8)
-
-#define CPU_CMPLX_CPU_BRIDGE_CLKDIV_4  (3 << 0)
-#define CPU_CMPLX_CPU0_CLK_STP_STOP    (1 << 8)
-#define CPU_CMPLX_CPU0_CLK_STP_RUN     (0 << 8)
-#define CPU_CMPLX_CPU1_CLK_STP_STOP    (1 << 9)
-#define CPU_CMPLX_CPU1_CLK_STP_RUN     (0 << 9)
-
-#define CPU_CMPLX_CPURESET0            (1 << 0)
-#define CPU_CMPLX_CPURESET1            (1 << 1)
-#define CPU_CMPLX_DERESET0             (1 << 4)
-#define CPU_CMPLX_DERESET1             (1 << 5)
-#define CPU_CMPLX_DBGRESET0            (1 << 12)
-#define CPU_CMPLX_DBGRESET1            (1 << 13)
-
-#define PLLM_OUT1_RSTN_RESET_DISABLE   (1 << 0)
-#define PLLM_OUT1_CLKEN_ENABLE         (1 << 1)
-#define PLLM_OUT1_RATIO_VAL_8          (8 << 8)
-
-#define SCLK_SYS_STATE_IDLE            (1 << 28)
-#define SCLK_SWAKE_FIQ_SRC_PLLM_OUT1   (7 << 12)
-#define SCLK_SWAKE_IRQ_SRC_PLLM_OUT1   (7 << 8)
-#define SCLK_SWAKE_RUN_SRC_PLLM_OUT1   (7 << 4)
-#define SCLK_SWAKE_IDLE_SRC_PLLM_OUT1  (7 << 0)
-
-#define EVENT_ZERO_VAL_20              (20 << 0)
-#define EVENT_MSEC                     (1 << 24)
-#define EVENT_JTAG                     (1 << 28)
-#define EVENT_MODE_STOP                        (2 << 29)
-
-#define CCLK_PLLP_BURST_POLICY         0x20004444
-
-#endif
diff --git a/arch/arm/cpu/armv7/tegra20/Makefile b/arch/arm/cpu/armv7/tegra20/Makefile
new file mode 100644 (file)
index 0000000..da62646
--- /dev/null
@@ -0,0 +1,60 @@
+#
+# (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
+#
+
+# The AVP is ARMv4T architecture so we must use special compiler
+# flags for any startup files it might use.
+CFLAGS_arch/arm/cpu/armv7/tegra20/ap20.o += -march=armv4t
+CFLAGS_arch/arm/cpu/armv7/tegra20/clock.o += -march=armv4t
+CFLAGS_arch/arm/cpu/armv7/tegra20/warmboot_avp.o += -march=armv4t
+
+include $(TOPDIR)/config.mk
+
+LIB    =  $(obj)lib$(SOC).o
+
+SOBJS  := lowlevel_init.o
+COBJS-y        := ap20.o board.o clock.o funcmux.o pinmux.o sys_info.o timer.o
+COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o
+COBJS-$(CONFIG_TEGRA_PMU) += pmu.o
+COBJS-$(CONFIG_USB_EHCI_TEGRA) += usb.o
+COBJS-$(CONFIG_TEGRA20_LP0) += crypto.o warmboot.o warmboot_avp.o
+COBJS-$(CONFIG_CMD_ENTERRCM) += cmd_enterrcm.o
+
+COBJS  := $(COBJS-y)
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
+
+all:    $(obj).depend $(LIB)
+
+$(LIB):        $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/armv7/tegra20/ap20.c b/arch/arm/cpu/armv7/tegra20/ap20.c
new file mode 100644 (file)
index 0000000..8b6afbc
--- /dev/null
@@ -0,0 +1,388 @@
+/*
+* (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 <asm/io.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/fuse.h>
+#include <asm/arch/gp_padctrl.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/scu.h>
+#include <asm/arch/warmboot.h>
+#include <common.h>
+
+int tegra_get_chip_type(void)
+{
+       struct apb_misc_gp_ctlr *gp;
+       struct fuse_regs *fuse = (struct fuse_regs *)TEGRA20_FUSE_BASE;
+       uint tegra_sku_id, rev;
+
+       /*
+        * This is undocumented, Chip ID is bits 15:8 of the register
+        * APB_MISC + 0x804, and has value 0x20 for Tegra20, 0x30 for
+        * Tegra30
+        */
+       gp = (struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE;
+       rev = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >> HIDREV_CHIPID_SHIFT;
+
+       tegra_sku_id = readl(&fuse->sku_info) & 0xff;
+
+       switch (rev) {
+       case CHIPID_TEGRA20:
+               switch (tegra_sku_id) {
+               case SKU_ID_T20:
+                       return TEGRA_SOC_T20;
+               case SKU_ID_T25SE:
+               case SKU_ID_AP25:
+               case SKU_ID_T25:
+               case SKU_ID_AP25E:
+               case SKU_ID_T25E:
+                       return TEGRA_SOC_T25;
+               }
+               break;
+       }
+       /* unknown sku id */
+       return TEGRA_SOC_UNKNOWN;
+}
+
+/* Returns 1 if the current CPU executing is a Cortex-A9, else 0 */
+static int ap20_cpu_is_cortexa9(void)
+{
+       u32 id = readb(NV_PA_PG_UP_BASE + PG_UP_TAG_0);
+       return id == (PG_UP_TAG_0_PID_CPU & 0xff);
+}
+
+void init_pllx(void)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       struct clk_pll_simple *pll =
+               &clkrst->crc_pll_simple[CLOCK_ID_XCPU - CLOCK_ID_FIRST_SIMPLE];
+       u32 reg;
+
+       /* If PLLX is already enabled, just return */
+       if (readl(&pll->pll_base) & PLL_ENABLE_MASK)
+               return;
+
+       /* Set PLLX_MISC */
+       writel(1 << PLL_CPCON_SHIFT, &pll->pll_misc);
+
+       /* Use 12MHz clock here */
+       reg = PLL_BYPASS_MASK | (12 << PLL_DIVM_SHIFT);
+       reg |= 1000 << PLL_DIVN_SHIFT;
+       writel(reg, &pll->pll_base);
+
+       reg |= PLL_ENABLE_MASK;
+       writel(reg, &pll->pll_base);
+
+       reg &= ~PLL_BYPASS_MASK;
+       writel(reg, &pll->pll_base);
+}
+
+static void enable_cpu_clock(int enable)
+{
+       struct clk_rst_ctlr *clkrst = (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       u32 clk;
+
+       /*
+        * NOTE:
+        * Regardless of whether the request is to enable or disable the CPU
+        * clock, every processor in the CPU complex except the master (CPU 0)
+        * will have it's clock stopped because the AVP only talks to the
+        * master. The AVP does not know (nor does it need to know) that there
+        * are multiple processors in the CPU complex.
+        */
+
+       if (enable) {
+               /* Initialize PLLX */
+               init_pllx();
+
+               /* Wait until all clocks are stable */
+               udelay(PLL_STABILIZATION_DELAY);
+
+               writel(CCLK_BURST_POLICY, &clkrst->crc_cclk_brst_pol);
+               writel(SUPER_CCLK_DIVIDER, &clkrst->crc_super_cclk_div);
+       }
+
+       /*
+        * Read the register containing the individual CPU clock enables and
+        * always stop the clock to CPU 1.
+        */
+       clk = readl(&clkrst->crc_clk_cpu_cmplx);
+       clk |= 1 << CPU1_CLK_STP_SHIFT;
+
+       /* Stop/Unstop the CPU clock */
+       clk &= ~CPU0_CLK_STP_MASK;
+       clk |= !enable << CPU0_CLK_STP_SHIFT;
+       writel(clk, &clkrst->crc_clk_cpu_cmplx);
+
+       clock_enable(PERIPH_ID_CPU);
+}
+
+static int is_cpu_powered(void)
+{
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+
+       return (readl(&pmc->pmc_pwrgate_status) & CPU_PWRED) ? 1 : 0;
+}
+
+static void remove_cpu_io_clamps(void)
+{
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       u32 reg;
+
+       /* Remove the clamps on the CPU I/O signals */
+       reg = readl(&pmc->pmc_remove_clamping);
+       reg |= CPU_CLMP;
+       writel(reg, &pmc->pmc_remove_clamping);
+
+       /* Give I/O signals time to stabilize */
+       udelay(IO_STABILIZATION_DELAY);
+}
+
+static void powerup_cpu(void)
+{
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       u32 reg;
+       int timeout = IO_STABILIZATION_DELAY;
+
+       if (!is_cpu_powered()) {
+               /* Toggle the CPU power state (OFF -> ON) */
+               reg = readl(&pmc->pmc_pwrgate_toggle);
+               reg &= PARTID_CP;
+               reg |= START_CP;
+               writel(reg, &pmc->pmc_pwrgate_toggle);
+
+               /* Wait for the power to come up */
+               while (!is_cpu_powered()) {
+                       if (timeout-- == 0)
+                               printf("CPU failed to power up!\n");
+                       else
+                               udelay(10);
+               }
+
+               /*
+                * Remove the I/O clamps from CPU power partition.
+                * Recommended only on a Warm boot, if the CPU partition gets
+                * power gated. Shouldn't cause any harm when called after a
+                * cold boot according to HW, probably just redundant.
+                */
+               remove_cpu_io_clamps();
+       }
+}
+
+static void enable_cpu_power_rail(void)
+{
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       u32 reg;
+
+       reg = readl(&pmc->pmc_cntrl);
+       reg |= CPUPWRREQ_OE;
+       writel(reg, &pmc->pmc_cntrl);
+
+       /*
+        * The TI PMU65861C needs a 3.75ms delay between enabling
+        * the power rail and enabling the CPU clock.  This delay
+        * between SM1EN and SM1 is for switching time + the ramp
+        * up of the voltage to the CPU (VDD_CPU from PMU).
+        */
+       udelay(3750);
+}
+
+static void reset_A9_cpu(int reset)
+{
+       /*
+       * NOTE:  Regardless of whether the request is to hold the CPU in reset
+       *        or take it out of reset, every processor in the CPU complex
+       *        except the master (CPU 0) will be held in reset because the
+       *        AVP only talks to the master. The AVP does not know that there
+       *        are multiple processors in the CPU complex.
+       */
+
+       /* Hold CPU 1 in reset, and CPU 0 if asked */
+       reset_cmplx_set_enable(1, crc_rst_cpu | crc_rst_de | crc_rst_debug, 1);
+       reset_cmplx_set_enable(0, crc_rst_cpu | crc_rst_de | crc_rst_debug,
+                              reset);
+
+       /* Enable/Disable master CPU reset */
+       reset_set_enable(PERIPH_ID_CPU, reset);
+}
+
+static void clock_enable_coresight(int enable)
+{
+       u32 rst, src;
+
+       clock_set_enable(PERIPH_ID_CORESIGHT, enable);
+       reset_set_enable(PERIPH_ID_CORESIGHT, !enable);
+
+       if (enable) {
+               /*
+                * Put CoreSight on PLLP_OUT0 (216 MHz) and divide it down by
+                *  1.5, giving an effective frequency of 144MHz.
+                * Set PLLP_OUT0 [bits31:30 = 00], and use a 7.1 divisor
+                *  (bits 7:0), so 00000001b == 1.5 (n+1 + .5)
+                */
+               src = CLK_DIVIDER(NVBL_PLLP_KHZ, 144000);
+               clock_ll_set_source_divisor(PERIPH_ID_CSI, 0, src);
+
+               /* Unlock the CPU CoreSight interfaces */
+               rst = 0xC5ACCE55;
+               writel(rst, CSITE_CPU_DBG0_LAR);
+               writel(rst, CSITE_CPU_DBG1_LAR);
+       }
+}
+
+void start_cpu(u32 reset_vector)
+{
+       /* Enable VDD_CPU */
+       enable_cpu_power_rail();
+
+       /* Hold the CPUs in reset */
+       reset_A9_cpu(1);
+
+       /* Disable the CPU clock */
+       enable_cpu_clock(0);
+
+       /* Enable CoreSight */
+       clock_enable_coresight(1);
+
+       /*
+        * Set the entry point for CPU execution from reset,
+        *  if it's a non-zero value.
+        */
+       if (reset_vector)
+               writel(reset_vector, EXCEP_VECTOR_CPU_RESET_VECTOR);
+
+       /* Enable the CPU clock */
+       enable_cpu_clock(1);
+
+       /* If the CPU doesn't already have power, power it up */
+       powerup_cpu();
+
+       /* Take the CPU out of reset */
+       reset_A9_cpu(0);
+}
+
+
+void halt_avp(void)
+{
+       for (;;) {
+               writel((HALT_COP_EVENT_JTAG | HALT_COP_EVENT_IRQ_1 \
+                       | HALT_COP_EVENT_FIQ_1 | (FLOW_MODE_STOP<<29)),
+                       FLOW_CTLR_HALT_COP_EVENTS);
+       }
+}
+
+void enable_scu(void)
+{
+       struct scu_ctlr *scu = (struct scu_ctlr *)NV_PA_ARM_PERIPHBASE;
+       u32 reg;
+
+       /* If SCU already setup/enabled, return */
+       if (readl(&scu->scu_ctrl) & SCU_CTRL_ENABLE)
+               return;
+
+       /* Invalidate all ways for all processors */
+       writel(0xFFFF, &scu->scu_inv_all);
+
+       /* Enable SCU - bit 0 */
+       reg = readl(&scu->scu_ctrl);
+       reg |= SCU_CTRL_ENABLE;
+       writel(reg, &scu->scu_ctrl);
+}
+
+static u32 get_odmdata(void)
+{
+       /*
+        * ODMDATA is stored in the BCT in IRAM by the BootROM.
+        * The BCT start and size are stored in the BIT in IRAM.
+        * Read the data @ bct_start + (bct_size - 12). This works
+        * on T20 and T30 BCTs, which are locked down. If this changes
+        * in new chips (T114, etc.), we can revisit this algorithm.
+        */
+
+       u32 bct_start, odmdata;
+
+       bct_start = readl(AP20_BASE_PA_SRAM + NVBOOTINFOTABLE_BCTPTR);
+       odmdata = readl(bct_start + BCT_ODMDATA_OFFSET);
+
+       return odmdata;
+}
+
+void init_pmc_scratch(void)
+{
+       struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       u32 odmdata;
+       int i;
+
+       /* SCRATCH0 is initialized by the boot ROM and shouldn't be cleared */
+       for (i = 0; i < 23; i++)
+               writel(0, &pmc->pmc_scratch1+i);
+
+       /* ODMDATA is for kernel use to determine RAM size, LP config, etc. */
+       odmdata = get_odmdata();
+       writel(odmdata, &pmc->pmc_scratch20);
+
+#ifdef CONFIG_TEGRA20_LP0
+       /* save Sdram params to PMC 2, 4, and 24 for WB0 */
+       warmboot_save_sdram_params();
+#endif
+}
+
+void tegra20_start(void)
+{
+       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+
+       /* If we are the AVP, start up the first Cortex-A9 */
+       if (!ap20_cpu_is_cortexa9()) {
+               /* enable JTAG */
+               writel(0xC0, &pmt->pmt_cfg_ctl);
+
+               /*
+                * If we are ARM7 - give it a different stack. We are about to
+                * start up the A9 which will want to use this one.
+                */
+               asm volatile("mov       sp, %0\n"
+                       : : "r"(AVP_EARLY_BOOT_STACK_LIMIT));
+
+               start_cpu((u32)_start);
+               halt_avp();
+               /* not reached */
+       }
+
+       /* Init PMC scratch memory */
+       init_pmc_scratch();
+
+       enable_scu();
+
+       /* enable SMP mode and FW for CPU0, by writing to Auxiliary Ctl reg */
+       asm volatile(
+               "mrc    p15, 0, r0, c1, c0, 1\n"
+               "orr    r0, r0, #0x41\n"
+               "mcr    p15, 0, r0, c1, c0, 1\n");
+
+       /* FIXME: should have ap20's L2 disabled too? */
+}
diff --git a/arch/arm/cpu/armv7/tegra20/board.c b/arch/arm/cpu/armv7/tegra20/board.c
new file mode 100644 (file)
index 0000000..e595ff9
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ *  (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/ap20.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/funcmux.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/tegra20.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+enum {
+       /* UARTs which we can enable */
+       UARTA   = 1 << 0,
+       UARTB   = 1 << 1,
+       UARTD   = 1 << 3,
+       UART_COUNT = 4,
+};
+
+/*
+ * Boot ROM initializes the odmdata in APBDEV_PMC_SCRATCH20_0,
+ * so we are using this value to identify memory size.
+ */
+
+unsigned int query_sdram_size(void)
+{
+       struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       u32 reg;
+
+       reg = readl(&pmc->pmc_scratch20);
+       debug("pmc->pmc_scratch20 (ODMData) = 0x%08x\n", reg);
+
+       /* bits 31:28 in OdmData are used for RAM size  */
+       switch ((reg) >> 28) {
+       case 1:
+               return 0x10000000;      /* 256 MB */
+       case 2:
+       default:
+               return 0x20000000;      /* 512 MB */
+       case 3:
+               return 0x40000000;      /* 1GB */
+       }
+}
+
+int dram_init(void)
+{
+       /* We do not initialise DRAM here. We just query the size */
+       gd->ram_size = query_sdram_size();
+       return 0;
+}
+
+#ifdef CONFIG_DISPLAY_BOARDINFO
+int checkboard(void)
+{
+       printf("Board: %s\n", sysinfo.board_string);
+       return 0;
+}
+#endif /* CONFIG_DISPLAY_BOARDINFO */
+
+#ifdef CONFIG_ARCH_CPU_INIT
+/*
+ * Note this function is executed by the ARM7TDMI AVP. It does not return
+ * in this case. It is also called once the A9 starts up, but does nothing in
+ * that case.
+ */
+int arch_cpu_init(void)
+{
+       /* Fire up the Cortex A9 */
+       tegra20_start();
+
+       /* We didn't do this init in start.S, so do it now */
+       cpu_init_cp15();
+
+       /* Initialize essential common plls */
+       clock_early_init();
+
+       return 0;
+}
+#endif
+
+static int uart_configs[] = {
+#if defined(CONFIG_TEGRA20_UARTA_UAA_UAB)
+       FUNCMUX_UART1_UAA_UAB,
+#elif defined(CONFIG_TEGRA20_UARTA_GPU)
+       FUNCMUX_UART1_GPU,
+#elif defined(CONFIG_TEGRA20_UARTA_SDIO1)
+       FUNCMUX_UART1_SDIO1,
+#else
+       FUNCMUX_UART1_IRRX_IRTX,
+#endif
+       FUNCMUX_UART2_IRDA,
+       -1,
+       FUNCMUX_UART4_GMC,
+       -1,
+};
+
+/**
+ * Set up the specified uarts
+ *
+ * @param uarts_ids    Mask containing UARTs to init (UARTx)
+ */
+static void setup_uarts(int uart_ids)
+{
+       static enum periph_id id_for_uart[] = {
+               PERIPH_ID_UART1,
+               PERIPH_ID_UART2,
+               PERIPH_ID_UART3,
+               PERIPH_ID_UART4,
+       };
+       size_t i;
+
+       for (i = 0; i < UART_COUNT; i++) {
+               if (uart_ids & (1 << i)) {
+                       enum periph_id id = id_for_uart[i];
+
+                       funcmux_select(id, uart_configs[i]);
+                       clock_ll_start_uart(id);
+               }
+       }
+}
+
+void board_init_uart_f(void)
+{
+       int uart_ids = 0;       /* bit mask of which UART ids to enable */
+
+#ifdef CONFIG_TEGRA20_ENABLE_UARTA
+       uart_ids |= UARTA;
+#endif
+#ifdef CONFIG_TEGRA20_ENABLE_UARTB
+       uart_ids |= UARTB;
+#endif
+#ifdef CONFIG_TEGRA20_ENABLE_UARTD
+       uart_ids |= UARTD;
+#endif
+       setup_uarts(uart_ids);
+}
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+void enable_caches(void)
+{
+       /* Enable D-cache. I-cache is already enabled in start.S */
+       dcache_enable();
+}
+#endif
diff --git a/arch/arm/cpu/armv7/tegra20/clock.c b/arch/arm/cpu/armv7/tegra20/clock.c
new file mode 100644 (file)
index 0000000..2403874
--- /dev/null
@@ -0,0 +1,1087 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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
+ */
+
+/* Tegra20 Clock control functions */
+
+#include <asm/io.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/timer.h>
+#include <asm/arch/tegra20.h>
+#include <common.h>
+#include <div64.h>
+#include <fdtdec.h>
+
+/*
+ * This is our record of the current clock rate of each clock. We don't
+ * fill all of these in since we are only really interested in clocks which
+ * we use as parents.
+ */
+static unsigned pll_rate[CLOCK_ID_COUNT];
+
+/*
+ * The oscillator frequency is fixed to one of four set values. Based on this
+ * the other clocks are set up appropriately.
+ */
+static unsigned osc_freq[CLOCK_OSC_FREQ_COUNT] = {
+       13000000,
+       19200000,
+       12000000,
+       26000000,
+};
+
+/*
+ * Clock types that we can use as a source. The Tegra20 has muxes for the
+ * peripheral clocks, and in most cases there are four options for the clock
+ * source. This gives us a clock 'type' and exploits what commonality exists
+ * in the device.
+ *
+ * Letters are obvious, except for T which means CLK_M, and S which means the
+ * clock derived from 32KHz. Beware that CLK_M (also called OSC in the
+ * datasheet) and PLL_M are different things. The former is the basic
+ * clock supplied to the SOC from an external oscillator. The latter is the
+ * memory clock PLL.
+ *
+ * See definitions in clock_id in the header file.
+ */
+enum clock_type_id {
+       CLOCK_TYPE_AXPT,        /* PLL_A, PLL_X, PLL_P, CLK_M */
+       CLOCK_TYPE_MCPA,        /* and so on */
+       CLOCK_TYPE_MCPT,
+       CLOCK_TYPE_PCM,
+       CLOCK_TYPE_PCMT,
+       CLOCK_TYPE_PCMT16,      /* CLOCK_TYPE_PCMT with 16-bit divider */
+       CLOCK_TYPE_PCXTS,
+       CLOCK_TYPE_PDCT,
+
+       CLOCK_TYPE_COUNT,
+       CLOCK_TYPE_NONE = -1,   /* invalid clock type */
+};
+
+/* return 1 if a peripheral ID is in range */
+#define clock_type_id_isvalid(id) ((id) >= 0 && \
+               (id) < CLOCK_TYPE_COUNT)
+
+char pllp_valid = 1;   /* PLLP is set up correctly */
+
+enum {
+       CLOCK_MAX_MUX   = 4     /* number of source options for each clock */
+};
+
+/*
+ * Clock source mux for each clock type. This just converts our enum into
+ * a list of mux sources for use by the code. Note that CLOCK_TYPE_PCXTS
+ * is special as it has 5 sources. Since it also has a different number of
+ * bits in its register for the source, we just handle it with a special
+ * case in the code.
+ */
+#define CLK(x) CLOCK_ID_ ## x
+static enum clock_id clock_source[CLOCK_TYPE_COUNT][CLOCK_MAX_MUX] = {
+       { CLK(AUDIO),   CLK(XCPU),      CLK(PERIPH),    CLK(OSC)        },
+       { CLK(MEMORY),  CLK(CGENERAL),  CLK(PERIPH),    CLK(AUDIO)      },
+       { CLK(MEMORY),  CLK(CGENERAL),  CLK(PERIPH),    CLK(OSC)        },
+       { CLK(PERIPH),  CLK(CGENERAL),  CLK(MEMORY),    CLK(NONE)       },
+       { CLK(PERIPH),  CLK(CGENERAL),  CLK(MEMORY),    CLK(OSC)        },
+       { CLK(PERIPH),  CLK(CGENERAL),  CLK(MEMORY),    CLK(OSC)        },
+       { CLK(PERIPH),  CLK(CGENERAL),  CLK(XCPU),      CLK(OSC)        },
+       { CLK(PERIPH),  CLK(DISPLAY),   CLK(CGENERAL),  CLK(OSC)        },
+};
+
+/*
+ * Clock peripheral IDs which sadly don't match up with PERIPH_ID. This is
+ * not in the header file since it is for purely internal use - we want
+ * callers to use the PERIPH_ID for all access to peripheral clocks to avoid
+ * confusion bewteen PERIPH_ID_... and PERIPHC_...
+ *
+ * We don't call this CLOCK_PERIPH_ID or PERIPH_CLOCK_ID as it would just be
+ * confusing.
+ *
+ * Note to SOC vendors: perhaps define a unified numbering for peripherals and
+ * use it for reset, clock enable, clock source/divider and even pinmuxing
+ * if you can.
+ */
+enum periphc_internal_id {
+       /* 0x00 */
+       PERIPHC_I2S1,
+       PERIPHC_I2S2,
+       PERIPHC_SPDIF_OUT,
+       PERIPHC_SPDIF_IN,
+       PERIPHC_PWM,
+       PERIPHC_SPI1,
+       PERIPHC_SPI2,
+       PERIPHC_SPI3,
+
+       /* 0x08 */
+       PERIPHC_XIO,
+       PERIPHC_I2C1,
+       PERIPHC_DVC_I2C,
+       PERIPHC_TWC,
+       PERIPHC_0c,
+       PERIPHC_10,     /* PERIPHC_SPI1, what is this really? */
+       PERIPHC_DISP1,
+       PERIPHC_DISP2,
+
+       /* 0x10 */
+       PERIPHC_CVE,
+       PERIPHC_IDE0,
+       PERIPHC_VI,
+       PERIPHC_1c,
+       PERIPHC_SDMMC1,
+       PERIPHC_SDMMC2,
+       PERIPHC_G3D,
+       PERIPHC_G2D,
+
+       /* 0x18 */
+       PERIPHC_NDFLASH,
+       PERIPHC_SDMMC4,
+       PERIPHC_VFIR,
+       PERIPHC_EPP,
+       PERIPHC_MPE,
+       PERIPHC_MIPI,
+       PERIPHC_UART1,
+       PERIPHC_UART2,
+
+       /* 0x20 */
+       PERIPHC_HOST1X,
+       PERIPHC_21,
+       PERIPHC_TVO,
+       PERIPHC_HDMI,
+       PERIPHC_24,
+       PERIPHC_TVDAC,
+       PERIPHC_I2C2,
+       PERIPHC_EMC,
+
+       /* 0x28 */
+       PERIPHC_UART3,
+       PERIPHC_29,
+       PERIPHC_VI_SENSOR,
+       PERIPHC_2b,
+       PERIPHC_2c,
+       PERIPHC_SPI4,
+       PERIPHC_I2C3,
+       PERIPHC_SDMMC3,
+
+       /* 0x30 */
+       PERIPHC_UART4,
+       PERIPHC_UART5,
+       PERIPHC_VDE,
+       PERIPHC_OWR,
+       PERIPHC_NOR,
+       PERIPHC_CSITE,
+
+       PERIPHC_COUNT,
+
+       PERIPHC_NONE = -1,
+};
+
+/* return 1 if a periphc_internal_id is in range */
+#define periphc_internal_id_isvalid(id) ((id) >= 0 && \
+               (id) < PERIPHC_COUNT)
+
+/*
+ * Clock type for each peripheral clock source. We put the name in each
+ * record just so it is easy to match things up
+ */
+#define TYPE(name, type) type
+static enum clock_type_id clock_periph_type[PERIPHC_COUNT] = {
+       /* 0x00 */
+       TYPE(PERIPHC_I2S1,      CLOCK_TYPE_AXPT),
+       TYPE(PERIPHC_I2S2,      CLOCK_TYPE_AXPT),
+       TYPE(PERIPHC_SPDIF_OUT, CLOCK_TYPE_AXPT),
+       TYPE(PERIPHC_SPDIF_IN,  CLOCK_TYPE_PCM),
+       TYPE(PERIPHC_PWM,       CLOCK_TYPE_PCXTS),
+       TYPE(PERIPHC_SPI1,      CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_SPI22,     CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_SPI3,      CLOCK_TYPE_PCMT),
+
+       /* 0x08 */
+       TYPE(PERIPHC_XIO,       CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_I2C1,      CLOCK_TYPE_PCMT16),
+       TYPE(PERIPHC_DVC_I2C,   CLOCK_TYPE_PCMT16),
+       TYPE(PERIPHC_TWC,       CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_SPI1,      CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_DISP1,     CLOCK_TYPE_PDCT),
+       TYPE(PERIPHC_DISP2,     CLOCK_TYPE_PDCT),
+
+       /* 0x10 */
+       TYPE(PERIPHC_CVE,       CLOCK_TYPE_PDCT),
+       TYPE(PERIPHC_IDE0,      CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_VI,        CLOCK_TYPE_MCPA),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_SDMMC1,    CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_SDMMC2,    CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_G3D,       CLOCK_TYPE_MCPA),
+       TYPE(PERIPHC_G2D,       CLOCK_TYPE_MCPA),
+
+       /* 0x18 */
+       TYPE(PERIPHC_NDFLASH,   CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_SDMMC4,    CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_VFIR,      CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_EPP,       CLOCK_TYPE_MCPA),
+       TYPE(PERIPHC_MPE,       CLOCK_TYPE_MCPA),
+       TYPE(PERIPHC_MIPI,      CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_UART1,     CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_UART2,     CLOCK_TYPE_PCMT),
+
+       /* 0x20 */
+       TYPE(PERIPHC_HOST1X,    CLOCK_TYPE_MCPA),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_TVO,       CLOCK_TYPE_PDCT),
+       TYPE(PERIPHC_HDMI,      CLOCK_TYPE_PDCT),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_TVDAC,     CLOCK_TYPE_PDCT),
+       TYPE(PERIPHC_I2C2,      CLOCK_TYPE_PCMT16),
+       TYPE(PERIPHC_EMC,       CLOCK_TYPE_MCPT),
+
+       /* 0x28 */
+       TYPE(PERIPHC_UART3,     CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_VI,        CLOCK_TYPE_MCPA),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_NONE,      CLOCK_TYPE_NONE),
+       TYPE(PERIPHC_SPI4,      CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_I2C3,      CLOCK_TYPE_PCMT16),
+       TYPE(PERIPHC_SDMMC3,    CLOCK_TYPE_PCMT),
+
+       /* 0x30 */
+       TYPE(PERIPHC_UART4,     CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_UART5,     CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_VDE,       CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_OWR,       CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_NOR,       CLOCK_TYPE_PCMT),
+       TYPE(PERIPHC_CSITE,     CLOCK_TYPE_PCMT),
+};
+
+/*
+ * This array translates a periph_id to a periphc_internal_id
+ *
+ * Not present/matched up:
+ *     uint vi_sensor;  _VI_SENSOR_0,          0x1A8
+ *     SPDIF - which is both 0x08 and 0x0c
+ *
+ */
+#define NONE(name) (-1)
+#define OFFSET(name, value) PERIPHC_ ## name
+static s8 periph_id_to_internal_id[PERIPH_ID_COUNT] = {
+       /* Low word: 31:0 */
+       NONE(CPU),
+       NONE(RESERVED1),
+       NONE(RESERVED2),
+       NONE(AC97),
+       NONE(RTC),
+       NONE(TMR),
+       PERIPHC_UART1,
+       PERIPHC_UART2,  /* and vfir 0x68 */
+
+       /* 0x08 */
+       NONE(GPIO),
+       PERIPHC_SDMMC2,
+       NONE(SPDIF),            /* 0x08 and 0x0c, unclear which to use */
+       PERIPHC_I2S1,
+       PERIPHC_I2C1,
+       PERIPHC_NDFLASH,
+       PERIPHC_SDMMC1,
+       PERIPHC_SDMMC4,
+
+       /* 0x10 */
+       PERIPHC_TWC,
+       PERIPHC_PWM,
+       PERIPHC_I2S2,
+       PERIPHC_EPP,
+       PERIPHC_VI,
+       PERIPHC_G2D,
+       NONE(USBD),
+       NONE(ISP),
+
+       /* 0x18 */
+       PERIPHC_G3D,
+       PERIPHC_IDE0,
+       PERIPHC_DISP2,
+       PERIPHC_DISP1,
+       PERIPHC_HOST1X,
+       NONE(VCP),
+       NONE(RESERVED30),
+       NONE(CACHE2),
+
+       /* Middle word: 63:32 */
+       NONE(MEM),
+       NONE(AHBDMA),
+       NONE(APBDMA),
+       NONE(RESERVED35),
+       NONE(KBC),
+       NONE(STAT_MON),
+       NONE(PMC),
+       NONE(FUSE),
+
+       /* 0x28 */
+       NONE(KFUSE),
+       NONE(SBC1),     /* SBC1, 0x34, is this SPI1? */
+       PERIPHC_NOR,
+       PERIPHC_SPI1,
+       PERIPHC_SPI2,
+       PERIPHC_XIO,
+       PERIPHC_SPI3,
+       PERIPHC_DVC_I2C,
+
+       /* 0x30 */
+       NONE(DSI),
+       PERIPHC_TVO,    /* also CVE 0x40 */
+       PERIPHC_MIPI,
+       PERIPHC_HDMI,
+       PERIPHC_CSITE,
+       PERIPHC_TVDAC,
+       PERIPHC_I2C2,
+       PERIPHC_UART3,
+
+       /* 0x38 */
+       NONE(RESERVED56),
+       PERIPHC_EMC,
+       NONE(USB2),
+       NONE(USB3),
+       PERIPHC_MPE,
+       PERIPHC_VDE,
+       NONE(BSEA),
+       NONE(BSEV),
+
+       /* Upper word 95:64 */
+       NONE(SPEEDO),
+       PERIPHC_UART4,
+       PERIPHC_UART5,
+       PERIPHC_I2C3,
+       PERIPHC_SPI4,
+       PERIPHC_SDMMC3,
+       NONE(PCIE),
+       PERIPHC_OWR,
+
+       /* 0x48 */
+       NONE(AFI),
+       NONE(CORESIGHT),
+       NONE(RESERVED74),
+       NONE(AVPUCQ),
+       NONE(RESERVED76),
+       NONE(RESERVED77),
+       NONE(RESERVED78),
+       NONE(RESERVED79),
+
+       /* 0x50 */
+       NONE(RESERVED80),
+       NONE(RESERVED81),
+       NONE(RESERVED82),
+       NONE(RESERVED83),
+       NONE(IRAMA),
+       NONE(IRAMB),
+       NONE(IRAMC),
+       NONE(IRAMD),
+
+       /* 0x58 */
+       NONE(CRAM2),
+};
+
+/*
+ * Get the oscillator frequency, from the corresponding hardware configuration
+ * field.
+ */
+enum clock_osc_freq clock_get_osc_freq(void)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       u32 reg;
+
+       reg = readl(&clkrst->crc_osc_ctrl);
+       return (reg & OSC_FREQ_MASK) >> OSC_FREQ_SHIFT;
+}
+
+int clock_get_osc_bypass(void)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       u32 reg;
+
+       reg = readl(&clkrst->crc_osc_ctrl);
+       return (reg & OSC_XOBP_MASK) >> OSC_XOBP_SHIFT;
+}
+
+/* Returns a pointer to the registers of the given pll */
+static struct clk_pll *get_pll(enum clock_id clkid)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+
+       assert(clock_id_is_pll(clkid));
+       return &clkrst->crc_pll[clkid];
+}
+
+int clock_ll_read_pll(enum clock_id clkid, u32 *divm, u32 *divn,
+               u32 *divp, u32 *cpcon, u32 *lfcon)
+{
+       struct clk_pll *pll = get_pll(clkid);
+       u32 data;
+
+       assert(clkid != CLOCK_ID_USB);
+
+       /* Safety check, adds to code size but is small */
+       if (!clock_id_is_pll(clkid) || clkid == CLOCK_ID_USB)
+               return -1;
+       data = readl(&pll->pll_base);
+       *divm = (data & PLL_DIVM_MASK) >> PLL_DIVM_SHIFT;
+       *divn = (data & PLL_DIVN_MASK) >> PLL_DIVN_SHIFT;
+       *divp = (data & PLL_DIVP_MASK) >> PLL_DIVP_SHIFT;
+       data = readl(&pll->pll_misc);
+       *cpcon = (data & PLL_CPCON_MASK) >> PLL_CPCON_SHIFT;
+       *lfcon = (data & PLL_LFCON_MASK) >> PLL_LFCON_SHIFT;
+
+       return 0;
+}
+
+unsigned long clock_start_pll(enum clock_id clkid, u32 divm, u32 divn,
+               u32 divp, u32 cpcon, u32 lfcon)
+{
+       struct clk_pll *pll = get_pll(clkid);
+       u32 data;
+
+       /*
+        * We cheat by treating all PLL (except PLLU) in the same fashion.
+        * This works only because:
+        * - same fields are always mapped at same offsets, except DCCON
+        * - DCCON is always 0, doesn't conflict
+        * - M,N, P of PLLP values are ignored for PLLP
+        */
+       data = (cpcon << PLL_CPCON_SHIFT) | (lfcon << PLL_LFCON_SHIFT);
+       writel(data, &pll->pll_misc);
+
+       data = (divm << PLL_DIVM_SHIFT) | (divn << PLL_DIVN_SHIFT) |
+                       (0 << PLL_BYPASS_SHIFT) | (1 << PLL_ENABLE_SHIFT);
+
+       if (clkid == CLOCK_ID_USB)
+               data |= divp << PLLU_VCO_FREQ_SHIFT;
+       else
+               data |= divp << PLL_DIVP_SHIFT;
+       writel(data, &pll->pll_base);
+
+       /* calculate the stable time */
+       return timer_get_us() + CLOCK_PLL_STABLE_DELAY_US;
+}
+
+/* return 1 if a peripheral ID is in range and valid */
+static int clock_periph_id_isvalid(enum periph_id id)
+{
+       if (id < PERIPH_ID_FIRST || id >= PERIPH_ID_COUNT)
+               printf("Peripheral id %d out of range\n", id);
+       else {
+               switch (id) {
+               case PERIPH_ID_RESERVED1:
+               case PERIPH_ID_RESERVED2:
+               case PERIPH_ID_RESERVED30:
+               case PERIPH_ID_RESERVED35:
+               case PERIPH_ID_RESERVED56:
+               case PERIPH_ID_RESERVED74:
+               case PERIPH_ID_RESERVED76:
+               case PERIPH_ID_RESERVED77:
+               case PERIPH_ID_RESERVED78:
+               case PERIPH_ID_RESERVED79:
+               case PERIPH_ID_RESERVED80:
+               case PERIPH_ID_RESERVED81:
+               case PERIPH_ID_RESERVED82:
+               case PERIPH_ID_RESERVED83:
+                       printf("Peripheral id %d is reserved\n", id);
+                       break;
+               default:
+                       return 1;
+               }
+       }
+       return 0;
+}
+
+/* Returns a pointer to the clock source register for a peripheral */
+static u32 *get_periph_source_reg(enum periph_id periph_id)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       enum periphc_internal_id internal_id;
+
+       assert(clock_periph_id_isvalid(periph_id));
+       internal_id = periph_id_to_internal_id[periph_id];
+       assert(internal_id != -1);
+       return &clkrst->crc_clk_src[internal_id];
+}
+
+void clock_ll_set_source_divisor(enum periph_id periph_id, unsigned source,
+                             unsigned divisor)
+{
+       u32 *reg = get_periph_source_reg(periph_id);
+       u32 value;
+
+       value = readl(reg);
+
+       value &= ~OUT_CLK_SOURCE_MASK;
+       value |= source << OUT_CLK_SOURCE_SHIFT;
+
+       value &= ~OUT_CLK_DIVISOR_MASK;
+       value |= divisor << OUT_CLK_DIVISOR_SHIFT;
+
+       writel(value, reg);
+}
+
+void clock_ll_set_source(enum periph_id periph_id, unsigned source)
+{
+       u32 *reg = get_periph_source_reg(periph_id);
+
+       clrsetbits_le32(reg, OUT_CLK_SOURCE_MASK,
+                       source << OUT_CLK_SOURCE_SHIFT);
+}
+
+/**
+ * Given the parent's rate and the required rate for the children, this works
+ * out the peripheral clock divider to use, in 7.1 binary format.
+ *
+ * @param divider_bits number of divider bits (8 or 16)
+ * @param parent_rate  clock rate of parent clock in Hz
+ * @param rate         required clock rate for this clock
+ * @return divider which should be used
+ */
+static int clk_get_divider(unsigned divider_bits, unsigned long parent_rate,
+                          unsigned long rate)
+{
+       u64 divider = parent_rate * 2;
+       unsigned max_divider = 1 << divider_bits;
+
+       divider += rate - 1;
+       do_div(divider, rate);
+
+       if ((s64)divider - 2 < 0)
+               return 0;
+
+       if ((s64)divider - 2 >= max_divider)
+               return -1;
+
+       return divider - 2;
+}
+
+/**
+ * Given the parent's rate and the divider in 7.1 format, this works out the
+ * resulting peripheral clock rate.
+ *
+ * @param parent_rate  clock rate of parent clock in Hz
+ * @param divider which should be used in 7.1 format
+ * @return effective clock rate of peripheral
+ */
+static unsigned long get_rate_from_divider(unsigned long parent_rate,
+                                          int divider)
+{
+       u64 rate;
+
+       rate = (u64)parent_rate * 2;
+       do_div(rate, divider + 2);
+       return rate;
+}
+
+unsigned long clock_get_periph_rate(enum periph_id periph_id,
+               enum clock_id parent)
+{
+       u32 *reg = get_periph_source_reg(periph_id);
+
+       return get_rate_from_divider(pll_rate[parent],
+               (readl(reg) & OUT_CLK_DIVISOR_MASK) >> OUT_CLK_DIVISOR_SHIFT);
+}
+
+/**
+ * Find the best available 7.1 format divisor given a parent clock rate and
+ * required child clock rate. This function assumes that a second-stage
+ * divisor is available which can divide by powers of 2 from 1 to 256.
+ *
+ * @param divider_bits number of divider bits (8 or 16)
+ * @param parent_rate  clock rate of parent clock in Hz
+ * @param rate         required clock rate for this clock
+ * @param extra_div    value for the second-stage divisor (not set if this
+ *                     function returns -1.
+ * @return divider which should be used, or -1 if nothing is valid
+ *
+ */
+static int find_best_divider(unsigned divider_bits, unsigned long parent_rate,
+                            unsigned long rate, int *extra_div)
+{
+       int shift;
+       int best_divider = -1;
+       int best_error = rate;
+
+       /* try dividers from 1 to 256 and find closest match */
+       for (shift = 0; shift <= 8 && best_error > 0; shift++) {
+               unsigned divided_parent = parent_rate >> shift;
+               int divider = clk_get_divider(divider_bits, divided_parent,
+                                             rate);
+               unsigned effective_rate = get_rate_from_divider(divided_parent,
+                                                      divider);
+               int error = rate - effective_rate;
+
+               /* Given a valid divider, look for the lowest error */
+               if (divider != -1 && error < best_error) {
+                       best_error = error;
+                       *extra_div = 1 << shift;
+                       best_divider = divider;
+               }
+       }
+
+       /* return what we found - *extra_div will already be set */
+       return best_divider;
+}
+
+/**
+ * Given a peripheral ID and the required source clock, this returns which
+ * value should be programmed into the source mux for that peripheral.
+ *
+ * There is special code here to handle the one source type with 5 sources.
+ *
+ * @param periph_id    peripheral to start
+ * @param source       PLL id of required parent clock
+ * @param mux_bits     Set to number of bits in mux register: 2 or 4
+ * @param divider_bits Set to number of divider bits (8 or 16)
+ * @return mux value (0-4, or -1 if not found)
+ */
+static int get_periph_clock_source(enum periph_id periph_id,
+               enum clock_id parent, int *mux_bits, int *divider_bits)
+{
+       enum clock_type_id type;
+       enum periphc_internal_id internal_id;
+       int mux;
+
+       assert(clock_periph_id_isvalid(periph_id));
+
+       internal_id = periph_id_to_internal_id[periph_id];
+       assert(periphc_internal_id_isvalid(internal_id));
+
+       type = clock_periph_type[internal_id];
+       assert(clock_type_id_isvalid(type));
+
+       /*
+        * Special cases here for the clock with a 4-bit source mux and I2C
+        * with its 16-bit divisor
+        */
+       if (type == CLOCK_TYPE_PCXTS)
+               *mux_bits = 4;
+       else
+               *mux_bits = 2;
+       if (type == CLOCK_TYPE_PCMT16)
+               *divider_bits = 16;
+       else
+               *divider_bits = 8;
+
+       for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
+               if (clock_source[type][mux] == parent)
+                       return mux;
+
+       /*
+        * Not found: it might be looking for the 'S' in CLOCK_TYPE_PCXTS
+        * which is not in our table. If not, then they are asking for a
+        * source which this peripheral can't access through its mux.
+        */
+       assert(type == CLOCK_TYPE_PCXTS);
+       assert(parent == CLOCK_ID_SFROM32KHZ);
+       if (type == CLOCK_TYPE_PCXTS && parent == CLOCK_ID_SFROM32KHZ)
+               return 4;       /* mux value for this clock */
+
+       /* if we get here, either us or the caller has made a mistake */
+       printf("Caller requested bad clock: periph=%d, parent=%d\n", periph_id,
+               parent);
+       return -1;
+}
+
+/**
+ * Adjust peripheral PLL to use the given divider and source.
+ *
+ * @param periph_id    peripheral to adjust
+ * @param source       Source number (0-3 or 0-7)
+ * @param mux_bits     Number of mux bits (2 or 4)
+ * @param divider      Required divider in 7.1 or 15.1 format
+ * @return 0 if ok, -1 on error (requesting a parent clock which is not valid
+ *             for this peripheral)
+ */
+static int adjust_periph_pll(enum periph_id periph_id, int source,
+                            int mux_bits, unsigned divider)
+{
+       u32 *reg = get_periph_source_reg(periph_id);
+
+       clrsetbits_le32(reg, OUT_CLK_DIVISOR_MASK,
+                       divider << OUT_CLK_DIVISOR_SHIFT);
+       udelay(1);
+
+       /* work out the source clock and set it */
+       if (source < 0)
+               return -1;
+       if (mux_bits == 4) {
+               clrsetbits_le32(reg, OUT_CLK_SOURCE4_MASK,
+                       source << OUT_CLK_SOURCE4_SHIFT);
+       } else {
+               clrsetbits_le32(reg, OUT_CLK_SOURCE_MASK,
+                       source << OUT_CLK_SOURCE_SHIFT);
+       }
+       udelay(2);
+       return 0;
+}
+
+unsigned clock_adjust_periph_pll_div(enum periph_id periph_id,
+               enum clock_id parent, unsigned rate, int *extra_div)
+{
+       unsigned effective_rate;
+       int mux_bits, divider_bits, source;
+       int divider;
+
+       /* work out the source clock and set it */
+       source = get_periph_clock_source(periph_id, parent, &mux_bits,
+                                        &divider_bits);
+
+       if (extra_div)
+               divider = find_best_divider(divider_bits, pll_rate[parent],
+                                           rate, extra_div);
+       else
+               divider = clk_get_divider(divider_bits, pll_rate[parent],
+                                         rate);
+       assert(divider >= 0);
+       if (adjust_periph_pll(periph_id, source, mux_bits, divider))
+               return -1U;
+       debug("periph %d, rate=%d, reg=%p = %x\n", periph_id, rate,
+               get_periph_source_reg(periph_id),
+               readl(get_periph_source_reg(periph_id)));
+
+       /* Check what we ended up with. This shouldn't matter though */
+       effective_rate = clock_get_periph_rate(periph_id, parent);
+       if (extra_div)
+               effective_rate /= *extra_div;
+       if (rate != effective_rate)
+               debug("Requested clock rate %u not honored (got %u)\n",
+                      rate, effective_rate);
+       return effective_rate;
+}
+
+unsigned clock_start_periph_pll(enum periph_id periph_id,
+               enum clock_id parent, unsigned rate)
+{
+       unsigned effective_rate;
+
+       reset_set_enable(periph_id, 1);
+       clock_enable(periph_id);
+
+       effective_rate = clock_adjust_periph_pll_div(periph_id, parent, rate,
+                                                NULL);
+
+       reset_set_enable(periph_id, 0);
+       return effective_rate;
+}
+
+void clock_set_enable(enum periph_id periph_id, int enable)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       u32 *clk = &clkrst->crc_clk_out_enb[PERIPH_REG(periph_id)];
+       u32 reg;
+
+       /* Enable/disable the clock to this peripheral */
+       assert(clock_periph_id_isvalid(periph_id));
+       reg = readl(clk);
+       if (enable)
+               reg |= PERIPH_MASK(periph_id);
+       else
+               reg &= ~PERIPH_MASK(periph_id);
+       writel(reg, clk);
+}
+
+void clock_enable(enum periph_id clkid)
+{
+       clock_set_enable(clkid, 1);
+}
+
+void clock_disable(enum periph_id clkid)
+{
+       clock_set_enable(clkid, 0);
+}
+
+void reset_set_enable(enum periph_id periph_id, int enable)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       u32 *reset = &clkrst->crc_rst_dev[PERIPH_REG(periph_id)];
+       u32 reg;
+
+       /* Enable/disable reset to the peripheral */
+       assert(clock_periph_id_isvalid(periph_id));
+       reg = readl(reset);
+       if (enable)
+               reg |= PERIPH_MASK(periph_id);
+       else
+               reg &= ~PERIPH_MASK(periph_id);
+       writel(reg, reset);
+}
+
+void reset_periph(enum periph_id periph_id, int us_delay)
+{
+       /* Put peripheral into reset */
+       reset_set_enable(periph_id, 1);
+       udelay(us_delay);
+
+       /* Remove reset */
+       reset_set_enable(periph_id, 0);
+
+       udelay(us_delay);
+}
+
+void reset_cmplx_set_enable(int cpu, int which, int reset)
+{
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       u32 mask;
+
+       /* Form the mask, which depends on the cpu chosen. Tegra20 has 2 */
+       assert(cpu >= 0 && cpu < 2);
+       mask = which << cpu;
+
+       /* either enable or disable those reset for that CPU */
+       if (reset)
+               writel(mask, &clkrst->crc_cpu_cmplx_set);
+       else
+               writel(mask, &clkrst->crc_cpu_cmplx_clr);
+}
+
+unsigned clock_get_rate(enum clock_id clkid)
+{
+       struct clk_pll *pll;
+       u32 base;
+       u32 divm;
+       u64 parent_rate;
+       u64 rate;
+
+       parent_rate = osc_freq[clock_get_osc_freq()];
+       if (clkid == CLOCK_ID_OSC)
+               return parent_rate;
+
+       pll = get_pll(clkid);
+       base = readl(&pll->pll_base);
+
+       /* Oh for bf_unpack()... */
+       rate = parent_rate * ((base & PLL_DIVN_MASK) >> PLL_DIVN_SHIFT);
+       divm = (base & PLL_DIVM_MASK) >> PLL_DIVM_SHIFT;
+       if (clkid == CLOCK_ID_USB)
+               divm <<= (base & PLLU_VCO_FREQ_MASK) >> PLLU_VCO_FREQ_SHIFT;
+       else
+               divm <<= (base & PLL_DIVP_MASK) >> PLL_DIVP_SHIFT;
+       do_div(rate, divm);
+       return rate;
+}
+
+/**
+ * Set the output frequency you want for each PLL clock.
+ * PLL output frequencies are programmed by setting their N, M and P values.
+ * The governing equations are:
+ *     VCO = (Fi / m) * n, Fo = VCO / (2^p)
+ *     where Fo is the output frequency from the PLL.
+ * Example: Set the output frequency to 216Mhz(Fo) with 12Mhz OSC(Fi)
+ *     216Mhz = ((12Mhz / m) * n) / (2^p) so n=432,m=12,p=1
+ * Please see Tegra TRM section 5.3 to get the detail for PLL Programming
+ *
+ * @param n PLL feedback divider(DIVN)
+ * @param m PLL input divider(DIVN)
+ * @param p post divider(DIVP)
+ * @param cpcon base PLL charge pump(CPCON)
+ * @return 0 if ok, -1 on error (the requested PLL is incorrect and cannot
+ *             be overriden), 1 if PLL is already correct
+ */
+static int clock_set_rate(enum clock_id clkid, u32 n, u32 m, u32 p, u32 cpcon)
+{
+       u32 base_reg;
+       u32 misc_reg;
+       struct clk_pll *pll;
+
+       pll = get_pll(clkid);
+
+       base_reg = readl(&pll->pll_base);
+
+       /* Set BYPASS, m, n and p to PLL_BASE */
+       base_reg &= ~PLL_DIVM_MASK;
+       base_reg |= m << PLL_DIVM_SHIFT;
+
+       base_reg &= ~PLL_DIVN_MASK;
+       base_reg |= n << PLL_DIVN_SHIFT;
+
+       base_reg &= ~PLL_DIVP_MASK;
+       base_reg |= p << PLL_DIVP_SHIFT;
+
+       if (clkid == CLOCK_ID_PERIPH) {
+               /*
+                * If the PLL is already set up, check that it is correct
+                * and record this info for clock_verify() to check.
+                */
+               if (base_reg & PLL_BASE_OVRRIDE_MASK) {
+                       base_reg |= PLL_ENABLE_MASK;
+                       if (base_reg != readl(&pll->pll_base))
+                               pllp_valid = 0;
+                       return pllp_valid ? 1 : -1;
+               }
+               base_reg |= PLL_BASE_OVRRIDE_MASK;
+       }
+
+       base_reg |= PLL_BYPASS_MASK;
+       writel(base_reg, &pll->pll_base);
+
+       /* Set cpcon to PLL_MISC */
+       misc_reg = readl(&pll->pll_misc);
+       misc_reg &= ~PLL_CPCON_MASK;
+       misc_reg |= cpcon << PLL_CPCON_SHIFT;
+       writel(misc_reg, &pll->pll_misc);
+
+       /* Enable PLL */
+       base_reg |= PLL_ENABLE_MASK;
+       writel(base_reg, &pll->pll_base);
+
+       /* Disable BYPASS */
+       base_reg &= ~PLL_BYPASS_MASK;
+       writel(base_reg, &pll->pll_base);
+
+       return 0;
+}
+
+void clock_ll_start_uart(enum periph_id periph_id)
+{
+       /* Assert UART reset and enable clock */
+       reset_set_enable(periph_id, 1);
+       clock_enable(periph_id);
+       clock_ll_set_source(periph_id, 0); /* UARTx_CLK_SRC = 00, PLLP_OUT0 */
+
+       /* wait for 2us */
+       udelay(2);
+
+       /* De-assert reset to UART */
+       reset_set_enable(periph_id, 0);
+}
+
+#ifdef CONFIG_OF_CONTROL
+/*
+ * Convert a device tree clock ID to our peripheral ID. They are mostly
+ * the same but we are very cautious so we check that a valid clock ID is
+ * provided.
+ *
+ * @param clk_id       Clock ID according to tegra20 device tree binding
+ * @return peripheral ID, or PERIPH_ID_NONE if the clock ID is invalid
+ */
+static enum periph_id clk_id_to_periph_id(int clk_id)
+{
+       if (clk_id > 95)
+               return PERIPH_ID_NONE;
+
+       switch (clk_id) {
+       case 1:
+       case 2:
+       case 7:
+       case 10:
+       case 20:
+       case 30:
+       case 35:
+       case 49:
+       case 56:
+       case 74:
+       case 76:
+       case 77:
+       case 78:
+       case 79:
+       case 80:
+       case 81:
+       case 82:
+       case 83:
+       case 91:
+       case 95:
+               return PERIPH_ID_NONE;
+       default:
+               return clk_id;
+       }
+}
+
+int clock_decode_periph_id(const void *blob, int node)
+{
+       enum periph_id id;
+       u32 cell[2];
+       int err;
+
+       err = fdtdec_get_int_array(blob, node, "clocks", cell,
+                                  ARRAY_SIZE(cell));
+       if (err)
+               return -1;
+       id = clk_id_to_periph_id(cell[1]);
+       assert(clock_periph_id_isvalid(id));
+       return id;
+}
+#endif /* CONFIG_OF_CONTROL */
+
+int clock_verify(void)
+{
+       struct clk_pll *pll = get_pll(CLOCK_ID_PERIPH);
+       u32 reg = readl(&pll->pll_base);
+
+       if (!pllp_valid) {
+               printf("Warning: PLLP %x is not correct\n", reg);
+               return -1;
+       }
+       debug("PLLX %x is correct\n", reg);
+       return 0;
+}
+
+void clock_early_init(void)
+{
+       /*
+        * PLLP output frequency set to 216MHz
+        * PLLC output frequency set to 600Mhz
+        *
+        * TODO: Can we calculate these values instead of hard-coding?
+        */
+       switch (clock_get_osc_freq()) {
+       case CLOCK_OSC_FREQ_12_0: /* OSC is 12Mhz */
+               clock_set_rate(CLOCK_ID_PERIPH, 432, 12, 1, 8);
+               clock_set_rate(CLOCK_ID_CGENERAL, 600, 12, 0, 8);
+               break;
+
+       case CLOCK_OSC_FREQ_26_0: /* OSC is 26Mhz */
+               clock_set_rate(CLOCK_ID_PERIPH, 432, 26, 1, 8);
+               clock_set_rate(CLOCK_ID_CGENERAL, 600, 26, 0, 8);
+               break;
+
+       case CLOCK_OSC_FREQ_13_0: /* OSC is 13Mhz */
+               clock_set_rate(CLOCK_ID_PERIPH, 432, 13, 1, 8);
+               clock_set_rate(CLOCK_ID_CGENERAL, 600, 13, 0, 8);
+               break;
+       case CLOCK_OSC_FREQ_19_2:
+       default:
+               /*
+                * These are not supported. It is too early to print a
+                * message and the UART likely won't work anyway due to the
+                * oscillator being wrong.
+                */
+               break;
+       }
+}
+
+void clock_init(void)
+{
+       pll_rate[CLOCK_ID_MEMORY] = clock_get_rate(CLOCK_ID_MEMORY);
+       pll_rate[CLOCK_ID_PERIPH] = clock_get_rate(CLOCK_ID_PERIPH);
+       pll_rate[CLOCK_ID_CGENERAL] = clock_get_rate(CLOCK_ID_CGENERAL);
+       pll_rate[CLOCK_ID_OSC] = clock_get_rate(CLOCK_ID_OSC);
+       pll_rate[CLOCK_ID_SFROM32KHZ] = 32768;
+       debug("Osc = %d\n", pll_rate[CLOCK_ID_OSC]);
+       debug("PLLM = %d\n", pll_rate[CLOCK_ID_MEMORY]);
+       debug("PLLP = %d\n", pll_rate[CLOCK_ID_PERIPH]);
+}
diff --git a/arch/arm/cpu/armv7/tegra20/cmd_enterrcm.c b/arch/arm/cpu/armv7/tegra20/cmd_enterrcm.c
new file mode 100644 (file)
index 0000000..75cadb0
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * Derived from code (arch/arm/lib/reset.c) that is:
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Alex Zuepke <azu@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * (C) Copyright 2004
+ * DAVE Srl
+ * http://www.dave-tech.it
+ * http://www.wawnet.biz
+ * mailto:info@wawnet.biz
+ *
+ * (C) Copyright 2004 Texas Insturments
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/pmc.h>
+
+static int do_enterrcm(cmd_tbl_t *cmdtp, int flag, int argc,
+                      char * const argv[])
+{
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+
+       puts("Entering RCM...\n");
+       udelay(50000);
+
+       pmc->pmc_scratch0 = 2;
+       disable_interrupts();
+       reset_cpu(0);
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       enterrcm, 1, 0, do_enterrcm,
+       "reset Tegra and enter USB Recovery Mode",
+       ""
+);
diff --git a/arch/arm/cpu/armv7/tegra20/config.mk b/arch/arm/cpu/armv7/tegra20/config.mk
new file mode 100644 (file)
index 0000000..714daaf
--- /dev/null
@@ -0,0 +1,38 @@
+#
+# (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
+#
+
+# Tegra has an ARMv4T CPU which runs board_init_f(), so we must build these
+# files with compatible flags
+ifdef CONFIG_TEGRA20
+CFLAGS_arch/arm/lib/board.o += -march=armv4t
+CFLAGS_arch/arm/lib/memset.o += -march=armv4t
+CFLAGS_lib/string.o += -march=armv4t
+CFLAGS_common/cmd_nvedit.o += -march=armv4t
+endif
+
+USE_PRIVATE_LIBGCC = yes
+
+CONFIG_ARCH_DEVICE_TREE := tegra20
diff --git a/arch/arm/cpu/armv7/tegra20/crypto.c b/arch/arm/cpu/armv7/tegra20/crypto.c
new file mode 100644 (file)
index 0000000..5f0b240
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (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/errno.h>
+#include "crypto.h"
+#include "aes.h"
+
+static u8 zero_key[16];
+
+#define AES_CMAC_CONST_RB 0x87  /* from RFC 4493, Figure 2.2 */
+
+enum security_op {
+       SECURITY_SIGN           = 1 << 0,       /* Sign the data */
+       SECURITY_ENCRYPT        = 1 << 1,       /* Encrypt the data */
+};
+
+static void debug_print_vector(char *name, u32 num_bytes, u8 *data)
+{
+       u32 i;
+
+       debug("%s [%d] @0x%08x", name, num_bytes, (u32)data);
+       for (i = 0; i < num_bytes; i++) {
+               if (i % 16 == 0)
+                       debug(" = ");
+               debug("%02x", data[i]);
+               if ((i+1) % 16 != 0)
+                       debug(" ");
+       }
+       debug("\n");
+}
+
+/**
+ * Apply chain data to the destination using EOR
+ *
+ * Each array is of length AES_AES_KEY_LENGTH.
+ *
+ * \param cbc_chain_data       Chain data
+ * \param src                  Source data
+ * \param dst                  Destination data, which is modified here
+ */
+static void apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
+{
+       int i;
+
+       for (i = 0; i < 16; i++)
+               *dst++ = *src++ ^ *cbc_chain_data++;
+}
+
+/**
+ * Encrypt some data with AES.
+ *
+ * \param key_schedule         Expanded key to use
+ * \param src                  Source data to encrypt
+ * \param dst                  Destination buffer
+ * \param num_aes_blocks       Number of AES blocks to encrypt
+ */
+static void encrypt_object(u8 *key_schedule, u8 *src, u8 *dst,
+                          u32 num_aes_blocks)
+{
+       u8 tmp_data[AES_KEY_LENGTH];
+       u8 *cbc_chain_data;
+       u32 i;
+
+       cbc_chain_data = zero_key;      /* Convenient array of 0's for IV */
+
+       for (i = 0; i < num_aes_blocks; i++) {
+               debug("encrypt_object: block %d of %d\n", i, num_aes_blocks);
+               debug_print_vector("AES Src", AES_KEY_LENGTH, src);
+
+               /* Apply the chain data */
+               apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
+               debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
+
+               /* encrypt the AES block */
+               aes_encrypt(tmp_data, key_schedule, dst);
+               debug_print_vector("AES Dst", AES_KEY_LENGTH, dst);
+
+               /* Update pointers for next loop. */
+               cbc_chain_data = dst;
+               src += AES_KEY_LENGTH;
+               dst += AES_KEY_LENGTH;
+       }
+}
+
+/**
+ * Shift a vector left by one bit
+ *
+ * \param in   Input vector
+ * \param out  Output vector
+ * \param size Length of vector in bytes
+ */
+static void left_shift_vector(u8 *in, u8 *out, int size)
+{
+       int carry = 0;
+       int i;
+
+       for (i = size - 1; i >= 0; i--) {
+               out[i] = (in[i] << 1) | carry;
+               carry = in[i] >> 7;     /* get most significant bit */
+       }
+}
+
+/**
+ * Sign a block of data, putting the result into dst.
+ *
+ * \param key                  Input AES key, length AES_KEY_LENGTH
+ * \param key_schedule         Expanded key to use
+ * \param src                  Source data of length 'num_aes_blocks' blocks
+ * \param dst                  Destination buffer, length AES_KEY_LENGTH
+ * \param num_aes_blocks       Number of AES blocks to encrypt
+ */
+static void sign_object(u8 *key, u8 *key_schedule, u8 *src, u8 *dst,
+                       u32 num_aes_blocks)
+{
+       u8 tmp_data[AES_KEY_LENGTH];
+       u8 left[AES_KEY_LENGTH];
+       u8 k1[AES_KEY_LENGTH];
+       u8 *cbc_chain_data;
+       unsigned i;
+
+       cbc_chain_data = zero_key;      /* Convenient array of 0's for IV */
+
+       /* compute K1 constant needed by AES-CMAC calculation */
+       for (i = 0; i < AES_KEY_LENGTH; i++)
+               tmp_data[i] = 0;
+
+       encrypt_object(key_schedule, tmp_data, left, 1);
+       debug_print_vector("AES(key, nonce)", AES_KEY_LENGTH, left);
+
+       left_shift_vector(left, k1, sizeof(left));
+       debug_print_vector("L", AES_KEY_LENGTH, left);
+
+       if ((left[0] >> 7) != 0) /* get MSB of L */
+               k1[AES_KEY_LENGTH-1] ^= AES_CMAC_CONST_RB;
+       debug_print_vector("K1", AES_KEY_LENGTH, k1);
+
+       /* compute the AES-CMAC value */
+       for (i = 0; i < num_aes_blocks; i++) {
+               /* Apply the chain data */
+               apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
+
+               /* for the final block, XOR K1 into the IV */
+               if (i == num_aes_blocks - 1)
+                       apply_cbc_chain_data(tmp_data, k1, tmp_data);
+
+               /* encrypt the AES block */
+               aes_encrypt(tmp_data, key_schedule, dst);
+
+               debug("sign_obj: block %d of %d\n", i, num_aes_blocks);
+               debug_print_vector("AES-CMAC Src", AES_KEY_LENGTH, src);
+               debug_print_vector("AES-CMAC Xor", AES_KEY_LENGTH, tmp_data);
+               debug_print_vector("AES-CMAC Dst", AES_KEY_LENGTH, dst);
+
+               /* Update pointers for next loop. */
+               cbc_chain_data = dst;
+               src += AES_KEY_LENGTH;
+       }
+
+       debug_print_vector("AES-CMAC Hash", AES_KEY_LENGTH, dst);
+}
+
+/**
+ * Encrypt and sign a block of data (depending on security mode).
+ *
+ * \param key          Input AES key, length AES_KEY_LENGTH
+ * \param oper         Security operations mask to perform (enum security_op)
+ * \param src          Source data
+ * \param length       Size of source data
+ * \param sig_dst      Destination address for signature, AES_KEY_LENGTH bytes
+ */
+static int encrypt_and_sign(u8 *key, enum security_op oper, u8 *src,
+                           u32 length, u8 *sig_dst)
+{
+       u32 num_aes_blocks;
+       u8 key_schedule[AES_EXPAND_KEY_LENGTH];
+
+       debug("encrypt_and_sign: length = %d\n", length);
+       debug_print_vector("AES key", AES_KEY_LENGTH, key);
+
+       /*
+        * The only need for a key is for signing/checksum purposes, so
+        * if not encrypting, expand a key of 0s.
+        */
+       aes_expand_key(oper & SECURITY_ENCRYPT ? key : zero_key, key_schedule);
+
+       num_aes_blocks = (length + AES_KEY_LENGTH - 1) / AES_KEY_LENGTH;
+
+       if (oper & SECURITY_ENCRYPT) {
+               /* Perform this in place, resulting in src being encrypted. */
+               debug("encrypt_and_sign: begin encryption\n");
+               encrypt_object(key_schedule, src, src, num_aes_blocks);
+               debug("encrypt_and_sign: end encryption\n");
+       }
+
+       if (oper & SECURITY_SIGN) {
+               /* encrypt the data, overwriting the result in signature. */
+               debug("encrypt_and_sign: begin signing\n");
+               sign_object(key, key_schedule, src, sig_dst, num_aes_blocks);
+               debug("encrypt_and_sign: end signing\n");
+       }
+
+       return 0;
+}
+
+int sign_data_block(u8 *source, unsigned length, u8 *signature)
+{
+       return encrypt_and_sign(zero_key, SECURITY_SIGN, source,
+                               length, signature);
+}
diff --git a/arch/arm/cpu/armv7/tegra20/crypto.h b/arch/arm/cpu/armv7/tegra20/crypto.h
new file mode 100644 (file)
index 0000000..aff67e7
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (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 _CRYPTO_H_
+#define _CRYPTO_H_
+
+/**
+ * Sign a block of data
+ *
+ * \param source       Source data
+ * \param length       Size of source data
+ * \param signature    Destination address for signature, AES_KEY_LENGTH bytes
+ */
+int sign_data_block(u8 *source, unsigned length, u8 *signature);
+
+#endif /* #ifndef _CRYPTO_H_ */
diff --git a/arch/arm/cpu/armv7/tegra20/emc.c b/arch/arm/cpu/armv7/tegra20/emc.c
new file mode 100644 (file)
index 0000000..ffc05e4
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * 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 <fdtdec.h>
+#include <asm/io.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/apb_misc.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/emc.h>
+#include <asm/arch/tegra20.h>
+
+/*
+ * The EMC registers have shadow registers.  When the EMC clock is updated
+ * in the clock controller, the shadow registers are copied to the active
+ * registers, allowing glitchless memory bus frequency changes.
+ * This function updates the shadow registers for a new clock frequency,
+ * and relies on the clock lock on the emc clock to avoid races between
+ * multiple frequency changes
+ */
+
+/*
+ * This table defines the ordering of the registers provided to
+ * tegra_set_mmc()
+ * TODO: Convert to fdt version once available
+ */
+static const unsigned long emc_reg_addr[TEGRA_EMC_NUM_REGS] = {
+       0x2c,   /* RC */
+       0x30,   /* RFC */
+       0x34,   /* RAS */
+       0x38,   /* RP */
+       0x3c,   /* R2W */
+       0x40,   /* W2R */
+       0x44,   /* R2P */
+       0x48,   /* W2P */
+       0x4c,   /* RD_RCD */
+       0x50,   /* WR_RCD */
+       0x54,   /* RRD */
+       0x58,   /* REXT */
+       0x5c,   /* WDV */
+       0x60,   /* QUSE */
+       0x64,   /* QRST */
+       0x68,   /* QSAFE */
+       0x6c,   /* RDV */
+       0x70,   /* REFRESH */
+       0x74,   /* BURST_REFRESH_NUM */
+       0x78,   /* PDEX2WR */
+       0x7c,   /* PDEX2RD */
+       0x80,   /* PCHG2PDEN */
+       0x84,   /* ACT2PDEN */
+       0x88,   /* AR2PDEN */
+       0x8c,   /* RW2PDEN */
+       0x90,   /* TXSR */
+       0x94,   /* TCKE */
+       0x98,   /* TFAW */
+       0x9c,   /* TRPAB */
+       0xa0,   /* TCLKSTABLE */
+       0xa4,   /* TCLKSTOP */
+       0xa8,   /* TREFBW */
+       0xac,   /* QUSE_EXTRA */
+       0x114,  /* FBIO_CFG6 */
+       0xb0,   /* ODT_WRITE */
+       0xb4,   /* ODT_READ */
+       0x104,  /* FBIO_CFG5 */
+       0x2bc,  /* CFG_DIG_DLL */
+       0x2c0,  /* DLL_XFORM_DQS */
+       0x2c4,  /* DLL_XFORM_QUSE */
+       0x2e0,  /* ZCAL_REF_CNT */
+       0x2e4,  /* ZCAL_WAIT_CNT */
+       0x2a8,  /* AUTO_CAL_INTERVAL */
+       0x2d0,  /* CFG_CLKTRIM_0 */
+       0x2d4,  /* CFG_CLKTRIM_1 */
+       0x2d8,  /* CFG_CLKTRIM_2 */
+};
+
+struct emc_ctlr *emc_get_controller(const void *blob)
+{
+       fdt_addr_t addr;
+       int node;
+
+       node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_EMC);
+       if (node > 0) {
+               addr = fdtdec_get_addr(blob, node, "reg");
+               if (addr != FDT_ADDR_T_NONE)
+                       return (struct emc_ctlr *)addr;
+       }
+       return NULL;
+}
+
+/* Error codes we use */
+enum {
+       ERR_NO_EMC_NODE = -10,
+       ERR_NO_EMC_REG,
+       ERR_NO_FREQ,
+       ERR_FREQ_NOT_FOUND,
+       ERR_BAD_REGS,
+       ERR_NO_RAM_CODE,
+       ERR_RAM_CODE_NOT_FOUND,
+};
+
+/**
+ * Find EMC tables for the given ram code.
+ *
+ * The tegra EMC binding has two options, one using the ram code and one not.
+ * We detect which is in use by looking for the nvidia,use-ram-code property.
+ * If this is not present, then the EMC tables are directly below 'node',
+ * otherwise we select the correct emc-tables subnode based on the 'ram_code'
+ * value.
+ *
+ * @param blob         Device tree blob
+ * @param node         EMC node (nvidia,tegra20-emc compatible string)
+ * @param ram_code     RAM code to select (0-3, or -1 if unknown)
+ * @return 0 if ok, otherwise a -ve ERR_ code (see enum above)
+ */
+static int find_emc_tables(const void *blob, int node, int ram_code)
+{
+       int need_ram_code;
+       int depth;
+       int offset;
+
+       /* If we are using RAM codes, scan through the tables for our code */
+       need_ram_code = fdtdec_get_bool(blob, node, "nvidia,use-ram-code");
+       if (!need_ram_code)
+               return node;
+       if (ram_code == -1) {
+               debug("%s: RAM code required but not supplied\n", __func__);
+               return ERR_NO_RAM_CODE;
+       }
+
+       offset = node;
+       depth = 0;
+       do {
+               /*
+                * Sadly there is no compatible string so we cannot use
+                * fdtdec_next_compatible_subnode().
+                */
+               offset = fdt_next_node(blob, offset, &depth);
+               if (depth <= 0)
+                       break;
+
+               /* Make sure this is a direct subnode */
+               if (depth != 1)
+                       continue;
+               if (strcmp("emc-tables", fdt_get_name(blob, offset, NULL)))
+                       continue;
+
+               if (fdtdec_get_int(blob, offset, "nvidia,ram-code", -1)
+                               == ram_code)
+                       return offset;
+       } while (1);
+
+       debug("%s: Could not find tables for RAM code %d\n", __func__,
+             ram_code);
+       return ERR_RAM_CODE_NOT_FOUND;
+}
+
+/**
+ * Decode the EMC node of the device tree, returning a pointer to the emc
+ * controller and the table to be used for the given rate.
+ *
+ * @param blob Device tree blob
+ * @param rate Clock speed of memory controller in Hz (=2x memory bus rate)
+ * @param emcp Returns address of EMC controller registers
+ * @param tablep Returns pointer to table to program into EMC. There are
+ *             TEGRA_EMC_NUM_REGS entries, destined for offsets as per the
+ *             emc_reg_addr array.
+ * @return 0 if ok, otherwise a -ve error code which will allow someone to
+ * figure out roughly what went wrong by looking at this code.
+ */
+static int decode_emc(const void *blob, unsigned rate, struct emc_ctlr **emcp,
+                     const u32 **tablep)
+{
+       struct apb_misc_pp_ctlr *pp =
+               (struct apb_misc_pp_ctlr *)NV_PA_APB_MISC_BASE;
+       int ram_code;
+       int depth;
+       int node;
+
+       ram_code = (readl(&pp->strapping_opt_a) & RAM_CODE_MASK)
+                       >> RAM_CODE_SHIFT;
+       /*
+        * The EMC clock rate is twice the bus rate, and the bus rate is
+        * measured in kHz
+        */
+       rate = rate / 2 / 1000;
+
+       node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_EMC);
+       if (node < 0) {
+               debug("%s: No EMC node found in FDT\n", __func__);
+               return ERR_NO_EMC_NODE;
+       }
+       *emcp = (struct emc_ctlr *)fdtdec_get_addr(blob, node, "reg");
+       if (*emcp == (struct emc_ctlr *)FDT_ADDR_T_NONE) {
+               debug("%s: No EMC node reg property\n", __func__);
+               return ERR_NO_EMC_REG;
+       }
+
+       /* Work out the parent node which contains our EMC tables */
+       node = find_emc_tables(blob, node, ram_code & 3);
+       if (node < 0)
+               return node;
+
+       depth = 0;
+       for (;;) {
+               int node_rate;
+
+               node = fdtdec_next_compatible_subnode(blob, node,
+                               COMPAT_NVIDIA_TEGRA20_EMC_TABLE, &depth);
+               if (node < 0)
+                       break;
+               node_rate = fdtdec_get_int(blob, node, "clock-frequency", -1);
+               if (node_rate == -1) {
+                       debug("%s: Missing clock-frequency\n", __func__);
+                       return ERR_NO_FREQ; /* we expect this property */
+               }
+
+               if (node_rate == rate)
+                       break;
+       }
+       if (node < 0) {
+               debug("%s: No node found for clock frequency %d\n", __func__,
+                     rate);
+               return ERR_FREQ_NOT_FOUND;
+       }
+
+       *tablep = fdtdec_locate_array(blob, node, "nvidia,emc-registers",
+                                     TEGRA_EMC_NUM_REGS);
+       if (!*tablep) {
+               debug("%s: node '%s' array missing / wrong size\n", __func__,
+                     fdt_get_name(blob, node, NULL));
+               return ERR_BAD_REGS;
+       }
+
+       /* All seems well */
+       return 0;
+}
+
+int tegra_set_emc(const void *blob, unsigned rate)
+{
+       struct emc_ctlr *emc;
+       const u32 *table;
+       int err, i;
+
+       err = decode_emc(blob, rate, &emc, &table);
+       if (err) {
+               debug("Warning: no valid EMC (%d), memory timings unset\n",
+                      err);
+               return err;
+       }
+
+       debug("%s: Table found, setting EMC values as follows:\n", __func__);
+       for (i = 0; i < TEGRA_EMC_NUM_REGS; i++) {
+               u32 value = fdt32_to_cpu(table[i]);
+               u32 addr = (uintptr_t)emc + emc_reg_addr[i];
+
+               debug("   %#x: %#x\n", addr, value);
+               writel(value, addr);
+       }
+
+       /* trigger emc with new settings */
+       clock_adjust_periph_pll_div(PERIPH_ID_EMC, CLOCK_ID_MEMORY,
+                               clock_get_rate(CLOCK_ID_MEMORY), NULL);
+       debug("EMC clock set to %lu\n",
+             clock_get_periph_rate(PERIPH_ID_EMC, CLOCK_ID_MEMORY));
+
+       return 0;
+}
diff --git a/arch/arm/cpu/armv7/tegra20/funcmux.c b/arch/arm/cpu/armv7/tegra20/funcmux.c
new file mode 100644 (file)
index 0000000..8cfed64
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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
+ */
+
+/* Tegra20 high-level function multiplexing */
+#include <common.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/funcmux.h>
+#include <asm/arch/pinmux.h>
+
+int funcmux_select(enum periph_id id, int config)
+{
+       int bad_config = config != FUNCMUX_DEFAULT;
+
+       switch (id) {
+       case PERIPH_ID_UART1:
+               switch (config) {
+               case FUNCMUX_UART1_IRRX_IRTX:
+                       pinmux_set_func(PINGRP_IRRX, PMUX_FUNC_UARTA);
+                       pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA);
+                       pinmux_tristate_disable(PINGRP_IRRX);
+                       pinmux_tristate_disable(PINGRP_IRTX);
+                       break;
+               case FUNCMUX_UART1_UAA_UAB:
+                       pinmux_set_func(PINGRP_UAA, PMUX_FUNC_UARTA);
+                       pinmux_set_func(PINGRP_UAB, PMUX_FUNC_UARTA);
+                       pinmux_tristate_disable(PINGRP_UAA);
+                       pinmux_tristate_disable(PINGRP_UAB);
+                       bad_config = 0;
+                       break;
+               case FUNCMUX_UART1_GPU:
+                       pinmux_set_func(PINGRP_GPU, PMUX_FUNC_UARTA);
+                       pinmux_tristate_disable(PINGRP_GPU);
+                       bad_config = 0;
+                       break;
+               case FUNCMUX_UART1_SDIO1:
+                       pinmux_set_func(PINGRP_SDIO1, PMUX_FUNC_UARTA);
+                       pinmux_tristate_disable(PINGRP_SDIO1);
+                       bad_config = 0;
+                       break;
+               }
+               if (!bad_config) {
+                       /*
+                        * Tegra appears to boot with function UARTA pre-
+                        * selected on mux group SDB. If two mux groups are
+                        * both set to the same function, it's unclear which
+                        * group's pins drive the RX signals into the HW.
+                        * For UARTA, SDB certainly overrides group IRTX in
+                        * practice. To solve this, configure some alternative
+                        * function on SDB to avoid the conflict. Also, tri-
+                        * state the group to avoid driving any signal onto it
+                        * until we know what's connected.
+                        */
+                       pinmux_tristate_enable(PINGRP_SDB);
+                       pinmux_set_func(PINGRP_SDB,  PMUX_FUNC_SDIO3);
+               }
+               break;
+
+       case PERIPH_ID_UART2:
+               if (config == FUNCMUX_UART2_IRDA) {
+                       pinmux_set_func(PINGRP_UAD, PMUX_FUNC_IRDA);
+                       pinmux_tristate_disable(PINGRP_UAD);
+               }
+               break;
+
+       case PERIPH_ID_UART4:
+               if (config == FUNCMUX_UART4_GMC) {
+                       pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);
+                       pinmux_tristate_disable(PINGRP_GMC);
+               }
+               break;
+
+       case PERIPH_ID_DVC_I2C:
+               /* there is only one selection, pinmux_config is ignored */
+               if (config == FUNCMUX_DVC_I2CP) {
+                       pinmux_set_func(PINGRP_I2CP, PMUX_FUNC_I2C);
+                       pinmux_tristate_disable(PINGRP_I2CP);
+               }
+               break;
+
+       case PERIPH_ID_I2C1:
+               /* support pinmux_config of 0 for now, */
+               if (config == FUNCMUX_I2C1_RM) {
+                       pinmux_set_func(PINGRP_RM, PMUX_FUNC_I2C);
+                       pinmux_tristate_disable(PINGRP_RM);
+               }
+               break;
+       case PERIPH_ID_I2C2: /* I2C2 */
+               switch (config) {
+               case FUNCMUX_I2C2_DDC:  /* DDC pin group, select I2C2 */
+                       pinmux_set_func(PINGRP_DDC, PMUX_FUNC_I2C2);
+                       /* PTA to HDMI */
+                       pinmux_set_func(PINGRP_PTA, PMUX_FUNC_HDMI);
+                       pinmux_tristate_disable(PINGRP_DDC);
+                       break;
+               case FUNCMUX_I2C2_PTA:  /* PTA pin group, select I2C2 */
+                       pinmux_set_func(PINGRP_PTA, PMUX_FUNC_I2C2);
+                       /* set DDC_SEL to RSVDx (RSVD2 works for now) */
+                       pinmux_set_func(PINGRP_DDC, PMUX_FUNC_RSVD2);
+                       pinmux_tristate_disable(PINGRP_PTA);
+                       bad_config = 0;
+                       break;
+               }
+               break;
+       case PERIPH_ID_I2C3: /* I2C3 */
+               /* support pinmux_config of 0 for now */
+               if (config == FUNCMUX_I2C3_DTF) {
+                       pinmux_set_func(PINGRP_DTF, PMUX_FUNC_I2C3);
+                       pinmux_tristate_disable(PINGRP_DTF);
+               }
+               break;
+
+       case PERIPH_ID_SDMMC1:
+               if (config == FUNCMUX_SDMMC1_SDIO1_4BIT) {
+                       pinmux_set_func(PINGRP_SDIO1, PMUX_FUNC_SDIO1);
+                       pinmux_tristate_disable(PINGRP_SDIO1);
+               }
+               break;
+
+       case PERIPH_ID_SDMMC2:
+               if (config == FUNCMUX_SDMMC2_DTA_DTD_8BIT) {
+                       pinmux_set_func(PINGRP_DTA, PMUX_FUNC_SDIO2);
+                       pinmux_set_func(PINGRP_DTD, PMUX_FUNC_SDIO2);
+
+                       pinmux_tristate_disable(PINGRP_DTA);
+                       pinmux_tristate_disable(PINGRP_DTD);
+               }
+               break;
+
+       case PERIPH_ID_SDMMC3:
+               switch (config) {
+               case FUNCMUX_SDMMC3_SDB_SLXA_8BIT:
+                       pinmux_set_func(PINGRP_SLXA, PMUX_FUNC_SDIO3);
+                       pinmux_set_func(PINGRP_SLXC, PMUX_FUNC_SDIO3);
+                       pinmux_set_func(PINGRP_SLXD, PMUX_FUNC_SDIO3);
+                       pinmux_set_func(PINGRP_SLXK, PMUX_FUNC_SDIO3);
+
+                       pinmux_tristate_disable(PINGRP_SLXA);
+                       pinmux_tristate_disable(PINGRP_SLXC);
+                       pinmux_tristate_disable(PINGRP_SLXD);
+                       pinmux_tristate_disable(PINGRP_SLXK);
+                       /* fall through */
+
+               case FUNCMUX_SDMMC3_SDB_4BIT:
+                       pinmux_set_func(PINGRP_SDB, PMUX_FUNC_SDIO3);
+                       pinmux_set_func(PINGRP_SDC, PMUX_FUNC_SDIO3);
+                       pinmux_set_func(PINGRP_SDD, PMUX_FUNC_SDIO3);
+
+                       pinmux_tristate_disable(PINGRP_SDB);
+                       pinmux_tristate_disable(PINGRP_SDC);
+                       pinmux_tristate_disable(PINGRP_SDD);
+                       bad_config = 0;
+                       break;
+               }
+               break;
+
+       case PERIPH_ID_SDMMC4:
+               switch (config) {
+               case FUNCMUX_SDMMC4_ATC_ATD_8BIT:
+                       pinmux_set_func(PINGRP_ATC, PMUX_FUNC_SDIO4);
+                       pinmux_set_func(PINGRP_ATD, PMUX_FUNC_SDIO4);
+
+                       pinmux_tristate_disable(PINGRP_ATC);
+                       pinmux_tristate_disable(PINGRP_ATD);
+                       break;
+
+               case FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT:
+                       pinmux_set_func(PINGRP_GME, PMUX_FUNC_SDIO4);
+                       pinmux_tristate_disable(PINGRP_GME);
+                       /* fall through */
+
+               case FUNCMUX_SDMMC4_ATB_GMA_4_BIT:
+                       pinmux_set_func(PINGRP_ATB, PMUX_FUNC_SDIO4);
+                       pinmux_set_func(PINGRP_GMA, PMUX_FUNC_SDIO4);
+
+                       pinmux_tristate_disable(PINGRP_ATB);
+                       pinmux_tristate_disable(PINGRP_GMA);
+                       bad_config = 0;
+                       break;
+               }
+               break;
+
+       case PERIPH_ID_KBC:
+               if (config == FUNCMUX_DEFAULT) {
+                       enum pmux_pingrp grp[] = {PINGRP_KBCA, PINGRP_KBCB,
+                               PINGRP_KBCC, PINGRP_KBCD, PINGRP_KBCE,
+                               PINGRP_KBCF};
+                       int i;
+
+                       for (i = 0; i < ARRAY_SIZE(grp); i++) {
+                               pinmux_tristate_disable(grp[i]);
+                               pinmux_set_func(grp[i], PMUX_FUNC_KBC);
+                               pinmux_set_pullupdown(grp[i], PMUX_PULL_UP);
+                       }
+               }
+               break;
+
+       case PERIPH_ID_USB2:
+               if (config == FUNCMUX_USB2_ULPI) {
+                       pinmux_set_func(PINGRP_UAA, PMUX_FUNC_ULPI);
+                       pinmux_set_func(PINGRP_UAB, PMUX_FUNC_ULPI);
+                       pinmux_set_func(PINGRP_UDA, PMUX_FUNC_ULPI);
+
+                       pinmux_tristate_disable(PINGRP_UAA);
+                       pinmux_tristate_disable(PINGRP_UAB);
+                       pinmux_tristate_disable(PINGRP_UDA);
+               }
+               break;
+
+       case PERIPH_ID_SPI1:
+               if (config == FUNCMUX_SPI1_GMC_GMD) {
+                       pinmux_set_func(PINGRP_GMC, PMUX_FUNC_SFLASH);
+                       pinmux_set_func(PINGRP_GMD, PMUX_FUNC_SFLASH);
+
+                       pinmux_tristate_disable(PINGRP_GMC);
+                       pinmux_tristate_disable(PINGRP_GMD);
+               }
+               break;
+
+       default:
+               debug("%s: invalid periph_id %d", __func__, id);
+               return -1;
+       }
+
+       if (bad_config) {
+               debug("%s: invalid config %d for periph_id %d", __func__,
+                     config, id);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/arch/arm/cpu/armv7/tegra20/lowlevel_init.S b/arch/arm/cpu/armv7/tegra20/lowlevel_init.S
new file mode 100644 (file)
index 0000000..d117f23
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * SoC-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>
+#include <linux/linkage.h>
+
+       .align  5
+ENTRY(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
+ENDPROC(reset_cpu)
diff --git a/arch/arm/cpu/armv7/tegra20/pinmux.c b/arch/arm/cpu/armv7/tegra20/pinmux.c
new file mode 100644 (file)
index 0000000..70e84df
--- /dev/null
@@ -0,0 +1,572 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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
+ */
+
+/* Tegra20 pin multiplexing functions */
+
+#include <asm/io.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/pinmux.h>
+#include <common.h>
+
+
+/*
+ * This defines the order of the pin mux control bits in the registers. For
+ * some reason there is no correspendence between the tristate, pin mux and
+ * pullup/pulldown registers.
+ */
+enum pmux_ctlid {
+       /* 0: APB_MISC_PP_PIN_MUX_CTL_A_0 */
+       MUXCTL_UAA,
+       MUXCTL_UAB,
+       MUXCTL_UAC,
+       MUXCTL_UAD,
+       MUXCTL_UDA,
+       MUXCTL_RESERVED5,
+       MUXCTL_ATE,
+       MUXCTL_RM,
+
+       MUXCTL_ATB,
+       MUXCTL_RESERVED9,
+       MUXCTL_ATD,
+       MUXCTL_ATC,
+       MUXCTL_ATA,
+       MUXCTL_KBCF,
+       MUXCTL_KBCE,
+       MUXCTL_SDMMC1,
+
+       /* 16: APB_MISC_PP_PIN_MUX_CTL_B_0 */
+       MUXCTL_GMA,
+       MUXCTL_GMC,
+       MUXCTL_HDINT,
+       MUXCTL_SLXA,
+       MUXCTL_OWC,
+       MUXCTL_SLXC,
+       MUXCTL_SLXD,
+       MUXCTL_SLXK,
+
+       MUXCTL_UCA,
+       MUXCTL_UCB,
+       MUXCTL_DTA,
+       MUXCTL_DTB,
+       MUXCTL_RESERVED28,
+       MUXCTL_DTC,
+       MUXCTL_DTD,
+       MUXCTL_DTE,
+
+       /* 32: APB_MISC_PP_PIN_MUX_CTL_C_0 */
+       MUXCTL_DDC,
+       MUXCTL_CDEV1,
+       MUXCTL_CDEV2,
+       MUXCTL_CSUS,
+       MUXCTL_I2CP,
+       MUXCTL_KBCA,
+       MUXCTL_KBCB,
+       MUXCTL_KBCC,
+
+       MUXCTL_IRTX,
+       MUXCTL_IRRX,
+       MUXCTL_DAP1,
+       MUXCTL_DAP2,
+       MUXCTL_DAP3,
+       MUXCTL_DAP4,
+       MUXCTL_GMB,
+       MUXCTL_GMD,
+
+       /* 48: APB_MISC_PP_PIN_MUX_CTL_D_0 */
+       MUXCTL_GME,
+       MUXCTL_GPV,
+       MUXCTL_GPU,
+       MUXCTL_SPDO,
+       MUXCTL_SPDI,
+       MUXCTL_SDB,
+       MUXCTL_SDC,
+       MUXCTL_SDD,
+
+       MUXCTL_SPIH,
+       MUXCTL_SPIG,
+       MUXCTL_SPIF,
+       MUXCTL_SPIE,
+       MUXCTL_SPID,
+       MUXCTL_SPIC,
+       MUXCTL_SPIB,
+       MUXCTL_SPIA,
+
+       /* 64: APB_MISC_PP_PIN_MUX_CTL_E_0 */
+       MUXCTL_LPW0,
+       MUXCTL_LPW1,
+       MUXCTL_LPW2,
+       MUXCTL_LSDI,
+       MUXCTL_LSDA,
+       MUXCTL_LSPI,
+       MUXCTL_LCSN,
+       MUXCTL_LDC,
+
+       MUXCTL_LSCK,
+       MUXCTL_LSC0,
+       MUXCTL_LSC1,
+       MUXCTL_LHS,
+       MUXCTL_LVS,
+       MUXCTL_LM0,
+       MUXCTL_LM1,
+       MUXCTL_LVP0,
+
+       /* 80: APB_MISC_PP_PIN_MUX_CTL_F_0 */
+       MUXCTL_LD0,
+       MUXCTL_LD1,
+       MUXCTL_LD2,
+       MUXCTL_LD3,
+       MUXCTL_LD4,
+       MUXCTL_LD5,
+       MUXCTL_LD6,
+       MUXCTL_LD7,
+
+       MUXCTL_LD8,
+       MUXCTL_LD9,
+       MUXCTL_LD10,
+       MUXCTL_LD11,
+       MUXCTL_LD12,
+       MUXCTL_LD13,
+       MUXCTL_LD14,
+       MUXCTL_LD15,
+
+       /* 96: APB_MISC_PP_PIN_MUX_CTL_G_0 */
+       MUXCTL_LD16,
+       MUXCTL_LD17,
+       MUXCTL_LHP1,
+       MUXCTL_LHP2,
+       MUXCTL_LVP1,
+       MUXCTL_LHP0,
+       MUXCTL_RESERVED102,
+       MUXCTL_LPP,
+
+       MUXCTL_LDI,
+       MUXCTL_PMC,
+       MUXCTL_CRTP,
+       MUXCTL_PTA,
+       MUXCTL_RESERVED108,
+       MUXCTL_KBCD,
+       MUXCTL_GPU7,
+       MUXCTL_DTF,
+
+       MUXCTL_NONE = -1,
+};
+
+/*
+ * And this defines the order of the pullup/pulldown controls which are again
+ * in a different order
+ */
+enum pmux_pullid {
+       /* 0: APB_MISC_PP_PULLUPDOWN_REG_A_0 */
+       PUCTL_ATA,
+       PUCTL_ATB,
+       PUCTL_ATC,
+       PUCTL_ATD,
+       PUCTL_ATE,
+       PUCTL_DAP1,
+       PUCTL_DAP2,
+       PUCTL_DAP3,
+
+       PUCTL_DAP4,
+       PUCTL_DTA,
+       PUCTL_DTB,
+       PUCTL_DTC,
+       PUCTL_DTD,
+       PUCTL_DTE,
+       PUCTL_DTF,
+       PUCTL_GPV,
+
+       /* 16: APB_MISC_PP_PULLUPDOWN_REG_B_0 */
+       PUCTL_RM,
+       PUCTL_I2CP,
+       PUCTL_PTA,
+       PUCTL_GPU7,
+       PUCTL_KBCA,
+       PUCTL_KBCB,
+       PUCTL_KBCC,
+       PUCTL_KBCD,
+
+       PUCTL_SPDI,
+       PUCTL_SPDO,
+       PUCTL_GPSLXAU,
+       PUCTL_CRTP,
+       PUCTL_SLXC,
+       PUCTL_SLXD,
+       PUCTL_SLXK,
+
+       /* 32: APB_MISC_PP_PULLUPDOWN_REG_C_0 */
+       PUCTL_CDEV1,
+       PUCTL_CDEV2,
+       PUCTL_SPIA,
+       PUCTL_SPIB,
+       PUCTL_SPIC,
+       PUCTL_SPID,
+       PUCTL_SPIE,
+       PUCTL_SPIF,
+
+       PUCTL_SPIG,
+       PUCTL_SPIH,
+       PUCTL_IRTX,
+       PUCTL_IRRX,
+       PUCTL_GME,
+       PUCTL_RESERVED45,
+       PUCTL_XM2D,
+       PUCTL_XM2C,
+
+       /* 48: APB_MISC_PP_PULLUPDOWN_REG_D_0 */
+       PUCTL_UAA,
+       PUCTL_UAB,
+       PUCTL_UAC,
+       PUCTL_UAD,
+       PUCTL_UCA,
+       PUCTL_UCB,
+       PUCTL_LD17,
+       PUCTL_LD19_18,
+
+       PUCTL_LD21_20,
+       PUCTL_LD23_22,
+       PUCTL_LS,
+       PUCTL_LC,
+       PUCTL_CSUS,
+       PUCTL_DDRC,
+       PUCTL_SDC,
+       PUCTL_SDD,
+
+       /* 64: APB_MISC_PP_PULLUPDOWN_REG_E_0 */
+       PUCTL_KBCF,
+       PUCTL_KBCE,
+       PUCTL_PMCA,
+       PUCTL_PMCB,
+       PUCTL_PMCC,
+       PUCTL_PMCD,
+       PUCTL_PMCE,
+       PUCTL_CK32,
+
+       PUCTL_UDA,
+       PUCTL_SDMMC1,
+       PUCTL_GMA,
+       PUCTL_GMB,
+       PUCTL_GMC,
+       PUCTL_GMD,
+       PUCTL_DDC,
+       PUCTL_OWC,
+
+       PUCTL_NONE = -1
+};
+
+struct tegra_pingroup_desc {
+       const char *name;
+       enum pmux_func funcs[4];
+       enum pmux_func func_safe;
+       enum pmux_vddio vddio;
+       enum pmux_ctlid ctl_id;
+       enum pmux_pullid pull_id;
+};
+
+
+/* Converts a pmux_pingrp number to a tristate register: 0=A, 1=B, 2=C, 3=D */
+#define TRISTATE_REG(pmux_pingrp) ((pmux_pingrp) >> 5)
+
+/* Mask value for a tristate (within TRISTATE_REG(id)) */
+#define TRISTATE_MASK(pmux_pingrp) (1 << ((pmux_pingrp) & 0x1f))
+
+/* Converts a PUCTL id to a pull register: 0=A, 1=B...4=E */
+#define PULL_REG(pmux_pullid) ((pmux_pullid) >> 4)
+
+/* Converts a PUCTL id to a shift position */
+#define PULL_SHIFT(pmux_pullid) ((pmux_pullid << 1) & 0x1f)
+
+/* Converts a MUXCTL id to a ctl register: 0=A, 1=B...6=G */
+#define MUXCTL_REG(pmux_ctlid) ((pmux_ctlid) >> 4)
+
+/* Converts a MUXCTL id to a shift position */
+#define MUXCTL_SHIFT(pmux_ctlid) ((pmux_ctlid << 1) & 0x1f)
+
+/* Convenient macro for defining pin group properties */
+#define PINALL(pg_name, vdd, f0, f1, f2, f3, f_safe, mux, pupd)                \
+       {                                               \
+               .vddio = PMUX_VDDIO_ ## vdd,            \
+               .funcs = {                              \
+                       PMUX_FUNC_ ## f0,                       \
+                       PMUX_FUNC_ ## f1,                       \
+                       PMUX_FUNC_ ## f2,                       \
+                       PMUX_FUNC_ ## f3,                       \
+               },                                      \
+               .func_safe = PMUX_FUNC_ ## f_safe,              \
+               .ctl_id = mux,                          \
+               .pull_id = pupd                         \
+       }
+
+/* A normal pin group where the mux name and pull-up name match */
+#define PIN(pg_name, vdd, f0, f1, f2, f3, f_safe)              \
+               PINALL(pg_name, vdd, f0, f1, f2, f3, f_safe,    \
+                       MUXCTL_ ## pg_name, PUCTL_ ## pg_name)
+
+/* A pin group where the pull-up name doesn't have a 1-1 mapping */
+#define PINP(pg_name, vdd, f0, f1, f2, f3, f_safe, pupd)               \
+               PINALL(pg_name, vdd, f0, f1, f2, f3, f_safe,    \
+                       MUXCTL_ ## pg_name, PUCTL_ ## pupd)
+
+/* A pin group number which is not used */
+#define PIN_RESERVED \
+       PIN(NONE, NONE, NONE, NONE, NONE, NONE, NONE)
+
+const struct tegra_pingroup_desc tegra_soc_pingroups[PINGRP_COUNT] = {
+       PIN(ATA,  NAND,  IDE,    NAND,   GMI,       RSVD,        IDE),
+       PIN(ATB,  NAND,  IDE,    NAND,   GMI,       SDIO4,       IDE),
+       PIN(ATC,  NAND,  IDE,    NAND,   GMI,       SDIO4,       IDE),
+       PIN(ATD,  NAND,  IDE,    NAND,   GMI,       SDIO4,       IDE),
+       PIN(CDEV1, AUDIO, OSC,   PLLA_OUT, PLLM_OUT1, AUDIO_SYNC, OSC),
+       PIN(CDEV2, AUDIO, OSC,   AHB_CLK, APB_CLK, PLLP_OUT4,    OSC),
+       PIN(CSUS, VI, PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK,
+               PLLC_OUT1),
+       PIN(DAP1, AUDIO, DAP1,   RSVD,   GMI,       SDIO2,       DAP1),
+
+       PIN(DAP2, AUDIO, DAP2,   TWC,    RSVD,      GMI,         DAP2),
+       PIN(DAP3, BB,    DAP3,   RSVD,   RSVD,      RSVD,        DAP3),
+       PIN(DAP4, UART,  DAP4,   RSVD,   GMI,       RSVD,        DAP4),
+       PIN(DTA,  VI,    RSVD,   SDIO2,  VI,        RSVD,        RSVD4),
+       PIN(DTB,  VI,    RSVD,   RSVD,   VI,        SPI1,        RSVD1),
+       PIN(DTC,  VI,    RSVD,   RSVD,   VI,        RSVD,        RSVD1),
+       PIN(DTD,  VI,    RSVD,   SDIO2,  VI,        RSVD,        RSVD1),
+       PIN(DTE,  VI,    RSVD,   RSVD,   VI,        SPI1,        RSVD1),
+
+       PINP(GPU, UART,  PWM,    UARTA,  GMI,       RSVD,        RSVD4,
+               GPSLXAU),
+       PIN(GPV,  SD,    PCIE,   RSVD,   RSVD,      RSVD,        PCIE),
+       PIN(I2CP, SYS,   I2C,    RSVD,   RSVD,      RSVD,        RSVD4),
+       PIN(IRTX, UART,  UARTA,  UARTB,  GMI,       SPI4,        UARTB),
+       PIN(IRRX, UART,  UARTA,  UARTB,  GMI,       SPI4,        UARTB),
+       PIN(KBCB, SYS,   KBC,    NAND,   SDIO2,     MIO,         KBC),
+       PIN(KBCA, SYS,   KBC,    NAND,   SDIO2,     EMC_TEST0_DLL, KBC),
+       PINP(PMC, SYS,   PWR_ON, PWR_INTR, RSVD,    RSVD,        PWR_ON, NONE),
+
+       PIN(PTA,  NAND,  I2C2,   HDMI,   GMI,       RSVD,        RSVD4),
+       PIN(RM,   UART,  I2C,    RSVD,   RSVD,      RSVD,        RSVD4),
+       PIN(KBCE, SYS,   KBC,    NAND,   OWR,       RSVD,        KBC),
+       PIN(KBCF, SYS,   KBC,    NAND,   TRACE,     MIO,         KBC),
+       PIN(GMA,  NAND,  UARTE,  SPI3,   GMI,       SDIO4,       SPI3),
+       PIN(GMC,  NAND,  UARTD,  SPI4,   GMI,       SFLASH,      SPI4),
+       PIN(SDMMC1, BB,  SDIO1,  RSVD,   UARTE,     UARTA,       RSVD2),
+       PIN(OWC,  SYS,   OWR,    RSVD,   RSVD,      RSVD,        OWR),
+
+       PIN(GME,  NAND,  RSVD,   DAP5,   GMI,       SDIO4,       GMI),
+       PIN(SDC,  SD,    PWM,    TWC,    SDIO3,     SPI3,        TWC),
+       PIN(SDD,  SD,    UARTA,  PWM,    SDIO3,     SPI3,        PWM),
+       PIN_RESERVED,
+       PINP(SLXA, SD,   PCIE,   SPI4,   SDIO3,     SPI2,        PCIE, CRTP),
+       PIN(SLXC, SD,    SPDIF,  SPI4,   SDIO3,     SPI2,        SPI4),
+       PIN(SLXD, SD,    SPDIF,  SPI4,   SDIO3,     SPI2,        SPI4),
+       PIN(SLXK, SD,    PCIE,   SPI4,   SDIO3,     SPI2,        PCIE),
+
+       PIN(SPDI, AUDIO, SPDIF,  RSVD,   I2C,       SDIO2,       RSVD2),
+       PIN(SPDO, AUDIO, SPDIF,  RSVD,   I2C,       SDIO2,       RSVD2),
+       PIN(SPIA, AUDIO, SPI1,   SPI2,   SPI3,      GMI,         GMI),
+       PIN(SPIB, AUDIO, SPI1,   SPI2,   SPI3,      GMI,         GMI),
+       PIN(SPIC, AUDIO, SPI1,   SPI2,   SPI3,      GMI,         GMI),
+       PIN(SPID, AUDIO, SPI2,   SPI1,   SPI2_ALT,  GMI,         GMI),
+       PIN(SPIE, AUDIO, SPI2,   SPI1,   SPI2_ALT,  GMI,         GMI),
+       PIN(SPIF, AUDIO, SPI3,   SPI1,   SPI2,      RSVD,        RSVD4),
+
+       PIN(SPIG, AUDIO, SPI3,   SPI2,   SPI2_ALT,  I2C,         SPI2_ALT),
+       PIN(SPIH, AUDIO, SPI3,   SPI2,   SPI2_ALT,  I2C,         SPI2_ALT),
+       PIN(UAA,  BB,    SPI3,   MIPI_HS, UARTA,    ULPI,        MIPI_HS),
+       PIN(UAB,  BB,    SPI2,   MIPI_HS, UARTA,    ULPI,        MIPI_HS),
+       PIN(UAC,  BB,    OWR,    RSVD,   RSVD,      RSVD,        RSVD4),
+       PIN(UAD,  UART,  IRDA,   SPDIF,  UARTA,     SPI4,        SPDIF),
+       PIN(UCA,  UART,  UARTC,  RSVD,   GMI,       RSVD,        RSVD4),
+       PIN(UCB,  UART,  UARTC,  PWM,    GMI,       RSVD,        RSVD4),
+
+       PIN_RESERVED,
+       PIN(ATE,  NAND,  IDE,    NAND,   GMI,       RSVD,        IDE),
+       PIN(KBCC, SYS,   KBC,    NAND,   TRACE,     EMC_TEST1_DLL, KBC),
+       PIN_RESERVED,
+       PIN_RESERVED,
+       PIN(GMB,  NAND,  IDE,    NAND,   GMI,       GMI_INT,     GMI),
+       PIN(GMD,  NAND,  RSVD,   NAND,   GMI,       SFLASH,      GMI),
+       PIN(DDC,  LCD,   I2C2,   RSVD,   RSVD,      RSVD,        RSVD4),
+
+       /* 64 */
+       PINP(LD0,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD1,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD2,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD3,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD4,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD5,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD6,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD7,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+
+       PINP(LD8,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD9,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD10, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD11, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD12, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD13, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD14, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD15, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+
+       PINP(LD16, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LD17),
+       PINP(LD17, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD17),
+       PINP(LHP0, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD21_20),
+       PINP(LHP1, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD19_18),
+       PINP(LHP2, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD19_18),
+       PINP(LVP0, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LC),
+       PINP(LVP1, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD21_20),
+       PINP(HDINT, LCD, HDMI,   RSVD,   RSVD,      RSVD,     HDMI , LC),
+
+       PINP(LM0,  LCD,  DISPA,  DISPB,  SPI3,      RSVD,     RSVD4, LC),
+       PINP(LM1,  LCD,  DISPA,  DISPB,  RSVD,      CRT,      RSVD3, LC),
+       PINP(LVS,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LC),
+       PINP(LSC0, LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LC),
+       PINP(LSC1, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
+       PINP(LSCK, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
+       PINP(LDC,  LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LS),
+       PINP(LCSN, LCD,  DISPA,  DISPB,  SPI3,      RSVD,     RSVD4, LS),
+
+       /* 96 */
+       PINP(LSPI, LCD,  DISPA,  DISPB,  XIO,       HDMI,     DISPA, LC),
+       PINP(LSDA, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
+       PINP(LSDI, LCD,  DISPA,  DISPB,  SPI3,      RSVD,     DISPA, LS),
+       PINP(LPW0, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
+       PINP(LPW1, LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LS),
+       PINP(LPW2, LCD,  DISPA,  DISPB,  SPI3,      HDMI,     DISPA, LS),
+       PINP(LDI,  LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD23_22),
+       PINP(LHS,  LCD,  DISPA,  DISPB,  XIO,       RSVD,     RSVD4, LC),
+
+       PINP(LPP,  LCD,  DISPA,  DISPB,  RSVD,      RSVD,     RSVD4, LD23_22),
+       PIN_RESERVED,
+       PIN(KBCD,  SYS,  KBC,    NAND,   SDIO2,     MIO,      KBC),
+       PIN(GPU7,  SYS,  RTCK,   RSVD,   RSVD,      RSVD,     RTCK),
+       PIN(DTF,   VI,   I2C3,   RSVD,   VI,        RSVD,     RSVD4),
+       PIN(UDA,   BB,   SPI1,   RSVD,   UARTD,     ULPI,     RSVD2),
+       PIN(CRTP,  LCD,  CRT,    RSVD,   RSVD,      RSVD,     RSVD),
+       PINP(SDB,  SD,   UARTA,  PWM,    SDIO3,     SPI2,     PWM,   NONE),
+
+       /* these pin groups only have pullup and pull down control */
+       PINALL(CK32,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(DDRC,  DDR,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(PMCA,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(PMCB,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(PMCC,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(PMCD,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(PMCE,  SYS,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(XM2C,  DDR,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+       PINALL(XM2D,  DDR,   RSVD, RSVD, RSVD, RSVD,  RSVD, MUXCTL_NONE,
+               PUCTL_NONE),
+};
+
+void pinmux_set_tristate(enum pmux_pingrp pin, int enable)
+{
+       struct pmux_tri_ctlr *pmt =
+                       (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+       u32 *tri = &pmt->pmt_tri[TRISTATE_REG(pin)];
+       u32 reg;
+
+       reg = readl(tri);
+       if (enable)
+               reg |= TRISTATE_MASK(pin);
+       else
+               reg &= ~TRISTATE_MASK(pin);
+       writel(reg, tri);
+}
+
+void pinmux_tristate_enable(enum pmux_pingrp pin)
+{
+       pinmux_set_tristate(pin, 1);
+}
+
+void pinmux_tristate_disable(enum pmux_pingrp pin)
+{
+       pinmux_set_tristate(pin, 0);
+}
+
+void pinmux_set_pullupdown(enum pmux_pingrp pin, enum pmux_pull pupd)
+{
+       struct pmux_tri_ctlr *pmt =
+                       (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+       enum pmux_pullid pull_id = tegra_soc_pingroups[pin].pull_id;
+       u32 *pull = &pmt->pmt_pull[PULL_REG(pull_id)];
+       u32 mask_bit;
+       u32 reg;
+       mask_bit = PULL_SHIFT(pull_id);
+
+       reg = readl(pull);
+       reg &= ~(0x3 << mask_bit);
+       reg |= pupd << mask_bit;
+       writel(reg, pull);
+}
+
+void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func)
+{
+       struct pmux_tri_ctlr *pmt =
+                       (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+       enum pmux_ctlid mux_id = tegra_soc_pingroups[pin].ctl_id;
+       u32 *muxctl = &pmt->pmt_ctl[MUXCTL_REG(mux_id)];
+       u32 mask_bit;
+       int i, mux = -1;
+       u32 reg;
+
+       assert(pmux_func_isvalid(func));
+
+       /* Handle special values */
+       if (func >= PMUX_FUNC_RSVD1) {
+               mux = (func - PMUX_FUNC_RSVD1) & 0x3;
+       } else {
+               /* Search for the appropriate function */
+               for (i = 0; i < 4; i++) {
+                       if (tegra_soc_pingroups[pin].funcs[i] == func) {
+                               mux = i;
+                               break;
+                       }
+               }
+       }
+       assert(mux != -1);
+
+       mask_bit = MUXCTL_SHIFT(mux_id);
+       reg = readl(muxctl);
+       reg &= ~(0x3 << mask_bit);
+       reg |= mux << mask_bit;
+       writel(reg, muxctl);
+}
+
+void pinmux_config_pingroup(struct pingroup_config *config)
+{
+       enum pmux_pingrp pin = config->pingroup;
+
+       pinmux_set_func(pin, config->func);
+       pinmux_set_pullupdown(pin, config->pull);
+       pinmux_set_tristate(pin, config->tristate);
+}
+
+void pinmux_config_table(struct pingroup_config *config, int len)
+{
+       int i;
+
+       for (i = 0; i < len; i++)
+               pinmux_config_pingroup(&config[i]);
+}
diff --git a/arch/arm/cpu/armv7/tegra20/pmu.c b/arch/arm/cpu/armv7/tegra20/pmu.c
new file mode 100644 (file)
index 0000000..53505e9
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (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 <tps6586x.h>
+#include <asm/io.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/tegra_i2c.h>
+#include <asm/arch/sys_proto.h>
+
+#define VDD_CORE_NOMINAL_T25   0x17    /* 1.3v */
+#define VDD_CPU_NOMINAL_T25    0x10    /* 1.125v */
+
+#define VDD_CORE_NOMINAL_T20   0x16    /* 1.275v */
+#define VDD_CPU_NOMINAL_T20    0x0f    /* 1.1v */
+
+#define VDD_RELATION           0x02    /*  50mv */
+#define VDD_TRANSITION_STEP    0x06    /* 150mv */
+#define VDD_TRANSITION_RATE    0x06    /* 3.52mv/us */
+
+int pmu_set_nominal(void)
+{
+       int core, cpu, bus;
+
+       /* by default, the table has been filled with T25 settings */
+       switch (tegra_get_chip_type()) {
+       case TEGRA_SOC_T20:
+               core = VDD_CORE_NOMINAL_T20;
+               cpu = VDD_CPU_NOMINAL_T20;
+               break;
+       case TEGRA_SOC_T25:
+               core = VDD_CORE_NOMINAL_T25;
+               cpu = VDD_CPU_NOMINAL_T25;
+               break;
+       default:
+               debug("%s: Unknown chip type\n", __func__);
+               return -1;
+       }
+
+       bus = tegra_i2c_get_dvc_bus_num();
+       if (bus == -1) {
+               debug("%s: Cannot find DVC I2C bus\n", __func__);
+               return -1;
+       }
+       tps6586x_init(bus);
+       tps6586x_set_pwm_mode(TPS6586X_PWM_SM1);
+       return tps6586x_adjust_sm0_sm1(core, cpu, VDD_TRANSITION_STEP,
+                               VDD_TRANSITION_RATE, VDD_RELATION);
+}
diff --git a/arch/arm/cpu/armv7/tegra20/sys_info.c b/arch/arm/cpu/armv7/tegra20/sys_info.c
new file mode 100644 (file)
index 0000000..1a0bb56
--- /dev/null
@@ -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("TEGRA20\n");
+
+       /* TBD: Add printf of major/minor rev info, stepping, etc. */
+       return 0;
+}
+#endif /* CONFIG_DISPLAY_CPUINFO */
diff --git a/arch/arm/cpu/armv7/tegra20/timer.c b/arch/arm/cpu/armv7/tegra20/timer.c
new file mode 100644 (file)
index 0000000..562e414
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * (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/tegra20.h>
+#include <asm/arch/timer.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* counter runs at 1MHz */
+#define TIMER_CLK      1000000
+#define TIMER_LOAD_VAL 0xffffffff
+
+/* timer without interrupts */
+ulong get_timer(ulong base)
+{
+       return get_timer_masked() - base;
+}
+
+/* delay x useconds */
+void __udelay(unsigned long usec)
+{
+       long tmo = usec * (TIMER_CLK / 1000) / 1000;
+       unsigned long now, last = timer_get_us();
+
+       while (tmo > 0) {
+               now = timer_get_us();
+               if (last > now) /* count up timer overflow */
+                       tmo -= TIMER_LOAD_VAL - last + now;
+               else
+                       tmo -= now - last;
+               last = now;
+       }
+}
+
+ulong get_timer_masked(void)
+{
+       ulong now;
+
+       /* current tick value */
+       now = timer_get_us() / (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;
+}
+
+unsigned long timer_get_us(void)
+{
+       struct timerus *timer_base = (struct timerus *)NV_PA_TMRUS_BASE;
+
+       return readl(&timer_base->cntr_1us);
+}
diff --git a/arch/arm/cpu/armv7/tegra20/usb.c b/arch/arm/cpu/armv7/tegra20/usb.c
new file mode 100644 (file)
index 0000000..178bb13
--- /dev/null
@@ -0,0 +1,460 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (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-generic/gpio.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/uart.h>
+#include <asm/arch/usb.h>
+#include <libfdt.h>
+#include <fdtdec.h>
+
+enum {
+       USB_PORTS_MAX   = 4,                    /* Maximum ports we allow */
+};
+
+/* Parameters we need for USB */
+enum {
+       PARAM_DIVN,                     /* PLL FEEDBACK DIVIDer */
+       PARAM_DIVM,                     /* PLL INPUT DIVIDER */
+       PARAM_DIVP,                     /* POST DIVIDER (2^N) */
+       PARAM_CPCON,                    /* BASE PLLC CHARGE Pump setup ctrl */
+       PARAM_LFCON,                    /* BASE PLLC LOOP FILter setup ctrl */
+       PARAM_ENABLE_DELAY_COUNT,       /* PLL-U Enable Delay Count */
+       PARAM_STABLE_COUNT,             /* PLL-U STABLE count */
+       PARAM_ACTIVE_DELAY_COUNT,       /* PLL-U Active delay count */
+       PARAM_XTAL_FREQ_COUNT,          /* PLL-U XTAL frequency count */
+       PARAM_DEBOUNCE_A_TIME,          /* 10MS DELAY for BIAS_DEBOUNCE_A */
+       PARAM_BIAS_TIME,                /* 20US DELAY AFter bias cell op */
+
+       PARAM_COUNT
+};
+
+/* Possible port types (dual role mode) */
+enum dr_mode {
+       DR_MODE_NONE = 0,
+       DR_MODE_HOST,           /* supports host operation */
+       DR_MODE_DEVICE,         /* supports device operation */
+       DR_MODE_OTG,            /* supports both */
+};
+
+/* Information about a USB port */
+struct fdt_usb {
+       struct usb_ctlr *reg;   /* address of registers in physical memory */
+       unsigned utmi:1;        /* 1 if port has external tranceiver, else 0 */
+       unsigned enabled:1;     /* 1 to enable, 0 to disable */
+       unsigned has_legacy_mode:1; /* 1 if this port has legacy mode */
+       enum dr_mode dr_mode;   /* dual role mode */
+       enum periph_id periph_id;/* peripheral id */
+       struct fdt_gpio_state vbus_gpio;        /* GPIO for vbus enable */
+};
+
+static struct fdt_usb port[USB_PORTS_MAX];     /* List of valid USB ports */
+static unsigned port_count;                    /* Number of available ports */
+static int port_current;                       /* Current port (-1 = none) */
+
+/*
+ * This table has USB timing parameters for each Oscillator frequency we
+ * support. There are four sets of values:
+ *
+ * 1. PLLU configuration information (reference clock is osc/clk_m and
+ * PLLU-FOs are fixed at 12MHz/60MHz/480MHz).
+ *
+ *  Reference frequency     13.0MHz      19.2MHz      12.0MHz      26.0MHz
+ *  ----------------------------------------------------------------------
+ *      DIVN                960 (0x3c0)  200 (0c8)    960 (3c0h)   960 (3c0)
+ *      DIVM                13 (0d)      4 (04)       12 (0c)      26 (1a)
+ * Filter frequency (MHz)   1            4.8          6            2
+ * CPCON                    1100b        0011b        1100b        1100b
+ * LFCON0                   0            0            0            0
+ *
+ * 2. PLL CONFIGURATION & PARAMETERS for different clock generators:
+ *
+ * Reference frequency     13.0MHz         19.2MHz         12.0MHz     26.0MHz
+ * ---------------------------------------------------------------------------
+ * PLLU_ENABLE_DLY_COUNT   02 (0x02)       03 (03)         02 (02)     04 (04)
+ * PLLU_STABLE_COUNT       51 (33)         75 (4B)         47 (2F)    102 (66)
+ * PLL_ACTIVE_DLY_COUNT    05 (05)         06 (06)         04 (04)     09 (09)
+ * XTAL_FREQ_COUNT        127 (7F)        187 (BB)        118 (76)    254 (FE)
+ *
+ * 3. Debounce values IdDig, Avalid, Bvalid, VbusValid, VbusWakeUp, and
+ * SessEnd. Each of these signals have their own debouncer and for each of
+ * those one out of two debouncing times can be chosen (BIAS_DEBOUNCE_A or
+ * BIAS_DEBOUNCE_B).
+ *
+ * The values of DEBOUNCE_A and DEBOUNCE_B are calculated as follows:
+ *    0xffff -> No debouncing at all
+ *    <n> ms = <n> *1000 / (1/19.2MHz) / 4
+ *
+ * So to program a 1 ms debounce for BIAS_DEBOUNCE_A, we have:
+ * BIAS_DEBOUNCE_A[15:0] = 1000 * 19.2 / 4  = 4800 = 0x12c0
+ *
+ * We need to use only DebounceA for BOOTROM. We don't need the DebounceB
+ * values, so we can keep those to default.
+ *
+ * 4. The 20 microsecond delay after bias cell operation.
+ */
+static const unsigned usb_pll[CLOCK_OSC_FREQ_COUNT][PARAM_COUNT] = {
+       /* DivN, DivM, DivP, CPCON, LFCON, Delays             Debounce, Bias */
+       { 0x3C0, 0x0D, 0x00, 0xC,   0,  0x02, 0x33, 0x05, 0x7F, 0x7EF4, 5 },
+       { 0x0C8, 0x04, 0x00, 0x3,   0,  0x03, 0x4B, 0x06, 0xBB, 0xBB80, 7 },
+       { 0x3C0, 0x0C, 0x00, 0xC,   0,  0x02, 0x2F, 0x04, 0x76, 0x7530, 5 },
+       { 0x3C0, 0x1A, 0x00, 0xC,   0,  0x04, 0x66, 0x09, 0xFE, 0xFDE8, 9 }
+};
+
+/* UTMIP Idle Wait Delay */
+static const u8 utmip_idle_wait_delay = 17;
+
+/* UTMIP Elastic limit */
+static const u8 utmip_elastic_limit = 16;
+
+/* UTMIP High Speed Sync Start Delay */
+static const u8 utmip_hs_sync_start_delay = 9;
+
+/* Put the port into host mode (this only works for OTG ports) */
+static void set_host_mode(struct fdt_usb *config)
+{
+       if (config->dr_mode == DR_MODE_OTG) {
+               /* Check whether remote host from USB1 is driving VBus */
+               if (readl(&config->reg->phy_vbus_sensors) & VBUS_VLD_STS)
+                       return;
+
+               /*
+                * If not driving, we set the GPIO to enable VBUS. We assume
+                * that the pinmux is set up correctly for this.
+                */
+               if (fdt_gpio_isvalid(&config->vbus_gpio)) {
+                       fdtdec_setup_gpio(&config->vbus_gpio);
+                       gpio_direction_output(config->vbus_gpio.gpio, 1);
+                       debug("set_host_mode: GPIO %d high\n",
+                             config->vbus_gpio.gpio);
+               }
+       }
+}
+
+void usbf_reset_controller(struct fdt_usb *config, struct usb_ctlr *usbctlr)
+{
+       /* Reset the USB controller with 2us delay */
+       reset_periph(config->periph_id, 2);
+
+       /*
+        * Set USB1_NO_LEGACY_MODE to 1, Registers are accessible under
+        * base address
+        */
+       if (config->has_legacy_mode)
+               setbits_le32(&usbctlr->usb1_legacy_ctrl, USB1_NO_LEGACY_MODE);
+
+       /* Put UTMIP1/3 in reset */
+       setbits_le32(&usbctlr->susp_ctrl, UTMIP_RESET);
+
+       /* Enable the UTMIP PHY */
+       if (config->utmi)
+               setbits_le32(&usbctlr->susp_ctrl, UTMIP_PHY_ENB);
+
+       /*
+        * TODO: where do we take the USB1 out of reset? The old code would
+        * take USB3 out of reset, but not USB1. This code doesn't do either.
+        */
+}
+
+/* set up the USB controller with the parameters provided */
+static int init_usb_controller(struct fdt_usb *config,
+                               struct usb_ctlr *usbctlr, const u32 timing[])
+{
+       u32 val;
+       int loop_count;
+
+       clock_enable(config->periph_id);
+
+       /* Reset the usb controller */
+       usbf_reset_controller(config, usbctlr);
+
+       /* Stop crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN low */
+       clrbits_le32(&usbctlr->utmip_misc_cfg1, UTMIP_PHY_XTAL_CLOCKEN);
+
+       /* Follow the crystal clock disable by >100ns delay */
+       udelay(1);
+
+       /*
+        * To Use the A Session Valid for cable detection logic, VBUS_WAKEUP
+        * mux must be switched to actually use a_sess_vld threshold.
+        */
+       if (fdt_gpio_isvalid(&config->vbus_gpio)) {
+               clrsetbits_le32(&usbctlr->usb1_legacy_ctrl,
+                       VBUS_SENSE_CTL_MASK,
+                       VBUS_SENSE_CTL_A_SESS_VLD << VBUS_SENSE_CTL_SHIFT);
+       }
+
+       /*
+        * PLL Delay CONFIGURATION settings. The following parameters control
+        * the bring up of the plls.
+        */
+       val = readl(&usbctlr->utmip_misc_cfg1);
+       clrsetbits_le32(&val, UTMIP_PLLU_STABLE_COUNT_MASK,
+               timing[PARAM_STABLE_COUNT] << UTMIP_PLLU_STABLE_COUNT_SHIFT);
+       clrsetbits_le32(&val, UTMIP_PLL_ACTIVE_DLY_COUNT_MASK,
+               timing[PARAM_ACTIVE_DELAY_COUNT] <<
+                       UTMIP_PLL_ACTIVE_DLY_COUNT_SHIFT);
+       writel(val, &usbctlr->utmip_misc_cfg1);
+
+       /* Set PLL enable delay count and crystal frequency count */
+       val = readl(&usbctlr->utmip_pll_cfg1);
+       clrsetbits_le32(&val, UTMIP_PLLU_ENABLE_DLY_COUNT_MASK,
+               timing[PARAM_ENABLE_DELAY_COUNT] <<
+                       UTMIP_PLLU_ENABLE_DLY_COUNT_SHIFT);
+       clrsetbits_le32(&val, UTMIP_XTAL_FREQ_COUNT_MASK,
+               timing[PARAM_XTAL_FREQ_COUNT] <<
+                       UTMIP_XTAL_FREQ_COUNT_SHIFT);
+       writel(val, &usbctlr->utmip_pll_cfg1);
+
+       /* Setting the tracking length time */
+       clrsetbits_le32(&usbctlr->utmip_bias_cfg1,
+               UTMIP_BIAS_PDTRK_COUNT_MASK,
+               timing[PARAM_BIAS_TIME] << UTMIP_BIAS_PDTRK_COUNT_SHIFT);
+
+       /* Program debounce time for VBUS to become valid */
+       clrsetbits_le32(&usbctlr->utmip_debounce_cfg0,
+               UTMIP_DEBOUNCE_CFG0_MASK,
+               timing[PARAM_DEBOUNCE_A_TIME] << UTMIP_DEBOUNCE_CFG0_SHIFT);
+
+       setbits_le32(&usbctlr->utmip_tx_cfg0, UTMIP_FS_PREAMBLE_J);
+
+       /* Disable battery charge enabling bit */
+       setbits_le32(&usbctlr->utmip_bat_chrg_cfg0, UTMIP_PD_CHRG);
+
+       clrbits_le32(&usbctlr->utmip_xcvr_cfg0, UTMIP_XCVR_LSBIAS_SE);
+       setbits_le32(&usbctlr->utmip_spare_cfg0, FUSE_SETUP_SEL);
+
+       /*
+        * Configure the UTMIP_IDLE_WAIT and UTMIP_ELASTIC_LIMIT
+        * Setting these fields, together with default values of the
+        * other fields, results in programming the registers below as
+        * follows:
+        *         UTMIP_HSRX_CFG0 = 0x9168c000
+        *         UTMIP_HSRX_CFG1 = 0x13
+        */
+
+       /* Set PLL enable delay count and Crystal frequency count */
+       val = readl(&usbctlr->utmip_hsrx_cfg0);
+       clrsetbits_le32(&val, UTMIP_IDLE_WAIT_MASK,
+               utmip_idle_wait_delay << UTMIP_IDLE_WAIT_SHIFT);
+       clrsetbits_le32(&val, UTMIP_ELASTIC_LIMIT_MASK,
+               utmip_elastic_limit << UTMIP_ELASTIC_LIMIT_SHIFT);
+       writel(val, &usbctlr->utmip_hsrx_cfg0);
+
+       /* Configure the UTMIP_HS_SYNC_START_DLY */
+       clrsetbits_le32(&usbctlr->utmip_hsrx_cfg1,
+               UTMIP_HS_SYNC_START_DLY_MASK,
+               utmip_hs_sync_start_delay << UTMIP_HS_SYNC_START_DLY_SHIFT);
+
+       /* Preceed the crystal clock disable by >100ns delay. */
+       udelay(1);
+
+       /* Resuscitate crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN */
+       setbits_le32(&usbctlr->utmip_misc_cfg1, UTMIP_PHY_XTAL_CLOCKEN);
+
+       /* Finished the per-controller init. */
+
+       /* De-assert UTMIP_RESET to bring out of reset. */
+       clrbits_le32(&usbctlr->susp_ctrl, UTMIP_RESET);
+
+       /* Wait for the phy clock to become valid in 100 ms */
+       for (loop_count = 100000; loop_count != 0; loop_count--) {
+               if (readl(&usbctlr->susp_ctrl) & USB_PHY_CLK_VALID)
+                       break;
+               udelay(1);
+       }
+       if (!loop_count)
+               return -1;
+
+       return 0;
+}
+
+static void power_up_port(struct usb_ctlr *usbctlr)
+{
+       /* Deassert power down state */
+       clrbits_le32(&usbctlr->utmip_xcvr_cfg0, UTMIP_FORCE_PD_POWERDOWN |
+               UTMIP_FORCE_PD2_POWERDOWN | UTMIP_FORCE_PDZI_POWERDOWN);
+       clrbits_le32(&usbctlr->utmip_xcvr_cfg1, UTMIP_FORCE_PDDISC_POWERDOWN |
+               UTMIP_FORCE_PDCHRP_POWERDOWN | UTMIP_FORCE_PDDR_POWERDOWN);
+}
+
+static void config_clock(const u32 timing[])
+{
+       clock_start_pll(CLOCK_ID_USB,
+               timing[PARAM_DIVM], timing[PARAM_DIVN], timing[PARAM_DIVP],
+               timing[PARAM_CPCON], timing[PARAM_LFCON]);
+}
+
+/**
+ * Add a new USB port to the list of available ports.
+ *
+ * @param config       USB port configuration
+ * @return 0 if ok, -1 if error (too many ports)
+ */
+static int add_port(struct fdt_usb *config, const u32 timing[])
+{
+       struct usb_ctlr *usbctlr = config->reg;
+
+       if (port_count == USB_PORTS_MAX) {
+               debug("tegrausb: Cannot register more than %d ports\n",
+                     USB_PORTS_MAX);
+               return -1;
+       }
+       if (init_usb_controller(config, usbctlr, timing)) {
+               debug("tegrausb: Cannot init port\n");
+               return -1;
+       }
+       if (config->utmi) {
+               /* Disable ICUSB FS/LS transceiver */
+               clrbits_le32(&usbctlr->icusb_ctrl, IC_ENB1);
+
+               /* Select UTMI parallel interface */
+               clrsetbits_le32(&usbctlr->port_sc1, PTS_MASK,
+                               PTS_UTMI << PTS_SHIFT);
+               clrbits_le32(&usbctlr->port_sc1, STS);
+               power_up_port(usbctlr);
+       }
+       port[port_count++] = *config;
+
+       return 0;
+}
+
+int tegrausb_start_port(unsigned portnum, u32 *hccr, u32 *hcor)
+{
+       struct usb_ctlr *usbctlr;
+
+       if (portnum >= port_count)
+               return -1;
+       tegrausb_stop_port();
+       set_host_mode(&port[portnum]);
+
+       usbctlr = port[portnum].reg;
+       *hccr = (u32)&usbctlr->cap_length;
+       *hcor = (u32)&usbctlr->usb_cmd;
+       port_current = portnum;
+       return 0;
+}
+
+int tegrausb_stop_port(void)
+{
+       struct usb_ctlr *usbctlr;
+
+       if (port_current == -1)
+               return -1;
+
+       usbctlr = port[port_current].reg;
+
+       /* Stop controller */
+       writel(0, &usbctlr->usb_cmd);
+       udelay(1000);
+
+       /* Initiate controller reset */
+       writel(2, &usbctlr->usb_cmd);
+       udelay(1000);
+       port_current = -1;
+       return 0;
+}
+
+int fdt_decode_usb(const void *blob, int node, unsigned osc_frequency_mhz,
+                  struct fdt_usb *config)
+{
+       const char *phy, *mode;
+
+       config->reg = (struct usb_ctlr *)fdtdec_get_addr(blob, node, "reg");
+       mode = fdt_getprop(blob, node, "dr_mode", NULL);
+       if (mode) {
+               if (0 == strcmp(mode, "host"))
+                       config->dr_mode = DR_MODE_HOST;
+               else if (0 == strcmp(mode, "peripheral"))
+                       config->dr_mode = DR_MODE_DEVICE;
+               else if (0 == strcmp(mode, "otg"))
+                       config->dr_mode = DR_MODE_OTG;
+               else {
+                       debug("%s: Cannot decode dr_mode '%s'\n", __func__,
+                             mode);
+                       return -FDT_ERR_NOTFOUND;
+               }
+       } else {
+               config->dr_mode = DR_MODE_HOST;
+       }
+
+       phy = fdt_getprop(blob, node, "phy_type", NULL);
+       config->utmi = phy && 0 == strcmp("utmi", phy);
+       config->enabled = fdtdec_get_is_enabled(blob, node);
+       config->has_legacy_mode = fdtdec_get_bool(blob, node,
+                                                 "nvidia,has-legacy-mode");
+       config->periph_id = clock_decode_periph_id(blob, node);
+       if (config->periph_id == PERIPH_ID_NONE) {
+               debug("%s: Missing/invalid peripheral ID\n", __func__);
+               return -FDT_ERR_NOTFOUND;
+       }
+       fdtdec_decode_gpio(blob, node, "nvidia,vbus-gpio", &config->vbus_gpio);
+       debug("enabled=%d, legacy_mode=%d, utmi=%d, periph_id=%d, vbus=%d, "
+             "dr_mode=%d\n", config->enabled, config->has_legacy_mode,
+             config->utmi, config->periph_id, config->vbus_gpio.gpio,
+             config->dr_mode);
+
+       return 0;
+}
+
+int board_usb_init(const void *blob)
+{
+       struct fdt_usb config;
+       unsigned osc_freq = clock_get_rate(CLOCK_ID_OSC);
+       enum clock_osc_freq freq;
+       int node_list[USB_PORTS_MAX];
+       int node, count, i;
+
+       /* Set up the USB clocks correctly based on our oscillator frequency */
+       freq = clock_get_osc_freq();
+       config_clock(usb_pll[freq]);
+
+       /* count may return <0 on error */
+       count = fdtdec_find_aliases_for_id(blob, "usb",
+                       COMPAT_NVIDIA_TEGRA20_USB, node_list, USB_PORTS_MAX);
+       for (i = 0; i < count; i++) {
+               debug("USB %d: ", i);
+               node = node_list[i];
+               if (!node)
+                       continue;
+               if (fdt_decode_usb(blob, node, osc_freq, &config)) {
+                       debug("Cannot decode USB node %s\n",
+                             fdt_get_name(blob, node, NULL));
+                       return -1;
+               }
+
+               if (add_port(&config, usb_pll[freq]))
+                       return -1;
+               set_host_mode(&config);
+       }
+       port_current = -1;
+
+       return 0;
+}
diff --git a/arch/arm/cpu/armv7/tegra20/warmboot.c b/arch/arm/cpu/armv7/tegra20/warmboot.c
new file mode 100644 (file)
index 0000000..809ea01
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+ * (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/errno.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/fuse.h>
+#include <asm/arch/emc.h>
+#include <asm/arch/gp_padctrl.h>
+#include <asm/arch/warmboot.h>
+#include <asm/arch/sdram_param.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifndef CONFIG_TEGRA_CLOCK_SCALING
+#error "You must enable CONFIG_TEGRA_CLOCK_SCALING to use CONFIG_TEGRA20_LP0"
+#endif
+
+/*
+ * This is the place in SRAM where the SDRAM parameters are stored. There
+ * are 4 blocks, one for each RAM code
+ */
+#define SDRAM_PARAMS_BASE      (AP20_BASE_PA_SRAM + 0x188)
+
+/* TODO: If we later add support for the Misc GP controller, refactor this */
+union xm2cfga_reg {
+       struct {
+               u32 reserved0:2;
+               u32 hsm_en:1;
+               u32 reserved1:2;
+               u32 preemp_en:1;
+               u32 vref_en:1;
+               u32 reserved2:5;
+               u32 cal_drvdn:5;
+               u32 reserved3:3;
+               u32 cal_drvup:5;
+               u32 reserved4:3;
+               u32 cal_drvdn_slwr:2;
+               u32 cal_drvup_slwf:2;
+       };
+       u32 word;
+};
+
+union xm2cfgd_reg {
+       struct {
+               u32 reserved0:2;
+               u32 hsm_en:1;
+               u32 schmt_en:1;
+               u32 lpmd:2;
+               u32 vref_en:1;
+               u32 reserved1:5;
+               u32 cal_drvdn:5;
+               u32 reserved2:3;
+               u32 cal_drvup:5;
+               u32 reserved3:3;
+               u32 cal_drvdn_slwr:2;
+               u32 cal_drvup_slwf:2;
+       };
+       u32 word;
+};
+
+/*
+ * TODO: This register is not documented in the TRM yet. We could move this
+ * into the EMC and give it a proper interface, but not while it is
+ * undocumented.
+ */
+union fbio_spare_reg {
+       struct {
+               u32 reserved:24;
+               u32 cfg_wb0:8;
+       };
+       u32 word;
+};
+
+/* We pack the resume information into these unions for later */
+union scratch2_reg {
+       struct {
+               u32 pllm_base_divm:5;
+               u32 pllm_base_divn:10;
+               u32 pllm_base_divp:3;
+               u32 pllm_misc_lfcon:4;
+               u32 pllm_misc_cpcon:4;
+               u32 gp_xm2cfga_padctrl_preemp:1;
+               u32 gp_xm2cfgd_padctrl_schmt:1;
+               u32 osc_ctrl_xobp:1;
+               u32 memory_type:3;
+       };
+       u32 word;
+};
+
+union scratch4_reg {
+       struct {
+               u32 emc_clock_divider:8;
+               u32 pllm_stable_time:8;
+               u32 pllx_stable_time:8;
+               u32 emc_fbio_spare_cfg_wb0:8;
+       };
+       u32 word;
+};
+
+union scratch24_reg {
+       struct {
+               u32 emc_auto_cal_wait:8;
+               u32 emc_pin_program_wait:8;
+               u32 warmboot_wait:8;
+               u32 reserved:8;
+       };
+       u32 word;
+};
+
+int warmboot_save_sdram_params(void)
+{
+       u32 ram_code;
+       struct sdram_params sdram;
+       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       struct apb_misc_gp_ctlr *gp =
+                       (struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE;
+       struct emc_ctlr *emc = emc_get_controller(gd->fdt_blob);
+       union scratch2_reg scratch2;
+       union scratch4_reg scratch4;
+       union scratch24_reg scratch24;
+       union xm2cfga_reg xm2cfga;
+       union xm2cfgd_reg xm2cfgd;
+       union fbio_spare_reg fbio_spare;
+
+       /* get ram code that is used as index to array sdram_params in BCT */
+       ram_code = (readl(&pmt->pmt_strap_opt_a) >>
+                       STRAP_OPT_A_RAM_CODE_SHIFT) & 3;
+       memcpy(&sdram,
+              (char *)((struct sdram_params *)SDRAM_PARAMS_BASE + ram_code),
+              sizeof(sdram));
+
+       xm2cfga.word = readl(&gp->xm2cfga);
+       xm2cfgd.word = readl(&gp->xm2cfgd);
+
+       scratch2.word = 0;
+       scratch2.osc_ctrl_xobp = clock_get_osc_bypass();
+
+       /* Get the memory PLL settings */
+       {
+               u32 divm, divn, divp, cpcon, lfcon;
+
+               if (clock_ll_read_pll(CLOCK_ID_MEMORY, &divm, &divn, &divp,
+                                       &cpcon, &lfcon))
+                       return -1;
+               scratch2.pllm_base_divm = divm;
+               scratch2.pllm_base_divn = divn;
+               scratch2.pllm_base_divp = divp;
+               scratch2.pllm_misc_cpcon = cpcon;
+               scratch2.pllm_misc_lfcon = lfcon;
+       }
+
+       scratch2.gp_xm2cfga_padctrl_preemp = xm2cfga.preemp_en;
+       scratch2.gp_xm2cfgd_padctrl_schmt = xm2cfgd.schmt_en;
+       scratch2.memory_type = sdram.memory_type;
+       writel(scratch2.word, &pmc->pmc_scratch2);
+
+       /* collect data from various sources for pmc_scratch4 */
+       fbio_spare.word = readl(&emc->fbio_spare);
+       scratch4.word = 0;
+       scratch4.emc_fbio_spare_cfg_wb0 = fbio_spare.cfg_wb0;
+       scratch4.emc_clock_divider = sdram.emc_clock_divider;
+       scratch4.pllm_stable_time = -1;
+       scratch4.pllx_stable_time = -1;
+       writel(scratch4.word, &pmc->pmc_scratch4);
+
+       /* collect various data from sdram for pmc_scratch24 */
+       scratch24.word = 0;
+       scratch24.emc_pin_program_wait = sdram.emc_pin_program_wait;
+       scratch24.emc_auto_cal_wait = sdram.emc_auto_cal_wait;
+       scratch24.warmboot_wait = sdram.warm_boot_wait;
+       writel(scratch24.word, &pmc->pmc_scratch24);
+
+       return 0;
+}
+
+static u32 get_major_version(void)
+{
+       u32 major_id;
+       struct apb_misc_gp_ctlr *gp =
+               (struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE;
+
+       major_id = (readl(&gp->hidrev) & HIDREV_MAJORPREV_MASK) >>
+                       HIDREV_MAJORPREV_SHIFT;
+       return major_id;
+}
+
+static int is_production_mode_fuse_set(struct fuse_regs *fuse)
+{
+       return readl(&fuse->production_mode);
+}
+
+static int is_odm_production_mode_fuse_set(struct fuse_regs *fuse)
+{
+       return readl(&fuse->security_mode);
+}
+
+static int is_failure_analysis_mode(struct fuse_regs *fuse)
+{
+       return readl(&fuse->fa);
+}
+
+static int ap20_is_odm_production_mode(void)
+{
+       struct fuse_regs *fuse = (struct fuse_regs *)TEGRA20_FUSE_BASE;
+
+       if (!is_failure_analysis_mode(fuse) &&
+           is_odm_production_mode_fuse_set(fuse))
+               return 1;
+       else
+               return 0;
+}
+
+static int ap20_is_production_mode(void)
+{
+       struct fuse_regs *fuse = (struct fuse_regs *)TEGRA20_FUSE_BASE;
+
+       if (get_major_version() == 0)
+               return 1;
+
+       if (!is_failure_analysis_mode(fuse) &&
+           is_production_mode_fuse_set(fuse) &&
+           !is_odm_production_mode_fuse_set(fuse))
+               return 1;
+       else
+               return 0;
+}
+
+static enum fuse_operating_mode fuse_get_operation_mode(void)
+{
+       u32 chip_id;
+       struct apb_misc_gp_ctlr *gp =
+               (struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE;
+
+       chip_id = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >>
+                       HIDREV_CHIPID_SHIFT;
+       if (chip_id == CHIPID_TEGRA20) {
+               if (ap20_is_odm_production_mode()) {
+                       printf("!! odm_production_mode is not supported !!\n");
+                       return MODE_UNDEFINED;
+               } else
+                       if (ap20_is_production_mode())
+                               return MODE_PRODUCTION;
+                       else
+                               return MODE_UNDEFINED;
+       }
+       return MODE_UNDEFINED;
+}
+
+static void determine_crypto_options(int *is_encrypted, int *is_signed,
+                                    int *use_zero_key)
+{
+       switch (fuse_get_operation_mode()) {
+       case MODE_PRODUCTION:
+               *is_encrypted = 0;
+               *is_signed = 1;
+               *use_zero_key = 1;
+               break;
+       case MODE_UNDEFINED:
+       default:
+               *is_encrypted = 0;
+               *is_signed = 0;
+               *use_zero_key  = 0;
+               break;
+       }
+}
+
+static int sign_wb_code(u32 start, u32 length, int use_zero_key)
+{
+       int err;
+       u8 *source;             /* Pointer to source */
+       u8 *hash;
+
+       /* Calculate AES block parameters. */
+       source = (u8 *)(start + offsetof(struct wb_header, random_aes_block));
+       length -= offsetof(struct wb_header, random_aes_block);
+       hash = (u8 *)(start + offsetof(struct wb_header, hash));
+       err = sign_data_block(source, length, hash);
+
+       return err;
+}
+
+int warmboot_prepare_code(u32 seg_address, u32 seg_length)
+{
+       int err = 0;
+       u32 length;                     /* length of the signed/encrypt code */
+       struct wb_header *dst_header;   /* Pointer to dest WB header */
+       int is_encrypted;               /* Segment is encrypted */
+       int is_signed;                  /* Segment is signed */
+       int use_zero_key;               /* Use key of all zeros */
+
+       /* Determine crypto options. */
+       determine_crypto_options(&is_encrypted, &is_signed, &use_zero_key);
+
+       /* Get the actual code limits. */
+       length = roundup(((u32)wb_end - (u32)wb_start), 16);
+
+       /*
+        * The region specified by seg_address must be in SDRAM and must be
+        * nonzero in length.
+        */
+       if (seg_length == 0 || seg_address < NV_PA_SDRAM_BASE ||
+               seg_address + seg_length >= NV_PA_SDRAM_BASE + gd->ram_size) {
+               err = -EFAULT;
+               goto fail;
+       }
+
+       /* Things must be 16-byte aligned. */
+       if ((seg_length & 0xF) || (seg_address & 0xF)) {
+               err = -EINVAL;
+               goto fail;
+       }
+
+       /* Will the code fit? (destination includes wb_header + wb code) */
+       if (seg_length < (length + sizeof(struct wb_header))) {
+               err = -EINVAL;
+               goto fail;
+       }
+
+       dst_header = (struct wb_header *)seg_address;
+       memset((char *)dst_header, 0, sizeof(struct wb_header));
+
+       /* Populate the random_aes_block as requested. */
+       {
+               u32 *aes_block = (u32 *)&(dst_header->random_aes_block);
+               u32 *end = (u32 *)(((u32)aes_block) +
+                                  sizeof(dst_header->random_aes_block));
+
+               do {
+                       *aes_block++ = 0;
+               } while (aes_block < end);
+       }
+
+       /* Populate the header. */
+       dst_header->length_insecure = length + sizeof(struct wb_header);
+       dst_header->length_secure = length + sizeof(struct wb_header);
+       dst_header->destination = AP20_WB_RUN_ADDRESS;
+       dst_header->entry_point = AP20_WB_RUN_ADDRESS;
+       dst_header->code_length = length;
+
+       if (is_encrypted) {
+               printf("!!!! Encryption is not supported !!!!\n");
+               dst_header->length_insecure = 0;
+               err = -EACCES;
+               goto fail;
+       } else
+               /* copy the wb code directly following dst_header. */
+               memcpy((char *)(dst_header+1), (char *)wb_start, length);
+
+       if (is_signed)
+               err = sign_wb_code(seg_address, dst_header->length_insecure,
+                                  use_zero_key);
+
+fail:
+       if (err)
+               printf("Warning: warmboot code copy failed (error=%d)\n", err);
+
+       return err;
+}
diff --git a/arch/arm/cpu/armv7/tegra20/warmboot_avp.c b/arch/arm/cpu/armv7/tegra20/warmboot_avp.c
new file mode 100644 (file)
index 0000000..cd01908
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * (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/ap20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/flow.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/tegra20.h>
+#include <asm/arch/warmboot.h>
+#include "warmboot_avp.h"
+
+#define DEBUG_RESET_CORESIGHT
+
+void wb_start(void)
+{
+       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+       struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
+       struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE;
+       struct clk_rst_ctlr *clkrst =
+                       (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+       union osc_ctrl_reg osc_ctrl;
+       union pllx_base_reg pllx_base;
+       union pllx_misc_reg pllx_misc;
+       union scratch3_reg scratch3;
+       u32 reg;
+
+       /* enable JTAG & TBE */
+       writel(CONFIG_CTL_TBE | CONFIG_CTL_JTAG, &pmt->pmt_cfg_ctl);
+
+       /* Are we running where we're supposed to be? */
+       asm volatile (
+               "adr    %0, wb_start;"  /* reg: wb_start address */
+               : "=r"(reg)             /* output */
+                                       /* no input, no clobber list */
+       );
+
+       if (reg != AP20_WB_RUN_ADDRESS)
+               goto do_reset;
+
+       /* Are we running with AVP? */
+       if (readl(NV_PA_PG_UP_BASE + PG_UP_TAG_0) != PG_UP_TAG_AVP)
+               goto do_reset;
+
+#ifdef DEBUG_RESET_CORESIGHT
+       /* Assert CoreSight reset */
+       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_U]);
+       reg |= SWR_CSITE_RST;
+       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_U]);
+#endif
+
+       /* TODO: Set the drive strength - maybe make this a board parameter? */
+       osc_ctrl.word = readl(&clkrst->crc_osc_ctrl);
+       osc_ctrl.xofs = 4;
+       osc_ctrl.xoe = 1;
+       writel(osc_ctrl.word, &clkrst->crc_osc_ctrl);
+
+       /* Power up the CPU complex if necessary */
+       if (!(readl(&pmc->pmc_pwrgate_status) & PWRGATE_STATUS_CPU)) {
+               reg = PWRGATE_TOGGLE_PARTID_CPU | PWRGATE_TOGGLE_START;
+               writel(reg, &pmc->pmc_pwrgate_toggle);
+               while (!(readl(&pmc->pmc_pwrgate_status) & PWRGATE_STATUS_CPU))
+                       ;
+       }
+
+       /* Remove the I/O clamps from the CPU power partition. */
+       reg = readl(&pmc->pmc_remove_clamping);
+       reg |= CPU_CLMP;
+       writel(reg, &pmc->pmc_remove_clamping);
+
+       reg = EVENT_ZERO_VAL_20 | EVENT_MSEC | EVENT_MODE_STOP;
+       writel(reg, &flow->halt_cop_events);
+
+       /* Assert CPU complex reset */
+       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_L]);
+       reg |= CPU_RST;
+       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
+
+       /* Hold both CPUs in reset */
+       reg = CPU_CMPLX_CPURESET0 | CPU_CMPLX_CPURESET1 | CPU_CMPLX_DERESET0 |
+             CPU_CMPLX_DERESET1 | CPU_CMPLX_DBGRESET0 | CPU_CMPLX_DBGRESET1;
+       writel(reg, &clkrst->crc_cpu_cmplx_set);
+
+       /* Halt CPU1 at the flow controller for uni-processor configurations */
+       writel(EVENT_MODE_STOP, &flow->halt_cpu1_events);
+
+       /*
+        * Set the CPU reset vector. SCRATCH41 contains the physical
+        * address of the CPU-side restoration code.
+        */
+       reg = readl(&pmc->pmc_scratch41);
+       writel(reg, EXCEP_VECTOR_CPU_RESET_VECTOR);
+
+       /* Select CPU complex clock source */
+       writel(CCLK_PLLP_BURST_POLICY, &clkrst->crc_cclk_brst_pol);
+
+       /* Start the CPU0 clock and stop the CPU1 clock */
+       reg = CPU_CMPLX_CPU_BRIDGE_CLKDIV_4 | CPU_CMPLX_CPU0_CLK_STP_RUN |
+             CPU_CMPLX_CPU1_CLK_STP_STOP;
+       writel(reg, &clkrst->crc_clk_cpu_cmplx);
+
+       /* Enable the CPU complex clock */
+       reg = readl(&clkrst->crc_clk_out_enb[TEGRA_DEV_L]);
+       reg |= CLK_ENB_CPU;
+       writel(reg, &clkrst->crc_clk_out_enb[TEGRA_DEV_L]);
+
+       /* Make sure the resets were held for at least 2 microseconds */
+       reg = readl(TIMER_USEC_CNTR);
+       while (readl(TIMER_USEC_CNTR) <= (reg + 2))
+               ;
+
+#ifdef DEBUG_RESET_CORESIGHT
+       /*
+        * De-assert CoreSight reset.
+        * NOTE: We're leaving the CoreSight clock on the oscillator for
+        *      now. It will be restored to its original clock source
+        *      when the CPU-side restoration code runs.
+        */
+       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_U]);
+       reg &= ~SWR_CSITE_RST;
+       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_U]);
+#endif
+
+       /* Unlock the CPU CoreSight interfaces */
+       reg = 0xC5ACCE55;
+       writel(reg, CSITE_CPU_DBG0_LAR);
+       writel(reg, CSITE_CPU_DBG1_LAR);
+
+       /*
+        * Sample the microsecond timestamp again. This is the time we must
+        * use when returning from LP0 for PLL stabilization delays.
+        */
+       reg = readl(TIMER_USEC_CNTR);
+       writel(reg, &pmc->pmc_scratch1);
+
+       pllx_base.word = 0;
+       pllx_misc.word = 0;
+       scratch3.word = readl(&pmc->pmc_scratch3);
+
+       /* Get the OSC. For 19.2 MHz, use 19 to make the calculations easier */
+       reg = (readl(TIMER_USEC_CFG) & USEC_CFG_DIVISOR_MASK) + 1;
+
+       /*
+        * According to the TRM, for 19.2MHz OSC, the USEC_DIVISOR is 0x5f, and
+        * USEC_DIVIDEND is 0x04. So, if USEC_DIVISOR > 26, OSC is 19.2 MHz.
+        *
+        * reg is used to calculate the pllx freq, which is used to determine if
+        * to set dccon or not.
+        */
+       if (reg > 26)
+               reg = 19;
+
+       /* PLLX_BASE.PLLX_DIVM */
+       if (scratch3.pllx_base_divm == reg)
+               reg = 0;
+       else
+               reg = 1;
+
+       /* PLLX_BASE.PLLX_DIVN */
+       pllx_base.divn = scratch3.pllx_base_divn;
+       reg = scratch3.pllx_base_divn << reg;
+
+       /* PLLX_BASE.PLLX_DIVP */
+       pllx_base.divp = scratch3.pllx_base_divp;
+       reg = reg >> scratch3.pllx_base_divp;
+
+       pllx_base.bypass = 1;
+
+       /* PLLX_MISC_DCCON must be set for pllx frequency > 600 MHz. */
+       if (reg > 600)
+               pllx_misc.dccon = 1;
+
+       /* PLLX_MISC_LFCON */
+       pllx_misc.lfcon = scratch3.pllx_misc_lfcon;
+
+       /* PLLX_MISC_CPCON */
+       pllx_misc.cpcon = scratch3.pllx_misc_cpcon;
+
+       writel(pllx_misc.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_misc);
+       writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
+
+       pllx_base.enable = 1;
+       writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
+       pllx_base.bypass = 0;
+       writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
+
+       writel(0, flow->halt_cpu_events);
+
+       reg = CPU_CMPLX_CPURESET0 | CPU_CMPLX_DBGRESET0 | CPU_CMPLX_DERESET0;
+       writel(reg, &clkrst->crc_cpu_cmplx_clr);
+
+       reg = PLLM_OUT1_RSTN_RESET_DISABLE | PLLM_OUT1_CLKEN_ENABLE |
+             PLLM_OUT1_RATIO_VAL_8;
+       writel(reg, &clkrst->crc_pll[CLOCK_ID_MEMORY].pll_out);
+
+       reg = SCLK_SWAKE_FIQ_SRC_PLLM_OUT1 | SCLK_SWAKE_IRQ_SRC_PLLM_OUT1 |
+             SCLK_SWAKE_RUN_SRC_PLLM_OUT1 | SCLK_SWAKE_IDLE_SRC_PLLM_OUT1 |
+             SCLK_SYS_STATE_IDLE;
+       writel(reg, &clkrst->crc_sclk_brst_pol);
+
+       /* avp_resume: no return after the write */
+       reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_L]);
+       reg &= ~CPU_RST;
+       writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
+
+       /* avp_halt: */
+avp_halt:
+       reg = EVENT_MODE_STOP | EVENT_JTAG;
+       writel(reg, flow->halt_cop_events);
+       goto avp_halt;
+
+do_reset:
+       /*
+        * Execution comes here if something goes wrong. The chip is reset and
+        * a cold boot is performed.
+        */
+       writel(SWR_TRIG_SYS_RST, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
+       goto do_reset;
+}
+
+/*
+ * wb_end() is a dummy function, and must be directly following wb_start(),
+ * and is used to calculate the size of wb_start().
+ */
+void wb_end(void)
+{
+}
diff --git a/arch/arm/cpu/armv7/tegra20/warmboot_avp.h b/arch/arm/cpu/armv7/tegra20/warmboot_avp.h
new file mode 100644 (file)
index 0000000..4b71c07
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * (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 _WARMBOOT_AVP_H_
+#define _WARMBOOT_AVP_H_
+
+#define TEGRA_DEV_L                    0
+#define TEGRA_DEV_H                    1
+#define TEGRA_DEV_U                    2
+
+#define SIMPLE_PLLX                    (CLOCK_ID_XCPU - CLOCK_ID_FIRST_SIMPLE)
+#define SIMPLE_PLLE                    (CLOCK_ID_EPCI - CLOCK_ID_FIRST_SIMPLE)
+
+#define TIMER_USEC_CNTR                        (NV_PA_TMRUS_BASE + 0)
+#define TIMER_USEC_CFG                 (NV_PA_TMRUS_BASE + 4)
+
+#define USEC_CFG_DIVISOR_MASK          0xffff
+
+#define CONFIG_CTL_TBE                 (1 << 7)
+#define CONFIG_CTL_JTAG                        (1 << 6)
+
+#define CPU_RST                                (1 << 0)
+#define CLK_ENB_CPU                    (1 << 0)
+#define SWR_TRIG_SYS_RST               (1 << 2)
+#define SWR_CSITE_RST                  (1 << 9)
+
+#define PWRGATE_STATUS_CPU             (1 << 0)
+#define PWRGATE_TOGGLE_PARTID_CPU      (0 << 0)
+#define PWRGATE_TOGGLE_START           (1 << 8)
+
+#define CPU_CMPLX_CPU_BRIDGE_CLKDIV_4  (3 << 0)
+#define CPU_CMPLX_CPU0_CLK_STP_STOP    (1 << 8)
+#define CPU_CMPLX_CPU0_CLK_STP_RUN     (0 << 8)
+#define CPU_CMPLX_CPU1_CLK_STP_STOP    (1 << 9)
+#define CPU_CMPLX_CPU1_CLK_STP_RUN     (0 << 9)
+
+#define CPU_CMPLX_CPURESET0            (1 << 0)
+#define CPU_CMPLX_CPURESET1            (1 << 1)
+#define CPU_CMPLX_DERESET0             (1 << 4)
+#define CPU_CMPLX_DERESET1             (1 << 5)
+#define CPU_CMPLX_DBGRESET0            (1 << 12)
+#define CPU_CMPLX_DBGRESET1            (1 << 13)
+
+#define PLLM_OUT1_RSTN_RESET_DISABLE   (1 << 0)
+#define PLLM_OUT1_CLKEN_ENABLE         (1 << 1)
+#define PLLM_OUT1_RATIO_VAL_8          (8 << 8)
+
+#define SCLK_SYS_STATE_IDLE            (1 << 28)
+#define SCLK_SWAKE_FIQ_SRC_PLLM_OUT1   (7 << 12)
+#define SCLK_SWAKE_IRQ_SRC_PLLM_OUT1   (7 << 8)
+#define SCLK_SWAKE_RUN_SRC_PLLM_OUT1   (7 << 4)
+#define SCLK_SWAKE_IDLE_SRC_PLLM_OUT1  (7 << 0)
+
+#define EVENT_ZERO_VAL_20              (20 << 0)
+#define EVENT_MSEC                     (1 << 24)
+#define EVENT_JTAG                     (1 << 28)
+#define EVENT_MODE_STOP                        (2 << 29)
+
+#define CCLK_PLLP_BURST_POLICY         0x20004444
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra2/ap20.h b/arch/arm/include/asm/arch-tegra2/ap20.h
deleted file mode 100644 (file)
index d222c44..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * (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 <asm/types.h>
-
-/* Stabilization delays, in usec */
-#define PLL_STABILIZATION_DELAY (300)
-#define IO_STABILIZATION_DELAY (1000)
-
-#define NVBL_PLLP_KHZ  (216000)
-
-#define PLLX_ENABLED           (1 << 30)
-#define CCLK_BURST_POLICY      0x20008888
-#define SUPER_CCLK_DIVIDER     0x80000000
-
-/* Calculate clock fractional divider value from ref and target frequencies */
-#define CLK_DIVIDER(REF, FREQ)  ((((REF) * 2) / FREQ) - 2)
-
-/* Calculate clock frequency value from reference and clock divider value */
-#define CLK_FREQUENCY(REF, REG)  (((REF) * 2) / (REG + 2))
-
-/* AVP/CPU ID */
-#define PG_UP_TAG_0_PID_CPU    0x55555555      /* CPU aka "a9" aka "mpcore" */
-#define PG_UP_TAG_0             0x0
-
-#define CORESIGHT_UNLOCK       0xC5ACCE55;
-
-/* AP20-Specific Base Addresses */
-
-/* AP20 Base physical address of SDRAM. */
-#define AP20_BASE_PA_SDRAM      0x00000000
-/* AP20 Base physical address of internal SRAM. */
-#define AP20_BASE_PA_SRAM       0x40000000
-/* AP20 Size of internal SRAM (256KB). */
-#define AP20_BASE_PA_SRAM_SIZE  0x00040000
-/* AP20 Base physical address of flash. */
-#define AP20_BASE_PA_NOR_FLASH  0xD0000000
-/* AP20 Base physical address of boot information table. */
-#define AP20_BASE_PA_BOOT_INFO  AP20_BASE_PA_SRAM
-
-/*
- * Super-temporary stacks for EXTREMELY early startup. The values chosen for
- * these addresses must be valid on ALL SOCs because this value is used before
- * we are able to differentiate between the SOC types.
- *
- * NOTE: The since CPU's stack will eventually be moved from IRAM to SDRAM, its
- *       stack is placed below the AVP stack. Once the CPU stack has been moved,
- *       the AVP is free to use the IRAM the CPU stack previously occupied if
- *       it should need to do so.
- *
- * NOTE: In multi-processor CPU complex configurations, each processor will have
- *       its own stack of size CPU_EARLY_BOOT_STACK_SIZE. CPU 0 will have a
- *       limit of CPU_EARLY_BOOT_STACK_LIMIT. Each successive CPU will have a
- *       stack limit that is CPU_EARLY_BOOT_STACK_SIZE less then the previous
- *       CPU.
- */
-
-/* Common AVP early boot stack limit */
-#define AVP_EARLY_BOOT_STACK_LIMIT     \
-       (AP20_BASE_PA_SRAM + (AP20_BASE_PA_SRAM_SIZE/2))
-/* Common AVP early boot stack size */
-#define AVP_EARLY_BOOT_STACK_SIZE      0x1000
-/* Common CPU early boot stack limit */
-#define CPU_EARLY_BOOT_STACK_LIMIT     \
-       (AVP_EARLY_BOOT_STACK_LIMIT - AVP_EARLY_BOOT_STACK_SIZE)
-/* Common CPU early boot stack size */
-#define CPU_EARLY_BOOT_STACK_SIZE      0x1000
-
-#define EXCEP_VECTOR_CPU_RESET_VECTOR  (NV_PA_EVP_BASE + 0x100)
-#define CSITE_CPU_DBG0_LAR             (NV_PA_CSITE_BASE + 0x10FB0)
-#define CSITE_CPU_DBG1_LAR             (NV_PA_CSITE_BASE + 0x12FB0)
-
-#define FLOW_CTLR_HALT_COP_EVENTS      (NV_PA_FLOW_BASE + 4)
-#define FLOW_MODE_STOP                 2
-#define HALT_COP_EVENT_JTAG            (1 << 28)
-#define HALT_COP_EVENT_IRQ_1           (1 << 11)
-#define HALT_COP_EVENT_FIQ_1           (1 << 9)
-
-/* Start up the tegra2 SOC */
-void tegra2_start(void);
-
-/* This is the main entry into U-Boot, used by the Cortex-A9 */
-extern void _start(void);
-
-/**
- * Works out the SOC type used for clocks settings
- *
- * @return     SOC type - see TEGRA_SOC...
- */
-int tegra_get_chip_type(void);
diff --git a/arch/arm/include/asm/arch-tegra2/apb_misc.h b/arch/arm/include/asm/arch-tegra2/apb_misc.h
deleted file mode 100644 (file)
index eb69d18..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2012 The Chromium OS Authors.
- *
- * 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 _GP_PADCTRL_H_
-#define _GP_PADCTRL_H_
-
-/* APB_MISC_PP registers */
-struct apb_misc_pp_ctlr {
-       u32     reserved0[2];
-       u32     strapping_opt_a;/* 0x08: APB_MISC_PP_STRAPPING_OPT_A */
-};
-
-/* bit fields definitions for APB_MISC_PP_STRAPPING_OPT_A register */
-#define RAM_CODE_SHIFT         4
-#define RAM_CODE_MASK          (0xf << RAM_CODE_SHIFT)
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/board.h b/arch/arm/include/asm/arch-tegra2/board.h
deleted file mode 100644 (file)
index a90d36c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  (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 _TEGRA_BOARD_H_
-#define _TEGRA_BOARD_H_
-
-/* Setup UARTs for the board according to the selected config */
-void board_init_uart_f(void);
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/clk_rst.h b/arch/arm/include/asm/arch-tegra2/clk_rst.h
deleted file mode 100644 (file)
index 8c3be91..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- *  (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_
-
-/* PLL registers - there are several PLLs in the clock controller */
-struct clk_pll {
-       uint pll_base;          /* the control register */
-       uint pll_out;           /* output control */
-       uint reserved;
-       uint pll_misc;          /* other misc things */
-};
-
-/* PLL registers - there are several PLLs in the clock controller */
-struct clk_pll_simple {
-       uint pll_base;          /* the control register */
-       uint pll_misc;          /* other misc things */
-};
-
-/*
- * Most PLLs use the clk_pll structure, but some have a simpler two-member
- * structure for which we use clk_pll_simple. The reason for this non-
- * othogonal setup is not stated.
- */
-enum {
-       TEGRA_CLK_PLLS          = 6,    /* Number of normal PLLs */
-       TEGRA_CLK_SIMPLE_PLLS   = 3,    /* Number of simple PLLs */
-       TEGRA_CLK_REGS          = 3,    /* Number of clock enable registers */
-       TEGRA_CLK_SOURCES       = 64,   /* Number of peripheral clock sources */
-};
-
-/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */
-struct clk_rst_ctlr {
-       uint crc_rst_src;                       /* _RST_SOURCE_0,0x00 */
-       uint crc_rst_dev[TEGRA_CLK_REGS];       /* _RST_DEVICES_L/H/U_0 */
-       uint crc_clk_out_enb[TEGRA_CLK_REGS];   /* _CLK_OUT_ENB_L/H/U_0 */
-       uint crc_reserved0;             /* reserved_0,          0x1C */
-       uint crc_cclk_brst_pol;         /* _CCLK_BURST_POLICY_0,0x20 */
-       uint crc_super_cclk_div;        /* _SUPER_CCLK_DIVIDER_0,0x24 */
-       uint crc_sclk_brst_pol;         /* _SCLK_BURST_POLICY_0, 0x28 */
-       uint crc_super_sclk_div;        /* _SUPER_SCLK_DIVIDER_0,0x2C */
-       uint crc_clk_sys_rate;          /* _CLK_SYSTEM_RATE_0,  0x30 */
-       uint crc_prog_dly_clk;          /* _PROG_DLY_CLK_0,     0x34 */
-       uint crc_aud_sync_clk_rate;     /* _AUDIO_SYNC_CLK_RATE_0,0x38 */
-       uint crc_reserved1;             /* reserved_1,          0x3C */
-       uint crc_cop_clk_skip_plcy;     /* _COP_CLK_SKIP_POLICY_0,0x40 */
-       uint crc_clk_mask_arm;          /* _CLK_MASK_ARM_0,     0x44 */
-       uint crc_misc_clk_enb;          /* _MISC_CLK_ENB_0,     0x48 */
-       uint crc_clk_cpu_cmplx;         /* _CLK_CPU_CMPLX_0,    0x4C */
-       uint crc_osc_ctrl;              /* _OSC_CTRL_0,         0x50 */
-       uint crc_pll_lfsr;              /* _PLL_LFSR_0,         0x54 */
-       uint crc_osc_freq_det;          /* _OSC_FREQ_DET_0,     0x58 */
-       uint crc_osc_freq_det_stat;     /* _OSC_FREQ_DET_STATUS_0,0x5C */
-       uint crc_reserved2[8];          /* reserved_2[8],       0x60-7C */
-
-       struct clk_pll crc_pll[TEGRA_CLK_PLLS]; /* PLLs from 0x80 to 0xdc */
-
-       /* PLLs from 0xe0 to 0xf4    */
-       struct clk_pll_simple crc_pll_simple[TEGRA_CLK_SIMPLE_PLLS];
-
-       uint crc_reserved10;            /* _reserved_10,        0xF8 */
-       uint crc_reserved11;            /* _reserved_11,        0xFC */
-
-       uint crc_clk_src[TEGRA_CLK_SOURCES]; /*_I2S1_0...       0x100-1fc */
-       uint crc_reserved20[80];        /*                      0x200-33C */
-       uint crc_cpu_cmplx_set;         /* _CPU_CMPLX_SET_0,    0x340     */
-       uint crc_cpu_cmplx_clr;         /* _CPU_CMPLX_CLR_0,    0x344     */
-};
-
-/* CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0 */
-#define CPU1_CLK_STP_SHIFT     9
-
-#define CPU0_CLK_STP_SHIFT     8
-#define CPU0_CLK_STP_MASK      (1U << CPU0_CLK_STP_SHIFT)
-
-/* CLK_RST_CONTROLLER_PLLx_BASE_0 */
-#define PLL_BYPASS_SHIFT       31
-#define PLL_BYPASS_MASK                (1U << PLL_BYPASS_SHIFT)
-
-#define PLL_ENABLE_SHIFT       30
-#define PLL_ENABLE_MASK                (1U << PLL_ENABLE_SHIFT)
-
-#define PLL_BASE_OVRRIDE_MASK  (1U << 28)
-
-#define PLL_DIVP_SHIFT         20
-#define PLL_DIVP_MASK          (7U << PLL_DIVP_SHIFT)
-
-#define PLL_DIVN_SHIFT         8
-#define PLL_DIVN_MASK          (0x3ffU << PLL_DIVN_SHIFT)
-
-#define PLL_DIVM_SHIFT         0
-#define PLL_DIVM_MASK          (0x1f << PLL_DIVM_SHIFT)
-
-/* CLK_RST_CONTROLLER_PLLx_MISC_0 */
-#define PLL_CPCON_SHIFT                8
-#define PLL_CPCON_MASK         (15U << PLL_CPCON_SHIFT)
-
-#define PLL_LFCON_SHIFT                4
-#define PLL_LFCON_MASK         (15U << PLL_LFCON_SHIFT)
-
-#define PLLU_VCO_FREQ_SHIFT    20
-#define PLLU_VCO_FREQ_MASK     (1U << PLLU_VCO_FREQ_SHIFT)
-
-/* CLK_RST_CONTROLLER_OSC_CTRL_0 */
-#define OSC_FREQ_SHIFT         30
-#define OSC_FREQ_MASK          (3U << OSC_FREQ_SHIFT)
-#define OSC_XOBP_SHIFT         1
-#define OSC_XOBP_MASK          (1U << OSC_XOBP_SHIFT)
-
-/*
- * CLK_RST_CONTROLLER_CLK_SOURCE_x_OUT_0 - the mask here is normally 8 bits
- * but can be 16. We could use knowledge we have to restrict the mask in
- * the 8-bit cases (the divider_bits value returned by
- * get_periph_clock_source()) but it does not seem worth it since the code
- * already checks the ranges of values it is writing, in clk_get_divider().
- */
-#define OUT_CLK_DIVISOR_SHIFT  0
-#define OUT_CLK_DIVISOR_MASK   (0xffff << OUT_CLK_DIVISOR_SHIFT)
-
-#define OUT_CLK_SOURCE_SHIFT   30
-#define OUT_CLK_SOURCE_MASK    (3U << OUT_CLK_SOURCE_SHIFT)
-
-#define OUT_CLK_SOURCE4_SHIFT  28
-#define OUT_CLK_SOURCE4_MASK   (15U << OUT_CLK_SOURCE4_SHIFT)
-
-#endif /* CLK_RST_H */
diff --git a/arch/arm/include/asm/arch-tegra2/clock.h b/arch/arm/include/asm/arch-tegra2/clock.h
deleted file mode 100644 (file)
index ff83bbf..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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
- */
-
-/* Tegra2 clock control functions */
-
-#ifndef _CLOCK_H
-#define _CLOCK_H
-
-/* Set of oscillator frequencies supported in the internal API. */
-enum clock_osc_freq {
-       /* All in MHz, so 13_0 is 13.0MHz */
-       CLOCK_OSC_FREQ_13_0,
-       CLOCK_OSC_FREQ_19_2,
-       CLOCK_OSC_FREQ_12_0,
-       CLOCK_OSC_FREQ_26_0,
-
-       CLOCK_OSC_FREQ_COUNT,
-};
-
-/* The PLLs supported by the hardware */
-enum clock_id {
-       CLOCK_ID_FIRST,
-       CLOCK_ID_CGENERAL = CLOCK_ID_FIRST,
-       CLOCK_ID_MEMORY,
-       CLOCK_ID_PERIPH,
-       CLOCK_ID_AUDIO,
-       CLOCK_ID_USB,
-       CLOCK_ID_DISPLAY,
-
-       /* now the simple ones */
-       CLOCK_ID_FIRST_SIMPLE,
-       CLOCK_ID_XCPU = CLOCK_ID_FIRST_SIMPLE,
-       CLOCK_ID_EPCI,
-       CLOCK_ID_SFROM32KHZ,
-
-       /* These are the base clocks (inputs to the Tegra SOC) */
-       CLOCK_ID_32KHZ,
-       CLOCK_ID_OSC,
-
-       CLOCK_ID_COUNT, /* number of clocks */
-       CLOCK_ID_NONE = -1,
-};
-
-/* The clocks supported by the hardware */
-enum periph_id {
-       PERIPH_ID_FIRST,
-
-       /* Low word: 31:0 */
-       PERIPH_ID_CPU = PERIPH_ID_FIRST,
-       PERIPH_ID_RESERVED1,
-       PERIPH_ID_RESERVED2,
-       PERIPH_ID_AC97,
-       PERIPH_ID_RTC,
-       PERIPH_ID_TMR,
-       PERIPH_ID_UART1,
-       PERIPH_ID_UART2,
-
-       /* 8 */
-       PERIPH_ID_GPIO,
-       PERIPH_ID_SDMMC2,
-       PERIPH_ID_SPDIF,
-       PERIPH_ID_I2S1,
-       PERIPH_ID_I2C1,
-       PERIPH_ID_NDFLASH,
-       PERIPH_ID_SDMMC1,
-       PERIPH_ID_SDMMC4,
-
-       /* 16 */
-       PERIPH_ID_TWC,
-       PERIPH_ID_PWM,
-       PERIPH_ID_I2S2,
-       PERIPH_ID_EPP,
-       PERIPH_ID_VI,
-       PERIPH_ID_2D,
-       PERIPH_ID_USBD,
-       PERIPH_ID_ISP,
-
-       /* 24 */
-       PERIPH_ID_3D,
-       PERIPH_ID_IDE,
-       PERIPH_ID_DISP2,
-       PERIPH_ID_DISP1,
-       PERIPH_ID_HOST1X,
-       PERIPH_ID_VCP,
-       PERIPH_ID_RESERVED30,
-       PERIPH_ID_CACHE2,
-
-       /* Middle word: 63:32 */
-       PERIPH_ID_MEM,
-       PERIPH_ID_AHBDMA,
-       PERIPH_ID_APBDMA,
-       PERIPH_ID_RESERVED35,
-       PERIPH_ID_KBC,
-       PERIPH_ID_STAT_MON,
-       PERIPH_ID_PMC,
-       PERIPH_ID_FUSE,
-
-       /* 40 */
-       PERIPH_ID_KFUSE,
-       PERIPH_ID_SBC1,
-       PERIPH_ID_SNOR,
-       PERIPH_ID_SPI1,
-       PERIPH_ID_SBC2,
-       PERIPH_ID_XIO,
-       PERIPH_ID_SBC3,
-       PERIPH_ID_DVC_I2C,
-
-       /* 48 */
-       PERIPH_ID_DSI,
-       PERIPH_ID_TVO,
-       PERIPH_ID_MIPI,
-       PERIPH_ID_HDMI,
-       PERIPH_ID_CSI,
-       PERIPH_ID_TVDAC,
-       PERIPH_ID_I2C2,
-       PERIPH_ID_UART3,
-
-       /* 56 */
-       PERIPH_ID_RESERVED56,
-       PERIPH_ID_EMC,
-       PERIPH_ID_USB2,
-       PERIPH_ID_USB3,
-       PERIPH_ID_MPE,
-       PERIPH_ID_VDE,
-       PERIPH_ID_BSEA,
-       PERIPH_ID_BSEV,
-
-       /* Upper word 95:64 */
-       PERIPH_ID_SPEEDO,
-       PERIPH_ID_UART4,
-       PERIPH_ID_UART5,
-       PERIPH_ID_I2C3,
-       PERIPH_ID_SBC4,
-       PERIPH_ID_SDMMC3,
-       PERIPH_ID_PCIE,
-       PERIPH_ID_OWR,
-
-       /* 72 */
-       PERIPH_ID_AFI,
-       PERIPH_ID_CORESIGHT,
-       PERIPH_ID_RESERVED74,
-       PERIPH_ID_AVPUCQ,
-       PERIPH_ID_RESERVED76,
-       PERIPH_ID_RESERVED77,
-       PERIPH_ID_RESERVED78,
-       PERIPH_ID_RESERVED79,
-
-       /* 80 */
-       PERIPH_ID_RESERVED80,
-       PERIPH_ID_RESERVED81,
-       PERIPH_ID_RESERVED82,
-       PERIPH_ID_RESERVED83,
-       PERIPH_ID_IRAMA,
-       PERIPH_ID_IRAMB,
-       PERIPH_ID_IRAMC,
-       PERIPH_ID_IRAMD,
-
-       /* 88 */
-       PERIPH_ID_CRAM2,
-
-       PERIPH_ID_COUNT,
-       PERIPH_ID_NONE = -1,
-};
-
-/* Converts a clock number to a clock register: 0=L, 1=H, 2=U */
-#define PERIPH_REG(id) ((id) >> 5)
-
-/* Mask value for a clock (within PERIPH_REG(id)) */
-#define PERIPH_MASK(id) (1 << ((id) & 0x1f))
-
-/* return 1 if a PLL ID is in range, and not a simple PLL */
-#define clock_id_is_pll(id) ((id) >= CLOCK_ID_FIRST && \
-               (id) < CLOCK_ID_FIRST_SIMPLE)
-
-/* PLL stabilization delay in usec */
-#define CLOCK_PLL_STABLE_DELAY_US 300
-
-/* return the current oscillator clock frequency */
-enum clock_osc_freq clock_get_osc_freq(void);
-
-/**
- * Start PLL using the provided configuration parameters.
- *
- * @param id   clock id
- * @param divm input divider
- * @param divn feedback divider
- * @param divp post divider 2^n
- * @param cpcon        charge pump setup control
- * @param lfcon        loop filter setup control
- *
- * @returns monotonic time in us that the PLL will be stable
- */
-unsigned long clock_start_pll(enum clock_id id, u32 divm, u32 divn,
-               u32 divp, u32 cpcon, u32 lfcon);
-
-/**
- * Read low-level parameters of a PLL.
- *
- * @param id   clock id to read (note: USB is not supported)
- * @param divm returns input divider
- * @param divn returns feedback divider
- * @param divp returns post divider 2^n
- * @param cpcon        returns charge pump setup control
- * @param lfcon        returns loop filter setup control
- *
- * @returns 0 if ok, -1 on error (invalid clock id)
- */
-int clock_ll_read_pll(enum clock_id clkid, u32 *divm, u32 *divn,
-                     u32 *divp, u32 *cpcon, u32 *lfcon);
-
-/*
- * Enable a clock
- *
- * @param id   clock id
- */
-void clock_enable(enum periph_id clkid);
-
-/*
- * Disable a clock
- *
- * @param id   clock id
- */
-void clock_disable(enum periph_id clkid);
-
-/*
- * Set whether a clock is enabled or disabled.
- *
- * @param id           clock id
- * @param enable       1 to enable, 0 to disable
- */
-void clock_set_enable(enum periph_id clkid, int enable);
-
-/**
- * Reset a peripheral. This puts it in reset, waits for a delay, then takes
- * it out of reset and waits for th delay again.
- *
- * @param periph_id    peripheral to reset
- * @param us_delay     time to delay in microseconds
- */
-void reset_periph(enum periph_id periph_id, int us_delay);
-
-/**
- * Put a peripheral into or out of reset.
- *
- * @param periph_id    peripheral to reset
- * @param enable       1 to put into reset, 0 to take out of reset
- */
-void reset_set_enable(enum periph_id periph_id, int enable);
-
-
-/* CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET/CLR_0 */
-enum crc_reset_id {
-       /* Things we can hold in reset for each CPU */
-       crc_rst_cpu = 1,
-       crc_rst_de = 1 << 2,    /* What is de? */
-       crc_rst_watchdog = 1 << 3,
-       crc_rst_debug = 1 << 4,
-};
-
-/**
- * Put parts of the CPU complex into or out of reset.\
- *
- * @param cpu          cpu number (0 or 1 on Tegra2)
- * @param which                which parts of the complex to affect (OR of crc_reset_id)
- * @param reset                1 to assert reset, 0 to de-assert
- */
-void reset_cmplx_set_enable(int cpu, int which, int reset);
-
-/**
- * Set the source for a peripheral clock. This plus the divisor sets the
- * clock rate. You need to look up the datasheet to see the meaning of the
- * source parameter as it changes for each peripheral.
- *
- * Warning: This function is only for use pre-relocation. Please use
- * clock_start_periph_pll() instead.
- *
- * @param periph_id    peripheral to adjust
- * @param source       source clock (0, 1, 2 or 3)
- */
-void clock_ll_set_source(enum periph_id periph_id, unsigned source);
-
-/**
- * Set the source and divisor for a peripheral clock. This sets the
- * clock rate. You need to look up the datasheet to see the meaning of the
- * source parameter as it changes for each peripheral.
- *
- * Warning: This function is only for use pre-relocation. Please use
- * clock_start_periph_pll() instead.
- *
- * @param periph_id    peripheral to adjust
- * @param source       source clock (0, 1, 2 or 3)
- * @param divisor      divisor value to use
- */
-void clock_ll_set_source_divisor(enum periph_id periph_id, unsigned source,
-               unsigned divisor);
-
-/**
- * Start a peripheral PLL clock at the given rate. This also resets the
- * peripheral.
- *
- * @param periph_id    peripheral to start
- * @param parent       PLL id of required parent clock
- * @param rate         Required clock rate in Hz
- * @return rate selected in Hz, or -1U if something went wrong
- */
-unsigned clock_start_periph_pll(enum periph_id periph_id,
-               enum clock_id parent, unsigned rate);
-
-/**
- * Returns the rate of a peripheral clock in Hz. Since the caller almost
- * certainly knows the parent clock (having just set it) we require that
- * this be passed in so we don't need to work it out.
- *
- * @param periph_id    peripheral to start
- * @param parent       PLL id of parent clock (used to calculate rate, you
- *                     must know this!)
- * @return clock rate of peripheral in Hz
- */
-unsigned long clock_get_periph_rate(enum periph_id periph_id,
-               enum clock_id parent);
-
-/**
- * Adjust peripheral PLL clock to the given rate. This does not reset the
- * peripheral. If a second stage divisor is not available, pass NULL for
- * extra_div. If it is available, then this parameter will return the
- * divisor selected (which will be a power of 2 from 1 to 256).
- *
- * @param periph_id    peripheral to start
- * @param parent       PLL id of required parent clock
- * @param rate         Required clock rate in Hz
- * @param extra_div    value for the second-stage divisor (NULL if one is
-                       not available)
- * @return rate selected in Hz, or -1U if something went wrong
- */
-unsigned clock_adjust_periph_pll_div(enum periph_id periph_id,
-               enum clock_id parent, unsigned rate, int *extra_div);
-
-/**
- * Returns the clock rate of a specified clock, in Hz.
- *
- * @param parent       PLL id of clock to check
- * @return rate of clock in Hz
- */
-unsigned clock_get_rate(enum clock_id clkid);
-
-/**
- * Start up a UART using low-level calls
- *
- * Prior to relocation clock_start_periph_pll() cannot be called. This
- * function provides a way to set up a UART using low-level calls which
- * do not require BSS.
- *
- * @param periph_id    Peripheral ID of UART to enable (e,g, PERIPH_ID_UART1)
- */
-void clock_ll_start_uart(enum periph_id periph_id);
-
-/**
- * Decode a peripheral ID from a device tree node.
- *
- * This works by looking up the peripheral's 'clocks' node and reading out
- * the second cell, which is the clock number / peripheral ID.
- *
- * @param blob         FDT blob to use
- * @param node         Node to look at
- * @return peripheral ID, or PERIPH_ID_NONE if none
- */
-enum periph_id clock_decode_periph_id(const void *blob, int node);
-
-/**
- * Checks if the oscillator bypass is enabled (XOBP bit)
- *
- * @return 1 if bypass is enabled, 0 if not
- */
-int clock_get_osc_bypass(void);
-
-/*
- * Checks that clocks are valid and prints a warning if not
- *
- * @return 0 if ok, -1 on error
- */
-int clock_verify(void);
-
-/* Initialize the clocks */
-void clock_init(void);
-
-/* Initialize the PLLs */
-void clock_early_init(void);
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/emc.h b/arch/arm/include/asm/arch-tegra2/emc.h
deleted file mode 100644 (file)
index deb3d36..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * (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 _ARCH_EMC_H_
-#define _ARCH_EMC_H_
-
-#include <asm/types.h>
-
-#define TEGRA_EMC_NUM_REGS     46
-
-/* EMC Registers */
-struct emc_ctlr {
-       u32 cfg;                /* 0x00: EMC_CFG */
-       u32 reserved0[3];       /* 0x04 ~ 0x0C */
-       u32 adr_cfg;            /* 0x10: EMC_ADR_CFG */
-       u32 adr_cfg1;           /* 0x14: EMC_ADR_CFG_1 */
-       u32 reserved1[2];       /* 0x18 ~ 0x18 */
-       u32 refresh_ctrl;       /* 0x20: EMC_REFCTRL */
-       u32 pin;                /* 0x24: EMC_PIN */
-       u32 timing_ctrl;        /* 0x28: EMC_TIMING_CONTROL */
-       u32 rc;                 /* 0x2C: EMC_RC */
-       u32 rfc;                /* 0x30: EMC_RFC */
-       u32 ras;                /* 0x34: EMC_RAS */
-       u32 rp;                 /* 0x38: EMC_RP */
-       u32 r2w;                /* 0x3C: EMC_R2W */
-       u32 w2r;                /* 0x40: EMC_W2R */
-       u32 r2p;                /* 0x44: EMC_R2P */
-       u32 w2p;                /* 0x48: EMC_W2P */
-       u32 rd_rcd;             /* 0x4C: EMC_RD_RCD */
-       u32 wd_rcd;             /* 0x50: EMC_WD_RCD */
-       u32 rrd;                /* 0x54: EMC_RRD */
-       u32 rext;               /* 0x58: EMC_REXT */
-       u32 wdv;                /* 0x5C: EMC_WDV */
-       u32 quse;               /* 0x60: EMC_QUSE */
-       u32 qrst;               /* 0x64: EMC_QRST */
-       u32 qsafe;              /* 0x68: EMC_QSAFE */
-       u32 rdv;                /* 0x6C: EMC_RDV */
-       u32 refresh;            /* 0x70: EMC_REFRESH */
-       u32 burst_refresh_num;  /* 0x74: EMC_BURST_REFRESH_NUM */
-       u32 pdex2wr;            /* 0x78: EMC_PDEX2WR */
-       u32 pdex2rd;            /* 0x7c: EMC_PDEX2RD */
-       u32 pchg2pden;          /* 0x80: EMC_PCHG2PDEN */
-       u32 act2pden;           /* 0x84: EMC_ACT2PDEN */
-       u32 ar2pden;            /* 0x88: EMC_AR2PDEN */
-       u32 rw2pden;            /* 0x8C: EMC_RW2PDEN */
-       u32 txsr;               /* 0x90: EMC_TXSR */
-       u32 tcke;               /* 0x94: EMC_TCKE */
-       u32 tfaw;               /* 0x98: EMC_TFAW */
-       u32 trpab;              /* 0x9C: EMC_TRPAB */
-       u32 tclkstable;         /* 0xA0: EMC_TCLKSTABLE */
-       u32 tclkstop;           /* 0xA4: EMC_TCLKSTOP */
-       u32 trefbw;             /* 0xA8: EMC_TREFBW */
-       u32 quse_extra;         /* 0xAC: EMC_QUSE_EXTRA */
-       u32 odt_write;          /* 0xB0: EMC_ODT_WRITE */
-       u32 odt_read;           /* 0xB4: EMC_ODT_READ */
-       u32 reserved2[5];       /* 0xB8 ~ 0xC8 */
-       u32 mrs;                /* 0xCC: EMC_MRS */
-       u32 emrs;               /* 0xD0: EMC_EMRS */
-       u32 ref;                /* 0xD4: EMC_REF */
-       u32 pre;                /* 0xD8: EMC_PRE */
-       u32 nop;                /* 0xDC: EMC_NOP */
-       u32 self_ref;           /* 0xE0: EMC_SELF_REF */
-       u32 dpd;                /* 0xE4: EMC_DPD */
-       u32 mrw;                /* 0xE8: EMC_MRW */
-       u32 mrr;                /* 0xEC: EMC_MRR */
-       u32 reserved3;          /* 0xF0: */
-       u32 fbio_cfg1;          /* 0xF4: EMC_FBIO_CFG1 */
-       u32 fbio_dqsib_dly;     /* 0xF8: EMC_FBIO_DQSIB_DLY */
-       u32 fbio_dqsib_dly_msb; /* 0xFC: EMC_FBIO_DQSIB_DLY_MSG */
-       u32 fbio_spare;         /* 0x100: SBIO_SPARE */
-                               /* There are more registers ... */
-};
-
-/**
- * Set up the EMC for the given rate. The timing parameters are retrieved
- * from the device tree "nvidia,tegra20-emc" node and its
- * "nvidia,tegra20-emc-table" sub-nodes.
- *
- * @param blob Device tree blob
- * @param rate Clock speed of memory controller in Hz (=2x memory bus rate)
- * @return 0 if ok, else -ve error code (look in emc.c to decode it)
- */
-int tegra_set_emc(const void *blob, unsigned rate);
-
-/**
- * Get a pointer to the EMC controller from the device tree.
- *
- * @param blob Device tree blob
- * @return pointer to EMC controller
- */
-struct emc_ctlr *emc_get_controller(const void *blob);
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/flow.h b/arch/arm/include/asm/arch-tegra2/flow.h
deleted file mode 100644 (file)
index cce6cbf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * (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 _FLOW_H_
-#define _FLOW_H_
-
-struct flow_ctlr {
-       u32     halt_cpu_events;
-       u32     halt_cop_events;
-       u32     cpu_csr;
-       u32     cop_csr;
-       u32     halt_cpu1_events;
-       u32     cpu1_csr;
-};
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/funcmux.h b/arch/arm/include/asm/arch-tegra2/funcmux.h
deleted file mode 100644 (file)
index dcd512f..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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
- */
-
-/* Tegra2 high-level function multiplexing */
-
-#ifndef __FUNCMUX_H
-#define __FUNCMUX_H
-
-/* Configs supported by the func mux */
-enum {
-       FUNCMUX_DEFAULT = 0,    /* default config */
-
-       /* UART configs */
-       FUNCMUX_UART1_IRRX_IRTX = 0,
-       FUNCMUX_UART1_UAA_UAB,
-       FUNCMUX_UART1_GPU,
-       FUNCMUX_UART1_SDIO1,
-       FUNCMUX_UART2_IRDA = 0,
-       FUNCMUX_UART4_GMC = 0,
-
-       /* I2C configs */
-       FUNCMUX_DVC_I2CP = 0,
-       FUNCMUX_I2C1_RM = 0,
-       FUNCMUX_I2C2_DDC = 0,
-       FUNCMUX_I2C2_PTA,
-       FUNCMUX_I2C3_DTF = 0,
-
-       /* SDMMC configs */
-       FUNCMUX_SDMMC1_SDIO1_4BIT = 0,
-       FUNCMUX_SDMMC2_DTA_DTD_8BIT = 0,
-       FUNCMUX_SDMMC3_SDB_4BIT = 0,
-       FUNCMUX_SDMMC3_SDB_SLXA_8BIT,
-       FUNCMUX_SDMMC4_ATC_ATD_8BIT = 0,
-       FUNCMUX_SDMMC4_ATB_GMA_4_BIT,
-       FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT,
-
-       /* USB configs */
-       FUNCMUX_USB2_ULPI = 0,
-
-       /* Serial Flash configs */
-       FUNCMUX_SPI1_GMC_GMD = 0,
-};
-
-/**
- * Select a config for a particular peripheral.
- *
- * Each peripheral can operate through a number of configurations,
- * which are sets of pins that it uses to bring out its signals.
- * The basic config is 0, and higher numbers indicate different
- * pinmux settings to bring the peripheral out on other pins,
- *
- * This function also disables tristate for the function's pins,
- * so that they operate in normal mode.
- *
- * @param id           Peripheral id
- * @param config       Configuration to use (FUNCMUX_...), 0 for default
- * @return 0 if ok, -1 on error (e.g. incorrect id or config)
- */
-int funcmux_select(enum periph_id id, int config);
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/fuse.h b/arch/arm/include/asm/arch-tegra2/fuse.h
deleted file mode 100644 (file)
index b7e3808..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  (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 _FUSE_H_
-#define _FUSE_H_
-
-/* FUSE registers */
-struct fuse_regs {
-       u32 reserved0[64];              /* 0x00 - 0xFC: */
-       u32 production_mode;            /* 0x100: FUSE_PRODUCTION_MODE */
-       u32 reserved1[3];               /* 0x104 - 0x10c: */
-       u32 sku_info;                   /* 0x110 */
-       u32 reserved2[13];              /* 0x114 - 0x144: */
-       u32 fa;                         /* 0x148: FUSE_FA */
-       u32 reserved3[21];              /* 0x14C - 0x19C: */
-       u32 security_mode;              /* 0x1A0: FUSE_SECURITY_MODE */
-};
-
-#endif /* ifndef _FUSE_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/gp_padctrl.h b/arch/arm/include/asm/arch-tegra2/gp_padctrl.h
deleted file mode 100644 (file)
index 1755ab2..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *  (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 _GP_PADCTRL_H_
-#define _GP_PADCTRL_H_
-
-/* APB_MISC_GP and padctrl registers */
-struct apb_misc_gp_ctlr {
-       u32     modereg;        /* 0x00: APB_MISC_GP_MODEREG */
-       u32     hidrev;         /* 0x04: APB_MISC_GP_HIDREV */
-       u32     reserved0[22];  /* 0x08 - 0x5C: */
-       u32     emu_revid;      /* 0x60: APB_MISC_GP_EMU_REVID */
-       u32     xactor_scratch; /* 0x64: APB_MISC_GP_XACTOR_SCRATCH */
-       u32     aocfg1;         /* 0x68: APB_MISC_GP_AOCFG1PADCTRL */
-       u32     aocfg2;         /* 0x6c: APB_MISC_GP_AOCFG2PADCTRL */
-       u32     atcfg1;         /* 0x70: APB_MISC_GP_ATCFG1PADCTRL */
-       u32     atcfg2;         /* 0x74: APB_MISC_GP_ATCFG2PADCTRL */
-       u32     cdevcfg1;       /* 0x78: APB_MISC_GP_CDEV1CFGPADCTRL */
-       u32     cdevcfg2;       /* 0x7C: APB_MISC_GP_CDEV2CFGPADCTRL */
-       u32     csuscfg;        /* 0x80: APB_MISC_GP_CSUSCFGPADCTRL */
-       u32     dap1cfg;        /* 0x84: APB_MISC_GP_DAP1CFGPADCTRL */
-       u32     dap2cfg;        /* 0x88: APB_MISC_GP_DAP2CFGPADCTRL */
-       u32     dap3cfg;        /* 0x8C: APB_MISC_GP_DAP3CFGPADCTRL */
-       u32     dap4cfg;        /* 0x90: APB_MISC_GP_DAP4CFGPADCTRL */
-       u32     dbgcfg;         /* 0x94: APB_MISC_GP_DBGCFGPADCTRL */
-       u32     lcdcfg1;        /* 0x98: APB_MISC_GP_LCDCFG1PADCTRL */
-       u32     lcdcfg2;        /* 0x9C: APB_MISC_GP_LCDCFG2PADCTRL */
-       u32     sdmmc2_cfg;     /* 0xA0: APB_MISC_GP_SDMMC2CFGPADCTRL */
-       u32     sdmmc3_cfg;     /* 0xA4: APB_MISC_GP_SDMMC3CFGPADCTRL */
-       u32     spicfg;         /* 0xA8: APB_MISC_GP_SPICFGPADCTRL */
-       u32     uaacfg;         /* 0xAC: APB_MISC_GP_UAACFGPADCTRL */
-       u32     uabcfg;         /* 0xB0: APB_MISC_GP_UABCFGPADCTRL */
-       u32     uart2cfg;       /* 0xB4: APB_MISC_GP_UART2CFGPADCTRL */
-       u32     uart3cfg;       /* 0xB8: APB_MISC_GP_UART3CFGPADCTRL */
-       u32     vicfg1;         /* 0xBC: APB_MISC_GP_VICFG1PADCTRL */
-       u32     vicfg2;         /* 0xC0: APB_MISC_GP_VICFG2PADCTRL */
-       u32     xm2cfga;        /* 0xC4: APB_MISC_GP_XM2CFGAPADCTRL */
-       u32     xm2cfgc;        /* 0xC8: APB_MISC_GP_XM2CFGCPADCTRL */
-       u32     xm2cfgd;        /* 0xCC: APB_MISC_GP_XM2CFGDPADCTRL */
-       u32     xm2clkcfg;      /* 0xD0: APB_MISC_GP_XM2CLKCFGPADCTRL */
-       u32     memcomp;        /* 0xD4: APB_MISC_GP_MEMCOMPPADCTRL */
-};
-
-/* bit fields definitions for APB_MISC_GP_HIDREV register */
-#define HIDREV_CHIPID_SHIFT            8
-#define HIDREV_CHIPID_MASK             (0xff << HIDREV_CHIPID_SHIFT)
-#define HIDREV_MAJORPREV_SHIFT         4
-#define HIDREV_MAJORPREV_MASK          (0xf << HIDREV_MAJORPREV_SHIFT)
-
-/* CHIPID field returned from APB_MISC_GP_HIDREV register */
-#define CHIPID_TEGRA2                          0x20
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/gpio.h b/arch/arm/include/asm/arch-tegra2/gpio.h
deleted file mode 100644 (file)
index 40ddb02..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2011, Google Inc. All rights reserved.
- * See file CREDITS for list of people who contributed to this
- * project.
- * Portions Copyright 2011-2012 NVIDIA Corporation
- *
- * 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 _TEGRA_GPIO_H_
-#define _TEGRA_GPIO_H_
-
-/*
- * The Tegra 2x GPIO controller has 224 GPIOs arranged in 7 banks of 4 ports,
- * each with 8 GPIOs.
- */
-#define TEGRA_GPIO_PORTS       4       /* number of ports per bank */
-#define TEGRA_GPIO_BANKS       7       /* number of banks */
-#define MAX_NUM_GPIOS          (TEGRA_GPIO_PORTS * TEGRA_GPIO_BANKS * 8)
-#define GPIO_NAME_SIZE         20      /* gpio_request max label len */
-
-/* GPIO Controller registers for a single bank */
-struct gpio_ctlr_bank {
-       uint gpio_config[TEGRA_GPIO_PORTS];
-       uint gpio_dir_out[TEGRA_GPIO_PORTS];
-       uint gpio_out[TEGRA_GPIO_PORTS];
-       uint gpio_in[TEGRA_GPIO_PORTS];
-       uint gpio_int_status[TEGRA_GPIO_PORTS];
-       uint gpio_int_enable[TEGRA_GPIO_PORTS];
-       uint gpio_int_level[TEGRA_GPIO_PORTS];
-       uint gpio_int_clear[TEGRA_GPIO_PORTS];
-};
-
-struct gpio_ctlr {
-       struct gpio_ctlr_bank gpio_bank[TEGRA_GPIO_BANKS];
-};
-
-#define GPIO_BANK(x)           ((x) >> 5)
-#define GPIO_PORT(x)           (((x) >> 3) & 0x3)
-#define GPIO_FULLPORT(x)       ((x) >> 3)
-#define GPIO_BIT(x)            ((x) & 0x7)
-
-enum gpio_pin {
-       GPIO_PA0 = 0,   /* pin 0 */
-       GPIO_PA1,
-       GPIO_PA2,
-       GPIO_PA3,
-       GPIO_PA4,
-       GPIO_PA5,
-       GPIO_PA6,
-       GPIO_PA7,
-       GPIO_PB0,       /* pin 8 */
-       GPIO_PB1,
-       GPIO_PB2,
-       GPIO_PB3,
-       GPIO_PB4,
-       GPIO_PB5,
-       GPIO_PB6,
-       GPIO_PB7,
-       GPIO_PC0,       /* pin 16 */
-       GPIO_PC1,
-       GPIO_PC2,
-       GPIO_PC3,
-       GPIO_PC4,
-       GPIO_PC5,
-       GPIO_PC6,
-       GPIO_PC7,
-       GPIO_PD0,       /* pin 24 */
-       GPIO_PD1,
-       GPIO_PD2,
-       GPIO_PD3,
-       GPIO_PD4,
-       GPIO_PD5,
-       GPIO_PD6,
-       GPIO_PD7,
-       GPIO_PE0,       /* pin 32 */
-       GPIO_PE1,
-       GPIO_PE2,
-       GPIO_PE3,
-       GPIO_PE4,
-       GPIO_PE5,
-       GPIO_PE6,
-       GPIO_PE7,
-       GPIO_PF0,       /* pin 40 */
-       GPIO_PF1,
-       GPIO_PF2,
-       GPIO_PF3,
-       GPIO_PF4,
-       GPIO_PF5,
-       GPIO_PF6,
-       GPIO_PF7,
-       GPIO_PG0,       /* pin 48 */
-       GPIO_PG1,
-       GPIO_PG2,
-       GPIO_PG3,
-       GPIO_PG4,
-       GPIO_PG5,
-       GPIO_PG6,
-       GPIO_PG7,
-       GPIO_PH0,       /* pin 56 */
-       GPIO_PH1,
-       GPIO_PH2,
-       GPIO_PH3,
-       GPIO_PH4,
-       GPIO_PH5,
-       GPIO_PH6,
-       GPIO_PH7,
-       GPIO_PI0,       /* pin 64 */
-       GPIO_PI1,
-       GPIO_PI2,
-       GPIO_PI3,
-       GPIO_PI4,
-       GPIO_PI5,
-       GPIO_PI6,
-       GPIO_PI7,
-       GPIO_PJ0,       /* pin 72 */
-       GPIO_PJ1,
-       GPIO_PJ2,
-       GPIO_PJ3,
-       GPIO_PJ4,
-       GPIO_PJ5,
-       GPIO_PJ6,
-       GPIO_PJ7,
-       GPIO_PK0,       /* pin 80 */
-       GPIO_PK1,
-       GPIO_PK2,
-       GPIO_PK3,
-       GPIO_PK4,
-       GPIO_PK5,
-       GPIO_PK6,
-       GPIO_PK7,
-       GPIO_PL0,       /* pin 88 */
-       GPIO_PL1,
-       GPIO_PL2,
-       GPIO_PL3,
-       GPIO_PL4,
-       GPIO_PL5,
-       GPIO_PL6,
-       GPIO_PL7,
-       GPIO_PM0,       /* pin 96 */
-       GPIO_PM1,
-       GPIO_PM2,
-       GPIO_PM3,
-       GPIO_PM4,
-       GPIO_PM5,
-       GPIO_PM6,
-       GPIO_PM7,
-       GPIO_PN0,       /* pin 104 */
-       GPIO_PN1,
-       GPIO_PN2,
-       GPIO_PN3,
-       GPIO_PN4,
-       GPIO_PN5,
-       GPIO_PN6,
-       GPIO_PN7,
-       GPIO_PO0,       /* pin 112 */
-       GPIO_PO1,
-       GPIO_PO2,
-       GPIO_PO3,
-       GPIO_PO4,
-       GPIO_PO5,
-       GPIO_PO6,
-       GPIO_PO7,
-       GPIO_PP0,       /* pin 120 */
-       GPIO_PP1,
-       GPIO_PP2,
-       GPIO_PP3,
-       GPIO_PP4,
-       GPIO_PP5,
-       GPIO_PP6,
-       GPIO_PP7,
-       GPIO_PQ0,       /* pin 128 */
-       GPIO_PQ1,
-       GPIO_PQ2,
-       GPIO_PQ3,
-       GPIO_PQ4,
-       GPIO_PQ5,
-       GPIO_PQ6,
-       GPIO_PQ7,
-       GPIO_PR0,       /* pin 136 */
-       GPIO_PR1,
-       GPIO_PR2,
-       GPIO_PR3,
-       GPIO_PR4,
-       GPIO_PR5,
-       GPIO_PR6,
-       GPIO_PR7,
-       GPIO_PS0,       /* pin 144 */
-       GPIO_PS1,
-       GPIO_PS2,
-       GPIO_PS3,
-       GPIO_PS4,
-       GPIO_PS5,
-       GPIO_PS6,
-       GPIO_PS7,
-       GPIO_PT0,       /* pin 152 */
-       GPIO_PT1,
-       GPIO_PT2,
-       GPIO_PT3,
-       GPIO_PT4,
-       GPIO_PT5,
-       GPIO_PT6,
-       GPIO_PT7,
-       GPIO_PU0,       /* pin 160 */
-       GPIO_PU1,
-       GPIO_PU2,
-       GPIO_PU3,
-       GPIO_PU4,
-       GPIO_PU5,
-       GPIO_PU6,
-       GPIO_PU7,
-       GPIO_PV0,       /* pin 168 */
-       GPIO_PV1,
-       GPIO_PV2,
-       GPIO_PV3,
-       GPIO_PV4,
-       GPIO_PV5,
-       GPIO_PV6,
-       GPIO_PV7,
-       GPIO_PW0,       /* pin 176 */
-       GPIO_PW1,
-       GPIO_PW2,
-       GPIO_PW3,
-       GPIO_PW4,
-       GPIO_PW5,
-       GPIO_PW6,
-       GPIO_PW7,
-       GPIO_PX0,       /* pin 184 */
-       GPIO_PX1,
-       GPIO_PX2,
-       GPIO_PX3,
-       GPIO_PX4,
-       GPIO_PX5,
-       GPIO_PX6,
-       GPIO_PX7,
-       GPIO_PY0,       /* pin 192 */
-       GPIO_PY1,
-       GPIO_PY2,
-       GPIO_PY3,
-       GPIO_PY4,
-       GPIO_PY5,
-       GPIO_PY6,
-       GPIO_PY7,
-       GPIO_PZ0,       /* pin 200 */
-       GPIO_PZ1,
-       GPIO_PZ2,
-       GPIO_PZ3,
-       GPIO_PZ4,
-       GPIO_PZ5,
-       GPIO_PZ6,
-       GPIO_PZ7,
-       GPIO_PAA0,      /* pin 208 */
-       GPIO_PAA1,
-       GPIO_PAA2,
-       GPIO_PAA3,
-       GPIO_PAA4,
-       GPIO_PAA5,
-       GPIO_PAA6,
-       GPIO_PAA7,
-       GPIO_PBB0,      /* pin 216 */
-       GPIO_PBB1,
-       GPIO_PBB2,
-       GPIO_PBB3,
-       GPIO_PBB4,
-       GPIO_PBB5,
-       GPIO_PBB6,
-       GPIO_PBB7,      /* pin 223 */
-};
-
-/*
- * Tegra2-specific GPIO API
- */
-
-void gpio_info(void);
-
-#define gpio_status()  gpio_info()
-#endif /* TEGRA_GPIO_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/mmc.h b/arch/arm/include/asm/arch-tegra2/mmc.h
deleted file mode 100644 (file)
index c1f12db..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2011, Google Inc. All rights reserved.
- * 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_MMC_H_
-#define _TEGRA2_MMC_H_
-
-int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio);
-
-#endif /* TEGRA2_MMC_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/pinmux.h b/arch/arm/include/asm/arch-tegra2/pinmux.h
deleted file mode 100644 (file)
index 03fa7ca..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- *  (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_
-
-/*
- * Pin groups which we adjust. There are three basic attributes of each pin
- * group which use this enum:
- *
- *     - function
- *     - pullup / pulldown
- *     - tristate or normal
- */
-enum pmux_pingrp {
-       /* APB_MISC_PP_TRISTATE_REG_A_0 */
-       PINGRP_ATA,
-       PINGRP_ATB,
-       PINGRP_ATC,
-       PINGRP_ATD,
-       PINGRP_CDEV1,
-       PINGRP_CDEV2,
-       PINGRP_CSUS,
-       PINGRP_DAP1,
-
-       PINGRP_DAP2,
-       PINGRP_DAP3,
-       PINGRP_DAP4,
-       PINGRP_DTA,
-       PINGRP_DTB,
-       PINGRP_DTC,
-       PINGRP_DTD,
-       PINGRP_DTE,
-
-       PINGRP_GPU,
-       PINGRP_GPV,
-       PINGRP_I2CP,
-       PINGRP_IRTX,
-       PINGRP_IRRX,
-       PINGRP_KBCB,
-       PINGRP_KBCA,
-       PINGRP_PMC,
-
-       PINGRP_PTA,
-       PINGRP_RM,
-       PINGRP_KBCE,
-       PINGRP_KBCF,
-       PINGRP_GMA,
-       PINGRP_GMC,
-       PINGRP_SDIO1,
-       PINGRP_OWC,
-
-       /* 32: APB_MISC_PP_TRISTATE_REG_B_0 */
-       PINGRP_GME,
-       PINGRP_SDC,
-       PINGRP_SDD,
-       PINGRP_RESERVED0,
-       PINGRP_SLXA,
-       PINGRP_SLXC,
-       PINGRP_SLXD,
-       PINGRP_SLXK,
-
-       PINGRP_SPDI,
-       PINGRP_SPDO,
-       PINGRP_SPIA,
-       PINGRP_SPIB,
-       PINGRP_SPIC,
-       PINGRP_SPID,
-       PINGRP_SPIE,
-       PINGRP_SPIF,
-
-       PINGRP_SPIG,
-       PINGRP_SPIH,
-       PINGRP_UAA,
-       PINGRP_UAB,
-       PINGRP_UAC,
-       PINGRP_UAD,
-       PINGRP_UCA,
-       PINGRP_UCB,
-
-       PINGRP_RESERVED1,
-       PINGRP_ATE,
-       PINGRP_KBCC,
-       PINGRP_RESERVED2,
-       PINGRP_RESERVED3,
-       PINGRP_GMB,
-       PINGRP_GMD,
-       PINGRP_DDC,
-
-       /* 64: APB_MISC_PP_TRISTATE_REG_C_0 */
-       PINGRP_LD0,
-       PINGRP_LD1,
-       PINGRP_LD2,
-       PINGRP_LD3,
-       PINGRP_LD4,
-       PINGRP_LD5,
-       PINGRP_LD6,
-       PINGRP_LD7,
-
-       PINGRP_LD8,
-       PINGRP_LD9,
-       PINGRP_LD10,
-       PINGRP_LD11,
-       PINGRP_LD12,
-       PINGRP_LD13,
-       PINGRP_LD14,
-       PINGRP_LD15,
-
-       PINGRP_LD16,
-       PINGRP_LD17,
-       PINGRP_LHP0,
-       PINGRP_LHP1,
-       PINGRP_LHP2,
-       PINGRP_LVP0,
-       PINGRP_LVP1,
-       PINGRP_HDINT,
-
-       PINGRP_LM0,
-       PINGRP_LM1,
-       PINGRP_LVS,
-       PINGRP_LSC0,
-       PINGRP_LSC1,
-       PINGRP_LSCK,
-       PINGRP_LDC,
-       PINGRP_LCSN,
-
-       /* 96: APB_MISC_PP_TRISTATE_REG_D_0 */
-       PINGRP_LSPI,
-       PINGRP_LSDA,
-       PINGRP_LSDI,
-       PINGRP_LPW0,
-       PINGRP_LPW1,
-       PINGRP_LPW2,
-       PINGRP_LDI,
-       PINGRP_LHS,
-
-       PINGRP_LPP,
-       PINGRP_RESERVED4,
-       PINGRP_KBCD,
-       PINGRP_GPU7,
-       PINGRP_DTF,
-       PINGRP_UDA,
-       PINGRP_CRTP,
-       PINGRP_SDB,
-
-       /* these pin groups only have pullup and pull down control */
-       PINGRP_FIRST_NO_MUX,
-       PINGRP_CK32 = PINGRP_FIRST_NO_MUX,
-       PINGRP_DDRC,
-       PINGRP_PMCA,
-       PINGRP_PMCB,
-       PINGRP_PMCC,
-       PINGRP_PMCD,
-       PINGRP_PMCE,
-       PINGRP_XM2C,
-       PINGRP_XM2D,
-
-       PINGRP_COUNT,
-};
-
-/*
- * Functions which can be assigned to each of the pin groups. The values here
- * bear no relation to the values programmed into pinmux registers and are
- * purely a convenience. The translation is done through a table search.
- */
-enum pmux_func {
-       PMUX_FUNC_AHB_CLK,
-       PMUX_FUNC_APB_CLK,
-       PMUX_FUNC_AUDIO_SYNC,
-       PMUX_FUNC_CRT,
-       PMUX_FUNC_DAP1,
-       PMUX_FUNC_DAP2,
-       PMUX_FUNC_DAP3,
-       PMUX_FUNC_DAP4,
-       PMUX_FUNC_DAP5,
-       PMUX_FUNC_DISPA,
-       PMUX_FUNC_DISPB,
-       PMUX_FUNC_EMC_TEST0_DLL,
-       PMUX_FUNC_EMC_TEST1_DLL,
-       PMUX_FUNC_GMI,
-       PMUX_FUNC_GMI_INT,
-       PMUX_FUNC_HDMI,
-       PMUX_FUNC_I2C,
-       PMUX_FUNC_I2C2,
-       PMUX_FUNC_I2C3,
-       PMUX_FUNC_IDE,
-       PMUX_FUNC_IRDA,
-       PMUX_FUNC_KBC,
-       PMUX_FUNC_MIO,
-       PMUX_FUNC_MIPI_HS,
-       PMUX_FUNC_NAND,
-       PMUX_FUNC_OSC,
-       PMUX_FUNC_OWR,
-       PMUX_FUNC_PCIE,
-       PMUX_FUNC_PLLA_OUT,
-       PMUX_FUNC_PLLC_OUT1,
-       PMUX_FUNC_PLLM_OUT1,
-       PMUX_FUNC_PLLP_OUT2,
-       PMUX_FUNC_PLLP_OUT3,
-       PMUX_FUNC_PLLP_OUT4,
-       PMUX_FUNC_PWM,
-       PMUX_FUNC_PWR_INTR,
-       PMUX_FUNC_PWR_ON,
-       PMUX_FUNC_RTCK,
-       PMUX_FUNC_SDIO1,
-       PMUX_FUNC_SDIO2,
-       PMUX_FUNC_SDIO3,
-       PMUX_FUNC_SDIO4,
-       PMUX_FUNC_SFLASH,
-       PMUX_FUNC_SPDIF,
-       PMUX_FUNC_SPI1,
-       PMUX_FUNC_SPI2,
-       PMUX_FUNC_SPI2_ALT,
-       PMUX_FUNC_SPI3,
-       PMUX_FUNC_SPI4,
-       PMUX_FUNC_TRACE,
-       PMUX_FUNC_TWC,
-       PMUX_FUNC_UARTA,
-       PMUX_FUNC_UARTB,
-       PMUX_FUNC_UARTC,
-       PMUX_FUNC_UARTD,
-       PMUX_FUNC_UARTE,
-       PMUX_FUNC_ULPI,
-       PMUX_FUNC_VI,
-       PMUX_FUNC_VI_SENSOR_CLK,
-       PMUX_FUNC_XIO,
-       PMUX_FUNC_SAFE,
-
-       /* These don't have a name, but can be used in the table */
-       PMUX_FUNC_RSVD1,
-       PMUX_FUNC_RSVD2,
-       PMUX_FUNC_RSVD3,
-       PMUX_FUNC_RSVD4,
-       PMUX_FUNC_RSVD, /* Not valid and should not be used */
-
-       PMUX_FUNC_COUNT,
-
-       PMUX_FUNC_NONE = -1,
-};
-
-/* return 1 if a pmux_func is in range */
-#define pmux_func_isvalid(func) ((func) >= 0 && (func) < PMUX_FUNC_COUNT && \
-               (func) != PMUX_FUNC_RSVD)
-
-/* The pullup/pulldown state of a pin group */
-enum pmux_pull {
-       PMUX_PULL_NORMAL = 0,
-       PMUX_PULL_DOWN,
-       PMUX_PULL_UP,
-};
-
-/* Defines whether a pin group is tristated or in normal operation */
-enum pmux_tristate {
-       PMUX_TRI_NORMAL = 0,
-       PMUX_TRI_TRISTATE = 1,
-};
-
-/* Available power domains used by pin groups */
-enum pmux_vddio {
-       PMUX_VDDIO_BB = 0,
-       PMUX_VDDIO_LCD,
-       PMUX_VDDIO_VI,
-       PMUX_VDDIO_UART,
-       PMUX_VDDIO_DDR,
-       PMUX_VDDIO_NAND,
-       PMUX_VDDIO_SYS,
-       PMUX_VDDIO_AUDIO,
-       PMUX_VDDIO_SD,
-
-       PMUX_VDDIO_NONE
-};
-
-enum {
-       PMUX_TRISTATE_REGS      = 4,
-       PMUX_MUX_REGS           = 7,
-       PMUX_PULL_REGS          = 5,
-};
-
-/* APB MISC Pin Mux and Tristate (APB_MISC_PP_) registers */
-struct pmux_tri_ctlr {
-       uint pmt_reserved0;             /* ABP_MISC_PP_ reserved offset 00 */
-       uint pmt_reserved1;             /* ABP_MISC_PP_ reserved offset 04 */
-       uint pmt_strap_opt_a;           /* _STRAPPING_OPT_A_0, offset 08   */
-       uint pmt_reserved2;             /* ABP_MISC_PP_ reserved offset 0C */
-       uint pmt_reserved3;             /* ABP_MISC_PP_ reserved offset 10 */
-       uint pmt_tri[PMUX_TRISTATE_REGS];/* _TRI_STATE_REG_A/B/C/D_0 14-20 */
-       uint pmt_cfg_ctl;               /* _CONFIG_CTL_0, offset 24        */
-
-       uint pmt_reserved[22];          /* ABP_MISC_PP_ reserved offs 28-7C */
-
-       uint pmt_ctl[PMUX_MUX_REGS];    /* _PIN_MUX_CTL_A-G_0, offset 80   */
-       uint pmt_reserved4;             /* ABP_MISC_PP_ reserved offset 9c */
-       uint pmt_pull[PMUX_PULL_REGS];  /* APB_MISC_PP_PULLUPDOWN_REG_A-E  */
-};
-
-/*
- * This defines the configuration for a pin, including the function assigned,
- * pull up/down settings and tristate settings. Having set up one of these
- * you can call pinmux_config_pingroup() to configure a pin in one step. Also
- * available is pinmux_config_table() to configure a list of pins.
- */
-struct pingroup_config {
-       enum pmux_pingrp pingroup;      /* pin group PINGRP_...             */
-       enum pmux_func func;            /* function to assign FUNC_...      */
-       enum pmux_pull pull;            /* pull up/down/normal PMUX_PULL_...*/
-       enum pmux_tristate tristate;    /* tristate or normal PMUX_TRI_...  */
-};
-
-/* Set a pin group to tristate */
-void pinmux_tristate_enable(enum pmux_pingrp pin);
-
-/* Set a pin group to normal (non tristate) */
-void pinmux_tristate_disable(enum pmux_pingrp pin);
-
-/* Set the pull up/down feature for a pin group */
-void pinmux_set_pullupdown(enum pmux_pingrp pin, enum pmux_pull pupd);
-
-/* Set the mux function for a pin group */
-void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func);
-
-/* Set the complete configuration for a pin group */
-void pinmux_config_pingroup(struct pingroup_config *config);
-
-void pinmux_set_tristate(enum pmux_pingrp pin, int enable);
-
-/**
- * Configuure a list of pin groups
- *
- * @param config       List of config items
- * @param len          Number of config items in list
- */
-void pinmux_config_table(struct pingroup_config *config, int len);
-
-#endif /* PINMUX_H */
diff --git a/arch/arm/include/asm/arch-tegra2/pmc.h b/arch/arm/include/asm/arch-tegra2/pmc.h
deleted file mode 100644 (file)
index b1d47cd..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *  (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_
-
-/* Power Management Controller (APBDEV_PMC_) registers */
-struct pmc_ctlr {
-       uint pmc_cntrl;                 /* _CNTRL_0, offset 00 */
-       uint pmc_sec_disable;           /* _SEC_DISABLE_0, offset 04 */
-       uint pmc_pmc_swrst;             /* _PMC_SWRST_0, offset 08 */
-       uint pmc_wake_mask;             /* _WAKE_MASK_0, offset 0C */
-       uint pmc_wake_lvl;              /* _WAKE_LVL_0, offset 10 */
-       uint pmc_wake_status;           /* _WAKE_STATUS_0, offset 14 */
-       uint pmc_sw_wake_status;        /* _SW_WAKE_STATUS_0, offset 18 */
-       uint pmc_dpd_pads_oride;        /* _DPD_PADS_ORIDE_0, offset 1C */
-       uint pmc_dpd_sample;            /* _DPD_PADS_SAMPLE_0, offset 20 */
-       uint pmc_dpd_enable;            /* _DPD_PADS_ENABLE_0, offset 24 */
-       uint pmc_pwrgate_timer_off;     /* _PWRGATE_TIMER_OFF_0, offset 28 */
-       uint pmc_pwrgate_timer_on;      /* _PWRGATE_TIMER_ON_0, offset 2C */
-       uint pmc_pwrgate_toggle;        /* _PWRGATE_TOGGLE_0, offset 30 */
-       uint pmc_remove_clamping;       /* _REMOVE_CLAMPING_CMD_0, offset 34 */
-       uint pmc_pwrgate_status;        /* _PWRGATE_STATUS_0, offset 38 */
-       uint pmc_pwrgood_timer;         /* _PWRGOOD_TIMER_0, offset 3C */
-       uint pmc_blink_timer;           /* _BLINK_TIMER_0, offset 40 */
-       uint pmc_no_iopower;            /* _NO_IOPOWER_0, offset 44 */
-       uint pmc_pwr_det;               /* _PWR_DET_0, offset 48 */
-       uint pmc_pwr_det_latch;         /* _PWR_DET_LATCH_0, offset 4C */
-
-       uint pmc_scratch0;              /* _SCRATCH0_0, offset 50 */
-       uint pmc_scratch1;              /* _SCRATCH1_0, offset 54 */
-       uint pmc_scratch2;              /* _SCRATCH2_0, offset 58 */
-       uint pmc_scratch3;              /* _SCRATCH3_0, offset 5C */
-       uint pmc_scratch4;              /* _SCRATCH4_0, offset 60 */
-       uint pmc_scratch5;              /* _SCRATCH5_0, offset 64 */
-       uint pmc_scratch6;              /* _SCRATCH6_0, offset 68 */
-       uint pmc_scratch7;              /* _SCRATCH7_0, offset 6C */
-       uint pmc_scratch8;              /* _SCRATCH8_0, offset 70 */
-       uint pmc_scratch9;              /* _SCRATCH9_0, offset 74 */
-       uint pmc_scratch10;             /* _SCRATCH10_0, offset 78 */
-       uint pmc_scratch11;             /* _SCRATCH11_0, offset 7C */
-       uint pmc_scratch12;             /* _SCRATCH12_0, offset 80 */
-       uint pmc_scratch13;             /* _SCRATCH13_0, offset 84 */
-       uint pmc_scratch14;             /* _SCRATCH14_0, offset 88 */
-       uint pmc_scratch15;             /* _SCRATCH15_0, offset 8C */
-       uint pmc_scratch16;             /* _SCRATCH16_0, offset 90 */
-       uint pmc_scratch17;             /* _SCRATCH17_0, offset 94 */
-       uint pmc_scratch18;             /* _SCRATCH18_0, offset 98 */
-       uint pmc_scratch19;             /* _SCRATCH19_0, offset 9C */
-       uint pmc_scratch20;             /* _SCRATCH20_0, offset A0 */
-       uint pmc_scratch21;             /* _SCRATCH21_0, offset A4 */
-       uint pmc_scratch22;             /* _SCRATCH22_0, offset A8 */
-       uint pmc_scratch23;             /* _SCRATCH23_0, offset AC */
-
-       uint pmc_secure_scratch0;       /* _SECURE_SCRATCH0_0, offset B0 */
-       uint pmc_secure_scratch1;       /* _SECURE_SCRATCH1_0, offset B4 */
-       uint pmc_secure_scratch2;       /* _SECURE_SCRATCH2_0, offset B8 */
-       uint pmc_secure_scratch3;       /* _SECURE_SCRATCH3_0, offset BC */
-       uint pmc_secure_scratch4;       /* _SECURE_SCRATCH4_0, offset C0 */
-       uint pmc_secure_scratch5;       /* _SECURE_SCRATCH5_0, offset C4 */
-
-       uint pmc_cpupwrgood_timer;      /* _CPUPWRGOOD_TIMER_0, offset C8 */
-       uint pmc_cpupwroff_timer;       /* _CPUPWROFF_TIMER_0, offset CC */
-       uint pmc_pg_mask;               /* _PG_MASK_0, offset D0 */
-       uint pmc_pg_mask_1;             /* _PG_MASK_1_0, offset D4 */
-       uint pmc_auto_wake_lvl;         /* _AUTO_WAKE_LVL_0, offset D8 */
-       uint pmc_auto_wake_lvl_mask;    /* _AUTO_WAKE_LVL_MASK_0, offset DC */
-       uint pmc_wake_delay;            /* _WAKE_DELAY_0, offset E0 */
-       uint pmc_pwr_det_val;           /* _PWR_DET_VAL_0, offset E4 */
-       uint pmc_ddr_pwr;               /* _DDR_PWR_0, offset E8 */
-       uint pmc_usb_debounce_del;      /* _USB_DEBOUNCE_DEL_0, offset EC */
-       uint pmc_usb_ao;                /* _USB_AO_0, offset F0 */
-       uint pmc_crypto_op;             /* _CRYPTO_OP__0, offset F4 */
-       uint pmc_pllp_wb0_override;     /* _PLLP_WB0_OVERRIDE_0, offset F8 */
-
-       uint pmc_scratch24;             /* _SCRATCH24_0, offset FC */
-       uint pmc_scratch25;             /* _SCRATCH24_0, offset 100 */
-       uint pmc_scratch26;             /* _SCRATCH24_0, offset 104 */
-       uint pmc_scratch27;             /* _SCRATCH24_0, offset 108 */
-       uint pmc_scratch28;             /* _SCRATCH24_0, offset 10C */
-       uint pmc_scratch29;             /* _SCRATCH24_0, offset 110 */
-       uint pmc_scratch30;             /* _SCRATCH24_0, offset 114 */
-       uint pmc_scratch31;             /* _SCRATCH24_0, offset 118 */
-       uint pmc_scratch32;             /* _SCRATCH24_0, offset 11C */
-       uint pmc_scratch33;             /* _SCRATCH24_0, offset 120 */
-       uint pmc_scratch34;             /* _SCRATCH24_0, offset 124 */
-       uint pmc_scratch35;             /* _SCRATCH24_0, offset 128 */
-       uint pmc_scratch36;             /* _SCRATCH24_0, offset 12C */
-       uint pmc_scratch37;             /* _SCRATCH24_0, offset 130 */
-       uint pmc_scratch38;             /* _SCRATCH24_0, offset 134 */
-       uint pmc_scratch39;             /* _SCRATCH24_0, offset 138 */
-       uint pmc_scratch40;             /* _SCRATCH24_0, offset 13C */
-       uint pmc_scratch41;             /* _SCRATCH24_0, offset 140 */
-       uint pmc_scratch42;             /* _SCRATCH24_0, offset 144 */
-
-       uint pmc_bo_mirror0;            /* _BOUNDOUT_MIRROR0_0, offset 148 */
-       uint pmc_bo_mirror1;            /* _BOUNDOUT_MIRROR1_0, offset 14C */
-       uint pmc_bo_mirror2;            /* _BOUNDOUT_MIRROR2_0, offset 150 */
-       uint pmc_sys_33v_en;            /* _SYS_33V_EN_0, offset 154 */
-       uint pmc_bo_mirror_access;      /* _BOUNDOUT_MIRROR_ACCESS_0, off158 */
-       uint pmc_gate;                  /* _GATE_0, offset 15C */
-};
-
-#define CPU_PWRED      1
-#define CPU_CLMP       1
-
-#define PARTID_CP      0xFFFFFFF8
-#define START_CP       (1 << 8)
-
-#define CPUPWRREQ_OE   (1 << 16)
-
-#endif /* PMC_H */
diff --git a/arch/arm/include/asm/arch-tegra2/pmu.h b/arch/arm/include/asm/arch-tegra2/pmu.h
deleted file mode 100644 (file)
index 390815f..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  (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 _ARCH_PMU_H_
-#define _ARCH_PMU_H_
-
-/* Set core and CPU voltages to nominal levels */
-int pmu_set_nominal(void);
-
-#endif /* _ARCH_PMU_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/scu.h b/arch/arm/include/asm/arch-tegra2/scu.h
deleted file mode 100644 (file)
index 787ded0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  (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 _SCU_H_
-#define _SCU_H_
-
-/* ARM Snoop Control Unit (SCU) registers */
-struct scu_ctlr {
-       uint scu_ctrl;          /* SCU Control Register, offset 00 */
-       uint scu_cfg;           /* SCU Config Register, offset 04 */
-       uint scu_cpu_pwr_stat;  /* SCU CPU Power Status Register, offset 08 */
-       uint scu_inv_all;       /* SCU Invalidate All Register, offset 0C */
-       uint scu_reserved0[12]; /* reserved, offset 10-3C */
-       uint scu_filt_start;    /* SCU Filtering Start Address Reg, offset 40 */
-       uint scu_filt_end;      /* SCU Filtering End Address Reg, offset 44 */
-       uint scu_reserved1[2];  /* reserved, offset 48-4C */
-       uint scu_acc_ctl;       /* SCU Access Control Register, offset 50 */
-       uint scu_ns_acc_ctl;    /* SCU Non-secure Access Cntrl Reg, offset 54 */
-};
-
-#define SCU_CTRL_ENABLE                (1 << 0)
-
-#endif /* SCU_H */
diff --git a/arch/arm/include/asm/arch-tegra2/sdram_param.h b/arch/arm/include/asm/arch-tegra2/sdram_param.h
deleted file mode 100644 (file)
index 6c427d0..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- *  (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 _SDRAM_PARAM_H_
-#define _SDRAM_PARAM_H_
-
-/*
- * Defines the number of 32-bit words provided in each set of SDRAM parameters
- * for arbitration configuration data.
- */
-#define BCT_SDRAM_ARB_CONFIG_WORDS 27
-
-enum memory_type {
-       MEMORY_TYPE_NONE = 0,
-       MEMORY_TYPE_DDR,
-       MEMORY_TYPE_LPDDR,
-       MEMORY_TYPE_DDR2,
-       MEMORY_TYPE_LPDDR2,
-       MEMORY_TYPE_NUM,
-       MEMORY_TYPE_FORCE32 = 0x7FFFFFFF
-};
-
-/* Defines the SDRAM parameter structure */
-struct sdram_params {
-       enum memory_type memory_type;
-       u32 pllm_charge_pump_setup_control;
-       u32 pllm_loop_filter_setup_control;
-       u32 pllm_input_divider;
-       u32 pllm_feedback_divider;
-       u32 pllm_post_divider;
-       u32 pllm_stable_time;
-       u32 emc_clock_divider;
-       u32 emc_auto_cal_interval;
-       u32 emc_auto_cal_config;
-       u32 emc_auto_cal_wait;
-       u32 emc_pin_program_wait;
-       u32 emc_rc;
-       u32 emc_rfc;
-       u32 emc_ras;
-       u32 emc_rp;
-       u32 emc_r2w;
-       u32 emc_w2r;
-       u32 emc_r2p;
-       u32 emc_w2p;
-       u32 emc_rd_rcd;
-       u32 emc_wr_rcd;
-       u32 emc_rrd;
-       u32 emc_rext;
-       u32 emc_wdv;
-       u32 emc_quse;
-       u32 emc_qrst;
-       u32 emc_qsafe;
-       u32 emc_rdv;
-       u32 emc_refresh;
-       u32 emc_burst_refresh_num;
-       u32 emc_pdex2wr;
-       u32 emc_pdex2rd;
-       u32 emc_pchg2pden;
-       u32 emc_act2pden;
-       u32 emc_ar2pden;
-       u32 emc_rw2pden;
-       u32 emc_txsr;
-       u32 emc_tcke;
-       u32 emc_tfaw;
-       u32 emc_trpab;
-       u32 emc_tclkstable;
-       u32 emc_tclkstop;
-       u32 emc_trefbw;
-       u32 emc_quseextra;
-       u32 emc_fbioc_fg1;
-       u32 emc_fbio_dqsib_dly;
-       u32 emc_fbio_dqsib_dly_msb;
-       u32 emc_fbio_quse_dly;
-       u32 emc_fbio_quse_dly_msb;
-       u32 emc_fbio_cfg5;
-       u32 emc_fbio_cfg6;
-       u32 emc_fbio_spare;
-       u32 emc_mrs;
-       u32 emc_emrs;
-       u32 emc_mrw1;
-       u32 emc_mrw2;
-       u32 emc_mrw3;
-       u32 emc_mrw_reset_command;
-       u32 emc_mrw_reset_init_wait;
-       u32 emc_adr_cfg;
-       u32 emc_adr_cfg1;
-       u32 emc_emem_cfg;
-       u32 emc_low_latency_config;
-       u32 emc_cfg;
-       u32 emc_cfg2;
-       u32 emc_dbg;
-       u32 ahb_arbitration_xbar_ctrl;
-       u32 emc_cfg_dig_dll;
-       u32 emc_dll_xform_dqs;
-       u32 emc_dll_xform_quse;
-       u32 warm_boot_wait;
-       u32 emc_ctt_term_ctrl;
-       u32 emc_odt_write;
-       u32 emc_odt_read;
-       u32 emc_zcal_ref_cnt;
-       u32 emc_zcal_wait_cnt;
-       u32 emc_zcal_mrw_cmd;
-       u32 emc_mrs_reset_dll;
-       u32 emc_mrw_zq_init_dev0;
-       u32 emc_mrw_zq_init_dev1;
-       u32 emc_mrw_zq_init_wait;
-       u32 emc_mrs_reset_dll_wait;
-       u32 emc_emrs_emr2;
-       u32 emc_emrs_emr3;
-       u32 emc_emrs_ddr2_dll_enable;
-       u32 emc_mrs_ddr2_dll_reset;
-       u32 emc_emrs_ddr2_ocd_calib;
-       u32 emc_edr2_wait;
-       u32 emc_cfg_clktrim0;
-       u32 emc_cfg_clktrim1;
-       u32 emc_cfg_clktrim2;
-       u32 pmc_ddr_pwr;
-       u32 apb_misc_gp_xm2cfga_padctrl;
-       u32 apb_misc_gp_xm2cfgc_padctrl;
-       u32 apb_misc_gp_xm2cfgc_padctrl2;
-       u32 apb_misc_gp_xm2cfgd_padctrl;
-       u32 apb_misc_gp_xm2cfgd_padctrl2;
-       u32 apb_misc_gp_xm2clkcfg_padctrl;
-       u32 apb_misc_gp_xm2comp_padctrl;
-       u32 apb_misc_gp_xm2vttgen_padctrl;
-       u32 arbitration_config[BCT_SDRAM_ARB_CONFIG_WORDS];
-};
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/sys_proto.h b/arch/arm/include/asm/arch-tegra2/sys_proto.h
deleted file mode 100644 (file)
index c11534e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * (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_
-
-struct tegra2_sysinfo {
-       char *board_string;
-};
-
-void invalidate_dcache(void);
-
-extern const struct tegra2_sysinfo sysinfo;
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/tegra2.h b/arch/arm/include/asm/arch-tegra2/tegra2.h
deleted file mode 100644 (file)
index 13d68c0..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * (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_
-
-#define NV_PA_SDRAM_BASE       0x00000000
-#define NV_PA_ARM_PERIPHBASE   0x50040000
-#define NV_PA_PG_UP_BASE       0x60000000
-#define NV_PA_TMRUS_BASE       0x60005010
-#define NV_PA_CLK_RST_BASE     0x60006000
-#define NV_PA_FLOW_BASE                0x60007000
-#define NV_PA_GPIO_BASE                0x6000D000
-#define NV_PA_EVP_BASE         0x6000F000
-#define NV_PA_APB_MISC_BASE    0x70000000
-#define TEGRA2_APB_MISC_GP_BASE        (NV_PA_APB_MISC_BASE + 0x0800)
-#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 TEGRA2_SPI_BASE                (NV_PA_APB_MISC_BASE + 0xC380)
-#define TEGRA2_PMC_BASE                (NV_PA_APB_MISC_BASE + 0xE400)
-#define TEGRA2_FUSE_BASE       (NV_PA_APB_MISC_BASE + 0xF800)
-#define NV_PA_CSITE_BASE       0x70040000
-#define TEGRA_USB1_BASE                0xC5000000
-#define TEGRA_USB3_BASE                0xC5008000
-#define TEGRA_USB_ADDR_MASK    0xFFFFC000
-
-#define TEGRA2_SDRC_CS0                NV_PA_SDRAM_BASE
-#define LOW_LEVEL_SRAM_STACK   0x4000FFFC
-#define EARLY_AVP_STACK                (NV_PA_SDRAM_BASE + 0x20000)
-#define EARLY_CPU_STACK                (EARLY_AVP_STACK - 4096)
-#define PG_UP_TAG_AVP          0xAAAAAAAA
-
-#ifndef __ASSEMBLY__
-struct timerus {
-       unsigned int cntr_1us;
-};
-
-/* Address at which WB code runs, it must not overlap Bootrom's IRAM usage */
-#define AP20_WB_RUN_ADDRESS    0x40020000
-
-#define NVBOOTINFOTABLE_BCTSIZE        0x38    /* BCT size in BIT in IRAM */
-#define NVBOOTINFOTABLE_BCTPTR 0x3C    /* BCT pointer in BIT in IRAM */
-#define BCT_ODMDATA_OFFSET     4068    /* 12 bytes from end of BCT */
-
-/* These are the available SKUs (product types) for Tegra */
-enum {
-       SKU_ID_T20              = 0x8,
-       SKU_ID_T25SE            = 0x14,
-       SKU_ID_AP25             = 0x17,
-       SKU_ID_T25              = 0x18,
-       SKU_ID_AP25E            = 0x1b,
-       SKU_ID_T25E             = 0x1c,
-};
-
-/* These are the SOC categories that affect clocking */
-enum {
-       TEGRA_SOC_T20,
-       TEGRA_SOC_T25,
-
-       TEGRA_SOC_COUNT,
-       TEGRA_SOC_UNKNOWN       = -1,
-};
-
-#else  /* __ASSEMBLY__ */
-#define PRM_RSTCTRL            TEGRA2_PMC_BASE
-#endif
-
-#endif /* TEGRA2_H */
diff --git a/arch/arm/include/asm/arch-tegra2/tegra_i2c.h b/arch/arm/include/asm/arch-tegra2/tegra_i2c.h
deleted file mode 100644 (file)
index cfb136c..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * NVIDIA Tegra2 I2C controller
- *
- * Copyright 2010-2011 NVIDIA Corporation
- *
- * This software may be used and distributed according to the
- * terms of the GNU Public License, Version 2, incorporated
- * herein by reference.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * Version 2 as published by the Free Software Foundation.
- *
- * 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 _TEGRA_I2C_H_
-#define _TEGRA_I2C_H_
-
-#include <asm/types.h>
-
-enum {
-       I2C_TIMEOUT_USEC = 10000,       /* Wait time for completion */
-       I2C_FIFO_DEPTH = 8,             /* I2C fifo depth */
-};
-
-enum i2c_transaction_flags {
-       I2C_IS_WRITE = 0x1,             /* for I2C write operation */
-       I2C_IS_10_BIT_ADDRESS = 0x2,    /* for 10-bit I2C slave address */
-       I2C_USE_REPEATED_START = 0x4,   /* for repeat start */
-       I2C_NO_ACK = 0x8,               /* for slave that won't generate ACK */
-       I2C_SOFTWARE_CONTROLLER = 0x10, /* for I2C transfer using GPIO */
-       I2C_NO_STOP = 0x20,
-};
-
-/* Contians the I2C transaction details */
-struct i2c_trans_info {
-       /* flags to indicate the transaction details */
-       enum i2c_transaction_flags flags;
-       u32 address;    /* I2C slave device address */
-       u32 num_bytes;  /* number of bytes to be transferred */
-       /*
-        * Send/receive buffer. For the I2C send operation this buffer should
-        * be filled with the data to be sent to the slave device. For the I2C
-        * receive operation this buffer is filled with the data received from
-        * the slave device.
-        */
-       u8 *buf;
-       int is_10bit_address;
-};
-
-struct i2c_control {
-       u32 tx_fifo;
-       u32 rx_fifo;
-       u32 packet_status;
-       u32 fifo_control;
-       u32 fifo_status;
-       u32 int_mask;
-       u32 int_status;
-};
-
-struct dvc_ctlr {
-       u32 ctrl1;                      /* 00: DVC_CTRL_REG1 */
-       u32 ctrl2;                      /* 04: DVC_CTRL_REG2 */
-       u32 ctrl3;                      /* 08: DVC_CTRL_REG3 */
-       u32 status;                     /* 0C: DVC_STATUS_REG */
-       u32 ctrl;                       /* 10: DVC_I2C_CTRL_REG */
-       u32 addr_data;                  /* 14: DVC_I2C_ADDR_DATA_REG */
-       u32 reserved_0[2];              /* 18: */
-       u32 req;                        /* 20: DVC_REQ_REGISTER */
-       u32 addr_data3;                 /* 24: DVC_I2C_ADDR_DATA_REG_3 */
-       u32 reserved_1[6];              /* 28: */
-       u32 cnfg;                       /* 40: DVC_I2C_CNFG */
-       u32 cmd_addr0;                  /* 44: DVC_I2C_CMD_ADDR0 */
-       u32 cmd_addr1;                  /* 48: DVC_I2C_CMD_ADDR1 */
-       u32 cmd_data1;                  /* 4C: DVC_I2C_CMD_DATA1 */
-       u32 cmd_data2;                  /* 50: DVC_I2C_CMD_DATA2 */
-       u32 reserved_2[2];              /* 54: */
-       u32 i2c_status;                 /* 5C: DVC_I2C_STATUS */
-       struct i2c_control control;     /* 60 ~ 78 */
-};
-
-struct i2c_ctlr {
-       u32 cnfg;                       /* 00: I2C_I2C_CNFG */
-       u32 cmd_addr0;                  /* 04: I2C_I2C_CMD_ADDR0 */
-       u32 cmd_addr1;                  /* 08: I2C_I2C_CMD_DATA1 */
-       u32 cmd_data1;                  /* 0C: I2C_I2C_CMD_DATA2 */
-       u32 cmd_data2;                  /* 10: DVC_I2C_CMD_DATA2 */
-       u32 reserved_0[2];              /* 14: */
-       u32 status;                     /* 1C: I2C_I2C_STATUS */
-       u32 sl_cnfg;                    /* 20: I2C_I2C_SL_CNFG */
-       u32 sl_rcvd;                    /* 24: I2C_I2C_SL_RCVD */
-       u32 sl_status;                  /* 28: I2C_I2C_SL_STATUS */
-       u32 sl_addr1;                   /* 2C: I2C_I2C_SL_ADDR1 */
-       u32 sl_addr2;                   /* 30: I2C_I2C_SL_ADDR2 */
-       u32 reserved_1[2];              /* 34: */
-       u32 sl_delay_count;             /* 3C: I2C_I2C_SL_DELAY_COUNT */
-       u32 reserved_2[4];              /* 40: */
-       struct i2c_control control;     /* 50 ~ 68 */
-};
-
-/* bit fields definitions for IO Packet Header 1 format */
-#define PKT_HDR1_PROTOCOL_SHIFT                4
-#define PKT_HDR1_PROTOCOL_MASK         (0xf << PKT_HDR1_PROTOCOL_SHIFT)
-#define PKT_HDR1_CTLR_ID_SHIFT         12
-#define PKT_HDR1_CTLR_ID_MASK          (0xf << PKT_HDR1_CTLR_ID_SHIFT)
-#define PKT_HDR1_PKT_ID_SHIFT          16
-#define PKT_HDR1_PKT_ID_MASK           (0xff << PKT_HDR1_PKT_ID_SHIFT)
-#define PROTOCOL_TYPE_I2C              1
-
-/* bit fields definitions for IO Packet Header 2 format */
-#define PKT_HDR2_PAYLOAD_SIZE_SHIFT    0
-#define PKT_HDR2_PAYLOAD_SIZE_MASK     (0xfff << PKT_HDR2_PAYLOAD_SIZE_SHIFT)
-
-/* bit fields definitions for IO Packet Header 3 format */
-#define PKT_HDR3_READ_MODE_SHIFT       19
-#define PKT_HDR3_READ_MODE_MASK                (1 << PKT_HDR3_READ_MODE_SHIFT)
-#define PKT_HDR3_SLAVE_ADDR_SHIFT      0
-#define PKT_HDR3_SLAVE_ADDR_MASK       (0x3ff << PKT_HDR3_SLAVE_ADDR_SHIFT)
-
-#define DVC_CTRL_REG3_I2C_HW_SW_PROG_SHIFT     26
-#define DVC_CTRL_REG3_I2C_HW_SW_PROG_MASK      \
-                               (1 << DVC_CTRL_REG3_I2C_HW_SW_PROG_SHIFT)
-
-/* I2C_CNFG */
-#define I2C_CNFG_NEW_MASTER_FSM_SHIFT  11
-#define I2C_CNFG_NEW_MASTER_FSM_MASK   (1 << I2C_CNFG_NEW_MASTER_FSM_SHIFT)
-#define I2C_CNFG_PACKET_MODE_SHIFT     10
-#define I2C_CNFG_PACKET_MODE_MASK      (1 << I2C_CNFG_PACKET_MODE_SHIFT)
-
-/* I2C_SL_CNFG */
-#define I2C_SL_CNFG_NEWSL_SHIFT                2
-#define I2C_SL_CNFG_NEWSL_MASK         (1 << I2C_SL_CNFG_NEWSL_SHIFT)
-
-/* I2C_FIFO_STATUS */
-#define TX_FIFO_FULL_CNT_SHIFT         0
-#define TX_FIFO_FULL_CNT_MASK          (0xf << TX_FIFO_FULL_CNT_SHIFT)
-#define TX_FIFO_EMPTY_CNT_SHIFT                4
-#define TX_FIFO_EMPTY_CNT_MASK         (0xf << TX_FIFO_EMPTY_CNT_SHIFT)
-
-/* I2C_INTERRUPT_STATUS */
-#define I2C_INT_XFER_COMPLETE_SHIFT    7
-#define I2C_INT_XFER_COMPLETE_MASK     (1 << I2C_INT_XFER_COMPLETE_SHIFT)
-#define I2C_INT_NO_ACK_SHIFT           3
-#define I2C_INT_NO_ACK_MASK            (1 << I2C_INT_NO_ACK_SHIFT)
-#define I2C_INT_ARBITRATION_LOST_SHIFT 2
-#define I2C_INT_ARBITRATION_LOST_MASK  (1 << I2C_INT_ARBITRATION_LOST_SHIFT)
-
-/**
- * Returns the bus number of the DVC controller
- *
- * @return number of bus, or -1 if there is no DVC active
- */
-int tegra_i2c_get_dvc_bus_num(void);
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/tegra_spi.h b/arch/arm/include/asm/arch-tegra2/tegra_spi.h
deleted file mode 100644 (file)
index 892d90c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * NVIDIA Tegra2 SPI-FLASH controller
- *
- * Copyright 2010-2012 NVIDIA Corporation
- *
- * This software may be used and distributed according to the
- * terms of the GNU Public License, Version 2, incorporated
- * herein by reference.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * Version 2 as published by the Free Software Foundation.
- *
- * 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 _TEGRA_SPI_H_
-#define _TEGRA_SPI_H_
-
-#include <asm/types.h>
-
-struct spi_tegra {
-       u32 command;    /* SPI_COMMAND_0 register  */
-       u32 status;     /* SPI_STATUS_0 register */
-       u32 rx_cmp;     /* SPI_RX_CMP_0 register  */
-       u32 dma_ctl;    /* SPI_DMA_CTL_0 register */
-       u32 tx_fifo;    /* SPI_TX_FIFO_0 register */
-       u32 rsvd[3];    /* offsets 0x14 to 0x1F reserved */
-       u32 rx_fifo;    /* SPI_RX_FIFO_0 register */
-};
-
-#define SPI_CMD_GO                     (1 << 30)
-#define SPI_CMD_ACTIVE_SCLK_SHIFT      26
-#define SPI_CMD_ACTIVE_SCLK_MASK       (3 << SPI_CMD_ACTIVE_SCLK_SHIFT)
-#define SPI_CMD_CK_SDA                 (1 << 21)
-#define SPI_CMD_ACTIVE_SDA_SHIFT       18
-#define SPI_CMD_ACTIVE_SDA_MASK                (3 << SPI_CMD_ACTIVE_SDA_SHIFT)
-#define SPI_CMD_CS_POL                 (1 << 16)
-#define SPI_CMD_TXEN                   (1 << 15)
-#define SPI_CMD_RXEN                   (1 << 14)
-#define SPI_CMD_CS_VAL                 (1 << 13)
-#define SPI_CMD_CS_SOFT                        (1 << 12)
-#define SPI_CMD_CS_DELAY               (1 << 9)
-#define SPI_CMD_CS3_EN                 (1 << 8)
-#define SPI_CMD_CS2_EN                 (1 << 7)
-#define SPI_CMD_CS1_EN                 (1 << 6)
-#define SPI_CMD_CS0_EN                 (1 << 5)
-#define SPI_CMD_BIT_LENGTH             (1 << 4)
-#define SPI_CMD_BIT_LENGTH_MASK                0x0000001F
-
-#define SPI_STAT_BSY                   (1 << 31)
-#define SPI_STAT_RDY                   (1 << 30)
-#define SPI_STAT_RXF_FLUSH             (1 << 29)
-#define SPI_STAT_TXF_FLUSH             (1 << 28)
-#define SPI_STAT_RXF_UNR               (1 << 27)
-#define SPI_STAT_TXF_OVF               (1 << 26)
-#define SPI_STAT_RXF_EMPTY             (1 << 25)
-#define SPI_STAT_RXF_FULL              (1 << 24)
-#define SPI_STAT_TXF_EMPTY             (1 << 23)
-#define SPI_STAT_TXF_FULL              (1 << 22)
-#define SPI_STAT_SEL_TXRX_N            (1 << 16)
-#define SPI_STAT_CUR_BLKCNT            (1 << 15)
-
-#define SPI_TIMEOUT            1000
-#define TEGRA2_SPI_MAX_FREQ    52000000
-
-#endif /* _TEGRA_SPI_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/timer.h b/arch/arm/include/asm/arch-tegra2/timer.h
deleted file mode 100644 (file)
index adefa2c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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
- */
-
-/* Tegra2 timer functions */
-
-#ifndef _TEGRA2_TIMER_H
-#define _TEGRA2_TIMER_H
-
-/* returns the current monotonic timer value in microseconds */
-unsigned long timer_get_us(void);
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/uart-spi-switch.h b/arch/arm/include/asm/arch-tegra2/uart-spi-switch.h
deleted file mode 100644 (file)
index 82ac180..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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_SPI_SWITCH_H
-#define _UART_SPI_SWITCH_H
-
-#if defined(CONFIG_SPI_UART_SWITCH)
-/*
- * Signal that we are about to use the UART. This unfortunate hack is
- * required by Seaboard, which cannot use its console and SPI at the same
- * time! If the board file provides this, the board config will declare it.
- * Let this be a lesson for others.
- */
-void pinmux_select_uart(void);
-
-/*
- * Signal that we are about the use the SPI bus.
- */
-void pinmux_select_spi(void);
-
-#else /* not CONFIG_SPI_UART_SWITCH */
-
-static inline void pinmux_select_uart(void) {}
-static inline void pinmux_select_spi(void) {}
-
-#endif
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra2/uart.h b/arch/arm/include/asm/arch-tegra2/uart.h
deleted file mode 100644 (file)
index aea29a7..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  (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 */
-struct uart_ctlr {
-       uint uart_thr_dlab_0;           /* UART_THR_DLAB_0_0, offset 00 */
-       uint uart_ier_dlab_0;           /* UART_IER_DLAB_0_0, offset 04 */
-       uint uart_iir_fcr;              /* UART_IIR_FCR_0, offset 08 */
-       uint uart_lcr;                  /* UART_LCR_0, offset 0C */
-       uint uart_mcr;                  /* UART_MCR_0, offset 10 */
-       uint uart_lsr;                  /* UART_LSR_0, offset 14 */
-       uint uart_msr;                  /* UART_MSR_0, offset 18 */
-       uint uart_spr;                  /* UART_SPR_0, offset 1C */
-       uint uart_irda_csr;             /* UART_IRDA_CSR_0, offset 20 */
-       uint uart_reserved[6];          /* Reserved, unused, offset 24-38*/
-       uint uart_asr;                  /* UART_ASR_0, offset 3C */
-};
-
-#define NVRM_PLLP_FIXED_FREQ_KHZ       216000
-#define NV_DEFAULT_DEBUG_BAUD          115200
-
-#define UART_FCR_TRIGGER_3     0x30    /* Mask for trigger set at 3 */
-
-#endif /* UART_H */
diff --git a/arch/arm/include/asm/arch-tegra2/usb.h b/arch/arm/include/asm/arch-tegra2/usb.h
deleted file mode 100644 (file)
index 638033b..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * 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 _TEGRA_USB_H_
-#define _TEGRA_USB_H_
-
-
-/* USB Controller (USBx_CONTROLLER_) regs */
-struct usb_ctlr {
-       /* 0x000 */
-       uint id;
-       uint reserved0;
-       uint host;
-       uint device;
-
-       /* 0x010 */
-       uint txbuf;
-       uint rxbuf;
-       uint reserved1[2];
-
-       /* 0x020 */
-       uint reserved2[56];
-
-       /* 0x100 */
-       u16 cap_length;
-       u16 hci_version;
-       uint hcs_params;
-       uint hcc_params;
-       uint reserved3[5];
-
-       /* 0x120 */
-       uint dci_version;
-       uint dcc_params;
-       uint reserved4[6];
-
-       /* 0x140 */
-       uint usb_cmd;
-       uint usb_sts;
-       uint usb_intr;
-       uint frindex;
-
-       /* 0x150 */
-       uint reserved5;
-       uint periodic_list_base;
-       uint async_list_addr;
-       uint async_tt_sts;
-
-       /* 0x160 */
-       uint burst_size;
-       uint tx_fill_tuning;
-       uint reserved6;   /* is this port_sc1 on some controllers? */
-       uint icusb_ctrl;
-
-       /* 0x170 */
-       uint ulpi_viewport;
-       uint reserved7;
-       uint endpt_nak;
-       uint endpt_nak_enable;
-
-       /* 0x180 */
-       uint reserved;
-       uint port_sc1;
-       uint reserved8[6];
-
-       /* 0x1a0 */
-       uint reserved9;
-       uint otgsc;
-       uint usb_mode;
-       uint endpt_setup_stat;
-
-       /* 0x1b0 */
-       uint reserved10[20];
-
-       /* 0x200 */
-       uint reserved11[0x80];
-
-       /* 0x400 */
-       uint susp_ctrl;
-       uint phy_vbus_sensors;
-       uint phy_vbus_wakeup_id;
-       uint phy_alt_vbus_sys;
-
-       /* 0x410 */
-       uint usb1_legacy_ctrl;
-       uint reserved12[3];
-
-       /* 0x420 */
-       uint reserved13[56];
-
-       /* 0x500 */
-       uint reserved14[64 * 3];
-
-       /* 0x800 */
-       uint utmip_pll_cfg0;
-       uint utmip_pll_cfg1;
-       uint utmip_xcvr_cfg0;
-       uint utmip_bias_cfg0;
-
-       /* 0x810 */
-       uint utmip_hsrx_cfg0;
-       uint utmip_hsrx_cfg1;
-       uint utmip_fslsrx_cfg0;
-       uint utmip_fslsrx_cfg1;
-
-       /* 0x820 */
-       uint utmip_tx_cfg0;
-       uint utmip_misc_cfg0;
-       uint utmip_misc_cfg1;
-       uint utmip_debounce_cfg0;
-
-       /* 0x830 */
-       uint utmip_bat_chrg_cfg0;
-       uint utmip_spare_cfg0;
-       uint utmip_xcvr_cfg1;
-       uint utmip_bias_cfg1;
-};
-
-
-/* USB1_LEGACY_CTRL */
-#define USB1_NO_LEGACY_MODE            1
-
-#define VBUS_SENSE_CTL_SHIFT                   1
-#define VBUS_SENSE_CTL_MASK                    (3 << VBUS_SENSE_CTL_SHIFT)
-#define VBUS_SENSE_CTL_VBUS_WAKEUP             0
-#define VBUS_SENSE_CTL_AB_SESS_VLD_OR_VBUS_WAKEUP      1
-#define VBUS_SENSE_CTL_AB_SESS_VLD             2
-#define VBUS_SENSE_CTL_A_SESS_VLD              3
-
-/* USBx_IF_USB_SUSP_CTRL_0 */
-#define UTMIP_PHY_ENB                          (1 << 12)
-#define UTMIP_RESET                            (1 << 11)
-#define USB_PHY_CLK_VALID                      (1 << 7)
-
-/* USBx_UTMIP_MISC_CFG1 */
-#define UTMIP_PLLU_STABLE_COUNT_SHIFT          6
-#define UTMIP_PLLU_STABLE_COUNT_MASK           \
-                               (0xfff << UTMIP_PLLU_STABLE_COUNT_SHIFT)
-#define UTMIP_PLL_ACTIVE_DLY_COUNT_SHIFT       18
-#define UTMIP_PLL_ACTIVE_DLY_COUNT_MASK                \
-                               (0x1f << UTMIP_PLL_ACTIVE_DLY_COUNT_SHIFT)
-#define UTMIP_PHY_XTAL_CLOCKEN                 (1 << 30)
-
-/* USBx_UTMIP_PLL_CFG1_0 */
-#define UTMIP_PLLU_ENABLE_DLY_COUNT_SHIFT      27
-#define UTMIP_PLLU_ENABLE_DLY_COUNT_MASK       \
-                               (0xf << UTMIP_PLLU_ENABLE_DLY_COUNT_SHIFT)
-#define UTMIP_XTAL_FREQ_COUNT_SHIFT            0
-#define UTMIP_XTAL_FREQ_COUNT_MASK             0xfff
-
-/* USBx_UTMIP_BIAS_CFG1_0 */
-#define UTMIP_BIAS_PDTRK_COUNT_SHIFT           3
-#define UTMIP_BIAS_PDTRK_COUNT_MASK            \
-                               (0x1f << UTMIP_BIAS_PDTRK_COUNT_SHIFT)
-
-#define UTMIP_DEBOUNCE_CFG0_SHIFT              0
-#define UTMIP_DEBOUNCE_CFG0_MASK               0xffff
-
-/* USBx_UTMIP_TX_CFG0_0 */
-#define UTMIP_FS_PREAMBLE_J                    (1 << 19)
-
-/* USBx_UTMIP_BAT_CHRG_CFG0_0 */
-#define UTMIP_PD_CHRG                          1
-
-/* USBx_UTMIP_XCVR_CFG0_0 */
-#define UTMIP_XCVR_LSBIAS_SE                   (1 << 21)
-
-/* USBx_UTMIP_SPARE_CFG0_0 */
-#define FUSE_SETUP_SEL                         (1 << 3)
-
-/* USBx_UTMIP_HSRX_CFG0_0 */
-#define UTMIP_IDLE_WAIT_SHIFT                  15
-#define UTMIP_IDLE_WAIT_MASK                   (0x1f << UTMIP_IDLE_WAIT_SHIFT)
-#define UTMIP_ELASTIC_LIMIT_SHIFT              10
-#define UTMIP_ELASTIC_LIMIT_MASK               \
-                               (0x1f << UTMIP_ELASTIC_LIMIT_SHIFT)
-
-/* USBx_UTMIP_HSRX_CFG0_1 */
-#define UTMIP_HS_SYNC_START_DLY_SHIFT          1
-#define UTMIP_HS_SYNC_START_DLY_MASK           \
-                               (0xf << UTMIP_HS_SYNC_START_DLY_SHIFT)
-
-/* USBx_CONTROLLER_2_USB2D_ICUSB_CTRL_0 */
-#define IC_ENB1                                        (1 << 3)
-
-/* SB2_CONTROLLER_2_USB2D_PORTSC1_0 */
-#define PTS_SHIFT                              30
-#define PTS_MASK                               (3U << PTS_SHIFT)
-#define PTS_UTMI       0
-#define PTS_RESERVED   1
-#define PTS_ULP                2
-#define PTS_ICUSB_SER  3
-
-#define STS                                    (1 << 29)
-
-/* USBx_UTMIP_XCVR_CFG0_0 */
-#define UTMIP_FORCE_PD_POWERDOWN               (1 << 14)
-#define UTMIP_FORCE_PD2_POWERDOWN              (1 << 16)
-#define UTMIP_FORCE_PDZI_POWERDOWN             (1 << 18)
-
-/* USBx_UTMIP_XCVR_CFG1_0 */
-#define UTMIP_FORCE_PDDISC_POWERDOWN           (1 << 0)
-#define UTMIP_FORCE_PDCHRP_POWERDOWN           (1 << 2)
-#define UTMIP_FORCE_PDDR_POWERDOWN             (1 << 4)
-
-/* USB3_IF_USB_PHY_VBUS_SENSORS_0 */
-#define VBUS_VLD_STS                   (1 << 26)
-
-
-/* Change the USB host port into host mode */
-void usb_set_host_mode(void);
-
-/* Setup USB on the board */
-int board_usb_init(const void *blob);
-
-/**
- * Start up the given port number (ports are numbered from 0 on each board).
- * This returns values for the appropriate hccr and hcor addresses to use for
- * USB EHCI operations.
- *
- * @param portnum      port number to start
- * @param hccr         returns start address of EHCI HCCR registers
- * @param hcor         returns start address of EHCI HCOR registers
- * @return 0 if ok, -1 on error (generally invalid port number)
- */
-int tegrausb_start_port(unsigned portnum, u32 *hccr, u32 *hcor);
-
-/**
- * Stop the current port
- *
- * @return 0 if ok, -1 if no port was active
- */
-int tegrausb_stop_port(void);
-
-#endif /* _TEGRA_USB_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/warmboot.h b/arch/arm/include/asm/arch-tegra2/warmboot.h
deleted file mode 100644 (file)
index 99ac2e7..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * (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 _WARM_BOOT_H_
-#define _WARM_BOOT_H_
-
-#define STRAP_OPT_A_RAM_CODE_SHIFT     4
-#define STRAP_OPT_A_RAM_CODE_MASK      (0xf << STRAP_OPT_A_RAM_CODE_SHIFT)
-
-/* Defines the supported operating modes */
-enum fuse_operating_mode {
-       MODE_PRODUCTION = 3,
-       MODE_UNDEFINED,
-};
-
-/* Defines the CMAC-AES-128 hash length in 32 bit words. (128 bits = 4 words) */
-enum {
-       HASH_LENGTH = 4
-};
-
-/* Defines the storage for a hash value (128 bits) */
-struct hash {
-       u32 hash[HASH_LENGTH];
-};
-
-/*
- * Defines the code header information for the boot rom.
- *
- * The code immediately follows the code header.
- *
- * Note that the code header needs to be 16 bytes aligned to preserve
- * the alignment of relevant data for hash and decryption computations without
- * requiring extra copies to temporary memory areas.
- */
-struct wb_header {
-       u32 length_insecure;    /* length of the code header */
-       u32 reserved[3];
-       struct hash hash;       /* hash of header+code, starts next field*/
-       struct hash random_aes_block;   /* a data block to aid security. */
-       u32 length_secure;      /* length of the code header */
-       u32 destination;        /* destination address to put the wb code */
-       u32 entry_point;        /* execution address of the wb code */
-       u32 code_length;        /* length of the code */
-};
-
-/*
- * The warm boot code needs direct access to these registers since it runs in
- * SRAM and cannot call other U-Boot code.
- */
-union osc_ctrl_reg {
-       struct {
-               u32 xoe:1;
-               u32 xobp:1;
-               u32 reserved0:2;
-               u32 xofs:6;
-               u32 reserved1:2;
-               u32 xods:5;
-               u32 reserved2:3;
-               u32 oscfi_spare:8;
-               u32 pll_ref_div:2;
-               u32 osc_freq:2;
-       };
-       u32 word;
-};
-
-union pllx_base_reg {
-       struct {
-               u32 divm:5;
-               u32 reserved0:3;
-               u32 divn:10;
-               u32 reserved1:2;
-               u32 divp:3;
-               u32 reserved2:4;
-               u32 lock:1;
-               u32 reserved3:1;
-               u32 ref_dis:1;
-               u32 enable:1;
-               u32 bypass:1;
-       };
-       u32 word;
-};
-
-union pllx_misc_reg {
-       struct {
-               u32 vcocon:4;
-               u32 lfcon:4;
-               u32 cpcon:4;
-               u32 lock_sel:6;
-               u32 reserved0:1;
-               u32 lock_enable:1;
-               u32 reserved1:1;
-               u32 dccon:1;
-               u32 pts:2;
-               u32 reserved2:6;
-               u32 out1_div_byp:1;
-               u32 out1_inv_clk:1;
-       };
-       u32 word;
-};
-
-/*
- * TODO: This register is not documented in the TRM yet. We could move this
- * into the EMC and give it a proper interface, but not while it is
- * undocumented.
- */
-union scratch3_reg {
-       struct {
-               u32 pllx_base_divm:5;
-               u32 pllx_base_divn:10;
-               u32 pllx_base_divp:3;
-               u32 pllx_misc_lfcon:4;
-               u32 pllx_misc_cpcon:4;
-       };
-       u32 word;
-};
-
-
-/**
- * Save warmboot memory settings for a later resume
- *
- * @return 0 if ok, -1 on error
- */
-int warmboot_save_sdram_params(void);
-
-int warmboot_prepare_code(u32 seg_address, u32 seg_length);
-int sign_data_block(u8 *source, u32 length, u8 *signature);
-void wb_start(void);   /* Start of WB assembly code */
-void wb_end(void);     /* End of WB assembly code */
-
-#endif
diff --git a/arch/arm/include/asm/arch-tegra20/ap20.h b/arch/arm/include/asm/arch-tegra20/ap20.h
new file mode 100644 (file)
index 0000000..c84d22f
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * (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 <asm/types.h>
+
+/* Stabilization delays, in usec */
+#define PLL_STABILIZATION_DELAY (300)
+#define IO_STABILIZATION_DELAY (1000)
+
+#define NVBL_PLLP_KHZ  (216000)
+
+#define PLLX_ENABLED           (1 << 30)
+#define CCLK_BURST_POLICY      0x20008888
+#define SUPER_CCLK_DIVIDER     0x80000000
+
+/* Calculate clock fractional divider value from ref and target frequencies */
+#define CLK_DIVIDER(REF, FREQ)  ((((REF) * 2) / FREQ) - 2)
+
+/* Calculate clock frequency value from reference and clock divider value */
+#define CLK_FREQUENCY(REF, REG)  (((REF) * 2) / (REG + 2))
+
+/* AVP/CPU ID */
+#define PG_UP_TAG_0_PID_CPU    0x55555555      /* CPU aka "a9" aka "mpcore" */
+#define PG_UP_TAG_0             0x0
+
+#define CORESIGHT_UNLOCK       0xC5ACCE55;
+
+/* AP20-Specific Base Addresses */
+
+/* AP20 Base physical address of SDRAM. */
+#define AP20_BASE_PA_SDRAM      0x00000000
+/* AP20 Base physical address of internal SRAM. */
+#define AP20_BASE_PA_SRAM       0x40000000
+/* AP20 Size of internal SRAM (256KB). */
+#define AP20_BASE_PA_SRAM_SIZE  0x00040000
+/* AP20 Base physical address of flash. */
+#define AP20_BASE_PA_NOR_FLASH  0xD0000000
+/* AP20 Base physical address of boot information table. */
+#define AP20_BASE_PA_BOOT_INFO  AP20_BASE_PA_SRAM
+
+/*
+ * Super-temporary stacks for EXTREMELY early startup. The values chosen for
+ * these addresses must be valid on ALL SOCs because this value is used before
+ * we are able to differentiate between the SOC types.
+ *
+ * NOTE: The since CPU's stack will eventually be moved from IRAM to SDRAM, its
+ *       stack is placed below the AVP stack. Once the CPU stack has been moved,
+ *       the AVP is free to use the IRAM the CPU stack previously occupied if
+ *       it should need to do so.
+ *
+ * NOTE: In multi-processor CPU complex configurations, each processor will have
+ *       its own stack of size CPU_EARLY_BOOT_STACK_SIZE. CPU 0 will have a
+ *       limit of CPU_EARLY_BOOT_STACK_LIMIT. Each successive CPU will have a
+ *       stack limit that is CPU_EARLY_BOOT_STACK_SIZE less then the previous
+ *       CPU.
+ */
+
+/* Common AVP early boot stack limit */
+#define AVP_EARLY_BOOT_STACK_LIMIT     \
+       (AP20_BASE_PA_SRAM + (AP20_BASE_PA_SRAM_SIZE/2))
+/* Common AVP early boot stack size */
+#define AVP_EARLY_BOOT_STACK_SIZE      0x1000
+/* Common CPU early boot stack limit */
+#define CPU_EARLY_BOOT_STACK_LIMIT     \
+       (AVP_EARLY_BOOT_STACK_LIMIT - AVP_EARLY_BOOT_STACK_SIZE)
+/* Common CPU early boot stack size */
+#define CPU_EARLY_BOOT_STACK_SIZE      0x1000
+
+#define EXCEP_VECTOR_CPU_RESET_VECTOR  (NV_PA_EVP_BASE + 0x100)
+#define CSITE_CPU_DBG0_LAR             (NV_PA_CSITE_BASE + 0x10FB0)
+#define CSITE_CPU_DBG1_LAR             (NV_PA_CSITE_BASE + 0x12FB0)
+
+#define FLOW_CTLR_HALT_COP_EVENTS      (NV_PA_FLOW_BASE + 4)
+#define FLOW_MODE_STOP                 2
+#define HALT_COP_EVENT_JTAG            (1 << 28)
+#define HALT_COP_EVENT_IRQ_1           (1 << 11)
+#define HALT_COP_EVENT_FIQ_1           (1 << 9)
+
+/* Start up the tegra20 SOC */
+void tegra20_start(void);
+
+/* This is the main entry into U-Boot, used by the Cortex-A9 */
+extern void _start(void);
+
+/**
+ * Works out the SOC type used for clocks settings
+ *
+ * @return     SOC type - see TEGRA_SOC...
+ */
+int tegra_get_chip_type(void);
diff --git a/arch/arm/include/asm/arch-tegra20/apb_misc.h b/arch/arm/include/asm/arch-tegra20/apb_misc.h
new file mode 100644 (file)
index 0000000..eb69d18
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2012 The Chromium OS Authors.
+ *
+ * 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 _GP_PADCTRL_H_
+#define _GP_PADCTRL_H_
+
+/* APB_MISC_PP registers */
+struct apb_misc_pp_ctlr {
+       u32     reserved0[2];
+       u32     strapping_opt_a;/* 0x08: APB_MISC_PP_STRAPPING_OPT_A */
+};
+
+/* bit fields definitions for APB_MISC_PP_STRAPPING_OPT_A register */
+#define RAM_CODE_SHIFT         4
+#define RAM_CODE_MASK          (0xf << RAM_CODE_SHIFT)
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/board.h b/arch/arm/include/asm/arch-tegra20/board.h
new file mode 100644 (file)
index 0000000..a90d36c
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *  (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 _TEGRA_BOARD_H_
+#define _TEGRA_BOARD_H_
+
+/* Setup UARTs for the board according to the selected config */
+void board_init_uart_f(void);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/clk_rst.h b/arch/arm/include/asm/arch-tegra20/clk_rst.h
new file mode 100644 (file)
index 0000000..8c3be91
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ *  (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_
+
+/* PLL registers - there are several PLLs in the clock controller */
+struct clk_pll {
+       uint pll_base;          /* the control register */
+       uint pll_out;           /* output control */
+       uint reserved;
+       uint pll_misc;          /* other misc things */
+};
+
+/* PLL registers - there are several PLLs in the clock controller */
+struct clk_pll_simple {
+       uint pll_base;          /* the control register */
+       uint pll_misc;          /* other misc things */
+};
+
+/*
+ * Most PLLs use the clk_pll structure, but some have a simpler two-member
+ * structure for which we use clk_pll_simple. The reason for this non-
+ * othogonal setup is not stated.
+ */
+enum {
+       TEGRA_CLK_PLLS          = 6,    /* Number of normal PLLs */
+       TEGRA_CLK_SIMPLE_PLLS   = 3,    /* Number of simple PLLs */
+       TEGRA_CLK_REGS          = 3,    /* Number of clock enable registers */
+       TEGRA_CLK_SOURCES       = 64,   /* Number of peripheral clock sources */
+};
+
+/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */
+struct clk_rst_ctlr {
+       uint crc_rst_src;                       /* _RST_SOURCE_0,0x00 */
+       uint crc_rst_dev[TEGRA_CLK_REGS];       /* _RST_DEVICES_L/H/U_0 */
+       uint crc_clk_out_enb[TEGRA_CLK_REGS];   /* _CLK_OUT_ENB_L/H/U_0 */
+       uint crc_reserved0;             /* reserved_0,          0x1C */
+       uint crc_cclk_brst_pol;         /* _CCLK_BURST_POLICY_0,0x20 */
+       uint crc_super_cclk_div;        /* _SUPER_CCLK_DIVIDER_0,0x24 */
+       uint crc_sclk_brst_pol;         /* _SCLK_BURST_POLICY_0, 0x28 */
+       uint crc_super_sclk_div;        /* _SUPER_SCLK_DIVIDER_0,0x2C */
+       uint crc_clk_sys_rate;          /* _CLK_SYSTEM_RATE_0,  0x30 */
+       uint crc_prog_dly_clk;          /* _PROG_DLY_CLK_0,     0x34 */
+       uint crc_aud_sync_clk_rate;     /* _AUDIO_SYNC_CLK_RATE_0,0x38 */
+       uint crc_reserved1;             /* reserved_1,          0x3C */
+       uint crc_cop_clk_skip_plcy;     /* _COP_CLK_SKIP_POLICY_0,0x40 */
+       uint crc_clk_mask_arm;          /* _CLK_MASK_ARM_0,     0x44 */
+       uint crc_misc_clk_enb;          /* _MISC_CLK_ENB_0,     0x48 */
+       uint crc_clk_cpu_cmplx;         /* _CLK_CPU_CMPLX_0,    0x4C */
+       uint crc_osc_ctrl;              /* _OSC_CTRL_0,         0x50 */
+       uint crc_pll_lfsr;              /* _PLL_LFSR_0,         0x54 */
+       uint crc_osc_freq_det;          /* _OSC_FREQ_DET_0,     0x58 */
+       uint crc_osc_freq_det_stat;     /* _OSC_FREQ_DET_STATUS_0,0x5C */
+       uint crc_reserved2[8];          /* reserved_2[8],       0x60-7C */
+
+       struct clk_pll crc_pll[TEGRA_CLK_PLLS]; /* PLLs from 0x80 to 0xdc */
+
+       /* PLLs from 0xe0 to 0xf4    */
+       struct clk_pll_simple crc_pll_simple[TEGRA_CLK_SIMPLE_PLLS];
+
+       uint crc_reserved10;            /* _reserved_10,        0xF8 */
+       uint crc_reserved11;            /* _reserved_11,        0xFC */
+
+       uint crc_clk_src[TEGRA_CLK_SOURCES]; /*_I2S1_0...       0x100-1fc */
+       uint crc_reserved20[80];        /*                      0x200-33C */
+       uint crc_cpu_cmplx_set;         /* _CPU_CMPLX_SET_0,    0x340     */
+       uint crc_cpu_cmplx_clr;         /* _CPU_CMPLX_CLR_0,    0x344     */
+};
+
+/* CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0 */
+#define CPU1_CLK_STP_SHIFT     9
+
+#define CPU0_CLK_STP_SHIFT     8
+#define CPU0_CLK_STP_MASK      (1U << CPU0_CLK_STP_SHIFT)
+
+/* CLK_RST_CONTROLLER_PLLx_BASE_0 */
+#define PLL_BYPASS_SHIFT       31
+#define PLL_BYPASS_MASK                (1U << PLL_BYPASS_SHIFT)
+
+#define PLL_ENABLE_SHIFT       30
+#define PLL_ENABLE_MASK                (1U << PLL_ENABLE_SHIFT)
+
+#define PLL_BASE_OVRRIDE_MASK  (1U << 28)
+
+#define PLL_DIVP_SHIFT         20
+#define PLL_DIVP_MASK          (7U << PLL_DIVP_SHIFT)
+
+#define PLL_DIVN_SHIFT         8
+#define PLL_DIVN_MASK          (0x3ffU << PLL_DIVN_SHIFT)
+
+#define PLL_DIVM_SHIFT         0
+#define PLL_DIVM_MASK          (0x1f << PLL_DIVM_SHIFT)
+
+/* CLK_RST_CONTROLLER_PLLx_MISC_0 */
+#define PLL_CPCON_SHIFT                8
+#define PLL_CPCON_MASK         (15U << PLL_CPCON_SHIFT)
+
+#define PLL_LFCON_SHIFT                4
+#define PLL_LFCON_MASK         (15U << PLL_LFCON_SHIFT)
+
+#define PLLU_VCO_FREQ_SHIFT    20
+#define PLLU_VCO_FREQ_MASK     (1U << PLLU_VCO_FREQ_SHIFT)
+
+/* CLK_RST_CONTROLLER_OSC_CTRL_0 */
+#define OSC_FREQ_SHIFT         30
+#define OSC_FREQ_MASK          (3U << OSC_FREQ_SHIFT)
+#define OSC_XOBP_SHIFT         1
+#define OSC_XOBP_MASK          (1U << OSC_XOBP_SHIFT)
+
+/*
+ * CLK_RST_CONTROLLER_CLK_SOURCE_x_OUT_0 - the mask here is normally 8 bits
+ * but can be 16. We could use knowledge we have to restrict the mask in
+ * the 8-bit cases (the divider_bits value returned by
+ * get_periph_clock_source()) but it does not seem worth it since the code
+ * already checks the ranges of values it is writing, in clk_get_divider().
+ */
+#define OUT_CLK_DIVISOR_SHIFT  0
+#define OUT_CLK_DIVISOR_MASK   (0xffff << OUT_CLK_DIVISOR_SHIFT)
+
+#define OUT_CLK_SOURCE_SHIFT   30
+#define OUT_CLK_SOURCE_MASK    (3U << OUT_CLK_SOURCE_SHIFT)
+
+#define OUT_CLK_SOURCE4_SHIFT  28
+#define OUT_CLK_SOURCE4_MASK   (15U << OUT_CLK_SOURCE4_SHIFT)
+
+#endif /* CLK_RST_H */
diff --git a/arch/arm/include/asm/arch-tegra20/clock.h b/arch/arm/include/asm/arch-tegra20/clock.h
new file mode 100644 (file)
index 0000000..ff83bbf
--- /dev/null
@@ -0,0 +1,407 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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
+ */
+
+/* Tegra2 clock control functions */
+
+#ifndef _CLOCK_H
+#define _CLOCK_H
+
+/* Set of oscillator frequencies supported in the internal API. */
+enum clock_osc_freq {
+       /* All in MHz, so 13_0 is 13.0MHz */
+       CLOCK_OSC_FREQ_13_0,
+       CLOCK_OSC_FREQ_19_2,
+       CLOCK_OSC_FREQ_12_0,
+       CLOCK_OSC_FREQ_26_0,
+
+       CLOCK_OSC_FREQ_COUNT,
+};
+
+/* The PLLs supported by the hardware */
+enum clock_id {
+       CLOCK_ID_FIRST,
+       CLOCK_ID_CGENERAL = CLOCK_ID_FIRST,
+       CLOCK_ID_MEMORY,
+       CLOCK_ID_PERIPH,
+       CLOCK_ID_AUDIO,
+       CLOCK_ID_USB,
+       CLOCK_ID_DISPLAY,
+
+       /* now the simple ones */
+       CLOCK_ID_FIRST_SIMPLE,
+       CLOCK_ID_XCPU = CLOCK_ID_FIRST_SIMPLE,
+       CLOCK_ID_EPCI,
+       CLOCK_ID_SFROM32KHZ,
+
+       /* These are the base clocks (inputs to the Tegra SOC) */
+       CLOCK_ID_32KHZ,
+       CLOCK_ID_OSC,
+
+       CLOCK_ID_COUNT, /* number of clocks */
+       CLOCK_ID_NONE = -1,
+};
+
+/* The clocks supported by the hardware */
+enum periph_id {
+       PERIPH_ID_FIRST,
+
+       /* Low word: 31:0 */
+       PERIPH_ID_CPU = PERIPH_ID_FIRST,
+       PERIPH_ID_RESERVED1,
+       PERIPH_ID_RESERVED2,
+       PERIPH_ID_AC97,
+       PERIPH_ID_RTC,
+       PERIPH_ID_TMR,
+       PERIPH_ID_UART1,
+       PERIPH_ID_UART2,
+
+       /* 8 */
+       PERIPH_ID_GPIO,
+       PERIPH_ID_SDMMC2,
+       PERIPH_ID_SPDIF,
+       PERIPH_ID_I2S1,
+       PERIPH_ID_I2C1,
+       PERIPH_ID_NDFLASH,
+       PERIPH_ID_SDMMC1,
+       PERIPH_ID_SDMMC4,
+
+       /* 16 */
+       PERIPH_ID_TWC,
+       PERIPH_ID_PWM,
+       PERIPH_ID_I2S2,
+       PERIPH_ID_EPP,
+       PERIPH_ID_VI,
+       PERIPH_ID_2D,
+       PERIPH_ID_USBD,
+       PERIPH_ID_ISP,
+
+       /* 24 */
+       PERIPH_ID_3D,
+       PERIPH_ID_IDE,
+       PERIPH_ID_DISP2,
+       PERIPH_ID_DISP1,
+       PERIPH_ID_HOST1X,
+       PERIPH_ID_VCP,
+       PERIPH_ID_RESERVED30,
+       PERIPH_ID_CACHE2,
+
+       /* Middle word: 63:32 */
+       PERIPH_ID_MEM,
+       PERIPH_ID_AHBDMA,
+       PERIPH_ID_APBDMA,
+       PERIPH_ID_RESERVED35,
+       PERIPH_ID_KBC,
+       PERIPH_ID_STAT_MON,
+       PERIPH_ID_PMC,
+       PERIPH_ID_FUSE,
+
+       /* 40 */
+       PERIPH_ID_KFUSE,
+       PERIPH_ID_SBC1,
+       PERIPH_ID_SNOR,
+       PERIPH_ID_SPI1,
+       PERIPH_ID_SBC2,
+       PERIPH_ID_XIO,
+       PERIPH_ID_SBC3,
+       PERIPH_ID_DVC_I2C,
+
+       /* 48 */
+       PERIPH_ID_DSI,
+       PERIPH_ID_TVO,
+       PERIPH_ID_MIPI,
+       PERIPH_ID_HDMI,
+       PERIPH_ID_CSI,
+       PERIPH_ID_TVDAC,
+       PERIPH_ID_I2C2,
+       PERIPH_ID_UART3,
+
+       /* 56 */
+       PERIPH_ID_RESERVED56,
+       PERIPH_ID_EMC,
+       PERIPH_ID_USB2,
+       PERIPH_ID_USB3,
+       PERIPH_ID_MPE,
+       PERIPH_ID_VDE,
+       PERIPH_ID_BSEA,
+       PERIPH_ID_BSEV,
+
+       /* Upper word 95:64 */
+       PERIPH_ID_SPEEDO,
+       PERIPH_ID_UART4,
+       PERIPH_ID_UART5,
+       PERIPH_ID_I2C3,
+       PERIPH_ID_SBC4,
+       PERIPH_ID_SDMMC3,
+       PERIPH_ID_PCIE,
+       PERIPH_ID_OWR,
+
+       /* 72 */
+       PERIPH_ID_AFI,
+       PERIPH_ID_CORESIGHT,
+       PERIPH_ID_RESERVED74,
+       PERIPH_ID_AVPUCQ,
+       PERIPH_ID_RESERVED76,
+       PERIPH_ID_RESERVED77,
+       PERIPH_ID_RESERVED78,
+       PERIPH_ID_RESERVED79,
+
+       /* 80 */
+       PERIPH_ID_RESERVED80,
+       PERIPH_ID_RESERVED81,
+       PERIPH_ID_RESERVED82,
+       PERIPH_ID_RESERVED83,
+       PERIPH_ID_IRAMA,
+       PERIPH_ID_IRAMB,
+       PERIPH_ID_IRAMC,
+       PERIPH_ID_IRAMD,
+
+       /* 88 */
+       PERIPH_ID_CRAM2,
+
+       PERIPH_ID_COUNT,
+       PERIPH_ID_NONE = -1,
+};
+
+/* Converts a clock number to a clock register: 0=L, 1=H, 2=U */
+#define PERIPH_REG(id) ((id) >> 5)
+
+/* Mask value for a clock (within PERIPH_REG(id)) */
+#define PERIPH_MASK(id) (1 << ((id) & 0x1f))
+
+/* return 1 if a PLL ID is in range, and not a simple PLL */
+#define clock_id_is_pll(id) ((id) >= CLOCK_ID_FIRST && \
+               (id) < CLOCK_ID_FIRST_SIMPLE)
+
+/* PLL stabilization delay in usec */
+#define CLOCK_PLL_STABLE_DELAY_US 300
+
+/* return the current oscillator clock frequency */
+enum clock_osc_freq clock_get_osc_freq(void);
+
+/**
+ * Start PLL using the provided configuration parameters.
+ *
+ * @param id   clock id
+ * @param divm input divider
+ * @param divn feedback divider
+ * @param divp post divider 2^n
+ * @param cpcon        charge pump setup control
+ * @param lfcon        loop filter setup control
+ *
+ * @returns monotonic time in us that the PLL will be stable
+ */
+unsigned long clock_start_pll(enum clock_id id, u32 divm, u32 divn,
+               u32 divp, u32 cpcon, u32 lfcon);
+
+/**
+ * Read low-level parameters of a PLL.
+ *
+ * @param id   clock id to read (note: USB is not supported)
+ * @param divm returns input divider
+ * @param divn returns feedback divider
+ * @param divp returns post divider 2^n
+ * @param cpcon        returns charge pump setup control
+ * @param lfcon        returns loop filter setup control
+ *
+ * @returns 0 if ok, -1 on error (invalid clock id)
+ */
+int clock_ll_read_pll(enum clock_id clkid, u32 *divm, u32 *divn,
+                     u32 *divp, u32 *cpcon, u32 *lfcon);
+
+/*
+ * Enable a clock
+ *
+ * @param id   clock id
+ */
+void clock_enable(enum periph_id clkid);
+
+/*
+ * Disable a clock
+ *
+ * @param id   clock id
+ */
+void clock_disable(enum periph_id clkid);
+
+/*
+ * Set whether a clock is enabled or disabled.
+ *
+ * @param id           clock id
+ * @param enable       1 to enable, 0 to disable
+ */
+void clock_set_enable(enum periph_id clkid, int enable);
+
+/**
+ * Reset a peripheral. This puts it in reset, waits for a delay, then takes
+ * it out of reset and waits for th delay again.
+ *
+ * @param periph_id    peripheral to reset
+ * @param us_delay     time to delay in microseconds
+ */
+void reset_periph(enum periph_id periph_id, int us_delay);
+
+/**
+ * Put a peripheral into or out of reset.
+ *
+ * @param periph_id    peripheral to reset
+ * @param enable       1 to put into reset, 0 to take out of reset
+ */
+void reset_set_enable(enum periph_id periph_id, int enable);
+
+
+/* CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET/CLR_0 */
+enum crc_reset_id {
+       /* Things we can hold in reset for each CPU */
+       crc_rst_cpu = 1,
+       crc_rst_de = 1 << 2,    /* What is de? */
+       crc_rst_watchdog = 1 << 3,
+       crc_rst_debug = 1 << 4,
+};
+
+/**
+ * Put parts of the CPU complex into or out of reset.\
+ *
+ * @param cpu          cpu number (0 or 1 on Tegra2)
+ * @param which                which parts of the complex to affect (OR of crc_reset_id)
+ * @param reset                1 to assert reset, 0 to de-assert
+ */
+void reset_cmplx_set_enable(int cpu, int which, int reset);
+
+/**
+ * Set the source for a peripheral clock. This plus the divisor sets the
+ * clock rate. You need to look up the datasheet to see the meaning of the
+ * source parameter as it changes for each peripheral.
+ *
+ * Warning: This function is only for use pre-relocation. Please use
+ * clock_start_periph_pll() instead.
+ *
+ * @param periph_id    peripheral to adjust
+ * @param source       source clock (0, 1, 2 or 3)
+ */
+void clock_ll_set_source(enum periph_id periph_id, unsigned source);
+
+/**
+ * Set the source and divisor for a peripheral clock. This sets the
+ * clock rate. You need to look up the datasheet to see the meaning of the
+ * source parameter as it changes for each peripheral.
+ *
+ * Warning: This function is only for use pre-relocation. Please use
+ * clock_start_periph_pll() instead.
+ *
+ * @param periph_id    peripheral to adjust
+ * @param source       source clock (0, 1, 2 or 3)
+ * @param divisor      divisor value to use
+ */
+void clock_ll_set_source_divisor(enum periph_id periph_id, unsigned source,
+               unsigned divisor);
+
+/**
+ * Start a peripheral PLL clock at the given rate. This also resets the
+ * peripheral.
+ *
+ * @param periph_id    peripheral to start
+ * @param parent       PLL id of required parent clock
+ * @param rate         Required clock rate in Hz
+ * @return rate selected in Hz, or -1U if something went wrong
+ */
+unsigned clock_start_periph_pll(enum periph_id periph_id,
+               enum clock_id parent, unsigned rate);
+
+/**
+ * Returns the rate of a peripheral clock in Hz. Since the caller almost
+ * certainly knows the parent clock (having just set it) we require that
+ * this be passed in so we don't need to work it out.
+ *
+ * @param periph_id    peripheral to start
+ * @param parent       PLL id of parent clock (used to calculate rate, you
+ *                     must know this!)
+ * @return clock rate of peripheral in Hz
+ */
+unsigned long clock_get_periph_rate(enum periph_id periph_id,
+               enum clock_id parent);
+
+/**
+ * Adjust peripheral PLL clock to the given rate. This does not reset the
+ * peripheral. If a second stage divisor is not available, pass NULL for
+ * extra_div. If it is available, then this parameter will return the
+ * divisor selected (which will be a power of 2 from 1 to 256).
+ *
+ * @param periph_id    peripheral to start
+ * @param parent       PLL id of required parent clock
+ * @param rate         Required clock rate in Hz
+ * @param extra_div    value for the second-stage divisor (NULL if one is
+                       not available)
+ * @return rate selected in Hz, or -1U if something went wrong
+ */
+unsigned clock_adjust_periph_pll_div(enum periph_id periph_id,
+               enum clock_id parent, unsigned rate, int *extra_div);
+
+/**
+ * Returns the clock rate of a specified clock, in Hz.
+ *
+ * @param parent       PLL id of clock to check
+ * @return rate of clock in Hz
+ */
+unsigned clock_get_rate(enum clock_id clkid);
+
+/**
+ * Start up a UART using low-level calls
+ *
+ * Prior to relocation clock_start_periph_pll() cannot be called. This
+ * function provides a way to set up a UART using low-level calls which
+ * do not require BSS.
+ *
+ * @param periph_id    Peripheral ID of UART to enable (e,g, PERIPH_ID_UART1)
+ */
+void clock_ll_start_uart(enum periph_id periph_id);
+
+/**
+ * Decode a peripheral ID from a device tree node.
+ *
+ * This works by looking up the peripheral's 'clocks' node and reading out
+ * the second cell, which is the clock number / peripheral ID.
+ *
+ * @param blob         FDT blob to use
+ * @param node         Node to look at
+ * @return peripheral ID, or PERIPH_ID_NONE if none
+ */
+enum periph_id clock_decode_periph_id(const void *blob, int node);
+
+/**
+ * Checks if the oscillator bypass is enabled (XOBP bit)
+ *
+ * @return 1 if bypass is enabled, 0 if not
+ */
+int clock_get_osc_bypass(void);
+
+/*
+ * Checks that clocks are valid and prints a warning if not
+ *
+ * @return 0 if ok, -1 on error
+ */
+int clock_verify(void);
+
+/* Initialize the clocks */
+void clock_init(void);
+
+/* Initialize the PLLs */
+void clock_early_init(void);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/emc.h b/arch/arm/include/asm/arch-tegra20/emc.h
new file mode 100644 (file)
index 0000000..deb3d36
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (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 _ARCH_EMC_H_
+#define _ARCH_EMC_H_
+
+#include <asm/types.h>
+
+#define TEGRA_EMC_NUM_REGS     46
+
+/* EMC Registers */
+struct emc_ctlr {
+       u32 cfg;                /* 0x00: EMC_CFG */
+       u32 reserved0[3];       /* 0x04 ~ 0x0C */
+       u32 adr_cfg;            /* 0x10: EMC_ADR_CFG */
+       u32 adr_cfg1;           /* 0x14: EMC_ADR_CFG_1 */
+       u32 reserved1[2];       /* 0x18 ~ 0x18 */
+       u32 refresh_ctrl;       /* 0x20: EMC_REFCTRL */
+       u32 pin;                /* 0x24: EMC_PIN */
+       u32 timing_ctrl;        /* 0x28: EMC_TIMING_CONTROL */
+       u32 rc;                 /* 0x2C: EMC_RC */
+       u32 rfc;                /* 0x30: EMC_RFC */
+       u32 ras;                /* 0x34: EMC_RAS */
+       u32 rp;                 /* 0x38: EMC_RP */
+       u32 r2w;                /* 0x3C: EMC_R2W */
+       u32 w2r;                /* 0x40: EMC_W2R */
+       u32 r2p;                /* 0x44: EMC_R2P */
+       u32 w2p;                /* 0x48: EMC_W2P */
+       u32 rd_rcd;             /* 0x4C: EMC_RD_RCD */
+       u32 wd_rcd;             /* 0x50: EMC_WD_RCD */
+       u32 rrd;                /* 0x54: EMC_RRD */
+       u32 rext;               /* 0x58: EMC_REXT */
+       u32 wdv;                /* 0x5C: EMC_WDV */
+       u32 quse;               /* 0x60: EMC_QUSE */
+       u32 qrst;               /* 0x64: EMC_QRST */
+       u32 qsafe;              /* 0x68: EMC_QSAFE */
+       u32 rdv;                /* 0x6C: EMC_RDV */
+       u32 refresh;            /* 0x70: EMC_REFRESH */
+       u32 burst_refresh_num;  /* 0x74: EMC_BURST_REFRESH_NUM */
+       u32 pdex2wr;            /* 0x78: EMC_PDEX2WR */
+       u32 pdex2rd;            /* 0x7c: EMC_PDEX2RD */
+       u32 pchg2pden;          /* 0x80: EMC_PCHG2PDEN */
+       u32 act2pden;           /* 0x84: EMC_ACT2PDEN */
+       u32 ar2pden;            /* 0x88: EMC_AR2PDEN */
+       u32 rw2pden;            /* 0x8C: EMC_RW2PDEN */
+       u32 txsr;               /* 0x90: EMC_TXSR */
+       u32 tcke;               /* 0x94: EMC_TCKE */
+       u32 tfaw;               /* 0x98: EMC_TFAW */
+       u32 trpab;              /* 0x9C: EMC_TRPAB */
+       u32 tclkstable;         /* 0xA0: EMC_TCLKSTABLE */
+       u32 tclkstop;           /* 0xA4: EMC_TCLKSTOP */
+       u32 trefbw;             /* 0xA8: EMC_TREFBW */
+       u32 quse_extra;         /* 0xAC: EMC_QUSE_EXTRA */
+       u32 odt_write;          /* 0xB0: EMC_ODT_WRITE */
+       u32 odt_read;           /* 0xB4: EMC_ODT_READ */
+       u32 reserved2[5];       /* 0xB8 ~ 0xC8 */
+       u32 mrs;                /* 0xCC: EMC_MRS */
+       u32 emrs;               /* 0xD0: EMC_EMRS */
+       u32 ref;                /* 0xD4: EMC_REF */
+       u32 pre;                /* 0xD8: EMC_PRE */
+       u32 nop;                /* 0xDC: EMC_NOP */
+       u32 self_ref;           /* 0xE0: EMC_SELF_REF */
+       u32 dpd;                /* 0xE4: EMC_DPD */
+       u32 mrw;                /* 0xE8: EMC_MRW */
+       u32 mrr;                /* 0xEC: EMC_MRR */
+       u32 reserved3;          /* 0xF0: */
+       u32 fbio_cfg1;          /* 0xF4: EMC_FBIO_CFG1 */
+       u32 fbio_dqsib_dly;     /* 0xF8: EMC_FBIO_DQSIB_DLY */
+       u32 fbio_dqsib_dly_msb; /* 0xFC: EMC_FBIO_DQSIB_DLY_MSG */
+       u32 fbio_spare;         /* 0x100: SBIO_SPARE */
+                               /* There are more registers ... */
+};
+
+/**
+ * Set up the EMC for the given rate. The timing parameters are retrieved
+ * from the device tree "nvidia,tegra20-emc" node and its
+ * "nvidia,tegra20-emc-table" sub-nodes.
+ *
+ * @param blob Device tree blob
+ * @param rate Clock speed of memory controller in Hz (=2x memory bus rate)
+ * @return 0 if ok, else -ve error code (look in emc.c to decode it)
+ */
+int tegra_set_emc(const void *blob, unsigned rate);
+
+/**
+ * Get a pointer to the EMC controller from the device tree.
+ *
+ * @param blob Device tree blob
+ * @return pointer to EMC controller
+ */
+struct emc_ctlr *emc_get_controller(const void *blob);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/flow.h b/arch/arm/include/asm/arch-tegra20/flow.h
new file mode 100644 (file)
index 0000000..cce6cbf
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * (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 _FLOW_H_
+#define _FLOW_H_
+
+struct flow_ctlr {
+       u32     halt_cpu_events;
+       u32     halt_cop_events;
+       u32     cpu_csr;
+       u32     cop_csr;
+       u32     halt_cpu1_events;
+       u32     cpu1_csr;
+};
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/funcmux.h b/arch/arm/include/asm/arch-tegra20/funcmux.h
new file mode 100644 (file)
index 0000000..258f7b6
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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
+ */
+
+/* Tegra20 high-level function multiplexing */
+
+#ifndef __FUNCMUX_H
+#define __FUNCMUX_H
+
+/* Configs supported by the func mux */
+enum {
+       FUNCMUX_DEFAULT = 0,    /* default config */
+
+       /* UART configs */
+       FUNCMUX_UART1_IRRX_IRTX = 0,
+       FUNCMUX_UART1_UAA_UAB,
+       FUNCMUX_UART1_GPU,
+       FUNCMUX_UART1_SDIO1,
+       FUNCMUX_UART2_IRDA = 0,
+       FUNCMUX_UART4_GMC = 0,
+
+       /* I2C configs */
+       FUNCMUX_DVC_I2CP = 0,
+       FUNCMUX_I2C1_RM = 0,
+       FUNCMUX_I2C2_DDC = 0,
+       FUNCMUX_I2C2_PTA,
+       FUNCMUX_I2C3_DTF = 0,
+
+       /* SDMMC configs */
+       FUNCMUX_SDMMC1_SDIO1_4BIT = 0,
+       FUNCMUX_SDMMC2_DTA_DTD_8BIT = 0,
+       FUNCMUX_SDMMC3_SDB_4BIT = 0,
+       FUNCMUX_SDMMC3_SDB_SLXA_8BIT,
+       FUNCMUX_SDMMC4_ATC_ATD_8BIT = 0,
+       FUNCMUX_SDMMC4_ATB_GMA_4_BIT,
+       FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT,
+
+       /* USB configs */
+       FUNCMUX_USB2_ULPI = 0,
+
+       /* Serial Flash configs */
+       FUNCMUX_SPI1_GMC_GMD = 0,
+};
+
+/**
+ * Select a config for a particular peripheral.
+ *
+ * Each peripheral can operate through a number of configurations,
+ * which are sets of pins that it uses to bring out its signals.
+ * The basic config is 0, and higher numbers indicate different
+ * pinmux settings to bring the peripheral out on other pins,
+ *
+ * This function also disables tristate for the function's pins,
+ * so that they operate in normal mode.
+ *
+ * @param id           Peripheral id
+ * @param config       Configuration to use (FUNCMUX_...), 0 for default
+ * @return 0 if ok, -1 on error (e.g. incorrect id or config)
+ */
+int funcmux_select(enum periph_id id, int config);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/fuse.h b/arch/arm/include/asm/arch-tegra20/fuse.h
new file mode 100644 (file)
index 0000000..b7e3808
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ *  (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 _FUSE_H_
+#define _FUSE_H_
+
+/* FUSE registers */
+struct fuse_regs {
+       u32 reserved0[64];              /* 0x00 - 0xFC: */
+       u32 production_mode;            /* 0x100: FUSE_PRODUCTION_MODE */
+       u32 reserved1[3];               /* 0x104 - 0x10c: */
+       u32 sku_info;                   /* 0x110 */
+       u32 reserved2[13];              /* 0x114 - 0x144: */
+       u32 fa;                         /* 0x148: FUSE_FA */
+       u32 reserved3[21];              /* 0x14C - 0x19C: */
+       u32 security_mode;              /* 0x1A0: FUSE_SECURITY_MODE */
+};
+
+#endif /* ifndef _FUSE_H_ */
diff --git a/arch/arm/include/asm/arch-tegra20/gp_padctrl.h b/arch/arm/include/asm/arch-tegra20/gp_padctrl.h
new file mode 100644 (file)
index 0000000..865af5b
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ *  (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 _GP_PADCTRL_H_
+#define _GP_PADCTRL_H_
+
+/* APB_MISC_GP and padctrl registers */
+struct apb_misc_gp_ctlr {
+       u32     modereg;        /* 0x00: APB_MISC_GP_MODEREG */
+       u32     hidrev;         /* 0x04: APB_MISC_GP_HIDREV */
+       u32     reserved0[22];  /* 0x08 - 0x5C: */
+       u32     emu_revid;      /* 0x60: APB_MISC_GP_EMU_REVID */
+       u32     xactor_scratch; /* 0x64: APB_MISC_GP_XACTOR_SCRATCH */
+       u32     aocfg1;         /* 0x68: APB_MISC_GP_AOCFG1PADCTRL */
+       u32     aocfg2;         /* 0x6c: APB_MISC_GP_AOCFG2PADCTRL */
+       u32     atcfg1;         /* 0x70: APB_MISC_GP_ATCFG1PADCTRL */
+       u32     atcfg2;         /* 0x74: APB_MISC_GP_ATCFG2PADCTRL */
+       u32     cdevcfg1;       /* 0x78: APB_MISC_GP_CDEV1CFGPADCTRL */
+       u32     cdevcfg2;       /* 0x7C: APB_MISC_GP_CDEV2CFGPADCTRL */
+       u32     csuscfg;        /* 0x80: APB_MISC_GP_CSUSCFGPADCTRL */
+       u32     dap1cfg;        /* 0x84: APB_MISC_GP_DAP1CFGPADCTRL */
+       u32     dap2cfg;        /* 0x88: APB_MISC_GP_DAP2CFGPADCTRL */
+       u32     dap3cfg;        /* 0x8C: APB_MISC_GP_DAP3CFGPADCTRL */
+       u32     dap4cfg;        /* 0x90: APB_MISC_GP_DAP4CFGPADCTRL */
+       u32     dbgcfg;         /* 0x94: APB_MISC_GP_DBGCFGPADCTRL */
+       u32     lcdcfg1;        /* 0x98: APB_MISC_GP_LCDCFG1PADCTRL */
+       u32     lcdcfg2;        /* 0x9C: APB_MISC_GP_LCDCFG2PADCTRL */
+       u32     sdmmc2_cfg;     /* 0xA0: APB_MISC_GP_SDMMC2CFGPADCTRL */
+       u32     sdmmc3_cfg;     /* 0xA4: APB_MISC_GP_SDMMC3CFGPADCTRL */
+       u32     spicfg;         /* 0xA8: APB_MISC_GP_SPICFGPADCTRL */
+       u32     uaacfg;         /* 0xAC: APB_MISC_GP_UAACFGPADCTRL */
+       u32     uabcfg;         /* 0xB0: APB_MISC_GP_UABCFGPADCTRL */
+       u32     uart2cfg;       /* 0xB4: APB_MISC_GP_UART2CFGPADCTRL */
+       u32     uart3cfg;       /* 0xB8: APB_MISC_GP_UART3CFGPADCTRL */
+       u32     vicfg1;         /* 0xBC: APB_MISC_GP_VICFG1PADCTRL */
+       u32     vicfg2;         /* 0xC0: APB_MISC_GP_VICFG2PADCTRL */
+       u32     xm2cfga;        /* 0xC4: APB_MISC_GP_XM2CFGAPADCTRL */
+       u32     xm2cfgc;        /* 0xC8: APB_MISC_GP_XM2CFGCPADCTRL */
+       u32     xm2cfgd;        /* 0xCC: APB_MISC_GP_XM2CFGDPADCTRL */
+       u32     xm2clkcfg;      /* 0xD0: APB_MISC_GP_XM2CLKCFGPADCTRL */
+       u32     memcomp;        /* 0xD4: APB_MISC_GP_MEMCOMPPADCTRL */
+};
+
+/* bit fields definitions for APB_MISC_GP_HIDREV register */
+#define HIDREV_CHIPID_SHIFT            8
+#define HIDREV_CHIPID_MASK             (0xff << HIDREV_CHIPID_SHIFT)
+#define HIDREV_MAJORPREV_SHIFT         4
+#define HIDREV_MAJORPREV_MASK          (0xf << HIDREV_MAJORPREV_SHIFT)
+
+/* CHIPID field returned from APB_MISC_GP_HIDREV register */
+#define CHIPID_TEGRA20                         0x20
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/gpio.h b/arch/arm/include/asm/arch-tegra20/gpio.h
new file mode 100644 (file)
index 0000000..06be4c2
--- /dev/null
@@ -0,0 +1,290 @@
+/*
+ * Copyright (c) 2011, Google Inc. All rights reserved.
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ * Portions Copyright 2011-2012 NVIDIA Corporation
+ *
+ * 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 _TEGRA_GPIO_H_
+#define _TEGRA_GPIO_H_
+
+/*
+ * The Tegra 2x GPIO controller has 224 GPIOs arranged in 7 banks of 4 ports,
+ * each with 8 GPIOs.
+ */
+#define TEGRA_GPIO_PORTS       4       /* number of ports per bank */
+#define TEGRA_GPIO_BANKS       7       /* number of banks */
+#define MAX_NUM_GPIOS          (TEGRA_GPIO_PORTS * TEGRA_GPIO_BANKS * 8)
+#define GPIO_NAME_SIZE         20      /* gpio_request max label len */
+
+/* GPIO Controller registers for a single bank */
+struct gpio_ctlr_bank {
+       uint gpio_config[TEGRA_GPIO_PORTS];
+       uint gpio_dir_out[TEGRA_GPIO_PORTS];
+       uint gpio_out[TEGRA_GPIO_PORTS];
+       uint gpio_in[TEGRA_GPIO_PORTS];
+       uint gpio_int_status[TEGRA_GPIO_PORTS];
+       uint gpio_int_enable[TEGRA_GPIO_PORTS];
+       uint gpio_int_level[TEGRA_GPIO_PORTS];
+       uint gpio_int_clear[TEGRA_GPIO_PORTS];
+};
+
+struct gpio_ctlr {
+       struct gpio_ctlr_bank gpio_bank[TEGRA_GPIO_BANKS];
+};
+
+#define GPIO_BANK(x)           ((x) >> 5)
+#define GPIO_PORT(x)           (((x) >> 3) & 0x3)
+#define GPIO_FULLPORT(x)       ((x) >> 3)
+#define GPIO_BIT(x)            ((x) & 0x7)
+
+enum gpio_pin {
+       GPIO_PA0 = 0,   /* pin 0 */
+       GPIO_PA1,
+       GPIO_PA2,
+       GPIO_PA3,
+       GPIO_PA4,
+       GPIO_PA5,
+       GPIO_PA6,
+       GPIO_PA7,
+       GPIO_PB0,       /* pin 8 */
+       GPIO_PB1,
+       GPIO_PB2,
+       GPIO_PB3,
+       GPIO_PB4,
+       GPIO_PB5,
+       GPIO_PB6,
+       GPIO_PB7,
+       GPIO_PC0,       /* pin 16 */
+       GPIO_PC1,
+       GPIO_PC2,
+       GPIO_PC3,
+       GPIO_PC4,
+       GPIO_PC5,
+       GPIO_PC6,
+       GPIO_PC7,
+       GPIO_PD0,       /* pin 24 */
+       GPIO_PD1,
+       GPIO_PD2,
+       GPIO_PD3,
+       GPIO_PD4,
+       GPIO_PD5,
+       GPIO_PD6,
+       GPIO_PD7,
+       GPIO_PE0,       /* pin 32 */
+       GPIO_PE1,
+       GPIO_PE2,
+       GPIO_PE3,
+       GPIO_PE4,
+       GPIO_PE5,
+       GPIO_PE6,
+       GPIO_PE7,
+       GPIO_PF0,       /* pin 40 */
+       GPIO_PF1,
+       GPIO_PF2,
+       GPIO_PF3,
+       GPIO_PF4,
+       GPIO_PF5,
+       GPIO_PF6,
+       GPIO_PF7,
+       GPIO_PG0,       /* pin 48 */
+       GPIO_PG1,
+       GPIO_PG2,
+       GPIO_PG3,
+       GPIO_PG4,
+       GPIO_PG5,
+       GPIO_PG6,
+       GPIO_PG7,
+       GPIO_PH0,       /* pin 56 */
+       GPIO_PH1,
+       GPIO_PH2,
+       GPIO_PH3,
+       GPIO_PH4,
+       GPIO_PH5,
+       GPIO_PH6,
+       GPIO_PH7,
+       GPIO_PI0,       /* pin 64 */
+       GPIO_PI1,
+       GPIO_PI2,
+       GPIO_PI3,
+       GPIO_PI4,
+       GPIO_PI5,
+       GPIO_PI6,
+       GPIO_PI7,
+       GPIO_PJ0,       /* pin 72 */
+       GPIO_PJ1,
+       GPIO_PJ2,
+       GPIO_PJ3,
+       GPIO_PJ4,
+       GPIO_PJ5,
+       GPIO_PJ6,
+       GPIO_PJ7,
+       GPIO_PK0,       /* pin 80 */
+       GPIO_PK1,
+       GPIO_PK2,
+       GPIO_PK3,
+       GPIO_PK4,
+       GPIO_PK5,
+       GPIO_PK6,
+       GPIO_PK7,
+       GPIO_PL0,       /* pin 88 */
+       GPIO_PL1,
+       GPIO_PL2,
+       GPIO_PL3,
+       GPIO_PL4,
+       GPIO_PL5,
+       GPIO_PL6,
+       GPIO_PL7,
+       GPIO_PM0,       /* pin 96 */
+       GPIO_PM1,
+       GPIO_PM2,
+       GPIO_PM3,
+       GPIO_PM4,
+       GPIO_PM5,
+       GPIO_PM6,
+       GPIO_PM7,
+       GPIO_PN0,       /* pin 104 */
+       GPIO_PN1,
+       GPIO_PN2,
+       GPIO_PN3,
+       GPIO_PN4,
+       GPIO_PN5,
+       GPIO_PN6,
+       GPIO_PN7,
+       GPIO_PO0,       /* pin 112 */
+       GPIO_PO1,
+       GPIO_PO2,
+       GPIO_PO3,
+       GPIO_PO4,
+       GPIO_PO5,
+       GPIO_PO6,
+       GPIO_PO7,
+       GPIO_PP0,       /* pin 120 */
+       GPIO_PP1,
+       GPIO_PP2,
+       GPIO_PP3,
+       GPIO_PP4,
+       GPIO_PP5,
+       GPIO_PP6,
+       GPIO_PP7,
+       GPIO_PQ0,       /* pin 128 */
+       GPIO_PQ1,
+       GPIO_PQ2,
+       GPIO_PQ3,
+       GPIO_PQ4,
+       GPIO_PQ5,
+       GPIO_PQ6,
+       GPIO_PQ7,
+       GPIO_PR0,       /* pin 136 */
+       GPIO_PR1,
+       GPIO_PR2,
+       GPIO_PR3,
+       GPIO_PR4,
+       GPIO_PR5,
+       GPIO_PR6,
+       GPIO_PR7,
+       GPIO_PS0,       /* pin 144 */
+       GPIO_PS1,
+       GPIO_PS2,
+       GPIO_PS3,
+       GPIO_PS4,
+       GPIO_PS5,
+       GPIO_PS6,
+       GPIO_PS7,
+       GPIO_PT0,       /* pin 152 */
+       GPIO_PT1,
+       GPIO_PT2,
+       GPIO_PT3,
+       GPIO_PT4,
+       GPIO_PT5,
+       GPIO_PT6,
+       GPIO_PT7,
+       GPIO_PU0,       /* pin 160 */
+       GPIO_PU1,
+       GPIO_PU2,
+       GPIO_PU3,
+       GPIO_PU4,
+       GPIO_PU5,
+       GPIO_PU6,
+       GPIO_PU7,
+       GPIO_PV0,       /* pin 168 */
+       GPIO_PV1,
+       GPIO_PV2,
+       GPIO_PV3,
+       GPIO_PV4,
+       GPIO_PV5,
+       GPIO_PV6,
+       GPIO_PV7,
+       GPIO_PW0,       /* pin 176 */
+       GPIO_PW1,
+       GPIO_PW2,
+       GPIO_PW3,
+       GPIO_PW4,
+       GPIO_PW5,
+       GPIO_PW6,
+       GPIO_PW7,
+       GPIO_PX0,       /* pin 184 */
+       GPIO_PX1,
+       GPIO_PX2,
+       GPIO_PX3,
+       GPIO_PX4,
+       GPIO_PX5,
+       GPIO_PX6,
+       GPIO_PX7,
+       GPIO_PY0,       /* pin 192 */
+       GPIO_PY1,
+       GPIO_PY2,
+       GPIO_PY3,
+       GPIO_PY4,
+       GPIO_PY5,
+       GPIO_PY6,
+       GPIO_PY7,
+       GPIO_PZ0,       /* pin 200 */
+       GPIO_PZ1,
+       GPIO_PZ2,
+       GPIO_PZ3,
+       GPIO_PZ4,
+       GPIO_PZ5,
+       GPIO_PZ6,
+       GPIO_PZ7,
+       GPIO_PAA0,      /* pin 208 */
+       GPIO_PAA1,
+       GPIO_PAA2,
+       GPIO_PAA3,
+       GPIO_PAA4,
+       GPIO_PAA5,
+       GPIO_PAA6,
+       GPIO_PAA7,
+       GPIO_PBB0,      /* pin 216 */
+       GPIO_PBB1,
+       GPIO_PBB2,
+       GPIO_PBB3,
+       GPIO_PBB4,
+       GPIO_PBB5,
+       GPIO_PBB6,
+       GPIO_PBB7,      /* pin 223 */
+};
+
+/*
+ * Tegra20-specific GPIO API
+ */
+
+void gpio_info(void);
+
+#define gpio_status()  gpio_info()
+#endif /* TEGRA_GPIO_H_ */
diff --git a/arch/arm/include/asm/arch-tegra20/mmc.h b/arch/arm/include/asm/arch-tegra20/mmc.h
new file mode 100644 (file)
index 0000000..916a353
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011, Google Inc. All rights reserved.
+ * 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 _TEGRA20_MMC_H_
+#define _TEGRA20_MMC_H_
+
+int tegra20_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio);
+
+#endif /* TEGRA20_MMC_H_ */
diff --git a/arch/arm/include/asm/arch-tegra20/pinmux.h b/arch/arm/include/asm/arch-tegra20/pinmux.h
new file mode 100644 (file)
index 0000000..03fa7ca
--- /dev/null
@@ -0,0 +1,354 @@
+/*
+ *  (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_
+
+/*
+ * Pin groups which we adjust. There are three basic attributes of each pin
+ * group which use this enum:
+ *
+ *     - function
+ *     - pullup / pulldown
+ *     - tristate or normal
+ */
+enum pmux_pingrp {
+       /* APB_MISC_PP_TRISTATE_REG_A_0 */
+       PINGRP_ATA,
+       PINGRP_ATB,
+       PINGRP_ATC,
+       PINGRP_ATD,
+       PINGRP_CDEV1,
+       PINGRP_CDEV2,
+       PINGRP_CSUS,
+       PINGRP_DAP1,
+
+       PINGRP_DAP2,
+       PINGRP_DAP3,
+       PINGRP_DAP4,
+       PINGRP_DTA,
+       PINGRP_DTB,
+       PINGRP_DTC,
+       PINGRP_DTD,
+       PINGRP_DTE,
+
+       PINGRP_GPU,
+       PINGRP_GPV,
+       PINGRP_I2CP,
+       PINGRP_IRTX,
+       PINGRP_IRRX,
+       PINGRP_KBCB,
+       PINGRP_KBCA,
+       PINGRP_PMC,
+
+       PINGRP_PTA,
+       PINGRP_RM,
+       PINGRP_KBCE,
+       PINGRP_KBCF,
+       PINGRP_GMA,
+       PINGRP_GMC,
+       PINGRP_SDIO1,
+       PINGRP_OWC,
+
+       /* 32: APB_MISC_PP_TRISTATE_REG_B_0 */
+       PINGRP_GME,
+       PINGRP_SDC,
+       PINGRP_SDD,
+       PINGRP_RESERVED0,
+       PINGRP_SLXA,
+       PINGRP_SLXC,
+       PINGRP_SLXD,
+       PINGRP_SLXK,
+
+       PINGRP_SPDI,
+       PINGRP_SPDO,
+       PINGRP_SPIA,
+       PINGRP_SPIB,
+       PINGRP_SPIC,
+       PINGRP_SPID,
+       PINGRP_SPIE,
+       PINGRP_SPIF,
+
+       PINGRP_SPIG,
+       PINGRP_SPIH,
+       PINGRP_UAA,
+       PINGRP_UAB,
+       PINGRP_UAC,
+       PINGRP_UAD,
+       PINGRP_UCA,
+       PINGRP_UCB,
+
+       PINGRP_RESERVED1,
+       PINGRP_ATE,
+       PINGRP_KBCC,
+       PINGRP_RESERVED2,
+       PINGRP_RESERVED3,
+       PINGRP_GMB,
+       PINGRP_GMD,
+       PINGRP_DDC,
+
+       /* 64: APB_MISC_PP_TRISTATE_REG_C_0 */
+       PINGRP_LD0,
+       PINGRP_LD1,
+       PINGRP_LD2,
+       PINGRP_LD3,
+       PINGRP_LD4,
+       PINGRP_LD5,
+       PINGRP_LD6,
+       PINGRP_LD7,
+
+       PINGRP_LD8,
+       PINGRP_LD9,
+       PINGRP_LD10,
+       PINGRP_LD11,
+       PINGRP_LD12,
+       PINGRP_LD13,
+       PINGRP_LD14,
+       PINGRP_LD15,
+
+       PINGRP_LD16,
+       PINGRP_LD17,
+       PINGRP_LHP0,
+       PINGRP_LHP1,
+       PINGRP_LHP2,
+       PINGRP_LVP0,
+       PINGRP_LVP1,
+       PINGRP_HDINT,
+
+       PINGRP_LM0,
+       PINGRP_LM1,
+       PINGRP_LVS,
+       PINGRP_LSC0,
+       PINGRP_LSC1,
+       PINGRP_LSCK,
+       PINGRP_LDC,
+       PINGRP_LCSN,
+
+       /* 96: APB_MISC_PP_TRISTATE_REG_D_0 */
+       PINGRP_LSPI,
+       PINGRP_LSDA,
+       PINGRP_LSDI,
+       PINGRP_LPW0,
+       PINGRP_LPW1,
+       PINGRP_LPW2,
+       PINGRP_LDI,
+       PINGRP_LHS,
+
+       PINGRP_LPP,
+       PINGRP_RESERVED4,
+       PINGRP_KBCD,
+       PINGRP_GPU7,
+       PINGRP_DTF,
+       PINGRP_UDA,
+       PINGRP_CRTP,
+       PINGRP_SDB,
+
+       /* these pin groups only have pullup and pull down control */
+       PINGRP_FIRST_NO_MUX,
+       PINGRP_CK32 = PINGRP_FIRST_NO_MUX,
+       PINGRP_DDRC,
+       PINGRP_PMCA,
+       PINGRP_PMCB,
+       PINGRP_PMCC,
+       PINGRP_PMCD,
+       PINGRP_PMCE,
+       PINGRP_XM2C,
+       PINGRP_XM2D,
+
+       PINGRP_COUNT,
+};
+
+/*
+ * Functions which can be assigned to each of the pin groups. The values here
+ * bear no relation to the values programmed into pinmux registers and are
+ * purely a convenience. The translation is done through a table search.
+ */
+enum pmux_func {
+       PMUX_FUNC_AHB_CLK,
+       PMUX_FUNC_APB_CLK,
+       PMUX_FUNC_AUDIO_SYNC,
+       PMUX_FUNC_CRT,
+       PMUX_FUNC_DAP1,
+       PMUX_FUNC_DAP2,
+       PMUX_FUNC_DAP3,
+       PMUX_FUNC_DAP4,
+       PMUX_FUNC_DAP5,
+       PMUX_FUNC_DISPA,
+       PMUX_FUNC_DISPB,
+       PMUX_FUNC_EMC_TEST0_DLL,
+       PMUX_FUNC_EMC_TEST1_DLL,
+       PMUX_FUNC_GMI,
+       PMUX_FUNC_GMI_INT,
+       PMUX_FUNC_HDMI,
+       PMUX_FUNC_I2C,
+       PMUX_FUNC_I2C2,
+       PMUX_FUNC_I2C3,
+       PMUX_FUNC_IDE,
+       PMUX_FUNC_IRDA,
+       PMUX_FUNC_KBC,
+       PMUX_FUNC_MIO,
+       PMUX_FUNC_MIPI_HS,
+       PMUX_FUNC_NAND,
+       PMUX_FUNC_OSC,
+       PMUX_FUNC_OWR,
+       PMUX_FUNC_PCIE,
+       PMUX_FUNC_PLLA_OUT,
+       PMUX_FUNC_PLLC_OUT1,
+       PMUX_FUNC_PLLM_OUT1,
+       PMUX_FUNC_PLLP_OUT2,
+       PMUX_FUNC_PLLP_OUT3,
+       PMUX_FUNC_PLLP_OUT4,
+       PMUX_FUNC_PWM,
+       PMUX_FUNC_PWR_INTR,
+       PMUX_FUNC_PWR_ON,
+       PMUX_FUNC_RTCK,
+       PMUX_FUNC_SDIO1,
+       PMUX_FUNC_SDIO2,
+       PMUX_FUNC_SDIO3,
+       PMUX_FUNC_SDIO4,
+       PMUX_FUNC_SFLASH,
+       PMUX_FUNC_SPDIF,
+       PMUX_FUNC_SPI1,
+       PMUX_FUNC_SPI2,
+       PMUX_FUNC_SPI2_ALT,
+       PMUX_FUNC_SPI3,
+       PMUX_FUNC_SPI4,
+       PMUX_FUNC_TRACE,
+       PMUX_FUNC_TWC,
+       PMUX_FUNC_UARTA,
+       PMUX_FUNC_UARTB,
+       PMUX_FUNC_UARTC,
+       PMUX_FUNC_UARTD,
+       PMUX_FUNC_UARTE,
+       PMUX_FUNC_ULPI,
+       PMUX_FUNC_VI,
+       PMUX_FUNC_VI_SENSOR_CLK,
+       PMUX_FUNC_XIO,
+       PMUX_FUNC_SAFE,
+
+       /* These don't have a name, but can be used in the table */
+       PMUX_FUNC_RSVD1,
+       PMUX_FUNC_RSVD2,
+       PMUX_FUNC_RSVD3,
+       PMUX_FUNC_RSVD4,
+       PMUX_FUNC_RSVD, /* Not valid and should not be used */
+
+       PMUX_FUNC_COUNT,
+
+       PMUX_FUNC_NONE = -1,
+};
+
+/* return 1 if a pmux_func is in range */
+#define pmux_func_isvalid(func) ((func) >= 0 && (func) < PMUX_FUNC_COUNT && \
+               (func) != PMUX_FUNC_RSVD)
+
+/* The pullup/pulldown state of a pin group */
+enum pmux_pull {
+       PMUX_PULL_NORMAL = 0,
+       PMUX_PULL_DOWN,
+       PMUX_PULL_UP,
+};
+
+/* Defines whether a pin group is tristated or in normal operation */
+enum pmux_tristate {
+       PMUX_TRI_NORMAL = 0,
+       PMUX_TRI_TRISTATE = 1,
+};
+
+/* Available power domains used by pin groups */
+enum pmux_vddio {
+       PMUX_VDDIO_BB = 0,
+       PMUX_VDDIO_LCD,
+       PMUX_VDDIO_VI,
+       PMUX_VDDIO_UART,
+       PMUX_VDDIO_DDR,
+       PMUX_VDDIO_NAND,
+       PMUX_VDDIO_SYS,
+       PMUX_VDDIO_AUDIO,
+       PMUX_VDDIO_SD,
+
+       PMUX_VDDIO_NONE
+};
+
+enum {
+       PMUX_TRISTATE_REGS      = 4,
+       PMUX_MUX_REGS           = 7,
+       PMUX_PULL_REGS          = 5,
+};
+
+/* APB MISC Pin Mux and Tristate (APB_MISC_PP_) registers */
+struct pmux_tri_ctlr {
+       uint pmt_reserved0;             /* ABP_MISC_PP_ reserved offset 00 */
+       uint pmt_reserved1;             /* ABP_MISC_PP_ reserved offset 04 */
+       uint pmt_strap_opt_a;           /* _STRAPPING_OPT_A_0, offset 08   */
+       uint pmt_reserved2;             /* ABP_MISC_PP_ reserved offset 0C */
+       uint pmt_reserved3;             /* ABP_MISC_PP_ reserved offset 10 */
+       uint pmt_tri[PMUX_TRISTATE_REGS];/* _TRI_STATE_REG_A/B/C/D_0 14-20 */
+       uint pmt_cfg_ctl;               /* _CONFIG_CTL_0, offset 24        */
+
+       uint pmt_reserved[22];          /* ABP_MISC_PP_ reserved offs 28-7C */
+
+       uint pmt_ctl[PMUX_MUX_REGS];    /* _PIN_MUX_CTL_A-G_0, offset 80   */
+       uint pmt_reserved4;             /* ABP_MISC_PP_ reserved offset 9c */
+       uint pmt_pull[PMUX_PULL_REGS];  /* APB_MISC_PP_PULLUPDOWN_REG_A-E  */
+};
+
+/*
+ * This defines the configuration for a pin, including the function assigned,
+ * pull up/down settings and tristate settings. Having set up one of these
+ * you can call pinmux_config_pingroup() to configure a pin in one step. Also
+ * available is pinmux_config_table() to configure a list of pins.
+ */
+struct pingroup_config {
+       enum pmux_pingrp pingroup;      /* pin group PINGRP_...             */
+       enum pmux_func func;            /* function to assign FUNC_...      */
+       enum pmux_pull pull;            /* pull up/down/normal PMUX_PULL_...*/
+       enum pmux_tristate tristate;    /* tristate or normal PMUX_TRI_...  */
+};
+
+/* Set a pin group to tristate */
+void pinmux_tristate_enable(enum pmux_pingrp pin);
+
+/* Set a pin group to normal (non tristate) */
+void pinmux_tristate_disable(enum pmux_pingrp pin);
+
+/* Set the pull up/down feature for a pin group */
+void pinmux_set_pullupdown(enum pmux_pingrp pin, enum pmux_pull pupd);
+
+/* Set the mux function for a pin group */
+void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func);
+
+/* Set the complete configuration for a pin group */
+void pinmux_config_pingroup(struct pingroup_config *config);
+
+void pinmux_set_tristate(enum pmux_pingrp pin, int enable);
+
+/**
+ * Configuure a list of pin groups
+ *
+ * @param config       List of config items
+ * @param len          Number of config items in list
+ */
+void pinmux_config_table(struct pingroup_config *config, int len);
+
+#endif /* PINMUX_H */
diff --git a/arch/arm/include/asm/arch-tegra20/pmc.h b/arch/arm/include/asm/arch-tegra20/pmc.h
new file mode 100644 (file)
index 0000000..b1d47cd
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ *  (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_
+
+/* Power Management Controller (APBDEV_PMC_) registers */
+struct pmc_ctlr {
+       uint pmc_cntrl;                 /* _CNTRL_0, offset 00 */
+       uint pmc_sec_disable;           /* _SEC_DISABLE_0, offset 04 */
+       uint pmc_pmc_swrst;             /* _PMC_SWRST_0, offset 08 */
+       uint pmc_wake_mask;             /* _WAKE_MASK_0, offset 0C */
+       uint pmc_wake_lvl;              /* _WAKE_LVL_0, offset 10 */
+       uint pmc_wake_status;           /* _WAKE_STATUS_0, offset 14 */
+       uint pmc_sw_wake_status;        /* _SW_WAKE_STATUS_0, offset 18 */
+       uint pmc_dpd_pads_oride;        /* _DPD_PADS_ORIDE_0, offset 1C */
+       uint pmc_dpd_sample;            /* _DPD_PADS_SAMPLE_0, offset 20 */
+       uint pmc_dpd_enable;            /* _DPD_PADS_ENABLE_0, offset 24 */
+       uint pmc_pwrgate_timer_off;     /* _PWRGATE_TIMER_OFF_0, offset 28 */
+       uint pmc_pwrgate_timer_on;      /* _PWRGATE_TIMER_ON_0, offset 2C */
+       uint pmc_pwrgate_toggle;        /* _PWRGATE_TOGGLE_0, offset 30 */
+       uint pmc_remove_clamping;       /* _REMOVE_CLAMPING_CMD_0, offset 34 */
+       uint pmc_pwrgate_status;        /* _PWRGATE_STATUS_0, offset 38 */
+       uint pmc_pwrgood_timer;         /* _PWRGOOD_TIMER_0, offset 3C */
+       uint pmc_blink_timer;           /* _BLINK_TIMER_0, offset 40 */
+       uint pmc_no_iopower;            /* _NO_IOPOWER_0, offset 44 */
+       uint pmc_pwr_det;               /* _PWR_DET_0, offset 48 */
+       uint pmc_pwr_det_latch;         /* _PWR_DET_LATCH_0, offset 4C */
+
+       uint pmc_scratch0;              /* _SCRATCH0_0, offset 50 */
+       uint pmc_scratch1;              /* _SCRATCH1_0, offset 54 */
+       uint pmc_scratch2;              /* _SCRATCH2_0, offset 58 */
+       uint pmc_scratch3;              /* _SCRATCH3_0, offset 5C */
+       uint pmc_scratch4;              /* _SCRATCH4_0, offset 60 */
+       uint pmc_scratch5;              /* _SCRATCH5_0, offset 64 */
+       uint pmc_scratch6;              /* _SCRATCH6_0, offset 68 */
+       uint pmc_scratch7;              /* _SCRATCH7_0, offset 6C */
+       uint pmc_scratch8;              /* _SCRATCH8_0, offset 70 */
+       uint pmc_scratch9;              /* _SCRATCH9_0, offset 74 */
+       uint pmc_scratch10;             /* _SCRATCH10_0, offset 78 */
+       uint pmc_scratch11;             /* _SCRATCH11_0, offset 7C */
+       uint pmc_scratch12;             /* _SCRATCH12_0, offset 80 */
+       uint pmc_scratch13;             /* _SCRATCH13_0, offset 84 */
+       uint pmc_scratch14;             /* _SCRATCH14_0, offset 88 */
+       uint pmc_scratch15;             /* _SCRATCH15_0, offset 8C */
+       uint pmc_scratch16;             /* _SCRATCH16_0, offset 90 */
+       uint pmc_scratch17;             /* _SCRATCH17_0, offset 94 */
+       uint pmc_scratch18;             /* _SCRATCH18_0, offset 98 */
+       uint pmc_scratch19;             /* _SCRATCH19_0, offset 9C */
+       uint pmc_scratch20;             /* _SCRATCH20_0, offset A0 */
+       uint pmc_scratch21;             /* _SCRATCH21_0, offset A4 */
+       uint pmc_scratch22;             /* _SCRATCH22_0, offset A8 */
+       uint pmc_scratch23;             /* _SCRATCH23_0, offset AC */
+
+       uint pmc_secure_scratch0;       /* _SECURE_SCRATCH0_0, offset B0 */
+       uint pmc_secure_scratch1;       /* _SECURE_SCRATCH1_0, offset B4 */
+       uint pmc_secure_scratch2;       /* _SECURE_SCRATCH2_0, offset B8 */
+       uint pmc_secure_scratch3;       /* _SECURE_SCRATCH3_0, offset BC */
+       uint pmc_secure_scratch4;       /* _SECURE_SCRATCH4_0, offset C0 */
+       uint pmc_secure_scratch5;       /* _SECURE_SCRATCH5_0, offset C4 */
+
+       uint pmc_cpupwrgood_timer;      /* _CPUPWRGOOD_TIMER_0, offset C8 */
+       uint pmc_cpupwroff_timer;       /* _CPUPWROFF_TIMER_0, offset CC */
+       uint pmc_pg_mask;               /* _PG_MASK_0, offset D0 */
+       uint pmc_pg_mask_1;             /* _PG_MASK_1_0, offset D4 */
+       uint pmc_auto_wake_lvl;         /* _AUTO_WAKE_LVL_0, offset D8 */
+       uint pmc_auto_wake_lvl_mask;    /* _AUTO_WAKE_LVL_MASK_0, offset DC */
+       uint pmc_wake_delay;            /* _WAKE_DELAY_0, offset E0 */
+       uint pmc_pwr_det_val;           /* _PWR_DET_VAL_0, offset E4 */
+       uint pmc_ddr_pwr;               /* _DDR_PWR_0, offset E8 */
+       uint pmc_usb_debounce_del;      /* _USB_DEBOUNCE_DEL_0, offset EC */
+       uint pmc_usb_ao;                /* _USB_AO_0, offset F0 */
+       uint pmc_crypto_op;             /* _CRYPTO_OP__0, offset F4 */
+       uint pmc_pllp_wb0_override;     /* _PLLP_WB0_OVERRIDE_0, offset F8 */
+
+       uint pmc_scratch24;             /* _SCRATCH24_0, offset FC */
+       uint pmc_scratch25;             /* _SCRATCH24_0, offset 100 */
+       uint pmc_scratch26;             /* _SCRATCH24_0, offset 104 */
+       uint pmc_scratch27;             /* _SCRATCH24_0, offset 108 */
+       uint pmc_scratch28;             /* _SCRATCH24_0, offset 10C */
+       uint pmc_scratch29;             /* _SCRATCH24_0, offset 110 */
+       uint pmc_scratch30;             /* _SCRATCH24_0, offset 114 */
+       uint pmc_scratch31;             /* _SCRATCH24_0, offset 118 */
+       uint pmc_scratch32;             /* _SCRATCH24_0, offset 11C */
+       uint pmc_scratch33;             /* _SCRATCH24_0, offset 120 */
+       uint pmc_scratch34;             /* _SCRATCH24_0, offset 124 */
+       uint pmc_scratch35;             /* _SCRATCH24_0, offset 128 */
+       uint pmc_scratch36;             /* _SCRATCH24_0, offset 12C */
+       uint pmc_scratch37;             /* _SCRATCH24_0, offset 130 */
+       uint pmc_scratch38;             /* _SCRATCH24_0, offset 134 */
+       uint pmc_scratch39;             /* _SCRATCH24_0, offset 138 */
+       uint pmc_scratch40;             /* _SCRATCH24_0, offset 13C */
+       uint pmc_scratch41;             /* _SCRATCH24_0, offset 140 */
+       uint pmc_scratch42;             /* _SCRATCH24_0, offset 144 */
+
+       uint pmc_bo_mirror0;            /* _BOUNDOUT_MIRROR0_0, offset 148 */
+       uint pmc_bo_mirror1;            /* _BOUNDOUT_MIRROR1_0, offset 14C */
+       uint pmc_bo_mirror2;            /* _BOUNDOUT_MIRROR2_0, offset 150 */
+       uint pmc_sys_33v_en;            /* _SYS_33V_EN_0, offset 154 */
+       uint pmc_bo_mirror_access;      /* _BOUNDOUT_MIRROR_ACCESS_0, off158 */
+       uint pmc_gate;                  /* _GATE_0, offset 15C */
+};
+
+#define CPU_PWRED      1
+#define CPU_CLMP       1
+
+#define PARTID_CP      0xFFFFFFF8
+#define START_CP       (1 << 8)
+
+#define CPUPWRREQ_OE   (1 << 16)
+
+#endif /* PMC_H */
diff --git a/arch/arm/include/asm/arch-tegra20/pmu.h b/arch/arm/include/asm/arch-tegra20/pmu.h
new file mode 100644 (file)
index 0000000..390815f
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *  (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 _ARCH_PMU_H_
+#define _ARCH_PMU_H_
+
+/* Set core and CPU voltages to nominal levels */
+int pmu_set_nominal(void);
+
+#endif /* _ARCH_PMU_H_ */
diff --git a/arch/arm/include/asm/arch-tegra20/scu.h b/arch/arm/include/asm/arch-tegra20/scu.h
new file mode 100644 (file)
index 0000000..787ded0
--- /dev/null
@@ -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 _SCU_H_
+#define _SCU_H_
+
+/* ARM Snoop Control Unit (SCU) registers */
+struct scu_ctlr {
+       uint scu_ctrl;          /* SCU Control Register, offset 00 */
+       uint scu_cfg;           /* SCU Config Register, offset 04 */
+       uint scu_cpu_pwr_stat;  /* SCU CPU Power Status Register, offset 08 */
+       uint scu_inv_all;       /* SCU Invalidate All Register, offset 0C */
+       uint scu_reserved0[12]; /* reserved, offset 10-3C */
+       uint scu_filt_start;    /* SCU Filtering Start Address Reg, offset 40 */
+       uint scu_filt_end;      /* SCU Filtering End Address Reg, offset 44 */
+       uint scu_reserved1[2];  /* reserved, offset 48-4C */
+       uint scu_acc_ctl;       /* SCU Access Control Register, offset 50 */
+       uint scu_ns_acc_ctl;    /* SCU Non-secure Access Cntrl Reg, offset 54 */
+};
+
+#define SCU_CTRL_ENABLE                (1 << 0)
+
+#endif /* SCU_H */
diff --git a/arch/arm/include/asm/arch-tegra20/sdram_param.h b/arch/arm/include/asm/arch-tegra20/sdram_param.h
new file mode 100644 (file)
index 0000000..6c427d0
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ *  (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 _SDRAM_PARAM_H_
+#define _SDRAM_PARAM_H_
+
+/*
+ * Defines the number of 32-bit words provided in each set of SDRAM parameters
+ * for arbitration configuration data.
+ */
+#define BCT_SDRAM_ARB_CONFIG_WORDS 27
+
+enum memory_type {
+       MEMORY_TYPE_NONE = 0,
+       MEMORY_TYPE_DDR,
+       MEMORY_TYPE_LPDDR,
+       MEMORY_TYPE_DDR2,
+       MEMORY_TYPE_LPDDR2,
+       MEMORY_TYPE_NUM,
+       MEMORY_TYPE_FORCE32 = 0x7FFFFFFF
+};
+
+/* Defines the SDRAM parameter structure */
+struct sdram_params {
+       enum memory_type memory_type;
+       u32 pllm_charge_pump_setup_control;
+       u32 pllm_loop_filter_setup_control;
+       u32 pllm_input_divider;
+       u32 pllm_feedback_divider;
+       u32 pllm_post_divider;
+       u32 pllm_stable_time;
+       u32 emc_clock_divider;
+       u32 emc_auto_cal_interval;
+       u32 emc_auto_cal_config;
+       u32 emc_auto_cal_wait;
+       u32 emc_pin_program_wait;
+       u32 emc_rc;
+       u32 emc_rfc;
+       u32 emc_ras;
+       u32 emc_rp;
+       u32 emc_r2w;
+       u32 emc_w2r;
+       u32 emc_r2p;
+       u32 emc_w2p;
+       u32 emc_rd_rcd;
+       u32 emc_wr_rcd;
+       u32 emc_rrd;
+       u32 emc_rext;
+       u32 emc_wdv;
+       u32 emc_quse;
+       u32 emc_qrst;
+       u32 emc_qsafe;
+       u32 emc_rdv;
+       u32 emc_refresh;
+       u32 emc_burst_refresh_num;
+       u32 emc_pdex2wr;
+       u32 emc_pdex2rd;
+       u32 emc_pchg2pden;
+       u32 emc_act2pden;
+       u32 emc_ar2pden;
+       u32 emc_rw2pden;
+       u32 emc_txsr;
+       u32 emc_tcke;
+       u32 emc_tfaw;
+       u32 emc_trpab;
+       u32 emc_tclkstable;
+       u32 emc_tclkstop;
+       u32 emc_trefbw;
+       u32 emc_quseextra;
+       u32 emc_fbioc_fg1;
+       u32 emc_fbio_dqsib_dly;
+       u32 emc_fbio_dqsib_dly_msb;
+       u32 emc_fbio_quse_dly;
+       u32 emc_fbio_quse_dly_msb;
+       u32 emc_fbio_cfg5;
+       u32 emc_fbio_cfg6;
+       u32 emc_fbio_spare;
+       u32 emc_mrs;
+       u32 emc_emrs;
+       u32 emc_mrw1;
+       u32 emc_mrw2;
+       u32 emc_mrw3;
+       u32 emc_mrw_reset_command;
+       u32 emc_mrw_reset_init_wait;
+       u32 emc_adr_cfg;
+       u32 emc_adr_cfg1;
+       u32 emc_emem_cfg;
+       u32 emc_low_latency_config;
+       u32 emc_cfg;
+       u32 emc_cfg2;
+       u32 emc_dbg;
+       u32 ahb_arbitration_xbar_ctrl;
+       u32 emc_cfg_dig_dll;
+       u32 emc_dll_xform_dqs;
+       u32 emc_dll_xform_quse;
+       u32 warm_boot_wait;
+       u32 emc_ctt_term_ctrl;
+       u32 emc_odt_write;
+       u32 emc_odt_read;
+       u32 emc_zcal_ref_cnt;
+       u32 emc_zcal_wait_cnt;
+       u32 emc_zcal_mrw_cmd;
+       u32 emc_mrs_reset_dll;
+       u32 emc_mrw_zq_init_dev0;
+       u32 emc_mrw_zq_init_dev1;
+       u32 emc_mrw_zq_init_wait;
+       u32 emc_mrs_reset_dll_wait;
+       u32 emc_emrs_emr2;
+       u32 emc_emrs_emr3;
+       u32 emc_emrs_ddr2_dll_enable;
+       u32 emc_mrs_ddr2_dll_reset;
+       u32 emc_emrs_ddr2_ocd_calib;
+       u32 emc_edr2_wait;
+       u32 emc_cfg_clktrim0;
+       u32 emc_cfg_clktrim1;
+       u32 emc_cfg_clktrim2;
+       u32 pmc_ddr_pwr;
+       u32 apb_misc_gp_xm2cfga_padctrl;
+       u32 apb_misc_gp_xm2cfgc_padctrl;
+       u32 apb_misc_gp_xm2cfgc_padctrl2;
+       u32 apb_misc_gp_xm2cfgd_padctrl;
+       u32 apb_misc_gp_xm2cfgd_padctrl2;
+       u32 apb_misc_gp_xm2clkcfg_padctrl;
+       u32 apb_misc_gp_xm2comp_padctrl;
+       u32 apb_misc_gp_xm2vttgen_padctrl;
+       u32 arbitration_config[BCT_SDRAM_ARB_CONFIG_WORDS];
+};
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/sys_proto.h b/arch/arm/include/asm/arch-tegra20/sys_proto.h
new file mode 100644 (file)
index 0000000..643d542
--- /dev/null
@@ -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
+ */
+
+#ifndef _SYS_PROTO_H_
+#define _SYS_PROTO_H_
+
+struct tegra20_sysinfo {
+       char *board_string;
+};
+
+void invalidate_dcache(void);
+
+extern const struct tegra20_sysinfo sysinfo;
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/tegra20.h b/arch/arm/include/asm/arch-tegra20/tegra20.h
new file mode 100644 (file)
index 0000000..6750754
--- /dev/null
@@ -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
+ */
+
+#ifndef _TEGRA20_H_
+#define _TEGRA20_H_
+
+#define NV_PA_SDRAM_BASE       0x00000000
+#define NV_PA_ARM_PERIPHBASE   0x50040000
+#define NV_PA_PG_UP_BASE       0x60000000
+#define NV_PA_TMRUS_BASE       0x60005010
+#define NV_PA_CLK_RST_BASE     0x60006000
+#define NV_PA_FLOW_BASE                0x60007000
+#define NV_PA_GPIO_BASE                0x6000D000
+#define NV_PA_EVP_BASE         0x6000F000
+#define NV_PA_APB_MISC_BASE    0x70000000
+#define TEGRA20_APB_MISC_GP_BASE (NV_PA_APB_MISC_BASE + 0x0800)
+#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 TEGRA20_SPI_BASE       (NV_PA_APB_MISC_BASE + 0xC380)
+#define TEGRA20_PMC_BASE       (NV_PA_APB_MISC_BASE + 0xE400)
+#define TEGRA20_FUSE_BASE      (NV_PA_APB_MISC_BASE + 0xF800)
+#define NV_PA_CSITE_BASE       0x70040000
+#define TEGRA_USB1_BASE                0xC5000000
+#define TEGRA_USB3_BASE                0xC5008000
+#define TEGRA_USB_ADDR_MASK    0xFFFFC000
+
+#define TEGRA20_SDRC_CS0       NV_PA_SDRAM_BASE
+#define LOW_LEVEL_SRAM_STACK   0x4000FFFC
+#define EARLY_AVP_STACK                (NV_PA_SDRAM_BASE + 0x20000)
+#define EARLY_CPU_STACK                (EARLY_AVP_STACK - 4096)
+#define PG_UP_TAG_AVP          0xAAAAAAAA
+
+#ifndef __ASSEMBLY__
+struct timerus {
+       unsigned int cntr_1us;
+};
+
+/* Address at which WB code runs, it must not overlap Bootrom's IRAM usage */
+#define AP20_WB_RUN_ADDRESS    0x40020000
+
+#define NVBOOTINFOTABLE_BCTSIZE        0x38    /* BCT size in BIT in IRAM */
+#define NVBOOTINFOTABLE_BCTPTR 0x3C    /* BCT pointer in BIT in IRAM */
+#define BCT_ODMDATA_OFFSET     4068    /* 12 bytes from end of BCT */
+
+/* These are the available SKUs (product types) for Tegra */
+enum {
+       SKU_ID_T20              = 0x8,
+       SKU_ID_T25SE            = 0x14,
+       SKU_ID_AP25             = 0x17,
+       SKU_ID_T25              = 0x18,
+       SKU_ID_AP25E            = 0x1b,
+       SKU_ID_T25E             = 0x1c,
+};
+
+/* These are the SOC categories that affect clocking */
+enum {
+       TEGRA_SOC_T20,
+       TEGRA_SOC_T25,
+
+       TEGRA_SOC_COUNT,
+       TEGRA_SOC_UNKNOWN       = -1,
+};
+
+#else  /* __ASSEMBLY__ */
+#define PRM_RSTCTRL            TEGRA20_PMC_BASE
+#endif
+
+#endif /* TEGRA20_H */
diff --git a/arch/arm/include/asm/arch-tegra20/tegra_i2c.h b/arch/arm/include/asm/arch-tegra20/tegra_i2c.h
new file mode 100644 (file)
index 0000000..6abfe4e
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * NVIDIA Tegra20 I2C controller
+ *
+ * Copyright 2010-2011 NVIDIA Corporation
+ *
+ * This software may be used and distributed according to the
+ * terms of the GNU Public License, Version 2, incorporated
+ * herein by reference.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ *
+ * 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 _TEGRA_I2C_H_
+#define _TEGRA_I2C_H_
+
+#include <asm/types.h>
+
+enum {
+       I2C_TIMEOUT_USEC = 10000,       /* Wait time for completion */
+       I2C_FIFO_DEPTH = 8,             /* I2C fifo depth */
+};
+
+enum i2c_transaction_flags {
+       I2C_IS_WRITE = 0x1,             /* for I2C write operation */
+       I2C_IS_10_BIT_ADDRESS = 0x2,    /* for 10-bit I2C slave address */
+       I2C_USE_REPEATED_START = 0x4,   /* for repeat start */
+       I2C_NO_ACK = 0x8,               /* for slave that won't generate ACK */
+       I2C_SOFTWARE_CONTROLLER = 0x10, /* for I2C transfer using GPIO */
+       I2C_NO_STOP = 0x20,
+};
+
+/* Contians the I2C transaction details */
+struct i2c_trans_info {
+       /* flags to indicate the transaction details */
+       enum i2c_transaction_flags flags;
+       u32 address;    /* I2C slave device address */
+       u32 num_bytes;  /* number of bytes to be transferred */
+       /*
+        * Send/receive buffer. For the I2C send operation this buffer should
+        * be filled with the data to be sent to the slave device. For the I2C
+        * receive operation this buffer is filled with the data received from
+        * the slave device.
+        */
+       u8 *buf;
+       int is_10bit_address;
+};
+
+struct i2c_control {
+       u32 tx_fifo;
+       u32 rx_fifo;
+       u32 packet_status;
+       u32 fifo_control;
+       u32 fifo_status;
+       u32 int_mask;
+       u32 int_status;
+};
+
+struct dvc_ctlr {
+       u32 ctrl1;                      /* 00: DVC_CTRL_REG1 */
+       u32 ctrl2;                      /* 04: DVC_CTRL_REG2 */
+       u32 ctrl3;                      /* 08: DVC_CTRL_REG3 */
+       u32 status;                     /* 0C: DVC_STATUS_REG */
+       u32 ctrl;                       /* 10: DVC_I2C_CTRL_REG */
+       u32 addr_data;                  /* 14: DVC_I2C_ADDR_DATA_REG */
+       u32 reserved_0[2];              /* 18: */
+       u32 req;                        /* 20: DVC_REQ_REGISTER */
+       u32 addr_data3;                 /* 24: DVC_I2C_ADDR_DATA_REG_3 */
+       u32 reserved_1[6];              /* 28: */
+       u32 cnfg;                       /* 40: DVC_I2C_CNFG */
+       u32 cmd_addr0;                  /* 44: DVC_I2C_CMD_ADDR0 */
+       u32 cmd_addr1;                  /* 48: DVC_I2C_CMD_ADDR1 */
+       u32 cmd_data1;                  /* 4C: DVC_I2C_CMD_DATA1 */
+       u32 cmd_data2;                  /* 50: DVC_I2C_CMD_DATA2 */
+       u32 reserved_2[2];              /* 54: */
+       u32 i2c_status;                 /* 5C: DVC_I2C_STATUS */
+       struct i2c_control control;     /* 60 ~ 78 */
+};
+
+struct i2c_ctlr {
+       u32 cnfg;                       /* 00: I2C_I2C_CNFG */
+       u32 cmd_addr0;                  /* 04: I2C_I2C_CMD_ADDR0 */
+       u32 cmd_addr1;                  /* 08: I2C_I2C_CMD_DATA1 */
+       u32 cmd_data1;                  /* 0C: I2C_I2C_CMD_DATA2 */
+       u32 cmd_data2;                  /* 10: DVC_I2C_CMD_DATA2 */
+       u32 reserved_0[2];              /* 14: */
+       u32 status;                     /* 1C: I2C_I2C_STATUS */
+       u32 sl_cnfg;                    /* 20: I2C_I2C_SL_CNFG */
+       u32 sl_rcvd;                    /* 24: I2C_I2C_SL_RCVD */
+       u32 sl_status;                  /* 28: I2C_I2C_SL_STATUS */
+       u32 sl_addr1;                   /* 2C: I2C_I2C_SL_ADDR1 */
+       u32 sl_addr2;                   /* 30: I2C_I2C_SL_ADDR2 */
+       u32 reserved_1[2];              /* 34: */
+       u32 sl_delay_count;             /* 3C: I2C_I2C_SL_DELAY_COUNT */
+       u32 reserved_2[4];              /* 40: */
+       struct i2c_control control;     /* 50 ~ 68 */
+};
+
+/* bit fields definitions for IO Packet Header 1 format */
+#define PKT_HDR1_PROTOCOL_SHIFT                4
+#define PKT_HDR1_PROTOCOL_MASK         (0xf << PKT_HDR1_PROTOCOL_SHIFT)
+#define PKT_HDR1_CTLR_ID_SHIFT         12
+#define PKT_HDR1_CTLR_ID_MASK          (0xf << PKT_HDR1_CTLR_ID_SHIFT)
+#define PKT_HDR1_PKT_ID_SHIFT          16
+#define PKT_HDR1_PKT_ID_MASK           (0xff << PKT_HDR1_PKT_ID_SHIFT)
+#define PROTOCOL_TYPE_I2C              1
+
+/* bit fields definitions for IO Packet Header 2 format */
+#define PKT_HDR2_PAYLOAD_SIZE_SHIFT    0
+#define PKT_HDR2_PAYLOAD_SIZE_MASK     (0xfff << PKT_HDR2_PAYLOAD_SIZE_SHIFT)
+
+/* bit fields definitions for IO Packet Header 3 format */
+#define PKT_HDR3_READ_MODE_SHIFT       19
+#define PKT_HDR3_READ_MODE_MASK                (1 << PKT_HDR3_READ_MODE_SHIFT)
+#define PKT_HDR3_SLAVE_ADDR_SHIFT      0
+#define PKT_HDR3_SLAVE_ADDR_MASK       (0x3ff << PKT_HDR3_SLAVE_ADDR_SHIFT)
+
+#define DVC_CTRL_REG3_I2C_HW_SW_PROG_SHIFT     26
+#define DVC_CTRL_REG3_I2C_HW_SW_PROG_MASK      \
+                               (1 << DVC_CTRL_REG3_I2C_HW_SW_PROG_SHIFT)
+
+/* I2C_CNFG */
+#define I2C_CNFG_NEW_MASTER_FSM_SHIFT  11
+#define I2C_CNFG_NEW_MASTER_FSM_MASK   (1 << I2C_CNFG_NEW_MASTER_FSM_SHIFT)
+#define I2C_CNFG_PACKET_MODE_SHIFT     10
+#define I2C_CNFG_PACKET_MODE_MASK      (1 << I2C_CNFG_PACKET_MODE_SHIFT)
+
+/* I2C_SL_CNFG */
+#define I2C_SL_CNFG_NEWSL_SHIFT                2
+#define I2C_SL_CNFG_NEWSL_MASK         (1 << I2C_SL_CNFG_NEWSL_SHIFT)
+
+/* I2C_FIFO_STATUS */
+#define TX_FIFO_FULL_CNT_SHIFT         0
+#define TX_FIFO_FULL_CNT_MASK          (0xf << TX_FIFO_FULL_CNT_SHIFT)
+#define TX_FIFO_EMPTY_CNT_SHIFT                4
+#define TX_FIFO_EMPTY_CNT_MASK         (0xf << TX_FIFO_EMPTY_CNT_SHIFT)
+
+/* I2C_INTERRUPT_STATUS */
+#define I2C_INT_XFER_COMPLETE_SHIFT    7
+#define I2C_INT_XFER_COMPLETE_MASK     (1 << I2C_INT_XFER_COMPLETE_SHIFT)
+#define I2C_INT_NO_ACK_SHIFT           3
+#define I2C_INT_NO_ACK_MASK            (1 << I2C_INT_NO_ACK_SHIFT)
+#define I2C_INT_ARBITRATION_LOST_SHIFT 2
+#define I2C_INT_ARBITRATION_LOST_MASK  (1 << I2C_INT_ARBITRATION_LOST_SHIFT)
+
+/**
+ * Returns the bus number of the DVC controller
+ *
+ * @return number of bus, or -1 if there is no DVC active
+ */
+int tegra_i2c_get_dvc_bus_num(void);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/tegra_spi.h b/arch/arm/include/asm/arch-tegra20/tegra_spi.h
new file mode 100644 (file)
index 0000000..8978bea
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * NVIDIA Tegra20 SPI-FLASH controller
+ *
+ * Copyright 2010-2012 NVIDIA Corporation
+ *
+ * This software may be used and distributed according to the
+ * terms of the GNU Public License, Version 2, incorporated
+ * herein by reference.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ *
+ * 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 _TEGRA_SPI_H_
+#define _TEGRA_SPI_H_
+
+#include <asm/types.h>
+
+struct spi_tegra {
+       u32 command;    /* SPI_COMMAND_0 register  */
+       u32 status;     /* SPI_STATUS_0 register */
+       u32 rx_cmp;     /* SPI_RX_CMP_0 register  */
+       u32 dma_ctl;    /* SPI_DMA_CTL_0 register */
+       u32 tx_fifo;    /* SPI_TX_FIFO_0 register */
+       u32 rsvd[3];    /* offsets 0x14 to 0x1F reserved */
+       u32 rx_fifo;    /* SPI_RX_FIFO_0 register */
+};
+
+#define SPI_CMD_GO                     (1 << 30)
+#define SPI_CMD_ACTIVE_SCLK_SHIFT      26
+#define SPI_CMD_ACTIVE_SCLK_MASK       (3 << SPI_CMD_ACTIVE_SCLK_SHIFT)
+#define SPI_CMD_CK_SDA                 (1 << 21)
+#define SPI_CMD_ACTIVE_SDA_SHIFT       18
+#define SPI_CMD_ACTIVE_SDA_MASK                (3 << SPI_CMD_ACTIVE_SDA_SHIFT)
+#define SPI_CMD_CS_POL                 (1 << 16)
+#define SPI_CMD_TXEN                   (1 << 15)
+#define SPI_CMD_RXEN                   (1 << 14)
+#define SPI_CMD_CS_VAL                 (1 << 13)
+#define SPI_CMD_CS_SOFT                        (1 << 12)
+#define SPI_CMD_CS_DELAY               (1 << 9)
+#define SPI_CMD_CS3_EN                 (1 << 8)
+#define SPI_CMD_CS2_EN                 (1 << 7)
+#define SPI_CMD_CS1_EN                 (1 << 6)
+#define SPI_CMD_CS0_EN                 (1 << 5)
+#define SPI_CMD_BIT_LENGTH             (1 << 4)
+#define SPI_CMD_BIT_LENGTH_MASK                0x0000001F
+
+#define SPI_STAT_BSY                   (1 << 31)
+#define SPI_STAT_RDY                   (1 << 30)
+#define SPI_STAT_RXF_FLUSH             (1 << 29)
+#define SPI_STAT_TXF_FLUSH             (1 << 28)
+#define SPI_STAT_RXF_UNR               (1 << 27)
+#define SPI_STAT_TXF_OVF               (1 << 26)
+#define SPI_STAT_RXF_EMPTY             (1 << 25)
+#define SPI_STAT_RXF_FULL              (1 << 24)
+#define SPI_STAT_TXF_EMPTY             (1 << 23)
+#define SPI_STAT_TXF_FULL              (1 << 22)
+#define SPI_STAT_SEL_TXRX_N            (1 << 16)
+#define SPI_STAT_CUR_BLKCNT            (1 << 15)
+
+#define SPI_TIMEOUT            1000
+#define TEGRA20_SPI_MAX_FREQ   52000000
+
+#endif /* _TEGRA_SPI_H_ */
diff --git a/arch/arm/include/asm/arch-tegra20/timer.h b/arch/arm/include/asm/arch-tegra20/timer.h
new file mode 100644 (file)
index 0000000..43f7ab4
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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
+ */
+
+/* Tegra20 timer functions */
+
+#ifndef _TEGRA20_TIMER_H
+#define _TEGRA20_TIMER_H
+
+/* returns the current monotonic timer value in microseconds */
+unsigned long timer_get_us(void);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/uart-spi-switch.h b/arch/arm/include/asm/arch-tegra20/uart-spi-switch.h
new file mode 100644 (file)
index 0000000..82ac180
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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_SPI_SWITCH_H
+#define _UART_SPI_SWITCH_H
+
+#if defined(CONFIG_SPI_UART_SWITCH)
+/*
+ * Signal that we are about to use the UART. This unfortunate hack is
+ * required by Seaboard, which cannot use its console and SPI at the same
+ * time! If the board file provides this, the board config will declare it.
+ * Let this be a lesson for others.
+ */
+void pinmux_select_uart(void);
+
+/*
+ * Signal that we are about the use the SPI bus.
+ */
+void pinmux_select_spi(void);
+
+#else /* not CONFIG_SPI_UART_SWITCH */
+
+static inline void pinmux_select_uart(void) {}
+static inline void pinmux_select_spi(void) {}
+
+#endif
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra20/uart.h b/arch/arm/include/asm/arch-tegra20/uart.h
new file mode 100644 (file)
index 0000000..aea29a7
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ *  (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 */
+struct uart_ctlr {
+       uint uart_thr_dlab_0;           /* UART_THR_DLAB_0_0, offset 00 */
+       uint uart_ier_dlab_0;           /* UART_IER_DLAB_0_0, offset 04 */
+       uint uart_iir_fcr;              /* UART_IIR_FCR_0, offset 08 */
+       uint uart_lcr;                  /* UART_LCR_0, offset 0C */
+       uint uart_mcr;                  /* UART_MCR_0, offset 10 */
+       uint uart_lsr;                  /* UART_LSR_0, offset 14 */
+       uint uart_msr;                  /* UART_MSR_0, offset 18 */
+       uint uart_spr;                  /* UART_SPR_0, offset 1C */
+       uint uart_irda_csr;             /* UART_IRDA_CSR_0, offset 20 */
+       uint uart_reserved[6];          /* Reserved, unused, offset 24-38*/
+       uint uart_asr;                  /* UART_ASR_0, offset 3C */
+};
+
+#define NVRM_PLLP_FIXED_FREQ_KHZ       216000
+#define NV_DEFAULT_DEBUG_BAUD          115200
+
+#define UART_FCR_TRIGGER_3     0x30    /* Mask for trigger set at 3 */
+
+#endif /* UART_H */
diff --git a/arch/arm/include/asm/arch-tegra20/usb.h b/arch/arm/include/asm/arch-tegra20/usb.h
new file mode 100644 (file)
index 0000000..638033b
--- /dev/null
@@ -0,0 +1,252 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * 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 _TEGRA_USB_H_
+#define _TEGRA_USB_H_
+
+
+/* USB Controller (USBx_CONTROLLER_) regs */
+struct usb_ctlr {
+       /* 0x000 */
+       uint id;
+       uint reserved0;
+       uint host;
+       uint device;
+
+       /* 0x010 */
+       uint txbuf;
+       uint rxbuf;
+       uint reserved1[2];
+
+       /* 0x020 */
+       uint reserved2[56];
+
+       /* 0x100 */
+       u16 cap_length;
+       u16 hci_version;
+       uint hcs_params;
+       uint hcc_params;
+       uint reserved3[5];
+
+       /* 0x120 */
+       uint dci_version;
+       uint dcc_params;
+       uint reserved4[6];
+
+       /* 0x140 */
+       uint usb_cmd;
+       uint usb_sts;
+       uint usb_intr;
+       uint frindex;
+
+       /* 0x150 */
+       uint reserved5;
+       uint periodic_list_base;
+       uint async_list_addr;
+       uint async_tt_sts;
+
+       /* 0x160 */
+       uint burst_size;
+       uint tx_fill_tuning;
+       uint reserved6;   /* is this port_sc1 on some controllers? */
+       uint icusb_ctrl;
+
+       /* 0x170 */
+       uint ulpi_viewport;
+       uint reserved7;
+       uint endpt_nak;
+       uint endpt_nak_enable;
+
+       /* 0x180 */
+       uint reserved;
+       uint port_sc1;
+       uint reserved8[6];
+
+       /* 0x1a0 */
+       uint reserved9;
+       uint otgsc;
+       uint usb_mode;
+       uint endpt_setup_stat;
+
+       /* 0x1b0 */
+       uint reserved10[20];
+
+       /* 0x200 */
+       uint reserved11[0x80];
+
+       /* 0x400 */
+       uint susp_ctrl;
+       uint phy_vbus_sensors;
+       uint phy_vbus_wakeup_id;
+       uint phy_alt_vbus_sys;
+
+       /* 0x410 */
+       uint usb1_legacy_ctrl;
+       uint reserved12[3];
+
+       /* 0x420 */
+       uint reserved13[56];
+
+       /* 0x500 */
+       uint reserved14[64 * 3];
+
+       /* 0x800 */
+       uint utmip_pll_cfg0;
+       uint utmip_pll_cfg1;
+       uint utmip_xcvr_cfg0;
+       uint utmip_bias_cfg0;
+
+       /* 0x810 */
+       uint utmip_hsrx_cfg0;
+       uint utmip_hsrx_cfg1;
+       uint utmip_fslsrx_cfg0;
+       uint utmip_fslsrx_cfg1;
+
+       /* 0x820 */
+       uint utmip_tx_cfg0;
+       uint utmip_misc_cfg0;
+       uint utmip_misc_cfg1;
+       uint utmip_debounce_cfg0;
+
+       /* 0x830 */
+       uint utmip_bat_chrg_cfg0;
+       uint utmip_spare_cfg0;
+       uint utmip_xcvr_cfg1;
+       uint utmip_bias_cfg1;
+};
+
+
+/* USB1_LEGACY_CTRL */
+#define USB1_NO_LEGACY_MODE            1
+
+#define VBUS_SENSE_CTL_SHIFT                   1
+#define VBUS_SENSE_CTL_MASK                    (3 << VBUS_SENSE_CTL_SHIFT)
+#define VBUS_SENSE_CTL_VBUS_WAKEUP             0
+#define VBUS_SENSE_CTL_AB_SESS_VLD_OR_VBUS_WAKEUP      1
+#define VBUS_SENSE_CTL_AB_SESS_VLD             2
+#define VBUS_SENSE_CTL_A_SESS_VLD              3
+
+/* USBx_IF_USB_SUSP_CTRL_0 */
+#define UTMIP_PHY_ENB                          (1 << 12)
+#define UTMIP_RESET                            (1 << 11)
+#define USB_PHY_CLK_VALID                      (1 << 7)
+
+/* USBx_UTMIP_MISC_CFG1 */
+#define UTMIP_PLLU_STABLE_COUNT_SHIFT          6
+#define UTMIP_PLLU_STABLE_COUNT_MASK           \
+                               (0xfff << UTMIP_PLLU_STABLE_COUNT_SHIFT)
+#define UTMIP_PLL_ACTIVE_DLY_COUNT_SHIFT       18
+#define UTMIP_PLL_ACTIVE_DLY_COUNT_MASK                \
+                               (0x1f << UTMIP_PLL_ACTIVE_DLY_COUNT_SHIFT)
+#define UTMIP_PHY_XTAL_CLOCKEN                 (1 << 30)
+
+/* USBx_UTMIP_PLL_CFG1_0 */
+#define UTMIP_PLLU_ENABLE_DLY_COUNT_SHIFT      27
+#define UTMIP_PLLU_ENABLE_DLY_COUNT_MASK       \
+                               (0xf << UTMIP_PLLU_ENABLE_DLY_COUNT_SHIFT)
+#define UTMIP_XTAL_FREQ_COUNT_SHIFT            0
+#define UTMIP_XTAL_FREQ_COUNT_MASK             0xfff
+
+/* USBx_UTMIP_BIAS_CFG1_0 */
+#define UTMIP_BIAS_PDTRK_COUNT_SHIFT           3
+#define UTMIP_BIAS_PDTRK_COUNT_MASK            \
+                               (0x1f << UTMIP_BIAS_PDTRK_COUNT_SHIFT)
+
+#define UTMIP_DEBOUNCE_CFG0_SHIFT              0
+#define UTMIP_DEBOUNCE_CFG0_MASK               0xffff
+
+/* USBx_UTMIP_TX_CFG0_0 */
+#define UTMIP_FS_PREAMBLE_J                    (1 << 19)
+
+/* USBx_UTMIP_BAT_CHRG_CFG0_0 */
+#define UTMIP_PD_CHRG                          1
+
+/* USBx_UTMIP_XCVR_CFG0_0 */
+#define UTMIP_XCVR_LSBIAS_SE                   (1 << 21)
+
+/* USBx_UTMIP_SPARE_CFG0_0 */
+#define FUSE_SETUP_SEL                         (1 << 3)
+
+/* USBx_UTMIP_HSRX_CFG0_0 */
+#define UTMIP_IDLE_WAIT_SHIFT                  15
+#define UTMIP_IDLE_WAIT_MASK                   (0x1f << UTMIP_IDLE_WAIT_SHIFT)
+#define UTMIP_ELASTIC_LIMIT_SHIFT              10
+#define UTMIP_ELASTIC_LIMIT_MASK               \
+                               (0x1f << UTMIP_ELASTIC_LIMIT_SHIFT)
+
+/* USBx_UTMIP_HSRX_CFG0_1 */
+#define UTMIP_HS_SYNC_START_DLY_SHIFT          1
+#define UTMIP_HS_SYNC_START_DLY_MASK           \
+                               (0xf << UTMIP_HS_SYNC_START_DLY_SHIFT)
+
+/* USBx_CONTROLLER_2_USB2D_ICUSB_CTRL_0 */
+#define IC_ENB1                                        (1 << 3)
+
+/* SB2_CONTROLLER_2_USB2D_PORTSC1_0 */
+#define PTS_SHIFT                              30
+#define PTS_MASK                               (3U << PTS_SHIFT)
+#define PTS_UTMI       0
+#define PTS_RESERVED   1
+#define PTS_ULP                2
+#define PTS_ICUSB_SER  3
+
+#define STS                                    (1 << 29)
+
+/* USBx_UTMIP_XCVR_CFG0_0 */
+#define UTMIP_FORCE_PD_POWERDOWN               (1 << 14)
+#define UTMIP_FORCE_PD2_POWERDOWN              (1 << 16)
+#define UTMIP_FORCE_PDZI_POWERDOWN             (1 << 18)
+
+/* USBx_UTMIP_XCVR_CFG1_0 */
+#define UTMIP_FORCE_PDDISC_POWERDOWN           (1 << 0)
+#define UTMIP_FORCE_PDCHRP_POWERDOWN           (1 << 2)
+#define UTMIP_FORCE_PDDR_POWERDOWN             (1 << 4)
+
+/* USB3_IF_USB_PHY_VBUS_SENSORS_0 */
+#define VBUS_VLD_STS                   (1 << 26)
+
+
+/* Change the USB host port into host mode */
+void usb_set_host_mode(void);
+
+/* Setup USB on the board */
+int board_usb_init(const void *blob);
+
+/**
+ * Start up the given port number (ports are numbered from 0 on each board).
+ * This returns values for the appropriate hccr and hcor addresses to use for
+ * USB EHCI operations.
+ *
+ * @param portnum      port number to start
+ * @param hccr         returns start address of EHCI HCCR registers
+ * @param hcor         returns start address of EHCI HCOR registers
+ * @return 0 if ok, -1 on error (generally invalid port number)
+ */
+int tegrausb_start_port(unsigned portnum, u32 *hccr, u32 *hcor);
+
+/**
+ * Stop the current port
+ *
+ * @return 0 if ok, -1 if no port was active
+ */
+int tegrausb_stop_port(void);
+
+#endif /* _TEGRA_USB_H_ */
diff --git a/arch/arm/include/asm/arch-tegra20/warmboot.h b/arch/arm/include/asm/arch-tegra20/warmboot.h
new file mode 100644 (file)
index 0000000..99ac2e7
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * (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 _WARM_BOOT_H_
+#define _WARM_BOOT_H_
+
+#define STRAP_OPT_A_RAM_CODE_SHIFT     4
+#define STRAP_OPT_A_RAM_CODE_MASK      (0xf << STRAP_OPT_A_RAM_CODE_SHIFT)
+
+/* Defines the supported operating modes */
+enum fuse_operating_mode {
+       MODE_PRODUCTION = 3,
+       MODE_UNDEFINED,
+};
+
+/* Defines the CMAC-AES-128 hash length in 32 bit words. (128 bits = 4 words) */
+enum {
+       HASH_LENGTH = 4
+};
+
+/* Defines the storage for a hash value (128 bits) */
+struct hash {
+       u32 hash[HASH_LENGTH];
+};
+
+/*
+ * Defines the code header information for the boot rom.
+ *
+ * The code immediately follows the code header.
+ *
+ * Note that the code header needs to be 16 bytes aligned to preserve
+ * the alignment of relevant data for hash and decryption computations without
+ * requiring extra copies to temporary memory areas.
+ */
+struct wb_header {
+       u32 length_insecure;    /* length of the code header */
+       u32 reserved[3];
+       struct hash hash;       /* hash of header+code, starts next field*/
+       struct hash random_aes_block;   /* a data block to aid security. */
+       u32 length_secure;      /* length of the code header */
+       u32 destination;        /* destination address to put the wb code */
+       u32 entry_point;        /* execution address of the wb code */
+       u32 code_length;        /* length of the code */
+};
+
+/*
+ * The warm boot code needs direct access to these registers since it runs in
+ * SRAM and cannot call other U-Boot code.
+ */
+union osc_ctrl_reg {
+       struct {
+               u32 xoe:1;
+               u32 xobp:1;
+               u32 reserved0:2;
+               u32 xofs:6;
+               u32 reserved1:2;
+               u32 xods:5;
+               u32 reserved2:3;
+               u32 oscfi_spare:8;
+               u32 pll_ref_div:2;
+               u32 osc_freq:2;
+       };
+       u32 word;
+};
+
+union pllx_base_reg {
+       struct {
+               u32 divm:5;
+               u32 reserved0:3;
+               u32 divn:10;
+               u32 reserved1:2;
+               u32 divp:3;
+               u32 reserved2:4;
+               u32 lock:1;
+               u32 reserved3:1;
+               u32 ref_dis:1;
+               u32 enable:1;
+               u32 bypass:1;
+       };
+       u32 word;
+};
+
+union pllx_misc_reg {
+       struct {
+               u32 vcocon:4;
+               u32 lfcon:4;
+               u32 cpcon:4;
+               u32 lock_sel:6;
+               u32 reserved0:1;
+               u32 lock_enable:1;
+               u32 reserved1:1;
+               u32 dccon:1;
+               u32 pts:2;
+               u32 reserved2:6;
+               u32 out1_div_byp:1;
+               u32 out1_inv_clk:1;
+       };
+       u32 word;
+};
+
+/*
+ * TODO: This register is not documented in the TRM yet. We could move this
+ * into the EMC and give it a proper interface, but not while it is
+ * undocumented.
+ */
+union scratch3_reg {
+       struct {
+               u32 pllx_base_divm:5;
+               u32 pllx_base_divn:10;
+               u32 pllx_base_divp:3;
+               u32 pllx_misc_lfcon:4;
+               u32 pllx_misc_cpcon:4;
+       };
+       u32 word;
+};
+
+
+/**
+ * Save warmboot memory settings for a later resume
+ *
+ * @return 0 if ok, -1 on error
+ */
+int warmboot_save_sdram_params(void);
+
+int warmboot_prepare_code(u32 seg_address, u32 seg_length);
+int sign_data_block(u8 *source, u32 length, u8 *signature);
+void wb_start(void);   /* Start of WB assembly code */
+void wb_end(void);     /* End of WB assembly code */
+
+#endif
index 2c14462eb6a41ecc4f469151ee8e5e38b3f5611d..a0a4d1d07ddc549c9e319bfb81a2d79751a456a3 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 #include <asm/arch/board.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/clk_rst.h>
 #include <asm/arch/clock.h>
@@ -78,7 +78,7 @@ int board_mmc_init(bd_t *bd)
        pin_mux_mmc();
 
        /* init dev 0, SD slot, with 4-bit bus */
-       tegra2_mmc_init(0, 4, GPIO_PI6, GPIO_PH2);
+       tegra20_mmc_init(0, 4, GPIO_PI6, GPIO_PH2);
 
        return 0;
 }
diff --git a/board/avionic-design/dts/tegra2-medcom.dts b/board/avionic-design/dts/tegra2-medcom.dts
deleted file mode 100644 (file)
index fc52f9c..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "Avionic Design Medcom-Wide";
-       compatible = "avionic-design,medcom", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006300 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/avionic-design/dts/tegra2-plutux.dts b/board/avionic-design/dts/tegra2-plutux.dts
deleted file mode 100644 (file)
index cef49ad..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "Avionic Design Plutux";
-       compatible = "avionic-design,plutux", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006300 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/avionic-design/dts/tegra2-tec.dts b/board/avionic-design/dts/tegra2-tec.dts
deleted file mode 100644 (file)
index 9faebd8..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "Avionic Design Tamonten Evaluation Carrier";
-       compatible = "avionic-design,tec", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006300 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/avionic-design/dts/tegra20-medcom.dts b/board/avionic-design/dts/tegra20-medcom.dts
new file mode 100644 (file)
index 0000000..fc52f9c
--- /dev/null
@@ -0,0 +1,58 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "Avionic Design Medcom-Wide";
+       compatible = "avionic-design,medcom", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006300 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
diff --git a/board/avionic-design/dts/tegra20-plutux.dts b/board/avionic-design/dts/tegra20-plutux.dts
new file mode 100644 (file)
index 0000000..cef49ad
--- /dev/null
@@ -0,0 +1,58 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "Avionic Design Plutux";
+       compatible = "avionic-design,plutux", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006300 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
diff --git a/board/avionic-design/dts/tegra20-tec.dts b/board/avionic-design/dts/tegra20-tec.dts
new file mode 100644 (file)
index 0000000..9faebd8
--- /dev/null
@@ -0,0 +1,58 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "Avionic Design Tamonten Evaluation Carrier";
+       compatible = "avionic-design,tec", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006300 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
diff --git a/board/compal/dts/tegra2-paz00.dts b/board/compal/dts/tegra2-paz00.dts
deleted file mode 100644 (file)
index 9e3e169..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-        model = "Toshiba AC100 / Dynabook AZ";
-        compatible = "compal,paz00", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006000 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/compal/dts/tegra20-paz00.dts b/board/compal/dts/tegra20-paz00.dts
new file mode 100644 (file)
index 0000000..9e3e169
--- /dev/null
@@ -0,0 +1,57 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+        model = "Toshiba AC100 / Dynabook AZ";
+        compatible = "compal,paz00", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006000 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
index ec678746d37c3e6eca89bd923a59fe42fa4444e1..cd684f29263439f52158928c52e02752aa3fa3d0 100644 (file)
@@ -16,7 +16,7 @@
 
 #include <common.h>
 #include <asm/io.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/mmc.h>
 #include <asm/gpio.h>
@@ -70,11 +70,11 @@ int board_mmc_init(bd_t *bd)
        debug("board_mmc_init: init eMMC\n");
        /* init dev 0, eMMC chip, with 4-bit bus */
        /* The board has an 8-bit bus, but 8-bit doesn't work yet */
-       tegra2_mmc_init(0, 4, -1, -1);
+       tegra20_mmc_init(0, 4, -1, -1);
 
        debug("board_mmc_init: init SD slot\n");
        /* init dev 3, SD slot, with 4-bit bus */
-       tegra2_mmc_init(3, 4, GPIO_PV1, GPIO_PV5);
+       tegra20_mmc_init(3, 4, GPIO_PV1, GPIO_PV5);
 
        return 0;
 }
diff --git a/board/compulab/dts/tegra2-trimslice.dts b/board/compulab/dts/tegra2-trimslice.dts
deleted file mode 100644 (file)
index db79e77..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "Compulab TrimSlice board";
-       compatible = "compulab,trimslice", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x40000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006000 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/compulab/dts/tegra20-trimslice.dts b/board/compulab/dts/tegra20-trimslice.dts
new file mode 100644 (file)
index 0000000..db79e77
--- /dev/null
@@ -0,0 +1,57 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "Compulab TrimSlice board";
+       compatible = "compulab,trimslice", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006000 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
index 1ac15f8da5b2908829506499d1bc88d39e307ef0..5dae15b962f53eb626797c98b2a50055c0994e54 100644 (file)
@@ -24,7 +24,7 @@
 #include <common.h>
 #include <i2c.h>
 #include <asm/io.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch/pinmux.h>
@@ -69,10 +69,10 @@ int board_mmc_init(bd_t *bd)
        pin_mux_mmc();
 
        /* init dev 0 (SDMMC4), (micro-SD slot) with 4-bit bus */
-       tegra2_mmc_init(0, 4, -1, GPIO_PP1);
+       tegra20_mmc_init(0, 4, -1, GPIO_PP1);
 
        /* init dev 3 (SDMMC1), (SD slot) with 4-bit bus */
-       tegra2_mmc_init(3, 4, -1, -1);
+       tegra20_mmc_init(3, 4, -1, -1);
 
        return 0;
 }
index e65fc9e8436c3d401e96a7162d497d406a00c618..d1a7f3a21cc6d050657b789e6f67d0c49bb94362 100644 (file)
@@ -25,7 +25,7 @@
 #include <ns16550.h>
 #include <linux/compiler.h>
 #include <asm/io.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/sys_proto.h>
 
 #include <asm/arch/board.h>
@@ -45,8 +45,8 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-const struct tegra2_sysinfo sysinfo = {
-       CONFIG_TEGRA2_BOARD_STRING
+const struct tegra20_sysinfo sysinfo = {
+       CONFIG_TEGRA20_BOARD_STRING
 };
 
 /*
@@ -76,8 +76,8 @@ void pin_mux_spi(void) __attribute__((weak, alias("__pin_mux_spi")));
  */
 static void power_det_init(void)
 {
-#if defined(CONFIG_TEGRA2)
-       struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
+#if defined(CONFIG_TEGRA20)
+       struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE;
 
        /* turn off power detects */
        writel(0, &pmc->pmc_pwr_det_latch);
@@ -130,7 +130,7 @@ int board_init(void)
        board_usb_init(gd->fdt_blob);
 #endif
 
-#ifdef CONFIG_TEGRA2_LP0
+#ifdef CONFIG_TEGRA20_LP0
        /* prepare the WB code to LP0 location */
        warmboot_prepare_code(TEGRA_LP0_ADDR, TEGRA_LP0_SIZE);
 #endif
index 8e4290ceed53bc75cb3ef11ea2aec3a3b15e3b64..739d4bd4420e6bdd8d2aa4e310761461ea20b393 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/arch/emc.h>
 #include <asm/arch/pmu.h>
 #include <asm/arch/sys_proto.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
index 307937a836485e9291f60b80f7de7e1ad754860f..6b2175879bac107db2adcfac26a232c21e8068a9 100644 (file)
@@ -24,7 +24,7 @@
 #include <asm/gpio.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/uart-spi-switch.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/tegra_spi.h>
 
 
diff --git a/board/nvidia/dts/tegra2-harmony.dts b/board/nvidia/dts/tegra2-harmony.dts
deleted file mode 100644 (file)
index 4f60a05..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "NVIDIA Tegra2 Harmony evaluation board";
-       compatible = "nvidia,harmony", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x40000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006300 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/nvidia/dts/tegra2-seaboard.dts b/board/nvidia/dts/tegra2-seaboard.dts
deleted file mode 100644 (file)
index 3352539..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0x1c000000 0x04000000;
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "NVIDIA Seaboard";
-       compatible = "nvidia,seaboard", "nvidia,tegra20";
-
-       chosen {
-               bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk1p3 rw rootwait";
-       };
-
-       aliases {
-               /* This defines the order of our USB ports */
-               usb0 = "/usb@c5008000";
-               usb1 = "/usb@c5000000";
-
-               i2c0 = "/i2c@7000d000";
-               i2c1 = "/i2c@7000c000";
-               i2c2 = "/i2c@7000c400";
-               i2c3 = "/i2c@7000c500";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = < 0x00000000 0x40000000 >;
-       };
-
-       /* This is not used in U-Boot, but is expected to be in kernel .dts */
-       i2c@7000d000 {
-               clock-frequency = <100000>;
-               pmic@34 {
-                       compatible = "ti,tps6586x";
-                       reg = <0x34>;
-
-                       clk_32k: clock {
-                               compatible = "fixed-clock";
-                               /*
-                                * leave out for now due to CPP:
-                                * #clock-cells = <0>;
-                                */
-                               clock-frequency = <32768>;
-                       };
-               };
-       };
-
-       clocks {
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006300 {
-               clock-frequency = < 216000000 >;
-       };
-
-       sdhci@c8000400 {
-               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
-               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
-               power-gpios = <&gpio 70 0>; /* gpio PI6 */
-       };
-
-       sdhci@c8000600 {
-               support-8bit;
-       };
-
-       usb@c5000000 {
-               nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */
-               dr_mode = "otg";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       i2c@7000c000 {
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               clock-frequency = <100000>;
-       };
-
-       emc@7000f400 {
-               emc-table@190000 {
-                       reg = < 190000 >;
-                       compatible = "nvidia,tegra20-emc-table";
-                       clock-frequency = < 190000 >;
-                       nvidia,emc-registers = < 0x0000000c 0x00000026
-                               0x00000009 0x00000003 0x00000004 0x00000004
-                               0x00000002 0x0000000c 0x00000003 0x00000003
-                               0x00000002 0x00000001 0x00000004 0x00000005
-                               0x00000004 0x00000009 0x0000000d 0x0000059f
-                               0x00000000 0x00000003 0x00000003 0x00000003
-                               0x00000003 0x00000001 0x0000000b 0x000000c8
-                               0x00000003 0x00000007 0x00000004 0x0000000f
-                               0x00000002 0x00000000 0x00000000 0x00000002
-                               0x00000000 0x00000000 0x00000083 0xa06204ae
-                               0x007dc010 0x00000000 0x00000000 0x00000000
-                               0x00000000 0x00000000 0x00000000 0x00000000 >;
-               };
-               emc-table@380000 {
-                       reg = < 380000 >;
-                       compatible = "nvidia,tegra20-emc-table";
-                       clock-frequency = < 380000 >;
-                       nvidia,emc-registers = < 0x00000017 0x0000004b
-                               0x00000012 0x00000006 0x00000004 0x00000005
-                               0x00000003 0x0000000c 0x00000006 0x00000006
-                               0x00000003 0x00000001 0x00000004 0x00000005
-                               0x00000004 0x00000009 0x0000000d 0x00000b5f
-                               0x00000000 0x00000003 0x00000003 0x00000006
-                               0x00000006 0x00000001 0x00000011 0x000000c8
-                               0x00000003 0x0000000e 0x00000007 0x0000000f
-                               0x00000002 0x00000000 0x00000000 0x00000002
-                               0x00000000 0x00000000 0x00000083 0xe044048b
-                               0x007d8010 0x00000000 0x00000000 0x00000000
-                               0x00000000 0x00000000 0x00000000 0x00000000 >;
-               };
-       };
-
-       kbc@7000e200 {
-               linux,keymap = <0x00020011 0x0003001f 0x0004001e 0x0005002c
-                       0x000701d0 0x0107007d 0x02060064 0x02070038 0x03000006
-                       0x03010005 0x03020013 0x03030012 0x03040021 0x03050020
-                       0x0306002d 0x04000008 0x04010007 0x04020014 0x04030023
-                       0x04040022 0x0405002f 0x0406002e 0x04070039 0x0500000a
-                       0x05010009 0x05020016 0x05030015 0x05040024 0x05050031
-                       0x05060030 0x0507002b 0x0600000c 0x0601000b 0x06020018
-                       0x06030017 0x06040026 0x06050025 0x06060033 0x06070032
-                       0x0701000d 0x0702001b 0x0703001c 0x0707008b 0x08040036
-                       0x0805002a 0x09050061 0x0907001d 0x0b00001a 0x0b010019
-                       0x0b020028 0x0b030027 0x0b040035 0x0b050034 0x0c000044
-                       0x0c010043 0x0c02000e 0x0c030004 0x0c040003 0x0c050067
-                       0x0c0600d2 0x0c070077 0x0d00006e 0x0d01006f 0x0d030068
-                       0x0d04006d 0x0d05006a 0x0d06006c 0x0d070069 0x0e000057
-                       0x0e010058 0x0e020042 0x0e030010 0x0e04003e 0x0e05003d
-                       0x0e060002 0x0e070041 0x0f000001 0x0f010029 0x0f02003f
-                       0x0f03000f 0x0f04003b 0x0f05003c 0x0f06003a 0x0f070040
-                       0x14000047 0x15000049 0x15010048 0x1502004b 0x1504004f
-                       0x16010062 0x1602004d 0x1603004c 0x16040051 0x16050050
-                       0x16070052 0x1b010037 0x1b03004a 0x1b04004e 0x1b050053
-                       0x1c050073 0x1d030066 0x1d04006b 0x1d0500e0 0x1d060072
-                       0x1d0700e1 0x1e000045 0x1e010046 0x1e020071
-                       0x1f04008a>;
-               linux,fn-keymap = <0x05040002>;
-       };
-};
diff --git a/board/nvidia/dts/tegra2-ventana.dts b/board/nvidia/dts/tegra2-ventana.dts
deleted file mode 100644 (file)
index 900e871..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "NVIDIA Tegra2 Ventana evaluation board";
-       compatible = "nvidia,ventana", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-       };
-
-       memory {
-               reg = <0x00000000 0x40000000>;
-       };
-
-       clocks {
-               clk_32k: clk_32k {
-                       clock-frequency = <32000>;
-               };
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006300 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/nvidia/dts/tegra2-whistler.dts b/board/nvidia/dts/tegra2-whistler.dts
deleted file mode 100644 (file)
index b22d407..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/dts-v1/;
-
-/include/ ARCH_CPU_DTS
-
-/ {
-       model = "NVIDIA Tegra2 Whistler evaluation board";
-       compatible = "nvidia,whistler", "nvidia,tegra20";
-
-       aliases {
-               i2c0 = "/i2c@7000d000";
-               usb0 = "/usb@c5008000";
-               usb1 = "/usb@c5000000";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = < 0x00000000 0x20000000 >;
-       };
-
-       clocks {
-               osc {
-                       clock-frequency = <12000000>;
-               };
-       };
-
-       clock@60006000 {
-               clocks = <&clk_32k &osc>;
-       };
-
-       serial@70006000 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               clock-frequency = <100000>;
-
-               pmic@3c {
-                       compatible = "maxim,max8907b";
-                       reg = <0x3c>;
-
-                       clk_32k: clock {
-                               compatible = "fixed-clock";
-                               /*
-                                * leave out for now due to CPP:
-                                * #clock-cells = <0>;
-                                */
-                               clock-frequency = <32768>;
-                       };
-               };
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/nvidia/dts/tegra20-harmony.dts b/board/nvidia/dts/tegra20-harmony.dts
new file mode 100644 (file)
index 0000000..c351954
--- /dev/null
@@ -0,0 +1,57 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "NVIDIA Tegra20 Harmony evaluation board";
+       compatible = "nvidia,harmony", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006300 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
diff --git a/board/nvidia/dts/tegra20-seaboard.dts b/board/nvidia/dts/tegra20-seaboard.dts
new file mode 100644 (file)
index 0000000..3352539
--- /dev/null
@@ -0,0 +1,156 @@
+/dts-v1/;
+
+/memreserve/ 0x1c000000 0x04000000;
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "NVIDIA Seaboard";
+       compatible = "nvidia,seaboard", "nvidia,tegra20";
+
+       chosen {
+               bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk1p3 rw rootwait";
+       };
+
+       aliases {
+               /* This defines the order of our USB ports */
+               usb0 = "/usb@c5008000";
+               usb1 = "/usb@c5000000";
+
+               i2c0 = "/i2c@7000d000";
+               i2c1 = "/i2c@7000c000";
+               i2c2 = "/i2c@7000c400";
+               i2c3 = "/i2c@7000c500";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = < 0x00000000 0x40000000 >;
+       };
+
+       /* This is not used in U-Boot, but is expected to be in kernel .dts */
+       i2c@7000d000 {
+               clock-frequency = <100000>;
+               pmic@34 {
+                       compatible = "ti,tps6586x";
+                       reg = <0x34>;
+
+                       clk_32k: clock {
+                               compatible = "fixed-clock";
+                               /*
+                                * leave out for now due to CPP:
+                                * #clock-cells = <0>;
+                                */
+                               clock-frequency = <32768>;
+                       };
+               };
+       };
+
+       clocks {
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006300 {
+               clock-frequency = < 216000000 >;
+       };
+
+       sdhci@c8000400 {
+               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
+               power-gpios = <&gpio 70 0>; /* gpio PI6 */
+       };
+
+       sdhci@c8000600 {
+               support-8bit;
+       };
+
+       usb@c5000000 {
+               nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */
+               dr_mode = "otg";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       i2c@7000c000 {
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               clock-frequency = <100000>;
+       };
+
+       emc@7000f400 {
+               emc-table@190000 {
+                       reg = < 190000 >;
+                       compatible = "nvidia,tegra20-emc-table";
+                       clock-frequency = < 190000 >;
+                       nvidia,emc-registers = < 0x0000000c 0x00000026
+                               0x00000009 0x00000003 0x00000004 0x00000004
+                               0x00000002 0x0000000c 0x00000003 0x00000003
+                               0x00000002 0x00000001 0x00000004 0x00000005
+                               0x00000004 0x00000009 0x0000000d 0x0000059f
+                               0x00000000 0x00000003 0x00000003 0x00000003
+                               0x00000003 0x00000001 0x0000000b 0x000000c8
+                               0x00000003 0x00000007 0x00000004 0x0000000f
+                               0x00000002 0x00000000 0x00000000 0x00000002
+                               0x00000000 0x00000000 0x00000083 0xa06204ae
+                               0x007dc010 0x00000000 0x00000000 0x00000000
+                               0x00000000 0x00000000 0x00000000 0x00000000 >;
+               };
+               emc-table@380000 {
+                       reg = < 380000 >;
+                       compatible = "nvidia,tegra20-emc-table";
+                       clock-frequency = < 380000 >;
+                       nvidia,emc-registers = < 0x00000017 0x0000004b
+                               0x00000012 0x00000006 0x00000004 0x00000005
+                               0x00000003 0x0000000c 0x00000006 0x00000006
+                               0x00000003 0x00000001 0x00000004 0x00000005
+                               0x00000004 0x00000009 0x0000000d 0x00000b5f
+                               0x00000000 0x00000003 0x00000003 0x00000006
+                               0x00000006 0x00000001 0x00000011 0x000000c8
+                               0x00000003 0x0000000e 0x00000007 0x0000000f
+                               0x00000002 0x00000000 0x00000000 0x00000002
+                               0x00000000 0x00000000 0x00000083 0xe044048b
+                               0x007d8010 0x00000000 0x00000000 0x00000000
+                               0x00000000 0x00000000 0x00000000 0x00000000 >;
+               };
+       };
+
+       kbc@7000e200 {
+               linux,keymap = <0x00020011 0x0003001f 0x0004001e 0x0005002c
+                       0x000701d0 0x0107007d 0x02060064 0x02070038 0x03000006
+                       0x03010005 0x03020013 0x03030012 0x03040021 0x03050020
+                       0x0306002d 0x04000008 0x04010007 0x04020014 0x04030023
+                       0x04040022 0x0405002f 0x0406002e 0x04070039 0x0500000a
+                       0x05010009 0x05020016 0x05030015 0x05040024 0x05050031
+                       0x05060030 0x0507002b 0x0600000c 0x0601000b 0x06020018
+                       0x06030017 0x06040026 0x06050025 0x06060033 0x06070032
+                       0x0701000d 0x0702001b 0x0703001c 0x0707008b 0x08040036
+                       0x0805002a 0x09050061 0x0907001d 0x0b00001a 0x0b010019
+                       0x0b020028 0x0b030027 0x0b040035 0x0b050034 0x0c000044
+                       0x0c010043 0x0c02000e 0x0c030004 0x0c040003 0x0c050067
+                       0x0c0600d2 0x0c070077 0x0d00006e 0x0d01006f 0x0d030068
+                       0x0d04006d 0x0d05006a 0x0d06006c 0x0d070069 0x0e000057
+                       0x0e010058 0x0e020042 0x0e030010 0x0e04003e 0x0e05003d
+                       0x0e060002 0x0e070041 0x0f000001 0x0f010029 0x0f02003f
+                       0x0f03000f 0x0f04003b 0x0f05003c 0x0f06003a 0x0f070040
+                       0x14000047 0x15000049 0x15010048 0x1502004b 0x1504004f
+                       0x16010062 0x1602004d 0x1603004c 0x16040051 0x16050050
+                       0x16070052 0x1b010037 0x1b03004a 0x1b04004e 0x1b050053
+                       0x1c050073 0x1d030066 0x1d04006b 0x1d0500e0 0x1d060072
+                       0x1d0700e1 0x1e000045 0x1e010046 0x1e020071
+                       0x1f04008a>;
+               linux,fn-keymap = <0x05040002>;
+       };
+};
diff --git a/board/nvidia/dts/tegra20-ventana.dts b/board/nvidia/dts/tegra20-ventana.dts
new file mode 100644 (file)
index 0000000..38b7b13
--- /dev/null
@@ -0,0 +1,57 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "NVIDIA Tegra20 Ventana evaluation board";
+       compatible = "nvidia,ventana", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+       };
+
+       memory {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       clocks {
+               clk_32k: clk_32k {
+                       clock-frequency = <32000>;
+               };
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006300 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
diff --git a/board/nvidia/dts/tegra20-whistler.dts b/board/nvidia/dts/tegra20-whistler.dts
new file mode 100644 (file)
index 0000000..38599bd
--- /dev/null
@@ -0,0 +1,67 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+       model = "NVIDIA Tegra20 Whistler evaluation board";
+       compatible = "nvidia,whistler", "nvidia,tegra20";
+
+       aliases {
+               i2c0 = "/i2c@7000d000";
+               usb0 = "/usb@c5008000";
+               usb1 = "/usb@c5000000";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = < 0x00000000 0x20000000 >;
+       };
+
+       clocks {
+               osc {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       clock@60006000 {
+               clocks = <&clk_32k &osc>;
+       };
+
+       serial@70006000 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               clock-frequency = <100000>;
+
+               pmic@3c {
+                       compatible = "maxim,max8907b";
+                       reg = <0x3c>;
+
+                       clk_32k: clock {
+                               compatible = "fixed-clock";
+                               /*
+                                * leave out for now due to CPP:
+                                * #clock-cells = <0>;
+                                */
+                               clock-frequency = <32768>;
+                       };
+               };
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
index f27ad37b701e2e60a7b03e562111fae17b79e82b..44977c78d1d301f63a5020c8eaff50bb592c0f4d 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <common.h>
 #include <asm/io.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch/pinmux.h>
@@ -73,11 +73,11 @@ int board_mmc_init(bd_t *bd)
        debug("board_mmc_init: init SD slot J26\n");
        /* init dev 0, SD slot J26, with 4-bit bus */
        /* The board has an 8-bit bus, but 8-bit doesn't work yet */
-       tegra2_mmc_init(0, 4, GPIO_PI6, GPIO_PH2);
+       tegra20_mmc_init(0, 4, GPIO_PI6, GPIO_PH2);
 
        debug("board_mmc_init: init SD slot J5\n");
        /* init dev 2, SD slot J5, with 4-bit bus */
-       tegra2_mmc_init(2, 4, GPIO_PT3, GPIO_PI5);
+       tegra20_mmc_init(2, 4, GPIO_PT3, GPIO_PI5);
 
        return 0;
 }
index 36039c4ed869808273c54cb994530cabcff1cd96..3298a6b3a8860a7847ced4a08979bd4b5659043e 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <common.h>
 #include <asm/io.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch/pinmux.h>
@@ -81,11 +81,11 @@ int board_mmc_init(bd_t *bd)
        debug("board_mmc_init: init eMMC\n");
        /* init dev 0, eMMC chip, with 4-bit bus */
        /* The board has an 8-bit bus, but 8-bit doesn't work yet */
-       tegra2_mmc_init(0, 4, -1, -1);
+       tegra20_mmc_init(0, 4, -1, -1);
 
        debug("board_mmc_init: init SD slot\n");
        /* init dev 1, SD slot, with 4-bit bus */
-       tegra2_mmc_init(1, 4, GPIO_PI6, GPIO_PI5);
+       tegra20_mmc_init(1, 4, GPIO_PI6, GPIO_PI5);
 
        return 0;
 }
index 3ec24df2e740405b2b178d466192ce6442656865..c0a114d6677e629431d166ee0763deaf32124dc0 100644 (file)
@@ -24,7 +24,7 @@
 #include <common.h>
 #include <i2c.h>
 #include <asm/io.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch/pinmux.h>
@@ -81,10 +81,10 @@ int board_mmc_init(bd_t *bd)
        pin_mux_mmc();
 
        /* init dev 0 (SDMMC4), (J29 "HSMMC") with 8-bit bus */
-       tegra2_mmc_init(0, 8, -1, -1);
+       tegra20_mmc_init(0, 8, -1, -1);
 
        /* init dev 1 (SDMMC3), (J40 "SDIO3") with 8-bit bus */
-       tegra2_mmc_init(1, 8, -1, -1);
+       tegra20_mmc_init(1, 8, -1, -1);
 
        return 0;
 }
index 2c0c5964aff1c34aa8f37d99297442e6d647c90e..64b0a30755bb8c6e07b4e2046d82c0451bc7c3a6 100644 (file)
@@ -265,10 +265,10 @@ s5pc210_universal            arm         armv7       universal_c210      samsung
 smdk5250                    arm         armv7       smdk5250            samsung        exynos
 smdkv310                    arm         armv7       smdkv310            samsung        exynos
 trats                        arm         armv7       trats               samsung        exynos
-harmony                      arm         armv7       harmony             nvidia         tegra2
-seaboard                     arm         armv7       seaboard            nvidia         tegra2
-ventana                      arm         armv7       ventana             nvidia         tegra2
-whistler                     arm         armv7       whistler            nvidia         tegra2
+harmony                      arm         armv7       harmony             nvidia         tegra20
+seaboard                     arm         armv7       seaboard            nvidia         tegra20
+ventana                      arm         armv7       ventana             nvidia         tegra20
+whistler                     arm         armv7       whistler            nvidia         tegra20
 u8500_href                   arm         armv7       u8500               st-ericsson    u8500
 snowball                     arm         armv7       snowball               st-ericsson    u8500
 actux1_4_16                  arm         ixp         actux1              -              -           actux1:FLASH2X2
@@ -295,11 +295,11 @@ xaeniax                      arm         pxa
 zipitz2                      arm         pxa
 colibri_pxa270               arm         pxa         -                   toradex
 jornada                      arm         sa1100
-plutux                       arm         armv7       plutux              avionic-design tegra2
-medcom                       arm         armv7       medcom              avionic-design tegra2
-tec                          arm         armv7       tec                 avionic-design tegra2
-paz00                        arm         armv7       paz00               compal         tegra2
-trimslice                    arm         armv7       trimslice           compulab       tegra2
+plutux                       arm         armv7       plutux              avionic-design tegra20
+medcom                       arm         armv7       medcom              avionic-design tegra20
+tec                          arm         armv7       tec                 avionic-design tegra20
+paz00                        arm         armv7       paz00               compal         tegra20
+trimslice                    arm         armv7       trimslice           compulab       tegra20
 atngw100                     avr32       at32ap      -                   atmel          at32ap700x
 atstk1002                    avr32       at32ap      atstk1000           atmel          at32ap700x
 atstk1003                    avr32       at32ap      atstk1000           atmel          at32ap700x
index 60ec6e3d7890ca57aadea478d851e52cd5c84ce2..8cfcf8283b3d03772dc5ce8298e4112bcf589310 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * NVIDIA Tegra2 GPIO handling.
+ * NVIDIA Tegra20 GPIO handling.
  *  (C) Copyright 2010-2012
  *  NVIDIA Corporation <www.nvidia.com>
  *
 #include <common.h>
 #include <asm/io.h>
 #include <asm/bitops.h>
-#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra20.h>
 #include <asm/gpio.h>
 
 enum {
-       TEGRA2_CMD_INFO,
-       TEGRA2_CMD_PORT,
-       TEGRA2_CMD_OUTPUT,
-       TEGRA2_CMD_INPUT,
+       TEGRA20_CMD_INFO,
+       TEGRA20_CMD_PORT,
+       TEGRA20_CMD_OUTPUT,
+       TEGRA20_CMD_INPUT,
 };
 
 static struct gpio_names {
index 5b6ea0e7599a28107413f045ade27475287f7dfb..b4eb49127eb1374b905f4011ffa87826b184a188 100644 (file)
@@ -262,7 +262,7 @@ exit:
        return error;
 }
 
-static int tegra2_i2c_write_data(u32 addr, u8 *data, u32 len)
+static int tegra20_i2c_write_data(u32 addr, u8 *data, u32 len)
 {
        int error;
        struct i2c_trans_info trans_info;
@@ -275,12 +275,12 @@ static int tegra2_i2c_write_data(u32 addr, u8 *data, u32 len)
 
        error = send_recv_packets(&i2c_controllers[i2c_bus_num], &trans_info);
        if (error)
-               debug("tegra2_i2c_write_data: Error (%d) !!!\n", error);
+               debug("tegra20_i2c_write_data: Error (%d) !!!\n", error);
 
        return error;
 }
 
-static int tegra2_i2c_read_data(u32 addr, u8 *data, u32 len)
+static int tegra20_i2c_read_data(u32 addr, u8 *data, u32 len)
 {
        int error;
        struct i2c_trans_info trans_info;
@@ -293,7 +293,7 @@ static int tegra2_i2c_read_data(u32 addr, u8 *data, u32 len)
 
        error = send_recv_packets(&i2c_controllers[i2c_bus_num], &trans_info);
        if (error)
-               debug("tegra2_i2c_read_data: Error (%d) !!!\n", error);
+               debug("tegra20_i2c_read_data: Error (%d) !!!\n", error);
 
        return error;
 }
@@ -438,7 +438,7 @@ int i2c_write_data(uchar chip, uchar *buffer, int len)
        debug("\n");
 
        /* Shift 7-bit address over for lower-level i2c functions */
-       rc = tegra2_i2c_write_data(chip << 1, buffer, len);
+       rc = tegra20_i2c_write_data(chip << 1, buffer, len);
        if (rc)
                debug("i2c_write_data(): rc=%d\n", rc);
 
@@ -452,7 +452,7 @@ int i2c_read_data(uchar chip, uchar *buffer, int len)
 
        debug("inside i2c_read_data():\n");
        /* Shift 7-bit address over for lower-level i2c functions */
-       rc = tegra2_i2c_read_data(chip << 1, buffer, len);
+       rc = tegra20_i2c_read_data(chip << 1, buffer, len);
        if (rc) {
                debug("i2c_read_data(): rc=%d\n", rc);
                return rc;
index 5c831b26116b72af3510490bc03b1441574bffa4..68c6a16bcc2a099485d7e83fcf0d21788c79a00d 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    := $(obj)libinput.o
 
 COBJS-$(CONFIG_I8042_KBD) += i8042.o
-COBJS-$(CONFIG_TEGRA2_KEYBOARD) += tegra-kbc.o
+COBJS-$(CONFIG_TEGRA20_KEYBOARD) += tegra-kbc.o
 ifdef CONFIG_PS2KBD
 COBJS-y += keyboard.o pc_keyb.o
 COBJS-$(CONFIG_PS2MULT) += ps2mult.o ps2ser.o
index 29bf58359dbec6fe3ea63b9136176f90cc294956..ddfa7279c2235ada4ceb1b8404dcaed5181fb1e8 100644 (file)
@@ -39,31 +39,31 @@ struct mmc_host mmc_host[4];
  * @param host         Structure to fill in (base, reg, mmc_id)
  * @param dev_index    Device index (0-3)
  */
-static void tegra2_get_setup(struct mmc_host *host, int dev_index)
+static void tegra20_get_setup(struct mmc_host *host, int dev_index)
 {
-       debug("tegra2_get_base_mmc: dev_index = %d\n", dev_index);
+       debug("tegra20_get_base_mmc: dev_index = %d\n", dev_index);
 
        switch (dev_index) {
        case 1:
-               host->base = TEGRA2_SDMMC3_BASE;
+               host->base = TEGRA20_SDMMC3_BASE;
                host->mmc_id = PERIPH_ID_SDMMC3;
                break;
        case 2:
-               host->base = TEGRA2_SDMMC2_BASE;
+               host->base = TEGRA20_SDMMC2_BASE;
                host->mmc_id = PERIPH_ID_SDMMC2;
                break;
        case 3:
-               host->base = TEGRA2_SDMMC1_BASE;
+               host->base = TEGRA20_SDMMC1_BASE;
                host->mmc_id = PERIPH_ID_SDMMC1;
                break;
        case 0:
        default:
-               host->base = TEGRA2_SDMMC4_BASE;
+               host->base = TEGRA20_SDMMC4_BASE;
                host->mmc_id = PERIPH_ID_SDMMC4;
                break;
        }
 
-       host->reg = (struct tegra2_mmc *)host->base;
+       host->reg = (struct tegra20_mmc *)host->base;
 }
 
 static void mmc_prepare_data(struct mmc_host *host, struct mmc_data *data)
@@ -345,7 +345,7 @@ static void mmc_change_clock(struct mmc_host *host, uint clock)
        debug(" mmc_change_clock called\n");
 
        /*
-        * Change Tegra2 SDMMCx clock divisor here. Source is 216MHz,
+        * Change Tegra20 SDMMCx clock divisor here. Source is 216MHz,
         * PLLP_OUT0
         */
        if (clock == 0)
@@ -494,11 +494,11 @@ static int mmc_core_init(struct mmc *mmc)
        return 0;
 }
 
-int tegra2_mmc_getcd(struct mmc *mmc)
+int tegra20_mmc_getcd(struct mmc *mmc)
 {
        struct mmc_host *host = (struct mmc_host *)mmc->priv;
 
-       debug("tegra2_mmc_getcd called\n");
+       debug("tegra20_mmc_getcd called\n");
 
        if (host->cd_gpio >= 0)
                return !gpio_get_value(host->cd_gpio);
@@ -506,13 +506,13 @@ int tegra2_mmc_getcd(struct mmc *mmc)
        return 1;
 }
 
-int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio)
+int tegra20_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio)
 {
        struct mmc_host *host;
        char gpusage[12]; /* "SD/MMCn PWR" or "SD/MMCn CD" */
        struct mmc *mmc;
 
-       debug(" tegra2_mmc_init: index %d, bus width %d "
+       debug(" tegra20_mmc_init: index %d, bus width %d "
                "pwr_gpio %d cd_gpio %d\n",
                dev_index, bus_width, pwr_gpio, cd_gpio);
 
@@ -521,7 +521,7 @@ int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio)
        host->clock = 0;
        host->pwr_gpio = pwr_gpio;
        host->cd_gpio = cd_gpio;
-       tegra2_get_setup(host, dev_index);
+       tegra20_get_setup(host, dev_index);
 
        clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
 
@@ -539,12 +539,12 @@ int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio)
 
        mmc = &mmc_dev[dev_index];
 
-       sprintf(mmc->name, "Tegra2 SD/MMC");
+       sprintf(mmc->name, "Tegra20 SD/MMC");
        mmc->priv = host;
        mmc->send_cmd = mmc_send_cmd;
        mmc->set_ios = mmc_set_ios;
        mmc->init = mmc_core_init;
-       mmc->getcd = tegra2_mmc_getcd;
+       mmc->getcd = tegra20_mmc_getcd;
 
        mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
        if (bus_width == 8)
@@ -559,7 +559,7 @@ int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio)
         * max freq is highest HS eMMC clock as per the SD/MMC spec
         *  (actually 52MHz)
         * Both of these are the closest equivalents w/216MHz source
-        *  clock and Tegra2 SDMMC divisors.
+        *  clock and Tegra20 SDMMC divisors.
         */
        mmc->f_min = 375000;
        mmc->f_max = 48000000;
index f9cdcaaaa6d8b1c6430a4fcbbba5b969941f9504..b1f256419780bc8fcfea6dd60b0bc9984c4afc47 100644 (file)
 #ifndef __TEGRA_MMC_H_
 #define __TEGRA_MMC_H_
 
-#define TEGRA2_SDMMC1_BASE     0xC8000000
-#define TEGRA2_SDMMC2_BASE     0xC8000200
-#define TEGRA2_SDMMC3_BASE     0xC8000400
-#define TEGRA2_SDMMC4_BASE     0xC8000600
+#define TEGRA20_SDMMC1_BASE    0xC8000000
+#define TEGRA20_SDMMC2_BASE    0xC8000200
+#define TEGRA20_SDMMC3_BASE    0xC8000400
+#define TEGRA20_SDMMC4_BASE    0xC8000600
 
 #ifndef __ASSEMBLY__
-struct tegra2_mmc {
+struct tegra20_mmc {
        unsigned int    sysad;          /* _SYSTEM_ADDRESS_0 */
        unsigned short  blksize;        /* _BLOCK_SIZE_BLOCK_COUNT_0 15:00 */
        unsigned short  blkcnt;         /* _BLOCK_SIZE_BLOCK_COUNT_0 31:16 */
@@ -118,7 +118,7 @@ struct tegra2_mmc {
 #define TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE                    (1 << 1)
 
 struct mmc_host {
-       struct tegra2_mmc *reg;
+       struct tegra20_mmc *reg;
        unsigned int version;   /* SDHCI spec. version */
        unsigned int clock;     /* Current clock (MHz) */
        unsigned int base;      /* Base address, SDMMC1/2/3/4 */
index 4a3e7996f96211b14bdd549a2e8716d3e3cf9024..2355e022b0245f9d5959edb0a597bb7ae7181daf 100644 (file)
@@ -54,7 +54,7 @@ static inline struct tegra_spi_slave *to_tegra_spi(struct spi_slave *slave)
 
 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
 {
-       /* Tegra2 SPI-Flash - only 1 device ('bus/cs') */
+       /* Tegra20 SPI-Flash - only 1 device ('bus/cs') */
        if (bus != 0 || cs != 0)
                return 0;
        else
@@ -72,9 +72,9 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                return NULL;
        }
 
-       if (max_hz > TEGRA2_SPI_MAX_FREQ) {
+       if (max_hz > TEGRA20_SPI_MAX_FREQ) {
                printf("SPI error: unsupported frequency %d Hz. Max frequency"
-                       " is %d Hz\n", max_hz, TEGRA2_SPI_MAX_FREQ);
+                       " is %d Hz\n", max_hz, TEGRA20_SPI_MAX_FREQ);
                return NULL;
        }
 
@@ -86,7 +86,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
        spi->slave.bus = bus;
        spi->slave.cs = cs;
        spi->freq = max_hz;
-       spi->regs = (struct spi_tegra *)TEGRA2_SPI_BASE;
+       spi->regs = (struct spi_tegra *)TEGRA20_SPI_BASE;
        spi->mode = mode;
 
        return &spi->slave;
@@ -130,7 +130,7 @@ int spi_claim_bus(struct spi_slave *slave)
        debug("spi_init: COMMAND = %08x\n", readl(&regs->command));
 
        /*
-        * SPI pins on Tegra2 are muxed - change pinmux later due to UART
+        * SPI pins on Tegra20 are muxed - change pinmux later due to UART
         * issue.
         */
        pinmux_set_func(PINGRP_GMD, PMUX_FUNC_SFLASH);
index df5265a5a0d2c50e7077d5c2ca57a4de26f00dbb..d0555c16300245d744488f09268626c85a35c14f 100644 (file)
 #define __CONFIG_H
 
 #include <asm/sizes.h>
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Harmony. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-harmony
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-harmony
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT               "Tegra2 (Harmony) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "NVIDIA Harmony"
+#define V_PROMPT               "Tegra20 (Harmony) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "NVIDIA Harmony"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTD
+#define CONFIG_TEGRA20_ENABLE_UARTD
 
 /* UARTD: keyboard satellite board UART, default */
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTD_BASE
-#ifdef CONFIG_TEGRA2_ENABLE_UARTA
+#ifdef CONFIG_TEGRA20_ENABLE_UARTA
 /* UARTA: debug board UART */
 #define CONFIG_SYS_NS16550_COM2                NV_PA_APB_UARTA_BASE
 #endif
@@ -80,6 +80,6 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_DHCP
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index c84db03e7636e1ac6613c20a0f0599d6e4ad72cf..bce03a49fab52072a15f745cd4f3d03ac6ecbdd7 100644 (file)
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Medcom. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-medcom
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-medcom
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT                       "Tegra2 (Medcom) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "Avionic Design Medcom"
+#define V_PROMPT                       "Tegra20 (Medcom) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "Avionic Design Medcom"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTD     /* UARTD: debug UART */
+#define CONFIG_TEGRA20_ENABLE_UARTD    /* UARTD: debug UART */
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTD_BASE
 
 #define CONFIG_BOARD_EARLY_INIT_F
@@ -78,6 +78,6 @@
        "ext2load mmc 0 0x17000000 /boot/uImage;"       \
        "bootm"
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index 0dd1e83a504fa4278c204f5c372ce95b524b5def..0eb9f3b604579fbb22b1caaf1e39e54a737cdbec 100644 (file)
 #define __CONFIG_H
 
 #include <asm/sizes.h>
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Paz00. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-paz00
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-paz00
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT               "Tegra2 (Paz00) MOD # "
-#define CONFIG_TEGRA2_BOARD_STRING     "Compal Paz00"
+#define V_PROMPT               "Tegra20 (Paz00) MOD # "
+#define CONFIG_TEGRA20_BOARD_STRING    "Compal Paz00"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTA
+#define CONFIG_TEGRA20_ENABLE_UARTA
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTA_BASE
 
 #define CONFIG_MACH_TYPE               MACH_TYPE_PAZ00
@@ -68,6 +68,6 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_DHCP
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index 9870590bd663f5e8043ac1580fdea9bac0f5b2ef..42291d4e28be513b35d0f62afaa35753d0a6760a 100644 (file)
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Plutux. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-plutux
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-plutux
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT                       "Tegra2 (Plutux) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "Avionic Design Plutux"
+#define V_PROMPT                       "Tegra20 (Plutux) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "Avionic Design Plutux"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTD     /* UARTD: debug UART */
+#define CONFIG_TEGRA20_ENABLE_UARTD    /* UARTD: debug UART */
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTD_BASE
 
 #define CONFIG_BOARD_EARLY_INIT_F
@@ -78,6 +78,6 @@
        "ext2load mmc 0 0x17000000 /boot/uImage;"       \
        "bootm"
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index f661583fed6d330a1701f9b0b22c4606a449a395..afc4a855bf0099001c25ba580d1d0d2ae6b983b8 100644 (file)
 #include <asm/sizes.h>
 
 /* LP0 suspend / resume */
-#define CONFIG_TEGRA2_LP0
+#define CONFIG_TEGRA20_LP0
 #define CONFIG_AES
 #define CONFIG_TEGRA_PMU
 #define CONFIG_TPS6586X_POWER
 #define CONFIG_TEGRA_CLOCK_SCALING
 
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Seaboard. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-seaboard
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-seaboard
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT               "Tegra2 (SeaBoard) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "NVIDIA Seaboard"
+#define V_PROMPT               "Tegra20 (SeaBoard) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "NVIDIA Seaboard"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTD
+#define CONFIG_TEGRA20_ENABLE_UARTD
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTD_BASE
 
 /* On Seaboard: GPIO_PI3 = Port I = 8, bit = 3 */
 #define CONFIG_CMD_DHCP
 
 /* Enable keyboard */
-#define CONFIG_TEGRA2_KEYBOARD
+#define CONFIG_TEGRA20_KEYBOARD
 #define CONFIG_KEYBOARD
 
-#undef TEGRA2_DEVICE_SETTINGS
-#define TEGRA2_DEVICE_SETTINGS "stdin=serial,tegra-kbc\0" \
+#undef TEGRA20_DEVICE_SETTINGS
+#define TEGRA20_DEVICE_SETTINGS        "stdin=serial,tegra-kbc\0" \
                                        "stdout=serial\0" \
                                        "stderr=serial\0"
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index 3d0a78825b229c149276a6908c2006890ebb55d9..39400d9a7a49a0931ecb87c2dea0e3936debdd65 100644 (file)
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for TEC. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-tec
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-tec
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT                       "Tegra2 (TEC) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "Avionic Design Tamonten Evaluation Carrier"
+#define V_PROMPT                       "Tegra20 (TEC) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "Avionic Design Tamonten Evaluation Carrier"
 #define CONFIG_SYS_BOARD_ODMDATA       0x2b0d8011
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTD     /* UARTD: debug UART */
+#define CONFIG_TEGRA20_ENABLE_UARTD    /* UARTD: debug UART */
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTD_BASE
 
 #define CONFIG_BOARD_EARLY_INIT_F
diff --git a/include/configs/tegra2-common-post.h b/include/configs/tegra2-common-post.h
deleted file mode 100644 (file)
index c21fc28..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * (C) Copyright 2010-2012
- * NVIDIA Corporation <www.nvidia.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __TEGRA2_COMMON_POST_H
-#define __TEGRA2_COMMON_POST_H
-
-#ifdef CONFIG_BOOTCOMMAND
-
-#define BOOTCMDS_COMMON ""
-
-#else
-
-#ifdef CONFIG_CMD_EXT2
-#define BOOT_FSTYPE_EXT2 "ext2 "
-#else
-#define BOOT_FSTYPE_EXT2 ""
-#endif
-
-#ifdef CONFIG_CMD_FAT
-#define BOOT_FSTYPE_FAT "fat"
-#else
-#define BOOT_FSTYPE_FAT ""
-#endif
-
-#ifdef CONFIG_CMD_MMC
-#define BOOTCMDS_MMC \
-       "mmc_boot=" \
-               "setenv devtype mmc; " \
-               "if mmc dev ${devnum}; then " \
-                       "run scan_boot; " \
-               "fi\0" \
-       "bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0" \
-       "bootcmd_mmc1=setenv devnum 1; run mmc_boot;\0"
-#define BOOT_TARGETS_MMC "mmc1 mmc0"
-#else
-#define BOOTCMDS_MMC ""
-#define BOOT_TARGETS_MMC ""
-#endif
-
-#ifdef CONFIG_CMD_USB
-#define BOOTCMD_INIT_USB "run usb_init; "
-#define BOOTCMDS_USB \
-       "usb_init=" \
-               "if ${usb_need_init}; then " \
-                       "set usb_need_init false; " \
-                       "usb start 0; " \
-               "fi\0" \
-       \
-       "usb_boot=" \
-               "setenv devtype usb; " \
-               BOOTCMD_INIT_USB \
-               "if usb dev ${devnum}; then " \
-                       "run scan_boot; " \
-               "fi\0" \
-       \
-       "bootcmd_usb0=setenv devnum 0; run usb_boot;\0"
-#define BOOT_TARGETS_USB "usb0"
-#else
-#define BOOTCMD_INIT_USB ""
-#define BOOTCMDS_USB ""
-#define BOOT_TARGETS_USB ""
-#endif
-
-#ifdef CONFIG_CMD_DHCP
-#define BOOTCMDS_DHCP \
-       "bootcmd_dhcp=" \
-               BOOTCMD_INIT_USB \
-               "if dhcp ${scriptaddr} boot.scr.uimg; then "\
-                       "source ${scriptaddr}; " \
-               "fi\0"
-#define BOOT_TARGETS_DHCP "dhcp"
-#else
-#define BOOTCMDS_DHCP ""
-#define BOOT_TARGETS_DHCP ""
-#endif
-
-#define BOOTCMDS_COMMON \
-       "scriptaddr=0x400000\0" \
-       \
-       "rootpart=1\0" \
-       \
-       "script_boot="                                                    \
-               "if ${fs}load ${devtype} ${devnum}:${rootpart} "          \
-                               "${scriptaddr} ${prefix}${script}; then " \
-                       "echo ${script} found! Executing ...;"            \
-                       "source ${scriptaddr};"                           \
-               "fi;\0"                                                   \
-       \
-       "scan_boot="                                                      \
-               "echo Scanning ${devtype} ${devnum}...; "                 \
-               "for fs in ${boot_fstypes}; do "                          \
-                       "for prefix in ${boot_prefixes}; do "             \
-                               "for script in ${boot_scripts}; do "      \
-                                       "run script_boot; "               \
-                               "done; "                                  \
-                       "done; "                                          \
-               "done;\0"                                                 \
-       \
-       "boot_targets=" \
-               BOOT_TARGETS_MMC " " \
-               BOOT_TARGETS_USB " " \
-               BOOT_TARGETS_DHCP " " \
-               "\0" \
-       \
-       "boot_fstypes=" \
-               BOOT_FSTYPE_EXT2 " " \
-               BOOT_FSTYPE_FAT " " \
-               "\0" \
-       \
-       "boot_prefixes=/ /boot/\0" \
-       \
-       "boot_scripts=boot.scr.uimg boot.scr\0" \
-       \
-       BOOTCMDS_MMC \
-       BOOTCMDS_USB \
-       BOOTCMDS_DHCP
-
-#define CONFIG_BOOTCOMMAND \
-       "for target in ${boot_targets}; do run bootcmd_${target}; done"
-
-#endif
-
-#define CONFIG_EXTRA_ENV_SETTINGS \
-       TEGRA2_DEVICE_SETTINGS \
-       "fdt_load=0x01000000\0" \
-       "fdt_high=01100000\0" \
-       BOOTCMDS_COMMON
-
-#endif /* __TEGRA2_COMMON_POST_H */
diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h
deleted file mode 100644 (file)
index 6807762..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- *  (C) Copyright 2010-2012
- *  NVIDIA Corporation <www.nvidia.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __TEGRA2_COMMON_H
-#define __TEGRA2_COMMON_H
-#include <asm/sizes.h>
-
-/*
- * QUOTE(m) will evaluate to a string version of the value of the macro m
- * passed in.  The extra level of indirection here is to first evaluate the
- * macro m before applying the quoting operator.
- */
-#define QUOTE_(m)       #m
-#define QUOTE(m)        QUOTE_(m)
-
-/*
- * 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_SYS_L2CACHE_OFF         /* No L2 cache */
-
-#define CONFIG_SYS_CACHELINE_SIZE      32
-
-#define CONFIG_ARCH_CPU_INIT           /* Fire up the A9 core */
-
-#include <asm/arch/tegra2.h>           /* get chip and board defs */
-
-/*
- * Display CPU and Board information
- */
-#define CONFIG_DISPLAY_CPUINFO
-#define CONFIG_DISPLAY_BOARDINFO
-
-#define CONFIG_SKIP_LOWLEVEL_INIT
-
-#define CONFIG_CMDLINE_TAG             /* enable passing of ATAGs */
-#define CONFIG_OF_LIBFDT               /* enable passing of devicetree */
-
-#ifdef CONFIG_TEGRA2_LP0
-#define TEGRA_LP0_ADDR                 0x1C406000
-#define TEGRA_LP0_SIZE                 0x2000
-#define TEGRA_LP0_VEC \
-       "lp0_vec=" QUOTE(TEGRA_LP0_SIZE) "@" QUOTE(TEGRA_LP0_ADDR) " "
-#else
-#define TEGRA_LP0_VEC
-#endif
-
-/* Environment */
-#define CONFIG_ENV_VARS_UBOOT_CONFIG
-#define CONFIG_ENV_SIZE                        0x2000  /* 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}
-
-/*
- * This parameter affects a TXFILLTUNING field that controls how much data is
- * sent to the latency fifo before it is sent to the wire. Without this
- * parameter, the default (2) causes occasional Data Buffer Errors in OUT
- * packets depending on the buffer address and size.
- */
-#define CONFIG_USB_EHCI_TXFIFO_THRESH  10
-#define CONFIG_EHCI_IS_TDI
-#define CONFIG_EHCI_DCACHE
-
-/* Total I2C ports on Tegra2 */
-#define TEGRA_I2C_NUM_CONTROLLERS      4
-
-/* 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_AUTO_COMPLETE
-
-#define CONFIG_SYS_NO_FLASH
-
-/* Environment information, boards can override if required */
-#define CONFIG_CONSOLE_MUX
-#define CONFIG_SYS_CONSOLE_IS_IN_ENV
-#define TEGRA2_DEVICE_SETTINGS "stdin=serial\0" \
-                                       "stdout=serial\0" \
-                                       "stderr=serial\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              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*/
-
-/*-----------------------------------------------------------------------
- * 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   0x00108000
-#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)
-
-#define CONFIG_TEGRA_GPIO
-#define CONFIG_CMD_GPIO
-#define CONFIG_CMD_ENTERRCM
-#define CONFIG_CMD_BOOTZ
-#endif /* __TEGRA2_COMMON_H */
diff --git a/include/configs/tegra20-common-post.h b/include/configs/tegra20-common-post.h
new file mode 100644 (file)
index 0000000..e8badb9
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * (C) Copyright 2010-2012
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __TEGRA20_COMMON_POST_H
+#define __TEGRA20_COMMON_POST_H
+
+#ifdef CONFIG_BOOTCOMMAND
+
+#define BOOTCMDS_COMMON ""
+
+#else
+
+#ifdef CONFIG_CMD_EXT2
+#define BOOT_FSTYPE_EXT2 "ext2 "
+#else
+#define BOOT_FSTYPE_EXT2 ""
+#endif
+
+#ifdef CONFIG_CMD_FAT
+#define BOOT_FSTYPE_FAT "fat"
+#else
+#define BOOT_FSTYPE_FAT ""
+#endif
+
+#ifdef CONFIG_CMD_MMC
+#define BOOTCMDS_MMC \
+       "mmc_boot=" \
+               "setenv devtype mmc; " \
+               "if mmc dev ${devnum}; then " \
+                       "run scan_boot; " \
+               "fi\0" \
+       "bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0" \
+       "bootcmd_mmc1=setenv devnum 1; run mmc_boot;\0"
+#define BOOT_TARGETS_MMC "mmc1 mmc0"
+#else
+#define BOOTCMDS_MMC ""
+#define BOOT_TARGETS_MMC ""
+#endif
+
+#ifdef CONFIG_CMD_USB
+#define BOOTCMD_INIT_USB "run usb_init; "
+#define BOOTCMDS_USB \
+       "usb_init=" \
+               "if ${usb_need_init}; then " \
+                       "set usb_need_init false; " \
+                       "usb start 0; " \
+               "fi\0" \
+       \
+       "usb_boot=" \
+               "setenv devtype usb; " \
+               BOOTCMD_INIT_USB \
+               "if usb dev ${devnum}; then " \
+                       "run scan_boot; " \
+               "fi\0" \
+       \
+       "bootcmd_usb0=setenv devnum 0; run usb_boot;\0"
+#define BOOT_TARGETS_USB "usb0"
+#else
+#define BOOTCMD_INIT_USB ""
+#define BOOTCMDS_USB ""
+#define BOOT_TARGETS_USB ""
+#endif
+
+#ifdef CONFIG_CMD_DHCP
+#define BOOTCMDS_DHCP \
+       "bootcmd_dhcp=" \
+               BOOTCMD_INIT_USB \
+               "if dhcp ${scriptaddr} boot.scr.uimg; then "\
+                       "source ${scriptaddr}; " \
+               "fi\0"
+#define BOOT_TARGETS_DHCP "dhcp"
+#else
+#define BOOTCMDS_DHCP ""
+#define BOOT_TARGETS_DHCP ""
+#endif
+
+#define BOOTCMDS_COMMON \
+       "scriptaddr=0x400000\0" \
+       \
+       "rootpart=1\0" \
+       \
+       "script_boot="                                                    \
+               "if ${fs}load ${devtype} ${devnum}:${rootpart} "          \
+                               "${scriptaddr} ${prefix}${script}; then " \
+                       "echo ${script} found! Executing ...;"            \
+                       "source ${scriptaddr};"                           \
+               "fi;\0"                                                   \
+       \
+       "scan_boot="                                                      \
+               "echo Scanning ${devtype} ${devnum}...; "                 \
+               "for fs in ${boot_fstypes}; do "                          \
+                       "for prefix in ${boot_prefixes}; do "             \
+                               "for script in ${boot_scripts}; do "      \
+                                       "run script_boot; "               \
+                               "done; "                                  \
+                       "done; "                                          \
+               "done;\0"                                                 \
+       \
+       "boot_targets=" \
+               BOOT_TARGETS_MMC " " \
+               BOOT_TARGETS_USB " " \
+               BOOT_TARGETS_DHCP " " \
+               "\0" \
+       \
+       "boot_fstypes=" \
+               BOOT_FSTYPE_EXT2 " " \
+               BOOT_FSTYPE_FAT " " \
+               "\0" \
+       \
+       "boot_prefixes=/ /boot/\0" \
+       \
+       "boot_scripts=boot.scr.uimg boot.scr\0" \
+       \
+       BOOTCMDS_MMC \
+       BOOTCMDS_USB \
+       BOOTCMDS_DHCP
+
+#define CONFIG_BOOTCOMMAND \
+       "for target in ${boot_targets}; do run bootcmd_${target}; done"
+
+#endif
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       TEGRA20_DEVICE_SETTINGS \
+       "fdt_load=0x01000000\0" \
+       "fdt_high=01100000\0" \
+       BOOTCMDS_COMMON
+
+#endif /* __TEGRA20_COMMON_POST_H */
diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h
new file mode 100644 (file)
index 0000000..91cf28c
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ *  (C) Copyright 2010-2012
+ *  NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __TEGRA20_COMMON_H
+#define __TEGRA20_COMMON_H
+#include <asm/sizes.h>
+
+/*
+ * QUOTE(m) will evaluate to a string version of the value of the macro m
+ * passed in.  The extra level of indirection here is to first evaluate the
+ * macro m before applying the quoting operator.
+ */
+#define QUOTE_(m)       #m
+#define QUOTE(m)        QUOTE_(m)
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_ARMCORTEXA9             /* This is an ARM V7 CPU core */
+#define CONFIG_TEGRA20                 /* in a NVidia Tegra20 core */
+#define CONFIG_MACH_TEGRA_GENERIC      /* which is a Tegra generic machine */
+#define CONFIG_SYS_L2CACHE_OFF         /* No L2 cache */
+
+#define CONFIG_SYS_CACHELINE_SIZE      32
+
+#define CONFIG_ARCH_CPU_INIT           /* Fire up the A9 core */
+
+#include <asm/arch/tegra20.h>          /* get chip and board defs */
+
+/*
+ * Display CPU and Board information
+ */
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#define CONFIG_CMDLINE_TAG             /* enable passing of ATAGs */
+#define CONFIG_OF_LIBFDT               /* enable passing of devicetree */
+
+#ifdef CONFIG_TEGRA20_LP0
+#define TEGRA_LP0_ADDR                 0x1C406000
+#define TEGRA_LP0_SIZE                 0x2000
+#define TEGRA_LP0_VEC \
+       "lp0_vec=" QUOTE(TEGRA_LP0_SIZE) "@" QUOTE(TEGRA_LP0_ADDR) " "
+#else
+#define TEGRA_LP0_VEC
+#endif
+
+/* Environment */
+#define CONFIG_ENV_VARS_UBOOT_CONFIG
+#define CONFIG_ENV_SIZE                        0x2000  /* 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}
+
+/*
+ * This parameter affects a TXFILLTUNING field that controls how much data is
+ * sent to the latency fifo before it is sent to the wire. Without this
+ * parameter, the default (2) causes occasional Data Buffer Errors in OUT
+ * packets depending on the buffer address and size.
+ */
+#define CONFIG_USB_EHCI_TXFIFO_THRESH  10
+#define CONFIG_EHCI_IS_TDI
+#define CONFIG_EHCI_DCACHE
+
+/* Total I2C ports on Tegra20 */
+#define TEGRA_I2C_NUM_CONTROLLERS      4
+
+/* 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_AUTO_COMPLETE
+
+#define CONFIG_SYS_NO_FLASH
+
+/* Environment information, boards can override if required */
+#define CONFIG_CONSOLE_MUX
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+#define TEGRA20_DEVICE_SETTINGS        "stdin=serial\0" \
+                                       "stdout=serial\0" \
+                                       "stderr=serial\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              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       (TEGRA20_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*/
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS   1
+#define PHYS_SDRAM_1           TEGRA20_SDRC_CS0
+#define PHYS_SDRAM_1_SIZE      0x20000000      /* 512M */
+
+#define CONFIG_SYS_TEXT_BASE   0x00108000
+#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)
+
+#define CONFIG_TEGRA_GPIO
+#define CONFIG_CMD_GPIO
+#define CONFIG_CMD_ENTERRCM
+#define CONFIG_CMD_BOOTZ
+#endif /* __TEGRA20_COMMON_H */
index 34be8a98a1cac6280b517e925be1ea5e843154b5..b3c524981f512d45e2d8e6492180309a54a5a60b 100644 (file)
 #define __CONFIG_H
 
 #include <asm/sizes.h>
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for TrimSlice. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-trimslice
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-trimslice
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT               "Tegra2 (TrimSlice) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "Compulab Trimslice"
+#define V_PROMPT               "Tegra20 (TrimSlice) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "Compulab Trimslice"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTA
-#define CONFIG_TEGRA2_UARTA_GPU
+#define CONFIG_TEGRA20_ENABLE_UARTA
+#define CONFIG_TEGRA20_UARTA_GPU
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTA_BASE
 
 #define CONFIG_MACH_TYPE               MACH_TYPE_TRIMSLICE
@@ -94,6 +94,6 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_DHCP
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index 5e4d53861c67f2b0e638392e41f37dc78cedb44f..25ec2ebfec75c98466c79679b619e010d5fba306 100644 (file)
 #define __CONFIG_H
 
 #include <asm/sizes.h>
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Ventana. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-ventana
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-ventana
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT               "Tegra2 (Ventana) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "NVIDIA Ventana"
+#define V_PROMPT               "Tegra20 (Ventana) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "NVIDIA Ventana"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTD
+#define CONFIG_TEGRA20_ENABLE_UARTD
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTD_BASE
 
 #define CONFIG_MACH_TYPE               MACH_TYPE_VENTANA
@@ -75,6 +75,6 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_DHCP
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index f2952d5f45e073aa8e7efc8b6414300f6336e139..b747d0e2b2c2d2e3c30c186b3b3f093c25fa0101 100644 (file)
 #define __CONFIG_H
 
 #include <asm/sizes.h>
-#include "tegra2-common.h"
+#include "tegra20-common.h"
 
 /* Enable fdt support for Whistler. Flash the image in u-boot-dtb.bin */
-#define CONFIG_DEFAULT_DEVICE_TREE     tegra2-whistler
+#define CONFIG_DEFAULT_DEVICE_TREE     tegra20-whistler
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
 /* High-level configuration options */
-#define V_PROMPT               "Tegra2 (Whistler) # "
-#define CONFIG_TEGRA2_BOARD_STRING     "NVIDIA Whistler"
+#define V_PROMPT               "Tegra20 (Whistler) # "
+#define CONFIG_TEGRA20_BOARD_STRING    "NVIDIA Whistler"
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
-#define CONFIG_TEGRA2_ENABLE_UARTA
-#define CONFIG_TEGRA2_UARTA_UAA_UAB
+#define CONFIG_TEGRA20_ENABLE_UARTA
+#define CONFIG_TEGRA20_UARTA_UAA_UAB
 #define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTA_BASE
 
 #define CONFIG_MACH_TYPE               MACH_TYPE_WHISTLER
@@ -89,6 +89,6 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_DHCP
 
-#include "tegra2-common-post.h"
+#include "tegra20-common-post.h"
 
 #endif /* __CONFIG_H */
index fab577ed32f5e7321e6a49e2808a6f21368c471f..a8f783ffd5097873048d49dcafc69ffbb264f5da 100644 (file)
@@ -57,12 +57,12 @@ struct fdt_memory {
  */
 enum fdt_compat_id {
        COMPAT_UNKNOWN,
-       COMPAT_NVIDIA_TEGRA20_USB,      /* Tegra2 USB port */
-       COMPAT_NVIDIA_TEGRA20_I2C,      /* Tegra2 i2c */
-       COMPAT_NVIDIA_TEGRA20_DVC,      /* Tegra2 dvc (really just i2c) */
-       COMPAT_NVIDIA_TEGRA20_EMC,      /* Tegra2 memory controller */
-       COMPAT_NVIDIA_TEGRA20_EMC_TABLE, /* Tegra2 memory timing table */
-       COMPAT_NVIDIA_TEGRA20_KBC,      /* Tegra2 Keyboard */
+       COMPAT_NVIDIA_TEGRA20_USB,      /* Tegra20 USB port */
+       COMPAT_NVIDIA_TEGRA20_I2C,      /* Tegra20 i2c */
+       COMPAT_NVIDIA_TEGRA20_DVC,      /* Tegra20 dvc (really just i2c) */
+       COMPAT_NVIDIA_TEGRA20_EMC,      /* Tegra20 memory controller */
+       COMPAT_NVIDIA_TEGRA20_EMC_TABLE, /* Tegra20 memory timing table */
+       COMPAT_NVIDIA_TEGRA20_KBC,      /* Tegra20 Keyboard */
 
        COMPAT_COUNT,
 };
index 5173499124091870efaca83feb615d377054ed34..cbdf8a9bf7eaa166dbac0502d8f6b0b75dc01c48 100644 (file)
@@ -31,7 +31,7 @@ extern struct serial_device *default_serial_console(void);
        defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
        defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
        defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
-       defined(CONFIG_TEGRA2) || defined(CONFIG_SYS_COREBOOT)
+       defined(CONFIG_TEGRA20) || defined(CONFIG_SYS_COREBOOT)
 extern struct serial_device serial0_device;
 extern struct serial_device serial1_device;
 #if defined(CONFIG_SYS_NS16550_SERIAL)