handle "simple-pm-bus" in simplebus
authorjsg <jsg@openbsd.org>
Thu, 18 Feb 2021 00:04:13 +0000 (00:04 +0000)
committerjsg <jsg@openbsd.org>
Thu, 18 Feb 2021 00:04:13 +0000 (00:04 +0000)
Enables a clock and/or power domain for a group of devices.
Required to use linux 5.11 dtbs on am335x and omap4.

ok kettenis@

sys/arch/arm/simplebus/simplebus.c

index e1bad26..846bec9 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: simplebus.c,v 1.16 2020/04/29 15:25:07 kettenis Exp $ */
+/* $OpenBSD: simplebus.c,v 1.17 2021/02/18 00:04:13 jsg Exp $ */
 /*
  * Copyright (c) 2016 Patrick Wildt <patrick@blueri.se>
  *
@@ -23,6 +23,8 @@
 
 #include <dev/ofw/openfirm.h>
 #include <dev/ofw/fdt.h>
+#include <dev/ofw/ofw_clock.h>
+#include <dev/ofw/ofw_power.h>
 
 #include <arm/fdt.h>
 #include <arm/simplebus/simplebusvar.h>
@@ -54,10 +56,8 @@ simplebus_match(struct device *parent, void *cfdata, void *aux)
        if (fa->fa_node == 0)
                return (0);
 
-       if (!OF_is_compatible(fa->fa_node, "simple-bus"))
-               return (0);
-
-       return (1);
+       return (OF_is_compatible(fa->fa_node, "simple-bus") ||
+           OF_is_compatible(fa->fa_node, "simple-pm-bus"));
 }
 
 void
@@ -110,6 +110,11 @@ simplebus_attach(struct device *parent, struct device *self, void *aux)
                    sc->sc_dmaranges, sc->sc_dmarangeslen);
        }
 
+       if (OF_is_compatible(sc->sc_node, "simple-pm-bus")) {
+               power_domain_enable(sc->sc_node);
+               clock_enable_all(sc->sc_node);
+       }
+
        /* Scan the whole tree. */
        sc->sc_early = 1;
        for (node = OF_child(sc->sc_node); node; node = OF_peer(node))