Refactor fvp_config into common platform header
Changed the fvp_config array in fvp_common.c into a struct and
moved into a new optional common platform header,
include/plat/common/plat_config.h. Removed the config definitions
in fvp_def.h and updated all references to the platform config.
This makes the interface to the platform config cleaner and uses
a little less RAM.
Fixes ARM-software/tf-issues#180
Change-Id: I58dd7b3c150f24f7ee230a26fd57c827853ba803
diff --git a/plat/fvp/fvp_gic.c b/plat/fvp/fvp_gic.c
index a48b29b..77a8bef 100644
--- a/plat/fvp/fvp_gic.c
+++ b/plat/fvp/fvp_gic.c
@@ -36,6 +36,7 @@
#include <gic_v3.h>
#include <interrupt_mgmt.h>
#include <platform.h>
+#include <plat_config.h>
#include <stdint.h>
#include "fvp_def.h"
#include "fvp_private.h"
@@ -275,13 +276,8 @@
void gic_setup(void)
{
- unsigned int gicd_base, gicc_base;
-
- gicd_base = fvp_get_cfgvar(CONFIG_GICD_ADDR);
- gicc_base = fvp_get_cfgvar(CONFIG_GICC_ADDR);
-
- gic_cpuif_setup(gicc_base);
- gic_distif_setup(gicd_base);
+ gic_cpuif_setup(get_plat_config()->gicc_base);
+ gic_distif_setup(get_plat_config()->gicd_base);
}
/*******************************************************************************
@@ -298,7 +294,7 @@
******************************************************************************/
uint32_t plat_interrupt_type_to_line(uint32_t type, uint32_t security_state)
{
- uint32_t gicc_base = fvp_get_cfgvar(CONFIG_GICC_ADDR);
+ uint32_t gicc_base = get_plat_config()->gicc_base;
assert(type == INTR_TYPE_S_EL1 ||
type == INTR_TYPE_EL3 ||
@@ -326,10 +322,9 @@
******************************************************************************/
uint32_t plat_ic_get_pending_interrupt_type(void)
{
- uint32_t id, gicc_base;
+ uint32_t id;
- gicc_base = fvp_get_cfgvar(CONFIG_GICC_ADDR);
- id = gicc_read_hppir(gicc_base);
+ id = gicc_read_hppir(get_plat_config()->gicc_base);
/* Assume that all secure interrupts are S-EL1 interrupts */
if (id < 1022)
@@ -350,7 +345,7 @@
{
uint32_t id, gicc_base;
- gicc_base = fvp_get_cfgvar(CONFIG_GICC_ADDR);
+ gicc_base = get_plat_config()->gicc_base;
id = gicc_read_hppir(gicc_base);
if (id < 1022)
@@ -372,7 +367,7 @@
******************************************************************************/
uint32_t plat_ic_acknowledge_interrupt(void)
{
- return gicc_read_IAR(fvp_get_cfgvar(CONFIG_GICC_ADDR));
+ return gicc_read_IAR(get_plat_config()->gicc_base);
}
/*******************************************************************************
@@ -381,7 +376,7 @@
******************************************************************************/
void plat_ic_end_of_interrupt(uint32_t id)
{
- gicc_write_EOIR(fvp_get_cfgvar(CONFIG_GICC_ADDR), id);
+ gicc_write_EOIR(get_plat_config()->gicc_base, id);
return;
}
@@ -394,7 +389,7 @@
{
uint32_t group;
- group = gicd_get_igroupr(fvp_get_cfgvar(CONFIG_GICD_ADDR), id);
+ group = gicd_get_igroupr(get_plat_config()->gicd_base, id);
/* Assume that all secure interrupts are S-EL1 interrupts */
if (group == GRP0)