MIPS INTRNG changes
Mori Hiroki
yamori813 at yahoo.co.jp
Thu Nov 16 00:15:12 UTC 2017
Hi
Work fine this patch.
I checked this.
Corega CG-WLCVR54AG AR5312
Nec WR1200 AR5315
Thanks
Hiroki Mori
----- Original Message -----
> From: Mori Hiroki <yamori813 at yahoo.co.jp>
> To: Landon J Fuller <landonf at freebsd.org>; "freebsd-mips at freebsd.org" <freebsd-mips at freebsd.org>
> Cc:
> Date: 2017/11/15, Wed 23:23
> Subject: Re: MIPS INTRNG changes
>
> Hi
>
> sys/mips/atheros/ar531x/ is non-FDT and INTERNG.
>
> I will check this patch on real cpu tomorrow.
>
> Hiroki Mori
>
>
> ----- Original Message -----
>> From: Landon J Fuller <landonf at freebsd.org>
>> To: freebsd-mips at freebsd.org
>> Cc:
>> Date: 2017/11/15, Wed 07:50
>> Subject: MIPS INTRNG changes
>>
>> Howdy -
>>
>> To support nested INTRNG interrupt controllers on non-FDT MIPS targets,
> I've
>> implemented a replacement for the cpu_establish_[hard|soft]intr()
> workaround
>> introduced in r305527 (D7692); I'll be commiting this in three days
> unless
>> anyone objects:
>>
>> https://reviews.freebsd.org/D12385
>>
>> Background:
>>
>> Since non-FDT INTRNG targets do not have an equivalent to
> OFW_BUS_MAP_INTR(),
>> it is necessary for the MIPS nexus driver to implicitly establish INTRNG
>> interrupt mappings on behalf of child devices.
>>
>> The workaround introduced in r305527 implements this as follows, on non-FDT
>> INTRNG MIPS targets:
>>
>> - mips/nexus.c assumes that all bus interrupt requests are for a MIPS
>> interrupt managed by mips/mips_pic.c
>> - Call mips_pic's cpu_create_intr_map() from nexus_activate_resource()
> to
>> allocate a new interrupt mapping on-demand.
>> - Call mips_pic's cpu_get_irq_resource() from nexus_setup_intr() to
> fetch a
>> shared IRQ struct resource for the MIPS interrupt.
>>
>> In addition to assuming that all IRQs are owned by mips_pic, on-demand IRQ
>> mapping in the BUS_ACTIVATE_RESOURCE() path produces some unexpected
> behavior:
>>
>> - Any child bus that uses bus_generic_rl_alloc_resource() or
>> resource_list_alloc()
>> to implement BUS_ALLOC_RESOURCE() will update the child device's
> resource
>> list entry to reference the newly mapped IRQ -- but only if the resource is
>> allocated with the RF_ACTIVE flag, resulting in BUS_ACTIVATE_RESOURCE()
> being
>> called from BUS_ALLOC_RESOURCE() before the resource_list_entry update is
>> performed.
>> - BUS_ACTIVATE_RESOURCE() is itself not resource_list-aware; if RF_ACTIVE
> is
>> not set during allocation, and bus_activate_resource() is instead called
>> directly, the child's resource list entry will _not_ updated to the
> newly
>> mapped IRQ.
>>
>> Since the resource_list_entry _may_ be updated to reference the IRQ
> mapping,
>> IRQs
>> mappings implicitly created in nexus_activate_resource() cannot be
> implicitly
>> unmapped in nexus_deactivate_resource() and must be leaked, as references
> to
>> the mapping may remain in a child's resource_list_entry.
>>
>> Rather than performing on-demand mapping during resource activation, my
> changes
>> preemptively produce (on non-FDT targets) a set of IRQ mappings for all
> MIPS
>> IRQs in nexus_attach(), using a fixed range of INTRNG IRQ assignments (0-7)
> that
>> may be statically referenced by child devices.
>>
>> With D12385, the mips nexus behavior will now be:
>>
>> - On non-FDT MIPS INTRNG targets, produce a set of fixed MIPS IRQ mappings
>> in nexus_attach() for the MIPS IRQ range.
>> - On all MIPS INTRNG targets, call mips_pic_activate_intr() from
>> nexus_activate_resource() to perform activation; this will either perform
>> mips_pic-specific activation if the IRQ is found in mips_pic' table
> of
>> MIPS IRQ mappings, or will call intr_activate_irq() for IRQs not managed
> by
>> mips_pic (e.g. IRQs mapped by a child PIC).
>> - On all MIPS INTRNG targets, call mips_pic_deactivate_intr() from
>> nexus_deactivate_resource(); this will either perform mips_pic-specific
>> deactivation, or call intr_deactivate_irq() for IRQs not managed by
>> mips_pic.
>>
>> Cheers,
>> Landon
>>
>> _______________________________________________
>> freebsd-mips at freebsd.org mailing list
>> https://lists.freebsd.org/mailman/listinfo/freebsd-mips
>> To unsubscribe, send any mail to
>> "freebsd-mips-unsubscribe at freebsd.org"
>>
> _______________________________________________
> freebsd-mips at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-mips
> To unsubscribe, send any mail to
> "freebsd-mips-unsubscribe at freebsd.org"
>
More information about the freebsd-mips
mailing list