Giacomo Travaglini has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/40775 )
Change subject: dev-arm: Reduce boilerplate when read/writing to Pio devices
..
dev-arm: Reduce boilerplate when read/writing to Pio devices
Change-Id: Id59ac950f37d7f4f2642daf324d501da1ee622de
Signed-off-by: Giacomo Travaglini
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40775
Reviewed-by: Andreas Sandberg
Maintainer: Andreas Sandberg
Tested-by: kokoro
---
M src/dev/arm/pl011.cc
M src/dev/arm/rtc_pl031.cc
M src/dev/arm/ufs_device.cc
3 files changed, 9 insertions(+), 70 deletions(-)
Approvals:
Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/src/dev/arm/pl011.cc b/src/dev/arm/pl011.cc
index ea76416..cfe241d 100755
--- a/src/dev/arm/pl011.cc
+++ b/src/dev/arm/pl011.cc
@@ -64,6 +64,7 @@
Pl011::read(PacketPtr pkt)
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr +
pioSize);
+assert(pkt->getSize() <= 4);
Addr daddr = pkt->getAddr() - pioAddr;
@@ -145,22 +146,7 @@
break;
}
-switch(pkt->getSize()) {
- case 1:
-pkt->setLE(data);
-break;
- case 2:
-pkt->setLE(data);
-break;
- case 4:
-pkt->setLE(data);
-break;
- default:
-panic("Uart read size too big?\n");
-break;
-}
-
-
+pkt->setUintX(data, ByteOrder::little);
pkt->makeAtomicResponse();
return pioDelay;
}
@@ -170,6 +156,7 @@
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr +
pioSize);
+assert(pkt->getSize() <= 4);
Addr daddr = pkt->getAddr() - pioAddr;
@@ -179,23 +166,7 @@
// use a temporary data since the uart registers are read/written with
// different size operations
//
-uint32_t data = 0;
-
-switch(pkt->getSize()) {
- case 1:
-data = pkt->getLE();
-break;
- case 2:
-data = pkt->getLE();
-break;
- case 4:
-data = pkt->getLE();
-break;
- default:
-panic("Uart write size too big?\n");
-break;
-}
-
+const uint32_t data = pkt->getUintX(ByteOrder::little);
switch (daddr) {
case UART_DR:
diff --git a/src/dev/arm/rtc_pl031.cc b/src/dev/arm/rtc_pl031.cc
index a6cdc7d..de84384 100644
--- a/src/dev/arm/rtc_pl031.cc
+++ b/src/dev/arm/rtc_pl031.cc
@@ -61,7 +61,7 @@
PL031::read(PacketPtr pkt)
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr +
pioSize);
-assert(pkt->getSize() == 4);
+assert(pkt->getSize() <= 4);
Addr daddr = pkt->getAddr() - pioAddr;
uint32_t data;
@@ -99,22 +99,7 @@
break;
}
-switch(pkt->getSize()) {
- case 1:
-pkt->setLE(data);
-break;
- case 2:
-pkt->setLE(data);
-break;
- case 4:
-pkt->setLE(data);
-break;
- default:
-panic("Uart read size too big?\n");
-break;
-}
-
-
+pkt->setUintX(data, ByteOrder::little);
pkt->makeAtomicResponse();
return pioDelay;
}
@@ -123,7 +108,7 @@
PL031::write(PacketPtr pkt)
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr +
pioSize);
-assert(pkt->getSize() == 4);
+assert(pkt->getSize() <= 4);
Addr daddr = pkt->getAddr() - pioAddr;
DPRINTF(Timer, "Writing to RTC at offset: %#x\n", daddr);
diff --git a/src/dev/arm/ufs_device.cc b/src/dev/arm/ufs_device.cc
index 1406e4a..e04cb39 100644
--- a/src/dev/arm/ufs_device.cc
+++ b/src/dev/arm/ufs_device.cc
@@ -1029,26 +1029,9 @@
Tick
UFSHostDevice::write(PacketPtr pkt)
{
-uint32_t data = 0;
+assert(pkt->getSize() <= 4);
-switch (pkt->getSize()) {
-
- case 1:
-data = pkt->getLE();
-break;
-
- case 2:
-data = pkt->getLE();
-break;
-
- case 4:
-data = pkt->getLE();
-break;
-
- default:
-panic("Undefined UFSHCD controller write size!\n");
-break;
-}
+const uint32_t data = pkt->getUintX(ByteOrder::little);
switch (pkt->getAddr() & 0xFF)
{
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/40775
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Id59ac950f37d7f4f2642daf324d501da1ee622de
Gerrit-Change-Number: 40775
Gerrit-PatchSet: 2
Gerrit-Owner: Giacomo Travaglini
Gerrit-Reviewer: Andreas Sandberg
Gerrit-Reviewer: Giacomo Travaglini
Gerrit-Reviewer: kokoro
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s