|
@@ -631,3 +631,65 @@ static void l2x0_resume(void)
|
|
|
{
|
|
|
if (!(readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) {
|
|
|
/* restore aux ctrl and enable l2 */
|
|
|
+ l2x0_unlock(readl_relaxed(l2x0_base + L2X0_CACHE_ID));
|
|
|
+
|
|
|
+ writel_relaxed(l2x0_saved_regs.aux_ctrl, l2x0_base +
|
|
|
+ L2X0_AUX_CTRL);
|
|
|
+
|
|
|
+ l2x0_inv_all();
|
|
|
+
|
|
|
+ writel_relaxed(L2X0_CTRL_EN, l2x0_base + L2X0_CTRL);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void pl310_resume(void)
|
|
|
+{
|
|
|
+ u32 l2x0_revision;
|
|
|
+
|
|
|
+ if (!(readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) {
|
|
|
+ /* restore pl310 setup */
|
|
|
+ writel_relaxed(l2x0_saved_regs.tag_latency,
|
|
|
+ l2x0_base + L2X0_TAG_LATENCY_CTRL);
|
|
|
+ writel_relaxed(l2x0_saved_regs.data_latency,
|
|
|
+ l2x0_base + L2X0_DATA_LATENCY_CTRL);
|
|
|
+ writel_relaxed(l2x0_saved_regs.filter_end,
|
|
|
+ l2x0_base + L2X0_ADDR_FILTER_END);
|
|
|
+ writel_relaxed(l2x0_saved_regs.filter_start,
|
|
|
+ l2x0_base + L2X0_ADDR_FILTER_START);
|
|
|
+
|
|
|
+ l2x0_revision = readl_relaxed(l2x0_base + L2X0_CACHE_ID) &
|
|
|
+ L2X0_CACHE_ID_RTL_MASK;
|
|
|
+
|
|
|
+ if (l2x0_revision >= L2X0_CACHE_ID_RTL_R2P0) {
|
|
|
+ writel_relaxed(l2x0_saved_regs.prefetch_ctrl,
|
|
|
+ l2x0_base + L2X0_PREFETCH_CTRL);
|
|
|
+ if (l2x0_revision >= L2X0_CACHE_ID_RTL_R3P0)
|
|
|
+ writel_relaxed(l2x0_saved_regs.pwr_ctrl,
|
|
|
+ l2x0_base + L2X0_POWER_CTRL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ l2x0_resume();
|
|
|
+}
|
|
|
+
|
|
|
+static void aurora_resume(void)
|
|
|
+{
|
|
|
+ if (!(readl(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) {
|
|
|
+ writel_relaxed(l2x0_saved_regs.aux_ctrl,
|
|
|
+ l2x0_base + L2X0_AUX_CTRL);
|
|
|
+ writel_relaxed(l2x0_saved_regs.ctrl, l2x0_base + L2X0_CTRL);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void __init aurora_broadcast_l2_commands(void)
|
|
|
+{
|
|
|
+ __u32 u;
|
|
|
+ /* Enable Broadcasting of cache commands to L2*/
|
|
|
+ __asm__ __volatile__("mrc p15, 1, %0, c15, c2, 0" : "=r"(u));
|
|
|
+ u |= AURORA_CTRL_FW; /* Set the FW bit */
|
|
|
+ __asm__ __volatile__("mcr p15, 1, %0, c15, c2, 0\n" : : "r"(u));
|
|
|
+ isb();
|
|
|
+}
|
|
|
+
|
|
|
+static void __init aurora_of_setup(const struct device_node *np,
|
|
|
+ u32 *aux_val, u32 *aux_mask)
|