mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-15 00:56:22 +00:00
gma hsw transcoder: Choose PDW path for scaling on DDI A
If scaling is required, always drive DDI A through the Power Down Well (PDW) path. If not, keep the current "always on" path to allow power saving. Hopefully, this also enables us to use the eDP in legacy VGA text mode. Change-Id: Ia9135d253083d363872c7cf0b3e2b5b69ba0831f Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/26664 Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
@@ -556,7 +556,11 @@ package body HW.GFX.GMA.Pipe_Setup is
|
||||
|
||||
Setup_FB (Pipe, Port_Cfg.Mode, Framebuffer);
|
||||
|
||||
Transcoder.On (Pipe, Port_Cfg, Framebuffer.BPC /= Port_Cfg.Mode.BPC);
|
||||
Transcoder.On
|
||||
(Pipe => Pipe,
|
||||
Port_Cfg => Port_Cfg,
|
||||
Dither => Framebuffer.BPC /= Port_Cfg.Mode.BPC,
|
||||
Scale => Requires_Scaling (Framebuffer, Port_Cfg.Mode));
|
||||
end On;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- Copyright (C) 2015-2016 secunet Security Networks AG
|
||||
-- Copyright (C) 2015-2018 secunet Security Networks AG
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
@@ -76,11 +76,6 @@ package body HW.GFX.GMA.Transcoder is
|
||||
DDI_FUNC_CTL_MODE_SELECT_DP_SST : constant := 2 * 2 ** 24;
|
||||
DDI_FUNC_CTL_MODE_SELECT_DP_MST : constant := 3 * 2 ** 24;
|
||||
DDI_FUNC_CTL_MODE_SELECT_FDI : constant := 4 * 2 ** 24;
|
||||
DDI_FUNC_CTL_EDP_SELECT_MASK : constant := 7 * 2 ** 12;
|
||||
DDI_FUNC_CTL_EDP_SELECT_ALWAYS_ON : constant := 0 * 2 ** 12;
|
||||
DDI_FUNC_CTL_EDP_SELECT_A : constant := 4 * 2 ** 12;
|
||||
DDI_FUNC_CTL_EDP_SELECT_B : constant := 5 * 2 ** 12;
|
||||
DDI_FUNC_CTL_EDP_SELECT_C : constant := 6 * 2 ** 12;
|
||||
|
||||
type DDI_Select_Array is array (Digital_Port) of Word32;
|
||||
DDI_FUNC_CTL_DDI_SELECT : constant DDI_Select_Array :=
|
||||
@@ -105,16 +100,12 @@ package body HW.GFX.GMA.Transcoder is
|
||||
(False => 0 * 2 ** 16,
|
||||
True => 1 * 2 ** 16);
|
||||
|
||||
type EDP_Select_Array is array (Pipe_Index) of Word32;
|
||||
DDI_FUNC_CTL_EDP_SELECT : constant EDP_Select_Array :=
|
||||
(Primary => DDI_FUNC_CTL_EDP_SELECT_ALWAYS_ON, -- we never use
|
||||
-- panel fitter
|
||||
Secondary => DDI_FUNC_CTL_EDP_SELECT_B,
|
||||
Tertiary => DDI_FUNC_CTL_EDP_SELECT_C);
|
||||
DDI_FUNC_CTL_EDP_SELECT_ONOFF : constant EDP_Select_Array :=
|
||||
(Primary => DDI_FUNC_CTL_EDP_SELECT_A,
|
||||
Secondary => DDI_FUNC_CTL_EDP_SELECT_B,
|
||||
Tertiary => DDI_FUNC_CTL_EDP_SELECT_C);
|
||||
DDI_FUNC_CTL_EDP_SELECT_MASK : constant := 7 * 2 ** 12;
|
||||
DDI_FUNC_CTL_EDP_SELECT_ALWAYS_ON : constant := 0 * 2 ** 12;
|
||||
DDI_FUNC_CTL_EDP_SELECT : constant array (Pipe_Index) of Word32 :=
|
||||
(Primary => 4 * 2 ** 12,
|
||||
Secondary => 5 * 2 ** 12,
|
||||
Tertiary => 6 * 2 ** 12);
|
||||
|
||||
type Port_Width_Array is array (DP_Lane_Count) of Word32;
|
||||
DDI_FUNC_CTL_PORT_WIDTH : constant Port_Width_Array :=
|
||||
@@ -245,10 +236,16 @@ package body HW.GFX.GMA.Transcoder is
|
||||
procedure On
|
||||
(Pipe : Pipe_Index;
|
||||
Port_Cfg : Port_Config;
|
||||
Dither : Boolean)
|
||||
Dither : Boolean;
|
||||
Scale : Boolean)
|
||||
is
|
||||
Trans : Transcoder_Regs renames
|
||||
Transcoders (Get_Idx (Pipe, Port_Cfg.Port));
|
||||
EDP_Select : constant Word32 :=
|
||||
(if Pipe = Primary and not Scale then
|
||||
DDI_FUNC_CTL_EDP_SELECT_ALWAYS_ON
|
||||
else
|
||||
DDI_FUNC_CTL_EDP_SELECT (Pipe));
|
||||
begin
|
||||
if Config.Has_Pipe_DDI_Func and Port_Cfg.Port in Digital_Port then
|
||||
Registers.Write
|
||||
@@ -259,7 +256,7 @@ package body HW.GFX.GMA.Transcoder is
|
||||
DDI_FUNC_CTL_BPC (Port_Cfg.Mode.BPC) or
|
||||
DDI_FUNC_CTL_VSYNC (Port_Cfg.Mode.V_Sync_Active_High) or
|
||||
DDI_FUNC_CTL_HSYNC (Port_Cfg.Mode.H_Sync_Active_High) or
|
||||
DDI_FUNC_CTL_EDP_SELECT (Pipe) or
|
||||
EDP_Select or
|
||||
DDI_FUNC_CTL_PORT_WIDTH (Port_Cfg.DP.Lane_Count));
|
||||
end if;
|
||||
|
||||
@@ -308,7 +305,7 @@ package body HW.GFX.GMA.Transcoder is
|
||||
|
||||
if (Pipe = Primary and
|
||||
DDI_Func_Ctl = DDI_FUNC_CTL_EDP_SELECT_ALWAYS_ON) or
|
||||
DDI_Func_Ctl = DDI_FUNC_CTL_EDP_SELECT_ONOFF (Pipe)
|
||||
DDI_Func_Ctl = DDI_FUNC_CTL_EDP_SELECT (Pipe)
|
||||
then
|
||||
Trans_Off (Transcoders (Trans_EDP));
|
||||
end if;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- Copyright (C) 2015-2016 secunet Security Networks AG
|
||||
-- Copyright (C) 2015-2018 secunet Security Networks AG
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
@@ -19,7 +19,11 @@ private package HW.GFX.GMA.Transcoder
|
||||
is
|
||||
|
||||
procedure Setup (Pipe : Pipe_Index; Port_Cfg : Port_Config);
|
||||
procedure On (Pipe : Pipe_Index; Port_Cfg : Port_Config; Dither : Boolean);
|
||||
procedure On
|
||||
(Pipe : Pipe_Index;
|
||||
Port_Cfg : Port_Config;
|
||||
Dither : Boolean;
|
||||
Scale : Boolean);
|
||||
|
||||
procedure Off (Pipe : Pipe_Index);
|
||||
procedure Clk_Off (Pipe : Pipe_Index);
|
||||
|
||||
Reference in New Issue
Block a user