mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-27 17:23:52 +01:00 
			
		
		
		
	https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   This file contains the platform independent parts of PL111Lcd
 | |
| 
 | |
|   Copyright (c) 2011-2018, ARM Ltd. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/IoLib.h>
 | |
| #include <Library/LcdHwLib.h>
 | |
| #include <Library/LcdPlatformLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| 
 | |
| #include "PL111Lcd.h"
 | |
| 
 | |
| /** Check for presence of PL111.
 | |
| 
 | |
|   @retval EFI_SUCCESS          Returns success if platform implements a
 | |
|                                PL111 controller.
 | |
| 
 | |
|   @retval EFI_NOT_FOUND        PL111 display controller not found the plaform.
 | |
| **/
 | |
| 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;
 | |
| }
 | |
| 
 | |
| /** Initialize display.
 | |
| 
 | |
|   @param[in]  VramBaseAddress    Address of the framebuffer.
 | |
| 
 | |
|   @retval EFI_SUCCESS            Initialization of display successful.
 | |
| **/
 | |
| 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;
 | |
| }
 | |
| 
 | |
| /** Set requested mode of the display.
 | |
| 
 | |
|   @param[in] ModeNumbe           Display mode number.
 | |
| 
 | |
|   @retval EFI_SUCCESS            Display mode set successfuly.
 | |
|   @retval !(EFI_SUCCESS)         Other errors.
 | |
| **/
 | |
| EFI_STATUS
 | |
| LcdSetMode (
 | |
|   IN UINT32  ModeNumber
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS        Status;
 | |
|   SCAN_TIMINGS      *Horizontal;
 | |
|   SCAN_TIMINGS      *Vertical;
 | |
|   UINT32            LcdControl;
 | |
|   LCD_BPP           LcdBpp;
 | |
| 
 | |
|   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  ModeInfo;
 | |
| 
 | |
|   // Set the video mode timings and other relevant information
 | |
|   Status = LcdPlatformGetTimings (
 | |
|              ModeNumber,
 | |
|              &Horizontal,
 | |
|              &Vertical
 | |
|              );
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT_EFI_ERROR (Status);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   ASSERT (Horizontal != NULL);
 | |
|   ASSERT (Vertical != NULL);
 | |
| 
 | |
|   Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT_EFI_ERROR (Status);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   // Get the pixel format information
 | |
|   Status = LcdPlatformQueryMode (ModeNumber, &ModeInfo);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT_EFI_ERROR (Status);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   // Disable the CLCD_LcdEn bit
 | |
|   MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
 | |
| 
 | |
|   // Set Timings
 | |
|   MmioWrite32 (
 | |
|     PL111_REG_LCD_TIMING_0,
 | |
|     HOR_AXIS_PANEL (
 | |
|       Horizontal->BackPorch,
 | |
|       Horizontal->FrontPorch,
 | |
|       Horizontal->Sync,
 | |
|       Horizontal->Resolution
 | |
|       )
 | |
|     );
 | |
| 
 | |
|   MmioWrite32 (
 | |
|     PL111_REG_LCD_TIMING_1,
 | |
|     VER_AXIS_PANEL (
 | |
|       Vertical->BackPorch,
 | |
|       Vertical->FrontPorch,
 | |
|       Vertical->Sync,
 | |
|       Vertical->Resolution
 | |
|       )
 | |
|     );
 | |
| 
 | |
|   MmioWrite32 (
 | |
|     PL111_REG_LCD_TIMING_2,
 | |
|     CLK_SIG_POLARITY (Horizontal->Resolution)
 | |
|     );
 | |
| 
 | |
|   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_LCD_PWR;
 | |
|   if (ModeInfo.PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {
 | |
|     LcdControl |= PL111_CTRL_BGR;
 | |
|   }
 | |
|   MmioWrite32 (PL111_REG_LCD_CONTROL, LcdControl);
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| /** De-initializes the display.
 | |
| */
 | |
| VOID
 | |
| LcdShutdown (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   // Disable the controller
 | |
|   MmioAnd32 (PL111_REG_LCD_CONTROL, ~PL111_CTRL_LCD_EN);
 | |
| }
 |