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
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 @@
 	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 @@
 			     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 @@
 	}
 	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 @@
 	}
 	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));
+}