Merge branch 'for-next/arm-errata'
Conflicts: arch/arm/boards/phytec-phyflex-imx6/lowlevel.c
This commit is contained in:
commit
9bcf0bcc06
|
@ -1,5 +1,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ ENTRY_FUNCTION(start_imx6q_nitrogen6x_1g, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6q_nitrogen6x_start - get_runtime_offset();
|
fdt = __dtb_imx6q_nitrogen6x_start - get_runtime_offset();
|
||||||
|
|
||||||
|
@ -22,7 +23,7 @@ ENTRY_FUNCTION(start_imx6dl_nitrogen6x_1g, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6dl_nitrogen6x_start - get_runtime_offset();
|
fdt = __dtb_imx6dl_nitrogen6x_start - get_runtime_offset();
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
#include <mach/imx6-mmdc.h>
|
#include <mach/imx6-mmdc.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
|
|
||||||
static void sdram_init(void)
|
static void sdram_init(void)
|
||||||
{
|
{
|
||||||
|
@ -142,7 +143,7 @@ ENTRY_FUNCTION(start_imx6_realq7, r0, r1, r2)
|
||||||
unsigned long sdram = 0x10000000;
|
unsigned long sdram = 0x10000000;
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00940000 - 8);
|
arm_setup_stack(0x00940000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
#include <mach/imx6-mmdc.h>
|
#include <mach/imx6-mmdc.h>
|
||||||
#include <mach/imx6-regs.h>
|
#include <mach/imx6-regs.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
|
|
||||||
#include <debug_ll.h>
|
#include <debug_ll.h>
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ ENTRY_FUNCTION(start_imx6q_dfi_fs700_m60_6q_nanya, r0, r1, r2)
|
||||||
void *fdt;
|
void *fdt;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00940000 - 8);
|
arm_setup_stack(0x00940000 - 8);
|
||||||
|
|
||||||
|
@ -125,7 +126,7 @@ ENTRY_FUNCTION(start_imx6q_dfi_fs700_m60_6q_micron, r0, r1, r2)
|
||||||
void *fdt;
|
void *fdt;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00940000 - 8);
|
arm_setup_stack(0x00940000 - 8);
|
||||||
|
|
||||||
|
@ -148,7 +149,7 @@ ENTRY_FUNCTION(start_imx6dl_dfi_fs700_m60_6s, r0, r1, r2)
|
||||||
void *fdt;
|
void *fdt;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ ENTRY_FUNCTION(start_imx6s_riotboard, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_DEBUG_LL)) {
|
if (IS_ENABLED(CONFIG_DEBUG_LL)) {
|
||||||
writel(0x4, 0x020e016c);
|
writel(0x4, 0x020e016c);
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
|
|
||||||
void __naked barebox_arm_reset_vector(void)
|
void __naked barebox_arm_reset_vector(void)
|
||||||
{
|
{
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
barebox_arm_entry(0x10000000, SZ_2G, NULL);
|
barebox_arm_entry(0x10000000, SZ_2G, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ ENTRY_FUNCTION(start_imx6q_sabrelite, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6q_sabrelite_start - get_runtime_offset();
|
fdt = __dtb_imx6q_sabrelite_start - get_runtime_offset();
|
||||||
|
|
||||||
|
@ -22,7 +23,7 @@ ENTRY_FUNCTION(start_imx6dl_sabrelite, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6dl_sabrelite_start - get_runtime_offset();
|
fdt = __dtb_imx6dl_sabrelite_start - get_runtime_offset();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ ENTRY_FUNCTION(start_imx6q_sabresd, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6q_sabresd_start - get_runtime_offset();
|
fdt = __dtb_imx6q_sabresd_start - get_runtime_offset();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ ENTRY_FUNCTION(start_imx6_gk802, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6q_gk802_start - get_runtime_offset();
|
fdt = __dtb_imx6q_gk802_start - get_runtime_offset();
|
||||||
barebox_arm_entry(0x10000000, SZ_1G, fdt);
|
barebox_arm_entry(0x10000000, SZ_1G, fdt);
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <mach/imx6-regs.h>
|
#include <mach/imx6-regs.h>
|
||||||
#include <debug_ll.h>
|
#include <debug_ll.h>
|
||||||
|
|
||||||
|
@ -33,7 +34,7 @@ ENTRY_FUNCTION(start_imx6q_guf_santaro, r0, r1, r2)
|
||||||
void *fdt;
|
void *fdt;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ static void __noreturn start_imx6q_phytec_pbaa03_common(uint32_t size)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ ENTRY_FUNCTION(start_phytec_pbab01_1gib, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ ENTRY_FUNCTION(start_phytec_pbab01_2gib, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ ENTRY_FUNCTION(start_phytec_pbab01_4gib, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ ENTRY_FUNCTION(start_phytec_pbab01dl_1gib, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ ENTRY_FUNCTION(start_phytec_pbab01s_512mb, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ ENTRY_FUNCTION(start_imx6dl_hummingboard, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6dl_hummingboard_start - get_runtime_offset();
|
fdt = __dtb_imx6dl_hummingboard_start - get_runtime_offset();
|
||||||
barebox_arm_entry(0x10000000, SZ_512M, fdt);
|
barebox_arm_entry(0x10000000, SZ_512M, fdt);
|
||||||
|
|
|
@ -45,7 +45,7 @@ ENTRY_FUNCTION(start_imx6q_mba6x, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ ENTRY_FUNCTION(start_imx6dl_mba6x, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <mach/generic.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ ENTRY_FUNCTION(start_imx6_udoo, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
fdt = __dtb_imx6q_udoo_start - get_runtime_offset();
|
fdt = __dtb_imx6q_udoo_start - get_runtime_offset();
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ ENTRY_FUNCTION(start_variscite_custom, r0, r1, r2)
|
||||||
{
|
{
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
imx6_cpu_lowlevel_init();
|
||||||
|
|
||||||
arm_setup_stack(0x00920000 - 8);
|
arm_setup_stack(0x00920000 - 8);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Lucas Stach, Pengutronix
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline void enable_arm_errata_716044_war(void)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mrc p15, 0, r0, c1, c0, 0\n"
|
||||||
|
"orr r0, r0, #1 << 11\n"
|
||||||
|
"mcr p15, 0, r0, c1, c0, 0\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void enable_arm_errata_742230_war(void)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mrc p15, 0, r0, c15, c0, 1\n"
|
||||||
|
"orr r0, r0, #1 << 4\n"
|
||||||
|
"mcr p15, 0, r0, c15, c0, 1\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void enable_arm_errata_743622_war(void)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mrc p15, 0, r0, c15, c0, 1\n"
|
||||||
|
"orr r0, r0, #1 << 6\n"
|
||||||
|
"mcr p15, 0, r0, c15, c0, 1\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void enable_arm_errata_751472_war(void)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mrc p15, 0, r0, c15, c0, 1\n"
|
||||||
|
"orr r0, r0, #1 << 11\n"
|
||||||
|
"mcr p15, 0, r0, c15, c0, 1\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void enable_arm_errata_761320_war(void)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mrc p15, 0, r0, c15, c0, 1\n"
|
||||||
|
"orr r0, r0, #1 << 21\n"
|
||||||
|
"mcr p15, 0, r0, c15, c0, 1\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void enable_arm_errata_794072_war(void)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mrc p15, 0, r0, c15, c0, 1\n"
|
||||||
|
"orr r0, r0, #1 << 4\n"
|
||||||
|
"mcr p15, 0, r0, c15, c0, 1\n"
|
||||||
|
);
|
||||||
|
}
|
|
@ -22,3 +22,4 @@ obj-$(CONFIG_BAREBOX_UPDATE) += imx-bbu-internal.o
|
||||||
obj-$(CONFIG_BAREBOX_UPDATE_IMX_EXTERNAL_NAND) += imx-bbu-external-nand.o
|
obj-$(CONFIG_BAREBOX_UPDATE_IMX_EXTERNAL_NAND) += imx-bbu-external-nand.o
|
||||||
obj-$(CONFIG_BAREBOX_UPDATE_IMX6_NAND) += imx6-bbu-nand.o
|
obj-$(CONFIG_BAREBOX_UPDATE_IMX6_NAND) += imx6-bbu-nand.o
|
||||||
pbl-y += esdctl.o
|
pbl-y += esdctl.o
|
||||||
|
lwl-y += cpu_init.o
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Lucas Stach, Pengutronix
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/barebox-arm-head.h>
|
||||||
|
#include <asm/errata.h>
|
||||||
|
|
||||||
|
void imx6_cpu_lowlevel_init(void)
|
||||||
|
{
|
||||||
|
arm_cpu_lowlevel_init();
|
||||||
|
|
||||||
|
enable_arm_errata_742230_war();
|
||||||
|
enable_arm_errata_743622_war();
|
||||||
|
enable_arm_errata_751472_war();
|
||||||
|
enable_arm_errata_761320_war();
|
||||||
|
enable_arm_errata_794072_war();
|
||||||
|
}
|
|
@ -33,6 +33,8 @@ int imx51_devices_init(void);
|
||||||
int imx53_devices_init(void);
|
int imx53_devices_init(void);
|
||||||
int imx6_devices_init(void);
|
int imx6_devices_init(void);
|
||||||
|
|
||||||
|
void imx6_cpu_lowlevel_init(void);
|
||||||
|
|
||||||
/* There's a off-by-one betweem the gpio bank number and the gpiochip */
|
/* There's a off-by-one betweem the gpio bank number and the gpiochip */
|
||||||
/* range e.g. GPIO_1_5 is gpio 5 under linux */
|
/* range e.g. GPIO_1_5 is gpio 5 under linux */
|
||||||
#define IMX_GPIO_NR(bank, nr) (((bank) - 1) * 32 + (nr))
|
#define IMX_GPIO_NR(bank, nr) (((bank) - 1) * 32 + (nr))
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
#include <asm/barebox-arm-head.h>
|
#include <asm/barebox-arm-head.h>
|
||||||
#include <asm/barebox-arm.h>
|
#include <asm/barebox-arm.h>
|
||||||
|
#include <asm/errata.h>
|
||||||
#include <mach/lowlevel.h>
|
#include <mach/lowlevel.h>
|
||||||
#include <mach/tegra20-pmc.h>
|
#include <mach/tegra20-pmc.h>
|
||||||
#include <mach/tegra20-car.h>
|
#include <mach/tegra20-car.h>
|
||||||
|
@ -30,6 +31,23 @@ void tegra_maincomplex_entry(void)
|
||||||
|
|
||||||
arm_cpu_lowlevel_init();
|
arm_cpu_lowlevel_init();
|
||||||
|
|
||||||
|
chiptype = tegra_get_chiptype();
|
||||||
|
|
||||||
|
/* enable ARM errata workarounds early */
|
||||||
|
switch (chiptype) {
|
||||||
|
case TEGRA20:
|
||||||
|
enable_arm_errata_716044_war();
|
||||||
|
enable_arm_errata_742230_war();
|
||||||
|
enable_arm_errata_751472_war();
|
||||||
|
break;
|
||||||
|
case TEGRA30:
|
||||||
|
enable_arm_errata_743622_war();
|
||||||
|
enable_arm_errata_751472_war();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* switch to PLLX */
|
/* switch to PLLX */
|
||||||
writel(CRC_CCLK_BURST_POLICY_SYS_STATE_RUN <<
|
writel(CRC_CCLK_BURST_POLICY_SYS_STATE_RUN <<
|
||||||
CRC_CCLK_BURST_POLICY_SYS_STATE_SHIFT |
|
CRC_CCLK_BURST_POLICY_SYS_STATE_SHIFT |
|
||||||
|
@ -38,8 +56,6 @@ void tegra_maincomplex_entry(void)
|
||||||
TEGRA_CLK_RESET_BASE + CRC_CCLK_BURST_POLICY);
|
TEGRA_CLK_RESET_BASE + CRC_CCLK_BURST_POLICY);
|
||||||
writel(CRC_SUPER_CDIV_ENB, TEGRA_CLK_RESET_BASE + CRC_SUPER_CCLK_DIV);
|
writel(CRC_SUPER_CDIV_ENB, TEGRA_CLK_RESET_BASE + CRC_SUPER_CCLK_DIV);
|
||||||
|
|
||||||
chiptype = tegra_get_chiptype();
|
|
||||||
|
|
||||||
if (chiptype >= TEGRA114) {
|
if (chiptype >= TEGRA114) {
|
||||||
asm("mrc p15, 1, %0, c9, c0, 2" : : "r" (reg));
|
asm("mrc p15, 1, %0, c9, c0, 2" : : "r" (reg));
|
||||||
reg &= ~7;
|
reg &= ~7;
|
||||||
|
@ -51,6 +67,7 @@ void tegra_maincomplex_entry(void)
|
||||||
case TEGRA20:
|
case TEGRA20:
|
||||||
rambase = 0x0;
|
rambase = 0x0;
|
||||||
ramsize = tegra20_get_ramsize();
|
ramsize = tegra20_get_ramsize();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case TEGRA30:
|
case TEGRA30:
|
||||||
case TEGRA124:
|
case TEGRA124:
|
||||||
|
|
Loading…
Reference in New Issue