Nico Huber has uploaded this change for review. ( https://review.coreboot.org/c/libgfxinit/+/38265 )
Change subject: gma bxt panel: Correct panel backlight handling ......................................................................
gma bxt panel: Correct panel backlight handling
Change-Id: Icfad261fb4d5ff478974948c0148880c5b8cb40c Signed-off-by: Nico Huber nico.huber@secunet.com --- M common/hw-gfx-gma-config.ads.template M common/hw-gfx-gma-panel.adb M common/hw-gfx-gma-panel.ads 3 files changed, 40 insertions(+), 19 deletions(-)
git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/65/38265/1
diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template index 01a67c1..39fa825 100644 --- a/common/hw-gfx-gma-config.ads.template +++ b/common/hw-gfx-gma-config.ads.template @@ -182,6 +182,7 @@ Use_PP_VDD_Override : <genbool> := Up_To_Ironlake; Has_PCH_Panel_Power : <genbool> := Ironlake_On; Has_PP_Divisor_Reg : <genbool> := not Gen_Broxton; + Has_New_Backlight_Control : <genbool> := Gen_Broxton;
----------- PCH/FDI: --------- Has_PCH : <genbool> := not Gen_Broxton and not Gen_G45; diff --git a/common/hw-gfx-gma-panel.adb b/common/hw-gfx-gma-panel.adb index c53fd3f..36faf31 100644 --- a/common/hw-gfx-gma-panel.adb +++ b/common/hw-gfx-gma-panel.adb @@ -157,8 +157,11 @@ PCH_BLC_PWM_CTL1_PHASE_IN_INCREMENT : constant := 16#00_00ff# * 2 ** 0;
PCH_BLC_PWM_CTL2_BL_MOD_FREQ_MASK : constant := 16#00_ffff# * 2 ** 16; + PCH_BLC_PWM_CTL2_BL_MOD_FREQ_SHIFT : constant := 16; PCH_BLC_PWM_CTL2_BL_DUTY_CYC_MASK : constant := 16#00_ffff# * 2 ** 0;
+ BXT_BLC_PWM_CTL_ENABLE : constant := 16#00_0001# * 2 ** 31; + ----------------------------------------------------------------------------
procedure Static_Init @@ -382,9 +385,15 @@
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Registers.Set_Mask - (Register => Panel_PP_Regs.CONTROL, - Mask => PCH_PP_CONTROL_BACKLIGHT_ENABLE); + if Config.Has_New_Backlight_Control then + Registers.Set_Mask + (Register => Registers.BXT_BLC_PWM_CTL_1, + Mask => BXT_BLC_PWM_CTL_ENABLE); + else + Registers.Set_Mask + (Register => Panel_PP_Regs.CONTROL, + Mask => PCH_PP_CONTROL_BACKLIGHT_ENABLE); + end if; end Backlight_On;
procedure Backlight_Off (Panel : Panel_Control) is @@ -395,12 +404,18 @@
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Registers.Unset_Mask - (Register => Panel_PP_Regs.CONTROL, - Mask => PCH_PP_CONTROL_BACKLIGHT_ENABLE); + if Config.Has_New_Backlight_Control then + Registers.Unset_Mask + (Register => Registers.BXT_BLC_PWM_CTL_1, + Mask => BXT_BLC_PWM_CTL_ENABLE); + else + Registers.Unset_Mask + (Register => Panel_PP_Regs.CONTROL, + Mask => PCH_PP_CONTROL_BACKLIGHT_ENABLE); + end if; end Backlight_Off;
- procedure Set_Backlight (Panel : Panel_Control; Level : Word16) is + procedure Set_Backlight (Panel : Panel_Control; Level : Word32) is begin if Panel not in Valid_Panels then return; @@ -408,15 +423,17 @@
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Registers.Unset_And_Set_Mask - (Register => Registers.BLC_PWM_CPU_CTL, - Mask_Unset => CPU_BLC_PWM_DATA_BL_DUTY_CYC_MASK, - Mask_Set => Word32 (Level)); + if Config.Has_New_Backlight_Control then + Registers.Write (Registers.BXT_BLC_PWM_DUTY_1, Level); + else + Registers.Unset_And_Set_Mask + (Register => Registers.BLC_PWM_CPU_CTL, + Mask_Unset => CPU_BLC_PWM_DATA_BL_DUTY_CYC_MASK, + Mask_Set => Level); + end if; end Set_Backlight;
- procedure Get_Max_Backlight (Panel : Panel_Control; Level : out Word16) - is - Reg : Word32; + procedure Get_Max_Backlight (Panel : Panel_Control; Level : out Word32) is begin if Panel not in Valid_Panels then Level := 0; @@ -425,9 +442,12 @@
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Registers.Read (Registers.BLC_PWM_PCH_CTL2, Reg); - Level := Word16 - (Shift_Right (Reg and PCH_BLC_PWM_CTL2_BL_MOD_FREQ_MASK, 16)); + if Config.Has_New_Backlight_Control then + Registers.Read (Registers.BXT_BLC_PWM_FREQ_1, Level); + else + Registers.Read (Registers.BLC_PWM_PCH_CTL2, Level); + Level := Shift_Right (Level, PCH_BLC_PWM_CTL2_BL_MOD_FREQ_SHIFT); + end if; end Get_Max_Backlight;
end HW.GFX.GMA.Panel; diff --git a/common/hw-gfx-gma-panel.ads b/common/hw-gfx-gma-panel.ads index baf47f7..2a97f0e 100644 --- a/common/hw-gfx-gma-panel.ads +++ b/common/hw-gfx-gma-panel.ads @@ -54,8 +54,8 @@
procedure Backlight_Off (Panel : Panel_Control);
- procedure Set_Backlight (Panel : Panel_Control; Level : Word16); + procedure Set_Backlight (Panel : Panel_Control; Level : Word32);
- procedure Get_Max_Backlight (Panel : Panel_Control; Level : out Word16); + procedure Get_Max_Backlight (Panel : Panel_Control; Level : out Word32);
end HW.GFX.GMA.Panel;