Commit dc8601a2 authored by Haojian Zhuang's avatar Haojian Zhuang Committed by Eric Miao

[ARM] pxa: do not enable L2 after MMU is enabled

Outer cache checked whether L2 is enabled or not. If L2 isn't enabled in XSC3,
it would enable L2. This operation is evil that would make system hang.

In XSC3 core document, these words are mentioned in below.

"Following reset, the L2 Unified Cache Enable bit is cleared. To enable the L2
Cache, software may set the bit to a '1' before or at the same time as enabling
the MMU. Enabling the L2 Cache after the MMU has been enabled or disabling the
L2 Cache after the L2 Cache has been enabled, may result in unpredictable
behavior of the processor."

When outer cache is initialized, the MMU is already enabled. We couldn't enable
L2 after MMU enabled.
Signed-off-by: default avatarHaojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: default avatarEric Miao <eric.y.miao@gmail.com>
parent 91a86a96
...@@ -221,15 +221,14 @@ static int __init xsc3_l2_init(void) ...@@ -221,15 +221,14 @@ static int __init xsc3_l2_init(void)
if (!cpu_is_xsc3() || !xsc3_l2_present()) if (!cpu_is_xsc3() || !xsc3_l2_present())
return 0; return 0;
if (!(get_cr() & CR_L2)) { if (get_cr() & CR_L2) {
pr_info("XScale3 L2 cache enabled.\n"); pr_info("XScale3 L2 cache enabled.\n");
adjust_cr(CR_L2, CR_L2);
xsc3_l2_inv_all(); xsc3_l2_inv_all();
}
outer_cache.inv_range = xsc3_l2_inv_range; outer_cache.inv_range = xsc3_l2_inv_range;
outer_cache.clean_range = xsc3_l2_clean_range; outer_cache.clean_range = xsc3_l2_clean_range;
outer_cache.flush_range = xsc3_l2_flush_range; outer_cache.flush_range = xsc3_l2_flush_range;
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment