diff options
Diffstat (limited to 'arch/arm/mm/cache-l2x0.c')
| -rw-r--r-- | arch/arm/mm/cache-l2x0.c | 26 | 
1 files changed, 21 insertions, 5 deletions
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index 9f9d54271aad..c61996c256cc 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -647,11 +647,6 @@ static void __init l2c310_enable(void __iomem *base, unsigned num_lock)  		aux &= ~(L310_AUX_CTRL_FULL_LINE_ZERO | L310_AUX_CTRL_EARLY_BRESP);  	} -	/* r3p0 or later has power control register */ -	if (rev >= L310_CACHE_ID_RTL_R3P0) -		l2x0_saved_regs.pwr_ctrl = L310_DYNAMIC_CLK_GATING_EN | -						L310_STNDBY_MODE_EN; -  	/*  	 * Always enable non-secure access to the lockdown registers -  	 * we write to them as part of the L2C enable sequence so they @@ -1141,6 +1136,7 @@ static void __init l2c310_of_parse(const struct device_node *np,  	u32 filter[2] = { 0, 0 };  	u32 assoc;  	u32 prefetch; +	u32 power;  	u32 val;  	int ret; @@ -1271,6 +1267,26 @@ static void __init l2c310_of_parse(const struct device_node *np,  	}  	l2x0_saved_regs.prefetch_ctrl = prefetch; + +	power = l2x0_saved_regs.pwr_ctrl | +		L310_DYNAMIC_CLK_GATING_EN | L310_STNDBY_MODE_EN; + +	ret = of_property_read_u32(np, "arm,dynamic-clock-gating", &val); +	if (!ret) { +		if (!val) +			power &= ~L310_DYNAMIC_CLK_GATING_EN; +	} else if (ret != -EINVAL) { +		pr_err("L2C-310 OF dynamic-clock-gating property value is missing or invalid\n"); +	} +	ret = of_property_read_u32(np, "arm,standby-mode", &val); +	if (!ret) { +		if (!val) +			power &= ~L310_STNDBY_MODE_EN; +	} else if (ret != -EINVAL) { +		pr_err("L2C-310 OF standby-mode property value is missing or invalid\n"); +	} + +	l2x0_saved_regs.pwr_ctrl = power;  }  static const struct l2c_init_data of_l2c310_data __initconst = {  |