On 05/07/2021 08:52, Mark Cave-Ayland wrote:

I think the problem is because of the interaction of .impl.max_access_size = 2 and the it_shift property specifying a stride of 4 bytes: when the 4 byte access is split into 2 x 2 byte accesses then for a read reg = addr >> s->it_shift causes the second access to be a duplicate of the first rather than containing zeros.

After some more experiments I'm fairly confident this is the issue: if you rely on applying it_shift within the MMIO access itself then you lose the zero extension of the result to the access size as done by the memory API.

I'll come up with a new version which I shall send as part of an updated and tested v2 of Phil's housekeeping patchset, since the endian changes were really helpful when studying the descriptors.


ATB,

Mark.

Reply via email to