aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/device/Kconfig1
-rw-r--r--src/drivers/intel/gma/Makefile.inc6
-rw-r--r--src/drivers/intel/gma/hires_fb/gma.adb (renamed from src/drivers/intel/gma/gma.adb)0
-rw-r--r--src/drivers/intel/gma/text_fb/gma.adb75
4 files changed, 81 insertions, 1 deletions
diff --git a/src/device/Kconfig b/src/device/Kconfig
index d2385471a7..c90da896ef 100644
--- a/src/device/Kconfig
+++ b/src/device/Kconfig
@@ -53,6 +53,7 @@ config MAINBOARD_USE_LIBGFXINIT
bool "Use libgfxinit for native graphics initialization"
depends on MAINBOARD_DO_NATIVE_VGA_INIT
depends on MAINBOARD_HAS_LIBGFXINIT
+ select MAINBOARD_HAS_NATIVE_VGA_INIT_TEXTMODECFG
select RAMSTAGE_LIBHWBASE
default n
help
diff --git a/src/drivers/intel/gma/Makefile.inc b/src/drivers/intel/gma/Makefile.inc
index a4e007c373..d4d6c08842 100644
--- a/src/drivers/intel/gma/Makefile.inc
+++ b/src/drivers/intel/gma/Makefile.inc
@@ -40,6 +40,10 @@ CONFIG_GFX_GMA_DEFAULT_MMIO := 0 # dummy, will be overwritten at runtime
subdirs-y += ../../../../3rdparty/libgfxinit
ramstage-y += gma.ads
-ramstage-y += gma.adb
+ifeq ($(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE),y)
+ramstage-y += hires_fb/gma.adb
+else
+ramstage-y += text_fb/gma.adb
+endif
endif # CONFIG_MAINBOARD_USE_LIBGFXINIT
diff --git a/src/drivers/intel/gma/gma.adb b/src/drivers/intel/gma/hires_fb/gma.adb
index 7ebc4f88bc..7ebc4f88bc 100644
--- a/src/drivers/intel/gma/gma.adb
+++ b/src/drivers/intel/gma/hires_fb/gma.adb
diff --git a/src/drivers/intel/gma/text_fb/gma.adb b/src/drivers/intel/gma/text_fb/gma.adb
new file mode 100644
index 0000000000..bbb6d74e3d
--- /dev/null
+++ b/src/drivers/intel/gma/text_fb/gma.adb
@@ -0,0 +1,75 @@
+with HW.GFX;
+with HW.GFX.GMA;
+
+use HW.GFX;
+use HW.GFX.GMA;
+
+with GMA.Mainboard;
+
+package body GMA
+is
+
+ function vbe_mode_info_valid return Interfaces.C.int
+ is
+ begin
+ return 0;
+ end vbe_mode_info_valid;
+
+ procedure fill_lb_framebuffer (framebuffer : out lb_framebuffer)
+ is
+ begin
+ null;
+ end fill_lb_framebuffer;
+
+ ----------------------------------------------------------------------------
+
+ procedure gfxinit
+ (mmio_base : in word64;
+ linear_fb : in word64;
+ phys_fb : in word32;
+ lightup_ok : out Interfaces.C.int)
+ is
+ ports : Port_List;
+ configs : Configs_Type;
+
+ success : boolean;
+
+ -- from pc80/vga driver
+ procedure vga_io_init;
+ pragma Import (C, vga_io_init, "vga_io_init");
+ procedure vga_textmode_init;
+ pragma Import (C, vga_textmode_init, "vga_textmode_init");
+ begin
+ lightup_ok := 0;
+
+ HW.GFX.GMA.Initialize
+ (MMIO_Base => mmio_base,
+ Success => success);
+
+ if success then
+ ports := Mainboard.ports;
+ HW.GFX.GMA.Scan_Ports
+ (Configs => configs,
+ Ports => ports,
+ Max_Pipe => Primary);
+
+ if configs (Primary).Port /= Disabled then
+ vga_io_init;
+ vga_textmode_init;
+
+ configs (Primary).Framebuffer :=
+ (Width => 640,
+ Height => 400,
+ BPC => Auto_BPC, -- ignored for VGA plane
+ Stride => 320, -- ignored
+ Offset => VGA_PLANE_FRAMEBUFFER_OFFSET);
+
+ HW.GFX.GMA.Dump_Configs (configs);
+ HW.GFX.GMA.Update_Outputs (configs);
+
+ lightup_ok := 1;
+ end if;
+ end if;
+ end gfxinit;
+
+end GMA;