Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Panic during agp_intel attach
On Fri, Feb 15, 2008 at 12:05:18PM +0000, Iain Hibbert wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Mon, 21 Jan 2008, Andreas Gustafsson wrote:
>
> > I tried booting -current (as of 20080118-1955 EET) on a Compaq DeskPro EN,
> > but it paniced during boot. Here's a partial backtrace:
> >
> > #3 0xc05686dd in panic (fmt=0xc0c5ed04 "kernel %sassertion \"%s\"
> > failed: file \"%s\", line %d") at ../../../../kern/subr_prf.c:204
> > #4 0xc098486f in __kernassert (t=0xc0beaa93 "diagnostic ", f=0xc0beaa6c
> > "../../../../arch/x86/pci/pci_machdep.c", l=432, e=0xc0beaa5b "(reg & 0x3)
> > == 0") at ../../../../../../lib/libkern/__assert.c:50
> > #5 0xc07c2c88 in pci_conf_write (pc=0x0, tag={mode1 = 2147483648, mode2
> > = {port = 0, enable = 0 '\0', forward = 128 '\200'}}, reg=145, data=112) at
> > ../../../../arch/x86/pci/pci_machdep.c:432
> > #6 0xc07c0932 in agp_intel_init (sc=0xc177e400) at
> > ../../../../dev/pci/agp_intel.c:266
> > #7 0xc07c05ea in agp_intel_attach (parent=0xc1785e00, self=0xc177e400,
> > aux=0xc0e4978c) at ../../../../dev/pci/agp_intel.c:193
> > #8 0xc07bbd31 in agpattach (parent=0xc1785e00, self=0xc177e400,
> > aux=0xc0e49788) at ../../../../dev/pci/agp.c:331
> >
> > Apparently this is triggered by the following change:
> >
> > revision 1.31
> > date: 2008/01/14 18:44:17; author: dyoung; state: Exp; lines: +4 -2
> > KASSERT() that reads/writes from/to PCI configuration space are
> > aligned on 32-bit boundaries.
> >
> > combined with the following code in agp_intel.c:
> >
> > pci_conf_write(sc->as_pc, sc->as_tag,
> > AGP_INTEL_ERRSTS, 0x70);
> >
> > and the following #define in agpreg.h:
> >
> > #define AGP_INTEL_ERRSTS 0x91 /* Not i8XX */
> >
> > as 0x91 is not aligned to a 32-bit boundary. What's the correct fix?
>
> Hi Andreas,
> Did you find the correct solution to this? I just updated my
> sources and find the same trouble.. (also in PR kern/37824)
>
> It seems that Martin Husemann gave the most correct answer
>
> On Mon, 21 Jan 2008 Martin Huseman wrote:
> > Check what the code does, use 0x90 and shift all values/constants
> > accordingly, if anythings shifts out (have yet to see that), use 0x94
> > and repeat.
>
> I guess the below patch should be correct, certainly it gets through the
> KASSERT and I don't detect any misfeature by this.. can anybody with PCI
> knowledge confirm if thats ok to commit?
>
> iain
>
> - --- /usr/src/sys/dev/pci/agp_intel.c 2008-02-13 19:35:33.000000000
> +0000
> +++ agp_intel.c 2008-02-15 11:37:46.000000000 +0000
> @@ -264,7 +264,7 @@
>
> default:
> pci_conf_write(sc->as_pc, sc->as_tag,
> - - AGP_INTEL_ERRSTS, 0x70);
> + AGP_INTEL_ERRSTS, 0x7000);
> }
>
> return (0);
> - --- /usr/src/sys/dev/pci/agpreg.h 2008-02-13 19:35:33.000000000 +0000
> +++ agpreg.h 2008-02-15 11:53:36.000000000 +0000
> @@ -59,7 +59,7 @@
> #define AGP_INTEL_I8XX_ERRSTS 0xc8
>
> /* Common register */
> - -#define AGP_INTEL_ERRSTS 0x91 /* Not i8XX */
> +#define AGP_INTEL_ERRSTS 0x90 /* Not i8XX */
> #define AGP_INTEL_AGPCMD 0xa8
> # define AGPCMD_SBA (1U << 9)
> # define AGPCMD_AGPEN (1U << 8)
The correct way is to read/modify/write the register.
IMO, the device header files should contain only dword-aligned
config-space addresses and bit fields specified with __BITS(start, end).
Dave
--
David Young OJC Technologies
dyoung%ojctech.com@localhost Urbana, IL * (217) 278-3933 ext 24
Home |
Main Index |
Thread Index |
Old Index