Changes in kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c [a14f346:1466a8f] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c
ra14f346 r1466a8f 38 38 #include <genarch/drivers/amdm37x_uart/amdm37x_uart.h> 39 39 #include <genarch/drivers/amdm37x_gpt/amdm37x_gpt.h> 40 #include <genarch/drivers/amdm37x_dispc/amdm37x_dispc.h> 40 41 #include <genarch/fb/fb.h> 41 42 #include <genarch/srln/srln.h> … … 60 61 61 62 static struct beagleboard { 63 amdm37x_dispc_regs_t *dispc; 62 64 amdm37x_irc_regs_t *irc_addr; 63 65 amdm37x_uart_t uart; … … 83 85 } 84 86 87 static void bbxm_setup_fb(unsigned width, unsigned height, unsigned bpp) 88 { 89 const unsigned pixel_bytes = (bpp / 8); 90 const size_t size = ALIGN_UP(width * height * pixel_bytes, FRAME_SIZE); 91 const unsigned frames = size / FRAME_SIZE; 92 unsigned order = 0; 93 unsigned frame = 1; 94 while (frame < frames) { 95 frame *= 2; 96 ++order; 97 } 98 /* prefer highmem as we don't care about virtual mapping. */ 99 void *buffer = frame_alloc(order, FRAME_LOWMEM); 100 if (!buffer) { 101 printf("Failed to allocate framebuffer.\n"); 102 return; 103 } 104 105 amdm37x_dispc_setup_fb(beagleboard.dispc, width, height, bpp, 106 (uintptr_t) buffer); 107 108 fb_properties_t prop = { 109 .addr = (uintptr_t)buffer, 110 .offset = 0, 111 .x = width, 112 .y = height, 113 .scan = width * pixel_bytes, 114 .visual = VISUAL_RGB_5_6_5_LE 115 }; 116 switch (bpp) 117 { 118 case 8: 119 prop.visual = VISUAL_INDIRECT_8; break; 120 case 16: 121 prop.visual = VISUAL_RGB_5_6_5_LE; break; 122 case 24: 123 prop.visual = VISUAL_BGR_8_8_8; break; 124 case 32: 125 prop.visual = VISUAL_RGB_8_8_8_0; break; 126 default: 127 printf("Invalid framebuffer bit depth: bailing out.\n"); 128 return; 129 } 130 outdev_t *fb_dev = fb_init(&prop); 131 if (fb_dev) 132 stdout_wire(fb_dev); 133 134 } 135 85 136 static void bb_timer_irq_handler(irq_t *irq) 86 137 { … … 103 154 ASSERT(beagleboard.irc_addr); 104 155 amdm37x_irc_init(beagleboard.irc_addr); 156 157 /* Map display controller */ 158 beagleboard.dispc = (void*) km_map(AMDM37x_DISPC_BASE_ADDRESS, 159 AMDM37x_DISPC_SIZE, PAGE_NOT_CACHEABLE); 160 ASSERT(beagleboard.dispc); 105 161 106 162 /* Initialize timer. Use timer1, because it is in WKUP power domain … … 167 223 static void bbxm_output_init(void) 168 224 { 225 #ifdef CONFIG_FB 226 bbxm_setup_fb(CONFIG_BFB_WIDTH, CONFIG_BFB_HEIGHT, CONFIG_BFB_BPP); 227 #else 228 (void)bbxm_setup_fb; 229 #endif 169 230 /* UART3 is wired to external RS232 connector */ 170 231 const bool ok = amdm37x_uart_init(&beagleboard.uart,
Note:
See TracChangeset
for help on using the changeset viewer.