Re: [PATCH V1 Create empty OF root 1/1] of: create empty of root

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Yilun,

Thanks a lot for your feedback. I will revise the comments and send another patch.

In the meanwhile, based on our previous discussion,

https://lore.kernel.org/lkml/20220111070000.GC979169@yilunxu-OptiPlex-7050/

I will propose another patch to add an of_pci interface which can be called by pci driver probe routine to create device node for it.


Thanks,

Lizhi

On 2/11/22 7:38 AM, Xu Yilun wrote:
On Tue, Jan 25, 2022 at 09:48:07PM -0800, Lizhi Hou wrote:
Add OF_EMPTY_ROOT config. When it is selected and there is not a device
tree, create an empty device tree root node.
Maybe add some description about why a empty device tree root node is
needed. Note that the Patch #0 will not be present in the repo when the
series will be merged, so add your description here please.

Signed-off-by: Sonal Santan <sonal.santan@xxxxxxxxxx>
Signed-off-by: Max Zhen <max.zhen@xxxxxxxxxx>
Signed-off-by: Lizhi Hou <lizhi.hou@xxxxxxxxxx>
---
  drivers/of/Kconfig         |  3 +++
  drivers/of/Makefile        |  1 +
  drivers/of/of_empty_root.c | 51 ++++++++++++++++++++++++++++++++++++++
  3 files changed, 55 insertions(+)
  create mode 100644 drivers/of/of_empty_root.c

diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
index 80b5fd44ab1c..42afb126f91a 100644
--- a/drivers/of/Kconfig
+++ b/drivers/of/Kconfig
@@ -94,4 +94,7 @@ config OF_DMA_DEFAULT_COHERENT
  	# arches should select this if DMA is coherent by default for OF devices
  	bool
+config OF_EMPTY_ROOT
+	bool
Also some descriptions for better understanding?

Thanks,
Yilun

+
  endif # OF
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
index e0360a44306e..c65364f32935 100644
--- a/drivers/of/Makefile
+++ b/drivers/of/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o
  obj-$(CONFIG_OF_RESOLVE)  += resolver.o
  obj-$(CONFIG_OF_OVERLAY) += overlay.o
  obj-$(CONFIG_OF_NUMA) += of_numa.o
+obj-$(CONFIG_OF_EMPTY_ROOT) += of_empty_root.o
ifdef CONFIG_KEXEC_FILE
  ifdef CONFIG_OF_FLATTREE
diff --git a/drivers/of/of_empty_root.c b/drivers/of/of_empty_root.c
new file mode 100644
index 000000000000..5c429c7a27bd
--- /dev/null
+++ b/drivers/of/of_empty_root.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2022 Xilinx, Inc.
+ */
+
+#include <linux/of.h>
+#include <linux/slab.h>
+
+#include "of_private.h"
+
+static int __init of_root_init(void)
+{
+	struct property *prop = NULL;
+	struct device_node *node;
+	__be32 *val = NULL;
+
+	if (of_root)
+		return 0;
+
+	pr_info("Create empty OF root node\n");
+	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	if (!node)
+		return -ENOMEM;
+	of_node_init(node);
+	node->full_name = "/";
+
+	prop = kcalloc(2, sizeof(*prop), GFP_KERNEL);
+	if (!prop)
+		return -ENOMEM;
+
+	val = kzalloc(sizeof(*val), GFP_KERNEL);
+	if (!val)
+		return -ENOMEM;
+	*val = cpu_to_be32(sizeof(void *) / sizeof(u32));
+
+	prop->name = "#address-cells";
+	prop->value = val;
+	prop->length = sizeof(u32);
+	of_add_property(node, prop);
+	prop++;
+	prop->name = "#size-cells";
+	prop->value = val;
+	prop->length = sizeof(u32);
+	of_add_property(node, prop);
+	of_root = node;
+	for_each_of_allnodes(node)
+		__of_attach_node_sysfs(node);
+
+	return 0;
+}
+pure_initcall(of_root_init);
--
2.27.0




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux