|
@@ -415,31 +415,30 @@ static void omap3_emu_romcode_call(u32 service_id, u32 *parameters)
|
|
|
do_omap3_emu_romcode_call(service_id, OMAP3_PUBLIC_SRAM_SCRATCH_AREA);
|
|
|
}
|
|
|
|
|
|
-void v7_arch_cp15_set_acr(u32 acr, u32 cpu_midr, u32 cpu_rev_comb,
|
|
|
- u32 cpu_variant, u32 cpu_rev)
|
|
|
+void __weak omap3_set_aux_cr_secure(u32 acr)
|
|
|
{
|
|
|
- if (get_device_type() == GP_DEVICE) {
|
|
|
- omap_smc1(OMAP3_GP_ROMCODE_API_WRITE_ACR, acr);
|
|
|
- } else {
|
|
|
- struct emu_hal_params emu_romcode_params;
|
|
|
- emu_romcode_params.num_params = 1;
|
|
|
- emu_romcode_params.param1 = acr;
|
|
|
- omap3_emu_romcode_call(OMAP3_EMU_HAL_API_WRITE_ACR,
|
|
|
- (u32 *)&emu_romcode_params);
|
|
|
- }
|
|
|
+ struct emu_hal_params emu_romcode_params;
|
|
|
+
|
|
|
+ emu_romcode_params.num_params = 1;
|
|
|
+ emu_romcode_params.param1 = acr;
|
|
|
+ omap3_emu_romcode_call(OMAP3_EMU_HAL_API_WRITE_ACR,
|
|
|
+ (u32 *)&emu_romcode_params);
|
|
|
}
|
|
|
|
|
|
-static void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
|
|
|
+void v7_arch_cp15_set_acr(u32 acr, u32 cpu_midr, u32 cpu_rev_comb,
|
|
|
+ u32 cpu_variant, u32 cpu_rev)
|
|
|
{
|
|
|
- u32 acr;
|
|
|
+ /* Write ACR - affects secure banked bits */
|
|
|
+ if (get_device_type() == GP_DEVICE)
|
|
|
+ omap_smc1(OMAP3_GP_ROMCODE_API_WRITE_ACR, acr);
|
|
|
+ else
|
|
|
+ omap3_set_aux_cr_secure(acr);
|
|
|
|
|
|
- /* Read ACR */
|
|
|
- asm volatile ("mrc p15, 0, %0, c1, c0, 1" : "=r" (acr));
|
|
|
- acr &= ~clear_bits;
|
|
|
- acr |= set_bits;
|
|
|
- v7_arch_cp15_set_acr(acr, 0, 0, 0, 0);
|
|
|
+ /* Write ACR - affects non-secure banked bits - some erratas need it */
|
|
|
+ asm volatile ("mcr p15, 0, %0, c1, c0, 1" : : "r" (acr));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
#ifndef CONFIG_SYS_L2CACHE_OFF
|
|
|
static void omap3_update_aux_cr(u32 set_bits, u32 clear_bits)
|
|
|
{
|
|
@@ -449,9 +448,8 @@ static void omap3_update_aux_cr(u32 set_bits, u32 clear_bits)
|
|
|
asm volatile ("mrc p15, 0, %0, c1, c0, 1" : "=r" (acr));
|
|
|
acr &= ~clear_bits;
|
|
|
acr |= set_bits;
|
|
|
+ v7_arch_cp15_set_acr(acr, 0, 0, 0, 0);
|
|
|
|
|
|
- /* Write ACR - affects non-secure banked bits */
|
|
|
- asm volatile ("mcr p15, 0, %0, c1, c0, 1" : : "r" (acr));
|
|
|
}
|
|
|
|
|
|
/* Invalidate the entire L2 cache from secure mode */
|
|
@@ -470,10 +468,9 @@ static void omap3_invalidate_l2_cache_secure(void)
|
|
|
|
|
|
void v7_outer_cache_enable(void)
|
|
|
{
|
|
|
- /* Set L2EN */
|
|
|
- omap3_update_aux_cr_secure(0x2, 0);
|
|
|
|
|
|
/*
|
|
|
+ * Set L2EN
|
|
|
* On some revisions L2EN bit is banked on some revisions it's not
|
|
|
* No harm in setting both banked bits(in fact this is required
|
|
|
* by an erratum)
|
|
@@ -483,10 +480,8 @@ void v7_outer_cache_enable(void)
|
|
|
|
|
|
void omap3_outer_cache_disable(void)
|
|
|
{
|
|
|
- /* Clear L2EN */
|
|
|
- omap3_update_aux_cr_secure(0, 0x2);
|
|
|
-
|
|
|
/*
|
|
|
+ * Clear L2EN
|
|
|
* On some revisions L2EN bit is banked on some revisions it's not
|
|
|
* No harm in clearing both banked bits(in fact this is required
|
|
|
* by an erratum)
|