> From: James Hastings <[email protected]>
> Date: Fri, 22 May 2020 00:55:16 -0400 (EDT)
> 
> stop parsing _CRS and use resources from struct acpi_attach_args.

Thanks, but I already have diffs for all the ACPI gpio drivers in my
tree, waiting for an ok from those slackers who call themselves
OpenBSD developers.

> Index: dev/acpi/amdgpio.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/amdgpio.c,v
> retrieving revision 1.2
> diff -u -p -r1.2 amdgpio.c
> --- dev/acpi/amdgpio.c        26 Jan 2020 00:11:42 -0000      1.2
> +++ dev/acpi/amdgpio.c        21 May 2020 04:31:52 -0000
> @@ -55,11 +55,7 @@ struct amdgpio_softc {
>  
>       bus_space_tag_t sc_memt;
>       bus_space_handle_t sc_memh;
> -     bus_addr_t sc_addr;
> -     bus_size_t sc_size;
>  
> -     int sc_irq;
> -     int sc_irq_flags;
>       void *sc_ih;
>  
>       int sc_npins;
> @@ -85,7 +81,6 @@ const char *amdgpio_hids[] = {
>       NULL
>  };
>  
> -int  amdgpio_parse_resources(int, union acpi_resource *, void *);
>  int  amdgpio_read_pin(void *, int);
>  void amdgpio_write_pin(void *, int, int);
>  void amdgpio_intr_establish(void *, int, int, int (*)(), void *);
> @@ -106,13 +101,22 @@ amdgpio_attach(struct device *parent, st
>  {
>       struct acpi_attach_args *aaa = aux;
>       struct amdgpio_softc *sc = (struct amdgpio_softc *)self;
> -     struct aml_value res;
>       int64_t uid;
>  
>       sc->sc_acpi = (struct acpi_softc *)parent;
>       sc->sc_node = aaa->aaa_node;
>       printf(": %s", sc->sc_node->name);
>  
> +     if (aaa->aaa_naddr < 1) {
> +             printf(", no registers\n");
> +             return;
> +     }
> +
> +     if (aaa->aaa_nirq < 1) {
> +             printf(", no interrupt\n");
> +             return;
> +     }
> +
>       if (aml_evalinteger(sc->sc_acpi, sc->sc_node, "_UID", 0, NULL, &uid)) {
>               printf(", can't find uid\n");
>               return;
> @@ -129,19 +133,6 @@ amdgpio_attach(struct device *parent, st
>               return;
>       }
>  
> -     if (aml_evalname(sc->sc_acpi, sc->sc_node, "_CRS", 0, NULL, &res)) {
> -             printf(", can't find registers\n");
> -             return;
> -     }
> -
> -     aml_parse_resource(&res, amdgpio_parse_resources, sc);
> -     aml_freevalue(&res);
> -     printf(" addr 0x%lx/0x%lx", sc->sc_addr, sc->sc_size);
> -     if (sc->sc_addr == 0 || sc->sc_size == 0) {
> -             printf("\n");
> -             return;
> -     }
> -
>       sc->sc_pin_ih = mallocarray(sc->sc_npins, sizeof(*sc->sc_pin_ih),
>           M_DEVBUF, M_NOWAIT | M_ZERO);
>       if (sc->sc_pin_ih == NULL) {
> @@ -149,17 +140,18 @@ amdgpio_attach(struct device *parent, st
>               return;
>       }
>  
> -     printf(" irq %d", sc->sc_irq);
> +     printf(" addr 0x%llx/0x%llx", aaa->aaa_addr[0], aaa->aaa_size[0]);
> +     printf(" irq %d", aaa->aaa_irq[0]);
>  
>       sc->sc_memt = aaa->aaa_memt;
> -     if (bus_space_map(sc->sc_memt, sc->sc_addr, sc->sc_size, 0,
> +     if (bus_space_map(sc->sc_memt, aaa->aaa_addr[0], aaa->aaa_size[0], 0,
>           &sc->sc_memh)) {
>               printf(", can't map registers\n");
>               goto free;
>       }
>  
> -     sc->sc_ih = acpi_intr_establish(sc->sc_irq, sc->sc_irq_flags, IPL_BIO,
> -         amdgpio_intr, sc, sc->sc_dev.dv_xname);
> +     sc->sc_ih = acpi_intr_establish(aaa->aaa_irq[0], aaa->aaa_irq_flags[0],
> +         IPL_BIO, amdgpio_intr, sc, sc->sc_dev.dv_xname);
>       if (sc->sc_ih == NULL) {
>               printf(", can't establish interrupt\n");
>               goto unmap;
> @@ -177,32 +169,9 @@ amdgpio_attach(struct device *parent, st
>       return;
>  
>  unmap:
> -     bus_space_unmap(sc->sc_memt, sc->sc_memh, sc->sc_size);
> +     bus_space_unmap(sc->sc_memt, sc->sc_memh, aaa->aaa_size[0]);
>  free:
>       free(sc->sc_pin_ih, M_DEVBUF, sc->sc_npins * sizeof(*sc->sc_pin_ih));
> -}
> -
> -int
> -amdgpio_parse_resources(int crsidx, union acpi_resource *crs, void *arg)
> -{
> -     struct amdgpio_softc *sc = arg;
> -     int type = AML_CRSTYPE(crs);
> -
> -     switch (type) {
> -     case LR_MEM32FIXED:
> -             sc->sc_addr = crs->lr_m32fixed._bas;
> -             sc->sc_size = crs->lr_m32fixed._len;
> -             break;
> -     case LR_EXTIRQ:
> -             sc->sc_irq = crs->lr_extirq.irq[0];
> -             sc->sc_irq_flags = crs->lr_extirq.flags;
> -             break;
> -     default:
> -             printf(" type 0x%x\n", type);
> -             break;
> -     }
> -
> -     return 0;
>  }
>  
>  int
> 
> 

Reply via email to