ArmPlatformPkg: PCD to swap red/blue format for HDLCD

This change adds a new PCD PcdArmHdlcdSwapBlueRedSelect
to swap values for HDLCD RED_SELECT and BLUE_SELECT registers
on platforms where blue and red hardware lines are swapped.

If set to TRUE in the platform dsc, HDLCD library will swap the values
while setting RED_SELECT and BLUE_SELECT registers. The default
value of the PCD is FALSE.

NOTE: The motive for this is that a discrepancy in the Red/Blue lines
exists between some VersatileExpress platforms.  Rather than have
divergent code, this build switch allows a simple, pragmatic solution.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Girish Pathak <girish.pathak@arm.com>
Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
Girish Pathak 2017-09-26 21:15:25 +01:00 committed by Leif Lindholm
parent fe787dfb0f
commit 268aad6744
3 changed files with 16 additions and 2 deletions

View File

@ -100,6 +100,9 @@
# Default is set to UEFI console font format PixelBlueGreenRedReserved8BitPerColor
gArmPlatformTokenSpaceGuid.PcdGopPixelFormat|0x00000001|UINT32|0x00000040
## If set, this will swap settings for HDLCD RED_SELECT and BLUE_SELECT registers
gArmPlatformTokenSpaceGuid.PcdArmHdLcdSwapBlueRedSelect|FALSE|BOOLEAN|0x00000045
[PcdsFixedAtBuild.common,PcdsDynamic.common]
## PL031 RealTimeClock
gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x0|UINT32|0x00000024

View File

@ -73,6 +73,8 @@ LcdSetMode (
SCAN_TIMINGS *Horizontal;
SCAN_TIMINGS *Vertical;
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION ModeInfo;
// Set the video mode timings and other relevant information
@ -96,7 +98,14 @@ LcdSetMode (
return Status;
}
if (ModeInfo.PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {
// By default PcdArmHdLcdSwapBlueRedSelect is set to false
// However on the Juno platform HW lines for BLUE and RED are swapped
// Therefore PcdArmHdLcdSwapBlueRedSelect is set to TRUE for the Juno platform
PixelFormat = FixedPcdGetBool (PcdArmHdLcdSwapBlueRedSelect)
? PixelRedGreenBlueReserved8BitPerColor
: PixelBlueGreenRedReserved8BitPerColor;
if (ModeInfo.PixelFormat == PixelFormat) {
MmioWrite32 (HDLCD_REG_RED_SELECT, (8 << 8) | 16);
MmioWrite32 (HDLCD_REG_BLUE_SELECT, (8 << 8) | 0);
} else {

View File

@ -2,7 +2,7 @@
#
# Component description file for HDLCD module
#
# Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
# Copyright (c) 2011-2018, ARM Ltd. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@ -40,3 +40,5 @@
[FixedPcd]
gArmPlatformTokenSpaceGuid.PcdArmHdLcdBase
gArmPlatformTokenSpaceGuid.PcdArmHdLcdSwapBlueRedSelect