diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2010-06-25 16:41:11 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-07-06 13:34:01 -0400 |
commit | fb702b942bf638baa6cbbbda9f76794db62921ef (patch) | |
tree | c065b0ab61cbb80b6209c725836a6864624b3c46 /arch/tile/include/asm/smp.h | |
parent | de5d9bf6541736dc7ad264d2b5cc99bc1b2ad958 (diff) |
arch/tile: Enable more sophisticated IRQ model for 32-bit chips.
This model is based on the on-chip interrupt model used by the
TILE-Gx next-generation hardware, and interacts much more cleanly
with the Linux generic IRQ layer.
The change includes modifications to the Tilera hypervisor, which
are reflected in the hypervisor headers in arch/tile/include/arch/.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/tile/include/asm/smp.h')
-rw-r--r-- | arch/tile/include/asm/smp.h | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/arch/tile/include/asm/smp.h b/arch/tile/include/asm/smp.h index da24858a7392..532124ae4b12 100644 --- a/arch/tile/include/asm/smp.h +++ b/arch/tile/include/asm/smp.h | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <asm/processor.h> | 20 | #include <asm/processor.h> |
21 | #include <linux/cpumask.h> | 21 | #include <linux/cpumask.h> |
22 | #include <linux/irqreturn.h> | 22 | #include <linux/irqreturn.h> |
23 | #include <hv/hypervisor.h> | ||
23 | 24 | ||
24 | /* Set up this tile to support receiving hypervisor messages */ | 25 | /* Set up this tile to support receiving hypervisor messages */ |
25 | void init_messaging(void); | 26 | void init_messaging(void); |
@@ -39,9 +40,6 @@ void send_IPI_single(int dest, int tag); | |||
39 | /* Process an IPI message */ | 40 | /* Process an IPI message */ |
40 | void evaluate_message(int tag); | 41 | void evaluate_message(int tag); |
41 | 42 | ||
42 | /* Process an IRQ_RESCHEDULE IPI. */ | ||
43 | irqreturn_t handle_reschedule_ipi(int irq, void *token); | ||
44 | |||
45 | /* Boot a secondary cpu */ | 43 | /* Boot a secondary cpu */ |
46 | void online_secondary(void); | 44 | void online_secondary(void); |
47 | 45 | ||
@@ -56,6 +54,20 @@ extern HV_Topology smp_topology; | |||
56 | #define smp_height (smp_topology.height) | 54 | #define smp_height (smp_topology.height) |
57 | #define smp_width (smp_topology.width) | 55 | #define smp_width (smp_topology.width) |
58 | 56 | ||
57 | /* Convenience functions for converting cpu <-> coords. */ | ||
58 | static inline int cpu_x(int cpu) | ||
59 | { | ||
60 | return cpu % smp_width; | ||
61 | } | ||
62 | static inline int cpu_y(int cpu) | ||
63 | { | ||
64 | return cpu / smp_width; | ||
65 | } | ||
66 | static inline int xy_to_cpu(int x, int y) | ||
67 | { | ||
68 | return y * smp_width + x; | ||
69 | } | ||
70 | |||
59 | /* Hypervisor message tags sent via the tile send_IPI*() routines. */ | 71 | /* Hypervisor message tags sent via the tile send_IPI*() routines. */ |
60 | #define MSG_TAG_START_CPU 1 | 72 | #define MSG_TAG_START_CPU 1 |
61 | #define MSG_TAG_STOP_CPU 2 | 73 | #define MSG_TAG_STOP_CPU 2 |
@@ -85,6 +97,9 @@ void print_disabled_cpus(void); | |||
85 | #define smp_master_cpu 0 | 97 | #define smp_master_cpu 0 |
86 | #define smp_height 1 | 98 | #define smp_height 1 |
87 | #define smp_width 1 | 99 | #define smp_width 1 |
100 | #define cpu_x(cpu) 0 | ||
101 | #define cpu_y(cpu) 0 | ||
102 | #define xy_to_cpu(x, y) 0 | ||
88 | 103 | ||
89 | #endif /* !CONFIG_SMP */ | 104 | #endif /* !CONFIG_SMP */ |
90 | 105 | ||
@@ -123,4 +138,10 @@ static inline int __cpulist_parse_crop(const char *buf, struct cpumask *dstp, | |||
123 | return bitmap_parselist_crop(buf, cpumask_bits(dstp), nbits); | 138 | return bitmap_parselist_crop(buf, cpumask_bits(dstp), nbits); |
124 | } | 139 | } |
125 | 140 | ||
141 | /* Initialize the IPI subsystem. */ | ||
142 | void ipi_init(void); | ||
143 | |||
144 | /* Function for start-cpu message to cause us to jump to. */ | ||
145 | extern unsigned long start_cpu_function_addr; | ||
146 | |||
126 | #endif /* _ASM_TILE_SMP_H */ | 147 | #endif /* _ASM_TILE_SMP_H */ |