From: Chander Sudanthi Date: Mon, 7 Jan 2013 18:05:39 +0000 (-0500) Subject: ARM: pl111/LCD framebuffer checkpointing fix X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=694a81e9942724544024266378604fb7d6b3dd40;p=gem5.git ARM: pl111/LCD framebuffer checkpointing fix Fixed check pointing of the framebuffer. Previously, the pixel size was not considered in determining the size of the buffer to checkpoint. This patch checkpoints the entire framebuffer instead of the first quarter. --- diff --git a/src/dev/arm/pl111.cc b/src/dev/arm/pl111.cc index cd1f00272..acb3b7dd8 100644 --- a/src/dev/arm/pl111.cc +++ b/src/dev/arm/pl111.cc @@ -76,7 +76,6 @@ Pl111::Pl111(const Params *p) pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true); - const int buffer_size = LcdMaxWidth * LcdMaxHeight * sizeof(uint32_t); dmaBuffer = new uint8_t[buffer_size]; memset(lcdPalette, 0, sizeof(lcdPalette)); @@ -581,7 +580,7 @@ Pl111::serialize(std::ostream &os) SERIALIZE_SCALAR(width); SERIALIZE_SCALAR(bytesPerPixel); - SERIALIZE_ARRAY(dmaBuffer, height * width); + SERIALIZE_ARRAY(dmaBuffer, buffer_size); SERIALIZE_SCALAR(startTime); SERIALIZE_SCALAR(startAddr); SERIALIZE_SCALAR(maxAddr); @@ -683,7 +682,7 @@ Pl111::unserialize(Checkpoint *cp, const std::string §ion) UNSERIALIZE_SCALAR(width); UNSERIALIZE_SCALAR(bytesPerPixel); - UNSERIALIZE_ARRAY(dmaBuffer, height * width); + UNSERIALIZE_ARRAY(dmaBuffer, buffer_size); UNSERIALIZE_SCALAR(startTime); UNSERIALIZE_SCALAR(startAddr); UNSERIALIZE_SCALAR(maxAddr); diff --git a/src/dev/arm/pl111.hh b/src/dev/arm/pl111.hh index 2245d8124..855fb8bef 100644 --- a/src/dev/arm/pl111.hh +++ b/src/dev/arm/pl111.hh @@ -96,6 +96,8 @@ class Pl111: public AmbaDmaDevice static const int dmaSize = 8; // 64 bits static const int maxOutstandingDma = 16; // 16 deep FIFO of 64 bits + static const int buffer_size = LcdMaxWidth * LcdMaxHeight * sizeof(uint32_t); + enum LcdMode { bpp1 = 0, bpp2,