Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
5d995b114c | |||
77f7c07180 | |||
|
cc56d6edeb | ||
|
cc698a4dac | ||
|
7b49b7c6c1 | ||
|
c2681ce7d9 | ||
|
7e44ba1051 | ||
|
e442368895 | ||
|
b94518ff90 | ||
|
01e41ea2dc | ||
|
7b23b4ef97 | ||
|
54b15f1712 | ||
|
5727f201f3 | ||
|
17593939a6 | ||
|
c75269db6e | ||
|
1cf3e94ab3 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1 @@
|
|||||||
uefi.img
|
uefi.img
|
||||||
linux.efi
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
INF_VERSION = 0x00010005
|
INF_VERSION = 0x00010005
|
||||||
BASE_NAME = Pixel3XLAcpiTables
|
BASE_NAME = MSM8916PkgAcpiTables
|
||||||
FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD # Must be this
|
FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD # Must be this
|
||||||
MODULE_TYPE = USER_DEFINED
|
MODULE_TYPE = USER_DEFINED
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
@ -36,7 +36,7 @@
|
|||||||
EmbeddedPkg/EmbeddedPkg.dec
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
Pixel3XL/Pixel3XL.dec
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
[FixedPcd]
|
[FixedPcd]
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
@ -98,7 +98,7 @@
|
|||||||
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
|
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
|
||||||
|
|
||||||
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
|
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
|
||||||
LzmaDecompressLib|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
|
LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
|
||||||
|
|
||||||
NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf
|
NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf
|
||||||
|
|
||||||
@ -170,21 +170,21 @@
|
|||||||
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
|
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
|
||||||
MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
|
MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
|
||||||
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
|
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
|
||||||
ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
|
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
|
||||||
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
|
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
|
||||||
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
|
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
|
||||||
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
||||||
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
|
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
|
||||||
|
|
||||||
[LibraryClasses.common.DXE_DRIVER]
|
[LibraryClasses.common.DXE_DRIVER]
|
||||||
ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
|
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
|
||||||
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
||||||
SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
|
SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
|
||||||
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
|
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
|
||||||
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
|
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
|
||||||
|
|
||||||
[LibraryClasses.common.UEFI_APPLICATION]
|
[LibraryClasses.common.UEFI_APPLICATION]
|
||||||
UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf
|
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiTianoCustomDecompressLib.inf
|
||||||
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
|
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
|
||||||
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
|
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
|
||||||
HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
|
HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
|
||||||
@ -195,8 +195,8 @@
|
|||||||
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
|
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
|
||||||
|
|
||||||
[LibraryClasses.common.UEFI_DRIVER]
|
[LibraryClasses.common.UEFI_DRIVER]
|
||||||
ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
|
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
|
||||||
UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf
|
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiTianoCustomDecompressLib.inf
|
||||||
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
|
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
|
||||||
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
|
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
|
||||||
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
||||||
@ -208,7 +208,7 @@
|
|||||||
ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeReportStatusCodeLib.inf
|
ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeReportStatusCodeLib.inf
|
||||||
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
|
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
|
||||||
!ifndef CONFIG_NO_DEBUGLIB
|
!ifndef CONFIG_NO_DEBUGLIB
|
||||||
DebugLib|IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
||||||
!endif
|
!endif
|
||||||
!if $(TARGET) != RELEASE
|
!if $(TARGET) != RELEASE
|
||||||
DebugLib|MdePkg/Library/DxeRuntimeDebugLibSerialPort/DxeRuntimeDebugLibSerialPort.inf
|
DebugLib|MdePkg/Library/DxeRuntimeDebugLibSerialPort/DxeRuntimeDebugLibSerialPort.inf
|
||||||
@ -323,5 +323,5 @@
|
|||||||
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|32
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|32
|
||||||
|
|
||||||
[PcdsDynamicHii.common.DEFAULT]
|
[PcdsDynamicHii.common.DEFAULT]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|0 # Variable: L"Timeout"
|
#gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|0 # Variable: L"Timeout"
|
||||||
|
|
24
MSM8916Pkg/Devices/j5lte.dsc
Normal file
24
MSM8916Pkg/Devices/j5lte.dsc
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[Defines]
|
||||||
|
PLATFORM_NAME = MSM8916Pkg
|
||||||
|
PLATFORM_GUID = 28f1a3bf-193a-47e3-a7b9-5a435eaab2ee
|
||||||
|
PLATFORM_VERSION = 0.1
|
||||||
|
DSC_SPECIFICATION = 0x00010019
|
||||||
|
OUTPUT_DIRECTORY = Build/$(PLATFORM_NAME)
|
||||||
|
SUPPORTED_ARCHITECTURES = AARCH64
|
||||||
|
BUILD_TARGETS = DEBUG|RELEASE
|
||||||
|
SKUID_IDENTIFIER = DEFAULT
|
||||||
|
FLASH_DEFINITION = MSM8916Pkg/MSM8916Pkg.fdf
|
||||||
|
|
||||||
|
!include MSM8916Pkg/MSM8916Pkg.dsc
|
||||||
|
|
||||||
|
[PcdsFixedAtBuild.common]
|
||||||
|
# System Memory (2GB)
|
||||||
|
gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000
|
||||||
|
gArmTokenSpaceGuid.PcdSystemMemorySize|0x80000000
|
||||||
|
|
||||||
|
# Framebuffer (720x1520)
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferAddress|0x0ec000000
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferWidth|720
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferHeight|1520
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferVisibleWidth|720
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferVisibleHeight|1520
|
@ -34,7 +34,7 @@
|
|||||||
#include <Protocol/LoadedImage.h>
|
#include <Protocol/LoadedImage.h>
|
||||||
#include <Protocol/PlatformBootManager.h>
|
#include <Protocol/PlatformBootManager.h>
|
||||||
|
|
||||||
#include "Pixel3XLDxe.h"
|
#include "MSM8916PkgDxe.h"
|
||||||
|
|
||||||
EFI_CPU_ARCH_PROTOCOL *gCpu;
|
EFI_CPU_ARCH_PROTOCOL *gCpu;
|
||||||
|
|
||||||
@ -43,6 +43,7 @@ InitPeripherals (
|
|||||||
IN VOID
|
IN VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
// MmioWrite32(0x004ab000, 0);
|
||||||
/* This also crashes. Do you really hate memory attributes or something?
|
/* This also crashes. Do you really hate memory attributes or something?
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
// https://lists.01.org/pipermail/edk2-devel/2017-August/013417.html
|
// https://lists.01.org/pipermail/edk2-devel/2017-August/013417.html
|
||||||
@ -80,7 +81,7 @@ OnEndOfDxe (
|
|||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Pixel3XLEntryPoint (
|
MSM8916PkgEntryPoint (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
@ -88,6 +89,8 @@ Pixel3XLEntryPoint (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_EVENT EndOfDxeEvent;
|
EFI_EVENT EndOfDxeEvent;
|
||||||
|
|
||||||
|
// MmioWrite32(0x10060000, 0);
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gCpu);
|
Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gCpu);
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR(Status);
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#ifndef __PIXEL3XLDXE_H__
|
#ifndef __MSM8916PKGDXE_H__
|
||||||
#define __PIXEL3XLDXE_H__
|
#define __MSM8916PKGDXE_H__
|
||||||
|
|
||||||
#endif /* __PIXEL3XLDXE_H__ */
|
#endif /* __MSM8916PKGDXE_H__ */
|
@ -12,14 +12,14 @@
|
|||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
INF_VERSION = 0x0001001a
|
INF_VERSION = 0x0001001a
|
||||||
BASE_NAME = Pixel3XLDxe
|
BASE_NAME = MSM8916PkgDxe
|
||||||
FILE_GUID = 422BB380-0FFB-41EC-B86E-AE70F8A02DA3
|
FILE_GUID = 422BB380-0FFB-41EC-B86E-AE70F8A02DA3
|
||||||
MODULE_TYPE = DXE_DRIVER
|
MODULE_TYPE = DXE_DRIVER
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
ENTRY_POINT = Pixel3XLEntryPoint
|
ENTRY_POINT = MSM8916PkgEntryPoint
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
Pixel3XLDxe.c
|
MSM8916PkgDxe.c
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
EmbeddedPkg/EmbeddedPkg.dec
|
EmbeddedPkg/EmbeddedPkg.dec
|
@ -10,7 +10,7 @@
|
|||||||
#include <Library/DxeServicesTableLib.h>
|
#include <Library/DxeServicesTableLib.h>
|
||||||
#include <Protocol/GraphicsOutput.h>
|
#include <Protocol/GraphicsOutput.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/FrameBufferBltLib.h>
|
#include "Library/FrameBufferBltLib.h"
|
||||||
#include <Library/CacheMaintenanceLib.h>
|
#include <Library/CacheMaintenanceLib.h>
|
||||||
|
|
||||||
/// Defines
|
/// Defines
|
||||||
@ -65,7 +65,7 @@ DISPLAY_DEVICE_PATH mDisplayDevicePath =
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Declares
|
/// DeclaresSimpleFbDxe/SimpleFbDxe.c
|
||||||
|
|
||||||
STATIC FRAME_BUFFER_CONFIGURE *mFrameBufferBltLibConfigure;
|
STATIC FRAME_BUFFER_CONFIGURE *mFrameBufferBltLibConfigure;
|
||||||
STATIC UINTN mFrameBufferBltLibConfigureSize;
|
STATIC UINTN mFrameBufferBltLibConfigureSize;
|
@ -16,7 +16,7 @@
|
|||||||
MdeModulePkg/MdeModulePkg.dec
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
EmbeddedPkg/EmbeddedPkg.dec
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
ArmPkg/ArmPkg.dec
|
ArmPkg/ArmPkg.dec
|
||||||
Pixel3XL/Pixel3XL.dec
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
BaseLib
|
BaseLib
|
||||||
@ -35,9 +35,9 @@
|
|||||||
gEfiCpuArchProtocolGuid
|
gEfiCpuArchProtocolGuid
|
||||||
|
|
||||||
[FixedPcd]
|
[FixedPcd]
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferAddress
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferAddress
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferWidth
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferWidth
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferHeight
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferHeight
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid
|
gEfiMdeModulePkgTokenSpaceGuid
|
@ -37,7 +37,7 @@
|
|||||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
Pixel3XL/Pixel3XL.dec
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
ArmLib
|
ArmLib
|
222
MSM8916Pkg/Include/Chipset/bam.h
Normal file
222
MSM8916Pkg/Include/Chipset/bam.h
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||||||
|
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials provided
|
||||||
|
* with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __PLATFORM_MSM_SHARED_BAM_H
|
||||||
|
#define __PLATFORM_MSM_SHARED_BAM_H
|
||||||
|
|
||||||
|
#include <Library/LKEnvLib.h>
|
||||||
|
|
||||||
|
#define BAM_DESC_SIZE 8
|
||||||
|
#define BAM_CE_SIZE 16
|
||||||
|
#define BAM_MAX_DESC_DATA_LEN 0xFFFF
|
||||||
|
#define BAM_DATA_READ 0
|
||||||
|
#define BAM_DATA_WRITE 1
|
||||||
|
|
||||||
|
#define BAM_CTRL_REG(x) (0x0000 + (x))
|
||||||
|
#define BAM_SW_RST_BIT_MASK 1
|
||||||
|
#define BAM_ENABLE_BIT_MASK (1 << 1)
|
||||||
|
|
||||||
|
#define BAM_DESC_CNT_TRSHLD_REG(x) (0x0008 + (x))
|
||||||
|
#define COUNT_TRESHOLD_MASK 0xFF
|
||||||
|
#define BAM_IRQ_SRCS(x) (0x0000000C + (x))
|
||||||
|
#define BAM_IRQ_SRCS_MSK(x) (0x00000010 + (x))
|
||||||
|
#define BAM_IRQ_MASK (1 << 31)
|
||||||
|
#define P_IRQ_MASK (1)
|
||||||
|
|
||||||
|
/* Pipe Interrupt masks */
|
||||||
|
enum p_int_type
|
||||||
|
{
|
||||||
|
P_PRCSD_DESC_EN_MASK = 1,
|
||||||
|
P_OUT_OF_DESC_EN_MASK = (1 << 3),
|
||||||
|
P_ERR_EN_MASK = (1 << 4),
|
||||||
|
P_TRNSFR_END_EN_MASK = (1 << 5)
|
||||||
|
};
|
||||||
|
|
||||||
|
#define BAM_IRQ_STTS(x) (0x00000014 + (x))
|
||||||
|
#define BAM_IRQ_SRCS_UNMASKED(x) (0x00000030 + (x))
|
||||||
|
|
||||||
|
#define BAM_IRQ_EN_REG(x) (0x001C + (x))
|
||||||
|
#define BAM_TIMER_EN_MASK (1 << 4)
|
||||||
|
/* Available only in BAM-Lite */
|
||||||
|
#define BAM_EMPTY_EN_MASK (1 << 3)
|
||||||
|
#define BAM_ERROR_EN_MASK (1 << 2)
|
||||||
|
/* Available only in BAM */
|
||||||
|
#define BAM_HRESP_ERR_EN_MASK (1 << 1)
|
||||||
|
|
||||||
|
#define BAM_TRUST_REG(x) (0x00000070 + (x))
|
||||||
|
#define BAM_EE_MASK (7 << 0)
|
||||||
|
#define BAM_RESET_BLK_MASK (1 << 7)
|
||||||
|
#define BAM_LOCK_EE_CTRL_MASK (1 << 13)
|
||||||
|
|
||||||
|
#define BAM_CNFG_BITS(x) (0x0000007C + (x))
|
||||||
|
|
||||||
|
#define BAM_P_CTRLn(n, x) (0x00001000 + 0x1000 * (n) + (x))
|
||||||
|
#define P_SYS_MODE_MASK (1 << 5)
|
||||||
|
/* 1: Producer mode 0: Consumer mode */
|
||||||
|
#define P_DIRECTION_SHIFT 3
|
||||||
|
#define P_ENABLE (1 << 1)
|
||||||
|
|
||||||
|
#define BAM_P_RSTn(n, x) (0x00001000 + 0x4 + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_IRQ_STTSn(n, x) (0x00001000 + 0x10 + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_IRQ_CLRn(n, x) (0x00001000 + 0x14 + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_IRQ_ENn(n, x) (0x00001000 + 0x18 + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_TRUST_REGn(n, x) (0x00001000 + 0x30 + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_SW_OFSTSn(n, x) (0x00001800 + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_EVNT_REGn(n, x) (0x00001818 + 0x1000 * (n) + (x))
|
||||||
|
#define P_DESC_FIFO_PEER_OFST_MASK 0xFF
|
||||||
|
|
||||||
|
#define BAM_P_DESC_FIFO_ADDRn(n, x) (0x0000181C + 0x1000 * (n) + (x))
|
||||||
|
#define BAM_P_FIFO_SIZESn(n, x) (0x00001820 + 0x1000 * (n) + (x))
|
||||||
|
|
||||||
|
/* Flags for descriptors */
|
||||||
|
#define BAM_DESC_INT_FLAG (1 << 7)
|
||||||
|
#define BAM_DESC_EOT_FLAG (1 << 6)
|
||||||
|
#define BAM_DESC_EOB_FLAG (1 << 5)
|
||||||
|
#define BAM_DESC_NWD_FLAG (1 << 4)
|
||||||
|
#define BAM_DESC_CMD_FLAG (1 << 3)
|
||||||
|
#define BAM_DESC_LOCK_FLAG (1 << 2)
|
||||||
|
#define BAM_DESC_UNLOCK_FLAG (1 << 1)
|
||||||
|
|
||||||
|
enum bam_ce_cmd_t{
|
||||||
|
CE_WRITE_TYPE = 0,
|
||||||
|
CE_READ_TYPE = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/* result type */
|
||||||
|
typedef enum {
|
||||||
|
BAM_RESULT_SUCCESS = 0,
|
||||||
|
BAM_RESULT_FAILURE = 1,
|
||||||
|
BAM_RESULT_TIMEOUT = 2
|
||||||
|
} bam_result_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Enum to define the BAM type:
|
||||||
|
* BAM2BAM:Producer BAM to Consumer BAM.
|
||||||
|
* SYS2BAM:Producer System to Consumer BAM.
|
||||||
|
* BAM2SYS:Producer BAM to Consumer System.
|
||||||
|
*/
|
||||||
|
enum bam_transaction_type {
|
||||||
|
SYS2BAM,
|
||||||
|
BAM2SYS,
|
||||||
|
BAM2BAM,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Enum to define BAM mode:
|
||||||
|
* SPS:Use BAM pipes.
|
||||||
|
* DIRECT:Pipes are disabled.
|
||||||
|
* LEGACY:BAM is not used.
|
||||||
|
*/
|
||||||
|
enum bam_mode {
|
||||||
|
SPS,
|
||||||
|
DIRECT,
|
||||||
|
LEGACY,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Enum to define BAM pipe states:
|
||||||
|
* ENABLED:Producer and Consumer pipes are enabled.
|
||||||
|
* HALT:Consumer pipe is halted. (Preferred type)
|
||||||
|
* FULL_HALT:Both Producer and Consumer pipes are halted.
|
||||||
|
*/
|
||||||
|
enum bam_pipe_state {
|
||||||
|
ENABLED,
|
||||||
|
HALT,
|
||||||
|
FULL_HALT,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum bam_type {
|
||||||
|
BAM_LITE,
|
||||||
|
BAM,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Structure to define BAM descriptors that describe the data
|
||||||
|
* descriptors written to the data FIFO.
|
||||||
|
* addr:Descriptor address.
|
||||||
|
* size:Each descriptor is 8 bytes. Size of the descriptor fifo must
|
||||||
|
* contain an integer number of Descriptors.
|
||||||
|
*/
|
||||||
|
struct bam_desc {
|
||||||
|
uint32_t addr;
|
||||||
|
uint16_t size;
|
||||||
|
uint8_t reserved;
|
||||||
|
uint8_t flags;
|
||||||
|
} __PACKED;
|
||||||
|
|
||||||
|
struct bam_desc_fifo {
|
||||||
|
struct bam_desc *head;
|
||||||
|
struct bam_desc *current;
|
||||||
|
uint16_t size;
|
||||||
|
uint16_t offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Structure to define BAM pipes
|
||||||
|
* pipe_state: BAM pipe states.
|
||||||
|
* trans_type: BAM tranaction type.
|
||||||
|
* evt_gen_threshold: This register configures the threshold value for
|
||||||
|
* Read/Write event generation by the BAM
|
||||||
|
* towards another BAM.
|
||||||
|
* fifo: Circular fifo associated with this pipe.
|
||||||
|
* num_pipe: Number of pipes used in this bam.
|
||||||
|
* pipe: Pipe number for this pipe.
|
||||||
|
*/
|
||||||
|
struct bam_pipe {
|
||||||
|
enum bam_pipe_state state;
|
||||||
|
enum bam_transaction_type trans_type;
|
||||||
|
struct bam_desc_fifo fifo;
|
||||||
|
uint16_t evt_gen_threshold;
|
||||||
|
uint8_t pipe_num;
|
||||||
|
uint8_t initialized;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Structure to define a BAM instance being used
|
||||||
|
* base:Base address for the BAM.
|
||||||
|
* type:BAM type.
|
||||||
|
* mode:BAM mode.
|
||||||
|
* pipe_pair:The pipe pairs to be used to access the BAM.
|
||||||
|
* threshold:This Register holds a threshold value for the
|
||||||
|
* counter summing the Size of the Descriptors Provided.
|
||||||
|
* init:Pipe initialization status for the BAM.
|
||||||
|
*/
|
||||||
|
struct bam_instance {
|
||||||
|
uint32_t base;
|
||||||
|
enum bam_type type;
|
||||||
|
enum bam_mode mode;
|
||||||
|
uint8_t num_of_pipes;
|
||||||
|
struct bam_pipe pipe[3];
|
||||||
|
uint16_t threshold;
|
||||||
|
void (*callback)(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Command element(CE) structure*/
|
||||||
|
struct cmd_element {
|
||||||
|
uint32_t addr_n_cmd;
|
||||||
|
uint32_t reg_data;
|
||||||
|
uint32_t reg_mask;
|
||||||
|
uint32_t reserve;
|
||||||
|
} __PACKED;
|
||||||
|
|
||||||
|
#endif
|
235
MSM8916Pkg/Include/Chipset/clock-local.h
Normal file
235
MSM8916Pkg/Include/Chipset/clock-local.h
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor
|
||||||
|
* the names of its contributors may be used to endorse or promote
|
||||||
|
* products derived from this software without specific prior written
|
||||||
|
* permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CLOCK_LOCAL_H
|
||||||
|
#define CLOCK_LOCAL_H
|
||||||
|
|
||||||
|
struct clk;
|
||||||
|
struct clk_ops;
|
||||||
|
|
||||||
|
#define FREQ_END (UINT32_MAX - 1)
|
||||||
|
#define F_END \
|
||||||
|
{ \
|
||||||
|
.freq_hz = FREQ_END, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define container_of(ptr, type, member) \
|
||||||
|
((type *)((addr_t)(ptr)-offsetof(type, member)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bit manipulation macros
|
||||||
|
*/
|
||||||
|
#define BM(msb, lsb) \
|
||||||
|
(((((uint32_t)-1) << (31 - msb)) >> (31 - msb + lsb)) << lsb)
|
||||||
|
#define BVAL(msb, lsb, val) (((val) << lsb) & BM(msb, lsb))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Halt/Status Checking Mode Macros
|
||||||
|
*/
|
||||||
|
#define HALT 0 /* Bit pol: 1 = halted */
|
||||||
|
#define NOCHECK 1 /* No bit to check, do nothing */
|
||||||
|
#define HALT_VOTED 2 /* Bit pol: 1 = halted; delay on disable */
|
||||||
|
#define ENABLE 3 /* Bit pol: 1 = running */
|
||||||
|
#define ENABLE_VOTED 4 /* Bit pol: 1 = running; delay on disable */
|
||||||
|
#define DELAY 5 /* No bit to check, just delay */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Variables from clock-local driver
|
||||||
|
*/
|
||||||
|
extern struct fixed_clk gnd_clk;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic frequency-definition structs and macros
|
||||||
|
*/
|
||||||
|
struct clk_freq_tbl {
|
||||||
|
const uint32_t freq_hz;
|
||||||
|
struct clk * src_clk;
|
||||||
|
const uint32_t md_val;
|
||||||
|
const uint32_t ns_val;
|
||||||
|
const uint32_t ctl_val;
|
||||||
|
uint32_t mnd_en_mask;
|
||||||
|
void *const extra_freq_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct clk_freq_tbl local_dummy_freq;
|
||||||
|
|
||||||
|
/* Some clocks have two banks to avoid glitches when switching frequencies.
|
||||||
|
* The unused bank is programmed while running on the other bank, and
|
||||||
|
* switched to afterwards. The following two structs describe the banks. */
|
||||||
|
struct bank_mask_info {
|
||||||
|
void *const md_reg;
|
||||||
|
const uint32_t ns_mask;
|
||||||
|
const uint32_t rst_mask;
|
||||||
|
const uint32_t mnd_en_mask;
|
||||||
|
const uint32_t mode_mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bank_masks {
|
||||||
|
const uint32_t bank_sel_mask;
|
||||||
|
const struct bank_mask_info bank0_mask;
|
||||||
|
const struct bank_mask_info bank1_mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct branch - branch on/off
|
||||||
|
* @ctl_reg: clock control register
|
||||||
|
* @en_mask: ORed with @ctl_reg to enable the clock
|
||||||
|
* @halt_reg: halt register
|
||||||
|
* @halt_check: type of halt check to perform
|
||||||
|
* @halt_bit: ANDed with @halt_reg to test for clock halted
|
||||||
|
* @reset_reg: reset register
|
||||||
|
* @reset_mask: ORed with @reset_reg to reset the clock domain
|
||||||
|
*/
|
||||||
|
struct branch {
|
||||||
|
void *const ctl_reg;
|
||||||
|
const uint32_t en_mask;
|
||||||
|
|
||||||
|
void *const halt_reg;
|
||||||
|
const uint16_t halt_check;
|
||||||
|
const uint16_t halt_bit;
|
||||||
|
|
||||||
|
void *const reset_reg;
|
||||||
|
const uint32_t reset_mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic clock-definition struct and macros
|
||||||
|
*/
|
||||||
|
struct rcg_clk {
|
||||||
|
bool enabled;
|
||||||
|
void *const ns_reg;
|
||||||
|
void *const md_reg;
|
||||||
|
|
||||||
|
const uint32_t root_en_mask;
|
||||||
|
uint32_t ns_mask;
|
||||||
|
const uint32_t ctl_mask;
|
||||||
|
struct bank_masks *const bank_masks;
|
||||||
|
|
||||||
|
void (*set_rate)(struct rcg_clk *, struct clk_freq_tbl *);
|
||||||
|
struct clk_freq_tbl *freq_tbl;
|
||||||
|
struct clk_freq_tbl *current_freq;
|
||||||
|
|
||||||
|
struct clk * depends;
|
||||||
|
struct branch b;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct rcg_clk *to_rcg_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct rcg_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct fixed_clk - fixed rate clock (used for crystal oscillators)
|
||||||
|
* @rate: output rate
|
||||||
|
* @c: clk
|
||||||
|
*/
|
||||||
|
struct fixed_clk {
|
||||||
|
unsigned long rate;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct fixed_clk *to_fixed_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct fixed_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned fixed_clk_get_rate(struct clk *clk)
|
||||||
|
{
|
||||||
|
struct fixed_clk *f = to_fixed_clk(clk);
|
||||||
|
return f->rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct branch_clk - branch
|
||||||
|
* @enabled: true if clock is on, false otherwise
|
||||||
|
* @b: branch
|
||||||
|
* @parent: clock source
|
||||||
|
* @c: clk
|
||||||
|
*
|
||||||
|
* An on/off switch with a rate derived from the parent.
|
||||||
|
*/
|
||||||
|
struct branch_clk {
|
||||||
|
bool enabled;
|
||||||
|
struct branch b;
|
||||||
|
struct clk * parent;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct branch_clk *to_branch_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct branch_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
int branch_clk_enable(struct clk *clk);
|
||||||
|
void branch_clk_disable(struct clk *clk);
|
||||||
|
struct clk *branch_clk_get_parent(struct clk *clk);
|
||||||
|
int branch_clk_set_parent(struct clk *clk, struct clk *parent);
|
||||||
|
int branch_clk_is_enabled(struct clk *clk);
|
||||||
|
void branch_clk_auto_off(struct clk *clk);
|
||||||
|
int branch_clk_reset(struct clk *c, enum clk_reset_action action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct measure_clk - for rate measurement debug use
|
||||||
|
* @sample_ticks: sample period in reference clock ticks
|
||||||
|
* @multiplier: measurement scale-up factor
|
||||||
|
* @divider: measurement scale-down factor
|
||||||
|
* @c: clk
|
||||||
|
*/
|
||||||
|
struct measure_clk {
|
||||||
|
uint64_t sample_ticks;
|
||||||
|
uint32_t multiplier;
|
||||||
|
uint32_t divider;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct clk_ops clk_ops_measure;
|
||||||
|
|
||||||
|
static inline struct measure_clk *to_measure_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct measure_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* clk_ops APIs
|
||||||
|
*/
|
||||||
|
int local_clk_enable(struct clk *c);
|
||||||
|
void local_clk_disable(struct clk *c);
|
||||||
|
int local_clk_set_rate(struct clk *c, unsigned rate);
|
||||||
|
unsigned local_clk_get_rate(struct clk *c);
|
||||||
|
int local_clk_is_enabled(struct clk *clk);
|
||||||
|
long local_clk_round_rate(struct clk *c, unsigned rate);
|
||||||
|
struct clk *local_clk_get_parent(struct clk *clk);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic set-rate implementations
|
||||||
|
*/
|
||||||
|
void set_rate_mnd(struct rcg_clk *clk, struct clk_freq_tbl *nf);
|
||||||
|
void set_rate_mnd_banked(struct rcg_clk *clk, struct clk_freq_tbl *nf);
|
||||||
|
void set_rate_nop(struct rcg_clk *clk, struct clk_freq_tbl *nf);
|
||||||
|
#endif
|
81
MSM8916Pkg/Include/Chipset/clock.h
Normal file
81
MSM8916Pkg/Include/Chipset/clock.h
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012, 2014, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor
|
||||||
|
* the names of its contributors may be used to endorse or promote
|
||||||
|
* products derived from this software without specific prior written
|
||||||
|
* permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CLOCK_H
|
||||||
|
#define CLOCK_H
|
||||||
|
|
||||||
|
enum clk_reset_action { CLK_RESET_DEASSERT = 0, CLK_RESET_ASSERT = 1 };
|
||||||
|
|
||||||
|
struct clk;
|
||||||
|
struct clk_ops {
|
||||||
|
int (*enable)(struct clk *clk);
|
||||||
|
void (*disable)(struct clk *clk);
|
||||||
|
void (*auto_off)(struct clk *clk);
|
||||||
|
int (*reset)(struct clk *clk, enum clk_reset_action action);
|
||||||
|
int (*set_rate)(struct clk *clk, unsigned rate);
|
||||||
|
int (*set_min_rate)(struct clk *clk, unsigned rate);
|
||||||
|
int (*set_max_rate)(struct clk *clk, unsigned rate);
|
||||||
|
int (*set_flags)(struct clk *clk, unsigned flags);
|
||||||
|
unsigned (*get_rate)(struct clk *clk);
|
||||||
|
int (*list_rate)(struct clk *clk, unsigned n);
|
||||||
|
int (*is_enabled)(struct clk *clk);
|
||||||
|
long (*round_rate)(struct clk *clk, unsigned rate);
|
||||||
|
int (*set_parent)(struct clk *clk, struct clk *parent);
|
||||||
|
struct clk *(*get_parent)(struct clk *clk);
|
||||||
|
bool (*is_local)(struct clk *clk);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct clk
|
||||||
|
* @count: enable refcount
|
||||||
|
* @lock: protects clk_enable()/clk_disable() path and @count
|
||||||
|
*/
|
||||||
|
struct clk {
|
||||||
|
uint32_t flags;
|
||||||
|
uint32_t rate;
|
||||||
|
struct clk_ops *ops;
|
||||||
|
const char * dbg_name;
|
||||||
|
unsigned count;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_lookup {
|
||||||
|
const char *con_id;
|
||||||
|
struct clk *clk;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct clk_list {
|
||||||
|
struct clk_lookup *clist;
|
||||||
|
unsigned num;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CLK_LOOKUP(con, c) \
|
||||||
|
{ \
|
||||||
|
.con_id = con, .clk = &c \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
223
MSM8916Pkg/Include/Chipset/clock_lib2.h
Normal file
223
MSM8916Pkg/Include/Chipset/clock_lib2.h
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012-2014, Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of Linux Foundation nor
|
||||||
|
* the names of its contributors may be used to endorse or promote
|
||||||
|
* products derived from this software without specific prior written
|
||||||
|
* permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLOCK_LIB2_H
|
||||||
|
#define __CLOCK_LIB2_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bit manipulation macros
|
||||||
|
*/
|
||||||
|
#define BM(msb, lsb) \
|
||||||
|
(((((uint32_t)-1) << (31 - msb)) >> (31 - msb + lsb)) << lsb)
|
||||||
|
#define BVAL(msb, lsb, val) (((val) << lsb) & BM(msb, lsb))
|
||||||
|
|
||||||
|
#define container_of(ptr, type, member) \
|
||||||
|
((type *)((addr_t)(ptr)-offsetof(type, member)))
|
||||||
|
|
||||||
|
/* Frequency Macros */
|
||||||
|
#define FREQ_END (UINT32_MAX - 1)
|
||||||
|
#define F_END \
|
||||||
|
{ \
|
||||||
|
.freq_hz = FREQ_END, \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* F(frequency, source, div, m, n) */
|
||||||
|
#define F(f, s, div, m, n) \
|
||||||
|
{ \
|
||||||
|
.freq_hz = (f), .src_clk = &s##_clk_src.c, .m_val = (m), \
|
||||||
|
.n_val = ~((n) - (m)) * !!(n), .d_val = ~(n), \
|
||||||
|
.div_src_val = \
|
||||||
|
BVAL(4, 0, (int)(2 * (div)-1)) | BVAL(10, 8, s##_source_val), \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* F(frequency, source, div, m, n) */
|
||||||
|
#define F_EXT_SRC(f, s, div, m, n) \
|
||||||
|
{ \
|
||||||
|
.freq_hz = (f), .m_val = (m), .n_val = ~((n) - (m)) * !!(n), \
|
||||||
|
.d_val = ~(n), \
|
||||||
|
.div_src_val = \
|
||||||
|
BVAL(4, 0, (int)(2 * (div)-1)) | BVAL(10, 8, s##_source_val), \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* F_MM(frequency, source, div, m, n) */
|
||||||
|
#define F_MM(f, s, div, m, n) \
|
||||||
|
{ \
|
||||||
|
.freq_hz = (f), .src_clk = &s##_clk_src.c, .m_val = (m), \
|
||||||
|
.n_val = ~((n) - (m)) * !!(n), .d_val = ~(n), \
|
||||||
|
.div_src_val = \
|
||||||
|
BVAL(4, 0, (int)(2 * (div)-1)) | BVAL(10, 8, s##_mm_source_val), \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define F_MDSS(f, s, div, m, n) \
|
||||||
|
{ \
|
||||||
|
.freq_hz = (f), .m_val = (m), .n_val = ~((n) - (m)) * !!(n), \
|
||||||
|
.d_val = ~(n), \
|
||||||
|
.div_src_val = \
|
||||||
|
BVAL(4, 0, (int)(2 * (div)-1)) | BVAL(10, 8, s##_mm_source_val), \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Branch Clock Bits */
|
||||||
|
#define CBCR_BRANCH_ENABLE_BIT BIT(0)
|
||||||
|
#define CBCR_BRANCH_OFF_BIT BIT(31)
|
||||||
|
#define BRANCH_CHECK_MASK BM(31, 28)
|
||||||
|
#define BRANCH_ON_VAL BVAL(31, 28, 0x0)
|
||||||
|
#define BRANCH_NOC_FSM_ON_VAL BVAL(31, 28, 0x2)
|
||||||
|
|
||||||
|
/* Root Clock Bits */
|
||||||
|
#define CMD_UPDATE_BIT BIT(0)
|
||||||
|
#define CMD_UPDATE_MASK 1
|
||||||
|
|
||||||
|
#define CFG_SRC_DIV_OFFSET 0
|
||||||
|
#define CFG_SRC_DIV_MASK (0x1F << CFG_SRC_DIV_OFFSET)
|
||||||
|
|
||||||
|
#define CFG_SRC_SEL_OFFSET 8
|
||||||
|
#define CFG_SRC_SEL_MASK (0x3 << CFG_SRC_SEL_OFFSET)
|
||||||
|
|
||||||
|
#define CFG_MODE_DUAL_EDGE 0x2
|
||||||
|
|
||||||
|
#define CFG_MODE_OFFSET 12
|
||||||
|
#define CFG_MODE_MASK (0x3 << CFG_MODE_OFFSET)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic frequency-definition structs and macros
|
||||||
|
*/
|
||||||
|
struct clk_freq_tbl {
|
||||||
|
|
||||||
|
const uint32_t freq_hz;
|
||||||
|
struct clk * src_clk;
|
||||||
|
const uint32_t div_src_val;
|
||||||
|
|
||||||
|
/* TODO: find out if sys_vdd is needed. */
|
||||||
|
|
||||||
|
const uint32_t m_val;
|
||||||
|
const uint32_t n_val; /* not_n_minus_m_val */
|
||||||
|
const uint32_t d_val; /* not_2d_val */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Fixed clock */
|
||||||
|
struct fixed_clk {
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Branch clock */
|
||||||
|
struct branch_clk {
|
||||||
|
|
||||||
|
uint32_t *const bcr_reg;
|
||||||
|
uint32_t *const cbcr_reg;
|
||||||
|
|
||||||
|
void (*set_rate)(struct branch_clk *, struct clk_freq_tbl *);
|
||||||
|
|
||||||
|
struct clk *parent;
|
||||||
|
struct clk c;
|
||||||
|
|
||||||
|
int has_sibling;
|
||||||
|
uint32_t cur_div;
|
||||||
|
uint32_t max_div;
|
||||||
|
uint32_t halt_check;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Root Clock */
|
||||||
|
struct rcg_clk {
|
||||||
|
|
||||||
|
/* RCG registers for this clock */
|
||||||
|
|
||||||
|
uint32_t *const cmd_reg; /* Command reg */
|
||||||
|
uint32_t *const cfg_reg; /* Config reg */
|
||||||
|
uint32_t *const m_reg; /* m */
|
||||||
|
uint32_t *const n_reg; /* not (n-m) */
|
||||||
|
uint32_t *const d_reg; /* not (2d) */
|
||||||
|
|
||||||
|
/* set rate function for this clock */
|
||||||
|
void (*set_rate)(struct rcg_clk *, struct clk_freq_tbl *);
|
||||||
|
|
||||||
|
/* freq table */
|
||||||
|
struct clk_freq_tbl *freq_tbl;
|
||||||
|
struct clk_freq_tbl *current_freq;
|
||||||
|
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Vote Clock */
|
||||||
|
struct vote_clk {
|
||||||
|
|
||||||
|
uint32_t *const cbcr_reg;
|
||||||
|
uint32_t *const vote_reg;
|
||||||
|
uint32_t en_mask;
|
||||||
|
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct reset_clk {
|
||||||
|
uint32_t bcr_reg;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct reset_clk *to_reset_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct reset_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct rcg_clk *to_rcg_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct rcg_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct branch_clk *to_branch_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct branch_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct vote_clk *to_local_vote_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct vote_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RCG clock functions */
|
||||||
|
int clock_lib2_rcg_enable(struct clk *c);
|
||||||
|
int clock_lib2_rcg_set_rate(struct clk *c, unsigned rate);
|
||||||
|
void clock_lib2_rcg_set_rate_mnd(
|
||||||
|
struct rcg_clk *rclk, struct clk_freq_tbl *freq);
|
||||||
|
void clock_lib2_rcg_set_rate_hid(
|
||||||
|
struct rcg_clk *rclk, struct clk_freq_tbl *freq);
|
||||||
|
|
||||||
|
/* CXO clock functions */
|
||||||
|
int cxo_clk_enable(struct clk *clk);
|
||||||
|
void cxo_clk_disable(struct clk *clk);
|
||||||
|
|
||||||
|
/* Branch clock functions */
|
||||||
|
int clock_lib2_branch_clk_enable(struct clk *clk);
|
||||||
|
void clock_lib2_branch_clk_disable(struct clk *clk);
|
||||||
|
int clock_lib2_branch_set_rate(struct clk *c, unsigned rate);
|
||||||
|
|
||||||
|
/* Vote clock functions*/
|
||||||
|
int clock_lib2_vote_clk_enable(struct clk *c);
|
||||||
|
void clock_lib2_vote_clk_disable(struct clk *c);
|
||||||
|
/* clock reset function */
|
||||||
|
int clock_lib2_reset_clk_reset(struct clk *c, enum clk_reset_action action);
|
||||||
|
int clock_lib2_branch_clk_reset(struct clk *c, enum clk_reset_action action);
|
||||||
|
#endif
|
102
MSM8916Pkg/Include/Chipset/clock_pll.h
Normal file
102
MSM8916Pkg/Include/Chipset/clock_pll.h
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor
|
||||||
|
* the names of its contributors may be used to endorse or promote
|
||||||
|
* products derived from this software without specific prior written
|
||||||
|
* permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#ifndef CLOCK_PLL_H
|
||||||
|
#define CLOCK_PLL_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bit manipulation macros
|
||||||
|
*/
|
||||||
|
#define BM(msb, lsb) \
|
||||||
|
(((((uint32_t)-1) << (31 - msb)) >> (31 - msb + lsb)) << lsb)
|
||||||
|
#define BVAL(msb, lsb, val) (((val) << lsb) & BM(msb, lsb))
|
||||||
|
|
||||||
|
struct clk;
|
||||||
|
struct clk_ops;
|
||||||
|
|
||||||
|
#define container_of(ptr, type, member) \
|
||||||
|
((type *)((addr_t)(ptr)-offsetof(type, member)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct pll_vote_clk - phase locked loop (HW voteable)
|
||||||
|
* @rate: output rate
|
||||||
|
* @en_reg: enable register
|
||||||
|
* @en_mask: ORed with @en_reg to enable the clock
|
||||||
|
* @status_reg: status register
|
||||||
|
* @parent: clock source
|
||||||
|
* @c: clk
|
||||||
|
*/
|
||||||
|
struct pll_vote_clk {
|
||||||
|
unsigned long rate;
|
||||||
|
|
||||||
|
void *const en_reg;
|
||||||
|
const uint32_t en_mask;
|
||||||
|
|
||||||
|
void *const status_reg;
|
||||||
|
const uint32_t status_mask;
|
||||||
|
|
||||||
|
struct clk *parent;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct pll_vote_clk *to_pll_vote_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct pll_vote_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct pll_clk - phase locked loop
|
||||||
|
* @rate: output rate
|
||||||
|
* @mode_reg: enable register
|
||||||
|
* @parent: clock source
|
||||||
|
* @c: clk
|
||||||
|
*/
|
||||||
|
struct pll_clk {
|
||||||
|
unsigned long rate;
|
||||||
|
|
||||||
|
void *const mode_reg;
|
||||||
|
|
||||||
|
struct clk *parent;
|
||||||
|
struct clk c;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct pll_clk *to_pll_clk(struct clk *clk)
|
||||||
|
{
|
||||||
|
return container_of(clk, struct pll_clk, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pll_vote_clk_enable(struct clk *clk);
|
||||||
|
void pll_vote_clk_disable(struct clk *clk);
|
||||||
|
unsigned pll_vote_clk_get_rate(struct clk *clk);
|
||||||
|
struct clk *pll_vote_clk_get_parent(struct clk *clk);
|
||||||
|
int pll_vote_clk_is_enabled(struct clk *clk);
|
||||||
|
|
||||||
|
int pll_clk_enable(struct clk *clk);
|
||||||
|
void pll_clk_disable(struct clk *clk);
|
||||||
|
unsigned pll_clk_get_rate(struct clk *clk);
|
||||||
|
struct clk *pll_clk_get_parent(struct clk *clk);
|
||||||
|
#endif
|
34
MSM8916Pkg/Include/Configuration/BootDevices.h
Normal file
34
MSM8916Pkg/Include/Configuration/BootDevices.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef _BOOT_DEVICES_H_
|
||||||
|
#define _BOOT_DEVICES_H_
|
||||||
|
|
||||||
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Uefi.h>
|
||||||
|
|
||||||
|
#define PLAT_KEYPAD_DEVICE_GUID \
|
||||||
|
{ \
|
||||||
|
0xD7F58A0E, 0xBED2, 0x4B5A, \
|
||||||
|
{ \
|
||||||
|
0xBB, 0x43, 0x8A, 0xB2, 0x3D, 0xD0, 0xE2, 0xB0 \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DevicePath definition for Button driver */
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct {
|
||||||
|
VENDOR_DEVICE_PATH VendorDevicePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||||||
|
} EFI_KEYPAD_DEVICE_PATH;
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
EFI_KEYPAD_DEVICE_PATH KeyPadDxeDevicePath = {
|
||||||
|
{{HARDWARE_DEVICE_PATH,
|
||||||
|
HW_VENDOR_DP,
|
||||||
|
{(UINT8)(sizeof(VENDOR_DEVICE_PATH)),
|
||||||
|
(UINT8)((sizeof(VENDOR_DEVICE_PATH)) >> 8)}},
|
||||||
|
PLAT_KEYPAD_DEVICE_GUID},
|
||||||
|
{END_DEVICE_PATH_TYPE,
|
||||||
|
END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
|
{(UINT8)(END_DEVICE_PATH_LENGTH),
|
||||||
|
(UINT8)((END_DEVICE_PATH_LENGTH) >> 8)}}};
|
||||||
|
|
||||||
|
#endif
|
277
MSM8916Pkg/Include/Configuration/DeviceMemoryMap.h
Normal file
277
MSM8916Pkg/Include/Configuration/DeviceMemoryMap.h
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
#ifndef _DEVICE_MEMORY_MAP_H_
|
||||||
|
#define _DEVICE_MEMORY_MAP_H_
|
||||||
|
|
||||||
|
#include <Library/ArmLib.h>
|
||||||
|
|
||||||
|
#define MAX_ARM_MEMORY_REGION_DESCRIPTOR_COUNT 73
|
||||||
|
|
||||||
|
/* Below flag is used for system memory */
|
||||||
|
#define SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES \
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | \
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_TESTED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | \
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | \
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | \
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | \
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE
|
||||||
|
|
||||||
|
typedef enum { NoHob, AddMem, AddDev, MaxMem } DeviceMemoryAddHob;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
EFI_PHYSICAL_ADDRESS Address;
|
||||||
|
UINT64 Length;
|
||||||
|
EFI_RESOURCE_TYPE ResourceType;
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;
|
||||||
|
ARM_MEMORY_REGION_ATTRIBUTES ArmAttributes;
|
||||||
|
DeviceMemoryAddHob HobOption;
|
||||||
|
EFI_MEMORY_TYPE MemoryType;
|
||||||
|
} ARM_MEMORY_REGION_DESCRIPTOR_EX, *PARM_MEMORY_REGION_DESCRIPTOR_EX;
|
||||||
|
|
||||||
|
static ARM_MEMORY_REGION_DESCRIPTOR_EX gDeviceMemoryDescriptorEx[] = {
|
||||||
|
/* Address, Length, ResourceType, Resource Attribute, ARM MMU
|
||||||
|
Attribute, HobOption, EFI Memory Type */
|
||||||
|
|
||||||
|
/* HYP */
|
||||||
|
{0x80000000, 0x00600000, EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* AOP CMD DB */
|
||||||
|
{0x80820000, 0x00020000, EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* SMEM */
|
||||||
|
{0x80900000, 0x00200000, EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* PIL Reserved */
|
||||||
|
{0x84400000, 0x0F800000, EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* DXE Heap */
|
||||||
|
{0x93C00000, 0x04500000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiConventionalMemory},
|
||||||
|
/* DBI Dump */
|
||||||
|
{0x98100000, 0x03700000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED,
|
||||||
|
NoHob, EfiConventionalMemory},
|
||||||
|
/* Sched Heap */
|
||||||
|
{0x9B800000, 0x00400000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* Display Reserved */
|
||||||
|
{0x9C000000, 0x01800000, EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* FV Region */
|
||||||
|
{0x9F800000, 0x00200000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* ABOOT FV */
|
||||||
|
{0x9FA00000, 0x00200000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* UEFI FD */
|
||||||
|
{0x9FC00000, 0x00300000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* SEC Heap */
|
||||||
|
{0x9FF00000, 0x0008C000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* CPU Vectors */
|
||||||
|
{0x9FF8C000, 0x00001000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* MMU PageTables */
|
||||||
|
{0x9FF8D000, 0x00003000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* UEFI Stack */
|
||||||
|
{0x9FF90000, 0x00040000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiBootServicesData},
|
||||||
|
/* Log Buffer */
|
||||||
|
{0x9FFF7000, 0x00008000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiRuntimeServicesData},
|
||||||
|
/* Info Blk */
|
||||||
|
{0x9FFFF000, 0x00001000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiRuntimeServicesData},
|
||||||
|
/* Secure DSP */
|
||||||
|
{0xA0000000, 0x01200000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* Kernel */
|
||||||
|
{0xA1200000, 0x08000000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* MLVM_APSS */
|
||||||
|
{0xA9200000, 0x03A00000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* MLVM_1 */
|
||||||
|
{0xACC00000, 0x07800000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* SEC DEBUG */
|
||||||
|
{0xB4400000, 0x00C00000, EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
/* SOD Test */
|
||||||
|
{0xC2000000, 0x0A100000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiReservedMemoryType},
|
||||||
|
|
||||||
|
/* HLOS */
|
||||||
|
{0xC0000000, 0x140000000, EFI_RESOURCE_SYSTEM_MEMORY,
|
||||||
|
SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
|
||||||
|
AddMem, EfiConventionalMemory},
|
||||||
|
|
||||||
|
/* Other memory regions */
|
||||||
|
/* AOP_SS_MSG_RAM */
|
||||||
|
{0x0C300000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
NoHob, EfiConventionalMemory},
|
||||||
|
/* IMEM Base */
|
||||||
|
{0x14680000, 0x0002B000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
NoHob, EfiConventionalMemory},
|
||||||
|
/* IMEM Cookie Base */
|
||||||
|
{0x146AA000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiConventionalMemory},
|
||||||
|
|
||||||
|
/* Registers */
|
||||||
|
{0x00100000, 0x00200000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x00780000, 0x00007000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x00790000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x007C0000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x00800000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x00A00000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x01D80000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x01DC0000, 0x00040000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x01FC0000, 0x00040000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x03500000, 0x00300000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x03900000, 0x00300000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x03D00000, 0x00300000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x05090000, 0x00009000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0509A000, 0x00004000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0C200000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x62B00000, 0x00060000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x08800000, 0x00200000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x090B0000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0A600000, 0x0011B000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0A720000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0B2A0000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0B4A0000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0BA00000, 0x00200000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0C221000, 0x00003000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0C263000, 0x00003000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0C400000, 0x02800000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0AB00000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x09980000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0AD00000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0AF00000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x18280000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x18282000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x18284000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x18200000, 0x00030000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x17A00000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x17A60000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x17C00000, 0x00110000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x18300000, 0x000B0000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x0AE00000, 0x00134000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
{0x15000000, 0x000D0000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO},
|
||||||
|
|
||||||
|
/* Terminator for MMU*/
|
||||||
|
{0},
|
||||||
|
|
||||||
|
/* Terminator for LibMem */
|
||||||
|
{ 0xFFFFFFFF, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO,
|
||||||
|
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,
|
||||||
|
AddDev, EfiMemoryMappedIO}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
41
MSM8916Pkg/Include/Library/FrameBufferSerialPortLib.h
Normal file
41
MSM8916Pkg/Include/Library/FrameBufferSerialPortLib.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#ifndef _FRAMEBUFFER_SERIALPORT_LIB_H_
|
||||||
|
#define _FRAMEBUFFER_SERIALPORT_LIB_H_
|
||||||
|
|
||||||
|
typedef struct _FBCON_POSITION {
|
||||||
|
INTN x;
|
||||||
|
INTN y;
|
||||||
|
} FBCON_POSITION, *PFBCON_POSITION;
|
||||||
|
|
||||||
|
typedef struct _FBCON_COLOR {
|
||||||
|
UINTN Foreground;
|
||||||
|
UINTN Background;
|
||||||
|
} FBCON_COLOR, *PFBCON_COLOR;
|
||||||
|
|
||||||
|
enum FbConMsgType {
|
||||||
|
/* type for menu */
|
||||||
|
FBCON_COMMON_MSG = 0,
|
||||||
|
FBCON_UNLOCK_TITLE_MSG,
|
||||||
|
FBCON_TITLE_MSG,
|
||||||
|
FBCON_SUBTITLE_MSG,
|
||||||
|
|
||||||
|
/* type for warning */
|
||||||
|
FBCON_YELLOW_MSG,
|
||||||
|
FBCON_ORANGE_MSG,
|
||||||
|
FBCON_RED_MSG,
|
||||||
|
FBCON_GREEN_MSG,
|
||||||
|
|
||||||
|
/* and the select message's background */
|
||||||
|
FBCON_SELECT_MSG_BG_COLOR,
|
||||||
|
};
|
||||||
|
|
||||||
|
void ResetFb(void);
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SerialPortWriteCritical
|
||||||
|
(
|
||||||
|
IN UINT8 *Buffer,
|
||||||
|
IN UINTN NumberOfBytes
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
111
MSM8916Pkg/Include/Library/LKEnvLib.h
Normal file
111
MSM8916Pkg/Include/Library/LKEnvLib.h
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#ifndef __LIBRARY_LKENV_H__
|
||||||
|
#define __LIBRARY_LKENV_H__
|
||||||
|
|
||||||
|
#include <Library/ArmLib.h>
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Library/CacheMaintenanceLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/IoLib.h>
|
||||||
|
#include <Library/PrintLib.h>
|
||||||
|
#include <Library/TimerLib.h>
|
||||||
|
|
||||||
|
#include "minstdbool.h"
|
||||||
|
#include "minstdint.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define REG32(addr) ((volatile uint32_t *)(addr))
|
||||||
|
#define writel_rt(v, a) (*REG32(a) = (v))
|
||||||
|
#define readl_rt(a) (*REG32(a))
|
||||||
|
|
||||||
|
#define writel(v, a) MmioWrite32((UINTN)(a), (UINT32)(v))
|
||||||
|
#define readl(a) MmioRead32((UINTN)(a))
|
||||||
|
#define writeb(v, a) MmioWrite8((UINTN)(a), (UINT8)(v))
|
||||||
|
#define readb(a) MmioRead8((UINTN)(a))
|
||||||
|
#define writehw(v, a) MmioWrite16((UINTN)(a), (UINT16)(v))
|
||||||
|
#define readhw(a) MmioRead16((UINTN)(a))
|
||||||
|
#define RMWREG32(addr, startbit, width, val) \
|
||||||
|
writel( \
|
||||||
|
(readl(addr) & ~(((1 << (width)) - 1) << (startbit))) | \
|
||||||
|
((val) << (startbit)), \
|
||||||
|
addr)
|
||||||
|
#define BIT(bit) (1 << (bit))
|
||||||
|
|
||||||
|
#ifdef MSM_SECURE_IO
|
||||||
|
#define readl_relaxed secure_readl
|
||||||
|
#define writel_relaxed secure_writel
|
||||||
|
#else
|
||||||
|
#define readl_relaxed readl
|
||||||
|
#define writel_relaxed writel
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NO_ERROR 0
|
||||||
|
#define ERROR -1
|
||||||
|
#define ERR_NOT_FOUND -2
|
||||||
|
#define ERR_NO_MEMORY -5
|
||||||
|
#define ERR_NOT_VALID -7
|
||||||
|
#define ERR_INVALID_ARGS -8
|
||||||
|
#define ERR_IO -20
|
||||||
|
#define ERR_NOT_SUPPORTED -24
|
||||||
|
|
||||||
|
#include "minstdbool.h"
|
||||||
|
#include "minstring.h"
|
||||||
|
|
||||||
|
#define va_list VA_LIST
|
||||||
|
#define offsetof(type, member) OFFSET_OF(type, member)
|
||||||
|
#define __PACKED __attribute__((packed))
|
||||||
|
|
||||||
|
#define ROUNDUP(a, b) (((a) + ((b)-1)) & ~((b)-1))
|
||||||
|
#define ROUNDDOWN(a, b) ((a) & ~((b)-1))
|
||||||
|
#define CACHE_LINE (ArmDataCacheLineLength())
|
||||||
|
#define IS_CACHE_LINE_ALIGNED(addr) !((UINTN)(addr) & (CACHE_LINE - 1))
|
||||||
|
|
||||||
|
#define snprintf(s, n, fmt, ...) \
|
||||||
|
((int)AsciiSPrint((s), (n), (fmt), ##__VA_ARGS__))
|
||||||
|
|
||||||
|
/* debug levels */
|
||||||
|
#define CRITICAL DEBUG_ERROR
|
||||||
|
#define ALWAYS DEBUG_ERROR
|
||||||
|
#define INFO DEBUG_INFO
|
||||||
|
#define SPEW DEBUG_VERBOSE
|
||||||
|
|
||||||
|
#if !defined(MDEPKG_NDEBUG)
|
||||||
|
#define dprintf(level, fmt, ...) \
|
||||||
|
do { \
|
||||||
|
if (DebugPrintEnabled()) { \
|
||||||
|
CHAR8 __printbuf[100]; \
|
||||||
|
UINTN __printindex; \
|
||||||
|
CONST CHAR8 *__fmtptr = (fmt); \
|
||||||
|
UINTN __fmtlen = AsciiStrSize(__fmtptr); \
|
||||||
|
CopyMem(__printbuf, __fmtptr, __fmtlen); \
|
||||||
|
__printbuf[__fmtlen - 1] = 0; \
|
||||||
|
for (__printindex = 1; __printbuf[__printindex]; __printindex++) { \
|
||||||
|
if (__printbuf[__printindex - 1] == '%' && \
|
||||||
|
__printbuf[__printindex] == 's') \
|
||||||
|
__printbuf[__printindex] = 'a'; \
|
||||||
|
} \
|
||||||
|
DEBUG(((level), __printbuf, ##__VA_ARGS__)); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define dprintf(level, fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ntohl(n) SwapBytes32(n)
|
||||||
|
|
||||||
|
#define dmb() ArmDataMemoryBarrier()
|
||||||
|
#define dsb() ArmDataSynchronizationBarrier()
|
||||||
|
|
||||||
|
#define mdelay(msecs) MicroSecondDelay((msecs)*1000)
|
||||||
|
#define udelay(usecs) MicroSecondDelay((usecs))
|
||||||
|
|
||||||
|
#define arch_clean_invalidate_cache_range(start, len) \
|
||||||
|
WriteBackInvalidateDataCacheRange((VOID *)(UINTN)(start), (UINTN)(len))
|
||||||
|
#define arch_invalidate_cache_range(start, len) \
|
||||||
|
InvalidateDataCacheRange((VOID *)(UINTN)(start), (UINTN)(len));
|
||||||
|
|
||||||
|
#define __ALWAYS_INLINE __attribute__((always_inline))
|
||||||
|
|
||||||
|
#define ROUND_TO_PAGE(x) (x & (~(EFI_PAGE_SIZE - 1)))
|
||||||
|
|
||||||
|
#endif
|
58
MSM8916Pkg/Include/Library/Pow2Lib.h
Normal file
58
MSM8916Pkg/Include/Library/Pow2Lib.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2008 Travis Geiselbrecht
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
* a copy of this software and associated documentation files
|
||||||
|
* (the "Software"), to deal in the Software without restriction,
|
||||||
|
* including without limitation the rights to use, copy, modify, merge,
|
||||||
|
* publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef __LIBRARY_POW2_H
|
||||||
|
#define __LIBRARY_POW2_H
|
||||||
|
|
||||||
|
#include <Library/LKEnvLib.h>
|
||||||
|
|
||||||
|
/* routines for dealing with power of 2 values for efficiency */
|
||||||
|
STATIC inline __ALWAYS_INLINE BOOLEAN ispow2(UINTN val)
|
||||||
|
{
|
||||||
|
return ((val - 1) & val) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC inline __ALWAYS_INLINE UINTN log2(UINTN val)
|
||||||
|
{
|
||||||
|
if (!ispow2(val))
|
||||||
|
return 0; // undefined
|
||||||
|
|
||||||
|
return __builtin_ctz(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC inline __ALWAYS_INLINE UINTN valpow2(UINTN valp2)
|
||||||
|
{
|
||||||
|
return 1 << valp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC inline __ALWAYS_INLINE UINTN divpow2(UINTN val, UINTN divp2)
|
||||||
|
{
|
||||||
|
return val >> divp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC inline __ALWAYS_INLINE UINTN modpow2(UINTN val, UINTN modp2)
|
||||||
|
{
|
||||||
|
return val & ((1UL << modp2) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
12
MSM8916Pkg/Include/Library/QcomClockLib.h
Normal file
12
MSM8916Pkg/Include/Library/QcomClockLib.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef __LIBRARY_QCOM_CLOCK_LIB_H__
|
||||||
|
#define __LIBRARY_QCOM_CLOCK_LIB_H__
|
||||||
|
|
||||||
|
#include <Protocol/QcomClock.h>
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ClockImplLibInitialize(VOID);
|
||||||
|
|
||||||
|
extern QCOM_CLOCK_PROTOCOL *gClock;
|
||||||
|
|
||||||
|
#endif
|
11
MSM8916Pkg/Include/Library/QcomPlatformClockInitLib.h
Normal file
11
MSM8916Pkg/Include/Library/QcomPlatformClockInitLib.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef __LIBRARY_QCOM_PLATFORM_CLOCKINIT_LIB_H__
|
||||||
|
#define __LIBRARY_QCOM_PLATFORM_CLOCKINIT_LIB_H__
|
||||||
|
|
||||||
|
#include <Chipset/clock.h>
|
||||||
|
#include <Library/LKEnvLib.h>
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
LibQcomPlatformClockInit(struct clk_lookup **clist, unsigned *num);
|
||||||
|
|
||||||
|
#endif
|
11
MSM8916Pkg/Include/Library/minstdbool.h
Normal file
11
MSM8916Pkg/Include/Library/minstdbool.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef __MIN_STDBOOL_H__
|
||||||
|
#define __MIN_STDBOOL_H__
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
|
||||||
|
typedef BOOLEAN bool;
|
||||||
|
|
||||||
|
#define true TRUE
|
||||||
|
#define false FALSE
|
||||||
|
|
||||||
|
#endif
|
70
MSM8916Pkg/Include/Library/minstdint.h
Normal file
70
MSM8916Pkg/Include/Library/minstdint.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#ifndef __MIN_STDINT_H__
|
||||||
|
#define __MIN_STDINT_H__
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
|
||||||
|
typedef UINTN size_t;
|
||||||
|
|
||||||
|
typedef INT8 int8_t;
|
||||||
|
typedef INT16 int16_t;
|
||||||
|
typedef INT32 int32_t;
|
||||||
|
typedef INT64 int64_t;
|
||||||
|
|
||||||
|
typedef UINT8 uint8_t;
|
||||||
|
typedef UINT16 uint16_t;
|
||||||
|
typedef UINT32 uint32_t;
|
||||||
|
typedef UINT64 uint64_t;
|
||||||
|
|
||||||
|
typedef UINTN addr_t;
|
||||||
|
typedef UINTN paddr_t;
|
||||||
|
|
||||||
|
typedef UINT8 u8;
|
||||||
|
typedef UINT16 u16;
|
||||||
|
typedef UINT32 u32;
|
||||||
|
typedef UINT64 u64;
|
||||||
|
|
||||||
|
#ifndef INT16_MIN
|
||||||
|
#define INT16_MIN MIN_INT16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT16_MAX
|
||||||
|
#define INT16_MAX MAX_INT16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT16_MIN
|
||||||
|
#define UINT16_MIN MIN_UINT16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT16_MAX
|
||||||
|
#define UINT16_MAX MAX_UINT16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT32_MIN
|
||||||
|
#define INT32_MIN MIN_INT32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT32_MAX
|
||||||
|
#define INT32_MAX MAX_INT32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT32_MIN
|
||||||
|
#define UINT32_MIN MIN_UINT32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT32_MAX
|
||||||
|
#define UINT32_MAX MAX_UINT32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT_MAX
|
||||||
|
#define UINT_MAX MAX_UINTN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ULONG_MAX
|
||||||
|
#define ULONG_MAX (~0UL)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MAX
|
||||||
|
#define LONG_MAX ((long)(~0UL >> 1))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
17
MSM8916Pkg/Include/Library/minstring.h
Normal file
17
MSM8916Pkg/Include/Library/minstring.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef __MIN_STRING_H__
|
||||||
|
#define __MIN_STRING_H__
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
|
||||||
|
#define strcmp(s1, s2) ((int)AsciiStrCmp((s1), (s2)))
|
||||||
|
#define strncmp(s1, s2, n) ((int)AsciiStrnCmp((s1), (s2), (n)))
|
||||||
|
#define strlen(s) ((size_t)AsciiStrLen((s)))
|
||||||
|
#define strlcpy(dst, src, n) AsciiStrCpyS((dst), (n), (src))
|
||||||
|
#define strstr(s1, s2) AsciiStrStr((s1), (s2))
|
||||||
|
#define memset(s, c, n) SetMem((s), (UINTN)(n), (UINT8)(c))
|
||||||
|
#define memcpy(s1, s2, n) CopyMem((s1), (s2), (n))
|
||||||
|
#define memmove(s1, s2, n) CopyMem((s1), (s2), (n))
|
||||||
|
#define memcmp(s1, s2, n) ((int)CompareMem((s1), (s2), (n)))
|
||||||
|
|
||||||
|
#endif
|
93
MSM8916Pkg/Include/Platform/clock.h
Normal file
93
MSM8916Pkg/Include/Platform/clock.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials provided
|
||||||
|
* with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __MSM8916_CLOCK_H
|
||||||
|
#define __MSM8916_CLOCK_H
|
||||||
|
|
||||||
|
#include <Chipset/clock.h>
|
||||||
|
#include <Chipset/clock_lib2.h>
|
||||||
|
|
||||||
|
#define UART_DM_CLK_RX_TX_BIT_RATE 0xCC
|
||||||
|
|
||||||
|
#define REG_MM(off) (CLK_CTL_BASE + (off))
|
||||||
|
|
||||||
|
#define MDP_GDSCR REG_MM(0x4D078)
|
||||||
|
#define GDSC_POWER_ON_BIT BIT(31)
|
||||||
|
#define GDSC_POWER_ON_STATUS_BIT BIT(29)
|
||||||
|
#define GDSC_EN_FEW_WAIT_MASK (0x0F << 16)
|
||||||
|
#define GDSC_EN_FEW_WAIT_256_MASK BIT(19)
|
||||||
|
|
||||||
|
#define VSYNC_CMD_RCGR REG_MM(0x4D02C)
|
||||||
|
#define VSYNC_CFG_RCGR REG_MM(0x4D030)
|
||||||
|
#define MDSS_VSYNC_CBCR REG_MM(0x4D090)
|
||||||
|
|
||||||
|
#define MDP_CMD_RCGR REG_MM(0x4D014)
|
||||||
|
#define MDP_CFG_RCGR REG_MM(0x4D018)
|
||||||
|
#define MDP_CBCR REG_MM(0x4D088)
|
||||||
|
#define MDP_AHB_CBCR REG_MM(0x4D07C)
|
||||||
|
#define MDP_AXI_CBCR REG_MM(0x4D080)
|
||||||
|
|
||||||
|
#define DSI_BYTE0_CMD_RCGR REG_MM(0x4D044)
|
||||||
|
#define DSI_BYTE0_CFG_RCGR REG_MM(0x4D048)
|
||||||
|
#define DSI_BYTE0_CBCR REG_MM(0x4D094)
|
||||||
|
#define DSI_ESC0_CMD_RCGR REG_MM(0x4D05C)
|
||||||
|
#define DSI_ESC0_CFG_RCGR REG_MM(0x4D060)
|
||||||
|
#define DSI_ESC0_CBCR REG_MM(0x4D098)
|
||||||
|
#define DSI_PIXEL0_CMD_RCGR REG_MM(0x4D000)
|
||||||
|
#define DSI_PIXEL0_CFG_RCGR REG_MM(0x4D004)
|
||||||
|
#define DSI_PIXEL0_CBCR REG_MM(0x4D084)
|
||||||
|
#define DSI_PIXEL0_M REG_MM(0x4D008)
|
||||||
|
#define DSI_PIXEL0_N REG_MM(0x4D00C)
|
||||||
|
#define DSI_PIXEL0_D REG_MM(0x4D010)
|
||||||
|
|
||||||
|
#define DSI_BYTE1_CMD_RCGR REG_MM(0x4D0B0)
|
||||||
|
#define DSI_BYTE1_CFG_RCGR REG_MM(0x4D0B4)
|
||||||
|
#define DSI_BYTE1_CBCR REG_MM(0x4D0A0)
|
||||||
|
#define DSI_ESC1_CMD_RCGR REG_MM(0x4D0A8)
|
||||||
|
#define DSI_ESC1_CFG_RCGR REG_MM(0x4D0AC)
|
||||||
|
#define DSI_ESC1_CBCR REG_MM(0x4D09C)
|
||||||
|
#define DSI_PIXEL1_CMD_RCGR REG_MM(0x4D0B8)
|
||||||
|
#define DSI_PIXEL1_CFG_RCGR REG_MM(0x4D0BC)
|
||||||
|
#define DSI_PIXEL1_CBCR REG_MM(0x4D0A4)
|
||||||
|
#define DSI_PIXEL1_M REG_MM(0x4D0C0)
|
||||||
|
#define DSI_PIXEL1_N REG_MM(0x4D0C4)
|
||||||
|
#define DSI_PIXEL1_D REG_MM(0x4D0C8)
|
||||||
|
|
||||||
|
void platform_clock_init(void);
|
||||||
|
|
||||||
|
void clock_init_mmc(uint32_t interface);
|
||||||
|
void clock_config_mmc(uint32_t interface, uint32_t freq);
|
||||||
|
void clock_config_uart_dm(uint8_t id);
|
||||||
|
void hsusb_clock_init(void);
|
||||||
|
void clock_config_ce(uint8_t instance);
|
||||||
|
void mdp_clock_init(void);
|
||||||
|
void mdp_gdsc_ctrl(uint8_t enable);
|
||||||
|
void clock_ce_enable(uint8_t instance);
|
||||||
|
void clock_ce_disable(uint8_t instance);
|
||||||
|
void clock_config_blsp_i2c(uint8_t blsp_id, uint8_t qup_id);
|
||||||
|
#endif
|
286
MSM8916Pkg/Include/Platform/iomap.h
Normal file
286
MSM8916Pkg/Include/Platform/iomap.h
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials provided
|
||||||
|
* with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PLATFORM_MSM8916_IOMAP_H_
|
||||||
|
#define _PLATFORM_MSM8916_IOMAP_H_
|
||||||
|
|
||||||
|
#define MSM_IOMAP_BASE 0x00000000
|
||||||
|
#define MSM_IOMAP_END 0x08000000
|
||||||
|
#define A53_SS_BASE 0x0B000000
|
||||||
|
#define A53_SS_END 0x0B200000
|
||||||
|
|
||||||
|
#define SYSTEM_IMEM_BASE 0x08600000
|
||||||
|
#define MSM_SHARED_IMEM_BASE 0x08600000
|
||||||
|
|
||||||
|
#define RESTART_REASON_ADDR (MSM_SHARED_IMEM_BASE + 0x65C)
|
||||||
|
#define BS_INFO_OFFSET (0x6B0)
|
||||||
|
#define BS_INFO_ADDR (MSM_SHARED_IMEM_BASE + BS_INFO_OFFSET)
|
||||||
|
#define SDRAM_START_ADDR 0x80000000
|
||||||
|
|
||||||
|
#define MSM_SHARED_BASE 0x86300000
|
||||||
|
#define APPS_SS_BASE 0x0B000000
|
||||||
|
|
||||||
|
#define DDR_START get_ddr_start()
|
||||||
|
#define ABOOT_FORCE_KERNEL_ADDR DDR_START + 0x8000
|
||||||
|
#define ABOOT_FORCE_KERNEL64_ADDR DDR_START + 0x80000
|
||||||
|
#define ABOOT_FORCE_RAMDISK_ADDR DDR_START + 0x2000000
|
||||||
|
#define ABOOT_FORCE_TAGS_ADDR DDR_START + 0x1E00000
|
||||||
|
|
||||||
|
#define MSM_GIC_DIST_BASE APPS_SS_BASE
|
||||||
|
#define MSM_GIC_CPU_BASE (APPS_SS_BASE + 0x2000)
|
||||||
|
#define MSM_WATCHDOG_BASE (APPS_SS_BASE + 0x00017000)
|
||||||
|
#define MSM_WATCHDOG_RST (MSM_WATCHDOG_BASE + 0x04)
|
||||||
|
#define MSM_WATCHDOG_EN (MSM_WATCHDOG_BASE + 0x08)
|
||||||
|
#define APPS_APCS_QTMR_AC_BASE (APPS_SS_BASE + 0x00020000)
|
||||||
|
#define APPS_APCS_F0_QTMR_V1_BASE (APPS_SS_BASE + 0x00021000)
|
||||||
|
#define QTMR_BASE APPS_APCS_F0_QTMR_V1_BASE
|
||||||
|
|
||||||
|
#define APCS_BANKED_SAW2_BASE (APPS_SS_BASE + 0x9000)
|
||||||
|
#define APCS_L2_SAW2_BASE (APPS_SS_BASE + 0x12000)
|
||||||
|
|
||||||
|
#define PERIPH_SS_BASE 0x07800000
|
||||||
|
|
||||||
|
#define MSM_SDC1_BASE (PERIPH_SS_BASE + 0x00024000)
|
||||||
|
#define MSM_SDC1_SDHCI_BASE (PERIPH_SS_BASE + 0x00024900)
|
||||||
|
#define MSM_SDC2_BASE (PERIPH_SS_BASE + 0x00064000)
|
||||||
|
#define MSM_SDC2_SDHCI_BASE (PERIPH_SS_BASE + 0x00064900)
|
||||||
|
|
||||||
|
/* SDHCI */
|
||||||
|
#define SDCC_MCI_HC_MODE (0x00000078)
|
||||||
|
#define SDCC_HC_PWRCTL_STATUS_REG (0x000000DC)
|
||||||
|
#define SDCC_HC_PWRCTL_MASK_REG (0x000000E0)
|
||||||
|
#define SDCC_HC_PWRCTL_CLEAR_REG (0x000000E4)
|
||||||
|
#define SDCC_HC_PWRCTL_CTL_REG (0x000000E8)
|
||||||
|
#define BLSP1_UART0_BASE (PERIPH_SS_BASE + 0x000AF000)
|
||||||
|
#define BLSP1_UART1_BASE (PERIPH_SS_BASE + 0x000B0000)
|
||||||
|
#define MSM_USB_BASE (PERIPH_SS_BASE + 0x000D9000)
|
||||||
|
|
||||||
|
#define CLK_CTL_BASE 0x1800000
|
||||||
|
|
||||||
|
#define SPMI_BASE 0x02000000
|
||||||
|
#define SPMI_GENI_BASE (SPMI_BASE + 0xA000)
|
||||||
|
#define SPMI_PIC_BASE (SPMI_BASE + 0x01800000)
|
||||||
|
#define PMIC_ARB_CORE 0x200F000
|
||||||
|
|
||||||
|
#define TLMM_BASE_ADDR 0x1000000
|
||||||
|
#define GPIO_CONFIG_ADDR(x) (TLMM_BASE_ADDR + (x)*0x1000)
|
||||||
|
#define GPIO_IN_OUT_ADDR(x) (TLMM_BASE_ADDR + 0x00000004 + (x)*0x1000)
|
||||||
|
|
||||||
|
#define MPM2_MPM_CTRL_BASE 0x004A0000
|
||||||
|
#define MPM2_MPM_PS_HOLD 0x004AB000
|
||||||
|
#define MPM2_MPM_SLEEP_TIMETICK_COUNT_VAL 0x004A3000
|
||||||
|
|
||||||
|
/* CRYPTO ENGINE */
|
||||||
|
#define MSM_CE1_BASE 0x073A000
|
||||||
|
#define MSM_CE1_BAM_BASE 0x0704000
|
||||||
|
#define GCC_CRYPTO_BCR (CLK_CTL_BASE + 0x16000)
|
||||||
|
#define GCC_CRYPTO_CMD_RCGR (CLK_CTL_BASE + 0x16004)
|
||||||
|
#define GCC_CRYPTO_CFG_RCGR (CLK_CTL_BASE + 0x16008)
|
||||||
|
#define GCC_CRYPTO_CBCR (CLK_CTL_BASE + 0x1601C)
|
||||||
|
#define GCC_CRYPTO_AXI_CBCR (CLK_CTL_BASE + 0x16020)
|
||||||
|
#define GCC_CRYPTO_AHB_CBCR (CLK_CTL_BASE + 0x16024)
|
||||||
|
|
||||||
|
/* I2C */
|
||||||
|
#define BLSP_QUP_BASE(blsp_id, qup_id) (PERIPH_SS_BASE + 0xB5000 + 0x1000 * qup_id)
|
||||||
|
#define GCC_BLSP1_QUP2_APPS_CBCR (CLK_CTL_BASE + 0x3010)
|
||||||
|
#define GCC_BLSP1_QUP2_CFG_RCGR (CLK_CTL_BASE + 0x3018)
|
||||||
|
#define GCC_BLSP1_QUP2_CMD_RCGR (CLK_CTL_BASE + 0x3014)
|
||||||
|
|
||||||
|
/* GPLL */
|
||||||
|
#define GPLL0_STATUS (CLK_CTL_BASE + 0x2101C)
|
||||||
|
#define GPLL1_STATUS (CLK_CTL_BASE + 0x2001C)
|
||||||
|
#define APCS_GPLL_ENA_VOTE (CLK_CTL_BASE + 0x45000)
|
||||||
|
#define APCS_CLOCK_BRANCH_ENA_VOTE (CLK_CTL_BASE + 0x45004)
|
||||||
|
|
||||||
|
/* SDCC */
|
||||||
|
#define SDC1_HDRV_PULL_CTL (TLMM_BASE_ADDR + 0x10A000)
|
||||||
|
#define SDCC1_BCR (CLK_CTL_BASE + 0x42000) /* block reset*/
|
||||||
|
#define SDCC1_APPS_CBCR (CLK_CTL_BASE + 0x42018) /* branch ontrol */
|
||||||
|
#define SDCC1_AHB_CBCR (CLK_CTL_BASE + 0x4201C)
|
||||||
|
#define SDCC1_CMD_RCGR (CLK_CTL_BASE + 0x42004) /* cmd */
|
||||||
|
#define SDCC1_CFG_RCGR (CLK_CTL_BASE + 0x42008) /* cfg */
|
||||||
|
#define SDCC1_M (CLK_CTL_BASE + 0x4200C) /* m */
|
||||||
|
#define SDCC1_N (CLK_CTL_BASE + 0x42010) /* n */
|
||||||
|
#define SDCC1_D (CLK_CTL_BASE + 0x42014) /* d */
|
||||||
|
|
||||||
|
#define SDC2_HDRV_PULL_CTL (TLMM_BASE_ADDR + 0x109000)
|
||||||
|
#define SDCC2_BCR (CLK_CTL_BASE + 0x43000) /* block reset */
|
||||||
|
#define SDCC2_APPS_CBCR (CLK_CTL_BASE + 0x43018) /* branch control */
|
||||||
|
#define SDCC2_AHB_CBCR (CLK_CTL_BASE + 0x4301C)
|
||||||
|
#define SDCC2_CMD_RCGR (CLK_CTL_BASE + 0x43004) /* cmd */
|
||||||
|
#define SDCC2_CFG_RCGR (CLK_CTL_BASE + 0x43008) /* cfg */
|
||||||
|
#define SDCC2_M (CLK_CTL_BASE + 0x4300C) /* m */
|
||||||
|
#define SDCC2_N (CLK_CTL_BASE + 0x43010) /* n */
|
||||||
|
#define SDCC2_D (CLK_CTL_BASE + 0x43014) /* d */
|
||||||
|
|
||||||
|
/* UART */
|
||||||
|
#define BLSP1_AHB_CBCR (CLK_CTL_BASE + 0x1008)
|
||||||
|
#define BLSP1_UART1_APPS_CBCR (CLK_CTL_BASE + 0x203C)
|
||||||
|
#define BLSP1_UART1_APPS_CMD_RCGR (CLK_CTL_BASE + 0x2044)
|
||||||
|
#define BLSP1_UART1_APPS_CFG_RCGR (CLK_CTL_BASE + 0x2048)
|
||||||
|
#define BLSP1_UART1_APPS_M (CLK_CTL_BASE + 0x204C)
|
||||||
|
#define BLSP1_UART1_APPS_N (CLK_CTL_BASE + 0x2050)
|
||||||
|
#define BLSP1_UART1_APPS_D (CLK_CTL_BASE + 0x2054)
|
||||||
|
#define BLSP1_UART2_APPS_CBCR (CLK_CTL_BASE + 0x302C)
|
||||||
|
#define BLSP1_UART2_APPS_CMD_RCGR (CLK_CTL_BASE + 0x3034)
|
||||||
|
#define BLSP1_UART2_APPS_CFG_RCGR (CLK_CTL_BASE + 0x3038)
|
||||||
|
#define BLSP1_UART2_APPS_M (CLK_CTL_BASE + 0x303C)
|
||||||
|
#define BLSP1_UART2_APPS_N (CLK_CTL_BASE + 0x3040)
|
||||||
|
#define BLSP1_UART2_APPS_D (CLK_CTL_BASE + 0x3044)
|
||||||
|
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
#define USB_HS_BCR (CLK_CTL_BASE + 0x41000)
|
||||||
|
#define USB_HS_SYSTEM_CBCR (CLK_CTL_BASE + 0x41004)
|
||||||
|
#define USB_HS_AHB_CBCR (CLK_CTL_BASE + 0x41008)
|
||||||
|
#define USB_HS_SYSTEM_CMD_RCGR (CLK_CTL_BASE + 0x41010)
|
||||||
|
#define USB_HS_SYSTEM_CFG_RCGR (CLK_CTL_BASE + 0x41014)
|
||||||
|
|
||||||
|
|
||||||
|
/* RPMB send receive buffer needs to be mapped
|
||||||
|
* as device memory, define the start address
|
||||||
|
* and size in MB
|
||||||
|
*/
|
||||||
|
#define RPMB_SND_RCV_BUF 0x90000000
|
||||||
|
#define RPMB_SND_RCV_BUF_SZ 0x1
|
||||||
|
|
||||||
|
/* QSEECOM: Secure app region notification */
|
||||||
|
#define APP_REGION_ADDR 0x86000000
|
||||||
|
#define APP_REGION_SIZE 0x300000
|
||||||
|
|
||||||
|
/* MDSS */
|
||||||
|
#define MIPI_DSI_BASE (0x1A98000)
|
||||||
|
#define MIPI_DSI0_BASE MIPI_DSI_BASE
|
||||||
|
#define MIPI_DSI1_BASE (0x1AA0000)
|
||||||
|
#define DSI0_PHY_BASE (0x1A98500)
|
||||||
|
#define DSI1_PHY_BASE (0x1AA0500)
|
||||||
|
#define DSI0_PLL_BASE (0x1A98300)
|
||||||
|
#define DSI1_PLL_BASE DSI0_PLL_BASE
|
||||||
|
#define REG_DSI(off) (MIPI_DSI_BASE + 0x04 + (off))
|
||||||
|
#define MDP_BASE (0x1A00000)
|
||||||
|
#define REG_MDP(off) (MDP_BASE + (off))
|
||||||
|
#define MDP_HW_REV REG_MDP(0x1000)
|
||||||
|
#define MDP_VP_0_VIG_0_BASE REG_MDP(0x5000)
|
||||||
|
#define MDP_VP_0_VIG_1_BASE REG_MDP(0x7000)
|
||||||
|
#define MDP_VP_0_RGB_0_BASE REG_MDP(0x15000)
|
||||||
|
#define MDP_VP_0_RGB_1_BASE REG_MDP(0x17000)
|
||||||
|
#define MDP_VP_0_DMA_0_BASE REG_MDP(0x25000)
|
||||||
|
#define MDP_VP_0_DMA_1_BASE REG_MDP(0x27000)
|
||||||
|
#define MDP_VP_0_MIXER_0_BASE REG_MDP(0x45000)
|
||||||
|
#define MDP_VP_0_MIXER_1_BASE REG_MDP(0x46000)
|
||||||
|
#define MDP_DISP_INTF_SEL REG_MDP(0x1004)
|
||||||
|
#define MDP_VIDEO_INTF_UNDERFLOW_CTL REG_MDP(0x12E0)
|
||||||
|
#define MDP_UPPER_NEW_ROI_PRIOR_RO_START REG_MDP(0x11EC)
|
||||||
|
#define MDP_LOWER_NEW_ROI_PRIOR_TO_START REG_MDP(0x13F8)
|
||||||
|
#define MDP_CTL_0_BASE REG_MDP(0x2000)
|
||||||
|
#define MDP_CTL_1_BASE REG_MDP(0x2200)
|
||||||
|
#define MDP_CLK_CTRL0 REG_MDP(0x012AC)
|
||||||
|
#define MDP_CLK_CTRL1 REG_MDP(0x012B4)
|
||||||
|
#define MDP_CLK_CTRL2 REG_MDP(0x012BC)
|
||||||
|
#define MDP_CLK_CTRL3 REG_MDP(0x013A8)
|
||||||
|
#define MDP_CLK_CTRL4 REG_MDP(0x013B0)
|
||||||
|
#define MDP_CLK_CTRL5 REG_MDP(0x013B8)
|
||||||
|
|
||||||
|
#define MDP_INTF_0_BASE REG_MDP(0x11F00)
|
||||||
|
#define MDP_INTF_1_BASE REG_MDP(0x12700)
|
||||||
|
#define MDP_INTF_2_BASE REG_MDP(0x12F00)
|
||||||
|
|
||||||
|
#define MDP_REG_SPLIT_DISPLAY_EN REG_MDP(0x12f4)
|
||||||
|
#define MDP_REG_SPLIT_DISPLAY_UPPER_PIPE_CTL REG_MDP(0x12F8)
|
||||||
|
#define MDP_REG_SPLIT_DISPLAY_LOWER_PIPE_CTL REG_MDP(0x13F0)
|
||||||
|
|
||||||
|
#define MDP_REG_PPB0_CNTL REG_MDP(0x1420)
|
||||||
|
#define MDP_REG_PPB0_CONFIG REG_MDP(0x1424)
|
||||||
|
|
||||||
|
#define MMSS_MDP_SMP_ALLOC_W_BASE REG_MDP(0x1080)
|
||||||
|
#define MMSS_MDP_SMP_ALLOC_R_BASE REG_MDP(0x1130)
|
||||||
|
|
||||||
|
#define MDP_QOS_REMAPPER_CLASS_0 REG_MDP(0x11E0)
|
||||||
|
|
||||||
|
#define VBIF_VBIF_DDR_FORCE_CLK_ON REG_MDP(0xc8004)
|
||||||
|
#define VBIF_VBIF_DDR_OUT_MAX_BURST REG_MDP(0xc80D8)
|
||||||
|
#define VBIF_VBIF_DDR_ARB_CTRL REG_MDP(0xc80F0)
|
||||||
|
#define VBIF_VBIF_DDR_RND_RBN_QOS_ARB REG_MDP(0xc8124)
|
||||||
|
#define VBIF_VBIF_DDR_AXI_AMEMTYPE_CONF0 REG_MDP(0xc8160)
|
||||||
|
#define VBIF_VBIF_DDR_AXI_AMEMTYPE_CONF1 REG_MDP(0xc8164)
|
||||||
|
#define VBIF_VBIF_DDR_OUT_AOOO_AXI_EN REG_MDP(0xc8178)
|
||||||
|
#define VBIF_VBIF_DDR_OUT_AX_AOOO REG_MDP(0xc817C)
|
||||||
|
#define VBIF_VBIF_IN_RD_LIM_CONF0 REG_MDP(0xc80B0)
|
||||||
|
#define VBIF_VBIF_IN_RD_LIM_CONF1 REG_MDP(0xc80B4)
|
||||||
|
#define VBIF_VBIF_IN_RD_LIM_CONF2 REG_MDP(0xc80B8)
|
||||||
|
#define VBIF_VBIF_IN_RD_LIM_CONF3 REG_MDP(0xc80BC)
|
||||||
|
#define VBIF_VBIF_IN_WR_LIM_CONF0 REG_MDP(0xc80C0)
|
||||||
|
#define VBIF_VBIF_IN_WR_LIM_CONF1 REG_MDP(0xc80C4)
|
||||||
|
#define VBIF_VBIF_IN_WR_LIM_CONF2 REG_MDP(0xc80C8)
|
||||||
|
#define VBIF_VBIF_IN_WR_LIM_CONF3 REG_MDP(0xc80CC)
|
||||||
|
#define VBIF_VBIF_ABIT_SHORT REG_MDP(0xc8070)
|
||||||
|
#define VBIF_VBIF_ABIT_SHORT_CONF REG_MDP(0xc8074)
|
||||||
|
#define VBIF_VBIF_GATE_OFF_WRREQ_EN REG_MDP(0xc80A8)
|
||||||
|
|
||||||
|
#define SOFT_RESET 0x118
|
||||||
|
#define CLK_CTRL 0x11C
|
||||||
|
#define TRIG_CTRL 0x084
|
||||||
|
#define CTRL 0x004
|
||||||
|
#define COMMAND_MODE_DMA_CTRL 0x03C
|
||||||
|
#define COMMAND_MODE_MDP_CTRL 0x040
|
||||||
|
#define COMMAND_MODE_MDP_DCS_CMD_CTRL 0x044
|
||||||
|
#define COMMAND_MODE_MDP_STREAM0_CTRL 0x058
|
||||||
|
#define COMMAND_MODE_MDP_STREAM0_TOTAL 0x05C
|
||||||
|
#define COMMAND_MODE_MDP_STREAM1_CTRL 0x060
|
||||||
|
#define COMMAND_MODE_MDP_STREAM1_TOTAL 0x064
|
||||||
|
#define ERR_INT_MASK0 0x10C
|
||||||
|
|
||||||
|
#define LANE_CTL 0x0AC
|
||||||
|
#define LANE_SWAP_CTL 0x0B0
|
||||||
|
#define TIMING_CTL 0x0C4
|
||||||
|
|
||||||
|
#define VIDEO_MODE_ACTIVE_H 0x024
|
||||||
|
#define VIDEO_MODE_ACTIVE_V 0x028
|
||||||
|
#define VIDEO_MODE_TOTAL 0x02C
|
||||||
|
#define VIDEO_MODE_HSYNC 0x030
|
||||||
|
#define VIDEO_MODE_VSYNC 0x034
|
||||||
|
#define VIDEO_MODE_VSYNC_VPOS 0x038
|
||||||
|
|
||||||
|
#define DMA_CMD_OFFSET 0x048
|
||||||
|
#define DMA_CMD_LENGTH 0x04C
|
||||||
|
|
||||||
|
#define INT_CTRL 0x110
|
||||||
|
#define CMD_MODE_DMA_SW_TRIGGER 0x090
|
||||||
|
|
||||||
|
#define EOT_PACKET_CTRL 0x0CC
|
||||||
|
#define MISR_CMD_CTRL 0x0A0
|
||||||
|
#define MISR_VIDEO_CTRL 0x0A4
|
||||||
|
#define VIDEO_MODE_CTRL 0x010
|
||||||
|
#define HS_TIMER_CTRL 0x0BC
|
||||||
|
|
||||||
|
#define TCSR_TZ_WONCE 0x193D000
|
||||||
|
#define TCSR_BOOT_MISC_DETECT 0x193D100
|
||||||
|
|
||||||
|
#define BOOT_ROM_BASE 0x00100000
|
||||||
|
#define BOOT_ROM_END 0x00124000 /* Crashes when reading more */
|
||||||
|
#endif
|
68
MSM8916Pkg/Include/Platform/irqs.h
Normal file
68
MSM8916Pkg/Include/Platform/irqs.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials provided
|
||||||
|
* with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __IRQS_MSM8916_H
|
||||||
|
#define __IRQS_MSM8916_H
|
||||||
|
|
||||||
|
/* MSM ACPU Interrupt Numbers */
|
||||||
|
|
||||||
|
/* 0-15: STI/SGI (software triggered/generated interrupts)
|
||||||
|
* 16-31: PPI (private peripheral interrupts)
|
||||||
|
* 32+: SPI (shared peripheral interrupts)
|
||||||
|
*/
|
||||||
|
int qtmr_irq();
|
||||||
|
|
||||||
|
#define GIC_PPI_START 16
|
||||||
|
#define GIC_SPI_START 32
|
||||||
|
|
||||||
|
#define INT_QTMR_NON_SECURE_PHY_TIMER_EXP (GIC_PPI_START + 3)
|
||||||
|
#define INT_QTMR_VIRTUAL_TIMER_EXP (GIC_PPI_START + 4)
|
||||||
|
|
||||||
|
#define INT_QTMR_FRM_0_PHYSICAL_TIMER_EXP qtmr_irq()
|
||||||
|
#define INT_QTMR_FRM_0_PHYSICAL_TIMER_EXP_8x16 (GIC_SPI_START + 8)
|
||||||
|
#define INT_QTMR_FRM_0_PHYSICAL_TIMER_EXP_8x39 (GIC_SPI_START + 257)
|
||||||
|
#define SDCC1_PWRCTL_IRQ (GIC_SPI_START + 138)
|
||||||
|
#define SDCC2_PWRCTL_IRQ (GIC_SPI_START + 221)
|
||||||
|
|
||||||
|
#define USB1_HS_BAM_IRQ (GIC_SPI_START + 135)
|
||||||
|
#define USB1_HS_IRQ (GIC_SPI_START + 134)
|
||||||
|
|
||||||
|
/* Retrofit universal macro names */
|
||||||
|
#define INT_USB_HS USB1_HS_IRQ
|
||||||
|
|
||||||
|
#define EE0_KRAIT_HLOS_SPMI_PERIPH_IRQ (GIC_SPI_START + 190)
|
||||||
|
|
||||||
|
#define NR_MSM_IRQS 256
|
||||||
|
#define NR_GPIO_IRQS 173
|
||||||
|
#define NR_BOARD_IRQS 0
|
||||||
|
|
||||||
|
#define NR_IRQS (NR_MSM_IRQS + NR_GPIO_IRQS + \
|
||||||
|
NR_BOARD_IRQS)
|
||||||
|
|
||||||
|
#define BLSP_QUP_IRQ(blsp_id, qup_id) (GIC_SPI_START + 95 + qup_id)
|
||||||
|
#endif /* __IRQS_MSM8916_H */
|
35
MSM8916Pkg/Include/Protocol/QcomBam.h
Normal file
35
MSM8916Pkg/Include/Protocol/QcomBam.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef __QCOM_PROTOCOL_BAM_H__
|
||||||
|
#define __QCOM_PROTOCOL_BAM_H__
|
||||||
|
|
||||||
|
#include <Chipset/bam.h>
|
||||||
|
|
||||||
|
#define QCOM_BAM_PROTOCOL_GUID \
|
||||||
|
{ 0xacdd545a, 0xf1f6, 0x4272, { 0x81, 0xc5, 0x04, 0x93, 0xe3, 0x58, 0x05, 0x32 } }
|
||||||
|
|
||||||
|
typedef struct _QCOM_BAM_PROTOCOL QCOM_BAM_PROTOCOL;
|
||||||
|
|
||||||
|
typedef void (EFIAPI *bam_init_t)(struct bam_instance *bam);
|
||||||
|
typedef void (EFIAPI *bam_sys_pipe_init_t)(struct bam_instance *bam, uint8_t pipe_num);
|
||||||
|
typedef int (EFIAPI *bam_pipe_fifo_init_t)(struct bam_instance *bam, uint8_t pipe_num);
|
||||||
|
typedef struct cmd_element* (EFIAPI *bam_add_cmd_element_t)(struct cmd_element *ptr, uint32_t addr, uint32_t data, enum bam_ce_cmd_t cmd_type);
|
||||||
|
typedef int (EFIAPI *bam_add_desc_t)(struct bam_instance *bam, unsigned int pipe_num, unsigned char *data_ptr, unsigned int data_len, unsigned flags);
|
||||||
|
typedef int (EFIAPI *bam_add_one_desc_t)(struct bam_instance *bam, unsigned int pipe_num, unsigned char*, uint32_t len, uint8_t flags);
|
||||||
|
typedef void (EFIAPI *bam_sys_gen_event_t)(struct bam_instance *bam, uint8_t pipe_num, unsigned int num_desc);
|
||||||
|
typedef int (EFIAPI *bam_wait_for_interrupt_t)(struct bam_instance *bam, uint8_t pipe_num, enum p_int_type interrupt);
|
||||||
|
typedef void (EFIAPI *bam_read_offset_update_t)(struct bam_instance *bam, unsigned int pipe_num);
|
||||||
|
|
||||||
|
struct _QCOM_BAM_PROTOCOL {
|
||||||
|
bam_init_t bam_init;
|
||||||
|
bam_sys_pipe_init_t bam_sys_pipe_init;
|
||||||
|
bam_pipe_fifo_init_t bam_pipe_fifo_init;
|
||||||
|
bam_add_cmd_element_t bam_add_cmd_element;
|
||||||
|
bam_add_desc_t bam_add_desc;
|
||||||
|
bam_add_one_desc_t bam_add_one_desc;
|
||||||
|
bam_sys_gen_event_t bam_sys_gen_event;
|
||||||
|
bam_wait_for_interrupt_t bam_wait_for_interrupt;
|
||||||
|
bam_read_offset_update_t bam_read_offset_update;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern EFI_GUID gQcomBamProtocolGuid;
|
||||||
|
|
||||||
|
#endif
|
41
MSM8916Pkg/Include/Protocol/QcomClock.h
Normal file
41
MSM8916Pkg/Include/Protocol/QcomClock.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#ifndef __QCOM_PROTOCOL_CLOCK_H__
|
||||||
|
#define __QCOM_PROTOCOL_CLOCK_H__
|
||||||
|
|
||||||
|
#include <Chipset/clock.h>
|
||||||
|
|
||||||
|
#define QCOM_CLOCK_PROTOCOL_GUID \
|
||||||
|
{ \
|
||||||
|
0x4fcc91c2, 0x9c4f, 0x4e3c, \
|
||||||
|
{ \
|
||||||
|
0xa6, 0x73, 0xc6, 0xdf, 0x62, 0xe0, 0x41, 0xd5 \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct _QCOM_CLOCK_PROTOCOL QCOM_CLOCK_PROTOCOL;
|
||||||
|
|
||||||
|
typedef struct clk *(EFIAPI *clk_get_t)(const char *id);
|
||||||
|
typedef int(EFIAPI *clk_enable_t)(struct clk *clk);
|
||||||
|
typedef void(EFIAPI *clk_disable_t)(struct clk *clk);
|
||||||
|
typedef unsigned long(EFIAPI *clk_get_rate_t)(struct clk *clk);
|
||||||
|
typedef int(EFIAPI *clk_set_rate_t)(struct clk *clk, unsigned long rate);
|
||||||
|
typedef int(EFIAPI *clk_set_parent_t)(struct clk *clk, struct clk *parent);
|
||||||
|
typedef struct clk *(EFIAPI *clk_get_parent_t)(struct clk *clk);
|
||||||
|
typedef int(EFIAPI *clk_get_set_enable_t)(
|
||||||
|
char *id, unsigned long rate, bool enable);
|
||||||
|
typedef int(EFIAPI *clk_reset_t)(struct clk *clk, enum clk_reset_action);
|
||||||
|
|
||||||
|
struct _QCOM_CLOCK_PROTOCOL {
|
||||||
|
clk_get_t clk_get;
|
||||||
|
clk_enable_t clk_enable;
|
||||||
|
clk_disable_t clk_disable;
|
||||||
|
clk_get_rate_t clk_get_rate;
|
||||||
|
clk_set_rate_t clk_set_rate;
|
||||||
|
clk_set_parent_t clk_set_parent;
|
||||||
|
clk_get_parent_t clk_get_parent;
|
||||||
|
clk_get_set_enable_t clk_get_set_enable;
|
||||||
|
clk_reset_t clk_reset;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern EFI_GUID gQcomClockProtocolGuid;
|
||||||
|
|
||||||
|
#endif
|
14
MSM8916Pkg/Include/Resources/FbColor.h
Normal file
14
MSM8916Pkg/Include/Resources/FbColor.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef _FB_COLOR_H_
|
||||||
|
#define _FB_COLOR_H_
|
||||||
|
|
||||||
|
#define FB_BGRA8888_BLACK 0xff000000
|
||||||
|
#define FB_BGRA8888_WHITE 0xffffffff
|
||||||
|
#define FB_BGRA8888_CYAN 0xff00ffff
|
||||||
|
#define FB_BGRA8888_BLUE 0xff0000ff
|
||||||
|
#define FB_BGRA8888_SILVER 0xffc0c0c0
|
||||||
|
#define FB_BGRA8888_YELLOW 0xffffff00
|
||||||
|
#define FB_BGRA8888_ORANGE 0xffffa500
|
||||||
|
#define FB_BGRA8888_RED 0xffff0000
|
||||||
|
#define FB_BGRA8888_GREEN 0xff00ff00
|
||||||
|
|
||||||
|
#endif
|
136
MSM8916Pkg/Include/Resources/font5x12.h
Normal file
136
MSM8916Pkg/Include/Resources/font5x12.h
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2008 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _FONT_5x12_DATA_
|
||||||
|
#define _FONT_5x12_DATA_
|
||||||
|
|
||||||
|
#define FONT_WIDTH 5
|
||||||
|
#define FONT_HEIGHT 12
|
||||||
|
|
||||||
|
#define SCALE_FACTOR 2
|
||||||
|
|
||||||
|
unsigned font5x12[] = {
|
||||||
|
0x00000000, 0x00000000,
|
||||||
|
0x08421080, 0x00020084,
|
||||||
|
0x00052940, 0x00000000,
|
||||||
|
0x15f52800, 0x0000295f,
|
||||||
|
0x1c52f880, 0x00023e94,
|
||||||
|
0x08855640, 0x0004d542,
|
||||||
|
0x04528800, 0x000b2725,
|
||||||
|
0x00021080, 0x00000000,
|
||||||
|
0x04211088, 0x00821042,
|
||||||
|
0x10841082, 0x00221108,
|
||||||
|
0x09575480, 0x00000000,
|
||||||
|
0x3e420000, 0x00000084,
|
||||||
|
0x00000000, 0x00223000,
|
||||||
|
0x3e000000, 0x00000000,
|
||||||
|
0x00000000, 0x00471000,
|
||||||
|
0x08844200, 0x00008442,
|
||||||
|
0x2318a880, 0x00022a31,
|
||||||
|
0x08429880, 0x000f9084,
|
||||||
|
0x1108c5c0, 0x000f8444,
|
||||||
|
0x1c4443e0, 0x00074610,
|
||||||
|
0x14a62100, 0x000423e9,
|
||||||
|
0x26d087e0, 0x00074610,
|
||||||
|
0x1e10c5c0, 0x00074631,
|
||||||
|
0x088443e0, 0x00010844,
|
||||||
|
0x1d18c5c0, 0x00074631,
|
||||||
|
0x3d18c5c0, 0x00074610,
|
||||||
|
0x08e20000, 0x00471000,
|
||||||
|
0x08e20000, 0x00223000,
|
||||||
|
0x02222200, 0x00082082,
|
||||||
|
0x01f00000, 0x000003e0,
|
||||||
|
0x20820820, 0x00008888,
|
||||||
|
0x1108c5c0, 0x00020084,
|
||||||
|
0x2b98c5c0, 0x000f05b5,
|
||||||
|
0x2318a880, 0x0008c63f,
|
||||||
|
0x1d2949e0, 0x0007ca52,
|
||||||
|
0x0210c5c0, 0x00074421,
|
||||||
|
0x252949e0, 0x0007ca52,
|
||||||
|
0x1e1087e0, 0x000f8421,
|
||||||
|
0x1e1087e0, 0x00008421,
|
||||||
|
0x0210c5c0, 0x00074639,
|
||||||
|
0x3f18c620, 0x0008c631,
|
||||||
|
0x084211c0, 0x00071084,
|
||||||
|
0x10842380, 0x00032508,
|
||||||
|
0x0654c620, 0x0008c525,
|
||||||
|
0x02108420, 0x000f8421,
|
||||||
|
0x2b5dc620, 0x0008c631,
|
||||||
|
0x2b59ce20, 0x0008c739,
|
||||||
|
0x2318c5c0, 0x00074631,
|
||||||
|
0x1f18c5e0, 0x00008421,
|
||||||
|
0x2318c5c0, 0x01075631,
|
||||||
|
0x1f18c5e0, 0x0008c525,
|
||||||
|
0x1c10c5c0, 0x00074610,
|
||||||
|
0x084213e0, 0x00021084,
|
||||||
|
0x2318c620, 0x00074631,
|
||||||
|
0x1518c620, 0x0002114a,
|
||||||
|
0x2b18c620, 0x000556b5,
|
||||||
|
0x08a54620, 0x0008c54a,
|
||||||
|
0x08a54620, 0x00021084,
|
||||||
|
0x088443e0, 0x000f8442,
|
||||||
|
0x0421084e, 0x00e10842,
|
||||||
|
0x08210420, 0x00084108,
|
||||||
|
0x1084210e, 0x00e42108,
|
||||||
|
0x0008a880, 0x00000000,
|
||||||
|
0x00000000, 0x01f00000,
|
||||||
|
0x00000104, 0x00000000,
|
||||||
|
0x20e00000, 0x000b663e,
|
||||||
|
0x22f08420, 0x0007c631,
|
||||||
|
0x22e00000, 0x00074421,
|
||||||
|
0x23e84200, 0x000f4631,
|
||||||
|
0x22e00000, 0x0007443f,
|
||||||
|
0x1e214980, 0x00010842,
|
||||||
|
0x22e00000, 0x1d187a31,
|
||||||
|
0x26d08420, 0x0008c631,
|
||||||
|
0x08601000, 0x00071084,
|
||||||
|
0x10c02000, 0x0c94a108,
|
||||||
|
0x0a908420, 0x0008a4a3,
|
||||||
|
0x084210c0, 0x00071084,
|
||||||
|
0x2ab00000, 0x0008d6b5,
|
||||||
|
0x26d00000, 0x0008c631,
|
||||||
|
0x22e00000, 0x00074631,
|
||||||
|
0x22f00000, 0x0210be31,
|
||||||
|
0x23e00000, 0x21087a31,
|
||||||
|
0x26d00000, 0x00008421,
|
||||||
|
0x22e00000, 0x00074506,
|
||||||
|
0x04f10800, 0x00064842,
|
||||||
|
0x23100000, 0x000b6631,
|
||||||
|
0x23100000, 0x00022951,
|
||||||
|
0x23100000, 0x000556b5,
|
||||||
|
0x15100000, 0x0008a884,
|
||||||
|
0x23100000, 0x1d185b31,
|
||||||
|
0x11f00000, 0x000f8444,
|
||||||
|
0x06421098, 0x01821084,
|
||||||
|
0x08421080, 0x00021084,
|
||||||
|
0x30421083, 0x00321084,
|
||||||
|
0x0004d640, 0x00000000,
|
||||||
|
0x00000000, 0x00000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
730
MSM8916Pkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
Normal file
730
MSM8916Pkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
Normal file
@ -0,0 +1,730 @@
|
|||||||
|
/** @file
|
||||||
|
FrameBufferBltLib - Library to perform blt operations on a frame buffer.
|
||||||
|
|
||||||
|
Copyright (c) 2007 - 2018, Intel Corporation. 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 <Uefi/UefiBaseType.h>
|
||||||
|
#include <Protocol/GraphicsOutput.h>
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/FrameBufferBltLib.h>
|
||||||
|
|
||||||
|
struct FRAME_BUFFER_CONFIGURE {
|
||||||
|
UINT32 PixelsPerScanLine;
|
||||||
|
UINT32 BytesPerPixel;
|
||||||
|
UINT32 Width;
|
||||||
|
UINT32 Height;
|
||||||
|
UINT8 *FrameBuffer;
|
||||||
|
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
|
||||||
|
EFI_PIXEL_BITMASK PixelMasks;
|
||||||
|
INT8 PixelShl[4]; // R-G-B-Rsvd
|
||||||
|
INT8 PixelShr[4]; // R-G-B-Rsvd
|
||||||
|
UINT8 LineBuffer[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
CONST EFI_PIXEL_BITMASK mRgbPixelMasks = {
|
||||||
|
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000
|
||||||
|
};
|
||||||
|
|
||||||
|
CONST EFI_PIXEL_BITMASK mBgrPixelMasks = {
|
||||||
|
0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initialize the bit mask in frame buffer configure.
|
||||||
|
|
||||||
|
@param BitMask The bit mask of pixel.
|
||||||
|
@param BytesPerPixel Size in bytes of pixel.
|
||||||
|
@param PixelShl Left shift array.
|
||||||
|
@param PixelShr Right shift array.
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
FrameBufferBltLibConfigurePixelFormat (
|
||||||
|
IN CONST EFI_PIXEL_BITMASK *BitMask,
|
||||||
|
OUT UINT32 *BytesPerPixel,
|
||||||
|
OUT INT8 *PixelShl,
|
||||||
|
OUT INT8 *PixelShr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Index;
|
||||||
|
UINT32 *Masks;
|
||||||
|
UINT32 MergedMasks;
|
||||||
|
|
||||||
|
ASSERT (BytesPerPixel != NULL);
|
||||||
|
|
||||||
|
MergedMasks = 0;
|
||||||
|
Masks = (UINT32*) BitMask;
|
||||||
|
for (Index = 0; Index < 3; Index++) {
|
||||||
|
ASSERT ((MergedMasks & Masks[Index]) == 0);
|
||||||
|
|
||||||
|
PixelShl[Index] = (INT8) HighBitSet32 (Masks[Index]) - 23 + (Index * 8);
|
||||||
|
if (PixelShl[Index] < 0) {
|
||||||
|
PixelShr[Index] = -PixelShl[Index];
|
||||||
|
PixelShl[Index] = 0;
|
||||||
|
} else {
|
||||||
|
PixelShr[Index] = 0;
|
||||||
|
}
|
||||||
|
DEBUG ((DEBUG_INFO, "%d: shl:%d shr:%d mask:%x\n", Index,
|
||||||
|
PixelShl[Index], PixelShr[Index], Masks[Index]));
|
||||||
|
|
||||||
|
MergedMasks = (UINT32) (MergedMasks | Masks[Index]);
|
||||||
|
}
|
||||||
|
MergedMasks = (UINT32) (MergedMasks | Masks[3]);
|
||||||
|
|
||||||
|
ASSERT (MergedMasks != 0);
|
||||||
|
*BytesPerPixel = (UINT32) ((HighBitSet32 (MergedMasks) + 7) / 8);
|
||||||
|
DEBUG ((DEBUG_INFO, "Bytes per pixel: %d\n", *BytesPerPixel));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create the configuration for a video frame buffer.
|
||||||
|
|
||||||
|
The configuration is returned in the caller provided buffer.
|
||||||
|
|
||||||
|
@param[in] FrameBuffer Pointer to the start of the frame buffer.
|
||||||
|
@param[in] FrameBufferInfo Describes the frame buffer characteristics.
|
||||||
|
@param[in,out] Configure The created configuration information.
|
||||||
|
@param[in,out] ConfigureSize Size of the configuration information.
|
||||||
|
|
||||||
|
@retval RETURN_SUCCESS The configuration was successful created.
|
||||||
|
@retval RETURN_BUFFER_TOO_SMALL The Configure is to too small. The required
|
||||||
|
size is returned in ConfigureSize.
|
||||||
|
@retval RETURN_UNSUPPORTED The requested mode is not supported by
|
||||||
|
this implementaion.
|
||||||
|
|
||||||
|
**/
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
FrameBufferBltConfigure (
|
||||||
|
IN VOID *FrameBuffer,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *FrameBufferInfo,
|
||||||
|
IN OUT FRAME_BUFFER_CONFIGURE *Configure,
|
||||||
|
IN OUT UINTN *ConfigureSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST EFI_PIXEL_BITMASK *BitMask;
|
||||||
|
UINT32 BytesPerPixel;
|
||||||
|
INT8 PixelShl[4];
|
||||||
|
INT8 PixelShr[4];
|
||||||
|
|
||||||
|
if (ConfigureSize == NULL) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (FrameBufferInfo->PixelFormat) {
|
||||||
|
case PixelRedGreenBlueReserved8BitPerColor:
|
||||||
|
BitMask = &mRgbPixelMasks;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PixelBlueGreenRedReserved8BitPerColor:
|
||||||
|
BitMask = &mBgrPixelMasks;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PixelBitMask:
|
||||||
|
BitMask = &FrameBufferInfo->PixelInformation;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PixelBltOnly:
|
||||||
|
ASSERT (FrameBufferInfo->PixelFormat != PixelBltOnly);
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ASSERT (FALSE);
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FrameBufferInfo->PixelsPerScanLine < FrameBufferInfo->HorizontalResolution) {
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameBufferBltLibConfigurePixelFormat (BitMask, &BytesPerPixel, PixelShl, PixelShr);
|
||||||
|
|
||||||
|
if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)
|
||||||
|
+ FrameBufferInfo->HorizontalResolution * BytesPerPixel) {
|
||||||
|
*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE)
|
||||||
|
+ FrameBufferInfo->HorizontalResolution * BytesPerPixel;
|
||||||
|
return RETURN_BUFFER_TOO_SMALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Configure == NULL) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyMem (&Configure->PixelMasks, BitMask, sizeof (*BitMask));
|
||||||
|
CopyMem (Configure->PixelShl, PixelShl, sizeof (PixelShl));
|
||||||
|
CopyMem (Configure->PixelShr, PixelShr, sizeof (PixelShr));
|
||||||
|
|
||||||
|
if (FrameBufferInfo->HorizontalResolution < 1080) {
|
||||||
|
Configure->BytesPerPixel = BytesPerPixel - (BytesPerPixel / 4); // Defaults to ex. 24bpp for 32bpp and 3bpp for 4bpp usecases
|
||||||
|
} else {
|
||||||
|
Configure->BytesPerPixel = BytesPerPixel;
|
||||||
|
}
|
||||||
|
|
||||||
|
Configure->PixelFormat = FrameBufferInfo->PixelFormat;
|
||||||
|
Configure->FrameBuffer = (UINT8*) FrameBuffer;
|
||||||
|
Configure->Width = FrameBufferInfo->HorizontalResolution;
|
||||||
|
Configure->Height = FrameBufferInfo->VerticalResolution;
|
||||||
|
Configure->PixelsPerScanLine = FrameBufferInfo->PixelsPerScanLine;
|
||||||
|
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Performs a UEFI Graphics Output Protocol Blt Video Fill.
|
||||||
|
|
||||||
|
@param[in] Configure Pointer to a configuration which was successfully
|
||||||
|
created by FrameBufferBltConfigure ().
|
||||||
|
@param[in] Color Color to fill the region with.
|
||||||
|
@param[in] DestinationX X location to start fill operation.
|
||||||
|
@param[in] DestinationY Y location to start fill operation.
|
||||||
|
@param[in] Width Width (in pixels) to fill.
|
||||||
|
@param[in] Height Height to fill.
|
||||||
|
|
||||||
|
@retval RETURN_INVALID_PARAMETER Invalid parameter was passed in.
|
||||||
|
@retval RETURN_SUCCESS The video was filled successfully.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
FrameBufferBltLibVideoFill (
|
||||||
|
IN FRAME_BUFFER_CONFIGURE *Configure,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Color,
|
||||||
|
IN UINTN DestinationX,
|
||||||
|
IN UINTN DestinationY,
|
||||||
|
IN UINTN Width,
|
||||||
|
IN UINTN Height
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN IndexX;
|
||||||
|
UINTN IndexY;
|
||||||
|
UINT8 *Destination;
|
||||||
|
UINT8 Uint8;
|
||||||
|
UINT32 Uint32;
|
||||||
|
UINT64 WideFill;
|
||||||
|
BOOLEAN UseWideFill;
|
||||||
|
BOOLEAN LineBufferReady;
|
||||||
|
UINTN Offset;
|
||||||
|
UINTN WidthInBytes;
|
||||||
|
UINTN SizeInBytes;
|
||||||
|
|
||||||
|
//
|
||||||
|
// BltBuffer to Video: Source is BltBuffer, destination is Video
|
||||||
|
//
|
||||||
|
if (DestinationY + Height > Configure->Height) {
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill: Past screen (Y)\n"));
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DestinationX + Width > Configure->Width) {
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill: Past screen (X)\n"));
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Width == 0 || Height == 0) {
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill: Width or Height is 0\n"));
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
WidthInBytes = Width * Configure->BytesPerPixel;
|
||||||
|
|
||||||
|
Uint32 = *(UINT32*) Color;
|
||||||
|
WideFill =
|
||||||
|
(UINT32) (
|
||||||
|
(((Uint32 << Configure->PixelShl[0]) >> Configure->PixelShr[0]) &
|
||||||
|
Configure->PixelMasks.RedMask) |
|
||||||
|
(((Uint32 << Configure->PixelShl[1]) >> Configure->PixelShr[1]) &
|
||||||
|
Configure->PixelMasks.GreenMask) |
|
||||||
|
(((Uint32 << Configure->PixelShl[2]) >> Configure->PixelShr[2]) &
|
||||||
|
Configure->PixelMasks.BlueMask)
|
||||||
|
);
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill: color=0x%x, wide-fill=0x%x\n",
|
||||||
|
Uint32, WideFill));
|
||||||
|
|
||||||
|
//
|
||||||
|
// If the size of the pixel data evenly divides the sizeof
|
||||||
|
// WideFill, then a wide fill operation can be used
|
||||||
|
//
|
||||||
|
UseWideFill = TRUE;
|
||||||
|
if ((sizeof (WideFill) % Configure->BytesPerPixel) == 0) {
|
||||||
|
for (IndexX = Configure->BytesPerPixel; IndexX < sizeof (WideFill); IndexX++) {
|
||||||
|
((UINT8*) &WideFill)[IndexX] = ((UINT8*) &WideFill)[IndexX % Configure->BytesPerPixel];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// If all the bytes in the pixel are the same value, then use
|
||||||
|
// a wide fill operation.
|
||||||
|
//
|
||||||
|
for (
|
||||||
|
IndexX = 1, Uint8 = ((UINT8*) &WideFill)[0];
|
||||||
|
IndexX < Configure->BytesPerPixel;
|
||||||
|
IndexX++) {
|
||||||
|
if (Uint8 != ((UINT8*) &WideFill)[IndexX]) {
|
||||||
|
UseWideFill = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (UseWideFill) {
|
||||||
|
SetMem (&WideFill, sizeof (WideFill), Uint8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (UseWideFill && (DestinationX == 0) && (Width == Configure->PixelsPerScanLine)) {
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill (wide, one-shot)\n"));
|
||||||
|
Offset = DestinationY * Configure->PixelsPerScanLine;
|
||||||
|
Offset = Configure->BytesPerPixel * Offset;
|
||||||
|
Destination = Configure->FrameBuffer + Offset;
|
||||||
|
SizeInBytes = WidthInBytes * Height;
|
||||||
|
if (SizeInBytes >= 8) {
|
||||||
|
SetMem32 (Destination, SizeInBytes & ~3, (UINT32) WideFill);
|
||||||
|
Destination += SizeInBytes & ~3;
|
||||||
|
SizeInBytes &= 3;
|
||||||
|
}
|
||||||
|
if (SizeInBytes > 0) {
|
||||||
|
SetMem (Destination, SizeInBytes, (UINT8) (UINTN) WideFill);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LineBufferReady = FALSE;
|
||||||
|
for (IndexY = DestinationY; IndexY < (Height + DestinationY); IndexY++) {
|
||||||
|
Offset = (IndexY * Configure->PixelsPerScanLine) + DestinationX;
|
||||||
|
Offset = Configure->BytesPerPixel * Offset;
|
||||||
|
Destination = Configure->FrameBuffer + Offset;
|
||||||
|
|
||||||
|
if (UseWideFill && (((UINTN) Destination & 7) == 0)) {
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill (wide)\n"));
|
||||||
|
SizeInBytes = WidthInBytes;
|
||||||
|
if (SizeInBytes >= 8) {
|
||||||
|
SetMem64 (Destination, SizeInBytes & ~7, WideFill);
|
||||||
|
Destination += SizeInBytes & ~7;
|
||||||
|
SizeInBytes &= 7;
|
||||||
|
}
|
||||||
|
if (SizeInBytes > 0) {
|
||||||
|
CopyMem (Destination, &WideFill, SizeInBytes);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "VideoFill (not wide)\n"));
|
||||||
|
if (!LineBufferReady) {
|
||||||
|
CopyMem (Configure->LineBuffer, &WideFill, Configure->BytesPerPixel);
|
||||||
|
for (IndexX = 1; IndexX < Width; ) {
|
||||||
|
CopyMem (
|
||||||
|
(Configure->LineBuffer + (IndexX * Configure->BytesPerPixel)),
|
||||||
|
Configure->LineBuffer,
|
||||||
|
MIN (IndexX, Width - IndexX) * Configure->BytesPerPixel
|
||||||
|
);
|
||||||
|
IndexX += MIN (IndexX, Width - IndexX);
|
||||||
|
}
|
||||||
|
LineBufferReady = TRUE;
|
||||||
|
}
|
||||||
|
CopyMem (Destination, Configure->LineBuffer, WidthInBytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Performs a UEFI Graphics Output Protocol Blt Video to Buffer operation
|
||||||
|
with extended parameters.
|
||||||
|
|
||||||
|
@param[in] Configure Pointer to a configuration which was successfully
|
||||||
|
created by FrameBufferBltConfigure ().
|
||||||
|
@param[out] BltBuffer Output buffer for pixel color data.
|
||||||
|
@param[in] SourceX X location within video.
|
||||||
|
@param[in] SourceY Y location within video.
|
||||||
|
@param[in] DestinationX X location within BltBuffer.
|
||||||
|
@param[in] DestinationY Y location within BltBuffer.
|
||||||
|
@param[in] Width Width (in pixels).
|
||||||
|
@param[in] Height Height.
|
||||||
|
@param[in] Delta Number of bytes in a row of BltBuffer.
|
||||||
|
|
||||||
|
@retval RETURN_INVALID_PARAMETER Invalid parameter were passed in.
|
||||||
|
@retval RETURN_SUCCESS The Blt operation was performed successfully.
|
||||||
|
**/
|
||||||
|
RETURN_STATUS
|
||||||
|
FrameBufferBltLibVideoToBltBuffer (
|
||||||
|
IN FRAME_BUFFER_CONFIGURE *Configure,
|
||||||
|
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer,
|
||||||
|
IN UINTN SourceX,
|
||||||
|
IN UINTN SourceY,
|
||||||
|
IN UINTN DestinationX,
|
||||||
|
IN UINTN DestinationY,
|
||||||
|
IN UINTN Width,
|
||||||
|
IN UINTN Height,
|
||||||
|
IN UINTN Delta
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN DstY;
|
||||||
|
UINTN SrcY;
|
||||||
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
|
||||||
|
UINT8 *Source;
|
||||||
|
UINT8 *Destination;
|
||||||
|
UINTN IndexX;
|
||||||
|
UINT32 Uint32;
|
||||||
|
UINTN Offset;
|
||||||
|
UINTN WidthInBytes;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Video to BltBuffer: Source is Video, destination is BltBuffer
|
||||||
|
//
|
||||||
|
if (SourceY + Height > Configure->Height) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SourceX + Width > Configure->Width) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Width == 0 || Height == 0) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If Delta is zero, then the entire BltBuffer is being used, so Delta is
|
||||||
|
// the number of bytes in each row of BltBuffer. Since BltBuffer is Width
|
||||||
|
// pixels size, the number of bytes in each row can be computed.
|
||||||
|
//
|
||||||
|
if (Delta == 0) {
|
||||||
|
Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
WidthInBytes = Width * Configure->BytesPerPixel;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Video to BltBuffer: Source is Video, destination is BltBuffer
|
||||||
|
//
|
||||||
|
for (SrcY = SourceY, DstY = DestinationY;
|
||||||
|
DstY < (Height + DestinationY);
|
||||||
|
SrcY++, DstY++) {
|
||||||
|
|
||||||
|
Offset = (SrcY * Configure->PixelsPerScanLine) + SourceX;
|
||||||
|
Offset = Configure->BytesPerPixel * Offset;
|
||||||
|
Source = Configure->FrameBuffer + Offset;
|
||||||
|
|
||||||
|
if (Configure->PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {
|
||||||
|
Destination = (UINT8 *) BltBuffer + (DstY * Delta) + (DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
|
||||||
|
} else {
|
||||||
|
Destination = Configure->LineBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyMem (Destination, Source, WidthInBytes);
|
||||||
|
|
||||||
|
if (Configure->PixelFormat != PixelBlueGreenRedReserved8BitPerColor) {
|
||||||
|
for (IndexX = 0; IndexX < Width; IndexX++) {
|
||||||
|
Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)
|
||||||
|
((UINT8 *) BltBuffer + (DstY * Delta) +
|
||||||
|
(DestinationX + IndexX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
|
||||||
|
Uint32 = *(UINT32*) (Configure->LineBuffer + (IndexX * Configure->BytesPerPixel));
|
||||||
|
*(UINT32*) Blt =
|
||||||
|
(UINT32) (
|
||||||
|
(((Uint32 & Configure->PixelMasks.RedMask) >>
|
||||||
|
Configure->PixelShl[0]) << Configure->PixelShr[0]) |
|
||||||
|
(((Uint32 & Configure->PixelMasks.GreenMask) >>
|
||||||
|
Configure->PixelShl[1]) << Configure->PixelShr[1]) |
|
||||||
|
(((Uint32 & Configure->PixelMasks.BlueMask) >>
|
||||||
|
Configure->PixelShl[2]) << Configure->PixelShr[2])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Performs a UEFI Graphics Output Protocol Blt Buffer to Video operation
|
||||||
|
with extended parameters.
|
||||||
|
|
||||||
|
@param[in] Configure Pointer to a configuration which was successfully
|
||||||
|
created by FrameBufferBltConfigure ().
|
||||||
|
@param[in] BltBuffer Output buffer for pixel color data.
|
||||||
|
@param[in] SourceX X location within BltBuffer.
|
||||||
|
@param[in] SourceY Y location within BltBuffer.
|
||||||
|
@param[in] DestinationX X location within video.
|
||||||
|
@param[in] DestinationY Y location within video.
|
||||||
|
@param[in] Width Width (in pixels).
|
||||||
|
@param[in] Height Height.
|
||||||
|
@param[in] Delta Number of bytes in a row of BltBuffer.
|
||||||
|
|
||||||
|
@retval RETURN_INVALID_PARAMETER Invalid parameter were passed in.
|
||||||
|
@retval RETURN_SUCCESS The Blt operation was performed successfully.
|
||||||
|
**/
|
||||||
|
RETURN_STATUS
|
||||||
|
FrameBufferBltLibBufferToVideo (
|
||||||
|
IN FRAME_BUFFER_CONFIGURE *Configure,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer,
|
||||||
|
IN UINTN SourceX,
|
||||||
|
IN UINTN SourceY,
|
||||||
|
IN UINTN DestinationX,
|
||||||
|
IN UINTN DestinationY,
|
||||||
|
IN UINTN Width,
|
||||||
|
IN UINTN Height,
|
||||||
|
IN UINTN Delta
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN DstY;
|
||||||
|
UINTN SrcY;
|
||||||
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
|
||||||
|
UINT8 *Source;
|
||||||
|
UINT8 *Destination;
|
||||||
|
UINTN IndexX;
|
||||||
|
UINT32 Uint32;
|
||||||
|
UINTN Offset;
|
||||||
|
UINTN WidthInBytes;
|
||||||
|
|
||||||
|
//
|
||||||
|
// BltBuffer to Video: Source is BltBuffer, destination is Video
|
||||||
|
//
|
||||||
|
if (DestinationY + Height > Configure->Height) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DestinationX + Width > Configure->Width) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Width == 0 || Height == 0) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If Delta is zero, then the entire BltBuffer is being used, so Delta is
|
||||||
|
// the number of bytes in each row of BltBuffer. Since BltBuffer is Width
|
||||||
|
// pixels size, the number of bytes in each row can be computed.
|
||||||
|
//
|
||||||
|
if (Delta == 0) {
|
||||||
|
Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
WidthInBytes = Width * Configure->BytesPerPixel;
|
||||||
|
|
||||||
|
for (SrcY = SourceY, DstY = DestinationY;
|
||||||
|
SrcY < (Height + SourceY);
|
||||||
|
SrcY++, DstY++) {
|
||||||
|
|
||||||
|
Offset = (DstY * Configure->PixelsPerScanLine) + DestinationX;
|
||||||
|
Offset = Configure->BytesPerPixel * Offset;
|
||||||
|
Destination = Configure->FrameBuffer + Offset;
|
||||||
|
|
||||||
|
if (Configure->PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {
|
||||||
|
Source = (UINT8 *) BltBuffer + (SrcY * Delta);
|
||||||
|
} else {
|
||||||
|
for (IndexX = 0; IndexX < Width; IndexX++) {
|
||||||
|
Blt =
|
||||||
|
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) (
|
||||||
|
(UINT8 *) BltBuffer +
|
||||||
|
(SrcY * Delta) +
|
||||||
|
((SourceX + IndexX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))
|
||||||
|
);
|
||||||
|
Uint32 = *(UINT32*) Blt;
|
||||||
|
*(UINT32*) (Configure->LineBuffer + (IndexX * Configure->BytesPerPixel)) =
|
||||||
|
(UINT32) (
|
||||||
|
(((Uint32 << Configure->PixelShl[0]) >> Configure->PixelShr[0]) &
|
||||||
|
Configure->PixelMasks.RedMask) |
|
||||||
|
(((Uint32 << Configure->PixelShl[1]) >> Configure->PixelShr[1]) &
|
||||||
|
Configure->PixelMasks.GreenMask) |
|
||||||
|
(((Uint32 << Configure->PixelShl[2]) >> Configure->PixelShr[2]) &
|
||||||
|
Configure->PixelMasks.BlueMask)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Source = Configure->LineBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyMem (Destination, Source, WidthInBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Performs a UEFI Graphics Output Protocol Blt Video to Video operation
|
||||||
|
|
||||||
|
@param[in] Configure Pointer to a configuration which was successfully
|
||||||
|
created by FrameBufferBltConfigure ().
|
||||||
|
@param[in] SourceX X location within video.
|
||||||
|
@param[in] SourceY Y location within video.
|
||||||
|
@param[in] DestinationX X location within video.
|
||||||
|
@param[in] DestinationY Y location within video.
|
||||||
|
@param[in] Width Width (in pixels).
|
||||||
|
@param[in] Height Height.
|
||||||
|
|
||||||
|
@retval RETURN_INVALID_PARAMETER Invalid parameter were passed in.
|
||||||
|
@retval RETURN_SUCCESS The Blt operation was performed successfully.
|
||||||
|
**/
|
||||||
|
RETURN_STATUS
|
||||||
|
FrameBufferBltLibVideoToVideo (
|
||||||
|
IN FRAME_BUFFER_CONFIGURE *Configure,
|
||||||
|
IN UINTN SourceX,
|
||||||
|
IN UINTN SourceY,
|
||||||
|
IN UINTN DestinationX,
|
||||||
|
IN UINTN DestinationY,
|
||||||
|
IN UINTN Width,
|
||||||
|
IN UINTN Height
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 *Source;
|
||||||
|
UINT8 *Destination;
|
||||||
|
UINTN Offset;
|
||||||
|
UINTN WidthInBytes;
|
||||||
|
INTN LineStride;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Video to Video: Source is Video, destination is Video
|
||||||
|
//
|
||||||
|
if (SourceY + Height > Configure->Height) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SourceX + Width > Configure->Width) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DestinationY + Height > Configure->Height) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DestinationX + Width > Configure->Width) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Width == 0 || Height == 0) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
WidthInBytes = Width * Configure->BytesPerPixel;
|
||||||
|
|
||||||
|
Offset = (SourceY * Configure->PixelsPerScanLine) + SourceX;
|
||||||
|
Offset = Configure->BytesPerPixel * Offset;
|
||||||
|
Source = Configure->FrameBuffer + Offset;
|
||||||
|
|
||||||
|
Offset = (DestinationY * Configure->PixelsPerScanLine) + DestinationX;
|
||||||
|
Offset = Configure->BytesPerPixel * Offset;
|
||||||
|
Destination = Configure->FrameBuffer + Offset;
|
||||||
|
|
||||||
|
LineStride = Configure->BytesPerPixel * Configure->PixelsPerScanLine;
|
||||||
|
if (Destination > Source) {
|
||||||
|
//
|
||||||
|
// Copy from last line to avoid source is corrupted by copying
|
||||||
|
//
|
||||||
|
Source += Height * LineStride;
|
||||||
|
Destination += Height * LineStride;
|
||||||
|
LineStride = -LineStride;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (Height-- > 0) {
|
||||||
|
CopyMem (Destination, Source, WidthInBytes);
|
||||||
|
|
||||||
|
Source += LineStride;
|
||||||
|
Destination += LineStride;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Performs a UEFI Graphics Output Protocol Blt operation.
|
||||||
|
|
||||||
|
@param[in] Configure Pointer to a configuration which was successfully
|
||||||
|
created by FrameBufferBltConfigure ().
|
||||||
|
@param[in,out] BltBuffer The data to transfer to screen.
|
||||||
|
@param[in] BltOperation The operation to perform.
|
||||||
|
@param[in] SourceX The X coordinate of the source for BltOperation.
|
||||||
|
@param[in] SourceY The Y coordinate of the source for BltOperation.
|
||||||
|
@param[in] DestinationX The X coordinate of the destination for
|
||||||
|
BltOperation.
|
||||||
|
@param[in] DestinationY The Y coordinate of the destination for
|
||||||
|
BltOperation.
|
||||||
|
@param[in] Width The width of a rectangle in the blt rectangle
|
||||||
|
in pixels.
|
||||||
|
@param[in] Height The height of a rectangle in the blt rectangle
|
||||||
|
in pixels.
|
||||||
|
@param[in] Delta Not used for EfiBltVideoFill and
|
||||||
|
EfiBltVideoToVideo operation. If a Delta of 0
|
||||||
|
is used, the entire BltBuffer will be operated
|
||||||
|
on. If a subrectangle of the BltBuffer is
|
||||||
|
used, then Delta represents the number of
|
||||||
|
bytes in a row of the BltBuffer.
|
||||||
|
|
||||||
|
@retval RETURN_INVALID_PARAMETER Invalid parameter were passed in.
|
||||||
|
@retval RETURN_SUCCESS The Blt operation was performed successfully.
|
||||||
|
**/
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
FrameBufferBlt (
|
||||||
|
IN FRAME_BUFFER_CONFIGURE *Configure,
|
||||||
|
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
|
||||||
|
IN UINTN SourceX,
|
||||||
|
IN UINTN SourceY,
|
||||||
|
IN UINTN DestinationX,
|
||||||
|
IN UINTN DestinationY,
|
||||||
|
IN UINTN Width,
|
||||||
|
IN UINTN Height,
|
||||||
|
IN UINTN Delta
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Configure == NULL) {
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (BltOperation) {
|
||||||
|
case EfiBltVideoToBltBuffer:
|
||||||
|
return FrameBufferBltLibVideoToBltBuffer (
|
||||||
|
Configure,
|
||||||
|
BltBuffer,
|
||||||
|
SourceX,
|
||||||
|
SourceY,
|
||||||
|
DestinationX,
|
||||||
|
DestinationY,
|
||||||
|
Width,
|
||||||
|
Height,
|
||||||
|
Delta
|
||||||
|
);
|
||||||
|
|
||||||
|
case EfiBltVideoToVideo:
|
||||||
|
return FrameBufferBltLibVideoToVideo (
|
||||||
|
Configure,
|
||||||
|
SourceX,
|
||||||
|
SourceY,
|
||||||
|
DestinationX,
|
||||||
|
DestinationY,
|
||||||
|
Width,
|
||||||
|
Height
|
||||||
|
);
|
||||||
|
|
||||||
|
case EfiBltVideoFill:
|
||||||
|
return FrameBufferBltLibVideoFill (
|
||||||
|
Configure,
|
||||||
|
BltBuffer,
|
||||||
|
DestinationX,
|
||||||
|
DestinationY,
|
||||||
|
Width,
|
||||||
|
Height
|
||||||
|
);
|
||||||
|
|
||||||
|
case EfiBltBufferToVideo:
|
||||||
|
return FrameBufferBltLibBufferToVideo (
|
||||||
|
Configure,
|
||||||
|
BltBuffer,
|
||||||
|
SourceX,
|
||||||
|
SourceY,
|
||||||
|
DestinationX,
|
||||||
|
DestinationY,
|
||||||
|
Width,
|
||||||
|
Height,
|
||||||
|
Delta
|
||||||
|
);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
}
|
34
MSM8916Pkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
Normal file
34
MSM8916Pkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
## @file
|
||||||
|
# FrameBufferBltLib - Library to perform blt operations on a frame buffer.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 - 2016, Intel Corporation. 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 = FrameBufferBltLib
|
||||||
|
FILE_GUID = 243D3E8C-2780-4A25-9693-A410475BFCEC
|
||||||
|
MODULE_TYPE = UEFI_DRIVER
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = FrameBufferBltLib
|
||||||
|
|
||||||
|
[Sources.common]
|
||||||
|
FrameBufferBltLib.c
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseLib
|
||||||
|
BaseMemoryLib
|
||||||
|
DebugLib
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
@ -0,0 +1,464 @@
|
|||||||
|
#include <PiDxe.h>
|
||||||
|
|
||||||
|
#include <Library/ArmLib.h>
|
||||||
|
#include <Library/CacheMaintenanceLib.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/SerialPortLib.h>
|
||||||
|
|
||||||
|
#include <Resources/font5x12.h>
|
||||||
|
#include <Resources/FbColor.h>
|
||||||
|
|
||||||
|
#include "FrameBufferSerialPortLib.h"
|
||||||
|
|
||||||
|
FBCON_POSITION m_Position;
|
||||||
|
FBCON_POSITION m_MaxPosition;
|
||||||
|
FBCON_COLOR m_Color;
|
||||||
|
BOOLEAN m_Initialized = FALSE;
|
||||||
|
|
||||||
|
UINTN gWidth = FixedPcdGet32(PcdMipiFrameBufferWidth);
|
||||||
|
// Reserve half screen for output
|
||||||
|
UINTN gHeight = FixedPcdGet32(PcdMipiFrameBufferHeight);
|
||||||
|
UINTN gBpp = FixedPcdGet32(PcdMipiFrameBufferPixelBpp);
|
||||||
|
|
||||||
|
// Module-used internal routine
|
||||||
|
void FbConPutCharWithFactor
|
||||||
|
(
|
||||||
|
char c,
|
||||||
|
int type,
|
||||||
|
unsigned scale_factor
|
||||||
|
);
|
||||||
|
|
||||||
|
void FbConDrawglyph
|
||||||
|
(
|
||||||
|
char *pixels,
|
||||||
|
unsigned stride,
|
||||||
|
unsigned bpp,
|
||||||
|
unsigned *glyph,
|
||||||
|
unsigned scale_factor
|
||||||
|
);
|
||||||
|
|
||||||
|
void FbConReset(void);
|
||||||
|
void FbConScrollUp(void);
|
||||||
|
void FbConFlush(void);
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SerialPortInitialize
|
||||||
|
(
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN InterruptState = 0;
|
||||||
|
|
||||||
|
// Prevent dup initialization
|
||||||
|
if (m_Initialized) return RETURN_SUCCESS;
|
||||||
|
|
||||||
|
// Interrupt Disable
|
||||||
|
InterruptState = ArmGetInterruptState();
|
||||||
|
ArmDisableInterrupts();
|
||||||
|
|
||||||
|
// Reset console
|
||||||
|
FbConReset();
|
||||||
|
|
||||||
|
// Set flag
|
||||||
|
m_Initialized = TRUE;
|
||||||
|
|
||||||
|
if (InterruptState) ArmEnableInterrupts();
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetFb(void)
|
||||||
|
{
|
||||||
|
// Clear current screen.
|
||||||
|
char* Pixels = (void*)FixedPcdGet32(PcdMipiFrameBufferAddress);
|
||||||
|
UINTN BgColor = FB_BGRA8888_BLACK;
|
||||||
|
|
||||||
|
// Set to black color.
|
||||||
|
for (UINTN i = 0; i < gWidth; i++)
|
||||||
|
{
|
||||||
|
for (UINTN j = 0; j < gHeight; j++)
|
||||||
|
{
|
||||||
|
BgColor = FB_BGRA8888_BLACK;
|
||||||
|
// Set pixel bit
|
||||||
|
for (UINTN p = 0; p < (gBpp / 8); p++)
|
||||||
|
{
|
||||||
|
*Pixels = (unsigned char)BgColor;
|
||||||
|
BgColor = BgColor >> 8;
|
||||||
|
Pixels++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FbConReset(void)
|
||||||
|
{
|
||||||
|
// Reset position.
|
||||||
|
m_Position.x = 0;
|
||||||
|
m_Position.y = 0;
|
||||||
|
|
||||||
|
// Calc max position.
|
||||||
|
m_MaxPosition.x = gWidth / (FONT_WIDTH + 1);
|
||||||
|
m_MaxPosition.y = (gHeight - 1) / FONT_HEIGHT;
|
||||||
|
|
||||||
|
// Reset color.
|
||||||
|
m_Color.Foreground = FB_BGRA8888_WHITE;
|
||||||
|
m_Color.Background = FB_BGRA8888_BLACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FbConPutCharWithFactor
|
||||||
|
(
|
||||||
|
char c,
|
||||||
|
int type,
|
||||||
|
unsigned scale_factor
|
||||||
|
)
|
||||||
|
{
|
||||||
|
char* Pixels;
|
||||||
|
|
||||||
|
if (!m_Initialized) return;
|
||||||
|
|
||||||
|
paint:
|
||||||
|
|
||||||
|
if ((unsigned char)c > 127) return;
|
||||||
|
|
||||||
|
if ((unsigned char)c < 32)
|
||||||
|
{
|
||||||
|
if (c == '\n')
|
||||||
|
{
|
||||||
|
goto newline;
|
||||||
|
}
|
||||||
|
else if (c == '\r')
|
||||||
|
{
|
||||||
|
m_Position.x = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save some space
|
||||||
|
if (m_Position.x == 0 && (unsigned char)c == ' ' &&
|
||||||
|
type != FBCON_SUBTITLE_MSG &&
|
||||||
|
type != FBCON_TITLE_MSG)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BOOLEAN intstate = ArmGetInterruptState();
|
||||||
|
ArmDisableInterrupts();
|
||||||
|
|
||||||
|
Pixels = (void*)FixedPcdGet32(PcdMipiFrameBufferAddress);
|
||||||
|
Pixels += m_Position.y * ((gBpp / 8) * FONT_HEIGHT * gWidth);
|
||||||
|
Pixels += m_Position.x * scale_factor * ((gBpp / 8) * (FONT_WIDTH + 1));
|
||||||
|
|
||||||
|
FbConDrawglyph(
|
||||||
|
Pixels,
|
||||||
|
gWidth,
|
||||||
|
(gBpp / 8),
|
||||||
|
font5x12 + (c - 32) * 2,
|
||||||
|
scale_factor);
|
||||||
|
|
||||||
|
m_Position.x++;
|
||||||
|
|
||||||
|
if (m_Position.x >= (int)(m_MaxPosition.x / scale_factor)) goto newline;
|
||||||
|
|
||||||
|
if (intstate) ArmEnableInterrupts();
|
||||||
|
return;
|
||||||
|
|
||||||
|
newline:
|
||||||
|
m_Position.y += scale_factor;
|
||||||
|
m_Position.x = 0;
|
||||||
|
if (m_Position.y >= m_MaxPosition.y - scale_factor)
|
||||||
|
{
|
||||||
|
ResetFb();
|
||||||
|
FbConFlush();
|
||||||
|
m_Position.y = 0;
|
||||||
|
|
||||||
|
if (intstate) ArmEnableInterrupts();
|
||||||
|
goto paint;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FbConFlush();
|
||||||
|
if (intstate) ArmEnableInterrupts();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void FbConDrawglyph
|
||||||
|
(
|
||||||
|
char *pixels,
|
||||||
|
unsigned stride,
|
||||||
|
unsigned bpp,
|
||||||
|
unsigned *glyph,
|
||||||
|
unsigned scale_factor
|
||||||
|
)
|
||||||
|
{
|
||||||
|
char *bg_pixels = pixels;
|
||||||
|
unsigned x, y, i, j, k;
|
||||||
|
unsigned data, temp;
|
||||||
|
unsigned int fg_color = m_Color.Foreground;
|
||||||
|
unsigned int bg_color = m_Color.Background;
|
||||||
|
stride -= FONT_WIDTH * scale_factor;
|
||||||
|
|
||||||
|
for (y = 0; y < FONT_HEIGHT / 2; ++y)
|
||||||
|
{
|
||||||
|
for (i = 0; i < scale_factor; i++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < FONT_WIDTH; ++x)
|
||||||
|
{
|
||||||
|
for (j = 0; j < scale_factor; j++)
|
||||||
|
{
|
||||||
|
bg_color = m_Color.Background;
|
||||||
|
for (k = 0; k < bpp; k++)
|
||||||
|
{
|
||||||
|
*bg_pixels = (unsigned char)bg_color;
|
||||||
|
bg_color = bg_color >> 8;
|
||||||
|
bg_pixels++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bg_pixels += (stride * bpp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (y = 0; y < FONT_HEIGHT / 2; ++y)
|
||||||
|
{
|
||||||
|
for (i = 0; i < scale_factor; i++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < FONT_WIDTH; ++x)
|
||||||
|
{
|
||||||
|
for (j = 0; j < scale_factor; j++)
|
||||||
|
{
|
||||||
|
bg_color = m_Color.Background;
|
||||||
|
for (k = 0; k < bpp; k++)
|
||||||
|
{
|
||||||
|
*bg_pixels = (unsigned char)bg_color;
|
||||||
|
bg_color = bg_color >> 8;
|
||||||
|
bg_pixels++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bg_pixels += (stride * bpp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = glyph[0];
|
||||||
|
for (y = 0; y < FONT_HEIGHT / 2; ++y)
|
||||||
|
{
|
||||||
|
temp = data;
|
||||||
|
for (i = 0; i < scale_factor; i++)
|
||||||
|
{
|
||||||
|
data = temp;
|
||||||
|
for (x = 0; x < FONT_WIDTH; ++x)
|
||||||
|
{
|
||||||
|
if (data & 1)
|
||||||
|
{
|
||||||
|
for (j = 0; j < scale_factor; j++)
|
||||||
|
{
|
||||||
|
fg_color = m_Color.Foreground;
|
||||||
|
for (k = 0; k < bpp; k++)
|
||||||
|
{
|
||||||
|
*pixels = (unsigned char)fg_color;
|
||||||
|
fg_color = fg_color >> 8;
|
||||||
|
pixels++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (j = 0; j < scale_factor; j++)
|
||||||
|
{
|
||||||
|
pixels = pixels + bpp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data >>= 1;
|
||||||
|
}
|
||||||
|
pixels += (stride * bpp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = glyph[1];
|
||||||
|
for (y = 0; y < FONT_HEIGHT / 2; ++y)
|
||||||
|
{
|
||||||
|
temp = data;
|
||||||
|
for (i = 0; i < scale_factor; i++)
|
||||||
|
{
|
||||||
|
data = temp;
|
||||||
|
for (x = 0; x < FONT_WIDTH; ++x)
|
||||||
|
{
|
||||||
|
if (data & 1)
|
||||||
|
{
|
||||||
|
for (j = 0; j < scale_factor; j++)
|
||||||
|
{
|
||||||
|
fg_color = m_Color.Foreground;
|
||||||
|
for (k = 0; k < bpp; k++)
|
||||||
|
{
|
||||||
|
*pixels = (unsigned char)fg_color;
|
||||||
|
fg_color = fg_color >> 8;
|
||||||
|
pixels++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (j = 0; j < scale_factor; j++)
|
||||||
|
{
|
||||||
|
pixels = pixels + bpp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data >>= 1;
|
||||||
|
}
|
||||||
|
pixels += (stride * bpp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: Take stride into account */
|
||||||
|
void FbConScrollUp(void)
|
||||||
|
{
|
||||||
|
unsigned short *dst = (void*)FixedPcdGet32(PcdMipiFrameBufferAddress);
|
||||||
|
unsigned short *src = dst + (gWidth * FONT_HEIGHT);
|
||||||
|
unsigned count = gWidth * (gHeight - FONT_HEIGHT);
|
||||||
|
|
||||||
|
while (count--)
|
||||||
|
{
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
|
||||||
|
count = gWidth * FONT_HEIGHT;
|
||||||
|
while (count--)
|
||||||
|
{
|
||||||
|
*dst++ = m_Color.Background;
|
||||||
|
}
|
||||||
|
|
||||||
|
FbConFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FbConFlush(void)
|
||||||
|
{
|
||||||
|
unsigned total_x, total_y;
|
||||||
|
unsigned bytes_per_bpp;
|
||||||
|
|
||||||
|
total_x = gWidth;
|
||||||
|
total_y = gHeight;
|
||||||
|
bytes_per_bpp = (gBpp / 8);
|
||||||
|
|
||||||
|
WriteBackInvalidateDataCacheRange(
|
||||||
|
(void*)FixedPcdGet32(PcdMipiFrameBufferAddress),
|
||||||
|
(total_x * total_y * bytes_per_bpp)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SerialPortWrite
|
||||||
|
(
|
||||||
|
IN UINT8 *Buffer,
|
||||||
|
IN UINTN NumberOfBytes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8* CONST Final = &Buffer[NumberOfBytes];
|
||||||
|
UINTN InterruptState = ArmGetInterruptState();
|
||||||
|
ArmDisableInterrupts();
|
||||||
|
|
||||||
|
while (Buffer < Final)
|
||||||
|
{
|
||||||
|
FbConPutCharWithFactor(*Buffer++, FBCON_COMMON_MSG, SCALE_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InterruptState) ArmEnableInterrupts();
|
||||||
|
return NumberOfBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SerialPortWriteCritical
|
||||||
|
(
|
||||||
|
IN UINT8 *Buffer,
|
||||||
|
IN UINTN NumberOfBytes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8* CONST Final = &Buffer[NumberOfBytes];
|
||||||
|
UINTN CurrentForeground = m_Color.Foreground;
|
||||||
|
UINTN InterruptState = ArmGetInterruptState();
|
||||||
|
|
||||||
|
ArmDisableInterrupts();
|
||||||
|
m_Color.Foreground = FB_BGRA8888_YELLOW;
|
||||||
|
|
||||||
|
while (Buffer < Final)
|
||||||
|
{
|
||||||
|
FbConPutCharWithFactor(*Buffer++, FBCON_COMMON_MSG, SCALE_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Color.Foreground = CurrentForeground;
|
||||||
|
|
||||||
|
if (InterruptState) ArmEnableInterrupts();
|
||||||
|
return NumberOfBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SerialPortRead
|
||||||
|
(
|
||||||
|
OUT UINT8 *Buffer,
|
||||||
|
IN UINTN NumberOfBytes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
SerialPortPoll
|
||||||
|
(
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SerialPortSetControl
|
||||||
|
(
|
||||||
|
IN UINT32 Control
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SerialPortGetControl
|
||||||
|
(
|
||||||
|
OUT UINT32 *Control
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SerialPortSetAttributes
|
||||||
|
(
|
||||||
|
IN OUT UINT64 *BaudRate,
|
||||||
|
IN OUT UINT32 *ReceiveFifoDepth,
|
||||||
|
IN OUT UINT32 *Timeout,
|
||||||
|
IN OUT EFI_PARITY_TYPE *Parity,
|
||||||
|
IN OUT UINT8 *DataBits,
|
||||||
|
IN OUT EFI_STOP_BITS_TYPE *StopBits
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINTN SerialPortFlush(VOID)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
EnableSynchronousSerialPortIO(VOID)
|
||||||
|
{
|
||||||
|
// Already synchronous
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
#ifndef _FRAMEBUFFER_SERIALPORT_LIB_H_
|
||||||
|
#define _FRAMEBUFFER_SERIALPORT_LIB_H_
|
||||||
|
|
||||||
|
typedef struct _FBCON_POSITION {
|
||||||
|
INTN x;
|
||||||
|
INTN y;
|
||||||
|
} FBCON_POSITION, *PFBCON_POSITION;
|
||||||
|
|
||||||
|
typedef struct _FBCON_COLOR {
|
||||||
|
UINTN Foreground;
|
||||||
|
UINTN Background;
|
||||||
|
} FBCON_COLOR, *PFBCON_COLOR;
|
||||||
|
|
||||||
|
enum FbConMsgType {
|
||||||
|
/* type for menu */
|
||||||
|
FBCON_COMMON_MSG = 0,
|
||||||
|
FBCON_UNLOCK_TITLE_MSG,
|
||||||
|
FBCON_TITLE_MSG,
|
||||||
|
FBCON_SUBTITLE_MSG,
|
||||||
|
|
||||||
|
/* type for warning */
|
||||||
|
FBCON_YELLOW_MSG,
|
||||||
|
FBCON_ORANGE_MSG,
|
||||||
|
FBCON_RED_MSG,
|
||||||
|
FBCON_GREEN_MSG,
|
||||||
|
|
||||||
|
/* and the select message's background */
|
||||||
|
FBCON_SELECT_MSG_BG_COLOR,
|
||||||
|
};
|
||||||
|
|
||||||
|
void ResetFb(void);
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SerialPortWriteCritical
|
||||||
|
(
|
||||||
|
IN UINT8 *Buffer,
|
||||||
|
IN UINTN NumberOfBytes
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,30 @@
|
|||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x00010005
|
||||||
|
BASE_NAME = FrameBufferSerialPortLib
|
||||||
|
MODULE_TYPE = BASE
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = SerialPortLib
|
||||||
|
|
||||||
|
[Sources.common]
|
||||||
|
FrameBufferSerialPortLib.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
ArmPkg/ArmPkg.dec
|
||||||
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
ArmLib
|
||||||
|
PcdLib
|
||||||
|
IoLib
|
||||||
|
HobLib
|
||||||
|
CompilerIntrinsicsLib
|
||||||
|
CacheMaintenanceLib
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferAddress
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferWidth
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferHeight
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferPixelBpp
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferVisibleWidth
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferVisibleHeight
|
@ -34,19 +34,17 @@ SerialPortInitialize (
|
|||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if 0
|
UINT8* base = (UINT8*)0x8d100000ull;
|
||||||
UINT8* base = (UINT8*)0xa1a10000ull;
|
|
||||||
for (UINTN i = 0; i < 0x200000; i++) {
|
for (UINTN i = 0; i < 0x200000; i++) {
|
||||||
base[i] = 0;
|
base[i] = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return RETURN_SUCCESS;
|
return RETURN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mem_putchar(UINT8 c) {
|
static void mem_putchar(UINT8 c) {
|
||||||
static const UINTN size = 0x200000;
|
static const UINTN size = 0x200000;
|
||||||
static UINTN offset = 0;
|
static UINTN offset = 0;
|
||||||
UINT8* base = (UINT8*)0xa1a10000ull;
|
UINT8* base = (UINT8*)0x8d100000ull;
|
||||||
base[offset++] = c;
|
base[offset++] = c;
|
||||||
if (offset >= size) {
|
if (offset >= size) {
|
||||||
offset = 0;
|
offset = 0;
|
@ -18,31 +18,7 @@
|
|||||||
.align 3
|
.align 3
|
||||||
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
ASM_FUNC(ArmPlatformPeiBootAction)
|
||||||
startlabel:
|
|
||||||
// check if we're located at expected location
|
|
||||||
adr x4, .
|
|
||||||
ldr x5, =ArmPlatformPeiBootAction
|
|
||||||
cmp x4, x5
|
|
||||||
bne docopy
|
|
||||||
ret
|
ret
|
||||||
docopy:
|
|
||||||
// find our start address by getting our expected offset, then subtracting it from our actual address
|
|
||||||
ldr x6, =FixedPcdGet64 (PcdFdBaseAddress)
|
|
||||||
sub x5, x5, x6 // x5 now holds offset of ArmPlatformPeiBootAction from start of FD base
|
|
||||||
sub x4, x4, x5 // x4 now holds address of actual FD base
|
|
||||||
// tweak the return address
|
|
||||||
// note: x30 is lr; gcc5 doesn't have the alias
|
|
||||||
sub x30, x30, x4
|
|
||||||
add x30, x30, x6
|
|
||||||
ldr x5, =FixedPcdGet64 (PcdFdSize)
|
|
||||||
// crap memcpy
|
|
||||||
loop:
|
|
||||||
ldp x2, x3, [x4], #16
|
|
||||||
stp x2, x3, [x6], #16
|
|
||||||
subs x5, x5, #16
|
|
||||||
b.ne loop
|
|
||||||
ret
|
|
||||||
.ltorg
|
|
||||||
|
|
||||||
//UINTN
|
//UINTN
|
||||||
//ArmPlatformIsPrimaryCore (
|
//ArmPlatformIsPrimaryCore (
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
INF_VERSION = 0x00010019
|
INF_VERSION = 0x00010019
|
||||||
BASE_NAME = Pixel3XLLib
|
BASE_NAME = MSM8916PkgLib
|
||||||
FILE_GUID = 61620091-45BA-4EFF-8F58-F7ABF228CEBC
|
FILE_GUID = 61620091-45BA-4EFF-8F58-F7ABF228CEBC
|
||||||
MODULE_TYPE = BASE
|
MODULE_TYPE = BASE
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
@ -33,9 +33,9 @@
|
|||||||
SerialPortLib
|
SerialPortLib
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
Pixel3XL.c
|
MSM8916Pkg.c
|
||||||
Pixel3XLHelper.S
|
MSM8916PkgHelper.S
|
||||||
Pixel3XLMem.c
|
MSM8916PkgMem.c
|
||||||
|
|
||||||
[FixedPcd]
|
[FixedPcd]
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
@ -27,18 +27,25 @@
|
|||||||
#define DDR_ATTRIBUTES_UNCACHED ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED
|
#define DDR_ATTRIBUTES_UNCACHED ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED
|
||||||
|
|
||||||
#define SDM845_PERIPH_BASE 0x00000000
|
#define SDM845_PERIPH_BASE 0x00000000
|
||||||
#define SDM845_PERIPH_SZ 0x80000000
|
#define SDM845_PERIPH_SZ 0x60000000
|
||||||
|
|
||||||
#define HIKEY960_MEMORY_SIZE 0x0000000100000000
|
#define HIKEY960_MEMORY_SIZE 0x0000000100000000
|
||||||
|
|
||||||
STATIC struct Pixel3XLReservedMemory {
|
STATIC struct MSM8916PkgReservedMemory {
|
||||||
EFI_PHYSICAL_ADDRESS Offset;
|
EFI_PHYSICAL_ADDRESS Offset;
|
||||||
EFI_PHYSICAL_ADDRESS Size;
|
EFI_PHYSICAL_ADDRESS Size;
|
||||||
} Pixel3XLReservedMemoryBuffer [] = {
|
} MSM8916PkgReservedMemoryBuffer [] = {
|
||||||
{ 0x85700000, 0x00600000 }, // hyp_region
|
/** { 0x86000000, 0x00300000 }, // tz_apps_region
|
||||||
{ 0x85e00000, 0x00100000 }, // xbl_region
|
{ 0x86300000, 0x00100000 }, // smem_region
|
||||||
{ 0x85fc0000, 0x02f40000 }, // removed_region
|
{ 0x86400000, 0x00280000 }, // tz/hyp_region
|
||||||
{ 0x8ab00000, 0x01400000 }, // qseecom_region
|
{ 0x86700000, 0x06C00000 }, // MPSS/EFS/DHMS/PIL_region
|
||||||
|
**/
|
||||||
|
/*
|
||||||
|
{ 0x85A00000, 0x00E00000 }, // tz-apps_region
|
||||||
|
{ 0x86800000, 0x05400000 }, // mpss_region
|
||||||
|
{ 0x8bc00000, 0x00200000 }, // gps_region
|
||||||
|
{ 0x8be00000, 0x00600000 }, // wcnss_region
|
||||||
|
{ 0x8c400000, 0x00600000 }, // venus_region*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,30 +89,30 @@ ArmPlatformGetVirtualMemoryMap (
|
|||||||
);
|
);
|
||||||
|
|
||||||
NextHob.Raw = GetHobList ();
|
NextHob.Raw = GetHobList ();
|
||||||
Count = sizeof (Pixel3XLReservedMemoryBuffer) / sizeof (struct Pixel3XLReservedMemory);
|
Count = sizeof (MSM8916PkgReservedMemoryBuffer) / sizeof (struct MSM8916PkgReservedMemory);
|
||||||
while ((NextHob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, NextHob.Raw)) != NULL)
|
while ((NextHob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, NextHob.Raw)) != NULL)
|
||||||
{
|
{
|
||||||
if (Index >= Count)
|
if (Index >= Count)
|
||||||
break;
|
break;
|
||||||
if ((NextHob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) &&
|
if ((NextHob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) &&
|
||||||
(Pixel3XLReservedMemoryBuffer[Index].Offset >= NextHob.ResourceDescriptor->PhysicalStart) &&
|
(MSM8916PkgReservedMemoryBuffer[Index].Offset >= NextHob.ResourceDescriptor->PhysicalStart) &&
|
||||||
((Pixel3XLReservedMemoryBuffer[Index].Offset + Pixel3XLReservedMemoryBuffer[Index].Size) <=
|
((MSM8916PkgReservedMemoryBuffer[Index].Offset + MSM8916PkgReservedMemoryBuffer[Index].Size) <=
|
||||||
NextHob.ResourceDescriptor->PhysicalStart + NextHob.ResourceDescriptor->ResourceLength))
|
NextHob.ResourceDescriptor->PhysicalStart + NextHob.ResourceDescriptor->ResourceLength))
|
||||||
{
|
{
|
||||||
ResourceAttributes = NextHob.ResourceDescriptor->ResourceAttribute;
|
ResourceAttributes = NextHob.ResourceDescriptor->ResourceAttribute;
|
||||||
ResourceLength = NextHob.ResourceDescriptor->ResourceLength;
|
ResourceLength = NextHob.ResourceDescriptor->ResourceLength;
|
||||||
ResourceTop = NextHob.ResourceDescriptor->PhysicalStart + ResourceLength;
|
ResourceTop = NextHob.ResourceDescriptor->PhysicalStart + ResourceLength;
|
||||||
ReservedTop = Pixel3XLReservedMemoryBuffer[Index].Offset + Pixel3XLReservedMemoryBuffer[Index].Size;
|
ReservedTop = MSM8916PkgReservedMemoryBuffer[Index].Offset + MSM8916PkgReservedMemoryBuffer[Index].Size;
|
||||||
|
|
||||||
// Create the System Memory HOB for the reserved buffer
|
// Create the System Memory HOB for the reserved buffer
|
||||||
BuildResourceDescriptorHob (
|
BuildResourceDescriptorHob (
|
||||||
EFI_RESOURCE_MEMORY_RESERVED,
|
EFI_RESOURCE_MEMORY_RESERVED,
|
||||||
EFI_RESOURCE_ATTRIBUTE_PRESENT,
|
EFI_RESOURCE_ATTRIBUTE_PRESENT,
|
||||||
Pixel3XLReservedMemoryBuffer[Index].Offset,
|
MSM8916PkgReservedMemoryBuffer[Index].Offset,
|
||||||
Pixel3XLReservedMemoryBuffer[Index].Size
|
MSM8916PkgReservedMemoryBuffer[Index].Size
|
||||||
);
|
);
|
||||||
// Update the HOB
|
// Update the HOB
|
||||||
NextHob.ResourceDescriptor->ResourceLength = Pixel3XLReservedMemoryBuffer[Index].Offset -
|
NextHob.ResourceDescriptor->ResourceLength = MSM8916PkgReservedMemoryBuffer[Index].Offset -
|
||||||
NextHob.ResourceDescriptor->PhysicalStart;
|
NextHob.ResourceDescriptor->PhysicalStart;
|
||||||
|
|
||||||
// If there is some memory available on the top of the reserved memory then create a HOB
|
// If there is some memory available on the top of the reserved memory then create a HOB
|
74
MSM8916Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c
Normal file
74
MSM8916Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/** @file
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011-2015, ARM Limited. All rights reserved.
|
||||||
|
* Copyright (c) 2019, RUIKAI LIU and MR TUNNEL. 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 <PiPei.h>
|
||||||
|
|
||||||
|
#include <Library/ArmMmuLib.h>
|
||||||
|
#include <Library/ArmPlatformLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
|
||||||
|
extern UINT64 mSystemMemoryEnd;
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BuildMemoryTypeInformationHob (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
InitMmu (
|
||||||
|
IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
VOID *TranslationTableBase;
|
||||||
|
UINTN TranslationTableSize;
|
||||||
|
RETURN_STATUS Status;
|
||||||
|
|
||||||
|
//Note: Because we called PeiServicesInstallPeiMemory() before to call InitMmu() the MMU Page Table resides in
|
||||||
|
// DRAM (even at the top of DRAM as it is the first permanent memory allocation)
|
||||||
|
Status = ArmConfigureMmu (MemoryTable, &TranslationTableBase, &TranslationTableSize);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "Error: Failed to enable MMU\n"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
MemoryPeim (
|
||||||
|
IN EFI_PHYSICAL_ADDRESS UefiMemoryBase,
|
||||||
|
IN UINT64 UefiMemorySize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable;
|
||||||
|
|
||||||
|
// Get Virtual Memory Map from the Platform Library
|
||||||
|
ArmPlatformGetVirtualMemoryMap (&MemoryTable);
|
||||||
|
|
||||||
|
// Ensure PcdSystemMemorySize has been set
|
||||||
|
ASSERT (PcdGet64 (PcdSystemMemorySize) != 0);
|
||||||
|
|
||||||
|
InitMmu (MemoryTable);
|
||||||
|
|
||||||
|
if (FeaturePcdGet (PcdPrePiProduceMemoryTypeInformationHob)){
|
||||||
|
// Optional feature that helps prevent EFI memory map fragmentation.
|
||||||
|
BuildMemoryTypeInformationHob();
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
#/** @file
|
||||||
|
#
|
||||||
|
# Copyright (c) 2011-2014, ARM Ltd. All rights reserved.<BR>
|
||||||
|
# Copyright (c) 2016, Linaro, 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 = MemoryInitPeiLib
|
||||||
|
FILE_GUID = 4bbc9c10-a100-43fb-8311-332ba497d1b4
|
||||||
|
MODULE_TYPE = BASE
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = MemoryInitPeiLib|SEC PEIM
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
MemoryInitPeiLib.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
|
ArmPkg/ArmPkg.dec
|
||||||
|
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||||
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
DebugLib
|
||||||
|
HobLib
|
||||||
|
ArmMmuLib
|
||||||
|
ArmPlatformLib
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEfiMemoryTypeInformationGuid
|
||||||
|
|
||||||
|
[FeaturePcd]
|
||||||
|
gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob
|
||||||
|
|
||||||
|
[FixedPcd]
|
||||||
|
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
||||||
|
gArmTokenSpaceGuid.PcdSystemMemorySize
|
||||||
|
|
||||||
|
[Depex]
|
||||||
|
TRUE
|
691
MSM8916Pkg/Library/PlatformBootManagerLib/PlatformBm.c
Normal file
691
MSM8916Pkg/Library/PlatformBootManagerLib/PlatformBm.c
Normal file
@ -0,0 +1,691 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation for PlatformBootManagerLib library class interfaces.
|
||||||
|
|
||||||
|
Copyright (C) 2015-2016, Red Hat, Inc.
|
||||||
|
Copyright (c) 2014, ARM Ltd. All rights reserved.
|
||||||
|
Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
|
||||||
|
Copyright (c) 2016, Linaro Ltd. All rights reserved.
|
||||||
|
Copyright (c), 2017, Andrei Warkentin <andrey.warkentin@gmail.com>
|
||||||
|
|
||||||
|
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/BootLogoLib.h>
|
||||||
|
#include <Library/CapsuleLib.h>
|
||||||
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/UefiBootManagerLib.h>
|
||||||
|
#include <Library/UefiLib.h>
|
||||||
|
#include <Library/PrintLib.h>
|
||||||
|
#include <Protocol/DevicePath.h>
|
||||||
|
#include <Protocol/EsrtManagement.h>
|
||||||
|
#include <Protocol/GraphicsOutput.h>
|
||||||
|
#include <Protocol/LoadedImage.h>
|
||||||
|
#include <Guid/EventGroup.h>
|
||||||
|
#include <Guid/TtyTerm.h>
|
||||||
|
#include <Configuration/BootDevices.h>
|
||||||
|
|
||||||
|
#include "PlatformBm.h"
|
||||||
|
|
||||||
|
#define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) }
|
||||||
|
|
||||||
|
#pragma pack (1)
|
||||||
|
typedef struct {
|
||||||
|
VENDOR_DEVICE_PATH SerialDxe;
|
||||||
|
UART_DEVICE_PATH Uart;
|
||||||
|
VENDOR_DEFINED_DEVICE_PATH TermType;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||||||
|
} PLATFORM_SERIAL_CONSOLE;
|
||||||
|
#pragma pack ()
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VENDOR_DEVICE_PATH Custom;
|
||||||
|
USB_DEVICE_PATH Hub;
|
||||||
|
USB_DEVICE_PATH Dev;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
|
||||||
|
} PLATFORM_USB_DEV;
|
||||||
|
|
||||||
|
#define DW_USB_DXE_FILE_GUID { \
|
||||||
|
0x4bf1704c, 0x03f4, 0x46d5, \
|
||||||
|
{ 0xbc, 0xa6, 0x82, 0xfa, 0x58, 0x0b, 0xad, 0xfd } \
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC PLATFORM_USB_DEV mUsbHubPort = {
|
||||||
|
//
|
||||||
|
// VENDOR_DEVICE_PATH DwUsbHostDxe
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{ HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) },
|
||||||
|
DW_USB_DXE_FILE_GUID
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// USB_DEVICE_PATH Hub
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{ MESSAGING_DEVICE_PATH, MSG_USB_DP, DP_NODE_LEN (USB_DEVICE_PATH) },
|
||||||
|
0, 0
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// USB_DEVICE_PATH Dev
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{ MESSAGING_DEVICE_PATH, MSG_USB_DP, DP_NODE_LEN (USB_DEVICE_PATH) },
|
||||||
|
1, 0
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// EFI_DEVICE_PATH_PROTOCOL End
|
||||||
|
//
|
||||||
|
{
|
||||||
|
END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
|
DP_NODE_LEN (EFI_DEVICE_PATH_PROTOCOL)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SERIAL_DXE_FILE_GUID { \
|
||||||
|
0xD3987D4B, 0x971A, 0x435F, \
|
||||||
|
{ 0x8C, 0xAF, 0x49, 0x67, 0xEB, 0x62, 0x72, 0x41 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC PLATFORM_SERIAL_CONSOLE mSerialConsole = {
|
||||||
|
//
|
||||||
|
// VENDOR_DEVICE_PATH SerialDxe
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{ HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) },
|
||||||
|
SERIAL_DXE_FILE_GUID
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// UART_DEVICE_PATH Uart
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{ MESSAGING_DEVICE_PATH, MSG_UART_DP, DP_NODE_LEN (UART_DEVICE_PATH) },
|
||||||
|
0, // Reserved
|
||||||
|
FixedPcdGet64 (PcdUartDefaultBaudRate), // BaudRate
|
||||||
|
FixedPcdGet8 (PcdUartDefaultDataBits), // DataBits
|
||||||
|
FixedPcdGet8 (PcdUartDefaultParity), // Parity
|
||||||
|
FixedPcdGet8 (PcdUartDefaultStopBits) // StopBits
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// VENDOR_DEFINED_DEVICE_PATH TermType
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{
|
||||||
|
MESSAGING_DEVICE_PATH, MSG_VENDOR_DP,
|
||||||
|
DP_NODE_LEN (VENDOR_DEFINED_DEVICE_PATH)
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Guid to be filled in dynamically
|
||||||
|
//
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// EFI_DEVICE_PATH_PROTOCOL End
|
||||||
|
//
|
||||||
|
{
|
||||||
|
END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
|
DP_NODE_LEN (EFI_DEVICE_PATH_PROTOCOL)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack (1)
|
||||||
|
typedef struct {
|
||||||
|
USB_CLASS_DEVICE_PATH Keyboard;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||||||
|
} PLATFORM_USB_KEYBOARD;
|
||||||
|
#pragma pack ()
|
||||||
|
|
||||||
|
STATIC PLATFORM_USB_KEYBOARD mUsbKeyboard = {
|
||||||
|
//
|
||||||
|
// USB_CLASS_DEVICE_PATH Keyboard
|
||||||
|
//
|
||||||
|
{
|
||||||
|
{
|
||||||
|
MESSAGING_DEVICE_PATH, MSG_USB_CLASS_DP,
|
||||||
|
DP_NODE_LEN (USB_CLASS_DEVICE_PATH)
|
||||||
|
},
|
||||||
|
0xFFFF, // VendorId: any
|
||||||
|
0xFFFF, // ProductId: any
|
||||||
|
3, // DeviceClass: HID
|
||||||
|
1, // DeviceSubClass: boot
|
||||||
|
1 // DeviceProtocol: keyboard
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// EFI_DEVICE_PATH_PROTOCOL End
|
||||||
|
//
|
||||||
|
{
|
||||||
|
END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
|
DP_NODE_LEN (EFI_DEVICE_PATH_PROTOCOL)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if the handle satisfies a particular condition.
|
||||||
|
|
||||||
|
@param[in] Handle The handle to check.
|
||||||
|
@param[in] ReportText A caller-allocated string passed in for reporting
|
||||||
|
purposes. It must never be NULL.
|
||||||
|
|
||||||
|
@retval TRUE The condition is satisfied.
|
||||||
|
@retval FALSE Otherwise. This includes the case when the condition could not
|
||||||
|
be fully evaluated due to an error.
|
||||||
|
**/
|
||||||
|
typedef
|
||||||
|
BOOLEAN
|
||||||
|
(EFIAPI *FILTER_FUNCTION) (
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN CONST CHAR16 *ReportText
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Process a handle.
|
||||||
|
|
||||||
|
@param[in] Handle The handle to process.
|
||||||
|
@param[in] ReportText A caller-allocated string passed in for reporting
|
||||||
|
purposes. It must never be NULL.
|
||||||
|
**/
|
||||||
|
typedef
|
||||||
|
VOID
|
||||||
|
(EFIAPI *CALLBACK_FUNCTION) (
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN CONST CHAR16 *ReportText
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Locate all handles that carry the specified protocol, filter them with a
|
||||||
|
callback function, and pass each handle that passes the filter to another
|
||||||
|
callback.
|
||||||
|
|
||||||
|
@param[in] ProtocolGuid The protocol to look for.
|
||||||
|
|
||||||
|
@param[in] Filter The filter function to pass each handle to. If this
|
||||||
|
parameter is NULL, then all handles are processed.
|
||||||
|
|
||||||
|
@param[in] Process The callback function to pass each handle to that
|
||||||
|
clears the filter.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
FilterAndProcess (
|
||||||
|
IN EFI_GUID *ProtocolGuid,
|
||||||
|
IN FILTER_FUNCTION Filter OPTIONAL,
|
||||||
|
IN CALLBACK_FUNCTION Process
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_HANDLE *Handles;
|
||||||
|
UINTN NoHandles;
|
||||||
|
UINTN Idx;
|
||||||
|
|
||||||
|
Status = gBS->LocateHandleBuffer (ByProtocol, ProtocolGuid,
|
||||||
|
NULL /* SearchKey */, &NoHandles, &Handles);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// This is not an error, just an informative condition.
|
||||||
|
//
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "%a: %g: %r\n", __FUNCTION__, ProtocolGuid,
|
||||||
|
Status));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (NoHandles > 0);
|
||||||
|
for (Idx = 0; Idx < NoHandles; ++Idx) {
|
||||||
|
CHAR16 *DevicePathText;
|
||||||
|
STATIC CHAR16 Fallback[] = L"<device path unavailable>";
|
||||||
|
|
||||||
|
//
|
||||||
|
// The ConvertDevicePathToText() function handles NULL input transparently.
|
||||||
|
//
|
||||||
|
DevicePathText = ConvertDevicePathToText (
|
||||||
|
DevicePathFromHandle (Handles[Idx]),
|
||||||
|
FALSE, // DisplayOnly
|
||||||
|
FALSE // AllowShortcuts
|
||||||
|
);
|
||||||
|
if (DevicePathText == NULL) {
|
||||||
|
DevicePathText = Fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Filter == NULL || Filter (Handles[Idx], DevicePathText)) {
|
||||||
|
Process (Handles[Idx], DevicePathText);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DevicePathText != Fallback) {
|
||||||
|
FreePool (DevicePathText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gBS->FreePool (Handles);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This CALLBACK_FUNCTION retrieves the EFI_DEVICE_PATH_PROTOCOL from the
|
||||||
|
handle, and adds it to ConOut and ErrOut.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
AddOutput (
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN CONST CHAR16 *ReportText
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
|
||||||
|
DevicePath = DevicePathFromHandle (Handle);
|
||||||
|
if (DevicePath == NULL) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "%a: %s: handle %p: device path not found\n",
|
||||||
|
__FUNCTION__, ReportText, Handle));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "%a: %s: adding to ConOut: %r\n", __FUNCTION__,
|
||||||
|
ReportText, Status));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "%a: %s: adding to ErrOut: %r\n", __FUNCTION__,
|
||||||
|
ReportText, Status));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "%a: %s: added to ConOut and ErrOut\n", __FUNCTION__,
|
||||||
|
ReportText));
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
AddInput (
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN CONST CHAR16 *ReportText
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
|
||||||
|
DevicePath = DevicePathFromHandle (Handle);
|
||||||
|
if (DevicePath == NULL) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "%a: %s: handle %p: device path not found\n",
|
||||||
|
__FUNCTION__, ReportText, Handle));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "%a: %s: adding to ConIn: %r\n", __FUNCTION__,
|
||||||
|
ReportText, Status));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG ((EFI_D_VERBOSE, "%a: %s: added to ConOut and ErrOut\n", __FUNCTION__,
|
||||||
|
ReportText));
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
INTN
|
||||||
|
PlatformRegisterBootOption (
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
|
CHAR16 *Description,
|
||||||
|
UINT32 Attributes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
INTN OptionIndex;
|
||||||
|
EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
|
||||||
|
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
|
||||||
|
UINTN BootOptionCount;
|
||||||
|
|
||||||
|
Status = EfiBootManagerInitializeLoadOption (
|
||||||
|
&NewOption,
|
||||||
|
LoadOptionNumberUnassigned,
|
||||||
|
LoadOptionTypeBoot,
|
||||||
|
Attributes,
|
||||||
|
Description,
|
||||||
|
DevicePath,
|
||||||
|
NULL,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
BootOptions = EfiBootManagerGetLoadOptions (
|
||||||
|
&BootOptionCount, LoadOptionTypeBoot
|
||||||
|
);
|
||||||
|
|
||||||
|
OptionIndex = EfiBootManagerFindLoadOption (
|
||||||
|
&NewOption, BootOptions, BootOptionCount
|
||||||
|
);
|
||||||
|
|
||||||
|
if (OptionIndex == -1) {
|
||||||
|
Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
OptionIndex = BootOptionCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
EfiBootManagerFreeLoadOption (&NewOption);
|
||||||
|
EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
|
||||||
|
|
||||||
|
return OptionIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
INTN
|
||||||
|
PlatformRegisterFvBootOption (
|
||||||
|
CONST EFI_GUID *FileGuid,
|
||||||
|
CHAR16 *Description,
|
||||||
|
UINT32 Attributes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
|
||||||
|
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
INTN OptionIndex;
|
||||||
|
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
gImageHandle,
|
||||||
|
&gEfiLoadedImageProtocolGuid,
|
||||||
|
(VOID **) &LoadedImage
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid);
|
||||||
|
DevicePath = DevicePathFromHandle (LoadedImage->DeviceHandle);
|
||||||
|
ASSERT (DevicePath != NULL);
|
||||||
|
DevicePath = AppendDevicePathNode (
|
||||||
|
DevicePath,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *) &FileNode
|
||||||
|
);
|
||||||
|
ASSERT (DevicePath != NULL);
|
||||||
|
|
||||||
|
OptionIndex = PlatformRegisterBootOption (DevicePath,
|
||||||
|
Description,
|
||||||
|
Attributes);
|
||||||
|
FreePool (DevicePath);
|
||||||
|
|
||||||
|
return OptionIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
PlatformRegisterOptionsAndKeys (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
INTN ShellOption;
|
||||||
|
|
||||||
|
ShellOption = PlatformRegisterFvBootOption(
|
||||||
|
&gUefiShellFileGuid,
|
||||||
|
L"UEFI Shell",
|
||||||
|
LOAD_OPTION_ACTIVE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
PlatformRegisterSetupKey(
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_INPUT_KEY PowerBtn;
|
||||||
|
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Map Power to Boot Manager Menu
|
||||||
|
//
|
||||||
|
PowerBtn.ScanCode = SCAN_NULL;
|
||||||
|
PowerBtn.UnicodeChar = CHAR_CARRIAGE_RETURN;
|
||||||
|
Status = EfiBootManagerGetBootManagerMenu(&BootOption);
|
||||||
|
ASSERT_EFI_ERROR(Status);
|
||||||
|
Status = EfiBootManagerAddKeyOptionVariable(
|
||||||
|
NULL,
|
||||||
|
(UINT16) BootOption.OptionNumber,
|
||||||
|
0,
|
||||||
|
&PowerBtn,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// BDS Platform Functions
|
||||||
|
//
|
||||||
|
/**
|
||||||
|
Do the platform init, can be customized by OEM/IBV
|
||||||
|
Possible things that can be done in PlatformBootManagerBeforeConsole:
|
||||||
|
> Update console variable: 1. include hot-plug devices;
|
||||||
|
> 2. Clear ConIn and add SOL for AMT
|
||||||
|
> Register new Driver#### or Boot####
|
||||||
|
> Register new Key####: e.g.: F12
|
||||||
|
> Signal ReadyToLock event
|
||||||
|
> Authentication action: 1. connect Auth devices;
|
||||||
|
> 2. Identify auto logon user.
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
PlatformBootManagerBeforeConsole (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
|
||||||
|
|
||||||
|
if (GetBootModeHob() == BOOT_ON_FLASH_UPDATE) {
|
||||||
|
DEBUG ((DEBUG_INFO, "ProcessCapsules Before EndOfDxe ......\n"));
|
||||||
|
Status = ProcessCapsules ();
|
||||||
|
DEBUG ((DEBUG_INFO, "ProcessCapsules returned %r\n", Status));
|
||||||
|
} else {
|
||||||
|
Status = gBS->LocateProtocol (&gEsrtManagementProtocolGuid, NULL,
|
||||||
|
(VOID **)&EsrtManagement);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
EsrtManagement->SyncEsrtFmp ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now add the device path of all handles with GOP on them to ConOut and
|
||||||
|
// ErrOut.
|
||||||
|
//
|
||||||
|
FilterAndProcess (&gEfiGraphicsOutputProtocolGuid, NULL, AddOutput);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add the hardcoded short-form USB keyboard device path to ConIn.
|
||||||
|
//
|
||||||
|
EfiBootManagerUpdateConsoleVariable (ConIn,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mUsbKeyboard, NULL);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now add the device path of all handles with QcomKeypadDeviceProtocolGuid
|
||||||
|
// on them to ConIn.
|
||||||
|
//
|
||||||
|
FilterAndProcess (&gEFIDroidKeypadDeviceProtocolGuid, NULL, AddInput);
|
||||||
|
// Register setup key then
|
||||||
|
PlatformRegisterSetupKey();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add the hardcoded serial console device path to ConIn, ConOut, ErrOut.
|
||||||
|
//
|
||||||
|
ASSERT (FixedPcdGet8 (PcdDefaultTerminalType) == 4);
|
||||||
|
CopyGuid (&mSerialConsole.TermType.Guid, &gEfiTtyTermGuid);
|
||||||
|
|
||||||
|
EfiBootManagerUpdateConsoleVariable (ConIn,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
|
||||||
|
EfiBootManagerUpdateConsoleVariable (ConOut,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
|
||||||
|
EfiBootManagerUpdateConsoleVariable (ErrOut,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Signal EndOfDxe PI Event
|
||||||
|
//
|
||||||
|
EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Dispatch deferred images after EndOfDxe event and ReadyToLock installation.
|
||||||
|
//
|
||||||
|
EfiBootManagerDispatchDeferredImages ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Do the platform specific action after the console is ready
|
||||||
|
Possible things that can be done in PlatformBootManagerAfterConsole:
|
||||||
|
> Console post action:
|
||||||
|
> Dynamically switch output mode from 100x31 to 80x25 for certain senarino
|
||||||
|
> Signal console ready platform customized event
|
||||||
|
> Run diagnostics like memory testing
|
||||||
|
> Connect certain devices
|
||||||
|
> Dispatch aditional option roms
|
||||||
|
> Special boot: e.g.: USB boot, enter UI
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
PlatformBootManagerAfterConsole (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Show the splash screen.
|
||||||
|
//
|
||||||
|
Status = BootLogoEnableLogo ();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Connect the rest of the devices.
|
||||||
|
//
|
||||||
|
EfiBootManagerConnectAll ();
|
||||||
|
|
||||||
|
Status = gBS->LocateProtocol (&gEsrtManagementProtocolGuid, NULL,
|
||||||
|
(VOID **)&EsrtManagement);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
EsrtManagement->SyncEsrtFmp ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetBootModeHob() == BOOT_ON_FLASH_UPDATE) {
|
||||||
|
DEBUG((DEBUG_INFO, "ProcessCapsules After EndOfDxe ......\n"));
|
||||||
|
Status = ProcessCapsules ();
|
||||||
|
DEBUG((DEBUG_INFO, "ProcessCapsules returned %r\n", Status));
|
||||||
|
}
|
||||||
|
|
||||||
|
EfiBootManagerRefreshAllBootOption ();
|
||||||
|
|
||||||
|
PlatformRegisterOptionsAndKeys ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function is called each second during the boot manager waits the
|
||||||
|
timeout.
|
||||||
|
|
||||||
|
@param TimeoutRemain The remaining timeout.
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
PlatformBootManagerWaitCallback (
|
||||||
|
UINT16 TimeoutRemain
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black;
|
||||||
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White;
|
||||||
|
UINT16 Timeout;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
Timeout = PcdGet16 (PcdPlatformBootTimeOut);
|
||||||
|
|
||||||
|
Black.Raw = 0x00000000;
|
||||||
|
White.Raw = 0x00FFFFFF;
|
||||||
|
|
||||||
|
Status = BootLogoUpdateProgress (
|
||||||
|
White.Pixel,
|
||||||
|
Black.Pixel,
|
||||||
|
L"Press Power Button for Setup Utility\n",
|
||||||
|
White.Pixel,
|
||||||
|
(Timeout - TimeoutRemain) * 100 / Timeout,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
Print (L".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
The function is called when no boot option could be launched,
|
||||||
|
including platform recovery options and options pointing to applications
|
||||||
|
built into firmware volumes.
|
||||||
|
|
||||||
|
If this function returns, BDS attempts to enter an infinite loop.
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
PlatformBootManagerUnableToBoot (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_INPUT_KEY Key;
|
||||||
|
EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu;
|
||||||
|
UINTN Index;
|
||||||
|
|
||||||
|
//
|
||||||
|
// BootManagerMenu doesn't contain the correct information when return status
|
||||||
|
// is EFI_NOT_FOUND.
|
||||||
|
//
|
||||||
|
Status = EfiBootManagerGetBootManagerMenu (&BootManagerMenu);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Normally BdsDxe does not print anything to the system console, but this is
|
||||||
|
// a last resort -- the end-user will likely not see any DEBUG messages
|
||||||
|
// logged in this situation.
|
||||||
|
//
|
||||||
|
// AsciiPrint() will NULL-check gST->ConOut internally. We check gST->ConIn
|
||||||
|
// here to see if it makes sense to request and wait for a keypress.
|
||||||
|
//
|
||||||
|
if (gST->ConIn != NULL) {
|
||||||
|
AsciiPrint (
|
||||||
|
"%a: No bootable option or device was found.\n"
|
||||||
|
"%a: Press any key to enter the Boot Manager Menu.\n",
|
||||||
|
gEfiCallerBaseName,
|
||||||
|
gEfiCallerBaseName
|
||||||
|
);
|
||||||
|
Status = gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &Index);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
ASSERT (Index == 0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Drain any queued keys.
|
||||||
|
//
|
||||||
|
while (!EFI_ERROR (gST->ConIn->ReadKeyStroke (gST->ConIn, &Key))) {
|
||||||
|
//
|
||||||
|
// just throw away Key
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
EfiBootManagerBoot (&BootManagerMenu);
|
||||||
|
}
|
||||||
|
}
|
60
MSM8916Pkg/Library/PlatformBootManagerLib/PlatformBm.h
Normal file
60
MSM8916Pkg/Library/PlatformBootManagerLib/PlatformBm.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/** @file
|
||||||
|
Head file for BDS Platform specific code
|
||||||
|
|
||||||
|
Copyright (C) 2015-2016, Red Hat, Inc.
|
||||||
|
Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.
|
||||||
|
Copyright (c) 2016, Linaro Ltd. All rights reserved.
|
||||||
|
Copyright (c), 2017, Andrei Warkentin <andrey.warkentin@gmail.com>
|
||||||
|
|
||||||
|
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 _PLATFORM_BM_H_
|
||||||
|
#define _PLATFORM_BM_H_
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
#include <Library/UefiLib.h>
|
||||||
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
Use SystemTable Conout to stop video based Simple Text Out consoles from
|
||||||
|
going to the video device. Put up LogoFile on every video device that is a
|
||||||
|
console.
|
||||||
|
|
||||||
|
@param[in] LogoFile File name of logo to display on the center of the
|
||||||
|
screen.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS ConsoleControl has been flipped to graphics and logo
|
||||||
|
displayed.
|
||||||
|
@retval EFI_UNSUPPORTED Logo not found
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EnableQuietBoot (
|
||||||
|
IN EFI_GUID *LogoFile
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Use SystemTable Conout to turn on video based Simple Text Out consoles. The
|
||||||
|
Simple Text Out screens will now be synced up with all non video output
|
||||||
|
devices
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS UGA devices are back in text mode and synced up.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
DisableQuietBoot (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif // _PLATFORM_BM_H_
|
@ -0,0 +1,92 @@
|
|||||||
|
## @file
|
||||||
|
# Implementation for PlatformBootManagerLib library class interfaces.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015-2016, Red Hat, Inc.
|
||||||
|
# Copyright (c) 2014, ARM Ltd. All rights reserved.
|
||||||
|
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.
|
||||||
|
# Copyright (c) 2016, Linaro Ltd. All rights reserved.
|
||||||
|
# Copyright (c), 2017, Andrei Warkentin <andrey.warkentin@gmail.com>
|
||||||
|
#
|
||||||
|
# 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 = PlatformBootManagerLib
|
||||||
|
FILE_GUID = 92FD2DE3-B9CB-4B35-8141-42AD34D73C9F
|
||||||
|
MODULE_TYPE = DXE_DRIVER
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following information is for reference only and not required by the build tools.
|
||||||
|
#
|
||||||
|
# VALID_ARCHITECTURES = ARM AARCH64
|
||||||
|
#
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
PlatformBm.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
ShellPkg/ShellPkg.dec
|
||||||
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
|
[BuildOptions.AARCH64]
|
||||||
|
GCC:*_*_*_CC_FLAGS = -Wno-unused-variable
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseLib
|
||||||
|
BaseMemoryLib
|
||||||
|
BootLogoLib
|
||||||
|
CapsuleLib
|
||||||
|
DebugLib
|
||||||
|
DevicePathLib
|
||||||
|
DxeServicesLib
|
||||||
|
HobLib
|
||||||
|
MemoryAllocationLib
|
||||||
|
PcdLib
|
||||||
|
PrintLib
|
||||||
|
UefiBootManagerLib
|
||||||
|
UefiBootServicesTableLib
|
||||||
|
UefiLib
|
||||||
|
|
||||||
|
[FeaturePcd]
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport
|
||||||
|
|
||||||
|
[FixedPcd]
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEfiFileInfoGuid
|
||||||
|
gEfiFileSystemInfoGuid
|
||||||
|
gEfiFileSystemVolumeLabelInfoIdGuid
|
||||||
|
gEfiEndOfDxeEventGroupGuid
|
||||||
|
gEfiTtyTermGuid
|
||||||
|
gUefiShellFileGuid
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
gEfiDevicePathProtocolGuid
|
||||||
|
gEfiGraphicsOutputProtocolGuid
|
||||||
|
gEfiLoadedImageProtocolGuid
|
||||||
|
gEfiSimpleFileSystemProtocolGuid
|
||||||
|
gEsrtManagementProtocolGuid
|
||||||
|
gEfiUsb2HcProtocolGuid
|
||||||
|
gEFIDroidKeypadDeviceProtocolGuid
|
||||||
|
|
32
MSM8916Pkg/Library/PlatformPeiLib/PlatformPeiLib.c
Normal file
32
MSM8916Pkg/Library/PlatformPeiLib/PlatformPeiLib.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/** @file
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011-2014, ARM Limited. All rights reserved.
|
||||||
|
* Copyright (c) 2014, Linaro Limited. 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 <PiPei.h>
|
||||||
|
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
PlatformPeim(VOID)
|
||||||
|
{
|
||||||
|
|
||||||
|
BuildFvHob(PcdGet64(PcdFvBaseAddress), PcdGet32(PcdFvSize));
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
45
MSM8916Pkg/Library/PlatformPeiLib/PlatformPeiLib.inf
Normal file
45
MSM8916Pkg/Library/PlatformPeiLib/PlatformPeiLib.inf
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#/** @file
|
||||||
|
#
|
||||||
|
# Copyright (c) 2011-2015, ARM Limited. All rights reserved.
|
||||||
|
# Copyright (c) 2014, Linaro Limited. 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 = 0x00010005
|
||||||
|
BASE_NAME = PlatformPeiLib
|
||||||
|
FILE_GUID = 59C11815-F8DA-4F49-B4FB-EC1E41ED1F06
|
||||||
|
MODULE_TYPE = SEC
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = PlatformPeiLib
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
PlatformPeiLib.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
ArmPkg/ArmPkg.dec
|
||||||
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
DebugLib
|
||||||
|
HobLib
|
||||||
|
|
||||||
|
[FixedPcd]
|
||||||
|
gArmTokenSpaceGuid.PcdFvSize
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||||
|
|
||||||
|
[Depex]
|
||||||
|
gEfiPeiMemoryDiscoveredPpiGuid
|
@ -0,0 +1,24 @@
|
|||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x00010005
|
||||||
|
BASE_NAME = QcomPlatformClockInitLib
|
||||||
|
FILE_GUID = 6B439EE9-31E2-4486-A95F-0AF5FAA31599
|
||||||
|
MODULE_TYPE = BASE
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = QcomPlatformClockInitLib
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
msm8916-clock.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
ArmPkg/ArmPkg.dec
|
||||||
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
|
MSM8916Pkg/MSM8916Pkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
IoLib
|
||||||
|
ArmLib
|
||||||
|
|
||||||
|
[BuildOptions.AARCH64]
|
||||||
|
GCC:*_*_*_CC_FLAGS = -Wno-pointer-to-int-cast -Wno-overflow -Wno-int-conversion
|
||||||
|
|
612
MSM8916Pkg/Library/QcomPlatformClockInitLib/msm8916-clock.c
Normal file
612
MSM8916Pkg/Library/QcomPlatformClockInitLib/msm8916-clock.c
Normal file
@ -0,0 +1,612 @@
|
|||||||
|
/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer in the documentation and/or other materials provided
|
||||||
|
* with the distribution.
|
||||||
|
* * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Library/LKEnvLib.h>
|
||||||
|
#include <Chipset/clock.h>
|
||||||
|
#include <Chipset/clock_pll.h>
|
||||||
|
#include <Chipset/clock_lib2.h>
|
||||||
|
#include <Platform/clock.h>
|
||||||
|
#include <Platform/iomap.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Mux source select values */
|
||||||
|
#define cxo_source_val 0
|
||||||
|
#define gpll0_source_val 1
|
||||||
|
#define cxo_mm_source_val 0
|
||||||
|
#define gpll0_mm_source_val 5
|
||||||
|
#define gpll1_mm_source_val 1
|
||||||
|
struct clk_freq_tbl rcg_dummy_freq = F_END;
|
||||||
|
|
||||||
|
|
||||||
|
/* Clock Operations */
|
||||||
|
static struct clk_ops clk_ops_branch =
|
||||||
|
{
|
||||||
|
.enable = clock_lib2_branch_clk_enable,
|
||||||
|
.disable = clock_lib2_branch_clk_disable,
|
||||||
|
.set_rate = clock_lib2_branch_set_rate,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_ops clk_ops_rcg_mnd =
|
||||||
|
{
|
||||||
|
.enable = clock_lib2_rcg_enable,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_ops clk_ops_rcg =
|
||||||
|
{
|
||||||
|
.enable = clock_lib2_rcg_enable,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_ops clk_ops_cxo =
|
||||||
|
{
|
||||||
|
.enable = cxo_clk_enable,
|
||||||
|
.disable = cxo_clk_disable,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_ops clk_ops_pll_vote =
|
||||||
|
{
|
||||||
|
.enable = pll_vote_clk_enable,
|
||||||
|
.disable = pll_vote_clk_disable,
|
||||||
|
.auto_off = pll_vote_clk_disable,
|
||||||
|
.is_enabled = pll_vote_clk_is_enabled,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_ops clk_ops_vote =
|
||||||
|
{
|
||||||
|
.enable = clock_lib2_vote_clk_enable,
|
||||||
|
.disable = clock_lib2_vote_clk_disable,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Clock Sources */
|
||||||
|
static struct fixed_clk cxo_clk_src =
|
||||||
|
{
|
||||||
|
.c = {
|
||||||
|
.rate = 19200000,
|
||||||
|
.dbg_name = "cxo_clk_src",
|
||||||
|
.ops = &clk_ops_cxo,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pll_vote_clk gpll0_clk_src =
|
||||||
|
{
|
||||||
|
.en_reg = (void *) APCS_GPLL_ENA_VOTE,
|
||||||
|
.en_mask = BIT(0),
|
||||||
|
.status_reg = (void *) GPLL0_STATUS,
|
||||||
|
.status_mask = BIT(17),
|
||||||
|
.parent = &cxo_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.rate = 800000000,
|
||||||
|
.dbg_name = "gpll0_clk_src",
|
||||||
|
.ops = &clk_ops_pll_vote,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SDCC Clocks */
|
||||||
|
static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] =
|
||||||
|
{
|
||||||
|
F( 144000, cxo, 16, 3, 25),
|
||||||
|
F( 400000, cxo, 12, 1, 4),
|
||||||
|
F( 20000000, gpll0, 10, 1, 4),
|
||||||
|
F( 25000000, gpll0, 16, 1, 2),
|
||||||
|
F( 50000000, gpll0, 16, 0, 0),
|
||||||
|
F(100000000, gpll0, 8, 0, 0),
|
||||||
|
F(177770000, gpll0, 4.5, 0, 0),
|
||||||
|
F(200000000, gpll0, 4, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk sdcc1_apps_clk_src =
|
||||||
|
{
|
||||||
|
.cmd_reg = (uint32_t *) SDCC1_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) SDCC1_CFG_RCGR,
|
||||||
|
.m_reg = (uint32_t *) SDCC1_M,
|
||||||
|
.n_reg = (uint32_t *) SDCC1_N,
|
||||||
|
.d_reg = (uint32_t *) SDCC1_D,
|
||||||
|
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_mnd,
|
||||||
|
.freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "sdc1_clk",
|
||||||
|
.ops = &clk_ops_rcg_mnd,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* BLSP1_QUP2 Clocks */
|
||||||
|
static struct clk_freq_tbl ftbl_gcc_blsp1_qup2_i2c_apps_clk_src[] =
|
||||||
|
{
|
||||||
|
F( 96000, cxo, 10, 1, 2),
|
||||||
|
F( 4800000, cxo, 4, 0, 0),
|
||||||
|
F( 9600000, cxo, 2, 0, 0),
|
||||||
|
F( 16000000, gpll0, 10, 1, 5),
|
||||||
|
F( 19200000, gpll0, 1, 0, 0),
|
||||||
|
F( 25000000, gpll0, 16, 1, 2),
|
||||||
|
F( 50000000, gpll0, 16, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_sdcc1_apps_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) SDCC1_APPS_CBCR,
|
||||||
|
.parent = &sdcc1_apps_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_sdcc1_apps_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_sdcc1_ahb_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) SDCC1_AHB_CBCR,
|
||||||
|
.has_sibling = 1,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_sdcc1_ahb_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk sdcc2_apps_clk_src =
|
||||||
|
{
|
||||||
|
.cmd_reg = (uint32_t *) SDCC2_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) SDCC2_CFG_RCGR,
|
||||||
|
.m_reg = (uint32_t *) SDCC2_M,
|
||||||
|
.n_reg = (uint32_t *) SDCC2_N,
|
||||||
|
.d_reg = (uint32_t *) SDCC2_D,
|
||||||
|
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_mnd,
|
||||||
|
.freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "sdc2_clk",
|
||||||
|
.ops = &clk_ops_rcg_mnd,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_sdcc2_apps_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) SDCC2_APPS_CBCR,
|
||||||
|
.parent = &sdcc2_apps_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_sdcc2_apps_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_sdcc2_ahb_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) SDCC2_AHB_CBCR,
|
||||||
|
.has_sibling = 1,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_sdcc2_ahb_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* UART Clocks */
|
||||||
|
static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] =
|
||||||
|
{
|
||||||
|
F( 3686400, gpll0, 1, 72, 15625),
|
||||||
|
F( 7372800, gpll0, 1, 144, 15625),
|
||||||
|
F(14745600, gpll0, 1, 288, 15625),
|
||||||
|
F(16000000, gpll0, 10, 1, 5),
|
||||||
|
F(19200000, cxo, 1, 0, 0),
|
||||||
|
F(24000000, gpll0, 1, 3, 100),
|
||||||
|
F(25000000, gpll0, 16, 1, 2),
|
||||||
|
F(32000000, gpll0, 1, 1, 25),
|
||||||
|
F(40000000, gpll0, 1, 1, 20),
|
||||||
|
F(46400000, gpll0, 1, 29, 500),
|
||||||
|
F(48000000, gpll0, 1, 3, 50),
|
||||||
|
F(51200000, gpll0, 1, 8, 125),
|
||||||
|
F(56000000, gpll0, 1, 7, 100),
|
||||||
|
F(58982400, gpll0, 1,1152, 15625),
|
||||||
|
F(60000000, gpll0, 1, 3, 40),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk blsp1_uart1_apps_clk_src =
|
||||||
|
{
|
||||||
|
.cmd_reg = (uint32_t *) BLSP1_UART1_APPS_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) BLSP1_UART1_APPS_CFG_RCGR,
|
||||||
|
.m_reg = (uint32_t *) BLSP1_UART1_APPS_M,
|
||||||
|
.n_reg = (uint32_t *) BLSP1_UART1_APPS_N,
|
||||||
|
.d_reg = (uint32_t *) BLSP1_UART1_APPS_D,
|
||||||
|
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_mnd,
|
||||||
|
.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "blsp1_uart1_apps_clk",
|
||||||
|
.ops = &clk_ops_rcg_mnd,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_blsp1_uart1_apps_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) BLSP1_UART1_APPS_CBCR,
|
||||||
|
.parent = &blsp1_uart1_apps_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_blsp1_uart1_apps_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk blsp1_uart2_apps_clk_src =
|
||||||
|
{
|
||||||
|
.cmd_reg = (uint32_t *) BLSP1_UART2_APPS_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) BLSP1_UART2_APPS_CFG_RCGR,
|
||||||
|
.m_reg = (uint32_t *) BLSP1_UART2_APPS_M,
|
||||||
|
.n_reg = (uint32_t *) BLSP1_UART2_APPS_N,
|
||||||
|
.d_reg = (uint32_t *) BLSP1_UART2_APPS_D,
|
||||||
|
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_mnd,
|
||||||
|
.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "blsp1_uart2_apps_clk",
|
||||||
|
.ops = &clk_ops_rcg_mnd,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_blsp1_uart2_apps_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) BLSP1_UART2_APPS_CBCR,
|
||||||
|
.parent = &blsp1_uart2_apps_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_blsp1_uart2_apps_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct vote_clk gcc_blsp1_ahb_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) BLSP1_AHB_CBCR,
|
||||||
|
.vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
|
||||||
|
.en_mask = BIT(10),
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_blsp1_ahb_clk",
|
||||||
|
.ops = &clk_ops_vote,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* USB Clocks */
|
||||||
|
static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] =
|
||||||
|
{
|
||||||
|
F(80000000, gpll0, 10, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk usb_hs_system_clk_src =
|
||||||
|
{
|
||||||
|
.cmd_reg = (uint32_t *) USB_HS_SYSTEM_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) USB_HS_SYSTEM_CFG_RCGR,
|
||||||
|
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_gcc_usb_hs_system_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "usb_hs_system_clk",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_usb_hs_system_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) USB_HS_SYSTEM_CBCR,
|
||||||
|
.parent = &usb_hs_system_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_usb_hs_system_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_usb_hs_ahb_clk =
|
||||||
|
{
|
||||||
|
.cbcr_reg = (uint32_t *) USB_HS_AHB_CBCR,
|
||||||
|
.has_sibling = 1,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_usb_hs_ahb_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Display clocks */
|
||||||
|
static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
|
||||||
|
F_MM(19200000, cxo, 1, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_freq_tbl ftbl_mdss_esc1_1_clk[] = {
|
||||||
|
F_MM(19200000, cxo, 1, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_freq_tbl ftbl_mdp_clk[] = {
|
||||||
|
F( 80000000, gpll0, 10, 0, 0),
|
||||||
|
F( 100000000, gpll0, 8, 0, 0),
|
||||||
|
F( 200000000, gpll0, 4, 0, 0),
|
||||||
|
F( 320000000, gpll0, 2.5, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk dsi_esc0_clk_src = {
|
||||||
|
.cmd_reg = (uint32_t *) DSI_ESC0_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) DSI_ESC0_CFG_RCGR,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_mdss_esc0_1_clk,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "dsi_esc0_clk_src",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk dsi_esc1_clk_src = {
|
||||||
|
.cmd_reg = (uint32_t *) DSI_ESC1_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) DSI_ESC1_CFG_RCGR,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_mdss_esc1_1_clk,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "dsi_esc1_clk_src",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
|
||||||
|
F_MM(19200000, cxo, 1, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk vsync_clk_src = {
|
||||||
|
.cmd_reg = (uint32_t *) VSYNC_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) VSYNC_CFG_RCGR,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_mdss_vsync_clk,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "vsync_clk_src",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk mdss_esc0_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) DSI_ESC0_CBCR,
|
||||||
|
.parent = &dsi_esc0_clk_src.c,
|
||||||
|
.has_sibling = 0,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdss_esc0_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk mdss_esc1_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) DSI_ESC1_CBCR,
|
||||||
|
.parent = &dsi_esc1_clk_src.c,
|
||||||
|
.has_sibling = 0,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdss_esc1_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk mdss_axi_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) MDP_AXI_CBCR,
|
||||||
|
.has_sibling = 1,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdss_axi_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk mdp_ahb_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) MDP_AHB_CBCR,
|
||||||
|
.has_sibling = 1,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdp_ahb_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk mdss_mdp_clk_src = {
|
||||||
|
.cmd_reg = (uint32_t *) MDP_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) MDP_CFG_RCGR,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_mdp_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdss_mdp_clk_src",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk mdss_mdp_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) MDP_CBCR,
|
||||||
|
.parent = &mdss_mdp_clk_src.c,
|
||||||
|
.has_sibling = 0,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdss_mdp_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk mdss_vsync_clk = {
|
||||||
|
.cbcr_reg = MDSS_VSYNC_CBCR,
|
||||||
|
.parent = &vsync_clk_src.c,
|
||||||
|
.has_sibling = 0,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "mdss_vsync_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
|
||||||
|
F(160000000, gpll0, 5, 0, 0),
|
||||||
|
F_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rcg_clk ce1_clk_src = {
|
||||||
|
.cmd_reg = (uint32_t *) GCC_CRYPTO_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) GCC_CRYPTO_CFG_RCGR,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_gcc_ce1_clk,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "ce1_clk_src",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct vote_clk gcc_ce1_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) GCC_CRYPTO_CBCR,
|
||||||
|
.vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
|
||||||
|
.en_mask = BIT(2),
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_ce1_clk",
|
||||||
|
.ops = &clk_ops_vote,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct vote_clk gcc_ce1_ahb_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) GCC_CRYPTO_AHB_CBCR,
|
||||||
|
.vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
|
||||||
|
.en_mask = BIT(0),
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_ce1_ahb_clk",
|
||||||
|
.ops = &clk_ops_vote,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct vote_clk gcc_ce1_axi_clk = {
|
||||||
|
.cbcr_reg = (uint32_t *) GCC_CRYPTO_AXI_CBCR,
|
||||||
|
.vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
|
||||||
|
.en_mask = BIT(1),
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_ce1_axi_clk",
|
||||||
|
.ops = &clk_ops_vote,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static struct rcg_clk gcc_blsp1_qup2_i2c_apps_clk_src =
|
||||||
|
{
|
||||||
|
.cmd_reg = (uint32_t *) GCC_BLSP1_QUP2_CMD_RCGR,
|
||||||
|
.cfg_reg = (uint32_t *) GCC_BLSP1_QUP2_CFG_RCGR,
|
||||||
|
.set_rate = clock_lib2_rcg_set_rate_hid,
|
||||||
|
.freq_tbl = ftbl_gcc_blsp1_qup2_i2c_apps_clk_src,
|
||||||
|
.current_freq = &rcg_dummy_freq,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_blsp1_qup2_i2c_apps_clk_src",
|
||||||
|
.ops = &clk_ops_rcg,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
|
||||||
|
.cbcr_reg = GCC_BLSP1_QUP2_APPS_CBCR,
|
||||||
|
.parent = &gcc_blsp1_qup2_i2c_apps_clk_src.c,
|
||||||
|
|
||||||
|
.c = {
|
||||||
|
.dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
|
||||||
|
.ops = &clk_ops_branch,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
/* Clock lookup table */
|
||||||
|
static struct clk_lookup msm_clocks_8916[] =
|
||||||
|
{
|
||||||
|
CLK_LOOKUP("sdc1_iface_clk", gcc_sdcc1_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("sdc1_core_clk", gcc_sdcc1_apps_clk.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("sdc2_iface_clk", gcc_sdcc2_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("sdc2_core_clk", gcc_sdcc2_apps_clk.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("uart1_iface_clk", gcc_blsp1_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("uart1_core_clk", gcc_blsp1_uart1_apps_clk.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("uart2_iface_clk", gcc_blsp1_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("uart2_core_clk", gcc_blsp1_uart2_apps_clk.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("usb_iface_clk", gcc_usb_hs_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("usb_core_clk", gcc_usb_hs_system_clk.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("mdp_ahb_clk", mdp_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("mdss_esc0_clk", mdss_esc0_clk.c),
|
||||||
|
CLK_LOOKUP("mdss_esc1_clk", mdss_esc1_clk.c),
|
||||||
|
CLK_LOOKUP("mdss_axi_clk", mdss_axi_clk.c),
|
||||||
|
CLK_LOOKUP("mdss_vsync_clk", mdss_vsync_clk.c),
|
||||||
|
CLK_LOOKUP("mdss_mdp_clk_src", mdss_mdp_clk_src.c),
|
||||||
|
CLK_LOOKUP("mdss_mdp_clk", mdss_mdp_clk.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("ce1_ahb_clk", gcc_ce1_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("ce1_axi_clk", gcc_ce1_axi_clk.c),
|
||||||
|
CLK_LOOKUP("ce1_core_clk", gcc_ce1_clk.c),
|
||||||
|
CLK_LOOKUP("ce1_src_clk", ce1_clk_src.c),
|
||||||
|
|
||||||
|
CLK_LOOKUP("blsp1_qup2_ahb_iface_clk", gcc_blsp1_ahb_clk.c),
|
||||||
|
CLK_LOOKUP("gcc_blsp1_qup2_i2c_apps_clk_src", gcc_blsp1_qup2_i2c_apps_clk_src.c),
|
||||||
|
CLK_LOOKUP("gcc_blsp1_qup2_i2c_apps_clk", gcc_blsp1_qup2_i2c_apps_clk.c),
|
||||||
|
};
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
LibQcomPlatformClockInit (
|
||||||
|
struct clk_lookup **clist,
|
||||||
|
unsigned *num
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
*clist = msm_clocks_8916;
|
||||||
|
*num = ARRAY_SIZE(msm_clocks_8916);
|
||||||
|
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
DEC_SPECIFICATION = 0x0001001a
|
DEC_SPECIFICATION = 0x0001001a
|
||||||
PACKAGE_NAME = Pixel3XL
|
PACKAGE_NAME = MSM8916Pkg
|
||||||
PACKAGE_GUID = 7eb1de03-3910-4d1d-84ce-c17b53636b9a
|
PACKAGE_GUID = 7eb1de03-3910-4d1d-84ce-c17b53636b9a
|
||||||
PACKAGE_VERSION = 0.1
|
PACKAGE_VERSION = 0.1
|
||||||
|
|
||||||
@ -29,11 +29,19 @@
|
|||||||
Include # Root include for the package
|
Include # Root include for the package
|
||||||
|
|
||||||
[Guids.common]
|
[Guids.common]
|
||||||
gPixel3XLTokenSpaceGuid = { 0x99a14446, 0xaad7, 0xe460, {0xb4, 0xe5, 0x1f, 0x79, 0xaa, 0xa4, 0x93, 0xfd } }
|
gMSM8916PkgTokenSpaceGuid = { 0x99a14446, 0xaad7, 0xe460, {0xb4, 0xe5, 0x1f, 0x79, 0xaa, 0xa4, 0x93, 0xfd } }
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
gEFIDroidKeypadDeviceProtocolGuid = { 0xb27625b5, 0x0b6c, 0x4614, { 0xaa, 0x3c, 0x33, 0x13, 0xb5, 0x1d, 0x36, 0x46 } }
|
||||||
|
gQcomClockProtocolGuid = { 0x4fcc91c2, 0x9c4f, 0x4e3c, { 0xa6, 0x73, 0xc6, 0xdf, 0x62, 0xe0, 0x41, 0xd5 } }
|
||||||
|
gQcomBamProtocolGuid = { 0xacdd545a, 0xf1f6, 0x4272, { 0x81, 0xc5, 0x04, 0x93, 0xe3, 0x58, 0x05, 0x32 } }
|
||||||
|
|
||||||
[PcdsFixedAtBuild.common]
|
[PcdsFixedAtBuild.common]
|
||||||
# Simple FrameBuffer
|
# Simple FrameBuffer
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferAddress|0x00400000|UINT32|0x0000a400
|
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE|BOOLEAN|1
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferWidth|1080|UINT32|0x0000a401
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferAddress|0x0ec000000|UINT32|0x0000a400 # 0x7C400000
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferHeight|1920|UINT32|0x0000a402
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferWidth|720|UINT32|0x0000a401
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferPixelBpp|32|UINT32|0x0000a403
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferHeight|1520|UINT32|0x0000a402
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferPixelBpp|32|UINT32|0x0000a403
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferVisibleWidth|1080|UINT32|0x0000a404
|
||||||
|
gMSM8916PkgTokenSpaceGuid.PcdMipiFrameBufferVisibleHeight|1920|UINT32|0x0000a405
|
@ -16,7 +16,7 @@
|
|||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
[Defines]
|
[Defines]
|
||||||
PLATFORM_NAME = Pixel3XL
|
PLATFORM_NAME = MSM8916Pkg
|
||||||
PLATFORM_GUID = 28f1a3bf-193a-47e3-a7b9-5a435eaab2ee
|
PLATFORM_GUID = 28f1a3bf-193a-47e3-a7b9-5a435eaab2ee
|
||||||
PLATFORM_VERSION = 0.1
|
PLATFORM_VERSION = 0.1
|
||||||
DSC_SPECIFICATION = 0x00010019
|
DSC_SPECIFICATION = 0x00010019
|
||||||
@ -24,13 +24,23 @@
|
|||||||
SUPPORTED_ARCHITECTURES = AARCH64
|
SUPPORTED_ARCHITECTURES = AARCH64
|
||||||
BUILD_TARGETS = DEBUG|RELEASE
|
BUILD_TARGETS = DEBUG|RELEASE
|
||||||
SKUID_IDENTIFIER = DEFAULT
|
SKUID_IDENTIFIER = DEFAULT
|
||||||
FLASH_DEFINITION = Pixel3XL/Pixel3XL.fdf
|
FLASH_DEFINITION = MSM8916Pkg/MSM8916Pkg.fdf
|
||||||
|
|
||||||
!include Pixel3XL/CommonDsc.dsc.inc
|
!include MSM8916Pkg/CommonDsc.dsc.inc
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
|
||||||
|
VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf
|
||||||
|
VariableFlashInfoLib|MdeModulePkg/Library/BaseVariableFlashInfoLib/BaseVariableFlashInfoLib.inf
|
||||||
|
|
||||||
|
[LibraryClasses.common.DXE_RUNTIME_DRIVER]
|
||||||
|
VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
|
||||||
|
|
||||||
[LibraryClasses.common]
|
[LibraryClasses.common]
|
||||||
|
OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
|
||||||
ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
|
ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
|
||||||
ArmPlatformLib|Pixel3XL/Library/Pixel3XLLib/Pixel3XLLib.inf
|
ArmPlatformLib|MSM8916Pkg/Library/MSM8916PkgLib/MSM8916PkgLib.inf
|
||||||
|
CompilerIntrinsicsLib|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
|
||||||
|
|
||||||
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
|
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
|
||||||
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
|
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
|
||||||
@ -43,7 +53,7 @@
|
|||||||
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
|
||||||
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
|
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
|
||||||
|
|
||||||
SerialPortLib|Pixel3XL/Library/InMemorySerialPortLib/InMemorySerialPortLib.inf
|
SerialPortLib|MSM8916Pkg/Library/InMemorySerialPortLib/InMemorySerialPortLib.inf
|
||||||
RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf
|
RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf
|
||||||
TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf
|
TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf
|
||||||
|
|
||||||
@ -52,10 +62,10 @@
|
|||||||
|
|
||||||
# Network Libraries
|
# Network Libraries
|
||||||
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
|
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
|
||||||
NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
|
NetLib|NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
|
||||||
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
DpcLib|NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf
|
||||||
IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
|
IpIoLib|NetworkPkg/Library/DxeIpIoLib/DxeIpIoLib.inf
|
||||||
UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
|
UdpIoLib|NetworkPkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
|
||||||
|
|
||||||
# VariableRuntimeDxe Requirements
|
# VariableRuntimeDxe Requirements
|
||||||
SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
|
SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
|
||||||
@ -64,17 +74,24 @@
|
|||||||
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
|
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
|
||||||
|
|
||||||
# SimpleFbDxe
|
# SimpleFbDxe
|
||||||
FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
|
FrameBufferBltLib|MSM8916Pkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
|
||||||
|
|
||||||
|
SerialPortLib|MSM8916Pkg/Library/FrameBufferSerialPortLib/FrameBufferSerialPortLib.inf
|
||||||
|
PlatformBootManagerLib|MSM8916Pkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
|
||||||
|
MemoryInitPeiLib|MSM8916Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf
|
||||||
|
PlatformPeiLib|MSM8916Pkg/Library/PlatformPeiLib/PlatformPeiLib.inf
|
||||||
|
|
||||||
|
# SoC Drivers
|
||||||
|
# QcomPlatformClockInitLib|MSM8916Pkg/Library/QcomPlatformClockInitLib/QcomPlatformClockInitLib.inf
|
||||||
|
|
||||||
[LibraryClasses.common.SEC]
|
[LibraryClasses.common.SEC]
|
||||||
PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
|
PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
|
||||||
ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
|
ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
|
||||||
HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
|
HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
|
||||||
MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf
|
MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf
|
||||||
MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf
|
|
||||||
PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf
|
|
||||||
PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
|
PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
# Pcd Section - list of all EDK II PCD Entries defined by this Platform
|
# Pcd Section - list of all EDK II PCD Entries defined by this Platform
|
||||||
@ -87,29 +104,20 @@
|
|||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE
|
gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE
|
gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE
|
||||||
|
|
||||||
|
|
||||||
[PcdsFixedAtBuild.common]
|
[PcdsFixedAtBuild.common]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
|
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
|
||||||
|
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString|L"Alpha"
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString|L"Alpha"
|
||||||
|
|
||||||
# System Memory (4GB)
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemorySize|0xe0000000
|
|
||||||
|
|
||||||
# We only boot one processor here!
|
# We only boot one processor here!
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount|1
|
gArmPlatformTokenSpaceGuid.PcdCoreCount|1
|
||||||
gArmPlatformTokenSpaceGuid.PcdClusterCount|1
|
gArmPlatformTokenSpaceGuid.PcdClusterCount|1
|
||||||
|
|
||||||
#
|
|
||||||
# ARM PrimeCell
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# ARM General Interrupt Controller
|
# ARM General Interrupt Controller
|
||||||
#
|
#
|
||||||
gArmTokenSpaceGuid.PcdGicDistributorBase|0x17a00000
|
gArmTokenSpaceGuid.PcdGicDistributorBase|0x123001000
|
||||||
gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x17a60000
|
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0x123001000
|
||||||
|
|
||||||
gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x12
|
gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x12
|
||||||
gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x13
|
gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x13
|
||||||
@ -117,6 +125,8 @@
|
|||||||
# GUID of the UI app
|
# GUID of the UI app
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
|
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
|
||||||
|
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|5
|
||||||
|
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
|
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
|
||||||
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000
|
gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000
|
||||||
@ -133,10 +143,6 @@
|
|||||||
#
|
#
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE
|
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE
|
||||||
|
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferAddress|0x9d400000
|
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferWidth|1440
|
|
||||||
gPixel3XLTokenSpaceGuid.PcdMipiFrameBufferHeight|2960
|
|
||||||
|
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20
|
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -187,16 +193,22 @@
|
|||||||
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
|
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# GPIO
|
# SoC Drivers
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# MSM8916Pkg/Drivers/ClockDxe/ClockDxe.inf
|
||||||
|
# MSM8916Pkg/Drivers/BamDxe/BamDxe.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# Virtual Keyboard
|
# Virtual Keyboard
|
||||||
#
|
#
|
||||||
EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf
|
EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf
|
||||||
|
|
||||||
Pixel3XL/Pixel3XLDxe/Pixel3XLDxe.inf
|
#
|
||||||
Pixel3XL/SimpleFbDxe/SimpleFbDxe.inf
|
# Platform Dxes
|
||||||
|
#
|
||||||
|
MSM8916Pkg/Drivers/MSM8916PkgDxe/MSM8916PkgDxe.inf
|
||||||
|
MSM8916Pkg/Drivers/SimpleFbDxe/SimpleFbDxe.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Host Support
|
# USB Host Support
|
||||||
@ -233,24 +245,26 @@
|
|||||||
MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
||||||
MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
|
MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
|
||||||
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
||||||
Pixel3XL/AcpiTables/AcpiTables.inf
|
MSM8916Pkg/AcpiTables/AcpiTables.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# SMBIOS Support
|
# SMBIOS Support
|
||||||
#
|
#
|
||||||
Pixel3XL/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
MSM8916Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
||||||
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
|
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bds
|
# Bds
|
||||||
#
|
#
|
||||||
|
MdeModulePkg/Universal/PrintDxe/PrintDxe.inf
|
||||||
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
||||||
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf {
|
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf {
|
||||||
<LibraryClasses>
|
<LibraryClasses>
|
||||||
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
|
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
|
||||||
}
|
}
|
||||||
MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
|
|
||||||
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
|
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
|
||||||
|
MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
|
||||||
|
MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf
|
||||||
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
|
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
|
||||||
MdeModulePkg/Application/UiApp/UiApp.inf {
|
MdeModulePkg/Application/UiApp/UiApp.inf {
|
||||||
<LibraryClasses>
|
<LibraryClasses>
|
||||||
@ -259,3 +273,25 @@
|
|||||||
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
|
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
|
||||||
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
|
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
|
||||||
}
|
}
|
||||||
|
ShellPkg/Application/Shell/Shell.inf {
|
||||||
|
<LibraryClasses>
|
||||||
|
ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
|
||||||
|
NULL|ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.inf
|
||||||
|
HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
|
||||||
|
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
||||||
|
BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
|
||||||
|
<PcdsFixedAtBuild>
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF
|
||||||
|
gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
|
||||||
|
}
|
||||||
|
!ifdef $(INCLUDE_TFTP_COMMAND)
|
||||||
|
ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf
|
||||||
|
!endif #$(INCLUDE_TFTP_COMMAND)
|
@ -24,14 +24,14 @@
|
|||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
[FD.PIXEL3XL_UEFI]
|
[FD.MSM8916PKG_UEFI]
|
||||||
BaseAddress = 0xd0000000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash.
|
BaseAddress = 0x80080000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash.
|
||||||
Size = 0x01000000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device
|
Size = 0x00200000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device
|
||||||
ErasePolarity = 1
|
ErasePolarity = 1
|
||||||
|
|
||||||
# This one is tricky, it must be: BlockSize * NumBlocks = Size
|
# This one is tricky, it must be: BlockSize * NumBlocks = Size
|
||||||
BlockSize = 0x00001000
|
BlockSize = 0x00001000
|
||||||
NumBlocks = 0x1000
|
NumBlocks = 0x200
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
@ -68,7 +68,7 @@ DATA = {
|
|||||||
0x00, 0x00, 0x00, 0x00 # res5
|
0x00, 0x00, 0x00, 0x00 # res5
|
||||||
}
|
}
|
||||||
|
|
||||||
0x00008000|0xff8000
|
0x00008000|0x001f8000
|
||||||
gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
|
gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
|
||||||
FV = FVMAIN_COMPACT
|
FV = FVMAIN_COMPACT
|
||||||
|
|
||||||
@ -147,8 +147,11 @@ READ_LOCK_STATUS = TRUE
|
|||||||
#
|
#
|
||||||
INF EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf
|
INF EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf
|
||||||
|
|
||||||
INF Pixel3XL/Pixel3XLDxe/Pixel3XLDxe.inf
|
#
|
||||||
INF Pixel3XL/SimpleFbDxe/SimpleFbDxe.inf
|
# Platform Dxes
|
||||||
|
#
|
||||||
|
INF MSM8916Pkg/Drivers/MSM8916PkgDxe/MSM8916PkgDxe.inf
|
||||||
|
INF MSM8916Pkg/Drivers/SimpleFbDxe/SimpleFbDxe.inf
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -189,32 +192,33 @@ READ_LOCK_STATUS = TRUE
|
|||||||
INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
|
||||||
INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
|
INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
|
||||||
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
|
||||||
INF RuleOverride = ACPITABLE Pixel3XL/AcpiTables/AcpiTables.inf
|
INF RuleOverride = ACPITABLE MSM8916Pkg/AcpiTables/AcpiTables.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# SMBIOS Support
|
# SMBIOS Support
|
||||||
#
|
#
|
||||||
INF Pixel3XL/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
INF MSM8916Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
||||||
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
|
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
# UEFI applications
|
# UEFI applications
|
||||||
#
|
#
|
||||||
|
INF ShellPkg/Application/Shell/Shell.inf
|
||||||
|
!ifdef $(INCLUDE_TFTP_COMMAND)
|
||||||
|
INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf
|
||||||
|
!endif #$(INCLUDE_TFTP_COMMAND)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bds
|
# Bds
|
||||||
#
|
#
|
||||||
|
INF MdeModulePkg/Universal/PrintDxe/PrintDxe.inf
|
||||||
INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
||||||
INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
|
|
||||||
INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
|
INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
|
||||||
|
INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
|
||||||
|
INF MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf
|
||||||
INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
|
INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
|
||||||
INF MdeModulePkg/Application/UiApp/UiApp.inf
|
INF MdeModulePkg/Application/UiApp/UiApp.inf
|
||||||
|
|
||||||
# Linux (pretends to be uefi shell)
|
|
||||||
FILE APPLICATION = 7C04A583-9E3E-4f1c-AD65-E05268D0B4D1 {
|
|
||||||
SECTION PE32 = Pixel3XL/linux.efi
|
|
||||||
}
|
|
||||||
|
|
||||||
[FV.FVMAIN_COMPACT]
|
[FV.FVMAIN_COMPACT]
|
||||||
FvAlignment = 8
|
FvAlignment = 8
|
||||||
ERASE_POLARITY = 1
|
ERASE_POLARITY = 1
|
||||||
@ -241,4 +245,4 @@ READ_LOCK_STATUS = TRUE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
!include Pixel3XL/CommonFdf.fdf.inc
|
!include MSM8916Pkg/CommonFdf.fdf.inc
|
17
README.md
17
README.md
@ -1,12 +1,7 @@
|
|||||||
Attempt to create a minimal EDK2 for Pixel 3 XL.
|
Attempt to create a minimal EDK2 for MSM8916 devices
|
||||||
|
|
||||||
[](https://dev.azure.com/zhuoweizhang/edk2-pixel3/_build/latest?definitionId=1&branchName=master)
|
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
Boots to efi shell.
|
||||||
Can partially boot the Fedora 29 aarch64 kernel: the kernel gets graphical output then panics when calling EFI runtime services.
|
|
||||||
|
|
||||||
Since there's no internal storage support yet, Use the addlinux branch to embed a Linux kernel in the UEFI firmware.
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
Tested on Ubuntu 18.04.
|
Tested on Ubuntu 18.04.
|
||||||
@ -31,10 +26,16 @@ sudo apt install build-essential uuid-dev iasl git nasm python3-distutils gcc-aa
|
|||||||
|
|
||||||
Also see [EDK2 website](https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC#Install_required_software_from_apt)
|
Also see [EDK2 website](https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC#Install_required_software_from_apt)
|
||||||
|
|
||||||
|
Then ./firstrun.sh
|
||||||
|
|
||||||
Finally, ./build.sh.
|
Finally, ./build.sh.
|
||||||
|
|
||||||
Then fastboot boot uefi.img.
|
Then fastboot boot uefi.img from lk2nd.
|
||||||
|
|
||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
SimpleFbDxe screen driver is from imbushuo's [Lumia950XLPkg](https://github.com/WOA-Project/Lumia950XLPkg).
|
SimpleFbDxe screen driver is from imbushuo's [Lumia950XLPkg](https://github.com/WOA-Project/Lumia950XLPkg).
|
||||||
|
|
||||||
|
Zhuowei for making edk2-pixel3
|
||||||
|
|
||||||
|
all my friends for supporting me (yes also mis012 :)
|
||||||
|
6
build.sh
6
build.sh
@ -3,6 +3,6 @@
|
|||||||
set -e
|
set -e
|
||||||
. build_common.sh
|
. build_common.sh
|
||||||
# not actually GCC5; it's GCC7 on Ubuntu 18.04.
|
# not actually GCC5; it's GCC7 on Ubuntu 18.04.
|
||||||
GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -s -n 0 -a AARCH64 -t GCC5 -p Pixel3XL/Pixel3XL.dsc
|
GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -s -n 0 -a AARCH64 -t GCC5 -p MSM8916Pkg/Devices/j5lte.dsc
|
||||||
gzip -c < workspace/Build/Pixel3XL/DEBUG_GCC5/FV/PIXEL3XL_UEFI.fd >uefi.img
|
gzip -c < workspace/Build/MSM8916Pkg/DEBUG_GCC5/FV/MSM8916PKG_UEFI.fd >uefi.img
|
||||||
cat crosshatch.dtb >>uefi.img
|
cat device_specific/j5lte.dtb >>uefi.img
|
||||||
|
8
build_j5xlte.sh
Executable file
8
build_j5xlte.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# based on the instructions from edk2-platform
|
||||||
|
set -e
|
||||||
|
. build_common.sh
|
||||||
|
# not actually GCC5; it's GCC7 on Ubuntu 18.04.
|
||||||
|
GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -s -n 0 -a AARCH64 -t GCC5 -p MSM8916Pkg/Devices/j5lte.dsc
|
||||||
|
gzip -c < workspace/Build/MSM8916Pkg/DEBUG_GCC5/FV/MSM8916PKG_UEFI.fd >uefi.img
|
||||||
|
cat device_specific/j5xlte.dtb >>uefi.img
|
BIN
crosshatch.dtb
BIN
crosshatch.dtb
Binary file not shown.
BIN
device_specific/j5lte.dtb
Normal file
BIN
device_specific/j5lte.dtb
Normal file
Binary file not shown.
BIN
device_specific/j5xlte.dtb
Normal file
BIN
device_specific/j5xlte.dtb
Normal file
Binary file not shown.
24
device_specific/reference.dts
Normal file
24
device_specific/reference.dts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
// This is used by the bootloader to find the correct DTB
|
||||||
|
qcom,msm-id = <206 0>; // qcom,msm-id = <247 0>; for APQ8016
|
||||||
|
qcom,board-id = <0xCE08FF01 4>; /* FIXME: Check your downstream device tree */
|
||||||
|
|
||||||
|
model = "Samsung Galaxy J5 2016"; // FIXME
|
||||||
|
compatible = "samsung,j510f", "qcom,msm8916"; // FIXME
|
||||||
|
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
|
||||||
|
// The bootloader gets really sad if it cannot find those nodes
|
||||||
|
chosen { };
|
||||||
|
|
||||||
|
memory@0 {
|
||||||
|
device_type = "memory";
|
||||||
|
/* We expect the bootloader to fill in the reg */
|
||||||
|
reg = <0 0 0 0>;
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user