[Sound-open-firmware] [PATCH 3/4] byt: adapt to the new layer 2 interrupt design
Keyon Jie
yang.jie at linux.intel.com
Wed Sep 20 11:47:54 CEST 2017
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 at 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 */
>
>
>
More information about the Sound-open-firmware
mailing list