Make di.c accept arbitrary FB addresses, fix flickering issues

This commit is contained in:
TuxSH
2018-05-08 13:36:05 +02:00
parent 170cd2d8c4
commit 461e886244
4 changed files with 35 additions and 13 deletions

View File

@@ -190,10 +190,18 @@ void display_enable_backlight(bool on) {
u32 *display_init_framebuffer(void *address)
{
static cfg_op_t conf[sizeof(cfg_display_framebuffer)/sizeof(cfg_op_t)] = {0};
if(conf[0].val == 0) {
for (u32 i = 0; i < sizeof(cfg_display_framebuffer)/sizeof(cfg_op_t); i++) {
conf[i] = cfg_display_framebuffer[i];
}
}
u32 *lfb_addr = (u32 *)address;
//This configures the framebuffer @ 0xC0000000 with a resolution of 1280x720 (line stride 768).
exec_cfg((u32 *)DISPLAY_A_BASE, cfg_display_framebuffer, 32);
conf[19].val = (u32)address;
//This configures the framebuffer @ address with a resolution of 1280x720 (line stride 768).
exec_cfg((u32 *)DISPLAY_A_BASE, conf, 32);
sleep(35000);

View File

@@ -59,7 +59,7 @@ void load_sbk(void) {
int main(void) {
const char *bct0;
u32 *lfb_base;
void *lfb_base = (void *)0xC0000000;
const char *stage2_path;
stage2_args_t stage2_args = {0};
@@ -67,12 +67,14 @@ int main(void) {
/* TODO: What can be stripped out to make this minimal? */
nx_hwinit();
/* Zero-fill the framebuffer and register it as printk provider. */
video_init(lfb_base);
/* Initialize the display. */
display_init();
/* Register the display as a printk provider. */
lfb_base = display_init_framebuffer((void *)0xC0000000);
video_init(lfb_base);
/* Set the framebuffer. */
display_init_framebuffer(lfb_base);
/* Turn on the backlight after initializing the lfb */
/* to avoid flickering. */