summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdmond Chung <edmondchung@google.com>2021-08-13 15:34:57 -0700
committerEdmond Chung <edmondchung@google.com>2021-08-16 02:49:42 +0000
commitac7a0109bb351cdd29ba4f698c8d46589e986980 (patch)
tree03925289a78901ac55879336bccbdcb579bde62c
parentab7cf4edc8cd86d802f5a525b1e7b50799697dde (diff)
downloadlwis-ac7a0109bb351cdd29ba4f698c8d46589e986980.tar.gz
Interrupt: Set default IRQ affinity
Ensure all the LWIS interrupts run on single core. By default, all interrupts will be triggered on core 2. Bug: 196058977 Test: GCA, CTS Signed-off-by: Edmond Chung <edmondchung@google.com> Change-Id: Idb7d47f91999d360e2bd333cacec0dc0a080b766
-rw-r--r--lwis_interrupt.c6
-rw-r--r--lwis_platform.h6
-rw-r--r--platform/gs101/lwis_platform_gs101.c6
-rw-r--r--platform/gs201/lwis_platform_gs201.c6
4 files changed, 24 insertions, 0 deletions
diff --git a/lwis_interrupt.c b/lwis_interrupt.c
index 8823afb..07df492 100644
--- a/lwis_interrupt.c
+++ b/lwis_interrupt.c
@@ -17,6 +17,7 @@
#include "lwis_device.h"
#include "lwis_event.h"
+#include "lwis_platform.h"
#include "lwis_transaction.h"
#include "lwis_util.h"
@@ -110,6 +111,11 @@ int lwis_interrupt_get(struct lwis_interrupt_list *list, int index, char *name,
request_irq(irq, lwis_interrupt_event_isr, IRQF_SHARED, list->irq[index].full_name,
&list->irq[index]);
+ if (lwis_plaform_set_default_irq_affinity(list->irq[index].irq) != 0) {
+ dev_warn(list->lwis_dev->dev, "Interrupt %s cannot set affinity.\n",
+ list->irq[index].full_name);
+ }
+
return 0;
}
diff --git a/lwis_platform.h b/lwis_platform.h
index c214b03..168cefd 100644
--- a/lwis_platform.h
+++ b/lwis_platform.h
@@ -51,4 +51,10 @@ int lwis_platform_update_bts(struct lwis_device *lwis_dev, unsigned int bw_kb_pe
unsigned int bw_kb_read, unsigned int bw_kb_write,
unsigned int bw_kb_rt);
+/*
+ * lwis_plaform_set_default_irq_affinity: handles platform-specific parts of
+ * setting default irq affinity.
+ */
+int lwis_plaform_set_default_irq_affinity(unsigned int irq);
+
#endif /* LWIS_PLATFORM_H_ */
diff --git a/platform/gs101/lwis_platform_gs101.c b/platform/gs101/lwis_platform_gs101.c
index 56f2f5b..8fde2b9 100644
--- a/platform/gs101/lwis_platform_gs101.c
+++ b/platform/gs101/lwis_platform_gs101.c
@@ -318,3 +318,9 @@ int lwis_platform_update_bts(struct lwis_device *lwis_dev, unsigned int bw_kb_pe
}
return ret;
}
+
+int lwis_plaform_set_default_irq_affinity(unsigned int irq)
+{
+ const int cpu = 0x2;
+ return irq_set_affinity_hint(irq, cpumask_of(cpu));
+}
diff --git a/platform/gs201/lwis_platform_gs201.c b/platform/gs201/lwis_platform_gs201.c
index 626d57e..de4d19d 100644
--- a/platform/gs201/lwis_platform_gs201.c
+++ b/platform/gs201/lwis_platform_gs201.c
@@ -315,3 +315,9 @@ int lwis_platform_update_bts(struct lwis_device *lwis_dev, unsigned int bw_kb_pe
}
return ret;
}
+
+int lwis_plaform_set_default_irq_affinity(unsigned int irq)
+{
+ const int cpu = 0x2;
+ return irq_set_affinity_hint(irq, cpumask_of(cpu));
+}