From 2ac9acbba4c6dd5ea7acda16998859277fec868e Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 10 Mar 2015 22:40:07 -0500 Subject: [PATCH] bcm2835: Improve framebuffer tracing and error trapping --- .../boot/arch/arm/arch_framebuffer_bcm2835.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/system/boot/arch/arm/arch_framebuffer_bcm2835.cpp b/src/system/boot/arch/arm/arch_framebuffer_bcm2835.cpp index 316844a987..76b0a5ff75 100644 --- a/src/system/boot/arch/arm/arch_framebuffer_bcm2835.cpp +++ b/src/system/boot/arch/arm/arch_framebuffer_bcm2835.cpp @@ -34,6 +34,7 @@ mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags); extern "C" bool mmu_get_virtual_mapping(addr_t virtualAddress, phys_addr_t *_physicalAddress); + extern ArchMailbox *gMailbox; struct framebuffer_config { @@ -77,6 +78,7 @@ arch_get_fb_arm_bcm2835(addr_t base) status_t ArchFBArmBCM2835::Init() { + gKernelArgs.frame_buffer.enabled = true; return B_OK; } @@ -135,13 +137,11 @@ ArchFBArmBCM2835::SetVideoMode(int width, int height, int depth) if (value != 0) { dprintf("failed to configure framebuffer: %" B_PRIx32 "\n", value); - //debug_toggle_led(5, DEBUG_DELAY_SHORT); return B_ERROR; } if (sFramebufferConfig.frame_buffer_address == 0) { dprintf("didn't get the framebuffer address\n"); - //debug_toggle_led(10, DEBUG_DELAY_SHORT); return B_ERROR; } @@ -162,16 +162,19 @@ ArchFBArmBCM2835::SetVideoMode(int width, int height, int depth) = BCM283X_BUS_TO_PHYSICAL(sFramebufferConfig.frame_buffer_address); fSize = sFramebufferConfig.screen_size; - // TODO: kDefaultPageFlags - //fBase = (addr_t)mmu_map_physical_memory(fPhysicalBase, fSize, - // kDefaultPageFlags); - + // kDefaultPageFlags? fBase = (addr_t)mmu_map_physical_memory(fPhysicalBase, fSize, 0); + dprintf("video framebuffer: va: %p pa: %p\n", (void *)fBase, + (void *)fPhysicalBase); + fCurrentWidth = width; fCurrentHeight = height; fCurrentDepth = depth; fCurrentBytesPerRow = sFramebufferConfig.bytes_per_row; + + gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)fPhysicalBase; + return B_OK; }