OSDN Git Service

hw/arm/smmuv3: Emulate CFGI_STE_RANGE for an aligned range of StreamIDs
authorZenghui Yu <yuzenghui@huawei.com>
Fri, 2 Apr 2021 10:04:49 +0000 (18:04 +0800)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 12 Apr 2021 10:06:24 +0000 (11:06 +0100)
commit017a913af4dff47ac5e62be613b9f8b88fc8fa96
treebffa550d15d833db8ef8f6c081b793afc0596660
parent0c38f607836af40921ea2b58676b7c4a9fe33bef
hw/arm/smmuv3: Emulate CFGI_STE_RANGE for an aligned range of StreamIDs

In emulation of the CFGI_STE_RANGE command, we now take StreamID as the
start of the invalidation range, regardless of whatever the Range is,
whilst the spec clearly states that

 - "Invalidation is performed for an *aligned* range of 2^(Range+1)
    StreamIDs."

 - "The bottom Range+1 bits of the StreamID parameter are IGNORED,
    aligning the range to its size."

Take CFGI_ALL (where Range == 31) as an example, if there are some random
bits in the StreamID field, we'll fail to perform the full invalidation but
get a strange range (e.g., SMMUSIDRange={.start=1, .end=0}) instead. Rework
the emulation a bit to get rid of the discrepancy with the spec.

Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Acked-by: Eric Auger <eric.auger@redhat.com>
Message-id: 20210402100449.528-1-yuzenghui@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/arm/smmuv3.c