ARCv2: SLC: Make sure busy bit is set properly for region ops
authorAlexey Brodkin <abrodkin@synopsys.com>
Fri, 7 Jul 2017 09:25:14 +0000 (12:25 +0300)
committerVineet Gupta <vgupta@synopsys.com>
Fri, 4 Aug 2017 08:20:07 +0000 (13:50 +0530)
c70c473396cb "ARCv2: SLC: Make sure busy bit is set properly on SLC flushing"
fixes problem for entire SLC operation where the problem was initially
caught. But given a nature of the issue it is perfectly possible for
busy bit to be read incorrectly even when region operation was started.

So extending initial fix for regional operation as well.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: stable@vger.kernel.org #4.10
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/mm/cache.c

index a867575a758b9845c09a84fb4515f17f08f1272b..bebc24cb791266a1ced0156861314130abda532a 100644 (file)
@@ -697,6 +697,9 @@ noinline void slc_op(phys_addr_t paddr, unsigned long sz, const int op)
        write_aux_reg(ARC_REG_SLC_RGN_END, (paddr + sz + l2_line_sz - 1));
        write_aux_reg(ARC_REG_SLC_RGN_START, paddr);
 
+       /* Make sure "busy" bit reports correct stataus, see STAR 9001165532 */
+       read_aux_reg(ARC_REG_SLC_CTRL);
+
        while (read_aux_reg(ARC_REG_SLC_CTRL) & SLC_CTRL_BUSY);
 
        spin_unlock_irqrestore(&lock, flags);