From: Pete Batard <pete@akeo.ie>
To: edk2-devel@lists.01.org
Subject: [PATCH v2 edk2-platforms 02/20] Platform/Broadcom/RPi3: Add Platform library
Date: Mon, 10 Dec 2018 12:38:35 +0000 [thread overview]
Message-ID: <20181210123853.4864-3-pete@akeo.ie> (raw)
In-Reply-To: <20181210123853.4864-1-pete@akeo.ie>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
---
Platform/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h | 70 +++++++++
Platform/Broadcom/Bcm283x/Include/IndustryStandard/RpiFirmware.h | 93 ++++++++++++
Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/AArch64/RaspberryPiHelper.S | 107 +++++++++++++
Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPi.c | 99 ++++++++++++
Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiMem.c | 160 ++++++++++++++++++++
Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiPlatformLib.inf | 64 ++++++++
6 files changed, 593 insertions(+)
diff --git a/Platform/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h b/Platform/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h
new file mode 100644
index 000000000000..bd30324ff073
--- /dev/null
+++ b/Platform/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h
@@ -0,0 +1,70 @@
+/** @file
+ *
+ * Copyright (c) 2017, Andrei Warkentin <andrey.warkentin@gmail.com>
+ * Copyright (c) 2016, Linaro Limited. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of ARM nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ **/
+
+/*
+ * Both "core" and SoC perpherals (1M each).
+ */
+#define BCM2836_SOC_REGISTERS 0x3f000000
+#define BCM2836_SOC_REGISTER_LENGTH 0x02000000
+
+/* Synopsis DW2/DWC USB 2.0 OTG. */
+#define BCM2836_USB_DW2_BASE_ADDRESS 0x3f980000
+
+/*
+ * Offset between the CPU's view and the VC's view of system memory.
+ */
+#define BCM2836_DMA_DEVICE_OFFSET 0xc0000000
+
+/* watchdog constants */
+#define BCM2836_WDOG_BASE_ADDRESS 0x3f100000
+#define BCM2836_WDOG_PASSWORD 0x5a000000
+#define BCM2836_WDOG_RSTC_OFFSET 0x0000001c
+#define BCM2836_WDOG_WDOG_OFFSET 0x00000024
+#define BCM2836_WDOG_RSTC_WRCFG_MASK 0x00000030
+#define BCM2836_WDOG_RSTC_WRCFG_FULL_RESET 0x00000020
+
+/* mailbox interface constants */
+#define BCM2836_MBOX_BASE_ADDRESS 0x3f00b880
+#define BCM2836_MBOX_READ_OFFSET 0x00000000
+#define BCM2836_MBOX_STATUS_OFFSET 0x00000018
+#define BCM2836_MBOX_CONFIG_OFFSET 0x0000001c
+#define BCM2836_MBOX_WRITE_OFFSET 0x00000020
+
+#define BCM2836_MBOX_STATUS_FULL 0x1f
+#define BCM2836_MBOX_STATUS_EMPTY 0x1e
+
+#define BCM2836_MBOX_NUM_CHANNELS 16
+
+/* interrupt controller constants */
+#define BCM2836_INTC_TIMER_CONTROL_OFFSET 0x00000040
+#define BCM2836_INTC_TIMER_PENDING_OFFSET 0x00000060
diff --git a/Platform/Broadcom/Bcm283x/Include/IndustryStandard/RpiFirmware.h b/Platform/Broadcom/Bcm283x/Include/IndustryStandard/RpiFirmware.h
new file mode 100644
index 000000000000..83f8633c26cf
--- /dev/null
+++ b/Platform/Broadcom/Bcm283x/Include/IndustryStandard/RpiFirmware.h
@@ -0,0 +1,93 @@
+/** @file
+ *
+ * Copyright (c) 2016, Linaro Limited. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of ARM nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ **/
+
+#define RPI_FW_MBOX_CHANNEL 0x00000008
+
+#define RPI_FW_RESP_SUCCESS 0x80000000
+#define RPI_FW_RESP_FAILURE 0x80000001
+
+#define RPI_FW_VALUE_SIZE_RESPONSE_MASK BIT31
+
+#define RPI_FW_GET_REVISION 0x00000001
+#define RPI_FW_GET_BOARD_MODEL 0x00010001
+#define RPI_FW_GET_BOARD_REVISION 0x00010002
+#define RPI_FW_GET_MAC_ADDRESS 0x00010003
+#define RPI_FW_GET_BOARD_SERIAL 0x00010004
+#define RPI_FW_GET_ARM_MEMSIZE 0x00010005
+
+#define RPI_FW_SET_POWER_STATE 0x00028001
+
+#define RPI_FW_POWER_STATE_SDHCI 0x00000000
+#define RPI_FW_POWER_STATE_UART0 0x00000001
+#define RPI_FW_POWER_STATE_UART1 0x00000002
+#define RPI_FW_POWER_STATE_USB_HCD 0x00000003
+#define RPI_FW_POWER_STATE_I2C0 0x00000004
+#define RPI_FW_POWER_STATE_I2C1 0x00000005
+#define RPI_FW_POWER_STATE_I2C2 0x00000006
+#define RPI_FW_POWER_STATE_SPI 0x00000007
+#define RPI_FW_POWER_STATE_CCP2TX 0x00000008
+
+#define RPI_FW_GET_CLOCK_RATE 0x00030002
+#define RPI_FW_GET_MAX_CLOCK_RATE 0x00030004
+#define RPI_FW_GET_MIN_CLOCK_RATE 0x00030007
+
+#define RPI_FW_SET_CLOCK_RATE 0x00038002
+#define RPI_FW_SET_GPIO 0x00038041
+
+#define RPI_FW_GET_FB_GEOMETRY 0x00040003
+#define RPI_FW_GET_FB_LINELENGTH 0x00040008
+#define RPI_FW_GET_FB_COLOR_DEPTH 0x00040005
+#define RPI_FW_GET_FB_REGION 0x00040001
+
+#define RPI_FW_SET_FB_PGEOM 0x00048003
+#define RPI_FW_SET_FB_VGEOM 0x00048004
+#define RPI_FW_SET_FB_DEPTH 0x00048005
+#define RPI_FW_ALLOC_FB 0x00040001
+#define RPI_FW_FREE_FB 0x00048001
+
+#define RPI_FW_GET_COMMAND_LINE 0x00050001
+
+#define RPI_FW_POWER_STATE_ENABLE BIT0
+#define RPI_FW_POWER_STATE_WAIT BIT1
+
+#define RPI_FW_CLOCK_RATE_EMMC 0x000000001
+#define RPI_FW_CLOCK_RATE_UART 0x000000002
+#define RPI_FW_CLOCK_RATE_ARM 0x000000003
+#define RPI_FW_CLOCK_RATE_CORE 0x000000004
+#define RPI_FW_CLOCK_RATE_V3D 0x000000005
+#define RPI_FW_CLOCK_RATE_H264 0x000000006
+#define RPI_FW_CLOCK_RATE_ISP 0x000000007
+#define RPI_FW_CLOCK_RATE_SDRAM 0x000000008
+#define RPI_FW_CLOCK_RATE_PIXEL 0x000000009
+#define RPI_FW_CLOCK_RATE_PWM 0x00000000a
+
+#define RPI_FB_MBOX_CHANNEL 0x1
diff --git a/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/AArch64/RaspberryPiHelper.S b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/AArch64/RaspberryPiHelper.S
new file mode 100644
index 000000000000..91567de8bb78
--- /dev/null
+++ b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/AArch64/RaspberryPiHelper.S
@@ -0,0 +1,107 @@
+/** @file
+ *
+ * Copyright (c) 2016, Linaro Limited. All rights reserved.
+ * Copyright (c) 2011-2013, ARM Limited. All rights reserved.
+ *
+ * This program and the accompanying materials
+ * are licensed and made available under the terms and conditions of the BSD License
+ * which accompanies this distribution. The full text of the license may be found at
+ * http://opensource.org/licenses/bsd-license.php
+ *
+ * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ *
+ **/
+
+#include <AsmMacroIoLibV8.h>
+#include <Library/ArmLib.h>
+#include <IndustryStandard/Bcm2836.h>
+#include <IndustryStandard/RpiFirmware.h>
+
+#define MAX_TRIES 0x100000
+
+ .macro drain
+ mov x5, #MAX_TRIES
+0: ldr w6, [x4, #BCM2836_MBOX_STATUS_OFFSET]
+ tbnz w6, #BCM2836_MBOX_STATUS_EMPTY, 1f
+ dmb ld
+ ldr wzr, [x4, #BCM2836_MBOX_READ_OFFSET]
+ subs x5, x5, #1
+ b.ne 0b
+1:
+ .endm
+
+ .macro poll, status
+ mov x5, #MAX_TRIES
+0: ldr w6, [x4, #BCM2836_MBOX_STATUS_OFFSET]
+ tbz w6, #\status, 1f
+ dmb ld
+ subs x5, x5, #1
+ b.ne 0b
+1:
+ .endm
+
+ASM_FUNC(ArmPlatformPeiBootAction)
+ adr x0, .Lmeminfo_buffer
+ mov x1, #FixedPcdGet64 (PcdDmaDeviceOffset)
+ orr x0, x0, #RPI_FW_MBOX_CHANNEL
+ add x0, x0, x1
+
+ MOV32 (x4, BCM2836_MBOX_BASE_ADDRESS)
+
+ drain
+ poll BCM2836_MBOX_STATUS_FULL
+ str w0, [x4, #BCM2836_MBOX_WRITE_OFFSET]
+ dmb sy
+ poll BCM2836_MBOX_STATUS_EMPTY
+ dmb sy
+ ldr wzr, [x4, #BCM2836_MBOX_READ_OFFSET]
+ dmb ld
+
+ ldr w0, .Lmemsize
+ sub x0, x0, #1
+ adr x1, mSystemMemoryEnd
+ str x0, [x1]
+ ret
+
+ .align 4
+.Lmeminfo_buffer:
+ .long .Lbuffer_size
+ .long 0x0
+ .long RPI_FW_GET_ARM_MEMSIZE
+ .long 8 // buf size
+ .long 0 // input len
+ .long 0 // mem base
+.Lmemsize:
+ .long 0 // mem size
+ .long 0 // end tag
+ .set .Lbuffer_size, . - .Lmeminfo_buffer
+
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+// VOID
+// );
+ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
+ MOV32 (w0, FixedPcdGet32 (PcdArmPrimaryCore))
+ ret
+
+//UINTN
+//ArmPlatformIsPrimaryCore (
+// IN UINTN MpId
+// );
+ASM_FUNC(ArmPlatformIsPrimaryCore)
+ mov x0, #1
+ ret
+
+//UINTN
+//ArmPlatformGetCorePosition (
+// IN UINTN MpId
+// );
+// With this function: CorePos = (ClusterId * 4) + CoreId
+ASM_FUNC(ArmPlatformGetCorePosition)
+ and x1, x0, #ARM_CORE_MASK
+ and x0, x0, #ARM_CLUSTER_MASK
+ add x0, x1, x0, LSR #6
+ ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPi.c b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPi.c
new file mode 100644
index 000000000000..ae0b7680f3c3
--- /dev/null
+++ b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPi.c
@@ -0,0 +1,99 @@
+/** @file
+ *
+ * Copyright (c) 2014-2016, Linaro Limited. All rights reserved.
+ * Copyright (c) 2014, Red Hat, Inc.
+ * Copyright (c) 2011-2013, ARM Limited. All rights reserved.
+ *
+ *
+ * This program and the accompanying materials
+ * are licensed and made available under the terms and conditions of the BSD License
+ * which accompanies this distribution. The full text of the license may be found at
+ * http://opensource.org/licenses/bsd-license.php
+ *
+ * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ *
+ **/
+
+#include <Library/IoLib.h>
+#include <Library/ArmPlatformLib.h>
+#include <Library/DebugLib.h>
+#include <Pi/PiBootMode.h>
+
+#include <Ppi/ArmMpCoreInfo.h>
+
+/**
+ Return the current Boot Mode
+
+ This function returns the boot reason on the platform
+
+ @return Return the current Boot Mode of the platform
+
+**/
+EFI_BOOT_MODE
+ArmPlatformGetBootMode (
+ VOID
+ )
+{
+ return BOOT_WITH_FULL_CONFIGURATION;
+}
+
+/**
+ This function is called by PrePeiCore, in the SEC phase.
+**/
+RETURN_STATUS
+ArmPlatformInitialize (
+ IN UINTN MpId
+ )
+{
+ return RETURN_SUCCESS;
+}
+
+VOID
+ArmPlatformInitializeSystemMemory (
+ VOID
+ )
+{
+}
+
+STATIC ARM_CORE_INFO mRpi3InfoTable[] = {
+ { 0x0, 0x0, }, // Cluster 0, Core 0
+ { 0x0, 0x1, }, // Cluster 0, Core 1
+ { 0x0, 0x2, }, // Cluster 0, Core 2
+ { 0x0, 0x3, }, // Cluster 0, Core 3
+};
+
+STATIC
+EFI_STATUS
+PrePeiCoreGetMpCoreInfo (
+ OUT UINTN *CoreCount,
+ OUT ARM_CORE_INFO **ArmCoreTable
+ )
+{
+ // Only support one cluster
+ *CoreCount = sizeof(mRpi3InfoTable) / sizeof(ARM_CORE_INFO);
+ *ArmCoreTable = mRpi3InfoTable;
+
+ return EFI_SUCCESS;
+}
+
+STATIC ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = {
+ PrePeiCoreGetMpCoreInfo
+};
+STATIC EFI_PEI_PPI_DESCRIPTOR mPlatformPpiTable[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_PPI,
+ &gArmMpCoreInfoPpiGuid,
+ &mMpCoreInfoPpi
+ }
+};
+
+VOID
+ArmPlatformGetPlatformPpiList (
+ OUT UINTN *PpiListSize,
+ OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
+ )
+{
+ *PpiListSize = sizeof(mPlatformPpiTable);
+ *PpiList = mPlatformPpiTable;
+}
diff --git a/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiMem.c b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiMem.c
new file mode 100644
index 000000000000..69821e405134
--- /dev/null
+++ b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiMem.c
@@ -0,0 +1,160 @@
+/** @file
+ *
+ * Copyright (c) 2017-2018, Andrey Warkentin <andrey.warkentin@gmail.com>
+ * Copyright (c) 2014, Linaro Limited. All rights reserved.
+ *
+ * This program and the accompanying materials
+ * are licensed and made available under the terms and conditions of the BSD License
+ * which accompanies this distribution. The full text of the license may be found at
+ * http://opensource.org/licenses/bsd-license.php
+ *
+ * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ *
+ **/
+
+#include <Library/ArmPlatformLib.h>
+#include <Library/DebugLib.h>
+#include <IndustryStandard/Bcm2836.h>
+#include <Library/PcdLib.h>
+
+extern UINT64 mSystemMemoryEnd;
+extern UINT64 mGPUMemoryBase;
+extern UINT64 mGPUMemoryLength;
+
+#define VariablesSize (FixedPcdGet32(PcdFlashNvStorageVariableSize) + \
+ FixedPcdGet32(PcdFlashNvStorageFtwWorkingSize) + \
+ FixedPcdGet32(PcdFlashNvStorageFtwSpareSize) + \
+ FixedPcdGet32(PcdNvStorageEventLogSize))
+
+#define VariablesBase (FixedPcdGet64(PcdFdBaseAddress) + \
+ FixedPcdGet32(PcdFdSize) - \
+ VariablesSize)
+
+#define ATFBase (FixedPcdGet64(PcdFdBaseAddress) + FixedPcdGet32(PcdFdSize))
+
+STATIC ARM_MEMORY_REGION_DESCRIPTOR RaspberryPiMemoryRegionDescriptor[] = {
+ {
+ /* Firmware Volume. */
+ FixedPcdGet64(PcdFdBaseAddress), FixedPcdGet64(PcdFdBaseAddress),
+ FixedPcdGet32(PcdFdSize) - VariablesSize,
+ ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
+ },
+ {
+ /* Variables Volume. */
+ VariablesBase, VariablesBase,
+ VariablesSize,
+ ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
+ },
+ {
+ /* ATF reserved RAM. */
+ ATFBase, ATFBase,
+ FixedPcdGet64(PcdSystemMemoryBase) - ATFBase,
+ ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
+ },
+ {
+ /* System RAM. */
+ FixedPcdGet64(PcdSystemMemoryBase), FixedPcdGet64(PcdSystemMemoryBase),
+ 0,
+ ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
+ },
+ {
+ /* Reserved GPU RAM. */
+ 0,
+ 0,
+ 0,
+ ARM_MEMORY_REGION_ATTRIBUTE_DEVICE
+ },
+ {
+ /* SOC registers. */
+ BCM2836_SOC_REGISTERS,
+ BCM2836_SOC_REGISTERS,
+ BCM2836_SOC_REGISTER_LENGTH,
+ ARM_MEMORY_REGION_ATTRIBUTE_DEVICE
+ },
+ {
+ }
+};
+
+/**
+ Return the Virtual Memory Map of your platform
+
+ This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU
+ on your platform.
+
+ @param[out] VirtualMemoryMap Array of ARM_MEMORY_REGION_DESCRIPTOR
+ describing a Physical-to-Virtual Memory
+ mapping. This array must be ended by a
+ zero-filled entry
+
+**/
+VOID
+ArmPlatformGetVirtualMemoryMap (
+ IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
+ )
+{
+ RaspberryPiMemoryRegionDescriptor[3].Length = mSystemMemoryEnd + 1 -
+ FixedPcdGet64(PcdSystemMemoryBase);
+
+ RaspberryPiMemoryRegionDescriptor[4].PhysicalBase =
+ RaspberryPiMemoryRegionDescriptor[3].PhysicalBase +
+ RaspberryPiMemoryRegionDescriptor[3].Length;
+
+ RaspberryPiMemoryRegionDescriptor[4].VirtualBase =
+ RaspberryPiMemoryRegionDescriptor[4].PhysicalBase;
+
+ RaspberryPiMemoryRegionDescriptor[4].Length =
+ RaspberryPiMemoryRegionDescriptor[5].PhysicalBase -
+ RaspberryPiMemoryRegionDescriptor[4].PhysicalBase;
+
+ DEBUG ((DEBUG_INFO, "FD:\n"
+ "\tPhysicalBase: 0x%lX\n"
+ "\tVirtualBase: 0x%lX\n"
+ "\tLength: 0x%lX\n",
+ RaspberryPiMemoryRegionDescriptor[0].PhysicalBase,
+ RaspberryPiMemoryRegionDescriptor[0].VirtualBase,
+ RaspberryPiMemoryRegionDescriptor[0].Length +
+ RaspberryPiMemoryRegionDescriptor[1].Length));
+
+ DEBUG ((DEBUG_INFO, "Variables (part of FD):\n"
+ "\tPhysicalBase: 0x%lX\n"
+ "\tVirtualBase: 0x%lX\n"
+ "\tLength: 0x%lX\n",
+ RaspberryPiMemoryRegionDescriptor[1].PhysicalBase,
+ RaspberryPiMemoryRegionDescriptor[1].VirtualBase,
+ RaspberryPiMemoryRegionDescriptor[1].Length));
+
+ DEBUG ((DEBUG_INFO, "ATF RAM:\n"
+ "\tPhysicalBase: 0x%lX\n"
+ "\tVirtualBase: 0x%lX\n"
+ "\tLength: 0x%lX\n",
+ RaspberryPiMemoryRegionDescriptor[2].PhysicalBase,
+ RaspberryPiMemoryRegionDescriptor[2].VirtualBase,
+ RaspberryPiMemoryRegionDescriptor[2].Length));
+
+ DEBUG ((DEBUG_INFO, "System RAM:\n"
+ "\tPhysicalBase: 0x%lX\n"
+ "\tVirtualBase: 0x%lX\n"
+ "\tLength: 0x%lX\n",
+ RaspberryPiMemoryRegionDescriptor[3].PhysicalBase,
+ RaspberryPiMemoryRegionDescriptor[3].VirtualBase,
+ RaspberryPiMemoryRegionDescriptor[3].Length));
+
+ DEBUG ((DEBUG_INFO, "GPU Reserved:\n"
+ "\tPhysicalBase: 0x%lX\n"
+ "\tVirtualBase: 0x%lX\n"
+ "\tLength: 0x%lX\n",
+ RaspberryPiMemoryRegionDescriptor[4].PhysicalBase,
+ RaspberryPiMemoryRegionDescriptor[4].VirtualBase,
+ RaspberryPiMemoryRegionDescriptor[4].Length));
+
+ DEBUG ((DEBUG_INFO, "SoC reserved:\n"
+ "\tPhysicalBase: 0x%lX\n"
+ "\tVirtualBase: 0x%lX\n"
+ "\tLength: 0x%lX\n",
+ RaspberryPiMemoryRegionDescriptor[5].PhysicalBase,
+ RaspberryPiMemoryRegionDescriptor[5].VirtualBase,
+ RaspberryPiMemoryRegionDescriptor[5].Length));
+
+ *VirtualMemoryMap = RaspberryPiMemoryRegionDescriptor;
+}
diff --git a/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiPlatformLib.inf b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiPlatformLib.inf
new file mode 100644
index 000000000000..2ee4450d79e4
--- /dev/null
+++ b/Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiPlatformLib.inf
@@ -0,0 +1,64 @@
+#/** @file
+#
+# Copyright (c) 2017-2018, Andrei Warkentin <andrey.warkentin@gmail.com>
+# Copyright (c) 2014-2016, Linaro Limited. All rights reserved.
+# Copyright (c) 2011-2014, ARM Limited. All rights reserved.
+#
+# This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#**/
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = RaspberryPiPlatformLib
+ FILE_GUID = 050182ef-f708-4148-b4bc-256cabf74fea
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = ArmPlatformLib|SEC PEIM
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ EmbeddedPkg/EmbeddedPkg.dec
+ ArmPkg/ArmPkg.dec
+ ArmPlatformPkg/ArmPlatformPkg.dec
+ Platform/Broadcom/Bcm283x/RaspberryPiPkg.dec
+
+[LibraryClasses]
+ ArmLib
+ FdtLib
+ IoLib
+ MemoryAllocationLib
+ PcdLib
+ PrintLib
+
+[Sources.common]
+ RaspberryPi.c
+ RaspberryPiMem.c
+
+[Sources.AARCH64]
+ AArch64/RaspberryPiHelper.S
+
+[FixedPcd]
+ gArmTokenSpaceGuid.PcdFdBaseAddress
+ gArmTokenSpaceGuid.PcdFvBaseAddress
+ gArmPlatformTokenSpaceGuid.PcdCoreCount
+ gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
+ gArmTokenSpaceGuid.PcdArmPrimaryCore
+ gArmTokenSpaceGuid.PcdFdSize
+ gEmbeddedTokenSpaceGuid.PcdDmaDeviceOffset
+ gArmTokenSpaceGuid.PcdSystemMemoryBase
+ gArmTokenSpaceGuid.PcdSystemMemorySize
+ gRaspberryPiTokenSpaceGuid.PcdNvStorageEventLogSize
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
+
+[Ppis]
+ gArmMpCoreInfoPpiGuid
--
2.17.0.windows.1
next prev parent reply other threads:[~2018-12-10 12:39 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-10 12:38 [PATCH v2 edk2-platforms 00/20] Platform/Broadcom: Add Raspberry Pi 3 support Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 01/20] Platform/Broadcom/RPi3: Add Reset and Memory Init libraries Pete Batard
2018-12-12 20:43 ` Ard Biesheuvel
2018-12-13 10:48 ` Pete Batard
2018-12-10 12:38 ` Pete Batard [this message]
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 03/20] Platform/Broadcom/RPi3: Add GPIO and RTC libraries Pete Batard
2018-12-12 20:50 ` Ard Biesheuvel
2018-12-13 10:49 ` Pete Batard
2018-12-13 10:55 ` Leif Lindholm
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 04/20] Platform/Broadcom/RPi3: Add ACPI Tables Pete Batard
2018-12-12 20:52 ` Ard Biesheuvel
2018-12-13 10:49 ` Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 05/20] Platform/Broadcom/RPi3: Add Boot Manager library Pete Batard
2018-12-12 20:56 ` Ard Biesheuvel
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 06/20] Platform/Broadcom/RPi3: Add Interrupt and Device Tree drivers Pete Batard
2018-12-12 21:09 ` Ard Biesheuvel
2018-12-13 10:49 ` Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 07/20] Platform/Broadcom/RPi3: Add Firmware driver Pete Batard
2018-12-12 21:17 ` Ard Biesheuvel
2018-12-13 10:49 ` Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 08/20] Platform/Broadcom/RPi3: Add Display driver Pete Batard
2018-12-14 15:06 ` Ard Biesheuvel
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 09/20] Platform/Broadcom/RPi3: Add Graphic Console driver Pete Batard
2018-12-14 15:31 ` Ard Biesheuvel
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 10/20] Platform/Broadcom/RPi3: Add Base MMC driver Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 11/20] Platform/Broadcom/RPi3: Add Arasan " Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 12/20] Platform/Broadcom/RPi3: Add SD Host driver Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 13/20] Platform/Broadcom/RPi3: Add SMBIOS driver Pete Batard
2018-12-14 15:36 ` Ard Biesheuvel
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 14/20] Platform/Broadcom/RPi3: Add NV Storage driver Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 15/20] Platform/Broadcom/RPi3: Add Platform Config driver Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 16/20] Platform/Broadcom/RPi3: Add Raspberry Pi 3 Platform Pete Batard
2018-12-14 15:39 ` Ard Biesheuvel
2018-12-14 16:21 ` Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 17/20] Platform/Broadcom/RPi3 *NON-OSI*: Add ATF binaries Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 18/20] Platform/Broadcom/RPi3 *NON-OSI*: Add Device Tree binaries Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 19/20] Platform/Broadcom/RPi3 *NON-OSI*: Add USB Host driver Pete Batard
2018-12-10 12:38 ` [PATCH v2 edk2-platforms 20/20] Platform/Broadcom/RPi3 *NON-OSI*: Add Logo driver Pete Batard
2018-12-11 18:10 ` [PATCH v2 edk2-platforms 00/20] Platform/Broadcom: Add Raspberry Pi 3 support Leif Lindholm
2018-12-11 20:16 ` Pete Batard
2018-12-11 21:20 ` Ard Biesheuvel
2018-12-12 18:32 ` Leif Lindholm
2018-12-12 19:53 ` Pete Batard
2018-12-12 20:01 ` Leif Lindholm
2018-12-14 16:14 ` Philippe Mathieu-Daudé
2018-12-14 16:36 ` Leif Lindholm
2018-12-14 17:08 ` Pete Batard
2018-12-14 18:41 ` Leif Lindholm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181210123853.4864-3-pete@akeo.ie \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox