Skip to content
Snippets Groups Projects
Commit 495dbd72 authored by Tom Rini's avatar Tom Rini
Browse files

Merge branch 'master' of git://git.denx.de/u-boot-arm

parents 50d924b4 d193c1b6
No related branches found
No related tags found
No related merge requests found
Showing
with 156 additions and 163 deletions
...@@ -313,11 +313,8 @@ ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) ...@@ -313,11 +313,8 @@ ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
LIBS-y += $(CPUDIR)/omap-common/libomap-common.o LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
endif endif
ifeq ($(SOC),mx5) ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))
LIBS-y += $(CPUDIR)/imx-common/libimx-common.o LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
endif
ifeq ($(SOC),mx6)
LIBS-y += $(CPUDIR)/imx-common/libimx-common.o
endif endif
ifeq ($(SOC),s5pc1xx) ifeq ($(SOC),s5pc1xx)
...@@ -776,6 +773,7 @@ clean: ...@@ -776,6 +773,7 @@ clean:
$(obj)tools/gen_eth_addr $(obj)tools/img2srec \ $(obj)tools/gen_eth_addr $(obj)tools/img2srec \
$(obj)tools/mk{env,}image $(obj)tools/mpc86x_clk \ $(obj)tools/mk{env,}image $(obj)tools/mpc86x_clk \
$(obj)tools/mk{smdk5250,}spl \ $(obj)tools/mk{smdk5250,}spl \
$(obj)tools/mxsboot \
$(obj)tools/ncb $(obj)tools/ubsha1 $(obj)tools/ncb $(obj)tools/ubsha1
@rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image} \ @rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image} \
$(obj)board/matrix_vision/*/bootscript.img \ $(obj)board/matrix_vision/*/bootscript.img \
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
*/ */
#include <common.h> #include <common.h>
#include <div64.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h> #include <asm/arch/clock.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -30,16 +31,17 @@ ...@@ -30,16 +31,17 @@
static u32 mx31_decode_pll(u32 reg, u32 infreq) static u32 mx31_decode_pll(u32 reg, u32 infreq)
{ {
u32 mfi = GET_PLL_MFI(reg); u32 mfi = GET_PLL_MFI(reg);
u32 mfn = GET_PLL_MFN(reg); s32 mfn = GET_PLL_MFN(reg);
u32 mfd = GET_PLL_MFD(reg); u32 mfd = GET_PLL_MFD(reg);
u32 pd = GET_PLL_PD(reg); u32 pd = GET_PLL_PD(reg);
mfi = mfi <= 5 ? 5 : mfi; mfi = mfi <= 5 ? 5 : mfi;
mfn = mfn >= 512 ? mfn - 1024 : mfn;
mfd += 1; mfd += 1;
pd += 1; pd += 1;
return ((2 * (infreq >> 10) * (mfi * mfd + mfn)) / return lldiv(2 * (u64)infreq * (mfi * mfd + mfn),
(mfd * pd)) << 10; mfd * pd);
} }
static u32 mx31_get_mpl_dpdgck_clk(void) static u32 mx31_get_mpl_dpdgck_clk(void)
...@@ -47,9 +49,9 @@ static u32 mx31_get_mpl_dpdgck_clk(void) ...@@ -47,9 +49,9 @@ static u32 mx31_get_mpl_dpdgck_clk(void)
u32 infreq; u32 infreq;
if ((readl(CCM_CCMR) & CCMR_PRCS_MASK) == CCMR_FPM) if ((readl(CCM_CCMR) & CCMR_PRCS_MASK) == CCMR_FPM)
infreq = CONFIG_MX31_CLK32 * 1024; infreq = MXC_CLK32 * 1024;
else else
infreq = CONFIG_MX31_HCLK_FREQ; infreq = MXC_HCLK;
return mx31_decode_pll(readl(CCM_MPCTL), infreq); return mx31_decode_pll(readl(CCM_MPCTL), infreq);
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <common.h> #include <common.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h>
#include <div64.h> #include <div64.h>
#include <watchdog.h> #include <watchdog.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -53,28 +54,27 @@ DECLARE_GLOBAL_DATA_PTR; ...@@ -53,28 +54,27 @@ DECLARE_GLOBAL_DATA_PTR;
static inline unsigned long long tick_to_time(unsigned long long tick) static inline unsigned long long tick_to_time(unsigned long long tick)
{ {
tick *= CONFIG_SYS_HZ; tick *= CONFIG_SYS_HZ;
do_div(tick, CONFIG_MX31_CLK32); do_div(tick, MXC_CLK32);
return tick; return tick;
} }
static inline unsigned long long time_to_tick(unsigned long long time) static inline unsigned long long time_to_tick(unsigned long long time)
{ {
time *= CONFIG_MX31_CLK32; time *= MXC_CLK32;
do_div(time, CONFIG_SYS_HZ); do_div(time, CONFIG_SYS_HZ);
return time; return time;
} }
static inline unsigned long long us_to_tick(unsigned long long us) static inline unsigned long long us_to_tick(unsigned long long us)
{ {
us = us * CONFIG_MX31_CLK32 + 999999; us = us * MXC_CLK32 + 999999;
do_div(us, 1000000); do_div(us, 1000000);
return us; return us;
} }
#else #else
/* ~2% error */ /* ~2% error */
#define TICK_PER_TIME ((CONFIG_MX31_CLK32 + CONFIG_SYS_HZ / 2) \ #define TICK_PER_TIME ((MXC_CLK32 + CONFIG_SYS_HZ / 2) / CONFIG_SYS_HZ)
/ CONFIG_SYS_HZ) #define US_PER_TICK (1000000 / MXC_CLK32)
#define US_PER_TICK (1000000 / CONFIG_MX31_CLK32)
static inline unsigned long long tick_to_time(unsigned long long tick) static inline unsigned long long tick_to_time(unsigned long long tick)
{ {
...@@ -128,7 +128,7 @@ ulong get_timer_masked(void) ...@@ -128,7 +128,7 @@ ulong get_timer_masked(void)
{ {
/* /*
* get_ticks() returns a long long (64 bit), it wraps in * get_ticks() returns a long long (64 bit), it wraps in
* 2^64 / CONFIG_MX31_CLK32 = 2^64 / 2^15 = 2^49 ~ 5 * 10^14 (s) ~ * 2^64 / MXC_CLK32 = 2^64 / 2^15 = 2^49 ~ 5 * 10^14 (s) ~
* 5 * 10^9 days... and get_ticks() * CONFIG_SYS_HZ wraps in * 5 * 10^9 days... and get_ticks() * CONFIG_SYS_HZ wraps in
* 5 * 10^6 days - long enough. * 5 * 10^6 days - long enough.
*/ */
...@@ -159,7 +159,7 @@ void __udelay(unsigned long usec) ...@@ -159,7 +159,7 @@ void __udelay(unsigned long usec)
*/ */
ulong get_tbclk(void) ulong get_tbclk(void)
{ {
return CONFIG_MX31_CLK32; return MXC_CLK32;
} }
void reset_cpu(ulong addr) void reset_cpu(ulong addr)
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
*/ */
#include <common.h> #include <common.h>
#include <div64.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
...@@ -129,15 +130,17 @@ static int get_ahb_div(u32 pdr0) ...@@ -129,15 +130,17 @@ static int get_ahb_div(u32 pdr0)
static u32 decode_pll(u32 reg, u32 infreq) static u32 decode_pll(u32 reg, u32 infreq)
{ {
u32 mfi = (reg >> 10) & 0xf; u32 mfi = (reg >> 10) & 0xf;
u32 mfn = reg & 0x3f; s32 mfn = reg & 0x3ff;
u32 mfd = (reg >> 16) & 0x3f; u32 mfd = (reg >> 16) & 0x3ff;
u32 pd = (reg >> 26) & 0xf; u32 pd = (reg >> 26) & 0xf;
mfi = mfi <= 5 ? 5 : mfi; mfi = mfi <= 5 ? 5 : mfi;
mfn = mfn >= 512 ? mfn - 1024 : mfn;
mfd += 1; mfd += 1;
pd += 1; pd += 1;
return ((2 * (infreq / 1000) * (mfi * mfd + mfn)) / (mfd * pd)) * 1000; return lldiv(2 * (u64)infreq * (mfi * mfd + mfn),
mfd * pd);
} }
static u32 get_mcu_main_clk(void) static u32 get_mcu_main_clk(void)
...@@ -146,9 +149,7 @@ static u32 get_mcu_main_clk(void) ...@@ -146,9 +149,7 @@ static u32 get_mcu_main_clk(void)
struct ccm_regs *ccm = struct ccm_regs *ccm =
(struct ccm_regs *)IMX_CCM_BASE; (struct ccm_regs *)IMX_CCM_BASE;
arm_div = get_arm_div(readl(&ccm->pdr0), &fi, &fd); arm_div = get_arm_div(readl(&ccm->pdr0), &fi, &fd);
fi *= fi *= decode_pll(readl(&ccm->mpctl), MXC_HCLK);
decode_pll(readl(&ccm->mpctl),
CONFIG_MX35_HCLK_FREQ);
return fi / (arm_div * fd); return fi / (arm_div * fd);
} }
...@@ -171,17 +172,14 @@ static u32 get_ipg_per_clk(void) ...@@ -171,17 +172,14 @@ static u32 get_ipg_per_clk(void)
u32 pdr4 = readl(&ccm->pdr4); u32 pdr4 = readl(&ccm->pdr4);
u32 div; u32 div;
if (pdr0 & MXC_CCM_PDR0_PER_SEL) { if (pdr0 & MXC_CCM_PDR0_PER_SEL) {
div = (CCM_GET_DIVIDER(pdr4, div = CCM_GET_DIVIDER(pdr4,
MXC_CCM_PDR4_PER0_PRDF_MASK,
MXC_CCM_PDR4_PER0_PODF_OFFSET) + 1) *
(CCM_GET_DIVIDER(pdr4,
MXC_CCM_PDR4_PER0_PODF_MASK, MXC_CCM_PDR4_PER0_PODF_MASK,
MXC_CCM_PDR4_PER0_PODF_OFFSET) + 1); MXC_CCM_PDR4_PER0_PODF_OFFSET) + 1;
} else { } else {
div = CCM_GET_DIVIDER(pdr0, div = CCM_GET_DIVIDER(pdr0,
MXC_CCM_PDR0_PER_PODF_MASK, MXC_CCM_PDR0_PER_PODF_MASK,
MXC_CCM_PDR0_PER_PODF_OFFSET) + 1; MXC_CCM_PDR0_PER_PODF_OFFSET) + 1;
freq /= get_ahb_div(pdr0); div *= get_ahb_div(pdr0);
} }
return freq / div; return freq / div;
} }
...@@ -193,25 +191,20 @@ u32 imx_get_uartclk(void) ...@@ -193,25 +191,20 @@ u32 imx_get_uartclk(void)
(struct ccm_regs *)IMX_CCM_BASE; (struct ccm_regs *)IMX_CCM_BASE;
u32 pdr4 = readl(&ccm->pdr4); u32 pdr4 = readl(&ccm->pdr4);
if (readl(&ccm->pdr3) & MXC_CCM_PDR3_UART_M_U) { if (readl(&ccm->pdr3) & MXC_CCM_PDR3_UART_M_U)
freq = get_mcu_main_clk(); freq = get_mcu_main_clk();
} else { else
freq = decode_pll(readl(&ccm->ppctl), freq = decode_pll(readl(&ccm->ppctl), MXC_HCLK);
CONFIG_MX35_HCLK_FREQ); freq /= CCM_GET_DIVIDER(pdr4,
}
freq /= ((CCM_GET_DIVIDER(pdr4,
MXC_CCM_PDR4_UART_PRDF_MASK,
MXC_CCM_PDR4_UART_PRDF_OFFSET) + 1) *
(CCM_GET_DIVIDER(pdr4,
MXC_CCM_PDR4_UART_PODF_MASK, MXC_CCM_PDR4_UART_PODF_MASK,
MXC_CCM_PDR4_UART_PODF_OFFSET) + 1)); MXC_CCM_PDR4_UART_PODF_OFFSET) + 1;
return freq; return freq;
} }
unsigned int mxc_get_main_clock(enum mxc_main_clock clk) unsigned int mxc_get_main_clock(enum mxc_main_clock clk)
{ {
u32 nfc_pdf, hsp_podf; u32 nfc_pdf, hsp_podf;
u32 pll, ret_val = 0, usb_prdf, usb_podf; u32 pll, ret_val = 0, usb_podf;
struct ccm_regs *ccm = struct ccm_regs *ccm =
(struct ccm_regs *)IMX_CCM_BASE; (struct ccm_regs *)IMX_CCM_BASE;
...@@ -255,16 +248,13 @@ unsigned int mxc_get_main_clock(enum mxc_main_clock clk) ...@@ -255,16 +248,13 @@ unsigned int mxc_get_main_clock(enum mxc_main_clock clk)
ret_val = pll / (nfc_pdf + 1); ret_val = pll / (nfc_pdf + 1);
break; break;
case USB_CLK: case USB_CLK:
usb_prdf = (reg4 >> 25) & 0x7; usb_podf = (reg4 >> 22) & 0x3F;
usb_podf = (reg4 >> 22) & 0x7; if (reg4 & 0x200)
if (reg4 & 0x200) {
pll = get_mcu_main_clk(); pll = get_mcu_main_clk();
} else { else
pll = decode_pll(readl(&ccm->ppctl), pll = decode_pll(readl(&ccm->ppctl), MXC_HCLK);
CONFIG_MX35_HCLK_FREQ);
}
ret_val = pll / ((usb_prdf + 1) * (usb_podf + 1)); ret_val = pll / (usb_podf + 1);
break; break;
default: default:
printf("Unknown clock: %d\n", clk); printf("Unknown clock: %d\n", clk);
...@@ -287,18 +277,16 @@ unsigned int mxc_get_peri_clock(enum mxc_peri_clock clk) ...@@ -287,18 +277,16 @@ unsigned int mxc_get_peri_clock(enum mxc_peri_clock clk)
case UART2_BAUD: case UART2_BAUD:
case UART3_BAUD: case UART3_BAUD:
clk_sel = mpdr3 & (1 << 14); clk_sel = mpdr3 & (1 << 14);
pre_pdf = (mpdr4 >> 13) & 0x7; pdf = (mpdr4 >> 10) & 0x3F;
pdf = (mpdr4 >> 10) & 0x7;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) / (pdf + 1);
((pre_pdf + 1) * (pdf + 1));
break; break;
case SSI1_BAUD: case SSI1_BAUD:
pre_pdf = (mpdr2 >> 24) & 0x7; pre_pdf = (mpdr2 >> 24) & 0x7;
pdf = mpdr2 & 0x3F; pdf = mpdr2 & 0x3F;
clk_sel = mpdr2 & (1 << 6); clk_sel = mpdr2 & (1 << 6);
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) /
((pre_pdf + 1) * (pdf + 1)); ((pre_pdf + 1) * (pdf + 1));
break; break;
case SSI2_BAUD: case SSI2_BAUD:
...@@ -306,16 +294,14 @@ unsigned int mxc_get_peri_clock(enum mxc_peri_clock clk) ...@@ -306,16 +294,14 @@ unsigned int mxc_get_peri_clock(enum mxc_peri_clock clk)
pdf = (mpdr2 >> 8) & 0x3F; pdf = (mpdr2 >> 8) & 0x3F;
clk_sel = mpdr2 & (1 << 6); clk_sel = mpdr2 & (1 << 6);
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) /
((pre_pdf + 1) * (pdf + 1)); ((pre_pdf + 1) * (pdf + 1));
break; break;
case CSI_BAUD: case CSI_BAUD:
clk_sel = mpdr2 & (1 << 7); clk_sel = mpdr2 & (1 << 7);
pre_pdf = (mpdr2 >> 16) & 0x7; pdf = (mpdr2 >> 16) & 0x3F;
pdf = (mpdr2 >> 19) & 0x7;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) / (pdf + 1);
((pre_pdf + 1) * (pdf + 1));
break; break;
case MSHC_CLK: case MSHC_CLK:
pre_pdf = readl(&ccm->pdr1); pre_pdf = readl(&ccm->pdr1);
...@@ -323,39 +309,33 @@ unsigned int mxc_get_peri_clock(enum mxc_peri_clock clk) ...@@ -323,39 +309,33 @@ unsigned int mxc_get_peri_clock(enum mxc_peri_clock clk)
pdf = (pre_pdf >> 22) & 0x3F; pdf = (pre_pdf >> 22) & 0x3F;
pre_pdf = (pre_pdf >> 28) & 0x7; pre_pdf = (pre_pdf >> 28) & 0x7;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) /
((pre_pdf + 1) * (pdf + 1)); ((pre_pdf + 1) * (pdf + 1));
break; break;
case ESDHC1_CLK: case ESDHC1_CLK:
clk_sel = mpdr3 & 0x40; clk_sel = mpdr3 & 0x40;
pre_pdf = mpdr3 & 0x7; pdf = mpdr3 & 0x3F;
pdf = (mpdr3>>3) & 0x7;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) / (pdf + 1);
((pre_pdf + 1) * (pdf + 1));
break; break;
case ESDHC2_CLK: case ESDHC2_CLK:
clk_sel = mpdr3 & 0x40; clk_sel = mpdr3 & 0x40;
pre_pdf = (mpdr3 >> 8) & 0x7; pdf = (mpdr3 >> 8) & 0x3F;
pdf = (mpdr3 >> 11) & 0x7;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) / (pdf + 1);
((pre_pdf + 1) * (pdf + 1));
break; break;
case ESDHC3_CLK: case ESDHC3_CLK:
clk_sel = mpdr3 & 0x40; clk_sel = mpdr3 & 0x40;
pre_pdf = (mpdr3 >> 16) & 0x7; pdf = (mpdr3 >> 16) & 0x3F;
pdf = (mpdr3 >> 19) & 0x7;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) / (pdf + 1);
((pre_pdf + 1) * (pdf + 1));
break; break;
case SPDIF_CLK: case SPDIF_CLK:
clk_sel = mpdr3 & 0x400000; clk_sel = mpdr3 & 0x400000;
pre_pdf = (mpdr3 >> 29) & 0x7; pre_pdf = (mpdr3 >> 29) & 0x7;
pdf = (mpdr3 >> 23) & 0x3F; pdf = (mpdr3 >> 23) & 0x3F;
ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) : ret_val = ((clk_sel != 0) ? mxc_get_main_clock(CPU_CLK) :
decode_pll(readl(&ccm->ppctl), CONFIG_MX35_HCLK_FREQ)) / decode_pll(readl(&ccm->ppctl), MXC_HCLK)) /
((pre_pdf + 1) * (pdf + 1)); ((pre_pdf + 1) * (pdf + 1));
break; break;
default: default:
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <div64.h> #include <div64.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <asm/arch/crm_regs.h>
#include <asm/arch/clock.h> #include <asm/arch/clock.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -37,43 +38,52 @@ DECLARE_GLOBAL_DATA_PTR; ...@@ -37,43 +38,52 @@ DECLARE_GLOBAL_DATA_PTR;
/* General purpose timers bitfields */ /* General purpose timers bitfields */
#define GPTCR_SWR (1<<15) /* Software reset */ #define GPTCR_SWR (1<<15) /* Software reset */
#define GPTCR_FRR (1<<9) /* Freerun / restart */ #define GPTCR_FRR (1<<9) /* Freerun / restart */
#define GPTCR_CLKSOURCE_32 (0x100<<6) /* Clock source */ #define GPTCR_CLKSOURCE_32 (4<<6) /* Clock source */
#define GPTCR_CLKSOURCE_IPG (0x001<<6) /* Clock source */
#define GPTCR_TEN (1) /* Timer enable */ #define GPTCR_TEN (1) /* Timer enable */
#define TIMER_FREQ_HZ mxc_get_clock(MXC_IPG_CLK) /*
* "time" is measured in 1 / CONFIG_SYS_HZ seconds,
* "tick" is internal timer period
*/
/* ~0.4% error - measured with stop-watch on 100s boot-delay */
static inline unsigned long long tick_to_time(unsigned long long tick) static inline unsigned long long tick_to_time(unsigned long long tick)
{ {
tick *= CONFIG_SYS_HZ; tick *= CONFIG_SYS_HZ;
do_div(tick, TIMER_FREQ_HZ); do_div(tick, MXC_CLK32);
return tick; return tick;
} }
static inline unsigned long long us_to_tick(unsigned long long usec) static inline unsigned long long us_to_tick(unsigned long long us)
{ {
usec *= TIMER_FREQ_HZ; us = us * MXC_CLK32 + 999999;
do_div(usec, 1000000); do_div(us, 1000000);
return usec; return us;
} }
/*
* nothing really to do with interrupts, just starts up a counter.
* The 32KHz 32-bit timer overruns in 134217 seconds
*/
int timer_init(void) int timer_init(void)
{ {
int i; int i;
struct gpt_regs *gpt = (struct gpt_regs *)GPT1_BASE_ADDR; struct gpt_regs *gpt = (struct gpt_regs *)GPT1_BASE_ADDR;
struct ccm_regs *ccm = (struct ccm_regs *)CCM_BASE_ADDR;
/* setup GP Timer 1 */ /* setup GP Timer 1 */
writel(GPTCR_SWR, &gpt->ctrl); writel(GPTCR_SWR, &gpt->ctrl);
for (i = 0; i < 100; i++)
writel(0, &gpt->ctrl); /* We have no udelay by now */
writel(0, &gpt->pre); writel(readl(&ccm->cgr1) | 3 << MXC_CCM_CGR1_GPT_OFFSET, &ccm->cgr1);
/* Freerun Mode, PERCLK1 input */
writel(readl(&gpt->ctrl) | for (i = 0; i < 100; i++)
GPTCR_CLKSOURCE_IPG | GPTCR_TEN, writel(0, &gpt->ctrl); /* We have no udelay by now */
&gpt->ctrl); writel(0, &gpt->pre); /* prescaler = 1 */
/* Freerun Mode, 32KHz input */
writel(readl(&gpt->ctrl) | GPTCR_CLKSOURCE_32 | GPTCR_FRR,
&gpt->ctrl);
writel(readl(&gpt->ctrl) | GPTCR_TEN, &gpt->ctrl);
return 0; return 0;
} }
...@@ -101,7 +111,7 @@ ulong get_timer_masked(void) ...@@ -101,7 +111,7 @@ ulong get_timer_masked(void)
{ {
/* /*
* get_ticks() returns a long long (64 bit), it wraps in * get_ticks() returns a long long (64 bit), it wraps in
* 2^64 / CONFIG_MX25_CLK32 = 2^64 / 2^15 = 2^49 ~ 5 * 10^14 (s) ~ * 2^64 / MXC_CLK32 = 2^64 / 2^15 = 2^49 ~ 5 * 10^14 (s) ~
* 5 * 10^9 days... and get_ticks() * CONFIG_SYS_HZ wraps in * 5 * 10^9 days... and get_ticks() * CONFIG_SYS_HZ wraps in
* 5 * 10^6 days - long enough. * 5 * 10^6 days - long enough.
*/ */
...@@ -132,5 +142,5 @@ void __udelay(unsigned long usec) ...@@ -132,5 +142,5 @@ void __udelay(unsigned long usec)
*/ */
ulong get_tbclk(void) ulong get_tbclk(void)
{ {
return TIMER_FREQ_HZ; return MXC_CLK32;
} }
...@@ -105,14 +105,14 @@ static void enable_cpu_clock(int enable) ...@@ -105,14 +105,14 @@ static void enable_cpu_clock(int enable)
static int is_cpu_powered(void) static int is_cpu_powered(void)
{ {
struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
return (readl(&pmc->pmc_pwrgate_status) & CPU_PWRED) ? 1 : 0; return (readl(&pmc->pmc_pwrgate_status) & CPU_PWRED) ? 1 : 0;
} }
static void remove_cpu_io_clamps(void) static void remove_cpu_io_clamps(void)
{ {
struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
u32 reg; u32 reg;
/* Remove the clamps on the CPU I/O signals */ /* Remove the clamps on the CPU I/O signals */
...@@ -126,7 +126,7 @@ static void remove_cpu_io_clamps(void) ...@@ -126,7 +126,7 @@ static void remove_cpu_io_clamps(void)
static void powerup_cpu(void) static void powerup_cpu(void)
{ {
struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
u32 reg; u32 reg;
int timeout = IO_STABILIZATION_DELAY; int timeout = IO_STABILIZATION_DELAY;
...@@ -157,7 +157,7 @@ static void powerup_cpu(void) ...@@ -157,7 +157,7 @@ static void powerup_cpu(void)
static void enable_cpu_power_rail(void) static void enable_cpu_power_rail(void)
{ {
struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
u32 reg; u32 reg;
reg = readl(&pmc->pmc_cntrl); reg = readl(&pmc->pmc_cntrl);
......
...@@ -64,7 +64,7 @@ static unsigned int imx_decode_pll(unsigned int pll, unsigned int f_ref) ...@@ -64,7 +64,7 @@ static unsigned int imx_decode_pll(unsigned int pll, unsigned int f_ref)
static ulong imx_get_mpllclk(void) static ulong imx_get_mpllclk(void)
{ {
struct ccm_regs *ccm = (struct ccm_regs *)IMX_CCM_BASE; struct ccm_regs *ccm = (struct ccm_regs *)IMX_CCM_BASE;
ulong fref = 24000000; ulong fref = MXC_HCLK;
return imx_decode_pll(readl(&ccm->mpctl), fref); return imx_decode_pll(readl(&ccm->mpctl), fref);
} }
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <div64.h> #include <div64.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -55,28 +56,27 @@ DECLARE_GLOBAL_DATA_PTR; ...@@ -55,28 +56,27 @@ DECLARE_GLOBAL_DATA_PTR;
static inline unsigned long long tick_to_time(unsigned long long tick) static inline unsigned long long tick_to_time(unsigned long long tick)
{ {
tick *= CONFIG_SYS_HZ; tick *= CONFIG_SYS_HZ;
do_div(tick, CONFIG_MX25_CLK32); do_div(tick, MXC_CLK32);
return tick; return tick;
} }
static inline unsigned long long time_to_tick(unsigned long long time) static inline unsigned long long time_to_tick(unsigned long long time)
{ {
time *= CONFIG_MX25_CLK32; time *= MXC_CLK32;
do_div(time, CONFIG_SYS_HZ); do_div(time, CONFIG_SYS_HZ);
return time; return time;
} }
static inline unsigned long long us_to_tick(unsigned long long us) static inline unsigned long long us_to_tick(unsigned long long us)
{ {
us = us * CONFIG_MX25_CLK32 + 999999; us = us * MXC_CLK32 + 999999;
do_div(us, 1000000); do_div(us, 1000000);
return us; return us;
} }
#else #else
/* ~2% error */ /* ~2% error */
#define TICK_PER_TIME ((CONFIG_MX25_CLK32 + CONFIG_SYS_HZ / 2) / \ #define TICK_PER_TIME ((MXC_CLK32 + CONFIG_SYS_HZ / 2) / CONFIG_SYS_HZ)
CONFIG_SYS_HZ) #define US_PER_TICK (1000000 / MXC_CLK32)
#define US_PER_TICK (1000000 / CONFIG_MX25_CLK32)
static inline unsigned long long tick_to_time(unsigned long long tick) static inline unsigned long long tick_to_time(unsigned long long tick)
{ {
...@@ -144,7 +144,7 @@ ulong get_timer_masked(void) ...@@ -144,7 +144,7 @@ ulong get_timer_masked(void)
{ {
/* /*
* get_ticks() returns a long long (64 bit), it wraps in * get_ticks() returns a long long (64 bit), it wraps in
* 2^64 / CONFIG_MX25_CLK32 = 2^64 / 2^15 = 2^49 ~ 5 * 10^14 (s) ~ * 2^64 / MXC_CLK32 = 2^64 / 2^15 = 2^49 ~ 5 * 10^14 (s) ~
* 5 * 10^9 days... and get_ticks() * CONFIG_SYS_HZ wraps in * 5 * 10^9 days... and get_ticks() * CONFIG_SYS_HZ wraps in
* 5 * 10^6 days - long enough. * 5 * 10^6 days - long enough.
*/ */
...@@ -177,6 +177,6 @@ ulong get_tbclk(void) ...@@ -177,6 +177,6 @@ ulong get_tbclk(void)
{ {
ulong tbclk; ulong tbclk;
tbclk = CONFIG_MX25_CLK32; tbclk = MXC_CLK32;
return tbclk; return tbclk;
} }
...@@ -38,12 +38,14 @@ ...@@ -38,12 +38,14 @@
* takes a few seconds to roll. The boot doesn't take that long, so to keep the * takes a few seconds to roll. The boot doesn't take that long, so to keep the
* code simple, it doesn't take rolling into consideration. * code simple, it doesn't take rolling into consideration.
*/ */
#define HW_DIGCTRL_MICROSECONDS 0x8001c0c0
void early_delay(int delay) void early_delay(int delay)
{ {
uint32_t st = readl(HW_DIGCTRL_MICROSECONDS); struct mxs_digctl_regs *digctl_regs =
(struct mxs_digctl_regs *)MXS_DIGCTL_BASE;
uint32_t st = readl(&digctl_regs->hw_digctl_microseconds);
st += delay; st += delay;
while (st > readl(HW_DIGCTRL_MICROSECONDS)) while (st > readl(&digctl_regs->hw_digctl_microseconds))
; ;
} }
......
...@@ -292,7 +292,9 @@ int arch_misc_init(void) ...@@ -292,7 +292,9 @@ int arch_misc_init(void)
writel(ORION5X_MPP0_7, ORION5X_MPP_BASE+0x00); writel(ORION5X_MPP0_7, ORION5X_MPP_BASE+0x00);
writel(ORION5X_MPP8_15, ORION5X_MPP_BASE+0x04); writel(ORION5X_MPP8_15, ORION5X_MPP_BASE+0x04);
writel(ORION5X_MPP16_23, ORION5X_MPP_BASE+0x50); writel(ORION5X_MPP16_23, ORION5X_MPP_BASE+0x50);
writel(ORION5X_GPIO_OUT_VALUE, ORION5X_GPIO_BASE+0x00);
writel(ORION5X_GPIO_OUT_ENABLE, ORION5X_GPIO_BASE+0x04); writel(ORION5X_GPIO_OUT_ENABLE, ORION5X_GPIO_BASE+0x04);
writel(ORION5X_GPIO_IN_POLARITY, ORION5X_GPIO_BASE+0x0c);
/* initialize timer */ /* initialize timer */
timer_init_r(); timer_init_r();
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE; struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE;
struct gptimer *timer_base = (struct gptimer *)CONFIG_SYS_TIMERBASE;
struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE; struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE;
static const struct gpio_bank gpio_bank_am33xx[4] = { static const struct gpio_bank gpio_bank_am33xx[4] = {
...@@ -119,22 +118,6 @@ static int read_eeprom(void) ...@@ -119,22 +118,6 @@ static int read_eeprom(void)
#define UART_SMART_IDLE_EN (0x1 << 0x3) #define UART_SMART_IDLE_EN (0x1 << 0x3)
#endif #endif
#ifdef CONFIG_SPL_BUILD
/* Initialize timer */
static void init_timer(void)
{
/* Reset the Timer */
writel(0x2, (&timer_base->tscir));
/* Wait until the reset is done */
while (readl(&timer_base->tiocp_cfg) & 1)
;
/* Start the Timer */
writel(0x1, (&timer_base->tclr));
}
#endif
/* /*
* Determine what type of DDR we have. * Determine what type of DDR we have.
*/ */
...@@ -183,9 +166,6 @@ void s_init(void) ...@@ -183,9 +166,6 @@ void s_init(void)
regVal |= UART_SMART_IDLE_EN; regVal |= UART_SMART_IDLE_EN;
writel(regVal, &uart_base->uartsyscfg); writel(regVal, &uart_base->uartsyscfg);
/* Initialize the Timer */
init_timer();
preloader_console_init(); preloader_console_init();
/* Initalize the board header */ /* Initalize the board header */
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
static int do_enterrcm(cmd_tbl_t *cmdtp, int flag, int argc, static int do_enterrcm(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[]) char * const argv[])
{ {
struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
puts("Entering RCM...\n"); puts("Entering RCM...\n");
udelay(50000); udelay(50000);
......
...@@ -137,24 +137,29 @@ static const u8 utmip_elastic_limit = 16; ...@@ -137,24 +137,29 @@ static const u8 utmip_elastic_limit = 16;
/* UTMIP High Speed Sync Start Delay */ /* UTMIP High Speed Sync Start Delay */
static const u8 utmip_hs_sync_start_delay = 9; static const u8 utmip_hs_sync_start_delay = 9;
/* Put the port into host mode (this only works for OTG ports) */ /* Put the port into host mode */
static void set_host_mode(struct fdt_usb *config) 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 we are an OTG port, check if remote host is driving VBus and
if (readl(&config->reg->phy_vbus_sensors) & VBUS_VLD_STS) * bail out in this case.
return; */
if (config->dr_mode == DR_MODE_OTG &&
/* (readl(&config->reg->phy_vbus_sensors) & VBUS_VLD_STS))
* If not driving, we set the GPIO to enable VBUS. We assume return;
* that the pinmux is set up correctly for this.
*/ /*
if (fdt_gpio_isvalid(&config->vbus_gpio)) { * If not driving, we set the GPIO to enable VBUS. We assume
fdtdec_setup_gpio(&config->vbus_gpio); * that the pinmux is set up correctly for this.
gpio_direction_output(config->vbus_gpio.gpio, 1); */
debug("set_host_mode: GPIO %d high\n", if (fdt_gpio_isvalid(&config->vbus_gpio)) {
config->vbus_gpio.gpio); fdtdec_setup_gpio(&config->vbus_gpio);
} gpio_direction_output(config->vbus_gpio.gpio,
(config->vbus_gpio.flags & FDT_GPIO_ACTIVE_LOW) ?
0 : 1);
debug("set_host_mode: GPIO %d %s\n", config->vbus_gpio.gpio,
(config->vbus_gpio.flags & FDT_GPIO_ACTIVE_LOW) ?
"low" : "high");
} }
} }
......
...@@ -33,7 +33,7 @@ LIB = $(obj)lib$(SOC)-common.o ...@@ -33,7 +33,7 @@ LIB = $(obj)lib$(SOC)-common.o
SOBJS += lowlevel_init.o SOBJS += lowlevel_init.o
COBJS-y += ap20.o board.o clock.o funcmux.o pinmux.o sys_info.o timer.o COBJS-y += ap20.o board.o clock.o funcmux.o pinmux.o sys_info.o timer.o
COBJS-$(CONFIG_TEGRA20_LP0) += warmboot.o crypto.o warmboot_avp.o COBJS-$(CONFIG_TEGRA_LP0) += warmboot.o crypto.o warmboot_avp.o
COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o
COBJS-$(CONFIG_TEGRA_PMU) += pmu.o COBJS-$(CONFIG_TEGRA_PMU) += pmu.o
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
int tegra_get_chip_type(void) int tegra_get_chip_type(void)
{ {
struct apb_misc_gp_ctlr *gp; struct apb_misc_gp_ctlr *gp;
struct fuse_regs *fuse = (struct fuse_regs *)TEGRA20_FUSE_BASE; struct fuse_regs *fuse = (struct fuse_regs *)NV_PA_FUSE_BASE;
uint tegra_sku_id, rev; uint tegra_sku_id, rev;
/* /*
...@@ -40,7 +40,7 @@ int tegra_get_chip_type(void) ...@@ -40,7 +40,7 @@ int tegra_get_chip_type(void)
* APB_MISC + 0x804, and has value 0x20 for Tegra20, 0x30 for * APB_MISC + 0x804, and has value 0x20 for Tegra20, 0x30 for
* Tegra30 * Tegra30
*/ */
gp = (struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE; gp = (struct apb_misc_gp_ctlr *)NV_PA_APB_MISC_GP_BASE;
rev = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >> HIDREV_CHIPID_SHIFT; rev = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >> HIDREV_CHIPID_SHIFT;
tegra_sku_id = readl(&fuse->sku_info) & 0xff; tegra_sku_id = readl(&fuse->sku_info) & 0xff;
...@@ -101,7 +101,7 @@ static u32 get_odmdata(void) ...@@ -101,7 +101,7 @@ static u32 get_odmdata(void)
static void init_pmc_scratch(void) static void init_pmc_scratch(void)
{ {
struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *const pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
u32 odmdata; u32 odmdata;
int i; int i;
......
...@@ -47,7 +47,7 @@ enum { ...@@ -47,7 +47,7 @@ enum {
unsigned int query_sdram_size(void) unsigned int query_sdram_size(void)
{ {
struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA20_PMC_BASE; struct pmc_ctlr *const pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
u32 reg; u32 reg;
reg = readl(&pmc->pmc_scratch20); reg = readl(&pmc->pmc_scratch20);
...@@ -81,11 +81,11 @@ int checkboard(void) ...@@ -81,11 +81,11 @@ int checkboard(void)
#endif /* CONFIG_DISPLAY_BOARDINFO */ #endif /* CONFIG_DISPLAY_BOARDINFO */
static int uart_configs[] = { static int uart_configs[] = {
#if defined(CONFIG_TEGRA20_UARTA_UAA_UAB) #if defined(CONFIG_TEGRA_UARTA_UAA_UAB)
FUNCMUX_UART1_UAA_UAB, FUNCMUX_UART1_UAA_UAB,
#elif defined(CONFIG_TEGRA20_UARTA_GPU) #elif defined(CONFIG_TEGRA_UARTA_GPU)
FUNCMUX_UART1_GPU, FUNCMUX_UART1_GPU,
#elif defined(CONFIG_TEGRA20_UARTA_SDIO1) #elif defined(CONFIG_TEGRA_UARTA_SDIO1)
FUNCMUX_UART1_SDIO1, FUNCMUX_UART1_SDIO1,
#else #else
FUNCMUX_UART1_IRRX_IRTX, FUNCMUX_UART1_IRRX_IRTX,
...@@ -125,13 +125,13 @@ void board_init_uart_f(void) ...@@ -125,13 +125,13 @@ void board_init_uart_f(void)
{ {
int uart_ids = 0; /* bit mask of which UART ids to enable */ int uart_ids = 0; /* bit mask of which UART ids to enable */
#ifdef CONFIG_TEGRA20_ENABLE_UARTA #ifdef CONFIG_TEGRA_ENABLE_UARTA
uart_ids |= UARTA; uart_ids |= UARTA;
#endif #endif
#ifdef CONFIG_TEGRA20_ENABLE_UARTB #ifdef CONFIG_TEGRA_ENABLE_UARTB
uart_ids |= UARTB; uart_ids |= UARTB;
#endif #endif
#ifdef CONFIG_TEGRA20_ENABLE_UARTD #ifdef CONFIG_TEGRA_ENABLE_UARTD
uart_ids |= UARTD; uart_ids |= UARTD;
#endif #endif
setup_uarts(uart_ids); setup_uarts(uart_ids);
......
...@@ -234,6 +234,13 @@ int funcmux_select(enum periph_id id, int config) ...@@ -234,6 +234,13 @@ int funcmux_select(enum periph_id id, int config)
} }
break; break;
case PERIPH_ID_NDFLASH:
if (config == FUNCMUX_NDFLASH_ATC) {
pinmux_set_func(PINGRP_ATC, PMUX_FUNC_NAND);
pinmux_tristate_disable(PINGRP_ATC);
}
break;
default: default:
debug("%s: invalid periph_id %d", __func__, id); debug("%s: invalid periph_id %d", __func__, id);
return -1; return -1;
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
#ifndef CONFIG_TEGRA_CLOCK_SCALING #ifndef CONFIG_TEGRA_CLOCK_SCALING
#error "You must enable CONFIG_TEGRA_CLOCK_SCALING to use CONFIG_TEGRA20_LP0" #error "You must enable CONFIG_TEGRA_CLOCK_SCALING to use CONFIG_TEGRA_LP0"
#endif #endif
/* /*
...@@ -139,9 +139,9 @@ int warmboot_save_sdram_params(void) ...@@ -139,9 +139,9 @@ int warmboot_save_sdram_params(void)
u32 ram_code; u32 ram_code;
struct sdram_params sdram; struct sdram_params sdram;
struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE; 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 pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
struct apb_misc_gp_ctlr *gp = struct apb_misc_gp_ctlr *gp =
(struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE; (struct apb_misc_gp_ctlr *)NV_PA_APB_MISC_GP_BASE;
struct emc_ctlr *emc = emc_get_controller(gd->fdt_blob); struct emc_ctlr *emc = emc_get_controller(gd->fdt_blob);
union scratch2_reg scratch2; union scratch2_reg scratch2;
union scratch4_reg scratch4; union scratch4_reg scratch4;
...@@ -205,7 +205,7 @@ static u32 get_major_version(void) ...@@ -205,7 +205,7 @@ static u32 get_major_version(void)
{ {
u32 major_id; u32 major_id;
struct apb_misc_gp_ctlr *gp = struct apb_misc_gp_ctlr *gp =
(struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE; (struct apb_misc_gp_ctlr *)NV_PA_APB_MISC_GP_BASE;
major_id = (readl(&gp->hidrev) & HIDREV_MAJORPREV_MASK) >> major_id = (readl(&gp->hidrev) & HIDREV_MAJORPREV_MASK) >>
HIDREV_MAJORPREV_SHIFT; HIDREV_MAJORPREV_SHIFT;
...@@ -229,7 +229,7 @@ static int is_failure_analysis_mode(struct fuse_regs *fuse) ...@@ -229,7 +229,7 @@ static int is_failure_analysis_mode(struct fuse_regs *fuse)
static int ap20_is_odm_production_mode(void) static int ap20_is_odm_production_mode(void)
{ {
struct fuse_regs *fuse = (struct fuse_regs *)TEGRA20_FUSE_BASE; struct fuse_regs *fuse = (struct fuse_regs *)NV_PA_FUSE_BASE;
if (!is_failure_analysis_mode(fuse) && if (!is_failure_analysis_mode(fuse) &&
is_odm_production_mode_fuse_set(fuse)) is_odm_production_mode_fuse_set(fuse))
...@@ -240,7 +240,7 @@ static int ap20_is_odm_production_mode(void) ...@@ -240,7 +240,7 @@ static int ap20_is_odm_production_mode(void)
static int ap20_is_production_mode(void) static int ap20_is_production_mode(void)
{ {
struct fuse_regs *fuse = (struct fuse_regs *)TEGRA20_FUSE_BASE; struct fuse_regs *fuse = (struct fuse_regs *)NV_PA_FUSE_BASE;
if (get_major_version() == 0) if (get_major_version() == 0)
return 1; return 1;
...@@ -257,7 +257,7 @@ static enum fuse_operating_mode fuse_get_operation_mode(void) ...@@ -257,7 +257,7 @@ static enum fuse_operating_mode fuse_get_operation_mode(void)
{ {
u32 chip_id; u32 chip_id;
struct apb_misc_gp_ctlr *gp = struct apb_misc_gp_ctlr *gp =
(struct apb_misc_gp_ctlr *)TEGRA20_APB_MISC_GP_BASE; (struct apb_misc_gp_ctlr *)NV_PA_APB_MISC_GP_BASE;
chip_id = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >> chip_id = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >>
HIDREV_CHIPID_SHIFT; HIDREV_CHIPID_SHIFT;
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
void wb_start(void) void wb_start(void)
{ {
struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE; 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 pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE;
struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE; struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE;
struct clk_rst_ctlr *clkrst = struct clk_rst_ctlr *clkrst =
(struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE; (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
......
...@@ -204,4 +204,11 @@ ...@@ -204,4 +204,11 @@
compatible = "nvidia,tegra20-kbc"; compatible = "nvidia,tegra20-kbc";
reg = <0x7000e200 0x0078>; reg = <0x7000e200 0x0078>;
}; };
nand: nand-controller@70008000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "nvidia,tegra20-nand";
reg = <0x70008000 0x100>;
};
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment