* [platforms: PATCH 0/3] Armada7k8k memory handling update
@ 2019-01-21 10:52 Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base Marcin Wojtas
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 10:52 UTC (permalink / raw)
To: edk2-devel; +Cc: leif.lindholm, ard.biesheuvel, nadavh, mw, jsd, jaz, kostap
Hi,
This short patchset adjust to the latest Marvell v18.12
ARM-TF sources. They change DRAM configuration
registers to be secure, as well as extend the region,
which is non-accessible by OS. The patches avoid
the issues by shifitng PEI stack base and configuring
the memory map, using SiP services.
Patches are available in the github:
https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/commits/dram-upstream-r20190121
I'm looking forward to the comments and remarks.
Best regards,
Marcin
Grzegorz Jaszczyk (2):
Marvell/Library: ArmadaSoCDescLib: Add North Bridge description
Marvell/Armada7k8k: Read DRAM settings from ARM-TF
Marcin Wojtas (1):
Marvell: Armada7k8k: Shift PEI stack base
Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc | 4 +-
Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf | 3 ++
Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h | 27 ++--------
Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h | 1 +
Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h | 10 ++++
Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c | 55 +++++---------------
Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c | 17 ++++++
7 files changed, 51 insertions(+), 66 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base
2019-01-21 10:52 [platforms: PATCH 0/3] Armada7k8k memory handling update Marcin Wojtas
@ 2019-01-21 10:52 ` Marcin Wojtas
2019-01-21 11:26 ` Leif Lindholm
2019-01-21 10:52 ` [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF Marcin Wojtas
2 siblings, 1 reply; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 10:52 UTC (permalink / raw)
To: edk2-devel; +Cc: leif.lindholm, ard.biesheuvel, nadavh, mw, jsd, jaz, kostap
Recent changes in the ARM-TF configure its runtime serices region
as protected, hence the hitherto PEI stack base address (0x41F0000)
violated it.
In order to fix this, extend the region which is non-accessible
by the OS to cover both the ARM-TF (0x4000000 - 0x4200000) and OPTEE
(0x4400000 - 0x5400000) within a single area and set the PEI stack
base address between both images.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
index eafcd6e..c8c597f 100644
--- a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
+++ b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
@@ -376,12 +376,12 @@
gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|36
- gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x41F0000
+ gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x43F0000
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000
# Secure region reservation
gMarvellTokenSpaceGuid.PcdSecureRegionBase|0x4000000
- gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x0200000
+ gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x1400000
# TRNG
gMarvellTokenSpaceGuid.PcdEip76TrngBaseAddress|0xF2760000
--
2.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description
2019-01-21 10:52 [platforms: PATCH 0/3] Armada7k8k memory handling update Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base Marcin Wojtas
@ 2019-01-21 10:52 ` Marcin Wojtas
2019-01-21 11:32 ` Leif Lindholm
2019-01-21 10:52 ` [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF Marcin Wojtas
2 siblings, 1 reply; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 10:52 UTC (permalink / raw)
To: edk2-devel; +Cc: leif.lindholm, ard.biesheuvel, nadavh, mw, jsd, jaz, kostap
From: Grzegorz Jaszczyk <jaz@semihalf.com>
For upcomming patch there is need to get AP806 base, provide required
getter function for it.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h | 1 +
Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h | 10 ++++++++++
Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c | 17 +++++++++++++++++
3 files changed, 28 insertions(+)
diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
index bfc8639..6caee6c 100644
--- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
+++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
@@ -22,6 +22,7 @@
// Common macros
//
#define MV_SOC_CP_BASE(Cp) (0xF2000000 + ((Cp) * 0x2000000))
+#define MV_SOC_AP806_BASE 0xF0000000
#define MV_SOC_AP806_COUNT 1
//
diff --git a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
index 26b075a..7aec9be 100644
--- a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
+++ b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
@@ -20,6 +20,16 @@
#include <Protocol/EmbeddedGpio.h>
//
+// North Bridge description
+//
+EFI_STATUS
+EFIAPI
+ArmadaSoCAp8xxBaseGet (
+ IN OUT UINT64 *ApBase,
+ IN UINTN ApIndex
+ );
+
+//
// ComPhy SoC description
//
typedef struct {
diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
index 5b72c20..089ac2d 100644
--- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
+++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
@@ -30,6 +30,23 @@
EFI_STATUS
EFIAPI
+ArmadaSoCAp8xxBaseGet (
+ IN OUT UINT64 *ApBase,
+ IN UINTN ApIndex
+ )
+{
+ if (ApIndex != 0) {
+ DEBUG ((DEBUG_ERROR, "%a: Only one AP806 in A7K/A8K SoC\n", __FUNCTION__));
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *ApBase = MV_SOC_AP806_BASE;
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
ArmadaSoCDescComPhyGet (
IN OUT MV_SOC_COMPHY_DESC **ComPhyDesc,
IN OUT UINTN *DescCount
--
2.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF
2019-01-21 10:52 [platforms: PATCH 0/3] Armada7k8k memory handling update Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description Marcin Wojtas
@ 2019-01-21 10:52 ` Marcin Wojtas
2019-01-21 11:51 ` Leif Lindholm
2 siblings, 1 reply; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 10:52 UTC (permalink / raw)
To: edk2-devel; +Cc: leif.lindholm, ard.biesheuvel, nadavh, mw, jsd, jaz, kostap
From: Grzegorz Jaszczyk <jaz@semihalf.com>
The memory controller registers are marked as secure in the latest
ARM-TF for Armada SoCs. It is available however get the DRAM
information via SiP services in the EL3, so use it instead
of accessing the registers directly.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf | 3 ++
Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h | 27 ++--------
Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c | 55 +++++---------------
3 files changed, 21 insertions(+), 64 deletions(-)
diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
index e888566..0c7f320 100644
--- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
+++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
@@ -41,12 +41,15 @@
[Packages]
ArmPkg/ArmPkg.dec
ArmPlatformPkg/ArmPlatformPkg.dec
+ EmbeddedPkg/EmbeddedPkg.dec
MdeModulePkg/MdeModulePkg.dec
MdePkg/MdePkg.dec
Silicon/Marvell/Marvell.dec
[LibraryClasses]
+ ArmadaSoCDescLib
ArmLib
+ ArmSmcLib
DebugLib
MemoryAllocationLib
MppLib
diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
index cc30e4a..8a46df6 100644
--- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
+++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
@@ -47,27 +47,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define DRAM_REMAP_TARGET \
(MmioRead32 (CCU_MC_RTBR_REG) << TARGET_BASE_OFFS)
-#define DRAM_CH0_MMAP_LOW_REG(cs) (0xf0020200 + (cs) * 0x8)
-#define DRAM_CS_VALID_ENABLED_MASK 0x1
-#define DRAM_AREA_LENGTH_OFFS 16
-#define DRAM_AREA_LENGTH_MASK (0x1f << DRAM_AREA_LENGTH_OFFS)
-#define DRAM_START_ADDRESS_L_OFFS 23
-#define DRAM_START_ADDRESS_L_MASK (0x1ff << DRAM_START_ADDRESS_L_OFFS)
-#define DRAM_CH0_MMAP_HIGH_REG(cs) (0xf0020204 + (cs) * 0x8)
-#define DRAM_START_ADDR_HTOL_OFFS 32
+/* Armada7k8k North Bridge index */
+#define ARMADA7K8K_AP806_INDEX 0
-#define DRAM_MAX_CS_NUM 8
-
-#define DRAM_CS_ENABLED(Cs) \
- (MmioRead32 (DRAM_CH0_MMAP_LOW_REG (Cs)) & DRAM_CS_VALID_ENABLED_MASK)
-#define GET_DRAM_REGION_BASE(Cs) \
- ((UINT64)MmioRead32 (DRAM_CH0_MMAP_HIGH_REG ((Cs))) << \
- DRAM_START_ADDR_HTOL_OFFS) | \
- (MmioRead32 (DRAM_CH0_MMAP_LOW_REG (Cs)) & DRAM_START_ADDRESS_L_MASK);
-#define GET_DRAM_REGION_SIZE_CODE(Cs) \
- (MmioRead32 (DRAM_CH0_MMAP_LOW_REG ((Cs))) & \
- DRAM_AREA_LENGTH_MASK) >> DRAM_AREA_LENGTH_OFFS
-#define DRAM_REGION_SIZE_EVEN(C) (((C) >= 7) && ((C) <= 26))
-#define GET_DRAM_REGION_SIZE_EVEN(C) ((UINT64)1 << ((C) + 16))
-#define DRAM_REGION_SIZE_ODD(C) ((C) <= 4)
-#define GET_DRAM_REGION_SIZE_ODD(C) ((UINT64)0x18000000 << (C))
+/* Firmware related definition used for SMC calls */
+#define MV_SIP_DRAM_SIZE 0x82000010
diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
index 2a4f5ad..62e8467 100644
--- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
+++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
@@ -33,11 +33,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#include <Base.h>
+#include <IndustryStandard/ArmStdSmc.h>
#include <Library/ArmPlatformLib.h>
+#include <Library/ArmSmcLib.h>
#include <Library/DebugLib.h>
#include <Library/HobLib.h>
#include <Library/IoLib.h>
#include <Library/MemoryAllocationLib.h>
+#include <Protocol/BoardDesc.h>
#include "Armada7k8kLibMem.h"
@@ -57,49 +60,19 @@ GetDramSize (
IN OUT UINT64 *MemSize
)
{
- UINT64 BaseAddr;
- UINT8 RegionCode;
- UINT8 Cs;
-
- *MemSize = 0;
-
- for (Cs = 0; Cs < DRAM_MAX_CS_NUM; Cs++) {
-
- /* Exit loop on first disabled DRAM CS */
- if (!DRAM_CS_ENABLED (Cs)) {
- break;
- }
-
- /*
- * Sanity check for base address of next DRAM block.
- * Only continuous space will be used.
- */
- BaseAddr = GET_DRAM_REGION_BASE (Cs);
- if (BaseAddr != *MemSize) {
- DEBUG ((DEBUG_ERROR,
- "%a: DRAM blocks are not contiguous, limit size to 0x%llx\n",
- __FUNCTION__,
- *MemSize));
- return EFI_SUCCESS;
- }
-
- /* Decode area length for current CS from register value */
- RegionCode = GET_DRAM_REGION_SIZE_CODE (Cs);
-
- if (DRAM_REGION_SIZE_EVEN (RegionCode)) {
- *MemSize += GET_DRAM_REGION_SIZE_EVEN (RegionCode);
- } else if (DRAM_REGION_SIZE_ODD (RegionCode)) {
- *MemSize += GET_DRAM_REGION_SIZE_ODD (RegionCode);
- } else {
- DEBUG ((DEBUG_ERROR,
- "%a: Invalid memory region code (0x%x) for CS#%d\n",
- __FUNCTION__,
- RegionCode,
- Cs));
- return EFI_INVALID_PARAMETER;
- }
+ ARM_SMC_ARGS SmcRegs = {0};
+ EFI_STATUS Status;
+
+ SmcRegs.Arg0 = MV_SIP_DRAM_SIZE;
+ Status = ArmadaSoCAp8xxBaseGet (&SmcRegs.Arg1, ARMADA7K8K_AP806_INDEX);
+ if (EFI_ERROR (Status)) {
+ return Status;
}
+ ArmCallSmc (&SmcRegs);
+
+ *MemSize = SmcRegs.Arg0;
+
return EFI_SUCCESS;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base
2019-01-21 10:52 ` [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base Marcin Wojtas
@ 2019-01-21 11:26 ` Leif Lindholm
2019-01-21 15:34 ` Marcin Wojtas
0 siblings, 1 reply; 12+ messages in thread
From: Leif Lindholm @ 2019-01-21 11:26 UTC (permalink / raw)
To: Marcin Wojtas; +Cc: edk2-devel, ard.biesheuvel, nadavh, jsd, jaz, kostap
On Mon, Jan 21, 2019 at 11:52:09AM +0100, Marcin Wojtas wrote:
> Recent changes in the ARM-TF configure its runtime serices region
> as protected, hence the hitherto PEI stack base address (0x41F0000)
> violated it.
>
> In order to fix this, extend the region which is non-accessible
> by the OS to cover both the ARM-TF (0x4000000 - 0x4200000) and OPTEE
> (0x4400000 - 0x5400000) within a single area and set the PEI stack
What is the single area?
> base address between both images.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> ---
> Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> index eafcd6e..c8c597f 100644
> --- a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> +++ b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> @@ -376,12 +376,12 @@
>
> gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|36
>
> - gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x41F0000
> + gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x43F0000
> gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000
>
> # Secure region reservation
> gMarvellTokenSpaceGuid.PcdSecureRegionBase|0x4000000
> - gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x0200000
> + gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x1400000
>
> # TRNG
> gMarvellTokenSpaceGuid.PcdEip76TrngBaseAddress|0xF2760000
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description
2019-01-21 10:52 ` [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description Marcin Wojtas
@ 2019-01-21 11:32 ` Leif Lindholm
2019-01-21 15:35 ` Marcin Wojtas
0 siblings, 1 reply; 12+ messages in thread
From: Leif Lindholm @ 2019-01-21 11:32 UTC (permalink / raw)
To: Marcin Wojtas; +Cc: edk2-devel, ard.biesheuvel, nadavh, jsd, jaz, kostap
On Mon, Jan 21, 2019 at 11:52:10AM +0100, Marcin Wojtas wrote:
> From: Grzegorz Jaszczyk <jaz@semihalf.com>
>
> For upcomming patch there is need to get AP806 base, provide required
> getter function for it.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> ---
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h | 1 +
> Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h | 10 ++++++++++
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c | 17 +++++++++++++++++
> 3 files changed, 28 insertions(+)
>
> diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> index bfc8639..6caee6c 100644
> --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> @@ -22,6 +22,7 @@
> // Common macros
> //
> #define MV_SOC_CP_BASE(Cp) (0xF2000000 + ((Cp) * 0x2000000))
> +#define MV_SOC_AP806_BASE 0xF0000000
> #define MV_SOC_AP806_COUNT 1
>
> //
> diff --git a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> index 26b075a..7aec9be 100644
> --- a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> +++ b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> @@ -20,6 +20,16 @@
> #include <Protocol/EmbeddedGpio.h>
>
> //
> +// North Bridge description
> +//
> +EFI_STATUS
> +EFIAPI
> +ArmadaSoCAp8xxBaseGet (
> + IN OUT UINT64 *ApBase,
> + IN UINTN ApIndex
> + );
> +
> +//
> // ComPhy SoC description
> //
> typedef struct {
> diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> index 5b72c20..089ac2d 100644
> --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> @@ -30,6 +30,23 @@
>
As I said, I was going to get stricter about adding function
description comments - please add one here. (And clone it to
ArmadaSoCDescLib.h, for the obious place to go look for a template
when implementing a variant for a new platform.)
> EFI_STATUS
> EFIAPI
> +ArmadaSoCAp8xxBaseGet (
> + IN OUT UINT64 *ApBase,
> + IN UINTN ApIndex
> + )
> +{
> + if (ApIndex != 0) {
This test should be using ARMADA7K8K_AP806_INDEX, and that definition
should be added to this patch.
> + DEBUG ((DEBUG_ERROR, "%a: Only one AP806 in A7K/A8K SoC\n", __FUNCTION__));
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + *ApBase = MV_SOC_AP806_BASE;
> +
> + return EFI_SUCCESS;
> +}
> +
> +EFI_STATUS
> +EFIAPI
> ArmadaSoCDescComPhyGet (
> IN OUT MV_SOC_COMPHY_DESC **ComPhyDesc,
> IN OUT UINTN *DescCount
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF
2019-01-21 10:52 ` [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF Marcin Wojtas
@ 2019-01-21 11:51 ` Leif Lindholm
2019-01-21 15:47 ` Marcin Wojtas
0 siblings, 1 reply; 12+ messages in thread
From: Leif Lindholm @ 2019-01-21 11:51 UTC (permalink / raw)
To: Marcin Wojtas; +Cc: edk2-devel, ard.biesheuvel, nadavh, jsd, jaz, kostap
On Mon, Jan 21, 2019 at 11:52:11AM +0100, Marcin Wojtas wrote:
> From: Grzegorz Jaszczyk <jaz@semihalf.com>
>
> The memory controller registers are marked as secure in the latest
> ARM-TF for Armada SoCs. It is available however get the DRAM
> information via SiP services in the EL3, so use it instead
> of accessing the registers directly.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> ---
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf | 3 ++
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h | 27 ++--------
> Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c | 55 +++++---------------
> 3 files changed, 21 insertions(+), 64 deletions(-)
>
> diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
> index e888566..0c7f320 100644
> --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
> +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
> @@ -41,12 +41,15 @@
> [Packages]
> ArmPkg/ArmPkg.dec
> ArmPlatformPkg/ArmPlatformPkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> MdeModulePkg/MdeModulePkg.dec
> MdePkg/MdePkg.dec
> Silicon/Marvell/Marvell.dec
>
> [LibraryClasses]
> + ArmadaSoCDescLib
> ArmLib
> + ArmSmcLib
> DebugLib
> MemoryAllocationLib
> MppLib
> diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
> index cc30e4a..8a46df6 100644
> --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
> +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
> @@ -47,27 +47,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> #define DRAM_REMAP_TARGET \
> (MmioRead32 (CCU_MC_RTBR_REG) << TARGET_BASE_OFFS)
>
> -#define DRAM_CH0_MMAP_LOW_REG(cs) (0xf0020200 + (cs) * 0x8)
> -#define DRAM_CS_VALID_ENABLED_MASK 0x1
> -#define DRAM_AREA_LENGTH_OFFS 16
> -#define DRAM_AREA_LENGTH_MASK (0x1f << DRAM_AREA_LENGTH_OFFS)
> -#define DRAM_START_ADDRESS_L_OFFS 23
> -#define DRAM_START_ADDRESS_L_MASK (0x1ff << DRAM_START_ADDRESS_L_OFFS)
> -#define DRAM_CH0_MMAP_HIGH_REG(cs) (0xf0020204 + (cs) * 0x8)
> -#define DRAM_START_ADDR_HTOL_OFFS 32
> +/* Armada7k8k North Bridge index */
> +#define ARMADA7K8K_AP806_INDEX 0
>
> -#define DRAM_MAX_CS_NUM 8
> -
> -#define DRAM_CS_ENABLED(Cs) \
> - (MmioRead32 (DRAM_CH0_MMAP_LOW_REG (Cs)) & DRAM_CS_VALID_ENABLED_MASK)
> -#define GET_DRAM_REGION_BASE(Cs) \
> - ((UINT64)MmioRead32 (DRAM_CH0_MMAP_HIGH_REG ((Cs))) << \
> - DRAM_START_ADDR_HTOL_OFFS) | \
> - (MmioRead32 (DRAM_CH0_MMAP_LOW_REG (Cs)) & DRAM_START_ADDRESS_L_MASK);
> -#define GET_DRAM_REGION_SIZE_CODE(Cs) \
> - (MmioRead32 (DRAM_CH0_MMAP_LOW_REG ((Cs))) & \
> - DRAM_AREA_LENGTH_MASK) >> DRAM_AREA_LENGTH_OFFS
> -#define DRAM_REGION_SIZE_EVEN(C) (((C) >= 7) && ((C) <= 26))
> -#define GET_DRAM_REGION_SIZE_EVEN(C) ((UINT64)1 << ((C) + 16))
> -#define DRAM_REGION_SIZE_ODD(C) ((C) <= 4)
> -#define GET_DRAM_REGION_SIZE_ODD(C) ((UINT64)0x18000000 << (C))
> +/* Firmware related definition used for SMC calls */
> +#define MV_SIP_DRAM_SIZE 0x82000010
Hmm...
This would end us up with having Marvell SMC calls spread across
multiple files. Could you insert an intermediate patch which breaks out
the ones from Silicon/Marvell/Library/ComPhyLib/ComPhySipSvc.h into a
separate (MarvellSmc.h?) include file?
If you could further add _SMC_ID to the #defines (like in edk2
ArmPkg/Include/IndustryStandard/ArmStdSmc.h), that would make me very
happy. (I'd be happy for you to drop _SIP, or keep it either side of
the addition, as per your preference - we don't seem to have precedent
here yet.)
Regards,
Leif
> diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> index 2a4f5ad..62e8467 100644
> --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> @@ -33,11 +33,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> *******************************************************************************/
>
> #include <Base.h>
> +#include <IndustryStandard/ArmStdSmc.h>
> #include <Library/ArmPlatformLib.h>
> +#include <Library/ArmSmcLib.h>
> #include <Library/DebugLib.h>
> #include <Library/HobLib.h>
> #include <Library/IoLib.h>
> #include <Library/MemoryAllocationLib.h>
> +#include <Protocol/BoardDesc.h>
>
> #include "Armada7k8kLibMem.h"
>
> @@ -57,49 +60,19 @@ GetDramSize (
> IN OUT UINT64 *MemSize
> )
> {
> - UINT64 BaseAddr;
> - UINT8 RegionCode;
> - UINT8 Cs;
> -
> - *MemSize = 0;
> -
> - for (Cs = 0; Cs < DRAM_MAX_CS_NUM; Cs++) {
> -
> - /* Exit loop on first disabled DRAM CS */
> - if (!DRAM_CS_ENABLED (Cs)) {
> - break;
> - }
> -
> - /*
> - * Sanity check for base address of next DRAM block.
> - * Only continuous space will be used.
> - */
> - BaseAddr = GET_DRAM_REGION_BASE (Cs);
> - if (BaseAddr != *MemSize) {
> - DEBUG ((DEBUG_ERROR,
> - "%a: DRAM blocks are not contiguous, limit size to 0x%llx\n",
> - __FUNCTION__,
> - *MemSize));
> - return EFI_SUCCESS;
> - }
> -
> - /* Decode area length for current CS from register value */
> - RegionCode = GET_DRAM_REGION_SIZE_CODE (Cs);
> -
> - if (DRAM_REGION_SIZE_EVEN (RegionCode)) {
> - *MemSize += GET_DRAM_REGION_SIZE_EVEN (RegionCode);
> - } else if (DRAM_REGION_SIZE_ODD (RegionCode)) {
> - *MemSize += GET_DRAM_REGION_SIZE_ODD (RegionCode);
> - } else {
> - DEBUG ((DEBUG_ERROR,
> - "%a: Invalid memory region code (0x%x) for CS#%d\n",
> - __FUNCTION__,
> - RegionCode,
> - Cs));
> - return EFI_INVALID_PARAMETER;
> - }
> + ARM_SMC_ARGS SmcRegs = {0};
> + EFI_STATUS Status;
> +
> + SmcRegs.Arg0 = MV_SIP_DRAM_SIZE;
> + Status = ArmadaSoCAp8xxBaseGet (&SmcRegs.Arg1, ARMADA7K8K_AP806_INDEX);
> + if (EFI_ERROR (Status)) {
> + return Status;
> }
>
> + ArmCallSmc (&SmcRegs);
> +
> + *MemSize = SmcRegs.Arg0;
> +
> return EFI_SUCCESS;
> }
>
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base
2019-01-21 11:26 ` Leif Lindholm
@ 2019-01-21 15:34 ` Marcin Wojtas
2019-01-21 15:44 ` Leif Lindholm
0 siblings, 1 reply; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 15:34 UTC (permalink / raw)
To: Leif Lindholm
Cc: edk2-devel-01, Ard Biesheuvel, nadavh, jsd@semihalf.com,
Grzegorz Jaszczyk, Kostya Porotchkin
Hi Leif,
pon., 21 sty 2019 o 12:26 Leif Lindholm <leif.lindholm@linaro.org> napisał(a):
>
> On Mon, Jan 21, 2019 at 11:52:09AM +0100, Marcin Wojtas wrote:
> > Recent changes in the ARM-TF configure its runtime serices region
> > as protected, hence the hitherto PEI stack base address (0x41F0000)
> > violated it.
> >
> > In order to fix this, extend the region which is non-accessible
> > by the OS to cover both the ARM-TF (0x4000000 - 0x4200000) and OPTEE
> > (0x4400000 - 0x5400000) within a single area and set the PEI stack
>
> What is the single area?
The single region is set to:
0x4000000 - 0x5400000
PEI stack base is shifted right below the OPTEE region, i.e. to:
0x43F0000
Do you wish to add above to the commit message as well?
Best regards,
Marcin
>
> > base address between both images.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> > ---
> > Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > index eafcd6e..c8c597f 100644
> > --- a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > +++ b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > @@ -376,12 +376,12 @@
> >
> > gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|36
> >
> > - gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x41F0000
> > + gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x43F0000
> > gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000
> >
> > # Secure region reservation
> > gMarvellTokenSpaceGuid.PcdSecureRegionBase|0x4000000
> > - gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x0200000
> > + gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x1400000
> >
> > # TRNG
> > gMarvellTokenSpaceGuid.PcdEip76TrngBaseAddress|0xF2760000
> > --
> > 2.7.4
> >
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description
2019-01-21 11:32 ` Leif Lindholm
@ 2019-01-21 15:35 ` Marcin Wojtas
0 siblings, 0 replies; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 15:35 UTC (permalink / raw)
To: Leif Lindholm
Cc: edk2-devel-01, Ard Biesheuvel, nadavh, jsd@semihalf.com,
Grzegorz Jaszczyk, Kostya Porotchkin
Hi Leif,
pon., 21 sty 2019 o 12:32 Leif Lindholm <leif.lindholm@linaro.org> napisał(a):
>
> On Mon, Jan 21, 2019 at 11:52:10AM +0100, Marcin Wojtas wrote:
> > From: Grzegorz Jaszczyk <jaz@semihalf.com>
> >
> > For upcomming patch there is need to get AP806 base, provide required
> > getter function for it.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> > ---
> > Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h | 1 +
> > Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h | 10 ++++++++++
> > Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c | 17 +++++++++++++++++
> > 3 files changed, 28 insertions(+)
> >
> > diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> > index bfc8639..6caee6c 100644
> > --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> > +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.h
> > @@ -22,6 +22,7 @@
> > // Common macros
> > //
> > #define MV_SOC_CP_BASE(Cp) (0xF2000000 + ((Cp) * 0x2000000))
> > +#define MV_SOC_AP806_BASE 0xF0000000
> > #define MV_SOC_AP806_COUNT 1
> >
> > //
> > diff --git a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> > index 26b075a..7aec9be 100644
> > --- a/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> > +++ b/Silicon/Marvell/Include/Library/ArmadaSoCDescLib.h
> > @@ -20,6 +20,16 @@
> > #include <Protocol/EmbeddedGpio.h>
> >
> > //
> > +// North Bridge description
> > +//
> > +EFI_STATUS
> > +EFIAPI
> > +ArmadaSoCAp8xxBaseGet (
> > + IN OUT UINT64 *ApBase,
> > + IN UINTN ApIndex
> > + );
> > +
> > +//
> > // ComPhy SoC description
> > //
> > typedef struct {
> > diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> > index 5b72c20..089ac2d 100644
> > --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> > +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kSoCDescLib/Armada7k8kSoCDescLib.c
> > @@ -30,6 +30,23 @@
> >
>
> As I said, I was going to get stricter about adding function
> description comments - please add one here. (And clone it to
> ArmadaSoCDescLib.h, for the obious place to go look for a template
> when implementing a variant for a new platform.)
Sure, I will add it.
>
> > EFI_STATUS
> > EFIAPI
> > +ArmadaSoCAp8xxBaseGet (
> > + IN OUT UINT64 *ApBase,
> > + IN UINTN ApIndex
> > + )
> > +{
> > + if (ApIndex != 0) {
>
> This test should be using ARMADA7K8K_AP806_INDEX, and that definition
> should be added to this patch.
>
Ok.
Thanks,
Marcin
> > + DEBUG ((DEBUG_ERROR, "%a: Only one AP806 in A7K/A8K SoC\n", __FUNCTION__));
> > + return EFI_INVALID_PARAMETER;
> > + }
> > +
> > + *ApBase = MV_SOC_AP806_BASE;
> > +
> > + return EFI_SUCCESS;
> > +}
> > +
> > +EFI_STATUS
> > +EFIAPI
> > ArmadaSoCDescComPhyGet (
> > IN OUT MV_SOC_COMPHY_DESC **ComPhyDesc,
> > IN OUT UINTN *DescCount
> > --
> > 2.7.4
> >
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base
2019-01-21 15:34 ` Marcin Wojtas
@ 2019-01-21 15:44 ` Leif Lindholm
0 siblings, 0 replies; 12+ messages in thread
From: Leif Lindholm @ 2019-01-21 15:44 UTC (permalink / raw)
To: Marcin Wojtas
Cc: edk2-devel-01, Ard Biesheuvel, nadavh, jsd@semihalf.com,
Grzegorz Jaszczyk, Kostya Porotchkin
On Mon, Jan 21, 2019 at 04:34:39PM +0100, Marcin Wojtas wrote:
> Hi Leif,
>
>
> pon., 21 sty 2019 o 12:26 Leif Lindholm <leif.lindholm@linaro.org> napisał(a):
> >
> > On Mon, Jan 21, 2019 at 11:52:09AM +0100, Marcin Wojtas wrote:
> > > Recent changes in the ARM-TF configure its runtime serices region
> > > as protected, hence the hitherto PEI stack base address (0x41F0000)
> > > violated it.
> > >
> > > In order to fix this, extend the region which is non-accessible
> > > by the OS to cover both the ARM-TF (0x4000000 - 0x4200000) and OPTEE
> > > (0x4400000 - 0x5400000) within a single area and set the PEI stack
> >
> > What is the single area?
>
> The single region is set to:
> 0x4000000 - 0x5400000
>
> PEI stack base is shifted right below the OPTEE region, i.e. to:
> 0x43F0000
>
> Do you wish to add above to the commit message as well?
Yes please.
Best Regards,
Leif
> Best regards,
> Marcin
>
> >
> > > base address between both images.
> > >
> > > Contributed-under: TianoCore Contribution Agreement 1.1
> > > Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> > > ---
> > > Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc | 4 ++--
> > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > > index eafcd6e..c8c597f 100644
> > > --- a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > > +++ b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > > @@ -376,12 +376,12 @@
> > >
> > > gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|36
> > >
> > > - gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x41F0000
> > > + gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x43F0000
> > > gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000
> > >
> > > # Secure region reservation
> > > gMarvellTokenSpaceGuid.PcdSecureRegionBase|0x4000000
> > > - gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x0200000
> > > + gMarvellTokenSpaceGuid.PcdSecureRegionSize|0x1400000
> > >
> > > # TRNG
> > > gMarvellTokenSpaceGuid.PcdEip76TrngBaseAddress|0xF2760000
> > > --
> > > 2.7.4
> > >
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF
2019-01-21 11:51 ` Leif Lindholm
@ 2019-01-21 15:47 ` Marcin Wojtas
2019-01-21 16:05 ` Leif Lindholm
0 siblings, 1 reply; 12+ messages in thread
From: Marcin Wojtas @ 2019-01-21 15:47 UTC (permalink / raw)
To: Leif Lindholm
Cc: edk2-devel-01, Ard Biesheuvel, nadavh, jsd@semihalf.com,
Grzegorz Jaszczyk, Kostya Porotchkin
Hi Leif,
pon., 21 sty 2019 o 12:51 Leif Lindholm <leif.lindholm@linaro.org> napisał(a):
>
> On Mon, Jan 21, 2019 at 11:52:11AM +0100, Marcin Wojtas wrote:
> > From: Grzegorz Jaszczyk <jaz@semihalf.com>
> >
> > The memory controller registers are marked as secure in the latest
> > ARM-TF for Armada SoCs. It is available however get the DRAM
> > information via SiP services in the EL3, so use it instead
> > of accessing the registers directly.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> > ---
> > Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf | 3 ++
> > Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h | 27 ++--------
> > Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c | 55 +++++---------------
> > 3 files changed, 21 insertions(+), 64 deletions(-)
> >
> > diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
> > index e888566..0c7f320 100644
> > --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
> > +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLib.inf
> > @@ -41,12 +41,15 @@
> > [Packages]
> > ArmPkg/ArmPkg.dec
> > ArmPlatformPkg/ArmPlatformPkg.dec
> > + EmbeddedPkg/EmbeddedPkg.dec
> > MdeModulePkg/MdeModulePkg.dec
> > MdePkg/MdePkg.dec
> > Silicon/Marvell/Marvell.dec
> >
> > [LibraryClasses]
> > + ArmadaSoCDescLib
> > ArmLib
> > + ArmSmcLib
> > DebugLib
> > MemoryAllocationLib
> > MppLib
> > diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
> > index cc30e4a..8a46df6 100644
> > --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
> > +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.h
> > @@ -47,27 +47,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > #define DRAM_REMAP_TARGET \
> > (MmioRead32 (CCU_MC_RTBR_REG) << TARGET_BASE_OFFS)
> >
> > -#define DRAM_CH0_MMAP_LOW_REG(cs) (0xf0020200 + (cs) * 0x8)
> > -#define DRAM_CS_VALID_ENABLED_MASK 0x1
> > -#define DRAM_AREA_LENGTH_OFFS 16
> > -#define DRAM_AREA_LENGTH_MASK (0x1f << DRAM_AREA_LENGTH_OFFS)
> > -#define DRAM_START_ADDRESS_L_OFFS 23
> > -#define DRAM_START_ADDRESS_L_MASK (0x1ff << DRAM_START_ADDRESS_L_OFFS)
> > -#define DRAM_CH0_MMAP_HIGH_REG(cs) (0xf0020204 + (cs) * 0x8)
> > -#define DRAM_START_ADDR_HTOL_OFFS 32
> > +/* Armada7k8k North Bridge index */
> > +#define ARMADA7K8K_AP806_INDEX 0
> >
> > -#define DRAM_MAX_CS_NUM 8
> > -
> > -#define DRAM_CS_ENABLED(Cs) \
> > - (MmioRead32 (DRAM_CH0_MMAP_LOW_REG (Cs)) & DRAM_CS_VALID_ENABLED_MASK)
> > -#define GET_DRAM_REGION_BASE(Cs) \
> > - ((UINT64)MmioRead32 (DRAM_CH0_MMAP_HIGH_REG ((Cs))) << \
> > - DRAM_START_ADDR_HTOL_OFFS) | \
> > - (MmioRead32 (DRAM_CH0_MMAP_LOW_REG (Cs)) & DRAM_START_ADDRESS_L_MASK);
> > -#define GET_DRAM_REGION_SIZE_CODE(Cs) \
> > - (MmioRead32 (DRAM_CH0_MMAP_LOW_REG ((Cs))) & \
> > - DRAM_AREA_LENGTH_MASK) >> DRAM_AREA_LENGTH_OFFS
> > -#define DRAM_REGION_SIZE_EVEN(C) (((C) >= 7) && ((C) <= 26))
> > -#define GET_DRAM_REGION_SIZE_EVEN(C) ((UINT64)1 << ((C) + 16))
> > -#define DRAM_REGION_SIZE_ODD(C) ((C) <= 4)
> > -#define GET_DRAM_REGION_SIZE_ODD(C) ((UINT64)0x18000000 << (C))
> > +/* Firmware related definition used for SMC calls */
> > +#define MV_SIP_DRAM_SIZE 0x82000010
>
> Hmm...
> This would end us up with having Marvell SMC calls spread across
> multiple files. Could you insert an intermediate patch which breaks out
> the ones from Silicon/Marvell/Library/ComPhyLib/ComPhySipSvc.h into a
> separate (MarvellSmc.h?) include file?
How about MvSmc.h ? I try to use 'Mv' prefix consistently, especially
when adding new code.
>
> If you could further add _SMC_ID to the #defines (like in edk2
> ArmPkg/Include/IndustryStandard/ArmStdSmc.h), that would make me very
> happy. (I'd be happy for you to drop _SIP, or keep it either side of
> the addition, as per your preference - we don't seem to have precedent
> here yet.)
>
How about below:
#define MV_SMC_ID_COMPHY_POWER_ON 0x82000001
#define MV_SMC_ID_COMPHY_POWER_OFF 0x82000002
#define MV_SMC_ID_COMPHY_PLL_LOCK 0x82000003
?
Thanks,
Marcin
> Regards,
>
> Leif
>
> > diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> > index 2a4f5ad..62e8467 100644
> > --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> > +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> > @@ -33,11 +33,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > *******************************************************************************/
> >
> > #include <Base.h>
> > +#include <IndustryStandard/ArmStdSmc.h>
> > #include <Library/ArmPlatformLib.h>
> > +#include <Library/ArmSmcLib.h>
> > #include <Library/DebugLib.h>
> > #include <Library/HobLib.h>
> > #include <Library/IoLib.h>
> > #include <Library/MemoryAllocationLib.h>
> > +#include <Protocol/BoardDesc.h>
> >
> > #include "Armada7k8kLibMem.h"
> >
> > @@ -57,49 +60,19 @@ GetDramSize (
> > IN OUT UINT64 *MemSize
> > )
> > {
> > - UINT64 BaseAddr;
> > - UINT8 RegionCode;
> > - UINT8 Cs;
> > -
> > - *MemSize = 0;
> > -
> > - for (Cs = 0; Cs < DRAM_MAX_CS_NUM; Cs++) {
> > -
> > - /* Exit loop on first disabled DRAM CS */
> > - if (!DRAM_CS_ENABLED (Cs)) {
> > - break;
> > - }
> > -
> > - /*
> > - * Sanity check for base address of next DRAM block.
> > - * Only continuous space will be used.
> > - */
> > - BaseAddr = GET_DRAM_REGION_BASE (Cs);
> > - if (BaseAddr != *MemSize) {
> > - DEBUG ((DEBUG_ERROR,
> > - "%a: DRAM blocks are not contiguous, limit size to 0x%llx\n",
> > - __FUNCTION__,
> > - *MemSize));
> > - return EFI_SUCCESS;
> > - }
> > -
> > - /* Decode area length for current CS from register value */
> > - RegionCode = GET_DRAM_REGION_SIZE_CODE (Cs);
> > -
> > - if (DRAM_REGION_SIZE_EVEN (RegionCode)) {
> > - *MemSize += GET_DRAM_REGION_SIZE_EVEN (RegionCode);
> > - } else if (DRAM_REGION_SIZE_ODD (RegionCode)) {
> > - *MemSize += GET_DRAM_REGION_SIZE_ODD (RegionCode);
> > - } else {
> > - DEBUG ((DEBUG_ERROR,
> > - "%a: Invalid memory region code (0x%x) for CS#%d\n",
> > - __FUNCTION__,
> > - RegionCode,
> > - Cs));
> > - return EFI_INVALID_PARAMETER;
> > - }
> > + ARM_SMC_ARGS SmcRegs = {0};
> > + EFI_STATUS Status;
> > +
> > + SmcRegs.Arg0 = MV_SIP_DRAM_SIZE;
> > + Status = ArmadaSoCAp8xxBaseGet (&SmcRegs.Arg1, ARMADA7K8K_AP806_INDEX);
> > + if (EFI_ERROR (Status)) {
> > + return Status;
> > }
> >
> > + ArmCallSmc (&SmcRegs);
> > +
> > + *MemSize = SmcRegs.Arg0;
> > +
> > return EFI_SUCCESS;
> > }
> >
> > --
> > 2.7.4
> >
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF
2019-01-21 15:47 ` Marcin Wojtas
@ 2019-01-21 16:05 ` Leif Lindholm
0 siblings, 0 replies; 12+ messages in thread
From: Leif Lindholm @ 2019-01-21 16:05 UTC (permalink / raw)
To: Marcin Wojtas
Cc: edk2-devel-01, Ard Biesheuvel, nadavh, jsd@semihalf.com,
Grzegorz Jaszczyk, Kostya Porotchkin
On Mon, Jan 21, 2019 at 04:47:31PM +0100, Marcin Wojtas wrote:
> > > -#define DRAM_REGION_SIZE_EVEN(C) (((C) >= 7) && ((C) <= 26))
> > > -#define GET_DRAM_REGION_SIZE_EVEN(C) ((UINT64)1 << ((C) + 16))
> > > -#define DRAM_REGION_SIZE_ODD(C) ((C) <= 4)
> > > -#define GET_DRAM_REGION_SIZE_ODD(C) ((UINT64)0x18000000 << (C))
> > > +/* Firmware related definition used for SMC calls */
> > > +#define MV_SIP_DRAM_SIZE 0x82000010
> >
> > Hmm...
> > This would end us up with having Marvell SMC calls spread across
> > multiple files. Could you insert an intermediate patch which breaks out
> > the ones from Silicon/Marvell/Library/ComPhyLib/ComPhySipSvc.h into a
> > separate (MarvellSmc.h?) include file?
>
> How about MvSmc.h ? I try to use 'Mv' prefix consistently, especially
> when adding new code.
Sure.
> >
> > If you could further add _SMC_ID to the #defines (like in edk2
> > ArmPkg/Include/IndustryStandard/ArmStdSmc.h), that would make me very
> > happy. (I'd be happy for you to drop _SIP, or keep it either side of
> > the addition, as per your preference - we don't seem to have precedent
> > here yet.)
> >
>
> How about below:
> #define MV_SMC_ID_COMPHY_POWER_ON 0x82000001
> #define MV_SMC_ID_COMPHY_POWER_OFF 0x82000002
> #define MV_SMC_ID_COMPHY_PLL_LOCK 0x82000003
> ?
Yeah, that works.
Regards,
Leif
> Thanks,
> Marcin
>
>
> > Regards,
> >
> > Leif
> >
> > > diff --git a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> > > index 2a4f5ad..62e8467 100644
> > > --- a/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> > > +++ b/Silicon/Marvell/Armada7k8k/Library/Armada7k8kLib/Armada7k8kLibMem.c
> > > @@ -33,11 +33,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > > *******************************************************************************/
> > >
> > > #include <Base.h>
> > > +#include <IndustryStandard/ArmStdSmc.h>
> > > #include <Library/ArmPlatformLib.h>
> > > +#include <Library/ArmSmcLib.h>
> > > #include <Library/DebugLib.h>
> > > #include <Library/HobLib.h>
> > > #include <Library/IoLib.h>
> > > #include <Library/MemoryAllocationLib.h>
> > > +#include <Protocol/BoardDesc.h>
> > >
> > > #include "Armada7k8kLibMem.h"
> > >
> > > @@ -57,49 +60,19 @@ GetDramSize (
> > > IN OUT UINT64 *MemSize
> > > )
> > > {
> > > - UINT64 BaseAddr;
> > > - UINT8 RegionCode;
> > > - UINT8 Cs;
> > > -
> > > - *MemSize = 0;
> > > -
> > > - for (Cs = 0; Cs < DRAM_MAX_CS_NUM; Cs++) {
> > > -
> > > - /* Exit loop on first disabled DRAM CS */
> > > - if (!DRAM_CS_ENABLED (Cs)) {
> > > - break;
> > > - }
> > > -
> > > - /*
> > > - * Sanity check for base address of next DRAM block.
> > > - * Only continuous space will be used.
> > > - */
> > > - BaseAddr = GET_DRAM_REGION_BASE (Cs);
> > > - if (BaseAddr != *MemSize) {
> > > - DEBUG ((DEBUG_ERROR,
> > > - "%a: DRAM blocks are not contiguous, limit size to 0x%llx\n",
> > > - __FUNCTION__,
> > > - *MemSize));
> > > - return EFI_SUCCESS;
> > > - }
> > > -
> > > - /* Decode area length for current CS from register value */
> > > - RegionCode = GET_DRAM_REGION_SIZE_CODE (Cs);
> > > -
> > > - if (DRAM_REGION_SIZE_EVEN (RegionCode)) {
> > > - *MemSize += GET_DRAM_REGION_SIZE_EVEN (RegionCode);
> > > - } else if (DRAM_REGION_SIZE_ODD (RegionCode)) {
> > > - *MemSize += GET_DRAM_REGION_SIZE_ODD (RegionCode);
> > > - } else {
> > > - DEBUG ((DEBUG_ERROR,
> > > - "%a: Invalid memory region code (0x%x) for CS#%d\n",
> > > - __FUNCTION__,
> > > - RegionCode,
> > > - Cs));
> > > - return EFI_INVALID_PARAMETER;
> > > - }
> > > + ARM_SMC_ARGS SmcRegs = {0};
> > > + EFI_STATUS Status;
> > > +
> > > + SmcRegs.Arg0 = MV_SIP_DRAM_SIZE;
> > > + Status = ArmadaSoCAp8xxBaseGet (&SmcRegs.Arg1, ARMADA7K8K_AP806_INDEX);
> > > + if (EFI_ERROR (Status)) {
> > > + return Status;
> > > }
> > >
> > > + ArmCallSmc (&SmcRegs);
> > > +
> > > + *MemSize = SmcRegs.Arg0;
> > > +
> > > return EFI_SUCCESS;
> > > }
> > >
> > > --
> > > 2.7.4
> > >
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2019-01-21 16:05 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-21 10:52 [platforms: PATCH 0/3] Armada7k8k memory handling update Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 1/3] Marvell: Armada7k8k: Shift PEI stack base Marcin Wojtas
2019-01-21 11:26 ` Leif Lindholm
2019-01-21 15:34 ` Marcin Wojtas
2019-01-21 15:44 ` Leif Lindholm
2019-01-21 10:52 ` [platforms: PATCH 2/3] Marvell/Library: ArmadaSoCDescLib: Add North Bridge description Marcin Wojtas
2019-01-21 11:32 ` Leif Lindholm
2019-01-21 15:35 ` Marcin Wojtas
2019-01-21 10:52 ` [platforms: PATCH 3/3] Marvell/Armada7k8k: Read DRAM settings from ARM-TF Marcin Wojtas
2019-01-21 11:51 ` Leif Lindholm
2019-01-21 15:47 ` Marcin Wojtas
2019-01-21 16:05 ` Leif Lindholm
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox