* [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition @ 2017-03-31 14:15 Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 01/13] Platforms/VExpress: remove unused logo PCD Ard Biesheuvel ` (9 more replies) 0 siblings, 10 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel This is the OpenPlatformPkg counterpart of the series ArmPlatformgPkg spring cleaning -- now includes Juno [v2] sent out out roughly the same time as this one. Note that they are inter- dependent, i.e., applying one without the other will not result in a working build. Changes since v1: - add cleanup patches for Juno as well, including a switch to the generic PCI host bridge driver - patches are updated to account for the API change in DtPlatformDxe -- the platform glue is now provided by DtPlatformDtbLoaderLib implementations - use existing copies of VExpress dtb images Ard Biesheuvel (13): Platforms/VExpress: remove unused logo PCD Platforms/VExpress: remove unused StatusCode references Platforms/VExpress: get rid of Tiano compression Platforms/VExpress: remove BdsLib library class resolutions Platforms/TC2: move to new DtPlatformDxe driver Platforms/FVP: add DtPlatformDtbLoaderLib implementation Platforms/FVP-AArch64: switch to simpler DT platform driver Platforms/Juno: add non-discoverable device driver and library Platforms/Juno: add PciHostBridgeLib implementation Platforms/Juno: switch to generic PCI host bridge driver Platforms/Juno: remove BdsLib dependency Platforms/Juno: add DtPlatformDtbLoaderLib implementation Platforms/Juno: switch to DtPlatformDxe Platforms/ARM/Juno/ArmJuno.dsc | 39 +- Platforms/ARM/Juno/ArmJuno.fdf | 31 +- Platforms/ARM/Juno/DeviceTree/juno-r1.dtb | Bin 0 -> 23627 bytes Platforms/ARM/Juno/DeviceTree/juno-r2.dtb | Bin 0 -> 23627 bytes Platforms/ARM/Juno/DeviceTree/juno.dtb | Bin 0 -> 22431 bytes Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.c | 71 +++ Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf | 38 ++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c | 185 ++++++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf | 77 +++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c | 191 ++++++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h | 107 ++++ Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc | 22 +- Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf | 27 +- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 33 +- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 54 +- Platforms/ARM/VExpress/ArmVExpress.dsc.inc | 24 +- Platforms/ARM/VExpress/DeviceTree/vexpress-v2m-rs1.dtsi | 442 +++++++++++++ Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dtb | Bin 0 -> 19070 bytes Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dts | 659 ++++++++++++++++++++ Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.c | 134 ++++ Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf | 39 ++ 21 files changed, 2025 insertions(+), 148 deletions(-) create mode 100644 Platforms/ARM/Juno/DeviceTree/juno-r1.dtb create mode 100644 Platforms/ARM/Juno/DeviceTree/juno-r2.dtb create mode 100644 Platforms/ARM/Juno/DeviceTree/juno.dtb create mode 100644 Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.c create mode 100644 Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf create mode 100644 Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c create mode 100644 Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf create mode 100644 Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c create mode 100644 Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h create mode 100644 Platforms/ARM/VExpress/DeviceTree/vexpress-v2m-rs1.dtsi create mode 100644 Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dtb create mode 100644 Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dts create mode 100644 Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.c create mode 100644 Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf -- 2.9.3 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 01/13] Platforms/VExpress: remove unused logo PCD 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 02/13] Platforms/VExpress: remove unused StatusCode references Ard Biesheuvel ` (8 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel This file and associated PCD are no longer used by our BDS code, so remove them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf | 7 ------- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 7 ------- 2 files changed, 14 deletions(-) diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf index 90746158351e..5c3a2316cb68 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf @@ -175,13 +175,6 @@ FvNameGuid = 73dcb643-3862-4904-9076-a94af1890243 INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf INF MdeModulePkg/Application/UiApp/UiApp.inf - # - # TianoCore logo (splash screen) - # - FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) { - SECTION RAW = MdeModulePkg/Logo/Logo.bmp - } - # FV Filesystem INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf index 2ace4d8e04c3..81966d2c3bce 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf @@ -167,13 +167,6 @@ FvNameGuid = 87940482-fc81-41c3-87e6-399cf85ac8a0 INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf INF MdeModulePkg/Application/UiApp/UiApp.inf - # - # TianoCore logo (splash screen) - # - FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) { - SECTION RAW = MdeModulePkg/Logo/Logo.bmp - } - # FV Filesystem INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 02/13] Platforms/VExpress: remove unused StatusCode references 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 01/13] Platforms/VExpress: remove unused logo PCD Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 03/13] Platforms/VExpress: get rid of Tiano compression Ard Biesheuvel ` (7 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel We never use the status code facility, so remove the libraries and other references to it. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 1 - Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 1 - Platforms/ARM/VExpress/ArmVExpress.dsc.inc | 11 ++--------- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc index 56feed48495f..f76893626e08 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc @@ -209,7 +209,6 @@ ArmPlatformPkg/PlatformPei/PlatformPeim.inf ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf ArmPkg/Drivers/CpuPei/CpuPei.inf - IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf Nt32Pkg/BootModePei/BootModePei.inf MdeModulePkg/Universal/Variable/Pei/VariablePei.inf MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf { diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf index 81966d2c3bce..fbf8e9b30c0e 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf @@ -229,7 +229,6 @@ READ_LOCK_STATUS = TRUE INF ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf INF ArmPkg/Drivers/CpuPei/CpuPei.inf INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf - INF IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf !endif diff --git a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc index fdd5341971b7..aed889747b2e 100644 --- a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc +++ b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc @@ -155,6 +155,8 @@ CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf + ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf + [LibraryClasses.common.SEC] ArmPlatformSecExtraActionLib|ArmPlatformPkg/Library/DebugSecExtraActionLib/DebugSecExtraActionLib.inf @@ -182,7 +184,6 @@ MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf - ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf @@ -197,7 +198,6 @@ MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf - ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf @@ -214,14 +214,12 @@ HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf - ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf [LibraryClasses.common.DXE_DRIVER] - ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf @@ -234,12 +232,10 @@ HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf # UiApp dependencies - ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf [LibraryClasses.common.UEFI_DRIVER] - ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf @@ -249,7 +245,6 @@ [LibraryClasses.common.DXE_RUNTIME_DRIVER] HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf - ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf ArmPlatformSysConfigLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSysConfigRuntimeLib/ArmVExpressSysConfigRuntimeLib.inf !if $(SECURE_BOOT_ENABLE) == TRUE @@ -366,8 +361,6 @@ # DEBUG_ERROR 0x80000000 // Error gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000000F - gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 - gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand|"" gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor|0x07 gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize|0x10000 -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 03/13] Platforms/VExpress: get rid of Tiano compression 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 01/13] Platforms/VExpress: remove unused logo PCD Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 02/13] Platforms/VExpress: remove unused StatusCode references Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 04/13] Platforms/VExpress: remove BdsLib library class resolutions Ard Biesheuvel ` (6 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel There are some references to Tiano compression and to libraries that implement it, but we never use it. So get rid of it. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/ArmJuno.fdf | 9 --------- Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf | 9 --------- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 9 --------- Platforms/ARM/VExpress/ArmVExpress.dsc.inc | 5 ----- 4 files changed, 32 deletions(-) diff --git a/Platforms/ARM/Juno/ArmJuno.fdf b/Platforms/ARM/Juno/ArmJuno.fdf index beee7afd11fb..aadde45164a5 100644 --- a/Platforms/ARM/Juno/ArmJuno.fdf +++ b/Platforms/ARM/Juno/ArmJuno.fdf @@ -322,15 +322,6 @@ READ_LOCK_STATUS = TRUE UI STRING="$(MODULE_NAME)" Optional } -[Rule.Common.PEIM.TIANOCOMPRESSED] - FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 { - PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex - GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE { - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi - UI STRING="$(MODULE_NAME)" Optional - } - } - [Rule.Common.DXE_CORE] FILE DXE_CORE = $(NAMED_GUID) { PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf index 5c3a2316cb68..1903389c8edd 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf @@ -265,15 +265,6 @@ READ_LOCK_STATUS = TRUE UI STRING="$(MODULE_NAME)" Optional } -[Rule.Common.PEIM.TIANOCOMPRESSED] - FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 { - PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex - GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE { - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi - UI STRING="$(MODULE_NAME)" Optional - } - } - [Rule.Common.DXE_CORE] FILE DXE_CORE = $(NAMED_GUID) { PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf index fbf8e9b30c0e..262515150dd9 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf @@ -286,15 +286,6 @@ READ_LOCK_STATUS = TRUE UI STRING="$(MODULE_NAME)" Optional } -[Rule.Common.PEIM.TIANOCOMPRESSED] - FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 { - PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex - GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE { - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi - UI STRING="$(MODULE_NAME)" Optional - } - } - [Rule.Common.DXE_CORE] FILE DXE_CORE = $(NAMED_GUID) { PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi diff --git a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc index aed889747b2e..9dfe2ac9e440 100644 --- a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc +++ b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc @@ -186,7 +186,6 @@ PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf - UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf @@ -201,7 +200,6 @@ OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf - UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf @@ -215,7 +213,6 @@ MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf - UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf @@ -226,7 +223,6 @@ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf [LibraryClasses.common.UEFI_APPLICATION] - UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf @@ -236,7 +232,6 @@ DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf [LibraryClasses.common.UEFI_DRIVER] - UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 04/13] Platforms/VExpress: remove BdsLib library class resolutions 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (2 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 03/13] Platforms/VExpress: get rid of Tiano compression Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 05/13] Platforms/TC2: move to new DtPlatformDxe driver Ard Biesheuvel ` (5 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel ArmHwDxe and ArmFvpDxe no longer require a BdsLib library class resolution, so remove the explicit ones from the various .DSCs. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc | 5 +---- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc index ae91a78d2dd8..55640837ba7c 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc +++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc @@ -244,10 +244,7 @@ # # Platform # - ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmHwDxe.inf { - <LibraryClasses> - BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf - } + ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmHwDxe.inf # # Filesystems diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc index f76893626e08..1b3c770da03f 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc @@ -292,10 +292,7 @@ # # Platform Driver # - ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf { - <LibraryClasses> - BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf - } + ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf OvmfPkg/VirtioBlkDxe/VirtioBlk.inf # -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 05/13] Platforms/TC2: move to new DtPlatformDxe driver 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (3 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 04/13] Platforms/VExpress: remove BdsLib library class resolutions Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 06/13] Platforms/FVP: add DtPlatformDtbLoaderLib implementation Ard Biesheuvel ` (4 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel Replace the slightly overengineered FdtPlatformDxe driver with the new and simple DtPlatformDxe driver, which simply exposes a single builtin device tree binary to the OS. Note that this driver is configurable, i.e., it allows ACPI to be selected instead of device tree, in which case AcpiPlatformDxe is allowed to run. Note that this means we have to move the reference to FdtPlatformDxe.inf from the shared .DSC to the individual .DSCs for Juno and FVP that will keep using it for now. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/ArmJuno.dsc | 8 + Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc | 17 +- Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf | 13 +- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 8 + Platforms/ARM/VExpress/ArmVExpress.dsc.inc | 8 - Platforms/ARM/VExpress/DeviceTree/vexpress-v2m-rs1.dtsi | 442 +++++++++++++ Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dtb | Bin 0 -> 19070 bytes Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dts | 659 ++++++++++++++++++++ 8 files changed, 1133 insertions(+), 22 deletions(-) diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc index 1f56643ae996..71dc5463a84f 100644 --- a/Platforms/ARM/Juno/ArmJuno.dsc +++ b/Platforms/ARM/Juno/ArmJuno.dsc @@ -336,6 +336,14 @@ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf } + # + # FDT installation + # + EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf { + <LibraryClasses> + BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf + } + [Components.AARCH64] # # EBC diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc index 55640837ba7c..43856fe5c3ae 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc +++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc @@ -55,6 +55,8 @@ TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf + DtPlatformDtbLoaderLib|EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf + [BuildOptions] !ifdef ARM_BIGLITTLE_TC2 *_*_ARM_ARCHCC_FLAGS = -DARM_BIGLITTLE_TC2=1 @@ -173,11 +175,6 @@ gEmbeddedTokenSpaceGuid.PcdLan9118DefaultNegotiationTimeout|400000 # - # Define the device path to the FDT for the platform - # - gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)/ca15a7" - - # # ARM Architectural Timer Frequency # !ifdef ARM_BIGLITTLE_TC2 @@ -269,7 +266,15 @@ MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf - MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf { + <LibraryClasses> + NULL|EmbeddedPkg/Library/PlatformHasAcpiLib/PlatformHasAcpiLib.inf + } + + # + # FDT installation + # + EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf # # Bds diff --git a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf index 1903389c8edd..8bdde76a2ad5 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.fdf @@ -181,14 +181,11 @@ FvNameGuid = 73dcb643-3862-4904-9076-a94af1890243 # # FDT installation # - # The UEFI driver is at the end of the list of the driver to be dispatched - # after the device drivers (eg: Ethernet) to ensure we have support for them. - INF EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf - - # Example to add a Device Tree to the Firmware Volume - #FILE FREEFORM = PCD(gArmVExpressTokenSpaceGuid.PcdFdtVExpressHwA15x2A7x3) { - # SECTION RAW = ArmPlatformPkg/ArmVExpressPkg/Fdts/vexpress-v2p-ca15_a7.dtb - #} + INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf + + FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 { + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dtb + } [FV.FVMAIN_COMPACT] FvBaseAddress = 0xB0000000 diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc index 1b3c770da03f..e6778aafe8c6 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc @@ -315,3 +315,11 @@ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf } + + # + # FDT installation + # + EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf { + <LibraryClasses> + BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf + } diff --git a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc index 9dfe2ac9e440..8c4de54c8875 100644 --- a/Platforms/ARM/VExpress/ArmVExpress.dsc.inc +++ b/Platforms/ARM/VExpress/ArmVExpress.dsc.inc @@ -491,14 +491,6 @@ MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf # - # FDT installation - # - EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf { - <LibraryClasses> - BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf - } - - # # UEFI application (Shell Embedded Boot Loader) # ShellPkg/Application/Shell/Shell.inf { diff --git a/Platforms/ARM/VExpress/DeviceTree/vexpress-v2m-rs1.dtsi b/Platforms/ARM/VExpress/DeviceTree/vexpress-v2m-rs1.dtsi new file mode 100644 index 000000000000..3086efacd00e --- /dev/null +++ b/Platforms/ARM/VExpress/DeviceTree/vexpress-v2m-rs1.dtsi @@ -0,0 +1,442 @@ +/* + * ARM Ltd. Versatile Express + * + * Motherboard Express uATX + * V2M-P1 + * + * HBI-0190D + * + * RS1 memory map ("ARM Cortex-A Series memory map" in the board's + * Technical Reference Manual) + * + * WARNING! The hardware described in this file is independent from the + * original variant (vexpress-v2m.dtsi), but there is a strong + * correspondence between the two configurations. + * + * TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT + * CHANGES TO vexpress-v2m.dtsi! + */ + + motherboard { + model = "V2M-P1"; + arm,hbi = <0x190>; + arm,vexpress,site = <0>; + arm,v2m-memory-map = "rs1"; + compatible = "arm,vexpress,v2m-p1", "simple-bus"; + #address-cells = <2>; /* SMB chipselect number and offset */ + #size-cells = <1>; + #interrupt-cells = <1>; + ranges; + + flash@0,00000000 { + compatible = "arm,vexpress-flash", "cfi-flash"; + reg = <0 0x00000000 0x04000000>, + <4 0x00000000 0x04000000>; + bank-width = <4>; + }; + + psram@1,00000000 { + compatible = "arm,vexpress-psram", "mtd-ram"; + reg = <1 0x00000000 0x02000000>; + bank-width = <4>; + }; + + v2m_video_ram: vram@2,00000000 { + compatible = "arm,vexpress-vram"; + reg = <2 0x00000000 0x00800000>; + }; + + ethernet@2,02000000 { + compatible = "smsc,lan9118", "smsc,lan9115"; + reg = <2 0x02000000 0x10000>; + interrupts = <15>; + phy-mode = "mii"; + reg-io-width = <4>; + smsc,irq-active-high; + smsc,irq-push-pull; + vdd33a-supply = <&v2m_fixed_3v3>; + vddvario-supply = <&v2m_fixed_3v3>; + }; + + usb@2,03000000 { + compatible = "nxp,usb-isp1761"; + reg = <2 0x03000000 0x20000>; + interrupts = <16>; + port1-otg; + }; + + iofpga@3,00000000 { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 3 0 0x200000>; + + v2m_sysreg: sysreg@010000 { + compatible = "arm,vexpress-sysreg"; + reg = <0x010000 0x1000>; + + v2m_led_gpios: sys_led { + compatible = "arm,vexpress-sysreg,sys_led"; + gpio-controller; + #gpio-cells = <2>; + }; + + v2m_mmc_gpios: sys_mci { + compatible = "arm,vexpress-sysreg,sys_mci"; + gpio-controller; + #gpio-cells = <2>; + }; + + v2m_flash_gpios: sys_flash { + compatible = "arm,vexpress-sysreg,sys_flash"; + gpio-controller; + #gpio-cells = <2>; + }; + }; + + v2m_sysctl: sysctl@020000 { + compatible = "arm,sp810", "arm,primecell"; + reg = <0x020000 0x1000>; + clocks = <&v2m_refclk32khz>, <&v2m_refclk1mhz>, <&smbclk>; + clock-names = "refclk", "timclk", "apb_pclk"; + #clock-cells = <1>; + clock-output-names = "timerclken0", "timerclken1", "timerclken2", "timerclken3"; + assigned-clocks = <&v2m_sysctl 0>, <&v2m_sysctl 1>, <&v2m_sysctl 3>, <&v2m_sysctl 3>; + assigned-clock-parents = <&v2m_refclk1mhz>, <&v2m_refclk1mhz>, <&v2m_refclk1mhz>, <&v2m_refclk1mhz>; + }; + + /* PCI-E I2C bus */ + v2m_i2c_pcie: i2c@030000 { + compatible = "arm,versatile-i2c"; + reg = <0x030000 0x1000>; + + #address-cells = <1>; + #size-cells = <0>; + + pcie-switch@60 { + compatible = "idt,89hpes32h8"; + reg = <0x60>; + }; + }; + + aaci@040000 { + compatible = "arm,pl041", "arm,primecell"; + reg = <0x040000 0x1000>; + interrupts = <11>; + clocks = <&smbclk>; + clock-names = "apb_pclk"; + }; + + mmci@050000 { + compatible = "arm,pl180", "arm,primecell"; + reg = <0x050000 0x1000>; + interrupts = <9 10>; + cd-gpios = <&v2m_mmc_gpios 0 0>; + wp-gpios = <&v2m_mmc_gpios 1 0>; + max-frequency = <12000000>; + vmmc-supply = <&v2m_fixed_3v3>; + clocks = <&v2m_clk24mhz>, <&smbclk>; + clock-names = "mclk", "apb_pclk"; + }; + + kmi@060000 { + compatible = "arm,pl050", "arm,primecell"; + reg = <0x060000 0x1000>; + interrupts = <12>; + clocks = <&v2m_clk24mhz>, <&smbclk>; + clock-names = "KMIREFCLK", "apb_pclk"; + }; + + kmi@070000 { + compatible = "arm,pl050", "arm,primecell"; + reg = <0x070000 0x1000>; + interrupts = <13>; + clocks = <&v2m_clk24mhz>, <&smbclk>; + clock-names = "KMIREFCLK", "apb_pclk"; + }; + + v2m_serial0: uart@090000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x090000 0x1000>; + interrupts = <5>; + clocks = <&v2m_oscclk2>, <&smbclk>; + clock-names = "uartclk", "apb_pclk"; + }; + + v2m_serial1: uart@0a0000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0a0000 0x1000>; + interrupts = <6>; + clocks = <&v2m_oscclk2>, <&smbclk>; + clock-names = "uartclk", "apb_pclk"; + }; + + v2m_serial2: uart@0b0000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0b0000 0x1000>; + interrupts = <7>; + clocks = <&v2m_oscclk2>, <&smbclk>; + clock-names = "uartclk", "apb_pclk"; + }; + + v2m_serial3: uart@0c0000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0c0000 0x1000>; + interrupts = <8>; + clocks = <&v2m_oscclk2>, <&smbclk>; + clock-names = "uartclk", "apb_pclk"; + }; + + wdt@0f0000 { + compatible = "arm,sp805", "arm,primecell"; + reg = <0x0f0000 0x1000>; + interrupts = <0>; + clocks = <&v2m_refclk32khz>, <&smbclk>; + clock-names = "wdogclk", "apb_pclk"; + }; + + v2m_timer01: timer@110000 { + compatible = "arm,sp804", "arm,primecell"; + reg = <0x110000 0x1000>; + interrupts = <2>; + clocks = <&v2m_sysctl 0>, <&v2m_sysctl 1>, <&smbclk>; + clock-names = "timclken1", "timclken2", "apb_pclk"; + }; + + v2m_timer23: timer@120000 { + compatible = "arm,sp804", "arm,primecell"; + reg = <0x120000 0x1000>; + interrupts = <3>; + clocks = <&v2m_sysctl 2>, <&v2m_sysctl 3>, <&smbclk>; + clock-names = "timclken1", "timclken2", "apb_pclk"; + }; + + /* DVI I2C bus */ + v2m_i2c_dvi: i2c@160000 { + compatible = "arm,versatile-i2c"; + reg = <0x160000 0x1000>; + + #address-cells = <1>; + #size-cells = <0>; + + dvi-transmitter@39 { + compatible = "sil,sii9022-tpi", "sil,sii9022"; + reg = <0x39>; + }; + + dvi-transmitter@60 { + compatible = "sil,sii9022-cpi", "sil,sii9022"; + reg = <0x60>; + }; + }; + + rtc@170000 { + compatible = "arm,pl031", "arm,primecell"; + reg = <0x170000 0x1000>; + interrupts = <4>; + clocks = <&smbclk>; + clock-names = "apb_pclk"; + }; + + compact-flash@1a0000 { + compatible = "arm,vexpress-cf", "ata-generic"; + reg = <0x1a0000 0x100 + 0x1a0100 0xf00>; + reg-shift = <2>; + }; + + clcd@1f0000 { + compatible = "arm,pl111", "arm,primecell"; + reg = <0x1f0000 0x1000>; + interrupt-names = "combined"; + interrupts = <14>; + clocks = <&v2m_oscclk1>, <&smbclk>; + clock-names = "clcdclk", "apb_pclk"; + memory-region = <&v2m_video_ram>; + max-memory-bandwidth = <50350000>; /* 16bpp @ 25.175MHz */ + + port { + v2m_clcd_pads: endpoint { + remote-endpoint = <&v2m_clcd_panel>; + arm,pl11x,tft-r0g0b0-pads = <0 8 16>; + }; + }; + + panel { + compatible = "panel-dpi"; + + port { + v2m_clcd_panel: endpoint { + remote-endpoint = <&v2m_clcd_pads>; + }; + }; + + panel-timing { + clock-frequency = <25175000>; + hactive = <640>; + hback-porch = <40>; + hfront-porch = <24>; + hsync-len = <96>; + vactive = <480>; + vback-porch = <32>; + vfront-porch = <11>; + vsync-len = <2>; + }; + }; + }; + }; + + v2m_fixed_3v3: fixed-regulator-0 { + compatible = "regulator-fixed"; + regulator-name = "3V3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + v2m_clk24mhz: clk24mhz { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + clock-output-names = "v2m:clk24mhz"; + }; + + v2m_refclk1mhz: refclk1mhz { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <1000000>; + clock-output-names = "v2m:refclk1mhz"; + }; + + v2m_refclk32khz: refclk32khz { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <32768>; + clock-output-names = "v2m:refclk32khz"; + }; + + leds { + compatible = "gpio-leds"; + + user1 { + label = "v2m:green:user1"; + gpios = <&v2m_led_gpios 0 0>; + linux,default-trigger = "heartbeat"; + }; + + user2 { + label = "v2m:green:user2"; + gpios = <&v2m_led_gpios 1 0>; + linux,default-trigger = "mmc0"; + }; + + user3 { + label = "v2m:green:user3"; + gpios = <&v2m_led_gpios 2 0>; + linux,default-trigger = "cpu0"; + }; + + user4 { + label = "v2m:green:user4"; + gpios = <&v2m_led_gpios 3 0>; + linux,default-trigger = "cpu1"; + }; + + user5 { + label = "v2m:green:user5"; + gpios = <&v2m_led_gpios 4 0>; + linux,default-trigger = "cpu2"; + }; + + user6 { + label = "v2m:green:user6"; + gpios = <&v2m_led_gpios 5 0>; + linux,default-trigger = "cpu3"; + }; + + user7 { + label = "v2m:green:user7"; + gpios = <&v2m_led_gpios 6 0>; + linux,default-trigger = "cpu4"; + }; + + user8 { + label = "v2m:green:user8"; + gpios = <&v2m_led_gpios 7 0>; + linux,default-trigger = "cpu5"; + }; + }; + + mcc { + compatible = "arm,vexpress,config-bus"; + arm,vexpress,config-bridge = <&v2m_sysreg>; + + oscclk0 { + /* MCC static memory clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 0>; + freq-range = <25000000 60000000>; + #clock-cells = <0>; + clock-output-names = "v2m:oscclk0"; + }; + + v2m_oscclk1: oscclk1 { + /* CLCD clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 1>; + freq-range = <23750000 65000000>; + #clock-cells = <0>; + clock-output-names = "v2m:oscclk1"; + }; + + v2m_oscclk2: oscclk2 { + /* IO FPGA peripheral clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 2>; + freq-range = <24000000 24000000>; + #clock-cells = <0>; + clock-output-names = "v2m:oscclk2"; + }; + + volt-vio { + /* Logic level voltage */ + compatible = "arm,vexpress-volt"; + arm,vexpress-sysreg,func = <2 0>; + regulator-name = "VIO"; + regulator-always-on; + label = "VIO"; + }; + + temp-mcc { + /* MCC internal operating temperature */ + compatible = "arm,vexpress-temp"; + arm,vexpress-sysreg,func = <4 0>; + label = "MCC"; + }; + + reset { + compatible = "arm,vexpress-reset"; + arm,vexpress-sysreg,func = <5 0>; + }; + + muxfpga { + compatible = "arm,vexpress-muxfpga"; + arm,vexpress-sysreg,func = <7 0>; + }; + + shutdown { + compatible = "arm,vexpress-shutdown"; + arm,vexpress-sysreg,func = <8 0>; + }; + + reboot { + compatible = "arm,vexpress-reboot"; + arm,vexpress-sysreg,func = <9 0>; + }; + + dvimode { + compatible = "arm,vexpress-dvimode"; + arm,vexpress-sysreg,func = <11 0>; + }; + }; + }; diff --git a/Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dtb b/Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dtb new file mode 100644 index 0000000000000000000000000000000000000000..fe655a05cc6e48d2a9d4247c85c04472e1a146ab GIT binary patch literal 19070 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 GB>x`}bAiYJ literal 0 HcmV?d00001 diff --git a/Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dts b/Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dts new file mode 100644 index 000000000000..bd107c5a0226 --- /dev/null +++ b/Platforms/ARM/VExpress/DeviceTree/vexpress-v2p-ca15_a7.dts @@ -0,0 +1,659 @@ +/* + * ARM Ltd. Versatile Express + * + * CoreTile Express A15x2 A7x3 + * Cortex-A15_A7 MPCore (V2P-CA15_A7) + * + * HBI-0249A + */ + +/dts-v1/; + +/ { + model = "V2P-CA15_CA7"; + arm,hbi = <0x249>; + arm,vexpress,site = <0xf>; + compatible = "arm,vexpress,v2p-ca15_a7", "arm,vexpress"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + chosen { }; + + aliases { + serial0 = &v2m_serial0; + serial1 = &v2m_serial1; + serial2 = &v2m_serial2; + serial3 = &v2m_serial3; + i2c0 = &v2m_i2c_dvi; + i2c1 = &v2m_i2c_pcie; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a15"; + reg = <0>; + cci-control-port = <&cci_control1>; + cpu-idle-states = <&CLUSTER_SLEEP_BIG>; + capacity-dmips-mhz = <1024>; + }; + + cpu1: cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a15"; + reg = <1>; + cci-control-port = <&cci_control1>; + cpu-idle-states = <&CLUSTER_SLEEP_BIG>; + capacity-dmips-mhz = <1024>; + }; + + cpu2: cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a7"; + reg = <0x100>; + cci-control-port = <&cci_control2>; + cpu-idle-states = <&CLUSTER_SLEEP_LITTLE>; + capacity-dmips-mhz = <516>; + }; + + cpu3: cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a7"; + reg = <0x101>; + cci-control-port = <&cci_control2>; + cpu-idle-states = <&CLUSTER_SLEEP_LITTLE>; + capacity-dmips-mhz = <516>; + }; + + cpu4: cpu@4 { + device_type = "cpu"; + compatible = "arm,cortex-a7"; + reg = <0x102>; + cci-control-port = <&cci_control2>; + cpu-idle-states = <&CLUSTER_SLEEP_LITTLE>; + capacity-dmips-mhz = <516>; + }; + + idle-states { + CLUSTER_SLEEP_BIG: cluster-sleep-big { + compatible = "arm,idle-state"; + local-timer-stop; + entry-latency-us = <1000>; + exit-latency-us = <700>; + min-residency-us = <2000>; + }; + + CLUSTER_SLEEP_LITTLE: cluster-sleep-little { + compatible = "arm,idle-state"; + local-timer-stop; + entry-latency-us = <1000>; + exit-latency-us = <500>; + min-residency-us = <2500>; + }; + }; + }; + + memory@80000000 { + device_type = "memory"; + reg = <0 0x80000000 0 0x40000000>; + }; + + wdt@2a490000 { + compatible = "arm,sp805", "arm,primecell"; + reg = <0 0x2a490000 0 0x1000>; + interrupts = <0 98 4>; + clocks = <&oscclk6a>, <&oscclk6a>; + clock-names = "wdogclk", "apb_pclk"; + }; + + hdlcd@2b000000 { + compatible = "arm,hdlcd"; + reg = <0 0x2b000000 0 0x1000>; + interrupts = <0 85 4>; + clocks = <&hdlcd_clk>; + clock-names = "pxlclk"; + }; + + memory-controller@2b0a0000 { + compatible = "arm,pl341", "arm,primecell"; + reg = <0 0x2b0a0000 0 0x1000>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0 0x2c001000 0 0x1000>, + <0 0x2c002000 0 0x2000>, + <0 0x2c004000 0 0x2000>, + <0 0x2c006000 0 0x2000>; + interrupts = <1 9 0xf04>; + }; + + cci@2c090000 { + compatible = "arm,cci-400"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0 0x2c090000 0 0x1000>; + ranges = <0x0 0x0 0x2c090000 0x10000>; + + cci_control1: slave-if@4000 { + compatible = "arm,cci-400-ctrl-if"; + interface-type = "ace"; + reg = <0x4000 0x1000>; + }; + + cci_control2: slave-if@5000 { + compatible = "arm,cci-400-ctrl-if"; + interface-type = "ace"; + reg = <0x5000 0x1000>; + }; + + pmu@9000 { + compatible = "arm,cci-400-pmu,r0"; + reg = <0x9000 0x5000>; + interrupts = <0 105 4>, + <0 101 4>, + <0 102 4>, + <0 103 4>, + <0 104 4>; + }; + }; + + memory-controller@7ffd0000 { + compatible = "arm,pl354", "arm,primecell"; + reg = <0 0x7ffd0000 0 0x1000>; + interrupts = <0 86 4>, + <0 87 4>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + }; + + dma@7ff00000 { + compatible = "arm,pl330", "arm,primecell"; + reg = <0 0x7ff00000 0 0x1000>; + interrupts = <0 92 4>, + <0 88 4>, + <0 89 4>, + <0 90 4>, + <0 91 4>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + }; + + scc@7fff0000 { + compatible = "arm,vexpress-scc,v2p-ca15_a7", "arm,vexpress-scc"; + reg = <0 0x7fff0000 0 0x1000>; + interrupts = <0 95 4>; + }; + + timer { + compatible = "arm,armv7-timer"; + interrupts = <1 13 0xf08>, + <1 14 0xf08>, + <1 11 0xf08>, + <1 10 0xf08>; + }; + + pmu_a15 { + compatible = "arm,cortex-a15-pmu"; + interrupts = <0 68 4>, + <0 69 4>; + interrupt-affinity = <&cpu0>, + <&cpu1>; + }; + + pmu_a7 { + compatible = "arm,cortex-a7-pmu"; + interrupts = <0 128 4>, + <0 129 4>, + <0 130 4>; + interrupt-affinity = <&cpu2>, + <&cpu3>, + <&cpu4>; + }; + + oscclk6a: oscclk6a { + /* Reference 24MHz clock */ + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + clock-output-names = "oscclk6a"; + }; + + dcc { + compatible = "arm,vexpress,config-bus"; + arm,vexpress,config-bridge = <&v2m_sysreg>; + + oscclk0 { + /* A15 PLL 0 reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 0>; + freq-range = <17000000 50000000>; + #clock-cells = <0>; + clock-output-names = "oscclk0"; + }; + + oscclk1 { + /* A15 PLL 1 reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 1>; + freq-range = <17000000 50000000>; + #clock-cells = <0>; + clock-output-names = "oscclk1"; + }; + + oscclk2 { + /* A7 PLL 0 reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 2>; + freq-range = <17000000 50000000>; + #clock-cells = <0>; + clock-output-names = "oscclk2"; + }; + + oscclk3 { + /* A7 PLL 1 reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 3>; + freq-range = <17000000 50000000>; + #clock-cells = <0>; + clock-output-names = "oscclk3"; + }; + + oscclk4 { + /* External AXI master clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 4>; + freq-range = <20000000 40000000>; + #clock-cells = <0>; + clock-output-names = "oscclk4"; + }; + + hdlcd_clk: oscclk5 { + /* HDLCD PLL reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 5>; + freq-range = <23750000 165000000>; + #clock-cells = <0>; + clock-output-names = "oscclk5"; + }; + + smbclk: oscclk6 { + /* Static memory controller clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 6>; + freq-range = <20000000 40000000>; + #clock-cells = <0>; + clock-output-names = "oscclk6"; + }; + + oscclk7 { + /* SYS PLL reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 7>; + freq-range = <17000000 50000000>; + #clock-cells = <0>; + clock-output-names = "oscclk7"; + }; + + oscclk8 { + /* DDR2 PLL reference clock */ + compatible = "arm,vexpress-osc"; + arm,vexpress-sysreg,func = <1 8>; + freq-range = <20000000 50000000>; + #clock-cells = <0>; + clock-output-names = "oscclk8"; + }; + + volt-a15 { + /* A15 CPU core voltage */ + compatible = "arm,vexpress-volt"; + arm,vexpress-sysreg,func = <2 0>; + regulator-name = "A15 Vcore"; + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <1050000>; + regulator-always-on; + label = "A15 Vcore"; + }; + + volt-a7 { + /* A7 CPU core voltage */ + compatible = "arm,vexpress-volt"; + arm,vexpress-sysreg,func = <2 1>; + regulator-name = "A7 Vcore"; + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <1050000>; + regulator-always-on; + label = "A7 Vcore"; + }; + + amp-a15 { + /* Total current for the two A15 cores */ + compatible = "arm,vexpress-amp"; + arm,vexpress-sysreg,func = <3 0>; + label = "A15 Icore"; + }; + + amp-a7 { + /* Total current for the three A7 cores */ + compatible = "arm,vexpress-amp"; + arm,vexpress-sysreg,func = <3 1>; + label = "A7 Icore"; + }; + + temp-dcc { + /* DCC internal temperature */ + compatible = "arm,vexpress-temp"; + arm,vexpress-sysreg,func = <4 0>; + label = "DCC"; + }; + + power-a15 { + /* Total power for the two A15 cores */ + compatible = "arm,vexpress-power"; + arm,vexpress-sysreg,func = <12 0>; + label = "A15 Pcore"; + }; + + power-a7 { + /* Total power for the three A7 cores */ + compatible = "arm,vexpress-power"; + arm,vexpress-sysreg,func = <12 1>; + label = "A7 Pcore"; + }; + + energy-a15 { + /* Total energy for the two A15 cores */ + compatible = "arm,vexpress-energy"; + arm,vexpress-sysreg,func = <13 0>, <13 1>; + label = "A15 Jcore"; + }; + + energy-a7 { + /* Total energy for the three A7 cores */ + compatible = "arm,vexpress-energy"; + arm,vexpress-sysreg,func = <13 2>, <13 3>; + label = "A7 Jcore"; + }; + }; + + etb@0,20010000 { + compatible = "arm,coresight-etb10", "arm,primecell"; + reg = <0 0x20010000 0 0x1000>; + + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + etb_in_port: endpoint { + slave-mode; + remote-endpoint = <&replicator_out_port0>; + }; + }; + }; + + tpiu@0,20030000 { + compatible = "arm,coresight-tpiu", "arm,primecell"; + reg = <0 0x20030000 0 0x1000>; + + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + tpiu_in_port: endpoint { + slave-mode; + remote-endpoint = <&replicator_out_port1>; + }; + }; + }; + + replicator { + /* non-configurable replicators don't show up on the + * AMBA bus. As such no need to add "arm,primecell". + */ + compatible = "arm,coresight-replicator"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + /* replicator output ports */ + port@0 { + reg = <0>; + replicator_out_port0: endpoint { + remote-endpoint = <&etb_in_port>; + }; + }; + + port@1 { + reg = <1>; + replicator_out_port1: endpoint { + remote-endpoint = <&tpiu_in_port>; + }; + }; + + /* replicator input port */ + port@2 { + reg = <0>; + replicator_in_port0: endpoint { + slave-mode; + remote-endpoint = <&funnel_out_port0>; + }; + }; + }; + }; + + funnel@0,20040000 { + compatible = "arm,coresight-funnel", "arm,primecell"; + reg = <0 0x20040000 0 0x1000>; + + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + ports { + #address-cells = <1>; + #size-cells = <0>; + + /* funnel output port */ + port@0 { + reg = <0>; + funnel_out_port0: endpoint { + remote-endpoint = + <&replicator_in_port0>; + }; + }; + + /* funnel input ports */ + port@1 { + reg = <0>; + funnel_in_port0: endpoint { + slave-mode; + remote-endpoint = <&ptm0_out_port>; + }; + }; + + port@2 { + reg = <1>; + funnel_in_port1: endpoint { + slave-mode; + remote-endpoint = <&ptm1_out_port>; + }; + }; + + port@3 { + reg = <2>; + funnel_in_port2: endpoint { + slave-mode; + remote-endpoint = <&etm0_out_port>; + }; + }; + + /* Input port #3 is for ITM, not supported here */ + + port@4 { + reg = <4>; + funnel_in_port4: endpoint { + slave-mode; + remote-endpoint = <&etm1_out_port>; + }; + }; + + port@5 { + reg = <5>; + funnel_in_port5: endpoint { + slave-mode; + remote-endpoint = <&etm2_out_port>; + }; + }; + }; + }; + + ptm@0,2201c000 { + compatible = "arm,coresight-etm3x", "arm,primecell"; + reg = <0 0x2201c000 0 0x1000>; + + cpu = <&cpu0>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + ptm0_out_port: endpoint { + remote-endpoint = <&funnel_in_port0>; + }; + }; + }; + + ptm@0,2201d000 { + compatible = "arm,coresight-etm3x", "arm,primecell"; + reg = <0 0x2201d000 0 0x1000>; + + cpu = <&cpu1>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + ptm1_out_port: endpoint { + remote-endpoint = <&funnel_in_port1>; + }; + }; + }; + + etm@0,2203c000 { + compatible = "arm,coresight-etm3x", "arm,primecell"; + reg = <0 0x2203c000 0 0x1000>; + + cpu = <&cpu2>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + etm0_out_port: endpoint { + remote-endpoint = <&funnel_in_port2>; + }; + }; + }; + + etm@0,2203d000 { + compatible = "arm,coresight-etm3x", "arm,primecell"; + reg = <0 0x2203d000 0 0x1000>; + + cpu = <&cpu3>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + etm1_out_port: endpoint { + remote-endpoint = <&funnel_in_port4>; + }; + }; + }; + + etm@0,2203e000 { + compatible = "arm,coresight-etm3x", "arm,primecell"; + reg = <0 0x2203e000 0 0x1000>; + + cpu = <&cpu4>; + clocks = <&oscclk6a>; + clock-names = "apb_pclk"; + port { + etm2_out_port: endpoint { + remote-endpoint = <&funnel_in_port5>; + }; + }; + }; + + smb@08000000 { + compatible = "simple-bus"; + + #address-cells = <2>; + #size-cells = <1>; + ranges = <0 0 0 0x08000000 0x04000000>, + <1 0 0 0x14000000 0x04000000>, + <2 0 0 0x18000000 0x04000000>, + <3 0 0 0x1c000000 0x04000000>, + <4 0 0 0x0c000000 0x04000000>, + <5 0 0 0x10000000 0x04000000>; + + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 63>; + interrupt-map = <0 0 0 &gic 0 0 4>, + <0 0 1 &gic 0 1 4>, + <0 0 2 &gic 0 2 4>, + <0 0 3 &gic 0 3 4>, + <0 0 4 &gic 0 4 4>, + <0 0 5 &gic 0 5 4>, + <0 0 6 &gic 0 6 4>, + <0 0 7 &gic 0 7 4>, + <0 0 8 &gic 0 8 4>, + <0 0 9 &gic 0 9 4>, + <0 0 10 &gic 0 10 4>, + <0 0 11 &gic 0 11 4>, + <0 0 12 &gic 0 12 4>, + <0 0 13 &gic 0 13 4>, + <0 0 14 &gic 0 14 4>, + <0 0 15 &gic 0 15 4>, + <0 0 16 &gic 0 16 4>, + <0 0 17 &gic 0 17 4>, + <0 0 18 &gic 0 18 4>, + <0 0 19 &gic 0 19 4>, + <0 0 20 &gic 0 20 4>, + <0 0 21 &gic 0 21 4>, + <0 0 22 &gic 0 22 4>, + <0 0 23 &gic 0 23 4>, + <0 0 24 &gic 0 24 4>, + <0 0 25 &gic 0 25 4>, + <0 0 26 &gic 0 26 4>, + <0 0 27 &gic 0 27 4>, + <0 0 28 &gic 0 28 4>, + <0 0 29 &gic 0 29 4>, + <0 0 30 &gic 0 30 4>, + <0 0 31 &gic 0 31 4>, + <0 0 32 &gic 0 32 4>, + <0 0 33 &gic 0 33 4>, + <0 0 34 &gic 0 34 4>, + <0 0 35 &gic 0 35 4>, + <0 0 36 &gic 0 36 4>, + <0 0 37 &gic 0 37 4>, + <0 0 38 &gic 0 38 4>, + <0 0 39 &gic 0 39 4>, + <0 0 40 &gic 0 40 4>, + <0 0 41 &gic 0 41 4>, + <0 0 42 &gic 0 42 4>; + + /include/ "vexpress-v2m-rs1.dtsi" + }; + + site2: hsb@40000000 { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 0 0x40000000 0x3fef0000>; + #interrupt-cells = <1>; + interrupt-map-mask = <0 3>; + interrupt-map = <0 0 &gic 0 36 4>, + <0 1 &gic 0 37 4>, + <0 2 &gic 0 38 4>, + <0 3 &gic 0 39 4>; + }; +}; -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 06/13] Platforms/FVP: add DtPlatformDtbLoaderLib implementation 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (4 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 05/13] Platforms/TC2: move to new DtPlatformDxe driver Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 07/13] Platforms/FVP-AArch64: switch to simpler DT platform driver Ard Biesheuvel ` (3 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel In preparation of switching to DtPlatformDxe to supply the device tree image to the OS, add an implementation of DtPlatformDtbLoaderLib that loads the correct version from an FV. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.c | 134 ++++++++++++++++++++ Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf | 39 ++++++ 2 files changed, 173 insertions(+) diff --git a/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.c b/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.c new file mode 100644 index 000000000000..3a5613c83709 --- /dev/null +++ b/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.c @@ -0,0 +1,134 @@ +/** @file +* +* Copyright (c) 2017, Linaro, Ltd. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +#include <PiDxe.h> + +#include <Library/ArmGicLib.h> +#include <Library/BaseLib.h> +#include <Library/DebugLib.h> +#include <Library/DxeServicesLib.h> +#include <Library/IoLib.h> +#include <Library/MemoryAllocationLib.h> + +#include "ArmPlatform.h" + +typedef enum { + ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, + ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, + ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, + ARM_FVP_FOUNDATION_GICV2, + ARM_FVP_FOUNDATION_GICV2_LEGACY, + ARM_FVP_FOUNDATION_GICV3, + ARM_FVP_UNKNOWN, +} ARM_VEXPRESS_PLATFORM_ID; + +ARM_VEXPRESS_PLATFORM_ID +GetPlatformId ( + VOID + ) +{ + UINT32 SysId; + UINT32 FvpSysId; + UINT32 VariantSysId; + ARM_GIC_ARCH_REVISION GicRevision; + + SysId = MmioRead32 (ARM_VE_SYS_ID_REG); + + // Remove the GIC variant to identify if we are running on the FVP Base or + // Foundation models + FvpSysId = SysId & (ARM_FVP_SYS_ID_HBI_MASK | ARM_FVP_SYS_ID_PLAT_MASK ); + // Extract the variant from the SysId + VariantSysId = SysId & ARM_FVP_SYS_ID_VARIANT_MASK; + + if (FvpSysId == ARM_FVP_BASE_BOARD_SYS_ID) { + if (VariantSysId == ARM_FVP_GIC_VE_MMAP) { + // FVP Base Model with legacy GIC memory map -- no longer supported + return ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY; + } else { + GicRevision = ArmGicGetSupportedArchRevision (); + + if (GicRevision == ARM_GIC_ARCH_REVISION_2) { + // FVP Base Model with GICv2 support + return ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2; + } else { + // FVP Base Model with GICv3 support + return ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3; + } + } + } else if (FvpSysId == ARM_FVP_FOUNDATION_BOARD_SYS_ID) { + if (VariantSysId == ARM_FVP_GIC_VE_MMAP) { + // FVP Foundation Model with legacy GIC memory map -- no longer supported + return ARM_FVP_FOUNDATION_GICV2_LEGACY; + } else { + GicRevision = ArmGicGetSupportedArchRevision (); + + if (GicRevision == ARM_GIC_ARCH_REVISION_2) { + // FVP Foundation Model with GICv2 + return ARM_FVP_FOUNDATION_GICV2; + } else { + // FVP Foundation Model with GICv3 + return ARM_FVP_FOUNDATION_GICV3; + } + } + } + return ARM_FVP_UNKNOWN; +} + +/** + Return a pool allocated copy of the DTB image that is appropriate for + booting the current platform via DT. + + @param[out] Dtb Pointer to the DTB copy + @param[out] DtbSize Size of the DTB copy + + @retval EFI_SUCCESS Operation completed successfully + @retval EFI_NOT_FOUND No suitable DTB image could be located + @retval EFI_OUT_OF_RESOURCES No pool memory available + +**/ +EFI_STATUS +EFIAPI +DtPlatformLoadDtb ( + OUT VOID **Dtb, + OUT UINTN *DtbSize + ) +{ + EFI_STATUS Status; + VOID *OrigDtb; + VOID *CopyDtb; + UINTN OrigDtbSize; + ARM_VEXPRESS_PLATFORM_ID PlatformId; + + PlatformId = GetPlatformId (); + ASSERT (PlatformId < ARM_FVP_UNKNOWN); + if (PlatformId >= ARM_FVP_UNKNOWN) { + return EFI_NOT_FOUND; + } + + Status = GetSectionFromAnyFv (&gDtPlatformDefaultDtbFileGuid, + EFI_SECTION_RAW, (UINTN)PlatformId, &OrigDtb, &OrigDtbSize); + if (EFI_ERROR (Status)) { + return EFI_NOT_FOUND; + } + + CopyDtb = AllocateCopyPool (OrigDtbSize, OrigDtb); + if (CopyDtb == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + *Dtb = CopyDtb; + *DtbSize = OrigDtbSize; + + return EFI_SUCCESS; +} diff --git a/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf b/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf new file mode 100644 index 000000000000..5012101fe8db --- /dev/null +++ b/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf @@ -0,0 +1,39 @@ +/** @file +* +* Copyright (c) 2017, Linaro, Ltd. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = ArmVExpressDtPlatformDtbLoaderLib + FILE_GUID = 050d6041-1508-4ae7-a69f-250155ccb567 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DtPlatformDtbLoaderLib|DXE_DRIVER + +[Sources] + ArmVExpressDtPlatformDtbLoaderLib.c + +[Packages] + ArmPkg/ArmPkg.dec + MdePkg/MdePkg.dec + EmbeddedPkg/EmbeddedPkg.dec + +[LibraryClasses] + ArmGicLib + BaseLib + DxeServicesLib + IoLib + MemoryAllocationLib + +[Guids] + gDtPlatformDefaultDtbFileGuid -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 07/13] Platforms/FVP-AArch64: switch to simpler DT platform driver 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (5 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 06/13] Platforms/FVP: add DtPlatformDtbLoaderLib implementation Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 08/13] Platforms/Juno: add non-discoverable device driver and library Ard Biesheuvel ` (2 subsequent siblings) 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel Replace the elaborate but awkward FdtPlatformDxe with the new DtPlatformDxe, which supports embedded DTBs only. This is sufficient for virtually all use cases, and if it is not, there are various way to override the device tree binary presented to the OS. As a bonus, this driver makes ACPI and DT mutually exclusive - this can be configured via the setup screen. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 27 +++++++------- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 37 ++++++-------------- 2 files changed, 24 insertions(+), 40 deletions(-) diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc index e6778aafe8c6..1125f22f9172 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc @@ -35,6 +35,7 @@ DEFINE EDK2_SKIP_PEICORE=1 !endif + DT_SUPPORT = FALSE !include OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress.dsc.inc @@ -59,6 +60,8 @@ FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf !endif + DtPlatformDtbLoaderLib|OpenPlatformPkg/Platforms/ARM/VExpress/Library/ArmVExpressDtPlatformDtbLoaderLib/ArmVExpressDtPlatformDtbLoaderLib.inf + [LibraryClasses.common.SEC] ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressLibSec.inf @@ -173,15 +176,6 @@ # the entire FVP address space can be covered by 36 bit VAs gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|36 -[PcdsDynamicDefault.common] - # - # The size of a dynamic PCD of the (VOID*) type can not be increased at run - # time from its size at build time. Set the "PcdFdtDevicePaths" PCD to a 128 - # character "empty" string, to allow to be able to set FDT text device paths - # up to 128 characters long. - # - gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths|L" " - ################################################################################ # # Components Section - list of all EDK II Modules needed by this Platform @@ -262,7 +256,13 @@ # # ACPI Support # - MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf { +!if $(DT_SUPPORT) == TRUE + <LibraryClasses> + NULL|EmbeddedPkg/Library/PlatformHasAcpiLib/PlatformHasAcpiLib.inf +!endif + } + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf OpenPlatformPkg/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf @@ -316,10 +316,9 @@ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf } +!if $(DT_SUPPORT) == TRUE # # FDT installation # - EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf { - <LibraryClasses> - BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf - } + EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf +!endif diff --git a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf index 262515150dd9..7b2397417534 100644 --- a/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf +++ b/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf @@ -170,35 +170,20 @@ FvNameGuid = 87940482-fc81-41c3-87e6-399cf85ac8a0 # FV Filesystem INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf +!if $(DT_SUPPORT) == TRUE # # FDT installation # - # The UEFI driver is at the end of the list of the driver to be dispatched - # after the device drivers (eg: Ethernet) to ensure we have support for them. - INF EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf - -!ifdef $(DTB_DIR) - # - # Embed flattened device tree (FDT) images for all known - # variants of this platform - # - FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2) { - $(DTB_DIR)/fvp-base-gicv2-psci.dtb - } - FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy) { - $(DTB_DIR)/fvp-base-gicv2legacy-psci.dtb - } - FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3) { - $(DTB_DIR)/fvp-base-gicv3-psci.dtb - } - FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2) { - $(DTB_DIR)/fvp-foundation-gicv2-psci.dtb - } - FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy) { - $(DTB_DIR)/fvp-foundation-gicv2legacy-psci.dtb - } - FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3) { - $(DTB_DIR)/fvp-foundation-gicv3-psci.dtb + INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf + + # builtin device tree binaries -- order matches ARM_VEXPRESS_PLATFORM_ID + FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 { + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv2-psci.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv2legacy-psci.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-base-gicv3-psci.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv2-psci.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv2legacy-psci.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/VExpress/DeviceTree/fvp-foundation-gicv3-psci.dtb } !endif -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 08/13] Platforms/Juno: add non-discoverable device driver and library 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (6 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 07/13] Platforms/FVP-AArch64: switch to simpler DT platform driver Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 09/13] Platforms/Juno: add PciHostBridgeLib implementation Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver Ard Biesheuvel 9 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel In preparation of moving ArmJunoDxe's support of the OHCI and EHCI controllers to the generic non-discoverable device infrastructure, add the prerequisite driver and library class resolution to the Juno platform description. Note that the FD image size needs to be increased slightly to accommodate the added code. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/ArmJuno.dsc | 2 ++ Platforms/ARM/Juno/ArmJuno.fdf | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc index 71dc5463a84f..141616e13234 100644 --- a/Platforms/ARM/Juno/ArmJuno.dsc +++ b/Platforms/ARM/Juno/ArmJuno.dsc @@ -65,6 +65,7 @@ [LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION, LibraryClasses.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.DXE_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf [BuildOptions] *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/ArmPlatformPkg/ArmJunoPkg/Include @@ -307,6 +308,7 @@ MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf # # Juno platform driver diff --git a/Platforms/ARM/Juno/ArmJuno.fdf b/Platforms/ARM/Juno/ArmJuno.fdf index aadde45164a5..3f96266fb625 100644 --- a/Platforms/ARM/Juno/ArmJuno.fdf +++ b/Platforms/ARM/Juno/ArmJuno.fdf @@ -26,12 +26,12 @@ [FD.BL33_AP_UEFI] BaseAddress = 0xE0000000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash. -Size = 0x000F0000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device +Size = 0x000F8000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device ErasePolarity = 1 # This one is tricky, it must be: BlockSize * NumBlocks = Size BlockSize = 0x00001000 -NumBlocks = 0xF0 +NumBlocks = 0xF8 ################################################################################ # @@ -49,7 +49,7 @@ NumBlocks = 0xF0 # ################################################################################ -0x00000000|0x000F0000 +0x00000000|0x000F8000 gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize FV = FVMAIN_COMPACT @@ -155,6 +155,7 @@ FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270092 INF MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf INF MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf + INF MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf # # PCI Support -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 09/13] Platforms/Juno: add PciHostBridgeLib implementation 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (7 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 08/13] Platforms/Juno: add non-discoverable device driver and library Ard Biesheuvel @ 2017-03-31 14:15 ` Ard Biesheuvel 2017-04-04 8:31 ` Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver Ard Biesheuvel 9 siblings, 1 reply; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:15 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel In order to be able to switch to the generic PCI host bridge driver, implement the glue library that exposes the PCIe parameters to the common driver. Since the Juno performs some initialization of the PCIe control registers as well, copy that code into the library's constructor. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c | 185 +++++++++++++++++++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf | 77 ++++++++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c | 191 ++++++++++++++++++++ Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h | 107 +++++++++++ 4 files changed, 560 insertions(+) diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c new file mode 100644 index 000000000000..213b5ef64e6d --- /dev/null +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c @@ -0,0 +1,185 @@ +/** @file + PCI Host Bridge Library instance for ARM Juno + + Copyright (c) 2017, 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. + +**/ +#include <PiDxe.h> +#include <Library/PciHostBridgeLib.h> +#include <Library/DebugLib.h> +#include <Library/DevicePathLib.h> +#include <Library/MemoryAllocationLib.h> +#include <Library/PcdLib.h> + +#include <Protocol/PciRootBridgeIo.h> +#include <Protocol/PciHostBridgeResourceAllocation.h> + +#pragma pack(1) +typedef struct { + ACPI_HID_DEVICE_PATH AcpiDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH; +#pragma pack () + +STATIC EFI_PCI_ROOT_BRIDGE_DEVICE_PATH mEfiPciRootBridgeDevicePath = { + { + { + ACPI_DEVICE_PATH, + ACPI_DP, + { + (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)), + (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8) + } + }, + EISA_PNP_ID(0x0A03), // PCI + 0 + }, { + END_DEVICE_PATH_TYPE, + END_ENTIRE_DEVICE_PATH_SUBTYPE, + { + END_DEVICE_PATH_LENGTH, + 0 + } + } +}; + +STATIC PCI_ROOT_BRIDGE mRootBridge = { + 0, // Segment + 0, // Supports + 0, // Attributes + TRUE, // DmaAbove4G + FALSE, // NoExtendedConfigSpace + FALSE, // ResourceAssigned + EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM | // AllocationAttributes + EFI_PCI_HOST_BRIDGE_MEM64_DECODE, + { + // Bus + FixedPcdGet32 (PcdPciBusMin), + FixedPcdGet32 (PcdPciBusMax) + }, { + // Io + FixedPcdGet64 (PcdPciIoBase), + FixedPcdGet64 (PcdPciIoBase) + FixedPcdGet64 (PcdPciIoSize) - 1 + }, { + // Mem + FixedPcdGet32 (PcdPciMmio32Base), + FixedPcdGet32 (PcdPciMmio32Base) + FixedPcdGet32 (PcdPciMmio32Size) - 1 + }, { + // MemAbove4G + FixedPcdGet64 (PcdPciMmio64Base), + FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size) - 1 + }, { + // PMem + MAX_UINT64, + 0 + }, { + // PMemAbove4G + MAX_UINT64, + 0 + }, + (EFI_DEVICE_PATH_PROTOCOL *)&mEfiPciRootBridgeDevicePath +}; + +/** + Return all the root bridge instances in an array. + + @param Count Return the count of root bridge instances. + + @return All the root bridge instances in an array. + The array should be passed into PciHostBridgeFreeRootBridges() + when it's not used. +**/ +PCI_ROOT_BRIDGE * +EFIAPI +PciHostBridgeGetRootBridges ( + UINTN *Count + ) +{ + *Count = 1; + + return &mRootBridge; +} + +/** + Free the root bridge instances array returned from PciHostBridgeGetRootBridges(). + + @param Bridges The root bridge instances array. + @param Count The count of the array. +**/ +VOID +EFIAPI +PciHostBridgeFreeRootBridges ( + PCI_ROOT_BRIDGE *Bridges, + UINTN Count + ) +{ +} + + +STATIC CONST CHAR16 mPciHostBridgeLibAcpiAddressSpaceTypeStr[][4] = { + L"Mem", L"I/O", L"Bus" +}; + +/** + Inform the platform that the resource conflict happens. + + @param HostBridgeHandle Handle of the Host Bridge. + @param Configuration Pointer to PCI I/O and PCI memory resource + descriptors. The Configuration contains the resources + for all the root bridges. The resource for each root + bridge is terminated with END descriptor and an + additional END is appended indicating the end of the + entire resources. The resource descriptor field + values follow the description in + EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL + .SubmitResources(). +**/ +VOID +EFIAPI +PciHostBridgeResourceConflict ( + EFI_HANDLE HostBridgeHandle, + VOID *Configuration + ) +{ + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; + UINTN RootBridgeIndex; + DEBUG ((EFI_D_ERROR, "PciHostBridge: Resource conflict happens!\n")); + + RootBridgeIndex = 0; + Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration; + while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) { + DEBUG ((EFI_D_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++)); + for (; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) { + ASSERT (Descriptor->ResType < + ARRAY_SIZE (mPciHostBridgeLibAcpiAddressSpaceTypeStr) + ); + DEBUG ((EFI_D_ERROR, " %s: Length/Alignment = 0x%lx / 0x%lx\n", + mPciHostBridgeLibAcpiAddressSpaceTypeStr[Descriptor->ResType], + Descriptor->AddrLen, Descriptor->AddrRangeMax + )); + if (Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) { + DEBUG ((EFI_D_ERROR, " Granularity/SpecificFlag = %ld / %02x%s\n", + Descriptor->AddrSpaceGranularity, Descriptor->SpecificFlag, + ((Descriptor->SpecificFlag & + EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE + ) != 0) ? L" (Prefetchable)" : L"" + )); + } + } + // + // Skip the END descriptor for root bridge + // + ASSERT (Descriptor->Desc == ACPI_END_TAG_DESCRIPTOR); + Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)( + (EFI_ACPI_END_TAG_DESCRIPTOR *)Descriptor + 1 + ); + } +} diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf new file mode 100644 index 000000000000..ef502937f6c2 --- /dev/null +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf @@ -0,0 +1,77 @@ +## @file +# PCI Host Bridge Library instance for ARM Juno +# +# Copyright (c) 2017, 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 = AmdStyxPciHostBridgeLib + FILE_GUID = d92c722c-87f9-4988-843e-dffd6bc8c5e3 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = PciHostBridgeLib|DXE_DRIVER + CONSTRUCTOR = HWPciRbInit + +# +# The following information is for reference only and not required by the build +# tools. +# +# VALID_ARCHITECTURES = AARCH64 ARM +# + +[Sources] + JunoPciHostBridgeLib.c + XPressRich3.c + +[Packages] + ArmPlatformPkg/ArmJunoPkg/ArmJuno.dec + ArmPkg/ArmPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BaseLib + DebugLib + DevicePathLib + IoLib + MemoryAllocationLib + UefiBootServicesTableLib + +[Pcd] + gArmTokenSpaceGuid.PcdSystemMemoryBase + gArmTokenSpaceGuid.PcdSystemMemorySize + +[FixedPcd] + gArmTokenSpaceGuid.PcdPciBusMin + gArmTokenSpaceGuid.PcdPciBusMax + gArmTokenSpaceGuid.PcdPciIoBase + gArmTokenSpaceGuid.PcdPciIoSize + gArmTokenSpaceGuid.PcdPciIoTranslation + gArmTokenSpaceGuid.PcdPciMmio32Base + gArmTokenSpaceGuid.PcdPciMmio32Size + gArmTokenSpaceGuid.PcdPciMmio32Translation + gArmTokenSpaceGuid.PcdPciMmio64Base + gArmTokenSpaceGuid.PcdPciMmio64Size + gArmTokenSpaceGuid.PcdPciMmio64Translation + + gArmJunoTokenSpaceGuid.PcdPcieControlBaseAddress + gArmJunoTokenSpaceGuid.PcdPcieRootPortBaseAddress + gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress + gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize + +[Protocols] + gEfiCpuIo2ProtocolGuid ## CONSUMES + +[Depex] + gEfiCpuIo2ProtocolGuid diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c new file mode 100644 index 000000000000..edfad300553e --- /dev/null +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c @@ -0,0 +1,191 @@ +/** @file +* Initialize the XPress-RICH3 PCIe Root complex +* +* Copyright (c) 2011-2015, ARM Ltd. All rights reserved. +* Copyright (c) 2017, Linaro, Ltd. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +#include <PiDxe.h> + +#include <Library/BaseLib.h> +#include <Library/DebugLib.h> +#include <Library/IoLib.h> +#include <Library/UefiBootServicesTableLib.h> + +#include <IndustryStandard/Pci22.h> + +#include "XPressRich3.h" +#include "ArmPlatform.h" + +#define PCI_BRIDGE_REVISION_ID 1 +#define CLASS_CODE_REGISTER(Class, SubClass, ProgIf) ((Class << 16) | (SubClass << 8) | ProgIf) +#define PLDA_BRIDGE_CCR CLASS_CODE_REGISTER(PCI_CLASS_BRIDGE, \ + PCI_CLASS_BRIDGE_P2P, \ + PCI_IF_BRIDGE_P2P) + +STATIC +VOID +SetTranslationAddressEntry ( + IN EFI_CPU_IO2_PROTOCOL *CpuIo, + IN UINTN Entry, + IN UINT64 SourceAddress, + IN UINT64 TranslatedAddress, + IN UINT64 TranslationSize, + IN UINT64 TranslationParameter + ) +{ + UINTN Log2Size = HighBitSet64 (TranslationSize); + + // Ensure the size is a power of two. Restriction form the AXI Translation logic + // Othwerwise we increase the translation size + if (TranslationSize != (1ULL << Log2Size)) { + DEBUG ((EFI_D_WARN, "PCI: The size 0x%lX of the region 0x%lx has been increased to " + "be a power of two for the AXI translation table.\n", + TranslationSize, SourceAddress)); + Log2Size++; + } + + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_LOW_SIZE, + (UINT32)SourceAddress | ((Log2Size - 1) << 1) | 0x1); + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_HI, SourceAddress >> 32); + + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_LOW, (UINT32)TranslatedAddress); + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_HI, TranslatedAddress >> 32); + + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_PARAM, TranslationParameter); +} + +EFI_STATUS +HWPciRbInit ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + UINT32 Value; + UINT32 Index; + UINTN TranslationTable; + EFI_CPU_IO2_PROTOCOL *CpuIo; + EFI_STATUS Status; + UINT32 JunoRevision; + + PCI_TRACE ("VExpressPciRbInit()"); + + // + // Juno R0 has no working PCIe + // + GetJunoRevision (JunoRevision); + if (JunoRevision < JUNO_REVISION_R1) { + return EFI_NOT_FOUND; + } + + PCI_TRACE ("PCIe Setting up Address Translation"); + + Status = gBS->LocateProtocol (&gEfiCpuIo2ProtocolGuid, NULL, + (VOID **)&CpuIo); + ASSERT_EFI_ERROR (Status); + + // The Juno PIO window is 8M, so we need full 32-bit PIO decoding. + PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_IO32 | + PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64); + + // Setup the PCI Configuration Registers + // Offset 0a: SubClass 04 PCI-PCI Bridge + // Offset 0b: BaseClass 06 Bridge Device + // The Class Code register is a 24 bit and can be configured by setting up the PCIE_PCI_IDS + // Refer [1] Chapter 13 + PCIE_ROOTPORT_WRITE32 (PCIE_PCI_IDS + PCIE_PCI_IDS_CLASSCODE_OFFSET, ((PLDA_BRIDGE_CCR << 8) | PCI_BRIDGE_REVISION_ID)); + + // + // PCIE Window 0 -> AXI4 Master 0 Address Translations + // + TranslationTable = VEXPRESS_ATR_PCIE_WIN0; + + // MSI Support + SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_GIV2M_MSI_BASE, ARM_JUNO_GIV2M_MSI_BASE, + ARM_JUNO_GIV2M_MSI_SZ, PCI_ATR_TRSLID_AXIDEVICE); + TranslationTable += PCI_ATR_ENTRY_SIZE; + + // System Memory Support + SetTranslationAddressEntry (CpuIo, TranslationTable, PcdGet64 (PcdSystemMemoryBase), PcdGet64 (PcdSystemMemoryBase), + PcdGet64 (PcdSystemMemorySize), PCI_ATR_TRSLID_AXIMEMORY); + TranslationTable += PCI_ATR_ENTRY_SIZE; + SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, + ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ, PCI_ATR_TRSLID_AXIMEMORY); + + // + // AXI4 Slave 1 -> PCIE Window 0 Address Translations + // + TranslationTable = VEXPRESS_ATR_AXI4_SLV1; + + // PCI ECAM Support + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_ECAM_BASE, PCI_ECAM_BASE, PCI_ECAM_SIZE, PCI_ATR_TRSLID_PCIE_CONF); + TranslationTable += PCI_ATR_ENTRY_SIZE; + + // PCI IO Support, the PIO space is translated from the arm MMIO PCI_IO_BASE address to the PIO base address of 0 + // AKA, PIO addresses used by endpoints are generally in the range of 0-64K. + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, 0, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO); + TranslationTable += PCI_ATR_ENTRY_SIZE; + + // PCI MEM32 Support + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM32_BASE, PCI_MEM32_BASE, PCI_MEM32_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY); + TranslationTable += PCI_ATR_ENTRY_SIZE; + + // PCI MEM64 Support + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM64_BASE, PCI_MEM64_BASE, PCI_MEM64_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY); + + // Add credits + PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED, 0x00f0b818); + PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED + 4, 0x1); + + // Allow ECRC + PCIE_ROOTPORT_WRITE32 (PCIE_PEX_SPC2, 0x6006); + + // Reset controller + PCIE_CONTROL_WRITE32 (PCIE_CONTROL_RST_CTL, PCIE_CONTROL_RST_CTL_RCPHY_REL); + + // Wait for reset + for (Index = 0; Index < 1000; Index++) { + gBS->Stall (1000); + PCIE_CONTROL_READ32 (PCIE_CONTROL_RST_STS, Value); + if ((Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) == PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) { + break; + } + } + + // Check for reset + if (!(Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT)) { + DEBUG ((EFI_D_ERROR, "PCIe failed to come out of reset: %x.\n", Value)); + return EFI_NOT_READY; + } + + gBS->Stall (1000); + PCI_TRACE ("Checking link Status..."); + + // Wait for Link Up + for (Index = 0; Index < 1000; Index++) { + gBS->Stall (1000); + PCIE_ROOTPORT_READ32 (VEXPRESS_BASIC_STATUS, Value); + if (Value & LINK_UP) { + break; + } + } + + // Check for link up + if (!(Value & LINK_UP)) { + DEBUG ((EFI_D_ERROR, "PCIe link not up: %x.\n", Value)); + return EFI_NOT_READY; + } + + PCIE_ROOTPORT_WRITE32 (PCIE_IMASK_LOCAL, PCIE_INT_MSI | PCIE_INT_INTx); + + return EFI_SUCCESS; +} diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h new file mode 100644 index 000000000000..07f52c210ed9 --- /dev/null +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h @@ -0,0 +1,107 @@ +/** @file +* Header containing the Xpress-RICH3 PCIe Root Complex specific values +* +* Copyright (c) 2011-2015, ARM Ltd. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +#ifndef __XPRESS_RICH3_H__ +#define __XPRESS_RICH3_H__ + +#include <Protocol/CpuIo2.h> +#include <Library/PcdLib.h> + +#define PCI_ECAM_BASE FixedPcdGet64 (PcdPciConfigurationSpaceBaseAddress) +#define PCI_ECAM_SIZE FixedPcdGet64 (PcdPciConfigurationSpaceSize) +#define PCI_IO_BASE FixedPcdGet64 (PcdPciIoTranslation) +#define PCI_IO_SIZE FixedPcdGet64 (PcdPciIoSize) +#define PCI_MEM32_BASE FixedPcdGet64 (PcdPciMmio32Base) +#define PCI_MEM32_SIZE FixedPcdGet64 (PcdPciMmio32Size) +#define PCI_MEM64_BASE FixedPcdGet64 (PcdPciMmio64Base) +#define PCI_MEM64_SIZE FixedPcdGet64 (PcdPciMmio64Size) + +#define PCI_TRACE(txt) DEBUG((EFI_D_VERBOSE, "ARM_PCI: " txt "\n")) + +#define PCIE_ROOTPORT_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Value); } +#define PCIE_ROOTPORT_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Val); } + +#define PCIE_CONTROL_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Value); } +#define PCIE_CONTROL_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Val); } + +/* + * Bridge Internal Registers + */ + +// PCIe Available Credit Settings +#define PCIE_VC_CRED 0x090 +// PCIe PCI Standard Configuration Identification Settings registers +#define PCIE_PCI_IDS 0x098 +#define PCIE_PCI_IDS_CLASSCODE_OFFSET 0x4 +// PCIe Specific 2 Capabilities Settings +#define PCIE_PEX_SPC2 0x0d8 +// PCIe Windows Settings register +#define PCIE_BAR_WIN 0x0FC +// Local Processor Interrupt Mask +#define PCIE_IMASK_LOCAL 0x180 + +#define PCIE_BAR_WIN_SUPPORT_IO BIT0 +#define PCIE_BAR_WIN_SUPPORT_IO32 BIT1 +#define PCIE_BAR_WIN_SUPPORT_MEM BIT2 +#define PCIE_BAR_WIN_SUPPORT_MEM64 BIT3 + +#define PCIE_INT_MSI BIT28 +#define PCIE_INT_A BIT24 +#define PCIE_INT_B BIT25 +#define PCIE_INT_C BIT26 +#define PCIE_INT_D BIT27 +#define PCIE_INT_INTx (PCIE_INT_A | PCIE_INT_B |\ + PCIE_INT_C | PCIE_INT_D) + +/* + * PCIe Control Registers + */ +#define PCIE_CONTROL_RST_CTL 0x1004 +#define PCIE_CONTROL_RST_STS 0x1008 + +/* + * PCI Express Address Translation registers + * All are offsets from PcdPcieControlBaseAddress + */ +#define VEXPRESS_ATR_PCIE_WIN0 0x600 +#define VEXPRESS_ATR_AXI4_SLV0 0x800 +#define VEXPRESS_ATR_AXI4_SLV1 0x820 + +#define PCI_ATR_ENTRY_SIZE 0x20 +#define PCI_ATR_SRC_ADDR_LOW_SIZE 0 +#define PCI_ATR_SRC_ADDR_HI 0x4 +#define PCI_ATR_TRSL_ADDR_LOW 0x8 +#define PCI_ATR_TRSL_ADDR_HI 0xc +#define PCI_ATR_TRSL_PARAM 0x10 + +#define PCI_ATR_TRSLID_AXIDEVICE 0x420004 +#define PCI_ATR_TRSLID_AXIMEMORY 0x4e0004 +#define PCI_ATR_TRSLID_PCIE_CONF 0x000001 +#define PCI_ATR_TRSLID_PCIE_IO 0x020000 +#define PCI_ATR_TRSLID_PCIE_MEMORY 0x000000 + +#define PCIE_CONTROL_RST_CTL_RC_REL (1 << 1) +#define PCIE_CONTROL_RST_CTL_PHY_REL (1 << 0) +#define PCIE_CONTROL_RST_CTL_RCPHY_REL (PCIE_CONTROL_RST_CTL_RC_REL | PCIE_CONTROL_RST_CTL_PHY_REL) + +#define PCIE_CONTROL_RST_STS_RC_ST (1 << 2) +#define PCIE_CONTROL_RST_STS_PHY_ST (1 << 1) +#define PCIE_CONTROL_RST_STS_PLL_ST (1 << 0) +#define PCIE_CONTROL_RST_STS_RCPHYPLL_OUT (PCIE_CONTROL_RST_STS_RC_ST | PCIE_CONTROL_RST_STS_PHY_ST | PCIE_CONTROL_RST_STS_PLL_ST) + +#define VEXPRESS_BASIC_STATUS 0x18 +#define LINK_UP 0xff + +#endif -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 09/13] Platforms/Juno: add PciHostBridgeLib implementation 2017-03-31 14:15 ` [PATCH v2 09/13] Platforms/Juno: add PciHostBridgeLib implementation Ard Biesheuvel @ 2017-04-04 8:31 ` Ard Biesheuvel 0 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-04-04 8:31 UTC (permalink / raw) To: edk2-devel@lists.01.org, Leif Lindholm, Ryan Harkin; +Cc: Ard Biesheuvel On 31 March 2017 at 15:15, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > In order to be able to switch to the generic PCI host bridge driver, > implement the glue library that exposes the PCIe parameters to the > common driver. Since the Juno performs some initialization of the > PCIe control registers as well, copy that code into the library's > constructor. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> One copy-paste error below (in the BASE_NAME) but this does not affect functionality. Will fix that up for v3. > --- > Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c | 185 +++++++++++++++++++ > Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf | 77 ++++++++ > Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c | 191 ++++++++++++++++++++ > Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h | 107 +++++++++++ > 4 files changed, 560 insertions(+) > > diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c > new file mode 100644 > index 000000000000..213b5ef64e6d > --- /dev/null > +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.c > @@ -0,0 +1,185 @@ > +/** @file > + PCI Host Bridge Library instance for ARM Juno > + > + Copyright (c) 2017, 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. > + > +**/ > +#include <PiDxe.h> > +#include <Library/PciHostBridgeLib.h> > +#include <Library/DebugLib.h> > +#include <Library/DevicePathLib.h> > +#include <Library/MemoryAllocationLib.h> > +#include <Library/PcdLib.h> > + > +#include <Protocol/PciRootBridgeIo.h> > +#include <Protocol/PciHostBridgeResourceAllocation.h> > + > +#pragma pack(1) > +typedef struct { > + ACPI_HID_DEVICE_PATH AcpiDevicePath; > + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; > +} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH; > +#pragma pack () > + > +STATIC EFI_PCI_ROOT_BRIDGE_DEVICE_PATH mEfiPciRootBridgeDevicePath = { > + { > + { > + ACPI_DEVICE_PATH, > + ACPI_DP, > + { > + (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)), > + (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8) > + } > + }, > + EISA_PNP_ID(0x0A03), // PCI > + 0 > + }, { > + END_DEVICE_PATH_TYPE, > + END_ENTIRE_DEVICE_PATH_SUBTYPE, > + { > + END_DEVICE_PATH_LENGTH, > + 0 > + } > + } > +}; > + > +STATIC PCI_ROOT_BRIDGE mRootBridge = { > + 0, // Segment > + 0, // Supports > + 0, // Attributes > + TRUE, // DmaAbove4G > + FALSE, // NoExtendedConfigSpace > + FALSE, // ResourceAssigned > + EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM | // AllocationAttributes > + EFI_PCI_HOST_BRIDGE_MEM64_DECODE, > + { > + // Bus > + FixedPcdGet32 (PcdPciBusMin), > + FixedPcdGet32 (PcdPciBusMax) > + }, { > + // Io > + FixedPcdGet64 (PcdPciIoBase), > + FixedPcdGet64 (PcdPciIoBase) + FixedPcdGet64 (PcdPciIoSize) - 1 > + }, { > + // Mem > + FixedPcdGet32 (PcdPciMmio32Base), > + FixedPcdGet32 (PcdPciMmio32Base) + FixedPcdGet32 (PcdPciMmio32Size) - 1 > + }, { > + // MemAbove4G > + FixedPcdGet64 (PcdPciMmio64Base), > + FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size) - 1 > + }, { > + // PMem > + MAX_UINT64, > + 0 > + }, { > + // PMemAbove4G > + MAX_UINT64, > + 0 > + }, > + (EFI_DEVICE_PATH_PROTOCOL *)&mEfiPciRootBridgeDevicePath > +}; > + > +/** > + Return all the root bridge instances in an array. > + > + @param Count Return the count of root bridge instances. > + > + @return All the root bridge instances in an array. > + The array should be passed into PciHostBridgeFreeRootBridges() > + when it's not used. > +**/ > +PCI_ROOT_BRIDGE * > +EFIAPI > +PciHostBridgeGetRootBridges ( > + UINTN *Count > + ) > +{ > + *Count = 1; > + > + return &mRootBridge; > +} > + > +/** > + Free the root bridge instances array returned from PciHostBridgeGetRootBridges(). > + > + @param Bridges The root bridge instances array. > + @param Count The count of the array. > +**/ > +VOID > +EFIAPI > +PciHostBridgeFreeRootBridges ( > + PCI_ROOT_BRIDGE *Bridges, > + UINTN Count > + ) > +{ > +} > + > + > +STATIC CONST CHAR16 mPciHostBridgeLibAcpiAddressSpaceTypeStr[][4] = { > + L"Mem", L"I/O", L"Bus" > +}; > + > +/** > + Inform the platform that the resource conflict happens. > + > + @param HostBridgeHandle Handle of the Host Bridge. > + @param Configuration Pointer to PCI I/O and PCI memory resource > + descriptors. The Configuration contains the resources > + for all the root bridges. The resource for each root > + bridge is terminated with END descriptor and an > + additional END is appended indicating the end of the > + entire resources. The resource descriptor field > + values follow the description in > + EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL > + .SubmitResources(). > +**/ > +VOID > +EFIAPI > +PciHostBridgeResourceConflict ( > + EFI_HANDLE HostBridgeHandle, > + VOID *Configuration > + ) > +{ > + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; > + UINTN RootBridgeIndex; > + DEBUG ((EFI_D_ERROR, "PciHostBridge: Resource conflict happens!\n")); > + > + RootBridgeIndex = 0; > + Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration; > + while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) { > + DEBUG ((EFI_D_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++)); > + for (; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) { > + ASSERT (Descriptor->ResType < > + ARRAY_SIZE (mPciHostBridgeLibAcpiAddressSpaceTypeStr) > + ); > + DEBUG ((EFI_D_ERROR, " %s: Length/Alignment = 0x%lx / 0x%lx\n", > + mPciHostBridgeLibAcpiAddressSpaceTypeStr[Descriptor->ResType], > + Descriptor->AddrLen, Descriptor->AddrRangeMax > + )); > + if (Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) { > + DEBUG ((EFI_D_ERROR, " Granularity/SpecificFlag = %ld / %02x%s\n", > + Descriptor->AddrSpaceGranularity, Descriptor->SpecificFlag, > + ((Descriptor->SpecificFlag & > + EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE > + ) != 0) ? L" (Prefetchable)" : L"" > + )); > + } > + } > + // > + // Skip the END descriptor for root bridge > + // > + ASSERT (Descriptor->Desc == ACPI_END_TAG_DESCRIPTOR); > + Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)( > + (EFI_ACPI_END_TAG_DESCRIPTOR *)Descriptor + 1 > + ); > + } > +} > diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf > new file mode 100644 > index 000000000000..ef502937f6c2 > --- /dev/null > +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf > @@ -0,0 +1,77 @@ > +## @file > +# PCI Host Bridge Library instance for ARM Juno > +# > +# Copyright (c) 2017, 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 = AmdStyxPciHostBridgeLib > + FILE_GUID = d92c722c-87f9-4988-843e-dffd6bc8c5e3 > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = PciHostBridgeLib|DXE_DRIVER > + CONSTRUCTOR = HWPciRbInit > + > +# > +# The following information is for reference only and not required by the build > +# tools. > +# > +# VALID_ARCHITECTURES = AARCH64 ARM > +# > + > +[Sources] > + JunoPciHostBridgeLib.c > + XPressRich3.c > + > +[Packages] > + ArmPlatformPkg/ArmJunoPkg/ArmJuno.dec > + ArmPkg/ArmPkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + DevicePathLib > + IoLib > + MemoryAllocationLib > + UefiBootServicesTableLib > + > +[Pcd] > + gArmTokenSpaceGuid.PcdSystemMemoryBase > + gArmTokenSpaceGuid.PcdSystemMemorySize > + > +[FixedPcd] > + gArmTokenSpaceGuid.PcdPciBusMin > + gArmTokenSpaceGuid.PcdPciBusMax > + gArmTokenSpaceGuid.PcdPciIoBase > + gArmTokenSpaceGuid.PcdPciIoSize > + gArmTokenSpaceGuid.PcdPciIoTranslation > + gArmTokenSpaceGuid.PcdPciMmio32Base > + gArmTokenSpaceGuid.PcdPciMmio32Size > + gArmTokenSpaceGuid.PcdPciMmio32Translation > + gArmTokenSpaceGuid.PcdPciMmio64Base > + gArmTokenSpaceGuid.PcdPciMmio64Size > + gArmTokenSpaceGuid.PcdPciMmio64Translation > + > + gArmJunoTokenSpaceGuid.PcdPcieControlBaseAddress > + gArmJunoTokenSpaceGuid.PcdPcieRootPortBaseAddress > + gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress > + gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize > + > +[Protocols] > + gEfiCpuIo2ProtocolGuid ## CONSUMES > + > +[Depex] > + gEfiCpuIo2ProtocolGuid > diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c > new file mode 100644 > index 000000000000..edfad300553e > --- /dev/null > +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.c > @@ -0,0 +1,191 @@ > +/** @file > +* Initialize the XPress-RICH3 PCIe Root complex > +* > +* Copyright (c) 2011-2015, ARM Ltd. All rights reserved. > +* Copyright (c) 2017, Linaro, Ltd. All rights reserved. > +* > +* This program and the accompanying materials > +* are licensed and made available under the terms and conditions of the BSD License > +* which accompanies this distribution. The full text of the license may be found at > +* http://opensource.org/licenses/bsd-license.php > +* > +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +* > +**/ > + > +#include <PiDxe.h> > + > +#include <Library/BaseLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IoLib.h> > +#include <Library/UefiBootServicesTableLib.h> > + > +#include <IndustryStandard/Pci22.h> > + > +#include "XPressRich3.h" > +#include "ArmPlatform.h" > + > +#define PCI_BRIDGE_REVISION_ID 1 > +#define CLASS_CODE_REGISTER(Class, SubClass, ProgIf) ((Class << 16) | (SubClass << 8) | ProgIf) > +#define PLDA_BRIDGE_CCR CLASS_CODE_REGISTER(PCI_CLASS_BRIDGE, \ > + PCI_CLASS_BRIDGE_P2P, \ > + PCI_IF_BRIDGE_P2P) > + > +STATIC > +VOID > +SetTranslationAddressEntry ( > + IN EFI_CPU_IO2_PROTOCOL *CpuIo, > + IN UINTN Entry, > + IN UINT64 SourceAddress, > + IN UINT64 TranslatedAddress, > + IN UINT64 TranslationSize, > + IN UINT64 TranslationParameter > + ) > +{ > + UINTN Log2Size = HighBitSet64 (TranslationSize); > + > + // Ensure the size is a power of two. Restriction form the AXI Translation logic > + // Othwerwise we increase the translation size > + if (TranslationSize != (1ULL << Log2Size)) { > + DEBUG ((EFI_D_WARN, "PCI: The size 0x%lX of the region 0x%lx has been increased to " > + "be a power of two for the AXI translation table.\n", > + TranslationSize, SourceAddress)); > + Log2Size++; > + } > + > + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_LOW_SIZE, > + (UINT32)SourceAddress | ((Log2Size - 1) << 1) | 0x1); > + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_HI, SourceAddress >> 32); > + > + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_LOW, (UINT32)TranslatedAddress); > + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_HI, TranslatedAddress >> 32); > + > + PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_PARAM, TranslationParameter); > +} > + > +EFI_STATUS > +HWPciRbInit ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + UINT32 Value; > + UINT32 Index; > + UINTN TranslationTable; > + EFI_CPU_IO2_PROTOCOL *CpuIo; > + EFI_STATUS Status; > + UINT32 JunoRevision; > + > + PCI_TRACE ("VExpressPciRbInit()"); > + > + // > + // Juno R0 has no working PCIe > + // > + GetJunoRevision (JunoRevision); > + if (JunoRevision < JUNO_REVISION_R1) { > + return EFI_NOT_FOUND; > + } > + > + PCI_TRACE ("PCIe Setting up Address Translation"); > + > + Status = gBS->LocateProtocol (&gEfiCpuIo2ProtocolGuid, NULL, > + (VOID **)&CpuIo); > + ASSERT_EFI_ERROR (Status); > + > + // The Juno PIO window is 8M, so we need full 32-bit PIO decoding. > + PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_IO32 | > + PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64); > + > + // Setup the PCI Configuration Registers > + // Offset 0a: SubClass 04 PCI-PCI Bridge > + // Offset 0b: BaseClass 06 Bridge Device > + // The Class Code register is a 24 bit and can be configured by setting up the PCIE_PCI_IDS > + // Refer [1] Chapter 13 > + PCIE_ROOTPORT_WRITE32 (PCIE_PCI_IDS + PCIE_PCI_IDS_CLASSCODE_OFFSET, ((PLDA_BRIDGE_CCR << 8) | PCI_BRIDGE_REVISION_ID)); > + > + // > + // PCIE Window 0 -> AXI4 Master 0 Address Translations > + // > + TranslationTable = VEXPRESS_ATR_PCIE_WIN0; > + > + // MSI Support > + SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_GIV2M_MSI_BASE, ARM_JUNO_GIV2M_MSI_BASE, > + ARM_JUNO_GIV2M_MSI_SZ, PCI_ATR_TRSLID_AXIDEVICE); > + TranslationTable += PCI_ATR_ENTRY_SIZE; > + > + // System Memory Support > + SetTranslationAddressEntry (CpuIo, TranslationTable, PcdGet64 (PcdSystemMemoryBase), PcdGet64 (PcdSystemMemoryBase), > + PcdGet64 (PcdSystemMemorySize), PCI_ATR_TRSLID_AXIMEMORY); > + TranslationTable += PCI_ATR_ENTRY_SIZE; > + SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, > + ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ, PCI_ATR_TRSLID_AXIMEMORY); > + > + // > + // AXI4 Slave 1 -> PCIE Window 0 Address Translations > + // > + TranslationTable = VEXPRESS_ATR_AXI4_SLV1; > + > + // PCI ECAM Support > + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_ECAM_BASE, PCI_ECAM_BASE, PCI_ECAM_SIZE, PCI_ATR_TRSLID_PCIE_CONF); > + TranslationTable += PCI_ATR_ENTRY_SIZE; > + > + // PCI IO Support, the PIO space is translated from the arm MMIO PCI_IO_BASE address to the PIO base address of 0 > + // AKA, PIO addresses used by endpoints are generally in the range of 0-64K. > + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, 0, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO); > + TranslationTable += PCI_ATR_ENTRY_SIZE; > + > + // PCI MEM32 Support > + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM32_BASE, PCI_MEM32_BASE, PCI_MEM32_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY); > + TranslationTable += PCI_ATR_ENTRY_SIZE; > + > + // PCI MEM64 Support > + SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM64_BASE, PCI_MEM64_BASE, PCI_MEM64_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY); > + > + // Add credits > + PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED, 0x00f0b818); > + PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED + 4, 0x1); > + > + // Allow ECRC > + PCIE_ROOTPORT_WRITE32 (PCIE_PEX_SPC2, 0x6006); > + > + // Reset controller > + PCIE_CONTROL_WRITE32 (PCIE_CONTROL_RST_CTL, PCIE_CONTROL_RST_CTL_RCPHY_REL); > + > + // Wait for reset > + for (Index = 0; Index < 1000; Index++) { > + gBS->Stall (1000); > + PCIE_CONTROL_READ32 (PCIE_CONTROL_RST_STS, Value); > + if ((Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) == PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) { > + break; > + } > + } > + > + // Check for reset > + if (!(Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT)) { > + DEBUG ((EFI_D_ERROR, "PCIe failed to come out of reset: %x.\n", Value)); > + return EFI_NOT_READY; > + } > + > + gBS->Stall (1000); > + PCI_TRACE ("Checking link Status..."); > + > + // Wait for Link Up > + for (Index = 0; Index < 1000; Index++) { > + gBS->Stall (1000); > + PCIE_ROOTPORT_READ32 (VEXPRESS_BASIC_STATUS, Value); > + if (Value & LINK_UP) { > + break; > + } > + } > + > + // Check for link up > + if (!(Value & LINK_UP)) { > + DEBUG ((EFI_D_ERROR, "PCIe link not up: %x.\n", Value)); > + return EFI_NOT_READY; > + } > + > + PCIE_ROOTPORT_WRITE32 (PCIE_IMASK_LOCAL, PCIE_INT_MSI | PCIE_INT_INTx); > + > + return EFI_SUCCESS; > +} > diff --git a/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h > new file mode 100644 > index 000000000000..07f52c210ed9 > --- /dev/null > +++ b/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/XPressRich3.h > @@ -0,0 +1,107 @@ > +/** @file > +* Header containing the Xpress-RICH3 PCIe Root Complex specific values > +* > +* Copyright (c) 2011-2015, ARM Ltd. All rights reserved. > +* > +* This program and the accompanying materials > +* are licensed and made available under the terms and conditions of the BSD License > +* which accompanies this distribution. The full text of the license may be found at > +* http://opensource.org/licenses/bsd-license.php > +* > +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +* > +**/ > + > +#ifndef __XPRESS_RICH3_H__ > +#define __XPRESS_RICH3_H__ > + > +#include <Protocol/CpuIo2.h> > +#include <Library/PcdLib.h> > + > +#define PCI_ECAM_BASE FixedPcdGet64 (PcdPciConfigurationSpaceBaseAddress) > +#define PCI_ECAM_SIZE FixedPcdGet64 (PcdPciConfigurationSpaceSize) > +#define PCI_IO_BASE FixedPcdGet64 (PcdPciIoTranslation) > +#define PCI_IO_SIZE FixedPcdGet64 (PcdPciIoSize) > +#define PCI_MEM32_BASE FixedPcdGet64 (PcdPciMmio32Base) > +#define PCI_MEM32_SIZE FixedPcdGet64 (PcdPciMmio32Size) > +#define PCI_MEM64_BASE FixedPcdGet64 (PcdPciMmio64Base) > +#define PCI_MEM64_SIZE FixedPcdGet64 (PcdPciMmio64Size) > + > +#define PCI_TRACE(txt) DEBUG((EFI_D_VERBOSE, "ARM_PCI: " txt "\n")) > + > +#define PCIE_ROOTPORT_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Value); } > +#define PCIE_ROOTPORT_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Val); } > + > +#define PCIE_CONTROL_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Value); } > +#define PCIE_CONTROL_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Val); } > + > +/* > + * Bridge Internal Registers > + */ > + > +// PCIe Available Credit Settings > +#define PCIE_VC_CRED 0x090 > +// PCIe PCI Standard Configuration Identification Settings registers > +#define PCIE_PCI_IDS 0x098 > +#define PCIE_PCI_IDS_CLASSCODE_OFFSET 0x4 > +// PCIe Specific 2 Capabilities Settings > +#define PCIE_PEX_SPC2 0x0d8 > +// PCIe Windows Settings register > +#define PCIE_BAR_WIN 0x0FC > +// Local Processor Interrupt Mask > +#define PCIE_IMASK_LOCAL 0x180 > + > +#define PCIE_BAR_WIN_SUPPORT_IO BIT0 > +#define PCIE_BAR_WIN_SUPPORT_IO32 BIT1 > +#define PCIE_BAR_WIN_SUPPORT_MEM BIT2 > +#define PCIE_BAR_WIN_SUPPORT_MEM64 BIT3 > + > +#define PCIE_INT_MSI BIT28 > +#define PCIE_INT_A BIT24 > +#define PCIE_INT_B BIT25 > +#define PCIE_INT_C BIT26 > +#define PCIE_INT_D BIT27 > +#define PCIE_INT_INTx (PCIE_INT_A | PCIE_INT_B |\ > + PCIE_INT_C | PCIE_INT_D) > + > +/* > + * PCIe Control Registers > + */ > +#define PCIE_CONTROL_RST_CTL 0x1004 > +#define PCIE_CONTROL_RST_STS 0x1008 > + > +/* > + * PCI Express Address Translation registers > + * All are offsets from PcdPcieControlBaseAddress > + */ > +#define VEXPRESS_ATR_PCIE_WIN0 0x600 > +#define VEXPRESS_ATR_AXI4_SLV0 0x800 > +#define VEXPRESS_ATR_AXI4_SLV1 0x820 > + > +#define PCI_ATR_ENTRY_SIZE 0x20 > +#define PCI_ATR_SRC_ADDR_LOW_SIZE 0 > +#define PCI_ATR_SRC_ADDR_HI 0x4 > +#define PCI_ATR_TRSL_ADDR_LOW 0x8 > +#define PCI_ATR_TRSL_ADDR_HI 0xc > +#define PCI_ATR_TRSL_PARAM 0x10 > + > +#define PCI_ATR_TRSLID_AXIDEVICE 0x420004 > +#define PCI_ATR_TRSLID_AXIMEMORY 0x4e0004 > +#define PCI_ATR_TRSLID_PCIE_CONF 0x000001 > +#define PCI_ATR_TRSLID_PCIE_IO 0x020000 > +#define PCI_ATR_TRSLID_PCIE_MEMORY 0x000000 > + > +#define PCIE_CONTROL_RST_CTL_RC_REL (1 << 1) > +#define PCIE_CONTROL_RST_CTL_PHY_REL (1 << 0) > +#define PCIE_CONTROL_RST_CTL_RCPHY_REL (PCIE_CONTROL_RST_CTL_RC_REL | PCIE_CONTROL_RST_CTL_PHY_REL) > + > +#define PCIE_CONTROL_RST_STS_RC_ST (1 << 2) > +#define PCIE_CONTROL_RST_STS_PHY_ST (1 << 1) > +#define PCIE_CONTROL_RST_STS_PLL_ST (1 << 0) > +#define PCIE_CONTROL_RST_STS_RCPHYPLL_OUT (PCIE_CONTROL_RST_STS_RC_ST | PCIE_CONTROL_RST_STS_PHY_ST | PCIE_CONTROL_RST_STS_PLL_ST) > + > +#define VEXPRESS_BASIC_STATUS 0x18 > +#define LINK_UP 0xff > + > +#endif > -- > 2.9.3 > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel ` (8 preceding siblings ...) 2017-03-31 14:15 ` [PATCH v2 09/13] Platforms/Juno: add PciHostBridgeLib implementation Ard Biesheuvel @ 2017-03-31 14:19 ` Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 11/13] Platforms/Juno: remove BdsLib dependency Ard Biesheuvel ` (2 more replies) 9 siblings, 3 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:19 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/ArmJuno.dsc | 17 +++++++++++------ Platforms/ARM/Juno/ArmJuno.fdf | 4 ++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc index 141616e13234..b7b1fb8c8935 100644 --- a/Platforms/ARM/Juno/ArmJuno.dsc +++ b/Platforms/ARM/Juno/ArmJuno.dsc @@ -66,6 +66,10 @@ [LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION, LibraryClasses.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.DXE_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf + PciHostBridgeLib|OpenPlatformPkg/Platforms/ARM/Juno/Library/JunoPciHostBridgeLib/JunoPciHostBridgeLib.inf + PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf + PciLib|MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf + PciExpressLib|MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf [BuildOptions] *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/ArmPlatformPkg/ArmJunoPkg/Include @@ -143,13 +147,17 @@ # PLDA PCI Root Complex # gArmTokenSpaceGuid.PcdPciBusMax|255 - gArmTokenSpaceGuid.PcdPciIoBase|0x5f800000 + gArmTokenSpaceGuid.PcdPciIoBase|0x0 gArmTokenSpaceGuid.PcdPciIoSize|0x00800000 gArmTokenSpaceGuid.PcdPciMmio32Base|0x50000000 gArmTokenSpaceGuid.PcdPciMmio32Size|0x08000000 gArmTokenSpaceGuid.PcdPciMmio64Base|0x4000000000 gArmTokenSpaceGuid.PcdPciMmio64Size|0x100000000 + gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x40000000 + gArmTokenSpaceGuid.PcdPciIoTranslation|0x5f800000 + gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|24 + # List of Device Paths that support BootMonFs gArmPlatformTokenSpaceGuid.PcdBootMonFsSupportedDevicePaths|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)" @@ -270,16 +278,13 @@ MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf # Required by PCI - UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf + ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf # # PCI Support # MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf - ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf { - <LibraryClasses> - DmaLib|EmbeddedPkg/Library/NullDmaLib/NullDmaLib.inf - } + MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf # # SATA Controller diff --git a/Platforms/ARM/Juno/ArmJuno.fdf b/Platforms/ARM/Juno/ArmJuno.fdf index 3f96266fb625..7de995a255b1 100644 --- a/Platforms/ARM/Juno/ArmJuno.fdf +++ b/Platforms/ARM/Juno/ArmJuno.fdf @@ -140,7 +140,7 @@ FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270092 INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf # Required by PCI - INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf + INF ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf # FV FileSystem INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf @@ -161,7 +161,7 @@ FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270092 # PCI Support # INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf - INF ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf + INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf # # SATA Controller -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 11/13] Platforms/Juno: remove BdsLib dependency 2017-03-31 14:19 ` [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver Ard Biesheuvel @ 2017-03-31 14:19 ` Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 12/13] Platforms/Juno: add DtPlatformDtbLoaderLib implementation Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 13/13] Platforms/Juno: switch to DtPlatformDxe Ard Biesheuvel 2 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:19 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/ArmJuno.dsc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc index b7b1fb8c8935..4ff2246822e6 100644 --- a/Platforms/ARM/Juno/ArmJuno.dsc +++ b/Platforms/ARM/Juno/ArmJuno.dsc @@ -318,10 +318,7 @@ # # Juno platform driver # - ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf { - <LibraryClasses> - BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf - } + ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf # # SMBIOS/DMI -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 12/13] Platforms/Juno: add DtPlatformDtbLoaderLib implementation 2017-03-31 14:19 ` [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 11/13] Platforms/Juno: remove BdsLib dependency Ard Biesheuvel @ 2017-03-31 14:19 ` Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 13/13] Platforms/Juno: switch to DtPlatformDxe Ard Biesheuvel 2 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:19 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel In preparation of switching to DtPlatformDxe to supply the device tree image to the OS, add an implementation of DtPlatformDtbLoaderLib that loads the correct version from an FV. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.c | 71 ++++++++++++++++++++ Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf | 38 +++++++++++ 2 files changed, 109 insertions(+) diff --git a/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.c b/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.c new file mode 100644 index 000000000000..8b4d1cbecffb --- /dev/null +++ b/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.c @@ -0,0 +1,71 @@ +/** @file +* +* Copyright (c) 2017, Linaro, Ltd. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +#include <PiDxe.h> + +#include <Library/BaseLib.h> +#include <Library/DebugLib.h> +#include <Library/DxeServicesLib.h> +#include <Library/IoLib.h> +#include <Library/MemoryAllocationLib.h> + +#include "ArmPlatform.h" + +/** + Return a pool allocated copy of the DTB image that is appropriate for + booting the current platform via DT. + + @param[out] Dtb Pointer to the DTB copy + @param[out] DtbSize Size of the DTB copy + + @retval EFI_SUCCESS Operation completed successfully + @retval EFI_NOT_FOUND No suitable DTB image could be located + @retval EFI_OUT_OF_RESOURCES No pool memory available + +**/ +EFI_STATUS +EFIAPI +DtPlatformLoadDtb ( + OUT VOID **Dtb, + OUT UINTN *DtbSize + ) +{ + EFI_STATUS Status; + VOID *OrigDtb; + VOID *CopyDtb; + UINTN OrigDtbSize; + UINT32 JunoRevision; + + GetJunoRevision(JunoRevision); + ASSERT (JunoRevision >= JUNO_REVISION_R0 && JunoRevision <= JUNO_REVISION_R2); + if (JunoRevision < JUNO_REVISION_R0 || JunoRevision > JUNO_REVISION_R2) { + return EFI_NOT_FOUND; + } + + Status = GetSectionFromAnyFv (&gDtPlatformDefaultDtbFileGuid, + EFI_SECTION_RAW, (UINTN)JunoRevision - 1, &OrigDtb, &OrigDtbSize); + if (EFI_ERROR (Status)) { + return EFI_NOT_FOUND; + } + + CopyDtb = AllocateCopyPool (OrigDtbSize, OrigDtb); + if (CopyDtb == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + *Dtb = CopyDtb; + *DtbSize = OrigDtbSize; + + return EFI_SUCCESS; +} diff --git a/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf b/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf new file mode 100644 index 000000000000..8018278546fe --- /dev/null +++ b/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf @@ -0,0 +1,38 @@ +/** @file +* +* Copyright (c) 2017, Linaro, Ltd. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = JunoDtPlatformDtbLoaderLib + FILE_GUID = 050d6041-1508-4ae7-a69f-250155ccb567 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DtPlatformDtbLoaderLib|DXE_DRIVER + +[Sources] + JunoDtPlatformDtbLoaderLib.c + +[Packages] + ArmPkg/ArmPkg.dec + MdePkg/MdePkg.dec + EmbeddedPkg/EmbeddedPkg.dec + +[LibraryClasses] + BaseLib + DxeServicesLib + IoLib + MemoryAllocationLib + +[Guids] + gDtPlatformDefaultDtbFileGuid -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 13/13] Platforms/Juno: switch to DtPlatformDxe 2017-03-31 14:19 ` [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 11/13] Platforms/Juno: remove BdsLib dependency Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 12/13] Platforms/Juno: add DtPlatformDtbLoaderLib implementation Ard Biesheuvel @ 2017-03-31 14:19 ` Ard Biesheuvel 2 siblings, 0 replies; 15+ messages in thread From: Ard Biesheuvel @ 2017-03-31 14:19 UTC (permalink / raw) To: edk2-devel, leif.lindholm, ryan.harkin; +Cc: Ard Biesheuvel Switch to DtPLatformDxe, which uses embedded DTB binaries, or ACPI, but does not have the elaborate (but awkward) tooling to load FDT files from device paths. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Juno/ArmJuno.dsc | 15 +++------------ Platforms/ARM/Juno/ArmJuno.fdf | 11 ++++++++--- Platforms/ARM/Juno/DeviceTree/juno-r1.dtb | Bin 0 -> 23627 bytes Platforms/ARM/Juno/DeviceTree/juno-r2.dtb | Bin 0 -> 23627 bytes Platforms/ARM/Juno/DeviceTree/juno.dtb | Bin 0 -> 22431 bytes 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc index 4ff2246822e6..683992af32e9 100644 --- a/Platforms/ARM/Juno/ArmJuno.dsc +++ b/Platforms/ARM/Juno/ArmJuno.dsc @@ -50,6 +50,8 @@ # USB Requirements UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf + DtPlatformDtbLoaderLib|OpenPlatformPkg/Platforms/ARM/Juno/Library/JunoDtPlatformDtbLoaderLib/JunoDtPlatformDtbLoaderLib.inf + [LibraryClasses.common.SEC] PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf @@ -196,14 +198,6 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|1080 [PcdsDynamicDefault.common] - # - # The size of a dynamic PCD of the (VOID*) type can not be increased at run - # time from its size at build time. Set the "PcdFdtDevicePaths" PCD to a 128 - # character "empty" string, to allow to be able to set FDT text device paths - # up to 128 characters long. - # - gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths|L" " - # Not all Juno platforms support PCI. This dynamic PCD disables or enable # PCI support. gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|TRUE @@ -343,10 +337,7 @@ # # FDT installation # - EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf { - <LibraryClasses> - BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf - } + EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf [Components.AARCH64] # diff --git a/Platforms/ARM/Juno/ArmJuno.fdf b/Platforms/ARM/Juno/ArmJuno.fdf index 7de995a255b1..2f6cf62558ea 100644 --- a/Platforms/ARM/Juno/ArmJuno.fdf +++ b/Platforms/ARM/Juno/ArmJuno.fdf @@ -220,9 +220,14 @@ FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270092 # # FDT installation # - # The UEFI driver is at the end of the list of the driver to be dispatched - # after the device drivers (eg: Ethernet) to ensure we have support for them. - INF EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf + INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf + + # builtin device tree binaries -- for rev 0/1/2, respectively. + FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 { + SECTION RAW = OpenPlatformPkg/Platforms/ARM/Juno/DeviceTree/juno.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/Juno/DeviceTree/juno-r1.dtb + SECTION RAW = OpenPlatformPkg/Platforms/ARM/Juno/DeviceTree/juno-r2.dtb + } !if $(ARCH) == AARCH64 # diff --git a/Platforms/ARM/Juno/DeviceTree/juno-r1.dtb b/Platforms/ARM/Juno/DeviceTree/juno-r1.dtb new file mode 100644 index 0000000000000000000000000000000000000000..28f35d28d21fe11689bb97f53cd1646d8e94f1b5 GIT binary patch literal 23627 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 literal 0 HcmV?d00001 diff --git a/Platforms/ARM/Juno/DeviceTree/juno-r2.dtb b/Platforms/ARM/Juno/DeviceTree/juno-r2.dtb new file mode 100644 index 0000000000000000000000000000000000000000..fae2058a81ac73ecb695bf73f8fb5c2cd929bf3b GIT binary patch literal 23627 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 JaUY%D{{q3l0>A(O literal 0 HcmV?d00001 diff --git a/Platforms/ARM/Juno/DeviceTree/juno.dtb b/Platforms/ARM/Juno/DeviceTree/juno.dtb new file mode 100644 index 0000000000000000000000000000000000000000..c408eb1640d5ca00070605323bfcafdb63da7010 GIT binary patch literal 22431 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 QU(6`yez3hA57FrT4>m=JhX4Qo literal 0 HcmV?d00001 -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2017-04-04 8:31 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-03-31 14:15 [PATCH v2 00/13] EDK2 spring cleaning -- OpenPlatformPkg edition Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 01/13] Platforms/VExpress: remove unused logo PCD Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 02/13] Platforms/VExpress: remove unused StatusCode references Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 03/13] Platforms/VExpress: get rid of Tiano compression Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 04/13] Platforms/VExpress: remove BdsLib library class resolutions Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 05/13] Platforms/TC2: move to new DtPlatformDxe driver Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 06/13] Platforms/FVP: add DtPlatformDtbLoaderLib implementation Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 07/13] Platforms/FVP-AArch64: switch to simpler DT platform driver Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 08/13] Platforms/Juno: add non-discoverable device driver and library Ard Biesheuvel 2017-03-31 14:15 ` [PATCH v2 09/13] Platforms/Juno: add PciHostBridgeLib implementation Ard Biesheuvel 2017-04-04 8:31 ` Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 10/13] Platforms/Juno: switch to generic PCI host bridge driver Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 11/13] Platforms/Juno: remove BdsLib dependency Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 12/13] Platforms/Juno: add DtPlatformDtbLoaderLib implementation Ard Biesheuvel 2017-03-31 14:19 ` [PATCH v2 13/13] Platforms/Juno: switch to DtPlatformDxe Ard Biesheuvel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox