浏览代码

ARM: HYP/non-sec: Make variable gic_dist_addr as a local one

Defining variable gic_dist_addr as a globe one prevents some
functions, which use it, from being used before relocation
which is the case in the deep sleep resume process on Freescale
SoC platforms.
Besides, we can always get the GIC base address by calling
get_gicd_base_address() without referring gic_dist_addr.

Signed-off-by: Tang Yuantian <Yuantian.Tang@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
tang yuantian 10 年之前
父节点
当前提交
5699274373
共有 1 个文件被更改,包括 7 次插入2 次删除
  1. 7 2
      arch/arm/cpu/armv7/virt-v7.c

+ 7 - 2
arch/arm/cpu/armv7/virt-v7.c

@@ -15,8 +15,6 @@
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/secure.h>
 #include <asm/secure.h>
 
 
-unsigned long gic_dist_addr;
-
 static unsigned int read_id_pfr1(void)
 static unsigned int read_id_pfr1(void)
 {
 {
 	unsigned int reg;
 	unsigned int reg;
@@ -68,6 +66,12 @@ static void kick_secondary_cpus_gic(unsigned long gicdaddr)
 
 
 void __weak smp_kick_all_cpus(void)
 void __weak smp_kick_all_cpus(void)
 {
 {
+	unsigned long gic_dist_addr;
+
+	gic_dist_addr = get_gicd_base_address();
+	if (gic_dist_addr == -1)
+		return;
+
 	kick_secondary_cpus_gic(gic_dist_addr);
 	kick_secondary_cpus_gic(gic_dist_addr);
 }
 }
 
 
@@ -75,6 +79,7 @@ int armv7_init_nonsec(void)
 {
 {
 	unsigned int reg;
 	unsigned int reg;
 	unsigned itlinesnr, i;
 	unsigned itlinesnr, i;
+	unsigned long gic_dist_addr;
 
 
 	/* check whether the CPU supports the security extensions */
 	/* check whether the CPU supports the security extensions */
 	reg = read_id_pfr1();
 	reg = read_id_pfr1();