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:
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user