Skip to contentSkip to conversation

mfd: syscon: Fix syscon name for device tree

PATCH In review Tony Lindgren 2 participants 4 messages Jan 8, 2019

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mfd: syscon: Fix syscon name for device tree

I'm now seeing the following error on omap5 during boot:

(NULL device *): Failed to create dummy-scm_conf@0 debugfs directory

This is because we have two separate scm_conf syscon regions in the dts. Let's fix the issue by setting a proper name if syscon is configured via device tree.

See also related fix for commit 500f9ff518cf ("mfd: syscon: Set name of regmap_config").

---
 drivers/mfd/syscon.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/mfd/syscon.c +2 -0
@@ -241,6 +241,8 @@ static int syscon_probe(struct platform_device *pdev)
 	syscon_config.max_register = res->end - res->start - 3;
 	if (pdata)
 		syscon_config.name = pdata->label;
+	else
+		syscon_config.name = dev_name(dev);
 	syscon->regmap = devm_regmap_init_mmio(dev, base, &syscon_config);
 	if (IS_ERR(syscon->regmap)) {
 		dev_err(dev, "regmap init failed\n");
Signature · 1 line
2.20.1
#1 lore raw
Quoted 21 lines · Tony Lindgren

I'm now seeing the following error on omap5 during boot:

(NULL device *): Failed to create dummy-scm_conf@0 debugfs directory

This is because we have two separate scm_conf syscon regions in the dts. Let's fix the issue by setting a proper name if syscon is configured via device tree.

See also related fix for commit 500f9ff518cf ("mfd: syscon: Set name of regmap_config").

---
 drivers/mfd/syscon.c | 2 ++
 1 file changed, 2 insertions(+)

drivers/mfd/syscon.c static int syscon_probe(struct platform_device *pdev) · line 248

Quoted 8 lines
drivers/mfd/syscon.c +2 -0
@@ -241,6 +241,8 @@ static int syscon_probe(struct platform_device *pdev)
 	syscon_config.max_register = res->end - res->start - 3;
 	if (pdata)
 		syscon_config.name = pdata->label;
+	else
+		syscon_config.name = dev_name(dev);
 	syscon->regmap = devm_regmap_init_mmio(dev, base, &syscon_config);
 	if (IS_ERR(syscon->regmap)) {
 		dev_err(dev, "regmap init failed\n");

Hmm this fixes the error, but I'm still seeing only one entry for /sys/kernel/debug/regmap/dummy-scm_conf@0.

Anybody got better ideas for setting the default name, maybe dev->of_node->name if it exists?

Regards,

Tony

#2 lore raw

Hi Tony,

Quoted 4 lines · Tony Lindgren
Quoted 3 lines · Tony Lindgren

I'm now seeing the following error on omap5 during boot:

(NULL device *): Failed to create dummy-scm_conf@0 debugfs directory

This log means failed to init regmap debugfs with device(NULL) and name("scm_conf@0"), which likely to be called from of_syscon_register() with np fullname("scm_conf@0").

So my guess would be there're more than one syscon dts nodes named "scm_conf@0".

For omap5 and scm_conf@0, should be these 2:
https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/omap5.dtsi#L167

				scm_conf: scm_conf@0 {
					compatible = "syscon";

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/omap5.dtsi#L313

				scm_wkup_pad_conf: scm_conf@0 {
					compatible = "syscon", "simple-bus";

Maybe try to rename one of them(for example, rename the second one to "scm_wkup_pad_conf@0").

#3 lore raw
Quoted 6 lines · JeffyChen

Hi Tony,

Quoted 3 lines · Tony Lindgren
Quoted 2 lines · Tony Lindgren

I'm now seeing the following error on omap5 during boot:

Quoted 7 lines
Quoted 1 line
Quoted 1 line

(NULL device *): Failed to create dummy-scm_conf@0 debugfs directory

This log means failed to init regmap debugfs with device(NULL) and name("scm_conf@0"), which likely to be called from of_syscon_register() with np fullname("scm_conf@0").

So my guess would be there're more than one syscon dts nodes named "scm_conf@0".

Yup.

Quoted 8 lines

For omap5 and scm_conf@0, should be these 2:
https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/omap5.dtsi#L167

				scm_conf: scm_conf@0 {
					compatible = "syscon";

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/omap5.dtsi#L313

				scm_wkup_pad_conf: scm_conf@0 {
					compatible = "syscon", "simple-bus";

Yes those are the one.

Quoted 2 lines

Maybe try to rename one of them(for example, rename the second one to "scm_wkup_pad_conf@0").

Well the thing is that any valid node name should work here just like it does for devices. In this case the syscon instances are on separate inteconnect instances. So it seems that we should do something similar to what we already do in of_device_make_bus_id().

BTW, I was trying to patch the wrong function :) The right function to fix is of_syscon_register() for the dts case.

Regards,

Tony