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.