On Mon, Jul 20, 2015 at 02:48:22AM +0200, Mark Kettenis wrote:
> Some (early) acpi machines leave the cardbus bridge unconfigured.  In
> particular, those machines don't configure the bus number for the
> cardbus bus.  This makes our driver skip attaching the 32-bit cardbus
> handling and only support 16-bit pcmcia cards.
> 
> Diff below makes our driver assign an available bus number and
> configure the bridge with it.  This makes cardbus work on a machine in
> the class mentioned above.
> 
> ok?
> 
> 

ok mlarkin

> Index: pccbb.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/pccbb.c,v
> retrieving revision 1.94
> diff -u -p -r1.94 pccbb.c
> --- pccbb.c   19 Jul 2015 05:37:38 -0000      1.94
> +++ pccbb.c   19 Jul 2015 23:59:24 -0000
> @@ -372,6 +372,7 @@ pccbbattach(struct device *parent, struc
>       pci_chipset_tag_t pc = pa->pa_pc;
>       pci_intr_handle_t ih;
>       const char *intrstr = NULL;
> +     u_long busnum;
>       int flags;
>  
>       pccbb_attach_hook(parent, self, pa);
> @@ -447,8 +448,19 @@ pccbbattach(struct device *parent, struc
>       printf(": %s", intrstr);
>  
>       /*
> -      * When bus number isn't set correctly, give up using 32-bit CardBus
> -      * mode.
> +      * When the bus number isn't configured, try to allocate one
> +      * ourselves.
> +      */
> +     if ((sc->sc_busnum & 0x00ffff00) == 0 && pa->pa_busex &&
> +         extent_alloc(pa->pa_busex, 1, 1, 0, 0, EX_NOWAIT, &busnum) == 0) {
> +             sc->sc_busnum |= (busnum << 8);
> +             sc->sc_busnum |= (busnum << 16);
> +             pci_conf_write(pc, pa->pa_tag, PCI_BUSNUM, sc->sc_busnum);
> +     }
> +
> +     /*
> +      * When the bus number still isn't set correctly, give up
> +      * using 32-bit CardBus mode.
>        */
>       if (((sc->sc_busnum >> 8) & 0xff) == 0) {
>               printf(", CardBus support disabled");
> 

  • cardbus fix Mark Kettenis
    • Re: cardbus fix Mike Larkin

Reply via email to