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