3 Copyright (c) 2011, ARM Ltd. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include <Library/LcdPlatformLib.h>
17 #include <Library/IoLib.h>
18 #include <Library/DebugLib.h>
20 #include <Drivers/PL111Lcd.h>
22 #include <ArmPlatform.h>
26 UINT32 HorizontalResolution
;
27 UINT32 VerticalResolution
;
40 CLCD_RESOLUTION mResolutions
[] = {
41 { // Mode 0 : VGA : 640 x 480 x 24 bpp
42 VGA
, VGA_H_RES_PIXELS
, VGA_V_RES_PIXELS
, LCD_BITS_PER_PIXEL_24
, 0x2C77,
43 VGA_H_SYNC
, VGA_H_BACK_PORCH
, VGA_H_FRONT_PORCH
,
44 VGA_V_SYNC
, VGA_V_BACK_PORCH
, VGA_V_FRONT_PORCH
46 { // Mode 1 : SVGA : 800 x 600 x 24 bpp
47 SVGA
, SVGA_H_RES_PIXELS
, SVGA_V_RES_PIXELS
, LCD_BITS_PER_PIXEL_24
, 0x2CAC,
48 SVGA_H_SYNC
, SVGA_H_BACK_PORCH
, SVGA_H_FRONT_PORCH
,
49 SVGA_V_SYNC
, SVGA_V_BACK_PORCH
, SVGA_V_FRONT_PORCH
55 LcdPlatformInitializeDisplay (
59 MmioWrite32(ARM_EB_SYS_CLCD_REG
, 1);
66 OUT EFI_PHYSICAL_ADDRESS
* VramBaseAddress
,
70 *VramBaseAddress
= PL111_CLCD_VRAM_BASE
;
71 *VramSize
= SIZE_8MB
; //FIXME: Can this size change ?
76 LcdPlatformGetMaxMode (
80 return (sizeof(mResolutions
) / sizeof(CLCD_RESOLUTION
));
88 if (ModeNumber
>= LcdPlatformGetMaxMode ()) {
89 return EFI_INVALID_PARAMETER
;
92 MmioWrite32(ARM_EB_SYS_LOCK_REG
,0x0000A05F);
93 MmioWrite32(ARM_EB_SYS_OSC4_REG
,mResolutions
[ModeNumber
].ClcdClk
);
94 MmioWrite32(ARM_EB_SYS_LOCK_REG
,0x0);
100 LcdPlatformQueryMode (
101 IN UINT32 ModeNumber
,
102 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Info
107 if (ModeNumber
>= LcdPlatformGetMaxMode ()) {
108 return EFI_INVALID_PARAMETER
;
111 Status
= EFI_UNSUPPORTED
;
114 Info
->HorizontalResolution
= mResolutions
[ModeNumber
].HorizontalResolution
;
115 Info
->VerticalResolution
= mResolutions
[ModeNumber
].VerticalResolution
;
116 Info
->PixelsPerScanLine
= mResolutions
[ModeNumber
].HorizontalResolution
;
118 switch (mResolutions
[ModeNumber
].Bpp
) {
119 case LCD_BITS_PER_PIXEL_24
:
120 Info
->PixelFormat
= PixelRedGreenBlueReserved8BitPerColor
;
121 Info
->PixelInformation
.RedMask
= LCD_24BPP_RED_MASK
;
122 Info
->PixelInformation
.GreenMask
= LCD_24BPP_GREEN_MASK
;
123 Info
->PixelInformation
.BlueMask
= LCD_24BPP_BLUE_MASK
;
124 Info
->PixelInformation
.ReservedMask
= LCD_24BPP_RESERVED_MASK
;
125 Status
= EFI_SUCCESS
;
128 case LCD_BITS_PER_PIXEL_16_555
:
129 Info
->PixelFormat
= PixelBitMask
;
130 Info
->PixelInformation
.RedMask
= LCD_16BPP_555_RED_MASK
;
131 Info
->PixelInformation
.GreenMask
= LCD_16BPP_555_GREEN_MASK
;
132 Info
->PixelInformation
.BlueMask
= LCD_16BPP_555_BLUE_MASK
;
133 Info
->PixelInformation
.ReservedMask
= LCD_16BPP_555_RESERVED_MASK
;
134 Status
= EFI_SUCCESS
;
137 case LCD_BITS_PER_PIXEL_16_565
:
138 Info
->PixelFormat
= PixelBitMask
;
139 Info
->PixelInformation
.RedMask
= LCD_16BPP_565_RED_MASK
;
140 Info
->PixelInformation
.GreenMask
= LCD_16BPP_565_GREEN_MASK
;
141 Info
->PixelInformation
.BlueMask
= LCD_16BPP_565_BLUE_MASK
;
142 Info
->PixelInformation
.ReservedMask
= LCD_16BPP_565_RESERVED_MASK
;
143 Status
= EFI_SUCCESS
;
146 case LCD_BITS_PER_PIXEL_12_444
:
147 Info
->PixelFormat
= PixelBitMask
;
148 Info
->PixelInformation
.RedMask
= LCD_12BPP_444_RED_MASK
;
149 Info
->PixelInformation
.GreenMask
= LCD_12BPP_444_GREEN_MASK
;
150 Info
->PixelInformation
.BlueMask
= LCD_12BPP_444_BLUE_MASK
;
151 Info
->PixelInformation
.ReservedMask
= LCD_12BPP_444_RESERVED_MASK
;
152 Status
= EFI_SUCCESS
;
155 case LCD_BITS_PER_PIXEL_8
:
156 case LCD_BITS_PER_PIXEL_4
:
157 case LCD_BITS_PER_PIXEL_2
:
158 case LCD_BITS_PER_PIXEL_1
:
160 // These are not supported
168 LcdPlatformGetTimings (
169 IN UINT32 ModeNumber
,
172 OUT UINT32
* HBackPorch
,
173 OUT UINT32
* HFrontPorch
,
176 OUT UINT32
* VBackPorch
,
177 OUT UINT32
* VFrontPorch
180 if (ModeNumber
>= LcdPlatformGetMaxMode ()) {
181 return EFI_INVALID_PARAMETER
;
184 *HRes
= mResolutions
[ModeNumber
].HorizontalResolution
;
185 *HSync
= mResolutions
[ModeNumber
].HSync
;
186 *HBackPorch
= mResolutions
[ModeNumber
].HBackPorch
;
187 *HFrontPorch
= mResolutions
[ModeNumber
].HFrontPorch
;
188 *VRes
= mResolutions
[ModeNumber
].VerticalResolution
;
189 *VSync
= mResolutions
[ModeNumber
].VSync
;
190 *VBackPorch
= mResolutions
[ModeNumber
].VBackPorch
;
191 *VFrontPorch
= mResolutions
[ModeNumber
].VFrontPorch
;
198 IN UINT32 ModeNumber
,
202 if (ModeNumber
>= LcdPlatformGetMaxMode ()) {
203 return EFI_INVALID_PARAMETER
;
206 *Bpp
= mResolutions
[ModeNumber
].Bpp
;