panic: acpi_pci_link_srs_from_crs: can't put non-ISA IRQ 20 in legacy IRQ resource type)

Moore, Robert robert.moore at intel.com
Fri Apr 19 23:00:15 UTC 2013


No, the length must be set in all descriptors, end tag included.


> -----Original Message-----
> From: owner-freebsd-acpi at freebsd.org [mailto:owner-freebsd-
> acpi at freebsd.org] On Behalf Of Benjamin Lee
> Sent: Friday, April 19, 2013 3:51 PM
> To: John Baldwin
> Cc: freebsd-acpi at freebsd.org
> Subject: Re: panic: acpi_pci_link_srs_from_crs: can't put non-ISA IRQ 20
> in legacy IRQ resource type)
> 
> On Fri, 19 Apr 2013 15:21:10 -0700, Benjamin Lee <ben at b1c1l1.com> wrote:
> > On Fri, 19 Apr 2013 17:26:31 -0400, John Baldwin <jhb at freebsd.org>
> wrote:
> > > On Friday, April 19, 2013 4:18:49 pm Benjamin Lee wrote:
> > > > On Fri, 19 Apr 2013 11:31:49 -0400, John Baldwin <jhb at freebsd.org>
> wrote:
> > > > > On Thursday, April 18, 2013 3:49:40 pm Benjamin Lee wrote:
> > > > > > I have a system that panics on boot with 10-CURRENT and boots
> > > > > > with many ACPI error messages and non-functional devices with
> 9.1-RELEASE.
> > > > > >
> > > > > > Motherboard is Foxconn C51XEM2AA (NVIDIA nForce 590) desktop
> board.
> > > > [...]
> > > > > > Even though 9.1-RELEASE boots successfully, devices such as
> > > > > > the ehci USB controller and SATA controller do not work.
> > > > >
> > > > > Ugh, your BIOS does unexpected things.  It uses a _CRS for these
> > > > > pci link devices that uses a "short" IRQ resource, but uses an
> > > > > extended IRQ
> > > resource in
> > > > > _PRS (and expects an extended one in _SRS).  We use _CRS as a
> > > > > template for
> > > the
> > > > > resource to build.
> > > > >
> > > > > Try this patch.  It's a bit hackish, but it forces us to not use
> > > > > _CRS as a template if _CRS uses a "short" IRQ resource, but the
> > > > > link supports non-
> > > ISA
> > > > > IRQs.
> > > > [...]
> > > >
> > > > Thanks, that fixed the panic and the system boots.  Now it is
> > > > complaining about AE_AML_BAD_RESOURCE_LENGTH and still unable to
> > > > route IRQs, but it definitely looks better than the ACPI parsing
> errors in 9:
> > > >
> > > > pcib0: allocated type 3 (0xdffff000-0xdfffffff) for rid 10 of
> > > > pci0:0:10:0
> > > > pcib0: matched entry for 0.10.INTA (src \_SB_.PCI0.AUBA:0)
> > > > pci_link26: Picked IRQ 20 with weight 0
> > > > pci_link26: Unable to route IRQs: AE_AML_BAD_RESOURCE_LENGTH
> > > >
> > > > Full boot -v output:
> > > > http://www.b1c1l1.com/media/debug/20130419-10-patched-
> > > boot.txt.gz
> > >
> > > Can you add some printfs to the places that return the
> > > AE_AML_BAD_RESOURCE_LENGTH to see which one is being triggered?
> > > (Just look for that constant in sys/contrib/dev/acpica to find the
> > > possible places.)
> >
> > Is there a macro for dumping information about Resource or
> > Resource->Data?  Here's what I have for now at
> > sys/contrib/dev/acpica/resources/rscalc.c line 237:
> >
> > pcib0: matched entry for 0.10.INTA (src \_SB_.PCI0.AUBA:0)
> > pci_link26: Picked IRQ 20 with weight 0
> > rscalc.c:237
> > Resource->Type: 7
> > Resource->Length: 0
> > pci_link26: Unable to route IRQs: AE_AML_BAD_RESOURCE_LENGTH
> >
> > All of the errors are from there and look identical (Type 7, Length 0).
> > Type 7 appears to be ACPI_RESOURCE_TYPE_END_TAG.
> 
> This hack fixes everything (now the SATA controller works).  It seems that
> the Resource->Length check might not be necessary for
> ACPI_RESOURCE_TYPE_END_TAG.
> 
> blee at genesis /usr/src/sys/contrib/dev/acpica $ svn diff
> Index: components/resources/rscalc.c
> ===================================================================
> --- components/resources/rscalc.c       (revision 249624)
> +++ components/resources/rscalc.c       (working copy)
> @@ -234,6 +234,15 @@
> 
>          if (!Resource->Length)
>          {
> +            if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG) {
> +                TotalSize = AcpiGbl_AmlResourceSizes [Resource->Type];
> +                printf("TotalSize: %u\n", TotalSize);
> +                if (TotalSize != 0) {
> +                    printf("ACPI_RESOURCE_TYPE_END_TAG hack\n");
> +                    *SizeNeeded = AmlSizeNeeded + TotalSize;
> +                    return_ACPI_STATUS (AE_OK);
> +                }
> +            }
>              return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
>          }
> 
> Index: components/resources/rslist.c
> ===================================================================
> --- components/resources/rslist.c       (revision 249624)
> +++ components/resources/rslist.c       (working copy)
> @@ -203,6 +203,11 @@
> 
>          if (!Resource->Length)
>          {
> +            if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG) {
> +                printf("ACPI_RESOURCE_TYPE_END_TAG hack 2\n");
> +                return_ACPI_STATUS (AE_OK);
> +            }
> +
>              ACPI_ERROR ((AE_INFO,
>                  "Invalid zero length descriptor in resource list\n"));
>              return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
> 
> 
> 
> --
> Benjamin Lee
> http://www.b1c1l1.com/


More information about the freebsd-acpi mailing list