diff options
author | Edmond Chung <edmondchung@google.com> | 2021-08-13 15:34:57 -0700 |
---|---|---|
committer | Edmond Chung <edmondchung@google.com> | 2021-08-16 02:49:42 +0000 |
commit | ac7a0109bb351cdd29ba4f698c8d46589e986980 (patch) | |
tree | 03925289a78901ac55879336bccbdcb579bde62c | |
parent | ab7cf4edc8cd86d802f5a525b1e7b50799697dde (diff) | |
download | lwis-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.c | 6 | ||||
-rw-r--r-- | lwis_platform.h | 6 | ||||
-rw-r--r-- | platform/gs101/lwis_platform_gs101.c | 6 | ||||
-rw-r--r-- | platform/gs201/lwis_platform_gs201.c | 6 |
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)); +} |