Author: manu
Date: Mon Oct  2 17:20:07 2017
New Revision: 324214
URL: https://svnweb.freebsd.org/changeset/base/324214

Log:
  Allwinner GPIO: Fail if we cannot enable a clock
  
  If we cannot enable a clock (which is required to have the device
  working), do not attach the device as it will not work.

Modified:
  head/sys/arm/allwinner/a10_gpio.c

Modified: head/sys/arm/allwinner/a10_gpio.c
==============================================================================
--- head/sys/arm/allwinner/a10_gpio.c   Mon Oct  2 16:39:12 2017        
(r324213)
+++ head/sys/arm/allwinner/a10_gpio.c   Mon Oct  2 17:20:07 2017        
(r324214)
@@ -775,7 +775,7 @@ a10_gpio_attach(device_t dev)
        struct clk_list *clkp, *clkp_tmp;
        clk_t clk;
        hwreset_t rst = NULL;
-       int off, err;
+       int off, err, clkret;
 
        sc = device_get_softc(dev);
        sc->sc_dev = dev;
@@ -815,12 +815,15 @@ a10_gpio_attach(device_t dev)
                error = hwreset_deassert(rst);
                if (error != 0) {
                        device_printf(dev, "cannot de-assert reset\n");
-                       return (error);
+                       goto fail;
                }
        }
 
        TAILQ_INIT(&sc->clk_list);
-       for (off = 0; clk_get_by_ofw_index(dev, 0, off, &clk) == 0; off++) {
+       for (off = 0, clkret = 0; clkret == 0; off++) {
+               clkret = clk_get_by_ofw_index(dev, 0, off, &clk);
+               if (clkret != 0)
+                       break;
                err = clk_enable(clk);
                if (err != 0) {
                        device_printf(dev, "Could not enable clock %s\n",
@@ -830,6 +833,11 @@ a10_gpio_attach(device_t dev)
                clkp = malloc(sizeof(*clkp), M_DEVBUF, M_WAITOK | M_ZERO);
                clkp->clk = clk;
                TAILQ_INSERT_TAIL(&sc->clk_list, clkp, next);
+       }
+       if (clkret != 0 && clkret != ENOENT) {
+               device_printf(dev, "Could not find clock at offset %d (%d)\n",
+                   off, clkret);
+               goto fail;
        }
 
        sc->sc_busdev = gpiobus_attach_bus(dev);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to