[PATCH] checks: check_unique_unit_address: Update to skip if node is disabled

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



There are various SoCs that have 2 different peripheral blocks at the
same register offset.  However, we might have one block marked as
status = "disabled" and the other status = "ok".  In such cases we
shouldn't warn about duplicate unit-address.

Here's a cut down example that we would warning about before:

/dts-v1/;

/ {
	#address-cells = <0x01>;
	#size-cells = <0x01>;

	soc {
		#address-cells = <0x01>;
		#size-cells = <0x01>;
		compatible = "simple-bus";
		ranges;

		i2c0: i2c@40003000 {
			compatible = "nordic,nrf-i2c";
			reg = <0x40003000 0x1000>;
			status = "ok";
		};

		spi0: spi@40003000 {
			compatible = "nordic,nrf-spi";
			reg = <0x40003000 0x1000>;
			status = "disabled";
		};
	};
};

Signed-off-by: Kumar Gala <kumar.gala@xxxxxxxxxx>
---
 checks.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/checks.c b/checks.c
index ed84e03..8f787e6 100644
--- a/checks.c
+++ b/checks.c
@@ -1192,15 +1192,30 @@ static void check_unique_unit_address(struct check *c, struct dt_info *dti,
 	for_each_child(node, childa) {
 		struct node *childb;
 		const char *addr_a = get_unitname(childa);
+		struct property *prop;
 
 		if (!strlen(addr_a))
 			continue;
 
+		prop = get_property(childa, "status");
+		if (prop) {
+			char *str = prop->val.val;
+			if (!strcmp("disabled", str))
+				continue;
+		}
+
 		for_each_child(node, childb) {
 			const char *addr_b = get_unitname(childb);
 			if (childa == childb)
 				break;
 
+			prop = get_property(childb, "status");
+			if (prop) {
+				char *str = prop->val.val;
+				if (!strcmp("disabled", str))
+					continue;
+			}
+
 			if (streq(addr_a, addr_b))
 				FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath);
 		}
-- 
2.14.5




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

  Powered by Linux