Commit 8e007b36 authored by Guillaume Tucker's avatar Guillaume Tucker Committed by Russell King

ARM: 9007/1: l2c: fix prefetch bits init in L2X0_AUX_CTRL using DT values

The L310_PREFETCH_CTRL register bits 28 and 29 to enable data and
instruction prefetch respectively can also be accessed via the
L2X0_AUX_CTRL register.  They appear to be actually wired together in
hardware between the registers.  Changing them in the prefetch
register only will get undone when restoring the aux control register
later on.  For this reason, set these bits in both registers during
initialisation according to the devicetree property values.

Link: https://lore.kernel.org/lkml/76f2f3ad5e77e356e0a5b99ceee1e774a2842c25.1597061474.git.guillaume.tucker@collabora.com/

Fixes: ec3bd0e6 ("ARM: 8391/1: l2c: add options to overwrite prefetching behavior")
Signed-off-by: default avatarGuillaume Tucker <guillaume.tucker@collabora.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent c03e4147
...@@ -1249,20 +1249,28 @@ static void __init l2c310_of_parse(const struct device_node *np, ...@@ -1249,20 +1249,28 @@ static void __init l2c310_of_parse(const struct device_node *np,
ret = of_property_read_u32(np, "prefetch-data", &val); ret = of_property_read_u32(np, "prefetch-data", &val);
if (ret == 0) { if (ret == 0) {
if (val) if (val) {
prefetch |= L310_PREFETCH_CTRL_DATA_PREFETCH; prefetch |= L310_PREFETCH_CTRL_DATA_PREFETCH;
else *aux_val |= L310_PREFETCH_CTRL_DATA_PREFETCH;
} else {
prefetch &= ~L310_PREFETCH_CTRL_DATA_PREFETCH; prefetch &= ~L310_PREFETCH_CTRL_DATA_PREFETCH;
*aux_val &= ~L310_PREFETCH_CTRL_DATA_PREFETCH;
}
*aux_mask &= ~L310_PREFETCH_CTRL_DATA_PREFETCH;
} else if (ret != -EINVAL) { } else if (ret != -EINVAL) {
pr_err("L2C-310 OF prefetch-data property value is missing\n"); pr_err("L2C-310 OF prefetch-data property value is missing\n");
} }
ret = of_property_read_u32(np, "prefetch-instr", &val); ret = of_property_read_u32(np, "prefetch-instr", &val);
if (ret == 0) { if (ret == 0) {
if (val) if (val) {
prefetch |= L310_PREFETCH_CTRL_INSTR_PREFETCH; prefetch |= L310_PREFETCH_CTRL_INSTR_PREFETCH;
else *aux_val |= L310_PREFETCH_CTRL_INSTR_PREFETCH;
} else {
prefetch &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH; prefetch &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH;
*aux_val &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH;
}
*aux_mask &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH;
} else if (ret != -EINVAL) { } else if (ret != -EINVAL) {
pr_err("L2C-310 OF prefetch-instr property value is missing\n"); pr_err("L2C-310 OF prefetch-instr property value is missing\n");
} }
......
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