]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'iks_for_rmk' of git://git.linaro.org/people/nico/linux into devel-stable
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 17 Sep 2013 14:13:38 +0000 (15:13 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 17 Sep 2013 14:14:07 +0000 (15:14 +0100)
Nicolas Pitre writes:

This is the first part of the patch series adding IKS (In-Kernel
Switcher) support for big.LITTLE system architectures.  This consists of
the core patches only.  Extra patches to come later will introduce
various optimizations and tracing support.

Those patches were posted on the list a while ago here:

   http://news.gmane.org/group/gmane.linux.ports.arm.kernel/thread=253942

1  2 
arch/arm/Kconfig
drivers/irqchip/irq-gic.c
include/linux/irqchip/arm-gic.h

diff --combined arch/arm/Kconfig
index 3f7714d8d2d216bf3bbd7b4a5b227ea982997554,cfcb0d8d6f851b865ecf65310d1d89e9cbfecdc0..b3135378ac393c9a3a2ab2cd1eed950ac57c68e6
@@@ -3,30 -3,29 +3,30 @@@ config AR
        default y
        select ARCH_BINFMT_ELF_RANDOMIZE_PIE
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
 -      select ARCH_HAVE_CUSTOM_GPIO_H
        select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
 +      select ARCH_HAVE_CUSTOM_GPIO_H
        select ARCH_WANT_IPC_PARSE_VERSION
        select BUILDTIME_EXTABLE_SORT if MMU
 +      select CLONE_BACKWARDS
        select CPU_PM if (SUSPEND || CPU_IDLE)
        select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU
        select GENERIC_ATOMIC64 if (CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI)
        select GENERIC_CLOCKEVENTS_BROADCAST if SMP
 +      select GENERIC_IDLE_POLL_SETUP
        select GENERIC_IRQ_PROBE
        select GENERIC_IRQ_SHOW
        select GENERIC_PCI_IOMAP
        select GENERIC_SCHED_CLOCK
        select GENERIC_SMP_IDLE_THREAD
 -      select GENERIC_IDLE_POLL_SETUP
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
        select HARDIRQS_SW_RESEND
 -      select HAVE_AOUT
        select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
        select HAVE_ARCH_KGDB
        select HAVE_ARCH_SECCOMP_FILTER
        select HAVE_ARCH_TRACEHOOK
        select HAVE_BPF_JIT
 +      select HAVE_CONTEXT_TRACKING
        select HAVE_C_RECORDMCOUNT
        select HAVE_DEBUG_KMEMLEAK
        select HAVE_DMA_API_DEBUG
@@@ -37,6 -36,7 +37,6 @@@
        select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
        select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
        select HAVE_GENERIC_DMA_COHERENT
 -      select HAVE_GENERIC_HARDIRQS
        select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
        select HAVE_IDE if PCI || ISA || PCMCIA
        select HAVE_IRQ_TIME_ACCOUNTING
        select HAVE_KPROBES if !XIP_KERNEL
        select HAVE_KRETPROBES if (HAVE_KPROBES)
        select HAVE_MEMBLOCK
 +      select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND
        select HAVE_OPROFILE if (HAVE_PERF_EVENTS)
        select HAVE_PERF_EVENTS
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_SYSCALL_TRACEPOINTS
        select HAVE_UID16
 +      select IRQ_FORCED_THREADING
        select KTIME_SCALAR
 +      select MODULES_USE_ELF_REL
 +      select OLD_SIGACTION
 +      select OLD_SIGSUSPEND3
        select PERF_USE_VMALLOC
        select RTC_LIB
        select SYS_SUPPORTS_APM_EMULATION
 -      select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND
 -      select MODULES_USE_ELF_REL
 -      select CLONE_BACKWARDS
 -      select OLD_SIGSUSPEND3
 -      select OLD_SIGACTION
 -      select HAVE_CONTEXT_TRACKING
 +      # Above selects are sorted alphabetically; please add new ones
 +      # according to that.  Thanks.
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -219,8 -218,7 +219,8 @@@ config VECTORS_BAS
        default DRAM_BASE if REMAP_VECTORS_TO_RAM
        default 0x00000000
        help
 -        The base address of exception vectors.
 +        The base address of exception vectors.  This must be two pages
 +        in size.
  
  config ARM_PATCH_PHYS_VIRT
        bool "Patch physical to virtual translations at runtime" if EMBEDDED
@@@ -387,8 -385,8 +387,8 @@@ config ARCH_GEMIN
        bool "Cortina Systems Gemini"
        select ARCH_REQUIRE_GPIOLIB
        select ARCH_USES_GETTIMEOFFSET
 -      select NEED_MACH_GPIO_H
        select CPU_FA526
 +      select NEED_MACH_GPIO_H
        help
          Support for the Cortina Systems Gemini family SoCs
  
@@@ -443,6 -441,7 +443,6 @@@ config ARCH_NET
  config ARCH_IOP13XX
        bool "IOP13xx-based"
        depends on MMU
 -      select ARCH_SUPPORTS_MSI
        select CPU_XSC3
        select NEED_MACH_MEMORY_H
        select NEED_RET_TO_USER
@@@ -488,8 -487,8 +488,8 @@@ config ARCH_IXP4X
        select GENERIC_CLOCKEVENTS
        select MIGHT_HAVE_PCI
        select NEED_MACH_IO_H
 -      select USB_EHCI_BIG_ENDIAN_MMIO
        select USB_EHCI_BIG_ENDIAN_DESC
 +      select USB_EHCI_BIG_ENDIAN_MMIO
        help
          Support for Intel's IXP4XX (XScale) family of processors.
  
@@@ -499,11 -498,11 +499,11 @@@ config ARCH_DOV
        select CPU_PJ4
        select GENERIC_CLOCKEVENTS
        select MIGHT_HAVE_PCI
 +      select MVEBU_MBUS
        select PINCTRL
        select PINCTRL_DOVE
        select PLAT_ORION_LEGACY
        select USB_ARCH_HAS_EHCI
 -      select MVEBU_MBUS
        help
          Support for the Marvell Dove SoC 88AP510
  
@@@ -513,12 -512,12 +513,12 @@@ config ARCH_KIRKWOO
        select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
 +      select MVEBU_MBUS
        select PCI
        select PCI_QUIRKS
        select PINCTRL
        select PINCTRL_KIRKWOOD
        select PLAT_ORION_LEGACY
 -      select MVEBU_MBUS
        help
          Support for the following Marvell Kirkwood series SoCs:
          88F6180, 88F6192 and 88F6281.
@@@ -528,9 -527,9 +528,9 @@@ config ARCH_MV78XX
        select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
 +      select MVEBU_MBUS
        select PCI
        select PLAT_ORION_LEGACY
 -      select MVEBU_MBUS
        help
          Support for the following Marvell MV78xx0 series SoCs:
          MV781x0, MV782x0.
@@@ -541,9 -540,9 +541,9 @@@ config ARCH_ORION5
        select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
 +      select MVEBU_MBUS
        select PCI
        select PLAT_ORION_LEGACY
 -      select MVEBU_MBUS
        help
          Support for the following Marvell Orion 5x series SoCs:
          Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
@@@ -558,7 -557,6 +558,7 @@@ config ARCH_MM
        select GENERIC_CLOCKEVENTS
        select GPIO_PXA
        select IRQ_DOMAIN
 +      select MULTI_IRQ_HANDLER
        select NEED_MACH_GPIO_H
        select PINCTRL
        select PLAT_PXA
@@@ -632,7 -630,6 +632,7 @@@ config ARCH_MS
        bool "Qualcomm MSM"
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 +      select CLKSRC_OF if OF
        select COMMON_CLK
        select GENERIC_CLOCKEVENTS
        help
@@@ -648,7 -645,7 +648,7 @@@ config ARCH_SHMOBIL
        select CLKDEV_LOOKUP
        select GENERIC_CLOCKEVENTS
        select HAVE_ARM_SCU if SMP
 -      select HAVE_ARM_TWD if LOCAL_TIMERS
 +      select HAVE_ARM_TWD if SMP
        select HAVE_CLK
        select HAVE_MACH_CLKDEV
        select HAVE_SMP
@@@ -703,7 -700,7 +703,7 @@@ config ARCH_S3C24X
        select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 +      select CLKSRC_SAMSUNG_PWM
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
        select HAVE_CLK
@@@ -726,7 -723,7 +726,7 @@@ config ARCH_S3C64X
        select ARCH_REQUIRE_GPIOLIB
        select ARM_VIC
        select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 +      select CLKSRC_SAMSUNG_PWM
        select CPU_V6
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
        select SAMSUNG_ATAGS
        select SAMSUNG_CLKSRC
        select SAMSUNG_GPIOLIB_4BIT
 -      select SAMSUNG_IRQ_VIC_TIMER
        select SAMSUNG_WDT_RESET
        select USB_ARCH_HAS_OHCI
        help
  config ARCH_S5P64X0
        bool "Samsung S5P6440 S5P6450"
        select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 +      select CLKSRC_SAMSUNG_PWM
        select CPU_V6
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
 -      select SAMSUNG_WDT_RESET
        select SAMSUNG_ATAGS
 +      select SAMSUNG_WDT_RESET
        help
          Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
          SMDK6450.
@@@ -769,7 -767,7 +769,7 @@@ config ARCH_S5PC10
        bool "Samsung S5PC100"
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 +      select CLKSRC_SAMSUNG_PWM
        select CPU_V7
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
 -      select SAMSUNG_WDT_RESET
        select SAMSUNG_ATAGS
 +      select SAMSUNG_WDT_RESET
        help
          Samsung S5PC100 series based systems
  
@@@ -789,7 -787,7 +789,7 @@@ config ARCH_S5PV21
        select ARCH_HAS_HOLES_MEMORYMODEL
        select ARCH_SPARSEMEM_ENABLE
        select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 +      select CLKSRC_SAMSUNG_PWM
        select CPU_V7
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
@@@ -1374,15 -1372,6 +1374,15 @@@ config ARM_ERRATA_79818
          which sends an IPI to the CPUs that are running the same ASID
          as the one being invalidated.
  
 +config ARM_ERRATA_773022
 +      bool "ARM errata: incorrect instructions may be executed from loop buffer"
 +      depends on CPU_V7
 +      help
 +        This option enables the workaround for the 773022 Cortex-A15
 +        (up to r0p4) erratum. In certain rare sequences of code, the
 +        loop buffer may deliver incorrect instructions. This
 +        workaround disables the loop buffer to avoid the erratum.
 +
  endmenu
  
  source "arch/arm/common/Kconfig"
@@@ -1549,6 -1538,32 +1549,32 @@@ config MCP
          for (multi-)cluster based systems, such as big.LITTLE based
          systems.
  
+ config BIG_LITTLE
+       bool "big.LITTLE support (Experimental)"
+       depends on CPU_V7 && SMP
+       select MCPM
+       help
+         This option enables support selections for the big.LITTLE
+         system architecture.
+ config BL_SWITCHER
+       bool "big.LITTLE switcher support"
+       depends on BIG_LITTLE && MCPM && HOTPLUG_CPU
+       select CPU_PM
+       select ARM_CPU_SUSPEND
+       help
+         The big.LITTLE "switcher" provides the core functionality to
+         transparently handle transition between a cluster of A15's
+         and a cluster of A7's in a big.LITTLE system.
+ config BL_SWITCHER_DUMMY_IF
+       tristate "Simple big.LITTLE switcher user interface"
+       depends on BL_SWITCHER && DEBUG_KERNEL
+       help
+         This is a simple and dummy char dev interface to control
+         the big.LITTLE switcher core code.  It is meant for
+         debugging purposes only.
  choice
        prompt "Memory split"
        default VMSPLIT_3G
@@@ -1595,13 -1610,23 +1621,13 @@@ config ARM_PSC
          0022A ("Power State Coordination Interface System Software on
          ARM processors").
  
 -config LOCAL_TIMERS
 -      bool "Use local timer interrupts"
 -      depends on SMP
 -      default y
 -      help
 -        Enable support for local timers on SMP platforms, rather then the
 -        legacy IPI broadcast method.  Local timers allows the system
 -        accounting to be spread across the timer interval, preventing a
 -        "thundering herd" at every timer tick.
 -
  # The GPIO number here must be sorted by descending number. In case of
  # a multiplatform kernel, we just want the highest value required by the
  # selected platforms.
  config ARCH_NR_GPIO
        int
        default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
 -      default 512 if ARCH_EXYNOS || ARCH_KEYSTONE || SOC_OMAP5
 +      default 512 if ARCH_EXYNOS || ARCH_KEYSTONE || SOC_OMAP5 || SOC_DRA7XX
        default 392 if ARCH_U8500
        default 352 if ARCH_VT8500
        default 288 if ARCH_SUNXI
  
  source kernel/Kconfig.preempt
  
 -config HZ
 +config HZ_FIXED
        int
        default 200 if ARCH_EBSA110 || ARCH_S3C24XX || ARCH_S5P64X0 || \
                ARCH_S5PV210 || ARCH_EXYNOS4
        default AT91_TIMER_HZ if ARCH_AT91
        default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
 -      default 100
 +      default 0
 +
 +choice
 +      depends on HZ_FIXED = 0
 +      prompt "Timer frequency"
 +
 +config HZ_100
 +      bool "100 Hz"
 +
 +config HZ_200
 +      bool "200 Hz"
 +
 +config HZ_250
 +      bool "250 Hz"
 +
 +config HZ_300
 +      bool "300 Hz"
 +
 +config HZ_500
 +      bool "500 Hz"
 +
 +config HZ_1000
 +      bool "1000 Hz"
 +
 +endchoice
 +
 +config HZ
 +      int
 +      default HZ_FIXED if HZ_FIXED != 0
 +      default 100 if HZ_100
 +      default 200 if HZ_200
 +      default 250 if HZ_250
 +      default 300 if HZ_300
 +      default 500 if HZ_500
 +      default 1000
 +
 +config SCHED_HRTICK
 +      def_bool HIGH_RES_TIMERS
  
  config SCHED_HRTICK
        def_bool HIGH_RES_TIMERS
@@@ -1794,9 -1782,6 +1820,9 @@@ config HAVE_ARCH_TRANSPARENT_HUGEPAG
         def_bool y
         depends on ARM_LPAE
  
 +config ARCH_WANT_GENERAL_HUGETLB
 +      def_bool y
 +
  source "mm/Kconfig"
  
  config FORCE_MAX_ZONEORDER
@@@ -2105,7 -2090,8 +2131,7 @@@ config KEXE
  
          It is an ongoing process to be certain the hardware in a machine
          is properly shutdown, so do not be surprised if this code does not
 -        initially work for you.  It may help to enable device hotplugging
 -        support.
 +        initially work for you.
  
  config ATAGS_PROC
        bool "Export atags in procfs"
@@@ -2215,13 -2201,6 +2241,13 @@@ config NEO
          Say Y to include support code for NEON, the ARMv7 Advanced SIMD
          Extension.
  
 +config KERNEL_MODE_NEON
 +      bool "Support for NEON in kernel mode"
 +      default n
 +      depends on NEON
 +      help
 +        Say Y to include support for NEON in kernel mode.
 +
  endmenu
  
  menu "Userspace binary formats"
@@@ -2246,7 -2225,7 +2272,7 @@@ source "kernel/power/Kconfig
  
  config ARCH_SUSPEND_POSSIBLE
        depends on !ARCH_S5PC100
 -      depends on CPU_ARM920T || CPU_ARM926T || CPU_SA1100 || \
 +      depends on CPU_ARM920T || CPU_ARM926T || CPU_FEROCEON || CPU_SA1100 || \
                CPU_V6 || CPU_V6K || CPU_V7 || CPU_XSC3 || CPU_XSCALE || CPU_MOHAWK
        def_bool y
  
index d0e948084eaf7e2211c323f5976ecc08e5681136,3862cb54c714f9f113eaa1925678894790c1be41..6365b59181eee8371120851da0d4dd6099213ae2
@@@ -253,10 -253,9 +253,9 @@@ static int gic_set_affinity(struct irq_
        if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
                return -EINVAL;
  
+       raw_spin_lock(&irq_controller_lock);
        mask = 0xff << shift;
        bit = gic_cpu_map[cpu] << shift;
-       raw_spin_lock(&irq_controller_lock);
        val = readl_relaxed(reg) & ~mask;
        writel_relaxed(val | bit, reg);
        raw_spin_unlock(&irq_controller_lock);
@@@ -453,12 -452,6 +452,12 @@@ static void gic_cpu_init(struct gic_chi
        writel_relaxed(1, base + GIC_CPU_CTRL);
  }
  
 +void gic_cpu_if_down(void)
 +{
 +      void __iomem *cpu_base = gic_data_cpu_base(&gic_data[0]);
 +      writel_relaxed(0, cpu_base + GIC_CPU_CTRL);
 +}
 +
  #ifdef CONFIG_CPU_PM
  /*
   * Saves the GIC distributor registers during suspend or idle.  Must be called
@@@ -652,7 -645,9 +651,9 @@@ static void __init gic_pm_init(struct g
  void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
  {
        int cpu;
-       unsigned long map = 0;
+       unsigned long flags, map = 0;
+       raw_spin_lock_irqsave(&irq_controller_lock, flags);
  
        /* Convert our logical CPU mask into a physical one. */
        for_each_cpu(cpu, mask)
  
        /* this always happens on GIC0 */
        writel_relaxed(map << 16 | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
+       raw_spin_unlock_irqrestore(&irq_controller_lock, flags);
+ }
+ #endif
+ #ifdef CONFIG_BL_SWITCHER
+ /*
+  * gic_get_cpu_id - get the CPU interface ID for the specified CPU
+  *
+  * @cpu: the logical CPU number to get the GIC ID for.
+  *
+  * Return the CPU interface ID for the given logical CPU number,
+  * or -1 if the CPU number is too large or the interface ID is
+  * unknown (more than one bit set).
+  */
+ int gic_get_cpu_id(unsigned int cpu)
+ {
+       unsigned int cpu_bit;
+       if (cpu >= NR_GIC_CPU_IF)
+               return -1;
+       cpu_bit = gic_cpu_map[cpu];
+       if (cpu_bit & (cpu_bit - 1))
+               return -1;
+       return __ffs(cpu_bit);
+ }
+ /*
+  * gic_migrate_target - migrate IRQs to another CPU interface
+  *
+  * @new_cpu_id: the CPU target ID to migrate IRQs to
+  *
+  * Migrate all peripheral interrupts with a target matching the current CPU
+  * to the interface corresponding to @new_cpu_id.  The CPU interface mapping
+  * is also updated.  Targets to other CPU interfaces are unchanged.
+  * This must be called with IRQs locally disabled.
+  */
+ void gic_migrate_target(unsigned int new_cpu_id)
+ {
+       unsigned int cur_cpu_id, gic_irqs, gic_nr = 0;
+       void __iomem *dist_base;
+       int i, ror_val, cpu = smp_processor_id();
+       u32 val, cur_target_mask, active_mask;
+       if (gic_nr >= MAX_GIC_NR)
+               BUG();
+       dist_base = gic_data_dist_base(&gic_data[gic_nr]);
+       if (!dist_base)
+               return;
+       gic_irqs = gic_data[gic_nr].gic_irqs;
+       cur_cpu_id = __ffs(gic_cpu_map[cpu]);
+       cur_target_mask = 0x01010101 << cur_cpu_id;
+       ror_val = (cur_cpu_id - new_cpu_id) & 31;
+       raw_spin_lock(&irq_controller_lock);
+       /* Update the target interface for this logical CPU */
+       gic_cpu_map[cpu] = 1 << new_cpu_id;
+       /*
+        * Find all the peripheral interrupts targetting the current
+        * CPU interface and migrate them to the new CPU interface.
+        * We skip DIST_TARGET 0 to 7 as they are read-only.
+        */
+       for (i = 8; i < DIV_ROUND_UP(gic_irqs, 4); i++) {
+               val = readl_relaxed(dist_base + GIC_DIST_TARGET + i * 4);
+               active_mask = val & cur_target_mask;
+               if (active_mask) {
+                       val &= ~active_mask;
+                       val |= ror32(active_mask, ror_val);
+                       writel_relaxed(val, dist_base + GIC_DIST_TARGET + i*4);
+               }
+       }
+       raw_spin_unlock(&irq_controller_lock);
+       /*
+        * Now let's migrate and clear any potential SGIs that might be
+        * pending for us (cur_cpu_id).  Since GIC_DIST_SGI_PENDING_SET
+        * is a banked register, we can only forward the SGI using
+        * GIC_DIST_SOFTINT.  The original SGI source is lost but Linux
+        * doesn't use that information anyway.
+        *
+        * For the same reason we do not adjust SGI source information
+        * for previously sent SGIs by us to other CPUs either.
+        */
+       for (i = 0; i < 16; i += 4) {
+               int j;
+               val = readl_relaxed(dist_base + GIC_DIST_SGI_PENDING_SET + i);
+               if (!val)
+                       continue;
+               writel_relaxed(val, dist_base + GIC_DIST_SGI_PENDING_CLEAR + i);
+               for (j = i; j < i + 4; j++) {
+                       if (val & 0xff)
+                               writel_relaxed((1 << (new_cpu_id + 16)) | j,
+                                               dist_base + GIC_DIST_SOFTINT);
+                       val >>= 8;
+               }
+       }
  }
  #endif
  
index 0e5d9ecdb2b672d901b47f184a4b720e604317e2,2d7d47e8dfaffc336976e52d4190731bbb2eb166..46544e381bf9b4d83ace1bb7b47614daaa9c1283
@@@ -31,6 -31,8 +31,8 @@@
  #define GIC_DIST_TARGET                       0x800
  #define GIC_DIST_CONFIG                       0xc00
  #define GIC_DIST_SOFTINT              0xf00
+ #define GIC_DIST_SGI_PENDING_CLEAR    0xf10
+ #define GIC_DIST_SGI_PENDING_SET      0xf20
  
  #define GICH_HCR                      0x0
  #define GICH_VTR                      0x4
@@@ -66,7 -68,6 +68,7 @@@ extern struct irq_chip gic_arch_extn
  void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *,
                    u32 offset, struct device_node *);
  void gic_cascade_irq(unsigned int gic_nr, unsigned int irq);
 +void gic_cpu_if_down(void);
  
  static inline void gic_init(unsigned int nr, int start,
                            void __iomem *dist , void __iomem *cpu)
@@@ -74,6 -75,9 +76,9 @@@
        gic_init_bases(nr, start, dist, cpu, 0, NULL);
  }
  
+ int gic_get_cpu_id(unsigned int cpu);
+ void gic_migrate_target(unsigned int new_cpu_id);
  #endif /* __ASSEMBLY */
  
  #endif