From 705dd390e9988dc5bb4581fe78950a2fc924dcfc Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski Date: Sun, 10 Dec 2023 00:05:58 +0100 Subject: [PATCH] grandcentral: respect size when reading from IOBus devices. --- devices/ioctrl/grandcentral.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/devices/ioctrl/grandcentral.cpp b/devices/ioctrl/grandcentral.cpp index d6d4b3e..7ccf8a9 100644 --- a/devices/ioctrl/grandcentral.cpp +++ b/devices/ioctrl/grandcentral.cpp @@ -123,8 +123,10 @@ uint32_t GrandCentral::read(uint32_t rgn_start, uint32_t offset, int size) case 0xC: // IOBus dev #3 case 0xE: // IOBus dev #5 if (this->iobus_devs[subdev_num - 10] != nullptr) { - return BYTESWAP_16(this->iobus_devs[subdev_num - 10]->iodev_read( - (offset >> 4) & 0x1F)); + uint32_t result = this->iobus_devs[subdev_num - 10]->iodev_read( + (offset >> 4) & 0x1F); + result &= 0xFFFFFFFFUL >> (4 - size) * 8; // strip unused bits + return BYTESWAP_SIZED(result, size); } else { LOG_F(ERROR, "GC: IOBus device #%d doesn't exist", subdev_num - 9); return 0;