Support for varying BOM/SCPI protocol base addresses in ARM platforms
authorVikram Kanigiri <vikram.kanigiri@arm.com>
Mon, 8 Feb 2016 16:29:30 +0000 (16:29 +0000)
committerVikram Kanigiri <vikram.kanigiri@arm.com>
Mon, 15 Feb 2016 11:00:57 +0000 (11:00 +0000)
Current code assumes `SCP_COM_SHARED_MEM_BASE` as the base address
for BOM/SCPI protocol between AP<->SCP on all CSS platforms. To
cater for future ARM platforms this is made platform specific.
Similarly, the bit shifts of `SCP_BOOT_CONFIG_ADDR` are also made
platform specific.

Change-Id: Ie8866c167abf0229a37b3c72576917f085c142e8

include/plat/arm/css/common/css_def.h
plat/arm/board/juno/include/platform_def.h
plat/arm/css/common/aarch64/css_helpers.S
plat/arm/css/common/css_scp_bootloader.c
plat/arm/css/common/css_scpi.c

index c900278b5c3fda32ff1f754608d5dd4de18c436d..79bb44c84bc8cd39d1f6b24675ca04dc0efc287d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * SCP <=> AP boot configuration
  *
  * The SCP/AP boot configuration is a 32-bit word located at a known offset from
- * the start of the Trusted SRAM. Part of this configuration is which CPU is the
- * primary, according to the shift and mask definitions below.
+ * the start of the Trusted SRAM.
  *
  * Note that the value stored at this address is only valid at boot time, before
  * the SCP_BL2 image is transferred to SCP.
  */
-#define SCP_BOOT_CFG_ADDR              (ARM_TRUSTED_SRAM_BASE + 0x80)
-#define PRIMARY_CPU_SHIFT              8
-#define PRIMARY_CPU_BIT_WIDTH          4
-
-/*
- * Base address of the first memory region used for communication between AP
- * and SCP. Used by the BOM and SCPI protocols.
- *
- * Note that this is located at the same address as SCP_BOOT_CFG_ADDR, which
- * means the SCP/AP configuration data gets overwritten when the AP initiates
- * communication with the SCP.
- */
-#define SCP_COM_SHARED_MEM_BASE                (ARM_TRUSTED_SRAM_BASE + 0x80)
+#define SCP_BOOT_CFG_ADDR              PLAT_CSS_SCP_COM_SHARED_MEM_BASE
 
 #define CSS_MAP_DEVICE                 MAP_REGION_FLAT(                \
                                                CSS_DEVICE_BASE,        \
index 924eb0ab7c6be9e6e8d836f9d13f12f5a89a560a..0cffbe827017e8f4dc9de2bfc16b59f3d405494e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
 #define PLAT_ARM_GICH_BASE             0x2c04f000
 #define PLAT_ARM_GICV_BASE             0x2c06f000
 
+/*
+ * Base address of the first memory region used for communication between AP
+ * and SCP. Used by the BOM and SCPI protocols.
+ *
+ * Note that this is located at the same address as SCP_BOOT_CFG_ADDR, which
+ * means the SCP/AP configuration data gets overwritten when the AP initiates
+ * communication with the SCP. The configuration data is expected to be a
+ * 32-bit word on all CSS platforms. On Juno, part of this configuration is
+ * which CPU is the primary, according to the shift and mask definitions below.
+ */
+#define PLAT_CSS_SCP_COM_SHARED_MEM_BASE       (ARM_TRUSTED_SRAM_BASE + 0x80)
+#define PLAT_CSS_PRIMARY_CPU_SHIFT             8
+#define PLAT_CSS_PRIMARY_CPU_BIT_WIDTH         4
+
 /*
  * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
  * terminology. On a GICv2 system or mode, the lists will be merged and treated
index 27476186d33a1c86991db59dca54cae0d047bf9d..0763a3ec2a104ad98fc4454a54362b05764c63af 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -117,7 +117,8 @@ func plat_is_my_cpu_primary
        bl      plat_my_core_pos
        ldr     x1, =SCP_BOOT_CFG_ADDR
        ldr     x1, [x1]
-       ubfx    x1, x1, #PRIMARY_CPU_SHIFT, #PRIMARY_CPU_BIT_WIDTH
+       ubfx    x1, x1, #PLAT_CSS_PRIMARY_CPU_SHIFT, \
+                       #PLAT_CSS_PRIMARY_CPU_BIT_WIDTH
        cmp     x0, x1
        cset    w0, eq
        ret     x9
index c01f42fbdf3777f4579c991db3d7efaa30aaff38..8bfaa87c7eabb91b626db2abe118d8e6244792fd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -60,7 +60,7 @@ typedef struct {
  * Unlike the SCPI protocol, the boot protocol uses the same memory region
  * for both AP -> SCP and SCP -> AP transfers; define the address of this...
  */
-#define BOM_SHARED_MEM         SCP_COM_SHARED_MEM_BASE
+#define BOM_SHARED_MEM         PLAT_CSS_SCP_COM_SHARED_MEM_BASE
 #define BOM_CMD_HEADER         ((bom_cmd_t *) BOM_SHARED_MEM)
 #define BOM_CMD_PAYLOAD                ((void *) (BOM_SHARED_MEM + sizeof(bom_cmd_t)))
 
index 0a4eafe0cb546bc7010557f07c766fb4db5eb92a..9e1f9738cb4a63b80bfc9bcd1130d43822218a79 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -37,8 +37,9 @@
 #include "css_mhu.h"
 #include "css_scpi.h"
 
-#define SCPI_SHARED_MEM_SCP_TO_AP      SCP_COM_SHARED_MEM_BASE
-#define SCPI_SHARED_MEM_AP_TO_SCP      (SCP_COM_SHARED_MEM_BASE + 0x100)
+#define SCPI_SHARED_MEM_SCP_TO_AP      PLAT_CSS_SCP_COM_SHARED_MEM_BASE
+#define SCPI_SHARED_MEM_AP_TO_SCP      (PLAT_CSS_SCP_COM_SHARED_MEM_BASE \
+                                                                + 0x100)
 
 #define SCPI_CMD_HEADER_AP_TO_SCP              \
        ((scpi_cmd_t *) SCPI_SHARED_MEM_AP_TO_SCP)