clk: imx: add i.MX8MP clk driver
[oweals/u-boot.git] / drivers / reset / reset-socfpga.c
index cb8312619fa076799e38fc5b7596df80687e8e1e..93ec9cfdb64a0c5f7cac0c712ff7117c1fbcd5c1 100644 (file)
@@ -14,7 +14,9 @@
 
 #include <common.h>
 #include <dm.h>
+#include <dm/lists.h>
 #include <dm/of_access.h>
+#include <env.h>
 #include <reset-uclass.h>
 #include <linux/bitops.h>
 #include <linux/io.h>
@@ -107,14 +109,12 @@ static const struct reset_ops socfpga_reset_ops = {
 static int socfpga_reset_probe(struct udevice *dev)
 {
        struct socfpga_reset_data *data = dev_get_priv(dev);
-       const void *blob = gd->fdt_blob;
-       int node = dev_of_offset(dev);
        u32 modrst_offset;
        void __iomem *membase;
 
        membase = devfdt_get_addr_ptr(dev);
 
-       modrst_offset = fdtdec_get_int(blob, node, "altr,modrst-offset", 0x10);
+       modrst_offset = dev_read_u32_default(dev, "altr,modrst-offset", 0x10);
        data->modrst_base = membase + modrst_offset;
 
        return 0;
@@ -132,6 +132,23 @@ static int socfpga_reset_remove(struct udevice *dev)
        return 0;
 }
 
+static int socfpga_reset_bind(struct udevice *dev)
+{
+       int ret;
+       struct udevice *sys_child;
+
+       /*
+        * The sysreset driver does not have a device node, so bind it here.
+        * Bind it to the node, too, so that it can get its base address.
+        */
+       ret = device_bind_driver_to_node(dev, "socfpga_sysreset", "sysreset",
+                                        dev->node, &sys_child);
+       if (ret)
+               debug("Warning: No sysreset driver: ret=%d\n", ret);
+
+       return 0;
+}
+
 static const struct udevice_id socfpga_reset_match[] = {
        { .compatible = "altr,rst-mgr" },
        { /* sentinel */ },
@@ -141,6 +158,7 @@ U_BOOT_DRIVER(socfpga_reset) = {
        .name = "socfpga-reset",
        .id = UCLASS_RESET,
        .of_match = socfpga_reset_match,
+       .bind = socfpga_reset_bind,
        .probe = socfpga_reset_probe,
        .priv_auto_alloc_size = sizeof(struct socfpga_reset_data),
        .ops = &socfpga_reset_ops,