Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: autri0: can't map memory space



Andreas Gustafsson wrote:
To follow up on my own message from last month about the following
error appearing after upgrading from 4.99.26 to 4.99.42:

  autri0 at pci0 dev 6 function 0: Acer Labs M5451 AC-Link Controller Audio 
Device (rev. 0x01)
  autri0: can't map memory space

I figured out the problem.  The 4.99.26 kernel configuration was based
on GENERIC_LAPTOP, but since that was removed from the tree, I had
based the 4.99.42 configuration on GENERIC.  One of the differences
between GENERIC_LAPTOP and GENERIC is that GENERIC_LAPTOP defined
PCI_ADDR_FIXUP and GENERIC doesn't.

The PCI Command register for the autri0 device is initially 0x0000;
the PCI_ADDR_FIXUP code (when enabled) changes it to 0x0007 and makes
the attach succeed.

There's no reason that the autri driver cannot modify this register itself. Can you try the attached patch with a GENERIC kernel and no PCI_*_FIXUP options?

Cheers,
Jared
Index: autri.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/autri.c,v
retrieving revision 1.36
diff -u -r1.36 autri.c
--- autri.c     9 Dec 2007 20:28:06 -0000       1.36
+++ autri.c     25 Jan 2008 12:21:22 -0000
@@ -517,21 +517,29 @@
        struct autri_softc *sc;
        struct pci_attach_args *pa;
        pci_chipset_tag_t pc;
+       pcitag_t tag;
        struct autri_codec_softc *codec;
        pci_intr_handle_t ih;
        char const *intrstr;
        char devinfo[256];
+       pcireg_t csr;
        int r;
        uint32_t reg;
 
        sc = (struct autri_softc *)self;
        pa = (struct pci_attach_args *)aux;
        pc = pa->pa_pc;
+       tag = pa->pa_tag;
        aprint_naive(": Audio controller\n");
 
        sc->sc_devid = pa->pa_id;
        sc->sc_class = pa->pa_class;
 
+       csr = pci_conf_read(pc, tag, PCI_COMMAND_STATUS_REG);
+       csr |= (PCI_COMMAND_IO_ENABLE | PCI_COMMAND_MEM_ENABLE |
+           PCI_COMMAND_MASTER_ENABLE);
+       pci_conf_write(pc, tag, PCI_COMMAND_STATUS_REG, csr);
+
        pci_devinfo(pa->pa_id, pa->pa_class, 0, devinfo, sizeof(devinfo));
        sc->sc_revision = PCI_REVISION(pa->pa_class);
        aprint_normal(": %s (rev. 0x%02x)\n", devinfo, sc->sc_revision);


Home | Main Index | Thread Index | Old Index