/** @file Copyright (c) 2022 Rockchip Electronics Co. Ltd. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include EFIAPI EFI_STATUS DisplaySetCrtcInfo ( OUT DRM_DISPLAY_MODE *Mode, IN UINT32 AdjustFlags ) { if ((Mode == NULL) || ((Mode->Type & DRM_MODE_TYPE_CRTC_C) == DRM_MODE_TYPE_BUILTIN)) return EFI_UNSUPPORTED; if (Mode->Flags & DRM_MODE_FLAG_DBLCLK) Mode->CrtcClock = 2 * Mode->Clock; else Mode->CrtcClock = Mode->Clock; Mode->CrtcHDisplay = Mode->HDisplay; Mode->CrtcHSyncStart = Mode->HSyncStart; Mode->CrtcHSyncEnd = Mode->HSyncEnd; Mode->CrtcHTotal = Mode->HTotal; Mode->CrtcHSkew = Mode->HSkew; Mode->CrtcVDisplay = Mode->VDisplay; Mode->CrtcVSyncStart = Mode->VSyncStart; Mode->CrtcVSyncEnd = Mode->VSyncEnd; Mode->CrtcVTotal = Mode->VTotal; if (Mode->Flags & DRM_MODE_FLAG_INTERLACE) { if (AdjustFlags & CRTC_INTERLACE_HALVE_V) { Mode->CrtcVDisplay /= 2; Mode->CrtcVSyncStart /= 2; Mode->CrtcVSyncEnd /= 2; Mode->CrtcVTotal /= 2; } } if (!(AdjustFlags & CRTC_NO_DBLSCAN)) { if (Mode->Flags & DRM_MODE_FLAG_DBLSCAN) { Mode->CrtcVDisplay *= 2; Mode->CrtcVSyncStart *= 2; Mode->CrtcVSyncEnd *= 2; Mode->CrtcVTotal *= 2; } } if (!(AdjustFlags & CRTC_NO_VSCAN)) { if (Mode->VScan > 1) { Mode->CrtcVDisplay *= Mode->VScan; Mode->CrtcVSyncStart *= Mode->VScan; Mode->CrtcVSyncEnd *= Mode->VScan; Mode->CrtcVTotal *= Mode->VScan; } } Mode->CrtcVBlankStart = MIN(Mode->CrtcVSyncStart, Mode->CrtcVDisplay); Mode->CrtcVBlankEnd = MAX(Mode->CrtcVSyncEnd, Mode->CrtcVTotal); Mode->CrtcHBlankStart = MIN(Mode->CrtcHSyncStart, Mode->CrtcHDisplay); Mode->CrtcHBblankEnd = MAX(Mode->CrtcHSyncEnd, Mode->CrtcHTotal); return EFI_SUCCESS; } EFIAPI EFI_STATUS DisplaySetFramebuffer ( OUT EFI_PHYSICAL_ADDRESS* VramBaseAddress, OUT UINTN* VramSize ) { // Set the VRAM size. *VramSize = (UINTN)FixedPcdGet64(PcdLcdDdrFrameBufferSize); // Check if base address is already reserved for the framebuffer. *VramBaseAddress = (EFI_PHYSICAL_ADDRESS)FixedPcdGet64(PcdLcdDdrFrameBufferBase); return EFI_SUCCESS; }