dcache: Implement load-reserve and store-conditional instructions
authorPaul Mackerras <paulus@ozlabs.org>
Thu, 27 Feb 2020 21:09:08 +0000 (08:09 +1100)
committerPaul Mackerras <paulus@ozlabs.org>
Thu, 27 Feb 2020 21:09:08 +0000 (08:09 +1100)
commit5d85ede97dfe13b6762c47a894edb49ceeb7f26c
treefac0af3eeb77baa4b86109c42c6049e71ee71b6a
parent94dd8bc48066e8c4505843a11250209f3bf29226
dcache: Implement load-reserve and store-conditional instructions

This involves plumbing the (existing) 'reserve' and 'rc' bits in
the decode tables down to dcache, and 'rc' and 'store_done' bits
from dcache to writeback.

It turns out that we had 'RC' set in the 'rc' column for several
ordinary stores and for the attn instruction.  This corrects them
to 'NONE', and sets the 'rc' column to 'ONE' for the conditional
stores.

In writeback we now have logic to set CR0 when the input from dcache
has rc = 1.

In dcache we have the reservation itself, which has a valid bit
and the address down to cache line granularity.  We don't currently
store the reservation length.  For a store conditional which fails,
we set a 'cancel_store' signal which inhibits the write to the
cache and prevents the state machine from starting a bus cycle or
going to the STORE_WAIT_ACK state.  Instead we set r1.stcx_fail
which causes the instruction to complete in the next cycle with
rc=1 and store_done=0.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
common.vhdl
dcache.vhdl
decode1.vhdl
decode2.vhdl
execute1.vhdl
loadstore1.vhdl
writeback.vhdl