On 2017年09月19日 22:54, Liam Girdwood wrote:
On Tue, 2017-09-19 at 15:47 +0800, Keyon Jie wrote:
We don't actually use layer 2 interrupt in baytrail, in the new layer 2 interrupt design, it will fallback to use the root arch interrupt.
This is not needed if you do the abstraction in platform.c instead of drivers.
But doing that will make the APIs quite different for different platforms , and then calling to these APIs(e.g. from dw-dma.c) will need many #ifdef macros, which may lead code to be in bad readability.
Thanks, ~Keyon
Signed-off-by: Keyon Jie yang.jie@linux.intel.com
src/platform/baytrail/platform.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/src/platform/baytrail/platform.c b/src/platform/baytrail/platform.c index b8c3e49..6726325 100644 --- a/src/platform/baytrail/platform.c +++ b/src/platform/baytrail/platform.c @@ -100,7 +100,7 @@ int platform_boot_complete(uint32_t boot_message) }
/* clear mask in PISR, bits are W1C in docs but some bits need preserved ?? */ -void platform_interrupt_clear(uint32_t irq, uint32_t mask) +void byt_interrupt_clear(uint32_t irq, uint32_t mask) { switch (irq) { case IRQ_NUM_EXT_DMAC0: @@ -123,21 +123,34 @@ void platform_interrupt_clear(uint32_t irq, uint32_t mask) }
/* TODO: expand this to 64 bit - should we just return mask of IRQ numbers */ -uint32_t platform_interrupt_get_enabled(void) +uint32_t byt_interrupt_get_enabled(void) { return shim_read(SHIM_PIMR); }
-void platform_interrupt_mask(uint32_t irq, uint32_t mask) +void byt_interrupt_mask(uint32_t irq) {
}
-void platform_interrupt_unmask(uint32_t irq, uint32_t mask) +void byt_interrupt_unmask(uint32_t irq) {
}
+static const struct plf_irq_ops byt_irq_ops = {
- .get_enabled = byt_interrupt_get_enabled,
- .int_clear = byt_interrupt_clear,
- .int_mask = byt_interrupt_mask,
- .int_unmask = byt_interrupt_unmask,
+};
+void byt_interrupt_init(void) +{
- plf_irq_ops = &byt_irq_ops;
+}
- static struct timer platform_ext_timer = { .id = TIMER3, .irq = IRQ_NUM_EXT_TIMER,
@@ -155,6 +168,8 @@ int platform_init(struct reef *reef) #error Undefined platform #endif
byt_interrupt_init();
trace_point(TRACE_BOOT_PLATFORM_MBOX);
/* clear mailbox for early trace and debug */