gma pipe setup: Fix secondary pipe cursors <= Sandy Bridge
The secondary cursor registers used to have a different offset.
Change-Id: I4d79f59a8cb693d73d6da666525f091021efb4fd
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/libgfxinit/+/27154
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Reto Buerki <reet@codelabs.ch>
diff --git a/common/hw-gfx-gma-pipe_setup.ads b/common/hw-gfx-gma-pipe_setup.ads
index fe877ad..0edb0c9 100644
--- a/common/hw-gfx-gma-pipe_setup.ads
+++ b/common/hw-gfx-gma-pipe_setup.ads
@@ -12,6 +12,7 @@
-- GNU General Public License for more details.
--
+with HW.GFX.GMA.Config;
with HW.GFX.GMA.Registers;
use type HW.Int32;
@@ -78,10 +79,6 @@
DSPSURF : Registers.Registers_Index;
DSPTILEOFF : Registers.Registers_Index;
SPCNTR : Registers.Registers_Index;
- CUR_CTL : Registers.Registers_Index;
- CUR_BASE : Registers.Registers_Index;
- CUR_POS : Registers.Registers_Index;
- CUR_FBC_CTL : Registers.Registers_Index;
-- Skylake registers (partially aliased)
PLANE_CTL : Registers.Registers_Index;
PLANE_OFFSET : Registers.Registers_Index;
@@ -117,10 +114,6 @@
DSPSURF => Registers.DSPASURF,
DSPTILEOFF => Registers.DSPATILEOFF,
SPCNTR => Registers.SPACNTR,
- CUR_CTL => Registers.CUR_CTL_A,
- CUR_BASE => Registers.CUR_BASE_A,
- CUR_POS => Registers.CUR_POS_A,
- CUR_FBC_CTL => Registers.CUR_FBC_CTL_A,
PLANE_CTL => Registers.DSPACNTR,
PLANE_OFFSET => Registers.DSPATILEOFF,
PLANE_POS => Registers.PLANE_POS_1_A,
@@ -166,10 +159,6 @@
DSPSURF => Registers.DSPBSURF,
DSPTILEOFF => Registers.DSPBTILEOFF,
SPCNTR => Registers.SPBCNTR,
- CUR_CTL => Registers.CUR_CTL_B,
- CUR_BASE => Registers.CUR_BASE_B,
- CUR_POS => Registers.CUR_POS_B,
- CUR_FBC_CTL => Registers.CUR_FBC_CTL_B,
PLANE_CTL => Registers.DSPBCNTR,
PLANE_OFFSET => Registers.DSPBTILEOFF,
PLANE_POS => Registers.PLANE_POS_1_B,
@@ -215,10 +204,6 @@
DSPSURF => Registers.DSPCSURF,
DSPTILEOFF => Registers.DSPCTILEOFF,
SPCNTR => Registers.SPCCNTR,
- CUR_CTL => Registers.CUR_CTL_C,
- CUR_BASE => Registers.CUR_BASE_C,
- CUR_POS => Registers.CUR_POS_C,
- CUR_FBC_CTL => Registers.CUR_FBC_CTL_C,
PLANE_CTL => Registers.DSPCCNTR,
PLANE_OFFSET => Registers.DSPCTILEOFF,
PLANE_POS => Registers.PLANE_POS_1_C,
@@ -252,4 +237,40 @@
Registers.CUR_WM_C_6,
Registers.CUR_WM_C_7)));
+ type Cursor_Regs is record
+ CTL : Registers.Registers_Index;
+ BASE : Registers.Registers_Index;
+ POS : Registers.Registers_Index;
+ FBC_CTL : Registers.Registers_Invalid_Index;
+ end record;
+
+ function Cursors (Pipe : Pipe_Index) return Cursor_Regs is
+ (if not Config.Has_Ivybridge_Cursors then
+ (if Pipe = Primary then
+ (CTL => Registers.CURACNTR,
+ BASE => Registers.CURABASE,
+ POS => Registers.CURAPOS,
+ FBC_CTL => Registers.Invalid_Register)
+ else
+ (CTL => Registers.CURBCNTR,
+ BASE => Registers.CURBBASE,
+ POS => Registers.CURBPOS,
+ FBC_CTL => Registers.Invalid_Register))
+ else
+ (if Pipe = Primary then
+ (CTL => Registers.CUR_CTL_A,
+ BASE => Registers.CUR_BASE_A,
+ POS => Registers.CUR_POS_A,
+ FBC_CTL => Registers.CUR_FBC_CTL_A)
+ elsif Pipe = Secondary then
+ (CTL => Registers.CUR_CTL_B,
+ BASE => Registers.CUR_BASE_B,
+ POS => Registers.CUR_POS_B,
+ FBC_CTL => Registers.CUR_FBC_CTL_B)
+ else
+ (CTL => Registers.CUR_CTL_C,
+ BASE => Registers.CUR_BASE_C,
+ POS => Registers.CUR_POS_C,
+ FBC_CTL => Registers.CUR_FBC_CTL_C)));
+
end HW.GFX.GMA.Pipe_Setup;