arm loader: Style cleanup of loader arm arch code

* These video sources would be good cannidates to be
  refactored as classes. (like the arm serial code)
* No functional change. There are some order style issues
  in some of the code (the top externs), but I decided to
  not fix them as I can't build these atm to test.
This commit is contained in:
Alexander von Gluck IV
2012-09-15 09:24:13 -05:00
parent d501b694bf
commit 7ccc9b45e8
4 changed files with 83 additions and 62 deletions
+3 -4
View File
@@ -20,8 +20,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
//XXX //XXX
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags); extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
uint32 flags);
#define TRACE_VIDEO #define TRACE_VIDEO
@@ -37,7 +39,6 @@ extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, u
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a)) #define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
#if !BOARD_CPU_PXA270 && !BOARD_CPU_OMAP3 && !BOARD_CPU_ARM920T #if !BOARD_CPU_PXA270 && !BOARD_CPU_OMAP3 && !BOARD_CPU_ARM920T
// #pragma mark - // #pragma mark -
@@ -64,5 +65,3 @@ arch_set_default_video_mode()
#endif #endif
+12 -5
View File
@@ -20,8 +20,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
//XXX //XXX
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags); extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
uint32 flags);
#define TRACE_VIDEO #define TRACE_VIDEO
@@ -37,10 +39,12 @@ extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, u
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a)) #define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
#if BOARD_CPU_ARM920T #if BOARD_CPU_ARM920T
// #pragma mark - // #pragma mark -
extern void *gFrameBufferBase; extern void *gFrameBufferBase;
status_t status_t
@@ -50,15 +54,18 @@ arch_probe_video_mode(void)
gKernelArgs.frame_buffer.width = 1024; gKernelArgs.frame_buffer.width = 1024;
gKernelArgs.frame_buffer.height = 768; gKernelArgs.frame_buffer.height = 768;
gKernelArgs.frame_buffer.bytes_per_row = gKernelArgs.frame_buffer.width * 2; gKernelArgs.frame_buffer.bytes_per_row = gKernelArgs.frame_buffer.width * 2;
gKernelArgs.frame_buffer.physical_buffer.size = gKernelArgs.frame_buffer.width gKernelArgs.frame_buffer.physical_buffer.size
= gKernelArgs.frame_buffer.width
* gKernelArgs.frame_buffer.height * gKernelArgs.frame_buffer.height
* gKernelArgs.frame_buffer.depth / 8; * gKernelArgs.frame_buffer.depth / 8;
#if 0 #if 0
if (!gFrameBufferBase) { if (!gFrameBufferBase) {
int err = platform_allocate_region(&gFrameBufferBase, gKernelArgs.frame_buffer.physical_buffer.size, 0, false); int err = platform_allocate_region(&gFrameBufferBase,
gKernelArgs.frame_buffer.physical_buffer.size, 0, false);
if (err < B_OK) return err; if (err < B_OK) return err;
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase; gKernelArgs.frame_buffer.physical_buffer.start
= (addr_t)gFrameBufferBase;
dprintf("video framebuffer: %p\n", gFrameBufferBase); dprintf("video framebuffer: %p\n", gFrameBufferBase);
} }
#else #else
+50 -39
View File
@@ -20,8 +20,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
//XXX //XXX
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags); extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
uint32 flags);
#define TRACE_VIDEO #define TRACE_VIDEO
@@ -37,7 +39,6 @@ extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, u
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a)) #define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
#if BOARD_CPU_OMAP3 #if BOARD_CPU_OMAP3
// #pragma mark - // #pragma mark -
@@ -87,13 +88,15 @@ struct video_mode modes[] = {
}; };
static inline void setaddr(uint32 reg, unsigned int v) static inline void
setaddr(uint32 reg, unsigned int v)
{ {
*((volatile uint32 *)(reg)) = v; *((volatile uint32 *)(reg)) = v;
} }
static inline void modaddr(unsigned int reg, unsigned int m, unsigned int v) static inline void
modaddr(unsigned int reg, unsigned int m, unsigned int v)
{ {
uint32 o; uint32 o;
@@ -104,31 +107,35 @@ static inline void modaddr(unsigned int reg, unsigned int m, unsigned int v)
} }
static inline void setreg(uint32 base, unsigned int reg, unsigned int v) static inline
void setreg(uint32 base, unsigned int reg, unsigned int v)
{ {
*((volatile uint32 *)(base+reg)) = v; *((volatile uint32 *)(base + reg)) = v;
} }
static inline uint32 readreg(uint32 base, unsigned int reg) static inline
uint32 readreg(uint32 base, unsigned int reg)
{ {
return *((volatile uint32 *)(base+reg)); return *((volatile uint32 *)(base + reg));
} }
static inline void modreg(uint32 base, unsigned int reg, unsigned int m, unsigned int v) static inline void
modreg(uint32 base, unsigned int reg, unsigned int m, unsigned int v)
{ {
uint32 o; uint32 o;
o = *((volatile uint32 *)(base+reg)); o = *((volatile uint32 *)(base + reg));
o &= ~m; o &= ~m;
o |= v; o |= v;
*((volatile uint32 *)(base+reg)) = o; *((volatile uint32 *)(base + reg)) = o;
} }
// init beagle gpio for video // init beagle gpio for video
static void omap_beagle_init(void) static void
omap_beagle_init(void)
{ {
// setup GPIO stuff, i can't find any references to these // setup GPIO stuff, i can't find any references to these
setreg(GPIO1_BASE, GPIO_OE, 0xfefffedf); setreg(GPIO1_BASE, GPIO_OE, 0xfefffedf);
@@ -137,7 +144,8 @@ static void omap_beagle_init(void)
} }
static void omap_clock_init(void) static void
omap_clock_init(void)
{ {
// sets pixel clock to 72MHz // sets pixel clock to 72MHz
@@ -159,15 +167,18 @@ static void omap_clock_init(void)
} }
static void omap_dss_init(void) static void
omap_dss_init(void)
{ {
setreg(DSS_BASE, DSS_SYSCONFIG, DSS_AUTOIDLE); setreg(DSS_BASE, DSS_SYSCONFIG, DSS_AUTOIDLE);
// Select DSS1 ALWON as clock source // Select DSS1 ALWON as clock source
setreg(DSS_BASE, DSS_CONTROL, DSS_VENC_OUT_SEL | DSS_DAC_POWERDN_BGZ | DSS_DAC_DEMEN | DSS_VENC_CLOCK_4X_ENABLE); setreg(DSS_BASE, DSS_CONTROL, DSS_VENC_OUT_SEL | DSS_DAC_POWERDN_BGZ
| DSS_DAC_DEMEN | DSS_VENC_CLOCK_4X_ENABLE);
} }
static void omap_dispc_init(void) static void
omap_dispc_init(void)
{ {
uint32 DISPC = DISPC_BASE; uint32 DISPC = DISPC_BASE;
@@ -220,18 +231,18 @@ static void omap_set_lcd_mode(int w, int h) {
dprintf("omap3: set_lcd_mode %d,%d\n", w, h); dprintf("omap3: set_lcd_mode %d,%d\n", w, h);
for (i=0;i<sizeof(modes)/sizeof(modes[0]);i++) { for (i = 0; i < sizeof(modes) / sizeof(modes[0]); i++) {
if (w <= modes[i].width if (w <= modes[i].width
&& h <= modes[i].height) && h <= modes[i].height)
goto found; goto found;
} }
i -= 1; i -= 1;
found: found:
m = &modes[i]; m = &modes[i];
dprintf("omap3: found mode[%s]\n", m->name); dprintf("omap3: found mode[%s]\n", m->name);
setreg(DISPC, DISPC_SIZE_LCD, (m->width - 1) | ((m->height-1) << 16)); setreg(DISPC, DISPC_SIZE_LCD, (m->width - 1) | ((m->height - 1) << 16));
setreg(DISPC, DISPC_TIMING_H, m->dispc_timing_h); setreg(DISPC, DISPC_TIMING_H, m->dispc_timing_h);
setreg(DISPC, DISPC_TIMING_V, m->dispc_timing_v); setreg(DISPC, DISPC_TIMING_V, m->dispc_timing_v);
@@ -240,18 +251,19 @@ found:
// Tell hardware to update, and wait for it // Tell hardware to update, and wait for it
modreg(DISPC, DISPC_CONTROL, modreg(DISPC, DISPC_CONTROL,
DISPC_GOLCD, DISPC_GOLCD,
DISPC_GOLCD); DISPC_GOLCD);
while ((readreg(DISPC, DISPC_CONTROL) & DISPC_GOLCD)) while ((readreg(DISPC, DISPC_CONTROL) & DISPC_GOLCD))
; ;
} }
static void omap_attach_framebuffer(void *data, int width, int height, int depth) static void
omap_attach_framebuffer(void *data, int width, int height, int depth)
{ {
uint32 DISPC = DISPC_BASE; uint32 DISPC = DISPC_BASE;
uint32 gsize = ((height-1)<<16) | (width-1); uint32 gsize = ((height - 1) << 16) | (width - 1);
dprintf("omap3: attach bitmap (%d,%d) %p to screen\n", width, height, data); dprintf("omap3: attach bitmap (%d,%d) %p to screen\n", width, height, data);
@@ -263,22 +275,20 @@ static void omap_attach_framebuffer(void *data, int width, int height, int depth
setreg(DISPC, DISPC_GFX_ROW_INC, 1); setreg(DISPC, DISPC_GFX_ROW_INC, 1);
setreg(DISPC, DISPC_GFX_PIXEL_INC, 1); setreg(DISPC, DISPC_GFX_PIXEL_INC, 1);
setreg(DISPC, DISPC_GFX_WINDOW_SKIP, 0); setreg(DISPC, DISPC_GFX_WINDOW_SKIP, 0);
setreg(DISPC, DISPC_GFX_ATTRIBUTES, setreg(DISPC, DISPC_GFX_ATTRIBUTES, DISPC_GFXFORMAT_RGB16
DISPC_GFXFORMAT_RGB16 | DISPC_GFXBURSTSIZE_16x32 | DISPC_GFXENABLE);
| DISPC_GFXBURSTSIZE_16x32
| DISPC_GFXENABLE);
// Tell hardware to update, and wait for it // Tell hardware to update, and wait for it
modreg(DISPC, DISPC_CONTROL, modreg(DISPC, DISPC_CONTROL, DISPC_GOLCD, DISPC_GOLCD);
DISPC_GOLCD,
DISPC_GOLCD);
while ((readreg(DISPC, DISPC_CONTROL) & DISPC_GOLCD)) while ((readreg(DISPC, DISPC_CONTROL) & DISPC_GOLCD))
; ;
} }
static void omap_init(void) { static void
omap_init(void)
{
dprintf("omap3: video_init()\n"); dprintf("omap3: video_init()\n");
setreg(DISPC_BASE, DISPC_IRQENABLE, 0x00000); setreg(DISPC_BASE, DISPC_IRQENABLE, 0x00000);
@@ -298,15 +308,18 @@ arch_probe_video_mode(void)
gKernelArgs.frame_buffer.width = 1024; gKernelArgs.frame_buffer.width = 1024;
gKernelArgs.frame_buffer.height = 768; gKernelArgs.frame_buffer.height = 768;
gKernelArgs.frame_buffer.bytes_per_row = gKernelArgs.frame_buffer.width * 2; gKernelArgs.frame_buffer.bytes_per_row = gKernelArgs.frame_buffer.width * 2;
gKernelArgs.frame_buffer.physical_buffer.size = gKernelArgs.frame_buffer.width gKernelArgs.frame_buffer.physical_buffer.size
= gKernelArgs.frame_buffer.width
* gKernelArgs.frame_buffer.height * gKernelArgs.frame_buffer.height
* gKernelArgs.frame_buffer.depth / 8; * gKernelArgs.frame_buffer.depth / 8;
#if 0 #if 0
if (!gFrameBufferBase) { if (!gFrameBufferBase) {
int err = platform_allocate_region(&gFrameBufferBase, gKernelArgs.frame_buffer.physical_buffer.size, 0, false); int err = platform_allocate_region(&gFrameBufferBase,
gKernelArgs.frame_buffer.physical_buffer.size, 0, false);
if (err < B_OK) return err; if (err < B_OK) return err;
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase; gKernelArgs.frame_buffer.physical_buffer.start
= (addr_t)gFrameBufferBase;
dprintf("video framebuffer: %p\n", gFrameBufferBase); dprintf("video framebuffer: %p\n", gFrameBufferBase);
} }
#else #else
@@ -347,5 +360,3 @@ arch_set_default_video_mode()
#endif #endif
+18 -14
View File
@@ -20,8 +20,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
//XXX //XXX
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags); extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
uint32 flags);
#define TRACE_VIDEO #define TRACE_VIDEO
@@ -37,8 +39,9 @@ extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, u
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a)) #define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
#if BOARD_CPU_PXA270 #if BOARD_CPU_PXA270
// #pragma mark - // #pragma mark -
@@ -89,7 +92,8 @@ arch_probe_video_mode(void)
gKernelArgs.frame_buffer.height = (read_io_32(LCCR2) & ((1 << 10) - 1)) + 1; gKernelArgs.frame_buffer.height = (read_io_32(LCCR2) & ((1 << 10) - 1)) + 1;
gKernelArgs.frame_buffer.bytes_per_row = gKernelArgs.frame_buffer.width gKernelArgs.frame_buffer.bytes_per_row = gKernelArgs.frame_buffer.width
* sizeof(uint32); * sizeof(uint32);
gKernelArgs.frame_buffer.physical_buffer.size = gKernelArgs.frame_buffer.width gKernelArgs.frame_buffer.physical_buffer.size
= gKernelArgs.frame_buffer.width
* gKernelArgs.frame_buffer.height * gKernelArgs.frame_buffer.height
* gKernelArgs.frame_buffer.depth / 8; * gKernelArgs.frame_buffer.depth / 8;
@@ -98,11 +102,11 @@ arch_probe_video_mode(void)
gKernelArgs.frame_buffer.enabled = true; gKernelArgs.frame_buffer.enabled = true;
return B_OK; return B_OK;
} }
status_t status_t
arch_set_video_mode(int width, int height, int depth) arch_set_video_mode(int width, int height, int depth)
{ {
@@ -110,7 +114,7 @@ arch_set_video_mode(int width, int height, int depth)
status_t err; status_t err;
void *fb; void *fb;
uint32 fbSize = width * height * depth / 8; uint32 fbSize = width * height * depth / 8;
//fb = malloc(800*600*4 + 16 - 1); //fb = malloc(800 * 600 * 4 + 16 - 1);
//fb = (void *)(((uint32)fb) & ~(0x0f)); //fb = (void *)(((uint32)fb) & ~(0x0f));
//fb = scratch - 800; //fb = scratch - 800;
//fb = (void *)0xa0000000; //fb = (void *)0xa0000000;
@@ -123,18 +127,20 @@ arch_set_video_mode(int width, int height, int depth)
#endif #endif
#if 0 #if 0
if (!gFrameBufferBase) { if (!gFrameBufferBase) {
//XXX: realloc if larger !!! // XXX: realloc if larger !!!
err = platform_allocate_region(&gFrameBufferBase, fbSize, 0, false); err = platform_allocate_region(&gFrameBufferBase, fbSize, 0, false);
dprintf("error %08x\n", err); dprintf("error %08x\n", err);
if (err < B_OK) if (err < B_OK)
return err; return err;
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase; gKernelArgs.frame_buffer.physical_buffer.start
= (addr_t)gFrameBufferBase;
/* /*
gFrameBufferBase = (void *)mmu_map_physical_memory( gFrameBufferBase = (void *)mmu_map_physical_memory(
0xa8000000, fbSize, 0); 0xa8000000, fbSize, 0);
if (gFrameBufferBase == NULL) if (gFrameBufferBase == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase;//0xa8000000; gKernelArgs.frame_buffer.physical_buffer.start
= (addr_t)gFrameBufferBase; // 0xa8000000;
*/ */
} }
#endif #endif
@@ -142,7 +148,6 @@ dprintf("error %08x\n", err);
dprintf("fb @ %p\n", fb); dprintf("fb @ %p\n", fb);
sVideoDMADesc.fdadr = ((uint32)&sVideoDMADesc & ~0x0f) | 0x01; sVideoDMADesc.fdadr = ((uint32)&sVideoDMADesc & ~0x0f) | 0x01;
sVideoDMADesc.fsadr = (uint32)(fb) & ~0x0f; sVideoDMADesc.fsadr = (uint32)(fb) & ~0x0f;
sVideoDMADesc.fidr = 0; sVideoDMADesc.fidr = 0;
@@ -172,7 +177,8 @@ dprintf("error %08x\n", err);
} }
write_io_32(LCCR1, (0 << 0) | (width - 1)); write_io_32(LCCR1, (0 << 0) | (width - 1));
write_io_32(LCCR2, (0 << 0) | (height - 1)); write_io_32(LCCR2, (0 << 0) | (height - 1));
write_io_32(LCCR3, (pdfor << 30) | ((bpp >> 3) << 29) | ((bpp & 0x07) << 24)); write_io_32(LCCR3, (pdfor << 30) | ((bpp >> 3) << 29)
| ((bpp & 0x07) << 24));
write_io_32(FDADR0, sVideoDMADesc.fdadr); write_io_32(FDADR0, sVideoDMADesc.fdadr);
write_io_32(LCCR0, read_io_32(LCCR0) | 0x01800001); // no ints +ENB write_io_32(LCCR0, read_io_32(LCCR0) | 0x01800001); // no ints +ENB
write_io_32(FBR0, sVideoDMADesc.fdadr); write_io_32(FBR0, sVideoDMADesc.fdadr);
@@ -183,13 +189,13 @@ dprintf("error %08x\n", err);
dumpr(LCCR4); dumpr(LCCR4);
} else } else
return EALREADY; // for now return EALREADY; // for now
// clear the video memory // clear the video memory
memset((void *)fb, 0, fbSize); memset((void *)fb, 0, fbSize);
// XXX test pattern // XXX test pattern
for (int i = 0; i < 128; i++) { for (int i = 0; i < 128; i++) {
((uint32 *)fb)[i+16] = 0x000000ff << ((i%4) * 8); ((uint32 *)fb)[i + 16] = 0x000000ff << ((i%4) * 8);
scratch[i] = 0x000000ff << ((i%4) * 8); scratch[i] = 0x000000ff << ((i%4) * 8);
} }
@@ -207,5 +213,3 @@ arch_set_default_video_mode()
#endif #endif