public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver
@ 2017-12-08 17:31 Ard Biesheuvel
  2017-12-08 17:31 ` [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class Ard Biesheuvel
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-08 17:31 UTC (permalink / raw)
  To: edk2-devel; +Cc: leif.lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

This is a rework of the patch 'ArmPlatformPkg: Reorganize Lcd Graphics Output'
sent out by Evan on September 26 [0]

I have split it up for easier review, and droppped then changes to VExpress
specific libraries and instead, moved those into edk2-platforms. A separate
series is forthcoming. All patches of this series except the last one can
be merged before the edk2-platforms series.

The purpose is to separate the LCD output graphics driver from ARM VExpress
specific details, so that the core code can be reused more easily, and the
platform specific code moved out of the main EDK2 repository.

v2: the VExpress specific bits are already gone, so what remains is the
    refactoring of LcdGraphicsOutputDxe itself.

Cc: Girish Pathak <girish.pathak@arm.com>
Cc: Evan Lloyd <evan.lloyd@arm.com>

[0] https://lists.01.org/pipermail/edk2-devel/2017-September/015337.html

Ard Biesheuvel (5):
  ArmPlatformPkg: introduce LcdHwLib library class
  ArmPlatformPkg: implement LcdHwLib for PL111
  ArmPlatformPkg: implement LcdHwLib for HdLcd
  ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver
  ArmPlatformPkg: remove old PL111/HdLcd driver code

 ArmPlatformPkg/ArmPlatformPkg.dec                                                                       |  1 +
 ArmPlatformPkg/ArmPlatformPkg.dsc                                                                       |  5 +-
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h                                      | 21 +-----
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/{PL111LcdGraphicsOutputDxe.inf => LcdGraphicsOutputDxe.inf} | 32 ++++-----
 ArmPlatformPkg/Include/Library/LcdHwLib.h                                                               | 68 ++++++++++++++++++
 ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/HdLcd}/HdLcd.c                                  | 28 +++++++-
 ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/HdLcd}/HdLcd.h                                  |  0
 ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf => Library/HdLcd/HdLcd.inf}     | 32 ++-------
 ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c                                                      | 75 ++++++++++++++++++++
 ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf                                                    | 28 ++++++++
 ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/PL111Lcd}/PL111Lcd.c                            |  5 +-
 ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/PL111Lcd}/PL111Lcd.h                            |  0
 ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf                                                            | 40 +++++++++++
 13 files changed, 266 insertions(+), 69 deletions(-)
 rename ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/{PL111LcdGraphicsOutputDxe.inf => LcdGraphicsOutputDxe.inf} (73%)
 create mode 100644 ArmPlatformPkg/Include/Library/LcdHwLib.h
 rename ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/HdLcd}/HdLcd.c (86%)
 rename ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/HdLcd}/HdLcd.h (100%)
 rename ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf => Library/HdLcd/HdLcd.inf} (56%)
 create mode 100644 ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
 create mode 100644 ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
 rename ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/PL111Lcd}/PL111Lcd.c (94%)
 rename ArmPlatformPkg/{Drivers/LcdGraphicsOutputDxe => Library/PL111Lcd}/PL111Lcd.h (100%)
 create mode 100644 ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf

-- 
2.11.0



^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class
  2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
@ 2017-12-08 17:31 ` Ard Biesheuvel
  2017-12-11 17:32   ` Leif Lindholm
  2017-12-08 17:31 ` [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111 Ard Biesheuvel
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-08 17:31 UTC (permalink / raw)
  To: edk2-devel; +Cc: leif.lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

Add the declaration and include file for the new LcdHwLib library class,
which will allow us to abstract away from platform  variations in the
LCD graphics output driver.

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>
[ardb: add NULL implementation as well and add it to ArmPlatformPkg.dsc]
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 ArmPlatformPkg/ArmPlatformPkg.dec                    |  1 +
 ArmPlatformPkg/ArmPlatformPkg.dsc                    |  1 +
 ArmPlatformPkg/Include/Library/LcdHwLib.h            | 68 ++++++++++++++++++
 ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c   | 75 ++++++++++++++++++++
 ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf | 28 ++++++++
 5 files changed, 173 insertions(+)

diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
index 6a7bbc02d011..b33b6e630d85 100644
--- a/ArmPlatformPkg/ArmPlatformPkg.dec
+++ b/ArmPlatformPkg/ArmPlatformPkg.dec
@@ -33,6 +33,7 @@ [Includes.common]
 
 [LibraryClasses]
   ArmPlatformLib|Include/Library/ArmPlatformLib.h
+  LcdHwLib|Include/Library/LcdHwLib.h
   LcdPlatformLib|Include/Library/LcdPlatformLib.h
   NorFlashPlatformLib|Include/Library/NorFlashPlatformLib.h
   PL011UartLib|Include/Library/PL011UartLib.h
diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
index c3a8c257cb02..9dd64b472acf 100644
--- a/ArmPlatformPkg/ArmPlatformPkg.dsc
+++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
@@ -101,6 +101,7 @@ [Components.common]
 
   ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.inf
   ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
+  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
   ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
   ArmPlatformPkg/Library/NorFlashPlatformNullLib/NorFlashPlatformNullLib.inf
   ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
diff --git a/ArmPlatformPkg/Include/Library/LcdHwLib.h b/ArmPlatformPkg/Include/Library/LcdHwLib.h
new file mode 100644
index 000000000000..0c0480862aea
--- /dev/null
+++ b/ArmPlatformPkg/Include/Library/LcdHwLib.h
@@ -0,0 +1,68 @@
+/** @file LcdHwLib.h
+
+  This file contains interface functions for LcdHwLib of ArmPlatformPkg
+
+  Copyright (c) 2017, 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
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef LCD_HW_LIB_H_
+#define LCD_HW_LIB_H_
+
+#include <Uefi/UefiBaseType.h>
+
+/**
+  Check for presence of display
+
+  @retval EFI_SUCCESS            Platform implements display.
+  @retval EFI_NOT_FOUND          Display not found on the platform.
+
+**/
+EFI_STATUS
+LcdIdentify (
+  VOID
+  );
+
+/**
+  Initialize display.
+
+  @param  FrameBaseAddress       Address of the frame buffer.
+  @retval EFI_SUCCESS            Display initialization success.
+  @retval !(EFI_SUCCESS)         Display initialization failure.
+
+**/
+EFI_STATUS
+LcdInitialize (
+  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
+  );
+
+/**
+  Set requested mode of the display.
+
+  @param  ModeNumber             Display mode number.
+  @retval EFI_SUCCESS            Display set mode success.
+  @retval EFI_DEVICE_ERROR       If mode not found/supported.
+
+**/
+EFI_STATUS
+LcdSetMode (
+  IN UINT32  ModeNumber
+  );
+
+/**
+  De-initializes the display.
+**/
+VOID
+LcdShutdown (
+  VOID
+  );
+
+#endif /* LCD_HW_LIB_H_ */
diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
new file mode 100644
index 000000000000..2d31b5183c95
--- /dev/null
+++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
@@ -0,0 +1,75 @@
+/** @file
+
+  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD License
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include <Base.h>
+#include <Uefi/UefiBaseType.h>
+#include <Library/DebugLib.h>
+#include <Library/LcdPlatformLib.h>
+
+/**
+  Check for presence of display
+  
+  @retval EFI_SUCCESS            Platform implements display.
+  @retval EFI_NOT_FOUND          Display not found on the platform.
+
+**/
+EFI_STATUS
+LcdIdentify (
+  VOID
+  )
+{
+  return EFI_SUCCESS;
+}
+
+/**
+  Initialize display.
+
+  @param  FrameBaseAddress       Address of the frame buffer.
+  @retval EFI_SUCCESS            Display initialization success.
+  @retval !(EFI_SUCCESS)         Display initialization failure.
+
+**/
+EFI_STATUS
+LcdInitialize (
+  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
+  )
+{
+  return EFI_SUCCESS;
+}
+
+/**
+  Set requested mode of the display.
+
+  @param  ModeNumber             Display mode number.
+  @retval EFI_SUCCESS            Display set mode success.
+  @retval EFI_DEVICE_ERROR       If mode not found/supported.
+
+**/
+EFI_STATUS
+LcdSetMode (
+  IN UINT32  ModeNumber
+  )
+{
+  return EFI_SUCCESS;
+}
+
+/**
+  De-initializes the display.
+**/
+VOID
+LcdShutdown (
+  VOID
+  )
+{
+}
diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
new file mode 100644
index 000000000000..d556bed65548
--- /dev/null
+++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
@@ -0,0 +1,28 @@
+#/** @file
+#
+#  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
+#
+#  This program and the accompanying materials
+#  are licensed and made available under the terms and conditions of the BSD License
+#  which accompanies this distribution.  The full text of the license may be found at
+#  http://opensource.org/licenses/bsd-license.php
+#
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#**/
+
+[Defines]
+  INF_VERSION                    = 0x0001001A
+  BASE_NAME                      = LcdHwNullLib
+  FILE_GUID                      = bb1fde98-1de2-410e-8850-fdcb8e67ebc0
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = LcdHwLib
+
+[Sources]
+  LcdHwNullLib.c
+
+[Packages]
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  MdePkg/MdePkg.dec
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111
  2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
  2017-12-08 17:31 ` [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class Ard Biesheuvel
@ 2017-12-08 17:31 ` Ard Biesheuvel
  2017-12-11 17:39   ` Leif Lindholm
  2017-12-08 17:31 ` [PATCH v2 3/5] ArmPlatformPkg: implement LcdHwLib for HdLcd Ard Biesheuvel
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-08 17:31 UTC (permalink / raw)
  To: edk2-devel; +Cc: leif.lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

Convert the PL111 specific code of LcdGraphicsOutputDxe into a LcdHwlib
implementation that we will wire up later into LcdGraphicsOutputDxe.

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>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c   | 126 +++++++++++++++++
 ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h   | 149 ++++++++++++++++++++
 ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf |  40 ++++++
 3 files changed, 315 insertions(+)

diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
new file mode 100644
index 000000000000..9b4a02045ab7
--- /dev/null
+++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
@@ -0,0 +1,126 @@
+/** @file  PL111Lcd.c
+
+  Copyright (c) 2011-2012, 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
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/LcdHwLib.h>
+#include <Library/LcdPlatformLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include "PL111Lcd.h"
+
+/**********************************************************************
+ *
+ *  This file contains all the bits of the PL111 that are
+ *  platform independent.
+ *
+ **********************************************************************/
+
+EFI_STATUS
+LcdIdentify (
+  VOID
+  )
+{
+  DEBUG ((EFI_D_WARN, "Probing ID registers at 0x%lx for a PL111\n",
+    PL111_REG_CLCD_PERIPH_ID_0));
+
+  // Check if this is a PL111
+  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 &&
+      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 &&
+     (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2) & 0xf) == PL111_CLCD_PERIPH_ID_2 &&
+      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 &&
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 &&
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 &&
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 &&
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
+    return EFI_SUCCESS;
+  }
+  return EFI_NOT_FOUND;
+}
+
+EFI_STATUS
+LcdInitialize (
+  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
+  )
+{
+  // Define start of the VRAM. This never changes for any graphics mode
+  MmioWrite32(PL111_REG_LCD_UP_BASE, (UINT32) VramBaseAddress);
+  MmioWrite32(PL111_REG_LCD_LP_BASE, 0); // We are not using a double buffer
+
+  // Disable all interrupts from the PL111
+  MmioWrite32(PL111_REG_LCD_IMSC, 0);
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+LcdSetMode (
+  IN UINT32  ModeNumber
+  )
+{
+  EFI_STATUS        Status;
+  UINT32            HRes;
+  UINT32            HSync;
+  UINT32            HBackPorch;
+  UINT32            HFrontPorch;
+  UINT32            VRes;
+  UINT32            VSync;
+  UINT32            VBackPorch;
+  UINT32            VFrontPorch;
+  UINT32            LcdControl;
+  LCD_BPP           LcdBpp;
+
+  // Set the video mode timings and other relevant information
+  Status = LcdPlatformGetTimings (ModeNumber,
+                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
+                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
+  ASSERT_EFI_ERROR (Status);
+  if (EFI_ERROR( Status )) {
+    return EFI_DEVICE_ERROR;
+  }
+
+  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
+  ASSERT_EFI_ERROR (Status);
+  if (EFI_ERROR( Status )) {
+    return EFI_DEVICE_ERROR;
+  }
+
+  // Disable the CLCD_LcdEn bit
+  LcdControl = MmioRead32( PL111_REG_LCD_CONTROL);
+  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl & ~1);
+
+  // Set Timings
+  MmioWrite32 (PL111_REG_LCD_TIMING_0, HOR_AXIS_PANEL(HBackPorch, HFrontPorch, HSync, HRes));
+  MmioWrite32 (PL111_REG_LCD_TIMING_1, VER_AXIS_PANEL(VBackPorch, VFrontPorch, VSync, VRes));
+  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY(HRes));
+  MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
+
+  // PL111_REG_LCD_CONTROL
+  LcdControl = PL111_CTRL_LCD_EN | PL111_CTRL_LCD_BPP(LcdBpp) | PL111_CTRL_LCD_TFT | PL111_CTRL_BGR;
+  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
+
+  // Turn on power to the LCD Panel
+  LcdControl |= PL111_CTRL_LCD_PWR;
+  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
+
+  return EFI_SUCCESS;
+}
+
+VOID
+LcdShutdown (
+  VOID
+  )
+{
+  // Disable the controller
+  MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
+}
diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h
new file mode 100644
index 000000000000..18e28af805f6
--- /dev/null
+++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h
@@ -0,0 +1,149 @@
+/** @file  PL111Lcd.h
+
+ Copyright (c) 2011, 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
+ which accompanies this distribution.  The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ **/
+
+#ifndef _PL111LCD_H__
+#define _PL111LCD_H__
+
+/**********************************************************************
+ *
+ *  This header file contains all the bits of the PL111 that are
+ *  platform independent.
+ *
+ **********************************************************************/
+
+// Controller Register Offsets
+#define PL111_REG_LCD_TIMING_0            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x000)
+#define PL111_REG_LCD_TIMING_1            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x004)
+#define PL111_REG_LCD_TIMING_2            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x008)
+#define PL111_REG_LCD_TIMING_3            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x00C)
+#define PL111_REG_LCD_UP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x010)
+#define PL111_REG_LCD_LP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x014)
+#define PL111_REG_LCD_CONTROL             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x018)
+#define PL111_REG_LCD_IMSC                ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x01C)
+#define PL111_REG_LCD_RIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x020)
+#define PL111_REG_LCD_MIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x024)
+#define PL111_REG_LCD_ICR                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x028)
+#define PL111_REG_LCD_UP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x02C)
+#define PL111_REG_LCD_LP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x030)
+#define PL111_REG_LCD_PALETTE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x200)
+
+// Identification Register Offsets
+#define PL111_REG_CLCD_PERIPH_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE0)
+#define PL111_REG_CLCD_PERIPH_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE4)
+#define PL111_REG_CLCD_PERIPH_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE8)
+#define PL111_REG_CLCD_PERIPH_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFEC)
+#define PL111_REG_CLCD_P_CELL_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF0)
+#define PL111_REG_CLCD_P_CELL_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF4)
+#define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)
+#define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)
+
+#define PL111_CLCD_PERIPH_ID_0            0x11
+#define PL111_CLCD_PERIPH_ID_1            0x11
+#define PL111_CLCD_PERIPH_ID_2            0x04
+#define PL111_CLCD_PERIPH_ID_3            0x00
+#define PL111_CLCD_P_CELL_ID_0            0x0D
+#define PL111_CLCD_P_CELL_ID_1            0xF0
+#define PL111_CLCD_P_CELL_ID_2            0x05
+#define PL111_CLCD_P_CELL_ID_3            0xB1
+
+/**********************************************************************/
+
+// Register components (register bits)
+
+// This should make life easier to program specific settings in the different registers
+// by simplifying the setting up of the individual bits of each register
+// and then assembling the final register value.
+
+/**********************************************************************/
+
+// Register: PL111_REG_LCD_TIMING_0
+#define HOR_AXIS_PANEL(hbp,hfp,hsw,hor_res) (UINT32)(((UINT32)(hbp) << 24) | ((UINT32)(hfp) << 16) | ((UINT32)(hsw) << 8) | (((UINT32)((hor_res)/16)-1) << 2))
+
+// Register: PL111_REG_LCD_TIMING_1
+#define VER_AXIS_PANEL(vbp,vfp,vsw,ver_res) (UINT32)(((UINT32)(vbp) << 24) | ((UINT32)(vfp) << 16) | ((UINT32)(vsw) << 10) | ((ver_res)-1))
+
+// Register: PL111_REG_LCD_TIMING_2
+#define PL111_BIT_SHIFT_PCD_HI            27
+#define PL111_BIT_SHIFT_BCD               26
+#define PL111_BIT_SHIFT_CPL               16
+#define PL111_BIT_SHIFT_IOE               14
+#define PL111_BIT_SHIFT_IPC               13
+#define PL111_BIT_SHIFT_IHS               12
+#define PL111_BIT_SHIFT_IVS               11
+#define PL111_BIT_SHIFT_ACB               6
+#define PL111_BIT_SHIFT_CLKSEL            5
+#define PL111_BIT_SHIFT_PCD_LO            0
+
+#define PL111_BCD                         (1 << 26)
+#define PL111_IPC                         (1 << 13)
+#define PL111_IHS                         (1 << 12)
+#define PL111_IVS                         (1 << 11)
+
+#define CLK_SIG_POLARITY(hor_res)         (UINT32)(PL111_BCD | PL111_IPC | PL111_IHS | PL111_IVS | (((hor_res)-1) << 16))
+
+// Register: PL111_REG_LCD_TIMING_3
+#define PL111_BIT_SHIFT_LEE               16
+#define PL111_BIT_SHIFT_LED               0
+
+#define PL111_CTRL_WATERMARK              (1 << 16)
+#define PL111_CTRL_LCD_V_COMP             (1 << 12)
+#define PL111_CTRL_LCD_PWR                (1 << 11)
+#define PL111_CTRL_BEPO                   (1 << 10)
+#define PL111_CTRL_BEBO                   (1 << 9)
+#define PL111_CTRL_BGR                    (1 << 8)
+#define PL111_CTRL_LCD_DUAL               (1 << 7)
+#define PL111_CTRL_LCD_MONO_8             (1 << 6)
+#define PL111_CTRL_LCD_TFT                (1 << 5)
+#define PL111_CTRL_LCD_BW                 (1 << 4)
+#define PL111_CTRL_LCD_1BPP               (0 << 1)
+#define PL111_CTRL_LCD_2BPP               (1 << 1)
+#define PL111_CTRL_LCD_4BPP               (2 << 1)
+#define PL111_CTRL_LCD_8BPP               (3 << 1)
+#define PL111_CTRL_LCD_16BPP              (4 << 1)
+#define PL111_CTRL_LCD_24BPP              (5 << 1)
+#define PL111_CTRL_LCD_16BPP_565          (6 << 1)
+#define PL111_CTRL_LCD_12BPP_444          (7 << 1)
+#define PL111_CTRL_LCD_BPP(Bpp)           ((Bpp) << 1)
+#define PL111_CTRL_LCD_EN                 1
+
+/**********************************************************************/
+
+// Register: PL111_REG_LCD_TIMING_0
+#define PL111_LCD_TIMING_0_HBP(hbp)       (((hbp) & 0xFF) << 24)
+#define PL111_LCD_TIMING_0_HFP(hfp)       (((hfp) & 0xFF) << 16)
+#define PL111_LCD_TIMING_0_HSW(hsw)       (((hsw) & 0xFF) << 8)
+#define PL111_LCD_TIMING_0_PPL(ppl)       (((hsw) & 0x3F) << 2)
+
+// Register: PL111_REG_LCD_TIMING_1
+#define PL111_LCD_TIMING_1_VBP(vbp)       (((vbp) & 0xFF) << 24)
+#define PL111_LCD_TIMING_1_VFP(vfp)       (((vfp) & 0xFF) << 16)
+#define PL111_LCD_TIMING_1_VSW(vsw)       (((vsw) & 0x3F) << 10)
+#define PL111_LCD_TIMING_1_LPP(lpp)        ((lpp) & 0xFC)
+
+// Register: PL111_REG_LCD_TIMING_2
+#define PL111_BIT_MASK_PCD_HI             0xF8000000
+#define PL111_BIT_MASK_BCD                0x04000000
+#define PL111_BIT_MASK_CPL                0x03FF0000
+#define PL111_BIT_MASK_IOE                0x00004000
+#define PL111_BIT_MASK_IPC                0x00002000
+#define PL111_BIT_MASK_IHS                0x00001000
+#define PL111_BIT_MASK_IVS                0x00000800
+#define PL111_BIT_MASK_ACB                0x000007C0
+#define PL111_BIT_MASK_CLKSEL             0x00000020
+#define PL111_BIT_MASK_PCD_LO             0x0000001F
+
+// Register: PL111_REG_LCD_TIMING_3
+#define PL111_BIT_MASK_LEE                0x00010000
+#define PL111_BIT_MASK_LED                0x0000007F
+
+#endif /* _PL111LCD_H__ */
diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf
new file mode 100644
index 000000000000..40db77eb079e
--- /dev/null
+++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf
@@ -0,0 +1,40 @@
+#/** @file PL111Lcd.inf
+#
+#  Component description file for PL111Lcd module
+#
+#  Copyright (c) 2011-2017, 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
+#  which accompanies this distribution.  The full text of the license may be found at
+#  http://opensource.org/licenses/bsd-license.php
+#
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#**/
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = PL111Lcd
+  FILE_GUID                      = 407B4008-BF5B-11DF-9547-CF16E0D72085
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = LcdHwLib
+
+[Sources.common]
+  PL111Lcd.c
+
+[Packages]
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  ArmPkg/ArmPkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  UefiLib
+  BaseLib
+  DebugLib
+  IoLib
+
+[FixedPcd]
+  gArmPlatformTokenSpaceGuid.PcdPL111LcdBase
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 3/5] ArmPlatformPkg: implement LcdHwLib for HdLcd
  2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
  2017-12-08 17:31 ` [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class Ard Biesheuvel
  2017-12-08 17:31 ` [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111 Ard Biesheuvel
@ 2017-12-08 17:31 ` Ard Biesheuvel
  2017-12-11 17:41   ` Leif Lindholm
  2017-12-08 17:31 ` [PATCH v2 4/5] ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver Ard Biesheuvel
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-08 17:31 UTC (permalink / raw)
  To: edk2-devel; +Cc: leif.lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

Convert the HdLcd specific code of LcdGraphicsOutputDxe into a LcdHwlib
implementation that we will wire up later into LcdGraphicsOutputDxe.

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>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 ArmPlatformPkg/Library/HdLcd/HdLcd.c   | 158 ++++++++++++++++++++
 ArmPlatformPkg/Library/HdLcd/HdLcd.h   |  89 +++++++++++
 ArmPlatformPkg/Library/HdLcd/HdLcd.inf |  42 ++++++
 3 files changed, 289 insertions(+)

diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.c b/ArmPlatformPkg/Library/HdLcd/HdLcd.c
new file mode 100644
index 000000000000..24efb68f23e3
--- /dev/null
+++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.c
@@ -0,0 +1,158 @@
+/** @file  Lcd.c
+
+  Copyright (c) 2011-2012, 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
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/LcdHwLib.h>
+#include <Library/LcdPlatformLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PcdLib.h>
+
+#include "HdLcd.h"
+
+/**********************************************************************
+ *
+ *  This file contains all the bits of the Lcd that are
+ *  platform independent.
+ *
+ **********************************************************************/
+
+STATIC
+UINTN
+GetBytesPerPixel (
+  IN  LCD_BPP       Bpp
+  )
+{
+  switch(Bpp) {
+  case LCD_BITS_PER_PIXEL_24:
+    return 4;
+
+  case LCD_BITS_PER_PIXEL_16_565:
+  case LCD_BITS_PER_PIXEL_16_555:
+  case LCD_BITS_PER_PIXEL_12_444:
+    return 2;
+
+  case LCD_BITS_PER_PIXEL_8:
+  case LCD_BITS_PER_PIXEL_4:
+  case LCD_BITS_PER_PIXEL_2:
+  case LCD_BITS_PER_PIXEL_1:
+    return 1;
+
+  default:
+    return 0;
+  }
+}
+
+EFI_STATUS
+LcdInitialize (
+  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
+  )
+{
+  // Disable the controller
+  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
+
+  // Disable all interrupts
+  MmioWrite32(HDLCD_REG_INT_MASK, 0);
+
+  // Define start of the VRAM. This never changes for any graphics mode
+  MmioWrite32(HDLCD_REG_FB_BASE, (UINT32) VramBaseAddress);
+
+  // Setup various registers that never change
+  MmioWrite32(HDLCD_REG_BUS_OPTIONS,  (4 << 8) | HDLCD_BURST_8);
+  MmioWrite32(HDLCD_REG_POLARITIES,   HDLCD_PXCLK_LOW | HDLCD_DATA_HIGH | HDLCD_DATEN_HIGH | HDLCD_HSYNC_LOW | HDLCD_VSYNC_HIGH);
+  MmioWrite32(HDLCD_REG_PIXEL_FORMAT, HDLCD_LITTLE_ENDIAN | HDLCD_4BYTES_PER_PIXEL);
+  MmioWrite32(HDLCD_REG_RED_SELECT,   (0 << 16 | 8 << 8 |  0));
+  MmioWrite32(HDLCD_REG_GREEN_SELECT, (0 << 16 | 8 << 8 |  8));
+  MmioWrite32(HDLCD_REG_BLUE_SELECT,  (0 << 16 | 8 << 8 | 16));
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+LcdSetMode (
+  IN UINT32  ModeNumber
+  )
+{
+  EFI_STATUS        Status;
+  UINT32            HRes;
+  UINT32            HSync;
+  UINT32            HBackPorch;
+  UINT32            HFrontPorch;
+  UINT32            VRes;
+  UINT32            VSync;
+  UINT32            VBackPorch;
+  UINT32            VFrontPorch;
+  UINT32            BytesPerPixel;
+  LCD_BPP           LcdBpp;
+
+
+  // Set the video mode timings and other relevant information
+  Status = LcdPlatformGetTimings (ModeNumber,
+                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
+                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
+  ASSERT_EFI_ERROR (Status);
+  if (EFI_ERROR( Status )) {
+    return EFI_DEVICE_ERROR;
+  }
+
+  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
+  ASSERT_EFI_ERROR (Status);
+  if (EFI_ERROR( Status )) {
+    return EFI_DEVICE_ERROR;
+  }
+
+  BytesPerPixel = GetBytesPerPixel(LcdBpp);
+
+  // Disable the controller
+  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
+
+  // Update the frame buffer information with the new settings
+  MmioWrite32(HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
+  MmioWrite32(HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
+  MmioWrite32(HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
+
+  // Set the vertical timing information
+  MmioWrite32(HDLCD_REG_V_SYNC,         VSync);
+  MmioWrite32(HDLCD_REG_V_BACK_PORCH,   VBackPorch);
+  MmioWrite32(HDLCD_REG_V_DATA,         VRes - 1);
+  MmioWrite32(HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
+
+  // Set the horizontal timing information
+  MmioWrite32(HDLCD_REG_H_SYNC,         HSync);
+  MmioWrite32(HDLCD_REG_H_BACK_PORCH,   HBackPorch);
+  MmioWrite32(HDLCD_REG_H_DATA,         HRes - 1);
+  MmioWrite32(HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
+
+  // Enable the controller
+  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_ENABLE);
+
+  return EFI_SUCCESS;
+}
+
+VOID
+LcdShutdown (
+  VOID
+  )
+{
+  // Disable the controller
+  MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
+}
+
+EFI_STATUS
+LcdIdentify (
+  VOID
+  )
+{
+  return EFI_SUCCESS;
+}
diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.h b/ArmPlatformPkg/Library/HdLcd/HdLcd.h
new file mode 100644
index 000000000000..6df97a9dfee6
--- /dev/null
+++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.h
@@ -0,0 +1,89 @@
+/** @file  HDLcd.h
+
+ Copyright (c) 2011-2012, 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
+ which accompanies this distribution.  The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ **/
+
+#ifndef _HDLCD_H_
+#define _HDLCD_H_
+
+//
+// HDLCD Controller Register Offsets
+//
+
+#define HDLCD_REG_VERSION                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x000)
+#define HDLCD_REG_INT_RAWSTAT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x010)
+#define HDLCD_REG_INT_CLEAR               ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x014)
+#define HDLCD_REG_INT_MASK                ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x018)
+#define HDLCD_REG_INT_STATUS              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x01C)
+#define HDLCD_REG_FB_BASE                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x100)
+#define HDLCD_REG_FB_LINE_LENGTH          ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x104)
+#define HDLCD_REG_FB_LINE_COUNT           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x108)
+#define HDLCD_REG_FB_LINE_PITCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x10C)
+#define HDLCD_REG_BUS_OPTIONS             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x110)
+#define HDLCD_REG_V_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x200)
+#define HDLCD_REG_V_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x204)
+#define HDLCD_REG_V_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x208)
+#define HDLCD_REG_V_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x20C)
+#define HDLCD_REG_H_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x210)
+#define HDLCD_REG_H_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x214)
+#define HDLCD_REG_H_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x218)
+#define HDLCD_REG_H_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x21C)
+#define HDLCD_REG_POLARITIES              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x220)
+#define HDLCD_REG_COMMAND                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x230)
+#define HDLCD_REG_PIXEL_FORMAT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x240)
+#define HDLCD_REG_RED_SELECT              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x244)
+#define HDLCD_REG_GREEN_SELECT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x248)
+#define HDLCD_REG_BLUE_SELECT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x24C)
+
+
+//
+// HDLCD Values of registers
+//
+
+// HDLCD Interrupt mask, clear and status register
+#define HDLCD_DMA_END                     BIT0    /* DMA has finished reading a frame */
+#define HDLCD_BUS_ERROR                   BIT1    /* DMA bus error */
+#define HDLCD_SYNC                        BIT2    /* Vertical sync */
+#define HDLCD_UNDERRUN                    BIT3    /* No Data available while DATAEN active */
+
+// CLCD_CONTROL Control register
+#define HDLCD_DISABLE                     0
+#define HDLCD_ENABLE                      BIT0
+
+// Bus Options
+#define HDLCD_BURST_1                     BIT0
+#define HDLCD_BURST_2                     BIT1
+#define HDLCD_BURST_4                     BIT2
+#define HDLCD_BURST_8                     BIT3
+#define HDLCD_BURST_16                    BIT4
+
+// Polarities - HIGH
+#define HDLCD_VSYNC_HIGH                  BIT0
+#define HDLCD_HSYNC_HIGH                  BIT1
+#define HDLCD_DATEN_HIGH                  BIT2
+#define HDLCD_DATA_HIGH                   BIT3
+#define HDLCD_PXCLK_HIGH                  BIT4
+// Polarities - LOW (for completion and for ease of understanding the hardware settings)
+#define HDLCD_VSYNC_LOW                   0
+#define HDLCD_HSYNC_LOW                   0
+#define HDLCD_DATEN_LOW                   0
+#define HDLCD_DATA_LOW                    0
+#define HDLCD_PXCLK_LOW                   0
+
+// Pixel Format
+#define HDLCD_LITTLE_ENDIAN              (0 << 31)
+#define HDLCD_BIG_ENDIAN                 (1 << 31)
+
+// Number of bytes per pixel
+#define HDLCD_4BYTES_PER_PIXEL           ((4 - 1) << 3)
+
+#endif /* _HDLCD_H_ */
diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.inf b/ArmPlatformPkg/Library/HdLcd/HdLcd.inf
new file mode 100644
index 000000000000..67aad05d210b
--- /dev/null
+++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.inf
@@ -0,0 +1,42 @@
+#/** @file
+#
+#  Component description file for HDLCD module
+#
+#  Copyright (c) 2011-2012, 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
+#  which accompanies this distribution.  The full text of the license may be found at
+#  http://opensource.org/licenses/bsd-license.php
+#
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#**/
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = HdLcd
+  FILE_GUID                      = ce660500-824d-11e0-ac72-0002a5d5c51b
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = LcdHwLib
+
+[Sources.common]
+  HdLcd.c
+
+[Packages]
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  ArmPkg/ArmPkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  ArmLib
+  UefiLib
+  BaseLib
+  DebugLib
+  IoLib
+
+[FixedPcd]
+  gArmPlatformTokenSpaceGuid.PcdArmHdLcdBase
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 4/5] ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver
  2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
                   ` (2 preceding siblings ...)
  2017-12-08 17:31 ` [PATCH v2 3/5] ArmPlatformPkg: implement LcdHwLib for HdLcd Ard Biesheuvel
@ 2017-12-08 17:31 ` Ard Biesheuvel
  2017-12-11 17:42   ` Leif Lindholm
  2017-12-08 17:31 ` [PATCH v2 5/5] ArmPlatformPkg: remove old PL111/HdLcd driver code Ard Biesheuvel
  2017-12-12 17:44 ` [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
  5 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-08 17:31 UTC (permalink / raw)
  To: edk2-devel; +Cc: leif.lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

Create a new LcdGraphicsOutputDxe driver from the existing sources that
takes its hardware abstractions from a LcdHwLib library instance rather
than from a .c file linked directly. All we need is a new .inf file, and
a minimal tweak to LcdGraphicsOutputDxe.h to reuse the LcdHwlib prototypes
rather than open code them.

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>
[ardb: add it to ArmPlatformPkg.dsc so we can build test it standalone]
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 ArmPlatformPkg/ArmPlatformPkg.dsc                                    |  2 +
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h   | 21 +-------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf | 54 ++++++++++++++++++++
 3 files changed, 57 insertions(+), 20 deletions(-)

diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
index 9dd64b472acf..69ae9b67bc79 100644
--- a/ArmPlatformPkg/ArmPlatformPkg.dsc
+++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
@@ -53,6 +53,7 @@ [LibraryClasses.common]
   DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
   HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
   IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
+  LcdHwLib|ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
   LcdPlatformLib|ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
   LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
   MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
@@ -93,6 +94,7 @@ [LibraryClasses.common.SEC]
 
 [Components.common]
   ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
+  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
   ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
   ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf
   ArmPlatformPkg/Drivers/PL061GpioDxe/PL061GpioDxe.inf
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
index 8856b79901b6..b66efd34561f 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
@@ -18,6 +18,7 @@
 #include <Base.h>
 
 #include <Library/DebugLib.h>
+#include <Library/LcdHwLib.h>
 #include <Library/LcdPlatformLib.h>
 #include <Library/PcdLib.h>
 #include <Library/UefiLib.h>
@@ -105,24 +106,4 @@ InitializeDisplay (
   IN LCD_INSTANCE* Instance
 );
 
-EFI_STATUS
-LcdIdentify (
-  VOID
-);
-
-EFI_STATUS
-LcdInitialize (
-  EFI_PHYSICAL_ADDRESS  VramBaseAddress
-);
-
-EFI_STATUS
-LcdSetMode (
-  IN UINT32  ModeNumber
-);
-
-VOID
-LcdShutdown (
-  VOID
-);
-
 #endif /* __ARM_VE_GRAPHICS_DXE_H__ */
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
new file mode 100644
index 000000000000..e6424475f79d
--- /dev/null
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
@@ -0,0 +1,54 @@
+#/** @file
+#
+#  Component description file for LcdGraphicsOutputDxe module
+#
+#  Copyright (c) 2011-2012, 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
+#  which accompanies this distribution.  The full text of the license may be found at
+#  http://opensource.org/licenses/bsd-license.php
+#
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#**/
+
+[Defines]
+  INF_VERSION                    = 0x0001001A
+  BASE_NAME                      = LcdGraphicsOutputDxe
+  FILE_GUID                      = 89464DAE-8DAA-41FE-A4C8-40D2175AF1E9
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = LcdGraphicsOutputDxeInitialize
+
+[Sources.common]
+  LcdGraphicsOutputDxe.c
+  LcdGraphicsOutputBlt.c
+
+[Packages]
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  ArmPkg/ArmPkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  ArmLib
+  BaseLib
+  BaseMemoryLib
+  DebugLib
+  LcdHwLib
+  LcdPlatformLib
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+  UefiLib
+
+[Protocols]
+  gEfiDevicePathProtocolGuid
+  gEfiGraphicsOutputProtocolGuid
+
+[FeaturePcd]
+  gArmPlatformTokenSpaceGuid.PcdGopDisableOnExitBootServices
+
+[Depex]
+  TRUE
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 5/5] ArmPlatformPkg: remove old PL111/HdLcd driver code
  2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
                   ` (3 preceding siblings ...)
  2017-12-08 17:31 ` [PATCH v2 4/5] ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver Ard Biesheuvel
@ 2017-12-08 17:31 ` Ard Biesheuvel
  2017-12-11 17:43   ` Leif Lindholm
  2017-12-12 17:44 ` [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
  5 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-08 17:31 UTC (permalink / raw)
  To: edk2-devel; +Cc: leif.lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

Now that LcdGraphicsOutputDxe has been refactored, remove the old code
that is no longer used.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 ArmPlatformPkg/ArmPlatformPkg.dsc                                         |   2 -
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c                       | 132 -----------------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h                       |  89 ------------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf    |  62 --------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c                    | 125 ----------------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h                    | 149 --------------------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf |  58 --------
 7 files changed, 617 deletions(-)

diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
index 69ae9b67bc79..82adb9ef8891 100644
--- a/ArmPlatformPkg/ArmPlatformPkg.dsc
+++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
@@ -93,9 +93,7 @@ [LibraryClasses.common.SEC]
   PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
 
 [Components.common]
-  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
   ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
-  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
   ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf
   ArmPlatformPkg/Drivers/PL061GpioDxe/PL061GpioDxe.inf
   ArmPlatformPkg/Drivers/PL180MciDxe/PL180MciDxe.inf
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
deleted file mode 100644
index f5d7b53905fb..000000000000
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/** @file  Lcd.c
-
-  Copyright (c) 2011-2012, 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
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/DebugLib.h>
-#include <Library/IoLib.h>
-#include <Library/LcdPlatformLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/PcdLib.h>
-
-#include "HdLcd.h"
-#include "LcdGraphicsOutputDxe.h"
-
-/**********************************************************************
- *
- *  This file contains all the bits of the Lcd that are
- *  platform independent.
- *
- **********************************************************************/
-
-EFI_STATUS
-LcdInitialize (
-  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
-  )
-{
-  // Disable the controller
-  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
-
-  // Disable all interrupts
-  MmioWrite32(HDLCD_REG_INT_MASK, 0);
-
-  // Define start of the VRAM. This never changes for any graphics mode
-  MmioWrite32(HDLCD_REG_FB_BASE, (UINT32) VramBaseAddress);
-
-  // Setup various registers that never change
-  MmioWrite32(HDLCD_REG_BUS_OPTIONS,  (4 << 8) | HDLCD_BURST_8);
-  MmioWrite32(HDLCD_REG_POLARITIES,   HDLCD_PXCLK_LOW | HDLCD_DATA_HIGH | HDLCD_DATEN_HIGH | HDLCD_HSYNC_LOW | HDLCD_VSYNC_HIGH);
-  MmioWrite32(HDLCD_REG_PIXEL_FORMAT, HDLCD_LITTLE_ENDIAN | HDLCD_4BYTES_PER_PIXEL);
-  MmioWrite32(HDLCD_REG_RED_SELECT,   (0 << 16 | 8 << 8 |  0));
-  MmioWrite32(HDLCD_REG_GREEN_SELECT, (0 << 16 | 8 << 8 |  8));
-  MmioWrite32(HDLCD_REG_BLUE_SELECT,  (0 << 16 | 8 << 8 | 16));
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-LcdSetMode (
-  IN UINT32  ModeNumber
-  )
-{
-  EFI_STATUS        Status;
-  UINT32            HRes;
-  UINT32            HSync;
-  UINT32            HBackPorch;
-  UINT32            HFrontPorch;
-  UINT32            VRes;
-  UINT32            VSync;
-  UINT32            VBackPorch;
-  UINT32            VFrontPorch;
-  UINT32            BytesPerPixel;
-  LCD_BPP           LcdBpp;
-
-
-  // Set the video mode timings and other relevant information
-  Status = LcdPlatformGetTimings (ModeNumber,
-                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
-                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
-  ASSERT_EFI_ERROR (Status);
-  if (EFI_ERROR( Status )) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
-  ASSERT_EFI_ERROR (Status);
-  if (EFI_ERROR( Status )) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  BytesPerPixel = GetBytesPerPixel(LcdBpp);
-
-  // Disable the controller
-  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
-
-  // Update the frame buffer information with the new settings
-  MmioWrite32(HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
-  MmioWrite32(HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
-  MmioWrite32(HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
-
-  // Set the vertical timing information
-  MmioWrite32(HDLCD_REG_V_SYNC,         VSync);
-  MmioWrite32(HDLCD_REG_V_BACK_PORCH,   VBackPorch);
-  MmioWrite32(HDLCD_REG_V_DATA,         VRes - 1);
-  MmioWrite32(HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
-
-  // Set the horizontal timing information
-  MmioWrite32(HDLCD_REG_H_SYNC,         HSync);
-  MmioWrite32(HDLCD_REG_H_BACK_PORCH,   HBackPorch);
-  MmioWrite32(HDLCD_REG_H_DATA,         HRes - 1);
-  MmioWrite32(HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
-
-  // Enable the controller
-  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_ENABLE);
-
-  return EFI_SUCCESS;
-}
-
-VOID
-LcdShutdown (
-  VOID
-  )
-{
-  // Disable the controller
-  MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
-}
-
-EFI_STATUS
-LcdIdentify (
-  VOID
-  )
-{
-  return EFI_SUCCESS;
-}
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h
deleted file mode 100644
index 6df97a9dfee6..000000000000
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/** @file  HDLcd.h
-
- Copyright (c) 2011-2012, 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
- which accompanies this distribution.  The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- **/
-
-#ifndef _HDLCD_H_
-#define _HDLCD_H_
-
-//
-// HDLCD Controller Register Offsets
-//
-
-#define HDLCD_REG_VERSION                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x000)
-#define HDLCD_REG_INT_RAWSTAT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x010)
-#define HDLCD_REG_INT_CLEAR               ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x014)
-#define HDLCD_REG_INT_MASK                ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x018)
-#define HDLCD_REG_INT_STATUS              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x01C)
-#define HDLCD_REG_FB_BASE                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x100)
-#define HDLCD_REG_FB_LINE_LENGTH          ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x104)
-#define HDLCD_REG_FB_LINE_COUNT           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x108)
-#define HDLCD_REG_FB_LINE_PITCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x10C)
-#define HDLCD_REG_BUS_OPTIONS             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x110)
-#define HDLCD_REG_V_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x200)
-#define HDLCD_REG_V_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x204)
-#define HDLCD_REG_V_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x208)
-#define HDLCD_REG_V_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x20C)
-#define HDLCD_REG_H_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x210)
-#define HDLCD_REG_H_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x214)
-#define HDLCD_REG_H_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x218)
-#define HDLCD_REG_H_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x21C)
-#define HDLCD_REG_POLARITIES              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x220)
-#define HDLCD_REG_COMMAND                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x230)
-#define HDLCD_REG_PIXEL_FORMAT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x240)
-#define HDLCD_REG_RED_SELECT              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x244)
-#define HDLCD_REG_GREEN_SELECT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x248)
-#define HDLCD_REG_BLUE_SELECT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x24C)
-
-
-//
-// HDLCD Values of registers
-//
-
-// HDLCD Interrupt mask, clear and status register
-#define HDLCD_DMA_END                     BIT0    /* DMA has finished reading a frame */
-#define HDLCD_BUS_ERROR                   BIT1    /* DMA bus error */
-#define HDLCD_SYNC                        BIT2    /* Vertical sync */
-#define HDLCD_UNDERRUN                    BIT3    /* No Data available while DATAEN active */
-
-// CLCD_CONTROL Control register
-#define HDLCD_DISABLE                     0
-#define HDLCD_ENABLE                      BIT0
-
-// Bus Options
-#define HDLCD_BURST_1                     BIT0
-#define HDLCD_BURST_2                     BIT1
-#define HDLCD_BURST_4                     BIT2
-#define HDLCD_BURST_8                     BIT3
-#define HDLCD_BURST_16                    BIT4
-
-// Polarities - HIGH
-#define HDLCD_VSYNC_HIGH                  BIT0
-#define HDLCD_HSYNC_HIGH                  BIT1
-#define HDLCD_DATEN_HIGH                  BIT2
-#define HDLCD_DATA_HIGH                   BIT3
-#define HDLCD_PXCLK_HIGH                  BIT4
-// Polarities - LOW (for completion and for ease of understanding the hardware settings)
-#define HDLCD_VSYNC_LOW                   0
-#define HDLCD_HSYNC_LOW                   0
-#define HDLCD_DATEN_LOW                   0
-#define HDLCD_DATA_LOW                    0
-#define HDLCD_PXCLK_LOW                   0
-
-// Pixel Format
-#define HDLCD_LITTLE_ENDIAN              (0 << 31)
-#define HDLCD_BIG_ENDIAN                 (1 << 31)
-
-// Number of bytes per pixel
-#define HDLCD_4BYTES_PER_PIXEL           ((4 - 1) << 3)
-
-#endif /* _HDLCD_H_ */
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
deleted file mode 100644
index 896fc588b275..000000000000
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
+++ /dev/null
@@ -1,62 +0,0 @@
-#/** @file
-#
-#  Component description file for HDLCD module
-#
-#  Copyright (c) 2011-2012, 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
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = HdLcdGraphicsDxe
-  FILE_GUID                      = ce660500-824d-11e0-ac72-0002a5d5c51b
-  MODULE_TYPE                    = DXE_DRIVER
-  VERSION_STRING                 = 1.0
-  ENTRY_POINT                    = LcdGraphicsOutputDxeInitialize
-
-[Sources.common]
-  LcdGraphicsOutputDxe.c
-  LcdGraphicsOutputBlt.c
-  HdLcd.c
-
-[Packages]
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-  ArmPkg/ArmPkg.dec
-  ArmPlatformPkg/ArmPlatformPkg.dec
-
-[LibraryClasses]
-  ArmLib
-  UefiLib
-  BaseLib
-  DebugLib
-  TimerLib
-  UefiDriverEntryPoint
-  UefiBootServicesTableLib
-  IoLib
-  BaseMemoryLib
-  LcdPlatformLib
-
-[Protocols]
-  gEfiDevicePathProtocolGuid
-  gEfiGraphicsOutputProtocolGuid                # Produced
-  gEfiEdidDiscoveredProtocolGuid                # Produced
-  gEfiEdidActiveProtocolGuid                    # Produced
-  gEfiEdidOverrideProtocolGuid                  # Produced
-
-[FixedPcd]
-  gArmPlatformTokenSpaceGuid.PcdArmHdLcdBase
-
-[FeaturePcd]
-  gArmPlatformTokenSpaceGuid.PcdGopDisableOnExitBootServices
-
-[Depex]
-  gEfiCpuArchProtocolGuid
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
deleted file mode 100644
index a9ce60c5b0a6..000000000000
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/** @file  PL111Lcd.c
-
-  Copyright (c) 2011-2012, 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
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/IoLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include "LcdGraphicsOutputDxe.h"
-#include "PL111Lcd.h"
-
-/**********************************************************************
- *
- *  This file contains all the bits of the PL111 that are
- *  platform independent.
- *
- **********************************************************************/
-
-EFI_STATUS
-LcdIdentify (
-  VOID
-  )
-{
-  DEBUG ((EFI_D_WARN, "Probing ID registers at 0x%lx for a PL111\n",
-    PL111_REG_CLCD_PERIPH_ID_0));
-
-  // Check if this is a PL111
-  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 &&
-      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 &&
-     (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2) & 0xf) == PL111_CLCD_PERIPH_ID_2 &&
-      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 &&
-      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 &&
-      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 &&
-      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 &&
-      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
-    return EFI_SUCCESS;
-  }
-  return EFI_NOT_FOUND;
-}
-
-EFI_STATUS
-LcdInitialize (
-  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
-  )
-{
-  // Define start of the VRAM. This never changes for any graphics mode
-  MmioWrite32(PL111_REG_LCD_UP_BASE, (UINT32) VramBaseAddress);
-  MmioWrite32(PL111_REG_LCD_LP_BASE, 0); // We are not using a double buffer
-
-  // Disable all interrupts from the PL111
-  MmioWrite32(PL111_REG_LCD_IMSC, 0);
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-LcdSetMode (
-  IN UINT32  ModeNumber
-  )
-{
-  EFI_STATUS        Status;
-  UINT32            HRes;
-  UINT32            HSync;
-  UINT32            HBackPorch;
-  UINT32            HFrontPorch;
-  UINT32            VRes;
-  UINT32            VSync;
-  UINT32            VBackPorch;
-  UINT32            VFrontPorch;
-  UINT32            LcdControl;
-  LCD_BPP           LcdBpp;
-
-  // Set the video mode timings and other relevant information
-  Status = LcdPlatformGetTimings (ModeNumber,
-                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
-                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
-  ASSERT_EFI_ERROR (Status);
-  if (EFI_ERROR( Status )) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
-  ASSERT_EFI_ERROR (Status);
-  if (EFI_ERROR( Status )) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  // Disable the CLCD_LcdEn bit
-  LcdControl = MmioRead32( PL111_REG_LCD_CONTROL);
-  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl & ~1);
-
-  // Set Timings
-  MmioWrite32 (PL111_REG_LCD_TIMING_0, HOR_AXIS_PANEL(HBackPorch, HFrontPorch, HSync, HRes));
-  MmioWrite32 (PL111_REG_LCD_TIMING_1, VER_AXIS_PANEL(VBackPorch, VFrontPorch, VSync, VRes));
-  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY(HRes));
-  MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
-
-  // PL111_REG_LCD_CONTROL
-  LcdControl = PL111_CTRL_LCD_EN | PL111_CTRL_LCD_BPP(LcdBpp) | PL111_CTRL_LCD_TFT | PL111_CTRL_BGR;
-  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
-
-  // Turn on power to the LCD Panel
-  LcdControl |= PL111_CTRL_LCD_PWR;
-  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
-
-  return EFI_SUCCESS;
-}
-
-VOID
-LcdShutdown (
-  VOID
-  )
-{
-  // Disable the controller
-  MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
-}
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h
deleted file mode 100644
index 18e28af805f6..000000000000
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/** @file  PL111Lcd.h
-
- Copyright (c) 2011, 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
- which accompanies this distribution.  The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- **/
-
-#ifndef _PL111LCD_H__
-#define _PL111LCD_H__
-
-/**********************************************************************
- *
- *  This header file contains all the bits of the PL111 that are
- *  platform independent.
- *
- **********************************************************************/
-
-// Controller Register Offsets
-#define PL111_REG_LCD_TIMING_0            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x000)
-#define PL111_REG_LCD_TIMING_1            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x004)
-#define PL111_REG_LCD_TIMING_2            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x008)
-#define PL111_REG_LCD_TIMING_3            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x00C)
-#define PL111_REG_LCD_UP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x010)
-#define PL111_REG_LCD_LP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x014)
-#define PL111_REG_LCD_CONTROL             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x018)
-#define PL111_REG_LCD_IMSC                ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x01C)
-#define PL111_REG_LCD_RIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x020)
-#define PL111_REG_LCD_MIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x024)
-#define PL111_REG_LCD_ICR                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x028)
-#define PL111_REG_LCD_UP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x02C)
-#define PL111_REG_LCD_LP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x030)
-#define PL111_REG_LCD_PALETTE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x200)
-
-// Identification Register Offsets
-#define PL111_REG_CLCD_PERIPH_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE0)
-#define PL111_REG_CLCD_PERIPH_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE4)
-#define PL111_REG_CLCD_PERIPH_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE8)
-#define PL111_REG_CLCD_PERIPH_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFEC)
-#define PL111_REG_CLCD_P_CELL_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF0)
-#define PL111_REG_CLCD_P_CELL_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF4)
-#define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)
-#define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)
-
-#define PL111_CLCD_PERIPH_ID_0            0x11
-#define PL111_CLCD_PERIPH_ID_1            0x11
-#define PL111_CLCD_PERIPH_ID_2            0x04
-#define PL111_CLCD_PERIPH_ID_3            0x00
-#define PL111_CLCD_P_CELL_ID_0            0x0D
-#define PL111_CLCD_P_CELL_ID_1            0xF0
-#define PL111_CLCD_P_CELL_ID_2            0x05
-#define PL111_CLCD_P_CELL_ID_3            0xB1
-
-/**********************************************************************/
-
-// Register components (register bits)
-
-// This should make life easier to program specific settings in the different registers
-// by simplifying the setting up of the individual bits of each register
-// and then assembling the final register value.
-
-/**********************************************************************/
-
-// Register: PL111_REG_LCD_TIMING_0
-#define HOR_AXIS_PANEL(hbp,hfp,hsw,hor_res) (UINT32)(((UINT32)(hbp) << 24) | ((UINT32)(hfp) << 16) | ((UINT32)(hsw) << 8) | (((UINT32)((hor_res)/16)-1) << 2))
-
-// Register: PL111_REG_LCD_TIMING_1
-#define VER_AXIS_PANEL(vbp,vfp,vsw,ver_res) (UINT32)(((UINT32)(vbp) << 24) | ((UINT32)(vfp) << 16) | ((UINT32)(vsw) << 10) | ((ver_res)-1))
-
-// Register: PL111_REG_LCD_TIMING_2
-#define PL111_BIT_SHIFT_PCD_HI            27
-#define PL111_BIT_SHIFT_BCD               26
-#define PL111_BIT_SHIFT_CPL               16
-#define PL111_BIT_SHIFT_IOE               14
-#define PL111_BIT_SHIFT_IPC               13
-#define PL111_BIT_SHIFT_IHS               12
-#define PL111_BIT_SHIFT_IVS               11
-#define PL111_BIT_SHIFT_ACB               6
-#define PL111_BIT_SHIFT_CLKSEL            5
-#define PL111_BIT_SHIFT_PCD_LO            0
-
-#define PL111_BCD                         (1 << 26)
-#define PL111_IPC                         (1 << 13)
-#define PL111_IHS                         (1 << 12)
-#define PL111_IVS                         (1 << 11)
-
-#define CLK_SIG_POLARITY(hor_res)         (UINT32)(PL111_BCD | PL111_IPC | PL111_IHS | PL111_IVS | (((hor_res)-1) << 16))
-
-// Register: PL111_REG_LCD_TIMING_3
-#define PL111_BIT_SHIFT_LEE               16
-#define PL111_BIT_SHIFT_LED               0
-
-#define PL111_CTRL_WATERMARK              (1 << 16)
-#define PL111_CTRL_LCD_V_COMP             (1 << 12)
-#define PL111_CTRL_LCD_PWR                (1 << 11)
-#define PL111_CTRL_BEPO                   (1 << 10)
-#define PL111_CTRL_BEBO                   (1 << 9)
-#define PL111_CTRL_BGR                    (1 << 8)
-#define PL111_CTRL_LCD_DUAL               (1 << 7)
-#define PL111_CTRL_LCD_MONO_8             (1 << 6)
-#define PL111_CTRL_LCD_TFT                (1 << 5)
-#define PL111_CTRL_LCD_BW                 (1 << 4)
-#define PL111_CTRL_LCD_1BPP               (0 << 1)
-#define PL111_CTRL_LCD_2BPP               (1 << 1)
-#define PL111_CTRL_LCD_4BPP               (2 << 1)
-#define PL111_CTRL_LCD_8BPP               (3 << 1)
-#define PL111_CTRL_LCD_16BPP              (4 << 1)
-#define PL111_CTRL_LCD_24BPP              (5 << 1)
-#define PL111_CTRL_LCD_16BPP_565          (6 << 1)
-#define PL111_CTRL_LCD_12BPP_444          (7 << 1)
-#define PL111_CTRL_LCD_BPP(Bpp)           ((Bpp) << 1)
-#define PL111_CTRL_LCD_EN                 1
-
-/**********************************************************************/
-
-// Register: PL111_REG_LCD_TIMING_0
-#define PL111_LCD_TIMING_0_HBP(hbp)       (((hbp) & 0xFF) << 24)
-#define PL111_LCD_TIMING_0_HFP(hfp)       (((hfp) & 0xFF) << 16)
-#define PL111_LCD_TIMING_0_HSW(hsw)       (((hsw) & 0xFF) << 8)
-#define PL111_LCD_TIMING_0_PPL(ppl)       (((hsw) & 0x3F) << 2)
-
-// Register: PL111_REG_LCD_TIMING_1
-#define PL111_LCD_TIMING_1_VBP(vbp)       (((vbp) & 0xFF) << 24)
-#define PL111_LCD_TIMING_1_VFP(vfp)       (((vfp) & 0xFF) << 16)
-#define PL111_LCD_TIMING_1_VSW(vsw)       (((vsw) & 0x3F) << 10)
-#define PL111_LCD_TIMING_1_LPP(lpp)        ((lpp) & 0xFC)
-
-// Register: PL111_REG_LCD_TIMING_2
-#define PL111_BIT_MASK_PCD_HI             0xF8000000
-#define PL111_BIT_MASK_BCD                0x04000000
-#define PL111_BIT_MASK_CPL                0x03FF0000
-#define PL111_BIT_MASK_IOE                0x00004000
-#define PL111_BIT_MASK_IPC                0x00002000
-#define PL111_BIT_MASK_IHS                0x00001000
-#define PL111_BIT_MASK_IVS                0x00000800
-#define PL111_BIT_MASK_ACB                0x000007C0
-#define PL111_BIT_MASK_CLKSEL             0x00000020
-#define PL111_BIT_MASK_PCD_LO             0x0000001F
-
-// Register: PL111_REG_LCD_TIMING_3
-#define PL111_BIT_MASK_LEE                0x00010000
-#define PL111_BIT_MASK_LED                0x0000007F
-
-#endif /* _PL111LCD_H__ */
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
deleted file mode 100644
index 39e42bcbab2a..000000000000
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
+++ /dev/null
@@ -1,58 +0,0 @@
-#/** @file
-#
-#  Component description file for PL111LcdGraphicsOutputDxe module
-#
-#  Copyright (c) 2011-2012, 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
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = PL111LcdGraphicsDxe
-  FILE_GUID                      = 407B4008-BF5B-11DF-9547-CF16E0D72085
-  MODULE_TYPE                    = DXE_DRIVER
-  VERSION_STRING                 = 1.0
-  ENTRY_POINT                    = LcdGraphicsOutputDxeInitialize
-
-[Sources.common]
-  LcdGraphicsOutputDxe.c
-  LcdGraphicsOutputBlt.c
-  PL111Lcd.c
-
-[Packages]
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-  ArmPkg/ArmPkg.dec
-  ArmPlatformPkg/ArmPlatformPkg.dec
-
-[LibraryClasses]
-  ArmLib
-  UefiLib
-  BaseLib
-  DebugLib
-  TimerLib
-  UefiDriverEntryPoint
-  UefiBootServicesTableLib
-  IoLib
-  BaseMemoryLib
-  LcdPlatformLib
-
-[Protocols]
-  gEfiDevicePathProtocolGuid
-  gEfiGraphicsOutputProtocolGuid
-
-[FixedPcd]
-  gArmPlatformTokenSpaceGuid.PcdPL111LcdBase
-
-[FeaturePcd]
-  gArmPlatformTokenSpaceGuid.PcdGopDisableOnExitBootServices
-
-[Depex]
-  gEfiCpuArchProtocolGuid
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class
  2017-12-08 17:31 ` [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class Ard Biesheuvel
@ 2017-12-11 17:32   ` Leif Lindholm
  2017-12-11 17:56     ` Ard Biesheuvel
  0 siblings, 1 reply; 17+ messages in thread
From: Leif Lindholm @ 2017-12-11 17:32 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: edk2-devel, Girish Pathak, Evan Lloyd

On Fri, Dec 08, 2017 at 05:31:24PM +0000, Ard Biesheuvel wrote:
> Add the declaration and include file for the new LcdHwLib library class,
> which will allow us to abstract away from platform  variations in the
> LCD graphics output driver.
> 
> 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>
> [ardb: add NULL implementation as well and add it to ArmPlatformPkg.dsc]
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
>  ArmPlatformPkg/ArmPlatformPkg.dec                    |  1 +
>  ArmPlatformPkg/ArmPlatformPkg.dsc                    |  1 +
>  ArmPlatformPkg/Include/Library/LcdHwLib.h            | 68 ++++++++++++++++++
>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c   | 75 ++++++++++++++++++++
>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf | 28 ++++++++
>  5 files changed, 173 insertions(+)
> 
> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
> index 6a7bbc02d011..b33b6e630d85 100644
> --- a/ArmPlatformPkg/ArmPlatformPkg.dec
> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec
> @@ -33,6 +33,7 @@ [Includes.common]
>  
>  [LibraryClasses]
>    ArmPlatformLib|Include/Library/ArmPlatformLib.h
> +  LcdHwLib|Include/Library/LcdHwLib.h
>    LcdPlatformLib|Include/Library/LcdPlatformLib.h
>    NorFlashPlatformLib|Include/Library/NorFlashPlatformLib.h
>    PL011UartLib|Include/Library/PL011UartLib.h
> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
> index c3a8c257cb02..9dd64b472acf 100644
> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
> @@ -101,6 +101,7 @@ [Components.common]
>  
>    ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.inf
>    ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
> +  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
>    ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
>    ArmPlatformPkg/Library/NorFlashPlatformNullLib/NorFlashPlatformNullLib.inf
>    ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
> diff --git a/ArmPlatformPkg/Include/Library/LcdHwLib.h b/ArmPlatformPkg/Include/Library/LcdHwLib.h
> new file mode 100644
> index 000000000000..0c0480862aea
> --- /dev/null
> +++ b/ArmPlatformPkg/Include/Library/LcdHwLib.h
> @@ -0,0 +1,68 @@
> +/** @file LcdHwLib.h
> +
> +  This file contains interface functions for LcdHwLib of ArmPlatformPkg
> +
> +  Copyright (c) 2017, 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
> +  which accompanies this distribution.  The full text of the license may be found at
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> +**/
> +
> +#ifndef LCD_HW_LIB_H_
> +#define LCD_HW_LIB_H_
> +
> +#include <Uefi/UefiBaseType.h>
> +
> +/**
> +  Check for presence of display
> +
> +  @retval EFI_SUCCESS            Platform implements display.
> +  @retval EFI_NOT_FOUND          Display not found on the platform.
> +
> +**/
> +EFI_STATUS
> +LcdIdentify (
> +  VOID
> +  );
> +
> +/**
> +  Initialize display.
> +
> +  @param  FrameBaseAddress       Address of the frame buffer.
> +  @retval EFI_SUCCESS            Display initialization success.
> +  @retval !(EFI_SUCCESS)         Display initialization failure.
> +
> +**/
> +EFI_STATUS
> +LcdInitialize (
> +  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
> +  );
> +
> +/**
> +  Set requested mode of the display.
> +
> +  @param  ModeNumber             Display mode number.
> +  @retval EFI_SUCCESS            Display set mode success.
> +  @retval EFI_DEVICE_ERROR       If mode not found/supported.
> +
> +**/
> +EFI_STATUS
> +LcdSetMode (
> +  IN UINT32  ModeNumber
> +  );
> +
> +/**
> +  De-initializes the display.
> +**/
> +VOID
> +LcdShutdown (
> +  VOID
> +  );
> +
> +#endif /* LCD_HW_LIB_H_ */
> diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
> new file mode 100644
> index 000000000000..2d31b5183c95
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
> @@ -0,0 +1,75 @@
> +/** @file
> +
> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
> +
> +  This program and the accompanying materials
> +  are licensed and made available under the terms and conditions of the BSD License
> +  which accompanies this distribution.  The full text of the license may be found at
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> +**/
> +
> +#include <Base.h>
> +#include <Uefi/UefiBaseType.h>
> +#include <Library/DebugLib.h>
> +#include <Library/LcdPlatformLib.h>
> +
> +/**
> +  Check for presence of display
> +  
> +  @retval EFI_SUCCESS            Platform implements display.
> +  @retval EFI_NOT_FOUND          Display not found on the platform.
> +
> +**/
> +EFI_STATUS
> +LcdIdentify (
> +  VOID
> +  )
> +{

Bikeshedding:
Since this Null implementation can never fill any functionality other
than letting build complete without platform-specific glue - would it
not be more expected for it to ASSERT and/or return failure
everywhere?

/
    Leif

> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  Initialize display.
> +
> +  @param  FrameBaseAddress       Address of the frame buffer.
> +  @retval EFI_SUCCESS            Display initialization success.
> +  @retval !(EFI_SUCCESS)         Display initialization failure.
> +
> +**/
> +EFI_STATUS
> +LcdInitialize (
> +  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
> +  )
> +{
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  Set requested mode of the display.
> +
> +  @param  ModeNumber             Display mode number.
> +  @retval EFI_SUCCESS            Display set mode success.
> +  @retval EFI_DEVICE_ERROR       If mode not found/supported.
> +
> +**/
> +EFI_STATUS
> +LcdSetMode (
> +  IN UINT32  ModeNumber
> +  )
> +{
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  De-initializes the display.
> +**/
> +VOID
> +LcdShutdown (
> +  VOID
> +  )
> +{
> +}
> diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
> new file mode 100644
> index 000000000000..d556bed65548
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
> @@ -0,0 +1,28 @@
> +#/** @file
> +#
> +#  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
> +#
> +#  This program and the accompanying materials
> +#  are licensed and made available under the terms and conditions of the BSD License
> +#  which accompanies this distribution.  The full text of the license may be found at
> +#  http://opensource.org/licenses/bsd-license.php
> +#
> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +#
> +#**/
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001A
> +  BASE_NAME                      = LcdHwNullLib
> +  FILE_GUID                      = bb1fde98-1de2-410e-8850-fdcb8e67ebc0
> +  MODULE_TYPE                    = BASE
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = LcdHwLib
> +
> +[Sources]
> +  LcdHwNullLib.c
> +
> +[Packages]
> +  ArmPlatformPkg/ArmPlatformPkg.dec
> +  MdePkg/MdePkg.dec
> -- 
> 2.11.0
> 


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111
  2017-12-08 17:31 ` [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111 Ard Biesheuvel
@ 2017-12-11 17:39   ` Leif Lindholm
  2017-12-11 17:57     ` Ard Biesheuvel
  0 siblings, 1 reply; 17+ messages in thread
From: Leif Lindholm @ 2017-12-11 17:39 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: edk2-devel, Girish Pathak, Evan Lloyd

On Fri, Dec 08, 2017 at 05:31:25PM +0000, Ard Biesheuvel wrote:
> Convert the PL111 specific code of LcdGraphicsOutputDxe into a LcdHwlib
> implementation that we will wire up later into LcdGraphicsOutputDxe.
> 
> 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>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

There are some whitespace and line length issues below, but no real
howlers, and I guess it's all from existing code?

Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

> ---
>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c   | 126 +++++++++++++++++
>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h   | 149 ++++++++++++++++++++
>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf |  40 ++++++
>  3 files changed, 315 insertions(+)
> 
> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
> new file mode 100644
> index 000000000000..9b4a02045ab7
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
> @@ -0,0 +1,126 @@
> +/** @file  PL111Lcd.c
> +
> +  Copyright (c) 2011-2012, 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
> +  which accompanies this distribution.  The full text of the license may be found at
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> +**/
> +#include <Library/DebugLib.h>
> +#include <Library/IoLib.h>
> +#include <Library/LcdHwLib.h>
> +#include <Library/LcdPlatformLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +
> +#include "PL111Lcd.h"
> +
> +/**********************************************************************
> + *
> + *  This file contains all the bits of the PL111 that are
> + *  platform independent.
> + *
> + **********************************************************************/
> +
> +EFI_STATUS
> +LcdIdentify (
> +  VOID
> +  )
> +{
> +  DEBUG ((EFI_D_WARN, "Probing ID registers at 0x%lx for a PL111\n",
> +    PL111_REG_CLCD_PERIPH_ID_0));
> +
> +  // Check if this is a PL111
> +  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 &&
> +      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 &&
> +     (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2) & 0xf) == PL111_CLCD_PERIPH_ID_2 &&
> +      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 &&
> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 &&
> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 &&
> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 &&
> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
> +    return EFI_SUCCESS;
> +  }
> +  return EFI_NOT_FOUND;
> +}
> +
> +EFI_STATUS
> +LcdInitialize (
> +  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
> +  )
> +{
> +  // Define start of the VRAM. This never changes for any graphics mode
> +  MmioWrite32(PL111_REG_LCD_UP_BASE, (UINT32) VramBaseAddress);
> +  MmioWrite32(PL111_REG_LCD_LP_BASE, 0); // We are not using a double buffer
> +
> +  // Disable all interrupts from the PL111
> +  MmioWrite32(PL111_REG_LCD_IMSC, 0);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +EFI_STATUS
> +LcdSetMode (
> +  IN UINT32  ModeNumber
> +  )
> +{
> +  EFI_STATUS        Status;
> +  UINT32            HRes;
> +  UINT32            HSync;
> +  UINT32            HBackPorch;
> +  UINT32            HFrontPorch;
> +  UINT32            VRes;
> +  UINT32            VSync;
> +  UINT32            VBackPorch;
> +  UINT32            VFrontPorch;
> +  UINT32            LcdControl;
> +  LCD_BPP           LcdBpp;
> +
> +  // Set the video mode timings and other relevant information
> +  Status = LcdPlatformGetTimings (ModeNumber,
> +                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
> +                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
> +  ASSERT_EFI_ERROR (Status);
> +  if (EFI_ERROR( Status )) {
> +    return EFI_DEVICE_ERROR;
> +  }
> +
> +  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
> +  ASSERT_EFI_ERROR (Status);
> +  if (EFI_ERROR( Status )) {
> +    return EFI_DEVICE_ERROR;
> +  }
> +
> +  // Disable the CLCD_LcdEn bit
> +  LcdControl = MmioRead32( PL111_REG_LCD_CONTROL);
> +  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl & ~1);
> +
> +  // Set Timings
> +  MmioWrite32 (PL111_REG_LCD_TIMING_0, HOR_AXIS_PANEL(HBackPorch, HFrontPorch, HSync, HRes));
> +  MmioWrite32 (PL111_REG_LCD_TIMING_1, VER_AXIS_PANEL(VBackPorch, VFrontPorch, VSync, VRes));
> +  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY(HRes));
> +  MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
> +
> +  // PL111_REG_LCD_CONTROL
> +  LcdControl = PL111_CTRL_LCD_EN | PL111_CTRL_LCD_BPP(LcdBpp) | PL111_CTRL_LCD_TFT | PL111_CTRL_BGR;
> +  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
> +
> +  // Turn on power to the LCD Panel
> +  LcdControl |= PL111_CTRL_LCD_PWR;
> +  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +VOID
> +LcdShutdown (
> +  VOID
> +  )
> +{
> +  // Disable the controller
> +  MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
> +}
> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h
> new file mode 100644
> index 000000000000..18e28af805f6
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h
> @@ -0,0 +1,149 @@
> +/** @file  PL111Lcd.h
> +
> + Copyright (c) 2011, 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
> + which accompanies this distribution.  The full text of the license may be found at
> + http://opensource.org/licenses/bsd-license.php
> +
> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> + **/
> +
> +#ifndef _PL111LCD_H__
> +#define _PL111LCD_H__
> +
> +/**********************************************************************
> + *
> + *  This header file contains all the bits of the PL111 that are
> + *  platform independent.
> + *
> + **********************************************************************/
> +
> +// Controller Register Offsets
> +#define PL111_REG_LCD_TIMING_0            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x000)
> +#define PL111_REG_LCD_TIMING_1            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x004)
> +#define PL111_REG_LCD_TIMING_2            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x008)
> +#define PL111_REG_LCD_TIMING_3            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x00C)
> +#define PL111_REG_LCD_UP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x010)
> +#define PL111_REG_LCD_LP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x014)
> +#define PL111_REG_LCD_CONTROL             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x018)
> +#define PL111_REG_LCD_IMSC                ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x01C)
> +#define PL111_REG_LCD_RIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x020)
> +#define PL111_REG_LCD_MIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x024)
> +#define PL111_REG_LCD_ICR                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x028)
> +#define PL111_REG_LCD_UP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x02C)
> +#define PL111_REG_LCD_LP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x030)
> +#define PL111_REG_LCD_PALETTE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x200)
> +
> +// Identification Register Offsets
> +#define PL111_REG_CLCD_PERIPH_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE0)
> +#define PL111_REG_CLCD_PERIPH_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE4)
> +#define PL111_REG_CLCD_PERIPH_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE8)
> +#define PL111_REG_CLCD_PERIPH_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFEC)
> +#define PL111_REG_CLCD_P_CELL_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF0)
> +#define PL111_REG_CLCD_P_CELL_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF4)
> +#define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)
> +#define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)
> +
> +#define PL111_CLCD_PERIPH_ID_0            0x11
> +#define PL111_CLCD_PERIPH_ID_1            0x11
> +#define PL111_CLCD_PERIPH_ID_2            0x04
> +#define PL111_CLCD_PERIPH_ID_3            0x00
> +#define PL111_CLCD_P_CELL_ID_0            0x0D
> +#define PL111_CLCD_P_CELL_ID_1            0xF0
> +#define PL111_CLCD_P_CELL_ID_2            0x05
> +#define PL111_CLCD_P_CELL_ID_3            0xB1
> +
> +/**********************************************************************/
> +
> +// Register components (register bits)
> +
> +// This should make life easier to program specific settings in the different registers
> +// by simplifying the setting up of the individual bits of each register
> +// and then assembling the final register value.
> +
> +/**********************************************************************/
> +
> +// Register: PL111_REG_LCD_TIMING_0
> +#define HOR_AXIS_PANEL(hbp,hfp,hsw,hor_res) (UINT32)(((UINT32)(hbp) << 24) | ((UINT32)(hfp) << 16) | ((UINT32)(hsw) << 8) | (((UINT32)((hor_res)/16)-1) << 2))
> +
> +// Register: PL111_REG_LCD_TIMING_1
> +#define VER_AXIS_PANEL(vbp,vfp,vsw,ver_res) (UINT32)(((UINT32)(vbp) << 24) | ((UINT32)(vfp) << 16) | ((UINT32)(vsw) << 10) | ((ver_res)-1))
> +
> +// Register: PL111_REG_LCD_TIMING_2
> +#define PL111_BIT_SHIFT_PCD_HI            27
> +#define PL111_BIT_SHIFT_BCD               26
> +#define PL111_BIT_SHIFT_CPL               16
> +#define PL111_BIT_SHIFT_IOE               14
> +#define PL111_BIT_SHIFT_IPC               13
> +#define PL111_BIT_SHIFT_IHS               12
> +#define PL111_BIT_SHIFT_IVS               11
> +#define PL111_BIT_SHIFT_ACB               6
> +#define PL111_BIT_SHIFT_CLKSEL            5
> +#define PL111_BIT_SHIFT_PCD_LO            0
> +
> +#define PL111_BCD                         (1 << 26)
> +#define PL111_IPC                         (1 << 13)
> +#define PL111_IHS                         (1 << 12)
> +#define PL111_IVS                         (1 << 11)
> +
> +#define CLK_SIG_POLARITY(hor_res)         (UINT32)(PL111_BCD | PL111_IPC | PL111_IHS | PL111_IVS | (((hor_res)-1) << 16))
> +
> +// Register: PL111_REG_LCD_TIMING_3
> +#define PL111_BIT_SHIFT_LEE               16
> +#define PL111_BIT_SHIFT_LED               0
> +
> +#define PL111_CTRL_WATERMARK              (1 << 16)
> +#define PL111_CTRL_LCD_V_COMP             (1 << 12)
> +#define PL111_CTRL_LCD_PWR                (1 << 11)
> +#define PL111_CTRL_BEPO                   (1 << 10)
> +#define PL111_CTRL_BEBO                   (1 << 9)
> +#define PL111_CTRL_BGR                    (1 << 8)
> +#define PL111_CTRL_LCD_DUAL               (1 << 7)
> +#define PL111_CTRL_LCD_MONO_8             (1 << 6)
> +#define PL111_CTRL_LCD_TFT                (1 << 5)
> +#define PL111_CTRL_LCD_BW                 (1 << 4)
> +#define PL111_CTRL_LCD_1BPP               (0 << 1)
> +#define PL111_CTRL_LCD_2BPP               (1 << 1)
> +#define PL111_CTRL_LCD_4BPP               (2 << 1)
> +#define PL111_CTRL_LCD_8BPP               (3 << 1)
> +#define PL111_CTRL_LCD_16BPP              (4 << 1)
> +#define PL111_CTRL_LCD_24BPP              (5 << 1)
> +#define PL111_CTRL_LCD_16BPP_565          (6 << 1)
> +#define PL111_CTRL_LCD_12BPP_444          (7 << 1)
> +#define PL111_CTRL_LCD_BPP(Bpp)           ((Bpp) << 1)
> +#define PL111_CTRL_LCD_EN                 1
> +
> +/**********************************************************************/
> +
> +// Register: PL111_REG_LCD_TIMING_0
> +#define PL111_LCD_TIMING_0_HBP(hbp)       (((hbp) & 0xFF) << 24)
> +#define PL111_LCD_TIMING_0_HFP(hfp)       (((hfp) & 0xFF) << 16)
> +#define PL111_LCD_TIMING_0_HSW(hsw)       (((hsw) & 0xFF) << 8)
> +#define PL111_LCD_TIMING_0_PPL(ppl)       (((hsw) & 0x3F) << 2)
> +
> +// Register: PL111_REG_LCD_TIMING_1
> +#define PL111_LCD_TIMING_1_VBP(vbp)       (((vbp) & 0xFF) << 24)
> +#define PL111_LCD_TIMING_1_VFP(vfp)       (((vfp) & 0xFF) << 16)
> +#define PL111_LCD_TIMING_1_VSW(vsw)       (((vsw) & 0x3F) << 10)
> +#define PL111_LCD_TIMING_1_LPP(lpp)        ((lpp) & 0xFC)
> +
> +// Register: PL111_REG_LCD_TIMING_2
> +#define PL111_BIT_MASK_PCD_HI             0xF8000000
> +#define PL111_BIT_MASK_BCD                0x04000000
> +#define PL111_BIT_MASK_CPL                0x03FF0000
> +#define PL111_BIT_MASK_IOE                0x00004000
> +#define PL111_BIT_MASK_IPC                0x00002000
> +#define PL111_BIT_MASK_IHS                0x00001000
> +#define PL111_BIT_MASK_IVS                0x00000800
> +#define PL111_BIT_MASK_ACB                0x000007C0
> +#define PL111_BIT_MASK_CLKSEL             0x00000020
> +#define PL111_BIT_MASK_PCD_LO             0x0000001F
> +
> +// Register: PL111_REG_LCD_TIMING_3
> +#define PL111_BIT_MASK_LEE                0x00010000
> +#define PL111_BIT_MASK_LED                0x0000007F
> +
> +#endif /* _PL111LCD_H__ */
> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf
> new file mode 100644
> index 000000000000..40db77eb079e
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf
> @@ -0,0 +1,40 @@
> +#/** @file PL111Lcd.inf
> +#
> +#  Component description file for PL111Lcd module
> +#
> +#  Copyright (c) 2011-2017, 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
> +#  which accompanies this distribution.  The full text of the license may be found at
> +#  http://opensource.org/licenses/bsd-license.php
> +#
> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +#
> +#**/
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = PL111Lcd
> +  FILE_GUID                      = 407B4008-BF5B-11DF-9547-CF16E0D72085
> +  MODULE_TYPE                    = BASE
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = LcdHwLib
> +
> +[Sources.common]
> +  PL111Lcd.c
> +
> +[Packages]
> +  ArmPlatformPkg/ArmPlatformPkg.dec
> +  ArmPkg/ArmPkg.dec
> +  MdeModulePkg/MdeModulePkg.dec
> +  MdePkg/MdePkg.dec
> +
> +[LibraryClasses]
> +  UefiLib
> +  BaseLib
> +  DebugLib
> +  IoLib
> +
> +[FixedPcd]
> +  gArmPlatformTokenSpaceGuid.PcdPL111LcdBase
> -- 
> 2.11.0
> 


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 3/5] ArmPlatformPkg: implement LcdHwLib for HdLcd
  2017-12-08 17:31 ` [PATCH v2 3/5] ArmPlatformPkg: implement LcdHwLib for HdLcd Ard Biesheuvel
@ 2017-12-11 17:41   ` Leif Lindholm
  0 siblings, 0 replies; 17+ messages in thread
From: Leif Lindholm @ 2017-12-11 17:41 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: edk2-devel, Girish Pathak, Evan Lloyd

On Fri, Dec 08, 2017 at 05:31:26PM +0000, Ard Biesheuvel wrote:
> Convert the HdLcd specific code of LcdGraphicsOutputDxe into a LcdHwlib
> implementation that we will wire up later into LcdGraphicsOutputDxe.
> 
> 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>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Again, some whitespace an line length, but this (mostly) isn't new
code.

Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

> ---
>  ArmPlatformPkg/Library/HdLcd/HdLcd.c   | 158 ++++++++++++++++++++
>  ArmPlatformPkg/Library/HdLcd/HdLcd.h   |  89 +++++++++++
>  ArmPlatformPkg/Library/HdLcd/HdLcd.inf |  42 ++++++
>  3 files changed, 289 insertions(+)
> 
> diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.c b/ArmPlatformPkg/Library/HdLcd/HdLcd.c
> new file mode 100644
> index 000000000000..24efb68f23e3
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.c
> @@ -0,0 +1,158 @@
> +/** @file  Lcd.c
> +
> +  Copyright (c) 2011-2012, 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
> +  which accompanies this distribution.  The full text of the license may be found at
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> +**/
> +
> +#include <Library/DebugLib.h>
> +#include <Library/IoLib.h>
> +#include <Library/LcdHwLib.h>
> +#include <Library/LcdPlatformLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/PcdLib.h>
> +
> +#include "HdLcd.h"
> +
> +/**********************************************************************
> + *
> + *  This file contains all the bits of the Lcd that are
> + *  platform independent.
> + *
> + **********************************************************************/
> +
> +STATIC
> +UINTN
> +GetBytesPerPixel (
> +  IN  LCD_BPP       Bpp
> +  )
> +{
> +  switch(Bpp) {
> +  case LCD_BITS_PER_PIXEL_24:
> +    return 4;
> +
> +  case LCD_BITS_PER_PIXEL_16_565:
> +  case LCD_BITS_PER_PIXEL_16_555:
> +  case LCD_BITS_PER_PIXEL_12_444:
> +    return 2;
> +
> +  case LCD_BITS_PER_PIXEL_8:
> +  case LCD_BITS_PER_PIXEL_4:
> +  case LCD_BITS_PER_PIXEL_2:
> +  case LCD_BITS_PER_PIXEL_1:
> +    return 1;
> +
> +  default:
> +    return 0;
> +  }
> +}
> +
> +EFI_STATUS
> +LcdInitialize (
> +  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
> +  )
> +{
> +  // Disable the controller
> +  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
> +
> +  // Disable all interrupts
> +  MmioWrite32(HDLCD_REG_INT_MASK, 0);
> +
> +  // Define start of the VRAM. This never changes for any graphics mode
> +  MmioWrite32(HDLCD_REG_FB_BASE, (UINT32) VramBaseAddress);
> +
> +  // Setup various registers that never change
> +  MmioWrite32(HDLCD_REG_BUS_OPTIONS,  (4 << 8) | HDLCD_BURST_8);
> +  MmioWrite32(HDLCD_REG_POLARITIES,   HDLCD_PXCLK_LOW | HDLCD_DATA_HIGH | HDLCD_DATEN_HIGH | HDLCD_HSYNC_LOW | HDLCD_VSYNC_HIGH);
> +  MmioWrite32(HDLCD_REG_PIXEL_FORMAT, HDLCD_LITTLE_ENDIAN | HDLCD_4BYTES_PER_PIXEL);
> +  MmioWrite32(HDLCD_REG_RED_SELECT,   (0 << 16 | 8 << 8 |  0));
> +  MmioWrite32(HDLCD_REG_GREEN_SELECT, (0 << 16 | 8 << 8 |  8));
> +  MmioWrite32(HDLCD_REG_BLUE_SELECT,  (0 << 16 | 8 << 8 | 16));
> +
> +  return EFI_SUCCESS;
> +}
> +
> +EFI_STATUS
> +LcdSetMode (
> +  IN UINT32  ModeNumber
> +  )
> +{
> +  EFI_STATUS        Status;
> +  UINT32            HRes;
> +  UINT32            HSync;
> +  UINT32            HBackPorch;
> +  UINT32            HFrontPorch;
> +  UINT32            VRes;
> +  UINT32            VSync;
> +  UINT32            VBackPorch;
> +  UINT32            VFrontPorch;
> +  UINT32            BytesPerPixel;
> +  LCD_BPP           LcdBpp;
> +
> +
> +  // Set the video mode timings and other relevant information
> +  Status = LcdPlatformGetTimings (ModeNumber,
> +                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
> +                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
> +  ASSERT_EFI_ERROR (Status);
> +  if (EFI_ERROR( Status )) {
> +    return EFI_DEVICE_ERROR;
> +  }
> +
> +  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
> +  ASSERT_EFI_ERROR (Status);
> +  if (EFI_ERROR( Status )) {
> +    return EFI_DEVICE_ERROR;
> +  }
> +
> +  BytesPerPixel = GetBytesPerPixel(LcdBpp);
> +
> +  // Disable the controller
> +  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
> +
> +  // Update the frame buffer information with the new settings
> +  MmioWrite32(HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
> +  MmioWrite32(HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
> +  MmioWrite32(HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
> +
> +  // Set the vertical timing information
> +  MmioWrite32(HDLCD_REG_V_SYNC,         VSync);
> +  MmioWrite32(HDLCD_REG_V_BACK_PORCH,   VBackPorch);
> +  MmioWrite32(HDLCD_REG_V_DATA,         VRes - 1);
> +  MmioWrite32(HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
> +
> +  // Set the horizontal timing information
> +  MmioWrite32(HDLCD_REG_H_SYNC,         HSync);
> +  MmioWrite32(HDLCD_REG_H_BACK_PORCH,   HBackPorch);
> +  MmioWrite32(HDLCD_REG_H_DATA,         HRes - 1);
> +  MmioWrite32(HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
> +
> +  // Enable the controller
> +  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_ENABLE);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +VOID
> +LcdShutdown (
> +  VOID
> +  )
> +{
> +  // Disable the controller
> +  MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
> +}
> +
> +EFI_STATUS
> +LcdIdentify (
> +  VOID
> +  )
> +{
> +  return EFI_SUCCESS;
> +}
> diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.h b/ArmPlatformPkg/Library/HdLcd/HdLcd.h
> new file mode 100644
> index 000000000000..6df97a9dfee6
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.h
> @@ -0,0 +1,89 @@
> +/** @file  HDLcd.h
> +
> + Copyright (c) 2011-2012, 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
> + which accompanies this distribution.  The full text of the license may be found at
> + http://opensource.org/licenses/bsd-license.php
> +
> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> + **/
> +
> +#ifndef _HDLCD_H_
> +#define _HDLCD_H_
> +
> +//
> +// HDLCD Controller Register Offsets
> +//
> +
> +#define HDLCD_REG_VERSION                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x000)
> +#define HDLCD_REG_INT_RAWSTAT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x010)
> +#define HDLCD_REG_INT_CLEAR               ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x014)
> +#define HDLCD_REG_INT_MASK                ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x018)
> +#define HDLCD_REG_INT_STATUS              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x01C)
> +#define HDLCD_REG_FB_BASE                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x100)
> +#define HDLCD_REG_FB_LINE_LENGTH          ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x104)
> +#define HDLCD_REG_FB_LINE_COUNT           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x108)
> +#define HDLCD_REG_FB_LINE_PITCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x10C)
> +#define HDLCD_REG_BUS_OPTIONS             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x110)
> +#define HDLCD_REG_V_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x200)
> +#define HDLCD_REG_V_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x204)
> +#define HDLCD_REG_V_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x208)
> +#define HDLCD_REG_V_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x20C)
> +#define HDLCD_REG_H_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x210)
> +#define HDLCD_REG_H_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x214)
> +#define HDLCD_REG_H_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x218)
> +#define HDLCD_REG_H_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x21C)
> +#define HDLCD_REG_POLARITIES              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x220)
> +#define HDLCD_REG_COMMAND                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x230)
> +#define HDLCD_REG_PIXEL_FORMAT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x240)
> +#define HDLCD_REG_RED_SELECT              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x244)
> +#define HDLCD_REG_GREEN_SELECT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x248)
> +#define HDLCD_REG_BLUE_SELECT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x24C)
> +
> +
> +//
> +// HDLCD Values of registers
> +//
> +
> +// HDLCD Interrupt mask, clear and status register
> +#define HDLCD_DMA_END                     BIT0    /* DMA has finished reading a frame */
> +#define HDLCD_BUS_ERROR                   BIT1    /* DMA bus error */
> +#define HDLCD_SYNC                        BIT2    /* Vertical sync */
> +#define HDLCD_UNDERRUN                    BIT3    /* No Data available while DATAEN active */
> +
> +// CLCD_CONTROL Control register
> +#define HDLCD_DISABLE                     0
> +#define HDLCD_ENABLE                      BIT0
> +
> +// Bus Options
> +#define HDLCD_BURST_1                     BIT0
> +#define HDLCD_BURST_2                     BIT1
> +#define HDLCD_BURST_4                     BIT2
> +#define HDLCD_BURST_8                     BIT3
> +#define HDLCD_BURST_16                    BIT4
> +
> +// Polarities - HIGH
> +#define HDLCD_VSYNC_HIGH                  BIT0
> +#define HDLCD_HSYNC_HIGH                  BIT1
> +#define HDLCD_DATEN_HIGH                  BIT2
> +#define HDLCD_DATA_HIGH                   BIT3
> +#define HDLCD_PXCLK_HIGH                  BIT4
> +// Polarities - LOW (for completion and for ease of understanding the hardware settings)
> +#define HDLCD_VSYNC_LOW                   0
> +#define HDLCD_HSYNC_LOW                   0
> +#define HDLCD_DATEN_LOW                   0
> +#define HDLCD_DATA_LOW                    0
> +#define HDLCD_PXCLK_LOW                   0
> +
> +// Pixel Format
> +#define HDLCD_LITTLE_ENDIAN              (0 << 31)
> +#define HDLCD_BIG_ENDIAN                 (1 << 31)
> +
> +// Number of bytes per pixel
> +#define HDLCD_4BYTES_PER_PIXEL           ((4 - 1) << 3)
> +
> +#endif /* _HDLCD_H_ */
> diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.inf b/ArmPlatformPkg/Library/HdLcd/HdLcd.inf
> new file mode 100644
> index 000000000000..67aad05d210b
> --- /dev/null
> +++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.inf
> @@ -0,0 +1,42 @@
> +#/** @file
> +#
> +#  Component description file for HDLCD module
> +#
> +#  Copyright (c) 2011-2012, 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
> +#  which accompanies this distribution.  The full text of the license may be found at
> +#  http://opensource.org/licenses/bsd-license.php
> +#
> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +#
> +#**/
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = HdLcd
> +  FILE_GUID                      = ce660500-824d-11e0-ac72-0002a5d5c51b
> +  MODULE_TYPE                    = BASE
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = LcdHwLib
> +
> +[Sources.common]
> +  HdLcd.c
> +
> +[Packages]
> +  ArmPlatformPkg/ArmPlatformPkg.dec
> +  ArmPkg/ArmPkg.dec
> +  MdeModulePkg/MdeModulePkg.dec
> +  MdePkg/MdePkg.dec
> +
> +[LibraryClasses]
> +  ArmLib
> +  UefiLib
> +  BaseLib
> +  DebugLib
> +  IoLib
> +
> +[FixedPcd]
> +  gArmPlatformTokenSpaceGuid.PcdArmHdLcdBase
> -- 
> 2.11.0
> 


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 4/5] ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver
  2017-12-08 17:31 ` [PATCH v2 4/5] ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver Ard Biesheuvel
@ 2017-12-11 17:42   ` Leif Lindholm
  0 siblings, 0 replies; 17+ messages in thread
From: Leif Lindholm @ 2017-12-11 17:42 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: edk2-devel, Girish Pathak, Evan Lloyd

On Fri, Dec 08, 2017 at 05:31:27PM +0000, Ard Biesheuvel wrote:
> Create a new LcdGraphicsOutputDxe driver from the existing sources that
> takes its hardware abstractions from a LcdHwLib library instance rather
> than from a .c file linked directly. All we need is a new .inf file, and
> a minimal tweak to LcdGraphicsOutputDxe.h to reuse the LcdHwlib prototypes
> rather than open code them.
> 
> 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>
> [ardb: add it to ArmPlatformPkg.dsc so we can build test it standalone]
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

> ---
>  ArmPlatformPkg/ArmPlatformPkg.dsc                                    |  2 +
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h   | 21 +-------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf | 54 ++++++++++++++++++++
>  3 files changed, 57 insertions(+), 20 deletions(-)
> 
> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
> index 9dd64b472acf..69ae9b67bc79 100644
> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
> @@ -53,6 +53,7 @@ [LibraryClasses.common]
>    DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
>    HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
>    IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
> +  LcdHwLib|ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
>    LcdPlatformLib|ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
>    LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
>    MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> @@ -93,6 +94,7 @@ [LibraryClasses.common.SEC]
>  
>  [Components.common]
>    ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
> +  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
>    ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
>    ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf
>    ArmPlatformPkg/Drivers/PL061GpioDxe/PL061GpioDxe.inf
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
> index 8856b79901b6..b66efd34561f 100644
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
> +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
> @@ -18,6 +18,7 @@
>  #include <Base.h>
>  
>  #include <Library/DebugLib.h>
> +#include <Library/LcdHwLib.h>
>  #include <Library/LcdPlatformLib.h>
>  #include <Library/PcdLib.h>
>  #include <Library/UefiLib.h>
> @@ -105,24 +106,4 @@ InitializeDisplay (
>    IN LCD_INSTANCE* Instance
>  );
>  
> -EFI_STATUS
> -LcdIdentify (
> -  VOID
> -);
> -
> -EFI_STATUS
> -LcdInitialize (
> -  EFI_PHYSICAL_ADDRESS  VramBaseAddress
> -);
> -
> -EFI_STATUS
> -LcdSetMode (
> -  IN UINT32  ModeNumber
> -);
> -
> -VOID
> -LcdShutdown (
> -  VOID
> -);
> -
>  #endif /* __ARM_VE_GRAPHICS_DXE_H__ */
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
> new file mode 100644
> index 000000000000..e6424475f79d
> --- /dev/null
> +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
> @@ -0,0 +1,54 @@
> +#/** @file
> +#
> +#  Component description file for LcdGraphicsOutputDxe module
> +#
> +#  Copyright (c) 2011-2012, 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
> +#  which accompanies this distribution.  The full text of the license may be found at
> +#  http://opensource.org/licenses/bsd-license.php
> +#
> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +#
> +#**/
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001A
> +  BASE_NAME                      = LcdGraphicsOutputDxe
> +  FILE_GUID                      = 89464DAE-8DAA-41FE-A4C8-40D2175AF1E9
> +  MODULE_TYPE                    = DXE_DRIVER
> +  VERSION_STRING                 = 1.0
> +  ENTRY_POINT                    = LcdGraphicsOutputDxeInitialize
> +
> +[Sources.common]
> +  LcdGraphicsOutputDxe.c
> +  LcdGraphicsOutputBlt.c
> +
> +[Packages]
> +  ArmPlatformPkg/ArmPlatformPkg.dec
> +  ArmPkg/ArmPkg.dec
> +  MdeModulePkg/MdeModulePkg.dec
> +  MdePkg/MdePkg.dec
> +
> +[LibraryClasses]
> +  ArmLib
> +  BaseLib
> +  BaseMemoryLib
> +  DebugLib
> +  LcdHwLib
> +  LcdPlatformLib
> +  UefiBootServicesTableLib
> +  UefiDriverEntryPoint
> +  UefiLib
> +
> +[Protocols]
> +  gEfiDevicePathProtocolGuid
> +  gEfiGraphicsOutputProtocolGuid
> +
> +[FeaturePcd]
> +  gArmPlatformTokenSpaceGuid.PcdGopDisableOnExitBootServices
> +
> +[Depex]
> +  TRUE
> -- 
> 2.11.0
> 


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 5/5] ArmPlatformPkg: remove old PL111/HdLcd driver code
  2017-12-08 17:31 ` [PATCH v2 5/5] ArmPlatformPkg: remove old PL111/HdLcd driver code Ard Biesheuvel
@ 2017-12-11 17:43   ` Leif Lindholm
  0 siblings, 0 replies; 17+ messages in thread
From: Leif Lindholm @ 2017-12-11 17:43 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: edk2-devel, Girish Pathak, Evan Lloyd

On Fri, Dec 08, 2017 at 05:31:28PM +0000, Ard Biesheuvel wrote:
> Now that LcdGraphicsOutputDxe has been refactored, remove the old code
> that is no longer used.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

> ---
>  ArmPlatformPkg/ArmPlatformPkg.dsc                                         |   2 -
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c                       | 132 -----------------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h                       |  89 ------------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf    |  62 --------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c                    | 125 ----------------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h                    | 149 --------------------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf |  58 --------
>  7 files changed, 617 deletions(-)
> 
> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
> index 69ae9b67bc79..82adb9ef8891 100644
> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
> @@ -93,9 +93,7 @@ [LibraryClasses.common.SEC]
>    PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
>  
>  [Components.common]
> -  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
>    ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
> -  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
>    ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf
>    ArmPlatformPkg/Drivers/PL061GpioDxe/PL061GpioDxe.inf
>    ArmPlatformPkg/Drivers/PL180MciDxe/PL180MciDxe.inf
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
> deleted file mode 100644
> index f5d7b53905fb..000000000000
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
> +++ /dev/null
> @@ -1,132 +0,0 @@
> -/** @file  Lcd.c
> -
> -  Copyright (c) 2011-2012, 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
> -  which accompanies this distribution.  The full text of the license may be found at
> -  http://opensource.org/licenses/bsd-license.php
> -
> -  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/DebugLib.h>
> -#include <Library/IoLib.h>
> -#include <Library/LcdPlatformLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/PcdLib.h>
> -
> -#include "HdLcd.h"
> -#include "LcdGraphicsOutputDxe.h"
> -
> -/**********************************************************************
> - *
> - *  This file contains all the bits of the Lcd that are
> - *  platform independent.
> - *
> - **********************************************************************/
> -
> -EFI_STATUS
> -LcdInitialize (
> -  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
> -  )
> -{
> -  // Disable the controller
> -  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
> -
> -  // Disable all interrupts
> -  MmioWrite32(HDLCD_REG_INT_MASK, 0);
> -
> -  // Define start of the VRAM. This never changes for any graphics mode
> -  MmioWrite32(HDLCD_REG_FB_BASE, (UINT32) VramBaseAddress);
> -
> -  // Setup various registers that never change
> -  MmioWrite32(HDLCD_REG_BUS_OPTIONS,  (4 << 8) | HDLCD_BURST_8);
> -  MmioWrite32(HDLCD_REG_POLARITIES,   HDLCD_PXCLK_LOW | HDLCD_DATA_HIGH | HDLCD_DATEN_HIGH | HDLCD_HSYNC_LOW | HDLCD_VSYNC_HIGH);
> -  MmioWrite32(HDLCD_REG_PIXEL_FORMAT, HDLCD_LITTLE_ENDIAN | HDLCD_4BYTES_PER_PIXEL);
> -  MmioWrite32(HDLCD_REG_RED_SELECT,   (0 << 16 | 8 << 8 |  0));
> -  MmioWrite32(HDLCD_REG_GREEN_SELECT, (0 << 16 | 8 << 8 |  8));
> -  MmioWrite32(HDLCD_REG_BLUE_SELECT,  (0 << 16 | 8 << 8 | 16));
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -LcdSetMode (
> -  IN UINT32  ModeNumber
> -  )
> -{
> -  EFI_STATUS        Status;
> -  UINT32            HRes;
> -  UINT32            HSync;
> -  UINT32            HBackPorch;
> -  UINT32            HFrontPorch;
> -  UINT32            VRes;
> -  UINT32            VSync;
> -  UINT32            VBackPorch;
> -  UINT32            VFrontPorch;
> -  UINT32            BytesPerPixel;
> -  LCD_BPP           LcdBpp;
> -
> -
> -  // Set the video mode timings and other relevant information
> -  Status = LcdPlatformGetTimings (ModeNumber,
> -                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
> -                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
> -  ASSERT_EFI_ERROR (Status);
> -  if (EFI_ERROR( Status )) {
> -    return EFI_DEVICE_ERROR;
> -  }
> -
> -  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
> -  ASSERT_EFI_ERROR (Status);
> -  if (EFI_ERROR( Status )) {
> -    return EFI_DEVICE_ERROR;
> -  }
> -
> -  BytesPerPixel = GetBytesPerPixel(LcdBpp);
> -
> -  // Disable the controller
> -  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_DISABLE);
> -
> -  // Update the frame buffer information with the new settings
> -  MmioWrite32(HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
> -  MmioWrite32(HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
> -  MmioWrite32(HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
> -
> -  // Set the vertical timing information
> -  MmioWrite32(HDLCD_REG_V_SYNC,         VSync);
> -  MmioWrite32(HDLCD_REG_V_BACK_PORCH,   VBackPorch);
> -  MmioWrite32(HDLCD_REG_V_DATA,         VRes - 1);
> -  MmioWrite32(HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
> -
> -  // Set the horizontal timing information
> -  MmioWrite32(HDLCD_REG_H_SYNC,         HSync);
> -  MmioWrite32(HDLCD_REG_H_BACK_PORCH,   HBackPorch);
> -  MmioWrite32(HDLCD_REG_H_DATA,         HRes - 1);
> -  MmioWrite32(HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
> -
> -  // Enable the controller
> -  MmioWrite32(HDLCD_REG_COMMAND, HDLCD_ENABLE);
> -
> -  return EFI_SUCCESS;
> -}
> -
> -VOID
> -LcdShutdown (
> -  VOID
> -  )
> -{
> -  // Disable the controller
> -  MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
> -}
> -
> -EFI_STATUS
> -LcdIdentify (
> -  VOID
> -  )
> -{
> -  return EFI_SUCCESS;
> -}
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h
> deleted file mode 100644
> index 6df97a9dfee6..000000000000
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.h
> +++ /dev/null
> @@ -1,89 +0,0 @@
> -/** @file  HDLcd.h
> -
> - Copyright (c) 2011-2012, 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
> - which accompanies this distribution.  The full text of the license may be found at
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - **/
> -
> -#ifndef _HDLCD_H_
> -#define _HDLCD_H_
> -
> -//
> -// HDLCD Controller Register Offsets
> -//
> -
> -#define HDLCD_REG_VERSION                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x000)
> -#define HDLCD_REG_INT_RAWSTAT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x010)
> -#define HDLCD_REG_INT_CLEAR               ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x014)
> -#define HDLCD_REG_INT_MASK                ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x018)
> -#define HDLCD_REG_INT_STATUS              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x01C)
> -#define HDLCD_REG_FB_BASE                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x100)
> -#define HDLCD_REG_FB_LINE_LENGTH          ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x104)
> -#define HDLCD_REG_FB_LINE_COUNT           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x108)
> -#define HDLCD_REG_FB_LINE_PITCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x10C)
> -#define HDLCD_REG_BUS_OPTIONS             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x110)
> -#define HDLCD_REG_V_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x200)
> -#define HDLCD_REG_V_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x204)
> -#define HDLCD_REG_V_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x208)
> -#define HDLCD_REG_V_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x20C)
> -#define HDLCD_REG_H_SYNC                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x210)
> -#define HDLCD_REG_H_BACK_PORCH            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x214)
> -#define HDLCD_REG_H_DATA                  ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x218)
> -#define HDLCD_REG_H_FRONT_PORCH           ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x21C)
> -#define HDLCD_REG_POLARITIES              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x220)
> -#define HDLCD_REG_COMMAND                 ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x230)
> -#define HDLCD_REG_PIXEL_FORMAT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x240)
> -#define HDLCD_REG_RED_SELECT              ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x244)
> -#define HDLCD_REG_GREEN_SELECT            ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x248)
> -#define HDLCD_REG_BLUE_SELECT             ((UINTN)PcdGet32 (PcdArmHdLcdBase) + 0x24C)
> -
> -
> -//
> -// HDLCD Values of registers
> -//
> -
> -// HDLCD Interrupt mask, clear and status register
> -#define HDLCD_DMA_END                     BIT0    /* DMA has finished reading a frame */
> -#define HDLCD_BUS_ERROR                   BIT1    /* DMA bus error */
> -#define HDLCD_SYNC                        BIT2    /* Vertical sync */
> -#define HDLCD_UNDERRUN                    BIT3    /* No Data available while DATAEN active */
> -
> -// CLCD_CONTROL Control register
> -#define HDLCD_DISABLE                     0
> -#define HDLCD_ENABLE                      BIT0
> -
> -// Bus Options
> -#define HDLCD_BURST_1                     BIT0
> -#define HDLCD_BURST_2                     BIT1
> -#define HDLCD_BURST_4                     BIT2
> -#define HDLCD_BURST_8                     BIT3
> -#define HDLCD_BURST_16                    BIT4
> -
> -// Polarities - HIGH
> -#define HDLCD_VSYNC_HIGH                  BIT0
> -#define HDLCD_HSYNC_HIGH                  BIT1
> -#define HDLCD_DATEN_HIGH                  BIT2
> -#define HDLCD_DATA_HIGH                   BIT3
> -#define HDLCD_PXCLK_HIGH                  BIT4
> -// Polarities - LOW (for completion and for ease of understanding the hardware settings)
> -#define HDLCD_VSYNC_LOW                   0
> -#define HDLCD_HSYNC_LOW                   0
> -#define HDLCD_DATEN_LOW                   0
> -#define HDLCD_DATA_LOW                    0
> -#define HDLCD_PXCLK_LOW                   0
> -
> -// Pixel Format
> -#define HDLCD_LITTLE_ENDIAN              (0 << 31)
> -#define HDLCD_BIG_ENDIAN                 (1 << 31)
> -
> -// Number of bytes per pixel
> -#define HDLCD_4BYTES_PER_PIXEL           ((4 - 1) << 3)
> -
> -#endif /* _HDLCD_H_ */
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
> deleted file mode 100644
> index 896fc588b275..000000000000
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcdGraphicsOutputDxe.inf
> +++ /dev/null
> @@ -1,62 +0,0 @@
> -#/** @file
> -#
> -#  Component description file for HDLCD module
> -#
> -#  Copyright (c) 2011-2012, 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
> -#  which accompanies this distribution.  The full text of the license may be found at
> -#  http://opensource.org/licenses/bsd-license.php
> -#
> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#**/
> -
> -[Defines]
> -  INF_VERSION                    = 0x00010005
> -  BASE_NAME                      = HdLcdGraphicsDxe
> -  FILE_GUID                      = ce660500-824d-11e0-ac72-0002a5d5c51b
> -  MODULE_TYPE                    = DXE_DRIVER
> -  VERSION_STRING                 = 1.0
> -  ENTRY_POINT                    = LcdGraphicsOutputDxeInitialize
> -
> -[Sources.common]
> -  LcdGraphicsOutputDxe.c
> -  LcdGraphicsOutputBlt.c
> -  HdLcd.c
> -
> -[Packages]
> -  MdePkg/MdePkg.dec
> -  MdeModulePkg/MdeModulePkg.dec
> -  ArmPkg/ArmPkg.dec
> -  ArmPlatformPkg/ArmPlatformPkg.dec
> -
> -[LibraryClasses]
> -  ArmLib
> -  UefiLib
> -  BaseLib
> -  DebugLib
> -  TimerLib
> -  UefiDriverEntryPoint
> -  UefiBootServicesTableLib
> -  IoLib
> -  BaseMemoryLib
> -  LcdPlatformLib
> -
> -[Protocols]
> -  gEfiDevicePathProtocolGuid
> -  gEfiGraphicsOutputProtocolGuid                # Produced
> -  gEfiEdidDiscoveredProtocolGuid                # Produced
> -  gEfiEdidActiveProtocolGuid                    # Produced
> -  gEfiEdidOverrideProtocolGuid                  # Produced
> -
> -[FixedPcd]
> -  gArmPlatformTokenSpaceGuid.PcdArmHdLcdBase
> -
> -[FeaturePcd]
> -  gArmPlatformTokenSpaceGuid.PcdGopDisableOnExitBootServices
> -
> -[Depex]
> -  gEfiCpuArchProtocolGuid
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
> deleted file mode 100644
> index a9ce60c5b0a6..000000000000
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
> +++ /dev/null
> @@ -1,125 +0,0 @@
> -/** @file  PL111Lcd.c
> -
> -  Copyright (c) 2011-2012, 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
> -  which accompanies this distribution.  The full text of the license may be found at
> -  http://opensource.org/licenses/bsd-license.php
> -
> -  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/IoLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -
> -#include "LcdGraphicsOutputDxe.h"
> -#include "PL111Lcd.h"
> -
> -/**********************************************************************
> - *
> - *  This file contains all the bits of the PL111 that are
> - *  platform independent.
> - *
> - **********************************************************************/
> -
> -EFI_STATUS
> -LcdIdentify (
> -  VOID
> -  )
> -{
> -  DEBUG ((EFI_D_WARN, "Probing ID registers at 0x%lx for a PL111\n",
> -    PL111_REG_CLCD_PERIPH_ID_0));
> -
> -  // Check if this is a PL111
> -  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 &&
> -      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 &&
> -     (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2) & 0xf) == PL111_CLCD_PERIPH_ID_2 &&
> -      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 &&
> -      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 &&
> -      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 &&
> -      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 &&
> -      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
> -    return EFI_SUCCESS;
> -  }
> -  return EFI_NOT_FOUND;
> -}
> -
> -EFI_STATUS
> -LcdInitialize (
> -  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
> -  )
> -{
> -  // Define start of the VRAM. This never changes for any graphics mode
> -  MmioWrite32(PL111_REG_LCD_UP_BASE, (UINT32) VramBaseAddress);
> -  MmioWrite32(PL111_REG_LCD_LP_BASE, 0); // We are not using a double buffer
> -
> -  // Disable all interrupts from the PL111
> -  MmioWrite32(PL111_REG_LCD_IMSC, 0);
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -LcdSetMode (
> -  IN UINT32  ModeNumber
> -  )
> -{
> -  EFI_STATUS        Status;
> -  UINT32            HRes;
> -  UINT32            HSync;
> -  UINT32            HBackPorch;
> -  UINT32            HFrontPorch;
> -  UINT32            VRes;
> -  UINT32            VSync;
> -  UINT32            VBackPorch;
> -  UINT32            VFrontPorch;
> -  UINT32            LcdControl;
> -  LCD_BPP           LcdBpp;
> -
> -  // Set the video mode timings and other relevant information
> -  Status = LcdPlatformGetTimings (ModeNumber,
> -                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
> -                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
> -  ASSERT_EFI_ERROR (Status);
> -  if (EFI_ERROR( Status )) {
> -    return EFI_DEVICE_ERROR;
> -  }
> -
> -  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
> -  ASSERT_EFI_ERROR (Status);
> -  if (EFI_ERROR( Status )) {
> -    return EFI_DEVICE_ERROR;
> -  }
> -
> -  // Disable the CLCD_LcdEn bit
> -  LcdControl = MmioRead32( PL111_REG_LCD_CONTROL);
> -  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl & ~1);
> -
> -  // Set Timings
> -  MmioWrite32 (PL111_REG_LCD_TIMING_0, HOR_AXIS_PANEL(HBackPorch, HFrontPorch, HSync, HRes));
> -  MmioWrite32 (PL111_REG_LCD_TIMING_1, VER_AXIS_PANEL(VBackPorch, VFrontPorch, VSync, VRes));
> -  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY(HRes));
> -  MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
> -
> -  // PL111_REG_LCD_CONTROL
> -  LcdControl = PL111_CTRL_LCD_EN | PL111_CTRL_LCD_BPP(LcdBpp) | PL111_CTRL_LCD_TFT | PL111_CTRL_BGR;
> -  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
> -
> -  // Turn on power to the LCD Panel
> -  LcdControl |= PL111_CTRL_LCD_PWR;
> -  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
> -
> -  return EFI_SUCCESS;
> -}
> -
> -VOID
> -LcdShutdown (
> -  VOID
> -  )
> -{
> -  // Disable the controller
> -  MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
> -}
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h
> deleted file mode 100644
> index 18e28af805f6..000000000000
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.h
> +++ /dev/null
> @@ -1,149 +0,0 @@
> -/** @file  PL111Lcd.h
> -
> - Copyright (c) 2011, 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
> - which accompanies this distribution.  The full text of the license may be found at
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - **/
> -
> -#ifndef _PL111LCD_H__
> -#define _PL111LCD_H__
> -
> -/**********************************************************************
> - *
> - *  This header file contains all the bits of the PL111 that are
> - *  platform independent.
> - *
> - **********************************************************************/
> -
> -// Controller Register Offsets
> -#define PL111_REG_LCD_TIMING_0            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x000)
> -#define PL111_REG_LCD_TIMING_1            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x004)
> -#define PL111_REG_LCD_TIMING_2            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x008)
> -#define PL111_REG_LCD_TIMING_3            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x00C)
> -#define PL111_REG_LCD_UP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x010)
> -#define PL111_REG_LCD_LP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x014)
> -#define PL111_REG_LCD_CONTROL             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x018)
> -#define PL111_REG_LCD_IMSC                ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x01C)
> -#define PL111_REG_LCD_RIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x020)
> -#define PL111_REG_LCD_MIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x024)
> -#define PL111_REG_LCD_ICR                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x028)
> -#define PL111_REG_LCD_UP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x02C)
> -#define PL111_REG_LCD_LP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x030)
> -#define PL111_REG_LCD_PALETTE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x200)
> -
> -// Identification Register Offsets
> -#define PL111_REG_CLCD_PERIPH_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE0)
> -#define PL111_REG_CLCD_PERIPH_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE4)
> -#define PL111_REG_CLCD_PERIPH_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE8)
> -#define PL111_REG_CLCD_PERIPH_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFEC)
> -#define PL111_REG_CLCD_P_CELL_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF0)
> -#define PL111_REG_CLCD_P_CELL_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF4)
> -#define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)
> -#define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)
> -
> -#define PL111_CLCD_PERIPH_ID_0            0x11
> -#define PL111_CLCD_PERIPH_ID_1            0x11
> -#define PL111_CLCD_PERIPH_ID_2            0x04
> -#define PL111_CLCD_PERIPH_ID_3            0x00
> -#define PL111_CLCD_P_CELL_ID_0            0x0D
> -#define PL111_CLCD_P_CELL_ID_1            0xF0
> -#define PL111_CLCD_P_CELL_ID_2            0x05
> -#define PL111_CLCD_P_CELL_ID_3            0xB1
> -
> -/**********************************************************************/
> -
> -// Register components (register bits)
> -
> -// This should make life easier to program specific settings in the different registers
> -// by simplifying the setting up of the individual bits of each register
> -// and then assembling the final register value.
> -
> -/**********************************************************************/
> -
> -// Register: PL111_REG_LCD_TIMING_0
> -#define HOR_AXIS_PANEL(hbp,hfp,hsw,hor_res) (UINT32)(((UINT32)(hbp) << 24) | ((UINT32)(hfp) << 16) | ((UINT32)(hsw) << 8) | (((UINT32)((hor_res)/16)-1) << 2))
> -
> -// Register: PL111_REG_LCD_TIMING_1
> -#define VER_AXIS_PANEL(vbp,vfp,vsw,ver_res) (UINT32)(((UINT32)(vbp) << 24) | ((UINT32)(vfp) << 16) | ((UINT32)(vsw) << 10) | ((ver_res)-1))
> -
> -// Register: PL111_REG_LCD_TIMING_2
> -#define PL111_BIT_SHIFT_PCD_HI            27
> -#define PL111_BIT_SHIFT_BCD               26
> -#define PL111_BIT_SHIFT_CPL               16
> -#define PL111_BIT_SHIFT_IOE               14
> -#define PL111_BIT_SHIFT_IPC               13
> -#define PL111_BIT_SHIFT_IHS               12
> -#define PL111_BIT_SHIFT_IVS               11
> -#define PL111_BIT_SHIFT_ACB               6
> -#define PL111_BIT_SHIFT_CLKSEL            5
> -#define PL111_BIT_SHIFT_PCD_LO            0
> -
> -#define PL111_BCD                         (1 << 26)
> -#define PL111_IPC                         (1 << 13)
> -#define PL111_IHS                         (1 << 12)
> -#define PL111_IVS                         (1 << 11)
> -
> -#define CLK_SIG_POLARITY(hor_res)         (UINT32)(PL111_BCD | PL111_IPC | PL111_IHS | PL111_IVS | (((hor_res)-1) << 16))
> -
> -// Register: PL111_REG_LCD_TIMING_3
> -#define PL111_BIT_SHIFT_LEE               16
> -#define PL111_BIT_SHIFT_LED               0
> -
> -#define PL111_CTRL_WATERMARK              (1 << 16)
> -#define PL111_CTRL_LCD_V_COMP             (1 << 12)
> -#define PL111_CTRL_LCD_PWR                (1 << 11)
> -#define PL111_CTRL_BEPO                   (1 << 10)
> -#define PL111_CTRL_BEBO                   (1 << 9)
> -#define PL111_CTRL_BGR                    (1 << 8)
> -#define PL111_CTRL_LCD_DUAL               (1 << 7)
> -#define PL111_CTRL_LCD_MONO_8             (1 << 6)
> -#define PL111_CTRL_LCD_TFT                (1 << 5)
> -#define PL111_CTRL_LCD_BW                 (1 << 4)
> -#define PL111_CTRL_LCD_1BPP               (0 << 1)
> -#define PL111_CTRL_LCD_2BPP               (1 << 1)
> -#define PL111_CTRL_LCD_4BPP               (2 << 1)
> -#define PL111_CTRL_LCD_8BPP               (3 << 1)
> -#define PL111_CTRL_LCD_16BPP              (4 << 1)
> -#define PL111_CTRL_LCD_24BPP              (5 << 1)
> -#define PL111_CTRL_LCD_16BPP_565          (6 << 1)
> -#define PL111_CTRL_LCD_12BPP_444          (7 << 1)
> -#define PL111_CTRL_LCD_BPP(Bpp)           ((Bpp) << 1)
> -#define PL111_CTRL_LCD_EN                 1
> -
> -/**********************************************************************/
> -
> -// Register: PL111_REG_LCD_TIMING_0
> -#define PL111_LCD_TIMING_0_HBP(hbp)       (((hbp) & 0xFF) << 24)
> -#define PL111_LCD_TIMING_0_HFP(hfp)       (((hfp) & 0xFF) << 16)
> -#define PL111_LCD_TIMING_0_HSW(hsw)       (((hsw) & 0xFF) << 8)
> -#define PL111_LCD_TIMING_0_PPL(ppl)       (((hsw) & 0x3F) << 2)
> -
> -// Register: PL111_REG_LCD_TIMING_1
> -#define PL111_LCD_TIMING_1_VBP(vbp)       (((vbp) & 0xFF) << 24)
> -#define PL111_LCD_TIMING_1_VFP(vfp)       (((vfp) & 0xFF) << 16)
> -#define PL111_LCD_TIMING_1_VSW(vsw)       (((vsw) & 0x3F) << 10)
> -#define PL111_LCD_TIMING_1_LPP(lpp)        ((lpp) & 0xFC)
> -
> -// Register: PL111_REG_LCD_TIMING_2
> -#define PL111_BIT_MASK_PCD_HI             0xF8000000
> -#define PL111_BIT_MASK_BCD                0x04000000
> -#define PL111_BIT_MASK_CPL                0x03FF0000
> -#define PL111_BIT_MASK_IOE                0x00004000
> -#define PL111_BIT_MASK_IPC                0x00002000
> -#define PL111_BIT_MASK_IHS                0x00001000
> -#define PL111_BIT_MASK_IVS                0x00000800
> -#define PL111_BIT_MASK_ACB                0x000007C0
> -#define PL111_BIT_MASK_CLKSEL             0x00000020
> -#define PL111_BIT_MASK_PCD_LO             0x0000001F
> -
> -// Register: PL111_REG_LCD_TIMING_3
> -#define PL111_BIT_MASK_LEE                0x00010000
> -#define PL111_BIT_MASK_LED                0x0000007F
> -
> -#endif /* _PL111LCD_H__ */
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
> deleted file mode 100644
> index 39e42bcbab2a..000000000000
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111LcdGraphicsOutputDxe.inf
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -#/** @file
> -#
> -#  Component description file for PL111LcdGraphicsOutputDxe module
> -#
> -#  Copyright (c) 2011-2012, 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
> -#  which accompanies this distribution.  The full text of the license may be found at
> -#  http://opensource.org/licenses/bsd-license.php
> -#
> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#**/
> -
> -[Defines]
> -  INF_VERSION                    = 0x00010005
> -  BASE_NAME                      = PL111LcdGraphicsDxe
> -  FILE_GUID                      = 407B4008-BF5B-11DF-9547-CF16E0D72085
> -  MODULE_TYPE                    = DXE_DRIVER
> -  VERSION_STRING                 = 1.0
> -  ENTRY_POINT                    = LcdGraphicsOutputDxeInitialize
> -
> -[Sources.common]
> -  LcdGraphicsOutputDxe.c
> -  LcdGraphicsOutputBlt.c
> -  PL111Lcd.c
> -
> -[Packages]
> -  MdePkg/MdePkg.dec
> -  MdeModulePkg/MdeModulePkg.dec
> -  ArmPkg/ArmPkg.dec
> -  ArmPlatformPkg/ArmPlatformPkg.dec
> -
> -[LibraryClasses]
> -  ArmLib
> -  UefiLib
> -  BaseLib
> -  DebugLib
> -  TimerLib
> -  UefiDriverEntryPoint
> -  UefiBootServicesTableLib
> -  IoLib
> -  BaseMemoryLib
> -  LcdPlatformLib
> -
> -[Protocols]
> -  gEfiDevicePathProtocolGuid
> -  gEfiGraphicsOutputProtocolGuid
> -
> -[FixedPcd]
> -  gArmPlatformTokenSpaceGuid.PcdPL111LcdBase
> -
> -[FeaturePcd]
> -  gArmPlatformTokenSpaceGuid.PcdGopDisableOnExitBootServices
> -
> -[Depex]
> -  gEfiCpuArchProtocolGuid
> -- 
> 2.11.0
> 


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class
  2017-12-11 17:32   ` Leif Lindholm
@ 2017-12-11 17:56     ` Ard Biesheuvel
  2017-12-12 17:12       ` Leif Lindholm
  0 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-11 17:56 UTC (permalink / raw)
  To: Leif Lindholm; +Cc: edk2-devel@lists.01.org, Girish Pathak, Evan Lloyd

On 11 December 2017 at 17:32, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Fri, Dec 08, 2017 at 05:31:24PM +0000, Ard Biesheuvel wrote:
>> Add the declaration and include file for the new LcdHwLib library class,
>> which will allow us to abstract away from platform  variations in the
>> LCD graphics output driver.
>>
>> 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>
>> [ardb: add NULL implementation as well and add it to ArmPlatformPkg.dsc]
>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> ---
>>  ArmPlatformPkg/ArmPlatformPkg.dec                    |  1 +
>>  ArmPlatformPkg/ArmPlatformPkg.dsc                    |  1 +
>>  ArmPlatformPkg/Include/Library/LcdHwLib.h            | 68 ++++++++++++++++++
>>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c   | 75 ++++++++++++++++++++
>>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf | 28 ++++++++
>>  5 files changed, 173 insertions(+)
>>
>> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
>> index 6a7bbc02d011..b33b6e630d85 100644
>> --- a/ArmPlatformPkg/ArmPlatformPkg.dec
>> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec
>> @@ -33,6 +33,7 @@ [Includes.common]
>>
>>  [LibraryClasses]
>>    ArmPlatformLib|Include/Library/ArmPlatformLib.h
>> +  LcdHwLib|Include/Library/LcdHwLib.h
>>    LcdPlatformLib|Include/Library/LcdPlatformLib.h
>>    NorFlashPlatformLib|Include/Library/NorFlashPlatformLib.h
>>    PL011UartLib|Include/Library/PL011UartLib.h
>> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
>> index c3a8c257cb02..9dd64b472acf 100644
>> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
>> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
>> @@ -101,6 +101,7 @@ [Components.common]
>>
>>    ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.inf
>>    ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
>> +  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
>>    ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
>>    ArmPlatformPkg/Library/NorFlashPlatformNullLib/NorFlashPlatformNullLib.inf
>>    ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
>> diff --git a/ArmPlatformPkg/Include/Library/LcdHwLib.h b/ArmPlatformPkg/Include/Library/LcdHwLib.h
>> new file mode 100644
>> index 000000000000..0c0480862aea
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Include/Library/LcdHwLib.h
>> @@ -0,0 +1,68 @@
>> +/** @file LcdHwLib.h
>> +
>> +  This file contains interface functions for LcdHwLib of ArmPlatformPkg
>> +
>> +  Copyright (c) 2017, 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
>> +  which accompanies this distribution.  The full text of the license may be found at
>> +  http://opensource.org/licenses/bsd-license.php
>> +
>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +**/
>> +
>> +#ifndef LCD_HW_LIB_H_
>> +#define LCD_HW_LIB_H_
>> +
>> +#include <Uefi/UefiBaseType.h>
>> +
>> +/**
>> +  Check for presence of display
>> +
>> +  @retval EFI_SUCCESS            Platform implements display.
>> +  @retval EFI_NOT_FOUND          Display not found on the platform.
>> +
>> +**/
>> +EFI_STATUS
>> +LcdIdentify (
>> +  VOID
>> +  );
>> +
>> +/**
>> +  Initialize display.
>> +
>> +  @param  FrameBaseAddress       Address of the frame buffer.
>> +  @retval EFI_SUCCESS            Display initialization success.
>> +  @retval !(EFI_SUCCESS)         Display initialization failure.
>> +
>> +**/
>> +EFI_STATUS
>> +LcdInitialize (
>> +  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
>> +  );
>> +
>> +/**
>> +  Set requested mode of the display.
>> +
>> +  @param  ModeNumber             Display mode number.
>> +  @retval EFI_SUCCESS            Display set mode success.
>> +  @retval EFI_DEVICE_ERROR       If mode not found/supported.
>> +
>> +**/
>> +EFI_STATUS
>> +LcdSetMode (
>> +  IN UINT32  ModeNumber
>> +  );
>> +
>> +/**
>> +  De-initializes the display.
>> +**/
>> +VOID
>> +LcdShutdown (
>> +  VOID
>> +  );
>> +
>> +#endif /* LCD_HW_LIB_H_ */
>> diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
>> new file mode 100644
>> index 000000000000..2d31b5183c95
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
>> @@ -0,0 +1,75 @@
>> +/** @file
>> +
>> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
>> +
>> +  This program and the accompanying materials
>> +  are licensed and made available under the terms and conditions of the BSD License
>> +  which accompanies this distribution.  The full text of the license may be found at
>> +  http://opensource.org/licenses/bsd-license.php
>> +
>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +**/
>> +
>> +#include <Base.h>
>> +#include <Uefi/UefiBaseType.h>
>> +#include <Library/DebugLib.h>
>> +#include <Library/LcdPlatformLib.h>
>> +
>> +/**
>> +  Check for presence of display
>> +
>> +  @retval EFI_SUCCESS            Platform implements display.
>> +  @retval EFI_NOT_FOUND          Display not found on the platform.
>> +
>> +**/
>> +EFI_STATUS
>> +LcdIdentify (
>> +  VOID
>> +  )
>> +{
>
> Bikeshedding:
> Since this Null implementation can never fill any functionality other
> than letting build complete without platform-specific glue - would it
> not be more expected for it to ASSERT and/or return failure
> everywhere?
>

I think it makes sense to ASSERT on Null library member that take OUT
parameters, because you can never return anything meaningful. In this
case, we can just pretend that the Null LcdHwLib does not require
initialization, is always present and only supports a single mode, and
the driver could theoretically still work. Highly unlikely to be
useful for anything but still.

On ArmVirtQemu, we switched to the Null ArmPlatformLib implementation
because we need to fulfil the dependency to be able to use PrePeiCore,
but we no longer have any code to put in there.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111
  2017-12-11 17:39   ` Leif Lindholm
@ 2017-12-11 17:57     ` Ard Biesheuvel
  0 siblings, 0 replies; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-11 17:57 UTC (permalink / raw)
  To: Leif Lindholm; +Cc: edk2-devel@lists.01.org, Girish Pathak, Evan Lloyd

On 11 December 2017 at 17:39, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Fri, Dec 08, 2017 at 05:31:25PM +0000, Ard Biesheuvel wrote:
>> Convert the PL111 specific code of LcdGraphicsOutputDxe into a LcdHwlib
>> implementation that we will wire up later into LcdGraphicsOutputDxe.
>>
>> 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>
>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>
> There are some whitespace and line length issues below, but no real
> howlers, and I guess it's all from existing code?
>

Yeah.

> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
>

Thanks.

>> ---
>>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c   | 126 +++++++++++++++++
>>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h   | 149 ++++++++++++++++++++
>>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf |  40 ++++++
>>  3 files changed, 315 insertions(+)
>>
>> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
>> new file mode 100644
>> index 000000000000..9b4a02045ab7
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
>> @@ -0,0 +1,126 @@
>> +/** @file  PL111Lcd.c
>> +
>> +  Copyright (c) 2011-2012, 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
>> +  which accompanies this distribution.  The full text of the license may be found at
>> +  http://opensource.org/licenses/bsd-license.php
>> +
>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +**/
>> +#include <Library/DebugLib.h>
>> +#include <Library/IoLib.h>
>> +#include <Library/LcdHwLib.h>
>> +#include <Library/LcdPlatformLib.h>
>> +#include <Library/MemoryAllocationLib.h>
>> +
>> +#include "PL111Lcd.h"
>> +
>> +/**********************************************************************
>> + *
>> + *  This file contains all the bits of the PL111 that are
>> + *  platform independent.
>> + *
>> + **********************************************************************/
>> +
>> +EFI_STATUS
>> +LcdIdentify (
>> +  VOID
>> +  )
>> +{
>> +  DEBUG ((EFI_D_WARN, "Probing ID registers at 0x%lx for a PL111\n",
>> +    PL111_REG_CLCD_PERIPH_ID_0));
>> +
>> +  // Check if this is a PL111
>> +  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 &&
>> +      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 &&
>> +     (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2) & 0xf) == PL111_CLCD_PERIPH_ID_2 &&
>> +      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 &&
>> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 &&
>> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 &&
>> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 &&
>> +      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
>> +    return EFI_SUCCESS;
>> +  }
>> +  return EFI_NOT_FOUND;
>> +}
>> +
>> +EFI_STATUS
>> +LcdInitialize (
>> +  IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
>> +  )
>> +{
>> +  // Define start of the VRAM. This never changes for any graphics mode
>> +  MmioWrite32(PL111_REG_LCD_UP_BASE, (UINT32) VramBaseAddress);
>> +  MmioWrite32(PL111_REG_LCD_LP_BASE, 0); // We are not using a double buffer
>> +
>> +  // Disable all interrupts from the PL111
>> +  MmioWrite32(PL111_REG_LCD_IMSC, 0);
>> +
>> +  return EFI_SUCCESS;
>> +}
>> +
>> +EFI_STATUS
>> +LcdSetMode (
>> +  IN UINT32  ModeNumber
>> +  )
>> +{
>> +  EFI_STATUS        Status;
>> +  UINT32            HRes;
>> +  UINT32            HSync;
>> +  UINT32            HBackPorch;
>> +  UINT32            HFrontPorch;
>> +  UINT32            VRes;
>> +  UINT32            VSync;
>> +  UINT32            VBackPorch;
>> +  UINT32            VFrontPorch;
>> +  UINT32            LcdControl;
>> +  LCD_BPP           LcdBpp;
>> +
>> +  // Set the video mode timings and other relevant information
>> +  Status = LcdPlatformGetTimings (ModeNumber,
>> +                                  &HRes,&HSync,&HBackPorch,&HFrontPorch,
>> +                                  &VRes,&VSync,&VBackPorch,&VFrontPorch);
>> +  ASSERT_EFI_ERROR (Status);
>> +  if (EFI_ERROR( Status )) {
>> +    return EFI_DEVICE_ERROR;
>> +  }
>> +
>> +  Status = LcdPlatformGetBpp (ModeNumber,&LcdBpp);
>> +  ASSERT_EFI_ERROR (Status);
>> +  if (EFI_ERROR( Status )) {
>> +    return EFI_DEVICE_ERROR;
>> +  }
>> +
>> +  // Disable the CLCD_LcdEn bit
>> +  LcdControl = MmioRead32( PL111_REG_LCD_CONTROL);
>> +  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl & ~1);
>> +
>> +  // Set Timings
>> +  MmioWrite32 (PL111_REG_LCD_TIMING_0, HOR_AXIS_PANEL(HBackPorch, HFrontPorch, HSync, HRes));
>> +  MmioWrite32 (PL111_REG_LCD_TIMING_1, VER_AXIS_PANEL(VBackPorch, VFrontPorch, VSync, VRes));
>> +  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY(HRes));
>> +  MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
>> +
>> +  // PL111_REG_LCD_CONTROL
>> +  LcdControl = PL111_CTRL_LCD_EN | PL111_CTRL_LCD_BPP(LcdBpp) | PL111_CTRL_LCD_TFT | PL111_CTRL_BGR;
>> +  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
>> +
>> +  // Turn on power to the LCD Panel
>> +  LcdControl |= PL111_CTRL_LCD_PWR;
>> +  MmioWrite32(PL111_REG_LCD_CONTROL,  LcdControl);
>> +
>> +  return EFI_SUCCESS;
>> +}
>> +
>> +VOID
>> +LcdShutdown (
>> +  VOID
>> +  )
>> +{
>> +  // Disable the controller
>> +  MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
>> +}
>> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h
>> new file mode 100644
>> index 000000000000..18e28af805f6
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.h
>> @@ -0,0 +1,149 @@
>> +/** @file  PL111Lcd.h
>> +
>> + Copyright (c) 2011, 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
>> + which accompanies this distribution.  The full text of the license may be found at
>> + http://opensource.org/licenses/bsd-license.php
>> +
>> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> + **/
>> +
>> +#ifndef _PL111LCD_H__
>> +#define _PL111LCD_H__
>> +
>> +/**********************************************************************
>> + *
>> + *  This header file contains all the bits of the PL111 that are
>> + *  platform independent.
>> + *
>> + **********************************************************************/
>> +
>> +// Controller Register Offsets
>> +#define PL111_REG_LCD_TIMING_0            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x000)
>> +#define PL111_REG_LCD_TIMING_1            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x004)
>> +#define PL111_REG_LCD_TIMING_2            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x008)
>> +#define PL111_REG_LCD_TIMING_3            ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x00C)
>> +#define PL111_REG_LCD_UP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x010)
>> +#define PL111_REG_LCD_LP_BASE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x014)
>> +#define PL111_REG_LCD_CONTROL             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x018)
>> +#define PL111_REG_LCD_IMSC                ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x01C)
>> +#define PL111_REG_LCD_RIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x020)
>> +#define PL111_REG_LCD_MIS                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x024)
>> +#define PL111_REG_LCD_ICR                 ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x028)
>> +#define PL111_REG_LCD_UP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x02C)
>> +#define PL111_REG_LCD_LP_CURR             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x030)
>> +#define PL111_REG_LCD_PALETTE             ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0x200)
>> +
>> +// Identification Register Offsets
>> +#define PL111_REG_CLCD_PERIPH_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE0)
>> +#define PL111_REG_CLCD_PERIPH_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE4)
>> +#define PL111_REG_CLCD_PERIPH_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFE8)
>> +#define PL111_REG_CLCD_PERIPH_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFEC)
>> +#define PL111_REG_CLCD_P_CELL_ID_0        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF0)
>> +#define PL111_REG_CLCD_P_CELL_ID_1        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF4)
>> +#define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)
>> +#define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)
>> +
>> +#define PL111_CLCD_PERIPH_ID_0            0x11
>> +#define PL111_CLCD_PERIPH_ID_1            0x11
>> +#define PL111_CLCD_PERIPH_ID_2            0x04
>> +#define PL111_CLCD_PERIPH_ID_3            0x00
>> +#define PL111_CLCD_P_CELL_ID_0            0x0D
>> +#define PL111_CLCD_P_CELL_ID_1            0xF0
>> +#define PL111_CLCD_P_CELL_ID_2            0x05
>> +#define PL111_CLCD_P_CELL_ID_3            0xB1
>> +
>> +/**********************************************************************/
>> +
>> +// Register components (register bits)
>> +
>> +// This should make life easier to program specific settings in the different registers
>> +// by simplifying the setting up of the individual bits of each register
>> +// and then assembling the final register value.
>> +
>> +/**********************************************************************/
>> +
>> +// Register: PL111_REG_LCD_TIMING_0
>> +#define HOR_AXIS_PANEL(hbp,hfp,hsw,hor_res) (UINT32)(((UINT32)(hbp) << 24) | ((UINT32)(hfp) << 16) | ((UINT32)(hsw) << 8) | (((UINT32)((hor_res)/16)-1) << 2))
>> +
>> +// Register: PL111_REG_LCD_TIMING_1
>> +#define VER_AXIS_PANEL(vbp,vfp,vsw,ver_res) (UINT32)(((UINT32)(vbp) << 24) | ((UINT32)(vfp) << 16) | ((UINT32)(vsw) << 10) | ((ver_res)-1))
>> +
>> +// Register: PL111_REG_LCD_TIMING_2
>> +#define PL111_BIT_SHIFT_PCD_HI            27
>> +#define PL111_BIT_SHIFT_BCD               26
>> +#define PL111_BIT_SHIFT_CPL               16
>> +#define PL111_BIT_SHIFT_IOE               14
>> +#define PL111_BIT_SHIFT_IPC               13
>> +#define PL111_BIT_SHIFT_IHS               12
>> +#define PL111_BIT_SHIFT_IVS               11
>> +#define PL111_BIT_SHIFT_ACB               6
>> +#define PL111_BIT_SHIFT_CLKSEL            5
>> +#define PL111_BIT_SHIFT_PCD_LO            0
>> +
>> +#define PL111_BCD                         (1 << 26)
>> +#define PL111_IPC                         (1 << 13)
>> +#define PL111_IHS                         (1 << 12)
>> +#define PL111_IVS                         (1 << 11)
>> +
>> +#define CLK_SIG_POLARITY(hor_res)         (UINT32)(PL111_BCD | PL111_IPC | PL111_IHS | PL111_IVS | (((hor_res)-1) << 16))
>> +
>> +// Register: PL111_REG_LCD_TIMING_3
>> +#define PL111_BIT_SHIFT_LEE               16
>> +#define PL111_BIT_SHIFT_LED               0
>> +
>> +#define PL111_CTRL_WATERMARK              (1 << 16)
>> +#define PL111_CTRL_LCD_V_COMP             (1 << 12)
>> +#define PL111_CTRL_LCD_PWR                (1 << 11)
>> +#define PL111_CTRL_BEPO                   (1 << 10)
>> +#define PL111_CTRL_BEBO                   (1 << 9)
>> +#define PL111_CTRL_BGR                    (1 << 8)
>> +#define PL111_CTRL_LCD_DUAL               (1 << 7)
>> +#define PL111_CTRL_LCD_MONO_8             (1 << 6)
>> +#define PL111_CTRL_LCD_TFT                (1 << 5)
>> +#define PL111_CTRL_LCD_BW                 (1 << 4)
>> +#define PL111_CTRL_LCD_1BPP               (0 << 1)
>> +#define PL111_CTRL_LCD_2BPP               (1 << 1)
>> +#define PL111_CTRL_LCD_4BPP               (2 << 1)
>> +#define PL111_CTRL_LCD_8BPP               (3 << 1)
>> +#define PL111_CTRL_LCD_16BPP              (4 << 1)
>> +#define PL111_CTRL_LCD_24BPP              (5 << 1)
>> +#define PL111_CTRL_LCD_16BPP_565          (6 << 1)
>> +#define PL111_CTRL_LCD_12BPP_444          (7 << 1)
>> +#define PL111_CTRL_LCD_BPP(Bpp)           ((Bpp) << 1)
>> +#define PL111_CTRL_LCD_EN                 1
>> +
>> +/**********************************************************************/
>> +
>> +// Register: PL111_REG_LCD_TIMING_0
>> +#define PL111_LCD_TIMING_0_HBP(hbp)       (((hbp) & 0xFF) << 24)
>> +#define PL111_LCD_TIMING_0_HFP(hfp)       (((hfp) & 0xFF) << 16)
>> +#define PL111_LCD_TIMING_0_HSW(hsw)       (((hsw) & 0xFF) << 8)
>> +#define PL111_LCD_TIMING_0_PPL(ppl)       (((hsw) & 0x3F) << 2)
>> +
>> +// Register: PL111_REG_LCD_TIMING_1
>> +#define PL111_LCD_TIMING_1_VBP(vbp)       (((vbp) & 0xFF) << 24)
>> +#define PL111_LCD_TIMING_1_VFP(vfp)       (((vfp) & 0xFF) << 16)
>> +#define PL111_LCD_TIMING_1_VSW(vsw)       (((vsw) & 0x3F) << 10)
>> +#define PL111_LCD_TIMING_1_LPP(lpp)        ((lpp) & 0xFC)
>> +
>> +// Register: PL111_REG_LCD_TIMING_2
>> +#define PL111_BIT_MASK_PCD_HI             0xF8000000
>> +#define PL111_BIT_MASK_BCD                0x04000000
>> +#define PL111_BIT_MASK_CPL                0x03FF0000
>> +#define PL111_BIT_MASK_IOE                0x00004000
>> +#define PL111_BIT_MASK_IPC                0x00002000
>> +#define PL111_BIT_MASK_IHS                0x00001000
>> +#define PL111_BIT_MASK_IVS                0x00000800
>> +#define PL111_BIT_MASK_ACB                0x000007C0
>> +#define PL111_BIT_MASK_CLKSEL             0x00000020
>> +#define PL111_BIT_MASK_PCD_LO             0x0000001F
>> +
>> +// Register: PL111_REG_LCD_TIMING_3
>> +#define PL111_BIT_MASK_LEE                0x00010000
>> +#define PL111_BIT_MASK_LED                0x0000007F
>> +
>> +#endif /* _PL111LCD_H__ */
>> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf
>> new file mode 100644
>> index 000000000000..40db77eb079e
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.inf
>> @@ -0,0 +1,40 @@
>> +#/** @file PL111Lcd.inf
>> +#
>> +#  Component description file for PL111Lcd module
>> +#
>> +#  Copyright (c) 2011-2017, 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
>> +#  which accompanies this distribution.  The full text of the license may be found at
>> +#  http://opensource.org/licenses/bsd-license.php
>> +#
>> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +#
>> +#**/
>> +
>> +[Defines]
>> +  INF_VERSION                    = 0x00010005
>> +  BASE_NAME                      = PL111Lcd
>> +  FILE_GUID                      = 407B4008-BF5B-11DF-9547-CF16E0D72085
>> +  MODULE_TYPE                    = BASE
>> +  VERSION_STRING                 = 1.0
>> +  LIBRARY_CLASS                  = LcdHwLib
>> +
>> +[Sources.common]
>> +  PL111Lcd.c
>> +
>> +[Packages]
>> +  ArmPlatformPkg/ArmPlatformPkg.dec
>> +  ArmPkg/ArmPkg.dec
>> +  MdeModulePkg/MdeModulePkg.dec
>> +  MdePkg/MdePkg.dec
>> +
>> +[LibraryClasses]
>> +  UefiLib
>> +  BaseLib
>> +  DebugLib
>> +  IoLib
>> +
>> +[FixedPcd]
>> +  gArmPlatformTokenSpaceGuid.PcdPL111LcdBase
>> --
>> 2.11.0
>>


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class
  2017-12-11 17:56     ` Ard Biesheuvel
@ 2017-12-12 17:12       ` Leif Lindholm
  2017-12-12 17:14         ` Ard Biesheuvel
  0 siblings, 1 reply; 17+ messages in thread
From: Leif Lindholm @ 2017-12-12 17:12 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: edk2-devel@lists.01.org, Girish Pathak, Evan Lloyd

On Mon, Dec 11, 2017 at 05:56:37PM +0000, Ard Biesheuvel wrote:
> On 11 December 2017 at 17:32, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> > On Fri, Dec 08, 2017 at 05:31:24PM +0000, Ard Biesheuvel wrote:
> >> Add the declaration and include file for the new LcdHwLib library class,
> >> which will allow us to abstract away from platform  variations in the
> >> LCD graphics output driver.
> >>
> >> 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>
> >> [ardb: add NULL implementation as well and add it to ArmPlatformPkg.dsc]
> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> >> ---
> >>  ArmPlatformPkg/ArmPlatformPkg.dec                    |  1 +
> >>  ArmPlatformPkg/ArmPlatformPkg.dsc                    |  1 +
> >>  ArmPlatformPkg/Include/Library/LcdHwLib.h            | 68 ++++++++++++++++++
> >>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c   | 75 ++++++++++++++++++++
> >>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf | 28 ++++++++
> >>  5 files changed, 173 insertions(+)
> >>
> >> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
> >> index 6a7bbc02d011..b33b6e630d85 100644
> >> --- a/ArmPlatformPkg/ArmPlatformPkg.dec
> >> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec
> >> @@ -33,6 +33,7 @@ [Includes.common]
> >>
> >>  [LibraryClasses]
> >>    ArmPlatformLib|Include/Library/ArmPlatformLib.h
> >> +  LcdHwLib|Include/Library/LcdHwLib.h
> >>    LcdPlatformLib|Include/Library/LcdPlatformLib.h
> >>    NorFlashPlatformLib|Include/Library/NorFlashPlatformLib.h
> >>    PL011UartLib|Include/Library/PL011UartLib.h
> >> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
> >> index c3a8c257cb02..9dd64b472acf 100644
> >> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
> >> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
> >> @@ -101,6 +101,7 @@ [Components.common]
> >>
> >>    ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.inf
> >>    ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
> >> +  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
> >>    ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
> >>    ArmPlatformPkg/Library/NorFlashPlatformNullLib/NorFlashPlatformNullLib.inf
> >>    ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
> >> diff --git a/ArmPlatformPkg/Include/Library/LcdHwLib.h b/ArmPlatformPkg/Include/Library/LcdHwLib.h
> >> new file mode 100644
> >> index 000000000000..0c0480862aea
> >> --- /dev/null
> >> +++ b/ArmPlatformPkg/Include/Library/LcdHwLib.h
> >> @@ -0,0 +1,68 @@
> >> +/** @file LcdHwLib.h
> >> +
> >> +  This file contains interface functions for LcdHwLib of ArmPlatformPkg
> >> +
> >> +  Copyright (c) 2017, 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
> >> +  which accompanies this distribution.  The full text of the license may be found at
> >> +  http://opensource.org/licenses/bsd-license.php
> >> +
> >> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> >> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> >> +
> >> +**/
> >> +
> >> +#ifndef LCD_HW_LIB_H_
> >> +#define LCD_HW_LIB_H_
> >> +
> >> +#include <Uefi/UefiBaseType.h>
> >> +
> >> +/**
> >> +  Check for presence of display
> >> +
> >> +  @retval EFI_SUCCESS            Platform implements display.
> >> +  @retval EFI_NOT_FOUND          Display not found on the platform.
> >> +
> >> +**/
> >> +EFI_STATUS
> >> +LcdIdentify (
> >> +  VOID
> >> +  );
> >> +
> >> +/**
> >> +  Initialize display.
> >> +
> >> +  @param  FrameBaseAddress       Address of the frame buffer.
> >> +  @retval EFI_SUCCESS            Display initialization success.
> >> +  @retval !(EFI_SUCCESS)         Display initialization failure.
> >> +
> >> +**/
> >> +EFI_STATUS
> >> +LcdInitialize (
> >> +  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
> >> +  );
> >> +
> >> +/**
> >> +  Set requested mode of the display.
> >> +
> >> +  @param  ModeNumber             Display mode number.
> >> +  @retval EFI_SUCCESS            Display set mode success.
> >> +  @retval EFI_DEVICE_ERROR       If mode not found/supported.
> >> +
> >> +**/
> >> +EFI_STATUS
> >> +LcdSetMode (
> >> +  IN UINT32  ModeNumber
> >> +  );
> >> +
> >> +/**
> >> +  De-initializes the display.
> >> +**/
> >> +VOID
> >> +LcdShutdown (
> >> +  VOID
> >> +  );
> >> +
> >> +#endif /* LCD_HW_LIB_H_ */
> >> diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
> >> new file mode 100644
> >> index 000000000000..2d31b5183c95
> >> --- /dev/null
> >> +++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
> >> @@ -0,0 +1,75 @@
> >> +/** @file
> >> +
> >> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
> >> +
> >> +  This program and the accompanying materials
> >> +  are licensed and made available under the terms and conditions of the BSD License
> >> +  which accompanies this distribution.  The full text of the license may be found at
> >> +  http://opensource.org/licenses/bsd-license.php
> >> +
> >> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> >> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> >> +
> >> +**/
> >> +
> >> +#include <Base.h>
> >> +#include <Uefi/UefiBaseType.h>
> >> +#include <Library/DebugLib.h>
> >> +#include <Library/LcdPlatformLib.h>
> >> +
> >> +/**
> >> +  Check for presence of display
> >> +
> >> +  @retval EFI_SUCCESS            Platform implements display.
> >> +  @retval EFI_NOT_FOUND          Display not found on the platform.
> >> +
> >> +**/
> >> +EFI_STATUS
> >> +LcdIdentify (
> >> +  VOID
> >> +  )
> >> +{
> >
> > Bikeshedding:
> > Since this Null implementation can never fill any functionality other
> > than letting build complete without platform-specific glue - would it
> > not be more expected for it to ASSERT and/or return failure
> > everywhere?
> 
> I think it makes sense to ASSERT on Null library member that take OUT
> parameters, because you can never return anything meaningful. In this
> case, we can just pretend that the Null LcdHwLib does not require
> initialization, is always present and only supports a single mode, and
> the driver could theoretically still work. Highly unlikely to be
> useful for anything but still.

I don't necessarily agree, but I also don't consider this very
important.

I guess my internal model of LibNulls is that if they can be
paractically used as do-nothing variants, they return OK on anything,
whereas if practical use requires further implementation, they ASSERT
and/or return error. This is not necessarily a correct world view.

For the ArmPlatformPkg resolution, you don't care about
runtime behaviour - it will never be executed.

> On ArmVirtQemu, we switched to the Null ArmPlatformLib implementation
> because we need to fulfil the dependency to be able to use PrePeiCore,
> but we no longer have any code to put in there.

Sure - but in this case you would only use this library if you
actually had a display driver to link against.

Anyway:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

/
    Leif


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class
  2017-12-12 17:12       ` Leif Lindholm
@ 2017-12-12 17:14         ` Ard Biesheuvel
  0 siblings, 0 replies; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-12 17:14 UTC (permalink / raw)
  To: Leif Lindholm; +Cc: edk2-devel@lists.01.org, Girish Pathak, Evan Lloyd

On 12 December 2017 at 17:12, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Mon, Dec 11, 2017 at 05:56:37PM +0000, Ard Biesheuvel wrote:
>> On 11 December 2017 at 17:32, Leif Lindholm <leif.lindholm@linaro.org> wrote:
>> > On Fri, Dec 08, 2017 at 05:31:24PM +0000, Ard Biesheuvel wrote:
>> >> Add the declaration and include file for the new LcdHwLib library class,
>> >> which will allow us to abstract away from platform  variations in the
>> >> LCD graphics output driver.
>> >>
>> >> 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>
>> >> [ardb: add NULL implementation as well and add it to ArmPlatformPkg.dsc]
>> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> >> ---
>> >>  ArmPlatformPkg/ArmPlatformPkg.dec                    |  1 +
>> >>  ArmPlatformPkg/ArmPlatformPkg.dsc                    |  1 +
>> >>  ArmPlatformPkg/Include/Library/LcdHwLib.h            | 68 ++++++++++++++++++
>> >>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c   | 75 ++++++++++++++++++++
>> >>  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf | 28 ++++++++
>> >>  5 files changed, 173 insertions(+)
>> >>
>> >> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
>> >> index 6a7bbc02d011..b33b6e630d85 100644
>> >> --- a/ArmPlatformPkg/ArmPlatformPkg.dec
>> >> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec
>> >> @@ -33,6 +33,7 @@ [Includes.common]
>> >>
>> >>  [LibraryClasses]
>> >>    ArmPlatformLib|Include/Library/ArmPlatformLib.h
>> >> +  LcdHwLib|Include/Library/LcdHwLib.h
>> >>    LcdPlatformLib|Include/Library/LcdPlatformLib.h
>> >>    NorFlashPlatformLib|Include/Library/NorFlashPlatformLib.h
>> >>    PL011UartLib|Include/Library/PL011UartLib.h
>> >> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc b/ArmPlatformPkg/ArmPlatformPkg.dsc
>> >> index c3a8c257cb02..9dd64b472acf 100644
>> >> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
>> >> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
>> >> @@ -101,6 +101,7 @@ [Components.common]
>> >>
>> >>    ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.inf
>> >>    ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
>> >> +  ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.inf
>> >>    ArmPlatformPkg/Library/LcdPlatformNullLib/LcdPlatformNullLib.inf
>> >>    ArmPlatformPkg/Library/NorFlashPlatformNullLib/NorFlashPlatformNullLib.inf
>> >>    ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
>> >> diff --git a/ArmPlatformPkg/Include/Library/LcdHwLib.h b/ArmPlatformPkg/Include/Library/LcdHwLib.h
>> >> new file mode 100644
>> >> index 000000000000..0c0480862aea
>> >> --- /dev/null
>> >> +++ b/ArmPlatformPkg/Include/Library/LcdHwLib.h
>> >> @@ -0,0 +1,68 @@
>> >> +/** @file LcdHwLib.h
>> >> +
>> >> +  This file contains interface functions for LcdHwLib of ArmPlatformPkg
>> >> +
>> >> +  Copyright (c) 2017, 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
>> >> +  which accompanies this distribution.  The full text of the license may be found at
>> >> +  http://opensource.org/licenses/bsd-license.php
>> >> +
>> >> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> >> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> >> +
>> >> +**/
>> >> +
>> >> +#ifndef LCD_HW_LIB_H_
>> >> +#define LCD_HW_LIB_H_
>> >> +
>> >> +#include <Uefi/UefiBaseType.h>
>> >> +
>> >> +/**
>> >> +  Check for presence of display
>> >> +
>> >> +  @retval EFI_SUCCESS            Platform implements display.
>> >> +  @retval EFI_NOT_FOUND          Display not found on the platform.
>> >> +
>> >> +**/
>> >> +EFI_STATUS
>> >> +LcdIdentify (
>> >> +  VOID
>> >> +  );
>> >> +
>> >> +/**
>> >> +  Initialize display.
>> >> +
>> >> +  @param  FrameBaseAddress       Address of the frame buffer.
>> >> +  @retval EFI_SUCCESS            Display initialization success.
>> >> +  @retval !(EFI_SUCCESS)         Display initialization failure.
>> >> +
>> >> +**/
>> >> +EFI_STATUS
>> >> +LcdInitialize (
>> >> +  EFI_PHYSICAL_ADDRESS  FrameBaseAddress
>> >> +  );
>> >> +
>> >> +/**
>> >> +  Set requested mode of the display.
>> >> +
>> >> +  @param  ModeNumber             Display mode number.
>> >> +  @retval EFI_SUCCESS            Display set mode success.
>> >> +  @retval EFI_DEVICE_ERROR       If mode not found/supported.
>> >> +
>> >> +**/
>> >> +EFI_STATUS
>> >> +LcdSetMode (
>> >> +  IN UINT32  ModeNumber
>> >> +  );
>> >> +
>> >> +/**
>> >> +  De-initializes the display.
>> >> +**/
>> >> +VOID
>> >> +LcdShutdown (
>> >> +  VOID
>> >> +  );
>> >> +
>> >> +#endif /* LCD_HW_LIB_H_ */
>> >> diff --git a/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
>> >> new file mode 100644
>> >> index 000000000000..2d31b5183c95
>> >> --- /dev/null
>> >> +++ b/ArmPlatformPkg/Library/LcdHwNullLib/LcdHwNullLib.c
>> >> @@ -0,0 +1,75 @@
>> >> +/** @file
>> >> +
>> >> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
>> >> +
>> >> +  This program and the accompanying materials
>> >> +  are licensed and made available under the terms and conditions of the BSD License
>> >> +  which accompanies this distribution.  The full text of the license may be found at
>> >> +  http://opensource.org/licenses/bsd-license.php
>> >> +
>> >> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> >> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> >> +
>> >> +**/
>> >> +
>> >> +#include <Base.h>
>> >> +#include <Uefi/UefiBaseType.h>
>> >> +#include <Library/DebugLib.h>
>> >> +#include <Library/LcdPlatformLib.h>
>> >> +
>> >> +/**
>> >> +  Check for presence of display
>> >> +
>> >> +  @retval EFI_SUCCESS            Platform implements display.
>> >> +  @retval EFI_NOT_FOUND          Display not found on the platform.
>> >> +
>> >> +**/
>> >> +EFI_STATUS
>> >> +LcdIdentify (
>> >> +  VOID
>> >> +  )
>> >> +{
>> >
>> > Bikeshedding:
>> > Since this Null implementation can never fill any functionality other
>> > than letting build complete without platform-specific glue - would it
>> > not be more expected for it to ASSERT and/or return failure
>> > everywhere?
>>
>> I think it makes sense to ASSERT on Null library member that take OUT
>> parameters, because you can never return anything meaningful. In this
>> case, we can just pretend that the Null LcdHwLib does not require
>> initialization, is always present and only supports a single mode, and
>> the driver could theoretically still work. Highly unlikely to be
>> useful for anything but still.
>
> I don't necessarily agree, but I also don't consider this very
> important.
>
> I guess my internal model of LibNulls is that if they can be
> paractically used as do-nothing variants, they return OK on anything,
> whereas if practical use requires further implementation, they ASSERT
> and/or return error. This is not necessarily a correct world view.
>
> For the ArmPlatformPkg resolution, you don't care about
> runtime behaviour - it will never be executed.
>

Indeed. Which is essentially why it doesn't matter if we ASSERT () or not.

>> On ArmVirtQemu, we switched to the Null ArmPlatformLib implementation
>> because we need to fulfil the dependency to be able to use PrePeiCore,
>> but we no longer have any code to put in there.
>
> Sure - but in this case you would only use this library if you
> actually had a display driver to link against.
>

Yes.

> Anyway:
> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
>

Thanks.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver
  2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
                   ` (4 preceding siblings ...)
  2017-12-08 17:31 ` [PATCH v2 5/5] ArmPlatformPkg: remove old PL111/HdLcd driver code Ard Biesheuvel
@ 2017-12-12 17:44 ` Ard Biesheuvel
  2017-12-12 19:10   ` Ard Biesheuvel
  5 siblings, 1 reply; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-12 17:44 UTC (permalink / raw)
  To: edk2-devel@lists.01.org
  Cc: Leif Lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

On 8 December 2017 at 17:31, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> This is a rework of the patch 'ArmPlatformPkg: Reorganize Lcd Graphics Output'
> sent out by Evan on September 26 [0]
>
> I have split it up for easier review, and droppped then changes to VExpress
> specific libraries and instead, moved those into edk2-platforms. A separate
> series is forthcoming. All patches of this series except the last one can
> be merged before the edk2-platforms series.
>
> The purpose is to separate the LCD output graphics driver from ARM VExpress
> specific details, so that the core code can be reused more easily, and the
> platform specific code moved out of the main EDK2 repository.
>
> v2: the VExpress specific bits are already gone, so what remains is the
>     refactoring of LcdGraphicsOutputDxe itself.
>
> Cc: Girish Pathak <girish.pathak@arm.com>
> Cc: Evan Lloyd <evan.lloyd@arm.com>
>
> [0] https://lists.01.org/pipermail/edk2-devel/2017-September/015337.html
>
> Ard Biesheuvel (5):
>   ArmPlatformPkg: introduce LcdHwLib library class
>   ArmPlatformPkg: implement LcdHwLib for PL111
>   ArmPlatformPkg: implement LcdHwLib for HdLcd
>   ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver
>   ArmPlatformPkg: remove old PL111/HdLcd driver code
>

Patches #1 - #4 pushed as e3e40c83fd2c..2671d8989004


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver
  2017-12-12 17:44 ` [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
@ 2017-12-12 19:10   ` Ard Biesheuvel
  0 siblings, 0 replies; 17+ messages in thread
From: Ard Biesheuvel @ 2017-12-12 19:10 UTC (permalink / raw)
  To: edk2-devel@lists.01.org
  Cc: Leif Lindholm, Ard Biesheuvel, Girish Pathak, Evan Lloyd

On 12 December 2017 at 17:44, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> On 8 December 2017 at 17:31, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>> This is a rework of the patch 'ArmPlatformPkg: Reorganize Lcd Graphics Output'
>> sent out by Evan on September 26 [0]
>>
>> I have split it up for easier review, and droppped then changes to VExpress
>> specific libraries and instead, moved those into edk2-platforms. A separate
>> series is forthcoming. All patches of this series except the last one can
>> be merged before the edk2-platforms series.
>>
>> The purpose is to separate the LCD output graphics driver from ARM VExpress
>> specific details, so that the core code can be reused more easily, and the
>> platform specific code moved out of the main EDK2 repository.
>>
>> v2: the VExpress specific bits are already gone, so what remains is the
>>     refactoring of LcdGraphicsOutputDxe itself.
>>
>> Cc: Girish Pathak <girish.pathak@arm.com>
>> Cc: Evan Lloyd <evan.lloyd@arm.com>
>>
>> [0] https://lists.01.org/pipermail/edk2-devel/2017-September/015337.html
>>
>> Ard Biesheuvel (5):
>>   ArmPlatformPkg: introduce LcdHwLib library class
>>   ArmPlatformPkg: implement LcdHwLib for PL111
>>   ArmPlatformPkg: implement LcdHwLib for HdLcd
>>   ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver
>>   ArmPlatformPkg: remove old PL111/HdLcd driver code
>>
>
> Patches #1 - #4 pushed as e3e40c83fd2c..2671d8989004

Patch #5 pushed as ab3886f02da (after the prerequisites have been
merged into edk2-platforms)


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2017-12-12 19:05 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-08 17:31 [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
2017-12-08 17:31 ` [PATCH v2 1/5] ArmPlatformPkg: introduce LcdHwLib library class Ard Biesheuvel
2017-12-11 17:32   ` Leif Lindholm
2017-12-11 17:56     ` Ard Biesheuvel
2017-12-12 17:12       ` Leif Lindholm
2017-12-12 17:14         ` Ard Biesheuvel
2017-12-08 17:31 ` [PATCH v2 2/5] ArmPlatformPkg: implement LcdHwLib for PL111 Ard Biesheuvel
2017-12-11 17:39   ` Leif Lindholm
2017-12-11 17:57     ` Ard Biesheuvel
2017-12-08 17:31 ` [PATCH v2 3/5] ArmPlatformPkg: implement LcdHwLib for HdLcd Ard Biesheuvel
2017-12-11 17:41   ` Leif Lindholm
2017-12-08 17:31 ` [PATCH v2 4/5] ArmPlatformPkg: create hw-agnostic LcdGraphicsOutputDxe driver Ard Biesheuvel
2017-12-11 17:42   ` Leif Lindholm
2017-12-08 17:31 ` [PATCH v2 5/5] ArmPlatformPkg: remove old PL111/HdLcd driver code Ard Biesheuvel
2017-12-11 17:43   ` Leif Lindholm
2017-12-12 17:44 ` [PATCH v2 0/5] ArmPlatformPkg: refactor LcdGraphicsOutputDxe driver Ard Biesheuvel
2017-12-12 19:10   ` Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox