From 9e6e41d7b544cc45c783c523305146370915be5a Mon Sep 17 00:00:00 2001 From: Jeenu Viswambharan Date: Fri, 9 Dec 2016 11:03:15 +0000 Subject: GICv3: Introduce power management APIs for Redistributor Some GICv3 implementations have provision for power management operations at Redistributor level. This patch introduces and provides place-holders for Redistributor power management. The default implementations are empty stubs, but are weakly bound so as to enable implementation-specific drivers to override them. Change-Id: I4fec1358693d3603ca5dce242a2f7f0e730516d8 Signed-off-by: Jeenu Viswambharan Reviewed-on: http://vgitil04.il.marvell.com:8080/38155 Reviewed-by: Haim Boot Tested-by: Haim Boot (cherry picked from commit 3d3fb7dfabb67e2a893296b8188ae394d329763b) Reviewed-on: http://vgitil04.il.marvell.com:8080/38548 Reviewed-by: Kostya Porotchkin Tested-by: Kostya Porotchkin --- drivers/arm/gic/v3/gicv3_main.c | 23 +++++++++++++++++++++++ include/drivers/arm/gicv3.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/drivers/arm/gic/v3/gicv3_main.c b/drivers/arm/gic/v3/gicv3_main.c index ac433725..5abaa1ce 100644 --- a/drivers/arm/gic/v3/gicv3_main.c +++ b/drivers/arm/gic/v3/gicv3_main.c @@ -40,6 +40,13 @@ static const gicv3_driver_data_t *driver_data; static unsigned int gicv2_compat; +/* + * Redistributor power operations are weakly bound so that they can be + * overridden + */ +#pragma weak gicv3_rdistif_off +#pragma weak gicv3_rdistif_on + /******************************************************************************* * This function initialises the ARM GICv3 driver in EL3 with provided platform * inputs. @@ -188,6 +195,9 @@ void gicv3_rdistif_init(unsigned int proc_num) assert(IS_IN_EL3()); + /* Power on redistributor */ + gicv3_rdistif_on(proc_num); + gicr_base = driver_data->rdistif_base_addrs[proc_num]; /* Set the default attribute of all SGIs and PPIs */ @@ -210,6 +220,19 @@ void gicv3_rdistif_init(unsigned int proc_num) } } +/******************************************************************************* + * Functions to perform power operations on GIC Redistributor + ******************************************************************************/ +void gicv3_rdistif_off(unsigned int proc_num) +{ + return; +} + +void gicv3_rdistif_on(unsigned int proc_num) +{ + return; +} + /******************************************************************************* * This function enables the GIC CPU interface of the calling CPU using only * system register accesses. diff --git a/include/drivers/arm/gicv3.h b/include/drivers/arm/gicv3.h index b7ad7785..0f6034c0 100644 --- a/include/drivers/arm/gicv3.h +++ b/include/drivers/arm/gicv3.h @@ -259,6 +259,8 @@ typedef struct gicv3_driver_data { void gicv3_driver_init(const gicv3_driver_data_t *plat_driver_data); void gicv3_distif_init(void); void gicv3_rdistif_init(unsigned int proc_num); +void gicv3_rdistif_on(unsigned int proc_num); +void gicv3_rdistif_off(unsigned int proc_num); void gicv3_cpuif_enable(unsigned int proc_num); void gicv3_cpuif_disable(unsigned int proc_num); unsigned int gicv3_get_pending_interrupt_type(void); -- cgit