From 7458629de369a220ea24afdfbf5f1dc9fdc36a5e Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Mon, 18 Feb 2019 01:21:11 +0100 Subject: drivers/intel/gma: Move gfxinit into sub package Move the actual graphics init provided by libgfxinit into a sub package `GMA.GFX_Init`. This way it can be compiled in individually. Change-Id: Ib413a0d70c8dc305f4476c1d5aee6b81ff880bec Signed-off-by: Nico Huber Reviewed-on: https://review.coreboot.org/c/coreboot/+/31456 Reviewed-by: Patrick Georgi Tested-by: build bot (Jenkins) --- src/drivers/intel/gma/hires_fb/gma-gfx_init.adb | 117 ++++++++++++++++++++++++ src/drivers/intel/gma/hires_fb/gma.adb | 117 ------------------------ 2 files changed, 117 insertions(+), 117 deletions(-) create mode 100644 src/drivers/intel/gma/hires_fb/gma-gfx_init.adb delete mode 100644 src/drivers/intel/gma/hires_fb/gma.adb (limited to 'src/drivers/intel/gma/hires_fb') diff --git a/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb b/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb new file mode 100644 index 0000000000..1393784d7b --- /dev/null +++ b/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb @@ -0,0 +1,117 @@ +with CB.Config; + +use CB; + +with HW.GFX; +with HW.GFX.Framebuffer_Filler; +with HW.GFX.GMA; +with HW.GFX.GMA.Display_Probing; + +use HW.GFX; +use HW.GFX.GMA; +use HW.GFX.GMA.Display_Probing; + +with GMA.Mainboard; + +package body GMA.GFX_Init +is + + fb_valid : boolean := false; + + linear_fb_addr : word64; + + fb : Framebuffer_Type; + + function fill_lb_framebuffer + (framebuffer : in out lb_framebuffer) + return Interfaces.C.int + is + use type word32; + use type Interfaces.C.int; + begin + if fb_valid then + framebuffer := + (tag => 0, + size => 0, + physical_address => linear_fb_addr, + x_resolution => word32 (fb.Width), + y_resolution => word32 (fb.Height), + bytes_per_line => 4 * word32 (fb.Stride), + bits_per_pixel => 32, + reserved_mask_pos => 24, + reserved_mask_size => 8, + red_mask_pos => 16, + red_mask_size => 8, + green_mask_pos => 8, + green_mask_size => 8, + blue_mask_pos => 0, + blue_mask_size => 8); + return 0; + else + return -1; + end if; + end fill_lb_framebuffer; + + ---------------------------------------------------------------------------- + + procedure gfxinit (lightup_ok : out Interfaces.C.int) + is + use type pos32; + use type word64; + + ports : Port_List; + configs : Pipe_Configs; + + success : boolean; + + min_h : pos32 := Config.LINEAR_FRAMEBUFFER_MAX_WIDTH; + min_v : pos32 := Config.LINEAR_FRAMEBUFFER_MAX_HEIGHT; + begin + lightup_ok := 0; + + HW.GFX.GMA.Initialize (Success => success); + + if success then + ports := Mainboard.ports; + HW.GFX.GMA.Display_Probing.Scan_Ports (configs, ports); + + if configs (Primary).Port /= Disabled then + for i in Pipe_Index loop + exit when configs (i).Port = Disabled; + + min_h := pos32'min (min_h, configs (i).Mode.H_Visible); + min_v := pos32'min (min_v, configs (i).Mode.V_Visible); + end loop; + + fb := configs (Primary).Framebuffer; + fb.Width := Width_Type (min_h); + fb.Height := Height_Type (min_v); + fb.Stride := Div_Round_Up (fb.Width, 16) * 16; + fb.V_Stride := fb.Height; + + for i in Pipe_Index loop + exit when configs (i).Port = Disabled; + + configs (i).Framebuffer := fb; + end loop; + + HW.GFX.GMA.Dump_Configs (configs); + + HW.GFX.GMA.Setup_Default_FB + (FB => fb, + Clear => true, + Success => success); + + if success then + HW.GFX.GMA.Update_Outputs (configs); + + HW.GFX.GMA.Map_Linear_FB (linear_fb_addr, fb); + fb_valid := linear_fb_addr /= 0; + + lightup_ok := (if fb_valid then 1 else 0); + end if; + end if; + end if; + end gfxinit; + +end GMA.GFX_Init; diff --git a/src/drivers/intel/gma/hires_fb/gma.adb b/src/drivers/intel/gma/hires_fb/gma.adb deleted file mode 100644 index e3553ca3c0..0000000000 --- a/src/drivers/intel/gma/hires_fb/gma.adb +++ /dev/null @@ -1,117 +0,0 @@ -with CB.Config; - -use CB; - -with HW.GFX; -with HW.GFX.Framebuffer_Filler; -with HW.GFX.GMA; -with HW.GFX.GMA.Display_Probing; - -use HW.GFX; -use HW.GFX.GMA; -use HW.GFX.GMA.Display_Probing; - -with GMA.Mainboard; - -package body GMA -is - - fb_valid : boolean := false; - - linear_fb_addr : word64; - - fb : Framebuffer_Type; - - function fill_lb_framebuffer - (framebuffer : in out lb_framebuffer) - return Interfaces.C.int - is - use type word32; - use type Interfaces.C.int; - begin - if fb_valid then - framebuffer := - (tag => 0, - size => 0, - physical_address => linear_fb_addr, - x_resolution => word32 (fb.Width), - y_resolution => word32 (fb.Height), - bytes_per_line => 4 * word32 (fb.Stride), - bits_per_pixel => 32, - reserved_mask_pos => 24, - reserved_mask_size => 8, - red_mask_pos => 16, - red_mask_size => 8, - green_mask_pos => 8, - green_mask_size => 8, - blue_mask_pos => 0, - blue_mask_size => 8); - return 0; - else - return -1; - end if; - end fill_lb_framebuffer; - - ---------------------------------------------------------------------------- - - procedure gfxinit (lightup_ok : out Interfaces.C.int) - is - use type pos32; - use type word64; - - ports : Port_List; - configs : Pipe_Configs; - - success : boolean; - - min_h : pos32 := Config.LINEAR_FRAMEBUFFER_MAX_WIDTH; - min_v : pos32 := Config.LINEAR_FRAMEBUFFER_MAX_HEIGHT; - begin - lightup_ok := 0; - - HW.GFX.GMA.Initialize (Success => success); - - if success then - ports := Mainboard.ports; - HW.GFX.GMA.Display_Probing.Scan_Ports (configs, ports); - - if configs (Primary).Port /= Disabled then - for i in Pipe_Index loop - exit when configs (i).Port = Disabled; - - min_h := pos32'min (min_h, configs (i).Mode.H_Visible); - min_v := pos32'min (min_v, configs (i).Mode.V_Visible); - end loop; - - fb := configs (Primary).Framebuffer; - fb.Width := Width_Type (min_h); - fb.Height := Height_Type (min_v); - fb.Stride := Div_Round_Up (fb.Width, 16) * 16; - fb.V_Stride := fb.Height; - - for i in Pipe_Index loop - exit when configs (i).Port = Disabled; - - configs (i).Framebuffer := fb; - end loop; - - HW.GFX.GMA.Dump_Configs (configs); - - HW.GFX.GMA.Setup_Default_FB - (FB => fb, - Clear => true, - Success => success); - - if success then - HW.GFX.GMA.Update_Outputs (configs); - - HW.GFX.GMA.Map_Linear_FB (linear_fb_addr, fb); - fb_valid := linear_fb_addr /= 0; - - lightup_ok := (if fb_valid then 1 else 0); - end if; - end if; - end if; - end gfxinit; - -end GMA; -- cgit v1.2.3