QEMU raspi virtual/physical frame buffer not implemented
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
I fully recognize that the error here could be mine, but the code is pretty simple and straightforward; When emulating a Raspberry PI 3 using aarch64 and allocating a virtual framebuffer larger than the physical frambuffer (for double-buffering purposes), the QEMU window shows the full size of the *virtual* framebuffer rather than the size of the *physical* framebuffer.
You can replicate this with code such as:
#define FBWIDTH 1024
#define FBHEIGHT 768
void lfb_init()
{
uart_
mbox[0] = 35*4;
mbox[1] = MBOX_REQUEST;
mbox[2] = 0x48003; //set phy wh
mbox[3] = 8;
mbox[4] = 8;
mbox[5] = FBWIDTH; //FrameBufferIn
mbox[6] = FBHEIGHT; //FrameBufferIn
mbox[7] = 0x48004; //set virt wh
mbox[8] = 8;
mbox[9] = 8;
mbox[10] = FBWIDTH; //FrameBufferIn
mbox[11] = FBHEIGHT * 2; //FrameBufferIn
mbox[12] = 0x48009; //set virt offset
mbox[13] = 8;
mbox[14] = 8;
mbox[15] = 0; //FrameBufferIn
mbox[16] = 0; //FrameBufferIn
mbox[17] = 0x48005; //set depth
mbox[18] = 4;
mbox[19] = 4;
mbox[20] = 32; //FrameBufferIn
mbox[21] = 0x48006; //set pixel order
mbox[22] = 4;
mbox[23] = 4;
mbox[24] = 1; //RGB, not BGR preferably
mbox[25] = 0x40001; //get framebuffer, gets alignment on request
mbox[26] = 8;
mbox[27] = 8;
mbox[28] = 4096; //FrameBufferIn
mbox[29] = 0; //FrameBufferIn
mbox[30] = 0x40008; //get pitch
mbox[31] = 4;
mbox[32] = 4;
mbox[33] = 0; //FrameBufferIn
mbox[34] = MBOX_TAG_LAST;
if(
}
}
I will assume, for the sake of this posting, that the reader understands the mailbox architecture and the appropriate address definitions for them. The key point is that allocating a virtual buffer twice the height of the physical buffer results in QEMU improperly displaying a double-height window.
tags: | added: arm |
Changed in qemu: | |
status: | Fix Committed → Fix Released |
Can you provide a test binary and QEMU command line that reproduce this, please ?