mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/3] cdev: Add function to find cdev by device_node
@ 2015-09-01  6:14 Sascha Hauer
  2015-09-01  6:14 ` [PATCH 2/3] of_path: Allow pointing directly to the partition Sascha Hauer
  2015-09-01  6:14 ` [PATCH 3/3] ARM: dts: directly point to partitions in the barebox, environment binding Sascha Hauer
  0 siblings, 2 replies; 3+ messages in thread
From: Sascha Hauer @ 2015-09-01  6:14 UTC (permalink / raw)
  To: Barebox List

This adds a device_node member to struct cdev and a function
to find a cdev by device_node.
This also removes the setting of cdev->dev->device_node in
the of partition parser. We must not set the device since it
may not refer to a partition but to a whole device with partitions.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/of/partition.c |  4 ++--
 fs/devfs-core.c        | 13 +++++++++++++
 include/driver.h       |  2 ++
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/of/partition.c b/drivers/of/partition.c
index 3dce844..6017897 100644
--- a/drivers/of/partition.c
+++ b/drivers/of/partition.c
@@ -64,8 +64,8 @@ struct cdev *of_parse_partition(struct cdev *cdev, struct device_node *node)
 	if (IS_ERR(new))
 		new = NULL;
 
-	if (new && new->dev)
-		new->dev->device_node = node;
+	if (new)
+		new->device_node = node;;
 
 	free(filename);
 
diff --git a/fs/devfs-core.c b/fs/devfs-core.c
index f45f8ca..62571fb 100644
--- a/fs/devfs-core.c
+++ b/fs/devfs-core.c
@@ -57,6 +57,19 @@ struct cdev *cdev_by_name(const char *filename)
 	return NULL;
 }
 
+struct cdev *cdev_by_device_node(struct device_node *node)
+{
+	struct cdev *cdev;
+
+	list_for_each_entry(cdev, &cdev_list, list) {
+		if (!cdev->device_node)
+			continue;
+		if (cdev->device_node == node)
+			return cdev;
+	}
+	return NULL;
+}
+
 /**
  * device_find_partition - find a partition belonging to a physical device
  *
diff --git a/include/driver.h b/include/driver.h
index 728f8ab..046dd90 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -436,6 +436,7 @@ struct cdev {
 	struct file_operations *ops;
 	void *priv;
 	struct device_d *dev;
+	struct device_node *device_node;
 	struct list_head list;
 	struct list_head devices_list;
 	char *name; /* filename under /dev/ */
@@ -456,6 +457,7 @@ int devfs_remove(struct cdev *);
 int cdev_find_free_index(const char *);
 struct cdev *device_find_partition(struct device_d *dev, const char *name);
 struct cdev *cdev_by_name(const char *filename);
+struct cdev *cdev_by_device_node(struct device_node *node);
 struct cdev *cdev_open(const char *name, unsigned long flags);
 int cdev_do_open(struct cdev *, unsigned long flags);
 void cdev_close(struct cdev *cdev);
-- 
2.5.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 2/3] of_path: Allow pointing directly to the partition
  2015-09-01  6:14 [PATCH 1/3] cdev: Add function to find cdev by device_node Sascha Hauer
@ 2015-09-01  6:14 ` Sascha Hauer
  2015-09-01  6:14 ` [PATCH 3/3] ARM: dts: directly point to partitions in the barebox, environment binding Sascha Hauer
  1 sibling, 0 replies; 3+ messages in thread
From: Sascha Hauer @ 2015-09-01  6:14 UTC (permalink / raw)
  To: Barebox List

We could only point to partitions in the device tree by using
&norflash, "partname:barebox-environment". Allow to point to the
partition directly without having to parse the partition labels.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 .../devicetree/bindings/barebox/barebox,environment.rst    |  5 +++--
 drivers/of/of_path.c                                       | 14 +++++++++-----
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/barebox/barebox,environment.rst b/Documentation/devicetree/bindings/barebox/barebox,environment.rst
index d472f66..d5e52ea 100644
--- a/Documentation/devicetree/bindings/barebox/barebox,environment.rst
+++ b/Documentation/devicetree/bindings/barebox/barebox,environment.rst
@@ -8,8 +8,9 @@ Required properties:
 * ``compatible``: should be ``barebox,environment``
 * ``device-path``: path to the environment
 
-The device-path is a multistring property. The first string should be a
-nodepath to the node containing the physical device of the environment.
+The device-path is a multistring property. The first string should contain
+a nodepath to the node containing the physical device of the environment or
+a nodepath to a partition described by the OF partition binding.
 The subsequent strings are of the form <type>:<options> to further describe
 the path to the environment. Supported values for <type>:
 
diff --git a/drivers/of/of_path.c b/drivers/of/of_path.c
index 2dc7848..992972c 100644
--- a/drivers/of/of_path.c
+++ b/drivers/of/of_path.c
@@ -117,7 +117,8 @@ out:
  * @flags: use OF_FIND_PATH_FLAGS_BB to return the .bb device if available
  *
  * paths in the devicetree have the form of a multistring property. The first
- * string contains the full path to the physical device containing the path.
+ * string contains the full path to the physical device containing the path or
+ * a full path to a partition described by the OF partition binding.
  * The remaining strings have the form "<type>:<options>". Currently supported
  * for <type> are:
  *
@@ -129,6 +130,7 @@ out:
  *
  * device-path = &mmc0, "partname:0";
  * device-path = &norflash, "partname:barebox-environment";
+ * device-path = &environment_nor;
  */
 int of_find_path(struct device_node *node, const char *propname, char **outpath, unsigned flags)
 {
@@ -147,13 +149,15 @@ int of_find_path(struct device_node *node, const char *propname, char **outpath,
 		return -ENODEV;
 
 	op.dev = of_find_device_by_node_path(rnode->full_name);
-	if (!op.dev)
-		return -ENODEV;
+	if (!op.dev) {
+		op.dev = of_find_device_by_node_path(rnode->parent->full_name);
+		if (!op.dev)
+			return -ENODEV;
+	}
 
 	device_detect(op.dev);
 
-	if (list_is_singular(&op.dev->cdevs))
-		op.cdev = list_first_entry(&op.dev->cdevs, struct cdev, devices_list);
+	op.cdev = cdev_by_device_node(rnode);
 
 	i = 1;
 
-- 
2.5.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 3/3] ARM: dts: directly point to partitions in the barebox, environment binding
  2015-09-01  6:14 [PATCH 1/3] cdev: Add function to find cdev by device_node Sascha Hauer
  2015-09-01  6:14 ` [PATCH 2/3] of_path: Allow pointing directly to the partition Sascha Hauer
@ 2015-09-01  6:14 ` Sascha Hauer
  1 sibling, 0 replies; 3+ messages in thread
From: Sascha Hauer @ 2015-09-01  6:14 UTC (permalink / raw)
  To: Barebox List

We can now directly point to the partitions in the barebox,environment
binding. Convert some boards over to it.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/dts/imx27-phytec-phycore-rdk.dts | 8 ++++----
 arch/arm/dts/imx51-babbage.dts            | 4 ++--
 arch/arm/dts/imx53-qsb-common.dtsi        | 4 ++--
 arch/arm/dts/imx6dl-eltec-hipercam.dts    | 4 ++--
 arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi    | 8 ++++----
 arch/arm/dts/imx6q-sabresd.dts            | 2 +-
 arch/arm/dts/imx6q-var-custom.dts         | 2 +-
 arch/arm/dts/imx6q-var-som.dtsi           | 2 +-
 arch/arm/dts/imx6qdl-sabresd.dtsi         | 2 +-
 arch/arm/dts/imx6s-riotboard.dts          | 4 ++--
 10 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/arch/arm/dts/imx27-phytec-phycore-rdk.dts b/arch/arm/dts/imx27-phytec-phycore-rdk.dts
index 9d216af..f602045 100644
--- a/arch/arm/dts/imx27-phytec-phycore-rdk.dts
+++ b/arch/arm/dts/imx27-phytec-phycore-rdk.dts
@@ -10,13 +10,13 @@
 
 		environment-nor {
 			compatible = "barebox,environment";
-			device-path = &nor, "partname:env";
+			device-path = &environment_nor;
 			status = "disabled";
 		};
 
 		environment-nand {
 			compatible = "barebox,environment";
-			device-path = &nfc, "partname:env";
+			device-path = &environment_nand;
 			status = "disabled";
 		};
 	};
@@ -32,7 +32,7 @@
 		reg = <0x00000000 0x00080000>;
 	};
 
-	partition@1 {
+	environment_nand: partition@1 {
 		label = "env";
 		reg = <0x00080000 0x00020000>;
 	};
@@ -54,7 +54,7 @@
 		reg = <0x00000000 0x00080000>;
 	};
 
-	partition@1 {
+	environment_nor: partition@1 {
 		label = "env";
 		reg = <0x00080000 0x00020000>;
 	};
diff --git a/arch/arm/dts/imx51-babbage.dts b/arch/arm/dts/imx51-babbage.dts
index 909774b..f8402ca 100644
--- a/arch/arm/dts/imx51-babbage.dts
+++ b/arch/arm/dts/imx51-babbage.dts
@@ -18,7 +18,7 @@
 
 		environment@0 {
 			compatible = "barebox,environment";
-			device-path = &esdhc1, "partname:barebox-environment";
+			device-path = &environment_esdhc1;
 		};
 	};
 };
@@ -27,7 +27,7 @@
 	#address-cells = <1>;
 	#size-cells = <1>;
 
-	partition@0 {
+	environment_esdhc1: partition@0 {
 		label = "barebox-environment";
 		reg = <0x80000 0x20000>;
 	};
diff --git a/arch/arm/dts/imx53-qsb-common.dtsi b/arch/arm/dts/imx53-qsb-common.dtsi
index 4007a09..bf634e4 100644
--- a/arch/arm/dts/imx53-qsb-common.dtsi
+++ b/arch/arm/dts/imx53-qsb-common.dtsi
@@ -16,7 +16,7 @@
 
 		environment@0 {
 			compatible = "barebox,environment";
-			device-path = &esdhc1, "partname:barebox-environment";
+			device-path = &bareboxenv;
 		};
 	};
 };
@@ -25,7 +25,7 @@
 	#address-cells = <1>;
 	#size-cells = <1>;
 
-	partition@0 {
+	bareboxenv: partition@0 {
 		label = "barebox-environment";
 		reg = <0x80000 0x20000>;
 	};
diff --git a/arch/arm/dts/imx6dl-eltec-hipercam.dts b/arch/arm/dts/imx6dl-eltec-hipercam.dts
index 737752f..166f8f1 100644
--- a/arch/arm/dts/imx6dl-eltec-hipercam.dts
+++ b/arch/arm/dts/imx6dl-eltec-hipercam.dts
@@ -15,7 +15,7 @@
 
 		environment@0 {
 			compatible = "barebox,environment";
-			device-path = &norflash0, "partname:bareboxenv";
+			device-path = &environment_nor0;
 		};
 	};
 };
@@ -39,7 +39,7 @@
 			reg = <0x0 0xc0000>;
 		};
 
-		partition@1 {
+		environment_nor0: partition@1 {
 			label = "bareboxenv";
 			reg = <0xc0000 0x8000>;
 		};
diff --git a/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi b/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi
index 6435ab7..97cf78a 100644
--- a/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi
+++ b/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi
@@ -19,13 +19,13 @@
 	chosen {
 		environment-sd {
 			compatible = "barebox,environment";
-			device-path = &usdhc3, "partname:barebox-environment";
+			device-path = &environment_usdhc3;
 			status = "disabled";
 		};
 
 		environment-nand {
 			compatible = "barebox,environment";
-			device-path = &gpmi, "partname:barebox-environment";
+			device-path = &environment_nand;
 			status = "disabled";
 		};
 	};
@@ -139,7 +139,7 @@
 		reg = <0x0 0x400000>;
 	};
 
-	partition@1 {
+	environment_nand: partition@1 {
 		label = "barebox-environment";
 		reg = <0x400000 0x20000>;
 	};
@@ -183,7 +183,7 @@
 		label = "barebox";
 		reg = <0x0 0x80000>;
 	};
-	partition@1 {
+	environment_usdhc3: partition@1 {
 		label = "barebox-environment";
 		reg = <0x80000 0x80000>;
 	};
diff --git a/arch/arm/dts/imx6q-sabresd.dts b/arch/arm/dts/imx6q-sabresd.dts
index 71ca855..1f92c15 100644
--- a/arch/arm/dts/imx6q-sabresd.dts
+++ b/arch/arm/dts/imx6q-sabresd.dts
@@ -25,7 +25,7 @@
 
 		environment@0 {
 			compatible = "barebox,environment";
-			device-path = &usdhc3, "partname:barebox-environment";
+			device-path = &environment_usdhc3;
 		};
 	};
 };
diff --git a/arch/arm/dts/imx6q-var-custom.dts b/arch/arm/dts/imx6q-var-custom.dts
index 795114d..ef6981e 100644
--- a/arch/arm/dts/imx6q-var-custom.dts
+++ b/arch/arm/dts/imx6q-var-custom.dts
@@ -30,7 +30,7 @@
 
 		environment@0 {
 			compatible = "barebox,environment";
-			device-path = &gpmi, "partname:barebox-environment";
+			device-path = &environment_nand;
 		};
 
 	};
diff --git a/arch/arm/dts/imx6q-var-som.dtsi b/arch/arm/dts/imx6q-var-som.dtsi
index 7926911..d005f31 100644
--- a/arch/arm/dts/imx6q-var-som.dtsi
+++ b/arch/arm/dts/imx6q-var-som.dtsi
@@ -42,7 +42,7 @@
 		reg = <0x0 0x200000>;
 	};
 
-	partition@1 {
+	environment_nand: partition@1 {
 		label = "barebox-environment";
 		reg = <0x200000 0x20000>;
 	};
diff --git a/arch/arm/dts/imx6qdl-sabresd.dtsi b/arch/arm/dts/imx6qdl-sabresd.dtsi
index 54201bd..32318cf 100644
--- a/arch/arm/dts/imx6qdl-sabresd.dtsi
+++ b/arch/arm/dts/imx6qdl-sabresd.dtsi
@@ -34,7 +34,7 @@
 		reg = <0x0 0x80000>;
 	};
 
-	partition@1 {
+	environment_usdhc3: partition@1 {
 		label = "barebox-environment";
 		reg = <0x80000 0x80000>;
 	};
diff --git a/arch/arm/dts/imx6s-riotboard.dts b/arch/arm/dts/imx6s-riotboard.dts
index 117c00a..a522dd9 100644
--- a/arch/arm/dts/imx6s-riotboard.dts
+++ b/arch/arm/dts/imx6s-riotboard.dts
@@ -17,7 +17,7 @@
 
 		environment@0 {
 			compatible = "barebox,environment";
-			device-path = &usdhc4, "partname:barebox-environment";
+			device-path = &environment_usdhc4;
 		};
 	};
 
@@ -232,7 +232,7 @@
 		reg = <0x0 0x80000>;
 	};
 
-	partition@1 {
+	environment_usdhc4: partition@1 {
 		label = "barebox-environment";
 		reg = <0x80000 0x80000>;
 	};
-- 
2.5.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-09-01  6:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-01  6:14 [PATCH 1/3] cdev: Add function to find cdev by device_node Sascha Hauer
2015-09-01  6:14 ` [PATCH 2/3] of_path: Allow pointing directly to the partition Sascha Hauer
2015-09-01  6:14 ` [PATCH 3/3] ARM: dts: directly point to partitions in the barebox, environment binding Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox