dev-arm: Reduce boilerplate when read/writing to Pio devices

Change-Id: Id59ac950f37d7f4f2642daf324d501da1ee622de
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40775
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Giacomo Travaglini
2021-01-12 15:07:02 +00:00
parent 0a63e9ff0a
commit 1ea62dcf80
3 changed files with 9 additions and 70 deletions

View File

@@ -64,6 +64,7 @@ Tick
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 @@ Pl011::read(PacketPtr pkt)
break;
}
switch(pkt->getSize()) {
case 1:
pkt->setLE<uint8_t>(data);
break;
case 2:
pkt->setLE<uint16_t>(data);
break;
case 4:
pkt->setLE<uint32_t>(data);
break;
default:
panic("Uart read size too big?\n");
break;
}
pkt->setUintX(data, ByteOrder::little);
pkt->makeAtomicResponse();
return pioDelay;
}
@@ -170,6 +156,7 @@ Pl011::write(PacketPtr pkt)
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() <= 4);
Addr daddr = pkt->getAddr() - pioAddr;
@@ -179,23 +166,7 @@ Pl011::write(PacketPtr pkt)
// 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<uint8_t>();
break;
case 2:
data = pkt->getLE<uint16_t>();
break;
case 4:
data = pkt->getLE<uint32_t>();
break;
default:
panic("Uart write size too big?\n");
break;
}
const uint32_t data = pkt->getUintX(ByteOrder::little);
switch (daddr) {
case UART_DR:

View File

@@ -61,7 +61,7 @@ Tick
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 @@ PL031::read(PacketPtr pkt)
break;
}
switch(pkt->getSize()) {
case 1:
pkt->setLE<uint8_t>(data);
break;
case 2:
pkt->setLE<uint16_t>(data);
break;
case 4:
pkt->setLE<uint32_t>(data);
break;
default:
panic("Uart read size too big?\n");
break;
}
pkt->setUintX(data, ByteOrder::little);
pkt->makeAtomicResponse();
return pioDelay;
}
@@ -123,7 +108,7 @@ Tick
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);

View File

@@ -1029,26 +1029,9 @@ UFSHostDevice::read(PacketPtr pkt)
Tick
UFSHostDevice::write(PacketPtr pkt)
{
uint32_t data = 0;
assert(pkt->getSize() <= 4);
switch (pkt->getSize()) {
case 1:
data = pkt->getLE<uint8_t>();
break;
case 2:
data = pkt->getLE<uint16_t>();
break;
case 4:
data = pkt->getLE<uint32_t>();
break;
default:
panic("Undefined UFSHCD controller write size!\n");
break;
}
const uint32_t data = pkt->getUintX(ByteOrder::little);
switch (pkt->getAddr() & 0xFF)
{