|
@@ -481,15 +481,19 @@ out:
|
|
return tlist;
|
|
return tlist;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#define MPIDR_TO_SGI_AFFINITY(cluster_id, level) \
|
|
|
|
+ (MPIDR_AFFINITY_LEVEL(cluster_id, level) \
|
|
|
|
+ << ICC_SGI1R_AFFINITY_## level ##_SHIFT)
|
|
|
|
+
|
|
static void gic_send_sgi(u64 cluster_id, u16 tlist, unsigned int irq)
|
|
static void gic_send_sgi(u64 cluster_id, u16 tlist, unsigned int irq)
|
|
{
|
|
{
|
|
u64 val;
|
|
u64 val;
|
|
|
|
|
|
- val = (MPIDR_AFFINITY_LEVEL(cluster_id, 3) << 48 |
|
|
|
|
- MPIDR_AFFINITY_LEVEL(cluster_id, 2) << 32 |
|
|
|
|
- irq << 24 |
|
|
|
|
- MPIDR_AFFINITY_LEVEL(cluster_id, 1) << 16 |
|
|
|
|
- tlist);
|
|
|
|
|
|
+ val = (MPIDR_TO_SGI_AFFINITY(cluster_id, 3) |
|
|
|
|
+ MPIDR_TO_SGI_AFFINITY(cluster_id, 2) |
|
|
|
|
+ irq << ICC_SGI1R_SGI_ID_SHIFT |
|
|
|
|
+ MPIDR_TO_SGI_AFFINITY(cluster_id, 1) |
|
|
|
|
+ tlist << ICC_SGI1R_TARGET_LIST_SHIFT);
|
|
|
|
|
|
pr_debug("CPU%d: ICC_SGI1R_EL1 %llx\n", smp_processor_id(), val);
|
|
pr_debug("CPU%d: ICC_SGI1R_EL1 %llx\n", smp_processor_id(), val);
|
|
gic_write_sgi1r(val);
|
|
gic_write_sgi1r(val);
|