On Wed, Sep 04, 2019 at 03:54:25PM +0200, Mark Kettenis wrote:
> > If the mapping cannot be solved, maybe the activate function can skip
> > all work if sc->sc.sc_size is 0.
>
> So this is, IMHO, the only viable approach.  I just wanted to trick
> somebody else into doing the work ;).

ehci does that.

----------------------------
revision 1.31
date: 2019/05/02 20:28:46;  author: kettenis;  state: Exp;  lines: +8 -4;  
commitid: UueNy7svryPLHN1X;
Avoid running the activate function for a partially attached ehci(4) driver.
The Realtek DASH ehci(4) doesn't have a properly set SBRN register which
prevents us from fully attaching the device.  This would result in a panic
during suspend because the activate function will access register that
aren't mapped.

ok deraadt@
----------------------------

If I do the same for uhci, it solves my problem.

ok?

bluhm

Index: dev/pci/uhci_pci.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/uhci_pci.c,v
retrieving revision 1.33
diff -u -p -r1.33 uhci_pci.c
--- dev/pci/uhci_pci.c  16 May 2014 18:17:03 -0000      1.33
+++ dev/pci/uhci_pci.c  5 Sep 2019 16:15:44 -0000
@@ -86,6 +86,9 @@ uhci_pci_activate(struct device *self, i
 {
        struct uhci_pci_softc *sc = (struct uhci_pci_softc *)self;

+       if (sc->sc.sc_size == 0)
+               return 0;
+
        /* On resume, set legacy support attribute and enable intrs */
        switch (act) {
        case DVACT_RESUME:
@@ -190,6 +193,7 @@ uhci_pci_attach(struct device *parent, s

 unmap_ret:
        bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
+       sc->sc.sc_size = 0;
        splx(s);
 }

@@ -218,6 +222,7 @@ uhci_pci_attach_deferred(struct device *
 unmap_ret:
        bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
        pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
+       sc->sc.sc_size = 0;
        splx(s);
 }

Reply via email to