/** @file
|
*
|
* Copyright (c) 2018-2021, ARM Limited. All rights reserved.
|
*
|
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
*
|
**/
|
|
#ifndef __SGI_PLATFORM_H__
|
#define __SGI_PLATFORM_H__
|
|
/***********************************************************************************
|
// Platform Memory Map
|
************************************************************************************/
|
|
// Sub System Peripherals - UART0
|
#define SGI_SUBSYS_UART0_BASE 0x2A400000
|
#define SGI_SUBSYS_UART0_SZ 0x00010000
|
|
// Sub System Peripherals - UART1
|
#define SGI_SUBSYS_UART1_BASE 0x2A410000
|
#define SGI_SUBSYS_UART1_SZ 0x00010000
|
|
// Register offsets into the System Registers Block
|
#define SGI_SYSPH_SYS_REG_FLASH 0x4C
|
#define SGI_SYSPH_SYS_REG_FLASH_RWEN 0x1
|
|
// SGI575_VERSION values
|
#define SGI575_CONF_NUM 0x3
|
#define SGI575_PART_NUM 0x783
|
|
//RDN1E1EDGE Platform Identification values
|
#define RD_N1E1_EDGE_PART_NUM 0x786
|
#define RD_N1_EDGE_CONF_ID 0x1
|
#define RD_E1_EDGE_CONF_ID 0x2
|
|
// RD-V1 Platform Identification values
|
#define RD_V1_PART_NUM 0x78A
|
#define RD_V1_CONF_ID 0x1
|
#define RD_V1_MC_CONF_ID 0x2
|
|
// RD-N2-Cfg1 Platform Identification values
|
#define RD_N2_CFG1_PART_NUM 0x7B6
|
#define RD_N2_CFG1_CONF_ID 0x1
|
|
// RD-N2 Platform Identification values
|
#define RD_N2_PART_NUM 0x7B7
|
#define RD_N2_CONF_ID 0x1
|
|
#define SGI_CONFIG_MASK 0x0F
|
#define SGI_CONFIG_SHIFT 0x1C
|
#define SGI_PART_NUM_MASK 0xFFF
|
|
#define MULTI_CHIP_MODE_DISABLED 0x0
|
#define MULTI_CHIP_MODE_ENABLED 0x1
|
|
// Remote chip address offset (4TB per chip)
|
#define SGI_REMOTE_CHIP_MEM_OFFSET(n) ((1ULL << 42) * (n))
|
|
// Base address of the DRAM1 block in a remote chip
|
#define SYSTEM_MEMORY_BASE_REMOTE(ChipId) \
|
(SGI_REMOTE_CHIP_MEM_OFFSET (ChipId) + FixedPcdGet64 (PcdSystemMemoryBase))
|
|
// Base address of the DRAM2 block in a remote chip
|
#define DRAM_BLOCK2_BASE_REMOTE(ChipId) \
|
(SGI_REMOTE_CHIP_MEM_OFFSET (ChipId) + FixedPcdGet64 (PcdDramBlock2Base))
|
|
// ARM platform description data.
|
typedef struct {
|
UINTN PlatformId;
|
UINTN ConfigId;
|
UINTN MultiChipMode;
|
} SGI_PLATFORM_DESCRIPTOR;
|
|
// Arm SGI/RD Product IDs
|
typedef enum {
|
UnknownId = 0,
|
Sgi575,
|
RdN1Edge,
|
RdN1EdgeX2,
|
RdE1Edge,
|
RdV1,
|
RdV1Mc,
|
RdN2,
|
RdN2Cfg1
|
} ARM_RD_PRODUCT_ID;
|
|
// Arm ProductId look-up table
|
typedef struct {
|
UINTN ProductId;
|
UINTN PlatformId;
|
UINTN ConfigId;
|
UINTN MultiChipMode;
|
} SGI_PRODUCT_ID_LOOKUP;
|
|
/**
|
Derermine the product ID.
|
|
Determine the product ID by using the data in the Platform ID Descriptor HOB
|
to lookup for a matching product ID.
|
|
@retval Zero Failed identify platform.
|
@retval Others ARM_RD_PRODUCT_ID of the identified platform.
|
**/
|
UINT8 SgiGetProductId (VOID);
|
#endif // __SGI_PLATFORM_H__
|