tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pchb@acpi again
Hi!
From: Chuck Silvers <chuq%chuq.com@localhost>
Date: Sun, 5 May 2013 18:54:54 -0700
> On Mon, Apr 22, 2013 at 09:21:50PM +0900, KIYOHARA Takashi wrote:
> > Hi!
> >
> >
> > From: Chuck Silvers <chuq%chuq.com@localhost>
> > Date: Sun, 21 Apr 2013 08:33:24 -0700
> >
> > > On Mon, Apr 15, 2013 at 09:14:51PM +0900, KIYOHARA Takashi wrote:
> > > > > > > in acpi_pci.c, why do you need to skip the check for
> > > > > > > ACPI_VALID_ADR?
> > > > > > > does the ACPI info on ia64 not have that flag set when it should?
> > > > > >
> > > > > > In my memory, YES. :-<
> > > > > > But I can't access to my ia64 now. I will try and check at next
> > > > > > weekend.
> > > > >
> > > > > In my ia64(zx6000), it looked that AcpiNsSearchAndEnter() returned
> > > > > AE_NOT_FOUND.
> > > > > How enable ACPI_DEBUG_PRINT or others many print?
> > > >
> > > > I look this messages on my ia64. (e.g. PCI0)
> > > >
> > > > _ADR Not found in 0xe00000003f9dd1e8 [Not adding]
> > > > Name [_ADR] not found in scope [PCI0] 0xe00000003f9dd1e8
> > > >
> > > >
> > > > I think that no this problem crops up by all ia64 machines. Do you know
> > > > the better evasion method?
> > > > # Can I fixup by acpi_md_callback()? I look and find that now.
> > >
> > > I was thinking that acpi_md_callback() was called before the code where
> > > you
> > > removed the check for ACPI_VALID_ADR, so you could have acpi_md_callback()
> > > walk through the device tree constructed by acpi_build_tree() and set
> > > ACPI_VALID_ADR on any devices where it was missing, as well as
> > > initializing
> > > ad->ad_devinfo->Address. but the check for ACPI_VALID_ADR in question is
> > > in
> > > acpi_pcidev_scan(), which is called at the end of acpi_build_tree(),
> > > so it's actually called before acpi_md_callback() is called.
> > >
> > > it happens that ad->ad_devinfo->Address will be zero if ACPI_VALID_ADR
> > > isn't set, I guess that value is actually correct on your system?
> >
> > By my ia64 machine, it cannot ensure that address of pchb is right.
> > I checked the boot log(typescript) of FreeBSD and Debian.
> > FreeBSD had returned AE_NOT_FOUND. The value of device and function
> > was not displayed in Linux.
> >
> >
> > http://ftp.netbsd.org/pub/NetBSD/misc/kiyohara/ia64/typescript.FreeBSD_ia64
> > http://ftp.netbsd.org/pub/NetBSD/misc/kiyohara/ia64/typescript.ia64.debian
>
> if you don't know the right value for ad->ad_devinfo->Address should be,
> how would you know how to set ap->ap_device and ap->ap_function?
> setting those two fields are what ad->ad_devinfo->Address is used for
> in acpi_pcidev_scan(). if you know how you should set those fields,
> then I think you should be able to just initialize ad->ad_devinfo->Address
> and set ACPI_VALID_ADR in ad->ad_devinfo->Valid.
>
> I looked at the diff you sent later, but it wasn't clear how that
> was supposed to work. could you also send the ia64 version of that
> new callback so we can see how the MI and MD parts would fit together?
I add this change to my ia64.
Index: acpi_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/ia64/acpi/acpi_machdep.c,v
retrieving revision 1.6
diff -u -r1.6 acpi_machdep.c
--- acpi_machdep.c 23 Sep 2012 00:31:05 -0000 1.6
+++ acpi_machdep.c 8 May 2013 11:49:39 -0000
@@ -195,6 +195,20 @@
}
int
+acpi_node_md_callback(struct acpi_devnode *ad)
+{
+
+ if (ad->ad_devinfo->Flags & ACPI_PCI_ROOT_BRIDGE)
+ if (!(ad->ad_devinfo->Valid & ACPI_VALID_ADR)) {
+ /* Fixup no _ADR */
+ ad->ad_devinfo->Valid |= ACPI_VALID_ADR;
+ return 1;
+ }
+
+ return 0;
+}
+
+int
acpi_md_sleep(int state)
{
printf("%s: not yet...\n", __func__);
Thanks,
--
kiyohara
Home |
Main Index |
Thread Index |
Old Index