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;