| Index: arch/arm/cpu/arm_cortexa9/tegra2/ap20.c
|
| diff --git a/arch/arm/cpu/arm_cortexa9/tegra2/ap20.c b/arch/arm/cpu/arm_cortexa9/tegra2/ap20.c
|
| old mode 100644
|
| new mode 100755
|
| index b1b5352995caa8a20cc48f0e23e1359be4e443e6..66cda9423e10e2bd40eb629c6e81da9e03106d1b
|
| --- a/arch/arm/cpu/arm_cortexa9/tegra2/ap20.c
|
| +++ b/arch/arm/cpu/arm_cortexa9/tegra2/ap20.c
|
| @@ -20,6 +20,8 @@
|
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
| * MA 02111-1307 USA
|
| */
|
| +
|
| +#include <common.h>
|
| #include "ap20.h"
|
|
|
| #define NV_ASSERT(p) \
|
| @@ -31,6 +33,179 @@
|
| }; \
|
| }
|
|
|
| +#ifdef CONFIG_TEGRA2_LP0
|
| +/** Scratch register macros **/
|
| +
|
| +/** NV_SF_NUM - define a new scratch register value.
|
| +
|
| + @param s scratch register name (APBDEV_PMC_s)
|
| + @param f register field
|
| + @param n defined value for the field
|
| + */
|
| +#define NV_SF_NUM(s,f,n) \
|
| + (((n)& NV_FIELD_MASK(APBDEV_PMC_##s##_0_##f##_RANGE)) << \
|
| + NV_FIELD_SHIFT(APBDEV_PMC_##s##_0_##f##_RANGE))
|
| +
|
| +
|
| +/** NV_FLD_SET_SR_NUM - modify a scratch register field.
|
| +
|
| + @param s scratch register name (APBDEV_PMC_s)
|
| + @param f register field
|
| + @param n numeric field value
|
| + */
|
| +#define NV_FLD_SET_SF_NUM(s,f,n) \
|
| + ((s & ~NV_FIELD_SHIFTMASK(APBDEV_PMC_##s##_0_##f##_RANGE))\
|
| + | NV_SF_NUM(s,f,n))
|
| +
|
| +
|
| +/** NV_SDRF_NUM - define a new scratch register value.
|
| +
|
| + @param s scratch register name (APBDEV_PMC_s)
|
| + @param d register domain (hardware block)
|
| + @param r register name
|
| + @param f register field
|
| + @param n defined value for the field
|
| + */
|
| +#define NV_SDRF_NUM(s,d,r,f,n) \
|
| + (((n)& NV_FIELD_MASK(APBDEV_PMC_##s##_0_##d##_##r##_0_##f##_RANGE)) << \
|
| + NV_FIELD_SHIFT(APBDEV_PMC_##s##_0_##d##_##r##_0_##f##_RANGE))
|
| +
|
| +
|
| +/** NV_FLD_SET_SDRF_NUM - modify a scratch register field.
|
| +
|
| + @param s scratch register name (APBDEV_PMC_s)
|
| + @param d register domain (hardware block)
|
| + @param r register name
|
| + @param f register field
|
| + @param n numeric field value
|
| + */
|
| +#define NV_FLD_SET_SDRF_NUM(s,d,r,f,n) \
|
| + ((s & ~NV_FIELD_SHIFTMASK(APBDEV_PMC_##s##_0_##d##_##r##_0_##f##_RANGE))\
|
| + | NV_SDRF_NUM(s,d,r,f,n))
|
| +
|
| +
|
| +/** SCRATCH_REGS() - PMC scratch registers (list of SCRATCH_REG() macros).
|
| + SCRATCH_REG(s) - PMC scratch register name:
|
| +
|
| + @param s Scratch register name (APBDEV_PMC_s)
|
| + */
|
| +#define SCRATCH_REGS() \
|
| + SCRATCH_REG(SCRATCH2) \
|
| + SCRATCH_REG(SCRATCH4) \
|
| + SCRATCH_REG(SCRATCH24) \
|
| + /* End-of-List*/
|
| +
|
| +#define SCRATCH_REG(s) static NvU32 s = 0;
|
| +SCRATCH_REGS()
|
| +#undef SCRATCH_REG
|
| +
|
| +#define REGS() \
|
| + /* CLK_RST Group */ \
|
| + REG(SCRATCH2, CLK_RST_CONTROLLER, OSC_CTRL, XOBP) \
|
| + REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_BASE, PLLM_DIVM) \
|
| + REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_BASE, PLLM_DIVN) \
|
| + REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_BASE, PLLM_DIVP) \
|
| + REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_MISC, PLLM_CPCON) \
|
| + REG(SCRATCH2, CLK_RST_CONTROLLER, PLLM_MISC, PLLM_LFCON) \
|
| + /**/ \
|
| + /* EMC Group */ \
|
| + REG2(SCRATCH4, EMC, FBIO_SPARE, CFG_FBIO_SPARE_WB0) \
|
| + /* APB_MISC Group */ \
|
| + REG3(SCRATCH2, APB_MISC, GP_XM2CFGAPADCTRL, CFG2TMC_XM2CFGA_PREEMP_EN) \
|
| + REG3(SCRATCH2, APB_MISC, GP_XM2CFGDPADCTRL, CFG2TMC_XM2CFGD_SCHMT_EN) \
|
| + /**/ \
|
| + /* BCT SdramParams Group*/ \
|
| + RAM(SCRATCH2, MEMORY_TYPE, MemoryType) \
|
| + /**/ \
|
| + RAM(SCRATCH4, EMC_CLOCK_DIVIDER, EmcClockDivider) \
|
| + CONSTANT(SCRATCH4, PLLM_STABLE_TIME, ~0) /* Stuff the maximum value */ \
|
| + CONSTANT(SCRATCH4, PLLX_STABLE_TIME, ~0) /* Stuff the maximum value */ \
|
| + /**/ \
|
| + RAM(SCRATCH24, EMC_AUTO_CAL_WAIT, EmcAutoCalWait) \
|
| + RAM(SCRATCH24, EMC_PIN_PROGRAM_WAIT, EmcPinProgramWait) \
|
| + RAM(SCRATCH24, WARMBOOT_WAIT, WarmBootWait)
|
| +
|
| +/*Correct names */
|
| +#define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_OSC_CTRL_0_XOBP_RANGE\
|
| + APBDEV_PMC_SCRATCH2_0_CLK_RST_OSC_CTRL_XOBP_RANGE
|
| +#define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_BASE_0_PLLM_DIVM_RANGE\
|
| + APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_BASE_PLLM_DIVM_RANGE
|
| +#define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_BASE_0_PLLM_DIVN_RANGE\
|
| + APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_BASE_PLLM_DIVN_RANGE
|
| +#define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_BASE_0_PLLM_DIVP_RANGE\
|
| + APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_BASE_PLLM_DIVP_RANGE
|
| +#define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_MISC_0_PLLM_CPCON_RANGE\
|
| + APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_MISC_CPCON_RANGE
|
| +#define APBDEV_PMC_SCRATCH2_0_CLK_RST_CONTROLLER_PLLM_MISC_0_PLLM_LFCON_RANGE\
|
| + APBDEV_PMC_SCRATCH2_0_CLK_RST_PLLM_MISC_LFCON_RANGE
|
| +
|
| +#define SDRAM_PARAMS_BASE_ADDR (0x40000000 + 0x100 + 0x88)
|
| +
|
| +void NvBlSaveSdramParams(void)
|
| +{
|
| + NvU32 reg; /* Module register contents */
|
| + NvU32 val; /* Register field contents */
|
| + NvBootSdramParams sdram_params;
|
| +
|
| + memcpy (&sdram_params, (char *)SDRAM_PARAMS_BASE_ADDR,
|
| + sizeof(NvBootSdramParams));
|
| +
|
| + /* REG(s,d,r,f)
|
| + * s = destination Scratch register
|
| + * d = Device name
|
| + * r = Register name
|
| + * f = register Field
|
| + */
|
| + #define REG(s,d,r,f) \
|
| + reg = NV_CAR_REGR(CLK_RST_PA_BASE, r); \
|
| + val = NV_DRF_VAL(d,r,f,reg); \
|
| + s = NV_FLD_SET_SDRF_NUM(s,d,r,f,val);
|
| +
|
| + #define REG2(s,d,r,f) \
|
| + reg = NV_EMC_REGR(EMC_PA_BASE, r); \
|
| + val = NV_DRF_VAL(d,r,f,reg); \
|
| + s = NV_FLD_SET_SDRF_NUM(s,d,r,f,val);
|
| +
|
| + #define REG3(s,d,r,f) \
|
| + reg = NV_MISC_REGR(MISC_PA_BASE, r);\
|
| + val = NV_DRF_VAL(d,r,f,reg); \
|
| + s = NV_FLD_SET_SDRF_NUM(s,d,r,f,val);
|
| +
|
| + /* RAM(s,f,n)
|
| + * s = destination Scratch register
|
| + * f = register Field
|
| + * v = bct Variable
|
| + */
|
| + #define RAM(s,f,v) \
|
| + s = NV_FLD_SET_SF_NUM(s,f,sdram_params.v);
|
| +
|
| + /* Define the transformation macro that will stuff a PMC scratch
|
| + * register with a constant value.
|
| + */
|
| +
|
| + /* CONSTANT(s,f,n)
|
| + * s = destination Scratch register
|
| + * f = register Field
|
| + * v = constant Value
|
| + */
|
| + #define CONSTANT(s,f,v) \
|
| + s = NV_FLD_SET_SF_NUM(s,f,v);
|
| +
|
| + /*Instantiate all of the register transformations. */
|
| + REGS()
|
| + #undef RAM
|
| + #undef CONSTANT
|
| +
|
| + /* Generate writes to the PMC scratch registers to copy the local
|
| + * variables to the actual registers.
|
| + */
|
| + #define SCRATCH_REG(s)\
|
| + NV_PMC_REGW(PMC_PA_BASE, s, s);
|
| + SCRATCH_REGS()
|
| + #undef SCRATCH_REG
|
| +}
|
| +#endif
|
| +
|
| void NvBlAvpStallUs(NvU32 MicroSec)
|
| {
|
| NvU32 Reg; // Flow controller register
|
| @@ -542,7 +717,6 @@ NV_NAKED void NvBlStartUpAvp_AP20( void )
|
|
|
| // we're hard coding the entry point for all AOS images
|
| NvU32 cpu_boot_stack = NVAP_LIMIT_PA_IRAM_CPU_EARLY_BOOT_STACK;
|
| -extern NvU32 _armboot_start;
|
| NvU32 proc_tag = PG_UP_TAG_0_PID_CPU _AND_ 0xFF;
|
| NvU32 avp_boot_stack = NVAP_LIMIT_PA_IRAM_AVP_EARLY_BOOT_STACK;
|
| NvU32 deadbeef = 0xdeadbeef;
|
| @@ -756,6 +930,11 @@ void NvBlInitPmcScratch(void)
|
| else
|
| NV_WRITE32(pPmc+i, 0);
|
| }
|
| +
|
| +#ifdef CONFIG_TEGRA2_LP0
|
| + // Save Sdram params to PMC 2, 4, and 24 for WB0
|
| + NvBlSaveSdramParams();
|
| +#endif
|
| }
|
|
|
| NvU32 s_ChipId;
|
| @@ -763,11 +942,10 @@ volatile NvU32 s_bFirstBoot = 1;
|
|
|
| void cpu_start( void )
|
| {
|
| - volatile NvU32 *jtagReg = (NvU32*)0x70000024;
|
| NvU32 reg;
|
|
|
| // enable JTAG
|
| - *jtagReg = 192;
|
| + NV_MISC_REGW( MISC_PA_BASE, PP_CONFIG_CTL, 0xc0);
|
|
|
| reg = NV_MISC_REGR( MISC_PA_BASE, GP_HIDREV );
|
|
|
|
|