Commit d780699b authored by Jeenu Viswambharan's avatar Jeenu Viswambharan
Browse files

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: default avatarJeenu Viswambharan <jeenu.viswambharan@arm.com>
parent a4af0c2e
...@@ -40,6 +40,13 @@ ...@@ -40,6 +40,13 @@
static const gicv3_driver_data_t *driver_data; static const gicv3_driver_data_t *driver_data;
static unsigned int gicv2_compat; 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 * This function initialises the ARM GICv3 driver in EL3 with provided platform
* inputs. * inputs.
...@@ -188,6 +195,9 @@ void gicv3_rdistif_init(unsigned int proc_num) ...@@ -188,6 +195,9 @@ void gicv3_rdistif_init(unsigned int proc_num)
assert(IS_IN_EL3()); assert(IS_IN_EL3());
/* Power on redistributor */
gicv3_rdistif_on(proc_num);
gicr_base = driver_data->rdistif_base_addrs[proc_num]; gicr_base = driver_data->rdistif_base_addrs[proc_num];
/* Set the default attribute of all SGIs and PPIs */ /* Set the default attribute of all SGIs and PPIs */
...@@ -210,6 +220,19 @@ void gicv3_rdistif_init(unsigned int proc_num) ...@@ -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 * This function enables the GIC CPU interface of the calling CPU using only
* system register accesses. * system register accesses.
......
...@@ -259,6 +259,8 @@ typedef struct gicv3_driver_data { ...@@ -259,6 +259,8 @@ typedef struct gicv3_driver_data {
void gicv3_driver_init(const gicv3_driver_data_t *plat_driver_data); void gicv3_driver_init(const gicv3_driver_data_t *plat_driver_data);
void gicv3_distif_init(void); void gicv3_distif_init(void);
void gicv3_rdistif_init(unsigned int proc_num); 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_enable(unsigned int proc_num);
void gicv3_cpuif_disable(unsigned int proc_num); void gicv3_cpuif_disable(unsigned int proc_num);
unsigned int gicv3_get_pending_interrupt_type(void); unsigned int gicv3_get_pending_interrupt_type(void);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment