]> git.sur5r.net Git - u-boot/blobdiff - drivers/core/devres.c
Juno: don't print PCI debug information by default
[u-boot] / drivers / core / devres.c
index 49c270c57c81f90f90b3052e94f582f13bdbbbd7..605295bd14d52e875db71e6b3eb992dd177169e8 100644 (file)
@@ -13,6 +13,8 @@
 #include <linux/kernel.h>
 #include <linux/list.h>
 #include <dm/device.h>
+#include <dm/root.h>
+#include <dm/util.h>
 
 /**
  * struct devres - Bookkeeping info for managed device resource
@@ -194,3 +196,64 @@ void devres_release_all(struct udevice *dev)
 {
        release_nodes(dev, &dev->devres_head, false);
 }
+
+#ifdef CONFIG_DEBUG_DEVRES
+static void dump_resources(struct udevice *dev, int depth)
+{
+       struct devres *dr;
+       struct udevice *child;
+
+       printf("- %s\n", dev->name);
+
+       list_for_each_entry(dr, &dev->devres_head, entry)
+               printf("    %p (%lu byte) %s  %s\n", dr,
+                      (unsigned long)dr->size, dr->name,
+                      dr->probe ? "PROBE" : "BIND");
+
+       list_for_each_entry(child, &dev->child_head, sibling_node)
+               dump_resources(child, depth + 1);
+}
+
+void dm_dump_devres(void)
+{
+       struct udevice *root;
+
+       root = dm_root();
+       if (root)
+               dump_resources(root, 0);
+}
+#endif
+
+/*
+ * Managed kmalloc/kfree
+ */
+static void devm_kmalloc_release(struct udevice *dev, void *res)
+{
+       /* noop */
+}
+
+static int devm_kmalloc_match(struct udevice *dev, void *res, void *data)
+{
+       return res == data;
+}
+
+void *devm_kmalloc(struct udevice *dev, size_t size, gfp_t gfp)
+{
+       void *data;
+
+       data = _devres_alloc(devm_kmalloc_release, size, gfp);
+       if (unlikely(!data))
+               return NULL;
+
+       devres_add(dev, data);
+
+       return data;
+}
+
+void devm_kfree(struct udevice *dev, void *p)
+{
+       int rc;
+
+       rc = devres_destroy(dev, devm_kmalloc_release, devm_kmalloc_match, p);
+       WARN_ON(rc);
+}