GICv3: Introduce power management APIs for Redistributor
authorJeenu Viswambharan <jeenu.viswambharan@arm.com>
Fri, 9 Dec 2016 11:03:15 +0000 (11:03 +0000)
committerJeenu Viswambharan <jeenu.viswambharan@arm.com>
Thu, 15 Dec 2016 14:08:26 +0000 (14:08 +0000)
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 <jeenu.viswambharan@arm.com>
drivers/arm/gic/v3/gicv3_main.c
include/drivers/arm/gicv3.h

index ac433725f71026400adb5df45a9750a5fbd78f78..5abaa1ce36914ca818d6dd38e37f87e5dbbd6c3e 100644 (file)
 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.
index b7ad7785bdee74e2621c76592ad2b85c0db8b5f8..0f6034c0bd7b7e621d7731aeb184689dd3e8be07 100644 (file)
@@ -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);