Skip to contentSkip to conversation

Implement SoC driver for Vybrid

PATCH Superseded Sanchayan Maity 4 participants 15 messages May 20, 2016 – Jun 9, 2016

Subsystems (2)

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v3 cover Implement SoC driver for Vybrid

Hello,

This third patch series is rebased on top of shawn's for-next branch and tested on Colibri Vybrid VF50 and VF61 modules.

This patchset implements SoC bus support for Freescale Vybrid platform, implementing the following
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-soc

This a reworked version of an older patchset series posted in June 2015 which was at v5 then [1]. Since the NVMEM framework was then getting introduced, we decided that first a NVMEM driver for OCOTP peripheral being in place would be better.

Compared to the older revisions, this driver now relies on NVMEM consumer API using the NVMEM based vf610_ocotp driver which has already been in mainline for a while now.

One point on which we were not sure here is whether we really should introduce a new Kconfig symbol as being introduced here. While we could just enable it when SOC_VF610 is selected, this however would introduce circular dependencies.

Feedback is most welcome.

@Rob Herring
Does this patchset address the concerns you had?

Changes since v2:
1. Remove syscon_regmap_read_from_offset function and use the available syscon functions
2. Remove fsl,vf610-soc-bus and related bindings at SoC node level and introduce a fsl,vf610-soc node which is used by the driver to bind and has all the required phandles plus the NVMEM consumer handles.
3. Fix memory leak. of_node_put was not called for returned node of of_parse_phandle and memory allocated by nvmem_cell_read was not freed explicitly in return error paths.

Changes since v1:
Add device tree binding documentation.

2016: v2 patchset
https://lkml.org/lkml/2016/5/2/69

2016: v1 patchset
https://lkml.org/lkml/2016/3/11/132

[1] Older v5:
http://lkml.iu.edu/hypermail/linux/kernel/1506.0/03787.html
Even earlier versions:
Version 4 of the patchset can be found here
https://lkml.org/lkml/2015/5/26/199
Version 3 of the patchset can be found here
http://www.spinics.net/lists/arm-kernel/msg420847.html
Version 2 of the patchset can be found here
http://www.spinics.net/lists/devicetree/msg80654.html
Version 1 of the patchset can be found here
http://www.spinics.net/lists/devicetree/msg80257.html
The RFC version can be found here
https://lkml.org/lkml/2015/5/11/13

Regards,
Sanchayan.

Sanchayan Maity (4):
ARM: dts: vfxxx: Add device tree node for OCOTP
ARM: dts: vfxxx: Add On-Chip ROM node for Vybrid
ARM: dts: vfxxx: Add device tree node required by Vybrid SoC driver
soc: Add SoC driver for Freescale Vybrid platform

 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 arch/arm/boot/dts/vfxxx.dtsi                       |  29 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 6 files changed, 259 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Signature · 1 line
2.8.2
#1 lore raw

PATCH v3 1/4 ARM: dts: vfxxx: Add device tree node for OCOTP

Add device tree node for the OCOTP peripheral on Vybrid.

---
 arch/arm/boot/dts/vfxxx.dtsi | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
arch/arm/boot/dts/vfxxx.dtsi +16 -0
index 2c13ec6..0e34d44 100644
@@ -520,6 +520,22 @@
 				status = "disabled";
 			};
 
+			ocotp at 400a5000 {
+				compatible = "fsl,vf610-ocotp";
+				#address-cells = <1>;
+				#size-cells = <1>;
+				reg = <0x400a5000 0xCF0>;
+				clocks = <&clks VF610_CLK_OCOTP>;
+
+				ocotp_cfg0: cfg0 at 410 {
+					reg = <0x410 0x4>;
+				};
+
+				ocotp_cfg1: cfg1 at 420 {
+					reg = <0x420 0x4>;
+				};
+			};
+
 			snvs0: snvs at 400a7000 {
 			    compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd";
 				reg = <0x400a7000 0x2000>;
Signature · 1 line
2.8.2
#2 lore raw

PATCH v3 2/4 ARM: dts: vfxxx: Add On-Chip ROM node for Vybrid

In reply to Sanchayan Maity

Add a device tree node for the On-Chip ROM on Vybrid.

---
 arch/arm/boot/dts/vfxxx.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/boot/dts/vfxxx.dtsi +5 -0
index 0e34d44..6c5222e 100644
@@ -91,6 +91,11 @@
 		interrupt-parent = <&mscm_ir>;
 		ranges;
 
+		ocrom: ocrom at 00000000 {
+			compatible = "fsl,vf610-ocrom", "syscon";
+			reg = <0x00000000 0x18000>;
+		};
+
 		aips0: aips-bus at 40000000 {
 			compatible = "fsl,aips-bus", "simple-bus";
 			#address-cells = <1>;
Signature · 1 line
2.8.2
#3 lore raw

PATCH v3 3/4 ARM: dts: vfxxx: Add device tree node required by Vybrid SoC driver

In reply to Sanchayan Maity

Add a device tree node which will be used to bind the Vybrid SoC driver and provide information adhering to the following:
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-soc

---
 arch/arm/boot/dts/vfxxx.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)
arch/arm/boot/dts/vfxxx.dtsi +8 -0
index 6c5222e..24979d6 100644
@@ -770,5 +770,13 @@
 			compatible = "iio-hwmon";
 			io-channels = <&adc0 16>, <&adc1 16>;
 		};
+
+		vf610-soc {
+			compatible = "fsl,vf610-soc";
+			rom-revision = <&ocrom>;
+			mscm = <&mscm_cpucfg>;
+			nvmem-cells = <&ocotp_cfg0>, <&ocotp_cfg1>;
+			nvmem-cell-names = "cfg0", "cfg1";
+		};
 	};
 };
Signature · 1 line
2.8.2
#4 lore raw

PATCH v3 4/4 soc: Add SoC driver for Freescale Vybrid platform

In reply to Sanchayan Maity

This adds a SoC driver to be used by Freescale Vybrid SoC's. Driver utilises syscon and nvmem consumer API's to get the various register values needed and expose the SoC specific properties via sysfs.

A sample output from Colibri Vybrid VF61 is below:

root at colibri-vf:~# cd /sys/bus/soc/devices/soc0 root at colibri-vf:/sys/bus/soc/devices/soc0# ls
family machine power revision soc_id subsystem uevent
root at colibri-vf:/sys/bus/soc/devices/soc0# cat family Freescale Vybrid VF610
root at colibri-vf:/sys/bus/soc/devices/soc0# cat machine Freescale Vybrid
root at colibri-vf:/sys/bus/soc/devices/soc0# cat revision 00000013
root at colibri-vf:/sys/bus/soc/devices/soc0# cat soc_id df6472a6130f29d4

---
 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 5 files changed, 230 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +20 -0
new file mode 100644
index 0000000..338905d
@@ -0,0 +1,20 @@
+Vybrid System-on-Chip
+---------------------
+
+Required properties:
+
+- compatible: "fsl,vf610-soc"
+- rom-revision: phandle to the on-chip ROM node
+- mscm: phandle to the MSCM CPU configuration node
+- nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
+- nvmem-cell-names: should contain string names "cfg0" and "cfg1"
+
+Example:
+
+	vf610-soc {
+		compatible = "fsl,vf610-soc";
+		rom-revision = <&ocrom>;
+		mscm = <&mscm_cpucfg>;
+		nvmem-cells = <&ocotp_cfg0>, <&ocotp_cfg1>;
+		nvmem-cell-names = "cfg0", "cfg1";
+	};
drivers/soc/Kconfig +1 -0
index cb58ef0..4410eb7 100644
@@ -2,6 +2,7 @@ menu "SOC (System On Chip) specific Drivers"
 
 source "drivers/soc/bcm/Kconfig"
 source "drivers/soc/brcmstb/Kconfig"
+source "drivers/soc/fsl/Kconfig"
 source "drivers/soc/fsl/qe/Kconfig"
 source "drivers/soc/mediatek/Kconfig"
 source "drivers/soc/qcom/Kconfig"
drivers/soc/fsl/Kconfig new file +10 -0
new file mode 100644
index 0000000..029ea17
@@ -0,0 +1,10 @@
+#
+# Freescale SoC drivers
+
+config SOC_BUS_VF610
+	bool "SoC bus device for the Freescale Vybrid platform"
+	depends on NVMEM && NVMEM_VF610_OCOTP
+	select SOC_BUS
+	help
+	 Include support for the SoC bus on the Freescale Vybrid platform
+	 providing sysfs information about the module variant.
drivers/soc/fsl/Makefile +1 -0
index 203307f..afaf092 100644
@@ -2,5 +2,6 @@
 # Makefile for the Linux Kernel SOC fsl specific device drivers
 #
 
+obj-$(CONFIG_SOC_VF610)			+= soc-vf610.o
 obj-$(CONFIG_QUICC_ENGINE)		+= qe/
 obj-$(CONFIG_CPM)			+= qe/
drivers/soc/fsl/soc-vf610.c new file +198 -0

198 lines not on this page · raw message

Signature · 1 line
2.8.2
maintainer
#5 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Quoted 37 lines · Sanchayan Maity

This adds a SoC driver to be used by Freescale Vybrid SoC's. Driver utilises syscon and nvmem consumer API's to get the various register values needed and expose the SoC specific properties via sysfs.

A sample output from Colibri Vybrid VF61 is below:

root at colibri-vf:~# cd /sys/bus/soc/devices/soc0 root at colibri-vf:/sys/bus/soc/devices/soc0# ls
family machine power revision soc_id subsystem uevent
root at colibri-vf:/sys/bus/soc/devices/soc0# cat family Freescale Vybrid VF610
root at colibri-vf:/sys/bus/soc/devices/soc0# cat machine Freescale Vybrid
root at colibri-vf:/sys/bus/soc/devices/soc0# cat revision 00000013
root at colibri-vf:/sys/bus/soc/devices/soc0# cat soc_id df6472a6130f29d4

---
 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 5 files changed, 230 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +0 -0
new file mode 100644
index 0000000..338905d

Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt line 10

Quoted 10 lines
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +10 -0
@@ -0,0 +1,20 @@
+Vybrid System-on-Chip
+---------------------
+
+Required properties:
+
+- compatible: "fsl,vf610-soc"
+- rom-revision: phandle to the on-chip ROM node
+- mscm: phandle to the MSCM CPU configuration node
+- nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
+- nvmem-cell-names: should contain string names "cfg0" and "cfg1"

I still have similar concerns as the discussion on the last version. This version only proves that you aren't describing h/w, but rather just a collection of data that some driver wants.

A driver can just as easily look-up all the nodes directly that these phandles point to.

And as long as we have inconsistent use of soc_device, I don't want to see any compatible strings related to it.

Rob

#6 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Hello Rob,

Quoted 53 lines · Rob Herring
Quoted 37 lines · Sanchayan Maity

This adds a SoC driver to be used by Freescale Vybrid SoC's. Driver utilises syscon and nvmem consumer API's to get the various register values needed and expose the SoC specific properties via sysfs.

A sample output from Colibri Vybrid VF61 is below:

root at colibri-vf:~# cd /sys/bus/soc/devices/soc0 root at colibri-vf:/sys/bus/soc/devices/soc0# ls
family machine power revision soc_id subsystem uevent
root at colibri-vf:/sys/bus/soc/devices/soc0# cat family Freescale Vybrid VF610
root at colibri-vf:/sys/bus/soc/devices/soc0# cat machine Freescale Vybrid
root at colibri-vf:/sys/bus/soc/devices/soc0# cat revision 00000013
root at colibri-vf:/sys/bus/soc/devices/soc0# cat soc_id df6472a6130f29d4

---
 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 5 files changed, 230 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +0 -0
new file mode 100644
index 0000000..338905d

Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt line 10

Quoted 10 lines
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +10 -0
@@ -0,0 +1,20 @@
+Vybrid System-on-Chip
+---------------------
+
+Required properties:
+
+- compatible: "fsl,vf610-soc"
+- rom-revision: phandle to the on-chip ROM node
+- mscm: phandle to the MSCM CPU configuration node
+- nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
+- nvmem-cell-names: should contain string names "cfg0" and "cfg1"

I still have similar concerns as the discussion on the last version. This version only proves that you aren't describing h/w, but rather just a collection of data that some driver wants.

Quoted 2 lines

A driver can just as easily look-up all the nodes directly that these phandles point to.

Agreed, that we can look up all the nodes directly that these phandles refer to but I would still need a DT entry to bind to. While I could bind to existing nodes like mscm cpucfg but that doesn't seem right.

The very first approach that we had taken was to integrate this functionality in mach-vf610.c code under mach-imx
http://www.spinics.net/lists/devicetree/msg80654.html

and then it was recommended to migrate this to drivers/soc where we did use phandles or direct look up via compatible strings

http://www.spinics.net/lists/arm-kernel/msg420847.html

and

http://lkml.iu.edu/hypermail/linux/kernel/1506.0/03787.html

There hasn't been a consensus since v1.

Quoted 4 lines

And as long as we have inconsistent use of soc_device, I don't want to see any compatible strings related to it.

Regards,
Sanchayan.

maintainer
#7 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Quoted 59 lines · On Mon, May 23, 2016 at 11:14 PM, <[email protected]> wrote:

Hello Rob,

Quoted 53 lines · Rob Herring
Quoted 37 lines · Sanchayan Maity

This adds a SoC driver to be used by Freescale Vybrid SoC's. Driver utilises syscon and nvmem consumer API's to get the various register values needed and expose the SoC specific properties via sysfs.

A sample output from Colibri Vybrid VF61 is below:

root at colibri-vf:~# cd /sys/bus/soc/devices/soc0 root at colibri-vf:/sys/bus/soc/devices/soc0# ls
family machine power revision soc_id subsystem uevent
root at colibri-vf:/sys/bus/soc/devices/soc0# cat family Freescale Vybrid VF610
root at colibri-vf:/sys/bus/soc/devices/soc0# cat machine Freescale Vybrid
root at colibri-vf:/sys/bus/soc/devices/soc0# cat revision 00000013
root at colibri-vf:/sys/bus/soc/devices/soc0# cat soc_id df6472a6130f29d4

---
 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 5 files changed, 230 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +0 -0
new file mode 100644
index 0000000..338905d

Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt line 10

Quoted 10 lines
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +10 -0
@@ -0,0 +1,20 @@
+Vybrid System-on-Chip
+---------------------
+
+Required properties:
+
+- compatible: "fsl,vf610-soc"
+- rom-revision: phandle to the on-chip ROM node
+- mscm: phandle to the MSCM CPU configuration node
+- nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
+- nvmem-cell-names: should contain string names "cfg0" and "cfg1"

I still have similar concerns as the discussion on the last version. This version only proves that you aren't describing h/w, but rather just a collection of data that some driver wants.

Quoted 2 lines

A driver can just as easily look-up all the nodes directly that these phandles point to.

Quoted 7 lines

Agreed, that we can look up all the nodes directly that these phandles refer to but I would still need a DT entry to bind to. While I could bind to existing nodes like mscm cpucfg but that doesn't seem right.

The very first approach that we had taken was to integrate this functionality in mach-vf610.c code under mach-imx
http://www.spinics.net/lists/devicetree/msg80654.html

Yes, everyone wants to move all platform devices in the kernel to a corresponding DT node. The result is often making up nodes to do this. It's the same thing with cpufreq.

Quoted 2 lines

and then it was recommended to migrate this to drivers/soc where we did use phandles or direct look up via compatible strings

The location in the tree is an orthogonal issue. You could move it and use of_machine_is_compatible without any DT change.

The primary issue I have here is how do we bind soc_bus to DT in a consistent way. Sorry, but vybrid specific patches alone are never going to solve that issue.

Quoted 7 lines

http://www.spinics.net/lists/arm-kernel/msg420847.html

and

http://lkml.iu.edu/hypermail/linux/kernel/1506.0/03787.html

There hasn't been a consensus since v1.

I actually prefer your previous version binding soc_bus to the root bus node to this version. I think that is closer to the right direction. After all, pretty much everything is an SOC and every SOC has an SOC bus. Pretty much every SOC and board have revisions and may need to expose that revision info as well. We have to do this consistently which means having a default implementation for simple-bus that is not opt-in.

Alternatively, we should just deprecate soc_bus and come up a different solution. Either way, I think we have a half implemented solution currently.

Rob

#8 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Quoted 75 lines · CEST Rob Herring
Quoted 59 lines · On Mon, May 23, 2016 at 11:14 PM, <[email protected]> wrote:

Hello Rob,

Quoted 53 lines · Rob Herring
Quoted 37 lines · Sanchayan Maity

This adds a SoC driver to be used by Freescale Vybrid SoC's. Driver utilises syscon and nvmem consumer API's to get the various register values needed and expose the SoC specific properties via sysfs.

A sample output from Colibri Vybrid VF61 is below:

root at colibri-vf:~# cd /sys/bus/soc/devices/soc0 root at colibri-vf:/sys/bus/soc/devices/soc0# ls
family machine power revision soc_id subsystem uevent
root at colibri-vf:/sys/bus/soc/devices/soc0# cat family Freescale Vybrid VF610
root at colibri-vf:/sys/bus/soc/devices/soc0# cat machine Freescale Vybrid
root at colibri-vf:/sys/bus/soc/devices/soc0# cat revision 00000013
root at colibri-vf:/sys/bus/soc/devices/soc0# cat soc_id df6472a6130f29d4

---
 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 5 files changed, 230 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +0 -0
new file mode 100644
index 0000000..338905d

Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt line 10

Quoted 10 lines
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +10 -0
@@ -0,0 +1,20 @@
+Vybrid System-on-Chip
+---------------------
+
+Required properties:
+
+- compatible: "fsl,vf610-soc"
+- rom-revision: phandle to the on-chip ROM node
+- mscm: phandle to the MSCM CPU configuration node
+- nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
+- nvmem-cell-names: should contain string names "cfg0" and "cfg1"

I still have similar concerns as the discussion on the last version. This version only proves that you aren't describing h/w, but rather just a collection of data that some driver wants.

Quoted 2 lines

A driver can just as easily look-up all the nodes directly that these phandles point to.

Quoted 7 lines

Agreed, that we can look up all the nodes directly that these phandles refer to but I would still need a DT entry to bind to. While I could bind to existing nodes like mscm cpucfg but that doesn't seem right.

The very first approach that we had taken was to integrate this functionality in mach-vf610.c code under mach-imx
http://www.spinics.net/lists/devicetree/msg80654.html

Yes, everyone wants to move all platform devices in the kernel to a corresponding DT node. The result is often making up nodes to do this. It's the same thing with cpufreq.

Quoted 2 lines

and then it was recommended to migrate this to drivers/soc where we did use phandles or direct look up via compatible strings

Quoted 6 lines

The location in the tree is an orthogonal issue. You could move it and use of_machine_is_compatible without any DT change.

The primary issue I have here is how do we bind soc_bus to DT in a consistent way. Sorry, but vybrid specific patches alone are never going to solve that issue.

On a lot of chips, there is actually one device that holds the soc identification registers, and that can easily be used for this purpose.

Originally, the soc_device was meant to be the parent device for all other on-chip devices and be bound to the DT node that holds that bus (unlike things like external clocks that are not part of the SoC).

However, that model has never really caught on, and we have stopped doing this for new chips. Instead, the soc_device now somewhat stands for itself.

Quoted 16 lines
Quoted 7 lines

http://www.spinics.net/lists/arm-kernel/msg420847.html

and

http://lkml.iu.edu/hypermail/linux/kernel/1506.0/03787.html

There hasn't been a consensus since v1.

I actually prefer your previous version binding soc_bus to the root bus node to this version. I think that is closer to the right direction. After all, pretty much everything is an SOC and every SOC has an SOC bus. Pretty much every SOC and board have revisions and may need to expose that revision info as well. We have to do this consistently which means having a default implementation for simple-bus that is not opt-in.

Quoted 3 lines

Alternatively, we should just deprecate soc_bus and come up a different solution. Either way, I think we have a half implemented solution currently.

We have had several drivers in the past that needed to figure out whether they were running on a particular version of a SoC, and that could not get this information from the DT. My suggested solution for this is to provide an API from soc_bus that compares a glob string to the available soc_device instance(s) in order to figure out whether we are running on a particular kind of system.

Arnd

#9 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

In reply to Rob Herring

Hello Rob,

Quoted 86 lines · Rob Herring
Quoted 59 lines · On Mon, May 23, 2016 at 11:14 PM, <[email protected]> wrote:

Hello Rob,

Quoted 53 lines · Rob Herring
Quoted 37 lines · Sanchayan Maity

This adds a SoC driver to be used by Freescale Vybrid SoC's. Driver utilises syscon and nvmem consumer API's to get the various register values needed and expose the SoC specific properties via sysfs.

A sample output from Colibri Vybrid VF61 is below:

root at colibri-vf:~# cd /sys/bus/soc/devices/soc0 root at colibri-vf:/sys/bus/soc/devices/soc0# ls
family machine power revision soc_id subsystem uevent
root at colibri-vf:/sys/bus/soc/devices/soc0# cat family Freescale Vybrid VF610
root at colibri-vf:/sys/bus/soc/devices/soc0# cat machine Freescale Vybrid
root at colibri-vf:/sys/bus/soc/devices/soc0# cat revision 00000013
root at colibri-vf:/sys/bus/soc/devices/soc0# cat soc_id df6472a6130f29d4

---
 .../bindings/arm/freescale/fsl,vf610-soc.txt       |  20 +++
 drivers/soc/Kconfig                                |   1 +
 drivers/soc/fsl/Kconfig                            |  10 ++
 drivers/soc/fsl/Makefile                           |   1 +
 drivers/soc/fsl/soc-vf610.c                        | 198 +++++++++++++++++++++
 5 files changed, 230 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt
 create mode 100644 drivers/soc/fsl/Kconfig
 create mode 100644 drivers/soc/fsl/soc-vf610.c
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +0 -0
new file mode 100644
index 0000000..338905d

Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt line 10

Quoted 10 lines
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-soc.txt new file +10 -0
@@ -0,0 +1,20 @@
+Vybrid System-on-Chip
+---------------------
+
+Required properties:
+
+- compatible: "fsl,vf610-soc"
+- rom-revision: phandle to the on-chip ROM node
+- mscm: phandle to the MSCM CPU configuration node
+- nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
+- nvmem-cell-names: should contain string names "cfg0" and "cfg1"

I still have similar concerns as the discussion on the last version. This version only proves that you aren't describing h/w, but rather just a collection of data that some driver wants.

Quoted 2 lines

A driver can just as easily look-up all the nodes directly that these phandles point to.

Quoted 7 lines

Agreed, that we can look up all the nodes directly that these phandles refer to but I would still need a DT entry to bind to. While I could bind to existing nodes like mscm cpucfg but that doesn't seem right.

The very first approach that we had taken was to integrate this functionality in mach-vf610.c code under mach-imx
http://www.spinics.net/lists/devicetree/msg80654.html

Yes, everyone wants to move all platform devices in the kernel to a corresponding DT node. The result is often making up nodes to do this. It's the same thing with cpufreq.

Quoted 2 lines

and then it was recommended to migrate this to drivers/soc where we did use phandles or direct look up via compatible strings

The location in the tree is an orthogonal issue. You could move it and use of_machine_is_compatible without any DT change.

The primary issue I have here is how do we bind soc_bus to DT in a consistent way. Sorry, but vybrid specific patches alone are never going to solve that issue.

Quoted 4 lines

http://www.spinics.net/lists/arm-kernel/msg420847.html

and

Quoted 7 lines
Quoted 3 lines

http://lkml.iu.edu/hypermail/linux/kernel/1506.0/03787.html

There hasn't been a consensus since v1.

I actually prefer your previous version binding soc_bus to the root bus node to this version. I think that is closer to the right direction.

So if I understand correctly, the binding at the SoC level is fine. Keeping that but removing the additional made-up properties, viz. below

rom-revision: phandle to the on-chip ROM node
mscm: phandle to the MSCM CPU configuration node
nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

would be fine?

We would have something similar to here
http://www.spinics.net/lists/devicetree/msg80655.html

but now with the DT binding under SoC bus.

Regards,
Sanchayan.

Quoted 11 lines

After all, pretty much everything is an SOC and every SOC has an SOC bus. Pretty much every SOC and board have revisions and may need to expose that revision info as well. We have to do this consistently which means having a default implementation for simple-bus that is not opt-in.

Alternatively, we should just deprecate soc_bus and come up a different solution. Either way, I think we have a half implemented solution currently.

Rob

#10 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Quoted 9 lines · CEST maitysanchayan at gmail.com

So if I understand correctly, the binding at the SoC level is fine. Keeping that but removing the additional made-up properties, viz. below

rom-revision: phandle to the on-chip ROM node
mscm: phandle to the MSCM CPU configuration node
nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

Quoted 7 lines

would be fine?

We would have something similar to here
http://www.spinics.net/lists/devicetree/msg80655.html

but now with the DT binding under SoC bus.

You look up the OTP device as a syscon here, which seems odd since there is already an nvmem driver for it. Shouldn't you use the nvmem API for that?

Arnd

#11 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Quoted 19 lines · Arnd Bergmann
Quoted 9 lines · CEST maitysanchayan at gmail.com

So if I understand correctly, the binding at the SoC level is fine. Keeping that but removing the additional made-up properties, viz. below

rom-revision: phandle to the on-chip ROM node
mscm: phandle to the MSCM CPU configuration node
nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

Quoted 7 lines

would be fine?

We would have something similar to here
http://www.spinics.net/lists/devicetree/msg80655.html

but now with the DT binding under SoC bus.

Quoted 5 lines

You look up the OTP device as a syscon here, which seems odd since there is already an nvmem driver for it. Shouldn't you use the nvmem API for that?

Arnd

I need the following

nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

to be able to use the NVMEM consumer API.

If I can put them at SoC node level then I certainly can use the NVMEM API.

Regards,
Sanchayan.

#12 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Quoted 24 lines · maitysanchayan at gmail.com
Quoted 23 lines · Arnd Bergmann
Quoted 9 lines · CEST maitysanchayan at gmail.com

So if I understand correctly, the binding at the SoC level is fine. Keeping that but removing the additional made-up properties, viz. below

rom-revision: phandle to the on-chip ROM node
mscm: phandle to the MSCM CPU configuration node
nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

Quoted 7 lines

would be fine?

We would have something similar to here
http://www.spinics.net/lists/devicetree/msg80655.html

but now with the DT binding under SoC bus.

You look up the OTP device as a syscon here, which seems odd since there is already an nvmem driver for it. Shouldn't you use the nvmem API for that?

Quoted 8 lines
Quoted 1 line

Arnd

I need the following

nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

to be able to use the NVMEM consumer API.

I did not tested it, but it seems the NVMEM consumer API has some kind of non-DT fallback:
http://lxr.free-electrons.com/source/drivers/nvmem/core.c#L827

Right now, it seems to me that it does not handle the case where we have a of_node but don't want to use it... You might need to add some extra handling if there is a of_node without nvmem-cell-names/nvmem-cells, and fall back to nvmem_cell_get_from_list.

--
Stefan

#13 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

Hello Stefan,

Quoted 34 lines · Stefan Agner
Quoted 24 lines · maitysanchayan at gmail.com
Quoted 23 lines · Arnd Bergmann
Quoted 9 lines · CEST maitysanchayan at gmail.com

So if I understand correctly, the binding at the SoC level is fine. Keeping that but removing the additional made-up properties, viz. below

rom-revision: phandle to the on-chip ROM node
mscm: phandle to the MSCM CPU configuration node
nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

Quoted 7 lines

would be fine?

We would have something similar to here
http://www.spinics.net/lists/devicetree/msg80655.html

but now with the DT binding under SoC bus.

You look up the OTP device as a syscon here, which seems odd since there is already an nvmem driver for it. Shouldn't you use the nvmem API for that?

Quoted 8 lines
Quoted 1 line

Arnd

I need the following

nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

to be able to use the NVMEM consumer API.

Quoted 9 lines

I did not tested it, but it seems the NVMEM consumer API has some kind of non-DT fallback:
http://lxr.free-electrons.com/source/drivers/nvmem/core.c#L827

Right now, it seems to me that it does not handle the case where we have a of_node but don't want to use it... You might need to add some extra handling if there is a of_node without nvmem-cell-names/nvmem-cells, and fall back to nvmem_cell_get_from_list.

I have already looked at the core nvmem code for options but wanted to avoid any additons if possible.

However if adding the nvmem properties at the SoC node level is frowned upon I will make the necessary changes required.

Regards,
Sanchayan.

#14 lore raw

Re: [PATCH v3 4/4] soc: Add SoC driver for Freescale Vybrid platform

In reply to [email protected]

Hello Rob,

Quoted 26 lines · maitysanchayan at gmail.com
Quoted 19 lines · Arnd Bergmann
Quoted 9 lines · CEST maitysanchayan at gmail.com

So if I understand correctly, the binding at the SoC level is fine. Keeping that but removing the additional made-up properties, viz. below

rom-revision: phandle to the on-chip ROM node
mscm: phandle to the MSCM CPU configuration node
nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

Quoted 7 lines

would be fine?

We would have something similar to here
http://www.spinics.net/lists/devicetree/msg80655.html

but now with the DT binding under SoC bus.

Quoted 5 lines

You look up the OTP device as a syscon here, which seems odd since there is already an nvmem driver for it. Shouldn't you use the nvmem API for that?

Arnd

Quoted 9 lines

I need the following

nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

to be able to use the NVMEM consumer API.

If I can put them at SoC node level then I certainly can use the NVMEM API.

Would the following be acceptable at the SoC node level

Quoted 2 lines

nvmem-cells: phandles to two OCOTP child nodes ocotp_cfg0 and ocotp_cfg1
nvmem-cell-names: should contain string names "cfg0" and "cfg1"

Regards,
Sanchayan.